@platform-mesh/portal-ui-lib 0.55.0 → 0.55.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 +127 -127
- package/fesm2022/platform-mesh-portal-ui-lib-portal-options.mjs +10 -8
- package/fesm2022/platform-mesh-portal-ui-lib-portal-options.mjs.map +1 -1
- package/fesm2022/platform-mesh-portal-ui-lib-services.mjs +5 -2
- package/fesm2022/platform-mesh-portal-ui-lib-services.mjs.map +1 -1
- package/fesm2022/platform-mesh-portal-ui-lib-utils.mjs +2 -2
- package/fesm2022/platform-mesh-portal-ui-lib-utils.mjs.map +1 -1
- package/package.json +1 -1
- package/types/platform-mesh-portal-ui-lib-services.d.ts +1 -0
|
@@ -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/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(\n r,\n resourceDefinition.availableWhenNotReady,\n ),\n accessibleName: this.getAccessibleName(r),\n }));\n return { ...resourceListResult, items: processedResult };\n }),\n );\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 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(\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 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 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 { 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: any) => 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","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/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: 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 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 = 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 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 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 { 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: any) => 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","catchError","map"],"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;8GA9CW,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,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cADD,MAAM,EAAA,CAAA,CAAA;;2FACnB,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;8GA5IW,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,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA;;2FAEP,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;8GA1DW,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,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cADb,MAAM,EAAA,CAAA,CAAA;;2FACnB,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;AAkmBpD,IAAA;IAhmBC,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,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW,CAC3B,CAAC,EACD,kBAAkB,CAAC,qBAAqB,CACzC;AACD,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;AAEQ,IAAA,aAAa,CAAC,QAAkB,EAAA;QACtC,OAAO,CAAA,EAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAA,EAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,GAAG,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,GAAG,EAAE,CAAA,CAAE;IAC3G;AAEA,IAAA,WAAW,CAAC,IAAc,EAAE,qBAAqB,GAAG,KAAK,EAAA;QACvD,QACE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,qBAAqB;AACtC,YAAA,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB;IAErC;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,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;AACxD,gBAAA,QAAQ,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAC5C,QAAQ,CAAC,MAAM,EACf,WAAW,CAAC,kBAAkB,EAAE,qBAAqB,CACtD;AACD,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,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AACtE,YAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAC9B,gBAAA,IAAI,EAAE,CAAA,sCAAA,EAAyC,KAAK,CAAA,YAAA,EAAe,OAAO,CAAA,CAAE;AAC5E,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;8GAnmBW,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,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA,CAAA;;2FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACvCD,MAAM,0BAA0B,GAAuB;AACrD,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,gBAAgB,EAAE,SAAS;AAC3B,IAAA,KAAK,EAAE,YAAY;CACpB;AAED,MAAM,gBAAgB,GAAG,YAAY;AACrC,MAAM,gBAAgB,GAAG,iBAAiB;AAYpC,SAAU,kCAAkC,CAChD,cAA0C,EAAA;AAE1C,IAAA,OAAO,cAAc,EAAE,MAAM,KAAK,0CAA0C;AAC9E;MAKa,uBAAuB,CAAA;AAHpC,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AA+IlD,IAAA;AA7IC;;;AAGG;AACH,IAAA,0BAA0B,CACxB,cAA0C,EAAA;AAE1C,QAAA,IAAI,CAAC,kCAAkC,CAAC,cAAc,CAAC,EAAE;AACvD,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,MAAM,GAAkC,EAAE;QAChD,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,gBAAgB,CAAC;QACzE,IAAI,gBAAgB,EAAE;YACpB,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;QAC7C;QACA,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,iBAAiB,CAAC;QAC3E,IAAI,iBAAiB,EAAE;YACrB,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;QAC9C;AAEA,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,0BAA0B,CACxB,cAA0C,EAC1C,QAA8B,EAC9B,OAA4B,EAAA;AAE5B,QAAA,QACE,kCAAkC,CAAC,cAAc,CAAC;YAClD,IAAI,CAAC,sBAAsB,CAAC,cAAc,EAAE,QAAQ,EAAE,OAAO,CAAC;AAC5D,gBAAA,SAAS;IAEf;AAEA,IAAA,cAAc,CACZ,cAA8B,EAC9B,QAA8B,EAC9B,OAA4B,EAAA;AAE5B,QAAA,IAAI,CAAC,kCAAkC,CAAC,cAAc,CAAC,EAAE;YACvD,OAAO,UAAU,CACf,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAC9D;QACH;AAEA,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CACjD,cAAc,EACd,QAAQ,EACR,OAAO,CACR;QACD,IAAI,CAAC,eAAe,EAAE;YACpB,OAAO,UAAU,CACf,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAChE;QACH;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,gBAAgB;AAC3E,QAAA,MAAM,QAAQ,GACZ,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,gBAAgB;AAC9D,QAAA,MAAM,aAAa,GAAwB;AACzC,YAAA,GAAG,OAAO;YACV,WAAW,EAAE,eAAe,CAAC,SAAS;AACtC,YAAA,kBAAkB,EAAE,0BAA0B;SAC/C;QAED,OAAO,IAAI,CAAC;AACT,aAAA,IAAI,CACH,eAAe,CAAC,IAAI,EACpB,0BAA0B,EAC1B,CAAC,MAAM,CAAC,EACR,aAAa,EACb,KAAK;aAEN,IAAI,CACHC,YAAU,CAAC,MACT,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC,CACnE,EACDC,KAAG,CAAC,CAAC,MAAM,KAAI;AACb,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC;YAClE,IAAI,CAAC,iBAAiB,EAAE;AACtB,gBAAA,MAAM,IAAI,KAAK,CACb,wBAAwB,OAAO,CAAA,kBAAA,CAAoB,CACpD;YACH;YAEA,OAAO;AACL,gBAAA,QAAQ,EAAE,YAAY,CAAC,iBAAiB,CAAC;gBACzC,QAAQ;aACT;QACH,CAAC,CAAC,CACH;IACL;AAEQ,IAAA,sBAAsB,CAC5B,cAA6D,EAC7D,QAA8B,EAC9B,OAA4B,EAAA;QAE5B,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,SAAS;QAClB;AAEA,QAAA,IAAI;YACF,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,gBAAgB,CAAC;YACzE,IAAI,CAAC,gBAAgB,EAAE;AACrB,gBAAA,OAAO,SAAS;YAClB;YAEA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAC1B,0BAA0B,CAAC,QAAQ,EAAE;AACnC,gBAAA,QAAQ,EAAE,gBAAgB;AAC3B,aAAA,CAAC,CACH;YACD,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CACvC,cAAc,CAAC,iBAAiB,CACjC;YACD,MAAM,SAAS,GAAG;kBACd,IAAI,CAAC,WAAW,CACd,0BAA0B,CAAC,QAAQ,EAAE;AACnC,oBAAA,QAAQ,EAAE,iBAAiB;AAC5B,iBAAA,CAAC;mBAEH,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC/C,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;AAEjE,YAAA,OAAO,IAAI,IAAI,SAAS,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,SAAS;QAC5D;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,SAAS;QAClB;IACF;AAEQ,IAAA,WAAW,CAAC,KAAc,EAAA;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACxC,QAAA,OAAO,SAAS,IAAI,SAAS,KAAK,aAAa,GAAG,SAAS,GAAG,SAAS;IACzE;AAEQ,IAAA,UAAU,CAAC,KAAc,EAAA;QAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,SAAS;IAC7E;8GA/IW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA,CAAA;;2FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;AC5CM,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;8GAzCW,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,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA,CAAA;;2FAEP,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;8GAVW,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,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA;;2FAEP,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,CAAM,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACxE,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;8GA1BW,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,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cADN,MAAM,EAAA,CAAA,CAAA;;2FACnB,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;8GAvDW,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,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cADX,MAAM,EAAA,CAAA,CAAA;;2FACnB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACZlC;;AAEG;;;;"}
|
|
@@ -179,11 +179,11 @@ function mergeListWithSubscriptionResult(items, subscriptionResult, options) {
|
|
|
179
179
|
result.set(key, item);
|
|
180
180
|
});
|
|
181
181
|
const { type, object } = subscriptionResult;
|
|
182
|
-
const
|
|
182
|
+
const mappedObject = mapSubscriptionObjectToItem(object);
|
|
183
|
+
const objectKey = getItemKey(mappedObject);
|
|
183
184
|
if (!objectKey) {
|
|
184
185
|
return items;
|
|
185
186
|
}
|
|
186
|
-
const mappedObject = mapSubscriptionObjectToItem(object);
|
|
187
187
|
if (type === ResourceOperationTypeMap.ADDED) {
|
|
188
188
|
result.set(objectKey, mappedObject);
|
|
189
189
|
}
|
|
@@ -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/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: any[] = [];\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: Record<string, any> = 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: any[] = [];\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 mappedObject = mapSubscriptionObjectToItem(object);\n const objectKey = getItemKey(mappedObject);\n if (!objectKey) {\n return items;\n }\n\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: Record<string, any> = 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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"}
|
package/package.json
CHANGED
|
@@ -185,6 +185,7 @@ declare class ResourceService {
|
|
|
185
185
|
list(operation: string, fieldsOrRawQuery: any[] | string, nodeContext: ResourceNodeContext, options?: ListOptions): Observable<ResourceListResult | any>;
|
|
186
186
|
private getResourceReadyStatus;
|
|
187
187
|
private listWithFields;
|
|
188
|
+
private getResourceId;
|
|
188
189
|
isAvailable(item: Resource, availableWhenNotReady?: boolean): boolean;
|
|
189
190
|
getAccessibleName(item: Resource): string | undefined;
|
|
190
191
|
private listWithRawQuery;
|