From 707c4de835db093459ede8cde34a843f048dea65 Mon Sep 17 00:00:00 2001 From: hpeters Date: Fri, 10 Jan 2025 10:27:15 +0100 Subject: [PATCH 1/8] MFT Action Plugin --- packages/app/package.json | 1 + packages/app/src/App.tsx | 2 + packages/app/src/components/Root/Root.tsx | 9 + packages/backend/package.json | 1 + packages/backend/src/index.ts | 9 +- .../components/MFTUiWrapper/MFTUiWrapper.tsx | 18 + .../.eslintrc.js | 1 + .../README.md | 14 + .../dev/index.ts | 9 + .../package.json | 47 ++ .../src/actions/mft/call-mft-api.ts | 216 ++++++++ .../src/actions/mft/index.ts | 1 + .../src/index.ts | 1 + yarn.lock | 492 +++++++++++++++++- 14 files changed, 803 insertions(+), 18 deletions(-) create mode 100644 plugins/mft-wrapper/src/components/MFTUiWrapper/MFTUiWrapper.tsx create mode 100644 plugins/scaffolder-backend-module-mft-actions-backend/.eslintrc.js create mode 100644 plugins/scaffolder-backend-module-mft-actions-backend/README.md create mode 100644 plugins/scaffolder-backend-module-mft-actions-backend/dev/index.ts create mode 100644 plugins/scaffolder-backend-module-mft-actions-backend/package.json create mode 100644 plugins/scaffolder-backend-module-mft-actions-backend/src/actions/mft/call-mft-api.ts create mode 100644 plugins/scaffolder-backend-module-mft-actions-backend/src/actions/mft/index.ts create mode 100644 plugins/scaffolder-backend-module-mft-actions-backend/src/index.ts diff --git a/packages/app/package.json b/packages/app/package.json index 648eade..5aa4c1e 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -39,6 +39,7 @@ "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "^4.0.0-alpha.61", + "backstage-plugin-mft-wrapper": "^0.1.0", "history": "^5.0.0", "react": "^18.0.2", "react-dom": "^18.0.2", diff --git a/packages/app/src/App.tsx b/packages/app/src/App.tsx index ac8a03d..fc47438 100644 --- a/packages/app/src/App.tsx +++ b/packages/app/src/App.tsx @@ -61,6 +61,7 @@ import { catalogImportPlugin } from '@backstage/plugin-catalog-import'; import { Button } from '@material-ui/core'; import { UnifiedThemeProvider } from '@backstage/theme'; import { ImportFlowPage } from '@internal/backstage-plugin-import-flow'; +import { MftWrapperPage } from 'backstage-plugin-mft-wrapper'; export const generateProviders = (providerConfig: string[]): any[] => { const providers: any[] = []; @@ -245,6 +246,7 @@ const routes = ( {settingsPage} } /> + } /> ); export default app.createRoot( diff --git a/packages/app/src/components/Root/Root.tsx b/packages/app/src/components/Root/Root.tsx index 3a2c6c2..0fe3749 100644 --- a/packages/app/src/components/Root/Root.tsx +++ b/packages/app/src/components/Root/Root.tsx @@ -17,6 +17,7 @@ import { TibcoIcon } from '../../icons/TibcoIcon'; import CpIcon from '../../icons/cp.svg'; import { configApiRef, useApi } from '@backstage/core-plugin-api'; import { Link } from 'react-router-dom'; +import TableChartIcon from '@material-ui/icons/TableChart'; const useSidebarLogoStyles = makeStyles({ logoContainer: { @@ -205,6 +206,14 @@ const SidebarCustom = () => { {/* End global nav */} + }> + } + to="/mft-wrapper" + text="Manged File Transfer" + /> + + } to="/settings" diff --git a/packages/backend/package.json b/packages/backend/package.json index b4cce5c..d8a94c1 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -51,6 +51,7 @@ "@internal/backstage-plugin-scaffolder-backend-module-import-flow": "^1.3.0", "@octokit/request-error": "^3.0.3", "app": "link:../app", + "@internal/backstage-plugin-scaffolder-backend-module-mft-actions-backend": "^0.1.0", "better-sqlite3": "^9.0.0", "dockerode": "^3.3.1", "express": "^4.19.2", diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index ad95680..950606a 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -1,6 +1,6 @@ import { createBackend } from '@backstage/backend-defaults'; import { scaffolderActionsExtensionPoint } from '@backstage/plugin-scaffolder-node/alpha'; -import { createBackendModule } from '@backstage/backend-plugin-api'; +import {coreServices, createBackendModule} from '@backstage/backend-plugin-api'; import { ExtractParametersAction, createYamlAction, @@ -8,6 +8,8 @@ import { import { rootHttpRouterServiceFactory } from '@backstage/backend-defaults/rootHttpRouter'; import { NextFunction, Request, Response, Router } from 'express'; +import {callMftApi} from '@internal/backstage-plugin-scaffolder-backend-module-mft-actions-backend' + const backend = createBackend(); backend.add( @@ -44,10 +46,12 @@ const scaffolderModuleCustomExtensions = createBackendModule({ env.registerInit({ deps: { scaffolder: scaffolderActionsExtensionPoint, + config: coreServices.rootConfig, }, - async init({ scaffolder }) { + async init({ scaffolder, config }) { scaffolder.addActions(new (ExtractParametersAction as any)()); scaffolder.addActions(new (createYamlAction as any)()); + scaffolder.addActions(new (callMftApi as any)(config)); }, }); }, @@ -82,4 +86,5 @@ backend.add(import('@backstage/plugin-search-backend/alpha')); backend.add(import('@backstage/plugin-search-backend-module-catalog/alpha')); backend.add(import('@backstage/plugin-search-backend-module-techdocs/alpha')); +// backend.add(import('backstage-plugin-scaffolder-backend-module-mft-actions-backend')); backend.start(); diff --git a/plugins/mft-wrapper/src/components/MFTUiWrapper/MFTUiWrapper.tsx b/plugins/mft-wrapper/src/components/MFTUiWrapper/MFTUiWrapper.tsx new file mode 100644 index 0000000..fdbeb33 --- /dev/null +++ b/plugins/mft-wrapper/src/components/MFTUiWrapper/MFTUiWrapper.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import { + Content, + Page, +} from '@backstage/core-components'; + + +export const MFTUiWrapper = () => ( + + + {/*https://108.128.227.221:8443/cfcc/login/login.jsp + + */} + + + +); diff --git a/plugins/scaffolder-backend-module-mft-actions-backend/.eslintrc.js b/plugins/scaffolder-backend-module-mft-actions-backend/.eslintrc.js new file mode 100644 index 0000000..e2a53a6 --- /dev/null +++ b/plugins/scaffolder-backend-module-mft-actions-backend/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/scaffolder-backend-module-mft-actions-backend/README.md b/plugins/scaffolder-backend-module-mft-actions-backend/README.md new file mode 100644 index 0000000..5c5fa5f --- /dev/null +++ b/plugins/scaffolder-backend-module-mft-actions-backend/README.md @@ -0,0 +1,14 @@ +# scaffolder-backend-module-mft-actions + +Welcome to the scaffolder-backend-module-mft-actions backend plugin! + +_This plugin was created through the Backstage CLI_ + +## Getting started + +Your plugin has been added to the example app in this repository, meaning you'll be able to access it by running `yarn +start` in the root directory, and then navigating to [/scaffolder-backend-module-mft-actions/health](http://localhost:7007/api/scaffolder-backend-module-mft-actions/health). + +You can also serve the plugin in isolation by running `yarn start` in the plugin directory. +This method of serving the plugin provides quicker iteration speed and a faster startup and hot reloads. +It is only meant for local development, and the setup for it can be found inside the [/dev](./dev) directory. diff --git a/plugins/scaffolder-backend-module-mft-actions-backend/dev/index.ts b/plugins/scaffolder-backend-module-mft-actions-backend/dev/index.ts new file mode 100644 index 0000000..9d74c82 --- /dev/null +++ b/plugins/scaffolder-backend-module-mft-actions-backend/dev/index.ts @@ -0,0 +1,9 @@ +import { createBackend } from '@backstage/backend-defaults'; + +const backend = createBackend(); + +backend.add(import('@backstage/plugin-auth-backend')); +backend.add(import('@backstage/plugin-auth-backend-module-guest-provider')); +backend.add(import('../src')); + +backend.start(); diff --git a/plugins/scaffolder-backend-module-mft-actions-backend/package.json b/plugins/scaffolder-backend-module-mft-actions-backend/package.json new file mode 100644 index 0000000..c0059bb --- /dev/null +++ b/plugins/scaffolder-backend-module-mft-actions-backend/package.json @@ -0,0 +1,47 @@ +{ + "name": "@internal/backstage-plugin-scaffolder-backend-module-mft-actions-backend", + "version": "0.1.0", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "private": true, + "publishConfig": { + "access": "public", + "main": "dist/index.cjs.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "backend-plugin" + }, + "scripts": { + "start": "backstage-cli package start", + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "dependencies": { + "@backstage/backend-common": "^0.23.3", + "@backstage/backend-defaults": "^0.4.0", + "@backstage/backend-plugin-api": "^0.7.0", + "@backstage/config": "^1.2.0", + "express": "^4.17.1", + "express-promise-router": "^4.1.0", + "node-fetch": "^2.6.7" + }, + "devDependencies": { + "@backstage/backend-test-utils": "^0.4.4", + "@backstage/cli": "^0.26.10", + "@backstage/plugin-auth-backend": "^0.22.8", + "@backstage/plugin-auth-backend-module-guest-provider": "^0.1.7", + "@types/express": "*", + "@types/supertest": "^2.0.12", + "supertest": "^6.2.4", + "msw": "^2.3.1" + }, + "files": [ + "dist" + ] +} diff --git a/plugins/scaffolder-backend-module-mft-actions-backend/src/actions/mft/call-mft-api.ts b/plugins/scaffolder-backend-module-mft-actions-backend/src/actions/mft/call-mft-api.ts new file mode 100644 index 0000000..d15229a --- /dev/null +++ b/plugins/scaffolder-backend-module-mft-actions-backend/src/actions/mft/call-mft-api.ts @@ -0,0 +1,216 @@ +import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; +import axios from 'axios'; +import { Config } from '@backstage/config'; +import https from "node:https"; + +const DIV = '-------------------------------------------------------------------------------------------' + +export interface MFTConfig { + logger: any; + baseUrl: string; + username: string; + password: string; +} + + +export async function callMFT(config: MFTConfig, endpoint: string, method = 'get', data?: any) { + let mRes; + + try { + mRes = await axios({ + method, + url: config.baseUrl + endpoint, + data, + httpsAgent: new https.Agent({ + // This is because they use a self-signed certificate TODO: Remove this in production + rejectUnauthorized: false + }), + auth: { + username: config.username, + password: config.password + } + }) + } catch (error: any) { + config.logger.error('Error calling MFT API...'); + config.logger.error('Status: ' + error.status); + if(error.response?.data) { + let eMes = error.response.data + if(typeof error.response.data === 'object'){ + eMes = JSON.stringify(error.response.data, null, 2); + config.logger.error('Error Data: ' + JSON.stringify(error.response.data, null, 2)); + } + config.logger.error('Error Data: ' + eMes); + throw new Error(eMes); + } + + // config.logger.error('Error:' , error); + throw error; + } + + if(mRes.data) { + return mRes.data; + } else { + return + } + + + +} + + +export function callMftApi(config: Config) { + // Get from config + const mftBaseUrl = config.getString('mft.baseUrl'); + const mftUser = config.getString('mft.username'); + const mftPass = config.getString('mft.password'); + + if ( + !( + mftBaseUrl && + mftUser && + mftPass + ) + ) { + throw new Error( + 'Invalid configuration in app-config, missing one of the following property in mft object, baseUrl, username or password', + ); + } + + return createTemplateAction<{ + endpoint: string; + method?: string; + mftInput?: any; + }>({ + id: 'tibco:call-mft-api', + schema: { + input: { + required: ['endpoint'], + type: 'object', + properties: { + endpoint: { + type: 'string', + title: 'endpoint', + description: 'The MFT endpoint to call', + }, + method: { + type: 'string', + title: 'method', + description: 'method (GET, POST, PUT, DELETE) to use; default is GET', + }, + mftInput: { + type: 'object', + title: 'mftInput', + description: 'If method is POST or PUT, this is the data to send', + }, + + }, + }, + output: { + required: ['mftResult'], + type: 'object', + properties: { + name: { + type: 'object', + title: 'mftResult', + description: 'The result from MFT', + }, + }, + }, + }, + async handler(ctx) { + + ctx.logger.info(DIV); + ctx.logger.info('--- CALLING MFT API'); + ctx.logger.info(DIV); + + + ctx.logger.info(`--- MFT Username: ${mftUser}`); + ctx.logger.info(`--- MFT BASE URL: ${mftBaseUrl}`); + ctx.logger.info(`--- MFT Endpoint: ${ctx.input.endpoint}`); + // TODO: Add method and input data + ctx.logger.info(`--- MFT Method: ${ctx.input.method}`); + ctx.logger.info('--- MFT Input: \n' + JSON.stringify(ctx.input.mftInput, null, 2)); + + ctx.logger.info(DIV); + ctx.logger.info('--- Calling MFT API...'); + const mftResult = await callMFT({ + logger: ctx.logger, + baseUrl: mftBaseUrl, + username: mftUser, + password: mftPass + }, ctx.input.endpoint, ctx.input.method, ctx.input.mftInput); + ctx.logger.info(DIV); + ctx.logger.info('--- MFT API Result:'); + ctx.logger.info(JSON.stringify(mftResult, null, 2)); + ctx.logger.info(DIV); + + // const jenkinsJobToken = ctx.input.jobAuthToken || jenkinsJobAuthToken; + // const repoUrl = ctx.input.repoUrl; + // const jenkinsJob = ctx.input.job; + // const jenkinsSecretObj = ctx.input.secret; + // let jenkinsInstructions = ctx.input.jenkinsInstructions || ''; + // + // ctx.logger.info( + // '-------------------------------------------------------------------------------------------', + // ); + // ctx.logger.info( + // '------------------- STARTING THE JENKINS JOB ---------------------------', + // ); + // ctx.logger.info( + // '-------------------------------------------------------------------------------------------', + // ); + // ctx.logger.info(`------ Jenkins BASE URL: ${jenkinsBaseUrl}`); + // ctx.logger.info(`------ Jenkins Username: ${jenkinsUser}`); + // ctx.logger.info(`------ Jenkins Job: ${jenkinsJob}`); + // if (repoUrl) { + // ctx.logger.info(`------ Repo Name: ${repoUrl?.repo}`); + // } + // ctx.logger.info(`---Jenkins Instructions: ${jenkinsInstructions}`); + // ctx.logger.info( + // '-------------------------------------------------------------------------------------------', + // ); + // if (jenkinsSecretObj) { + // for (const sec in jenkinsSecretObj) { + // if (jenkinsSecretObj.hasOwnProperty(sec)) { + // ctx.logger.info('------ Adding secret in jenkinsInstructions ... '); + // const key = Buffer.from(jenkinsSecretEncryptionKey, 'hex'); + // const iv = randomBytes(16); + // const encrypted = encryptSecret(key, iv, jenkinsSecretObj[sec]); + // jenkinsInstructions = `${jenkinsInstructions}&${sec}=${encrypted}`; + // } + // } + // } + // ctx.logger.info(`---Jenkins Instructions: ${jenkinsInstructions}`); + // + // const jenkinsCallURl = generateJenkinsCallURl( + // jenkinsBaseUrl, + // jenkinsJob, + // jenkinsJobToken, + // repoUrl, + // jenkinsInstructions, + // ); + // + // ctx.logger.info( + // '-------------------------------------------------------------------------------------------', + // ); + // ctx.logger.info('---Calling Jenkins URL...'); + // ctx.logger.info( + // '-------------------------------------------------------------------------------------------', + // ); + // + // const jResponse = await axios.get(jenkinsCallURl, { + // auth: { + // username: jenkinsUser, + // password: jenkinsApiKey, + // }, + // }); + // const jobLink = `${jenkinsBaseUrl}/job/${jenkinsJob}/`; + // ctx.logger.info(`------ Job Started: ${jResponse.statusText}`); + // ctx.logger.info(`------ Job Link: ${jobLink}`); + // ctx.logger.info( + // '------------------------------------------------------------------------------------------', + // ); + ctx.output('mftResult', mftResult); + }, + }); +} diff --git a/plugins/scaffolder-backend-module-mft-actions-backend/src/actions/mft/index.ts b/plugins/scaffolder-backend-module-mft-actions-backend/src/actions/mft/index.ts new file mode 100644 index 0000000..fe5fdc6 --- /dev/null +++ b/plugins/scaffolder-backend-module-mft-actions-backend/src/actions/mft/index.ts @@ -0,0 +1 @@ +export { callMftApi } from './call-mft-api'; \ No newline at end of file diff --git a/plugins/scaffolder-backend-module-mft-actions-backend/src/index.ts b/plugins/scaffolder-backend-module-mft-actions-backend/src/index.ts new file mode 100644 index 0000000..0dcfc45 --- /dev/null +++ b/plugins/scaffolder-backend-module-mft-actions-backend/src/index.ts @@ -0,0 +1 @@ +export * from './actions/mft'; diff --git a/yarn.lock b/yarn.lock index c7880e2..8b6af30 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2210,6 +2210,47 @@ winston "^3.2.1" winston-transport "^4.5.0" +"@backstage/backend-app-api@^0.9.3": + version "0.9.3" + resolved "https://registry.yarnpkg.com/@backstage/backend-app-api/-/backend-app-api-0.9.3.tgz#5d5c82cbd4e5354089af17e2655963884549e7e6" + integrity sha512-K4M5Wl3Bu7+4xRpaGdQtEi2iVFqQH766zl+R7lK1n4q/NVWEpulJpmwzPxP45xsJUCJeFkjL+dJn2pw+iS2wHQ== + dependencies: + "@backstage/backend-common" "^0.24.1" + "@backstage/backend-plugin-api" "^0.8.1" + "@backstage/cli-common" "^0.1.14" + "@backstage/cli-node" "^0.2.7" + "@backstage/config" "^1.2.0" + "@backstage/config-loader" "^1.9.0" + "@backstage/errors" "^1.2.4" + "@backstage/plugin-auth-node" "^0.5.1" + "@backstage/plugin-permission-node" "^0.8.2" + "@backstage/types" "^1.1.1" + "@manypkg/get-packages" "^1.1.3" + compression "^1.7.4" + cookie "^0.6.0" + cors "^2.8.5" + express "^4.17.1" + express-promise-router "^4.1.0" + fs-extra "^11.2.0" + helmet "^6.0.0" + jose "^5.0.0" + knex "^3.0.0" + lodash "^4.17.21" + logform "^2.3.2" + luxon "^3.0.0" + minimatch "^9.0.0" + minimist "^1.2.5" + morgan "^1.10.0" + node-fetch "^2.7.0" + node-forge "^1.3.1" + path-to-regexp "^6.2.1" + selfsigned "^2.0.0" + stoppable "^1.1.0" + triple-beam "^1.4.1" + uuid "^9.0.0" + winston "^3.2.1" + winston-transport "^4.5.0" + "@backstage/backend-app-api@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@backstage/backend-app-api/-/backend-app-api-1.0.2.tgz#9cf6246ea11c147dff66e3f4c79f1c233a438444" @@ -2655,6 +2696,81 @@ yn "^4.0.0" zod "^3.22.4" +"@backstage/backend-defaults@^0.4.0": + version "0.4.4" + resolved "https://registry.yarnpkg.com/@backstage/backend-defaults/-/backend-defaults-0.4.4.tgz#c41c64f4fa69abab604539d6a0e5a18fa38daa03" + integrity sha512-wQmLNxpQPykzdvVcKNUbS0VMJZCRHYYHY/0cLJ/npg8Gpq+pb85Dh+dLV61HhzF+cbig5aRgM2lql7wheyVGlw== + dependencies: + "@aws-sdk/abort-controller" "^3.347.0" + "@aws-sdk/client-codecommit" "^3.350.0" + "@aws-sdk/client-s3" "^3.350.0" + "@aws-sdk/credential-providers" "^3.350.0" + "@aws-sdk/types" "^3.347.0" + "@backstage/backend-app-api" "^0.9.3" + "@backstage/backend-common" "^0.24.1" + "@backstage/backend-dev-utils" "^0.1.5" + "@backstage/backend-plugin-api" "^0.8.1" + "@backstage/cli-common" "^0.1.14" + "@backstage/config" "^1.2.0" + "@backstage/config-loader" "^1.9.0" + "@backstage/errors" "^1.2.4" + "@backstage/integration" "^1.14.0" + "@backstage/integration-aws-node" "^0.1.12" + "@backstage/plugin-auth-node" "^0.5.1" + "@backstage/plugin-events-node" "^0.3.10" + "@backstage/plugin-permission-node" "^0.8.2" + "@backstage/types" "^1.1.1" + "@google-cloud/storage" "^7.0.0" + "@keyv/memcache" "^1.3.5" + "@keyv/redis" "^2.5.3" + "@manypkg/get-packages" "^1.1.3" + "@octokit/rest" "^19.0.3" + "@opentelemetry/api" "^1.3.0" + "@types/cors" "^2.8.6" + "@types/express" "^4.17.6" + archiver "^6.0.0" + base64-stream "^1.0.0" + better-sqlite3 "^11.0.0" + compression "^1.7.4" + concat-stream "^2.0.0" + cookie "^0.6.0" + cors "^2.8.5" + cron "^3.0.0" + express "^4.17.1" + express-promise-router "^4.1.0" + fs-extra "^11.2.0" + git-url-parse "^14.0.0" + helmet "^6.0.0" + isomorphic-git "^1.23.0" + jose "^5.0.0" + keyv "^4.5.2" + knex "^3.0.0" + lodash "^4.17.21" + logform "^2.3.2" + luxon "^3.0.0" + minimatch "^9.0.0" + minimist "^1.2.5" + morgan "^1.10.0" + mysql2 "^3.0.0" + node-fetch "^2.7.0" + node-forge "^1.3.1" + p-limit "^3.1.0" + path-to-regexp "^6.2.1" + pg "^8.11.3" + pg-connection-string "^2.3.0" + pg-format "^1.0.4" + raw-body "^2.4.1" + selfsigned "^2.0.0" + stoppable "^1.1.0" + tar "^6.1.12" + triple-beam "^1.4.1" + uuid "^9.0.0" + winston "^3.2.1" + winston-transport "^4.5.0" + yauzl "^3.0.0" + yn "^4.0.0" + zod "^3.22.4" + "@backstage/backend-defaults@^0.5.2", "@backstage/backend-defaults@^0.5.3": version "0.5.3" resolved "https://registry.yarnpkg.com/@backstage/backend-defaults/-/backend-defaults-0.5.3.tgz#7e562d394ba4c9eac651e7b54593a4b4aefafe74" @@ -2844,6 +2960,37 @@ uuid "^9.0.0" zod "^3.22.4" +"@backstage/backend-test-utils@^0.4.4": + version "0.4.4" + resolved "https://registry.yarnpkg.com/@backstage/backend-test-utils/-/backend-test-utils-0.4.4.tgz#530fb02ecb104447a8ef109e601710192efa0929" + integrity sha512-3etGdwBwa4d1P7QeLVfn1Q3gPNFarjB3713DY5bXJ7Sdm6mduFSlZE0eET2EPZvQSIMX7B07N70eWtv8eSDf8Q== + dependencies: + "@backstage/backend-app-api" "^0.8.0" + "@backstage/backend-defaults" "^0.4.0" + "@backstage/backend-plugin-api" "^0.7.0" + "@backstage/config" "^1.2.0" + "@backstage/errors" "^1.2.4" + "@backstage/plugin-auth-node" "^0.4.17" + "@backstage/plugin-events-node" "^0.3.8" + "@backstage/types" "^1.1.1" + "@keyv/memcache" "^1.3.5" + "@keyv/redis" "^2.5.3" + "@types/keyv" "^4.2.0" + better-sqlite3 "^11.0.0" + cookie "^0.6.0" + express "^4.17.1" + fs-extra "^11.0.0" + keyv "^4.5.2" + knex "^3.0.0" + msw "^1.0.0" + mysql2 "^3.0.0" + pg "^8.11.3" + pg-connection-string "^2.3.0" + testcontainers "^10.0.0" + textextensions "^5.16.0" + uuid "^9.0.0" + yn "^4.0.0" + "@backstage/catalog-client@^1.6.5", "@backstage/catalog-client@^1.6.6", "@backstage/catalog-client@^1.7.0", "@backstage/catalog-client@^1.7.1", "@backstage/catalog-client@^1.8.0": version "1.8.0" resolved "https://registry.yarnpkg.com/@backstage/catalog-client/-/catalog-client-1.8.0.tgz#a618569abc552cadade18e29ce24e57ed0502fdc" @@ -4090,7 +4237,7 @@ react-use "^17.2.4" zen-observable "^0.10.0" -"@backstage/plugin-events-node@^0.3.7", "@backstage/plugin-events-node@^0.3.8": +"@backstage/plugin-events-node@^0.3.10", "@backstage/plugin-events-node@^0.3.7", "@backstage/plugin-events-node@^0.3.8": version "0.3.10" resolved "https://registry.yarnpkg.com/@backstage/plugin-events-node/-/plugin-events-node-0.3.10.tgz#253f46c588dfa69dfec783d96fbb22b71184aa61" integrity sha512-A+x674f5VrrwkIxm3LskvnMC7Cw2HibYLvf89jIJFDLsimktOiKwKqv6o11yhqJjoUhaul+z/sDJeQsCMg+Dmg== @@ -5112,6 +5259,28 @@ resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-7.0.4.tgz#a7ddd6d55dfb89e341f5684c9717ee24fef62301" integrity sha512-hPYRrKFoI+nuckPgDJfyYAkybFvheo4usS0Vw0HNAe+fmGBQA5Az37b/yStO284atBoqqdOUhKJ3d9Zw3PQkcQ== +"@bundled-es-modules/cookie@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@bundled-es-modules/cookie/-/cookie-2.0.1.tgz#b41376af6a06b3e32a15241d927b840a9b4de507" + integrity sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw== + dependencies: + cookie "^0.7.2" + +"@bundled-es-modules/statuses@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz#761d10f44e51a94902c4da48675b71a76cc98872" + integrity sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg== + dependencies: + statuses "^2.0.1" + +"@bundled-es-modules/tough-cookie@^0.1.6": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz#fa9cd3cedfeecd6783e8b0d378b4a99e52bde5d3" + integrity sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw== + dependencies: + "@types/tough-cookie" "^4.0.5" + tough-cookie "^4.1.4" + "@changesets/types@^4.0.1": version "4.1.0" resolved "https://registry.yarnpkg.com/@changesets/types/-/types-4.1.0.tgz#fb8f7ca2324fd54954824e864f9a61a82cb78fe0" @@ -5749,6 +5918,11 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== +"@fastify/busboy@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== + "@floating-ui/core@^1.6.0": version "1.6.8" resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.8.tgz#aa43561be075815879305965020f492cdb43da12" @@ -6232,6 +6406,39 @@ resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== +"@inquirer/confirm@^5.0.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.1.tgz#18385064b8275eb79fdba505ce527801804eea04" + integrity sha512-vVLSbGci+IKQvDOtzpPTCOiEJCNidHcAq9JYVoWTW0svb5FiwSLotkM+JXNXejfjnzVYV9n0DTBythl9+XgTxg== + dependencies: + "@inquirer/core" "^10.1.2" + "@inquirer/type" "^3.0.2" + +"@inquirer/core@^10.1.2": + version "10.1.2" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.1.2.tgz#a9c5b9ed814a636e99b5c0a8ca4f1626d99fd75d" + integrity sha512-bHd96F3ezHg1mf/J0Rb4CV8ndCN0v28kUlrHqP7+ECm1C/A+paB7Xh2lbMk6x+kweQC+rZOxM/YeKikzxco8bQ== + dependencies: + "@inquirer/figures" "^1.0.9" + "@inquirer/type" "^3.0.2" + ansi-escapes "^4.3.2" + cli-width "^4.1.0" + mute-stream "^2.0.0" + signal-exit "^4.1.0" + strip-ansi "^6.0.1" + wrap-ansi "^6.2.0" + yoctocolors-cjs "^2.1.2" + +"@inquirer/figures@^1.0.9": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.9.tgz#9d8128f8274cde4ca009ca8547337cab3f37a4a3" + integrity sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ== + +"@inquirer/type@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.2.tgz#baff9f8d70947181deb36772cd9a5b6876d3e60c" + integrity sha512-ZhQ4TvhwHZF+lGhQ2O/rsjo80XoZR5/5qhOY3t6FJuX5XBg5Be8YzYTvaUGJnc12AUGI2nr4QSUE4PhKSigx7g== + "@ioredis/commands@^1.1.1": version "1.2.0" resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11" @@ -6582,6 +6789,13 @@ dependencies: ioredis "^5.4.1" +"@keyv/serialize@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@keyv/serialize/-/serialize-1.0.2.tgz#72507c4be94d8914434a4aa80661f8ac6131967f" + integrity sha512-+E/LyaAeuABniD/RvUezWVXKpeuvwLEA9//nE9952zBaOdBd2mQ3pPoM8cUe2X6IcMByfuSLzmYqnYshG60+HQ== + dependencies: + buffer "^6.0.3" + "@kubernetes/client-node@0.20.0": version "0.20.0" resolved "https://registry.yarnpkg.com/@kubernetes/client-node/-/client-node-0.20.0.tgz#4447ae27fd6eef3d4830a5a039f3b84ffd5c5913" @@ -7034,6 +7248,18 @@ strict-event-emitter "^0.2.4" web-encoding "^1.1.5" +"@mswjs/interceptors@^0.37.0": + version "0.37.5" + resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.37.5.tgz#9ce40c56be02b43fcbdb51b63f47e69fc4aaabe6" + integrity sha512-AAwRb5vXFcY4L+FvZ7LZusDuZ0vEe0Zm8ohn1FM6/X7A3bj4mqmkAcGRWuvC2JwSygNwHAAmMnAI73vPHeqsHA== + dependencies: + "@open-draft/deferred-promise" "^2.2.0" + "@open-draft/logger" "^0.3.0" + "@open-draft/until" "^2.0.0" + is-node-process "^1.2.0" + outvariant "^1.4.3" + strict-event-emitter "^0.5.1" + "@mui/core-downloads-tracker@^5.16.11": version "5.16.11" resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.11.tgz#0295ae13eeb449a87939fadf029e3382b0b9a802" @@ -7834,11 +8060,29 @@ "@octokit/webhooks-types" "7.6.1" aggregate-error "^3.1.0" +"@open-draft/deferred-promise@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz#4a822d10f6f0e316be4d67b4d4f8c9a124b073bd" + integrity sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA== + +"@open-draft/logger@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@open-draft/logger/-/logger-0.3.0.tgz#2b3ab1242b360aa0adb28b85f5d7da1c133a0954" + integrity sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ== + dependencies: + is-node-process "^1.2.0" + outvariant "^1.4.0" + "@open-draft/until@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-1.0.3.tgz#db9cc719191a62e7d9200f6e7bab21c5b848adca" integrity sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q== +"@open-draft/until@^2.0.0", "@open-draft/until@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-2.1.0.tgz#0acf32f470af2ceaf47f095cdecd40d68666efda" + integrity sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg== + "@openapi-contrib/openapi-schema-to-json-schema@~3.2.0": version "3.2.0" resolved "https://registry.yarnpkg.com/@openapi-contrib/openapi-schema-to-json-schema/-/openapi-schema-to-json-schema-3.2.0.tgz#c4c92edd4478b5ecb3d99c29ecb355118259dccc" @@ -10127,6 +10371,11 @@ resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== +"@types/cookie@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.6.0.tgz#eac397f28bf1d6ae0ae081363eca2f425bedf0d5" + integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA== + "@types/cookiejar@^2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@types/cookiejar/-/cookiejar-2.1.5.tgz#14a3e83fa641beb169a2dd8422d91c3c345a9a78" @@ -10163,6 +10412,15 @@ "@types/node" "*" "@types/ssh2" "*" +"@types/dockerode@^3.3.29": + version "3.3.34" + resolved "https://registry.yarnpkg.com/@types/dockerode/-/dockerode-3.3.34.tgz#1cef62f1b98f80bd4460961dd8aac99b95a0fb6e" + integrity sha512-mH9SuIb8NuTDsMus5epcbTzSbEo52fKLBMo0zapzYIAIyfDqoIFn7L3trekHLKC8qmxGV++pPUP4YqQ9n5v2Zg== + dependencies: + "@types/docker-modem" "*" + "@types/node" "*" + "@types/ssh2" "*" + "@types/dompurify@^2.1.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@types/dompurify/-/dompurify-2.4.0.tgz#fd9706392a88e0e0e6d367f3588482d817df0ab9" @@ -10370,6 +10628,13 @@ dependencies: "@types/node" "*" +"@types/keyv@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-4.2.0.tgz#65b97868ab757906f2dbb653590d7167ad023fa0" + integrity sha512-xoBtGl5R9jeKUhc8ZqeYaRDx04qqJ10yhhXYGmJ4Jr8qKpvMsDQQrNUvF/wUJ4klOtmJeJM+p2Xo3zp9uaC3tw== + dependencies: + keyv "*" + "@types/long@^4.0.0": version "4.0.2" resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" @@ -10642,6 +10907,13 @@ dependencies: "@types/node" "*" +"@types/ssh2-streams@*": + version "0.1.12" + resolved "https://registry.yarnpkg.com/@types/ssh2-streams/-/ssh2-streams-0.1.12.tgz#e68795ba2bf01c76b93f9c9809e1f42f0eaaec5f" + integrity sha512-Sy8tpEmCce4Tq0oSOYdfqaBpA3hDM8SoxoFh5vzFsu2oL+znzGz8oVWW7xb4K920yYMUY+PIG31qZnFMfPWNCg== + dependencies: + "@types/node" "*" + "@types/ssh2@*": version "1.15.1" resolved "https://registry.yarnpkg.com/@types/ssh2/-/ssh2-1.15.1.tgz#4db4b6864abca09eb299fe5354fa591add412223" @@ -10649,11 +10921,24 @@ dependencies: "@types/node" "^18.11.18" +"@types/ssh2@^0.5.48": + version "0.5.52" + resolved "https://registry.yarnpkg.com/@types/ssh2/-/ssh2-0.5.52.tgz#9dbd8084e2a976e551d5e5e70b978ed8b5965741" + integrity sha512-lbLLlXxdCZOSJMCInKH2+9V/77ET2J6NPQHpFI0kda61Dd1KglJs+fPQBchizmzYSOJBgdTajhPqBO1xxLywvg== + dependencies: + "@types/node" "*" + "@types/ssh2-streams" "*" + "@types/stack-utils@^2.0.0": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== +"@types/statuses@^2.0.4": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@types/statuses/-/statuses-2.0.5.tgz#f61ab46d5352fd73c863a1ea4e1cef3b0b51ae63" + integrity sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A== + "@types/styled-jsx@^2.2.8": version "2.2.9" resolved "https://registry.yarnpkg.com/@types/styled-jsx/-/styled-jsx-2.2.9.tgz#e50b3f868c055bcbf9bc353eca6c10fdad32a53f" @@ -10685,7 +10970,7 @@ dependencies: "@types/estree" "*" -"@types/tough-cookie@*": +"@types/tough-cookie@*", "@types/tough-cookie@^4.0.5": version "4.0.5" resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== @@ -11307,7 +11592,7 @@ ansi-colors@^4.1.1, ansi-colors@^4.1.3: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== -ansi-escapes@^4.2.1: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -11416,6 +11701,7 @@ apg-lite@^1.0.3: "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" "@material-ui/lab" "^4.0.0-alpha.61" + backstage-plugin-mft-wrapper "^0.1.0" history "^5.0.0" react "^18.0.2" react-dom "^18.0.2" @@ -11472,7 +11758,7 @@ archiver@^6.0.0: tar-stream "^3.0.0" zip-stream "^5.0.1" -archiver@^7.0.0: +archiver@^7.0.0, archiver@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/archiver/-/archiver-7.0.1.tgz#c9d91c350362040b8927379c7aa69c0655122f61" integrity sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ== @@ -11969,11 +12255,44 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +bare-events@^2.0.0: + version "2.5.3" + resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.5.3.tgz#899d7e4b2598a7978ef7ca315ce67eff0a16a727" + integrity sha512-pCO3aoRJ0MBiRMu8B7vUga0qL3L7gO1+SW7ku6qlSsMLwuhaawnuvZDyzJY/kyC63Un0XAB0OPUcfF1eTO/V+Q== + bare-events@^2.2.0: version "2.5.0" resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.5.0.tgz#305b511e262ffd8b9d5616b056464f8e1b3329cc" integrity sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A== +bare-fs@^2.1.1: + version "2.3.5" + resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-2.3.5.tgz#05daa8e8206aeb46d13c2fe25a2cd3797b0d284a" + integrity sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw== + dependencies: + bare-events "^2.0.0" + bare-path "^2.0.0" + bare-stream "^2.0.0" + +bare-os@^2.1.0: + version "2.4.4" + resolved "https://registry.yarnpkg.com/bare-os/-/bare-os-2.4.4.tgz#01243392eb0a6e947177bb7c8a45123d45c9b1a9" + integrity sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ== + +bare-path@^2.0.0, bare-path@^2.1.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-2.1.3.tgz#594104c829ef660e43b5589ec8daef7df6cedb3e" + integrity sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA== + dependencies: + bare-os "^2.1.0" + +bare-stream@^2.0.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/bare-stream/-/bare-stream-2.6.1.tgz#b3b9874fab05b662c9aea2706a12fb0698c46836" + integrity sha512-eVZbtKM+4uehzrsj49KtCy3Pbg7kO1pJ3SKZ1SFrIH/0pnj9scuGGgUlNDf/7qS8WKtGdiJY5Kyhs/ivYPTB/g== + dependencies: + streamx "^2.21.0" + base64-arraybuffer@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" @@ -12704,6 +13023,11 @@ cli-width@^3.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== + client-only@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" @@ -13241,7 +13565,7 @@ cookie@0.7.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== -cookie@0.7.2, cookie@^0.7.0, cookie@~0.7.2: +cookie@0.7.2, cookie@^0.7.0, cookie@^0.7.2, cookie@~0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== @@ -13876,7 +14200,7 @@ debug@2.6.9, debug@^2.6.0: dependencies: ms "2.0.0" -debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@^4.3.5: version "4.4.0" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== @@ -14218,6 +14542,13 @@ dns-packet@^5.2.2: dependencies: "@leichtgewicht/ip-codec" "^2.0.1" +docker-compose@^0.24.8: + version "0.24.8" + resolved "https://registry.yarnpkg.com/docker-compose/-/docker-compose-0.24.8.tgz#6c125e6b9e04cf68ced47e2596ef2bb93ee9694e" + integrity sha512-plizRs/Vf15H+GCVxq2EUvyPK7ei9b/cVesHvjnX4xaXjM9spHe2Ytq0BitndFgvTJ3E3NljPNUEl7BAN43iZw== + dependencies: + yaml "^2.2.2" + docker-modem@^3.0.0: version "3.0.8" resolved "https://registry.yarnpkg.com/docker-modem/-/docker-modem-3.0.8.tgz#ef62c8bdff6e8a7d12f0160988c295ea8705e77a" @@ -14238,7 +14569,7 @@ docker-modem@^5.0.3: split-ca "^1.0.1" ssh2 "^1.15.0" -dockerode@^3.3.1: +dockerode@^3.3.1, dockerode@^3.3.5: version "3.3.5" resolved "https://registry.yarnpkg.com/dockerode/-/dockerode-3.3.5.tgz#7ae3f40f2bec53ae5e9a741ce655fff459745629" integrity sha512-/0YNa3ZDNeLr/tSckmD69+Gq+qVNhvKfAHNeZJBnp7EOP6RGKV8ORrJHkUn20So5wU+xxT7+1n5u8PjHbfjbSA== @@ -16636,6 +16967,11 @@ headers-polyfill@3.2.5: resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-3.2.5.tgz#6e67d392c9d113d37448fe45014e0afdd168faed" integrity sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA== +headers-polyfill@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-4.0.3.tgz#922a0155de30ecc1f785bcf04be77844ca95ad07" + integrity sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ== + helmet@^6.0.0: version "6.2.0" resolved "https://registry.yarnpkg.com/helmet/-/helmet-6.2.0.tgz#c29d62014be4c70b8ef092c9c5e54c8c26b8e16e" @@ -18708,6 +19044,13 @@ keygrip@~1.1.0: dependencies: tsscmp "1.0.6" +keyv@*: + version "5.2.3" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-5.2.3.tgz#32db1a4aa8d05e2b8ab82688a57ddc5d2184a25c" + integrity sha512-AGKecUfzrowabUv0bH1RIR5Vf7w+l4S3xtQAypKaUpTdIR1EbrAcTxHCrpo9Q+IWeUlFE2palRtgIQcgm+PQJw== + dependencies: + "@keyv/serialize" "^1.0.2" + keyv@^4.0.0, keyv@^4.5.2, keyv@^4.5.3: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" @@ -20411,6 +20754,30 @@ msw@^1.0.0: type-fest "^2.19.0" yargs "^17.3.1" +msw@^2.3.1: + version "2.7.0" + resolved "https://registry.yarnpkg.com/msw/-/msw-2.7.0.tgz#d13ff87f7e018fc4c359800ff72ba5017033fb56" + integrity sha512-BIodwZ19RWfCbYTxWTUfTXc+sg4OwjCAgxU1ZsgmggX/7S3LdUifsbUPJs61j0rWb19CZRGY5if77duhc0uXzw== + dependencies: + "@bundled-es-modules/cookie" "^2.0.1" + "@bundled-es-modules/statuses" "^1.0.1" + "@bundled-es-modules/tough-cookie" "^0.1.6" + "@inquirer/confirm" "^5.0.0" + "@mswjs/interceptors" "^0.37.0" + "@open-draft/deferred-promise" "^2.2.0" + "@open-draft/until" "^2.1.0" + "@types/cookie" "^0.6.0" + "@types/statuses" "^2.0.4" + graphql "^16.8.1" + headers-polyfill "^4.0.2" + is-node-process "^1.2.0" + outvariant "^1.4.3" + path-to-regexp "^6.3.0" + picocolors "^1.1.1" + strict-event-emitter "^0.5.1" + type-fest "^4.26.1" + yargs "^17.7.2" + multer@^1.4.5-lts.1: version "1.4.5-lts.1" resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.5-lts.1.tgz#803e24ad1984f58edffbc79f56e305aec5cfd1ac" @@ -20453,6 +20820,11 @@ mute-stream@^1.0.0, mute-stream@~1.0.0: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== +mute-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b" + integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== + mysql2@^2.2.5: version "2.3.3" resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-2.3.3.tgz#944f3deca4b16629052ff8614fbf89d5552545a0" @@ -21314,7 +21686,7 @@ os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== -outvariant@^1.2.1, outvariant@^1.4.0: +outvariant@^1.2.1, outvariant@^1.4.0, outvariant@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.3.tgz#221c1bfc093e8fec7075497e7799fdbf43d14873" integrity sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA== @@ -22497,6 +22869,22 @@ prop-types@15.x, prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.6.2, pr object-assign "^4.1.1" react-is "^16.13.1" +proper-lockfile@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" + integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA== + dependencies: + graceful-fs "^4.2.4" + retry "^0.12.0" + signal-exit "^3.0.2" + +properties-reader@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/properties-reader/-/properties-reader-2.3.0.tgz#f3ab84224c9535a7a36e011ae489a79a13b472b2" + integrity sha512-z597WicA7nDZxK12kZqHr2TcvwNU1GCfA5UwfDY/HDp3hXPoPlb5rlEx9bwGTiJnc0OqbBTkU975jDToth8Gxw== + dependencies: + mkdirp "^1.0.4" + property-expr@^2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.6.tgz#f77bc00d5928a6c748414ad12882e83f24aec1e8" @@ -24195,7 +24583,7 @@ signal-exit@3.0.7, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.0.1: +signal-exit@^4.0.1, signal-exit@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== @@ -24475,7 +24863,15 @@ sqlstring@^2.3.2: resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.3.tgz#2ddc21f03bce2c387ed60680e739922c65751d0c" integrity sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg== -ssh2@^1.11.0, ssh2@^1.15.0: +ssh-remote-port-forward@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/ssh-remote-port-forward/-/ssh-remote-port-forward-1.0.4.tgz#72b0c5df8ec27ca300c75805cc6b266dee07e298" + integrity sha512-x0LV1eVDwjf1gmG7TTnfqIzf+3VPRz7vrNIjX6oYLbeCrf/PeVY6hkT68Mg+q02qXxQhrLjB0jfgvhevoCRmLQ== + dependencies: + "@types/ssh2" "^0.5.48" + ssh2 "^1.4.0" + +ssh2@^1.11.0, ssh2@^1.15.0, ssh2@^1.4.0: version "1.16.0" resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.16.0.tgz#79221d40cbf4d03d07fe881149de0a9de928c9f0" integrity sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg== @@ -24573,7 +24969,7 @@ static-eval@2.0.2: dependencies: escodegen "^1.8.1" -statuses@2.0.1: +statuses@2.0.1, statuses@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== @@ -24653,7 +25049,7 @@ streamsearch@^1.1.0: resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== -streamx@^2.15.0: +streamx@^2.15.0, streamx@^2.21.0: version "2.21.1" resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.21.1.tgz#f02979d8395b6b637d08a589fb514498bed55845" integrity sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw== @@ -24676,6 +25072,11 @@ strict-event-emitter@^0.4.3: resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz#ff347c8162b3e931e3ff5f02cfce6772c3b07eb3" integrity sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg== +strict-event-emitter@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz#1602ece81c51574ca39c6815e09f1a3e8550bd93" + integrity sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ== + strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" @@ -25132,6 +25533,17 @@ tar-fs@^2.0.0: pump "^3.0.0" tar-stream "^2.1.4" +tar-fs@^3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.6.tgz#eaccd3a67d5672f09ca8e8f9c3d2b89fa173f217" + integrity sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w== + dependencies: + pump "^3.0.0" + tar-stream "^3.1.5" + optionalDependencies: + bare-fs "^2.1.1" + bare-path "^2.1.0" + tar-fs@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.0.1.tgz#e44086c1c60d31a4f0cf893b1c4e155dabfae9e2" @@ -25153,7 +25565,7 @@ tar-stream@^2.0.0, tar-stream@^2.1.4, tar-stream@~2.2.0: inherits "^2.0.3" readable-stream "^3.1.1" -tar-stream@^3.0.0: +tar-stream@^3.0.0, tar-stream@^3.1.5: version "3.1.7" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== @@ -25244,6 +25656,27 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" +testcontainers@^10.0.0: + version "10.16.0" + resolved "https://registry.yarnpkg.com/testcontainers/-/testcontainers-10.16.0.tgz#8a7e69ada5cd2c6cce1c6db72b3a3e8e412fcaf6" + integrity sha512-oxPLuOtrRWS11A+Yn0+zXB7GkmNarflWqmy6CQJk8KJ75LZs2/zlUXDpizTbPpCGtk4kE2EQYwFZjrE967F8Wg== + dependencies: + "@balena/dockerignore" "^1.0.2" + "@types/dockerode" "^3.3.29" + archiver "^7.0.1" + async-lock "^1.4.1" + byline "^5.0.0" + debug "^4.3.5" + docker-compose "^0.24.8" + dockerode "^3.3.5" + get-port "^5.1.1" + proper-lockfile "^4.1.2" + properties-reader "^2.3.0" + ssh-remote-port-forward "^1.0.4" + tar-fs "^3.0.6" + tmp "^0.2.3" + undici "^5.28.4" + text-decoder@^1.1.0: version "1.2.2" resolved "https://registry.yarnpkg.com/text-decoder/-/text-decoder-1.2.2.tgz#63dd2401c43895cecb292e2407db184b50ad60ac" @@ -25266,6 +25699,11 @@ text-table@0.2.0, text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +textextensions@^5.16.0: + version "5.16.0" + resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-5.16.0.tgz#57dd60c305019bba321e848b1fdf0f99bfa59ec1" + integrity sha512-7D/r3s6uPZyU//MCYrX6I14nzauDwJ5CxazouuRGNuvSCihW87ufN6VLoROLCrHg6FblLuJrT6N2BVaPVzqElw== + thenify-all@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" @@ -25349,7 +25787,7 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmp@~0.2.1: +tmp@^0.2.3, tmp@~0.2.1: version "0.2.3" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== @@ -25399,7 +25837,7 @@ tosource@^2.0.0-alpha.3: resolved "https://registry.yarnpkg.com/tosource/-/tosource-2.0.0-alpha.3.tgz#ef385dac9092e009bf25c018838ddaae436daeb6" integrity sha512-KAB2lrSS48y91MzFPFuDg4hLbvDiyTjOVgaK7Erw+5AmZXNq4sFRVn8r6yxSLuNs15PaokrDRpS61ERY9uZOug== -tough-cookie@^4.0.0, tough-cookie@^4.1.2: +tough-cookie@^4.0.0, tough-cookie@^4.1.2, tough-cookie@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== @@ -25682,6 +26120,11 @@ type-fest@^2.19.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== +type-fest@^4.26.1: + version "4.31.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.31.0.tgz#a3de630c96eb77c281b6ba2affa5dae5fb3c326c" + integrity sha512-yCxltHW07Nkhv/1F6wWBr8kz+5BGMfP+RbRSYFnegVb0qV/UMT0G0ElBloPVerqn4M2ZV80Ir1FtCcYv1cT6vQ== + type-is@^1.6.16, type-is@^1.6.4, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -25864,6 +26307,13 @@ undici-types@~6.20.0: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== +undici@^5.28.4: + version "5.28.4" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068" + integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== + dependencies: + "@fastify/busboy" "^2.0.0" + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" @@ -26739,7 +27189,7 @@ wordwrap@^1.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^6.0.1: +wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== @@ -26944,6 +27394,11 @@ yaml@^2.0.0, yaml@^2.2.1: resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.6.1.tgz#42f2b1ba89203f374609572d5349fb8686500773" integrity sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg== +yaml@^2.2.2: + version "2.7.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.0.tgz#aef9bb617a64c937a9a748803786ad8d3ffe1e98" + integrity sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA== + yargs-parser@20.2.4: version "20.2.4" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" @@ -27029,6 +27484,11 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +yoctocolors-cjs@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz#f4b905a840a37506813a7acaa28febe97767a242" + integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA== + yup@^1.0.0: version "1.5.0" resolved "https://registry.yarnpkg.com/yup/-/yup-1.5.0.tgz#1aaa5e453f04424094b9c8a0e5292e0ac2d97246" From c9a67bcf25c0cfcd60cd24d48d7aa6c76ba8b57a Mon Sep 17 00:00:00 2001 From: Michel Leijdekker <111298437+MLEIJDEK@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:10:48 +0100 Subject: [PATCH 2/8] 10-01-25 1310 --- packages/app/package.json | 1 - packages/app/src/App.tsx | 3 +-- packages/app/src/components/Root/Root.tsx | 12 +++++------- .../components/MFTUiWrapper/MFTUiWrapper.tsx | 18 ------------------ .../src/actions/mft/call-mft-api.ts | 2 -- 5 files changed, 6 insertions(+), 30 deletions(-) delete mode 100644 plugins/mft-wrapper/src/components/MFTUiWrapper/MFTUiWrapper.tsx diff --git a/packages/app/package.json b/packages/app/package.json index 5aa4c1e..648eade 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -39,7 +39,6 @@ "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "^4.0.0-alpha.61", - "backstage-plugin-mft-wrapper": "^0.1.0", "history": "^5.0.0", "react": "^18.0.2", "react-dom": "^18.0.2", diff --git a/packages/app/src/App.tsx b/packages/app/src/App.tsx index fc47438..0b73185 100644 --- a/packages/app/src/App.tsx +++ b/packages/app/src/App.tsx @@ -61,7 +61,6 @@ import { catalogImportPlugin } from '@backstage/plugin-catalog-import'; import { Button } from '@material-ui/core'; import { UnifiedThemeProvider } from '@backstage/theme'; import { ImportFlowPage } from '@internal/backstage-plugin-import-flow'; -import { MftWrapperPage } from 'backstage-plugin-mft-wrapper'; export const generateProviders = (providerConfig: string[]): any[] => { const providers: any[] = []; @@ -246,7 +245,7 @@ const routes = ( {settingsPage} } /> - } /> + ); export default app.createRoot( diff --git a/packages/app/src/components/Root/Root.tsx b/packages/app/src/components/Root/Root.tsx index 0fe3749..5878cba 100644 --- a/packages/app/src/components/Root/Root.tsx +++ b/packages/app/src/components/Root/Root.tsx @@ -203,17 +203,15 @@ const SidebarCustom = () => { to="import-flow" text="Import..." /> - {/* End global nav */} - - - }> } - to="/mft-wrapper" - text="Manged File Transfer" + icon={() => } + to="catalog-import" + text="Register..." /> + {/* End global nav */} + } to="/settings" diff --git a/plugins/mft-wrapper/src/components/MFTUiWrapper/MFTUiWrapper.tsx b/plugins/mft-wrapper/src/components/MFTUiWrapper/MFTUiWrapper.tsx deleted file mode 100644 index fdbeb33..0000000 --- a/plugins/mft-wrapper/src/components/MFTUiWrapper/MFTUiWrapper.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import React from 'react'; -import { - Content, - Page, -} from '@backstage/core-components'; - - -export const MFTUiWrapper = () => ( - - - {/*https://108.128.227.221:8443/cfcc/login/login.jsp - - */} - - - -); diff --git a/plugins/scaffolder-backend-module-mft-actions-backend/src/actions/mft/call-mft-api.ts b/plugins/scaffolder-backend-module-mft-actions-backend/src/actions/mft/call-mft-api.ts index d15229a..32c38b9 100644 --- a/plugins/scaffolder-backend-module-mft-actions-backend/src/actions/mft/call-mft-api.ts +++ b/plugins/scaffolder-backend-module-mft-actions-backend/src/actions/mft/call-mft-api.ts @@ -53,8 +53,6 @@ export async function callMFT(config: MFTConfig, endpoint: string, method = 'get return } - - } From 7f9d03ca2a0d917e81e337895d62085b0a631353 Mon Sep 17 00:00:00 2001 From: Michel Leijdekker <111298437+MLEIJDEK@users.noreply.github.com> Date: Fri, 10 Jan 2025 13:40:29 +0100 Subject: [PATCH 3/8] 10-01-25 1340 --- tibco-developer-hub-fork.code-workspace | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 tibco-developer-hub-fork.code-workspace diff --git a/tibco-developer-hub-fork.code-workspace b/tibco-developer-hub-fork.code-workspace new file mode 100644 index 0000000..876a149 --- /dev/null +++ b/tibco-developer-hub-fork.code-workspace @@ -0,0 +1,8 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": {} +} \ No newline at end of file From a858d361efe21651d2c5fa222bd9b2e081b891ec Mon Sep 17 00:00:00 2001 From: Michel Leijdekker <111298437+MLEIJDEK@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:47:57 +0100 Subject: [PATCH 4/8] 10-01-25 1447 --- .../src/actions/mft/call-mft-api.ts | 69 +------------------ 1 file changed, 1 insertion(+), 68 deletions(-) diff --git a/plugins/scaffolder-backend-module-mft-actions-backend/src/actions/mft/call-mft-api.ts b/plugins/scaffolder-backend-module-mft-actions-backend/src/actions/mft/call-mft-api.ts index 32c38b9..c5b596d 100644 --- a/plugins/scaffolder-backend-module-mft-actions-backend/src/actions/mft/call-mft-api.ts +++ b/plugins/scaffolder-backend-module-mft-actions-backend/src/actions/mft/call-mft-api.ts @@ -12,7 +12,6 @@ export interface MFTConfig { password: string; } - export async function callMFT(config: MFTConfig, endpoint: string, method = 'get', data?: any) { let mRes; @@ -142,73 +141,7 @@ export function callMftApi(config: Config) { ctx.logger.info(JSON.stringify(mftResult, null, 2)); ctx.logger.info(DIV); - // const jenkinsJobToken = ctx.input.jobAuthToken || jenkinsJobAuthToken; - // const repoUrl = ctx.input.repoUrl; - // const jenkinsJob = ctx.input.job; - // const jenkinsSecretObj = ctx.input.secret; - // let jenkinsInstructions = ctx.input.jenkinsInstructions || ''; - // - // ctx.logger.info( - // '-------------------------------------------------------------------------------------------', - // ); - // ctx.logger.info( - // '------------------- STARTING THE JENKINS JOB ---------------------------', - // ); - // ctx.logger.info( - // '-------------------------------------------------------------------------------------------', - // ); - // ctx.logger.info(`------ Jenkins BASE URL: ${jenkinsBaseUrl}`); - // ctx.logger.info(`------ Jenkins Username: ${jenkinsUser}`); - // ctx.logger.info(`------ Jenkins Job: ${jenkinsJob}`); - // if (repoUrl) { - // ctx.logger.info(`------ Repo Name: ${repoUrl?.repo}`); - // } - // ctx.logger.info(`---Jenkins Instructions: ${jenkinsInstructions}`); - // ctx.logger.info( - // '-------------------------------------------------------------------------------------------', - // ); - // if (jenkinsSecretObj) { - // for (const sec in jenkinsSecretObj) { - // if (jenkinsSecretObj.hasOwnProperty(sec)) { - // ctx.logger.info('------ Adding secret in jenkinsInstructions ... '); - // const key = Buffer.from(jenkinsSecretEncryptionKey, 'hex'); - // const iv = randomBytes(16); - // const encrypted = encryptSecret(key, iv, jenkinsSecretObj[sec]); - // jenkinsInstructions = `${jenkinsInstructions}&${sec}=${encrypted}`; - // } - // } - // } - // ctx.logger.info(`---Jenkins Instructions: ${jenkinsInstructions}`); - // - // const jenkinsCallURl = generateJenkinsCallURl( - // jenkinsBaseUrl, - // jenkinsJob, - // jenkinsJobToken, - // repoUrl, - // jenkinsInstructions, - // ); - // - // ctx.logger.info( - // '-------------------------------------------------------------------------------------------', - // ); - // ctx.logger.info('---Calling Jenkins URL...'); - // ctx.logger.info( - // '-------------------------------------------------------------------------------------------', - // ); - // - // const jResponse = await axios.get(jenkinsCallURl, { - // auth: { - // username: jenkinsUser, - // password: jenkinsApiKey, - // }, - // }); - // const jobLink = `${jenkinsBaseUrl}/job/${jenkinsJob}/`; - // ctx.logger.info(`------ Job Started: ${jResponse.statusText}`); - // ctx.logger.info(`------ Job Link: ${jobLink}`); - // ctx.logger.info( - // '------------------------------------------------------------------------------------------', - // ); ctx.output('mftResult', mftResult); }, }); -} +} \ No newline at end of file From 7ec96ae98bd58d18eff8b57898154018635173a2 Mon Sep 17 00:00:00 2001 From: Michel Leijdekker <111298437+MLEIJDEK@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:56:04 +0100 Subject: [PATCH 5/8] 10-01-25 1455 --- build_and_push_custom_image_to_dockerhub.sh | 16 +++++ ...ild_and_push_devhub_container_to_docker.sh | 63 +++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 build_and_push_custom_image_to_dockerhub.sh create mode 100644 platform-scripts/local_build_and_push_devhub_container_to_docker.sh diff --git a/build_and_push_custom_image_to_dockerhub.sh b/build_and_push_custom_image_to_dockerhub.sh new file mode 100644 index 0000000..d2fe68e --- /dev/null +++ b/build_and_push_custom_image_to_dockerhub.sh @@ -0,0 +1,16 @@ +echo "Building and push The TIBCO DeveloperHub custom docker image to DockerHub" + +# ---- Configuration --- +# Local AWS profile to use +AWS_PROFILE="mleijdek" +# AWS Region of ECR +AWS_REGION="local" +# AWS Account number +AWS_ACCOUNT_NR="mleijdek" +# Name of the container image repository (in ECR) +CONTAINER_NAME="custdevhub" + + +# Do the build & push to ECR +cd ./platform-scripts +./local_build_and_push_devhub_container_to_docker.sh "$AWS_PROFILE" "$AWS_REGION" "$AWS_ACCOUNT_NR" "$CONTAINER_NAME" \ No newline at end of file diff --git a/platform-scripts/local_build_and_push_devhub_container_to_docker.sh b/platform-scripts/local_build_and_push_devhub_container_to_docker.sh new file mode 100644 index 0000000..7b88a42 --- /dev/null +++ b/platform-scripts/local_build_and_push_devhub_container_to_docker.sh @@ -0,0 +1,63 @@ +#!/bin/bash +set -e +echo "----------------------- Build & push TIBCO Developer Hub container To DockerHub------------------------------"; +start_deploy=$(date +%s) +version=v$(date +%s) +# version=v1679073350 +# https://hub.docker.com/repository/docker/mleijdek/tibco-dh-custom + +# Get Other variables +aws_profile=${1} +aws_region=${2} +aws_account_nr=${3} +container_name=${4} + +echo " aws_account_nr: |$aws_account_nr|"; +echo " aws_profile: |$aws_profile|"; +echo " aws_region: |$aws_region|"; +echo "container image repository: |$container_name|" +echo " version: |$version|" + +# Step 1] Build the code +cd ./../ + +#Step 2] Login to docker: +docker login -u mleijdek -p Tcoa4b4b*oct docker.io +#Step 3] Build container +echo "Building container: |mleijdek/$container_name:$version|" +docker build -f ./Dockerfile -t "mleijdek/$container_name:$version" . +cd ./platform-scripts +#Step 4] Tag container +echo " Tag container: |$version|" +docker tag "mleijdek/$container_name:$version" "mleijdek/$container_name:latest" + +#Step 5] Push container +##docker push "mleijdek/tibco-dh-custom/$container_name:$version" +echo " Push container: |$version|" +docker push "docker.io/mleijdek/$container_name:$version" + +# Command to SSH into the pod +# kubectl exec -n --stdin --tty -- /bin/bash + +# Command to tail the logs of the pod +# kubectl logs -n + + +# Timing +end_deploy=$(date +%s) +runtime_deploy=$((end_deploy-start_deploy)) + +convertsecs() { + ((h=${1}/3600)) + ((m=(${1}%3600)/60)) + ((s=${1}%60)) + printf "%02d Hour(s), %02d Minute(s) and %02d Second(s)\n" $h $m $s +} +# Calculate minutes +echo "-------------------------------------------------------------------------"; +echo " ------ DOCKER CONTAINER IMAGE UPLOADED !! ------"; +echo "-------------------------------------------------------------------------"; +echo "-- It took $(convertsecs $runtime_deploy) for the building of the TIBCO Developer Hub custom docker image and pushing it to ECR..." +echo "-------------------------------------------------------------------------"; +echo "Now install the custom version of the TIBCO Developer Hub in the control plane, using the following container URL..." +echo "Container Image URL: |$aws_account_nr.dkr.ecr.$aws_region.docker.com/$container_name:$version|" From eaabee4e94c5179816fc7a72215f8ea309b8da36 Mon Sep 17 00:00:00 2001 From: Michel Leijdekker <111298437+MLEIJDEK@users.noreply.github.com> Date: Fri, 10 Jan 2025 15:16:42 +0100 Subject: [PATCH 6/8] 10-01-25 1516 --- .../package.json | 6 +- .../src/actions/mft/call-mft-api.ts | 18 +-- yarn.lock | 140 +++++++++++++++++- 3 files changed, 151 insertions(+), 13 deletions(-) diff --git a/plugins/scaffolder-backend-module-mft-actions-backend/package.json b/plugins/scaffolder-backend-module-mft-actions-backend/package.json index c0059bb..563dc7f 100644 --- a/plugins/scaffolder-backend-module-mft-actions-backend/package.json +++ b/plugins/scaffolder-backend-module-mft-actions-backend/package.json @@ -27,6 +27,8 @@ "@backstage/backend-defaults": "^0.4.0", "@backstage/backend-plugin-api": "^0.7.0", "@backstage/config": "^1.2.0", + "@backstage/plugin-scaffolder-node": "^0.6.2", + "axios": "^1.7.9", "express": "^4.17.1", "express-promise-router": "^4.1.0", "node-fetch": "^2.6.7" @@ -38,8 +40,8 @@ "@backstage/plugin-auth-backend-module-guest-provider": "^0.1.7", "@types/express": "*", "@types/supertest": "^2.0.12", - "supertest": "^6.2.4", - "msw": "^2.3.1" + "msw": "^2.3.1", + "supertest": "^6.2.4" }, "files": [ "dist" diff --git a/plugins/scaffolder-backend-module-mft-actions-backend/src/actions/mft/call-mft-api.ts b/plugins/scaffolder-backend-module-mft-actions-backend/src/actions/mft/call-mft-api.ts index c5b596d..1d598a0 100644 --- a/plugins/scaffolder-backend-module-mft-actions-backend/src/actions/mft/call-mft-api.ts +++ b/plugins/scaffolder-backend-module-mft-actions-backend/src/actions/mft/call-mft-api.ts @@ -31,14 +31,14 @@ export async function callMFT(config: MFTConfig, endpoint: string, method = 'get }) } catch (error: any) { config.logger.error('Error calling MFT API...'); - config.logger.error('Status: ' + error.status); + config.logger.error(`Status: ${ error.status}`); if(error.response?.data) { let eMes = error.response.data if(typeof error.response.data === 'object'){ eMes = JSON.stringify(error.response.data, null, 2); - config.logger.error('Error Data: ' + JSON.stringify(error.response.data, null, 2)); + config.logger.error(`Error Data: ${ JSON.stringify(error.response.data, null, 2)}`); } - config.logger.error('Error Data: ' + eMes); + config.logger.error(`Error Data: ${ eMes}`); throw new Error(eMes); } @@ -46,12 +46,12 @@ export async function callMFT(config: MFTConfig, endpoint: string, method = 'get throw error; } - if(mRes.data) { + // if(mRes.data) { return mRes.data; - } else { - return - } - + // } else { + // return + // } + } @@ -126,7 +126,7 @@ export function callMftApi(config: Config) { ctx.logger.info(`--- MFT Endpoint: ${ctx.input.endpoint}`); // TODO: Add method and input data ctx.logger.info(`--- MFT Method: ${ctx.input.method}`); - ctx.logger.info('--- MFT Input: \n' + JSON.stringify(ctx.input.mftInput, null, 2)); + ctx.logger.info(`--- MFT Input: \n${ JSON.stringify(ctx.input.mftInput, null, 2)}`); ctx.logger.info(DIV); ctx.logger.info('--- Calling MFT API...'); diff --git a/yarn.lock b/yarn.lock index 8b6af30..49110af 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2941,6 +2941,22 @@ knex "^3.0.0" luxon "^3.0.0" +"@backstage/backend-plugin-api@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@backstage/backend-plugin-api/-/backend-plugin-api-1.1.0.tgz#bf9d99f24e9164e62ce8b907ed5d5604b520805b" + integrity sha512-JlbiRg9oGSEHZol9f0puJDhiD1C2dNjp3xdR3S6AhHP3o1J9jVkN7tCpyaiyzkapr1bzPjcxwK3LpCDCjLzMdw== + dependencies: + "@backstage/cli-common" "^0.1.15" + "@backstage/config" "^1.3.1" + "@backstage/errors" "^1.2.6" + "@backstage/plugin-auth-node" "^0.5.5" + "@backstage/plugin-permission-common" "^0.8.3" + "@backstage/types" "^1.2.0" + "@types/express" "^4.17.6" + "@types/luxon" "^3.0.0" + knex "^3.0.0" + luxon "^3.0.0" + "@backstage/backend-tasks@^0.5.18", "@backstage/backend-tasks@^0.5.26", "@backstage/backend-tasks@^0.5.27": version "0.5.27" resolved "https://registry.yarnpkg.com/@backstage/backend-tasks/-/backend-tasks-0.5.27.tgz#e79517412135ddc2716152decf8e3fd6296c3a88" @@ -3001,6 +3017,16 @@ cross-fetch "^4.0.0" uri-template "^2.0.0" +"@backstage/catalog-client@^1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@backstage/catalog-client/-/catalog-client-1.9.0.tgz#01ea350488f2f116fc223f7e78ab742e559b733c" + integrity sha512-c7nns3Qju97CNZZCxHZmQr2W8bJmLbLi2axVjtI12J4nrb3T3wCgByjyuAF6hPmUPyYvZLL812X5+SDqMOX5uQ== + dependencies: + "@backstage/catalog-model" "^1.7.2" + "@backstage/errors" "^1.2.6" + cross-fetch "^4.0.0" + uri-template "^2.0.0" + "@backstage/catalog-model@^1.4.4", "@backstage/catalog-model@^1.5.0", "@backstage/catalog-model@^1.6.0", "@backstage/catalog-model@^1.7.0", "@backstage/catalog-model@^1.7.1": version "1.7.1" resolved "https://registry.yarnpkg.com/@backstage/catalog-model/-/catalog-model-1.7.1.tgz#ac158f9e66f559614ea5546f01a66bb03090663b" @@ -3011,6 +3037,16 @@ ajv "^8.10.0" lodash "^4.17.21" +"@backstage/catalog-model@^1.7.2": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@backstage/catalog-model/-/catalog-model-1.7.2.tgz#728ef1a338db72be6f20eb15683bf8f68fe487c6" + integrity sha512-/qyU3hyRakv+tNDMFp5bRpGUYPgJs1xwM+vDN1NIzSTqtJNU3K4heBL1hDlBNlthQ3BgNZVInUEMk589XN/PWA== + dependencies: + "@backstage/errors" "^1.2.6" + "@backstage/types" "^1.2.0" + ajv "^8.10.0" + lodash "^4.17.21" + "@backstage/cli-common@^0.1.13", "@backstage/cli-common@^0.1.14", "@backstage/cli-common@^0.1.15": version "0.1.15" resolved "https://registry.yarnpkg.com/@backstage/cli-common/-/cli-common-0.1.15.tgz#20ea69cdee5025bdbdba38492ec174b1d8d470e3" @@ -3295,6 +3331,15 @@ "@backstage/types" "^1.2.0" ms "^2.1.3" +"@backstage/config@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@backstage/config/-/config-1.3.1.tgz#19669d1c7c923e6f612aa02446226e7f2f71ff0a" + integrity sha512-2WcfyfE06zqhVxuKRj6vrKXBk9iIqLuAMCcu4EZdyW6vmsiPo8t7Y54CB8ma1u3+GJf5hct9p/xiqIjeObyOFA== + dependencies: + "@backstage/errors" "^1.2.6" + "@backstage/types" "^1.2.0" + ms "^2.1.3" + "@backstage/core-app-api@^1.13.0", "@backstage/core-app-api@^1.15.0", "@backstage/core-app-api@^1.15.2": version "1.15.2" resolved "https://registry.yarnpkg.com/@backstage/core-app-api/-/core-app-api-1.15.2.tgz#a31aae0e7a1cfcb2eab163b75b4141a31cff1982" @@ -3495,6 +3540,14 @@ "@backstage/types" "^1.2.0" serialize-error "^8.0.1" +"@backstage/errors@^1.2.6": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@backstage/errors/-/errors-1.2.6.tgz#843a73d03433089f0a3b8a4530a53be013c34c6c" + integrity sha512-Zmpet5DS5670RHXIFUY/fcJbUxRbS1D/l+Ai7V9k3qGQw7TfCrtu5hiGaBAi1EjjJ0xdA8L9Y3Smyc7nDWB/YQ== + dependencies: + "@backstage/types" "^1.2.0" + serialize-error "^8.0.1" + "@backstage/eslint-plugin@^0.1.5", "@backstage/eslint-plugin@^0.1.8": version "0.1.10" resolved "https://registry.yarnpkg.com/@backstage/eslint-plugin/-/eslint-plugin-0.1.10.tgz#8f786ccc3c315dfe9b1cd3aa6d8435fd266a0574" @@ -3613,6 +3666,22 @@ lodash "^4.17.21" luxon "^3.0.0" +"@backstage/integration@^1.16.0": + version "1.16.0" + resolved "https://registry.yarnpkg.com/@backstage/integration/-/integration-1.16.0.tgz#b9acb765e0522d679d211f2b3b55acfae4ba214c" + integrity sha512-YGWOQOC338b9OFGbXbZcnNAjIArUy1YSgUrOxo/L8cPkRhEnIJ7F67PkWl+0V0eSrRiC4Gq/DbE/gB0N/1M4oQ== + dependencies: + "@azure/identity" "^4.0.0" + "@azure/storage-blob" "^12.5.0" + "@backstage/config" "^1.3.1" + "@backstage/errors" "^1.2.6" + "@octokit/auth-app" "^4.0.0" + "@octokit/rest" "^19.0.3" + cross-fetch "^4.0.0" + git-url-parse "^15.0.0" + lodash "^4.17.21" + luxon "^3.0.0" + "@backstage/plugin-api-docs@^0.11.6": version "0.11.11" resolved "https://registry.yarnpkg.com/@backstage/plugin-api-docs/-/plugin-api-docs-0.11.11.tgz#a2e8bdcad7955397b1792ab49ea08c10ef92bf23" @@ -3982,6 +4051,29 @@ zod-to-json-schema "^3.21.4" zod-validation-error "^3.4.0" +"@backstage/plugin-auth-node@^0.5.5": + version "0.5.5" + resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-node/-/plugin-auth-node-0.5.5.tgz#7c0ecea2eb5768aba85889abfe1f5e28bd51ef93" + integrity sha512-unTNpTgYk2OZ73fYkxwyKSj2jreGauNiSB70DYS+vOMLMplc3yv3hlYbEpeczDPwXu1v3ytU19zOWBRN3bPW8A== + dependencies: + "@backstage/backend-common" "^0.25.0" + "@backstage/backend-plugin-api" "^1.1.0" + "@backstage/catalog-client" "^1.9.0" + "@backstage/catalog-model" "^1.7.2" + "@backstage/config" "^1.3.1" + "@backstage/errors" "^1.2.6" + "@backstage/types" "^1.2.0" + "@types/express" "^4.17.6" + "@types/passport" "^1.0.3" + express "^4.17.1" + jose "^5.0.0" + lodash "^4.17.21" + passport "^0.7.0" + winston "^3.2.1" + zod "^3.22.4" + zod-to-json-schema "^3.21.4" + zod-validation-error "^3.4.0" + "@backstage/plugin-auth-react@^0.1.9": version "0.1.9" resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-react/-/plugin-auth-react-0.1.9.tgz#6f420e82a1f6d2719e3685fe462349e0cedefa9e" @@ -4374,6 +4466,19 @@ zod "^3.22.4" zod-to-json-schema "^3.20.4" +"@backstage/plugin-permission-common@^0.8.3": + version "0.8.3" + resolved "https://registry.yarnpkg.com/@backstage/plugin-permission-common/-/plugin-permission-common-0.8.3.tgz#6fae02c69af677373c5565e6f2e768b3c1fc63b5" + integrity sha512-tZiREfcUyHRRxrl3yNOTGSAzv7boocmC9BsTh2uSPuVZfR54cFo3DhW0e2cEMzjQMPerfozvwC7aNPjTKPUfKw== + dependencies: + "@backstage/config" "^1.3.1" + "@backstage/errors" "^1.2.6" + "@backstage/types" "^1.2.0" + cross-fetch "^4.0.0" + uuid "^11.0.0" + zod "^3.22.4" + zod-to-json-schema "^3.20.4" + "@backstage/plugin-permission-node@^0.7.24", "@backstage/plugin-permission-node@^0.7.32": version "0.7.32" resolved "https://registry.yarnpkg.com/@backstage/plugin-permission-node/-/plugin-permission-node-0.7.32.tgz#e462a4c8d6d8021ae5d8ff64bec84e176641fd77" @@ -4662,6 +4767,15 @@ "@backstage/plugin-permission-common" "^0.8.2" "@backstage/types" "^1.2.0" +"@backstage/plugin-scaffolder-common@^1.5.8": + version "1.5.8" + resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder-common/-/plugin-scaffolder-common-1.5.8.tgz#4d55d0c72f7e4a7cf943260d0bd1d36cfcc48c9e" + integrity sha512-LXgzQXqbBKaMf9Ya7IXnE6YEAxNyOCeY931fbXPxEhkjRfmToODITGRCvM4dBDMWTjWwgrWBcFLwd8FIW9S+PA== + dependencies: + "@backstage/catalog-model" "^1.7.2" + "@backstage/plugin-permission-common" "^0.8.3" + "@backstage/types" "^1.2.0" + "@backstage/plugin-scaffolder-node@^0.3.3": version "0.3.3" resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder-node/-/plugin-scaffolder-node-0.3.3.tgz#debce42879e6e8bc0235a856d3dbdbedb0108296" @@ -4751,6 +4865,29 @@ zod "^3.22.4" zod-to-json-schema "^3.20.4" +"@backstage/plugin-scaffolder-node@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder-node/-/plugin-scaffolder-node-0.6.2.tgz#fe8354bb8fd7655762a806dda6691b72eb820b50" + integrity sha512-Q8v2EN3Ze58Hlnghq+MFVB10tfHqRGgyQlwpZh/XfF8e/l/x5ML80vRImhT2OOPWX8fYmhmBR97WE0Hcx5HFdQ== + dependencies: + "@backstage/backend-common" "^0.25.0" + "@backstage/backend-plugin-api" "^1.1.0" + "@backstage/catalog-model" "^1.7.2" + "@backstage/errors" "^1.2.6" + "@backstage/integration" "^1.16.0" + "@backstage/plugin-scaffolder-common" "^1.5.8" + "@backstage/types" "^1.2.0" + concat-stream "^2.0.0" + fs-extra "^11.2.0" + globby "^11.0.0" + isomorphic-git "^1.23.0" + jsonschema "^1.2.6" + p-limit "^3.1.0" + tar "^6.1.12" + winston "^3.2.1" + zod "^3.22.4" + zod-to-json-schema "^3.20.4" + "@backstage/plugin-scaffolder-react@^1.10.0", "@backstage/plugin-scaffolder-react@^1.14.1": version "1.14.1" resolved "https://registry.yarnpkg.com/@backstage/plugin-scaffolder-react/-/plugin-scaffolder-react-1.14.1.tgz#f2ba72cd28b2dc42c4daeaf1fad20cf9b70f7d61" @@ -11701,7 +11838,6 @@ apg-lite@^1.0.3: "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" "@material-ui/lab" "^4.0.0-alpha.61" - backstage-plugin-mft-wrapper "^0.1.0" history "^5.0.0" react "^18.0.2" react-dom "^18.0.2" @@ -12100,7 +12236,7 @@ axios-cached-dns-resolve@0.5.2: pino "^5.12.2" pino-pretty "^2.6.0" -axios@^1.0.0, axios@^1.6.0, axios@^1.6.7, axios@^1.7.4: +axios@^1.0.0, axios@^1.6.0, axios@^1.6.7, axios@^1.7.4, axios@^1.7.9: version "1.7.9" resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a" integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== From 45f33ebb6a150d0799f617430fdef7a6549c6a55 Mon Sep 17 00:00:00 2001 From: Michel Leijdekker <111298437+MLEIJDEK@users.noreply.github.com> Date: Mon, 13 Jan 2025 19:39:47 +0100 Subject: [PATCH 7/8] 13-01-25 1939 --- packages/app/src/components/Root/Root.tsx | 1 - .../scaffolder-backend-module-mft-actions-backend/dev/index.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/packages/app/src/components/Root/Root.tsx b/packages/app/src/components/Root/Root.tsx index 5878cba..7c056fd 100644 --- a/packages/app/src/components/Root/Root.tsx +++ b/packages/app/src/components/Root/Root.tsx @@ -17,7 +17,6 @@ import { TibcoIcon } from '../../icons/TibcoIcon'; import CpIcon from '../../icons/cp.svg'; import { configApiRef, useApi } from '@backstage/core-plugin-api'; import { Link } from 'react-router-dom'; -import TableChartIcon from '@material-ui/icons/TableChart'; const useSidebarLogoStyles = makeStyles({ logoContainer: { diff --git a/plugins/scaffolder-backend-module-mft-actions-backend/dev/index.ts b/plugins/scaffolder-backend-module-mft-actions-backend/dev/index.ts index 9d74c82..504e0c8 100644 --- a/plugins/scaffolder-backend-module-mft-actions-backend/dev/index.ts +++ b/plugins/scaffolder-backend-module-mft-actions-backend/dev/index.ts @@ -4,6 +4,5 @@ const backend = createBackend(); backend.add(import('@backstage/plugin-auth-backend')); backend.add(import('@backstage/plugin-auth-backend-module-guest-provider')); -backend.add(import('../src')); backend.start(); From 0a71e3b7e1e78f28859dd7558ae342f0348079d8 Mon Sep 17 00:00:00 2001 From: Michel Leijdekker <111298437+MLEIJDEK@users.noreply.github.com> Date: Tue, 25 Feb 2025 16:55:50 +0100 Subject: [PATCH 8/8] 25-02-2025 1655 --- tibco-developer-hub-fork.code-workspace | 1 + 1 file changed, 1 insertion(+) diff --git a/tibco-developer-hub-fork.code-workspace b/tibco-developer-hub-fork.code-workspace index 876a149..8641361 100644 --- a/tibco-developer-hub-fork.code-workspace +++ b/tibco-developer-hub-fork.code-workspace @@ -1,6 +1,7 @@ { "folders": [ { + "name": "tibco-developer-hub-fork", "path": "." } ],