From 4845c1ad5d98b3623fb666ff856fd992d39e33b1 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Thu, 19 Sep 2024 21:56:45 -0600 Subject: [PATCH] refactor(multi-server): use rclone for databases backup local and external server --- Dockerfile | 2 +- .../dashboard/application/general/show.tsx | 4 +- apps/dokploy/package.json | 1 - .../services/application/[applicationId].tsx | 4 + .../services/compose/[composeId].tsx | 6 +- .../services/mariadb/[mariadbId].tsx | 5 +- .../[projectId]/services/mongo/[mongoId].tsx | 5 +- .../[projectId]/services/mysql/[mysqlId].tsx | 6 +- .../services/postgres/[postgresId].tsx | 5 +- .../[projectId]/services/redis/[redisId].tsx | 5 +- apps/dokploy/server/api/routers/backup.ts | 48 +- .../dokploy/server/api/routers/destination.ts | 28 +- apps/dokploy/server/utils/backups/mariadb.ts | 92 +- apps/dokploy/server/utils/backups/mongo.ts | 91 +- apps/dokploy/server/utils/backups/mysql.ts | 90 +- apps/dokploy/server/utils/backups/postgres.ts | 98 +- apps/dokploy/server/utils/backups/utils.ts | 75 +- pnpm-lock.yaml | 1210 +---------------- 18 files changed, 161 insertions(+), 1614 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8da1db45..4ea4603e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -42,7 +42,7 @@ COPY --from=build /prod/dokploy/node_modules ./node_modules # Install docker -RUN curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh && rm get-docker.sh +RUN curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh && rm get-docker.sh && curl https://rclone.org/install.sh | sudo bash # Install Nixpacks and tsx # | VERBOSE=1 VERSION=1.21.0 bash diff --git a/apps/dokploy/components/dashboard/application/general/show.tsx b/apps/dokploy/components/dashboard/application/general/show.tsx index 2fafdb38..75b0ba33 100644 --- a/apps/dokploy/components/dashboard/application/general/show.tsx +++ b/apps/dokploy/components/dashboard/application/general/show.tsx @@ -13,6 +13,7 @@ import { StartApplication } from "../start-application"; import { StopApplication } from "../stop-application"; import { DeployApplication } from "./deploy-application"; import { ResetApplication } from "./reset-application"; +import { Badge } from "@/components/ui/badge"; interface Props { applicationId: string; } @@ -75,7 +76,8 @@ export const ShowGeneralApplication = ({ applicationId }: Props) => { Open Terminal - {data?.server?.name || "No Server"} + + {/* {data?.server?.name || "No Server"} */} diff --git a/apps/dokploy/package.json b/apps/dokploy/package.json index c84b3f8c..5a35d110 100644 --- a/apps/dokploy/package.json +++ b/apps/dokploy/package.json @@ -35,7 +35,6 @@ }, "dependencies": { "rotating-file-stream": "3.2.3", - "@aws-sdk/client-s3": "3.515.0", "@codemirror/lang-json": "^6.0.1", "@codemirror/lang-yaml": "^6.1.1", "@codemirror/language": "^6.10.1", diff --git a/apps/dokploy/pages/dashboard/project/[projectId]/services/application/[applicationId].tsx b/apps/dokploy/pages/dashboard/project/[projectId]/services/application/[applicationId].tsx index e7b1c122..5c54b7c4 100644 --- a/apps/dokploy/pages/dashboard/project/[projectId]/services/application/[applicationId].tsx +++ b/apps/dokploy/pages/dashboard/project/[projectId]/services/application/[applicationId].tsx @@ -16,6 +16,7 @@ import { UpdateApplication } from "@/components/dashboard/application/update-app import { DockerMonitoring } from "@/components/dashboard/monitoring/docker/show"; import { ProjectLayout } from "@/components/layouts/project-layout"; import { StatusTooltip } from "@/components/shared/status-tooltip"; +import { Badge } from "@/components/ui/badge"; import { Breadcrumb, BreadcrumbItem, @@ -99,6 +100,9 @@ const Service = ( {data?.appName} +
+ {data?.server?.name || "Dokploy Server"} +
{data?.description && (

diff --git a/apps/dokploy/pages/dashboard/project/[projectId]/services/compose/[composeId].tsx b/apps/dokploy/pages/dashboard/project/[projectId]/services/compose/[composeId].tsx index 2dda00bf..61dfdb92 100644 --- a/apps/dokploy/pages/dashboard/project/[projectId]/services/compose/[composeId].tsx +++ b/apps/dokploy/pages/dashboard/project/[projectId]/services/compose/[composeId].tsx @@ -10,6 +10,7 @@ import { ShowMonitoringCompose } from "@/components/dashboard/compose/monitoring import { UpdateCompose } from "@/components/dashboard/compose/update-compose"; import { ProjectLayout } from "@/components/layouts/project-layout"; import { StatusTooltip } from "@/components/shared/status-tooltip"; +import { Badge } from "@/components/ui/badge"; import { Breadcrumb, BreadcrumbItem, @@ -93,13 +94,16 @@ const Service = ( {data?.appName} - +

+ {data?.server?.name || "Dokploy Server"} +
{data?.description && (

{data?.description}

)} +
diff --git a/apps/dokploy/pages/dashboard/project/[projectId]/services/mariadb/[mariadbId].tsx b/apps/dokploy/pages/dashboard/project/[projectId]/services/mariadb/[mariadbId].tsx index 75be903a..83715394 100644 --- a/apps/dokploy/pages/dashboard/project/[projectId]/services/mariadb/[mariadbId].tsx +++ b/apps/dokploy/pages/dashboard/project/[projectId]/services/mariadb/[mariadbId].tsx @@ -11,6 +11,7 @@ import { DockerMonitoring } from "@/components/dashboard/monitoring/docker/show" import { MariadbIcon } from "@/components/icons/data-tools-icons"; import { ProjectLayout } from "@/components/layouts/project-layout"; import { StatusTooltip } from "@/components/shared/status-tooltip"; +import { Badge } from "@/components/ui/badge"; import { Breadcrumb, BreadcrumbItem, @@ -81,7 +82,9 @@ const Mariadb = ( {data?.appName}
- +
+ {data?.server?.name || "Dokploy Server"} +
{data?.description && (

{data?.description} diff --git a/apps/dokploy/pages/dashboard/project/[projectId]/services/mongo/[mongoId].tsx b/apps/dokploy/pages/dashboard/project/[projectId]/services/mongo/[mongoId].tsx index 2558b22e..cc6753fb 100644 --- a/apps/dokploy/pages/dashboard/project/[projectId]/services/mongo/[mongoId].tsx +++ b/apps/dokploy/pages/dashboard/project/[projectId]/services/mongo/[mongoId].tsx @@ -11,6 +11,7 @@ import { DockerMonitoring } from "@/components/dashboard/monitoring/docker/show" import { MongodbIcon } from "@/components/icons/data-tools-icons"; import { ProjectLayout } from "@/components/layouts/project-layout"; import { StatusTooltip } from "@/components/shared/status-tooltip"; +import { Badge } from "@/components/ui/badge"; import { Breadcrumb, BreadcrumbItem, @@ -82,7 +83,9 @@ const Mongo = ( {data?.appName}

- +
+ {data?.server?.name || "Dokploy Server"} +
{data?.description && (

{data?.description} diff --git a/apps/dokploy/pages/dashboard/project/[projectId]/services/mysql/[mysqlId].tsx b/apps/dokploy/pages/dashboard/project/[projectId]/services/mysql/[mysqlId].tsx index 03a3b5c4..5a119f81 100644 --- a/apps/dokploy/pages/dashboard/project/[projectId]/services/mysql/[mysqlId].tsx +++ b/apps/dokploy/pages/dashboard/project/[projectId]/services/mysql/[mysqlId].tsx @@ -9,9 +9,9 @@ import { ShowGeneralMysql } from "@/components/dashboard/mysql/general/show-gene import { ShowInternalMysqlCredentials } from "@/components/dashboard/mysql/general/show-internal-mysql-credentials"; import { UpdateMysql } from "@/components/dashboard/mysql/update-mysql"; import { MysqlIcon } from "@/components/icons/data-tools-icons"; -import { DashboardLayout } from "@/components/layouts/dashboard-layout"; import { ProjectLayout } from "@/components/layouts/project-layout"; import { StatusTooltip } from "@/components/shared/status-tooltip"; +import { Badge } from "@/components/ui/badge"; import { Breadcrumb, BreadcrumbItem, @@ -81,7 +81,9 @@ const MySql = ( {data?.appName} - +

+ {data?.server?.name || "Dokploy Server"} +
{data?.description && (

{data?.description} diff --git a/apps/dokploy/pages/dashboard/project/[projectId]/services/postgres/[postgresId].tsx b/apps/dokploy/pages/dashboard/project/[projectId]/services/postgres/[postgresId].tsx index 5ce63f51..02c5ee09 100644 --- a/apps/dokploy/pages/dashboard/project/[projectId]/services/postgres/[postgresId].tsx +++ b/apps/dokploy/pages/dashboard/project/[projectId]/services/postgres/[postgresId].tsx @@ -11,6 +11,7 @@ import { UpdatePostgres } from "@/components/dashboard/postgres/update-postgres" import { PostgresqlIcon } from "@/components/icons/data-tools-icons"; import { ProjectLayout } from "@/components/layouts/project-layout"; import { StatusTooltip } from "@/components/shared/status-tooltip"; +import { Badge } from "@/components/ui/badge"; import { Breadcrumb, BreadcrumbItem, @@ -81,7 +82,9 @@ const Postgresql = ( {data?.appName} - +

+ {data?.server?.name || "Dokploy Server"} +
{data?.description && (

{data?.description} diff --git a/apps/dokploy/pages/dashboard/project/[projectId]/services/redis/[redisId].tsx b/apps/dokploy/pages/dashboard/project/[projectId]/services/redis/[redisId].tsx index ae3d23ee..768b637d 100644 --- a/apps/dokploy/pages/dashboard/project/[projectId]/services/redis/[redisId].tsx +++ b/apps/dokploy/pages/dashboard/project/[projectId]/services/redis/[redisId].tsx @@ -10,6 +10,7 @@ import { UpdateRedis } from "@/components/dashboard/redis/update-redis"; import { RedisIcon } from "@/components/icons/data-tools-icons"; import { ProjectLayout } from "@/components/layouts/project-layout"; import { StatusTooltip } from "@/components/shared/status-tooltip"; +import { Badge } from "@/components/ui/badge"; import { Breadcrumb, BreadcrumbItem, @@ -80,7 +81,9 @@ const Redis = ( {data?.appName} - +

+ {data?.server?.name || "Dokploy Server"} +
{data?.description && (

{data?.description} diff --git a/apps/dokploy/server/api/routers/backup.ts b/apps/dokploy/server/api/routers/backup.ts index 1ff06043..84520a4a 100644 --- a/apps/dokploy/server/api/routers/backup.ts +++ b/apps/dokploy/server/api/routers/backup.ts @@ -5,22 +5,10 @@ import { apiRemoveBackup, apiUpdateBackup, } from "@/server/db/schema"; -import { - runMariadbBackup, - runRemoteMariadbBackup, -} from "@/server/utils/backups/mariadb"; -import { - runMongoBackup, - runRemoteMongoBackup, -} from "@/server/utils/backups/mongo"; -import { - runMySqlBackup, - runRemoteMySqlBackup, -} from "@/server/utils/backups/mysql"; -import { - runPostgresBackup, - runRemotePostgresBackup, -} from "@/server/utils/backups/postgres"; +import { runMariadbBackup } from "@/server/utils/backups/mariadb"; +import { runMongoBackup } from "@/server/utils/backups/mongo"; +import { runMySqlBackup } from "@/server/utils/backups/mysql"; +import { runPostgresBackup } from "@/server/utils/backups/postgres"; import { removeScheduleBackup, scheduleBackup, @@ -101,13 +89,7 @@ export const backupRouter = createTRPCRouter({ try { const backup = await findBackupById(input.backupId); const postgres = await findPostgresByBackupId(backup.backupId); - - if (postgres.serverId) { - await runRemotePostgresBackup(postgres, backup); - } else { - await runPostgresBackup(postgres, backup); - } - + await runPostgresBackup(postgres, backup); return true; } catch (error) { console.log(error); @@ -125,11 +107,7 @@ export const backupRouter = createTRPCRouter({ try { const backup = await findBackupById(input.backupId); const mysql = await findMySqlByBackupId(backup.backupId); - if (mysql.serverId) { - await runRemoteMySqlBackup(mysql, backup); - } else { - await runMySqlBackup(mysql, backup); - } + await runMySqlBackup(mysql, backup); return true; } catch (error) { throw new TRPCError({ @@ -145,12 +123,7 @@ export const backupRouter = createTRPCRouter({ try { const backup = await findBackupById(input.backupId); const mariadb = await findMariadbByBackupId(backup.backupId); - - if (mariadb.serverId) { - await runRemoteMariadbBackup(mariadb, backup); - } else { - await runMariadbBackup(mariadb, backup); - } + await runMariadbBackup(mariadb, backup); return true; } catch (error) { throw new TRPCError({ @@ -166,12 +139,7 @@ export const backupRouter = createTRPCRouter({ try { const backup = await findBackupById(input.backupId); const mongo = await findMongoByBackupId(backup.backupId); - - if (mongo.serverId) { - await runRemoteMongoBackup(mongo, backup); - } else { - await runMongoBackup(mongo, backup); - } + await runMongoBackup(mongo, backup); return true; } catch (error) { throw new TRPCError({ diff --git a/apps/dokploy/server/api/routers/destination.ts b/apps/dokploy/server/api/routers/destination.ts index 19e773e5..86b6d316 100644 --- a/apps/dokploy/server/api/routers/destination.ts +++ b/apps/dokploy/server/api/routers/destination.ts @@ -10,7 +10,6 @@ import { apiRemoveDestination, apiUpdateDestination, } from "@/server/db/schema"; -import { HeadBucketCommand, S3Client } from "@aws-sdk/client-s3"; import { TRPCError } from "@trpc/server"; import { findAdmin } from "../services/admin"; import { @@ -19,6 +18,7 @@ import { removeDestinationById, updateDestinationById, } from "../services/destination"; +import { execAsync } from "@/server/utils/process/execAsync"; export const destinationRouter = createTRPCRouter({ create: adminProcedure @@ -39,22 +39,22 @@ export const destinationRouter = createTRPCRouter({ .input(apiCreateDestination) .mutation(async ({ input }) => { const { secretAccessKey, bucket, region, endpoint, accessKey } = input; - const s3Client = new S3Client({ - region: region, - ...(endpoint && { - endpoint: endpoint, - }), - credentials: { - accessKeyId: accessKey, - secretAccessKey: secretAccessKey, - }, - forcePathStyle: true, - }); - const headBucketCommand = new HeadBucketCommand({ Bucket: bucket }); try { - await s3Client.send(headBucketCommand); + const rcloneFlags = [ + // `--s3-provider=Cloudflare`, + `--s3-access-key-id=${accessKey}`, + `--s3-secret-access-key=${secretAccessKey}`, + `--s3-region=${region}`, + `--s3-endpoint=${endpoint}`, + "--s3-no-check-bucket", + "--s3-force-path-style", + ]; + const rcloneDestination = `:s3:${bucket}`; + const rcloneCommand = `rclone ls ${rcloneFlags.join(" ")} "${rcloneDestination}"`; + await execAsync(rcloneCommand); } catch (error) { + console.log(error); throw new TRPCError({ code: "BAD_REQUEST", message: "Error to connect to bucket", diff --git a/apps/dokploy/server/utils/backups/mariadb.ts b/apps/dokploy/server/utils/backups/mariadb.ts index 093af777..84c52047 100644 --- a/apps/dokploy/server/utils/backups/mariadb.ts +++ b/apps/dokploy/server/utils/backups/mariadb.ts @@ -1,4 +1,3 @@ -import { unlink } from "node:fs/promises"; import path from "node:path"; import type { BackupSchedule } from "@/server/api/services/backup"; import type { Mariadb } from "@/server/api/services/mariadb"; @@ -9,7 +8,7 @@ import { } from "../docker/utils"; import { sendDatabaseBackupNotifications } from "../notifications/database-backup"; import { execAsync, execAsyncRemote } from "../process/execAsync"; -import { uploadToS3 } from "./utils"; +import { getS3Credentials } from "./utils"; export const runMariadbBackup = async ( mariadb: Mariadb, @@ -21,81 +20,30 @@ export const runMariadbBackup = async ( const destination = backup.destination; const backupFileName = `${new Date().toISOString()}.sql.gz`; const bucketDestination = path.join(prefix, backupFileName); - const containerPath = `/backup/${backupFileName}`; - const hostPath = `./${backupFileName}`; try { - const { Id: containerId } = await getServiceContainer(appName); - await execAsync( - `docker exec ${containerId} sh -c "rm -rf /backup && mkdir -p /backup"`, - ); + const rcloneFlags = getS3Credentials(destination); + const rcloneDestination = `:s3:${destination.bucket}/${bucketDestination}`; - await execAsync( - `docker exec ${containerId} sh -c "mariadb-dump --user='${databaseUser}' --password='${databasePassword}' --databases ${database} | gzip > ${containerPath}"`, - ); - await execAsync( - `docker cp ${containerId}:/backup/${backupFileName} ${hostPath}`, - ); - await uploadToS3(destination, bucketDestination, hostPath); - - await sendDatabaseBackupNotifications({ - applicationName: name, - projectName: project.name, - databaseType: "mariadb", - type: "success", - }); - } catch (error) { - console.log(error); - await sendDatabaseBackupNotifications({ - applicationName: name, - projectName: project.name, - databaseType: "mariadb", - type: "error", - // @ts-ignore - errorMessage: error?.message || "Error message not provided", - }); - throw error; - } finally { - await unlink(hostPath); - } -}; - -export const runRemoteMariadbBackup = async ( - mariadb: Mariadb, - backup: BackupSchedule, -) => { - const { appName, databasePassword, databaseUser, projectId, name, serverId } = - mariadb; - - if (!serverId) { - throw new Error("Server ID not provided"); - } - const project = await findProjectById(projectId); - const { prefix, database } = backup; - const destination = backup.destination; - const backupFileName = `${new Date().toISOString()}.sql.gz`; - const bucketDestination = path.join(prefix, backupFileName); - const { accessKey, secretAccessKey, bucket, region, endpoint } = destination; - - try { - const { Id: containerId } = await getRemoteServiceContainer( - serverId, - appName, - ); - const mariadbDumpCommand = `docker exec ${containerId} sh -c "mariadb-dump --user='${databaseUser}' --password='${databasePassword}' --databases ${database} | gzip"`; - const rcloneFlags = [ - `--s3-access-key-id=${accessKey}`, - `--s3-secret-access-key=${secretAccessKey}`, - `--s3-region=${region}`, - `--s3-endpoint=${endpoint}`, - "--s3-no-check-bucket", - "--s3-force-path-style", - ]; - - const rcloneDestination = `:s3:${bucket}/${bucketDestination}`; const rcloneCommand = `rclone rcat ${rcloneFlags.join(" ")} "${rcloneDestination}"`; + if (mariadb.serverId) { + const { Id: containerId } = await getRemoteServiceContainer( + mariadb.serverId, + appName, + ); + const mariadbDumpCommand = `docker exec ${containerId} sh -c "mariadb-dump --user='${databaseUser}' --password='${databasePassword}' --databases ${database} | gzip"`; + + await execAsyncRemote( + mariadb.serverId, + `${mariadbDumpCommand} | ${rcloneCommand}`, + ); + } else { + const { Id: containerId } = await getServiceContainer(appName); + const mariadbDumpCommand = `docker exec ${containerId} sh -c "mariadb-dump --user='${databaseUser}' --password='${databasePassword}' --databases ${database} | gzip"`; + + await execAsync(`${mariadbDumpCommand} | ${rcloneCommand}`); + } - await execAsyncRemote(serverId, `${mariadbDumpCommand} | ${rcloneCommand}`); await sendDatabaseBackupNotifications({ applicationName: name, projectName: project.name, diff --git a/apps/dokploy/server/utils/backups/mongo.ts b/apps/dokploy/server/utils/backups/mongo.ts index a3a56dc6..1ce59293 100644 --- a/apps/dokploy/server/utils/backups/mongo.ts +++ b/apps/dokploy/server/utils/backups/mongo.ts @@ -1,4 +1,3 @@ -import { unlink } from "node:fs/promises"; import path from "node:path"; import type { BackupSchedule } from "@/server/api/services/backup"; import type { Mongo } from "@/server/api/services/mongo"; @@ -9,7 +8,7 @@ import { } from "../docker/utils"; import { sendDatabaseBackupNotifications } from "../notifications/database-backup"; import { execAsync, execAsyncRemote } from "../process/execAsync"; -import { uploadToS3 } from "./utils"; +import { getS3Credentials } from "./utils"; // mongodb://mongo:Bqh7AQl-PRbnBu@localhost:27017/?tls=false&directConnection=true export const runMongoBackup = async (mongo: Mongo, backup: BackupSchedule) => { @@ -19,20 +18,28 @@ export const runMongoBackup = async (mongo: Mongo, backup: BackupSchedule) => { const destination = backup.destination; const backupFileName = `${new Date().toISOString()}.dump.gz`; const bucketDestination = path.join(prefix, backupFileName); - const containerPath = `/backup/${backupFileName}`; - const hostPath = `./${backupFileName}`; try { - const { Id: containerId } = await getServiceContainer(appName); - await execAsync( - `docker exec ${containerId} sh -c "rm -rf /backup && mkdir -p /backup"`, - ); + const rcloneFlags = getS3Credentials(destination); + const rcloneDestination = `:s3:${destination.bucket}/${bucketDestination}`; - await execAsync( - `docker exec ${containerId} sh -c "mongodump -d '${database}' -u '${databaseUser}' -p '${databasePassword}' --authenticationDatabase=admin --archive=${containerPath} --gzip"`, - ); - await execAsync(`docker cp ${containerId}:${containerPath} ${hostPath}`); - await uploadToS3(destination, bucketDestination, hostPath); + const rcloneCommand = `rclone rcat ${rcloneFlags.join(" ")} "${rcloneDestination}"`; + if (mongo.serverId) { + const { Id: containerId } = await getRemoteServiceContainer( + mongo.serverId, + appName, + ); + const mongoDumpCommand = `docker exec ${containerId} sh -c "mongodump -d '${database}' -u '${databaseUser}' -p '${databasePassword}' --authenticationDatabase=admin --gzip"`; + + await execAsyncRemote( + mongo.serverId, + `${mongoDumpCommand} | ${rcloneCommand}`, + ); + } else { + const { Id: containerId } = await getServiceContainer(appName); + const mongoDumpCommand = `docker exec ${containerId} sh -c "mongodump -d '${database}' -u '${databaseUser}' -p '${databasePassword}' --authenticationDatabase=admin --gzip"`; + await execAsync(`${mongoDumpCommand} | ${rcloneCommand}`); + } await sendDatabaseBackupNotifications({ applicationName: name, @@ -51,64 +58,6 @@ export const runMongoBackup = async (mongo: Mongo, backup: BackupSchedule) => { errorMessage: error?.message || "Error message not provided", }); throw error; - } finally { - await unlink(hostPath); } }; // mongorestore -d monguito -u mongo -p Bqh7AQl-PRbnBu --authenticationDatabase admin --gzip --archive=2024-04-13T05:03:58.937Z.dump.gz - -export const runRemoteMongoBackup = async ( - mongo: Mongo, - backup: BackupSchedule, -) => { - const { appName, databasePassword, databaseUser, projectId, name, serverId } = - mongo; - - if (!serverId) { - throw new Error("Server ID not provided"); - } - const project = await findProjectById(projectId); - const { prefix, database } = backup; - const destination = backup.destination; - const backupFileName = `${new Date().toISOString()}.dump.gz`; - const bucketDestination = path.join(prefix, backupFileName); - const { accessKey, secretAccessKey, bucket, region, endpoint } = destination; - - try { - const { Id: containerId } = await getRemoteServiceContainer( - serverId, - appName, - ); - const mongoDumpCommand = `docker exec ${containerId} sh -c "mongodump -d '${database}' -u '${databaseUser}' -p '${databasePassword}' --authenticationDatabase=admin --gzip"`; - const rcloneFlags = [ - `--s3-access-key-id=${accessKey}`, - `--s3-secret-access-key=${secretAccessKey}`, - `--s3-region=${region}`, - `--s3-endpoint=${endpoint}`, - "--s3-no-check-bucket", - "--s3-force-path-style", - ]; - - const rcloneDestination = `:s3:${bucket}/${bucketDestination}`; - const rcloneCommand = `rclone rcat ${rcloneFlags.join(" ")} "${rcloneDestination}"`; - - await execAsyncRemote(serverId, `${mongoDumpCommand} | ${rcloneCommand}`); - await sendDatabaseBackupNotifications({ - applicationName: name, - projectName: project.name, - databaseType: "mongodb", - type: "success", - }); - } catch (error) { - console.log(error); - await sendDatabaseBackupNotifications({ - applicationName: name, - projectName: project.name, - databaseType: "mongodb", - type: "error", - // @ts-ignore - errorMessage: error?.message || "Error message not provided", - }); - throw error; - } -}; diff --git a/apps/dokploy/server/utils/backups/mysql.ts b/apps/dokploy/server/utils/backups/mysql.ts index c7e8c9bc..a2de6321 100644 --- a/apps/dokploy/server/utils/backups/mysql.ts +++ b/apps/dokploy/server/utils/backups/mysql.ts @@ -9,7 +9,7 @@ import { } from "../docker/utils"; import { sendDatabaseBackupNotifications } from "../notifications/database-backup"; import { execAsync, execAsyncRemote } from "../process/execAsync"; -import { uploadToS3 } from "./utils"; +import { getS3Credentials } from "./utils"; export const runMySqlBackup = async (mysql: MySql, backup: BackupSchedule) => { const { appName, databaseRootPassword, projectId, name } = mysql; @@ -18,81 +18,29 @@ export const runMySqlBackup = async (mysql: MySql, backup: BackupSchedule) => { const destination = backup.destination; const backupFileName = `${new Date().toISOString()}.sql.gz`; const bucketDestination = path.join(prefix, backupFileName); - const containerPath = `/backup/${backupFileName}`; - const hostPath = `./${backupFileName}`; try { - const { Id: containerId } = await getServiceContainer(appName); + const rcloneFlags = getS3Credentials(destination); + const rcloneDestination = `:s3:${destination.bucket}/${bucketDestination}`; - await execAsync( - `docker exec ${containerId} sh -c "rm -rf /backup && mkdir -p /backup"`, - ); - - await execAsync( - `docker exec ${containerId} sh -c "mysqldump --default-character-set=utf8mb4 -u 'root' --password='${databaseRootPassword}' --single-transaction --no-tablespaces --quick '${database}' | gzip > ${containerPath}"`, - ); - await execAsync( - `docker cp ${containerId}:/backup/${backupFileName} ${hostPath}`, - ); - await uploadToS3(destination, bucketDestination, hostPath); - await sendDatabaseBackupNotifications({ - applicationName: name, - projectName: project.name, - databaseType: "mysql", - type: "success", - }); - } catch (error) { - console.log(error); - await sendDatabaseBackupNotifications({ - applicationName: name, - projectName: project.name, - databaseType: "mysql", - type: "error", - // @ts-ignore - errorMessage: error?.message || "Error message not provided", - }); - throw error; - } finally { - await unlink(hostPath); - } -}; - -export const runRemoteMySqlBackup = async ( - mysql: MySql, - backup: BackupSchedule, -) => { - const { appName, databaseRootPassword, projectId, name, serverId } = mysql; - - if (!serverId) { - throw new Error("Server ID not provided"); - } - const project = await findProjectById(projectId); - const { prefix, database } = backup; - const destination = backup.destination; - const backupFileName = `${new Date().toISOString()}.sql.gz`; - const bucketDestination = path.join(prefix, backupFileName); - const { accessKey, secretAccessKey, bucket, region, endpoint } = destination; - - try { - const { Id: containerId } = await getRemoteServiceContainer( - serverId, - appName, - ); - - const mysqlDumpCommand = `docker exec ${containerId} sh -c "mysqldump --default-character-set=utf8mb4 -u 'root' --password='${databaseRootPassword}' --single-transaction --no-tablespaces --quick '${database}' | gzip"`; - const rcloneFlags = [ - `--s3-access-key-id=${accessKey}`, - `--s3-secret-access-key=${secretAccessKey}`, - `--s3-region=${region}`, - `--s3-endpoint=${endpoint}`, - "--s3-no-check-bucket", - "--s3-force-path-style", - ]; - - const rcloneDestination = `:s3:${bucket}/${bucketDestination}`; const rcloneCommand = `rclone rcat ${rcloneFlags.join(" ")} "${rcloneDestination}"`; + if (mysql.serverId) { + const { Id: containerId } = await getRemoteServiceContainer( + mysql.serverId, + appName, + ); + const mysqlDumpCommand = `docker exec ${containerId} sh -c "mysqldump --default-character-set=utf8mb4 -u 'root' --password='${databaseRootPassword}' --single-transaction --no-tablespaces --quick '${database}' | gzip"`; - await execAsyncRemote(serverId, `${mysqlDumpCommand} | ${rcloneCommand}`); + await execAsyncRemote( + mysql.serverId, + `${mysqlDumpCommand} | ${rcloneCommand}`, + ); + } else { + const { Id: containerId } = await getServiceContainer(appName); + const mysqlDumpCommand = `docker exec ${containerId} sh -c "mysqldump --default-character-set=utf8mb4 -u 'root' --password='${databaseRootPassword}' --single-transaction --no-tablespaces --quick '${database}' | gzip"`; + + await execAsync(`${mysqlDumpCommand} | ${rcloneCommand}`); + } await sendDatabaseBackupNotifications({ applicationName: name, projectName: project.name, diff --git a/apps/dokploy/server/utils/backups/postgres.ts b/apps/dokploy/server/utils/backups/postgres.ts index 38142524..236fec58 100644 --- a/apps/dokploy/server/utils/backups/postgres.ts +++ b/apps/dokploy/server/utils/backups/postgres.ts @@ -1,4 +1,3 @@ -import { unlink } from "node:fs/promises"; import path from "node:path"; import type { BackupSchedule } from "@/server/api/services/backup"; import type { Postgres } from "@/server/api/services/postgres"; @@ -9,7 +8,7 @@ import { } from "../docker/utils"; import { sendDatabaseBackupNotifications } from "../notifications/database-backup"; import { execAsync, execAsyncRemote } from "../process/execAsync"; -import { uploadToS3 } from "./utils"; +import { getS3Credentials } from "./utils"; export const runPostgresBackup = async ( postgres: Postgres, @@ -22,20 +21,29 @@ export const runPostgresBackup = async ( const destination = backup.destination; const backupFileName = `${new Date().toISOString()}.sql.gz`; const bucketDestination = path.join(prefix, backupFileName); - const containerPath = `/backup/${backupFileName}`; - const hostPath = `./${backupFileName}`; try { - const { Id: containerId } = await getServiceContainer(appName); + const rcloneFlags = getS3Credentials(destination); + const rcloneDestination = `:s3:${destination.bucket}/${bucketDestination}`; - await execAsync( - `docker exec ${containerId} /bin/bash -c "rm -rf /backup && mkdir -p /backup"`, - ); - await execAsync( - `docker exec ${containerId} sh -c "pg_dump -Fc --no-acl --no-owner -h localhost -U ${databaseUser} --no-password '${database}' | gzip > ${containerPath}"`, - ); - await execAsync(`docker cp ${containerId}:${containerPath} ${hostPath}`); + const rcloneCommand = `rclone rcat ${rcloneFlags.join(" ")} "${rcloneDestination}"`; + if (postgres.serverId) { + const { Id: containerId } = await getRemoteServiceContainer( + postgres.serverId, + appName, + ); + const pgDumpCommand = `docker exec ${containerId} sh -c "pg_dump -Fc --no-acl --no-owner -h localhost -U ${databaseUser} --no-password '${database}' | gzip"`; + + await execAsyncRemote( + postgres.serverId, + `${pgDumpCommand} | ${rcloneCommand}`, + ); + } else { + const { Id: containerId } = await getServiceContainer(appName); + + const pgDumpCommand = `docker exec ${containerId} sh -c "pg_dump -Fc --no-acl --no-owner -h localhost -U ${databaseUser} --no-password '${database}' | gzip"`; + await execAsync(`${pgDumpCommand} | ${rcloneCommand}`); + } - await uploadToS3(destination, bucketDestination, hostPath); await sendDatabaseBackupNotifications({ applicationName: name, projectName: project.name, @@ -54,72 +62,8 @@ export const runPostgresBackup = async ( throw error; } finally { - await unlink(hostPath); } }; // Restore // /Applications/pgAdmin 4.app/Contents/SharedSupport/pg_restore --host "localhost" --port "5432" --username "mauricio" --no-password --dbname "postgres" --verbose "/Users/mauricio/Downloads/_databases_2024-04-12T07_02_05.234Z.sql" - -export const runRemotePostgresBackup = async ( - postgres: Postgres, - backup: BackupSchedule, -) => { - const { appName, databaseUser, name, projectId, serverId } = postgres; - - if (!serverId) { - throw new Error("Server ID not provided"); - } - const project = await findProjectById(projectId); - - const { prefix, database } = backup; - const destination = backup.destination; - const backupFileName = `${new Date().toISOString()}.sql.gz`; - const bucketDestination = path.join(prefix, backupFileName); - const { accessKey, secretAccessKey, bucket, region, endpoint } = destination; - - try { - const { Id: containerId } = await getRemoteServiceContainer( - serverId, - appName, - ); - const pgDumpCommand = `docker exec ${containerId} sh -c "pg_dump -Fc --no-acl --no-owner -h localhost -U ${databaseUser} --no-password '${database}' | gzip"`; - const rcloneFlags = [ - // `--s3-provider=Cloudflare`, - `--s3-access-key-id=${accessKey}`, - `--s3-secret-access-key=${secretAccessKey}`, - `--s3-region=${region}`, - `--s3-endpoint=${endpoint}`, - "--s3-no-check-bucket", - "--s3-force-path-style", - ]; - - const rcloneDestination = `:s3:${bucket}/${bucketDestination}`; - const rcloneCommand = `rclone rcat ${rcloneFlags.join(" ")} "${rcloneDestination}"`; - - console.log(`${pgDumpCommand} | ${rcloneCommand}`); - await execAsyncRemote( - postgres.serverId, - `${pgDumpCommand} | ${rcloneCommand}`, - ); - await sendDatabaseBackupNotifications({ - applicationName: name, - projectName: project.name, - databaseType: "postgres", - type: "success", - }); - } catch (error) { - console.log(error); - await sendDatabaseBackupNotifications({ - applicationName: name, - projectName: project.name, - databaseType: "postgres", - type: "error", - // @ts-ignore - errorMessage: error?.message || "Error message not provided", - }); - - throw error; - } finally { - } -}; diff --git a/apps/dokploy/server/utils/backups/utils.ts b/apps/dokploy/server/utils/backups/utils.ts index 21030152..d477fce7 100644 --- a/apps/dokploy/server/utils/backups/utils.ts +++ b/apps/dokploy/server/utils/backups/utils.ts @@ -1,67 +1,23 @@ -import { readFile } from "node:fs/promises"; import type { BackupSchedule } from "@/server/api/services/backup"; import type { Destination } from "@/server/api/services/destination"; -import { PutObjectCommand, S3Client } from "@aws-sdk/client-s3"; import { scheduleJob, scheduledJobs } from "node-schedule"; -import { runMariadbBackup, runRemoteMariadbBackup } from "./mariadb"; -import { runMongoBackup, runRemoteMongoBackup } from "./mongo"; -import { runMySqlBackup, runRemoteMySqlBackup } from "./mysql"; -import { runPostgresBackup, runRemotePostgresBackup } from "./postgres"; +import { runMariadbBackup } from "./mariadb"; +import { runMySqlBackup } from "./mysql"; +import { runPostgresBackup } from "./postgres"; +import { runMongoBackup } from "./mongo"; -export const uploadToS3 = async ( - destination: Destination, - destinationBucketPath: string, - filePath: string, -) => { - const { accessKey, secretAccessKey, bucket, region, endpoint } = destination; - - const s3Client = new S3Client({ - region: region, - endpoint: endpoint, - credentials: { - accessKeyId: accessKey, - secretAccessKey: secretAccessKey, - }, - forcePathStyle: true, - }); - - const fileContent = await readFile(filePath); - const command = new PutObjectCommand({ - Bucket: bucket, - Key: destinationBucketPath, - Body: fileContent, - }); - - await s3Client.send(command); -}; export const scheduleBackup = (backup: BackupSchedule) => { const { schedule, backupId, databaseType, postgres, mysql, mongo, mariadb } = backup; scheduleJob(backupId, schedule, async () => { if (databaseType === "postgres" && postgres) { - if (postgres.serverId) { - await runRemotePostgresBackup(postgres, backup); - } else { - await runPostgresBackup(postgres, backup); - } + await runPostgresBackup(postgres, backup); } else if (databaseType === "mysql" && mysql) { - if (mysql.serverId) { - await runRemoteMySqlBackup(mysql, backup); - } else { - await runMySqlBackup(mysql, backup); - } + await runMySqlBackup(mysql, backup); } else if (databaseType === "mongo" && mongo) { - if (mongo.serverId) { - await runRemoteMongoBackup(mongo, backup); - } else { - await runMongoBackup(mongo, backup); - } + await runMongoBackup(mongo, backup); } else if (databaseType === "mariadb" && mariadb) { - if (mariadb.serverId) { - await runRemoteMariadbBackup(mariadb, backup); - } else { - await runMariadbBackup(mariadb, backup); - } + await runMariadbBackup(mariadb, backup); } }); }; @@ -70,3 +26,18 @@ export const removeScheduleBackup = (backupId: string) => { const currentJob = scheduledJobs[backupId]; currentJob?.cancel(); }; + +export const getS3Credentials = (destination: Destination) => { + const { accessKey, secretAccessKey, bucket, region, endpoint } = destination; + const rcloneFlags = [ + // `--s3-provider=Cloudflare`, + `--s3-access-key-id=${accessKey}`, + `--s3-secret-access-key=${secretAccessKey}`, + `--s3-region=${region}`, + `--s3-endpoint=${endpoint}`, + "--s3-no-check-bucket", + "--s3-force-path-style", + ]; + + return rcloneFlags; +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 142d85d0..38557719 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -122,9 +122,6 @@ importers: apps/dokploy: dependencies: - '@aws-sdk/client-s3': - specifier: 3.515.0 - version: 3.515.0 '@codemirror/lang-json': specifier: ^6.0.1 version: 6.0.1 @@ -618,173 +615,6 @@ packages: resolution: {integrity: sha512-9K6xOqeevacvweLGik6LnZCb1fBtCOSIWQs8d096XGeqoLKC33UVMGz9+77Gw44KvbH4pKcQPWo4ZpxkXYj05w==} engines: {node: '>= 16'} - '@aws-crypto/crc32@3.0.0': - resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==} - - '@aws-crypto/crc32c@3.0.0': - resolution: {integrity: sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==} - - '@aws-crypto/ie11-detection@3.0.0': - resolution: {integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==} - - '@aws-crypto/sha1-browser@3.0.0': - resolution: {integrity: sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==} - - '@aws-crypto/sha256-browser@3.0.0': - resolution: {integrity: sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==} - - '@aws-crypto/sha256-js@3.0.0': - resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==} - - '@aws-crypto/supports-web-crypto@3.0.0': - resolution: {integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==} - - '@aws-crypto/util@3.0.0': - resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==} - - '@aws-sdk/client-s3@3.515.0': - resolution: {integrity: sha512-K527n83hrMUdosxOYTzL63wtlJtmN5SUJZnGY1sUR6UyOrnOr9lS6t3AB6BgHqLFRFZJqSqmhflv2cOD7P1UPg==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/client-sso-oidc@3.515.0': - resolution: {integrity: sha512-zACa8LNlPUdlNUBqQRf5a3MfouLNtcBfm84v2c8M976DwJrMGONPe1QjyLLsD38uESQiXiVQRruj/b000iMXNw==} - engines: {node: '>=14.0.0'} - peerDependencies: - '@aws-sdk/credential-provider-node': ^3.515.0 - - '@aws-sdk/client-sso@3.515.0': - resolution: {integrity: sha512-4oGBLW476zmkdN98lAns3bObRNO+DLOfg4MDUSR6l6GYBV/zGAtoy2O/FhwYKgA2L5h2ZtElGopLlk/1Q0ePLw==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/client-sts@3.515.0': - resolution: {integrity: sha512-ScYuvaIDgip3atOJIA1FU2n0gJkEdveu1KrrCPathoUCV5zpK8qQmO/n+Fj/7hKFxeKdFbB+4W4CsJWYH94nlg==} - engines: {node: '>=14.0.0'} - peerDependencies: - '@aws-sdk/credential-provider-node': ^3.515.0 - - '@aws-sdk/core@3.513.0': - resolution: {integrity: sha512-L+9DL4apWuqNKVOMJ8siAuWoRM9rZf9w1iPv8S2o83WO2jVK7E/m+rNW1dFo9HsA5V1ccDl2H2qLXx24HiHmOw==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/credential-provider-env@3.515.0': - resolution: {integrity: sha512-45vxdyqhTAaUMERYVWOziG3K8L2TV9G4ryQS/KZ84o7NAybE9GMdoZRVmGHAO7mJJ1wQiYCM/E+i5b3NW9JfNA==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/credential-provider-http@3.515.0': - resolution: {integrity: sha512-Ba6FXK77vU4WyheiamNjEuTFmir0eAXuJGPO27lBaA8g+V/seXGHScsbOG14aQGDOr2P02OPwKGZrWWA7BFpfQ==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/credential-provider-ini@3.515.0': - resolution: {integrity: sha512-ouDlNZdv2TKeVEA/YZk2+XklTXyAAGdbWnl4IgN9ItaodWI+lZjdIoNC8BAooVH+atIV/cZgoGTGQL7j2TxJ9A==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/credential-provider-node@3.515.0': - resolution: {integrity: sha512-Y4kHSpbxksiCZZNcvsiKUd8Fb2XlyUuONEwqWFNL82ZH6TCCjBGS31wJQCSxBHqYcOL3tiORUEJkoO7uS30uQA==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/credential-provider-process@3.515.0': - resolution: {integrity: sha512-pSjiOA2FM63LHRKNDvEpBRp80FVGT0Mw/gzgbqFXP+sewk0WVonYbEcMDTJptH3VsLPGzqH/DQ1YL/aEIBuXFQ==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/credential-provider-sso@3.515.0': - resolution: {integrity: sha512-j7vUkiSmuhpBvZYoPTRTI4ePnQbiZMFl6TNhg9b9DprC1zHkucsZnhRhqjOVlrw/H6J4jmcPGcHHTZ5WQNI5xQ==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/credential-provider-web-identity@3.515.0': - resolution: {integrity: sha512-66+2g4z3fWwdoGReY8aUHvm6JrKZMTRxjuizljVmMyOBttKPeBYXvUTop/g3ZGUx1f8j+C5qsGK52viYBvtjuQ==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/middleware-bucket-endpoint@3.515.0': - resolution: {integrity: sha512-Vm423j3udFrhKPaKiXtie+6aF05efjX8lhAu5VOruIvbam7olvdWNdkH7sGWlz1ko3CVa7PwOYjGHiOOhxpEOA==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/middleware-expect-continue@3.515.0': - resolution: {integrity: sha512-TWCXulivab4reOMx/vxa/IwnPX78fLwI9NUoAxjsqB6W9qjmSnPD43BSVeGvbbl/YNmgk7XfMbZb6IgxW7RyzA==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/middleware-flexible-checksums@3.515.0': - resolution: {integrity: sha512-ydGjnqNeYlJaAkmQeQnS4pZRAAvzefdm8c234Qh0Fg55xRwHTNLp7uYsdfkTjrdAlj6YIO3Zr6vK6VJ6MGCwug==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/middleware-host-header@3.515.0': - resolution: {integrity: sha512-I1MwWPzdRKM1luvdDdjdGsDjNVPhj9zaIytEchjTY40NcKOg+p2evLD2y69ozzg8pyXK63r8DdvDGOo9QPuh0A==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/middleware-location-constraint@3.515.0': - resolution: {integrity: sha512-ORFC5oijjTJsHhUXy9o52/vl5Irf6e83bE/8tBp+sVVx81+E8zTTWZbysoa41c0B5Ycd0H3wCWutvjdXT16ydQ==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/middleware-logger@3.515.0': - resolution: {integrity: sha512-qXomJzg2m/5seQOxHi/yOXOKfSjwrrJSmEmfwJKJyQgdMbBcjz3Cz0H/1LyC6c5hHm6a/SZgSTzDAbAoUmyL+Q==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/middleware-recursion-detection@3.515.0': - resolution: {integrity: sha512-dokHLbTV3IHRIBrw9mGoxcNTnQsjlm7TpkJhPdGT9T4Mq399EyQo51u6IsVMm07RXLl2Zw7u+u9p+qWBFzmFRA==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/middleware-sdk-s3@3.515.0': - resolution: {integrity: sha512-vB8JwiTEAqm1UT9xfugnCgl0H0dtBLUQQK99JwQEWjHPZmQ3HQuVkykmJRY3X0hzKMEgqXodz0hZOvf3Hq1mvQ==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/middleware-signing@3.515.0': - resolution: {integrity: sha512-SdjCyQCL702I07KhCiBFcoh6+NYtnruHJQIzWwMpBteuYHnCHW1k9uZ6pqacsS+Y6qpAKfTVNpQx2zP2s6QoHA==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/middleware-ssec@3.515.0': - resolution: {integrity: sha512-0qLjKiorosVBzzaV/o7MEyS9xqLLu02qGbP564Z/FZY74JUQEpBNedgveMUbb6lqr85RnOuwZ0GZ0cBRfH2brQ==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/middleware-user-agent@3.515.0': - resolution: {integrity: sha512-nOqZjGA/GkjuJ5fUshec9Fv6HFd7ovOTxMJbw3MfAhqXuVZ6dKF41lpVJ4imNsgyFt3shUg9WDY8zGFjlYMB3g==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/region-config-resolver@3.515.0': - resolution: {integrity: sha512-RIRx9loxMgEAc/r1wPfnfShOuzn4RBi8pPPv6/jhhITEeMnJe6enAh2k5y9DdiVDDgCWZgVFSv0YkAIfzAFsnQ==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/signature-v4-multi-region@3.515.0': - resolution: {integrity: sha512-5lrCn4DSE0zL41k0L6moqcdExZhWdAnV0/oMEagrISzQYoia+aNTEeyVD3xqJhRbEW4gCj3Uoyis6c8muf7b9g==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/token-providers@3.515.0': - resolution: {integrity: sha512-MQuf04rIcTXqwDzmyHSpFPF1fKEzRl64oXtCRUF3ddxTdK6wxXkePfK6wNCuL+GEbEcJAoCtIGIRpzGPJvQjHA==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/types@3.515.0': - resolution: {integrity: sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/util-arn-parser@3.495.0': - resolution: {integrity: sha512-hwdA3XAippSEUxs7jpznwD63YYFR+LtQvlEcebPTgWR9oQgG9TfS+39PUfbnEeje1ICuOrN3lrFqFbmP9uzbMg==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/util-endpoints@3.515.0': - resolution: {integrity: sha512-UJi+jdwcGFV/F7d3+e2aQn5yZOVpDiAgfgNhPnEtgV0WozJ5/ZUeZBgWvSc/K415N4A4D/9cbBc7+I+35qzcDQ==} - engines: {node: '>=14.0.0'} - - '@aws-sdk/util-locate-window@3.568.0': - resolution: {integrity: sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==} - engines: {node: '>=16.0.0'} - - '@aws-sdk/util-user-agent-browser@3.515.0': - resolution: {integrity: sha512-pTWQb0JCafTmLHLDv3Qqs/nAAJghcPdGQIBpsCStb0YEzg3At/dOi2AIQ683yYnXmeOxLXJDzmlsovfVObJScw==} - - '@aws-sdk/util-user-agent-node@3.515.0': - resolution: {integrity: sha512-A/KJ+/HTohHyVXLH+t/bO0Z2mPrQgELbQO8tX+B2nElo8uklj70r5cT7F8ETsI9oOy+HDVpiL5/v45ZgpUOiPg==} - engines: {node: '>=14.0.0'} - peerDependencies: - aws-crt: '>=1.0.0' - peerDependenciesMeta: - aws-crt: - optional: true - - '@aws-sdk/util-utf8-browser@3.259.0': - resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} - - '@aws-sdk/xml-builder@3.496.0': - resolution: {integrity: sha512-GvEjh537IIeOw1ZkZuB37sV12u+ipS5Z1dwjEC/HAvhl5ac23ULtTr1/n+U1gLNN+BAKSWjKiQ2ksj8DiUzeyw==} - engines: {node: '>=14.0.0'} - '@babel/code-frame@7.24.7': resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} @@ -3317,197 +3147,6 @@ packages: resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} - '@smithy/abort-controller@2.2.0': - resolution: {integrity: sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==} - engines: {node: '>=14.0.0'} - - '@smithy/chunked-blob-reader-native@2.2.0': - resolution: {integrity: sha512-VNB5+1oCgX3Fzs072yuRsUoC2N4Zg/LJ11DTxX3+Qu+Paa6AmbIF0E9sc2wthz9Psrk/zcOlTCyuposlIhPjZQ==} - - '@smithy/chunked-blob-reader@2.2.0': - resolution: {integrity: sha512-3GJNvRwXBGdkDZZOGiziVYzDpn4j6zfyULHMDKAGIUo72yHALpE9CbhfQp/XcLNVoc1byfMpn6uW5H2BqPjgaQ==} - - '@smithy/config-resolver@2.2.0': - resolution: {integrity: sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA==} - engines: {node: '>=14.0.0'} - - '@smithy/core@1.4.2': - resolution: {integrity: sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA==} - engines: {node: '>=14.0.0'} - - '@smithy/credential-provider-imds@2.3.0': - resolution: {integrity: sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w==} - engines: {node: '>=14.0.0'} - - '@smithy/eventstream-codec@2.2.0': - resolution: {integrity: sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw==} - - '@smithy/eventstream-serde-browser@2.2.0': - resolution: {integrity: sha512-UaPf8jKbcP71BGiO0CdeLmlg+RhWnlN8ipsMSdwvqBFigl5nil3rHOI/5GE3tfiuX8LvY5Z9N0meuU7Rab7jWw==} - engines: {node: '>=14.0.0'} - - '@smithy/eventstream-serde-config-resolver@2.2.0': - resolution: {integrity: sha512-RHhbTw/JW3+r8QQH7PrganjNCiuiEZmpi6fYUAetFfPLfZ6EkiA08uN3EFfcyKubXQxOwTeJRZSQmDDCdUshaA==} - engines: {node: '>=14.0.0'} - - '@smithy/eventstream-serde-node@2.2.0': - resolution: {integrity: sha512-zpQMtJVqCUMn+pCSFcl9K/RPNtQE0NuMh8sKpCdEHafhwRsjP50Oq/4kMmvxSRy6d8Jslqd8BLvDngrUtmN9iA==} - engines: {node: '>=14.0.0'} - - '@smithy/eventstream-serde-universal@2.2.0': - resolution: {integrity: sha512-pvoe/vvJY0mOpuF84BEtyZoYfbehiFj8KKWk1ds2AT0mTLYFVs+7sBJZmioOFdBXKd48lfrx1vumdPdmGlCLxA==} - engines: {node: '>=14.0.0'} - - '@smithy/fetch-http-handler@2.5.0': - resolution: {integrity: sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==} - - '@smithy/hash-blob-browser@2.2.0': - resolution: {integrity: sha512-SGPoVH8mdXBqrkVCJ1Hd1X7vh1zDXojNN1yZyZTZsCno99hVue9+IYzWDjq/EQDDXxmITB0gBmuyPh8oAZSTcg==} - - '@smithy/hash-node@2.2.0': - resolution: {integrity: sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g==} - engines: {node: '>=14.0.0'} - - '@smithy/hash-stream-node@2.2.0': - resolution: {integrity: sha512-aT+HCATOSRMGpPI7bi7NSsTNVZE/La9IaxLXWoVAYMxHT5hGO3ZOGEMZQg8A6nNL+pdFGtZQtND1eoY084HgHQ==} - engines: {node: '>=14.0.0'} - - '@smithy/invalid-dependency@2.2.0': - resolution: {integrity: sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q==} - - '@smithy/is-array-buffer@2.2.0': - resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} - engines: {node: '>=14.0.0'} - - '@smithy/md5-js@2.2.0': - resolution: {integrity: sha512-M26XTtt9IIusVMOWEAhIvFIr9jYj4ISPPGJROqw6vXngO3IYJCnVVSMFn4Tx1rUTG5BiKJNg9u2nxmBiZC5IlQ==} - - '@smithy/middleware-content-length@2.2.0': - resolution: {integrity: sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ==} - engines: {node: '>=14.0.0'} - - '@smithy/middleware-endpoint@2.5.1': - resolution: {integrity: sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ==} - engines: {node: '>=14.0.0'} - - '@smithy/middleware-retry@2.3.1': - resolution: {integrity: sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA==} - engines: {node: '>=14.0.0'} - - '@smithy/middleware-serde@2.3.0': - resolution: {integrity: sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==} - engines: {node: '>=14.0.0'} - - '@smithy/middleware-stack@2.2.0': - resolution: {integrity: sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==} - engines: {node: '>=14.0.0'} - - '@smithy/node-config-provider@2.3.0': - resolution: {integrity: sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==} - engines: {node: '>=14.0.0'} - - '@smithy/node-http-handler@2.5.0': - resolution: {integrity: sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==} - engines: {node: '>=14.0.0'} - - '@smithy/property-provider@2.2.0': - resolution: {integrity: sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==} - engines: {node: '>=14.0.0'} - - '@smithy/protocol-http@3.3.0': - resolution: {integrity: sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==} - engines: {node: '>=14.0.0'} - - '@smithy/querystring-builder@2.2.0': - resolution: {integrity: sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==} - engines: {node: '>=14.0.0'} - - '@smithy/querystring-parser@2.2.0': - resolution: {integrity: sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==} - engines: {node: '>=14.0.0'} - - '@smithy/service-error-classification@2.1.5': - resolution: {integrity: sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ==} - engines: {node: '>=14.0.0'} - - '@smithy/shared-ini-file-loader@2.4.0': - resolution: {integrity: sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==} - engines: {node: '>=14.0.0'} - - '@smithy/signature-v4@2.3.0': - resolution: {integrity: sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q==} - engines: {node: '>=14.0.0'} - - '@smithy/smithy-client@2.5.1': - resolution: {integrity: sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ==} - engines: {node: '>=14.0.0'} - - '@smithy/types@2.12.0': - resolution: {integrity: sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==} - engines: {node: '>=14.0.0'} - - '@smithy/url-parser@2.2.0': - resolution: {integrity: sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==} - - '@smithy/util-base64@2.3.0': - resolution: {integrity: sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==} - engines: {node: '>=14.0.0'} - - '@smithy/util-body-length-browser@2.2.0': - resolution: {integrity: sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w==} - - '@smithy/util-body-length-node@2.3.0': - resolution: {integrity: sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw==} - engines: {node: '>=14.0.0'} - - '@smithy/util-buffer-from@2.2.0': - resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} - engines: {node: '>=14.0.0'} - - '@smithy/util-config-provider@2.3.0': - resolution: {integrity: sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ==} - engines: {node: '>=14.0.0'} - - '@smithy/util-defaults-mode-browser@2.2.1': - resolution: {integrity: sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw==} - engines: {node: '>= 10.0.0'} - - '@smithy/util-defaults-mode-node@2.3.1': - resolution: {integrity: sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA==} - engines: {node: '>= 10.0.0'} - - '@smithy/util-endpoints@1.2.0': - resolution: {integrity: sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ==} - engines: {node: '>= 14.0.0'} - - '@smithy/util-hex-encoding@2.2.0': - resolution: {integrity: sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==} - engines: {node: '>=14.0.0'} - - '@smithy/util-middleware@2.2.0': - resolution: {integrity: sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==} - engines: {node: '>=14.0.0'} - - '@smithy/util-retry@2.2.0': - resolution: {integrity: sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g==} - engines: {node: '>= 14.0.0'} - - '@smithy/util-stream@2.2.0': - resolution: {integrity: sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==} - engines: {node: '>=14.0.0'} - - '@smithy/util-uri-escape@2.2.0': - resolution: {integrity: sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==} - engines: {node: '>=14.0.0'} - - '@smithy/util-utf8@2.3.0': - resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} - engines: {node: '>=14.0.0'} - - '@smithy/util-waiter@2.2.0': - resolution: {integrity: sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA==} - engines: {node: '>=14.0.0'} - '@swagger-api/apidom-ast@1.0.0-alpha.6': resolution: {integrity: sha512-uzDNIeTLFeITzK7yX9PSsu3dl92rHP/gKMNAlJhmDRr7r+OLr5dCpAzyZ0WvONRxjxR8Otj5LX4AD12+EX32fg==} @@ -4277,9 +3916,6 @@ packages: bottleneck@2.19.5: resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} - bowser@2.11.0: - resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} - boxen@7.1.1: resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==} engines: {node: '>=14.16'} @@ -5371,10 +5007,6 @@ packages: fast-uri@3.0.1: resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} - fast-xml-parser@4.2.5: - resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==} - hasBin: true - fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -7831,9 +7463,6 @@ packages: strip-literal@2.1.0: resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==} - strnum@1.0.5: - resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} - style-mod@4.1.2: resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} @@ -8068,9 +7697,6 @@ packages: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} - tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} @@ -8540,512 +8166,6 @@ snapshots: '@types/json-schema': 7.0.15 js-yaml: 4.1.0 - '@aws-crypto/crc32@3.0.0': - dependencies: - '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.515.0 - tslib: 1.14.1 - - '@aws-crypto/crc32c@3.0.0': - dependencies: - '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.515.0 - tslib: 1.14.1 - - '@aws-crypto/ie11-detection@3.0.0': - dependencies: - tslib: 1.14.1 - - '@aws-crypto/sha1-browser@3.0.0': - dependencies: - '@aws-crypto/ie11-detection': 3.0.0 - '@aws-crypto/supports-web-crypto': 3.0.0 - '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.515.0 - '@aws-sdk/util-locate-window': 3.568.0 - '@aws-sdk/util-utf8-browser': 3.259.0 - tslib: 1.14.1 - - '@aws-crypto/sha256-browser@3.0.0': - dependencies: - '@aws-crypto/ie11-detection': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-crypto/supports-web-crypto': 3.0.0 - '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.515.0 - '@aws-sdk/util-locate-window': 3.568.0 - '@aws-sdk/util-utf8-browser': 3.259.0 - tslib: 1.14.1 - - '@aws-crypto/sha256-js@3.0.0': - dependencies: - '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.515.0 - tslib: 1.14.1 - - '@aws-crypto/supports-web-crypto@3.0.0': - dependencies: - tslib: 1.14.1 - - '@aws-crypto/util@3.0.0': - dependencies: - '@aws-sdk/types': 3.515.0 - '@aws-sdk/util-utf8-browser': 3.259.0 - tslib: 1.14.1 - - '@aws-sdk/client-s3@3.515.0': - dependencies: - '@aws-crypto/sha1-browser': 3.0.0 - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) - '@aws-sdk/core': 3.513.0 - '@aws-sdk/credential-provider-node': 3.515.0 - '@aws-sdk/middleware-bucket-endpoint': 3.515.0 - '@aws-sdk/middleware-expect-continue': 3.515.0 - '@aws-sdk/middleware-flexible-checksums': 3.515.0 - '@aws-sdk/middleware-host-header': 3.515.0 - '@aws-sdk/middleware-location-constraint': 3.515.0 - '@aws-sdk/middleware-logger': 3.515.0 - '@aws-sdk/middleware-recursion-detection': 3.515.0 - '@aws-sdk/middleware-sdk-s3': 3.515.0 - '@aws-sdk/middleware-signing': 3.515.0 - '@aws-sdk/middleware-ssec': 3.515.0 - '@aws-sdk/middleware-user-agent': 3.515.0 - '@aws-sdk/region-config-resolver': 3.515.0 - '@aws-sdk/signature-v4-multi-region': 3.515.0 - '@aws-sdk/types': 3.515.0 - '@aws-sdk/util-endpoints': 3.515.0 - '@aws-sdk/util-user-agent-browser': 3.515.0 - '@aws-sdk/util-user-agent-node': 3.515.0 - '@aws-sdk/xml-builder': 3.496.0 - '@smithy/config-resolver': 2.2.0 - '@smithy/core': 1.4.2 - '@smithy/eventstream-serde-browser': 2.2.0 - '@smithy/eventstream-serde-config-resolver': 2.2.0 - '@smithy/eventstream-serde-node': 2.2.0 - '@smithy/fetch-http-handler': 2.5.0 - '@smithy/hash-blob-browser': 2.2.0 - '@smithy/hash-node': 2.2.0 - '@smithy/hash-stream-node': 2.2.0 - '@smithy/invalid-dependency': 2.2.0 - '@smithy/md5-js': 2.2.0 - '@smithy/middleware-content-length': 2.2.0 - '@smithy/middleware-endpoint': 2.5.1 - '@smithy/middleware-retry': 2.3.1 - '@smithy/middleware-serde': 2.3.0 - '@smithy/middleware-stack': 2.2.0 - '@smithy/node-config-provider': 2.3.0 - '@smithy/node-http-handler': 2.5.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/smithy-client': 2.5.1 - '@smithy/types': 2.12.0 - '@smithy/url-parser': 2.2.0 - '@smithy/util-base64': 2.3.0 - '@smithy/util-body-length-browser': 2.2.0 - '@smithy/util-body-length-node': 2.3.0 - '@smithy/util-defaults-mode-browser': 2.2.1 - '@smithy/util-defaults-mode-node': 2.3.1 - '@smithy/util-endpoints': 1.2.0 - '@smithy/util-retry': 2.2.0 - '@smithy/util-stream': 2.2.0 - '@smithy/util-utf8': 2.3.0 - '@smithy/util-waiter': 2.2.0 - fast-xml-parser: 4.2.5 - tslib: 2.6.3 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-sso-oidc@3.515.0(@aws-sdk/credential-provider-node@3.515.0)': - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) - '@aws-sdk/core': 3.513.0 - '@aws-sdk/credential-provider-node': 3.515.0 - '@aws-sdk/middleware-host-header': 3.515.0 - '@aws-sdk/middleware-logger': 3.515.0 - '@aws-sdk/middleware-recursion-detection': 3.515.0 - '@aws-sdk/middleware-user-agent': 3.515.0 - '@aws-sdk/region-config-resolver': 3.515.0 - '@aws-sdk/types': 3.515.0 - '@aws-sdk/util-endpoints': 3.515.0 - '@aws-sdk/util-user-agent-browser': 3.515.0 - '@aws-sdk/util-user-agent-node': 3.515.0 - '@smithy/config-resolver': 2.2.0 - '@smithy/core': 1.4.2 - '@smithy/fetch-http-handler': 2.5.0 - '@smithy/hash-node': 2.2.0 - '@smithy/invalid-dependency': 2.2.0 - '@smithy/middleware-content-length': 2.2.0 - '@smithy/middleware-endpoint': 2.5.1 - '@smithy/middleware-retry': 2.3.1 - '@smithy/middleware-serde': 2.3.0 - '@smithy/middleware-stack': 2.2.0 - '@smithy/node-config-provider': 2.3.0 - '@smithy/node-http-handler': 2.5.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/smithy-client': 2.5.1 - '@smithy/types': 2.12.0 - '@smithy/url-parser': 2.2.0 - '@smithy/util-base64': 2.3.0 - '@smithy/util-body-length-browser': 2.2.0 - '@smithy/util-body-length-node': 2.3.0 - '@smithy/util-defaults-mode-browser': 2.2.1 - '@smithy/util-defaults-mode-node': 2.3.1 - '@smithy/util-endpoints': 1.2.0 - '@smithy/util-middleware': 2.2.0 - '@smithy/util-retry': 2.2.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.6.3 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-sso@3.515.0': - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/core': 3.513.0 - '@aws-sdk/middleware-host-header': 3.515.0 - '@aws-sdk/middleware-logger': 3.515.0 - '@aws-sdk/middleware-recursion-detection': 3.515.0 - '@aws-sdk/middleware-user-agent': 3.515.0 - '@aws-sdk/region-config-resolver': 3.515.0 - '@aws-sdk/types': 3.515.0 - '@aws-sdk/util-endpoints': 3.515.0 - '@aws-sdk/util-user-agent-browser': 3.515.0 - '@aws-sdk/util-user-agent-node': 3.515.0 - '@smithy/config-resolver': 2.2.0 - '@smithy/core': 1.4.2 - '@smithy/fetch-http-handler': 2.5.0 - '@smithy/hash-node': 2.2.0 - '@smithy/invalid-dependency': 2.2.0 - '@smithy/middleware-content-length': 2.2.0 - '@smithy/middleware-endpoint': 2.5.1 - '@smithy/middleware-retry': 2.3.1 - '@smithy/middleware-serde': 2.3.0 - '@smithy/middleware-stack': 2.2.0 - '@smithy/node-config-provider': 2.3.0 - '@smithy/node-http-handler': 2.5.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/smithy-client': 2.5.1 - '@smithy/types': 2.12.0 - '@smithy/url-parser': 2.2.0 - '@smithy/util-base64': 2.3.0 - '@smithy/util-body-length-browser': 2.2.0 - '@smithy/util-body-length-node': 2.3.0 - '@smithy/util-defaults-mode-browser': 2.2.1 - '@smithy/util-defaults-mode-node': 2.3.1 - '@smithy/util-endpoints': 1.2.0 - '@smithy/util-middleware': 2.2.0 - '@smithy/util-retry': 2.2.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.6.3 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-sts@3.515.0(@aws-sdk/credential-provider-node@3.515.0)': - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/core': 3.513.0 - '@aws-sdk/credential-provider-node': 3.515.0 - '@aws-sdk/middleware-host-header': 3.515.0 - '@aws-sdk/middleware-logger': 3.515.0 - '@aws-sdk/middleware-recursion-detection': 3.515.0 - '@aws-sdk/middleware-user-agent': 3.515.0 - '@aws-sdk/region-config-resolver': 3.515.0 - '@aws-sdk/types': 3.515.0 - '@aws-sdk/util-endpoints': 3.515.0 - '@aws-sdk/util-user-agent-browser': 3.515.0 - '@aws-sdk/util-user-agent-node': 3.515.0 - '@smithy/config-resolver': 2.2.0 - '@smithy/core': 1.4.2 - '@smithy/fetch-http-handler': 2.5.0 - '@smithy/hash-node': 2.2.0 - '@smithy/invalid-dependency': 2.2.0 - '@smithy/middleware-content-length': 2.2.0 - '@smithy/middleware-endpoint': 2.5.1 - '@smithy/middleware-retry': 2.3.1 - '@smithy/middleware-serde': 2.3.0 - '@smithy/middleware-stack': 2.2.0 - '@smithy/node-config-provider': 2.3.0 - '@smithy/node-http-handler': 2.5.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/smithy-client': 2.5.1 - '@smithy/types': 2.12.0 - '@smithy/url-parser': 2.2.0 - '@smithy/util-base64': 2.3.0 - '@smithy/util-body-length-browser': 2.2.0 - '@smithy/util-body-length-node': 2.3.0 - '@smithy/util-defaults-mode-browser': 2.2.1 - '@smithy/util-defaults-mode-node': 2.3.1 - '@smithy/util-endpoints': 1.2.0 - '@smithy/util-middleware': 2.2.0 - '@smithy/util-retry': 2.2.0 - '@smithy/util-utf8': 2.3.0 - fast-xml-parser: 4.2.5 - tslib: 2.6.3 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/core@3.513.0': - dependencies: - '@smithy/core': 1.4.2 - '@smithy/protocol-http': 3.3.0 - '@smithy/signature-v4': 2.3.0 - '@smithy/smithy-client': 2.5.1 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@aws-sdk/credential-provider-env@3.515.0': - dependencies: - '@aws-sdk/types': 3.515.0 - '@smithy/property-provider': 2.2.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@aws-sdk/credential-provider-http@3.515.0': - dependencies: - '@aws-sdk/types': 3.515.0 - '@smithy/fetch-http-handler': 2.5.0 - '@smithy/node-http-handler': 2.5.0 - '@smithy/property-provider': 2.2.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/smithy-client': 2.5.1 - '@smithy/types': 2.12.0 - '@smithy/util-stream': 2.2.0 - tslib: 2.6.3 - - '@aws-sdk/credential-provider-ini@3.515.0(@aws-sdk/credential-provider-node@3.515.0)': - dependencies: - '@aws-sdk/client-sts': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) - '@aws-sdk/credential-provider-env': 3.515.0 - '@aws-sdk/credential-provider-process': 3.515.0 - '@aws-sdk/credential-provider-sso': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) - '@aws-sdk/credential-provider-web-identity': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) - '@aws-sdk/types': 3.515.0 - '@smithy/credential-provider-imds': 2.3.0 - '@smithy/property-provider': 2.2.0 - '@smithy/shared-ini-file-loader': 2.4.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - transitivePeerDependencies: - - '@aws-sdk/credential-provider-node' - - aws-crt - - '@aws-sdk/credential-provider-node@3.515.0': - dependencies: - '@aws-sdk/credential-provider-env': 3.515.0 - '@aws-sdk/credential-provider-http': 3.515.0 - '@aws-sdk/credential-provider-ini': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) - '@aws-sdk/credential-provider-process': 3.515.0 - '@aws-sdk/credential-provider-sso': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) - '@aws-sdk/credential-provider-web-identity': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) - '@aws-sdk/types': 3.515.0 - '@smithy/credential-provider-imds': 2.3.0 - '@smithy/property-provider': 2.2.0 - '@smithy/shared-ini-file-loader': 2.4.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-process@3.515.0': - dependencies: - '@aws-sdk/types': 3.515.0 - '@smithy/property-provider': 2.2.0 - '@smithy/shared-ini-file-loader': 2.4.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@aws-sdk/credential-provider-sso@3.515.0(@aws-sdk/credential-provider-node@3.515.0)': - dependencies: - '@aws-sdk/client-sso': 3.515.0 - '@aws-sdk/token-providers': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) - '@aws-sdk/types': 3.515.0 - '@smithy/property-provider': 2.2.0 - '@smithy/shared-ini-file-loader': 2.4.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - transitivePeerDependencies: - - '@aws-sdk/credential-provider-node' - - aws-crt - - '@aws-sdk/credential-provider-web-identity@3.515.0(@aws-sdk/credential-provider-node@3.515.0)': - dependencies: - '@aws-sdk/client-sts': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) - '@aws-sdk/types': 3.515.0 - '@smithy/property-provider': 2.2.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - transitivePeerDependencies: - - '@aws-sdk/credential-provider-node' - - aws-crt - - '@aws-sdk/middleware-bucket-endpoint@3.515.0': - dependencies: - '@aws-sdk/types': 3.515.0 - '@aws-sdk/util-arn-parser': 3.495.0 - '@smithy/node-config-provider': 2.3.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/types': 2.12.0 - '@smithy/util-config-provider': 2.3.0 - tslib: 2.6.3 - - '@aws-sdk/middleware-expect-continue@3.515.0': - dependencies: - '@aws-sdk/types': 3.515.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@aws-sdk/middleware-flexible-checksums@3.515.0': - dependencies: - '@aws-crypto/crc32': 3.0.0 - '@aws-crypto/crc32c': 3.0.0 - '@aws-sdk/types': 3.515.0 - '@smithy/is-array-buffer': 2.2.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/types': 2.12.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.6.3 - - '@aws-sdk/middleware-host-header@3.515.0': - dependencies: - '@aws-sdk/types': 3.515.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@aws-sdk/middleware-location-constraint@3.515.0': - dependencies: - '@aws-sdk/types': 3.515.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@aws-sdk/middleware-logger@3.515.0': - dependencies: - '@aws-sdk/types': 3.515.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@aws-sdk/middleware-recursion-detection@3.515.0': - dependencies: - '@aws-sdk/types': 3.515.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@aws-sdk/middleware-sdk-s3@3.515.0': - dependencies: - '@aws-sdk/types': 3.515.0 - '@aws-sdk/util-arn-parser': 3.495.0 - '@smithy/node-config-provider': 2.3.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/signature-v4': 2.3.0 - '@smithy/smithy-client': 2.5.1 - '@smithy/types': 2.12.0 - '@smithy/util-config-provider': 2.3.0 - tslib: 2.6.3 - - '@aws-sdk/middleware-signing@3.515.0': - dependencies: - '@aws-sdk/types': 3.515.0 - '@smithy/property-provider': 2.2.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/signature-v4': 2.3.0 - '@smithy/types': 2.12.0 - '@smithy/util-middleware': 2.2.0 - tslib: 2.6.3 - - '@aws-sdk/middleware-ssec@3.515.0': - dependencies: - '@aws-sdk/types': 3.515.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@aws-sdk/middleware-user-agent@3.515.0': - dependencies: - '@aws-sdk/types': 3.515.0 - '@aws-sdk/util-endpoints': 3.515.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@aws-sdk/region-config-resolver@3.515.0': - dependencies: - '@aws-sdk/types': 3.515.0 - '@smithy/node-config-provider': 2.3.0 - '@smithy/types': 2.12.0 - '@smithy/util-config-provider': 2.3.0 - '@smithy/util-middleware': 2.2.0 - tslib: 2.6.3 - - '@aws-sdk/signature-v4-multi-region@3.515.0': - dependencies: - '@aws-sdk/middleware-sdk-s3': 3.515.0 - '@aws-sdk/types': 3.515.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/signature-v4': 2.3.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@aws-sdk/token-providers@3.515.0(@aws-sdk/credential-provider-node@3.515.0)': - dependencies: - '@aws-sdk/client-sso-oidc': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) - '@aws-sdk/types': 3.515.0 - '@smithy/property-provider': 2.2.0 - '@smithy/shared-ini-file-loader': 2.4.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - transitivePeerDependencies: - - '@aws-sdk/credential-provider-node' - - aws-crt - - '@aws-sdk/types@3.515.0': - dependencies: - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@aws-sdk/util-arn-parser@3.495.0': - dependencies: - tslib: 2.6.3 - - '@aws-sdk/util-endpoints@3.515.0': - dependencies: - '@aws-sdk/types': 3.515.0 - '@smithy/types': 2.12.0 - '@smithy/util-endpoints': 1.2.0 - tslib: 2.6.3 - - '@aws-sdk/util-locate-window@3.568.0': - dependencies: - tslib: 2.6.3 - - '@aws-sdk/util-user-agent-browser@3.515.0': - dependencies: - '@aws-sdk/types': 3.515.0 - '@smithy/types': 2.12.0 - bowser: 2.11.0 - tslib: 2.6.3 - - '@aws-sdk/util-user-agent-node@3.515.0': - dependencies: - '@aws-sdk/types': 3.515.0 - '@smithy/node-config-provider': 2.3.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@aws-sdk/util-utf8-browser@3.259.0': - dependencies: - tslib: 2.6.3 - - '@aws-sdk/xml-builder@3.496.0': - dependencies: - '@smithy/types': 2.12.0 - tslib: 2.6.3 - '@babel/code-frame@7.24.7': dependencies: '@babel/highlight': 7.24.7 @@ -11675,320 +10795,6 @@ snapshots: '@sindresorhus/merge-streams@2.3.0': {} - '@smithy/abort-controller@2.2.0': - dependencies: - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@smithy/chunked-blob-reader-native@2.2.0': - dependencies: - '@smithy/util-base64': 2.3.0 - tslib: 2.6.3 - - '@smithy/chunked-blob-reader@2.2.0': - dependencies: - tslib: 2.6.3 - - '@smithy/config-resolver@2.2.0': - dependencies: - '@smithy/node-config-provider': 2.3.0 - '@smithy/types': 2.12.0 - '@smithy/util-config-provider': 2.3.0 - '@smithy/util-middleware': 2.2.0 - tslib: 2.6.3 - - '@smithy/core@1.4.2': - dependencies: - '@smithy/middleware-endpoint': 2.5.1 - '@smithy/middleware-retry': 2.3.1 - '@smithy/middleware-serde': 2.3.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/smithy-client': 2.5.1 - '@smithy/types': 2.12.0 - '@smithy/util-middleware': 2.2.0 - tslib: 2.6.3 - - '@smithy/credential-provider-imds@2.3.0': - dependencies: - '@smithy/node-config-provider': 2.3.0 - '@smithy/property-provider': 2.2.0 - '@smithy/types': 2.12.0 - '@smithy/url-parser': 2.2.0 - tslib: 2.6.3 - - '@smithy/eventstream-codec@2.2.0': - dependencies: - '@aws-crypto/crc32': 3.0.0 - '@smithy/types': 2.12.0 - '@smithy/util-hex-encoding': 2.2.0 - tslib: 2.6.3 - - '@smithy/eventstream-serde-browser@2.2.0': - dependencies: - '@smithy/eventstream-serde-universal': 2.2.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@smithy/eventstream-serde-config-resolver@2.2.0': - dependencies: - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@smithy/eventstream-serde-node@2.2.0': - dependencies: - '@smithy/eventstream-serde-universal': 2.2.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@smithy/eventstream-serde-universal@2.2.0': - dependencies: - '@smithy/eventstream-codec': 2.2.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@smithy/fetch-http-handler@2.5.0': - dependencies: - '@smithy/protocol-http': 3.3.0 - '@smithy/querystring-builder': 2.2.0 - '@smithy/types': 2.12.0 - '@smithy/util-base64': 2.3.0 - tslib: 2.6.3 - - '@smithy/hash-blob-browser@2.2.0': - dependencies: - '@smithy/chunked-blob-reader': 2.2.0 - '@smithy/chunked-blob-reader-native': 2.2.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@smithy/hash-node@2.2.0': - dependencies: - '@smithy/types': 2.12.0 - '@smithy/util-buffer-from': 2.2.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.6.3 - - '@smithy/hash-stream-node@2.2.0': - dependencies: - '@smithy/types': 2.12.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.6.3 - - '@smithy/invalid-dependency@2.2.0': - dependencies: - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@smithy/is-array-buffer@2.2.0': - dependencies: - tslib: 2.6.3 - - '@smithy/md5-js@2.2.0': - dependencies: - '@smithy/types': 2.12.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.6.3 - - '@smithy/middleware-content-length@2.2.0': - dependencies: - '@smithy/protocol-http': 3.3.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@smithy/middleware-endpoint@2.5.1': - dependencies: - '@smithy/middleware-serde': 2.3.0 - '@smithy/node-config-provider': 2.3.0 - '@smithy/shared-ini-file-loader': 2.4.0 - '@smithy/types': 2.12.0 - '@smithy/url-parser': 2.2.0 - '@smithy/util-middleware': 2.2.0 - tslib: 2.6.3 - - '@smithy/middleware-retry@2.3.1': - dependencies: - '@smithy/node-config-provider': 2.3.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/service-error-classification': 2.1.5 - '@smithy/smithy-client': 2.5.1 - '@smithy/types': 2.12.0 - '@smithy/util-middleware': 2.2.0 - '@smithy/util-retry': 2.2.0 - tslib: 2.6.3 - uuid: 9.0.1 - - '@smithy/middleware-serde@2.3.0': - dependencies: - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@smithy/middleware-stack@2.2.0': - dependencies: - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@smithy/node-config-provider@2.3.0': - dependencies: - '@smithy/property-provider': 2.2.0 - '@smithy/shared-ini-file-loader': 2.4.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@smithy/node-http-handler@2.5.0': - dependencies: - '@smithy/abort-controller': 2.2.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/querystring-builder': 2.2.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@smithy/property-provider@2.2.0': - dependencies: - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@smithy/protocol-http@3.3.0': - dependencies: - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@smithy/querystring-builder@2.2.0': - dependencies: - '@smithy/types': 2.12.0 - '@smithy/util-uri-escape': 2.2.0 - tslib: 2.6.3 - - '@smithy/querystring-parser@2.2.0': - dependencies: - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@smithy/service-error-classification@2.1.5': - dependencies: - '@smithy/types': 2.12.0 - - '@smithy/shared-ini-file-loader@2.4.0': - dependencies: - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@smithy/signature-v4@2.3.0': - dependencies: - '@smithy/is-array-buffer': 2.2.0 - '@smithy/types': 2.12.0 - '@smithy/util-hex-encoding': 2.2.0 - '@smithy/util-middleware': 2.2.0 - '@smithy/util-uri-escape': 2.2.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.6.3 - - '@smithy/smithy-client@2.5.1': - dependencies: - '@smithy/middleware-endpoint': 2.5.1 - '@smithy/middleware-stack': 2.2.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/types': 2.12.0 - '@smithy/util-stream': 2.2.0 - tslib: 2.6.3 - - '@smithy/types@2.12.0': - dependencies: - tslib: 2.6.3 - - '@smithy/url-parser@2.2.0': - dependencies: - '@smithy/querystring-parser': 2.2.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@smithy/util-base64@2.3.0': - dependencies: - '@smithy/util-buffer-from': 2.2.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.6.3 - - '@smithy/util-body-length-browser@2.2.0': - dependencies: - tslib: 2.6.3 - - '@smithy/util-body-length-node@2.3.0': - dependencies: - tslib: 2.6.3 - - '@smithy/util-buffer-from@2.2.0': - dependencies: - '@smithy/is-array-buffer': 2.2.0 - tslib: 2.6.3 - - '@smithy/util-config-provider@2.3.0': - dependencies: - tslib: 2.6.3 - - '@smithy/util-defaults-mode-browser@2.2.1': - dependencies: - '@smithy/property-provider': 2.2.0 - '@smithy/smithy-client': 2.5.1 - '@smithy/types': 2.12.0 - bowser: 2.11.0 - tslib: 2.6.3 - - '@smithy/util-defaults-mode-node@2.3.1': - dependencies: - '@smithy/config-resolver': 2.2.0 - '@smithy/credential-provider-imds': 2.3.0 - '@smithy/node-config-provider': 2.3.0 - '@smithy/property-provider': 2.2.0 - '@smithy/smithy-client': 2.5.1 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@smithy/util-endpoints@1.2.0': - dependencies: - '@smithy/node-config-provider': 2.3.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@smithy/util-hex-encoding@2.2.0': - dependencies: - tslib: 2.6.3 - - '@smithy/util-middleware@2.2.0': - dependencies: - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@smithy/util-retry@2.2.0': - dependencies: - '@smithy/service-error-classification': 2.1.5 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - - '@smithy/util-stream@2.2.0': - dependencies: - '@smithy/fetch-http-handler': 2.5.0 - '@smithy/node-http-handler': 2.5.0 - '@smithy/types': 2.12.0 - '@smithy/util-base64': 2.3.0 - '@smithy/util-buffer-from': 2.2.0 - '@smithy/util-hex-encoding': 2.2.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.6.3 - - '@smithy/util-uri-escape@2.2.0': - dependencies: - tslib: 2.6.3 - - '@smithy/util-utf8@2.3.0': - dependencies: - '@smithy/util-buffer-from': 2.2.0 - tslib: 2.6.3 - - '@smithy/util-waiter@2.2.0': - dependencies: - '@smithy/abort-controller': 2.2.0 - '@smithy/types': 2.12.0 - tslib: 2.6.3 - '@swagger-api/apidom-ast@1.0.0-alpha.6': dependencies: '@babel/runtime-corejs3': 7.25.0 @@ -13124,8 +11930,6 @@ snapshots: bottleneck@2.19.5: {} - bowser@2.11.0: {} - boxen@7.1.1: dependencies: ansi-align: 3.0.1 @@ -14110,7 +12914,7 @@ snapshots: eslint: 8.45.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.45.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.45.0))(eslint@8.45.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.45.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.45.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.45.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.45.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.45.0))(eslint@8.45.0))(eslint@8.45.0) eslint-plugin-jsx-a11y: 6.9.0(eslint@8.45.0) eslint-plugin-react: 7.35.0(eslint@8.45.0) eslint-plugin-react-hooks: 5.0.0-canary-7118f5dd7-20230705(eslint@8.45.0) @@ -14134,7 +12938,7 @@ snapshots: enhanced-resolve: 5.17.1 eslint: 8.45.0 eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.45.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.45.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.45.0))(eslint@8.45.0))(eslint@8.45.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.45.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.45.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.45.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.45.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.45.0))(eslint@8.45.0))(eslint@8.45.0) fast-glob: 3.3.2 get-tsconfig: 4.7.5 is-core-module: 2.15.0 @@ -14156,7 +12960,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.45.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.45.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.45.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.45.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.45.0))(eslint@8.45.0))(eslint@8.45.0): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 @@ -14406,10 +13210,6 @@ snapshots: fast-uri@3.0.1: {} - fast-xml-parser@4.2.5: - dependencies: - strnum: 1.0.5 - fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -17334,8 +16134,6 @@ snapshots: dependencies: js-tokens: 9.0.0 - strnum@1.0.5: {} - style-mod@4.1.2: {} style-to-object@0.4.4: @@ -17651,8 +16449,6 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tslib@1.14.1: {} - tslib@2.6.3: {} tsx@4.15.7: