@platform-mesh/portal-ui-lib 0.52.0 → 0.52.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/platform-mesh-portal-ui-wc.js +41 -40
- package/fesm2022/platform-mesh-portal-ui-lib-models.mjs.map +1 -1
- package/fesm2022/platform-mesh-portal-ui-lib-portal-options.mjs +70 -41
- package/fesm2022/platform-mesh-portal-ui-lib-portal-options.mjs.map +1 -1
- package/fesm2022/platform-mesh-portal-ui-lib-services.mjs +70 -25
- package/fesm2022/platform-mesh-portal-ui-lib-services.mjs.map +1 -1
- package/fesm2022/platform-mesh-portal-ui-lib-utils.mjs +15 -1
- package/fesm2022/platform-mesh-portal-ui-lib-utils.mjs.map +1 -1
- package/package.json +1 -1
- package/types/platform-mesh-portal-ui-lib-models.d.ts +48 -31
- package/types/platform-mesh-portal-ui-lib-portal-options.d.ts +4 -5
- package/types/platform-mesh-portal-ui-lib-services.d.ts +42 -4
- package/types/platform-mesh-portal-ui-lib-utils.d.ts +16 -2
|
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { inject, Injectable } from '@angular/core';
|
|
3
3
|
import { LuigiCoreService, AuthService, ConfigService, EnvConfigService } from '@openmfp/portal-ui-lib';
|
|
4
4
|
import { kcpRootOrgsPath, ALL_NAMESPACE } from '@platform-mesh/portal-ui-lib/models';
|
|
5
|
-
import { HttpHeaders } from '@angular/common/http';
|
|
5
|
+
import { HttpHeaders, HttpClient } from '@angular/common/http';
|
|
6
6
|
import { ApolloLink, Observable, split, InMemoryCache } from '@apollo/client/core';
|
|
7
7
|
import { SetContextLink } from '@apollo/client/link/context';
|
|
8
8
|
import { getMainDefinition } from '@apollo/client/utilities';
|
|
@@ -10,10 +10,10 @@ import { Apollo, gql } from 'apollo-angular';
|
|
|
10
10
|
import { HttpLink } from 'apollo-angular/http';
|
|
11
11
|
import { print } from 'graphql';
|
|
12
12
|
import { createClient } from 'graphql-sse';
|
|
13
|
+
import { of, throwError, Subject, filter, exhaustMap, EMPTY } from 'rxjs';
|
|
14
|
+
import { catchError, map, shareReplay } from 'rxjs/operators';
|
|
13
15
|
import { isNamespacedResource, getValueByPath, buildResourcePath, getResourceValueByJsonPath, buildGraphQLInputTypeName, stripTypename } from '@platform-mesh/portal-ui-lib/utils';
|
|
14
16
|
import * as gqlBuilder from 'gql-query-builder';
|
|
15
|
-
import { throwError, Subject, filter, exhaustMap, EMPTY } from 'rxjs';
|
|
16
|
-
import { map, catchError, shareReplay } from 'rxjs/operators';
|
|
17
17
|
|
|
18
18
|
class GatewayService {
|
|
19
19
|
constructor() {
|
|
@@ -47,10 +47,10 @@ class GatewayService {
|
|
|
47
47
|
extractKcpPath(gatewayUrl) {
|
|
48
48
|
return gatewayUrl.match(new RegExp(`(${kcpRootOrgsPath}[^/]*)`))?.[1] || '';
|
|
49
49
|
}
|
|
50
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
51
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
50
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: GatewayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
51
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: GatewayService, providedIn: 'root' }); }
|
|
52
52
|
}
|
|
53
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: GatewayService, decorators: [{
|
|
54
54
|
type: Injectable,
|
|
55
55
|
args: [{ providedIn: 'root' }]
|
|
56
56
|
}] });
|
|
@@ -197,16 +197,61 @@ class ApolloFactory {
|
|
|
197
197
|
cache,
|
|
198
198
|
};
|
|
199
199
|
}
|
|
200
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
201
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
200
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: ApolloFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
201
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: ApolloFactory, providedIn: 'root' }); }
|
|
202
202
|
}
|
|
203
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
203
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: ApolloFactory, decorators: [{
|
|
204
204
|
type: Injectable,
|
|
205
205
|
args: [{
|
|
206
206
|
providedIn: 'root',
|
|
207
207
|
}]
|
|
208
208
|
}] });
|
|
209
209
|
|
|
210
|
+
class InstancePermissionsService {
|
|
211
|
+
constructor() {
|
|
212
|
+
this.httpClient = inject(HttpClient);
|
|
213
|
+
this.luigiCoreService = inject(LuigiCoreService);
|
|
214
|
+
}
|
|
215
|
+
requestChecks(nodeContext, permissionsDefinition, instances) {
|
|
216
|
+
if (!permissionsDefinition?.entityActions.length || !instances.length) {
|
|
217
|
+
return of([]);
|
|
218
|
+
}
|
|
219
|
+
const organization = nodeContext.organization;
|
|
220
|
+
const accountPath = nodeContext.accountPath;
|
|
221
|
+
const token = this.luigiCoreService.getAuthData()?.idToken;
|
|
222
|
+
if (!organization || !token) {
|
|
223
|
+
return of([]);
|
|
224
|
+
}
|
|
225
|
+
const checks = instances.map((instance) => ({
|
|
226
|
+
resource: permissionsDefinition.resource,
|
|
227
|
+
group: permissionsDefinition.group,
|
|
228
|
+
name: instance.name,
|
|
229
|
+
namespace: instance.namespace,
|
|
230
|
+
actions: permissionsDefinition.entityActions,
|
|
231
|
+
}));
|
|
232
|
+
const body = {
|
|
233
|
+
organization,
|
|
234
|
+
accountPath,
|
|
235
|
+
checks,
|
|
236
|
+
};
|
|
237
|
+
return this.httpClient
|
|
238
|
+
.post('/rest/permissions/resource-check', body, { headers: { Authorization: `Bearer ${token}` } })
|
|
239
|
+
.pipe(catchError(() => of([])));
|
|
240
|
+
}
|
|
241
|
+
checkInstance(nodeContext, permissionsDefinition, instance) {
|
|
242
|
+
return this.requestChecks(nodeContext, permissionsDefinition, [instance]);
|
|
243
|
+
}
|
|
244
|
+
checkInstances(nodeContext, permissionsDefinition, instances) {
|
|
245
|
+
return this.requestChecks(nodeContext, permissionsDefinition, instances);
|
|
246
|
+
}
|
|
247
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: InstancePermissionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
248
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: InstancePermissionsService, providedIn: 'root' }); }
|
|
249
|
+
}
|
|
250
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: InstancePermissionsService, decorators: [{
|
|
251
|
+
type: Injectable,
|
|
252
|
+
args: [{ providedIn: 'root' }]
|
|
253
|
+
}] });
|
|
254
|
+
|
|
210
255
|
class ResourceService {
|
|
211
256
|
constructor() {
|
|
212
257
|
this.apolloFactory = inject(ApolloFactory);
|
|
@@ -612,10 +657,10 @@ class ResourceService {
|
|
|
612
657
|
},
|
|
613
658
|
};
|
|
614
659
|
}
|
|
615
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
616
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
660
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: ResourceService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
661
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: ResourceService, providedIn: 'root' }); }
|
|
617
662
|
}
|
|
618
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
663
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: ResourceService, decorators: [{
|
|
619
664
|
type: Injectable,
|
|
620
665
|
args: [{
|
|
621
666
|
providedIn: 'root',
|
|
@@ -688,10 +733,10 @@ class AccountInfoService {
|
|
|
688
733
|
this.readCache.set(cacheKey, request$);
|
|
689
734
|
return request$;
|
|
690
735
|
}
|
|
691
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
692
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
736
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: AccountInfoService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
737
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: AccountInfoService, providedIn: 'root' }); }
|
|
693
738
|
}
|
|
694
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
739
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: AccountInfoService, decorators: [{
|
|
695
740
|
type: Injectable,
|
|
696
741
|
args: [{
|
|
697
742
|
providedIn: 'root',
|
|
@@ -724,10 +769,10 @@ class LogicalClusterService {
|
|
|
724
769
|
})
|
|
725
770
|
.pipe(map((res) => res.data.core_kcp_io.v1alpha1.LogicalCluster));
|
|
726
771
|
}
|
|
727
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
728
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
772
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: LogicalClusterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
773
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: LogicalClusterService, providedIn: 'root' }); }
|
|
729
774
|
}
|
|
730
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
775
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: LogicalClusterService, decorators: [{
|
|
731
776
|
type: Injectable,
|
|
732
777
|
args: [{
|
|
733
778
|
providedIn: 'root',
|
|
@@ -758,10 +803,10 @@ class ErrorHandlerService {
|
|
|
758
803
|
return (!!error?.message?.toLowerCase().includes('forbidden') ||
|
|
759
804
|
!!error?.message?.toLowerCase()?.includes('access denied'));
|
|
760
805
|
}
|
|
761
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
762
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
806
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: ErrorHandlerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
807
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: ErrorHandlerService, providedIn: 'root' }); }
|
|
763
808
|
}
|
|
764
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
809
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: ErrorHandlerService, decorators: [{
|
|
765
810
|
type: Injectable,
|
|
766
811
|
args: [{ providedIn: 'root' }]
|
|
767
812
|
}] });
|
|
@@ -807,10 +852,10 @@ class OrganizationReadyService {
|
|
|
807
852
|
checkOrganizationReady() {
|
|
808
853
|
this.check$.next();
|
|
809
854
|
}
|
|
810
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
811
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
855
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: OrganizationReadyService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
856
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: OrganizationReadyService, providedIn: 'root' }); }
|
|
812
857
|
}
|
|
813
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
858
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: OrganizationReadyService, decorators: [{
|
|
814
859
|
type: Injectable,
|
|
815
860
|
args: [{ providedIn: 'root' }]
|
|
816
861
|
}], ctorParameters: () => [] });
|
|
@@ -819,5 +864,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
819
864
|
* Generated bundle index. Do not edit.
|
|
820
865
|
*/
|
|
821
866
|
|
|
822
|
-
export { AccountInfoService, ApolloFactory, ErrorHandlerService, GatewayService, LogicalClusterService, OrganizationReadyService, ResourceService };
|
|
867
|
+
export { AccountInfoService, ApolloFactory, ErrorHandlerService, GatewayService, InstancePermissionsService, LogicalClusterService, OrganizationReadyService, ResourceService };
|
|
823
868
|
//# sourceMappingURL=platform-mesh-portal-ui-lib-services.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-mesh-portal-ui-lib-services.mjs","sources":["../../projects/lib/services/resource/gateway.service.ts","../../projects/lib/services/resource/apollo-factory.ts","../../projects/lib/services/resource/resource.service.ts","../../projects/lib/services/resource/account-info.queries.ts","../../projects/lib/services/resource/account-info.service.ts","../../projects/lib/services/resource/logical-cluster.queries.ts","../../projects/lib/services/resource/logical-cluster.service.ts","../../projects/lib/services/error-handler.service.ts","../../projects/lib/services/org-ready.service.ts","../../projects/lib/services/platform-mesh-portal-ui-lib-services.ts"],"sourcesContent":["import { ResourceNodeContext } from './resource-node-context';\nimport { Injectable, inject } from '@angular/core';\nimport { LuigiCoreService } from '@openmfp/portal-ui-lib';\nimport { kcpRootOrgsPath } from '@platform-mesh/portal-ui-lib/models';\n\n@Injectable({ providedIn: 'root' })\nexport class GatewayService {\n private luigiCoreService = inject(LuigiCoreService);\n\n public getGatewayUrl(\n nodeContext: ResourceNodeContext,\n readFromParentKcpPath = false,\n ) {\n const gatewayUrl = nodeContext.portalContext.crdGatewayApiUrl;\n const currentKcpPath = this.extractKcpPath(gatewayUrl);\n return gatewayUrl?.replace(\n currentKcpPath,\n this.resolveKcpPath(nodeContext, readFromParentKcpPath),\n );\n }\n\n public updateCrdGatewayUrlWithEntityPath(kcpPath: string) {\n const gatewayUrl =\n this.luigiCoreService.getGlobalContext().portalContext.crdGatewayApiUrl;\n const currentKcpPath = this.extractKcpPath(gatewayUrl);\n this.luigiCoreService.getGlobalContext().portalContext.crdGatewayApiUrl =\n gatewayUrl.replace(currentKcpPath, kcpPath);\n }\n\n public resolveKcpPath(\n nodeContext: ResourceNodeContext,\n readFromParentKcpPath = false,\n ): string {\n const gatewayUrl = nodeContext.portalContext.crdGatewayApiUrl;\n\n let kcpPath = this.extractKcpPath(gatewayUrl);\n if (nodeContext.kcpPath) {\n kcpPath = nodeContext.kcpPath;\n }\n\n if (readFromParentKcpPath) {\n const lastIndex = kcpPath.lastIndexOf(':');\n if (lastIndex !== -1) {\n kcpPath = kcpPath.slice(0, lastIndex);\n }\n }\n\n return kcpPath;\n }\n\n private extractKcpPath(gatewayUrl: string): string {\n return gatewayUrl.match(new RegExp(`(${kcpRootOrgsPath}[^/]*)`))?.[1] || '';\n }\n}\n","import { GatewayService } from './gateway.service';\nimport { ResourceNodeContext } from './resource-node-context';\nimport { HttpHeaders } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { AuthService, LuigiCoreService } from '@openmfp/portal-ui-lib';\nimport {\n type ApolloClientOptions,\n ApolloLink,\n Observable as ApolloObservable,\n FetchResult,\n InMemoryCache,\n Operation,\n split,\n} from '@apollo/client/core';\nimport { SetContextLink } from '@apollo/client/link/context';\nimport { getMainDefinition } from '@apollo/client/utilities';\nimport { Apollo } from 'apollo-angular';\nimport { HttpLink } from 'apollo-angular/http';\nimport { print } from 'graphql';\nimport { Client, ClientOptions, createClient } from 'graphql-sse';\n\nclass SSELink extends ApolloLink {\n private client: Client;\n\n constructor(options: ClientOptions) {\n super();\n this.client = createClient(options);\n }\n\n public override request(operation: Operation): ApolloObservable<FetchResult> {\n return new ApolloObservable((sink) => {\n return this.client.subscribe(\n { ...operation, query: print(operation.query) },\n {\n next: sink.next.bind(sink),\n complete: sink.complete.bind(sink),\n error: sink.error.bind(sink),\n },\n );\n });\n }\n}\n\nconst noopZone = {\n run: (fn: any) => fn(),\n runOutsideAngular: (fn: any) => fn(),\n} as any;\n\n// Long enough for an in-flight boot refresh to land, short enough to be\n// invisible next to a reload.\nconst AUTH_RETRY_DELAY_MS = 750;\n\nconst isUnauthorized = (error: unknown): boolean => {\n const err = error as {\n status?: number;\n statusCode?: number;\n networkError?: { status?: number; statusCode?: number };\n };\n return [\n err?.status,\n err?.statusCode,\n err?.networkError?.status,\n err?.networkError?.statusCode,\n ].includes(401);\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApolloFactory {\n private httpLink = inject(HttpLink);\n private gatewayService = inject(GatewayService);\n private authService = inject(AuthService);\n private luigiCoreService = inject(LuigiCoreService);\n\n public readonly apollo = (\n nodeContext: ResourceNodeContext,\n readFromParentKcpPath = false,\n ): Apollo =>\n new Apollo(\n noopZone,\n this.createApolloOptions(nodeContext, readFromParentKcpPath),\n );\n\n /**\n * The token must be resolved per request, never captured at client\n * creation: a client built before the shell delivers the token would\n * otherwise send \"Bearer undefined\" for its whole lifetime (silent 401s,\n * empty views until a hard reload). Prefer live sources over the node\n * context, which is a mount-time snapshot: in web-component bundles the\n * injected AuthService belongs to a separate injector that never runs a\n * refresh, so the shell's Luigi auth store is the only value that tracks\n * the boot refresh and later scheduled refreshes.\n */\n private resolveToken(nodeContext: ResourceNodeContext): string | undefined {\n return (\n this.authService.getToken() ||\n this.resolveLuigiStoreToken() ||\n nodeContext.token\n );\n }\n\n // Web components run on the shell window; iframe-based MFEs have no\n // window.Luigi, so the service throws and we fall through to the node\n // context. LuigiCoreService wraps the same shell global (stateless), so\n // it is injector-safe for web-component bundles.\n private resolveLuigiStoreToken(): string | undefined {\n try {\n return this.luigiCoreService.getAuthData()?.idToken;\n } catch {\n return undefined;\n }\n }\n\n /**\n * Retries an operation exactly once when the gateway answers 401. The\n * Authorization header is rebuilt by the context link on the retry, so a\n * request that raced ahead of token delivery (or whose token expired in\n * flight) heals itself instead of leaving the view empty until a manual\n * reload. 401 means the request was rejected before execution, so this\n * is safe for mutations too.\n */\n private createAuthRetryLink(): ApolloLink {\n return new ApolloLink((operation, forward) => {\n return new ApolloObservable((observer) => {\n let activeSub: { unsubscribe(): void } | undefined;\n let retryTimer: ReturnType<typeof setTimeout> | undefined;\n const attempt = (isRetry: boolean) => {\n // A retry replaces the failed subscription; release the previous\n // one explicitly instead of relying on the errored link having\n // closed it downstream.\n activeSub?.unsubscribe();\n activeSub = forward(operation).subscribe({\n next: observer.next.bind(observer),\n complete: observer.complete.bind(observer),\n error: (error: unknown) => {\n if (!isRetry && isUnauthorized(error)) {\n retryTimer = setTimeout(\n () => attempt(true),\n AUTH_RETRY_DELAY_MS,\n );\n return;\n }\n observer.error(error);\n },\n });\n };\n attempt(false);\n return () => {\n if (retryTimer !== undefined) {\n clearTimeout(retryTimer);\n }\n activeSub?.unsubscribe();\n };\n });\n });\n }\n\n private createApolloOptions(\n nodeContext: ResourceNodeContext,\n readFromParentKcpPath = false,\n ): ApolloClientOptions {\n const contextLink = new SetContextLink((prevContext) => {\n const baseHeaders =\n prevContext.headers instanceof HttpHeaders\n ? prevContext.headers\n : new HttpHeaders(prevContext.headers ?? {});\n\n return {\n ...prevContext,\n uri: () =>\n this.gatewayService.getGatewayUrl(nodeContext, readFromParentKcpPath),\n headers: baseHeaders\n .set('Authorization', `Bearer ${this.resolveToken(nodeContext)}`)\n .set('Accept', 'charset=utf-8'),\n };\n });\n\n const splitClient = split(\n ({ query }) => {\n const definition = getMainDefinition(query);\n return (\n definition.kind === 'OperationDefinition' &&\n definition.operation === 'subscription'\n );\n },\n new SSELink({\n url: () =>\n this.gatewayService.getGatewayUrl(nodeContext, readFromParentKcpPath),\n headers: () => ({\n Authorization: `Bearer ${this.resolveToken(nodeContext)}`,\n }),\n }),\n this.httpLink.create({}),\n );\n\n // Retry sits outermost so a retry re-runs the context link and picks\n // up a freshly resolved token.\n const link = ApolloLink.from([\n this.createAuthRetryLink(),\n contextLink,\n splitClient,\n ]);\n const cache = new InMemoryCache();\n\n return {\n link,\n cache,\n };\n }\n}\n","import {\n ReadResources,\n ReadResourcesPagination,\n ReadResourcesParams,\n ReadResourcesResult,\n ReadResourcesSubscriptionResult,\n} from '../read-resources/read-resources';\nimport { ApolloFactory } from './apollo-factory';\nimport { ResourceNodeContext } from './resource-node-context';\nimport { Injectable, inject } from '@angular/core';\nimport { TypedDocumentNode } from '@apollo/client/core';\nimport { LuigiCoreService } from '@openmfp/portal-ui-lib';\nimport {\n ALL_NAMESPACE,\n Resource,\n ResourceDefinition,\n ResourceListResult,\n ResourcePagination,\n ResourceSubscriptionResult,\n} from '@platform-mesh/portal-ui-lib/models';\nimport {\n buildGraphQLInputTypeName,\n buildResourcePath,\n getResourceValueByJsonPath,\n getValueByPath,\n isNamespacedResource,\n stripTypename,\n} from '@platform-mesh/portal-ui-lib/utils';\nimport { gql } from 'apollo-angular';\nimport type {\n Fields,\n NestedField,\n QueryBuilderOptions,\n VariableOptions,\n} from 'gql-query-builder';\nimport * as gqlBuilder from 'gql-query-builder';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\ninterface ResourceResponseError extends Record<string, any> {\n message: string;\n}\n\nexport interface ResourceRequestParams {\n entity: string;\n version: string;\n apiGroup?: string;\n}\n\nexport interface ListOptions {\n readFromParentKcpPath?: boolean;\n pagination?: ResourcePagination;\n variables?: VariableOptions;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ResourceService {\n private apolloFactory = inject(ApolloFactory);\n private luigiCoreService = inject(LuigiCoreService);\n\n read(\n resourceId: string,\n params: ResourceRequestParams,\n fieldsOrRawQuery: any[] | string,\n nodeContext: ResourceNodeContext,\n readFromParentKcpPath: boolean = true,\n ): Observable<Resource> {\n const isNamespaced = isNamespacedResource(nodeContext);\n const namespace = this.getNamespace(nodeContext);\n\n let query: string | TypedDocumentNode<any, any> = this.resolveReadQuery(\n params,\n fieldsOrRawQuery,\n resourceId,\n isNamespaced ? namespace : undefined,\n );\n\n query = this.parseGQLQuery(query);\n\n return this.apolloFactory\n .apollo(nodeContext, readFromParentKcpPath)\n .query({\n query,\n variables: {\n name: resourceId,\n ...(isNamespaced && {\n namespace: namespace,\n }),\n },\n })\n .pipe(\n map((res) =>\n getValueByPath<any, any>(res.data, buildResourcePath(params, '.')),\n ),\n );\n }\n\n private resolveReadQuery(\n params: ResourceRequestParams,\n fieldsOrRawQuery: any[] | string,\n resourceId: string,\n namespace: string | undefined,\n ) {\n if (fieldsOrRawQuery instanceof Array) {\n const { entity, version, apiGroup } = params;\n const queryFields = [\n {\n operation: entity,\n variables: {\n name: { value: resourceId, type: 'String!' },\n ...(namespace && {\n namespace: { value: namespace, type: 'String' },\n }),\n },\n fields: fieldsOrRawQuery,\n },\n ];\n\n const queryOptions = this.calcQueryOptions(queryFields, [\n { operation: apiGroup },\n { operation: version },\n ]);\n return gqlBuilder.query(queryOptions).query;\n } else {\n return fieldsOrRawQuery;\n }\n }\n\n list(\n operation: string,\n fieldsOrRawQuery: any[] | string,\n nodeContext: ResourceNodeContext,\n options: ListOptions = {},\n ): Observable<ResourceListResult | any> {\n const {\n readFromParentKcpPath = false,\n pagination,\n variables: extraVariables,\n } = options;\n\n const isNamespaced = isNamespacedResource(nodeContext);\n const variables = {\n ...(isNamespaced && {\n namespace: { type: 'String', value: this.getNamespace(nodeContext) },\n }),\n ...(pagination?.limit && {\n limit: { type: 'Int', value: pagination?.limit },\n }),\n ...(pagination?.continue && {\n continue: { type: 'String', value: pagination?.continue },\n }),\n ...extraVariables,\n };\n\n const resourceDefinition = nodeContext.resourceDefinition;\n if (!resourceDefinition) {\n return throwError(() => new Error('Resource definition is required'));\n }\n\n return fieldsOrRawQuery instanceof Array\n ? this.listWithFields(\n resourceDefinition,\n fieldsOrRawQuery,\n nodeContext,\n readFromParentKcpPath,\n variables,\n )\n : this.listWithRawQuery(\n operation,\n fieldsOrRawQuery,\n nodeContext,\n readFromParentKcpPath,\n variables,\n );\n }\n\n private getResourceReadyStatus(\n resource: Resource,\n nodeContext: ResourceNodeContext,\n ) {\n const readyCondition = nodeContext.resourceDefinition?.readyCondition;\n if (readyCondition) {\n return getResourceValueByJsonPath(resource, readyCondition);\n }\n\n return true;\n }\n\n private listWithFields(\n resourceDefinition: ResourceDefinition,\n fields: any[],\n nodeContext: ResourceNodeContext,\n readFromParentKcpPath: boolean,\n variables: VariableOptions,\n ): Observable<ResourceListResult> {\n const { apiGroup, entityCollection, version } = resourceDefinition;\n const queryFields = [\n {\n operation: entityCollection,\n variables,\n fields: [\n 'resourceVersion',\n 'remainingItemCount',\n 'continue',\n { items: fields },\n ],\n },\n ];\n const queryOptions = this.calcQueryOptions(queryFields, [\n { operation: apiGroup },\n { operation: version },\n ]);\n const listQuery = gqlBuilder.query(queryOptions);\n const query = this.parseGQLQuery(listQuery.query);\n\n return this.apolloFactory\n .apollo(nodeContext, readFromParentKcpPath)\n .query({\n query,\n variables: listQuery.variables,\n })\n .pipe(\n map((res: any): ResourceListResult => {\n const resourceListResult = getValueByPath<any, any>(\n res.data,\n buildResourcePath(\n { apiGroup, version, entity: entityCollection },\n '.',\n ),\n );\n if (!resourceListResult) {\n throw new Error('Resource list result not found');\n }\n\n return resourceListResult;\n }),\n map((resourceListResult) => {\n const processedResult: Resource[] = resourceListResult.items\n .map((resource) => ({\n ...resource,\n ready: this.getResourceReadyStatus(resource, nodeContext),\n }))\n .map((r) => ({\n ...r,\n id: r.metadata.name,\n isAvailable: this.isAvailable(r),\n accessibleName: this.getAccessibleName(r),\n }));\n return { ...resourceListResult, items: processedResult };\n }),\n );\n }\n\n isAvailable(item: Resource) {\n return !!item.ready && !item.metadata?.deletionTimestamp;\n }\n\n getAccessibleName(item: Resource): string | undefined {\n if (item.metadata?.deletionTimestamp) {\n return 'Resource is pending deletion';\n } else if (!item.ready) {\n return 'Resource is not ready';\n }\n\n return undefined;\n }\n\n private listWithRawQuery(\n operation: string,\n rawQuery: string,\n nodeContext: ResourceNodeContext,\n readFromParentKcpPath: boolean,\n variables: VariableOptions,\n ): Observable<any> {\n const query = this.parseGQLQuery(rawQuery);\n return this.apolloFactory\n .apollo(nodeContext, readFromParentKcpPath)\n .query({\n query,\n variables: this.normalizeGqlBuilderVariables(variables),\n })\n .pipe(\n map(\n (res: any): Resource[] =>\n getValueByPath<any, any>(res.data, operation) ?? [],\n ),\n catchError((error) => {\n this.alertErrors(error);\n console.error('Error executing GraphQL query.', error);\n return throwError(() => error);\n }),\n );\n }\n\n resourceChangeSubscription(\n operation: string,\n fields: any[],\n nodeContext: ResourceNodeContext,\n resourceVersion: string,\n readFromParentKcpPath: boolean,\n ): Observable<ResourceSubscriptionResult | undefined> {\n const isNamespaced = isNamespacedResource(nodeContext);\n const variables = {\n ...(isNamespaced && {\n namespace: { type: 'String', value: this.getNamespace(nodeContext) },\n }),\n };\n const lowerCaseOperation = operation.toLowerCase();\n\n const subscriptionQuery = gqlBuilder.subscription({\n operation: lowerCaseOperation,\n fields: ['type', { object: fields }],\n variables: {\n ...variables,\n resourceVersion: {\n type: 'String',\n value: resourceVersion,\n },\n },\n });\n\n const query = this.parseGQLQuery(subscriptionQuery.query);\n\n return this.apolloFactory\n .apollo(nodeContext, readFromParentKcpPath)\n .subscribe({\n query,\n variables: subscriptionQuery.variables,\n })\n .pipe(\n map((res: any): ResourceSubscriptionResult | undefined => {\n const resource: ResourceSubscriptionResult | undefined =\n getValueByPath(res.data, lowerCaseOperation);\n if (resource) {\n resource.object.ready = this.getResourceReadyStatus(\n resource.object,\n nodeContext,\n );\n resource.object.id = resource.object.metadata.name;\n resource.object.isAvailable = this.isAvailable(resource.object);\n resource.object.accessibleName = this.getAccessibleName(\n resource.object,\n );\n }\n return resource;\n }),\n );\n }\n\n private alertErrors(res: ResourceResponseError) {\n this.luigiCoreService.showAlert({\n text: res.message,\n type: 'error',\n });\n }\n\n delete(\n resource: Resource,\n resourceDefinition: ResourceDefinition,\n nodeContext: ResourceNodeContext,\n readFromParentKcpPath: boolean = false,\n ) {\n const isNamespaced = isNamespacedResource(nodeContext);\n const { apiGroup, entity, version } = resourceDefinition;\n const fields = [\n {\n operation: `delete${entity}`,\n variables: {\n name: { type: 'String!', value: resource.metadata.name },\n ...(isNamespaced && {\n namespace: {\n type: 'String',\n value: this.getNamespace(nodeContext),\n },\n }),\n },\n fields: [],\n },\n ];\n const queryOptions = this.calcQueryOptions(fields, [\n { operation: apiGroup },\n { operation: version },\n ]);\n const mutation = gqlBuilder.mutation(queryOptions);\n const query = this.parseGQLQuery(mutation.query);\n\n return this.apolloFactory\n .apollo(nodeContext, readFromParentKcpPath)\n .mutate<void>({\n mutation: query,\n variables: mutation.variables,\n })\n .pipe(\n catchError((error) => {\n this.alertErrors(error);\n console.error('Error executing GraphQL query.', error);\n return throwError(() => error);\n }),\n );\n }\n\n create(\n resource: Resource,\n resourceDefinition: ResourceDefinition,\n nodeContext: ResourceNodeContext,\n ) {\n const isNamespaced = isNamespacedResource(nodeContext);\n const { apiGroup, entity, version } = resourceDefinition;\n const namespace = this.getNamespace(nodeContext, resource);\n\n const mutationFields: any[] = [\n {\n operation: `create${entity}`,\n variables: {\n ...(isNamespaced && {\n namespace: { type: 'String', value: namespace },\n }),\n object: {\n type: `${buildGraphQLInputTypeName(apiGroup, version, entity)}!`,\n value: resource,\n },\n },\n fields: ['__typename'],\n },\n ];\n const queryOptions = this.calcQueryOptions(mutationFields, [\n { operation: apiGroup },\n { operation: version },\n ]);\n const mutation = gqlBuilder.mutation(queryOptions);\n const query = this.parseGQLQuery(mutation.query);\n\n return this.apolloFactory\n .apollo(nodeContext)\n .mutate({\n mutation: query,\n fetchPolicy: 'no-cache',\n variables: mutation.variables,\n })\n .pipe(\n catchError((error) => {\n this.alertErrors(error);\n console.error('Error executing GraphQL query.', error);\n return throwError(() => error);\n }),\n );\n }\n\n update(\n resource: Resource,\n resourceDefinition: ResourceDefinition,\n nodeContext: ResourceNodeContext,\n readFromParentKcpPath: boolean = false,\n fields: any[] = ['__typename'],\n ) {\n const isNamespaced = isNamespacedResource(nodeContext);\n const { apiGroup, entity, version } = resourceDefinition;\n const namespace = this.getNamespace(nodeContext);\n\n const cleanResource = stripTypename(resource);\n\n const mutationFields: any[] = [\n {\n operation: `update${entity}`,\n variables: {\n ...(isNamespaced && {\n namespace: { type: 'String', value: namespace },\n }),\n name: { type: 'String!', value: resource.metadata.name },\n object: {\n type: `${buildGraphQLInputTypeName(apiGroup, version, entity)}!`,\n value: cleanResource,\n },\n },\n fields: fields,\n },\n ];\n const queryOptions = this.calcQueryOptions(mutationFields, [\n { operation: apiGroup },\n { operation: version },\n ]);\n const mutation = gqlBuilder.mutation(queryOptions);\n const query = this.parseGQLQuery(mutation.query);\n\n return this.apolloFactory\n .apollo(nodeContext, readFromParentKcpPath)\n .mutate({\n mutation: query,\n fetchPolicy: 'no-cache',\n variables: mutation.variables,\n })\n .pipe(\n map((res: any) =>\n getValueByPath(\n res.data,\n buildResourcePath(\n { apiGroup, entity: `update${entity}`, version },\n '.',\n ),\n ),\n ),\n catchError((error) => {\n this.alertErrors(error);\n console.error('Error executing GraphQL query.', error);\n return throwError(() => error);\n }),\n );\n }\n\n getNamespace(\n nodeContext: ResourceNodeContext,\n resource?: Resource,\n ): string | undefined {\n if (nodeContext.namespaceId) {\n return nodeContext.namespaceId;\n }\n\n if (resource?.metadata?.namespace) {\n return resource.metadata.namespace;\n }\n\n const namespace = this.luigiCoreService\n .routing()\n .getSearchParams().namespace;\n\n if (namespace) {\n return namespace === ALL_NAMESPACE ? undefined : namespace;\n }\n\n return undefined;\n }\n\n private normalizeGqlBuilderVariables(\n variables: VariableOptions,\n ): Record<string, any> {\n return Object.fromEntries(\n Object.entries(variables).map(([key, value]) => [key, value.value]),\n );\n }\n\n private calcQueryOptions(\n innerFields: Fields,\n wrappers: Partial<Omit<QueryBuilderOptions, 'fields'>>[],\n ): QueryBuilderOptions {\n const filteredWrappers = wrappers.filter(\n (wrapper): wrapper is Omit<QueryBuilderOptions, 'fields'> =>\n !!wrapper?.operation,\n );\n\n if (filteredWrappers.length === 0) {\n const completeQuery = innerFields.pop() as NestedField;\n if (completeQuery && completeQuery.operation && completeQuery.fields) {\n return completeQuery;\n }\n\n throw new Error('At least one wrapper or inner fields is required');\n }\n\n let fields = innerFields;\n let nextWrapper = filteredWrappers.pop() as Omit<\n QueryBuilderOptions,\n 'fields'\n >;\n\n filteredWrappers.forEach((wrapper) => {\n fields = [\n {\n operation: nextWrapper.operation,\n fields: innerFields,\n variables: nextWrapper.variables,\n },\n ];\n nextWrapper = wrapper;\n });\n\n return {\n operation: nextWrapper.operation,\n fields,\n variables: nextWrapper.variables,\n };\n }\n\n private parseGQLQuery(query: string) {\n try {\n return gql`\n ${query}\n `;\n } catch (error) {\n this.luigiCoreService.showAlert({\n text: `Could not parse gql query: <br/><br/> ${query} <br/><br/> ${error.message}`,\n type: 'error',\n });\n throw error;\n }\n }\n\n /**\n * Returns a {@link ReadResources}-shaped adapter over this service so that\n * consumers can swap implementations behind a feature toggle without depending\n * on the GraphQL-specific signatures of `list` / `resourceChangeSubscription`.\n */\n asReadResources(): ReadResources {\n return {\n list: (\n nodeContext: ResourceNodeContext,\n pagination: ReadResourcesPagination,\n params: ReadResourcesParams,\n ): Observable<ReadResourcesResult> => {\n const operation =\n params.operation ??\n nodeContext.resourceDefinition?.entityCollection ??\n '';\n const fields =\n params.fields ??\n nodeContext.resourceDefinition?.ui?.listView?.fields ??\n [];\n const resourcePagination: ResourcePagination = {\n limit: pagination.limit,\n continue: pagination.cursor,\n };\n\n return this.list(operation, fields, nodeContext, {\n readFromParentKcpPath: params.readFromParentKcpPath ?? false,\n pagination: resourcePagination,\n }).pipe(\n map((result: ResourceListResult): ReadResourcesResult => ({\n items: result?.items ?? [],\n nextCursor: result?.continue,\n remainingItemCount: result?.remainingItemCount,\n resourceVersion: result?.resourceVersion,\n })),\n );\n },\n subscribe: (\n nodeContext: ResourceNodeContext,\n params: ReadResourcesParams & { resourceVersion?: string },\n ): Observable<ReadResourcesSubscriptionResult | undefined> => {\n const operation =\n nodeContext.resourceDefinition?.entityCollection ?? '';\n const fields = Array.isArray(params.fields)\n ? params.fields\n : ((nodeContext.resourceDefinition?.ui?.listView?.fields as any[]) ??\n []);\n\n return this.resourceChangeSubscription(\n operation,\n fields,\n nodeContext,\n params.resourceVersion ?? '',\n params.readFromParentKcpPath ?? false,\n );\n },\n };\n }\n}\n","import { gql } from 'apollo-angular';\n\nexport const accountInfoRead = gql`\n {\n core_platform_mesh_io {\n v1alpha1 {\n AccountInfo(name: \"account\") {\n metadata {\n name\n annotations\n }\n spec {\n account {\n originClusterId\n }\n clusterInfo {\n ca\n }\n organization {\n originClusterId\n name\n }\n oidc {\n clients\n issuerUrl\n }\n }\n }\n }\n }\n }\n`;\n","import { accountInfoRead } from './account-info.queries';\nimport { ApolloFactory } from './apollo-factory';\nimport { ResourceNodeContext } from './resource-node-context';\nimport { Injectable, inject } from '@angular/core';\nimport { AccountInfo } from '@platform-mesh/portal-ui-lib/models';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, map, shareReplay } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AccountInfoService {\n private apolloFactory = inject(ApolloFactory);\n private readCache = new Map<string, Observable<AccountInfo>>();\n\n read(nodeContext: ResourceNodeContext): Observable<AccountInfo> {\n const cacheKey = nodeContext.kcpPath ?? '';\n const cachedRead = this.readCache.get(cacheKey);\n if (cachedRead) {\n return cachedRead;\n }\n\n const request$ = this.apolloFactory\n .apollo(nodeContext)\n .query<AccountInfo>({\n query: accountInfoRead,\n })\n .pipe(\n map((res: any) => {\n const rawAccountInfo =\n res.data.core_platform_mesh_io.v1alpha1.AccountInfo;\n\n return {\n ...rawAccountInfo,\n spec: {\n ...rawAccountInfo.spec,\n oidc: {\n ...rawAccountInfo.spec.oidc,\n clients: JSON.parse(rawAccountInfo.spec.oidc.clients),\n },\n },\n };\n }),\n shareReplay(1),\n catchError((error) => {\n this.readCache.delete(cacheKey);\n return throwError(() => error);\n }),\n );\n\n this.readCache.set(cacheKey, request$);\n return request$;\n }\n}\n","import { gql } from 'apollo-angular';\n\nexport const queryLoginCluster = gql`\n {\n core_kcp_io {\n v1alpha1 {\n LogicalCluster(name: \"cluster\") {\n status {\n phase\n }\n }\n }\n }\n }\n`;\n","import { ApolloFactory } from './apollo-factory';\nimport { queryLoginCluster } from './logical-cluster.queries';\nimport { ResourceNodeContext } from './resource-node-context';\nimport { Injectable, inject } from '@angular/core';\nimport { LogicalCluster } from '@platform-mesh/portal-ui-lib/models';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LogicalClusterService {\n private apolloFactory = inject(ApolloFactory);\n\n public read(nodeContext: ResourceNodeContext): Observable<LogicalCluster> {\n return this.apolloFactory\n .apollo(nodeContext)\n .query<LogicalCluster>({\n query: queryLoginCluster,\n })\n .pipe(map((res: any) => res.data.core_kcp_io.v1alpha1.LogicalCluster));\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { LuigiCoreService } from '@openmfp/portal-ui-lib';\nimport { Resource } from '@platform-mesh/portal-ui-lib/models';\n\n@Injectable({ providedIn: 'root' })\nexport class ErrorHandlerService {\n private luigiCoreService = inject(LuigiCoreService);\n\n handleError(error: any) {\n if (this.isUnauthorizedAccess(error)) {\n this.luigiCoreService.navigation().navigate('/error/403');\n } else {\n const message =\n error?.message || error?.errors?.map((e) => e.message).join('\\n');\n this.luigiCoreService.showAlert({\n text: message || 'An unknown error occurred',\n type: 'error',\n });\n console.error(error);\n }\n }\n\n handleResourcePendingDeletion(_resource: Resource) {\n this.luigiCoreService.navigation().navigate('/error/422');\n }\n\n isUnauthorizedAccess(error: any): boolean {\n return (\n !!error?.message?.toLowerCase().includes('forbidden') ||\n !!error?.message?.toLowerCase()?.includes('access denied')\n );\n }\n}\n","import { LogicalClusterService } from './resource';\nimport { Injectable, inject } from '@angular/core';\nimport {\n AuthService,\n ConfigService,\n EnvConfigService,\n LuigiCoreService,\n} from '@openmfp/portal-ui-lib';\nimport { LogicalCluster } from '@platform-mesh/portal-ui-lib/models';\nimport { EMPTY, Subject, exhaustMap, filter } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\n@Injectable({ providedIn: 'root' })\nexport class OrganizationReadyService {\n private configService = inject(ConfigService);\n private envConfigService = inject(EnvConfigService);\n private luigiCoreService = inject(LuigiCoreService);\n private logicalClusterService = inject(LogicalClusterService);\n private authService = inject(AuthService);\n\n private isReady = false;\n private check$ = new Subject<void>();\n\n constructor() {\n void this.initChecks();\n }\n\n private async initChecks() {\n const portalConfig = await this.configService.getPortalConfig();\n const { idpName } = await this.envConfigService.getEnvConfig();\n\n if (idpName === 'welcome') {\n return;\n }\n\n this.check$\n .pipe(\n filter(() => !this.isReady),\n exhaustMap(() =>\n this.logicalClusterService\n .read({\n portalContext: {\n crdGatewayApiUrl:\n portalConfig.portalContext['crdGatewayApiUrl'],\n },\n token: this.authService.getToken(),\n accountId: idpName,\n })\n .pipe(\n catchError((error) => {\n console.error('Org check failed', error);\n // Return EMPTY so the exhaustMap completes without killing the check$ stream\n return EMPTY;\n }),\n ),\n ),\n map((res: LogicalCluster) => {\n this.isReady = res.status.phase === 'Ready';\n if (!this.isReady) {\n this.luigiCoreService.navigation().navigate('/error/503');\n }\n }),\n )\n .subscribe();\n }\n\n public checkOrganizationReady() {\n this.check$.next();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ApolloObservable"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"platform-mesh-portal-ui-lib-services.mjs","sources":["../../projects/lib/services/resource/gateway.service.ts","../../projects/lib/services/resource/apollo-factory.ts","../../projects/lib/services/resource/instance-permissions.service.ts","../../projects/lib/services/resource/resource.service.ts","../../projects/lib/services/resource/account-info.queries.ts","../../projects/lib/services/resource/account-info.service.ts","../../projects/lib/services/resource/logical-cluster.queries.ts","../../projects/lib/services/resource/logical-cluster.service.ts","../../projects/lib/services/error-handler.service.ts","../../projects/lib/services/org-ready.service.ts","../../projects/lib/services/platform-mesh-portal-ui-lib-services.ts"],"sourcesContent":["import { ResourceNodeContext } from './resource-node-context';\nimport { Injectable, inject } from '@angular/core';\nimport { LuigiCoreService } from '@openmfp/portal-ui-lib';\nimport { kcpRootOrgsPath } from '@platform-mesh/portal-ui-lib/models';\n\n@Injectable({ providedIn: 'root' })\nexport class GatewayService {\n private luigiCoreService = inject(LuigiCoreService);\n\n public getGatewayUrl(\n nodeContext: ResourceNodeContext,\n readFromParentKcpPath = false,\n ) {\n const gatewayUrl = nodeContext.portalContext.crdGatewayApiUrl;\n const currentKcpPath = this.extractKcpPath(gatewayUrl);\n return gatewayUrl?.replace(\n currentKcpPath,\n this.resolveKcpPath(nodeContext, readFromParentKcpPath),\n );\n }\n\n public updateCrdGatewayUrlWithEntityPath(kcpPath: string) {\n const gatewayUrl =\n this.luigiCoreService.getGlobalContext().portalContext.crdGatewayApiUrl;\n const currentKcpPath = this.extractKcpPath(gatewayUrl);\n this.luigiCoreService.getGlobalContext().portalContext.crdGatewayApiUrl =\n gatewayUrl.replace(currentKcpPath, kcpPath);\n }\n\n public resolveKcpPath(\n nodeContext: ResourceNodeContext,\n readFromParentKcpPath = false,\n ): string {\n const gatewayUrl = nodeContext.portalContext.crdGatewayApiUrl;\n\n let kcpPath = this.extractKcpPath(gatewayUrl);\n if (nodeContext.kcpPath) {\n kcpPath = nodeContext.kcpPath;\n }\n\n if (readFromParentKcpPath) {\n const lastIndex = kcpPath.lastIndexOf(':');\n if (lastIndex !== -1) {\n kcpPath = kcpPath.slice(0, lastIndex);\n }\n }\n\n return kcpPath;\n }\n\n private extractKcpPath(gatewayUrl: string): string {\n return gatewayUrl.match(new RegExp(`(${kcpRootOrgsPath}[^/]*)`))?.[1] || '';\n }\n}\n","import { GatewayService } from './gateway.service';\nimport { ResourceNodeContext } from './resource-node-context';\nimport { HttpHeaders } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { AuthService, LuigiCoreService } from '@openmfp/portal-ui-lib';\nimport {\n type ApolloClientOptions,\n ApolloLink,\n Observable as ApolloObservable,\n FetchResult,\n InMemoryCache,\n Operation,\n split,\n} from '@apollo/client/core';\nimport { SetContextLink } from '@apollo/client/link/context';\nimport { getMainDefinition } from '@apollo/client/utilities';\nimport { Apollo } from 'apollo-angular';\nimport { HttpLink } from 'apollo-angular/http';\nimport { print } from 'graphql';\nimport { Client, ClientOptions, createClient } from 'graphql-sse';\n\nclass SSELink extends ApolloLink {\n private client: Client;\n\n constructor(options: ClientOptions) {\n super();\n this.client = createClient(options);\n }\n\n public override request(operation: Operation): ApolloObservable<FetchResult> {\n return new ApolloObservable((sink) => {\n return this.client.subscribe(\n { ...operation, query: print(operation.query) },\n {\n next: sink.next.bind(sink),\n complete: sink.complete.bind(sink),\n error: sink.error.bind(sink),\n },\n );\n });\n }\n}\n\nconst noopZone = {\n run: (fn: any) => fn(),\n runOutsideAngular: (fn: any) => fn(),\n} as any;\n\n// Long enough for an in-flight boot refresh to land, short enough to be\n// invisible next to a reload.\nconst AUTH_RETRY_DELAY_MS = 750;\n\nconst isUnauthorized = (error: unknown): boolean => {\n const err = error as {\n status?: number;\n statusCode?: number;\n networkError?: { status?: number; statusCode?: number };\n };\n return [\n err?.status,\n err?.statusCode,\n err?.networkError?.status,\n err?.networkError?.statusCode,\n ].includes(401);\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApolloFactory {\n private httpLink = inject(HttpLink);\n private gatewayService = inject(GatewayService);\n private authService = inject(AuthService);\n private luigiCoreService = inject(LuigiCoreService);\n\n public readonly apollo = (\n nodeContext: ResourceNodeContext,\n readFromParentKcpPath = false,\n ): Apollo =>\n new Apollo(\n noopZone,\n this.createApolloOptions(nodeContext, readFromParentKcpPath),\n );\n\n /**\n * The token must be resolved per request, never captured at client\n * creation: a client built before the shell delivers the token would\n * otherwise send \"Bearer undefined\" for its whole lifetime (silent 401s,\n * empty views until a hard reload). Prefer live sources over the node\n * context, which is a mount-time snapshot: in web-component bundles the\n * injected AuthService belongs to a separate injector that never runs a\n * refresh, so the shell's Luigi auth store is the only value that tracks\n * the boot refresh and later scheduled refreshes.\n */\n private resolveToken(nodeContext: ResourceNodeContext): string | undefined {\n return (\n this.authService.getToken() ||\n this.resolveLuigiStoreToken() ||\n nodeContext.token\n );\n }\n\n // Web components run on the shell window; iframe-based MFEs have no\n // window.Luigi, so the service throws and we fall through to the node\n // context. LuigiCoreService wraps the same shell global (stateless), so\n // it is injector-safe for web-component bundles.\n private resolveLuigiStoreToken(): string | undefined {\n try {\n return this.luigiCoreService.getAuthData()?.idToken;\n } catch {\n return undefined;\n }\n }\n\n /**\n * Retries an operation exactly once when the gateway answers 401. The\n * Authorization header is rebuilt by the context link on the retry, so a\n * request that raced ahead of token delivery (or whose token expired in\n * flight) heals itself instead of leaving the view empty until a manual\n * reload. 401 means the request was rejected before execution, so this\n * is safe for mutations too.\n */\n private createAuthRetryLink(): ApolloLink {\n return new ApolloLink((operation, forward) => {\n return new ApolloObservable((observer) => {\n let activeSub: { unsubscribe(): void } | undefined;\n let retryTimer: ReturnType<typeof setTimeout> | undefined;\n const attempt = (isRetry: boolean) => {\n // A retry replaces the failed subscription; release the previous\n // one explicitly instead of relying on the errored link having\n // closed it downstream.\n activeSub?.unsubscribe();\n activeSub = forward(operation).subscribe({\n next: observer.next.bind(observer),\n complete: observer.complete.bind(observer),\n error: (error: unknown) => {\n if (!isRetry && isUnauthorized(error)) {\n retryTimer = setTimeout(\n () => attempt(true),\n AUTH_RETRY_DELAY_MS,\n );\n return;\n }\n observer.error(error);\n },\n });\n };\n attempt(false);\n return () => {\n if (retryTimer !== undefined) {\n clearTimeout(retryTimer);\n }\n activeSub?.unsubscribe();\n };\n });\n });\n }\n\n private createApolloOptions(\n nodeContext: ResourceNodeContext,\n readFromParentKcpPath = false,\n ): ApolloClientOptions {\n const contextLink = new SetContextLink((prevContext) => {\n const baseHeaders =\n prevContext.headers instanceof HttpHeaders\n ? prevContext.headers\n : new HttpHeaders(prevContext.headers ?? {});\n\n return {\n ...prevContext,\n uri: () =>\n this.gatewayService.getGatewayUrl(nodeContext, readFromParentKcpPath),\n headers: baseHeaders\n .set('Authorization', `Bearer ${this.resolveToken(nodeContext)}`)\n .set('Accept', 'charset=utf-8'),\n };\n });\n\n const splitClient = split(\n ({ query }) => {\n const definition = getMainDefinition(query);\n return (\n definition.kind === 'OperationDefinition' &&\n definition.operation === 'subscription'\n );\n },\n new SSELink({\n url: () =>\n this.gatewayService.getGatewayUrl(nodeContext, readFromParentKcpPath),\n headers: () => ({\n Authorization: `Bearer ${this.resolveToken(nodeContext)}`,\n }),\n }),\n this.httpLink.create({}),\n );\n\n // Retry sits outermost so a retry re-runs the context link and picks\n // up a freshly resolved token.\n const link = ApolloLink.from([\n this.createAuthRetryLink(),\n contextLink,\n splitClient,\n ]);\n const cache = new InMemoryCache();\n\n return {\n link,\n cache,\n };\n }\n}\n","import { ResourceNodeContext } from './resource-node-context';\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { LuigiCoreService } from '@openmfp/portal-ui-lib';\nimport { PermissionsDefinition } from '@platform-mesh/portal-ui-lib/models';\nimport { Observable, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nexport interface InstanceCheck {\n resource: string;\n group: string;\n namespace?: string;\n name: string;\n actions: string[];\n}\n\nexport interface ResourceCheckRequest {\n organization: string;\n accountPath?: string;\n checks: InstanceCheck[];\n}\n\nexport interface InstancePermissionResponse {\n resource: string;\n namespace?: string;\n name?: string;\n actions: string[];\n}\n\n@Injectable({ providedIn: 'root' })\nexport class InstancePermissionsService {\n private httpClient = inject(HttpClient);\n private luigiCoreService = inject(LuigiCoreService);\n\n private requestChecks(\n nodeContext: ResourceNodeContext,\n permissionsDefinition: PermissionsDefinition,\n instances: { name: string; namespace?: string }[],\n ): Observable<InstancePermissionResponse[]> {\n if (!permissionsDefinition?.entityActions.length || !instances.length) {\n return of([]);\n }\n\n const organization = nodeContext.organization;\n const accountPath = nodeContext.accountPath;\n const token = this.luigiCoreService.getAuthData()?.idToken;\n\n if (!organization || !token) {\n return of([]);\n }\n\n const checks: InstanceCheck[] = instances.map((instance) => ({\n resource: permissionsDefinition.resource,\n group: permissionsDefinition.group,\n name: instance.name,\n namespace: instance.namespace,\n actions: permissionsDefinition.entityActions,\n }));\n\n const body: ResourceCheckRequest = {\n organization,\n accountPath,\n checks,\n };\n\n return this.httpClient\n .post<InstancePermissionResponse[]>(\n '/rest/permissions/resource-check',\n body,\n { headers: { Authorization: `Bearer ${token}` } },\n )\n .pipe(catchError(() => of([])));\n }\n\n checkInstance(\n nodeContext: ResourceNodeContext,\n permissionsDefinition: PermissionsDefinition,\n instance: { name: string; namespace?: string },\n ): Observable<InstancePermissionResponse[]> {\n return this.requestChecks(nodeContext, permissionsDefinition, [instance]);\n }\n\n checkInstances(\n nodeContext: ResourceNodeContext,\n permissionsDefinition: PermissionsDefinition,\n instances: { name: string; namespace?: string }[],\n ): Observable<InstancePermissionResponse[]> {\n return this.requestChecks(nodeContext, permissionsDefinition, instances);\n }\n}\n","import {\n ReadResources,\n ReadResourcesPagination,\n ReadResourcesParams,\n ReadResourcesResult,\n ReadResourcesSubscriptionResult,\n} from '../read-resources/read-resources';\nimport { ApolloFactory } from './apollo-factory';\nimport { ResourceNodeContext } from './resource-node-context';\nimport { Injectable, inject } from '@angular/core';\nimport { TypedDocumentNode } from '@apollo/client/core';\nimport { LuigiCoreService } from '@openmfp/portal-ui-lib';\nimport {\n ALL_NAMESPACE,\n Resource,\n ResourceDefinition,\n ResourceListResult,\n ResourcePagination,\n ResourceSubscriptionResult,\n} from '@platform-mesh/portal-ui-lib/models';\nimport {\n buildGraphQLInputTypeName,\n buildResourcePath,\n getResourceValueByJsonPath,\n getValueByPath,\n isNamespacedResource,\n stripTypename,\n} from '@platform-mesh/portal-ui-lib/utils';\nimport { gql } from 'apollo-angular';\nimport type {\n Fields,\n NestedField,\n QueryBuilderOptions,\n VariableOptions,\n} from 'gql-query-builder';\nimport * as gqlBuilder from 'gql-query-builder';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\ninterface ResourceResponseError extends Record<string, any> {\n message: string;\n}\n\nexport interface ResourceRequestParams {\n entity: string;\n version: string;\n apiGroup?: string;\n}\n\nexport interface ListOptions {\n readFromParentKcpPath?: boolean;\n pagination?: ResourcePagination;\n variables?: VariableOptions;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ResourceService {\n private apolloFactory = inject(ApolloFactory);\n private luigiCoreService = inject(LuigiCoreService);\n\n read(\n resourceId: string,\n params: ResourceRequestParams,\n fieldsOrRawQuery: any[] | string,\n nodeContext: ResourceNodeContext,\n readFromParentKcpPath: boolean = true,\n ): Observable<Resource> {\n const isNamespaced = isNamespacedResource(nodeContext);\n const namespace = this.getNamespace(nodeContext);\n\n let query: string | TypedDocumentNode<any, any> = this.resolveReadQuery(\n params,\n fieldsOrRawQuery,\n resourceId,\n isNamespaced ? namespace : undefined,\n );\n\n query = this.parseGQLQuery(query);\n\n return this.apolloFactory\n .apollo(nodeContext, readFromParentKcpPath)\n .query({\n query,\n variables: {\n name: resourceId,\n ...(isNamespaced && {\n namespace: namespace,\n }),\n },\n })\n .pipe(\n map((res) =>\n getValueByPath<any, any>(res.data, buildResourcePath(params, '.')),\n ),\n );\n }\n\n private resolveReadQuery(\n params: ResourceRequestParams,\n fieldsOrRawQuery: any[] | string,\n resourceId: string,\n namespace: string | undefined,\n ) {\n if (fieldsOrRawQuery instanceof Array) {\n const { entity, version, apiGroup } = params;\n const queryFields = [\n {\n operation: entity,\n variables: {\n name: { value: resourceId, type: 'String!' },\n ...(namespace && {\n namespace: { value: namespace, type: 'String' },\n }),\n },\n fields: fieldsOrRawQuery,\n },\n ];\n\n const queryOptions = this.calcQueryOptions(queryFields, [\n { operation: apiGroup },\n { operation: version },\n ]);\n return gqlBuilder.query(queryOptions).query;\n } else {\n return fieldsOrRawQuery;\n }\n }\n\n list(\n operation: string,\n fieldsOrRawQuery: any[] | string,\n nodeContext: ResourceNodeContext,\n options: ListOptions = {},\n ): Observable<ResourceListResult | any> {\n const {\n readFromParentKcpPath = false,\n pagination,\n variables: extraVariables,\n } = options;\n\n const isNamespaced = isNamespacedResource(nodeContext);\n const variables = {\n ...(isNamespaced && {\n namespace: { type: 'String', value: this.getNamespace(nodeContext) },\n }),\n ...(pagination?.limit && {\n limit: { type: 'Int', value: pagination?.limit },\n }),\n ...(pagination?.continue && {\n continue: { type: 'String', value: pagination?.continue },\n }),\n ...extraVariables,\n };\n\n const resourceDefinition = nodeContext.resourceDefinition;\n if (!resourceDefinition) {\n return throwError(() => new Error('Resource definition is required'));\n }\n\n return fieldsOrRawQuery instanceof Array\n ? this.listWithFields(\n resourceDefinition,\n fieldsOrRawQuery,\n nodeContext,\n readFromParentKcpPath,\n variables,\n )\n : this.listWithRawQuery(\n operation,\n fieldsOrRawQuery,\n nodeContext,\n readFromParentKcpPath,\n variables,\n );\n }\n\n private getResourceReadyStatus(\n resource: Resource,\n nodeContext: ResourceNodeContext,\n ) {\n const readyCondition = nodeContext.resourceDefinition?.readyCondition;\n if (readyCondition) {\n return getResourceValueByJsonPath(resource, readyCondition);\n }\n\n return true;\n }\n\n private listWithFields(\n resourceDefinition: ResourceDefinition,\n fields: any[],\n nodeContext: ResourceNodeContext,\n readFromParentKcpPath: boolean,\n variables: VariableOptions,\n ): Observable<ResourceListResult> {\n const { apiGroup, entityCollection, version } = resourceDefinition;\n const queryFields = [\n {\n operation: entityCollection,\n variables,\n fields: [\n 'resourceVersion',\n 'remainingItemCount',\n 'continue',\n { items: fields },\n ],\n },\n ];\n const queryOptions = this.calcQueryOptions(queryFields, [\n { operation: apiGroup },\n { operation: version },\n ]);\n const listQuery = gqlBuilder.query(queryOptions);\n const query = this.parseGQLQuery(listQuery.query);\n\n return this.apolloFactory\n .apollo(nodeContext, readFromParentKcpPath)\n .query({\n query,\n variables: listQuery.variables,\n })\n .pipe(\n map((res: any): ResourceListResult => {\n const resourceListResult = getValueByPath<any, any>(\n res.data,\n buildResourcePath(\n { apiGroup, version, entity: entityCollection },\n '.',\n ),\n );\n if (!resourceListResult) {\n throw new Error('Resource list result not found');\n }\n\n return resourceListResult;\n }),\n map((resourceListResult) => {\n const processedResult: Resource[] = resourceListResult.items\n .map((resource) => ({\n ...resource,\n ready: this.getResourceReadyStatus(resource, nodeContext),\n }))\n .map((r) => ({\n ...r,\n id: r.metadata.name,\n isAvailable: this.isAvailable(r),\n accessibleName: this.getAccessibleName(r),\n }));\n return { ...resourceListResult, items: processedResult };\n }),\n );\n }\n\n isAvailable(item: Resource) {\n return !!item.ready && !item.metadata?.deletionTimestamp;\n }\n\n getAccessibleName(item: Resource): string | undefined {\n if (item.metadata?.deletionTimestamp) {\n return 'Resource is pending deletion';\n } else if (!item.ready) {\n return 'Resource is not ready';\n }\n\n return undefined;\n }\n\n private listWithRawQuery(\n operation: string,\n rawQuery: string,\n nodeContext: ResourceNodeContext,\n readFromParentKcpPath: boolean,\n variables: VariableOptions,\n ): Observable<any> {\n const query = this.parseGQLQuery(rawQuery);\n return this.apolloFactory\n .apollo(nodeContext, readFromParentKcpPath)\n .query({\n query,\n variables: this.normalizeGqlBuilderVariables(variables),\n })\n .pipe(\n map(\n (res: any): Resource[] =>\n getValueByPath<any, any>(res.data, operation) ?? [],\n ),\n catchError((error) => {\n this.alertErrors(error);\n console.error('Error executing GraphQL query.', error);\n return throwError(() => error);\n }),\n );\n }\n\n resourceChangeSubscription(\n operation: string,\n fields: any[],\n nodeContext: ResourceNodeContext,\n resourceVersion: string,\n readFromParentKcpPath: boolean,\n ): Observable<ResourceSubscriptionResult | undefined> {\n const isNamespaced = isNamespacedResource(nodeContext);\n const variables = {\n ...(isNamespaced && {\n namespace: { type: 'String', value: this.getNamespace(nodeContext) },\n }),\n };\n const lowerCaseOperation = operation.toLowerCase();\n\n const subscriptionQuery = gqlBuilder.subscription({\n operation: lowerCaseOperation,\n fields: ['type', { object: fields }],\n variables: {\n ...variables,\n resourceVersion: {\n type: 'String',\n value: resourceVersion,\n },\n },\n });\n\n const query = this.parseGQLQuery(subscriptionQuery.query);\n\n return this.apolloFactory\n .apollo(nodeContext, readFromParentKcpPath)\n .subscribe({\n query,\n variables: subscriptionQuery.variables,\n })\n .pipe(\n map((res: any): ResourceSubscriptionResult | undefined => {\n const resource: ResourceSubscriptionResult | undefined =\n getValueByPath(res.data, lowerCaseOperation);\n if (resource) {\n resource.object.ready = this.getResourceReadyStatus(\n resource.object,\n nodeContext,\n );\n resource.object.id = resource.object.metadata.name;\n resource.object.isAvailable = this.isAvailable(resource.object);\n resource.object.accessibleName = this.getAccessibleName(\n resource.object,\n );\n }\n return resource;\n }),\n );\n }\n\n private alertErrors(res: ResourceResponseError) {\n this.luigiCoreService.showAlert({\n text: res.message,\n type: 'error',\n });\n }\n\n delete(\n resource: Resource,\n resourceDefinition: ResourceDefinition,\n nodeContext: ResourceNodeContext,\n readFromParentKcpPath: boolean = false,\n ) {\n const isNamespaced = isNamespacedResource(nodeContext);\n const { apiGroup, entity, version } = resourceDefinition;\n const fields = [\n {\n operation: `delete${entity}`,\n variables: {\n name: { type: 'String!', value: resource.metadata.name },\n ...(isNamespaced && {\n namespace: {\n type: 'String',\n value: this.getNamespace(nodeContext),\n },\n }),\n },\n fields: [],\n },\n ];\n const queryOptions = this.calcQueryOptions(fields, [\n { operation: apiGroup },\n { operation: version },\n ]);\n const mutation = gqlBuilder.mutation(queryOptions);\n const query = this.parseGQLQuery(mutation.query);\n\n return this.apolloFactory\n .apollo(nodeContext, readFromParentKcpPath)\n .mutate<void>({\n mutation: query,\n variables: mutation.variables,\n })\n .pipe(\n catchError((error) => {\n this.alertErrors(error);\n console.error('Error executing GraphQL query.', error);\n return throwError(() => error);\n }),\n );\n }\n\n create(\n resource: Resource,\n resourceDefinition: ResourceDefinition,\n nodeContext: ResourceNodeContext,\n ) {\n const isNamespaced = isNamespacedResource(nodeContext);\n const { apiGroup, entity, version } = resourceDefinition;\n const namespace = this.getNamespace(nodeContext, resource);\n\n const mutationFields: any[] = [\n {\n operation: `create${entity}`,\n variables: {\n ...(isNamespaced && {\n namespace: { type: 'String', value: namespace },\n }),\n object: {\n type: `${buildGraphQLInputTypeName(apiGroup, version, entity)}!`,\n value: resource,\n },\n },\n fields: ['__typename'],\n },\n ];\n const queryOptions = this.calcQueryOptions(mutationFields, [\n { operation: apiGroup },\n { operation: version },\n ]);\n const mutation = gqlBuilder.mutation(queryOptions);\n const query = this.parseGQLQuery(mutation.query);\n\n return this.apolloFactory\n .apollo(nodeContext)\n .mutate({\n mutation: query,\n fetchPolicy: 'no-cache',\n variables: mutation.variables,\n })\n .pipe(\n catchError((error) => {\n this.alertErrors(error);\n console.error('Error executing GraphQL query.', error);\n return throwError(() => error);\n }),\n );\n }\n\n update(\n resource: Resource,\n resourceDefinition: ResourceDefinition,\n nodeContext: ResourceNodeContext,\n readFromParentKcpPath: boolean = false,\n fields: any[] = ['__typename'],\n ) {\n const isNamespaced = isNamespacedResource(nodeContext);\n const { apiGroup, entity, version } = resourceDefinition;\n const namespace = this.getNamespace(nodeContext);\n\n const cleanResource = stripTypename(resource);\n\n const mutationFields: any[] = [\n {\n operation: `update${entity}`,\n variables: {\n ...(isNamespaced && {\n namespace: { type: 'String', value: namespace },\n }),\n name: { type: 'String!', value: resource.metadata.name },\n object: {\n type: `${buildGraphQLInputTypeName(apiGroup, version, entity)}!`,\n value: cleanResource,\n },\n },\n fields: fields,\n },\n ];\n const queryOptions = this.calcQueryOptions(mutationFields, [\n { operation: apiGroup },\n { operation: version },\n ]);\n const mutation = gqlBuilder.mutation(queryOptions);\n const query = this.parseGQLQuery(mutation.query);\n\n return this.apolloFactory\n .apollo(nodeContext, readFromParentKcpPath)\n .mutate({\n mutation: query,\n fetchPolicy: 'no-cache',\n variables: mutation.variables,\n })\n .pipe(\n map((res: any) =>\n getValueByPath(\n res.data,\n buildResourcePath(\n { apiGroup, entity: `update${entity}`, version },\n '.',\n ),\n ),\n ),\n catchError((error) => {\n this.alertErrors(error);\n console.error('Error executing GraphQL query.', error);\n return throwError(() => error);\n }),\n );\n }\n\n getNamespace(\n nodeContext: ResourceNodeContext,\n resource?: Resource,\n ): string | undefined {\n if (nodeContext.namespaceId) {\n return nodeContext.namespaceId;\n }\n\n if (resource?.metadata?.namespace) {\n return resource.metadata.namespace;\n }\n\n const namespace = this.luigiCoreService\n .routing()\n .getSearchParams().namespace;\n\n if (namespace) {\n return namespace === ALL_NAMESPACE ? undefined : namespace;\n }\n\n return undefined;\n }\n\n private normalizeGqlBuilderVariables(\n variables: VariableOptions,\n ): Record<string, any> {\n return Object.fromEntries(\n Object.entries(variables).map(([key, value]) => [key, value.value]),\n );\n }\n\n private calcQueryOptions(\n innerFields: Fields,\n wrappers: Partial<Omit<QueryBuilderOptions, 'fields'>>[],\n ): QueryBuilderOptions {\n const filteredWrappers = wrappers.filter(\n (wrapper): wrapper is Omit<QueryBuilderOptions, 'fields'> =>\n !!wrapper?.operation,\n );\n\n if (filteredWrappers.length === 0) {\n const completeQuery = innerFields.pop() as NestedField;\n if (completeQuery && completeQuery.operation && completeQuery.fields) {\n return completeQuery;\n }\n\n throw new Error('At least one wrapper or inner fields is required');\n }\n\n let fields = innerFields;\n let nextWrapper = filteredWrappers.pop() as Omit<\n QueryBuilderOptions,\n 'fields'\n >;\n\n filteredWrappers.forEach((wrapper) => {\n fields = [\n {\n operation: nextWrapper.operation,\n fields: innerFields,\n variables: nextWrapper.variables,\n },\n ];\n nextWrapper = wrapper;\n });\n\n return {\n operation: nextWrapper.operation,\n fields,\n variables: nextWrapper.variables,\n };\n }\n\n private parseGQLQuery(query: string) {\n try {\n return gql`\n ${query}\n `;\n } catch (error) {\n this.luigiCoreService.showAlert({\n text: `Could not parse gql query: <br/><br/> ${query} <br/><br/> ${error.message}`,\n type: 'error',\n });\n throw error;\n }\n }\n\n /**\n * Returns a {@link ReadResources}-shaped adapter over this service so that\n * consumers can swap implementations behind a feature toggle without depending\n * on the GraphQL-specific signatures of `list` / `resourceChangeSubscription`.\n */\n asReadResources(): ReadResources {\n return {\n list: (\n nodeContext: ResourceNodeContext,\n pagination: ReadResourcesPagination,\n params: ReadResourcesParams,\n ): Observable<ReadResourcesResult> => {\n const operation =\n params.operation ??\n nodeContext.resourceDefinition?.entityCollection ??\n '';\n const fields =\n params.fields ??\n nodeContext.resourceDefinition?.ui?.listView?.fields ??\n [];\n const resourcePagination: ResourcePagination = {\n limit: pagination.limit,\n continue: pagination.cursor,\n };\n\n return this.list(operation, fields, nodeContext, {\n readFromParentKcpPath: params.readFromParentKcpPath ?? false,\n pagination: resourcePagination,\n }).pipe(\n map((result: ResourceListResult): ReadResourcesResult => ({\n items: result?.items ?? [],\n nextCursor: result?.continue,\n remainingItemCount: result?.remainingItemCount,\n resourceVersion: result?.resourceVersion,\n })),\n );\n },\n subscribe: (\n nodeContext: ResourceNodeContext,\n params: ReadResourcesParams & { resourceVersion?: string },\n ): Observable<ReadResourcesSubscriptionResult | undefined> => {\n const operation =\n nodeContext.resourceDefinition?.entityCollection ?? '';\n const fields = Array.isArray(params.fields)\n ? params.fields\n : ((nodeContext.resourceDefinition?.ui?.listView?.fields as any[]) ??\n []);\n\n return this.resourceChangeSubscription(\n operation,\n fields,\n nodeContext,\n params.resourceVersion ?? '',\n params.readFromParentKcpPath ?? false,\n );\n },\n };\n }\n}\n","import { gql } from 'apollo-angular';\n\nexport const accountInfoRead = gql`\n {\n core_platform_mesh_io {\n v1alpha1 {\n AccountInfo(name: \"account\") {\n metadata {\n name\n annotations\n }\n spec {\n account {\n originClusterId\n }\n clusterInfo {\n ca\n }\n organization {\n originClusterId\n name\n }\n oidc {\n clients\n issuerUrl\n }\n }\n }\n }\n }\n }\n`;\n","import { accountInfoRead } from './account-info.queries';\nimport { ApolloFactory } from './apollo-factory';\nimport { ResourceNodeContext } from './resource-node-context';\nimport { Injectable, inject } from '@angular/core';\nimport { AccountInfo } from '@platform-mesh/portal-ui-lib/models';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, map, shareReplay } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AccountInfoService {\n private apolloFactory = inject(ApolloFactory);\n private readCache = new Map<string, Observable<AccountInfo>>();\n\n read(nodeContext: ResourceNodeContext): Observable<AccountInfo> {\n const cacheKey = nodeContext.kcpPath ?? '';\n const cachedRead = this.readCache.get(cacheKey);\n if (cachedRead) {\n return cachedRead;\n }\n\n const request$ = this.apolloFactory\n .apollo(nodeContext)\n .query<AccountInfo>({\n query: accountInfoRead,\n })\n .pipe(\n map((res: any) => {\n const rawAccountInfo =\n res.data.core_platform_mesh_io.v1alpha1.AccountInfo;\n\n return {\n ...rawAccountInfo,\n spec: {\n ...rawAccountInfo.spec,\n oidc: {\n ...rawAccountInfo.spec.oidc,\n clients: JSON.parse(rawAccountInfo.spec.oidc.clients),\n },\n },\n };\n }),\n shareReplay(1),\n catchError((error) => {\n this.readCache.delete(cacheKey);\n return throwError(() => error);\n }),\n );\n\n this.readCache.set(cacheKey, request$);\n return request$;\n }\n}\n","import { gql } from 'apollo-angular';\n\nexport const queryLoginCluster = gql`\n {\n core_kcp_io {\n v1alpha1 {\n LogicalCluster(name: \"cluster\") {\n status {\n phase\n }\n }\n }\n }\n }\n`;\n","import { ApolloFactory } from './apollo-factory';\nimport { queryLoginCluster } from './logical-cluster.queries';\nimport { ResourceNodeContext } from './resource-node-context';\nimport { Injectable, inject } from '@angular/core';\nimport { LogicalCluster } from '@platform-mesh/portal-ui-lib/models';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LogicalClusterService {\n private apolloFactory = inject(ApolloFactory);\n\n public read(nodeContext: ResourceNodeContext): Observable<LogicalCluster> {\n return this.apolloFactory\n .apollo(nodeContext)\n .query<LogicalCluster>({\n query: queryLoginCluster,\n })\n .pipe(map((res: any) => res.data.core_kcp_io.v1alpha1.LogicalCluster));\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { LuigiCoreService } from '@openmfp/portal-ui-lib';\nimport { Resource } from '@platform-mesh/portal-ui-lib/models';\n\n@Injectable({ providedIn: 'root' })\nexport class ErrorHandlerService {\n private luigiCoreService = inject(LuigiCoreService);\n\n handleError(error: any) {\n if (this.isUnauthorizedAccess(error)) {\n this.luigiCoreService.navigation().navigate('/error/403');\n } else {\n const message =\n error?.message || error?.errors?.map((e) => e.message).join('\\n');\n this.luigiCoreService.showAlert({\n text: message || 'An unknown error occurred',\n type: 'error',\n });\n console.error(error);\n }\n }\n\n handleResourcePendingDeletion(_resource: Resource) {\n this.luigiCoreService.navigation().navigate('/error/422');\n }\n\n isUnauthorizedAccess(error: any): boolean {\n return (\n !!error?.message?.toLowerCase().includes('forbidden') ||\n !!error?.message?.toLowerCase()?.includes('access denied')\n );\n }\n}\n","import { LogicalClusterService } from './resource';\nimport { Injectable, inject } from '@angular/core';\nimport {\n AuthService,\n ConfigService,\n EnvConfigService,\n LuigiCoreService,\n} from '@openmfp/portal-ui-lib';\nimport { LogicalCluster } from '@platform-mesh/portal-ui-lib/models';\nimport { EMPTY, Subject, exhaustMap, filter } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\n@Injectable({ providedIn: 'root' })\nexport class OrganizationReadyService {\n private configService = inject(ConfigService);\n private envConfigService = inject(EnvConfigService);\n private luigiCoreService = inject(LuigiCoreService);\n private logicalClusterService = inject(LogicalClusterService);\n private authService = inject(AuthService);\n\n private isReady = false;\n private check$ = new Subject<void>();\n\n constructor() {\n void this.initChecks();\n }\n\n private async initChecks() {\n const portalConfig = await this.configService.getPortalConfig();\n const { idpName } = await this.envConfigService.getEnvConfig();\n\n if (idpName === 'welcome') {\n return;\n }\n\n this.check$\n .pipe(\n filter(() => !this.isReady),\n exhaustMap(() =>\n this.logicalClusterService\n .read({\n portalContext: {\n crdGatewayApiUrl:\n portalConfig.portalContext['crdGatewayApiUrl'],\n },\n token: this.authService.getToken(),\n accountId: idpName,\n })\n .pipe(\n catchError((error) => {\n console.error('Org check failed', error);\n // Return EMPTY so the exhaustMap completes without killing the check$ stream\n return EMPTY;\n }),\n ),\n ),\n map((res: LogicalCluster) => {\n this.isReady = res.status.phase === 'Ready';\n if (!this.isReady) {\n this.luigiCoreService.navigation().navigate('/error/503');\n }\n }),\n )\n .subscribe();\n }\n\n public checkOrganizationReady() {\n this.check$.next();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ApolloObservable"],"mappings":";;;;;;;;;;;;;;;;;MAMa,cAAc,CAAA;AAD3B,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AA8CpD,IAAA;AA5CQ,IAAA,aAAa,CAClB,WAAgC,EAChC,qBAAqB,GAAG,KAAK,EAAA;AAE7B,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,aAAa,CAAC,gBAAgB;QAC7D,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;AACtD,QAAA,OAAO,UAAU,EAAE,OAAO,CACxB,cAAc,EACd,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,qBAAqB,CAAC,CACxD;IACH;AAEO,IAAA,iCAAiC,CAAC,OAAe,EAAA;AACtD,QAAA,MAAM,UAAU,GACd,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,aAAa,CAAC,gBAAgB;QACzE,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;QACtD,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,aAAa,CAAC,gBAAgB;AACrE,YAAA,UAAU,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC;IAC/C;AAEO,IAAA,cAAc,CACnB,WAAgC,EAChC,qBAAqB,GAAG,KAAK,EAAA;AAE7B,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,aAAa,CAAC,gBAAgB;QAE7D,IAAI,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;AAC7C,QAAA,IAAI,WAAW,CAAC,OAAO,EAAE;AACvB,YAAA,OAAO,GAAG,WAAW,CAAC,OAAO;QAC/B;QAEA,IAAI,qBAAqB,EAAE;YACzB,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC;AAC1C,YAAA,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;gBACpB,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC;YACvC;QACF;AAEA,QAAA,OAAO,OAAO;IAChB;AAEQ,IAAA,cAAc,CAAC,UAAkB,EAAA;AACvC,QAAA,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAA,CAAA,EAAI,eAAe,CAAA,MAAA,CAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;IAC7E;+GA9CW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cADD,MAAM,EAAA,CAAA,CAAA;;4FACnB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACgBlC,MAAM,OAAQ,SAAQ,UAAU,CAAA;AAG9B,IAAA,WAAA,CAAY,OAAsB,EAAA;AAChC,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC;IACrC;AAEgB,IAAA,OAAO,CAAC,SAAoB,EAAA;AAC1C,QAAA,OAAO,IAAIA,UAAgB,CAAC,CAAC,IAAI,KAAI;AACnC,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAC1B,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAC/C;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC1B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;gBAClC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7B,aAAA,CACF;AACH,QAAA,CAAC,CAAC;IACJ;AACD;AAED,MAAM,QAAQ,GAAG;AACf,IAAA,GAAG,EAAE,CAAC,EAAO,KAAK,EAAE,EAAE;AACtB,IAAA,iBAAiB,EAAE,CAAC,EAAO,KAAK,EAAE,EAAE;CAC9B;AAER;AACA;AACA,MAAM,mBAAmB,GAAG,GAAG;AAE/B,MAAM,cAAc,GAAG,CAAC,KAAc,KAAa;IACjD,MAAM,GAAG,GAAG,KAIX;IACD,OAAO;AACL,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,GAAG,EAAE,UAAU;QACf,GAAG,EAAE,YAAY,EAAE,MAAM;QACzB,GAAG,EAAE,YAAY,EAAE,UAAU;AAC9B,KAAA,CAAC,QAAQ,CAAC,GAAG,CAAC;AACjB,CAAC;MAKY,aAAa,CAAA;AAH1B,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAEnC,IAAA,CAAA,MAAM,GAAG,CACvB,WAAgC,EAChC,qBAAqB,GAAG,KAAK,KAE7B,IAAI,MAAM,CACR,QAAQ,EACR,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAC7D;AAgIJ,IAAA;AA9HC;;;;;;;;;AASG;AACK,IAAA,YAAY,CAAC,WAAgC,EAAA;AACnD,QAAA,QACE,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;YAC3B,IAAI,CAAC,sBAAsB,EAAE;YAC7B,WAAW,CAAC,KAAK;IAErB;;;;;IAMQ,sBAAsB,GAAA;AAC5B,QAAA,IAAI;YACF,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,EAAE,OAAO;QACrD;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,SAAS;QAClB;IACF;AAEA;;;;;;;AAOG;IACK,mBAAmB,GAAA;QACzB,OAAO,IAAI,UAAU,CAAC,CAAC,SAAS,EAAE,OAAO,KAAI;AAC3C,YAAA,OAAO,IAAIA,UAAgB,CAAC,CAAC,QAAQ,KAAI;AACvC,gBAAA,IAAI,SAA8C;AAClD,gBAAA,IAAI,UAAqD;AACzD,gBAAA,MAAM,OAAO,GAAG,CAAC,OAAgB,KAAI;;;;oBAInC,SAAS,EAAE,WAAW,EAAE;AACxB,oBAAA,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC;wBACvC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;wBAClC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC1C,wBAAA,KAAK,EAAE,CAAC,KAAc,KAAI;4BACxB,IAAI,CAAC,OAAO,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE;AACrC,gCAAA,UAAU,GAAG,UAAU,CACrB,MAAM,OAAO,CAAC,IAAI,CAAC,EACnB,mBAAmB,CACpB;gCACD;4BACF;AACA,4BAAA,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;wBACvB,CAAC;AACF,qBAAA,CAAC;AACJ,gBAAA,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC;AACd,gBAAA,OAAO,MAAK;AACV,oBAAA,IAAI,UAAU,KAAK,SAAS,EAAE;wBAC5B,YAAY,CAAC,UAAU,CAAC;oBAC1B;oBACA,SAAS,EAAE,WAAW,EAAE;AAC1B,gBAAA,CAAC;AACH,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,mBAAmB,CACzB,WAAgC,EAChC,qBAAqB,GAAG,KAAK,EAAA;QAE7B,MAAM,WAAW,GAAG,IAAI,cAAc,CAAC,CAAC,WAAW,KAAI;AACrD,YAAA,MAAM,WAAW,GACf,WAAW,CAAC,OAAO,YAAY;kBAC3B,WAAW,CAAC;kBACZ,IAAI,WAAW,CAAC,WAAW,CAAC,OAAO,IAAI,EAAE,CAAC;YAEhD,OAAO;AACL,gBAAA,GAAG,WAAW;AACd,gBAAA,GAAG,EAAE,MACH,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,WAAW,EAAE,qBAAqB,CAAC;AACvE,gBAAA,OAAO,EAAE;qBACN,GAAG,CAAC,eAAe,EAAE,CAAA,OAAA,EAAU,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAA,CAAE;AAC/D,qBAAA,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC;aAClC;AACH,QAAA,CAAC,CAAC;QAEF,MAAM,WAAW,GAAG,KAAK,CACvB,CAAC,EAAE,KAAK,EAAE,KAAI;AACZ,YAAA,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC;AAC3C,YAAA,QACE,UAAU,CAAC,IAAI,KAAK,qBAAqB;AACzC,gBAAA,UAAU,CAAC,SAAS,KAAK,cAAc;QAE3C,CAAC,EACD,IAAI,OAAO,CAAC;AACV,YAAA,GAAG,EAAE,MACH,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,WAAW,EAAE,qBAAqB,CAAC;AACvE,YAAA,OAAO,EAAE,OAAO;gBACd,aAAa,EAAE,UAAU,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAA,CAAE;aAC1D,CAAC;SACH,CAAC,EACF,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CACzB;;;AAID,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;YAC3B,IAAI,CAAC,mBAAmB,EAAE;YAC1B,WAAW;YACX,WAAW;AACZ,SAAA,CAAC;AACF,QAAA,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE;QAEjC,OAAO;YACL,IAAI;YACJ,KAAK;SACN;IACH;+GA5IW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA;;4FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCtCY,0BAA0B,CAAA;AADvC,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAyDpD,IAAA;AAvDS,IAAA,aAAa,CACnB,WAAgC,EAChC,qBAA4C,EAC5C,SAAiD,EAAA;AAEjD,QAAA,IAAI,CAAC,qBAAqB,EAAE,aAAa,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACrE,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC;QACf;AAEA,QAAA,MAAM,YAAY,GAAG,WAAW,CAAC,YAAY;AAC7C,QAAA,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,EAAE,OAAO;AAE1D,QAAA,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,EAAE;AAC3B,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC;QACf;QAEA,MAAM,MAAM,GAAoB,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,MAAM;YAC3D,QAAQ,EAAE,qBAAqB,CAAC,QAAQ;YACxC,KAAK,EAAE,qBAAqB,CAAC,KAAK;YAClC,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,OAAO,EAAE,qBAAqB,CAAC,aAAa;AAC7C,SAAA,CAAC,CAAC;AAEH,QAAA,MAAM,IAAI,GAAyB;YACjC,YAAY;YACZ,WAAW;YACX,MAAM;SACP;QAED,OAAO,IAAI,CAAC;AACT,aAAA,IAAI,CACH,kCAAkC,EAClC,IAAI,EACJ,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,EAAE,EAAE;AAElD,aAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC;AAEA,IAAA,aAAa,CACX,WAAgC,EAChC,qBAA4C,EAC5C,QAA8C,EAAA;AAE9C,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,qBAAqB,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC3E;AAEA,IAAA,cAAc,CACZ,WAAgC,EAChC,qBAA4C,EAC5C,SAAiD,EAAA;QAEjD,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,qBAAqB,EAAE,SAAS,CAAC;IAC1E;+GA1DW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cADb,MAAM,EAAA,CAAA,CAAA;;4FACnB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MC6BrB,eAAe,CAAA;AAH5B,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAolBpD,IAAA;IAllBC,IAAI,CACF,UAAkB,EAClB,MAA6B,EAC7B,gBAAgC,EAChC,WAAgC,EAChC,qBAAA,GAAiC,IAAI,EAAA;AAErC,QAAA,MAAM,YAAY,GAAG,oBAAoB,CAAC,WAAW,CAAC;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;QAEhD,IAAI,KAAK,GAAyC,IAAI,CAAC,gBAAgB,CACrE,MAAM,EACN,gBAAgB,EAChB,UAAU,EACV,YAAY,GAAG,SAAS,GAAG,SAAS,CACrC;AAED,QAAA,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAEjC,OAAO,IAAI,CAAC;AACT,aAAA,MAAM,CAAC,WAAW,EAAE,qBAAqB;AACzC,aAAA,KAAK,CAAC;YACL,KAAK;AACL,YAAA,SAAS,EAAE;AACT,gBAAA,IAAI,EAAE,UAAU;gBAChB,IAAI,YAAY,IAAI;AAClB,oBAAA,SAAS,EAAE,SAAS;iBACrB,CAAC;AACH,aAAA;SACF;aACA,IAAI,CACH,GAAG,CAAC,CAAC,GAAG,KACN,cAAc,CAAW,GAAG,CAAC,IAAI,EAAE,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CACnE,CACF;IACL;AAEQ,IAAA,gBAAgB,CACtB,MAA6B,EAC7B,gBAAgC,EAChC,UAAkB,EAClB,SAA6B,EAAA;AAE7B,QAAA,IAAI,gBAAgB,YAAY,KAAK,EAAE;YACrC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM;AAC5C,YAAA,MAAM,WAAW,GAAG;AAClB,gBAAA;AACE,oBAAA,SAAS,EAAE,MAAM;AACjB,oBAAA,SAAS,EAAE;wBACT,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;wBAC5C,IAAI,SAAS,IAAI;4BACf,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE;yBAChD,CAAC;AACH,qBAAA;AACD,oBAAA,MAAM,EAAE,gBAAgB;AACzB,iBAAA;aACF;AAED,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;gBACtD,EAAE,SAAS,EAAE,QAAQ,EAAE;gBACvB,EAAE,SAAS,EAAE,OAAO,EAAE;AACvB,aAAA,CAAC;YACF,OAAO,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,KAAK;QAC7C;aAAO;AACL,YAAA,OAAO,gBAAgB;QACzB;IACF;IAEA,IAAI,CACF,SAAiB,EACjB,gBAAgC,EAChC,WAAgC,EAChC,UAAuB,EAAE,EAAA;AAEzB,QAAA,MAAM,EACJ,qBAAqB,GAAG,KAAK,EAC7B,UAAU,EACV,SAAS,EAAE,cAAc,GAC1B,GAAG,OAAO;AAEX,QAAA,MAAM,YAAY,GAAG,oBAAoB,CAAC,WAAW,CAAC;AACtD,QAAA,MAAM,SAAS,GAAG;YAChB,IAAI,YAAY,IAAI;AAClB,gBAAA,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE;aACrE,CAAC;AACF,YAAA,IAAI,UAAU,EAAE,KAAK,IAAI;gBACvB,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;aACjD,CAAC;AACF,YAAA,IAAI,UAAU,EAAE,QAAQ,IAAI;gBAC1B,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE;aAC1D,CAAC;AACF,YAAA,GAAG,cAAc;SAClB;AAED,QAAA,MAAM,kBAAkB,GAAG,WAAW,CAAC,kBAAkB;QACzD,IAAI,CAAC,kBAAkB,EAAE;YACvB,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACvE;QAEA,OAAO,gBAAgB,YAAY;AACjC,cAAE,IAAI,CAAC,cAAc,CACjB,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,qBAAqB,EACrB,SAAS;AAEb,cAAE,IAAI,CAAC,gBAAgB,CACnB,SAAS,EACT,gBAAgB,EAChB,WAAW,EACX,qBAAqB,EACrB,SAAS,CACV;IACP;IAEQ,sBAAsB,CAC5B,QAAkB,EAClB,WAAgC,EAAA;AAEhC,QAAA,MAAM,cAAc,GAAG,WAAW,CAAC,kBAAkB,EAAE,cAAc;QACrE,IAAI,cAAc,EAAE;AAClB,YAAA,OAAO,0BAA0B,CAAC,QAAQ,EAAE,cAAc,CAAC;QAC7D;AAEA,QAAA,OAAO,IAAI;IACb;IAEQ,cAAc,CACpB,kBAAsC,EACtC,MAAa,EACb,WAAgC,EAChC,qBAA8B,EAC9B,SAA0B,EAAA;QAE1B,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,kBAAkB;AAClE,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA;AACE,gBAAA,SAAS,EAAE,gBAAgB;gBAC3B,SAAS;AACT,gBAAA,MAAM,EAAE;oBACN,iBAAiB;oBACjB,oBAAoB;oBACpB,UAAU;oBACV,EAAE,KAAK,EAAE,MAAM,EAAE;AAClB,iBAAA;AACF,aAAA;SACF;AACD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;YACtD,EAAE,SAAS,EAAE,QAAQ,EAAE;YACvB,EAAE,SAAS,EAAE,OAAO,EAAE;AACvB,SAAA,CAAC;QACF,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC;QAEjD,OAAO,IAAI,CAAC;AACT,aAAA,MAAM,CAAC,WAAW,EAAE,qBAAqB;AACzC,aAAA,KAAK,CAAC;YACL,KAAK;YACL,SAAS,EAAE,SAAS,CAAC,SAAS;SAC/B;AACA,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,GAAQ,KAAwB;YACnC,MAAM,kBAAkB,GAAG,cAAc,CACvC,GAAG,CAAC,IAAI,EACR,iBAAiB,CACf,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAC/C,GAAG,CACJ,CACF;YACD,IAAI,CAAC,kBAAkB,EAAE;AACvB,gBAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC;YACnD;AAEA,YAAA,OAAO,kBAAkB;AAC3B,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,kBAAkB,KAAI;AACzB,YAAA,MAAM,eAAe,GAAe,kBAAkB,CAAC;AACpD,iBAAA,GAAG,CAAC,CAAC,QAAQ,MAAM;AAClB,gBAAA,GAAG,QAAQ;gBACX,KAAK,EAAE,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,WAAW,CAAC;AAC1D,aAAA,CAAC;AACD,iBAAA,GAAG,CAAC,CAAC,CAAC,MAAM;AACX,gBAAA,GAAG,CAAC;AACJ,gBAAA,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI;AACnB,gBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAChC,gBAAA,cAAc,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC1C,aAAA,CAAC,CAAC;YACL,OAAO,EAAE,GAAG,kBAAkB,EAAE,KAAK,EAAE,eAAe,EAAE;QAC1D,CAAC,CAAC,CACH;IACL;AAEA,IAAA,WAAW,CAAC,IAAc,EAAA;AACxB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB;IAC1D;AAEA,IAAA,iBAAiB,CAAC,IAAc,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,iBAAiB,EAAE;AACpC,YAAA,OAAO,8BAA8B;QACvC;AAAO,aAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACtB,YAAA,OAAO,uBAAuB;QAChC;AAEA,QAAA,OAAO,SAAS;IAClB;IAEQ,gBAAgB,CACtB,SAAiB,EACjB,QAAgB,EAChB,WAAgC,EAChC,qBAA8B,EAC9B,SAA0B,EAAA;QAE1B,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;QAC1C,OAAO,IAAI,CAAC;AACT,aAAA,MAAM,CAAC,WAAW,EAAE,qBAAqB;AACzC,aAAA,KAAK,CAAC;YACL,KAAK;AACL,YAAA,SAAS,EAAE,IAAI,CAAC,4BAA4B,CAAC,SAAS,CAAC;SACxD;aACA,IAAI,CACH,GAAG,CACD,CAAC,GAAQ,KACP,cAAc,CAAW,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,CACtD,EACD,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,YAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC;AACtD,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;QAChC,CAAC,CAAC,CACH;IACL;IAEA,0BAA0B,CACxB,SAAiB,EACjB,MAAa,EACb,WAAgC,EAChC,eAAuB,EACvB,qBAA8B,EAAA;AAE9B,QAAA,MAAM,YAAY,GAAG,oBAAoB,CAAC,WAAW,CAAC;AACtD,QAAA,MAAM,SAAS,GAAG;YAChB,IAAI,YAAY,IAAI;AAClB,gBAAA,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE;aACrE,CAAC;SACH;AACD,QAAA,MAAM,kBAAkB,GAAG,SAAS,CAAC,WAAW,EAAE;AAElD,QAAA,MAAM,iBAAiB,GAAG,UAAU,CAAC,YAAY,CAAC;AAChD,YAAA,SAAS,EAAE,kBAAkB;YAC7B,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACpC,YAAA,SAAS,EAAE;AACT,gBAAA,GAAG,SAAS;AACZ,gBAAA,eAAe,EAAE;AACf,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,KAAK,EAAE,eAAe;AACvB,iBAAA;AACF,aAAA;AACF,SAAA,CAAC;QAEF,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC;QAEzD,OAAO,IAAI,CAAC;AACT,aAAA,MAAM,CAAC,WAAW,EAAE,qBAAqB;AACzC,aAAA,SAAS,CAAC;YACT,KAAK;YACL,SAAS,EAAE,iBAAiB,CAAC,SAAS;SACvC;AACA,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,GAAQ,KAA4C;YACvD,MAAM,QAAQ,GACZ,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,kBAAkB,CAAC;YAC9C,IAAI,QAAQ,EAAE;AACZ,gBAAA,QAAQ,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,sBAAsB,CACjD,QAAQ,CAAC,MAAM,EACf,WAAW,CACZ;AACD,gBAAA,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI;AAClD,gBAAA,QAAQ,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC/D,gBAAA,QAAQ,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,CACrD,QAAQ,CAAC,MAAM,CAChB;YACH;AACA,YAAA,OAAO,QAAQ;QACjB,CAAC,CAAC,CACH;IACL;AAEQ,IAAA,WAAW,CAAC,GAA0B,EAAA;AAC5C,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;YAC9B,IAAI,EAAE,GAAG,CAAC,OAAO;AACjB,YAAA,IAAI,EAAE,OAAO;AACd,SAAA,CAAC;IACJ;IAEA,MAAM,CACJ,QAAkB,EAClB,kBAAsC,EACtC,WAAgC,EAChC,wBAAiC,KAAK,EAAA;AAEtC,QAAA,MAAM,YAAY,GAAG,oBAAoB,CAAC,WAAW,CAAC;QACtD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,kBAAkB;AACxD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA;gBACE,SAAS,EAAE,CAAA,MAAA,EAAS,MAAM,CAAA,CAAE;AAC5B,gBAAA,SAAS,EAAE;AACT,oBAAA,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE;oBACxD,IAAI,YAAY,IAAI;AAClB,wBAAA,SAAS,EAAE;AACT,4BAAA,IAAI,EAAE,QAAQ;AACd,4BAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;AACtC,yBAAA;qBACF,CAAC;AACH,iBAAA;AACD,gBAAA,MAAM,EAAE,EAAE;AACX,aAAA;SACF;AACD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE;YACjD,EAAE,SAAS,EAAE,QAAQ,EAAE;YACvB,EAAE,SAAS,EAAE,OAAO,EAAE;AACvB,SAAA,CAAC;QACF,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC;QAEhD,OAAO,IAAI,CAAC;AACT,aAAA,MAAM,CAAC,WAAW,EAAE,qBAAqB;AACzC,aAAA,MAAM,CAAO;AACZ,YAAA,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,QAAQ,CAAC,SAAS;SAC9B;AACA,aAAA,IAAI,CACH,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,YAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC;AACtD,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;QAChC,CAAC,CAAC,CACH;IACL;AAEA,IAAA,MAAM,CACJ,QAAkB,EAClB,kBAAsC,EACtC,WAAgC,EAAA;AAEhC,QAAA,MAAM,YAAY,GAAG,oBAAoB,CAAC,WAAW,CAAC;QACtD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,kBAAkB;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC;AAE1D,QAAA,MAAM,cAAc,GAAU;AAC5B,YAAA;gBACE,SAAS,EAAE,CAAA,MAAA,EAAS,MAAM,CAAA,CAAE;AAC5B,gBAAA,SAAS,EAAE;oBACT,IAAI,YAAY,IAAI;wBAClB,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;qBAChD,CAAC;AACF,oBAAA,MAAM,EAAE;wBACN,IAAI,EAAE,CAAA,EAAG,yBAAyB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA,CAAA,CAAG;AAChE,wBAAA,KAAK,EAAE,QAAQ;AAChB,qBAAA;AACF,iBAAA;gBACD,MAAM,EAAE,CAAC,YAAY,CAAC;AACvB,aAAA;SACF;AACD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE;YACzD,EAAE,SAAS,EAAE,QAAQ,EAAE;YACvB,EAAE,SAAS,EAAE,OAAO,EAAE;AACvB,SAAA,CAAC;QACF,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC;QAEhD,OAAO,IAAI,CAAC;aACT,MAAM,CAAC,WAAW;AAClB,aAAA,MAAM,CAAC;AACN,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,WAAW,EAAE,UAAU;YACvB,SAAS,EAAE,QAAQ,CAAC,SAAS;SAC9B;AACA,aAAA,IAAI,CACH,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,YAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC;AACtD,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;QAChC,CAAC,CAAC,CACH;IACL;AAEA,IAAA,MAAM,CACJ,QAAkB,EAClB,kBAAsC,EACtC,WAAgC,EAChC,qBAAA,GAAiC,KAAK,EACtC,MAAA,GAAgB,CAAC,YAAY,CAAC,EAAA;AAE9B,QAAA,MAAM,YAAY,GAAG,oBAAoB,CAAC,WAAW,CAAC;QACtD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,kBAAkB;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;AAEhD,QAAA,MAAM,aAAa,GAAG,aAAa,CAAC,QAAQ,CAAC;AAE7C,QAAA,MAAM,cAAc,GAAU;AAC5B,YAAA;gBACE,SAAS,EAAE,CAAA,MAAA,EAAS,MAAM,CAAA,CAAE;AAC5B,gBAAA,SAAS,EAAE;oBACT,IAAI,YAAY,IAAI;wBAClB,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;qBAChD,CAAC;AACF,oBAAA,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE;AACxD,oBAAA,MAAM,EAAE;wBACN,IAAI,EAAE,CAAA,EAAG,yBAAyB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA,CAAA,CAAG;AAChE,wBAAA,KAAK,EAAE,aAAa;AACrB,qBAAA;AACF,iBAAA;AACD,gBAAA,MAAM,EAAE,MAAM;AACf,aAAA;SACF;AACD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE;YACzD,EAAE,SAAS,EAAE,QAAQ,EAAE;YACvB,EAAE,SAAS,EAAE,OAAO,EAAE;AACvB,SAAA,CAAC;QACF,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC;QAEhD,OAAO,IAAI,CAAC;AACT,aAAA,MAAM,CAAC,WAAW,EAAE,qBAAqB;AACzC,aAAA,MAAM,CAAC;AACN,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,WAAW,EAAE,UAAU;YACvB,SAAS,EAAE,QAAQ,CAAC,SAAS;SAC9B;AACA,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,GAAQ,KACX,cAAc,CACZ,GAAG,CAAC,IAAI,EACR,iBAAiB,CACf,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,MAAM,CAAA,CAAE,EAAE,OAAO,EAAE,EAChD,GAAG,CACJ,CACF,CACF,EACD,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,YAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC;AACtD,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;QAChC,CAAC,CAAC,CACH;IACL;IAEA,YAAY,CACV,WAAgC,EAChC,QAAmB,EAAA;AAEnB,QAAA,IAAI,WAAW,CAAC,WAAW,EAAE;YAC3B,OAAO,WAAW,CAAC,WAAW;QAChC;AAEA,QAAA,IAAI,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE;AACjC,YAAA,OAAO,QAAQ,CAAC,QAAQ,CAAC,SAAS;QACpC;AAEA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC;AACpB,aAAA,OAAO;aACP,eAAe,EAAE,CAAC,SAAS;QAE9B,IAAI,SAAS,EAAE;YACb,OAAO,SAAS,KAAK,aAAa,GAAG,SAAS,GAAG,SAAS;QAC5D;AAEA,QAAA,OAAO,SAAS;IAClB;AAEQ,IAAA,4BAA4B,CAClC,SAA0B,EAAA;AAE1B,QAAA,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CACpE;IACH;IAEQ,gBAAgB,CACtB,WAAmB,EACnB,QAAwD,EAAA;AAExD,QAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CACtC,CAAC,OAAO,KACN,CAAC,CAAC,OAAO,EAAE,SAAS,CACvB;AAED,QAAA,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,YAAA,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAiB;YACtD,IAAI,aAAa,IAAI,aAAa,CAAC,SAAS,IAAI,aAAa,CAAC,MAAM,EAAE;AACpE,gBAAA,OAAO,aAAa;YACtB;AAEA,YAAA,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC;QACrE;QAEA,IAAI,MAAM,GAAG,WAAW;AACxB,QAAA,IAAI,WAAW,GAAG,gBAAgB,CAAC,GAAG,EAGrC;AAED,QAAA,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACnC,YAAA,MAAM,GAAG;AACP,gBAAA;oBACE,SAAS,EAAE,WAAW,CAAC,SAAS;AAChC,oBAAA,MAAM,EAAE,WAAW;oBACnB,SAAS,EAAE,WAAW,CAAC,SAAS;AACjC,iBAAA;aACF;YACD,WAAW,GAAG,OAAO;AACvB,QAAA,CAAC,CAAC;QAEF,OAAO;YACL,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,MAAM;YACN,SAAS,EAAE,WAAW,CAAC,SAAS;SACjC;IACH;AAEQ,IAAA,aAAa,CAAC,KAAa,EAAA;AACjC,QAAA,IAAI;AACF,YAAA,OAAO,GAAG,CAAA;UACN,KAAK;OACR;QACH;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAC9B,gBAAA,IAAI,EAAE,CAAA,sCAAA,EAAyC,KAAK,eAAe,KAAK,CAAC,OAAO,CAAA,CAAE;AAClF,gBAAA,IAAI,EAAE,OAAO;AACd,aAAA,CAAC;AACF,YAAA,MAAM,KAAK;QACb;IACF;AAEA;;;;AAIG;IACH,eAAe,GAAA;QACb,OAAO;YACL,IAAI,EAAE,CACJ,WAAgC,EAChC,UAAmC,EACnC,MAA2B,KACQ;AACnC,gBAAA,MAAM,SAAS,GACb,MAAM,CAAC,SAAS;oBAChB,WAAW,CAAC,kBAAkB,EAAE,gBAAgB;AAChD,oBAAA,EAAE;AACJ,gBAAA,MAAM,MAAM,GACV,MAAM,CAAC,MAAM;AACb,oBAAA,WAAW,CAAC,kBAAkB,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM;AACpD,oBAAA,EAAE;AACJ,gBAAA,MAAM,kBAAkB,GAAuB;oBAC7C,KAAK,EAAE,UAAU,CAAC,KAAK;oBACvB,QAAQ,EAAE,UAAU,CAAC,MAAM;iBAC5B;gBAED,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE;AAC/C,oBAAA,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,IAAI,KAAK;AAC5D,oBAAA,UAAU,EAAE,kBAAkB;iBAC/B,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,MAA0B,MAA2B;AACxD,oBAAA,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE;oBAC1B,UAAU,EAAE,MAAM,EAAE,QAAQ;oBAC5B,kBAAkB,EAAE,MAAM,EAAE,kBAAkB;oBAC9C,eAAe,EAAE,MAAM,EAAE,eAAe;iBACzC,CAAC,CAAC,CACJ;YACH,CAAC;AACD,YAAA,SAAS,EAAE,CACT,WAAgC,EAChC,MAA0D,KACC;gBAC3D,MAAM,SAAS,GACb,WAAW,CAAC,kBAAkB,EAAE,gBAAgB,IAAI,EAAE;gBACxD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM;sBACtC,MAAM,CAAC;uBACL,WAAW,CAAC,kBAAkB,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAgB;AAChE,wBAAA,EAAE,CAAC;gBAEP,OAAO,IAAI,CAAC,0BAA0B,CACpC,SAAS,EACT,MAAM,EACN,WAAW,EACX,MAAM,CAAC,eAAe,IAAI,EAAE,EAC5B,MAAM,CAAC,qBAAqB,IAAI,KAAK,CACtC;YACH,CAAC;SACF;IACH;+GArlBW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA,CAAA;;4FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACvDM,MAAM,eAAe,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BjC;;MCpBY,kBAAkB,CAAA;AAH/B,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAAmC;AAwC/D,IAAA;AAtCC,IAAA,IAAI,CAAC,WAAgC,EAAA;AACnC,QAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,IAAI,EAAE;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC/C,IAAI,UAAU,EAAE;AACd,YAAA,OAAO,UAAU;QACnB;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC;aACnB,MAAM,CAAC,WAAW;AAClB,aAAA,KAAK,CAAc;AAClB,YAAA,KAAK,EAAE,eAAe;SACvB;AACA,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,GAAQ,KAAI;YACf,MAAM,cAAc,GAClB,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,WAAW;YAErD,OAAO;AACL,gBAAA,GAAG,cAAc;AACjB,gBAAA,IAAI,EAAE;oBACJ,GAAG,cAAc,CAAC,IAAI;AACtB,oBAAA,IAAI,EAAE;AACJ,wBAAA,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI;AAC3B,wBAAA,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AACtD,qBAAA;AACF,iBAAA;aACF;AACH,QAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,EACd,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC/B,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;QAChC,CAAC,CAAC,CACH;QAEH,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACtC,QAAA,OAAO,QAAQ;IACjB;+GAzCW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA,CAAA;;4FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACRM,MAAM,iBAAiB,GAAG,GAAG,CAAA;;;;;;;;;;;;CAYnC;;MCHY,qBAAqB,CAAA;AAHlC,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAU9C,IAAA;AARQ,IAAA,IAAI,CAAC,WAAgC,EAAA;QAC1C,OAAO,IAAI,CAAC;aACT,MAAM,CAAC,WAAW;AAClB,aAAA,KAAK,CAAiB;AACrB,YAAA,KAAK,EAAE,iBAAiB;SACzB;AACA,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,GAAQ,KAAK,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC1E;+GAVW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA;;4FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCLY,mBAAmB,CAAA;AADhC,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AA0BpD,IAAA;AAxBC,IAAA,WAAW,CAAC,KAAU,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;YACpC,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC3D;aAAO;YACL,MAAM,OAAO,GACX,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACnE,YAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;gBAC9B,IAAI,EAAE,OAAO,IAAI,2BAA2B;AAC5C,gBAAA,IAAI,EAAE,OAAO;AACd,aAAA,CAAC;AACF,YAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QACtB;IACF;AAEA,IAAA,6BAA6B,CAAC,SAAmB,EAAA;QAC/C,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC3D;AAEA,IAAA,oBAAoB,CAAC,KAAU,EAAA;AAC7B,QAAA,QACE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;AACrD,YAAA,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,QAAQ,CAAC,eAAe,CAAC;IAE9D;+GA1BW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cADN,MAAM,EAAA,CAAA,CAAA;;4FACnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCSrB,wBAAwB,CAAA;AAUnC,IAAA,WAAA,GAAA;AATQ,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACrD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAEjC,IAAA,CAAA,OAAO,GAAG,KAAK;AACf,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,OAAO,EAAQ;AAGlC,QAAA,KAAK,IAAI,CAAC,UAAU,EAAE;IACxB;AAEQ,IAAA,MAAM,UAAU,GAAA;QACtB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE;QAC/D,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;AAE9D,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB;QACF;AAEA,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CACH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAC3B,UAAU,CAAC,MACT,IAAI,CAAC;AACF,aAAA,IAAI,CAAC;AACJ,YAAA,aAAa,EAAE;AACb,gBAAA,gBAAgB,EACd,YAAY,CAAC,aAAa,CAAC,kBAAkB,CAAC;AACjD,aAAA;AACD,YAAA,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;AAClC,YAAA,SAAS,EAAE,OAAO;SACnB;AACA,aAAA,IAAI,CACH,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC;;AAExC,YAAA,OAAO,KAAK;QACd,CAAC,CAAC,CACH,CACJ,EACD,GAAG,CAAC,CAAC,GAAmB,KAAI;YAC1B,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO;AAC3C,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC3D;AACF,QAAA,CAAC,CAAC;AAEH,aAAA,SAAS,EAAE;IAChB;IAEO,sBAAsB,GAAA;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;+GAvDW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cADX,MAAM,EAAA,CAAA,CAAA;;4FACnB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACZlC;;AAEG;;;;"}
|
|
@@ -152,6 +152,10 @@ const getValueByPath = (obj, path) => {
|
|
|
152
152
|
});
|
|
153
153
|
};
|
|
154
154
|
|
|
155
|
+
const permissionKey = (instance) => [instance.resource, instance.namespace, instance.name]
|
|
156
|
+
.filter(Boolean)
|
|
157
|
+
.join('/');
|
|
158
|
+
|
|
155
159
|
const isLocalSetup = () => {
|
|
156
160
|
return (window.location.hostname.includes('localhost') ||
|
|
157
161
|
window.location.hostname.includes('portal.dev.local'));
|
|
@@ -218,6 +222,16 @@ const parseRawGqlQueryToFields = (s) => {
|
|
|
218
222
|
return root;
|
|
219
223
|
};
|
|
220
224
|
|
|
225
|
+
/**
|
|
226
|
+
* Tier-1 resource-level permission check (fail-open).
|
|
227
|
+
*
|
|
228
|
+
* Returns true when the verb is granted for the resource, OR when no
|
|
229
|
+
* permissions were fetched for the resource at all (no entry in
|
|
230
|
+
* portalPermissions → we don't gate). Returns false ONLY when permissions
|
|
231
|
+
* WERE fetched for the resource and the verb is absent.
|
|
232
|
+
*/
|
|
233
|
+
const resourceActionAllowed = (portalPermissions, resource, verb) => portalPermissions?.[resource ?? '']?.includes(verb) ?? true;
|
|
234
|
+
|
|
221
235
|
function stripTypename(value) {
|
|
222
236
|
if (Array.isArray(value)) {
|
|
223
237
|
return value.map((v) => stripTypename(v));
|
|
@@ -260,5 +274,5 @@ function setPropertyByPath(object, path, value) {
|
|
|
260
274
|
* Generated bundle index. Do not edit.
|
|
261
275
|
*/
|
|
262
276
|
|
|
263
|
-
export { buildGraphQLInputTypeName, buildResourcePath, decodeBase64, encodeBase64, generateGraphQLFields, getResourceValueByJsonPath, getValueByPath, isLocalSetup, isNamespacedResource, mergeListWithSubscriptionResult, parseRawGqlQueryToFields, setPropertyByPath, stripTypename };
|
|
277
|
+
export { buildGraphQLInputTypeName, buildResourcePath, decodeBase64, encodeBase64, generateGraphQLFields, getResourceValueByJsonPath, getValueByPath, isLocalSetup, isNamespacedResource, mergeListWithSubscriptionResult, parseRawGqlQueryToFields, permissionKey, resourceActionAllowed, setPropertyByPath, stripTypename };
|
|
264
278
|
//# sourceMappingURL=platform-mesh-portal-ui-lib-utils.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-mesh-portal-ui-lib-utils.mjs","sources":["../../projects/lib/utils/utils/build-graphql-input-type-name.ts","../../projects/lib/utils/utils/build-resource-list-operation.ts","../../projects/lib/utils/utils/columns-to-gql-fields.ts","../../projects/lib/utils/utils/resource-field-by-path.ts","../../projects/lib/utils/utils/get-value-by-path.ts","../../projects/lib/utils/utils/is-local-setup.ts","../../projects/lib/utils/utils/is-namespaced-resource.ts","../../projects/lib/utils/utils/merge-list-with-subscription-result.ts","../../projects/lib/utils/utils/parse-raw-gql-query.ts","../../projects/lib/utils/utils/resource-sanitizer.ts","../../projects/lib/utils/utils/set-property-by-path.ts","../../projects/lib/utils/platform-mesh-portal-ui-lib-utils.ts"],"sourcesContent":["function sanitizeGroup(group: string): string {\n let sanitized = group.replace(/[^a-zA-Z0-9]/g, '_');\n if (/^[0-9]/.test(sanitized)) {\n sanitized = '_' + sanitized;\n }\n return sanitized;\n}\n\nfunction pascalize(snakeCase: string): string {\n return snakeCase\n .split('_')\n .filter((segment) => segment.length > 0)\n .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1))\n .join('');\n}\n\nexport function buildGraphQLInputTypeName(\n apiGroup: string | undefined,\n version: string | undefined,\n entity: string,\n): string {\n let prefix: string;\n\n if (apiGroup && version) {\n prefix = pascalize(sanitizeGroup(apiGroup) + '_' + version);\n } else if (apiGroup) {\n prefix = pascalize(sanitizeGroup(apiGroup));\n } else if (version) {\n prefix = pascalize('_' + version);\n } else {\n return `${entity}_Input`;\n }\n\n return `${prefix}${entity}_Input`;\n}\n","export function buildResourcePath(\n input: {\n apiGroup?: string | undefined;\n entity: string;\n version?: string | undefined;\n },\n separator: string = '_',\n): string {\n return [input.apiGroup, input.version, input.entity]\n .filter((p): p is string => !!p)\n .join(separator);\n}\n","import { PlatformMeshFieldDefinition } from '@platform-mesh/portal-ui-lib/models';\n\nexport const generateGraphQLFields = (\n uiFields: PlatformMeshFieldDefinition[],\n): any[] => {\n const graphQLFields = [];\n uiFields.map((field) => {\n if (field.property instanceof Array) {\n field.property.map((property) => generate(property, graphQLFields));\n } else {\n generate(field.property, graphQLFields);\n }\n });\n return graphQLFields;\n};\n\nconst generate = (root: string | undefined, fields: any = []) => {\n if (!root) {\n return [];\n }\n\n const paths = root.split('.');\n\n for (const part of paths) {\n if (paths.length === 1) {\n fields.push(part);\n return fields;\n }\n\n fields.push({\n [part]: [...generate(paths.splice(1).join('.'))],\n });\n\n return fields;\n }\n};\n","import {\n PropertyField,\n TransformType,\n} from '@platform-mesh/portal-ui-lib/models';\nimport { JSONPath } from 'jsonpath-plus';\n\nexport const getResourceValueByJsonPath = <T>(\n resource: T,\n field: {\n jsonPathExpression?: string;\n property?: string | string[];\n propertyField?: PropertyField;\n },\n) => {\n const property = field.jsonPathExpression || field.property;\n if (!property) {\n return undefined;\n }\n\n if (property instanceof Array) {\n console.error(\n `Property defined as an array: ${JSON.stringify(property)}, provide \"jsonPathExpression\" field to properly ready resource value`,\n );\n return undefined;\n }\n\n const prefix = property.startsWith('$.') ? '' : '$.';\n const queryResult = JSONPath({\n path: `${prefix}${property}`,\n json: resource as object,\n });\n const value = queryResult.length ? queryResult[0] : undefined;\n\n if (value && field.propertyField) {\n return executeTransform(\n value[field.propertyField.key],\n field.propertyField.transform,\n );\n }\n\n return value;\n};\n\nconst executeTransform = (\n value: string | undefined,\n transform: TransformType[] | undefined,\n): string | undefined => {\n if (value == null || transform == null || !transform.length) return value;\n\n return transform.reduce((acc, t) => {\n if (acc == null) return acc;\n\n switch (t) {\n case 'uppercase':\n return acc.toUpperCase();\n case 'lowercase':\n return acc.toLowerCase();\n case 'capitalize': {\n const str = String(acc);\n return str.length ? str.charAt(0).toUpperCase() + str.slice(1) : str;\n }\n case 'decode': {\n try {\n return decodeBase64(acc);\n } catch {\n return acc;\n }\n }\n case 'encode': {\n try {\n return encodeBase64(acc);\n } catch {\n return acc;\n }\n }\n default:\n return acc;\n }\n }, value);\n};\n\nexport const encodeBase64 = (str: string): string => {\n try {\n const utf8Bytes = new TextEncoder().encode(str);\n const binaryString = Array.from(utf8Bytes, (byte) =>\n String.fromCharCode(byte),\n ).join('');\n return btoa(binaryString);\n } catch (error) {\n console.error('Base64 encoding failed:', error);\n throw new Error('Failed to encode string to Base64');\n }\n};\n\nexport const decodeBase64 = (base64: string): string => {\n try {\n const binaryString = atob(base64);\n const bytes = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));\n return new TextDecoder().decode(bytes);\n } catch (error) {\n console.error('Base64 decoding failed:', error);\n throw new Error('Failed to decode Base64 string');\n }\n};\n","import { getResourceValueByJsonPath } from './resource-field-by-path';\nimport { Resource } from '@platform-mesh/portal-ui-lib/models';\n\nexport const getValueByPath = <T extends object, R = unknown>(\n obj: T,\n path: string,\n): R | undefined => {\n return getResourceValueByJsonPath(obj as Resource, {\n jsonPathExpression: path,\n });\n};\n","export const isLocalSetup = () => {\n return (\n window.location.hostname.includes('localhost') ||\n window.location.hostname.includes('portal.dev.local')\n );\n};\n","import { NodeContext } from '@openmfp/portal-ui-lib';\n\nexport function isNamespacedResource(nodeContext: Partial<NodeContext>) {\n return nodeContext?.resourceDefinition?.scope === 'Namespaced';\n}\n","import {\n Resource,\n ResourceOperationTypeMap,\n ResourceSubscriptionResult,\n} from '@platform-mesh/portal-ui-lib/models';\n\nexport interface MergeListWithSubscriptionResultOptions<T> {\n getItemKey: (item: T) => string | undefined;\n mapSubscriptionObjectToItem: (object: Resource) => T;\n}\n\nexport function mergeListWithSubscriptionResult<T>(\n items: T[],\n subscriptionResult: ResourceSubscriptionResult | undefined,\n options: MergeListWithSubscriptionResultOptions<T>,\n): T[] {\n if (!subscriptionResult) {\n return items;\n }\n\n const { getItemKey, mapSubscriptionObjectToItem } = options;\n\n const result = new Map<string, T>();\n items.forEach((item) => {\n const key = getItemKey(item);\n if (!key) {\n return;\n }\n result.set(key, item);\n });\n\n const { type, object } = subscriptionResult;\n const objectKey = object.metadata?.name;\n if (!objectKey) {\n return items;\n }\n\n const mappedObject = mapSubscriptionObjectToItem(object);\n if (type === ResourceOperationTypeMap.ADDED) {\n result.set(objectKey, mappedObject);\n } else if (type === ResourceOperationTypeMap.MODIFIED) {\n if (result.has(objectKey)) {\n result.set(objectKey, mappedObject);\n }\n } else if (type === ResourceOperationTypeMap.DELETED) {\n result.delete(objectKey);\n }\n\n return [...result.values()];\n}\n","export const parseRawGqlQueryToFields = (s: string): any[] => {\n const tokens = s.replace(/[{}]/g, ' $& ').trim().split(/\\s+/);\n const root: any[] = [];\n const stack: any[][] = [root];\n\n for (let i = 0; i < tokens.length; i++) {\n const v = tokens[i];\n\n if (v === '{') continue;\n if (v === '}') {\n stack.pop();\n continue;\n }\n\n if (tokens[i + 1] === '{') {\n const node = { [v]: [] };\n stack.at(-1)?.push(node);\n stack.push(node[v]);\n } else {\n stack.at(-1)?.push(v);\n }\n }\n\n return root;\n};\n","export function stripTypename<T>(value: T): T {\n if (Array.isArray(value)) {\n return (value as unknown as any[]).map((v) => stripTypename(v)) as T;\n }\n if (value && typeof value === 'object') {\n const { __typename, ...rest } = value as Record<string, unknown> & {\n __typename?: string;\n };\n for (const k of Object.keys(rest)) {\n // @ts-ignore - rest is an indexable object\n rest[k] = stripTypename((rest as any)[k]);\n }\n return rest as T;\n }\n return value;\n}\n","export function setPropertyByPath<T extends Record<string, any>>(\n object: T,\n path: string,\n value: unknown,\n): T {\n const segments = path.split('.').filter(Boolean);\n if (segments.length === 0) {\n return object;\n }\n\n let current: object = object;\n\n for (let i = 0; i < segments.length; i += 1) {\n const key = segments[i];\n if (i === segments.length - 1) {\n current[key] = value;\n break;\n }\n\n const existing = current[key];\n\n if (\n existing === undefined ||\n existing === null ||\n typeof existing !== 'object'\n ) {\n current[key] = {};\n }\n\n current = current[key];\n }\n\n return object;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"platform-mesh-portal-ui-lib-utils.mjs","sources":["../../projects/lib/utils/utils/build-graphql-input-type-name.ts","../../projects/lib/utils/utils/build-resource-list-operation.ts","../../projects/lib/utils/utils/columns-to-gql-fields.ts","../../projects/lib/utils/utils/resource-field-by-path.ts","../../projects/lib/utils/utils/get-value-by-path.ts","../../projects/lib/utils/utils/instance-permission-key.ts","../../projects/lib/utils/utils/is-local-setup.ts","../../projects/lib/utils/utils/is-namespaced-resource.ts","../../projects/lib/utils/utils/merge-list-with-subscription-result.ts","../../projects/lib/utils/utils/parse-raw-gql-query.ts","../../projects/lib/utils/utils/resource-action-allowed.ts","../../projects/lib/utils/utils/resource-sanitizer.ts","../../projects/lib/utils/utils/set-property-by-path.ts","../../projects/lib/utils/platform-mesh-portal-ui-lib-utils.ts"],"sourcesContent":["function sanitizeGroup(group: string): string {\n let sanitized = group.replace(/[^a-zA-Z0-9]/g, '_');\n if (/^[0-9]/.test(sanitized)) {\n sanitized = '_' + sanitized;\n }\n return sanitized;\n}\n\nfunction pascalize(snakeCase: string): string {\n return snakeCase\n .split('_')\n .filter((segment) => segment.length > 0)\n .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1))\n .join('');\n}\n\nexport function buildGraphQLInputTypeName(\n apiGroup: string | undefined,\n version: string | undefined,\n entity: string,\n): string {\n let prefix: string;\n\n if (apiGroup && version) {\n prefix = pascalize(sanitizeGroup(apiGroup) + '_' + version);\n } else if (apiGroup) {\n prefix = pascalize(sanitizeGroup(apiGroup));\n } else if (version) {\n prefix = pascalize('_' + version);\n } else {\n return `${entity}_Input`;\n }\n\n return `${prefix}${entity}_Input`;\n}\n","export function buildResourcePath(\n input: {\n apiGroup?: string | undefined;\n entity: string;\n version?: string | undefined;\n },\n separator: string = '_',\n): string {\n return [input.apiGroup, input.version, input.entity]\n .filter((p): p is string => !!p)\n .join(separator);\n}\n","import { PlatformMeshFieldDefinition } from '@platform-mesh/portal-ui-lib/models';\n\nexport const generateGraphQLFields = (\n uiFields: PlatformMeshFieldDefinition[],\n): any[] => {\n const graphQLFields = [];\n uiFields.map((field) => {\n if (field.property instanceof Array) {\n field.property.map((property) => generate(property, graphQLFields));\n } else {\n generate(field.property, graphQLFields);\n }\n });\n return graphQLFields;\n};\n\nconst generate = (root: string | undefined, fields: any = []) => {\n if (!root) {\n return [];\n }\n\n const paths = root.split('.');\n\n for (const part of paths) {\n if (paths.length === 1) {\n fields.push(part);\n return fields;\n }\n\n fields.push({\n [part]: [...generate(paths.splice(1).join('.'))],\n });\n\n return fields;\n }\n};\n","import {\n PropertyField,\n TransformType,\n} from '@platform-mesh/portal-ui-lib/models';\nimport { JSONPath } from 'jsonpath-plus';\n\nexport const getResourceValueByJsonPath = <T>(\n resource: T,\n field: {\n jsonPathExpression?: string;\n property?: string | string[];\n propertyField?: PropertyField;\n },\n) => {\n const property = field.jsonPathExpression || field.property;\n if (!property) {\n return undefined;\n }\n\n if (property instanceof Array) {\n console.error(\n `Property defined as an array: ${JSON.stringify(property)}, provide \"jsonPathExpression\" field to properly ready resource value`,\n );\n return undefined;\n }\n\n const prefix = property.startsWith('$.') ? '' : '$.';\n const queryResult = JSONPath({\n path: `${prefix}${property}`,\n json: resource as object,\n });\n const value = queryResult.length ? queryResult[0] : undefined;\n\n if (value && field.propertyField) {\n return executeTransform(\n value[field.propertyField.key],\n field.propertyField.transform,\n );\n }\n\n return value;\n};\n\nconst executeTransform = (\n value: string | undefined,\n transform: TransformType[] | undefined,\n): string | undefined => {\n if (value == null || transform == null || !transform.length) return value;\n\n return transform.reduce((acc, t) => {\n if (acc == null) return acc;\n\n switch (t) {\n case 'uppercase':\n return acc.toUpperCase();\n case 'lowercase':\n return acc.toLowerCase();\n case 'capitalize': {\n const str = String(acc);\n return str.length ? str.charAt(0).toUpperCase() + str.slice(1) : str;\n }\n case 'decode': {\n try {\n return decodeBase64(acc);\n } catch {\n return acc;\n }\n }\n case 'encode': {\n try {\n return encodeBase64(acc);\n } catch {\n return acc;\n }\n }\n default:\n return acc;\n }\n }, value);\n};\n\nexport const encodeBase64 = (str: string): string => {\n try {\n const utf8Bytes = new TextEncoder().encode(str);\n const binaryString = Array.from(utf8Bytes, (byte) =>\n String.fromCharCode(byte),\n ).join('');\n return btoa(binaryString);\n } catch (error) {\n console.error('Base64 encoding failed:', error);\n throw new Error('Failed to encode string to Base64');\n }\n};\n\nexport const decodeBase64 = (base64: string): string => {\n try {\n const binaryString = atob(base64);\n const bytes = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));\n return new TextDecoder().decode(bytes);\n } catch (error) {\n console.error('Base64 decoding failed:', error);\n throw new Error('Failed to decode Base64 string');\n }\n};\n","import { getResourceValueByJsonPath } from './resource-field-by-path';\nimport { Resource } from '@platform-mesh/portal-ui-lib/models';\n\nexport const getValueByPath = <T extends object, R = unknown>(\n obj: T,\n path: string,\n): R | undefined => {\n return getResourceValueByJsonPath(obj as Resource, {\n jsonPathExpression: path,\n });\n};\n","import { InstancePermission } from '@platform-mesh/portal-ui-lib/models';\n\nexport const permissionKey = (\n instance: Partial<Omit<InstancePermission, 'actions'>>,\n): string =>\n [instance.resource, instance.namespace, instance.name]\n .filter(Boolean)\n .join('/');\n","export const isLocalSetup = () => {\n return (\n window.location.hostname.includes('localhost') ||\n window.location.hostname.includes('portal.dev.local')\n );\n};\n","import { NodeContext } from '@openmfp/portal-ui-lib';\n\nexport function isNamespacedResource(nodeContext: Partial<NodeContext>) {\n return nodeContext?.resourceDefinition?.scope === 'Namespaced';\n}\n","import {\n Resource,\n ResourceOperationTypeMap,\n ResourceSubscriptionResult,\n} from '@platform-mesh/portal-ui-lib/models';\n\nexport interface MergeListWithSubscriptionResultOptions<T> {\n getItemKey: (item: T) => string | undefined;\n mapSubscriptionObjectToItem: (object: Resource) => T;\n}\n\nexport function mergeListWithSubscriptionResult<T>(\n items: T[],\n subscriptionResult: ResourceSubscriptionResult | undefined,\n options: MergeListWithSubscriptionResultOptions<T>,\n): T[] {\n if (!subscriptionResult) {\n return items;\n }\n\n const { getItemKey, mapSubscriptionObjectToItem } = options;\n\n const result = new Map<string, T>();\n items.forEach((item) => {\n const key = getItemKey(item);\n if (!key) {\n return;\n }\n result.set(key, item);\n });\n\n const { type, object } = subscriptionResult;\n const objectKey = object.metadata?.name;\n if (!objectKey) {\n return items;\n }\n\n const mappedObject = mapSubscriptionObjectToItem(object);\n if (type === ResourceOperationTypeMap.ADDED) {\n result.set(objectKey, mappedObject);\n } else if (type === ResourceOperationTypeMap.MODIFIED) {\n if (result.has(objectKey)) {\n result.set(objectKey, mappedObject);\n }\n } else if (type === ResourceOperationTypeMap.DELETED) {\n result.delete(objectKey);\n }\n\n return [...result.values()];\n}\n","export const parseRawGqlQueryToFields = (s: string): any[] => {\n const tokens = s.replace(/[{}]/g, ' $& ').trim().split(/\\s+/);\n const root: any[] = [];\n const stack: any[][] = [root];\n\n for (let i = 0; i < tokens.length; i++) {\n const v = tokens[i];\n\n if (v === '{') continue;\n if (v === '}') {\n stack.pop();\n continue;\n }\n\n if (tokens[i + 1] === '{') {\n const node = { [v]: [] };\n stack.at(-1)?.push(node);\n stack.push(node[v]);\n } else {\n stack.at(-1)?.push(v);\n }\n }\n\n return root;\n};\n","/**\n * Tier-1 resource-level permission check (fail-open).\n *\n * Returns true when the verb is granted for the resource, OR when no\n * permissions were fetched for the resource at all (no entry in\n * portalPermissions → we don't gate). Returns false ONLY when permissions\n * WERE fetched for the resource and the verb is absent.\n */\nexport const resourceActionAllowed = (\n portalPermissions: { [key: string]: string[] } | undefined,\n resource: string | undefined,\n verb: string,\n): boolean => portalPermissions?.[resource ?? '']?.includes(verb) ?? true;\n","export function stripTypename<T>(value: T): T {\n if (Array.isArray(value)) {\n return (value as unknown as any[]).map((v) => stripTypename(v)) as T;\n }\n if (value && typeof value === 'object') {\n const { __typename, ...rest } = value as Record<string, unknown> & {\n __typename?: string;\n };\n for (const k of Object.keys(rest)) {\n // @ts-ignore - rest is an indexable object\n rest[k] = stripTypename((rest as any)[k]);\n }\n return rest as T;\n }\n return value;\n}\n","export function setPropertyByPath<T extends Record<string, any>>(\n object: T,\n path: string,\n value: unknown,\n): T {\n const segments = path.split('.').filter(Boolean);\n if (segments.length === 0) {\n return object;\n }\n\n let current: object = object;\n\n for (let i = 0; i < segments.length; i += 1) {\n const key = segments[i];\n if (i === segments.length - 1) {\n current[key] = value;\n break;\n }\n\n const existing = current[key];\n\n if (\n existing === undefined ||\n existing === null ||\n typeof existing !== 'object'\n ) {\n current[key] = {};\n }\n\n current = current[key];\n }\n\n return object;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|