@platform-mesh/portal-ui-lib 0.70.0 → 0.70.1

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.
@@ -11,8 +11,8 @@ import { HttpLink } from 'apollo-angular/http';
11
11
  import { print } from 'graphql';
12
12
  import { createClient } from 'graphql-sse';
13
13
  import { of, throwError, catchError as catchError$1, map as map$1, firstValueFrom } from 'rxjs';
14
- import { catchError, map, shareReplay } from 'rxjs/operators';
15
- import { isNamespacedResource, getValueByPath, buildResourcePath, getResourceValueByJsonPath, buildGraphQLInputTypeName, stripTypename, decodeBase64, generateGraphQLFields } from '@platform-mesh/portal-ui-lib/utils';
14
+ import { catchError, map, switchMap, shareReplay } from 'rxjs/operators';
15
+ import { isNamespacedResource, getValueByPath, buildResourcePath, getResourceValueByJsonPath, stripTypename, buildGraphQLInputTypeName, decodeBase64, generateGraphQLFields } from '@platform-mesh/portal-ui-lib/utils';
16
16
  import * as gqlBuilder from 'gql-query-builder';
17
17
 
18
18
  class GatewayService {
@@ -475,68 +475,86 @@ class ResourceService {
475
475
  const isNamespaced = isNamespacedResource(nodeContext);
476
476
  const { apiGroup, entity, version } = resourceDefinition;
477
477
  const namespace = this.getNamespace(nodeContext, resource);
478
- const mutationFields = [
479
- {
480
- operation: `create${entity}`,
481
- variables: {
482
- ...(isNamespaced && {
483
- namespace: { type: 'String', value: namespace },
484
- }),
485
- object: {
486
- type: `${buildGraphQLInputTypeName(apiGroup, version, entity)}!`,
487
- value: resource,
478
+ const apollo = this.apolloFactory.apollo(nodeContext);
479
+ return this.readInputTypeName(apollo, resourceDefinition).pipe(switchMap((inputTypeName) => {
480
+ const mutationFields = [
481
+ {
482
+ operation: `create${entity}`,
483
+ variables: {
484
+ ...(isNamespaced && {
485
+ namespace: { type: 'String', value: namespace },
486
+ }),
487
+ object: {
488
+ type: `${inputTypeName}!`,
489
+ value: resource,
490
+ },
488
491
  },
492
+ fields: ['__typename'],
489
493
  },
490
- fields: ['__typename'],
491
- },
492
- ];
493
- const queryOptions = this.calcQueryOptions(mutationFields, [
494
- { operation: apiGroup },
495
- { operation: version },
496
- ]);
497
- const mutation = gqlBuilder.mutation(queryOptions);
498
- const query = this.parseGQLQuery(mutation.query);
499
- return this.apolloFactory.apollo(nodeContext).mutate({
500
- mutation: query,
501
- fetchPolicy: 'no-cache',
502
- variables: mutation.variables,
503
- });
494
+ ];
495
+ const queryOptions = this.calcQueryOptions(mutationFields, [
496
+ { operation: apiGroup },
497
+ { operation: version },
498
+ ]);
499
+ const mutation = gqlBuilder.mutation(queryOptions);
500
+ const query = this.parseGQLQuery(mutation.query);
501
+ return apollo.mutate({
502
+ mutation: query,
503
+ fetchPolicy: 'no-cache',
504
+ variables: mutation.variables,
505
+ });
506
+ }));
504
507
  }
505
508
  update(resource, resourceDefinition, nodeContext, readFromParentKcpPath = false, fields = ['__typename']) {
506
509
  const isNamespaced = isNamespacedResource(nodeContext);
507
510
  const { apiGroup, entity, version } = resourceDefinition;
508
511
  const namespace = this.getNamespace(nodeContext, resource);
509
512
  const cleanResource = stripTypename(resource);
510
- const mutationFields = [
511
- {
512
- operation: `update${entity}`,
513
- variables: {
514
- ...(isNamespaced && {
515
- namespace: { type: 'String', value: namespace },
516
- }),
517
- name: { type: 'String!', value: resource.metadata.name },
518
- object: {
519
- type: `${buildGraphQLInputTypeName(apiGroup, version, entity)}!`,
520
- value: cleanResource,
513
+ const apollo = this.apolloFactory.apollo(nodeContext, readFromParentKcpPath);
514
+ return this.readInputTypeName(apollo, resourceDefinition).pipe(switchMap((inputTypeName) => {
515
+ const mutationFields = [
516
+ {
517
+ operation: `update${entity}`,
518
+ variables: {
519
+ ...(isNamespaced && {
520
+ namespace: { type: 'String', value: namespace },
521
+ }),
522
+ name: { type: 'String!', value: resource.metadata.name },
523
+ object: {
524
+ type: `${inputTypeName}!`,
525
+ value: cleanResource,
526
+ },
521
527
  },
528
+ fields: fields,
522
529
  },
523
- fields: fields,
524
- },
525
- ];
526
- const queryOptions = this.calcQueryOptions(mutationFields, [
527
- { operation: apiGroup },
528
- { operation: version },
529
- ]);
530
- const mutation = gqlBuilder.mutation(queryOptions);
531
- const query = this.parseGQLQuery(mutation.query);
532
- return this.apolloFactory
533
- .apollo(nodeContext, readFromParentKcpPath)
534
- .mutate({
535
- mutation: query,
536
- fetchPolicy: 'no-cache',
537
- variables: mutation.variables,
538
- })
539
- .pipe(map((res) => getValueByPath(res.data, buildResourcePath({ apiGroup, entity: `update${entity}`, version }, '.'))));
530
+ ];
531
+ const queryOptions = this.calcQueryOptions(mutationFields, [
532
+ { operation: apiGroup },
533
+ { operation: version },
534
+ ]);
535
+ const mutation = gqlBuilder.mutation(queryOptions);
536
+ const query = this.parseGQLQuery(mutation.query);
537
+ return apollo.mutate({
538
+ mutation: query,
539
+ fetchPolicy: 'no-cache',
540
+ variables: mutation.variables,
541
+ });
542
+ }), map((res) => getValueByPath(res.data, buildResourcePath({ apiGroup, entity: `update${entity}`, version }, '.'))));
543
+ }
544
+ /**
545
+ * Reads the `__typename` of the query type that holds the resource, e.g.
546
+ * `{ network_api_foo_bar { v1alpha1 { __typename } } }`, and derives the
547
+ * mutation input type name from it. The gateway generates the schema, so
548
+ * its type names are the only source of truth.
549
+ */
550
+ readInputTypeName(apollo, resourceDefinition) {
551
+ const { apiGroup, entity, version } = resourceDefinition;
552
+ const selection = [apiGroup, version]
553
+ .filter((field) => !!field)
554
+ .reduceRight((inner, field) => `${field} { ${inner} }`, '__typename');
555
+ return apollo
556
+ .query({ query: this.parseGQLQuery(`query { ${selection} }`) })
557
+ .pipe(map((res) => buildGraphQLInputTypeName(getValueByPath(res.data, buildResourcePath({ apiGroup, entity: '__typename', version }, '.')), entity)));
540
558
  }
541
559
  getNamespace(nodeContext, resource) {
542
560
  // namespaceId can carry the '-all-' sentinel when the portal forwards the
@@ -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/instance-permissions.service.ts","../../projects/lib/services/resource/resource.service.ts","../../projects/lib/services/resource/kubeconfig-secret.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/resource/namespace.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 { map } from 'rxjs/operators';\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: this.getResourceId(r),\n isAvailable: this.isAvailable(\n r,\n resourceDefinition.availableWhenNotReady,\n ),\n accessibleName: this.getAccessibleName(r),\n }));\n return { ...resourceListResult, items: processedResult };\n }),\n );\n }\n\n private getResourceId(resource: Resource) {\n return `${resource.metadata.name}${resource.metadata.namespace ? '_' + resource.metadata.namespace : ''}`;\n }\n\n isAvailable(item: Resource, availableWhenNotReady = false) {\n return (\n (!!item.ready || availableWhenNotReady) &&\n !item.metadata?.deletionTimestamp\n );\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 );\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 = this.getResourceId(resource.object);\n resource.object.isAvailable = this.isAvailable(\n resource.object,\n nodeContext.resourceDefinition?.availableWhenNotReady,\n );\n resource.object.accessibleName = this.getAccessibleName(\n resource.object,\n );\n }\n return resource;\n }),\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 }\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.apollo(nodeContext).mutate({\n mutation: query,\n fetchPolicy: 'no-cache',\n variables: mutation.variables,\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, resource);\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 );\n }\n\n getNamespace(\n nodeContext: ResourceNodeContext,\n resource?: Resource,\n ): string | undefined {\n // namespaceId can carry the '-all-' sentinel when the portal forwards the\n // namespace selection; it is never a real namespace, so fall through.\n if (nodeContext.namespaceId && nodeContext.namespaceId !== ALL_NAMESPACE) {\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 const message = error instanceof Error ? error.message : String(error);\n this.luigiCoreService.showAlert({\n text: `Could not parse gql query: <br/><br/> ${query} <br/><br/> ${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 { ResourceNodeContext } from './resource-node-context';\nimport { ResourceService } from './resource.service';\nimport { Injectable, inject } from '@angular/core';\nimport {\n ALL_NAMESPACE,\n ButtonSettings,\n DOWNLOAD_KUBECONFIG_FROM_SECRET_REF_ACTION,\n DownloadKubeconfigFromSecretRefButtonSettings,\n PlatformMeshFieldDefinition,\n Resource,\n ResourceDefinition,\n} from '@platform-mesh/portal-ui-lib/models';\nimport {\n decodeBase64,\n getResourceValueByJsonPath,\n} from '@platform-mesh/portal-ui-lib/utils';\nimport { Observable, catchError, map, throwError } from 'rxjs';\n\nconst SECRET_RESOURCE_DEFINITION: ResourceDefinition = {\n version: 'v1',\n entity: 'Secret',\n entityCollection: 'Secrets',\n scope: 'Namespaced',\n};\n\nconst DEFAULT_DATA_KEY = 'kubeconfig';\nconst DEFAULT_FILENAME = 'kubeconfig.yaml';\n\nexport interface KubeconfigDownload {\n contents: string;\n filename: string;\n}\n\ninterface SecretReference {\n name: string;\n namespace: string;\n}\n\nexport function isDownloadKubeconfigButtonSettings(\n buttonSettings: ButtonSettings | undefined,\n): buttonSettings is DownloadKubeconfigFromSecretRefButtonSettings {\n return buttonSettings?.action === DOWNLOAD_KUBECONFIG_FROM_SECRET_REF_ACTION;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class KubeconfigSecretService {\n private resourceService = inject(ResourceService);\n\n /**\n * Fields the detail-view query has to read so the action can resolve its\n * Secret reference from the loaded resource.\n */\n secretReferenceQueryFields(\n buttonSettings: ButtonSettings | undefined,\n ): PlatformMeshFieldDefinition[] {\n if (!isDownloadKubeconfigButtonSettings(buttonSettings)) {\n return [];\n }\n\n const fields: PlatformMeshFieldDefinition[] = [];\n const resourceProperty = this.readString(buttonSettings.resourceProperty);\n if (resourceProperty) {\n fields.push({ property: resourceProperty });\n }\n const namespaceProperty = this.readString(buttonSettings.namespaceProperty);\n if (namespaceProperty) {\n fields.push({ property: namespaceProperty });\n }\n\n return fields;\n }\n\n isSecretReferenceAvailable(\n buttonSettings: ButtonSettings | undefined,\n resource: Resource | undefined,\n context: ResourceNodeContext,\n ): boolean {\n return (\n isDownloadKubeconfigButtonSettings(buttonSettings) &&\n this.resolveSecretReference(buttonSettings, resource, context) !==\n undefined\n );\n }\n\n readKubeconfig(\n buttonSettings: ButtonSettings,\n resource: Resource | undefined,\n context: ResourceNodeContext,\n ): Observable<KubeconfigDownload> {\n if (!isDownloadKubeconfigButtonSettings(buttonSettings)) {\n return throwError(\n () => new Error('Button is not a kubeconfig download action'),\n );\n }\n\n const secretReference = this.resolveSecretReference(\n buttonSettings,\n resource,\n context,\n );\n if (!secretReference) {\n return throwError(\n () => new Error('Kubeconfig Secret reference is not available'),\n );\n }\n\n const dataKey = this.readString(buttonSettings.dataKey) ?? DEFAULT_DATA_KEY;\n const filename =\n this.readString(buttonSettings.filename) ?? DEFAULT_FILENAME;\n const secretContext: ResourceNodeContext = {\n ...context,\n namespaceId: secretReference.namespace,\n resourceDefinition: SECRET_RESOURCE_DEFINITION,\n };\n\n return this.resourceService\n .read(\n secretReference.name,\n SECRET_RESOURCE_DEFINITION,\n ['data'],\n secretContext,\n false,\n )\n .pipe(\n catchError(() =>\n throwError(() => new Error('Kubeconfig Secret could not be read')),\n ),\n map((secret) => {\n const encodedKubeconfig = this.readString(secret?.data?.[dataKey]);\n if (!encodedKubeconfig) {\n throw new Error(\n `Kubeconfig data key \"${dataKey}\" is not available`,\n );\n }\n\n return {\n contents: decodeBase64(encodedKubeconfig),\n filename,\n };\n }),\n );\n }\n\n private resolveSecretReference(\n buttonSettings: DownloadKubeconfigFromSecretRefButtonSettings,\n resource: Resource | undefined,\n context: ResourceNodeContext,\n ): SecretReference | undefined {\n if (!resource) {\n return undefined;\n }\n\n try {\n const resourceProperty = this.readString(buttonSettings.resourceProperty);\n if (!resourceProperty) {\n return undefined;\n }\n\n const name = this.readString(\n getResourceValueByJsonPath(resource, {\n property: resourceProperty,\n }),\n );\n const namespaceProperty = this.readString(\n buttonSettings.namespaceProperty,\n );\n const namespace = namespaceProperty\n ? this.namespaceOf(\n getResourceValueByJsonPath(resource, {\n property: namespaceProperty,\n }),\n )\n : (this.namespaceOf(resource.metadata?.namespace) ??\n this.namespaceOf(this.resourceService.getNamespace(context)));\n\n return name && namespace ? { name, namespace } : undefined;\n } catch {\n return undefined;\n }\n }\n\n private namespaceOf(value: unknown): string | undefined {\n const namespace = this.readString(value);\n return namespace && namespace !== ALL_NAMESPACE ? namespace : undefined;\n }\n\n private readString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\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 { GatewayService } from './gateway.service';\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 gatewayService = inject(GatewayService);\n private readCache = new Map<string, Observable<AccountInfo>>();\n\n read(nodeContext: ResourceNodeContext): Observable<AccountInfo> {\n const cacheKey = this.gatewayService.getGatewayUrl(nodeContext);\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 if (this.readCache.get(cacheKey) === request$) {\n this.readCache.delete(cacheKey);\n }\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 { ResourceNodeContext } from './resource-node-context';\nimport { ResourceService } from './resource.service';\nimport { Injectable, inject } from '@angular/core';\nimport {\n ResourceDefinition,\n ResourceListResult,\n} from '@platform-mesh/portal-ui-lib/models';\nimport { generateGraphQLFields } from '@platform-mesh/portal-ui-lib/utils';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NamespaceService {\n private resourceService = inject(ResourceService);\n\n list(nodeContext: ResourceNodeContext): Observable<string[]> {\n return this.resourceService\n .list(\n 'v1_namespaces',\n generateGraphQLFields([{ property: 'metadata.name' }]),\n {\n portalContext: {\n crdGatewayApiUrl: nodeContext.portalContext.crdGatewayApiUrl,\n },\n resourceDefinition: {\n version: 'v1',\n entityCollection: 'Namespaces',\n entity: 'Namespace',\n scope: 'Cluster',\n } as ResourceDefinition,\n kcpPath: nodeContext.kcpPath,\n token: nodeContext.token,\n },\n )\n .pipe(\n map((result: ResourceListResult) =>\n result.items.map((item) => item.metadata.name),\n ),\n );\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { LuigiCoreService } from '@openmfp/portal-ui-lib';\n\n@Injectable({ providedIn: 'root' })\nexport class ErrorHandlerService {\n private luigiCoreService = inject(LuigiCoreService);\n\n handleError(error: any, msg?: string) {\n const message =\n error?.message || error?.errors?.map((e: any) => e.message).join('\\n');\n this.luigiCoreService.showAlert({\n text:\n [msg, message].filter(Boolean).join('\\n') ||\n 'An unknown error occurred',\n type: 'error',\n });\n console.error(error);\n }\n\n errorCode(error: any): number {\n if (this.isUnauthorizedAccess(error)) {\n return 403;\n }\n\n return (\n [\n error?.statusCode,\n error?.status,\n error?.networkError?.statusCode,\n error?.networkError?.status,\n error?.response?.status,\n ].find(Boolean) ?? 500\n );\n }\n\n private 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} from '@openmfp/portal-ui-lib';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class OrganizationReadyService {\n private configService = inject(ConfigService);\n private envConfigService = inject(EnvConfigService);\n private logicalClusterService = inject(LogicalClusterService);\n private authService = inject(AuthService);\n\n private isReady = false;\n private pendingCheck?: Promise<boolean>;\n\n public isOrganizationReady(): Promise<boolean> {\n if (this.isReady) {\n return Promise.resolve(true);\n }\n\n this.pendingCheck ??= this.readOrganizationReady().finally(() => {\n this.pendingCheck = undefined;\n });\n\n return this.pendingCheck;\n }\n\n private async readOrganizationReady(): Promise<boolean> {\n const portalConfig = await this.configService.getPortalConfig();\n const { idpName } = await this.envConfigService.getEnvConfig();\n\n if (idpName === 'welcome') {\n return true;\n }\n\n try {\n const logicalCluster = await firstValueFrom(\n this.logicalClusterService.read({\n portalContext: {\n crdGatewayApiUrl: portalConfig.portalContext['crdGatewayApiUrl'],\n },\n token: this.authService.getToken(),\n accountId: idpName,\n }),\n );\n this.isReady = logicalCluster.status.phase === 'Ready';\n return this.isReady;\n } catch (error) {\n console.error('Org check failed', error);\n return true;\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ApolloObservable","catchError","map"],"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/kubeconfig-secret.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/resource/namespace.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 { Apollo, 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 { map, switchMap } from 'rxjs/operators';\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: this.getResourceId(r),\n isAvailable: this.isAvailable(\n r,\n resourceDefinition.availableWhenNotReady,\n ),\n accessibleName: this.getAccessibleName(r),\n }));\n return { ...resourceListResult, items: processedResult };\n }),\n );\n }\n\n private getResourceId(resource: Resource) {\n return `${resource.metadata.name}${resource.metadata.namespace ? '_' + resource.metadata.namespace : ''}`;\n }\n\n isAvailable(item: Resource, availableWhenNotReady = false) {\n return (\n (!!item.ready || availableWhenNotReady) &&\n !item.metadata?.deletionTimestamp\n );\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 );\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 = this.getResourceId(resource.object);\n resource.object.isAvailable = this.isAvailable(\n resource.object,\n nodeContext.resourceDefinition?.availableWhenNotReady,\n );\n resource.object.accessibleName = this.getAccessibleName(\n resource.object,\n );\n }\n return resource;\n }),\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 }\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 const apollo = this.apolloFactory.apollo(nodeContext);\n\n return this.readInputTypeName(apollo, resourceDefinition).pipe(\n switchMap((inputTypeName) => {\n const mutationFields: any[] = [\n {\n operation: `create${entity}`,\n variables: {\n ...(isNamespaced && {\n namespace: { type: 'String', value: namespace },\n }),\n object: {\n type: `${inputTypeName}!`,\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 apollo.mutate({\n mutation: query,\n fetchPolicy: 'no-cache',\n variables: mutation.variables,\n });\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, resource);\n\n const cleanResource = stripTypename(resource);\n const apollo = this.apolloFactory.apollo(\n nodeContext,\n readFromParentKcpPath,\n );\n\n return this.readInputTypeName(apollo, resourceDefinition).pipe(\n switchMap((inputTypeName) => {\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: `${inputTypeName}!`,\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 apollo.mutate({\n mutation: query,\n fetchPolicy: 'no-cache',\n variables: mutation.variables,\n });\n }),\n map((res: any) =>\n getValueByPath(\n res.data,\n buildResourcePath(\n { apiGroup, entity: `update${entity}`, version },\n '.',\n ),\n ),\n ),\n );\n }\n\n /**\n * Reads the `__typename` of the query type that holds the resource, e.g.\n * `{ network_api_foo_bar { v1alpha1 { __typename } } }`, and derives the\n * mutation input type name from it. The gateway generates the schema, so\n * its type names are the only source of truth.\n */\n private readInputTypeName(\n apollo: Apollo,\n resourceDefinition: ResourceDefinition,\n ): Observable<string> {\n const { apiGroup, entity, version } = resourceDefinition;\n const selection = [apiGroup, version]\n .filter((field): field is string => !!field)\n .reduceRight((inner, field) => `${field} { ${inner} }`, '__typename');\n\n return apollo\n .query({ query: this.parseGQLQuery(`query { ${selection} }`) })\n .pipe(\n map((res: any) =>\n buildGraphQLInputTypeName(\n getValueByPath(\n res.data,\n buildResourcePath(\n { apiGroup, entity: '__typename', version },\n '.',\n ),\n ),\n entity,\n ),\n ),\n );\n }\n\n getNamespace(\n nodeContext: ResourceNodeContext,\n resource?: Resource,\n ): string | undefined {\n // namespaceId can carry the '-all-' sentinel when the portal forwards the\n // namespace selection; it is never a real namespace, so fall through.\n if (nodeContext.namespaceId && nodeContext.namespaceId !== ALL_NAMESPACE) {\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 const message = error instanceof Error ? error.message : String(error);\n this.luigiCoreService.showAlert({\n text: `Could not parse gql query: <br/><br/> ${query} <br/><br/> ${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 { ResourceNodeContext } from './resource-node-context';\nimport { ResourceService } from './resource.service';\nimport { Injectable, inject } from '@angular/core';\nimport {\n ALL_NAMESPACE,\n ButtonSettings,\n DOWNLOAD_KUBECONFIG_FROM_SECRET_REF_ACTION,\n DownloadKubeconfigFromSecretRefButtonSettings,\n PlatformMeshFieldDefinition,\n Resource,\n ResourceDefinition,\n} from '@platform-mesh/portal-ui-lib/models';\nimport {\n decodeBase64,\n getResourceValueByJsonPath,\n} from '@platform-mesh/portal-ui-lib/utils';\nimport { Observable, catchError, map, throwError } from 'rxjs';\n\nconst SECRET_RESOURCE_DEFINITION: ResourceDefinition = {\n version: 'v1',\n entity: 'Secret',\n entityCollection: 'Secrets',\n scope: 'Namespaced',\n};\n\nconst DEFAULT_DATA_KEY = 'kubeconfig';\nconst DEFAULT_FILENAME = 'kubeconfig.yaml';\n\nexport interface KubeconfigDownload {\n contents: string;\n filename: string;\n}\n\ninterface SecretReference {\n name: string;\n namespace: string;\n}\n\nexport function isDownloadKubeconfigButtonSettings(\n buttonSettings: ButtonSettings | undefined,\n): buttonSettings is DownloadKubeconfigFromSecretRefButtonSettings {\n return buttonSettings?.action === DOWNLOAD_KUBECONFIG_FROM_SECRET_REF_ACTION;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class KubeconfigSecretService {\n private resourceService = inject(ResourceService);\n\n /**\n * Fields the detail-view query has to read so the action can resolve its\n * Secret reference from the loaded resource.\n */\n secretReferenceQueryFields(\n buttonSettings: ButtonSettings | undefined,\n ): PlatformMeshFieldDefinition[] {\n if (!isDownloadKubeconfigButtonSettings(buttonSettings)) {\n return [];\n }\n\n const fields: PlatformMeshFieldDefinition[] = [];\n const resourceProperty = this.readString(buttonSettings.resourceProperty);\n if (resourceProperty) {\n fields.push({ property: resourceProperty });\n }\n const namespaceProperty = this.readString(buttonSettings.namespaceProperty);\n if (namespaceProperty) {\n fields.push({ property: namespaceProperty });\n }\n\n return fields;\n }\n\n isSecretReferenceAvailable(\n buttonSettings: ButtonSettings | undefined,\n resource: Resource | undefined,\n context: ResourceNodeContext,\n ): boolean {\n return (\n isDownloadKubeconfigButtonSettings(buttonSettings) &&\n this.resolveSecretReference(buttonSettings, resource, context) !==\n undefined\n );\n }\n\n readKubeconfig(\n buttonSettings: ButtonSettings,\n resource: Resource | undefined,\n context: ResourceNodeContext,\n ): Observable<KubeconfigDownload> {\n if (!isDownloadKubeconfigButtonSettings(buttonSettings)) {\n return throwError(\n () => new Error('Button is not a kubeconfig download action'),\n );\n }\n\n const secretReference = this.resolveSecretReference(\n buttonSettings,\n resource,\n context,\n );\n if (!secretReference) {\n return throwError(\n () => new Error('Kubeconfig Secret reference is not available'),\n );\n }\n\n const dataKey = this.readString(buttonSettings.dataKey) ?? DEFAULT_DATA_KEY;\n const filename =\n this.readString(buttonSettings.filename) ?? DEFAULT_FILENAME;\n const secretContext: ResourceNodeContext = {\n ...context,\n namespaceId: secretReference.namespace,\n resourceDefinition: SECRET_RESOURCE_DEFINITION,\n };\n\n return this.resourceService\n .read(\n secretReference.name,\n SECRET_RESOURCE_DEFINITION,\n ['data'],\n secretContext,\n false,\n )\n .pipe(\n catchError(() =>\n throwError(() => new Error('Kubeconfig Secret could not be read')),\n ),\n map((secret) => {\n const encodedKubeconfig = this.readString(secret?.data?.[dataKey]);\n if (!encodedKubeconfig) {\n throw new Error(\n `Kubeconfig data key \"${dataKey}\" is not available`,\n );\n }\n\n return {\n contents: decodeBase64(encodedKubeconfig),\n filename,\n };\n }),\n );\n }\n\n private resolveSecretReference(\n buttonSettings: DownloadKubeconfigFromSecretRefButtonSettings,\n resource: Resource | undefined,\n context: ResourceNodeContext,\n ): SecretReference | undefined {\n if (!resource) {\n return undefined;\n }\n\n try {\n const resourceProperty = this.readString(buttonSettings.resourceProperty);\n if (!resourceProperty) {\n return undefined;\n }\n\n const name = this.readString(\n getResourceValueByJsonPath(resource, {\n property: resourceProperty,\n }),\n );\n const namespaceProperty = this.readString(\n buttonSettings.namespaceProperty,\n );\n const namespace = namespaceProperty\n ? this.namespaceOf(\n getResourceValueByJsonPath(resource, {\n property: namespaceProperty,\n }),\n )\n : (this.namespaceOf(resource.metadata?.namespace) ??\n this.namespaceOf(this.resourceService.getNamespace(context)));\n\n return name && namespace ? { name, namespace } : undefined;\n } catch {\n return undefined;\n }\n }\n\n private namespaceOf(value: unknown): string | undefined {\n const namespace = this.readString(value);\n return namespace && namespace !== ALL_NAMESPACE ? namespace : undefined;\n }\n\n private readString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\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 { GatewayService } from './gateway.service';\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 gatewayService = inject(GatewayService);\n private readCache = new Map<string, Observable<AccountInfo>>();\n\n read(nodeContext: ResourceNodeContext): Observable<AccountInfo> {\n const cacheKey = this.gatewayService.getGatewayUrl(nodeContext);\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 if (this.readCache.get(cacheKey) === request$) {\n this.readCache.delete(cacheKey);\n }\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 { ResourceNodeContext } from './resource-node-context';\nimport { ResourceService } from './resource.service';\nimport { Injectable, inject } from '@angular/core';\nimport {\n ResourceDefinition,\n ResourceListResult,\n} from '@platform-mesh/portal-ui-lib/models';\nimport { generateGraphQLFields } from '@platform-mesh/portal-ui-lib/utils';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NamespaceService {\n private resourceService = inject(ResourceService);\n\n list(nodeContext: ResourceNodeContext): Observable<string[]> {\n return this.resourceService\n .list(\n 'v1_namespaces',\n generateGraphQLFields([{ property: 'metadata.name' }]),\n {\n portalContext: {\n crdGatewayApiUrl: nodeContext.portalContext.crdGatewayApiUrl,\n },\n resourceDefinition: {\n version: 'v1',\n entityCollection: 'Namespaces',\n entity: 'Namespace',\n scope: 'Cluster',\n } as ResourceDefinition,\n kcpPath: nodeContext.kcpPath,\n token: nodeContext.token,\n },\n )\n .pipe(\n map((result: ResourceListResult) =>\n result.items.map((item) => item.metadata.name),\n ),\n );\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { LuigiCoreService } from '@openmfp/portal-ui-lib';\n\n@Injectable({ providedIn: 'root' })\nexport class ErrorHandlerService {\n private luigiCoreService = inject(LuigiCoreService);\n\n handleError(error: any, msg?: string) {\n const message =\n error?.message || error?.errors?.map((e: any) => e.message).join('\\n');\n this.luigiCoreService.showAlert({\n text:\n [msg, message].filter(Boolean).join('\\n') ||\n 'An unknown error occurred',\n type: 'error',\n });\n console.error(error);\n }\n\n errorCode(error: any): number {\n if (this.isUnauthorizedAccess(error)) {\n return 403;\n }\n\n return (\n [\n error?.statusCode,\n error?.status,\n error?.networkError?.statusCode,\n error?.networkError?.status,\n error?.response?.status,\n ].find(Boolean) ?? 500\n );\n }\n\n private 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} from '@openmfp/portal-ui-lib';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class OrganizationReadyService {\n private configService = inject(ConfigService);\n private envConfigService = inject(EnvConfigService);\n private logicalClusterService = inject(LogicalClusterService);\n private authService = inject(AuthService);\n\n private isReady = false;\n private pendingCheck?: Promise<boolean>;\n\n public isOrganizationReady(): Promise<boolean> {\n if (this.isReady) {\n return Promise.resolve(true);\n }\n\n this.pendingCheck ??= this.readOrganizationReady().finally(() => {\n this.pendingCheck = undefined;\n });\n\n return this.pendingCheck;\n }\n\n private async readOrganizationReady(): Promise<boolean> {\n const portalConfig = await this.configService.getPortalConfig();\n const { idpName } = await this.envConfigService.getEnvConfig();\n\n if (idpName === 'welcome') {\n return true;\n }\n\n try {\n const logicalCluster = await firstValueFrom(\n this.logicalClusterService.read({\n portalContext: {\n crdGatewayApiUrl: portalConfig.portalContext['crdGatewayApiUrl'],\n },\n token: this.authService.getToken(),\n accountId: idpName,\n }),\n );\n this.isReady = logicalCluster.status.phase === 'Ready';\n return this.isReady;\n } catch (error) {\n console.error('Org check failed', error);\n return true;\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ApolloObservable","catchError","map"],"mappings":"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"}
@@ -1,34 +1,18 @@
1
1
  import { JSONPath } from 'jsonpath-plus';
2
2
  import { ResourceOperationTypeMap } from '@platform-mesh/portal-ui-lib/models';
3
3
 
4
- function sanitizeGroup(group) {
5
- let sanitized = group.replace(/[^a-zA-Z0-9]/g, '_');
6
- if (/^[0-9]/.test(sanitized)) {
7
- sanitized = '_' + sanitized;
8
- }
9
- return sanitized;
10
- }
11
- function pascalize(snakeCase) {
12
- return snakeCase
13
- .split('_')
14
- .filter((segment) => segment.length > 0)
15
- .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1))
16
- .join('');
17
- }
18
- function buildGraphQLInputTypeName(apiGroup, version, entity) {
19
- let prefix;
20
- if (apiGroup && version) {
21
- prefix = pascalize(sanitizeGroup(apiGroup) + '_' + version);
22
- }
23
- else if (apiGroup) {
24
- prefix = pascalize(sanitizeGroup(apiGroup));
25
- }
26
- else if (version) {
27
- prefix = pascalize('_' + version);
28
- }
29
- else {
30
- return `${entity}_Input`;
4
+ const QUERY_SUFFIX = 'Query';
5
+ /**
6
+ * Builds the input type name of a mutation from the `__typename` of the query
7
+ * type that holds the resource (e.g. `NetworkAPIFooBarV1alpha1Query`). The
8
+ * gateway names the input type `<prefix><Kind>_Input` with the same prefix,
9
+ * so the UI does not need its own copy of the gateway's naming rule.
10
+ */
11
+ function buildGraphQLInputTypeName(queryTypeName, entity) {
12
+ if (!queryTypeName?.endsWith(QUERY_SUFFIX)) {
13
+ throw new Error(`Unexpected GraphQL query type name: ${queryTypeName}`);
31
14
  }
15
+ const prefix = queryTypeName.slice(0, -QUERY_SUFFIX.length);
32
16
  return `${prefix}${entity}_Input`;
33
17
  }
34
18