diff --git a/workspaces/orchestrator/packages/app/package.json b/workspaces/orchestrator/packages/app/package.json index 4d844c4bcf..8c49c09cba 100644 --- a/workspaces/orchestrator/packages/app/package.json +++ b/workspaces/orchestrator/packages/app/package.json @@ -19,6 +19,7 @@ "lint": "backstage-cli package lint" }, "dependencies": { + "@backstage-community/plugin-rbac": "1.52.1", "@backstage/cli": "^0.36.0", "@backstage/core-compat-api": "^0.5.9", "@backstage/core-components": "^0.18.8", diff --git a/workspaces/orchestrator/packages/app/src/App.tsx b/workspaces/orchestrator/packages/app/src/App.tsx index c2eb379b94..f12b4a5053 100644 --- a/workspaces/orchestrator/packages/app/src/App.tsx +++ b/workspaces/orchestrator/packages/app/src/App.tsx @@ -22,6 +22,7 @@ import orchestratorPlugin, { } from '@red-hat-developer-hub/backstage-plugin-orchestrator/alpha'; import orchestratorFormWidgetsPlugin from '@red-hat-developer-hub/backstage-plugin-orchestrator-form-widgets/alpha'; import { navModule } from './modules/nav'; +import { authSignInPageModule } from './modules/auth'; export default createApp({ features: [ @@ -31,5 +32,6 @@ export default createApp({ userSettingsPlugin, orchestratorTranslationsModule, orchestratorFormWidgetsPlugin, + authSignInPageModule, ], }); diff --git a/workspaces/orchestrator/packages/app/src/modules/auth/index.tsx b/workspaces/orchestrator/packages/app/src/modules/auth/index.tsx new file mode 100644 index 0000000000..b0c00ca770 --- /dev/null +++ b/workspaces/orchestrator/packages/app/src/modules/auth/index.tsx @@ -0,0 +1,47 @@ +/* + * Copyright Red Hat, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from 'react'; +import { createFrontendModule } from '@backstage/frontend-plugin-api'; +import { SignInPageBlueprint } from '@backstage/plugin-app-react'; +import { githubAuthApiRef } from '@backstage/core-plugin-api'; + +export const authSignInPageModule = createFrontendModule({ + pluginId: 'app', + extensions: [ + SignInPageBlueprint.make({ + params: { + loader: async () => { + const { SignInPage } = await import('@backstage/core-components'); + + return props => + React.createElement(SignInPage, { + ...props, + providers: [ + { + id: 'github-auth-provider', + title: 'GitHub', + message: 'Sign in using GitHub', + apiRef: githubAuthApiRef, + }, + 'guest', + ], + }); + }, + }, + }), + ], +}); diff --git a/workspaces/orchestrator/packages/backend/package.json b/workspaces/orchestrator/packages/backend/package.json index 7a961e71f6..dd5c659ede 100644 --- a/workspaces/orchestrator/packages/backend/package.json +++ b/workspaces/orchestrator/packages/backend/package.json @@ -21,7 +21,7 @@ "build-image": "docker build ../.. -f Dockerfile --tag backstage" }, "dependencies": { - "@backstage-community/plugin-rbac-backend": "^7.4.0", + "@backstage-community/plugin-rbac-backend": "^7.12.3", "@backstage/backend-defaults": "^0.16.0", "@backstage/config": "^1.3.6", "@backstage/plugin-app-backend": "^0.5.12", diff --git a/workspaces/orchestrator/packages/backend/src/index.ts b/workspaces/orchestrator/packages/backend/src/index.ts index c7b76aef07..244b99f07c 100644 --- a/workspaces/orchestrator/packages/backend/src/index.ts +++ b/workspaces/orchestrator/packages/backend/src/index.ts @@ -52,6 +52,7 @@ backend.add(import('@backstage/plugin-search-backend-module-catalog')); backend.add(import('@backstage/plugin-search-backend-module-techdocs')); // permission plugin +backend.add(import('@backstage/plugin-permission-backend')); backend.add(import('@backstage-community/plugin-rbac-backend')); // orchestrator diff --git a/workspaces/orchestrator/plugins/orchestrator-backend/package.json b/workspaces/orchestrator/plugins/orchestrator-backend/package.json index edde3290a4..47238c9538 100644 --- a/workspaces/orchestrator/plugins/orchestrator-backend/package.json +++ b/workspaces/orchestrator/plugins/orchestrator-backend/package.json @@ -90,10 +90,11 @@ "lodash": "^4.18.1", "luxon": "^3.7.2", "openapi-backend": "^5.10.5", - "yn": "^5.0.0" + "yn": "^5.0.0", + "zod": "^4.3.6" }, "devDependencies": { - "@backstage-community/plugin-rbac-common": "^1.12.1", + "@backstage-community/plugin-rbac-common": "^1.26.0", "@backstage/backend-test-utils": "^1.11.1", "@backstage/cli": "^0.36.0", "@janus-idp/backstage-plugin-audit-log-node": "^1.7.1", diff --git a/workspaces/orchestrator/plugins/orchestrator-backend/src/plugin.ts b/workspaces/orchestrator/plugins/orchestrator-backend/src/plugin.ts index 3e9cd76cc6..22b7745f28 100644 --- a/workspaces/orchestrator/plugins/orchestrator-backend/src/plugin.ts +++ b/workspaces/orchestrator/plugins/orchestrator-backend/src/plugin.ts @@ -55,6 +55,7 @@ export const orchestratorPlugin = createBackendPlugin({ catalogApi: catalogServiceRef, urlReader: coreServices.urlReader, permissions: coreServices.permissions, + permissionsRegistry: coreServices.permissionsRegistry, scheduler: coreServices.scheduler, httpAuth: coreServices.httpAuth, http: coreServices.httpRouter, diff --git a/workspaces/orchestrator/plugins/orchestrator-backend/src/routerWrapper/index.ts b/workspaces/orchestrator/plugins/orchestrator-backend/src/routerWrapper/index.ts index c30589a919..da66608fbd 100644 --- a/workspaces/orchestrator/plugins/orchestrator-backend/src/routerWrapper/index.ts +++ b/workspaces/orchestrator/plugins/orchestrator-backend/src/routerWrapper/index.ts @@ -19,6 +19,7 @@ import type { DiscoveryService, HttpAuthService, LoggerService, + PermissionsRegistryService, PermissionsService, SchedulerService, UrlReaderService, @@ -42,6 +43,7 @@ export interface RouterOptions { urlReader: UrlReaderService; scheduler: SchedulerService; permissions: PermissionsService; + permissionsRegistry: PermissionsRegistryService; httpAuth: HttpAuthService; userInfo: UserInfoService; workflowLogsProvidersRegistry: WorkflowLogsProvidersRegistry; @@ -74,6 +76,7 @@ export async function createRouter( urlReader: args.urlReader, scheduler: args.scheduler, permissions: args.permissions, + permissionsRegistry: args.permissionsRegistry, httpAuth: args.httpAuth, userInfo: args.userInfo, workflowLogsProvidersRegistry: args.workflowLogsProvidersRegistry, diff --git a/workspaces/orchestrator/plugins/orchestrator-backend/src/service/permission-rules.test.ts b/workspaces/orchestrator/plugins/orchestrator-backend/src/service/permission-rules.test.ts new file mode 100644 index 0000000000..38478b379a --- /dev/null +++ b/workspaces/orchestrator/plugins/orchestrator-backend/src/service/permission-rules.test.ts @@ -0,0 +1,61 @@ +/* + * Copyright Red Hat, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { isWorkflowId, orchestratorPermissionRules } from './permission-rules'; + +describe('permission-rules', () => { + describe('isWorkflowId', () => { + it('should return true when workflow ID is in the allowed list', () => { + const resource = { workflowId: 'approval-workflow-123' }; + const params = { + workflowIds: ['approval-workflow-123', 'other-workflow'], + }; + + const result = isWorkflowId.apply(resource, params); + + expect(result).toBe(true); + }); + + it('should return false when workflow ID is not in the allowed list', () => { + const resource = { workflowId: 'approval-workflow-123' }; + const params = { + workflowIds: ['different-workflow-456', 'another-workflow'], + }; + + const result = isWorkflowId.apply(resource, params); + + expect(result).toBe(false); + }); + + it('should have correct metadata', () => { + expect(isWorkflowId.name).toBe('IS_ALLOWED_WORKFLOW_ID'); + expect(isWorkflowId.description).toBe( + 'Allow workflows matching the specified workflow IDs', + ); + expect(isWorkflowId.resourceType).toBe('orchestrator-workflow'); + }); + }); + + describe('orchestratorPermissionRules', () => { + it('should export isWorkflowId rule', () => { + expect(orchestratorPermissionRules).toContain(isWorkflowId); + }); + + it('should have exactly one rule', () => { + expect(orchestratorPermissionRules).toHaveLength(1); + }); + }); +}); diff --git a/workspaces/orchestrator/plugins/orchestrator-backend/src/service/permission-rules.ts b/workspaces/orchestrator/plugins/orchestrator-backend/src/service/permission-rules.ts new file mode 100644 index 0000000000..fff3b661df --- /dev/null +++ b/workspaces/orchestrator/plugins/orchestrator-backend/src/service/permission-rules.ts @@ -0,0 +1,77 @@ +/* + * Copyright Red Hat, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + createPermissionResourceRef, + createPermissionRule, +} from '@backstage/plugin-permission-node'; + +import { z } from 'zod/v3'; + +import { ORCHESTRATOR_WORKFLOW_RESOURCE_TYPE } from '@red-hat-developer-hub/backstage-plugin-orchestrator-common'; + +export type OrchestratorFilter = { + key: string; + values: any[]; +}; + +/** + * The OrchestratorFilters type is a recursive type that can be used to create complex filter structures. + * It can be used to create filters that are a combination of other filters, or a negation of a filter. + * + */ +export type OrchestratorFilters = + | { anyOf: OrchestratorFilters[] } + | { allOf: OrchestratorFilters[] } + | { not: OrchestratorFilters } + | OrchestratorFilter; + +export type WorkflowIdParam = { workflowId: string }; + +/** + * Resource reference for orchestrator workflows + */ +export const orchestratorWorkflowResourceRef = createPermissionResourceRef< + WorkflowIdParam, + OrchestratorFilters +>().with({ + pluginId: 'orchestrator', + resourceType: ORCHESTRATOR_WORKFLOW_RESOURCE_TYPE, +}); + +/** + * Permission rule for orchestrator workflows + */ +export const isWorkflowId = createPermissionRule({ + name: 'IS_ALLOWED_WORKFLOW_ID', + description: 'Allow workflows matching the specified workflow IDs', + resourceRef: orchestratorWorkflowResourceRef, + paramsSchema: z.object({ + workflowIds: z.string().array().describe('List of workflows IDs to match'), + }), + apply: (workflow: WorkflowIdParam, { workflowIds }) => { + return workflowIds.includes(workflow.workflowId); + }, + toQuery: ({ workflowIds }) => ({ + key: 'workflowIds', + values: workflowIds, + }), +}); + +/** + * All orchestrator permission rules + */ +export const orchestratorPermissionRules = [isWorkflowId]; diff --git a/workspaces/orchestrator/plugins/orchestrator-backend/src/service/router.ts b/workspaces/orchestrator/plugins/orchestrator-backend/src/service/router.ts index f1ee2f4649..857479eeeb 100644 --- a/workspaces/orchestrator/plugins/orchestrator-backend/src/service/router.ts +++ b/workspaces/orchestrator/plugins/orchestrator-backend/src/service/router.ts @@ -20,6 +20,7 @@ import { AuditorServiceEvent, HttpAuthService, LoggerService, + PermissionsRegistryService, PermissionsService, SchedulerService, UserInfoService, @@ -27,12 +28,13 @@ import { import type { Config } from '@backstage/config'; import { NotAllowedError } from '@backstage/errors'; import { - AuthorizePermissionRequest, - AuthorizePermissionResponse, AuthorizeResult, - BasicPermission, + ResourcePermission, } from '@backstage/plugin-permission-common'; -import { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node'; +import { + ConditionTransformer, + createConditionTransformer, +} from '@backstage/plugin-permission-node'; import type { JsonObject } from '@backstage/types'; import { UnauthorizedError } from '@backstage-community/plugin-rbac-common'; @@ -49,10 +51,7 @@ import { orchestratorInstanceAdminViewPermission, orchestratorPermissions, orchestratorWorkflowPermission, - orchestratorWorkflowSpecificPermission, orchestratorWorkflowUsePermission, - orchestratorWorkflowUseSpecificPermission, - WorkflowOverviewListResultDTO, } from '@red-hat-developer-hub/backstage-plugin-orchestrator-common'; import { WorkflowLogsProvidersRegistry } from '../providers/WorkflowLogsProvidersRegistry'; @@ -63,6 +62,12 @@ import { V2 } from './api/v2'; import { DataIndexService } from './DataIndexService'; import { DataInputSchemaService } from './DataInputSchemaService'; import { OrchestratorService } from './OrchestratorService'; +import { + OrchestratorFilters, + orchestratorPermissionRules, + orchestratorWorkflowResourceRef, + WorkflowIdParam, +} from './permission-rules'; import { SonataFlowService } from './SonataFlowService'; import { WorkflowCacheService } from './WorkflowCacheService'; @@ -76,30 +81,27 @@ interface RouterApi { v2: V2; } -const authorize = async ( - request: HttpRequest, - anyOfPermissions: BasicPermission[], - permissionsSvc: PermissionsService, - httpAuth: HttpAuthService, -): Promise => { - const credentials = await httpAuth.credentials(request); - const decisionResponses: AuthorizePermissionResponse[][] = await Promise.all( - anyOfPermissions.map(permission => - permissionsSvc.authorize([{ permission }], { - credentials, - }), - ), - ); - const decisions: AuthorizePermissionResponse[] = decisionResponses.map( - d => d[0], - ); +const matches = ( + workflow: WorkflowIdParam, + filters?: OrchestratorFilters, +): boolean => { + if (!filters) { + return true; + } - const allow = decisions.find(d => d.result === AuthorizeResult.ALLOW); - return ( - allow || { - result: AuthorizeResult.DENY, - } - ); + if ('allOf' in filters) { + return filters.allOf.every(filter => matches(workflow, filter)); + } + + if ('anyOf' in filters) { + return filters.anyOf.some(filter => matches(workflow, filter)); + } + + if ('not' in filters) { + return !matches(workflow, filters.not); + } + + return filters.values.includes(workflow.workflowId); }; const isUserAuthorizedForInstanceAdminViewPermission = async ( @@ -116,64 +118,39 @@ const isUserAuthorizedForInstanceAdminViewPermission = async ( return decision.result === AuthorizeResult.ALLOW; }; -const filterAuthorizedWorkflowIds = async ( +const authorizeWorkflows = async ( request: HttpRequest, permissionsSvc: PermissionsService, httpAuth: HttpAuthService, - workflowIds: string[], -): Promise => { - const credentials = await httpAuth.credentials(request); - const genericWorkflowPermissionDecision = await permissionsSvc.authorize( - [{ permission: orchestratorWorkflowPermission }], - { - credentials, - }, - ); - - if (genericWorkflowPermissionDecision[0].result === AuthorizeResult.ALLOW) { - // The user can see all workflows - return workflowIds; + workflows: T[], + permission: ResourcePermission<'orchestrator-workflow'>, + conditionTransformer: ConditionTransformer, +): Promise => { + if (workflows.length === 0) { + return []; } - const specificWorkflowRequests: AuthorizePermissionRequest[] = - workflowIds.map(workflowId => ({ - permission: orchestratorWorkflowSpecificPermission(workflowId), - })); - - const decisions = await permissionsSvc.authorize(specificWorkflowRequests, { - credentials, - }); + const credentials = await httpAuth.credentials(request); - return workflowIds.filter( - (_, idx) => decisions[idx].result === AuthorizeResult.ALLOW, + const [decision] = await permissionsSvc.authorizeConditional( + [{ permission }], + { credentials }, ); -}; -const filterAuthorizedWorkflows = async ( - request: HttpRequest, - permissionsSvc: PermissionsService, - httpAuth: HttpAuthService, - workflows: WorkflowOverviewListResultDTO, -): Promise => { - if (!workflows.overviews) { - return workflows; + if (decision.result === AuthorizeResult.DENY) { + return []; } - const authorizedWorkflowIds = await filterAuthorizedWorkflowIds( - request, - permissionsSvc, - httpAuth, - workflows.overviews.map(w => w.workflowId), - ); + if (decision.result === AuthorizeResult.ALLOW) { + return workflows; + } - const filtered = { - ...workflows, - overviews: workflows.overviews.filter(w => - authorizedWorkflowIds.includes(w.workflowId), - ), - }; + if (decision.result === AuthorizeResult.CONDITIONAL) { + const filters = conditionTransformer(decision.conditions); + return workflows.filter(workflow => matches(workflow, filters)); + } - return filtered; + return []; }; export async function createBackendRouter( @@ -185,6 +162,7 @@ export async function createBackendRouter( auditor, scheduler, permissions, + permissionsRegistry, httpAuth, userInfo, workflowLogsProvidersRegistry, @@ -194,14 +172,15 @@ export async function createBackendRouter( config, scheduler, workflowLogsProvidersRegistry, + permissionsRegistry, ); const routerApi = await initRouterApi(publicServices.orchestratorService); const router = Router(); - const permissionsIntegrationRouter = createPermissionIntegrationRouter({ - permissions: orchestratorPermissions, - }); + const conditionalTransformer = createConditionTransformer( + permissionsRegistry.getPermissionRuleset(orchestratorWorkflowResourceRef), + ); const contentLengthLimit = config.getOptionalString( 'orchestrator.contentLengthLimit', ); @@ -214,7 +193,6 @@ export async function createBackendRouter( * */ router.use(express.json({ limit: contentLengthLimit })); - router.use(permissionsIntegrationRouter); router.use('/workflows', express.text()); router.get('/health', (_, response) => { logger.info('PONG!'); @@ -228,6 +206,7 @@ export async function createBackendRouter( httpAuth, auditor, userInfo, + conditionalTransformer, ); router.use((req, res, next) => { @@ -269,6 +248,7 @@ function initPublicServices( config: Config, scheduler: SchedulerService, workflowLogsProvidersRegistry: WorkflowLogsProvidersRegistry, + permissionsRegistry: PermissionsRegistryService, ): PublicServices { const dataIndexUrl = config.getString('orchestrator.dataIndexService.url'); const orchestratorKafka: OrchestratorKafkaServiceOptions | undefined = @@ -302,6 +282,21 @@ function initPublicServices( workflowLogProvider, ); + permissionsRegistry.addResourceType({ + resourceRef: orchestratorWorkflowResourceRef, + getResources: resourceRefs => + // todo: can we use single request to fetch all resources? + Promise.all( + resourceRefs.map(ref => { + return orchestratorService.fetchWorkflowOverview({ + definitionId: ref, + }); + }), + ), + permissions: orchestratorPermissions, + rules: Object.values(orchestratorPermissionRules), + }); + const dataInputSchemaService = new DataInputSchemaService(); return { @@ -354,6 +349,7 @@ function setupInternalRoutes( httpAuth: HttpAuthService, auditor: AuditorService, userInfo: UserInfoService, + conditionTransformer: ConditionTransformer, ) { function manageDenyAuthorization(auditEvent: AuditorServiceEvent) { const error = new UnauthorizedError(); @@ -382,18 +378,34 @@ function setupInternalRoutes( annotationWorkflowIds, ); - const workflows = await filterAuthorizedWorkflows( + if (!result.overviews) { + auditEvent.success({ + meta: { + workflowsCount: 0, + }, + }); + res.json(result); + return; + } + + const authorizedWorkflows = await authorizeWorkflows( req, permissions, httpAuth, - result, + result.overviews, + orchestratorWorkflowPermission, + conditionTransformer, ); + auditEvent.success({ meta: { - workflowsCount: workflows.overviews?.length, + workflowsCount: authorizedWorkflows.length, }, }); - res.json(workflows); + res.json({ + ...result, + overviews: authorizedWorkflows, + }); } catch (error) { auditEvent.fail({ error }); next(error); @@ -416,18 +428,34 @@ function setupInternalRoutes( getRequestFilters(req), ); - const workflows = await filterAuthorizedWorkflows( + if (!result.overviews) { + auditEvent.success({ + meta: { + workflowsCount: 0, + }, + }); + res.json(result); + return; + } + + const authorizedWorkflows = await authorizeWorkflows( req, permissions, httpAuth, - result, + result.overviews, + orchestratorWorkflowPermission, + conditionTransformer, ); + auditEvent.success({ meta: { - workflowsCount: workflows.overviews?.length, + workflowsCount: authorizedWorkflows.length, }, }); - res.json(workflows); + res.json({ + ...result, + overviews: authorizedWorkflows, + }); } catch (error) { auditEvent.fail({ error }); next(error); @@ -450,20 +478,25 @@ function setupInternalRoutes( }, }); - const decision = await authorize( - req, - [ - orchestratorWorkflowPermission, - orchestratorWorkflowSpecificPermission(workflowId), - ], - permissions, - httpAuth, - ); - if (decision.result === AuthorizeResult.DENY) { - manageDenyAuthorization(auditEvent); - } - try { + const credentials = await httpAuth.credentials(req); + + const [decision] = await permissions.authorizeConditional( + [{ permission: orchestratorWorkflowPermission }], + { credentials }, + ); + + if (decision.result === AuthorizeResult.DENY) { + manageDenyAuthorization(auditEvent); + } + + if ( + decision.result === AuthorizeResult.CONDITIONAL && + !matches({ workflowId }, conditionTransformer(decision.conditions)) + ) { + manageDenyAuthorization(auditEvent); + } + const result = await routerApi.v2.getWorkflowSourceById(workflowId); auditEvent.success(); res.status(200).contentType('text/plain').send(result); @@ -479,11 +512,6 @@ function setupInternalRoutes( 'executeWorkflow', async (c, req: express.Request, res: express.Response, next) => { const workflowId = c.request.params.workflowId as string; - const credentials = await httpAuth.credentials(req); - const token = req.headers.authorization?.split(' ')[1]; - const initiatorEntity = await ( - await userInfo.getUserInfo(credentials) - ).userEntityRef; const auditEvent = await auditor.createEvent({ eventId: 'execute-workflow', @@ -493,36 +521,45 @@ function setupInternalRoutes( }, }); - const decision = await authorize( - req, - [ - orchestratorWorkflowUsePermission, - orchestratorWorkflowUseSpecificPermission(workflowId), - ], - permissions, - httpAuth, - ); - if (decision.result === AuthorizeResult.DENY) { - manageDenyAuthorization(auditEvent); - } + try { + const credentials = await httpAuth.credentials(req); - const executeWorkflowRequestDTO = req.body; + const [decision] = await permissions.authorizeConditional( + [{ permission: orchestratorWorkflowUsePermission }], + { credentials }, + ); - return routerApi.v2 - .executeWorkflow( + if (decision.result === AuthorizeResult.DENY) { + manageDenyAuthorization(auditEvent); + } + + if ( + decision.result === AuthorizeResult.CONDITIONAL && + !matches({ workflowId }, conditionTransformer(decision.conditions)) + ) { + manageDenyAuthorization(auditEvent); + } + + const token = req.headers.authorization?.split(' ')[1]; + const initiatorEntity = await ( + await userInfo.getUserInfo(credentials) + ).userEntityRef; + + const executeWorkflowRequestDTO = req.body; + + const result = await routerApi.v2.executeWorkflow( executeWorkflowRequestDTO, workflowId, initiatorEntity, token, - ) - .then(result => { - auditEvent.success({ meta: { id: result.id } }); - return res.status(200).json(result); - }) - .catch(error => { - auditEvent.fail({ error }); - next(error); - }); + ); + + auditEvent.success({ meta: { id: result.id } }); + return res.status(200).json(result); + } catch (error) { + auditEvent.fail({ error }); + return next(error); + } }, ); @@ -544,34 +581,38 @@ function setupInternalRoutes( }, }); - const decision = await authorize( - req, - [ - orchestratorWorkflowUsePermission, - orchestratorWorkflowUseSpecificPermission(workflowId), - ], - permissions, - httpAuth, - ); - if (decision.result === AuthorizeResult.DENY) { - manageDenyAuthorization(auditEvent); - } + try { + const credentials = await httpAuth.credentials(req); + + const [decision] = await permissions.authorizeConditional( + [{ permission: orchestratorWorkflowUsePermission }], + { credentials }, + ); - await routerApi.v2 - .retriggerInstance( + if (decision.result === AuthorizeResult.DENY) { + manageDenyAuthorization(auditEvent); + } + + if ( + decision.result === AuthorizeResult.CONDITIONAL && + !matches({ workflowId }, conditionTransformer(decision.conditions)) // todo why don't use common authorize? + ) { + manageDenyAuthorization(auditEvent); + } + + const result = await routerApi.v2.retriggerInstance( workflowId, instanceId, retriggerInstanceRequestDTO, token, - ) - .then(result => { - auditEvent.success(); - return res.status(200).json(result); - }) - .catch(error => { - auditEvent.fail({ error }); - next(error); - }); + ); + + auditEvent.success(); + return res.status(200).json(result); + } catch (error) { + auditEvent.fail({ error }); + return next(error); + } }, ); @@ -590,33 +631,37 @@ function setupInternalRoutes( }, }); - const decision = await authorize( - req, - [ - orchestratorWorkflowPermission, - orchestratorWorkflowSpecificPermission(workflowId), - ], - permissions, - httpAuth, - ); - if (decision.result === AuthorizeResult.DENY) { - manageDenyAuthorization(auditEvent); - } + try { + const credentials = await httpAuth.credentials(req); - return routerApi.v2 - .getWorkflowOverviewById(workflowId) - .then(result => { - auditEvent.success({ - meta: { - workflowId: result.workflowId, - }, - }); - return res.json(result); - }) - .catch(error => { - auditEvent.fail({ error }); - next(error); + const [decision] = await permissions.authorizeConditional( + [{ permission: orchestratorWorkflowPermission }], + { credentials }, + ); + + if (decision.result === AuthorizeResult.DENY) { + manageDenyAuthorization(auditEvent); + } + + if ( + decision.result === AuthorizeResult.CONDITIONAL && + !matches({ workflowId }, conditionTransformer(decision.conditions)) + ) { + manageDenyAuthorization(auditEvent); + } + + const result = await routerApi.v2.getWorkflowOverviewById(workflowId); + + auditEvent.success({ + meta: { + workflowId: result.workflowId, + }, }); + return res.json(result); + } catch (error) { + auditEvent.fail({ error }); + return next(error); + } }, ); @@ -662,19 +707,24 @@ function setupInternalRoutes( }); try { - const decision = await authorize( - req, - [ - orchestratorWorkflowPermission, - orchestratorWorkflowSpecificPermission(workflowId), - ], - permissions, - httpAuth, + const credentials = await httpAuth.credentials(req); + + const [decision] = await permissions.authorizeConditional( + [{ permission: orchestratorWorkflowPermission }], + { credentials }, ); + if (decision.result === AuthorizeResult.DENY) { manageDenyAuthorization(auditEvent); } + if ( + decision.result === AuthorizeResult.CONDITIONAL && + !matches({ workflowId }, conditionTransformer(decision.conditions)) + ) { + manageDenyAuthorization(auditEvent); + } + const workflowDefinition = await services.orchestratorService.fetchWorkflowInfo({ definitionId: workflowId, @@ -777,31 +827,37 @@ function setupInternalRoutes( request: req, }); - const decision = await authorize( - req, - [ - orchestratorWorkflowPermission, - orchestratorWorkflowSpecificPermission(workflowId), - ], - permissions, - httpAuth, - ); - if (decision.result === AuthorizeResult.DENY) { - manageDenyAuthorization(auditEvent); - } + try { + const credentials = await httpAuth.credentials(req); - return routerApi.v2 - .getInstances(buildPagination(req), getRequestFilters(req), [ - workflowId, - ]) - .then(result => { - auditEvent.success(); - res.json(result); - }) - .catch(error => { - auditEvent.fail({ error }); - next(error); - }); + const [decision] = await permissions.authorizeConditional( + [{ permission: orchestratorWorkflowPermission }], + { credentials }, + ); + + if (decision.result === AuthorizeResult.DENY) { + manageDenyAuthorization(auditEvent); + } + + if ( + decision.result === AuthorizeResult.CONDITIONAL && + !matches({ workflowId }, conditionTransformer(decision.conditions)) + ) { + manageDenyAuthorization(auditEvent); + } + + const result = await routerApi.v2.getInstances( + buildPagination(req), + getRequestFilters(req), + [workflowId], + ); + + auditEvent.success(); + res.json(result); + } catch (error) { + auditEvent.fail({ error }); + next(error); + } }, ); @@ -816,29 +872,33 @@ function setupInternalRoutes( request: req, }); - const decision = await authorize( - req, - [ - orchestratorWorkflowPermission, - orchestratorWorkflowSpecificPermission(workflowId), - ], - permissions, - httpAuth, - ); - if (decision.result === AuthorizeResult.DENY) { - manageDenyAuthorization(auditEvent); - } + try { + const credentials = await httpAuth.credentials(req); - return routerApi.v2 - .pingWorkflowService(workflowId) - .then(result => { - auditEvent.success(); - res.json(result); - }) - .catch(error => { - auditEvent.fail({ error }); - next(error); - }); + const [decision] = await permissions.authorizeConditional( + [{ permission: orchestratorWorkflowPermission }], + { credentials }, + ); + + if (decision.result === AuthorizeResult.DENY) { + manageDenyAuthorization(auditEvent); + } + + if ( + decision.result === AuthorizeResult.CONDITIONAL && + !matches({ workflowId }, conditionTransformer(decision.conditions)) + ) { + manageDenyAuthorization(auditEvent); + } + + const result = await routerApi.v2.pingWorkflowService(workflowId); + + auditEvent.success(); + res.json(result); + } catch (error) { + auditEvent.fail({ error }); + next(error); + } }, ); @@ -854,16 +914,28 @@ function setupInternalRoutes( try { // Once we assign user to the instance in the future, we can rework this filtering const allWorkflowIds = routerApi.v2.getWorkflowIds(); - const authorizedWorkflowIds: string[] = - await filterAuthorizedWorkflowIds( - req, - permissions, - httpAuth, - allWorkflowIds, - ); + const workflowObjects = allWorkflowIds.map(workflowId => ({ + workflowId, + })); - if (!authorizedWorkflowIds || authorizedWorkflowIds.length === 0) + const authorizedWorkflows = await authorizeWorkflows( + req, + permissions, + httpAuth, + workflowObjects, + orchestratorWorkflowPermission, + conditionTransformer, + ); + + const authorizedWorkflowIds = authorizedWorkflows.map( + w => w.workflowId, + ); + + if (authorizedWorkflowIds.length === 0) { + auditEvent.success({ meta: { authorizedWorkflowIds: [] } }); res.json([]); + return; + } const credentials = await httpAuth.credentials(req); const initiatorEntity = (await userInfo.getUserInfo(credentials)) @@ -937,20 +1009,23 @@ function setupInternalRoutes( const workflowId = instance.processId; - const decision = await authorize( - request, - [ - orchestratorWorkflowPermission, - orchestratorWorkflowSpecificPermission(workflowId), - ], - permissions, - httpAuth, + const credentials = await httpAuth.credentials(request); + + const [decision] = await permissions.authorizeConditional( + [{ permission: orchestratorWorkflowPermission }], + { credentials }, ); + if (decision.result === AuthorizeResult.DENY) { manageDenyAuthorization(auditEvent); } - const credentials = await httpAuth.credentials(request); + if ( + decision.result === AuthorizeResult.CONDITIONAL && + !matches({ workflowId }, conditionTransformer(decision.conditions)) + ) { + manageDenyAuthorization(auditEvent); + } const initiatorEntity = (await userInfo.getUserInfo(credentials)) .userEntityRef; // Check if user is authorized to view all instances @@ -1025,20 +1100,23 @@ function setupInternalRoutes( const instance = await routerApi.v2.getInstanceById(instanceId); const workflowId = instance.processId; - const decision = await authorize( - request, - [ - orchestratorWorkflowPermission, - orchestratorWorkflowSpecificPermission(workflowId), - ], - permissions, - httpAuth, + const credentials = await httpAuth.credentials(request); + + const [decision] = await permissions.authorizeConditional( + [{ permission: orchestratorWorkflowPermission }], + { credentials }, ); + if (decision.result === AuthorizeResult.DENY) { manageDenyAuthorization(auditEvent); } - const credentials = await httpAuth.credentials(request); + if ( + decision.result === AuthorizeResult.CONDITIONAL && + !matches({ workflowId }, conditionTransformer(decision.conditions)) + ) { + manageDenyAuthorization(auditEvent); + } const initiatorEntity = (await userInfo.getUserInfo(credentials)) .userEntityRef; // Check if user is authorized to view all instances @@ -1089,19 +1167,24 @@ function setupInternalRoutes( const instance = await routerApi.v2.getInstanceById(instanceId); const workflowId = instance.processId; - const decision = await authorize( - request, - [ - orchestratorWorkflowUsePermission, - orchestratorWorkflowUseSpecificPermission(workflowId), - ], - permissions, - httpAuth, + const credentials = await httpAuth.credentials(request); + + const [decision] = await permissions.authorizeConditional( + [{ permission: orchestratorWorkflowUsePermission }], + { credentials }, ); + if (decision.result === AuthorizeResult.DENY) { manageDenyAuthorization(auditEvent); } + if ( + decision.result === AuthorizeResult.CONDITIONAL && + !matches({ workflowId }, conditionTransformer(decision.conditions)) + ) { + manageDenyAuthorization(auditEvent); + } + const result = await routerApi.v2.abortWorkflow(workflowId, instanceId); auditEvent.success({ meta: { result } }); res.status(200).json(result); diff --git a/workspaces/orchestrator/plugins/orchestrator-common/report.api.md b/workspaces/orchestrator/plugins/orchestrator-common/report.api.md index d3f51efab1..ab287ac3c9 100644 --- a/workspaces/orchestrator/plugins/orchestrator-common/report.api.md +++ b/workspaces/orchestrator/plugins/orchestrator-common/report.api.md @@ -12,6 +12,7 @@ import type { JSONSchema7 } from 'json-schema'; import type { JSONSchema7Definition } from 'json-schema'; import { JsonValue } from '@backstage/types'; import type { RawAxiosRequestConfig } from 'axios'; +import { ResourcePermission } from '@backstage/plugin-permission-common'; import type { Specification } from '@serverlessworkflow/sdk-typescript'; // Warning: (tsdoc-undefined-tag) The TSDoc tag "@export" is not defined in this configuration @@ -1090,6 +1091,11 @@ export type OmitRecursively = Omit< // @public (undocumented) export const openApiDocument: any; +// Warning: (ae-missing-release-tag) "ORCHESTRATOR_WORKFLOW_RESOURCE_TYPE" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const ORCHESTRATOR_WORKFLOW_RESOURCE_TYPE = 'orchestrator-workflow'; + // Warning: (ae-missing-release-tag) "orchestratorAdminViewPermission" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -1103,31 +1109,20 @@ export const orchestratorInstanceAdminViewPermission: BasicPermission; // Warning: (ae-missing-release-tag) "orchestratorPermissions" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const orchestratorPermissions: BasicPermission[]; +export const orchestratorPermissions: ( + | ResourcePermission<'orchestrator-workflow'> + | BasicPermission +)[]; // Warning: (ae-missing-release-tag) "orchestratorWorkflowPermission" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const orchestratorWorkflowPermission: BasicPermission; - -// Warning: (ae-missing-release-tag) "orchestratorWorkflowSpecificPermission" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const orchestratorWorkflowSpecificPermission: ( - workflowId: string, -) => BasicPermission; +export const orchestratorWorkflowPermission: ResourcePermission<'orchestrator-workflow'>; // Warning: (ae-missing-release-tag) "orchestratorWorkflowUsePermission" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const orchestratorWorkflowUsePermission: BasicPermission; - -// Warning: (ae-missing-release-tag) "orchestratorWorkflowUseSpecificPermission" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const orchestratorWorkflowUseSpecificPermission: ( - workflowId: string, -) => BasicPermission; +export const orchestratorWorkflowUsePermission: ResourcePermission<'orchestrator-workflow'>; // Warning: (tsdoc-undefined-tag) The TSDoc tag "@export" is not defined in this configuration // Warning: (tsdoc-undefined-tag) The TSDoc tag "@interface" is not defined in this configuration @@ -2450,13 +2445,12 @@ export interface WorkflowRunStatusDTO { // src/models.d.ts:101:5 - (ae-undocumented) Missing documentation for "Id". // src/models.d.ts:102:5 - (ae-undocumented) Missing documentation for "String". // src/models.d.ts:103:5 - (ae-undocumented) Missing documentation for "Date". -// src/permissions.d.ts:1:22 - (ae-undocumented) Missing documentation for "orchestratorWorkflowPermission". -// src/permissions.d.ts:2:22 - (ae-undocumented) Missing documentation for "orchestratorWorkflowSpecificPermission". +// src/permissions.d.ts:1:22 - (ae-undocumented) Missing documentation for "ORCHESTRATOR_WORKFLOW_RESOURCE_TYPE". +// src/permissions.d.ts:2:22 - (ae-undocumented) Missing documentation for "orchestratorWorkflowPermission". // src/permissions.d.ts:3:22 - (ae-undocumented) Missing documentation for "orchestratorWorkflowUsePermission". -// src/permissions.d.ts:4:22 - (ae-undocumented) Missing documentation for "orchestratorWorkflowUseSpecificPermission". -// src/permissions.d.ts:5:22 - (ae-undocumented) Missing documentation for "orchestratorAdminViewPermission". -// src/permissions.d.ts:6:22 - (ae-undocumented) Missing documentation for "orchestratorInstanceAdminViewPermission". -// src/permissions.d.ts:7:22 - (ae-undocumented) Missing documentation for "orchestratorPermissions". +// src/permissions.d.ts:4:22 - (ae-undocumented) Missing documentation for "orchestratorAdminViewPermission". +// src/permissions.d.ts:5:22 - (ae-undocumented) Missing documentation for "orchestratorInstanceAdminViewPermission". +// src/permissions.d.ts:6:22 - (ae-undocumented) Missing documentation for "orchestratorPermissions". // src/types.d.ts:9:1 - (ae-undocumented) Missing documentation for "OmitRecursively". // src/types.d.ts:12:1 - (ae-undocumented) Missing documentation for "WorkflowDefinition". // src/types.d.ts:13:1 - (ae-undocumented) Missing documentation for "WorkflowListResult". diff --git a/workspaces/orchestrator/plugins/orchestrator-common/src/permissions.ts b/workspaces/orchestrator/plugins/orchestrator-common/src/permissions.ts index 50f8b227db..b3e13a851c 100644 --- a/workspaces/orchestrator/plugins/orchestrator-common/src/permissions.ts +++ b/workspaces/orchestrator/plugins/orchestrator-common/src/permissions.ts @@ -16,36 +16,24 @@ import { createPermission } from '@backstage/plugin-permission-common'; +export const ORCHESTRATOR_WORKFLOW_RESOURCE_TYPE = 'orchestrator-workflow'; + export const orchestratorWorkflowPermission = createPermission({ name: 'orchestrator.workflow', attributes: { action: 'read', }, + resourceType: ORCHESTRATOR_WORKFLOW_RESOURCE_TYPE, }); -export const orchestratorWorkflowSpecificPermission = (workflowId: string) => - createPermission({ - name: `orchestrator.workflow.${workflowId}`, - attributes: { - action: 'read', - }, - }); - export const orchestratorWorkflowUsePermission = createPermission({ name: 'orchestrator.workflow.use', attributes: { action: 'update', }, + resourceType: ORCHESTRATOR_WORKFLOW_RESOURCE_TYPE, }); -export const orchestratorWorkflowUseSpecificPermission = (workflowId: string) => - createPermission({ - name: `orchestrator.workflow.use.${workflowId}`, - attributes: { - action: 'update', - }, - }); - export const orchestratorAdminViewPermission = createPermission({ name: 'orchestrator.workflowAdminView', attributes: { diff --git a/workspaces/orchestrator/plugins/orchestrator/src/components/OrchestratorPage/WorkflowsTable.tsx b/workspaces/orchestrator/plugins/orchestrator/src/components/OrchestratorPage/WorkflowsTable.tsx index 2b5c14cb33..fa3aaaefc3 100644 --- a/workspaces/orchestrator/plugins/orchestrator/src/components/OrchestratorPage/WorkflowsTable.tsx +++ b/workspaces/orchestrator/plugins/orchestrator/src/components/OrchestratorPage/WorkflowsTable.tsx @@ -19,7 +19,6 @@ import { useNavigate } from 'react-router-dom'; import { Link, TableColumn, TableProps } from '@backstage/core-components'; import { useRouteRef, useRouteRefParams } from '@backstage/core-plugin-api'; -import { usePermission } from '@backstage/plugin-permission-react'; // Workaround since we use the newer @mui library but Backstage still uses deprecated @material-ui import { SvgIcon } from '@material-ui/core'; @@ -28,10 +27,6 @@ import FormatListBulletedMui from '@mui/icons-material/FormatListBulleted'; import PlayArrowMui from '@mui/icons-material/PlayArrow'; import { - orchestratorWorkflowPermission, - orchestratorWorkflowSpecificPermission, - orchestratorWorkflowUsePermission, - orchestratorWorkflowUseSpecificPermission, ProcessInstanceStatusDTO, WorkflowOverviewDTO, } from '@red-hat-developer-hub/backstage-plugin-orchestrator-common'; @@ -39,7 +34,6 @@ import { import WorkflowOverviewFormatter, { FormattedWorkflowOverview, } from '../../dataFormatters/WorkflowOverviewFormatter'; -import { usePermissionArray } from '../../hooks/usePermissionArray'; import { useTranslation } from '../../hooks/useTranslation'; import { entityInstanceRouteRef, @@ -68,47 +62,21 @@ const DeveloperModeOutlined = const usePermittedToUseBatch = ( items: WorkflowOverviewDTO[], ): { allowed: boolean[] } => { - const generic = usePermission({ - permission: orchestratorWorkflowUsePermission, - }); - - let workflowIds: string[] = []; - if (!generic.loading && !generic.allowed) { - // This will effectively skip the requests if the generic permission grants the access - workflowIds = items.map(i => i.workflowId); - } - - const specific = usePermissionArray( - workflowIds.map(workflowId => - orchestratorWorkflowUseSpecificPermission(workflowId), - ), - ); + // With RBAC conditional policies, the backend filters workflows by permission + // If a workflow is returned in the list, the user has permission to view it + // For "use" permission, we optimistically allow - the backend will deny if not permitted return { - allowed: items.map((_, idx) => generic.allowed || specific.allowed[idx]), + allowed: items.map(() => true), }; }; const usePermittedToViewBatch = ( items: WorkflowOverviewDTO[], ): { allowed: boolean[] } => { - const generic = usePermission({ - permission: orchestratorWorkflowPermission, - }); - - let workflowIds: string[] = []; - if (!generic.loading && !generic.allowed) { - // This will effectively skip the subsequent "specific" requests if the generic permission is granted - workflowIds = items.map(i => i.workflowId); - } - - const specific = usePermissionArray( - workflowIds.map(workflowId => - orchestratorWorkflowSpecificPermission(workflowId), - ), - ); - + // With RBAC conditional policies, the backend filters workflows by permission + // If a workflow is returned in the list, the user has permission to view it return { - allowed: items.map((_, idx) => generic.allowed || specific.allowed[idx]), + allowed: items.map(() => true), }; }; diff --git a/workspaces/orchestrator/plugins/orchestrator/src/components/WorkflowInstancePage/WorkflowInstancePage.tsx b/workspaces/orchestrator/plugins/orchestrator/src/components/WorkflowInstancePage/WorkflowInstancePage.tsx index 700ec979d3..1ec5b8b607 100644 --- a/workspaces/orchestrator/plugins/orchestrator/src/components/WorkflowInstancePage/WorkflowInstancePage.tsx +++ b/workspaces/orchestrator/plugins/orchestrator/src/components/WorkflowInstancePage/WorkflowInstancePage.tsx @@ -53,8 +53,6 @@ import { makeStyles } from 'tss-react/mui'; import { AuthTokenDescriptor, isJsonObject, - orchestratorWorkflowUsePermission, - orchestratorWorkflowUseSpecificPermission, ProcessInstanceDTO, ProcessInstanceStatusDTO, QUERY_PARAM_INSTANCE_ID, @@ -63,7 +61,6 @@ import { import { orchestratorApiRef } from '../../api'; import { SHORT_REFRESH_INTERVAL } from '../../constants'; import { useOrchestratorAuth } from '../../hooks/useOrchestratorAuth'; -import { usePermissionArrayDecision } from '../../hooks/usePermissionArray'; import usePolling from '../../hooks/usePolling'; import { useTranslation } from '../../hooks/useTranslation'; import { @@ -261,14 +258,9 @@ export const WorkflowInstancePage = () => { ); const workflowId = value?.processId; - const permittedToUse = usePermissionArrayDecision( - workflowId - ? [ - orchestratorWorkflowUsePermission, - orchestratorWorkflowUseSpecificPermission(workflowId), - ] - : [orchestratorWorkflowUsePermission], - ); + // With RBAC conditional policies, permissions are enforced by the backend + // Frontend optimistically allows actions - backend will return 403 if not permitted + const permittedToUse = { allowed: true, loading: false }; const { value: inputSchema, error: inputSchemaError } = useAsync(async (): Promise => { diff --git a/workspaces/orchestrator/plugins/orchestrator/src/components/WorkflowPage/RunButton.tsx b/workspaces/orchestrator/plugins/orchestrator/src/components/WorkflowPage/RunButton.tsx index 89a2381686..bf2a123310 100644 --- a/workspaces/orchestrator/plugins/orchestrator/src/components/WorkflowPage/RunButton.tsx +++ b/workspaces/orchestrator/plugins/orchestrator/src/components/WorkflowPage/RunButton.tsx @@ -23,12 +23,6 @@ import Grid from '@mui/material/Grid'; import Skeleton from '@mui/material/Skeleton'; import Tooltip from '@mui/material/Tooltip'; -import { - orchestratorWorkflowUsePermission, - orchestratorWorkflowUseSpecificPermission, -} from '@red-hat-developer-hub/backstage-plugin-orchestrator-common'; - -import { usePermissionArrayDecision } from '../../hooks/usePermissionArray'; import { useTranslation } from '../../hooks/useTranslation'; import { executeWorkflowRouteRef, workflowRouteRef } from '../../routes'; @@ -56,11 +50,10 @@ export const RunButton = ({ navigate(buildExecuteUrl()); }; - const { loading: loadingPermission, allowed: canRun } = - usePermissionArrayDecision([ - orchestratorWorkflowUsePermission, - orchestratorWorkflowUseSpecificPermission(workflowId), - ]); + // With RBAC conditional policies, permissions are enforced by the backend + // Frontend optimistically allows - backend will return 403 if not permitted + const loadingPermission = false; + const canRun = true; let tooltipText = ''; if (!canRun) { diff --git a/workspaces/orchestrator/plugins/scaffolder-backend-module-orchestrator/package.json b/workspaces/orchestrator/plugins/scaffolder-backend-module-orchestrator/package.json index b00053ab76..8b3accc7e4 100644 --- a/workspaces/orchestrator/plugins/scaffolder-backend-module-orchestrator/package.json +++ b/workspaces/orchestrator/plugins/scaffolder-backend-module-orchestrator/package.json @@ -57,7 +57,7 @@ "dependencies": { "@backstage/backend-plugin-api": "^1.8.0", "@backstage/catalog-model": "^1.7.7", - "@backstage/plugin-permission-common": "^0.9.7", + "@backstage/plugin-permission-common": "^0.9.8", "@backstage/plugin-scaffolder-node": "^0.13.0", "@backstage/types": "^1.2.2", "@red-hat-developer-hub/backstage-plugin-orchestrator-common": "workspace:^", diff --git a/workspaces/orchestrator/yarn.lock b/workspaces/orchestrator/yarn.lock index f9a1a07fbf..cf7d3af33e 100644 --- a/workspaces/orchestrator/yarn.lock +++ b/workspaces/orchestrator/yarn.lock @@ -2490,7 +2490,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.20.6, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.26.0, @babel/runtime@npm:^7.27.1, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.20.6, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.26.0, @babel/runtime@npm:^7.27.1, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": version: 7.28.4 resolution: "@babel/runtime@npm:7.28.4" checksum: 10c0/792ce7af9750fb9b93879cc9d1db175701c4689da890e6ced242ea0207c9da411ccf16dc04e689cc01158b28d7898c40d75598f4559109f761c12ce01e959bf7 @@ -2533,71 +2533,71 @@ __metadata: languageName: node linkType: hard -"@backstage-community/plugin-rbac-backend@npm:^7.4.0": - version: 7.6.1 - resolution: "@backstage-community/plugin-rbac-backend@npm:7.6.1" +"@backstage-community/plugin-rbac-backend@npm:^7.12.3": + version: 7.12.3 + resolution: "@backstage-community/plugin-rbac-backend@npm:7.12.3" dependencies: - "@backstage-community/plugin-rbac-common": "npm:^1.22.0" - "@backstage-community/plugin-rbac-node": "npm:^1.16.0" - "@backstage/backend-defaults": "npm:^0.13.1" - "@backstage/backend-plugin-api": "npm:^1.5.0" - "@backstage/catalog-client": "npm:^1.12.1" - "@backstage/catalog-model": "npm:^1.7.6" + "@backstage-community/plugin-rbac-common": "npm:^1.26.0" + "@backstage-community/plugin-rbac-node": "npm:^1.20.0" + "@backstage/backend-defaults": "npm:^0.16.0" + "@backstage/backend-plugin-api": "npm:^1.8.0" + "@backstage/catalog-client": "npm:^1.14.0" + "@backstage/catalog-model": "npm:^1.7.7" + "@backstage/config": "npm:^1.3.6" "@backstage/errors": "npm:^1.2.7" - "@backstage/plugin-auth-node": "npm:^0.6.9" - "@backstage/plugin-permission-backend": "npm:^0.7.6" - "@backstage/plugin-permission-common": "npm:^0.9.3" - "@backstage/plugin-permission-node": "npm:^0.10.6" - "@dagrejs/graphlib": "npm:^2.1.13" + "@backstage/plugin-permission-common": "npm:^0.9.7" + "@backstage/plugin-permission-node": "npm:^0.10.11" + "@dagrejs/graphlib": "npm:^4.0.0" casbin: "npm:^5.27.1" chokidar: "npm:^3.6.0" - csv-parse: "npm:^5.5.5" + csv-parse: "npm:^6.0.0" express: "npm:^4.18.2" express-promise-router: "npm:^4.1.0" js-yaml: "npm:^4.1.0" knex: "npm:^3.0.0" lodash: "npm:^4.17.21" typeorm-adapter: "npm:^1.6.1" - zod: "npm:^3.22.4" - zod-to-json-schema: "npm:^3.24.5" - checksum: 10c0/b2772444715ddb514c3d5476bb9ee3b610eb01d6e1fb130c0b675b92e0e0054cf45cc65ccc8023a7dd6a643b5f1d8d54467b9f396de866205d3d4234d1d10b9b + zod: "npm:^4.3.6" + checksum: 10c0/7daa27ea792fd2563baa96c048026c1701d010da4ae6d3c713a02799305310ba8a08ffec0dac6946ad0e95857a8565e65d0ca3e8c2a536ff9c643c851eabd4c8 languageName: node linkType: hard -"@backstage-community/plugin-rbac-common@npm:^1.12.1, @backstage-community/plugin-rbac-common@npm:^1.12.2, @backstage-community/plugin-rbac-common@npm:^1.22.0": - version: 1.22.0 - resolution: "@backstage-community/plugin-rbac-common@npm:1.22.0" +"@backstage-community/plugin-rbac-common@npm:^1.26.0": + version: 1.26.0 + resolution: "@backstage-community/plugin-rbac-common@npm:1.26.0" peerDependencies: "@backstage/errors": ^1.2.7 - "@backstage/plugin-permission-common": ^0.9.3 - checksum: 10c0/78c27277a23a16b971851a0b0bfd14e8556072c65f214c18c95ae14bf1e935d71bff822dd1db732f78d59ab48594b9fab496896fe4d68330d5ecc6a12513dc4f + "@backstage/plugin-permission-common": ^0.9.7 + checksum: 10c0/b98de22ec09d811584e754409f540273113a862f275c861ee74de0bee738e8f16ece44980a6212ce6d1a19b6fb95acb250f9db7c80758d376939a25e0bed297d languageName: node linkType: hard -"@backstage-community/plugin-rbac-node@npm:^1.16.0": - version: 1.16.0 - resolution: "@backstage-community/plugin-rbac-node@npm:1.16.0" +"@backstage-community/plugin-rbac-node@npm:^1.20.0": + version: 1.20.0 + resolution: "@backstage-community/plugin-rbac-node@npm:1.20.0" dependencies: - "@backstage/backend-plugin-api": "npm:^1.5.0" - checksum: 10c0/fb0a2b0699154dc5e23d9fd746df5e55de3601482036047b6138ed834590356e9c995ba7994396675a2798e15f3c4cafc527bd6167449c6904183a7cee6916fa + "@backstage-community/plugin-rbac-common": "npm:^1.26.0" + "@backstage/backend-plugin-api": "npm:^1.8.0" + checksum: 10c0/a64ba67256acfa668a7d210003f5164733df1a5c0d23093537f1e4a5c8619d40a5831a22e899185a88fd7b7a1b9ea6b9ce73258df55175f137afa48d8eacd282 languageName: node linkType: hard -"@backstage-community/plugin-rbac@npm:^1.33.2": - version: 1.33.2 - resolution: "@backstage-community/plugin-rbac@npm:1.33.2" +"@backstage-community/plugin-rbac@npm:1.52.1, @backstage-community/plugin-rbac@npm:^1.33.2": + version: 1.52.1 + resolution: "@backstage-community/plugin-rbac@npm:1.52.1" dependencies: - "@backstage-community/plugin-rbac-common": "npm:^1.12.2" - "@backstage/catalog-model": "npm:^1.7.0" - "@backstage/core-components": "npm:^0.15.1" - "@backstage/core-plugin-api": "npm:^1.10.0" - "@backstage/plugin-catalog": "npm:^1.24.0" - "@backstage/plugin-catalog-common": "npm:^1.1.0" - "@backstage/plugin-permission-common": "npm:^0.8.1" - "@backstage/plugin-permission-react": "npm:^0.4.27" - "@backstage/theme": "npm:^0.6.0" - "@janus-idp/shared-react": "npm:^2.13.1" - "@mui/icons-material": "npm:5.16.4" + "@backstage-community/plugin-rbac-common": "npm:^1.26.0" + "@backstage/catalog-model": "npm:^1.7.7" + "@backstage/core-components": "npm:^0.18.8" + "@backstage/core-plugin-api": "npm:^1.12.4" + "@backstage/frontend-plugin-api": "npm:^0.15.1" + "@backstage/plugin-app-react": "npm:^0.2.1" + "@backstage/plugin-catalog": "npm:^2.0.1" + "@backstage/plugin-catalog-common": "npm:^1.1.8" + "@backstage/plugin-permission-common": "npm:^0.9.7" + "@backstage/plugin-permission-react": "npm:^0.4.41" + "@backstage/theme": "npm:^0.7.2" + "@mui/icons-material": "npm:5.18.0" "@mui/material": "npm:^5.14.18" "@mui/styles": "npm:^6.1.7" "@rjsf/core": "npm:^5.21.2" @@ -2610,8 +2610,9 @@ __metadata: yup: "npm:^1.3.2" peerDependencies: react: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 react-router-dom: ^6.0.0 - checksum: 10c0/09f2cbbabbc2f04a278a447184c186358109a77e317ca6580a928ce1035c87c3cd492349d9ed90dcf6cd1de8f9b880cfca123d9be19adf042a9dfce19568c822 + checksum: 10c0/fd041bb4741025d3f769ecbadaedb96b0d5ec198d442946c35e24beefa2b7d648ca146d5ce32b5740ea233883a89d116a70b88e5bffbca512b1bcce575c8cbf7 languageName: node linkType: hard @@ -2638,7 +2639,7 @@ __metadata: languageName: node linkType: hard -"@backstage/backend-app-api@npm:^1.3.0, @backstage/backend-app-api@npm:^1.6.0": +"@backstage/backend-app-api@npm:^1.6.0": version: 1.6.0 resolution: "@backstage/backend-app-api@npm:1.6.0" dependencies: @@ -2649,90 +2650,6 @@ __metadata: languageName: node linkType: hard -"@backstage/backend-defaults@npm:^0.13.1": - version: 0.13.1 - resolution: "@backstage/backend-defaults@npm:0.13.1" - dependencies: - "@aws-sdk/abort-controller": "npm:^3.347.0" - "@aws-sdk/client-codecommit": "npm:^3.350.0" - "@aws-sdk/client-s3": "npm:^3.350.0" - "@aws-sdk/credential-providers": "npm:^3.350.0" - "@aws-sdk/types": "npm:^3.347.0" - "@azure/storage-blob": "npm:^12.5.0" - "@backstage/backend-app-api": "npm:^1.3.0" - "@backstage/backend-dev-utils": "npm:^0.1.5" - "@backstage/backend-plugin-api": "npm:^1.5.0" - "@backstage/cli-node": "npm:^0.2.15" - "@backstage/config": "npm:^1.3.6" - "@backstage/config-loader": "npm:^1.10.6" - "@backstage/errors": "npm:^1.2.7" - "@backstage/integration": "npm:^1.18.2" - "@backstage/integration-aws-node": "npm:^0.1.19" - "@backstage/plugin-auth-node": "npm:^0.6.9" - "@backstage/plugin-events-node": "npm:^0.4.17" - "@backstage/plugin-permission-node": "npm:^0.10.6" - "@backstage/types": "npm:^1.2.2" - "@google-cloud/storage": "npm:^7.0.0" - "@keyv/memcache": "npm:^2.0.1" - "@keyv/redis": "npm:^4.0.1" - "@keyv/valkey": "npm:^1.0.1" - "@manypkg/get-packages": "npm:^1.1.3" - "@octokit/rest": "npm:^19.0.3" - "@opentelemetry/api": "npm:^1.9.0" - "@types/cors": "npm:^2.8.6" - "@types/express": "npm:^4.17.6" - archiver: "npm:^7.0.0" - base64-stream: "npm:^1.0.0" - better-sqlite3: "npm:^12.0.0" - compression: "npm:^1.7.4" - concat-stream: "npm:^2.0.0" - cookie: "npm:^0.7.0" - cors: "npm:^2.8.5" - cron: "npm:^3.0.0" - express: "npm:^4.17.1" - express-promise-router: "npm:^4.1.0" - express-rate-limit: "npm:^7.5.0" - fs-extra: "npm:^11.2.0" - git-url-parse: "npm:^15.0.0" - helmet: "npm:^6.0.0" - infinispan: "npm:^0.12.0" - is-glob: "npm:^4.0.3" - jose: "npm:^5.0.0" - keyv: "npm:^5.2.1" - knex: "npm:^3.0.0" - lodash: "npm:^4.17.21" - logform: "npm:^2.3.2" - luxon: "npm:^3.0.0" - minimatch: "npm:^9.0.0" - mysql2: "npm:^3.0.0" - node-fetch: "npm:^2.7.0" - node-forge: "npm:^1.3.1" - p-limit: "npm:^3.1.0" - path-to-regexp: "npm:^8.0.0" - pg: "npm:^8.11.3" - pg-connection-string: "npm:^2.3.0" - pg-format: "npm:^1.0.4" - rate-limit-redis: "npm:^4.2.0" - raw-body: "npm:^2.4.1" - selfsigned: "npm:^2.0.0" - tar: "npm:^6.1.12" - triple-beam: "npm:^1.4.1" - uuid: "npm:^11.0.0" - winston: "npm:^3.2.1" - winston-transport: "npm:^4.5.0" - yauzl: "npm:^3.0.0" - yn: "npm:^4.0.0" - zod: "npm:^3.22.4" - zod-to-json-schema: "npm:^3.20.4" - peerDependencies: - "@google-cloud/cloud-sql-connector": ^1.4.0 - peerDependenciesMeta: - "@google-cloud/cloud-sql-connector": - optional: true - checksum: 10c0/65eccb6c089cebfec9721faac166717f0dc35679b21a3f84b0428f555c054d4d90ef43b10016a5933e60d574c39558905c0384f0b7566f93591249a5f386bded - languageName: node - linkType: hard - "@backstage/backend-defaults@npm:^0.16.0": version: 0.16.0 resolution: "@backstage/backend-defaults@npm:0.16.0" @@ -2821,7 +2738,7 @@ __metadata: languageName: node linkType: hard -"@backstage/backend-dev-utils@npm:^0.1.5, @backstage/backend-dev-utils@npm:^0.1.7": +"@backstage/backend-dev-utils@npm:^0.1.7": version: 0.1.7 resolution: "@backstage/backend-dev-utils@npm:0.1.7" checksum: 10c0/3a0f54a6303bf4815e8d2e1a7536d9f7ee8028a04dd796ca233261f3170f3c4343468841590a5b0faf60b0864eae028a6086bff4a674a8345e0de100b5550da2 @@ -2852,7 +2769,7 @@ __metadata: languageName: node linkType: hard -"@backstage/backend-plugin-api@npm:^1.5.0, @backstage/backend-plugin-api@npm:^1.8.0": +"@backstage/backend-plugin-api@npm:^1.8.0": version: 1.8.0 resolution: "@backstage/backend-plugin-api@npm:1.8.0" dependencies: @@ -2919,7 +2836,7 @@ __metadata: languageName: node linkType: hard -"@backstage/catalog-client@npm:^1.12.1, @backstage/catalog-client@npm:^1.14.0": +"@backstage/catalog-client@npm:^1.14.0": version: 1.14.0 resolution: "@backstage/catalog-client@npm:1.14.0" dependencies: @@ -2933,7 +2850,7 @@ __metadata: languageName: node linkType: hard -"@backstage/catalog-model@npm:^1.7.0, @backstage/catalog-model@npm:^1.7.6, @backstage/catalog-model@npm:^1.7.7": +"@backstage/catalog-model@npm:^1.7.6, @backstage/catalog-model@npm:^1.7.7": version: 1.7.7 resolution: "@backstage/catalog-model@npm:1.7.7" dependencies: @@ -3281,7 +3198,7 @@ __metadata: languageName: node linkType: hard -"@backstage/cli-node@npm:^0.2.12, @backstage/cli-node@npm:^0.2.15": +"@backstage/cli-node@npm:^0.2.12": version: 0.2.17 resolution: "@backstage/cli-node@npm:0.2.17" dependencies: @@ -3385,7 +3302,7 @@ __metadata: languageName: node linkType: hard -"@backstage/config-loader@npm:^1.10.6, @backstage/config-loader@npm:^1.10.9, @backstage/config-loader@npm:^1.9.5": +"@backstage/config-loader@npm:^1.10.9, @backstage/config-loader@npm:^1.9.5": version: 1.10.9 resolution: "@backstage/config-loader@npm:1.10.9" dependencies: @@ -3408,18 +3325,18 @@ __metadata: languageName: node linkType: hard -"@backstage/config@npm:^1.2.0, @backstage/config@npm:^1.3.2, @backstage/config@npm:^1.3.6": - version: 1.3.6 - resolution: "@backstage/config@npm:1.3.6" +"@backstage/config@npm:^1.3.2, @backstage/config@npm:^1.3.6, @backstage/config@npm:^1.3.7": + version: 1.3.7 + resolution: "@backstage/config@npm:1.3.7" dependencies: - "@backstage/errors": "npm:^1.2.7" + "@backstage/errors": "npm:^1.3.0" "@backstage/types": "npm:^1.2.2" ms: "npm:^2.1.3" - checksum: 10c0/e6f99f9077145bf103a98b2533c506ee3104af4345c4ace0b7e4714352f0374091f7c1d43b14715f9a3046464782d3bbe5e3821ae423c7a5e56dc921edc5bc59 + checksum: 10c0/de4f88e0df17140dfe9d5041936a7dcb7c24aa5413af7b6cecb04b417d6370e43bee25d2deb91e07e4cf1442a9e7ef151f57c2bd60d8ec4f7f199e6bcfd9dedc languageName: node linkType: hard -"@backstage/core-app-api@npm:^1.19.4, @backstage/core-app-api@npm:^1.19.6": +"@backstage/core-app-api@npm:^1.19.6": version: 1.19.6 resolution: "@backstage/core-app-api@npm:1.19.6" dependencies: @@ -3448,7 +3365,7 @@ __metadata: languageName: node linkType: hard -"@backstage/core-compat-api@npm:^0.5.6, @backstage/core-compat-api@npm:^0.5.7, @backstage/core-compat-api@npm:^0.5.9": +"@backstage/core-compat-api@npm:^0.5.9": version: 0.5.9 resolution: "@backstage/core-compat-api@npm:0.5.9" dependencies: @@ -3474,59 +3391,7 @@ __metadata: languageName: node linkType: hard -"@backstage/core-components@npm:^0.15.1": - version: 0.15.1 - resolution: "@backstage/core-components@npm:0.15.1" - dependencies: - "@backstage/config": "npm:^1.2.0" - "@backstage/core-plugin-api": "npm:^1.10.0" - "@backstage/errors": "npm:^1.2.4" - "@backstage/theme": "npm:^0.6.0" - "@backstage/version-bridge": "npm:^1.0.10" - "@date-io/core": "npm:^1.3.13" - "@material-table/core": "npm:^3.1.0" - "@material-ui/core": "npm:^4.12.2" - "@material-ui/icons": "npm:^4.9.1" - "@material-ui/lab": "npm:4.0.0-alpha.61" - "@react-hookz/web": "npm:^24.0.0" - "@types/react-sparklines": "npm:^1.7.0" - ansi-regex: "npm:^6.0.1" - classnames: "npm:^2.2.6" - d3-selection: "npm:^3.0.0" - d3-shape: "npm:^3.0.0" - d3-zoom: "npm:^3.0.0" - dagre: "npm:^0.8.5" - linkify-react: "npm:4.1.3" - linkifyjs: "npm:4.1.3" - lodash: "npm:^4.17.21" - pluralize: "npm:^8.0.0" - qs: "npm:^6.9.4" - rc-progress: "npm:3.5.1" - react-helmet: "npm:6.1.0" - react-hook-form: "npm:^7.12.2" - react-idle-timer: "npm:5.7.2" - react-markdown: "npm:^8.0.0" - react-sparklines: "npm:^1.7.0" - react-syntax-highlighter: "npm:^15.4.5" - react-use: "npm:^17.3.2" - react-virtualized-auto-sizer: "npm:^1.0.11" - react-window: "npm:^1.8.6" - remark-gfm: "npm:^3.0.1" - zen-observable: "npm:^0.10.0" - zod: "npm:^3.22.4" - peerDependencies: - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/93e85b32db69ee50e5814a5c2d9a5a874f15ed9647896eb2099511c31f7609551abc5d70eb14dd78f4b7580fbb53f255d07119958b142ce9e90517a8c0334838 - languageName: node - linkType: hard - -"@backstage/core-components@npm:^0.18.5, @backstage/core-components@npm:^0.18.6, @backstage/core-components@npm:^0.18.8": +"@backstage/core-components@npm:^0.18.8": version: 0.18.8 resolution: "@backstage/core-components@npm:0.18.8" dependencies: @@ -3584,7 +3449,7 @@ __metadata: languageName: node linkType: hard -"@backstage/core-plugin-api@npm:^1.10.0, @backstage/core-plugin-api@npm:^1.12.1, @backstage/core-plugin-api@npm:^1.12.2, @backstage/core-plugin-api@npm:^1.12.4": +"@backstage/core-plugin-api@npm:^1.12.4": version: 1.12.4 resolution: "@backstage/core-plugin-api@npm:1.12.4" dependencies: @@ -3650,13 +3515,13 @@ __metadata: languageName: node linkType: hard -"@backstage/errors@npm:^1.2.4, @backstage/errors@npm:^1.2.7": - version: 1.2.7 - resolution: "@backstage/errors@npm:1.2.7" +"@backstage/errors@npm:^1.2.7, @backstage/errors@npm:^1.3.0": + version: 1.3.0 + resolution: "@backstage/errors@npm:1.3.0" dependencies: - "@backstage/types": "npm:^1.2.1" + "@backstage/types": "npm:^1.2.2" serialize-error: "npm:^8.0.1" - checksum: 10c0/ce04dccc96c49bf121f1de86a589bbe3a613a32f63546b100a9d074bf2cb79c8ba889e1e7ba39c44c717b1bc7dea7654de85b1229fb7e4106e31dd60327c10c1 + checksum: 10c0/e47f4a42d989858ab148359a410a82e295b5090c3da8d3a761997fd95d41786183c4113d8db13525964d497c2963e2d532c32f93548bb35bd30c1b514c34af19 languageName: node linkType: hard @@ -3683,32 +3548,6 @@ __metadata: languageName: node linkType: hard -"@backstage/frontend-app-api@npm:^0.14.1": - version: 0.14.1 - resolution: "@backstage/frontend-app-api@npm:0.14.1" - dependencies: - "@backstage/config": "npm:^1.3.6" - "@backstage/core-app-api": "npm:^1.19.4" - "@backstage/core-plugin-api": "npm:^1.12.2" - "@backstage/errors": "npm:^1.2.7" - "@backstage/frontend-defaults": "npm:^0.3.6" - "@backstage/frontend-plugin-api": "npm:^0.13.4" - "@backstage/types": "npm:^1.2.2" - "@backstage/version-bridge": "npm:^1.0.11" - lodash: "npm:^4.17.21" - zod: "npm:^3.25.76" - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - react-router-dom: ^6.3.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/ebd55a914db7fd08315b59656c24d20becd9d4ee772b6ef93c9ed07239bef028078fd74636c8ff2b7ea61d283013002d918e44ee956b11bd64365dda26309f50 - languageName: node - linkType: hard - "@backstage/frontend-app-api@npm:^0.16.0": version: 0.16.1 resolution: "@backstage/frontend-app-api@npm:0.16.1" @@ -3736,29 +3575,6 @@ __metadata: languageName: node linkType: hard -"@backstage/frontend-defaults@npm:^0.3.6": - version: 0.3.6 - resolution: "@backstage/frontend-defaults@npm:0.3.6" - dependencies: - "@backstage/config": "npm:^1.3.6" - "@backstage/core-components": "npm:^0.18.6" - "@backstage/errors": "npm:^1.2.7" - "@backstage/frontend-app-api": "npm:^0.14.1" - "@backstage/frontend-plugin-api": "npm:^0.13.4" - "@backstage/plugin-app": "npm:^0.3.5" - "@react-hookz/web": "npm:^24.0.0" - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - react-router-dom: ^6.3.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/dbb774da769fed52e343124b01d198e4a20544d621f81f661078bc5765cf3eca5e4a31ef1c0a6091087e2a1920253318e4801084895d3d589c5abc8610307e06 - languageName: node - linkType: hard - "@backstage/frontend-defaults@npm:^0.5.0": version: 0.5.0 resolution: "@backstage/frontend-defaults@npm:0.5.0" @@ -3782,27 +3598,6 @@ __metadata: languageName: node linkType: hard -"@backstage/frontend-plugin-api@npm:^0.13.3, @backstage/frontend-plugin-api@npm:^0.13.4": - version: 0.13.4 - resolution: "@backstage/frontend-plugin-api@npm:0.13.4" - dependencies: - "@backstage/errors": "npm:^1.2.7" - "@backstage/types": "npm:^1.2.2" - "@backstage/version-bridge": "npm:^1.0.11" - zod: "npm:^3.25.76" - zod-to-json-schema: "npm:^3.25.1" - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - react-router-dom: ^6.3.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/0e7375c3abb20cc849c00f5013b33e05032fce83e3758affa20ece8075904778f430cf6bfdf77ead3fae3a0c492a6e299e1c98dbc7ba7952ee9c19033b36fcc4 - languageName: node - linkType: hard - "@backstage/frontend-plugin-api@npm:^0.15.0, @backstage/frontend-plugin-api@npm:^0.15.1": version: 0.15.1 resolution: "@backstage/frontend-plugin-api@npm:0.15.1" @@ -3825,33 +3620,7 @@ __metadata: languageName: node linkType: hard -"@backstage/frontend-test-utils@npm:^0.4.5": - version: 0.4.5 - resolution: "@backstage/frontend-test-utils@npm:0.4.5" - dependencies: - "@backstage/config": "npm:^1.3.6" - "@backstage/frontend-app-api": "npm:^0.14.1" - "@backstage/frontend-plugin-api": "npm:^0.13.4" - "@backstage/plugin-app": "npm:^0.3.5" - "@backstage/plugin-app-react": "npm:^0.1.0" - "@backstage/test-utils": "npm:^1.7.14" - "@backstage/types": "npm:^1.2.2" - "@backstage/version-bridge": "npm:^1.0.11" - zod: "npm:^3.25.76" - peerDependencies: - "@testing-library/react": ^16.0.0 - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - react-router-dom: ^6.3.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/009b7f6795688ac9950b67a9449291566918cc72503f1bd290e939031fef0283d412f7c9fc430ac613b002cb5f1c6b922c5bfd4df069d324b4d0316da93fa76a - languageName: node - linkType: hard - -"@backstage/integration-aws-node@npm:^0.1.19, @backstage/integration-aws-node@npm:^0.1.20": +"@backstage/integration-aws-node@npm:^0.1.20": version: 0.1.20 resolution: "@backstage/integration-aws-node@npm:0.1.20" dependencies: @@ -3866,7 +3635,7 @@ __metadata: languageName: node linkType: hard -"@backstage/integration-react@npm:^1.2.14, @backstage/integration-react@npm:^1.2.16": +"@backstage/integration-react@npm:^1.2.16": version: 1.2.16 resolution: "@backstage/integration-react@npm:1.2.16" dependencies: @@ -3887,24 +3656,6 @@ __metadata: languageName: node linkType: hard -"@backstage/integration@npm:^1.18.2, @backstage/integration@npm:^1.19.2": - version: 1.20.1 - resolution: "@backstage/integration@npm:1.20.1" - dependencies: - "@azure/identity": "npm:^4.0.0" - "@azure/storage-blob": "npm:^12.5.0" - "@backstage/config": "npm:^1.3.6" - "@backstage/errors": "npm:^1.2.7" - "@octokit/auth-app": "npm:^4.0.0" - "@octokit/rest": "npm:^19.0.3" - cross-fetch: "npm:^4.0.0" - git-url-parse: "npm:^15.0.0" - lodash: "npm:^4.17.21" - luxon: "npm:^3.0.0" - checksum: 10c0/f117b378dd4865e3dd9d74992049d61df38c0534f95221afbaac6e9506d7ef543fa9cc5f7adc11633fc1bec298bf10064e7a62dc066b00b666f758056e51f187 - languageName: node - linkType: hard - "@backstage/integration@npm:^2.0.0": version: 2.0.0 resolution: "@backstage/integration@npm:2.0.0" @@ -4021,25 +3772,6 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-app-react@npm:^0.1.0": - version: 0.1.0 - resolution: "@backstage/plugin-app-react@npm:0.1.0" - dependencies: - "@backstage/core-plugin-api": "npm:^1.12.1" - "@backstage/frontend-plugin-api": "npm:^0.13.3" - "@material-ui/core": "npm:^4.9.13" - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - react-router-dom: ^6.3.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/a10716547b2c4a5c8c9d55d1283091b5009877996d2e0ad0b37babc631c35bd45a4cc359e18ae7f98f87b38b869baae5f68c5eeff5d79029ec79f9a9780abb19 - languageName: node - linkType: hard - "@backstage/plugin-app-react@npm:^0.2.1": version: 0.2.1 resolution: "@backstage/plugin-app-react@npm:0.2.1" @@ -4059,37 +3791,6 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-app@npm:^0.3.5": - version: 0.3.5 - resolution: "@backstage/plugin-app@npm:0.3.5" - dependencies: - "@backstage/core-components": "npm:^0.18.6" - "@backstage/core-plugin-api": "npm:^1.12.2" - "@backstage/frontend-plugin-api": "npm:^0.13.4" - "@backstage/integration-react": "npm:^1.2.14" - "@backstage/plugin-app-react": "npm:^0.1.0" - "@backstage/plugin-permission-react": "npm:^0.4.39" - "@backstage/theme": "npm:^0.7.1" - "@backstage/types": "npm:^1.2.2" - "@backstage/version-bridge": "npm:^1.0.11" - "@material-ui/core": "npm:^4.9.13" - "@material-ui/icons": "npm:^4.9.1" - "@material-ui/lab": "npm:^4.0.0-alpha.61" - "@react-hookz/web": "npm:^24.0.0" - react-use: "npm:^17.2.4" - zod: "npm:^3.25.76" - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - react-router-dom: ^6.3.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/4c29c3d2671aa87fe6f4607b67e86a6607170ae310a5afadbdd961089424c6650b4a8d2aeb552ed317b334765e99ba471d8745c1fc52d8d1ea9a71f5addbd85d - languageName: node - linkType: hard - "@backstage/plugin-app@npm:^0.4.1": version: 0.4.2 resolution: "@backstage/plugin-app@npm:0.4.2" @@ -4200,7 +3901,7 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-auth-node@npm:^0.6.14, @backstage/plugin-auth-node@npm:^0.6.9": +"@backstage/plugin-auth-node@npm:^0.6.14": version: 0.6.14 resolution: "@backstage/plugin-auth-node@npm:0.6.14" dependencies: @@ -4329,7 +4030,7 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-catalog-common@npm:^1.1.0, @backstage/plugin-catalog-common@npm:^1.1.7, @backstage/plugin-catalog-common@npm:^1.1.8": +"@backstage/plugin-catalog-common@npm:^1.1.8": version: 1.1.8 resolution: "@backstage/plugin-catalog-common@npm:1.1.8" dependencies: @@ -4435,47 +4136,6 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-catalog-react@npm:^1.21.5": - version: 1.21.6 - resolution: "@backstage/plugin-catalog-react@npm:1.21.6" - dependencies: - "@backstage/catalog-client": "npm:^1.12.1" - "@backstage/catalog-model": "npm:^1.7.6" - "@backstage/core-compat-api": "npm:^0.5.7" - "@backstage/core-components": "npm:^0.18.6" - "@backstage/core-plugin-api": "npm:^1.12.2" - "@backstage/errors": "npm:^1.2.7" - "@backstage/frontend-plugin-api": "npm:^0.13.4" - "@backstage/frontend-test-utils": "npm:^0.4.5" - "@backstage/integration-react": "npm:^1.2.14" - "@backstage/plugin-catalog-common": "npm:^1.1.7" - "@backstage/plugin-permission-common": "npm:^0.9.5" - "@backstage/plugin-permission-react": "npm:^0.4.39" - "@backstage/types": "npm:^1.2.2" - "@backstage/version-bridge": "npm:^1.0.11" - "@material-ui/core": "npm:^4.12.2" - "@material-ui/icons": "npm:^4.9.1" - "@material-ui/lab": "npm:4.0.0-alpha.61" - "@react-hookz/web": "npm:^24.0.0" - classnames: "npm:^2.2.6" - lodash: "npm:^4.17.21" - material-ui-popup-state: "npm:^5.3.6" - qs: "npm:^6.9.4" - react-use: "npm:^17.2.4" - yaml: "npm:^2.0.0" - zen-observable: "npm:^0.10.0" - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - react-router-dom: ^6.3.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/b6670b0d47f0042e09392c91b4c56327ce12f548190ad8351828f8f7c8a6bf891d2ce4d0b196b4ae3a76993ec8fd90b4b0190653791743a008e94f71280f2c72 - languageName: node - linkType: hard - "@backstage/plugin-catalog-react@npm:^2.1.0, @backstage/plugin-catalog-react@npm:^2.1.1": version: 2.1.1 resolution: "@backstage/plugin-catalog-react@npm:2.1.1" @@ -4521,52 +4181,6 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-catalog@npm:^1.24.0": - version: 1.32.2 - resolution: "@backstage/plugin-catalog@npm:1.32.2" - dependencies: - "@backstage/catalog-client": "npm:^1.12.1" - "@backstage/catalog-model": "npm:^1.7.6" - "@backstage/core-compat-api": "npm:^0.5.6" - "@backstage/core-components": "npm:^0.18.5" - "@backstage/core-plugin-api": "npm:^1.12.1" - "@backstage/errors": "npm:^1.2.7" - "@backstage/frontend-plugin-api": "npm:^0.13.3" - "@backstage/integration-react": "npm:^1.2.14" - "@backstage/plugin-catalog-common": "npm:^1.1.7" - "@backstage/plugin-catalog-react": "npm:^1.21.5" - "@backstage/plugin-permission-react": "npm:^0.4.39" - "@backstage/plugin-scaffolder-common": "npm:^1.7.5" - "@backstage/plugin-search-common": "npm:^1.2.21" - "@backstage/plugin-search-react": "npm:^1.10.2" - "@backstage/plugin-techdocs-common": "npm:^0.1.1" - "@backstage/plugin-techdocs-react": "npm:^1.3.7" - "@backstage/types": "npm:^1.2.2" - "@backstage/version-bridge": "npm:^1.0.11" - "@material-ui/core": "npm:^4.12.2" - "@material-ui/icons": "npm:^4.9.1" - "@material-ui/lab": "npm:4.0.0-alpha.61" - "@mui/utils": "npm:^5.14.15" - classnames: "npm:^2.3.1" - dataloader: "npm:^2.0.0" - history: "npm:^5.0.0" - lodash: "npm:^4.17.21" - pluralize: "npm:^8.0.0" - react-helmet: "npm:6.1.0" - react-use: "npm:^17.2.4" - zen-observable: "npm:^0.10.0" - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - react-router-dom: ^6.3.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/6539c80840c3e1a6a1cc6cd87b1c1f1ecd5c6a9e3b7e216f17a956aedb4a691ccc1cdc0911b03c7ad22029754346c13fee6ac23bdf8761760d3b079505dc8cd9 - languageName: node - linkType: hard - "@backstage/plugin-catalog@npm:^2.0.0, @backstage/plugin-catalog@npm:^2.0.1": version: 2.0.1 resolution: "@backstage/plugin-catalog@npm:2.0.1" @@ -4614,7 +4228,7 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-events-node@npm:^0.4.17, @backstage/plugin-events-node@npm:^0.4.20": +"@backstage/plugin-events-node@npm:^0.4.20": version: 0.4.20 resolution: "@backstage/plugin-events-node@npm:0.4.20" dependencies: @@ -4631,58 +4245,6 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-kubernetes-common@npm:^0.8.3": - version: 0.8.3 - resolution: "@backstage/plugin-kubernetes-common@npm:0.8.3" - dependencies: - "@backstage/catalog-model": "npm:^1.7.0" - "@backstage/plugin-permission-common": "npm:^0.8.1" - "@backstage/types": "npm:^1.1.1" - "@kubernetes/client-node": "npm:0.20.0" - kubernetes-models: "npm:^4.3.1" - lodash: "npm:^4.17.21" - luxon: "npm:^3.0.0" - checksum: 10c0/df69e41bf14a8dc6956b2cd374edaf79864c623812b909d1cd8ab77a5693a14dfb2fa89d7291bb8f2abe393d62dff93a88b0fe77e0a842ee9abbca437739e93d - languageName: node - linkType: hard - -"@backstage/plugin-kubernetes-react@npm:^0.4.4": - version: 0.4.4 - resolution: "@backstage/plugin-kubernetes-react@npm:0.4.4" - dependencies: - "@backstage/catalog-model": "npm:^1.7.0" - "@backstage/core-components": "npm:^0.15.1" - "@backstage/core-plugin-api": "npm:^1.10.0" - "@backstage/errors": "npm:^1.2.4" - "@backstage/plugin-kubernetes-common": "npm:^0.8.3" - "@backstage/types": "npm:^1.1.1" - "@kubernetes-models/apimachinery": "npm:^2.0.0" - "@kubernetes-models/base": "npm:^5.0.0" - "@kubernetes/client-node": "npm:^0.20.0" - "@material-ui/core": "npm:^4.9.13" - "@material-ui/icons": "npm:^4.11.3" - "@material-ui/lab": "npm:^4.0.0-alpha.61" - cronstrue: "npm:^2.32.0" - js-yaml: "npm:^4.1.0" - kubernetes-models: "npm:^4.3.1" - lodash: "npm:^4.17.21" - luxon: "npm:^3.0.0" - react-use: "npm:^17.4.0" - xterm: "npm:^5.3.0" - xterm-addon-attach: "npm:^0.9.0" - xterm-addon-fit: "npm:^0.8.0" - peerDependencies: - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/4b418006e2dbdc0fede1135aea80dfc79b4285ad5281f8970d5ef489b55ae99c0faec7bf4570235fc58cf788132186703b8f9f6093c73fb6e0de07440ac7a558 - languageName: node - linkType: hard - "@backstage/plugin-notifications-backend@npm:^0.6.3": version: 0.6.3 resolution: "@backstage/plugin-notifications-backend@npm:0.6.3" @@ -4805,7 +4367,7 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-permission-backend@npm:^0.7.10, @backstage/plugin-permission-backend@npm:^0.7.6": +"@backstage/plugin-permission-backend@npm:^0.7.10": version: 0.7.10 resolution: "@backstage/plugin-permission-backend@npm:0.7.10" dependencies: @@ -4825,37 +4387,22 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-permission-common@npm:^0.8.1": - version: 0.8.4 - resolution: "@backstage/plugin-permission-common@npm:0.8.4" +"@backstage/plugin-permission-common@npm:^0.9.6, @backstage/plugin-permission-common@npm:^0.9.7, @backstage/plugin-permission-common@npm:^0.9.8": + version: 0.9.8 + resolution: "@backstage/plugin-permission-common@npm:0.9.8" dependencies: - "@backstage/config": "npm:^1.3.2" - "@backstage/errors": "npm:^1.2.7" - "@backstage/types": "npm:^1.2.1" - cross-fetch: "npm:^4.0.0" - uuid: "npm:^11.0.0" - zod: "npm:^3.22.4" - zod-to-json-schema: "npm:^3.20.4" - checksum: 10c0/35d52365c1abb23c6ad167149ab78aad0396b97d5c9e591f5a5e397ea029855a6b88f05060e2215e2480244bec797d92871ad92fa613255eeddd54228c01b7f1 - languageName: node - linkType: hard - -"@backstage/plugin-permission-common@npm:^0.9.3, @backstage/plugin-permission-common@npm:^0.9.4, @backstage/plugin-permission-common@npm:^0.9.5, @backstage/plugin-permission-common@npm:^0.9.6, @backstage/plugin-permission-common@npm:^0.9.7": - version: 0.9.7 - resolution: "@backstage/plugin-permission-common@npm:0.9.7" - dependencies: - "@backstage/config": "npm:^1.3.6" - "@backstage/errors": "npm:^1.2.7" + "@backstage/config": "npm:^1.3.7" + "@backstage/errors": "npm:^1.3.0" "@backstage/types": "npm:^1.2.2" cross-fetch: "npm:^4.0.0" uuid: "npm:^11.0.0" zod: "npm:^3.25.76 || ^4.0.0" zod-to-json-schema: "npm:^3.25.1" - checksum: 10c0/577c15e246fc46c7fe1a4868c3765a9c837b86a64d7a3ab75ac76ed443f2ac4e687c37bd11f2e787898ff8909c9206b9285446e956eb9c4313d3818e37fbf64d + checksum: 10c0/21e0f3cfdeb175b1d65e0dda8aeaabeae620baa7974a4b21873ce9aebf4ead687a996b6903bebc9f99cbc97528d956944f6e06f7cf7160431cc3236dd1251b90 languageName: node linkType: hard -"@backstage/plugin-permission-node@npm:^0.10.11, @backstage/plugin-permission-node@npm:^0.10.6": +"@backstage/plugin-permission-node@npm:^0.10.11": version: 0.10.11 resolution: "@backstage/plugin-permission-node@npm:0.10.11" dependencies: @@ -4873,7 +4420,7 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-permission-react@npm:^0.4.27, @backstage/plugin-permission-react@npm:^0.4.39, @backstage/plugin-permission-react@npm:^0.4.41": +"@backstage/plugin-permission-react@npm:^0.4.41": version: 0.4.41 resolution: "@backstage/plugin-permission-react@npm:0.4.41" dependencies: @@ -5002,25 +4549,6 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-scaffolder-common@npm:^1.7.5": - version: 1.7.5 - resolution: "@backstage/plugin-scaffolder-common@npm:1.7.5" - dependencies: - "@backstage/catalog-model": "npm:^1.7.6" - "@backstage/errors": "npm:^1.2.7" - "@backstage/integration": "npm:^1.19.2" - "@backstage/plugin-permission-common": "npm:^0.9.4" - "@backstage/types": "npm:^1.2.2" - "@microsoft/fetch-event-source": "npm:^2.0.1" - "@types/json-schema": "npm:^7.0.9" - cross-fetch: "npm:^4.0.0" - json-schema: "npm:^0.4.0" - uri-template: "npm:^2.0.0" - zen-observable: "npm:^0.10.0" - checksum: 10c0/8d6c589aa93cc954b793aa70f27ebe14d566656704b201718008d9487d2e5657635b691e0bed68bc746054c457849aa905fd418daed94b058597f35a0af71742 - languageName: node - linkType: hard - "@backstage/plugin-scaffolder-common@npm:^2.0.0": version: 2.0.0 resolution: "@backstage/plugin-scaffolder-common@npm:2.0.0" @@ -5308,7 +4836,7 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-search-common@npm:^1.2.21, @backstage/plugin-search-common@npm:^1.2.22": +"@backstage/plugin-search-common@npm:^1.2.22": version: 1.2.22 resolution: "@backstage/plugin-search-common@npm:1.2.22" dependencies: @@ -5318,7 +4846,7 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-search-react@npm:^1.10.2, @backstage/plugin-search-react@npm:^1.11.0": +"@backstage/plugin-search-react@npm:^1.11.0": version: 1.11.0 resolution: "@backstage/plugin-search-react@npm:1.11.0" dependencies: @@ -5548,7 +5076,7 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-techdocs-react@npm:^1.3.7, @backstage/plugin-techdocs-react@npm:^1.3.9": +"@backstage/plugin-techdocs-react@npm:^1.3.9": version: 1.3.9 resolution: "@backstage/plugin-techdocs-react@npm:1.3.9" dependencies: @@ -5738,7 +5266,7 @@ __metadata: languageName: node linkType: hard -"@backstage/test-utils@npm:^1.7.14, @backstage/test-utils@npm:^1.7.16": +"@backstage/test-utils@npm:^1.7.16": version: 1.7.16 resolution: "@backstage/test-utils@npm:1.7.16" dependencies: @@ -5770,27 +5298,7 @@ __metadata: languageName: node linkType: hard -"@backstage/theme@npm:^0.6.0": - version: 0.6.8 - resolution: "@backstage/theme@npm:0.6.8" - dependencies: - "@emotion/react": "npm:^11.10.5" - "@emotion/styled": "npm:^11.10.5" - "@mui/material": "npm:^5.12.2" - peerDependencies: - "@material-ui/core": ^4.12.2 - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - react-router-dom: ^6.3.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/547cfc64fe328e422dc5968b0c0a4f589332e345b02c3993b33cb0987c5259f97040ea6e86675fee1d7964a574fdb6f96e9f915479cb1c160e23d227b12d1eeb - languageName: node - linkType: hard - -"@backstage/theme@npm:^0.7.1, @backstage/theme@npm:^0.7.2": +"@backstage/theme@npm:^0.7.2": version: 0.7.2 resolution: "@backstage/theme@npm:0.7.2" dependencies: @@ -5810,7 +5318,7 @@ __metadata: languageName: node linkType: hard -"@backstage/types@npm:^1.1.1, @backstage/types@npm:^1.2.1, @backstage/types@npm:^1.2.2": +"@backstage/types@npm:^1.2.1, @backstage/types@npm:^1.2.2": version: 1.2.2 resolution: "@backstage/types@npm:1.2.2" checksum: 10c0/3c947cf83c058a56b0cfd90d91483e9a5c1c913f7978a0d5a3c0fd9b502d08e9bdf279afba626826eee84159e698ee4cdaa70040789ac47fc8a25df9f1925612 @@ -5839,7 +5347,7 @@ __metadata: languageName: node linkType: hard -"@backstage/version-bridge@npm:^1.0.10, @backstage/version-bridge@npm:^1.0.11, @backstage/version-bridge@npm:^1.0.12": +"@backstage/version-bridge@npm:^1.0.12": version: 1.0.12 resolution: "@backstage/version-bridge@npm:1.0.12" peerDependencies: @@ -6297,13 +5805,20 @@ __metadata: languageName: node linkType: hard -"@dagrejs/graphlib@npm:2.2.4, @dagrejs/graphlib@npm:^2.1.13": +"@dagrejs/graphlib@npm:2.2.4": version: 2.2.4 resolution: "@dagrejs/graphlib@npm:2.2.4" checksum: 10c0/14597ea9294c46b2571aee78bcaad3a24e3e5e0ebcdf198b6eae5b3805f99af727ac54a477dd9152e8b0a576efea0528fb7d4919c74801e9f669c90e5e6f5bd9 languageName: node linkType: hard +"@dagrejs/graphlib@npm:^4.0.0": + version: 4.0.1 + resolution: "@dagrejs/graphlib@npm:4.0.1" + checksum: 10c0/03ab574f2eb7d87173af0b9d8bbae87c10e225778b8144a800c663afe307ff71d851c13d96d32ec91db85e325d64914cdabbab1ce76fb043e0a5538e60bb51bd + languageName: node + linkType: hard + "@date-io/core@npm:1.x, @date-io/core@npm:^1.3.13": version: 1.3.13 resolution: "@date-io/core@npm:1.3.13" @@ -7810,30 +7325,6 @@ __metadata: languageName: node linkType: hard -"@janus-idp/shared-react@npm:^2.13.1": - version: 2.14.0 - resolution: "@janus-idp/shared-react@npm:2.14.0" - dependencies: - "@backstage/catalog-model": "npm:^1.7.0" - "@backstage/core-components": "npm:^0.15.1" - "@backstage/core-plugin-api": "npm:^1.10.0" - "@backstage/plugin-kubernetes-common": "npm:^0.8.3" - "@backstage/plugin-kubernetes-react": "npm:^0.4.4" - "@kubernetes/client-node": "npm:^0.22.1" - "@material-ui/core": "npm:^4.12.4" - "@mui/icons-material": "npm:5.15.17" - classnames: "npm:^2.3.2" - date-fns: "npm:^2.30.0" - file-saver: "npm:^2.0.5" - lodash: "npm:^4.17.21" - mathjs: "npm:^11.11.2" - react-use: "npm:^17.5.0" - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - checksum: 10c0/c9de89047129e563f6b54cab94ae786719245811be40073ee1c58b9e3663860aa88a41d3122a10d41e79b4729cab978a2cac86e3bc1451a862f3387bd062acdb - languageName: node - linkType: hard - "@jest/create-cache-key-function@npm:^30.0.0": version: 30.2.0 resolution: "@jest/create-cache-key-function@npm:30.2.0" @@ -8110,94 +7601,6 @@ __metadata: languageName: node linkType: hard -"@kubernetes-models/apimachinery@npm:^2.0.0, @kubernetes-models/apimachinery@npm:^2.0.1": - version: 2.0.1 - resolution: "@kubernetes-models/apimachinery@npm:2.0.1" - dependencies: - "@kubernetes-models/base": "npm:^5.0.0" - "@kubernetes-models/validate": "npm:^4.0.0" - "@swc/helpers": "npm:^0.5.8" - checksum: 10c0/89170010f6e8e6b0abd0f03b90e31161de7eabe1803a5be6d624f3a60cac994eaaaa5657c027c6a3376c13cf43bc8f1350018ca5f3c6c3be40310e362053b4c4 - languageName: node - linkType: hard - -"@kubernetes-models/base@npm:^5.0.0": - version: 5.0.0 - resolution: "@kubernetes-models/base@npm:5.0.0" - dependencies: - "@kubernetes-models/validate": "npm:^4.0.0" - is-plain-object: "npm:^5.0.0" - tslib: "npm:^2.4.0" - checksum: 10c0/263e1013b1915c55f15c18087ad7b669894882b9da5e86377399eb39d9fad2ff75ca38745036d69a3cb7544f8272663f40854a4555d061f84fde067f6f27184c - languageName: node - linkType: hard - -"@kubernetes-models/validate@npm:^4.0.0": - version: 4.0.0 - resolution: "@kubernetes-models/validate@npm:4.0.0" - dependencies: - ajv: "npm:^8.12.0" - ajv-formats: "npm:^2.1.1" - ajv-formats-draft2019: "npm:^1.6.1" - ajv-i18n: "npm:^4.2.0" - is-cidr: "npm:^4.0.0" - re2-wasm: "npm:^1.0.2" - tslib: "npm:^2.4.0" - dependenciesMeta: - re2-wasm: - optional: true - checksum: 10c0/ee9749648d234a09f75552a38ad90f8f4adff760c1bb847c4b48732be23d8ddd02c9b803a59f02f24c5f3ed9c28c8ad6210b49f1b7f0c66e8760b07ef516d020 - languageName: node - linkType: hard - -"@kubernetes/client-node@npm:0.20.0, @kubernetes/client-node@npm:^0.20.0": - version: 0.20.0 - resolution: "@kubernetes/client-node@npm:0.20.0" - dependencies: - "@types/js-yaml": "npm:^4.0.1" - "@types/node": "npm:^20.1.1" - "@types/request": "npm:^2.47.1" - "@types/ws": "npm:^8.5.3" - byline: "npm:^5.0.0" - isomorphic-ws: "npm:^5.0.0" - js-yaml: "npm:^4.1.0" - jsonpath-plus: "npm:^7.2.0" - openid-client: "npm:^5.3.0" - request: "npm:^2.88.0" - rfc4648: "npm:^1.3.0" - stream-buffers: "npm:^3.0.2" - tar: "npm:^6.1.11" - tslib: "npm:^2.4.1" - ws: "npm:^8.11.0" - dependenciesMeta: - openid-client: - optional: true - checksum: 10c0/d7c542fd67ae56946cf5ffa6ed7d255557ba53e90eb653b0109ecf0b91388dbe663aaeaa3b7ea33b3d942ab631afea2e470a31b3cfb81301f5836b37681ba608 - languageName: node - linkType: hard - -"@kubernetes/client-node@npm:^0.22.1": - version: 0.22.3 - resolution: "@kubernetes/client-node@npm:0.22.3" - dependencies: - byline: "npm:^5.0.0" - isomorphic-ws: "npm:^5.0.0" - js-yaml: "npm:^4.1.0" - jsonpath-plus: "npm:^10.2.0" - openid-client: "npm:^6.1.3" - request: "npm:^2.88.0" - rfc4648: "npm:^1.3.0" - stream-buffers: "npm:^3.0.2" - tar: "npm:^7.0.0" - tslib: "npm:^2.4.1" - ws: "npm:^8.18.0" - dependenciesMeta: - openid-client: - optional: true - checksum: 10c0/78ce0b81eaa6521a506813e88195692f6b52128427c70b1fe4bc5e277e6cc56ab366617fd1daec4e39da6b8a9c7f4b7b1ad35c598a64b277a150c1b52734f2a4 - languageName: node - linkType: hard - "@leichtgewicht/ip-codec@npm:^2.0.1": version: 2.0.5 resolution: "@leichtgewicht/ip-codec@npm:2.0.5" @@ -8315,7 +7718,7 @@ __metadata: languageName: node linkType: hard -"@material-ui/icons@npm:^4.11.3, @material-ui/icons@npm:^4.9.1": +"@material-ui/icons@npm:^4.9.1": version: 4.11.3 resolution: "@material-ui/icons@npm:4.11.3" dependencies: @@ -8942,38 +8345,6 @@ __metadata: languageName: node linkType: hard -"@mui/icons-material@npm:5.15.17": - version: 5.15.17 - resolution: "@mui/icons-material@npm:5.15.17" - dependencies: - "@babel/runtime": "npm:^7.23.9" - peerDependencies: - "@mui/material": ^5.0.0 - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/9aac249ab4b55f546e8749c7237b2407ae7f470defb2bc1a18a6f1df6a75cf1a6feb3bf073e3b2e7220ed9847fd21b7bd28f14790899299321acaba169bf8bb1 - languageName: node - linkType: hard - -"@mui/icons-material@npm:5.16.4": - version: 5.16.4 - resolution: "@mui/icons-material@npm:5.16.4" - dependencies: - "@babel/runtime": "npm:^7.23.9" - peerDependencies: - "@mui/material": ^5.0.0 - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/e6cd3b64dd02d21182f0a0509d412a084fdea8752e4a202907cd1cf92a5476ec87e6074a409ebcb9a35e29c91d20729e9eddd9530c1d3755a93b0f56cf3be519 - languageName: node - linkType: hard - "@mui/icons-material@npm:5.18.0, @mui/icons-material@npm:^5.17.1": version: 5.18.0 resolution: "@mui/icons-material@npm:5.18.0" @@ -12703,7 +12074,7 @@ __metadata: version: 0.0.0-use.local resolution: "@red-hat-developer-hub/backstage-plugin-orchestrator-backend@workspace:plugins/orchestrator-backend" dependencies: - "@backstage-community/plugin-rbac-common": "npm:^1.12.1" + "@backstage-community/plugin-rbac-common": "npm:^1.26.0" "@backstage/backend-defaults": "npm:^0.16.0" "@backstage/backend-plugin-api": "npm:^1.8.0" "@backstage/backend-test-utils": "npm:^1.11.1" @@ -12739,6 +12110,7 @@ __metadata: openapi-backend: "npm:^5.10.5" prettier: "npm:3.8.3" yn: "npm:^5.0.0" + zod: "npm:^4.3.6" peerDependencies: "@backstage-community/plugin-rbac-common": ^1.12.1 "@janus-idp/backstage-plugin-audit-log-node": ^1.7.1 @@ -12939,7 +12311,7 @@ __metadata: "@backstage/backend-plugin-api": "npm:^1.8.0" "@backstage/catalog-model": "npm:^1.7.7" "@backstage/cli": "npm:^0.36.0" - "@backstage/plugin-permission-common": "npm:^0.9.7" + "@backstage/plugin-permission-common": "npm:^0.9.8" "@backstage/plugin-scaffolder-node": "npm:^0.13.0" "@backstage/plugin-scaffolder-node-test-utils": "npm:^0.3.9" "@backstage/types": "npm:^1.2.2" @@ -15472,7 +14844,7 @@ __metadata: languageName: node linkType: hard -"@swc/helpers@npm:^0.5.0, @swc/helpers@npm:^0.5.8": +"@swc/helpers@npm:^0.5.0": version: 0.5.18 resolution: "@swc/helpers@npm:0.5.18" dependencies: @@ -16092,7 +15464,7 @@ __metadata: languageName: node linkType: hard -"@types/js-yaml@npm:^4.0.0, @types/js-yaml@npm:^4.0.1": +"@types/js-yaml@npm:^4.0.0": version: 4.0.9 resolution: "@types/js-yaml@npm:4.0.9" checksum: 10c0/24de857aa8d61526bbfbbaa383aa538283ad17363fcd5bb5148e2c7f604547db36646440e739d78241ed008702a8920665d1add5618687b6743858fae00da211 @@ -16271,7 +15643,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^20.1.1, @types/node@npm:^20.10.7": +"@types/node@npm:^20.10.7": version: 20.19.37 resolution: "@types/node@npm:20.19.37" dependencies: @@ -16391,7 +15763,7 @@ __metadata: languageName: node linkType: hard -"@types/request@npm:^2.47.1, @types/request@npm:^2.48.8": +"@types/request@npm:^2.48.8": version: 2.48.12 resolution: "@types/request@npm:2.48.12" dependencies: @@ -16595,7 +15967,7 @@ __metadata: languageName: node linkType: hard -"@types/ws@npm:*, @types/ws@npm:^8.5.10, @types/ws@npm:^8.5.3, @types/ws@npm:^8.5.5": +"@types/ws@npm:*, @types/ws@npm:^8.5.10, @types/ws@npm:^8.5.5": version: 8.5.13 resolution: "@types/ws@npm:8.5.13" dependencies: @@ -17255,20 +16627,6 @@ __metadata: languageName: node linkType: hard -"ajv-formats-draft2019@npm:^1.6.1": - version: 1.6.1 - resolution: "ajv-formats-draft2019@npm:1.6.1" - dependencies: - punycode: "npm:^2.1.1" - schemes: "npm:^1.4.0" - smtp-address-parser: "npm:^1.0.3" - uri-js: "npm:^4.4.1" - peerDependencies: - ajv: "*" - checksum: 10c0/b7e72eaf6663ba7f71f6f46bb2da5888ca46b9bbd36d87e4ee3b8993885016f77e65d438b165f6a09f1b146e7ac11ab7fd3ebe7e265fa66f226b084842266081 - languageName: node - linkType: hard - "ajv-formats@npm:^2.0.2, ajv-formats@npm:^2.1.1, ajv-formats@npm:~2.1.0": version: 2.1.1 resolution: "ajv-formats@npm:2.1.1" @@ -17297,15 +16655,6 @@ __metadata: languageName: node linkType: hard -"ajv-i18n@npm:^4.2.0": - version: 4.2.0 - resolution: "ajv-i18n@npm:4.2.0" - peerDependencies: - ajv: ^8.0.0-beta.0 - checksum: 10c0/8c27882f2d46147600538aa8f48a633c72cd65baa37e0fae7159e832122b4ee504f4076f81ea3f78c15d7236a2d499d42a34d1a27b202066edc620f23963f6db - languageName: node - linkType: hard - "ajv-keywords@npm:^3.4.1, ajv-keywords@npm:^3.5.2": version: 3.5.2 resolution: "ajv-keywords@npm:3.5.2" @@ -17326,7 +16675,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.12.2, ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:^6.12.5": +"ajv@npm:^6.12.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5": version: 6.14.0 resolution: "ajv@npm:6.14.0" dependencies: @@ -17560,6 +16909,7 @@ __metadata: version: 0.0.0-use.local resolution: "app@workspace:packages/app" dependencies: + "@backstage-community/plugin-rbac": "npm:1.52.1" "@backstage/cli": "npm:^0.36.0" "@backstage/core-compat-api": "npm:^0.5.9" "@backstage/core-components": "npm:^0.18.8" @@ -17871,7 +17221,7 @@ __metadata: languageName: node linkType: hard -"asn1@npm:^0.2.6, asn1@npm:~0.2.3": +"asn1@npm:^0.2.6": version: 0.2.6 resolution: "asn1@npm:0.2.6" dependencies: @@ -17891,13 +17241,6 @@ __metadata: languageName: node linkType: hard -"assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": - version: 1.0.0 - resolution: "assert-plus@npm:1.0.0" - checksum: 10c0/b194b9d50c3a8f872ee85ab110784911e696a4d49f7ee6fc5fb63216dedbefd2c55999c70cb2eaeb4cf4a0e0338b44e9ace3627117b5bf0d42460e9132f21b91 - languageName: node - linkType: hard - "assert@npm:^1.1.1": version: 1.5.1 resolution: "assert@npm:1.5.1" @@ -18059,13 +17402,6 @@ __metadata: languageName: node linkType: hard -"aws-sign2@npm:~0.7.0": - version: 0.7.0 - resolution: "aws-sign2@npm:0.7.0" - checksum: 10c0/021d2cc5547d4d9ef1633e0332e746a6f447997758b8b68d6fb33f290986872d2bff5f0c37d5832f41a7229361f093cd81c40898d96ed153493c0fb5cd8575d2 - languageName: node - linkType: hard - "aws-ssl-profiles@npm:^1.1.1": version: 1.1.2 resolution: "aws-ssl-profiles@npm:1.1.2" @@ -18073,13 +17409,6 @@ __metadata: languageName: node linkType: hard -"aws4@npm:^1.8.0": - version: 1.13.2 - resolution: "aws4@npm:1.13.2" - checksum: 10c0/c993d0d186d699f685d73113733695d648ec7d4b301aba2e2a559d0cd9c1c902308cc52f4095e1396b23fddbc35113644e7f0a6a32753636306e41e3ed6f1e79 - languageName: node - linkType: hard - "axe-core@npm:^4.10.0": version: 4.10.1 resolution: "axe-core@npm:4.10.1" @@ -18198,7 +17527,7 @@ __metadata: version: 0.0.0-use.local resolution: "backend@workspace:packages/backend" dependencies: - "@backstage-community/plugin-rbac-backend": "npm:^7.4.0" + "@backstage-community/plugin-rbac-backend": "npm:^7.12.3" "@backstage/backend-defaults": "npm:^0.16.0" "@backstage/cli": "npm:^0.36.0" "@backstage/config": "npm:^1.3.6" @@ -18403,7 +17732,7 @@ __metadata: languageName: node linkType: hard -"bcrypt-pbkdf@npm:^1.0.0, bcrypt-pbkdf@npm:^1.0.2": +"bcrypt-pbkdf@npm:^1.0.2": version: 1.0.2 resolution: "bcrypt-pbkdf@npm:1.0.2" dependencies: @@ -19066,13 +18395,6 @@ __metadata: languageName: node linkType: hard -"caseless@npm:~0.12.0": - version: 0.12.0 - resolution: "caseless@npm:0.12.0" - checksum: 10c0/ccf64bcb6c0232cdc5b7bd91ddd06e23a4b541f138336d4725233ac538041fb2f29c2e86c3c4a7a61ef990b665348db23a047060b9414c3a6603e9fa61ad4626 - languageName: node - linkType: hard - "ccount@npm:^2.0.0": version: 2.0.1 resolution: "ccount@npm:2.0.1" @@ -19223,15 +18545,6 @@ __metadata: languageName: node linkType: hard -"cidr-regex@npm:^3.1.1": - version: 3.1.1 - resolution: "cidr-regex@npm:3.1.1" - dependencies: - ip-regex: "npm:^4.1.0" - checksum: 10c0/3049225d23fe5b6e0e439d35f90bd344a1e0d2049f77786cc05a755d675b74f5ba8fc3420fb7de0f00892ab8b5af4540125cf46faff91074ee2488711b3a106d - languageName: node - linkType: hard - "cipher-base@npm:^1.0.0, cipher-base@npm:^1.0.1, cipher-base@npm:^1.0.3": version: 1.0.4 resolution: "cipher-base@npm:1.0.4" @@ -19242,7 +18555,7 @@ __metadata: languageName: node linkType: hard -"classnames@npm:^2.2.6, classnames@npm:^2.3.1, classnames@npm:^2.3.2, classnames@npm:^2.5.1": +"classnames@npm:^2.2.6, classnames@npm:^2.3.1, classnames@npm:^2.5.1": version: 2.5.1 resolution: "classnames@npm:2.5.1" checksum: 10c0/afff4f77e62cea2d79c39962980bf316bacb0d7c49e13a21adaadb9221e1c6b9d3cdb829d8bb1b23c406f4e740507f37e1dcf506f7e3b7113d17c5bab787aa69 @@ -19563,7 +18876,7 @@ __metadata: languageName: node linkType: hard -"combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6": +"combined-stream@npm:^1.0.8": version: 1.0.8 resolution: "combined-stream@npm:1.0.8" dependencies: @@ -19691,13 +19004,6 @@ __metadata: languageName: node linkType: hard -"complex.js@npm:^2.1.1": - version: 2.4.2 - resolution: "complex.js@npm:2.4.2" - checksum: 10c0/c78cca0a3c08fa48845e2703b9772bdd80d44e56728382d43879183cb23391da6e8b6326ceec23c685abfd529b61d34842ba1784d7fa3783b194fbc6d0850d7c - languageName: node - linkType: hard - "compress-commons@npm:^6.0.2": version: 6.0.2 resolution: "compress-commons@npm:6.0.2" @@ -20023,13 +19329,6 @@ __metadata: languageName: node linkType: hard -"core-util-is@npm:1.0.2": - version: 1.0.2 - resolution: "core-util-is@npm:1.0.2" - checksum: 10c0/980a37a93956d0de8a828ce508f9b9e3317039d68922ca79995421944146700e4aaf490a6dbfebcb1c5292a7184600c7710b957d724be1e37b8254c6bc0fe246 - languageName: node - linkType: hard - "core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" @@ -20218,15 +19517,6 @@ __metadata: languageName: node linkType: hard -"cronstrue@npm:^2.32.0": - version: 2.52.0 - resolution: "cronstrue@npm:2.52.0" - bin: - cronstrue: bin/cli.js - checksum: 10c0/96f6fe25cab01c5f945b5980a14856d189fdbdd231e4d87908b8f5c087bd678684c5de91a5a39ce800a988ead3b732b63f07a9df297ab90cdf9f213f817ba2f0 - languageName: node - linkType: hard - "cross-env@npm:^7.0.0": version: 7.0.3 resolution: "cross-env@npm:7.0.3" @@ -20500,13 +19790,20 @@ __metadata: languageName: node linkType: hard -"csv-parse@npm:^5.5.5, csv-parse@npm:^5.5.6": +"csv-parse@npm:^5.5.6": version: 5.6.0 resolution: "csv-parse@npm:5.6.0" checksum: 10c0/52f5e6c45359902e0c8e57fc2eeed41366dc6b6d283b495b538dd50c8e8510413d6f924096ea056319cbbb8ed26e111c3a3485d7985c021bcf5abaa9e92425c7 languageName: node linkType: hard +"csv-parse@npm:^6.0.0": + version: 6.2.1 + resolution: "csv-parse@npm:6.2.1" + checksum: 10c0/8b6f14b244ca62476d4217aac721131ba0ada3e4ed7614e43ebc99203807564dcb054144d1de4ef22ee8b0c63b431640f75d46a0e1e0f72853a954b279ba1c61 + languageName: node + linkType: hard + "ctrlc-windows@npm:^2.1.0": version: 2.1.0 resolution: "ctrlc-windows@npm:2.1.0" @@ -20653,16 +19950,6 @@ __metadata: languageName: node linkType: hard -"dagre@npm:^0.8.5": - version: 0.8.5 - resolution: "dagre@npm:0.8.5" - dependencies: - graphlib: "npm:^2.1.8" - lodash: "npm:^4.17.15" - checksum: 10c0/1c021b66961aa9a700bb6ec51747bcc214720a661ad6cb1878eab7316ecb550a759664a6754081a315b37d0355e3c19ff162813b36f20cbeb2e37f7440364d62 - languageName: node - linkType: hard - "damerau-levenshtein@npm:^1.0.8": version: 1.0.8 resolution: "damerau-levenshtein@npm:1.0.8" @@ -20670,15 +19957,6 @@ __metadata: languageName: node linkType: hard -"dashdash@npm:^1.12.0": - version: 1.14.1 - resolution: "dashdash@npm:1.14.1" - dependencies: - assert-plus: "npm:^1.0.0" - checksum: 10c0/64589a15c5bd01fa41ff7007e0f2c6552c5ef2028075daa16b188a3721f4ba001841bf306dfc2eee6e2e6e7f76b38f5f17fb21fa847504192290ffa9e150118a - languageName: node - linkType: hard - "data-uri-to-buffer@npm:^6.0.2": version: 6.0.2 resolution: "data-uri-to-buffer@npm:6.0.2" @@ -20736,7 +20014,7 @@ __metadata: languageName: node linkType: hard -"date-fns@npm:^2.16.1, date-fns@npm:^2.30.0": +"date-fns@npm:^2.16.1": version: 2.30.0 resolution: "date-fns@npm:2.30.0" dependencies: @@ -21482,16 +20760,6 @@ __metadata: languageName: node linkType: hard -"ecc-jsbn@npm:~0.1.1": - version: 0.1.2 - resolution: "ecc-jsbn@npm:0.1.2" - dependencies: - jsbn: "npm:~0.1.0" - safer-buffer: "npm:^2.1.0" - checksum: 10c0/6cf168bae1e2dad2e46561d9af9cbabfbf5ff592176ad4e9f0f41eaaf5fe5e10bb58147fe0a804de62b1ee9dad42c28810c88d652b21b6013c47ba8efa274ca1 - languageName: node - linkType: hard - "ecdsa-sig-formatter@npm:1.0.11, ecdsa-sig-formatter@npm:^1.0.11": version: 1.0.11 resolution: "ecdsa-sig-formatter@npm:1.0.11" @@ -22141,13 +21409,6 @@ __metadata: languageName: node linkType: hard -"escape-latex@npm:^1.2.0": - version: 1.2.0 - resolution: "escape-latex@npm:1.2.0" - checksum: 10c0/b77ea1594a38625295793a61105222c283c1792d1b2511bbfd6338cf02cc427dcabce7e7c1e22ec2f5c40baf3eaf2eeaf229a62dbbb74c6e69bb4a4209f2544f - languageName: node - linkType: hard - "escape-string-regexp@npm:^1.0.5": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" @@ -22766,15 +22027,6 @@ __metadata: languageName: node linkType: hard -"express-rate-limit@npm:^7.5.0": - version: 7.5.1 - resolution: "express-rate-limit@npm:7.5.1" - peerDependencies: - express: ">= 4.11" - checksum: 10c0/b07de84d700a2c07c4bf2f040e7558ed5a1f660f03ed5f30bf8ff7b51e98ba7a85215640e70fc48cbbb9151066ea51239d9a1b41febc9b84d98c7915b0186161 - languageName: node - linkType: hard - "express-rate-limit@npm:^8.2.2": version: 8.3.2 resolution: "express-rate-limit@npm:8.3.2" @@ -22877,7 +22129,7 @@ __metadata: languageName: node linkType: hard -"extend@npm:3.0.2, extend@npm:^3.0.0, extend@npm:^3.0.2, extend@npm:~3.0.2": +"extend@npm:3.0.2, extend@npm:^3.0.0, extend@npm:^3.0.2": version: 3.0.2 resolution: "extend@npm:3.0.2" checksum: 10c0/73bf6e27406e80aa3e85b0d1c4fd987261e628064e170ca781125c0b635a3dabad5e05adbf07595ea0cf1e6c5396cacb214af933da7cbaf24fe75ff14818e8f9 @@ -22902,20 +22154,6 @@ __metadata: languageName: node linkType: hard -"extsprintf@npm:1.3.0": - version: 1.3.0 - resolution: "extsprintf@npm:1.3.0" - checksum: 10c0/f75114a8388f0cbce68e277b6495dc3930db4dde1611072e4a140c24e204affd77320d004b947a132e9a3b97b8253017b2b62dce661975fb0adced707abf1ab5 - languageName: node - linkType: hard - -"extsprintf@npm:^1.2.0": - version: 1.4.1 - resolution: "extsprintf@npm:1.4.1" - checksum: 10c0/e10e2769985d0e9b6c7199b053a9957589d02e84de42832c295798cb422a025e6d4a92e0259c1fb4d07090f5bfde6b55fd9f880ac5855bd61d775f8ab75a7ab0 - languageName: node - linkType: hard - "fast-copy@npm:^3.0.2": version: 3.0.2 resolution: "fast-copy@npm:3.0.2" @@ -23113,13 +22351,6 @@ __metadata: languageName: node linkType: hard -"file-saver@npm:^2.0.5": - version: 2.0.5 - resolution: "file-saver@npm:2.0.5" - checksum: 10c0/0a361f683786c34b2574aea53744cb70d0a6feb0fa5e3af00f2fcb6c9d40d3049cc1470e38c6c75df24219f247f6fb3076f86943958f580e62ee2ffe897af8b1 - languageName: node - linkType: hard - "file-type@npm:21.3.0": version: 21.3.0 resolution: "file-type@npm:21.3.0" @@ -23341,13 +22572,6 @@ __metadata: languageName: node linkType: hard -"forever-agent@npm:~0.6.1": - version: 0.6.1 - resolution: "forever-agent@npm:0.6.1" - checksum: 10c0/364f7f5f7d93ab661455351ce116a67877b66f59aca199559a999bd39e3cfadbfbfacc10415a915255e2210b30c23febe9aec3ca16bf2d1ff11c935a1000e24c - languageName: node - linkType: hard - "fork-ts-checker-webpack-plugin@npm:^6.5.0": version: 6.5.3 resolution: "fork-ts-checker-webpack-plugin@npm:6.5.3" @@ -23463,17 +22687,6 @@ __metadata: languageName: node linkType: hard -"form-data@npm:~2.3.2": - version: 2.3.3 - resolution: "form-data@npm:2.3.3" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.6" - mime-types: "npm:^2.1.12" - checksum: 10c0/706ef1e5649286b6a61e5bb87993a9842807fd8f149cd2548ee807ea4fb882247bdf7f6e64ac4720029c0cd5c80343de0e22eee1dc9e9882e12db9cc7bc016a4 - languageName: node - linkType: hard - "format@npm:^0.2.0": version: 0.2.2 resolution: "format@npm:0.2.2" @@ -23528,13 +22741,6 @@ __metadata: languageName: node linkType: hard -"fraction.js@npm:4.3.4": - version: 4.3.4 - resolution: "fraction.js@npm:4.3.4" - checksum: 10c0/095f60a914637b996ee1a4758edd529bee7379aecd528d3cf641402ec1225c3146ec2b4a8575d58aa48600c5ee79dcc9e7dd799076acff4cfdeed8e73541cdf1 - languageName: node - linkType: hard - "framer-motion@npm:^12.38.0": version: 12.38.0 resolution: "framer-motion@npm:12.38.0" @@ -23965,15 +23171,6 @@ __metadata: languageName: node linkType: hard -"getpass@npm:^0.1.1": - version: 0.1.7 - resolution: "getpass@npm:0.1.7" - dependencies: - assert-plus: "npm:^1.0.0" - checksum: 10c0/c13f8530ecf16fc509f3fa5cd8dd2129ffa5d0c7ccdf5728b6022d52954c2d24be3706b4cdf15333eec52f1fbb43feb70a01dabc639d1d10071e371da8aaa52f - languageName: node - linkType: hard - "git-up@npm:^7.0.0": version: 7.0.0 resolution: "git-up@npm:7.0.0" @@ -24273,15 +23470,6 @@ __metadata: languageName: node linkType: hard -"graphlib@npm:^2.1.8": - version: 2.1.8 - resolution: "graphlib@npm:2.1.8" - dependencies: - lodash: "npm:^4.17.15" - checksum: 10c0/41c525e4d91a6d8b4e8da1883bf4e85689a547e908557ccc53f64db9141bdfb351b9162a79f13cae81c5b3a410027f59e4fc1edc1ea442234ec08e629859b188 - languageName: node - linkType: hard - "graphql-http@npm:^1.22.0": version: 1.22.3 resolution: "graphql-http@npm:1.22.3" @@ -24395,23 +23583,6 @@ __metadata: languageName: node linkType: hard -"har-schema@npm:^2.0.0": - version: 2.0.0 - resolution: "har-schema@npm:2.0.0" - checksum: 10c0/3856cb76152658e0002b9c2b45b4360bb26b3e832c823caed8fcf39a01096030bf09fa5685c0f7b0f2cb3ecba6e9dce17edaf28b64a423d6201092e6be56e592 - languageName: node - linkType: hard - -"har-validator@npm:~5.1.3": - version: 5.1.5 - resolution: "har-validator@npm:5.1.5" - dependencies: - ajv: "npm:^6.12.3" - har-schema: "npm:^2.0.0" - checksum: 10c0/f1d606eb1021839e3a905be5ef7cca81c2256a6be0748efb8fefc14312214f9e6c15d7f2eaf37514104071207d84f627b68bb9f6178703da4e06fbd1a0649a5e - languageName: node - linkType: hard - "harmony-reflect@npm:^1.4.6": version: 1.6.2 resolution: "harmony-reflect@npm:1.6.2" @@ -24947,17 +24118,6 @@ __metadata: languageName: node linkType: hard -"http-signature@npm:~1.2.0": - version: 1.2.0 - resolution: "http-signature@npm:1.2.0" - dependencies: - assert-plus: "npm:^1.0.0" - jsprim: "npm:^1.2.2" - sshpk: "npm:^1.7.0" - checksum: 10c0/582f7af7f354429e1fb19b3bbb9d35520843c69bb30a25b88ca3c5c2c10715f20ae7924e20cffbed220b1d3a726ef4fe8ccc48568d5744db87be9a79887d6733 - languageName: node - linkType: hard - "http2-wrapper@npm:^2.2.1": version: 2.2.1 resolution: "http2-wrapper@npm:2.2.1" @@ -25372,13 +24532,6 @@ __metadata: languageName: node linkType: hard -"ip-regex@npm:^4.1.0": - version: 4.3.0 - resolution: "ip-regex@npm:4.3.0" - checksum: 10c0/f9ef1f5d0df05b9133a882974e572ae525ccd205260cb103dae337f1fc7451ed783391acc6ad688e56dd2598f769e8e72ecbb650ec34763396af822a91768562 - languageName: node - linkType: hard - "ipaddr.js@npm:1.9.1": version: 1.9.1 resolution: "ipaddr.js@npm:1.9.1" @@ -25496,15 +24649,6 @@ __metadata: languageName: node linkType: hard -"is-cidr@npm:^4.0.0": - version: 4.0.2 - resolution: "is-cidr@npm:4.0.2" - dependencies: - cidr-regex: "npm:^3.1.1" - checksum: 10c0/64d8e03304a8c479b338fbe4341e8a37a9dd6fa1e0e95c93e7121b64f50ef154346965779c5e3bc1460915eb04a57564909d9199adb627dc7ec1ac2cfd282f10 - languageName: node - linkType: hard - "is-core-module@npm:^2.13.0, is-core-module@npm:^2.15.1, is-core-module@npm:^2.16.1": version: 2.16.1 resolution: "is-core-module@npm:2.16.1" @@ -25875,13 +25019,6 @@ __metadata: languageName: node linkType: hard -"is-typedarray@npm:~1.0.0": - version: 1.0.0 - resolution: "is-typedarray@npm:1.0.0" - checksum: 10c0/4c096275ba041a17a13cca33ac21c16bc4fd2d7d7eb94525e7cd2c2f2c1a3ab956e37622290642501ff4310601e413b675cf399ad6db49855527d2163b3eeeec - languageName: node - linkType: hard - "is-unicode-supported@npm:^0.1.0": version: 0.1.0 resolution: "is-unicode-supported@npm:0.1.0" @@ -26047,7 +25184,7 @@ __metadata: languageName: node linkType: hard -"isomorphic-ws@npm:5.0.0, isomorphic-ws@npm:^5.0.0": +"isomorphic-ws@npm:5.0.0": version: 5.0.0 resolution: "isomorphic-ws@npm:5.0.0" peerDependencies: @@ -26065,13 +25202,6 @@ __metadata: languageName: node linkType: hard -"isstream@npm:~0.1.2": - version: 0.1.2 - resolution: "isstream@npm:0.1.2" - checksum: 10c0/a6686a878735ca0a48e0d674dd6d8ad31aedfaf70f07920da16ceadc7577b46d67179a60b313f2e6860cb097a2c2eb3cbd0b89e921ae89199a59a17c3273d66f - languageName: node - linkType: hard - "iterall@npm:^1.2.1, iterall@npm:^1.3.0": version: 1.3.0 resolution: "iterall@npm:1.3.0" @@ -26122,13 +25252,6 @@ __metadata: languageName: node linkType: hard -"javascript-natural-sort@npm:^0.7.1": - version: 0.7.1 - resolution: "javascript-natural-sort@npm:0.7.1" - checksum: 10c0/340f8ffc5d30fb516e06dc540e8fa9e0b93c865cf49d791fed3eac3bdc5fc71f0066fc81d44ec1433edc87caecaf9f13eec4a1fce8c5beafc709a71eaedae6fe - languageName: node - linkType: hard - "jest-css-modules@npm:^2.1.0": version: 2.1.0 resolution: "jest-css-modules@npm:2.1.0" @@ -26216,14 +25339,7 @@ __metadata: languageName: node linkType: hard -"jose@npm:^4.15.9": - version: 4.15.9 - resolution: "jose@npm:4.15.9" - checksum: 10c0/4ed4ddf4a029db04bd167f2215f65d7245e4dc5f36d7ac3c0126aab38d66309a9e692f52df88975d99429e357e5fd8bab340ff20baab544d17684dd1d940a0f4 - languageName: node - linkType: hard - -"jose@npm:^5.0.0, jose@npm:^5.9.6": +"jose@npm:^5.0.0": version: 5.9.6 resolution: "jose@npm:5.9.6" checksum: 10c0/d6bcd8c7d655b5cda8e182952a76f0c093347f5476d74795405bb91563f7ab676f61540310dd4b1531c60d685335ceb600571a409551d2cbd2ab3e9f9fbf1e4d @@ -26342,13 +25458,6 @@ __metadata: languageName: node linkType: hard -"jsbn@npm:~0.1.0": - version: 0.1.1 - resolution: "jsbn@npm:0.1.1" - checksum: 10c0/e046e05c59ff880ee4ef68902dbdcb6d2f3c5d60c357d4d68647dc23add556c31c0e5f41bdb7e69e793dd63468bd9e085da3636341048ef577b18f5b713877c0 - languageName: node - linkType: hard - "jsdom@npm:^26.0.0": version: 26.0.0 resolution: "jsdom@npm:26.0.0" @@ -26497,7 +25606,7 @@ __metadata: languageName: node linkType: hard -"json-schema@npm:0.4.0, json-schema@npm:^0.4.0": +"json-schema@npm:^0.4.0": version: 0.4.0 resolution: "json-schema@npm:0.4.0" checksum: 10c0/d4a637ec1d83544857c1c163232f3da46912e971d5bf054ba44fdb88f07d8d359a462b4aec46f2745efbc57053365608d88bc1d7b1729f7b4fc3369765639ed3 @@ -26523,7 +25632,7 @@ __metadata: languageName: node linkType: hard -"json-stringify-safe@npm:^5.0.1, json-stringify-safe@npm:~5.0.1": +"json-stringify-safe@npm:^5.0.1": version: 5.0.1 resolution: "json-stringify-safe@npm:5.0.1" checksum: 10c0/7dbf35cd0411d1d648dceb6d59ce5857ec939e52e4afc37601aa3da611f0987d5cee5b38d58329ceddf3ed48bd7215229c8d52059ab01f2444a338bf24ed0f37 @@ -26617,7 +25726,7 @@ __metadata: languageName: node linkType: hard -"jsonpath-plus@npm:^10.0.0, jsonpath-plus@npm:^10.2.0, jsonpath-plus@npm:^6.0.1 || ^10.1.0": +"jsonpath-plus@npm:^10.0.0, jsonpath-plus@npm:^6.0.1 || ^10.1.0": version: 10.3.0 resolution: "jsonpath-plus@npm:10.3.0" dependencies: @@ -26631,13 +25740,6 @@ __metadata: languageName: node linkType: hard -"jsonpath-plus@npm:^7.2.0": - version: 7.2.0 - resolution: "jsonpath-plus@npm:7.2.0" - checksum: 10c0/b4fbb8387b80721a47e8098f390dbaa5c74ff4e778832d9f662bcf4ab6038ded26944b8dd433f0474b51fb3e0d7e960990c03af89f4f922a6dc0905102ed86b2 - languageName: node - linkType: hard - "jsonpath@npm:^1.1.1": version: 1.1.1 resolution: "jsonpath@npm:1.1.1" @@ -26681,18 +25783,6 @@ __metadata: languageName: node linkType: hard -"jsprim@npm:^1.2.2": - version: 1.4.2 - resolution: "jsprim@npm:1.4.2" - dependencies: - assert-plus: "npm:1.0.0" - extsprintf: "npm:1.3.0" - json-schema: "npm:0.4.0" - verror: "npm:1.10.0" - checksum: 10c0/5e4bca99e90727c2040eb4c2190d0ef1fe51798ed5714e87b841d304526190d960f9772acc7108fa1416b61e1122bcd60e4460c91793dce0835df5852aab55af - languageName: node - linkType: hard - "jss-plugin-camel-case@npm:^10.10.0, jss-plugin-camel-case@npm:^10.5.1": version: 10.10.0 resolution: "jss-plugin-camel-case@npm:10.10.0" @@ -27030,18 +26120,6 @@ __metadata: languageName: node linkType: hard -"kubernetes-models@npm:^4.3.1": - version: 4.4.1 - resolution: "kubernetes-models@npm:4.4.1" - dependencies: - "@kubernetes-models/apimachinery": "npm:^2.0.1" - "@kubernetes-models/base": "npm:^5.0.0" - "@kubernetes-models/validate": "npm:^4.0.0" - "@swc/helpers": "npm:^0.5.8" - checksum: 10c0/32fae5a37382da3e2630f7e4aad6af505feee0cfeabc6b5a0fd77a8a6242257f65e6f33c0047cf34eefcdc1f8065c18cbb37d36ef31c80a8a76252b68eeb17be - languageName: node - linkType: hard - "kuler@npm:^2.0.0": version: 2.0.0 resolution: "kuler@npm:2.0.0" @@ -27166,16 +26244,6 @@ __metadata: languageName: node linkType: hard -"linkify-react@npm:4.1.3": - version: 4.1.3 - resolution: "linkify-react@npm:4.1.3" - peerDependencies: - linkifyjs: ^4.0.0 - react: ">= 15.0.0" - checksum: 10c0/c8c0e96301c3fbe5df19110dd778f4f0004f7c2f127fecb192ba9d4cf3e581d59f7d99ab0311c72a99cf039f5b34421e6ce71f2fcdd90f51655d7736fed4b370 - languageName: node - linkType: hard - "linkify-react@npm:4.3.2": version: 4.3.2 resolution: "linkify-react@npm:4.3.2" @@ -27186,13 +26254,6 @@ __metadata: languageName: node linkType: hard -"linkifyjs@npm:4.1.3": - version: 4.1.3 - resolution: "linkifyjs@npm:4.1.3" - checksum: 10c0/9fb71da06ee710b5587c8b61ff9a0e45303d448f61fab135e44652cff95c09c1abe276158a72384cff6f35a2371d1cec33dfaa7e5280b71dbb142b43d210c75a - languageName: node - linkType: hard - "linkifyjs@npm:4.3.2": version: 4.3.2 resolution: "linkifyjs@npm:4.3.2" @@ -27849,25 +26910,6 @@ __metadata: languageName: node linkType: hard -"mathjs@npm:^11.11.2": - version: 11.12.0 - resolution: "mathjs@npm:11.12.0" - dependencies: - "@babel/runtime": "npm:^7.23.2" - complex.js: "npm:^2.1.1" - decimal.js: "npm:^10.4.3" - escape-latex: "npm:^1.2.0" - fraction.js: "npm:4.3.4" - javascript-natural-sort: "npm:^0.7.1" - seedrandom: "npm:^3.0.5" - tiny-emitter: "npm:^2.1.0" - typed-function: "npm:^4.1.1" - bin: - mathjs: bin/cli.js - checksum: 10c0/4ddd38e2e7441e524b9e50c572582d0c1a4502a42a27c8ba1b4931c710f3f446560c95e6539f29c07d835db3fe663add7907c883871e7a28c572f5eb958280eb - languageName: node - linkType: hard - "md5.js@npm:^1.3.4": version: 1.3.5 resolution: "md5.js@npm:1.3.5" @@ -28520,7 +27562,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:^2.1.35, mime-types@npm:~2.1.17, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:^2.1.35, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -28675,7 +27717,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^9.0.0, minimatch@npm:^9.0.4, minimatch@npm:^9.0.5": +"minimatch@npm:^9.0.4, minimatch@npm:^9.0.5": version: 9.0.5 resolution: "minimatch@npm:9.0.5" dependencies: @@ -29353,7 +28395,7 @@ __metadata: languageName: node linkType: hard -"node-forge@npm:^1, node-forge@npm:^1.2.1, node-forge@npm:^1.3.1, node-forge@npm:^1.3.2": +"node-forge@npm:^1, node-forge@npm:^1.2.1, node-forge@npm:^1.3.2": version: 1.4.0 resolution: "node-forge@npm:1.4.0" checksum: 10c0/67330a5f1f95257a4c8a93b7d555abe87b5f15e350123aa396c97a21a8ca94f9c6549008eb2c73668a91e0d7e3a905785acbd8f8bd0751c29401292011f8f8e1 @@ -29681,20 +28723,6 @@ __metadata: languageName: node linkType: hard -"oauth-sign@npm:~0.9.0": - version: 0.9.0 - resolution: "oauth-sign@npm:0.9.0" - checksum: 10c0/fc92a516f6ddbb2699089a2748b04f55c47b6ead55a77cd3a2cbbce5f7af86164cb9425f9ae19acfd066f1ad7d3a96a67b8928c6ea946426f6d6c29e448497c2 - languageName: node - linkType: hard - -"oauth4webapi@npm:^3.1.4": - version: 3.1.4 - resolution: "oauth4webapi@npm:3.1.4" - checksum: 10c0/81e471750f4903121efcef4edb1b73d725ae6d3b9646a0febd45e29ed05b62faba14a69e433181eae441913684a02d681c4e561dcac578de9cb45dd719f53464 - languageName: node - linkType: hard - "oauth@npm:0.10.x": version: 0.10.0 resolution: "oauth@npm:0.10.0" @@ -29709,13 +28737,6 @@ __metadata: languageName: node linkType: hard -"object-hash@npm:^2.2.0": - version: 2.2.0 - resolution: "object-hash@npm:2.2.0" - checksum: 10c0/1527de843926c5442ed61f8bdddfc7dc181b6497f725b0e89fcf50a55d9c803088763ed447cac85a5aa65345f1e99c2469ba679a54349ef3c4c0aeaa396a3eb9 - languageName: node - linkType: hard - "object-hash@npm:^3.0.0": version: 3.0.0 resolution: "object-hash@npm:3.0.0" @@ -29841,13 +28862,6 @@ __metadata: languageName: node linkType: hard -"oidc-token-hash@npm:^5.0.3": - version: 5.0.3 - resolution: "oidc-token-hash@npm:5.0.3" - checksum: 10c0/d0dc0551406f09577874155cc83cf69c39e4b826293d50bb6c37936698aeca17d4bcee356ab910c859e53e83f2728a2acbd041020165191353b29de51fbca615 - languageName: node - linkType: hard - "on-finished@npm:^2.4.1, on-finished@npm:~2.4.1": version: 2.4.1 resolution: "on-finished@npm:2.4.1" @@ -30024,28 +29038,6 @@ __metadata: languageName: node linkType: hard -"openid-client@npm:^5.3.0": - version: 5.7.0 - resolution: "openid-client@npm:5.7.0" - dependencies: - jose: "npm:^4.15.9" - lru-cache: "npm:^6.0.0" - object-hash: "npm:^2.2.0" - oidc-token-hash: "npm:^5.0.3" - checksum: 10c0/02e42c66415581262c0372e178dba2bc958f1b5cfd2eb502b4f71b7718fc11dfac37b12117b1c73cff5dc80f5871cd830e175aae95ae212fbd353f3efa1de091 - languageName: node - linkType: hard - -"openid-client@npm:^6.1.3": - version: 6.1.7 - resolution: "openid-client@npm:6.1.7" - dependencies: - jose: "npm:^5.9.6" - oauth4webapi: "npm:^3.1.4" - checksum: 10c0/195d26897bf6eb95cfd5b9e91e8bcac46c56b0570713cef6f74b78f9d3a23df0869b2f26e7d78ae6d511e8f3b50f33298aa1bdc7bc32a46d41ca7d4ea10df460 - languageName: node - linkType: hard - "oppa@npm:^0.4.0": version: 0.4.0 resolution: "oppa@npm:0.4.0" @@ -31770,13 +30762,6 @@ __metadata: languageName: node linkType: hard -"psl@npm:^1.1.28": - version: 1.9.0 - resolution: "psl@npm:1.9.0" - checksum: 10c0/6a3f805fdab9442f44de4ba23880c4eba26b20c8e8e0830eff1cb31007f6825dace61d17203c58bfe36946842140c97a1ba7f67bc63ca2d88a7ee052b65d97ab - languageName: node - linkType: hard - "public-encrypt@npm:^4.0.3": version: 4.0.3 resolution: "public-encrypt@npm:4.0.3" @@ -31815,7 +30800,7 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^2.1.0, punycode@npm:^2.1.1, punycode@npm:^2.3.1": +"punycode@npm:^2.1.0, punycode@npm:^2.3.1": version: 2.3.1 resolution: "punycode@npm:2.3.1" checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 @@ -31847,13 +30832,6 @@ __metadata: languageName: node linkType: hard -"qs@npm:~6.5.2": - version: 6.5.3 - resolution: "qs@npm:6.5.3" - checksum: 10c0/6631d4f2fa9d315e480662646745a4aa3a708817fbffe2cbdacec8ab9be130f92740c66191770fe9b704bc5fa9c1cc1f6596f55ad132fef7bd3ad1582f199eb0 - languageName: node - linkType: hard - "querystring-es3@npm:^0.2.0, querystring-es3@npm:^0.2.1": version: 0.2.1 resolution: "querystring-es3@npm:0.2.1" @@ -32079,13 +31057,6 @@ __metadata: languageName: node linkType: hard -"re2-wasm@npm:^1.0.2": - version: 1.0.2 - resolution: "re2-wasm@npm:1.0.2" - checksum: 10c0/49f2026e4ad12da3d34cc27004f7005b6986123be6f60e8f5621717e8d6bdd1e74b5ac1ea79e47a6740023d11dc8ac91f5e6e1f5f18382642ce58074d304ad16 - languageName: node - linkType: hard - "react-aria-components@npm:^1.14.0": version: 1.16.0 resolution: "react-aria-components@npm:1.16.0" @@ -32716,7 +31687,7 @@ __metadata: languageName: node linkType: hard -"react-use@npm:^17.2.4, react-use@npm:^17.3.2, react-use@npm:^17.4.0, react-use@npm:^17.5.0": +"react-use@npm:^17.2.4, react-use@npm:^17.3.2, react-use@npm:^17.4.0": version: 17.6.0 resolution: "react-use@npm:17.6.0" dependencies: @@ -33202,34 +32173,6 @@ __metadata: languageName: node linkType: hard -"request@npm:^2.88.0": - version: 2.88.2 - resolution: "request@npm:2.88.2" - dependencies: - aws-sign2: "npm:~0.7.0" - aws4: "npm:^1.8.0" - caseless: "npm:~0.12.0" - combined-stream: "npm:~1.0.6" - extend: "npm:~3.0.2" - forever-agent: "npm:~0.6.1" - form-data: "npm:~2.3.2" - har-validator: "npm:~5.1.3" - http-signature: "npm:~1.2.0" - is-typedarray: "npm:~1.0.0" - isstream: "npm:~0.1.2" - json-stringify-safe: "npm:~5.0.1" - mime-types: "npm:~2.1.19" - oauth-sign: "npm:~0.9.0" - performance-now: "npm:^2.1.0" - qs: "npm:~6.5.2" - safe-buffer: "npm:^5.1.2" - tough-cookie: "npm:~2.5.0" - tunnel-agent: "npm:^0.6.0" - uuid: "npm:^3.3.2" - checksum: 10c0/0ec66e7af1391e51ad231de3b1c6c6aef3ebd0a238aa50d4191c7a792dcdb14920eea8d570c702dc5682f276fe569d176f9b8ebc6031a3cf4a630a691a431a63 - languageName: node - linkType: hard - "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -33437,13 +32380,6 @@ __metadata: languageName: node linkType: hard -"rfc4648@npm:^1.3.0": - version: 1.5.3 - resolution: "rfc4648@npm:1.5.3" - checksum: 10c0/0ddc47a752b7c0bda45f26e099ac39752562af0962895b86f2861f38e083630bd7215dd09637380e0446e6f60acf4fdbc93330d728772d431e6f4c638795cb4c - languageName: node - linkType: hard - "rfdc@npm:^1.3.0": version: 1.4.1 resolution: "rfdc@npm:1.4.1" @@ -33798,7 +32734,7 @@ __metadata: languageName: node linkType: hard -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:~2.1.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 @@ -33857,15 +32793,6 @@ __metadata: languageName: node linkType: hard -"schemes@npm:^1.4.0": - version: 1.4.0 - resolution: "schemes@npm:1.4.0" - dependencies: - extend: "npm:^3.0.0" - checksum: 10c0/4ef20fe8dd2818d9a9d4dbc0b8491770435565978e44d511175e3b900194cbc9280db3648f6e90baed791c3ee65cff5c03b61a7b6f0ce61c65424f850cba5ac9 - languageName: node - linkType: hard - "screenfull@npm:^5.1.0": version: 5.2.0 resolution: "screenfull@npm:5.2.0" @@ -33873,13 +32800,6 @@ __metadata: languageName: node linkType: hard -"seedrandom@npm:^3.0.5": - version: 3.0.5 - resolution: "seedrandom@npm:3.0.5" - checksum: 10c0/929752ac098ff4990b3f8e0ac39136534916e72879d6eb625230141d20db26e2f44c4d03d153d457682e8cbaab0fb7d58a1e7267a157cf23fd8cf34e25044e88 - languageName: node - linkType: hard - "select-case@npm:^1.0.0": version: 1.0.0 resolution: "select-case@npm:1.0.0" @@ -34356,15 +33276,6 @@ __metadata: languageName: node linkType: hard -"smtp-address-parser@npm:^1.0.3": - version: 1.1.0 - resolution: "smtp-address-parser@npm:1.1.0" - dependencies: - nearley: "npm:^2.20.1" - checksum: 10c0/054deb78288a3fe9e1da6a4e8f9d53fb4fe9a2cc2d333d582053ff6c5928a2fb0dc2c3d0af425908fd4340c691524f419a36d3d7161c2b80979bd0b98594bdcf - languageName: node - linkType: hard - "sockjs@npm:^0.3.24": version: 0.3.24 resolution: "sockjs@npm:0.3.24" @@ -34606,27 +33517,6 @@ __metadata: languageName: node linkType: hard -"sshpk@npm:^1.7.0": - version: 1.18.0 - resolution: "sshpk@npm:1.18.0" - dependencies: - asn1: "npm:~0.2.3" - assert-plus: "npm:^1.0.0" - bcrypt-pbkdf: "npm:^1.0.0" - dashdash: "npm:^1.12.0" - ecc-jsbn: "npm:~0.1.1" - getpass: "npm:^0.1.1" - jsbn: "npm:~0.1.0" - safer-buffer: "npm:^2.0.2" - tweetnacl: "npm:~0.14.0" - bin: - sshpk-conv: bin/sshpk-conv - sshpk-sign: bin/sshpk-sign - sshpk-verify: bin/sshpk-verify - checksum: 10c0/e516e34fa981cfceef45fd2e947772cc70dbd57523e5c608e2cd73752ba7f8a99a04df7c3ed751588e8d91956b6f16531590b35d3489980d1c54c38bebcd41b1 - languageName: node - linkType: hard - "ssri@npm:^10.0.0": version: 10.0.6 resolution: "ssri@npm:10.0.6" @@ -34762,13 +33652,6 @@ __metadata: languageName: node linkType: hard -"stream-buffers@npm:^3.0.2": - version: 3.0.3 - resolution: "stream-buffers@npm:3.0.3" - checksum: 10c0/d052e6344fba340b27dfbe8d6568f600b7f81fdc57b2659e82c8d58a3ef855a4852c56736b1078a511a7f4458db96ee89b11c42c96d116b9073a99deb29a6f05 - languageName: node - linkType: hard - "stream-events@npm:^1.0.5": version: 1.0.5 resolution: "stream-events@npm:1.0.5" @@ -35420,7 +34303,7 @@ __metadata: languageName: node linkType: hard -"tar@npm:^6.1.11, tar@npm:^6.1.12, tar@npm:^6.1.2, tar@npm:^6.2.1": +"tar@npm:^6.1.11, tar@npm:^6.1.2, tar@npm:^6.2.1": version: 6.2.1 resolution: "tar@npm:6.2.1" dependencies: @@ -35434,7 +34317,7 @@ __metadata: languageName: node linkType: hard -"tar@npm:^7.0.0, tar@npm:^7.5.6": +"tar@npm:^7.5.6": version: 7.5.13 resolution: "tar@npm:7.5.13" dependencies: @@ -35656,13 +34539,6 @@ __metadata: languageName: node linkType: hard -"tiny-emitter@npm:^2.1.0": - version: 2.1.0 - resolution: "tiny-emitter@npm:2.1.0" - checksum: 10c0/459c0bd6e636e80909898220eb390e1cba2b15c430b7b06cec6ac29d87acd29ef618b9b32532283af749f5d37af3534d0e3bde29fdf6bcefbf122784333c953d - languageName: node - linkType: hard - "tiny-invariant@npm:^1.0.6": version: 1.3.3 resolution: "tiny-invariant@npm:1.3.3" @@ -35806,16 +34682,6 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:~2.5.0": - version: 2.5.0 - resolution: "tough-cookie@npm:2.5.0" - dependencies: - psl: "npm:^1.1.28" - punycode: "npm:^2.1.1" - checksum: 10c0/e1cadfb24d40d64ca16de05fa8192bc097b66aeeb2704199b055ff12f450e4f30c927ce250f53d01f39baad18e1c11d66f65e545c5c6269de4c366fafa4c0543 - languageName: node - linkType: hard - "tr46@npm:^5.0.0": version: 5.0.0 resolution: "tr46@npm:5.0.0" @@ -36075,7 +34941,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:2.8.1, tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.4.1, tslib@npm:^2.5.0, tslib@npm:^2.6.0, tslib@npm:^2.6.2, tslib@npm:^2.8.0, tslib@npm:^2.8.1": +"tslib@npm:2.8.1, tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:^2.6.0, tslib@npm:^2.6.2, tslib@npm:^2.8.0, tslib@npm:^2.8.1": version: 2.8.1 resolution: "tslib@npm:2.8.1" checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 @@ -36150,7 +35016,7 @@ __metadata: languageName: node linkType: hard -"tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": +"tweetnacl@npm:^0.14.3": version: 0.14.5 resolution: "tweetnacl@npm:0.14.5" checksum: 10c0/4612772653512c7bc19e61923fbf42903f5e0389ec76a4a1f17195859d114671ea4aa3b734c2029ce7e1fa7e5cc8b80580f67b071ecf0b46b5636d030a0102a2 @@ -36298,13 +35164,6 @@ __metadata: languageName: node linkType: hard -"typed-function@npm:^4.1.1": - version: 4.2.1 - resolution: "typed-function@npm:4.2.1" - checksum: 10c0/0b4e9a359e456f7df50f3d7cc53e2408d23a516f27b50c2c0654f388110ecf407c0595b1bf2296d3d8667fae6aae311ec2af90c602385777d12fe724bae99156 - languageName: node - linkType: hard - "typedarray@npm:^0.0.6": version: 0.0.6 resolution: "typedarray@npm:0.0.6" @@ -37107,7 +35966,7 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^3.3.2, uuid@npm:^3.4.0": +"uuid@npm:^3.4.0": version: 3.4.0 resolution: "uuid@npm:3.4.0" bin: @@ -37216,17 +36075,6 @@ __metadata: languageName: node linkType: hard -"verror@npm:1.10.0": - version: 1.10.0 - resolution: "verror@npm:1.10.0" - dependencies: - assert-plus: "npm:^1.0.0" - core-util-is: "npm:1.0.2" - extsprintf: "npm:^1.2.0" - checksum: 10c0/37ccdf8542b5863c525128908ac80f2b476eed36a32cb944de930ca1e2e78584cc435c4b9b4c68d0fc13a47b45ff364b4be43aa74f8804f9050140f660fb660d - languageName: node - linkType: hard - "vfile-location@npm:^4.0.0": version: 4.1.0 resolution: "vfile-location@npm:4.1.0" @@ -37866,7 +36714,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:*, ws@npm:8.18.0, ws@npm:^8.11.0, ws@npm:^8.13.0, ws@npm:^8.18.0, ws@npm:^8.8.0": +"ws@npm:*, ws@npm:8.18.0, ws@npm:^8.13.0, ws@npm:^8.18.0, ws@npm:^8.8.0": version: 8.18.0 resolution: "ws@npm:8.18.0" peerDependencies: @@ -37925,31 +36773,6 @@ __metadata: languageName: node linkType: hard -"xterm-addon-attach@npm:^0.9.0": - version: 0.9.0 - resolution: "xterm-addon-attach@npm:0.9.0" - peerDependencies: - xterm: ^5.0.0 - checksum: 10c0/bbecfd4daf5995014245cadcaddf0140b55cf0c80b37411ba0277fa7ba775fd7aab24431eb08161f7941ba605ae0946dbaded9fe753be881ae0d3c6d37bb8e63 - languageName: node - linkType: hard - -"xterm-addon-fit@npm:^0.8.0": - version: 0.8.0 - resolution: "xterm-addon-fit@npm:0.8.0" - peerDependencies: - xterm: ^5.0.0 - checksum: 10c0/39f77c9ec74bcc048ad74fbc4b9d610070c0a67971837f7edf92a8d21d65189c887986713d6ab22c04e2704253022488324d27fdb2425dc8aa95a9b679703101 - languageName: node - linkType: hard - -"xterm@npm:^5.3.0": - version: 5.3.0 - resolution: "xterm@npm:5.3.0" - checksum: 10c0/39bf5ea933cc2f65d5970560d065b4db645ed03c820bcf6c6239bd504e41a876ab1a773ad9e4e09476ba85a4891534702b9fbb885b0838d79e6620ed2f856bae - languageName: node - linkType: hard - "y18n@npm:^5.0.5": version: 5.0.8 resolution: "y18n@npm:5.0.8" @@ -38067,7 +36890,7 @@ __metadata: languageName: node linkType: hard -"yauzl@npm:^3.0.0, yauzl@npm:^3.2.1": +"yauzl@npm:^3.2.1": version: 3.3.0 resolution: "yauzl@npm:3.3.0" dependencies: @@ -38174,7 +36997,7 @@ __metadata: languageName: node linkType: hard -"zod-to-json-schema@npm:^3.20.4, zod-to-json-schema@npm:^3.24.5, zod-to-json-schema@npm:^3.25.1": +"zod-to-json-schema@npm:^3.25.1": version: 3.25.2 resolution: "zod-to-json-schema@npm:3.25.2" peerDependencies: @@ -38217,7 +37040,7 @@ __metadata: languageName: node linkType: hard -"zod@npm:^3.25.76 || ^4.0.0": +"zod@npm:^3.25.76 || ^4.0.0, zod@npm:^4.3.6": version: 4.3.6 resolution: "zod@npm:4.3.6" checksum: 10c0/860d25a81ab41d33aa25f8d0d07b091a04acb426e605f396227a796e9e800c44723ed96d0f53a512b57be3d1520f45bf69c0cb3b378a232a00787a2609625307