From edf591e7683ae71591443efafa1fa91719a96148 Mon Sep 17 00:00:00 2001 From: khaya-zulu <39437696+khaya-zulu@users.noreply.github.com> Date: Tue, 23 Jul 2024 17:13:41 +0200 Subject: [PATCH 1/6] share --- .snaplet/config.json | 7 + cli/package.json | 3 + .../snapshot/actions/share/debugShare.ts | 3 + .../actions/share/shareAction.handler.ts | 71 + .../snapshot/actions/share/shareAction.ts | 42 + .../actions/share/shareAction.types.ts | 6 + .../share/steps/encryptAndCompressTables.ts | 31 + .../actions/share/steps/encryptionPayload.ts | 15 + .../share/steps/getOrCreateSnapshot.ts | 33 + cli/src/commands/snapshot/snapshotCommand.ts | 2 + cli/src/components/needs/index.ts | 4 +- cli/src/components/needs/s3Settings.ts | 34 + cli/src/lib/s3.ts | 109 ++ cli/src/lib/snapshotStorage.ts | 107 +- .../src/config/projectConfig/projectConfig.ts | 13 + packages/sdk/src/snapshot/crypto.ts | 1 + packages/sdk/src/snapshot/snapshot.ts | 2 +- yarn.lock | 1732 +++++++++++++++-- 18 files changed, 1980 insertions(+), 235 deletions(-) create mode 100644 .snaplet/config.json create mode 100644 cli/src/commands/snapshot/actions/share/debugShare.ts create mode 100644 cli/src/commands/snapshot/actions/share/shareAction.handler.ts create mode 100644 cli/src/commands/snapshot/actions/share/shareAction.ts create mode 100644 cli/src/commands/snapshot/actions/share/shareAction.types.ts create mode 100644 cli/src/commands/snapshot/actions/share/steps/encryptAndCompressTables.ts create mode 100644 cli/src/commands/snapshot/actions/share/steps/encryptionPayload.ts create mode 100644 cli/src/commands/snapshot/actions/share/steps/getOrCreateSnapshot.ts create mode 100644 cli/src/components/needs/s3Settings.ts create mode 100644 cli/src/lib/s3.ts diff --git a/.snaplet/config.json b/.snaplet/config.json new file mode 100644 index 0000000..be7c51f --- /dev/null +++ b/.snaplet/config.json @@ -0,0 +1,7 @@ +{ + "targetDatabaseUrl": "postgresql://postgres@localhost:5432/snaplet_development", + "sourceDatabaseUrl": "postgresql://postgres@localhost:5432/snaplet_development", + "s3Bucket": "snaplet", + "s3Region": "weur", + "s3Endpoint": "https://5a66eef6188e04b4072ce0caa4a95e24.r2.cloudflarestorage.com" +} \ No newline at end of file diff --git a/cli/package.json b/cli/package.json index 1d7682b..bfd56de 100644 --- a/cli/package.json +++ b/cli/package.json @@ -16,6 +16,9 @@ "snaplet_internal": "bin/snaplet" }, "dependencies": { + "@aws-sdk/client-s3": "^3.614.0", + "@aws-sdk/lib-storage": "3.616.0", + "@paralleldrive/cuid2": "^2.2.2", "@sentry/integrations": "7.48.0", "@sentry/node": "7.48.0", "@snaplet/copycat": "5.0.0", diff --git a/cli/src/commands/snapshot/actions/share/debugShare.ts b/cli/src/commands/snapshot/actions/share/debugShare.ts new file mode 100644 index 0000000..4eaf366 --- /dev/null +++ b/cli/src/commands/snapshot/actions/share/debugShare.ts @@ -0,0 +1,3 @@ +import { xdebug } from '@snaplet/sdk/cli' + +export const xdebugShare = xdebug.extend('share') // snaplet:share diff --git a/cli/src/commands/snapshot/actions/share/shareAction.handler.ts b/cli/src/commands/snapshot/actions/share/shareAction.handler.ts new file mode 100644 index 0000000..ebd6954 --- /dev/null +++ b/cli/src/commands/snapshot/actions/share/shareAction.handler.ts @@ -0,0 +1,71 @@ +import { getHosts } from '~/lib/hosts/hosts.js' +import type { CommandOptions } from './shareAction.types.js' +import { findSnapshotSummary } from '~/components/findSnapshotSummary.js' +import { exitWithError } from '~/lib/exit.js' +import { encryptAndCompressTables } from './steps/encryptAndCompressTables.js' +import SnapshotCache from '../restore/lib/SnapshotCache.js' + +import { encryptionPayloadStep } from './steps/encryptionPayload.js' +import { activity } from '~/lib/spinner.js' +import { uploadSnapshot } from '~/lib/snapshotStorage.js' +import { getOrCreateSnapshotIdStep } from './steps/getOrCreateSnapshot.js' +import { needs } from '~/components/needs/index.js' + +export async function handler(options: CommandOptions) { + const { snapshotName: startsWith, latest, tags, noEncrypt } = await options + + const isEncryptionSelected = noEncrypt === false + + const settings = await needs.s3Settings() + + const hosts = await getHosts({ only: ['local', 'abspath'] }) + const sss = await findSnapshotSummary( + { + latest, + startsWith, + tags, + }, + hosts + ) + + if (!sss.cachePath) { + console.log('Error: A snapshot must be cached in order to be shared') + await exitWithError('UNHANDLED_ERROR') + + return + } + + const cache = new SnapshotCache(sss) + + /** + * if encryption is enabled, read the user config and + * generate a payload we use to encrypt a snapshot. + * */ + const encryptionPayload = isEncryptionSelected + ? await encryptionPayloadStep() + : undefined + + await encryptAndCompressTables({ paths: cache.paths, encryptionPayload }) + + /** + * upload snapshot to object storage + */ + const snapshotId = await getOrCreateSnapshotIdStep(sss) + const act = activity('Snapshot', 'Uploading...') + + try { + await uploadSnapshot(snapshotId, cache.paths, { + onProgress: async (percentage) => { + act.info(`Uploading... [${percentage}%]`) + }, + settings, + }) + } catch (err: any) { + act.fail(err?.message) + await exitWithError('SNAPSHOT_CAPTURE_INCOMPLETE_ERROR') + } finally { + act.done() + } + + console.log(`Snapshot "${sss.summary.name}" shared`) +} diff --git a/cli/src/commands/snapshot/actions/share/shareAction.ts b/cli/src/commands/snapshot/actions/share/shareAction.ts new file mode 100644 index 0000000..c1ae57e --- /dev/null +++ b/cli/src/commands/snapshot/actions/share/shareAction.ts @@ -0,0 +1,42 @@ +import type { CommandModule } from 'yargs' + +import type { CommandOptions } from './shareAction.types.js' + +export const shareAction: CommandModule = { + command: 'share [snapshot-name|snapshot-path]', + describe: 'Share a snapshot', + aliases: ['upload'], + // @ts-expect-error + builder: (y) => { + return y + .parserConfiguration({ + 'boolean-negation': false, + }) + .option('no-encrypt', { + type: 'boolean', + default: false, + describe: 'Disable encryption', + }) + .positional('snapshot-name|snapshot-path', { + describe: 'the unique name or path of the snapshot', + type: 'string', + }) + .option('tags', { + describe: 'Filter snapshots by tags', + type: 'array', + coerce: (values: string[]) => { + return values.flatMap((v) => v.split(',')) + }, + default: [], + }) + .option('latest', { + type: 'boolean', + default: false, + describe: 'Share the latest snapshot', + }) + }, + async handler(props) { + const { handler } = await import('./shareAction.handler.js') + await handler(props) + }, +} diff --git a/cli/src/commands/snapshot/actions/share/shareAction.types.ts b/cli/src/commands/snapshot/actions/share/shareAction.types.ts new file mode 100644 index 0000000..6cb1cc7 --- /dev/null +++ b/cli/src/commands/snapshot/actions/share/shareAction.types.ts @@ -0,0 +1,6 @@ +export type CommandOptions = { + latest: boolean + tags: string[] + snapshotName?: string + noEncrypt: boolean +} diff --git a/cli/src/commands/snapshot/actions/share/steps/encryptAndCompressTables.ts b/cli/src/commands/snapshot/actions/share/steps/encryptAndCompressTables.ts new file mode 100644 index 0000000..51a4f94 --- /dev/null +++ b/cli/src/commands/snapshot/actions/share/steps/encryptAndCompressTables.ts @@ -0,0 +1,31 @@ +import fs from 'fs-extra' +import fg from 'fast-glob' +import pMap from 'p-map' + +import { + EncryptionPayload, + encryptAndCompressSnapshotFile, + getSnapshotFilePaths, +} from '@snaplet/sdk/cli' + +export const encryptAndCompressTables = async ({ + paths, + encryptionPayload, +}: { + paths: ReturnType + encryptionPayload?: EncryptionPayload +}) => { + const csvFiles = await fg(`*.csv`, { cwd: paths.tables, absolute: true }) + + await pMap( + csvFiles, + async (p) => { + await encryptAndCompressSnapshotFile(p, encryptionPayload) + await fs.unlink(p) + }, + // There is no need to try to compress/encrypt all files at once it'll just blow up the CPU usage + // and create tons of child processes for nothing. Doing it in batches of 2 ensure that one single + // long table won't block the other smaller ones. + { concurrency: 2 } + ) +} diff --git a/cli/src/commands/snapshot/actions/share/steps/encryptionPayload.ts b/cli/src/commands/snapshot/actions/share/steps/encryptionPayload.ts new file mode 100644 index 0000000..455778a --- /dev/null +++ b/cli/src/commands/snapshot/actions/share/steps/encryptionPayload.ts @@ -0,0 +1,15 @@ +import { generateEncryptionPayload } from "@snaplet/sdk/cli"; +import { config } from "~/lib/config.js"; +import { exitWithError } from "~/lib/exit.js"; + +export const encryptionPayloadStep = async () => { + const { publicKey } = await config.getProject() + if (publicKey) { + return generateEncryptionPayload(publicKey) + } else { + console.log( + 'Error: Encryption is enabled, but public key not found, please use the "--no-encrypt" or create a public key' + ) + await exitWithError('CONFIG_PK_NOT_FOUND') + } +} \ No newline at end of file diff --git a/cli/src/commands/snapshot/actions/share/steps/getOrCreateSnapshot.ts b/cli/src/commands/snapshot/actions/share/steps/getOrCreateSnapshot.ts new file mode 100644 index 0000000..baf2604 --- /dev/null +++ b/cli/src/commands/snapshot/actions/share/steps/getOrCreateSnapshot.ts @@ -0,0 +1,33 @@ +import { createId } from '@paralleldrive/cuid2' +import SnapshotCache from '../../restore/lib/SnapshotCache.js' +import { CloudSnapshot } from '@snaplet/sdk/api' + +import { checkIfObjectExists, generateSnapshotFileKey } from '~/lib/s3.js' + +/** + * create using cuid2, thats if a snapshot summary does not + * have a `snaphotId` field, if the `snapshotId` field is present + * use it to check if the snapshot hasn't already been downloaded + */ +export const getOrCreateSnapshotIdStep = async ( + snapshotSummary: CloudSnapshot, + options?: { skipFileCheck: boolean } +) => { + const snapshotId = snapshotSummary.summary.snapshotId + + if (snapshotId) { + const snaphotSummaryKey = generateSnapshotFileKey({ + filename: 'summary.json', + snapshotId, + }) + + const isFileFound = await checkIfObjectExists(snaphotSummaryKey, snaphotSummaryKey) + if (isFileFound) { + // warn the user, and ask if they happy to proceed. + } + + return snapshotId + } else { + return createId() + } +} diff --git a/cli/src/commands/snapshot/snapshotCommand.ts b/cli/src/commands/snapshot/snapshotCommand.ts index afbcacd..0e66b17 100644 --- a/cli/src/commands/snapshot/snapshotCommand.ts +++ b/cli/src/commands/snapshot/snapshotCommand.ts @@ -5,6 +5,7 @@ import { captureAction } from './actions/capture/captureAction.js' import { listAction } from './actions/list/listAction.js' import { restoreAction } from './actions/restore/restoreAction.js' import { updateAction } from './actions/update/updateAction.js' +import { shareAction } from "./actions/share/shareAction.js" export const snapshotCommand: CommandModule = { command: 'snapshot [action]', @@ -16,6 +17,7 @@ export const snapshotCommand: CommandModule = { .command(listAction) .command(restoreAction) .command(updateAction) + .command(shareAction) .showHelpOnFail(true) }, handler() { diff --git a/cli/src/components/needs/index.ts b/cli/src/components/needs/index.ts index 50aaa43..a870296 100644 --- a/cli/src/components/needs/index.ts +++ b/cli/src/components/needs/index.ts @@ -4,7 +4,7 @@ import { databaseConnection } from './databaseConnection.js' import { pgDumpCliCommand } from './pgDumpCliCommand.js' import { privateKey } from './privateKey.js' import { publicKey } from './publicKey.js' -import { project } from './project.js' +import { s3Settings } from './s3Settings.js' import { projectId } from './projectId.js' import { projectPathsV2 } from './projectPaths.js' import { snapshot } from './snapshot.js' @@ -18,7 +18,7 @@ export const needs = { pgDumpCliCommand, privateKey, publicKey, - project, + s3Settings, projectId, snapshot, validConnectionString, diff --git a/cli/src/components/needs/s3Settings.ts b/cli/src/components/needs/s3Settings.ts new file mode 100644 index 0000000..0f161e4 --- /dev/null +++ b/cli/src/components/needs/s3Settings.ts @@ -0,0 +1,34 @@ +import { config } from '~/lib/config.js' +import { exitWithError } from '~/lib/exit.js' +import { S3Settings } from '~/lib/s3.js' +import { activity } from '~/lib/spinner.js' +import { logError } from './logError.js' + +export const s3Settings = async () => { + const act = activity('S3 settings', 'fetching...') + const project = await config.getProject() + + const partialSettings: Partial = { + accessKeyId: project.s3AccessKeyId, + bucket: project.s3Bucket, + region: project.s3Region, + secretAccessKey: project.s3SecretAccessKey, + endpoint: project.s3Endpoint + } + + const { region, endpoint, ...required } = partialSettings + const undefinedEntries = Object.entries(required).filter(([k, v]) => !v) + + if (undefinedEntries.length === 0) { + act.done() + return partialSettings as S3Settings + } else { + act.fail('Failed') + logError([ + `Snaplet requires parameters to pass into S3`, + `Missing keys: ${undefinedEntries.map(([k, v]) => k).join(', ')}`, + ]) + + return exitWithError('CONFIG_INVALID_SCHEMA') + } +} diff --git a/cli/src/lib/s3.ts b/cli/src/lib/s3.ts new file mode 100644 index 0000000..1930951 --- /dev/null +++ b/cli/src/lib/s3.ts @@ -0,0 +1,109 @@ +import { S3Client, HeadObjectCommand } from '@aws-sdk/client-s3' +import { Upload } from '@aws-sdk/lib-storage' +import { type Readable } from 'stream' +import { config } from './config.js' + +export type S3Settings = { + region?: string + endpoint?: string + accessKeyId: string + secretAccessKey: string + bucket: string +} + +export type StorageFile = string | Uint8Array | Buffer | Readable + +type UploadToBucketOptions = { + filename: string + snapshotId: string + settings?: S3Settings + bytes: number +} + +let cachedClient: S3Client + +/** + * initialize an S3 client, if no config + * is passed in, we will return the existing + * instance or throw an error. + * */ +export const initClient = (settings?: S3Settings) => { + if (!config && !cachedClient) { + throw new Error('No instance found, pass in config to create one.') + } + + if (settings) { + return new S3Client({ + region: settings.region, + endpoint: settings.endpoint, + credentials: { + accessKeyId: settings.accessKeyId, + secretAccessKey: settings.secretAccessKey, + }, + }) + } else { + return cachedClient + } +} + +export const uploadFileToBucket = async ( + body: StorageFile, + options: UploadToBucketOptions, + hooks: { + onProgress: (progress: number) => void + } +) => { + const { filename, snapshotId, settings } = options + + const parellelUpload = new Upload({ + client: initClient(settings), + params: { + Bucket: settings?.bucket, + Key: generateSnapshotFileKey({ filename, snapshotId }), + Body: body, + }, + tags: [ + // TODO_BEFORE_REVIEW: pass in the Snapshot tags + ], + }) + + let progress = 0 + + parellelUpload.on('httpUploadProgress', (ev) => { + if (ev.loaded && ev.total) { + progress = (ev.loaded / ev.total) * 100 + } + hooks.onProgress(progress) + }) + await parellelUpload.done() +} + +/** + * use snapshot file information to generate object key name + */ +export const generateSnapshotFileKey = (options: { + filename: string + snapshotId: string +}) => { + return `${options.snapshotId}/${options.filename}` +} + +/** + * using a bucket and key, check if the object exists + * if an error is thrown, it will return false. + * */ +export const checkIfObjectExists = async ( + bucket: string, + key: string, + settings?: S3Settings +) => { + try { + const client = await initClient(settings) + await client.send(new HeadObjectCommand({ Bucket: bucket, Key: key })) + + return true + } catch (err) { + console.log(err) + return false + } +} diff --git a/cli/src/lib/snapshotStorage.ts b/cli/src/lib/snapshotStorage.ts index df1f93f..f2603ba 100644 --- a/cli/src/lib/snapshotStorage.ts +++ b/cli/src/lib/snapshotStorage.ts @@ -1,5 +1,3 @@ -import type { StorageFile } from 'api' - import fs from 'fs-extra' import fg from 'fast-glob' import got from 'got-cjs' @@ -11,8 +9,8 @@ import pMap from 'p-map' import { getSnapshotFilePaths } from '@snaplet/sdk/cli' import md5File from 'md5-file' -import { trpc } from '~/lib/trpc.js' import { xdebugShare } from '~/commands/snapshot/actions/share/debugShare.js' +import { S3Settings, StorageFile, uploadFileToBucket } from '~/lib/s3.js' const pipeline = util.promisify(stream.pipeline) @@ -129,39 +127,46 @@ const download = async (options: { return destination } -export async function uploadSnapshot(options: { - snapshotId: string - paths: ReturnType - onProgress: (percentage: string) => Promise -}) { +export async function uploadSnapshot( + snapshotId: string, + paths: ReturnType, + options: { + settings: S3Settings + onProgress: (percentage: string) => Promise + } +) { xdebugShare('Starting snapshot upload') - const { snapshotId, paths, onProgress } = options + const { settings, onProgress } = options + // find all the snapshot files const uploadFiles = await fg('**/*.*', { cwd: paths.base, absolute: true }) xdebugShare('Files to upload: ') xdebugShare(uploadFiles) + + // const totalBytes = getTotalSize(uploadFiles) xdebugShare(`Total bytes to upload: ${totalBytes}`) - let transferred = 0 - let lastPercentage = '0' - const newFiles: Record = {} + /** percentage of files uploaded */ + let currentTotalProgress = '0' + for (const filepath of uploadFiles) { const filename = path.relative(paths.base, filepath) xdebugShare(`Uploading file: ${filename}`) - const result = await upload({ + + await uploadFile(settings, { snapshotId, filename, filepath, - async onProgress(e) { + async onProgress(p) { xdebugShare(`Uploading file ${filename} progress`) try { - transferred += e.delta - const percentage = ((transferred / totalBytes) * 100).toFixed(2) - // context(peterp, 12 July 2023): We submit duplicate events. - if (lastPercentage !== percentage) { - await onProgress(percentage) - lastPercentage = percentage + const newProgress = p.toFixed(2) + + // prevent duplicate events + if (currentTotalProgress !== newProgress) { + await onProgress(newProgress) + currentTotalProgress = newProgress } } catch (e) { xdebugShare(`Uploading file ${filename} progress error`) @@ -170,31 +175,22 @@ export async function uploadSnapshot(options: { xdebugShare(`Uploading progress finished`) }, }) + xdebugShare(`Uploaded file: ${filename}`) - newFiles[filename] = result } - - await trpc.snapshot.storage.append.mutate({ - snapshotId, - files: newFiles, - }) } -const upload = async (options: { - filepath: string - filename: string - snapshotId: string - onProgress: (e: createProgressStream.Progress) => Promise -}): Promise => { +const uploadFile = async ( + settings: S3Settings, + options: { + filepath: string + filename: string + snapshotId: string + onProgress: (progres: number) => void + } +) => { const { filepath, filename, snapshotId, onProgress } = options - const { uploadURL, bucketKey } = await trpc.snapshot.storage.uploadURL.mutate( - { - snapshotId, - filename, - } - ) - const md5 = md5File.sync(filepath) const bytes = fs.statSync(filepath).size // If bytes are above 5GB, warn the user that the upload might fail @@ -206,22 +202,31 @@ const upload = async (options: { More information: https://docs.snaplet.dev/core-concepts/capture#subset-data `) } - const progress = createProgressStream({ length: bytes, time: 100 }) - progress.on('progress', onProgress) - xdebugShare(`upload file ${filepath} to ${uploadURL} with ${bytes} bytes`) + xdebugShare(`upload file ${filepath} with ${bytes} bytes`) xdebugShare( - `upload file ${filepath} to ${uploadURL} on bucket ${bucketKey} with ${md5} md5` + `upload file ${filepath} on bucket ${settings.bucket} with ${md5} md5` ) - await got.put({ - url: uploadURL, - body: fs.createReadStream(filepath).pipe(progress), - headers: { - 'Content-Length': bytes.toString(), + + // + xdebugShare(`upload file ${filepath} completed`) + + const fileToUpload = fs.createReadStream(filepath) + await uploadFileToBucket( + fileToUpload, + { + bytes, + filename, + snapshotId, + settings, }, - }) - xdebugShare(`upload file ${filepath} to ${uploadURL} completed`) - return { bytes, filename, bucketKey, md5 } + { + onProgress, + } + ) + + xdebugShare(`upload file ${filepath} completed`) + return { bytes, filename, bucketKey: settings.bucket, md5 } } const getTotalSize = (files: string[]) => { diff --git a/packages/sdk/src/config/projectConfig/projectConfig.ts b/packages/sdk/src/config/projectConfig/projectConfig.ts index 7cc95cf..ac8fd1b 100644 --- a/packages/sdk/src/config/projectConfig/projectConfig.ts +++ b/packages/sdk/src/config/projectConfig/projectConfig.ts @@ -14,6 +14,13 @@ const projectConfigSchema = z.object({ sourceDatabaseUrl: z.string().optional(), targetDatabaseUrl: z.string().optional(), publicKey: z.string().optional(), + + // s3 + s3Bucket: z.string().optional(), + s3Region: z.string().optional(), + s3AccessKeyId: z.string().optional(), + s3SecretAccessKey: z.string().optional(), + s3Endpoint: z.string().optional() }) const getProjectConfigOverrides = () => ({ @@ -24,6 +31,12 @@ const getProjectConfigOverrides = () => ({ targetDatabaseUrl: process.env.SNAPLET_TARGET_DATABASE_URL ?? process.env.SNAPLET_DATABASE_URL, publicKey: process.env.SNAPLET_PUBLIC_KEY, + // s3 + s3Bucket: process.env.SNAPLET_S3_BUCKET, + s3Region: process.env.SNAPLET_S3_REGION, + s3AccessKeyId: process.env.SNAPLET_S3_ACCESS_KEY_ID, + s3SecretAccessKey: process.env.SNAPLET_S3_SECRET_ACCESS_KEY, + s3Endpint: process.env.SNAPLET_S3_ENDPOINT }) export type ProjectConfig = z.infer diff --git a/packages/sdk/src/snapshot/crypto.ts b/packages/sdk/src/snapshot/crypto.ts index dc1048c..fadbd21 100644 --- a/packages/sdk/src/snapshot/crypto.ts +++ b/packages/sdk/src/snapshot/crypto.ts @@ -23,6 +23,7 @@ export interface EncryptionPayload { const DEFAULT_ENCRYPT_VERSION = '2' +// TODO_BEFORE_REVIEW: use the latest version of encryption export const generateEncryptionPayload = ( publicKey: string, version?: EncryptVersion diff --git a/packages/sdk/src/snapshot/snapshot.ts b/packages/sdk/src/snapshot/snapshot.ts index ed9418d..5b64e62 100644 --- a/packages/sdk/src/snapshot/snapshot.ts +++ b/packages/sdk/src/snapshot/snapshot.ts @@ -21,7 +21,7 @@ export type CloudSnapshot = { status: keyof typeof SnapshotStatus summary: SnapshotSummary /** - * Locally cached snapshots are stored on the disk. + * Locally cached snapshots are stored on the disk (e.g. .snaplet/snapshots/**). * This is the absolute path to the cached snapshot. * Populated by `LocalSnapshotHost` */ diff --git a/yarn.lock b/yarn.lock index c4e7455..d00dc79 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15,6 +15,710 @@ __metadata: languageName: node linkType: hard +"@aws-crypto/crc32@npm:5.2.0": + version: 5.2.0 + resolution: "@aws-crypto/crc32@npm:5.2.0" + dependencies: + "@aws-crypto/util": ^5.2.0 + "@aws-sdk/types": ^3.222.0 + tslib: ^2.6.2 + checksum: 1ddf7ec3fccf106205ff2476d90ae1d6625eabd47752f689c761b71e41fe451962b7a1c9ed25fe54e17dd747a62fbf4de06030fe56fe625f95285f6f70b96c57 + languageName: node + linkType: hard + +"@aws-crypto/crc32c@npm:5.2.0": + version: 5.2.0 + resolution: "@aws-crypto/crc32c@npm:5.2.0" + dependencies: + "@aws-crypto/util": ^5.2.0 + "@aws-sdk/types": ^3.222.0 + tslib: ^2.6.2 + checksum: 0b399de8607c59e1e46c05d2b24a16b56d507944fdac925c611f0ba7302f5555c098139806d7da1ebef1f89bf4e4b5d4dec74d4809ce0f18238b72072065effe + languageName: node + linkType: hard + +"@aws-crypto/sha1-browser@npm:5.2.0": + version: 5.2.0 + resolution: "@aws-crypto/sha1-browser@npm:5.2.0" + dependencies: + "@aws-crypto/supports-web-crypto": ^5.2.0 + "@aws-crypto/util": ^5.2.0 + "@aws-sdk/types": ^3.222.0 + "@aws-sdk/util-locate-window": ^3.0.0 + "@smithy/util-utf8": ^2.0.0 + tslib: ^2.6.2 + checksum: 8b04af601d945c5ef0f5f733b55681edc95b81c02ce5067b57f1eb4ee718e45485cf9aeeb7a84da9131656d09e1c4bc78040ec759f557a46703422d8df098d59 + languageName: node + linkType: hard + +"@aws-crypto/sha256-browser@npm:5.2.0": + version: 5.2.0 + resolution: "@aws-crypto/sha256-browser@npm:5.2.0" + dependencies: + "@aws-crypto/sha256-js": ^5.2.0 + "@aws-crypto/supports-web-crypto": ^5.2.0 + "@aws-crypto/util": ^5.2.0 + "@aws-sdk/types": ^3.222.0 + "@aws-sdk/util-locate-window": ^3.0.0 + "@smithy/util-utf8": ^2.0.0 + tslib: ^2.6.2 + checksum: 773f12f2026d82a6bb4a23a8f491894a6d32525bd9b8bfbc12896526cf11882a7607a671c478c45f9cd7d6ba1caaed48a62b67c6f725244bd83a1275108f46c7 + languageName: node + linkType: hard + +"@aws-crypto/sha256-js@npm:5.2.0, @aws-crypto/sha256-js@npm:^5.2.0": + version: 5.2.0 + resolution: "@aws-crypto/sha256-js@npm:5.2.0" + dependencies: + "@aws-crypto/util": ^5.2.0 + "@aws-sdk/types": ^3.222.0 + tslib: ^2.6.2 + checksum: 007fbe0436d714d0d0d282e2b61c90e45adcb9ad75eac9ac7ba03d32b56624afd09b2a9ceb4d659661cf17c51d74d1900ab6b00eacafc002da1101664955ca53 + languageName: node + linkType: hard + +"@aws-crypto/supports-web-crypto@npm:^5.2.0": + version: 5.2.0 + resolution: "@aws-crypto/supports-web-crypto@npm:5.2.0" + dependencies: + tslib: ^2.6.2 + checksum: 6ffc21de48b2b2c3e918193101d7e8fe949d47b37688892e1c39eaedaa938be80c0f404fe1c874c30cce16781026777a53bf47d5d90143ca91d0feb7c4a6f830 + languageName: node + linkType: hard + +"@aws-crypto/util@npm:^5.2.0": + version: 5.2.0 + resolution: "@aws-crypto/util@npm:5.2.0" + dependencies: + "@aws-sdk/types": ^3.222.0 + "@smithy/util-utf8": ^2.0.0 + tslib: ^2.6.2 + checksum: f0f81d9d2771c59946cfec48b86cb23d39f78a966c4a1f89d4753abdc3cb38de06f907d1e6450059b121d48ac65d612ab88bdb70014553a077fc3dabddfbf8d6 + languageName: node + linkType: hard + +"@aws-sdk/client-s3@npm:^3.614.0": + version: 3.616.0 + resolution: "@aws-sdk/client-s3@npm:3.616.0" + dependencies: + "@aws-crypto/sha1-browser": 5.2.0 + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/client-sso-oidc": 3.616.0 + "@aws-sdk/client-sts": 3.616.0 + "@aws-sdk/core": 3.616.0 + "@aws-sdk/credential-provider-node": 3.616.0 + "@aws-sdk/middleware-bucket-endpoint": 3.616.0 + "@aws-sdk/middleware-expect-continue": 3.616.0 + "@aws-sdk/middleware-flexible-checksums": 3.616.0 + "@aws-sdk/middleware-host-header": 3.616.0 + "@aws-sdk/middleware-location-constraint": 3.609.0 + "@aws-sdk/middleware-logger": 3.609.0 + "@aws-sdk/middleware-recursion-detection": 3.616.0 + "@aws-sdk/middleware-sdk-s3": 3.616.0 + "@aws-sdk/middleware-signing": 3.616.0 + "@aws-sdk/middleware-ssec": 3.609.0 + "@aws-sdk/middleware-user-agent": 3.616.0 + "@aws-sdk/region-config-resolver": 3.614.0 + "@aws-sdk/signature-v4-multi-region": 3.616.0 + "@aws-sdk/types": 3.609.0 + "@aws-sdk/util-endpoints": 3.614.0 + "@aws-sdk/util-user-agent-browser": 3.609.0 + "@aws-sdk/util-user-agent-node": 3.614.0 + "@aws-sdk/xml-builder": 3.609.0 + "@smithy/config-resolver": ^3.0.5 + "@smithy/core": ^2.2.7 + "@smithy/eventstream-serde-browser": ^3.0.4 + "@smithy/eventstream-serde-config-resolver": ^3.0.3 + "@smithy/eventstream-serde-node": ^3.0.4 + "@smithy/fetch-http-handler": ^3.2.2 + "@smithy/hash-blob-browser": ^3.1.2 + "@smithy/hash-node": ^3.0.3 + "@smithy/hash-stream-node": ^3.1.2 + "@smithy/invalid-dependency": ^3.0.3 + "@smithy/md5-js": ^3.0.3 + "@smithy/middleware-content-length": ^3.0.4 + "@smithy/middleware-endpoint": ^3.0.5 + "@smithy/middleware-retry": ^3.0.10 + "@smithy/middleware-serde": ^3.0.3 + "@smithy/middleware-stack": ^3.0.3 + "@smithy/node-config-provider": ^3.1.4 + "@smithy/node-http-handler": ^3.1.3 + "@smithy/protocol-http": ^4.0.4 + "@smithy/smithy-client": ^3.1.8 + "@smithy/types": ^3.3.0 + "@smithy/url-parser": ^3.0.3 + "@smithy/util-base64": ^3.0.0 + "@smithy/util-body-length-browser": ^3.0.0 + "@smithy/util-body-length-node": ^3.0.0 + "@smithy/util-defaults-mode-browser": ^3.0.10 + "@smithy/util-defaults-mode-node": ^3.0.10 + "@smithy/util-endpoints": ^2.0.5 + "@smithy/util-retry": ^3.0.3 + "@smithy/util-stream": ^3.1.0 + "@smithy/util-utf8": ^3.0.0 + "@smithy/util-waiter": ^3.1.2 + tslib: ^2.6.2 + checksum: 19f500040e3363abc19dbf4baa1e219b34242360809fb21bbe8492f7e29ea339e1d26944b2bfafec6a303d67d50e0edb6b965e34ce9965cf9cb64510edd5aa17 + languageName: node + linkType: hard + +"@aws-sdk/client-sso-oidc@npm:3.616.0": + version: 3.616.0 + resolution: "@aws-sdk/client-sso-oidc@npm:3.616.0" + dependencies: + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/core": 3.616.0 + "@aws-sdk/credential-provider-node": 3.616.0 + "@aws-sdk/middleware-host-header": 3.616.0 + "@aws-sdk/middleware-logger": 3.609.0 + "@aws-sdk/middleware-recursion-detection": 3.616.0 + "@aws-sdk/middleware-user-agent": 3.616.0 + "@aws-sdk/region-config-resolver": 3.614.0 + "@aws-sdk/types": 3.609.0 + "@aws-sdk/util-endpoints": 3.614.0 + "@aws-sdk/util-user-agent-browser": 3.609.0 + "@aws-sdk/util-user-agent-node": 3.614.0 + "@smithy/config-resolver": ^3.0.5 + "@smithy/core": ^2.2.7 + "@smithy/fetch-http-handler": ^3.2.2 + "@smithy/hash-node": ^3.0.3 + "@smithy/invalid-dependency": ^3.0.3 + "@smithy/middleware-content-length": ^3.0.4 + "@smithy/middleware-endpoint": ^3.0.5 + "@smithy/middleware-retry": ^3.0.10 + "@smithy/middleware-serde": ^3.0.3 + "@smithy/middleware-stack": ^3.0.3 + "@smithy/node-config-provider": ^3.1.4 + "@smithy/node-http-handler": ^3.1.3 + "@smithy/protocol-http": ^4.0.4 + "@smithy/smithy-client": ^3.1.8 + "@smithy/types": ^3.3.0 + "@smithy/url-parser": ^3.0.3 + "@smithy/util-base64": ^3.0.0 + "@smithy/util-body-length-browser": ^3.0.0 + "@smithy/util-body-length-node": ^3.0.0 + "@smithy/util-defaults-mode-browser": ^3.0.10 + "@smithy/util-defaults-mode-node": ^3.0.10 + "@smithy/util-endpoints": ^2.0.5 + "@smithy/util-middleware": ^3.0.3 + "@smithy/util-retry": ^3.0.3 + "@smithy/util-utf8": ^3.0.0 + tslib: ^2.6.2 + peerDependencies: + "@aws-sdk/client-sts": ^3.616.0 + checksum: cc6fab0e7369b0dbb7d03dbfcdc4e1dedd9bf395ed468c0c22b0c141ab35fc286d27f54a075584395dd5ca8a134682e9aa119e95b52694fb061aa8c389d6fc42 + languageName: node + linkType: hard + +"@aws-sdk/client-sso@npm:3.616.0": + version: 3.616.0 + resolution: "@aws-sdk/client-sso@npm:3.616.0" + dependencies: + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/core": 3.616.0 + "@aws-sdk/middleware-host-header": 3.616.0 + "@aws-sdk/middleware-logger": 3.609.0 + "@aws-sdk/middleware-recursion-detection": 3.616.0 + "@aws-sdk/middleware-user-agent": 3.616.0 + "@aws-sdk/region-config-resolver": 3.614.0 + "@aws-sdk/types": 3.609.0 + "@aws-sdk/util-endpoints": 3.614.0 + "@aws-sdk/util-user-agent-browser": 3.609.0 + "@aws-sdk/util-user-agent-node": 3.614.0 + "@smithy/config-resolver": ^3.0.5 + "@smithy/core": ^2.2.7 + "@smithy/fetch-http-handler": ^3.2.2 + "@smithy/hash-node": ^3.0.3 + "@smithy/invalid-dependency": ^3.0.3 + "@smithy/middleware-content-length": ^3.0.4 + "@smithy/middleware-endpoint": ^3.0.5 + "@smithy/middleware-retry": ^3.0.10 + "@smithy/middleware-serde": ^3.0.3 + "@smithy/middleware-stack": ^3.0.3 + "@smithy/node-config-provider": ^3.1.4 + "@smithy/node-http-handler": ^3.1.3 + "@smithy/protocol-http": ^4.0.4 + "@smithy/smithy-client": ^3.1.8 + "@smithy/types": ^3.3.0 + "@smithy/url-parser": ^3.0.3 + "@smithy/util-base64": ^3.0.0 + "@smithy/util-body-length-browser": ^3.0.0 + "@smithy/util-body-length-node": ^3.0.0 + "@smithy/util-defaults-mode-browser": ^3.0.10 + "@smithy/util-defaults-mode-node": ^3.0.10 + "@smithy/util-endpoints": ^2.0.5 + "@smithy/util-middleware": ^3.0.3 + "@smithy/util-retry": ^3.0.3 + "@smithy/util-utf8": ^3.0.0 + tslib: ^2.6.2 + checksum: 0a0d5560a84b381caad36264cc3760a0aa2c1dfa980429dc55c582447e7e7242f0947963815f7b91c0b92fc4b3b95507fd37cf9eb155b5409a6f9303f6efaed7 + languageName: node + linkType: hard + +"@aws-sdk/client-sts@npm:3.616.0": + version: 3.616.0 + resolution: "@aws-sdk/client-sts@npm:3.616.0" + dependencies: + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/client-sso-oidc": 3.616.0 + "@aws-sdk/core": 3.616.0 + "@aws-sdk/credential-provider-node": 3.616.0 + "@aws-sdk/middleware-host-header": 3.616.0 + "@aws-sdk/middleware-logger": 3.609.0 + "@aws-sdk/middleware-recursion-detection": 3.616.0 + "@aws-sdk/middleware-user-agent": 3.616.0 + "@aws-sdk/region-config-resolver": 3.614.0 + "@aws-sdk/types": 3.609.0 + "@aws-sdk/util-endpoints": 3.614.0 + "@aws-sdk/util-user-agent-browser": 3.609.0 + "@aws-sdk/util-user-agent-node": 3.614.0 + "@smithy/config-resolver": ^3.0.5 + "@smithy/core": ^2.2.7 + "@smithy/fetch-http-handler": ^3.2.2 + "@smithy/hash-node": ^3.0.3 + "@smithy/invalid-dependency": ^3.0.3 + "@smithy/middleware-content-length": ^3.0.4 + "@smithy/middleware-endpoint": ^3.0.5 + "@smithy/middleware-retry": ^3.0.10 + "@smithy/middleware-serde": ^3.0.3 + "@smithy/middleware-stack": ^3.0.3 + "@smithy/node-config-provider": ^3.1.4 + "@smithy/node-http-handler": ^3.1.3 + "@smithy/protocol-http": ^4.0.4 + "@smithy/smithy-client": ^3.1.8 + "@smithy/types": ^3.3.0 + "@smithy/url-parser": ^3.0.3 + "@smithy/util-base64": ^3.0.0 + "@smithy/util-body-length-browser": ^3.0.0 + "@smithy/util-body-length-node": ^3.0.0 + "@smithy/util-defaults-mode-browser": ^3.0.10 + "@smithy/util-defaults-mode-node": ^3.0.10 + "@smithy/util-endpoints": ^2.0.5 + "@smithy/util-middleware": ^3.0.3 + "@smithy/util-retry": ^3.0.3 + "@smithy/util-utf8": ^3.0.0 + tslib: ^2.6.2 + checksum: bad2619661085259ccfa2cd95f721ed1dc479c6871a8927648d182c6fbe3d25989a904d6b9430eac762c1d2a25d370a89879b9d1f2375f2cbfa869949288643f + languageName: node + linkType: hard + +"@aws-sdk/core@npm:3.616.0": + version: 3.616.0 + resolution: "@aws-sdk/core@npm:3.616.0" + dependencies: + "@smithy/core": ^2.2.7 + "@smithy/protocol-http": ^4.0.4 + "@smithy/signature-v4": ^4.0.0 + "@smithy/smithy-client": ^3.1.8 + "@smithy/types": ^3.3.0 + fast-xml-parser: 4.2.5 + tslib: ^2.6.2 + checksum: b19c43578beba8e90c1dac2a4842012e0ac2469fb0a8a72801677268447f5de2ad92ebcadc83826a7bfc360ef345c1686f2f76a04fc77f478e1c7512759789a9 + languageName: node + linkType: hard + +"@aws-sdk/credential-provider-env@npm:3.609.0": + version: 3.609.0 + resolution: "@aws-sdk/credential-provider-env@npm:3.609.0" + dependencies: + "@aws-sdk/types": 3.609.0 + "@smithy/property-provider": ^3.1.3 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: eda20122740481d04f5110fb9349df339562da1e1d5217e6c47e5f80ed0cce1b3bea01081272487bf04e402fcecc2734a352b0b57ae80b090dd8a0b3547ad185 + languageName: node + linkType: hard + +"@aws-sdk/credential-provider-http@npm:3.616.0": + version: 3.616.0 + resolution: "@aws-sdk/credential-provider-http@npm:3.616.0" + dependencies: + "@aws-sdk/types": 3.609.0 + "@smithy/fetch-http-handler": ^3.2.2 + "@smithy/node-http-handler": ^3.1.3 + "@smithy/property-provider": ^3.1.3 + "@smithy/protocol-http": ^4.0.4 + "@smithy/smithy-client": ^3.1.8 + "@smithy/types": ^3.3.0 + "@smithy/util-stream": ^3.1.0 + tslib: ^2.6.2 + checksum: a1afc3d78bc2496b57583a0d4e2ce080ba6f365c5b84aba39b070e51daee677256b32b8dcd93278c3c82a9c1288b2691c8f02624d23e819817fd55fa8377ddb4 + languageName: node + linkType: hard + +"@aws-sdk/credential-provider-ini@npm:3.616.0": + version: 3.616.0 + resolution: "@aws-sdk/credential-provider-ini@npm:3.616.0" + dependencies: + "@aws-sdk/credential-provider-env": 3.609.0 + "@aws-sdk/credential-provider-http": 3.616.0 + "@aws-sdk/credential-provider-process": 3.614.0 + "@aws-sdk/credential-provider-sso": 3.616.0 + "@aws-sdk/credential-provider-web-identity": 3.609.0 + "@aws-sdk/types": 3.609.0 + "@smithy/credential-provider-imds": ^3.1.4 + "@smithy/property-provider": ^3.1.3 + "@smithy/shared-ini-file-loader": ^3.1.4 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + peerDependencies: + "@aws-sdk/client-sts": ^3.616.0 + checksum: 2de4455b8bc58ebed180954d04e4f3de35a390778156a99a5581b7ebbf9adf01df6166f3dc60129a465865f110d30352b740ee92591169a1cb56d11e5ea21d38 + languageName: node + linkType: hard + +"@aws-sdk/credential-provider-node@npm:3.616.0": + version: 3.616.0 + resolution: "@aws-sdk/credential-provider-node@npm:3.616.0" + dependencies: + "@aws-sdk/credential-provider-env": 3.609.0 + "@aws-sdk/credential-provider-http": 3.616.0 + "@aws-sdk/credential-provider-ini": 3.616.0 + "@aws-sdk/credential-provider-process": 3.614.0 + "@aws-sdk/credential-provider-sso": 3.616.0 + "@aws-sdk/credential-provider-web-identity": 3.609.0 + "@aws-sdk/types": 3.609.0 + "@smithy/credential-provider-imds": ^3.1.4 + "@smithy/property-provider": ^3.1.3 + "@smithy/shared-ini-file-loader": ^3.1.4 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 9a66c9401eb152711a69010bfe9adc55fedd445d4d9754bd26490bf7b75c6606486dde9495893f893998ba74786ff4703ba94f0bdef92e2aa4c0d5baa605757a + languageName: node + linkType: hard + +"@aws-sdk/credential-provider-process@npm:3.614.0": + version: 3.614.0 + resolution: "@aws-sdk/credential-provider-process@npm:3.614.0" + dependencies: + "@aws-sdk/types": 3.609.0 + "@smithy/property-provider": ^3.1.3 + "@smithy/shared-ini-file-loader": ^3.1.4 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 8bbbbf66911f38818e801187ae8df000e92b4e1c0dbe6d6b9afae81e08fb771302d2dc86c459653a2ed71acc10b9773885ae28d6fbce0031e082e9a6e61c85ee + languageName: node + linkType: hard + +"@aws-sdk/credential-provider-sso@npm:3.616.0": + version: 3.616.0 + resolution: "@aws-sdk/credential-provider-sso@npm:3.616.0" + dependencies: + "@aws-sdk/client-sso": 3.616.0 + "@aws-sdk/token-providers": 3.614.0 + "@aws-sdk/types": 3.609.0 + "@smithy/property-provider": ^3.1.3 + "@smithy/shared-ini-file-loader": ^3.1.4 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 773fb35df0bb769964dd1da86e9a498620ba411b664e9ef968ba33d222dbc29849eb95a556f11bb23a3893141815db9be098cba3c99dd0148b34f116f5e1ef56 + languageName: node + linkType: hard + +"@aws-sdk/credential-provider-web-identity@npm:3.609.0": + version: 3.609.0 + resolution: "@aws-sdk/credential-provider-web-identity@npm:3.609.0" + dependencies: + "@aws-sdk/types": 3.609.0 + "@smithy/property-provider": ^3.1.3 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + peerDependencies: + "@aws-sdk/client-sts": ^3.609.0 + checksum: 7a95a6c4792491122677fab6f01a9a46c8aa2f94d95255430bbd3fdcd514ab05ecf92c0ab169c8b30215b6b9181165f8d009774ba5a39cdd633162ef30879e56 + languageName: node + linkType: hard + +"@aws-sdk/lib-storage@npm:3.616.0": + version: 3.616.0 + resolution: "@aws-sdk/lib-storage@npm:3.616.0" + dependencies: + "@smithy/abort-controller": ^3.1.1 + "@smithy/middleware-endpoint": ^3.0.5 + "@smithy/smithy-client": ^3.1.8 + buffer: 5.6.0 + events: 3.3.0 + stream-browserify: 3.0.0 + tslib: ^2.6.2 + peerDependencies: + "@aws-sdk/client-s3": ^3.616.0 + checksum: 8da0a08cc80263c75a38a5c7f7e8422d516e6ed0e9387a991826ded9475a8f31c9c0ba3597673911ea5ef3ecd0d9e8c75b6fead1a61b84f2b8430baad18d2fad + languageName: node + linkType: hard + +"@aws-sdk/middleware-bucket-endpoint@npm:3.616.0": + version: 3.616.0 + resolution: "@aws-sdk/middleware-bucket-endpoint@npm:3.616.0" + dependencies: + "@aws-sdk/types": 3.609.0 + "@aws-sdk/util-arn-parser": 3.568.0 + "@smithy/node-config-provider": ^3.1.4 + "@smithy/protocol-http": ^4.0.4 + "@smithy/types": ^3.3.0 + "@smithy/util-config-provider": ^3.0.0 + tslib: ^2.6.2 + checksum: ff63a50930e3009d0bc672c301defe0d2709d4ffd4b7e7071bb74f84885601cac6693df8a9ddd32dbe3560065fea7ad49c9f5200d57b67dde67bb919fd78acca + languageName: node + linkType: hard + +"@aws-sdk/middleware-expect-continue@npm:3.616.0": + version: 3.616.0 + resolution: "@aws-sdk/middleware-expect-continue@npm:3.616.0" + dependencies: + "@aws-sdk/types": 3.609.0 + "@smithy/protocol-http": ^4.0.4 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: dfdc79f15ffbbd08ceca887f86ea1ea84865f0f5329e30d003276098436d2f63556d45e68670d195cef5d65cbd7d94482bf040351387ac8262fd3bbc36069850 + languageName: node + linkType: hard + +"@aws-sdk/middleware-flexible-checksums@npm:3.616.0": + version: 3.616.0 + resolution: "@aws-sdk/middleware-flexible-checksums@npm:3.616.0" + dependencies: + "@aws-crypto/crc32": 5.2.0 + "@aws-crypto/crc32c": 5.2.0 + "@aws-sdk/types": 3.609.0 + "@smithy/is-array-buffer": ^3.0.0 + "@smithy/protocol-http": ^4.0.4 + "@smithy/types": ^3.3.0 + "@smithy/util-utf8": ^3.0.0 + tslib: ^2.6.2 + checksum: d3560421063c54fb4496bb4c97d54b684a13d6dcbc70c925cf73bb18031c3cea4abeb8b4d02e01b5b3e058f646825e5a2054d75b5756446fd838758c9ce30820 + languageName: node + linkType: hard + +"@aws-sdk/middleware-host-header@npm:3.616.0": + version: 3.616.0 + resolution: "@aws-sdk/middleware-host-header@npm:3.616.0" + dependencies: + "@aws-sdk/types": 3.609.0 + "@smithy/protocol-http": ^4.0.4 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 7936068785a58e35adf96b90d6e72d9defca2d1051992bfd7bf5bbc150d000942ff587151d27d40276942d430817bac9985ab68d926333dfb581983b6236a21c + languageName: node + linkType: hard + +"@aws-sdk/middleware-location-constraint@npm:3.609.0": + version: 3.609.0 + resolution: "@aws-sdk/middleware-location-constraint@npm:3.609.0" + dependencies: + "@aws-sdk/types": 3.609.0 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: f7962cf0b382efdf56cd07f8c0279efead02365edd7a2c124be39551b51a8359ee0d6f0399fcbf679ead3d235e24d1765f79712cf88e06c0a5432bf2d0c317d8 + languageName: node + linkType: hard + +"@aws-sdk/middleware-logger@npm:3.609.0": + version: 3.609.0 + resolution: "@aws-sdk/middleware-logger@npm:3.609.0" + dependencies: + "@aws-sdk/types": 3.609.0 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: b6f67a2e9ba082c8aec9d45905ae45ea5a95896f1beecb0c2d7fecfe17dd8fad99513f43b11ed7fd6ca9ff7764a0fc1ce63af91b1baed92b36f7b4b5390be5c6 + languageName: node + linkType: hard + +"@aws-sdk/middleware-recursion-detection@npm:3.616.0": + version: 3.616.0 + resolution: "@aws-sdk/middleware-recursion-detection@npm:3.616.0" + dependencies: + "@aws-sdk/types": 3.609.0 + "@smithy/protocol-http": ^4.0.4 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 43bd173705125f07e44c0c0feb85af0edba1503fe629d9eacdcc446d45d038fca6148415a9f721d80a80a5dab390585ef122823f30bd8e06d723f523c6fc58c3 + languageName: node + linkType: hard + +"@aws-sdk/middleware-sdk-s3@npm:3.616.0": + version: 3.616.0 + resolution: "@aws-sdk/middleware-sdk-s3@npm:3.616.0" + dependencies: + "@aws-sdk/types": 3.609.0 + "@aws-sdk/util-arn-parser": 3.568.0 + "@smithy/node-config-provider": ^3.1.4 + "@smithy/protocol-http": ^4.0.4 + "@smithy/signature-v4": ^4.0.0 + "@smithy/smithy-client": ^3.1.8 + "@smithy/types": ^3.3.0 + "@smithy/util-config-provider": ^3.0.0 + "@smithy/util-stream": ^3.1.0 + "@smithy/util-utf8": ^3.0.0 + tslib: ^2.6.2 + checksum: 0d879d7196378d4afcceed43437299c835b6c62bb1b3ece42f9a9a13045df34c82ea27dc3dab31965e01d375be7847f07ef62ce93992e4d81174f55dab983795 + languageName: node + linkType: hard + +"@aws-sdk/middleware-signing@npm:3.616.0": + version: 3.616.0 + resolution: "@aws-sdk/middleware-signing@npm:3.616.0" + dependencies: + "@aws-sdk/types": 3.609.0 + "@smithy/property-provider": ^3.1.3 + "@smithy/protocol-http": ^4.0.4 + "@smithy/signature-v4": ^4.0.0 + "@smithy/types": ^3.3.0 + "@smithy/util-middleware": ^3.0.3 + tslib: ^2.6.2 + checksum: 4a225dddbeb461c4eb36a23db35cf10a8009104c0ac93be8d5271827b38d65da008af69fb63528e8d3d9b2b78fe7eb349db9ad58adebd442c555a4efb1e5ccc9 + languageName: node + linkType: hard + +"@aws-sdk/middleware-ssec@npm:3.609.0": + version: 3.609.0 + resolution: "@aws-sdk/middleware-ssec@npm:3.609.0" + dependencies: + "@aws-sdk/types": 3.609.0 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 4b40627ed103159ef0db4cc6bdc2148d1a65b786f3d1c643d34bccc79b9d265495613dc9bb34d18d5ab9b21b5d31110e495ec2b077e6e2f7603a0493254180a2 + languageName: node + linkType: hard + +"@aws-sdk/middleware-user-agent@npm:3.616.0": + version: 3.616.0 + resolution: "@aws-sdk/middleware-user-agent@npm:3.616.0" + dependencies: + "@aws-sdk/types": 3.609.0 + "@aws-sdk/util-endpoints": 3.614.0 + "@smithy/protocol-http": ^4.0.4 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 6525d9061e0993f338c6dbb2c55e3e094aa02801d0814824cd4a0c0d9810e0f82fc7af4f6f2010723b18a856da241c3daded3fd9bc16b991cffef5f3031f0941 + languageName: node + linkType: hard + +"@aws-sdk/region-config-resolver@npm:3.614.0": + version: 3.614.0 + resolution: "@aws-sdk/region-config-resolver@npm:3.614.0" + dependencies: + "@aws-sdk/types": 3.609.0 + "@smithy/node-config-provider": ^3.1.4 + "@smithy/types": ^3.3.0 + "@smithy/util-config-provider": ^3.0.0 + "@smithy/util-middleware": ^3.0.3 + tslib: ^2.6.2 + checksum: dbaca50792c99685845b21dd4a53228613e0458ee517a21db941890ee521d91eff80704f08e9ee71b6f04e70fb86362c4823750bb0b3727240af68d78d8fa4be + languageName: node + linkType: hard + +"@aws-sdk/signature-v4-multi-region@npm:3.616.0": + version: 3.616.0 + resolution: "@aws-sdk/signature-v4-multi-region@npm:3.616.0" + dependencies: + "@aws-sdk/middleware-sdk-s3": 3.616.0 + "@aws-sdk/types": 3.609.0 + "@smithy/protocol-http": ^4.0.4 + "@smithy/signature-v4": ^4.0.0 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 567d675cc5592ae309c326932998557fffed61da9f504e7b82640c6257d24a3090faf35046357591181ae3a7d93c78361cb50cb37ea570c4df3a83177b58366d + languageName: node + linkType: hard + +"@aws-sdk/token-providers@npm:3.614.0": + version: 3.614.0 + resolution: "@aws-sdk/token-providers@npm:3.614.0" + dependencies: + "@aws-sdk/types": 3.609.0 + "@smithy/property-provider": ^3.1.3 + "@smithy/shared-ini-file-loader": ^3.1.4 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + peerDependencies: + "@aws-sdk/client-sso-oidc": ^3.614.0 + checksum: 2901b8428afc3b76ff1df9ac29a2698db6bf65d1d2afcd8424b9bf187313d2a3ca747c3b205afeb5c132068b5a5a94d84ce82710f775fa0cbb79499d7fea2d64 + languageName: node + linkType: hard + +"@aws-sdk/types@npm:3.609.0, @aws-sdk/types@npm:^3.222.0": + version: 3.609.0 + resolution: "@aws-sdk/types@npm:3.609.0" + dependencies: + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 522768d08f104065b0ff6a37eddaa7803186014acee1c0011b3dbd3ef841e47ae694e58f608aeec8a39d22d644d759ade996fe51d18b880617778dc2dbbe1ede + languageName: node + linkType: hard + +"@aws-sdk/util-arn-parser@npm:3.568.0": + version: 3.568.0 + resolution: "@aws-sdk/util-arn-parser@npm:3.568.0" + dependencies: + tslib: ^2.6.2 + checksum: e3c45e5d524a772954d0a33614d397414185b9eb635423d01253cad1c1b9add625798ed9cf23343d156fae89c701f484bc062ab673f67e2e2edfe362fde6d170 + languageName: node + linkType: hard + +"@aws-sdk/util-endpoints@npm:3.614.0": + version: 3.614.0 + resolution: "@aws-sdk/util-endpoints@npm:3.614.0" + dependencies: + "@aws-sdk/types": 3.609.0 + "@smithy/types": ^3.3.0 + "@smithy/util-endpoints": ^2.0.5 + tslib: ^2.6.2 + checksum: 9d9973ceee59bf30af85c7f4328083daea033a987ec396dcb89eb7649f470ceb19c6b96635e121f3557e726f7ec7453236c956cf43f22128883c277f17d2a13f + languageName: node + linkType: hard + +"@aws-sdk/util-locate-window@npm:^3.0.0": + version: 3.568.0 + resolution: "@aws-sdk/util-locate-window@npm:3.568.0" + dependencies: + tslib: ^2.6.2 + checksum: 354db5187beee4203c7ec6583556ab14ecde9644c06aaa51fa2528131836d3fc73035a3b080c904e108c49defce20d5562893113b93d819b70497f47989bb578 + languageName: node + linkType: hard + +"@aws-sdk/util-user-agent-browser@npm:3.609.0": + version: 3.609.0 + resolution: "@aws-sdk/util-user-agent-browser@npm:3.609.0" + dependencies: + "@aws-sdk/types": 3.609.0 + "@smithy/types": ^3.3.0 + bowser: ^2.11.0 + tslib: ^2.6.2 + checksum: 75ba1ae74dd1001f47870766d92b66ac02a0a488efcf42c1a368962a7978a778d99536e880f07f7db1c2ca66cc9b1863fd3342957a22dcf78bf2f4398265a7a5 + languageName: node + linkType: hard + +"@aws-sdk/util-user-agent-node@npm:3.614.0": + version: 3.614.0 + resolution: "@aws-sdk/util-user-agent-node@npm:3.614.0" + dependencies: + "@aws-sdk/types": 3.609.0 + "@smithy/node-config-provider": ^3.1.4 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + peerDependencies: + aws-crt: ">=1.0.0" + peerDependenciesMeta: + aws-crt: + optional: true + checksum: 1f010080c2301fd836908963a235ef39e597d959e27461d15d4958fa582ab20795022f8cb7429c183c386f558a5c125cb254a0c4e844dbc6422169f4884be34a + languageName: node + linkType: hard + +"@aws-sdk/xml-builder@npm:3.609.0": + version: 3.609.0 + resolution: "@aws-sdk/xml-builder@npm:3.609.0" + dependencies: + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 0e9c8b7786737ff50a6cf39f7ca9a758897c2db364718364b5dad45f50a33e65bd7801348fd033af60768a5be64b454c3a7e65222e13c70d145e8df6211ca33c + languageName: node + linkType: hard + "@babel/code-frame@npm:7.22.13": version: 7.22.13 resolution: "@babel/code-frame@npm:7.22.13" @@ -1267,6 +1971,13 @@ __metadata: languageName: node linkType: hard +"@noble/hashes@npm:^1.1.5": + version: 1.4.0 + resolution: "@noble/hashes@npm:1.4.0" + checksum: 8ba816ae26c90764b8c42493eea383716396096c5f7ba6bea559993194f49d80a73c081f315f4c367e51bd2d5891700bcdfa816b421d24ab45b41cb03e4f3342 + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -1328,274 +2039,876 @@ __metadata: languageName: node linkType: hard -"@npmcli/name-from-folder@npm:^2.0.0": - version: 2.0.0 - resolution: "@npmcli/name-from-folder@npm:2.0.0" - checksum: fb3ef891aa57315fb6171866847f298577c8bda98a028e93e458048477133e142b4eb45ce9f3b80454f7c257612cb01754ee782d608507698dd712164436f5bd +"@npmcli/name-from-folder@npm:^2.0.0": + version: 2.0.0 + resolution: "@npmcli/name-from-folder@npm:2.0.0" + checksum: fb3ef891aa57315fb6171866847f298577c8bda98a028e93e458048477133e142b4eb45ce9f3b80454f7c257612cb01754ee782d608507698dd712164436f5bd + languageName: node + linkType: hard + +"@opencensus/core@npm:0.0.9": + version: 0.0.9 + resolution: "@opencensus/core@npm:0.0.9" + dependencies: + continuation-local-storage: ^3.2.1 + log-driver: ^1.2.7 + semver: ^5.5.0 + shimmer: ^1.2.0 + uuid: ^3.2.1 + checksum: 37af50394cbf759a835182eedf9fbf328232916bdd2174e75221cf9f29393621d0d05eaf24bb61b89b50c740bc4f625e5c8f891e2db627ce6dbf1888d98857e5 + languageName: node + linkType: hard + +"@opencensus/core@npm:^0.0.8": + version: 0.0.8 + resolution: "@opencensus/core@npm:0.0.8" + dependencies: + continuation-local-storage: ^3.2.1 + log-driver: ^1.2.7 + semver: ^5.5.0 + shimmer: ^1.2.0 + uuid: ^3.2.1 + checksum: b4ad6c9a4963407195ab9c2f2751888b1462807c547bd9a7ceb561c473073aacc17555afa9e37cbda01805be5e954085284629e502ed5d3fe7b3c628d9ec2882 + languageName: node + linkType: hard + +"@opencensus/propagation-b3@npm:0.0.8": + version: 0.0.8 + resolution: "@opencensus/propagation-b3@npm:0.0.8" + dependencies: + "@opencensus/core": ^0.0.8 + uuid: ^3.2.1 + checksum: c480bd181062ac15f23d5c833a1b1760f2734e013ab7d0bc3fc24d7d1f8330f38f426a56df6d1baf1384727b3dbc1f9ba2851caaac2125500327117fbafa8f70 + languageName: node + linkType: hard + +"@paralleldrive/cuid2@npm:^2.2.2": + version: 2.2.2 + resolution: "@paralleldrive/cuid2@npm:2.2.2" + dependencies: + "@noble/hashes": ^1.1.5 + checksum: f7f6ac70e0268ec2c72e555719240d5c2c9a859ce541ac1c637eed3f3ee971b42881d299dedafbded53e7365b9e98176c5a31c442c1112f7e9e7306f2fd0ecbb + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f + languageName: node + linkType: hard + +"@pkgr/core@npm:^0.1.0": + version: 0.1.1 + resolution: "@pkgr/core@npm:0.1.1" + checksum: 6f25fd2e3008f259c77207ac9915b02f1628420403b2630c92a07ff963129238c9262afc9e84344c7a23b5cc1f3965e2cd17e3798219f5fd78a63d144d3cceba + languageName: node + linkType: hard + +"@pm2/agent@npm:~2.0.0": + version: 2.0.4 + resolution: "@pm2/agent@npm:2.0.4" + dependencies: + async: ~3.2.0 + chalk: ~3.0.0 + dayjs: ~1.8.24 + debug: ~4.3.1 + eventemitter2: ~5.0.1 + fast-json-patch: ^3.0.0-1 + fclone: ~1.0.11 + nssocket: 0.6.0 + pm2-axon: ~4.0.1 + pm2-axon-rpc: ~0.7.0 + proxy-agent: ~6.3.0 + semver: ~7.5.0 + ws: ~7.5.10 + checksum: 1a8d09c95b0f0ee1a341194b6aeb52a94c46592a95f5523a3124b6ccf73626e303491728d6f388bdeef9763d97ed71c46674fa12429d2963ec735b2eab987665 + languageName: node + linkType: hard + +"@pm2/io@npm:~5.0.0": + version: 5.0.2 + resolution: "@pm2/io@npm:5.0.2" + dependencies: + "@opencensus/core": 0.0.9 + "@opencensus/propagation-b3": 0.0.8 + async: ~2.6.1 + debug: ~4.3.1 + eventemitter2: ^6.3.1 + require-in-the-middle: ^5.0.0 + semver: ~7.5.4 + shimmer: ^1.2.0 + signal-exit: ^3.0.3 + tslib: 1.9.3 + checksum: 54e4cf462a00f86d5d3a201dee72490a253896e732dee6ce0282c55ef59d088974d7f5665f586d9f2ef35c099f5bf345fdd39a099c61c88877d215da2ce345ac + languageName: node + linkType: hard + +"@pm2/js-api@npm:~0.6.7": + version: 0.6.7 + resolution: "@pm2/js-api@npm:0.6.7" + dependencies: + async: ^2.6.3 + axios: ^0.21.0 + debug: ~4.3.1 + eventemitter2: ^6.3.1 + ws: ^7.0.0 + checksum: 43d1e4d06328ad18d8929225a0732fa20701694dea0e3af0ea692239e0adc45ef2f48a794599a8df88bc705d2e428b5b8018deb3709983c91ed0b74a834b2f21 + languageName: node + linkType: hard + +"@pm2/pm2-version-check@npm:latest": + version: 1.0.4 + resolution: "@pm2/pm2-version-check@npm:1.0.4" + dependencies: + debug: ^4.3.1 + checksum: 663438d9154db3c11bc7d41a4838162542db9cb4cf989fe8936e9bd9e5b99e3a58d73c8888afa1180a8cb93375c1d165bb397939de8a5ab8507d13d2aed2a086 + languageName: node + linkType: hard + +"@sagold/json-pointer@npm:^5.1.1, @sagold/json-pointer@npm:^5.1.2": + version: 5.1.2 + resolution: "@sagold/json-pointer@npm:5.1.2" + checksum: e29afd3f7e21196e369b332e99504472742ac5a0c141438071e822d3bd9fa55164a14dd25cc0396f2d50b0f9d9b76161e81c83c2035e16e72731b98130968cda + languageName: node + linkType: hard + +"@sagold/json-query@npm:^6.1.1": + version: 6.2.0 + resolution: "@sagold/json-query@npm:6.2.0" + dependencies: + "@sagold/json-pointer": ^5.1.2 + ebnf: ^1.9.1 + checksum: 1c29a1bb81fa14573d37f485170083b0f43ecee66d08422f8ff6d3083ab65954cff9178502132d87175f34cf1e432e1ee7985d60417e350a730de907c63ef633 + languageName: node + linkType: hard + +"@scaleleap/pg-format@npm:1.0.0": + version: 1.0.0 + resolution: "@scaleleap/pg-format@npm:1.0.0" + checksum: 4ba49e13ee53d5710bfd17519f09edb39645de0678f93d0a03ce8c20d5b5837f0768fa9b6233ba26e1158e4b411d93acb47cc653aefff2de7591bf5797336fd2 + languageName: node + linkType: hard + +"@sentry-internal/tracing@npm:7.48.0": + version: 7.48.0 + resolution: "@sentry-internal/tracing@npm:7.48.0" + dependencies: + "@sentry/core": 7.48.0 + "@sentry/types": 7.48.0 + "@sentry/utils": 7.48.0 + tslib: ^1.9.3 + checksum: 61e9d1c5f34db9a23ae8f34b6d479e9929e968fa63e4d0d2da92cf49f4a6d82b992161b781278296112a8851920d75a9e538134014c63f7e3d7de2b3d3e6fc4a + languageName: node + linkType: hard + +"@sentry/core@npm:7.48.0": + version: 7.48.0 + resolution: "@sentry/core@npm:7.48.0" + dependencies: + "@sentry/types": 7.48.0 + "@sentry/utils": 7.48.0 + tslib: ^1.9.3 + checksum: cc4d0ada638a6da4b56f1824c419ef1aea7867cb1079d647cf9397752e86215fcad2dd7eebdf9893dedab64cfa3473435ed89e2afdc6eb8d68041b836b3e605a + languageName: node + linkType: hard + +"@sentry/integrations@npm:7.48.0": + version: 7.48.0 + resolution: "@sentry/integrations@npm:7.48.0" + dependencies: + "@sentry/types": 7.48.0 + "@sentry/utils": 7.48.0 + localforage: ^1.8.1 + tslib: ^1.9.3 + checksum: f3347e0c5b696cc14c91a5e8c63130c2c0d3971bbbe725d5e4e423fa65bda31bd56c3c0cd6ad5a667ea98a79a7a3f584c7b44cf7bad5a17dc81df7ec98c5e398 + languageName: node + linkType: hard + +"@sentry/node@npm:7.48.0": + version: 7.48.0 + resolution: "@sentry/node@npm:7.48.0" + dependencies: + "@sentry-internal/tracing": 7.48.0 + "@sentry/core": 7.48.0 + "@sentry/types": 7.48.0 + "@sentry/utils": 7.48.0 + cookie: ^0.4.1 + https-proxy-agent: ^5.0.0 + lru_map: ^0.3.3 + tslib: ^1.9.3 + checksum: de9bbdd84d56a7851006a1c61c6ec08877fb7332bad83bfc4a3f5ca172a46b2d34cd084844531ac37de25fc317347820f182fd82e60aa54b4bb5046f848888ec + languageName: node + linkType: hard + +"@sentry/types@npm:7.48.0": + version: 7.48.0 + resolution: "@sentry/types@npm:7.48.0" + checksum: a2378f3ccfe0d3c28031c48edb4516e4fd77d5e709f2b758dffc4e0c98a83983a9c2f1022d2a719b14a0db9427a53f689ccae6df24644389e461152e44da1ae0 + languageName: node + linkType: hard + +"@sentry/utils@npm:7.48.0": + version: 7.48.0 + resolution: "@sentry/utils@npm:7.48.0" + dependencies: + "@sentry/types": 7.48.0 + tslib: ^1.9.3 + checksum: 879a2866897684b5af43fdf2946bc37f6e5d7dd4310d3cc838a3f9b59dc3ed39084e8cf90ebf5cc699946b7c280653d6bff9cf695b43203f033aee08781b787a + languageName: node + linkType: hard + +"@sindresorhus/is@npm:4.6.0": + version: 4.6.0 + resolution: "@sindresorhus/is@npm:4.6.0" + checksum: 83839f13da2c29d55c97abc3bc2c55b250d33a0447554997a85c539e058e57b8da092da396e252b11ec24a0279a0bed1f537fa26302209327060643e327f81d2 + languageName: node + linkType: hard + +"@sinonjs/commons@npm:^2.0.0": + version: 2.0.0 + resolution: "@sinonjs/commons@npm:2.0.0" + dependencies: + type-detect: 4.0.8 + checksum: 5023ba17edf2b85ed58262313b8e9b59e23c6860681a9af0200f239fe939e2b79736d04a260e8270ddd57196851dde3ba754d7230be5c5234e777ae2ca8af137 + languageName: node + linkType: hard + +"@sinonjs/commons@npm:^3.0.0": + version: 3.0.1 + resolution: "@sinonjs/commons@npm:3.0.1" + dependencies: + type-detect: 4.0.8 + checksum: a7c3e7cc612352f4004873747d9d8b2d4d90b13a6d483f685598c945a70e734e255f1ca5dc49702515533c403b32725defff148177453b3f3915bcb60e9d4601 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.3.0 + resolution: "@sinonjs/fake-timers@npm:10.3.0" + dependencies: + "@sinonjs/commons": ^3.0.0 + checksum: 614d30cb4d5201550c940945d44c9e0b6d64a888ff2cd5b357f95ad6721070d6b8839cd10e15b76bf5e14af0bcc1d8f9ec00d49a46318f1f669a4bec1d7f3148 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^11.2.2": + version: 11.2.2 + resolution: "@sinonjs/fake-timers@npm:11.2.2" + dependencies: + "@sinonjs/commons": ^3.0.0 + checksum: 68c29b0e1856fdc280df03ddbf57c726420b78e9f943a241b471edc018fb14ff36fdc1daafd6026cba08c3c7f50c976fb7ae11b88ff44cd7f609692ca7d25158 + languageName: node + linkType: hard + +"@sinonjs/samsam@npm:^8.0.0": + version: 8.0.0 + resolution: "@sinonjs/samsam@npm:8.0.0" + dependencies: + "@sinonjs/commons": ^2.0.0 + lodash.get: ^4.4.2 + type-detect: ^4.0.8 + checksum: 95e40d0bb9f7288e27c379bee1b03c3dc51e7e78b9d5ea6aef66a690da7e81efc4715145b561b449cefc5361a171791e3ce30fb1a46ab247d4c0766024c60a60 + languageName: node + linkType: hard + +"@sinonjs/text-encoding@npm:^0.7.2": + version: 0.7.2 + resolution: "@sinonjs/text-encoding@npm:0.7.2" + checksum: fe690002a32ba06906cf87e2e8fe84d1590294586f2a7fd180a65355b53660c155c3273d8011a5f2b77209b819aa7306678ae6e4aea0df014bd7ffd4bbbcf1ab + languageName: node + linkType: hard + +"@smithy/abort-controller@npm:^3.1.1": + version: 3.1.1 + resolution: "@smithy/abort-controller@npm:3.1.1" + dependencies: + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 7b7497f49d58787cad858f8c5ea9931ccd44d39536db4abdd531a5abf37784469522e41d9ad1d541892caa0ed3bea750447809a0a18f4689a9543d672aa61d48 + languageName: node + linkType: hard + +"@smithy/chunked-blob-reader-native@npm:^3.0.0": + version: 3.0.0 + resolution: "@smithy/chunked-blob-reader-native@npm:3.0.0" + dependencies: + "@smithy/util-base64": ^3.0.0 + tslib: ^2.6.2 + checksum: f97c0c0ce5e9bd2350883df3c232311aa82eb87eb387125f685900326f86fc3aca208e9004291f742f6978abf91a0c1112cc9a803cd0caf0dffbcfa9b6d0239e + languageName: node + linkType: hard + +"@smithy/chunked-blob-reader@npm:^3.0.0": + version: 3.0.0 + resolution: "@smithy/chunked-blob-reader@npm:3.0.0" + dependencies: + tslib: ^2.6.2 + checksum: 6f520884ade14f1073adb640db2f03eb22a9920f342f37958df3e98327890b741cd909b16cbbc6f70c6c8dd250d6b3a8d76841b685d4871b0403f309267def4f + languageName: node + linkType: hard + +"@smithy/config-resolver@npm:^3.0.5": + version: 3.0.5 + resolution: "@smithy/config-resolver@npm:3.0.5" + dependencies: + "@smithy/node-config-provider": ^3.1.4 + "@smithy/types": ^3.3.0 + "@smithy/util-config-provider": ^3.0.0 + "@smithy/util-middleware": ^3.0.3 + tslib: ^2.6.2 + checksum: 96895ae0622a229655fa08f009d29a20157043020125014e84cb5ca33a10171c9724c309491214c2422d9c4c6681e7f5ec5f7faa8f45e11250449cf07f3552ec + languageName: node + linkType: hard + +"@smithy/core@npm:^2.2.7": + version: 2.2.8 + resolution: "@smithy/core@npm:2.2.8" + dependencies: + "@smithy/middleware-endpoint": ^3.0.5 + "@smithy/middleware-retry": ^3.0.11 + "@smithy/middleware-serde": ^3.0.3 + "@smithy/protocol-http": ^4.0.4 + "@smithy/smithy-client": ^3.1.9 + "@smithy/types": ^3.3.0 + "@smithy/util-middleware": ^3.0.3 + tslib: ^2.6.2 + checksum: c6dbf5e7ce509779e57889a67036e67f7c9ba39ce93eac087162997105d4afd14b34a5b145ffdcf2c56d1afa65661fc0b42705705c140a79cf0cea78f7739919 + languageName: node + linkType: hard + +"@smithy/credential-provider-imds@npm:^3.1.4": + version: 3.1.4 + resolution: "@smithy/credential-provider-imds@npm:3.1.4" + dependencies: + "@smithy/node-config-provider": ^3.1.4 + "@smithy/property-provider": ^3.1.3 + "@smithy/types": ^3.3.0 + "@smithy/url-parser": ^3.0.3 + tslib: ^2.6.2 + checksum: c75a653970f5e7b888dddbcb916fadd2c45fe59b1a776de9b44f39771b3941fb536684d2407aef88ce376afa6024f38759290db966b07e9213c49a9427ea4a7c + languageName: node + linkType: hard + +"@smithy/eventstream-codec@npm:^3.1.2": + version: 3.1.2 + resolution: "@smithy/eventstream-codec@npm:3.1.2" + dependencies: + "@aws-crypto/crc32": 5.2.0 + "@smithy/types": ^3.3.0 + "@smithy/util-hex-encoding": ^3.0.0 + tslib: ^2.6.2 + checksum: b0c836acbf59b57a7e2ef948a54bd441d11b75d70f1c334723c27fce1ab0ff93ea9f936976b754272b5e90413b5a169c60b1df7ecfd7d061ebaae8d5cc067d94 + languageName: node + linkType: hard + +"@smithy/eventstream-serde-browser@npm:^3.0.4": + version: 3.0.5 + resolution: "@smithy/eventstream-serde-browser@npm:3.0.5" + dependencies: + "@smithy/eventstream-serde-universal": ^3.0.4 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 14e8a2027745e7a1ad261068e792e4a660043ce53fefc5f564b38b841ba02d40992b38fbd2357e762f0a1ecb658df3bbf23cf5ef33c3ec2488d316be95b61b9e + languageName: node + linkType: hard + +"@smithy/eventstream-serde-config-resolver@npm:^3.0.3": + version: 3.0.3 + resolution: "@smithy/eventstream-serde-config-resolver@npm:3.0.3" + dependencies: + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: c61780aa0ad8c479618d0b3fcb2b42f1f9a74dcf814dba08305107ed1f088f56aa1c346db9c72439ff18617f31b9c59c6895060e4c9765c81d759150a22674af + languageName: node + linkType: hard + +"@smithy/eventstream-serde-node@npm:^3.0.4": + version: 3.0.4 + resolution: "@smithy/eventstream-serde-node@npm:3.0.4" + dependencies: + "@smithy/eventstream-serde-universal": ^3.0.4 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 0a75b184d95ab8c08efd93bf32c5fd9d735b5879df556599bd2ab78f23e3f77452e597bbdd42586c9bbedcc2b0b7683de4c816db739c19a2ebd62a34096ca86d + languageName: node + linkType: hard + +"@smithy/eventstream-serde-universal@npm:^3.0.4": + version: 3.0.4 + resolution: "@smithy/eventstream-serde-universal@npm:3.0.4" + dependencies: + "@smithy/eventstream-codec": ^3.1.2 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 8463403ca4caf4ad48dba89b126f394439a289c9095ce6361c1f186c6021c1cd8ea402d1ce06b7284069c3415091ae4d802f66ded1b89e9da9d4c255b8402668 + languageName: node + linkType: hard + +"@smithy/fetch-http-handler@npm:^3.2.2": + version: 3.2.2 + resolution: "@smithy/fetch-http-handler@npm:3.2.2" + dependencies: + "@smithy/protocol-http": ^4.0.4 + "@smithy/querystring-builder": ^3.0.3 + "@smithy/types": ^3.3.0 + "@smithy/util-base64": ^3.0.0 + tslib: ^2.6.2 + checksum: ec7f0d648d0bb2e674ca6fda040357c462833825bba6d2b1549de4b6a8d0ffdd17d6effb2dbd56241b58e76f3e7c1afba5f321f3d592c39bf5007b89e9197875 + languageName: node + linkType: hard + +"@smithy/hash-blob-browser@npm:^3.1.2": + version: 3.1.2 + resolution: "@smithy/hash-blob-browser@npm:3.1.2" + dependencies: + "@smithy/chunked-blob-reader": ^3.0.0 + "@smithy/chunked-blob-reader-native": ^3.0.0 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 959ec975cd4b3d86e3d0288e24b460343795bc305ef38fc43f8485cd1440da4068d375c5d1dab73ae875f02e861f194512a7adf5afcd7395bbeb97897d8a809b + languageName: node + linkType: hard + +"@smithy/hash-node@npm:^3.0.3": + version: 3.0.3 + resolution: "@smithy/hash-node@npm:3.0.3" + dependencies: + "@smithy/types": ^3.3.0 + "@smithy/util-buffer-from": ^3.0.0 + "@smithy/util-utf8": ^3.0.0 + tslib: ^2.6.2 + checksum: 203a3581bec5373e63d42e03f62129022f03d17390e9358a4e25fc1d44c43962ea80ab5bcbb91605e3025e22136bed059665a3b16835f66316f43ed391df9548 + languageName: node + linkType: hard + +"@smithy/hash-stream-node@npm:^3.1.2": + version: 3.1.2 + resolution: "@smithy/hash-stream-node@npm:3.1.2" + dependencies: + "@smithy/types": ^3.3.0 + "@smithy/util-utf8": ^3.0.0 + tslib: ^2.6.2 + checksum: e5284ef06548e301aa50bd06fe06bf3e2ed11ecd57f73d2d85c98cf26119c2cc0084b5b8be49d4127cb798c6011651d5361958eb6546c19b45fd6c94ea11ef47 + languageName: node + linkType: hard + +"@smithy/invalid-dependency@npm:^3.0.3": + version: 3.0.3 + resolution: "@smithy/invalid-dependency@npm:3.0.3" + dependencies: + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 459b4ae4e47595e8a675ff2e8bfea7f58a41f77138416ea310c89e29312e08963a701cdc354324da9dd578a7995158b4421695365070d74b0276ddff7f701bba + languageName: node + linkType: hard + +"@smithy/is-array-buffer@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/is-array-buffer@npm:2.2.0" + dependencies: + tslib: ^2.6.2 + checksum: cd12c2e27884fec89ca8966d33c9dc34d3234efe89b33a9b309c61ebcde463e6f15f6a02d31d4fddbfd6e5904743524ca5b95021b517b98fe10957c2da0cd5fc + languageName: node + linkType: hard + +"@smithy/is-array-buffer@npm:^3.0.0": + version: 3.0.0 + resolution: "@smithy/is-array-buffer@npm:3.0.0" + dependencies: + tslib: ^2.6.2 + checksum: ce7440fcb1ce3c46722cff11c33e2f62a9df86d74fa2054a8e6b540302a91211cf6e4e3b1b7aac7030c6c8909158c1b6867c394201fa8afc6b631979956610e5 + languageName: node + linkType: hard + +"@smithy/md5-js@npm:^3.0.3": + version: 3.0.3 + resolution: "@smithy/md5-js@npm:3.0.3" + dependencies: + "@smithy/types": ^3.3.0 + "@smithy/util-utf8": ^3.0.0 + tslib: ^2.6.2 + checksum: 52ef56439be4187cc65391f4252173ffad0ce5a2ce5f636d78e9cdfb517844889340156ddbdbbe86f63e7f7e0fc924fe6905749a1c833910784015133a467406 + languageName: node + linkType: hard + +"@smithy/middleware-content-length@npm:^3.0.4": + version: 3.0.4 + resolution: "@smithy/middleware-content-length@npm:3.0.4" + dependencies: + "@smithy/protocol-http": ^4.0.4 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 462ed3511b5cf849d272c4a6e1a1b72f6f676252e208ebd652528e3d45f132859cbcbcf9e8cb127680fbbc587ab35965225fd7421a3711f4d125738b3e7f528e + languageName: node + linkType: hard + +"@smithy/middleware-endpoint@npm:^3.0.5": + version: 3.0.5 + resolution: "@smithy/middleware-endpoint@npm:3.0.5" + dependencies: + "@smithy/middleware-serde": ^3.0.3 + "@smithy/node-config-provider": ^3.1.4 + "@smithy/shared-ini-file-loader": ^3.1.4 + "@smithy/types": ^3.3.0 + "@smithy/url-parser": ^3.0.3 + "@smithy/util-middleware": ^3.0.3 + tslib: ^2.6.2 + checksum: 4ab0272efd47baa528a04c5413fb224e41be144902680239fffc83cf1fb7e9b5342e8b627a4149136efa2b29baacc84baa4dbcef5fd2fa55c70e169c7f4ba750 + languageName: node + linkType: hard + +"@smithy/middleware-retry@npm:^3.0.10, @smithy/middleware-retry@npm:^3.0.11": + version: 3.0.11 + resolution: "@smithy/middleware-retry@npm:3.0.11" + dependencies: + "@smithy/node-config-provider": ^3.1.4 + "@smithy/protocol-http": ^4.0.4 + "@smithy/service-error-classification": ^3.0.3 + "@smithy/smithy-client": ^3.1.9 + "@smithy/types": ^3.3.0 + "@smithy/util-middleware": ^3.0.3 + "@smithy/util-retry": ^3.0.3 + tslib: ^2.6.2 + uuid: ^9.0.1 + checksum: 4061f4823c949f5e9920b4840cfbc1472f38bac05cefc511a7731afa9372dab0fb238f48b6ce7a8d4d24fa966fa80f9eb7165d29fd90fd3854d72006f612d662 + languageName: node + linkType: hard + +"@smithy/middleware-serde@npm:^3.0.3": + version: 3.0.3 + resolution: "@smithy/middleware-serde@npm:3.0.3" + dependencies: + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 6c633bb8957e078d480888bd33d5a8c269a483a1358c2b28c62daecfd442c711c509d9e69302e6b19fc298139ee67cdda63a604e7da0e4ef9005117d8e0897cc + languageName: node + linkType: hard + +"@smithy/middleware-stack@npm:^3.0.3": + version: 3.0.3 + resolution: "@smithy/middleware-stack@npm:3.0.3" + dependencies: + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: f4a450e2ebca0a8a3b4e1bbfad7d7e9c45edccbe1c984a22f2228092a526120748365e8964b478357249675d8bbc28fdaa8a4a19643a3c1d86bd74e1499327c5 + languageName: node + linkType: hard + +"@smithy/node-config-provider@npm:^3.1.4": + version: 3.1.4 + resolution: "@smithy/node-config-provider@npm:3.1.4" + dependencies: + "@smithy/property-provider": ^3.1.3 + "@smithy/shared-ini-file-loader": ^3.1.4 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 7ea4e7cea93ab154ab89a9d6b2453c8f96b96db18883070d287bc5fa9cfd10091bb00006a15bb7e6ed25810fd1a133d458e45310a8eaa1727a55d4ce2be3ba09 + languageName: node + linkType: hard + +"@smithy/node-http-handler@npm:^3.1.3": + version: 3.1.3 + resolution: "@smithy/node-http-handler@npm:3.1.3" + dependencies: + "@smithy/abort-controller": ^3.1.1 + "@smithy/protocol-http": ^4.0.4 + "@smithy/querystring-builder": ^3.0.3 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 2e07687544dc77714912467268db820cb76bffcb0f4cdb5d5f12b05561d8baedb98cb478ceb4e247151e2d7d30af7de88095f9b96037e56f58a371b2a7bab85e + languageName: node + linkType: hard + +"@smithy/property-provider@npm:^3.1.3": + version: 3.1.3 + resolution: "@smithy/property-provider@npm:3.1.3" + dependencies: + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 37a3d92267a2a32c2cc17fd1f0ab2b336f75fb7807db88f6194efede9d6a66068658a7effb7773451404fca990924393dbbf3d57e2aca67ef2e489a85666e225 + languageName: node + linkType: hard + +"@smithy/protocol-http@npm:^4.0.4": + version: 4.0.4 + resolution: "@smithy/protocol-http@npm:4.0.4" + dependencies: + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: a0155381d24f02d279f0b895c179e98af0a6dd1c8a1765666c856f0bca41aa7d4a245a228bc17ddde5f68c631ffe8684440051416757169074dfa5c7a7087e94 languageName: node linkType: hard -"@opencensus/core@npm:0.0.9": - version: 0.0.9 - resolution: "@opencensus/core@npm:0.0.9" +"@smithy/querystring-builder@npm:^3.0.3": + version: 3.0.3 + resolution: "@smithy/querystring-builder@npm:3.0.3" dependencies: - continuation-local-storage: ^3.2.1 - log-driver: ^1.2.7 - semver: ^5.5.0 - shimmer: ^1.2.0 - uuid: ^3.2.1 - checksum: 37af50394cbf759a835182eedf9fbf328232916bdd2174e75221cf9f29393621d0d05eaf24bb61b89b50c740bc4f625e5c8f891e2db627ce6dbf1888d98857e5 + "@smithy/types": ^3.3.0 + "@smithy/util-uri-escape": ^3.0.0 + tslib: ^2.6.2 + checksum: 5c46c620d87f9b4e67b8eb543667b0160fb05bbec01d62d45adb94305369dca9e82daba47d81e840fdc399fa47f9b5930ce668d65fe83ee278a1b27d59d0b5d3 languageName: node linkType: hard -"@opencensus/core@npm:^0.0.8": - version: 0.0.8 - resolution: "@opencensus/core@npm:0.0.8" +"@smithy/querystring-parser@npm:^3.0.3": + version: 3.0.3 + resolution: "@smithy/querystring-parser@npm:3.0.3" dependencies: - continuation-local-storage: ^3.2.1 - log-driver: ^1.2.7 - semver: ^5.5.0 - shimmer: ^1.2.0 - uuid: ^3.2.1 - checksum: b4ad6c9a4963407195ab9c2f2751888b1462807c547bd9a7ceb561c473073aacc17555afa9e37cbda01805be5e954085284629e502ed5d3fe7b3c628d9ec2882 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 1de11cbc4325578b243a0e3e89b46371f4705d3df41ea51b37e8efa655d3b75253180b0fca9ceed8b3955a2d458689f551cd24fd904d0f65647c62c6b08795bf languageName: node linkType: hard -"@opencensus/propagation-b3@npm:0.0.8": - version: 0.0.8 - resolution: "@opencensus/propagation-b3@npm:0.0.8" +"@smithy/service-error-classification@npm:^3.0.3": + version: 3.0.3 + resolution: "@smithy/service-error-classification@npm:3.0.3" dependencies: - "@opencensus/core": ^0.0.8 - uuid: ^3.2.1 - checksum: c480bd181062ac15f23d5c833a1b1760f2734e013ab7d0bc3fc24d7d1f8330f38f426a56df6d1baf1384727b3dbc1f9ba2851caaac2125500327117fbafa8f70 + "@smithy/types": ^3.3.0 + checksum: 5bef710f5698c929c97865cba41f36b0c59100b9a1c4478a2d47caeb5e3a1a18077b870b365efaa45c94666f2075bc8978f7a6e8b964afbba3a4e490eb6c13eb languageName: node linkType: hard -"@pkgjs/parseargs@npm:^0.11.0": - version: 0.11.0 - resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f +"@smithy/shared-ini-file-loader@npm:^3.1.4": + version: 3.1.4 + resolution: "@smithy/shared-ini-file-loader@npm:3.1.4" + dependencies: + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: c5321635f3be34e424009fc9045454a9ceec543ec20b3b9719bf3a48bbfc03b794f4545546e9c2dcb0a987de2ca5ff8999df9bf7c166c6fc7685c1fa1f068bc1 languageName: node linkType: hard -"@pkgr/core@npm:^0.1.0": - version: 0.1.1 - resolution: "@pkgr/core@npm:0.1.1" - checksum: 6f25fd2e3008f259c77207ac9915b02f1628420403b2630c92a07ff963129238c9262afc9e84344c7a23b5cc1f3965e2cd17e3798219f5fd78a63d144d3cceba +"@smithy/signature-v4@npm:^4.0.0": + version: 4.0.0 + resolution: "@smithy/signature-v4@npm:4.0.0" + dependencies: + "@smithy/is-array-buffer": ^3.0.0 + "@smithy/types": ^3.3.0 + "@smithy/util-hex-encoding": ^3.0.0 + "@smithy/util-middleware": ^3.0.3 + "@smithy/util-uri-escape": ^3.0.0 + "@smithy/util-utf8": ^3.0.0 + tslib: ^2.6.2 + checksum: 9cebd322cbfbc8794f4a21af1152d343c4ec431d0732985e6067d3d0038d2ae970e5f12cd4862b1380a3cd1d86230bdf90a171a93d3cd82b8cbe140a4d3685b0 languageName: node linkType: hard -"@pm2/agent@npm:~2.0.0": - version: 2.0.4 - resolution: "@pm2/agent@npm:2.0.4" +"@smithy/smithy-client@npm:^3.1.8, @smithy/smithy-client@npm:^3.1.9": + version: 3.1.9 + resolution: "@smithy/smithy-client@npm:3.1.9" dependencies: - async: ~3.2.0 - chalk: ~3.0.0 - dayjs: ~1.8.24 - debug: ~4.3.1 - eventemitter2: ~5.0.1 - fast-json-patch: ^3.0.0-1 - fclone: ~1.0.11 - nssocket: 0.6.0 - pm2-axon: ~4.0.1 - pm2-axon-rpc: ~0.7.0 - proxy-agent: ~6.3.0 - semver: ~7.5.0 - ws: ~7.5.10 - checksum: 1a8d09c95b0f0ee1a341194b6aeb52a94c46592a95f5523a3124b6ccf73626e303491728d6f388bdeef9763d97ed71c46674fa12429d2963ec735b2eab987665 + "@smithy/middleware-endpoint": ^3.0.5 + "@smithy/middleware-stack": ^3.0.3 + "@smithy/protocol-http": ^4.0.4 + "@smithy/types": ^3.3.0 + "@smithy/util-stream": ^3.1.1 + tslib: ^2.6.2 + checksum: 2d030ca4dd3e0767e30d3bd78d7eaea19ec96f8b03a8e15b61494ea4719f63d6f25290d2d4269fdbcc2df1912ece1aa8a4b92b5f2c2f3d3c75628002ce0b5b6a languageName: node linkType: hard -"@pm2/io@npm:~5.0.0": - version: 5.0.2 - resolution: "@pm2/io@npm:5.0.2" +"@smithy/types@npm:^3.3.0": + version: 3.3.0 + resolution: "@smithy/types@npm:3.3.0" dependencies: - "@opencensus/core": 0.0.9 - "@opencensus/propagation-b3": 0.0.8 - async: ~2.6.1 - debug: ~4.3.1 - eventemitter2: ^6.3.1 - require-in-the-middle: ^5.0.0 - semver: ~7.5.4 - shimmer: ^1.2.0 - signal-exit: ^3.0.3 - tslib: 1.9.3 - checksum: 54e4cf462a00f86d5d3a201dee72490a253896e732dee6ce0282c55ef59d088974d7f5665f586d9f2ef35c099f5bf345fdd39a099c61c88877d215da2ce345ac + tslib: ^2.6.2 + checksum: 29bb5f83c41e32f8d4094a2aba2d3dfbd763ab5943784a700f3fa22df0dcf0ccac1b1907f7a87fbb9f6f2269fcd4750524bcb48f892249e200ffe397c0981309 languageName: node linkType: hard -"@pm2/js-api@npm:~0.6.7": - version: 0.6.7 - resolution: "@pm2/js-api@npm:0.6.7" +"@smithy/url-parser@npm:^3.0.3": + version: 3.0.3 + resolution: "@smithy/url-parser@npm:3.0.3" dependencies: - async: ^2.6.3 - axios: ^0.21.0 - debug: ~4.3.1 - eventemitter2: ^6.3.1 - ws: ^7.0.0 - checksum: 43d1e4d06328ad18d8929225a0732fa20701694dea0e3af0ea692239e0adc45ef2f48a794599a8df88bc705d2e428b5b8018deb3709983c91ed0b74a834b2f21 + "@smithy/querystring-parser": ^3.0.3 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 86b4bc8e6c176b56076c30233ca4cfeb98d162fe27a348ddfda5f163ce7d173b8e684aa26202bbf4e0b5695b0ad43c0cb40170ca6793652d0ea6edb00443c036 languageName: node linkType: hard -"@pm2/pm2-version-check@npm:latest": - version: 1.0.4 - resolution: "@pm2/pm2-version-check@npm:1.0.4" +"@smithy/util-base64@npm:^3.0.0": + version: 3.0.0 + resolution: "@smithy/util-base64@npm:3.0.0" dependencies: - debug: ^4.3.1 - checksum: 663438d9154db3c11bc7d41a4838162542db9cb4cf989fe8936e9bd9e5b99e3a58d73c8888afa1180a8cb93375c1d165bb397939de8a5ab8507d13d2aed2a086 + "@smithy/util-buffer-from": ^3.0.0 + "@smithy/util-utf8": ^3.0.0 + tslib: ^2.6.2 + checksum: 413f26046a7e98b2661a078f218a8d040c820fc5a02f5e364aff58c3957e28fde1ac4048c2ebbad5d87b9da4b9aa98a8d4a7fb0d2ce97def33738bd7d8d79aa0 languageName: node linkType: hard -"@sagold/json-pointer@npm:^5.1.1, @sagold/json-pointer@npm:^5.1.2": - version: 5.1.2 - resolution: "@sagold/json-pointer@npm:5.1.2" - checksum: e29afd3f7e21196e369b332e99504472742ac5a0c141438071e822d3bd9fa55164a14dd25cc0396f2d50b0f9d9b76161e81c83c2035e16e72731b98130968cda +"@smithy/util-body-length-browser@npm:^3.0.0": + version: 3.0.0 + resolution: "@smithy/util-body-length-browser@npm:3.0.0" + dependencies: + tslib: ^2.6.2 + checksum: b01d8258b9a25b262734fc49cefefe48583ba193c3eefd49a6f7fd5922c3015d23dda88b52f3dd9a16827cad16b5b9425eef01e91bd0c71bb5abc469d2952c07 languageName: node linkType: hard -"@sagold/json-query@npm:^6.1.1": - version: 6.2.0 - resolution: "@sagold/json-query@npm:6.2.0" +"@smithy/util-body-length-node@npm:^3.0.0": + version: 3.0.0 + resolution: "@smithy/util-body-length-node@npm:3.0.0" dependencies: - "@sagold/json-pointer": ^5.1.2 - ebnf: ^1.9.1 - checksum: 1c29a1bb81fa14573d37f485170083b0f43ecee66d08422f8ff6d3083ab65954cff9178502132d87175f34cf1e432e1ee7985d60417e350a730de907c63ef633 + tslib: ^2.6.2 + checksum: da1baf4790609d3dc28c88385c7274fdf9b91a641fe3c5af22b78e18156df17bd470181348f43b2c739680936b1dafb1526158dfd817c3d9ecb71e653b4cbe3f languageName: node linkType: hard -"@scaleleap/pg-format@npm:1.0.0": - version: 1.0.0 - resolution: "@scaleleap/pg-format@npm:1.0.0" - checksum: 4ba49e13ee53d5710bfd17519f09edb39645de0678f93d0a03ce8c20d5b5837f0768fa9b6233ba26e1158e4b411d93acb47cc653aefff2de7591bf5797336fd2 +"@smithy/util-buffer-from@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/util-buffer-from@npm:2.2.0" + dependencies: + "@smithy/is-array-buffer": ^2.2.0 + tslib: ^2.6.2 + checksum: 424c5b7368ae5880a8f2732e298d17879a19ca925f24ca45e1c6c005f717bb15b76eb28174d308d81631ad457ea0088aab0fd3255dd42f45a535c81944ad64d3 languageName: node linkType: hard -"@sentry-internal/tracing@npm:7.48.0": - version: 7.48.0 - resolution: "@sentry-internal/tracing@npm:7.48.0" +"@smithy/util-buffer-from@npm:^3.0.0": + version: 3.0.0 + resolution: "@smithy/util-buffer-from@npm:3.0.0" dependencies: - "@sentry/core": 7.48.0 - "@sentry/types": 7.48.0 - "@sentry/utils": 7.48.0 - tslib: ^1.9.3 - checksum: 61e9d1c5f34db9a23ae8f34b6d479e9929e968fa63e4d0d2da92cf49f4a6d82b992161b781278296112a8851920d75a9e538134014c63f7e3d7de2b3d3e6fc4a + "@smithy/is-array-buffer": ^3.0.0 + tslib: ^2.6.2 + checksum: 1bfc4ab093fe98132bbc1ccd36a0b9ad75a31ed26bac4b7e9350205513a2481eb190ae44679ab4fecc5e10d367b5e6592bbfbf792671579d17d17bd7f7f233f5 languageName: node linkType: hard -"@sentry/core@npm:7.48.0": - version: 7.48.0 - resolution: "@sentry/core@npm:7.48.0" +"@smithy/util-config-provider@npm:^3.0.0": + version: 3.0.0 + resolution: "@smithy/util-config-provider@npm:3.0.0" dependencies: - "@sentry/types": 7.48.0 - "@sentry/utils": 7.48.0 - tslib: ^1.9.3 - checksum: cc4d0ada638a6da4b56f1824c419ef1aea7867cb1079d647cf9397752e86215fcad2dd7eebdf9893dedab64cfa3473435ed89e2afdc6eb8d68041b836b3e605a + tslib: ^2.6.2 + checksum: fc0f5f57d30261cf3a6693d8e338b9d269332c478ee18d905309a769844188190caf0564855d7e84f6c61e56aa556195dda89f65e8c30791951cf4999e4a70e7 languageName: node linkType: hard -"@sentry/integrations@npm:7.48.0": - version: 7.48.0 - resolution: "@sentry/integrations@npm:7.48.0" +"@smithy/util-defaults-mode-browser@npm:^3.0.10": + version: 3.0.11 + resolution: "@smithy/util-defaults-mode-browser@npm:3.0.11" dependencies: - "@sentry/types": 7.48.0 - "@sentry/utils": 7.48.0 - localforage: ^1.8.1 - tslib: ^1.9.3 - checksum: f3347e0c5b696cc14c91a5e8c63130c2c0d3971bbbe725d5e4e423fa65bda31bd56c3c0cd6ad5a667ea98a79a7a3f584c7b44cf7bad5a17dc81df7ec98c5e398 + "@smithy/property-provider": ^3.1.3 + "@smithy/smithy-client": ^3.1.9 + "@smithy/types": ^3.3.0 + bowser: ^2.11.0 + tslib: ^2.6.2 + checksum: 62536fc7e81a180e30445c94af022223a89346c3c2f2d3fe7e48ec67e198ed31e1de598f6195a3142b6db7edb94b701ad49f52a6ef9ed546b137b97219537014 languageName: node linkType: hard -"@sentry/node@npm:7.48.0": - version: 7.48.0 - resolution: "@sentry/node@npm:7.48.0" +"@smithy/util-defaults-mode-node@npm:^3.0.10": + version: 3.0.11 + resolution: "@smithy/util-defaults-mode-node@npm:3.0.11" dependencies: - "@sentry-internal/tracing": 7.48.0 - "@sentry/core": 7.48.0 - "@sentry/types": 7.48.0 - "@sentry/utils": 7.48.0 - cookie: ^0.4.1 - https-proxy-agent: ^5.0.0 - lru_map: ^0.3.3 - tslib: ^1.9.3 - checksum: de9bbdd84d56a7851006a1c61c6ec08877fb7332bad83bfc4a3f5ca172a46b2d34cd084844531ac37de25fc317347820f182fd82e60aa54b4bb5046f848888ec + "@smithy/config-resolver": ^3.0.5 + "@smithy/credential-provider-imds": ^3.1.4 + "@smithy/node-config-provider": ^3.1.4 + "@smithy/property-provider": ^3.1.3 + "@smithy/smithy-client": ^3.1.9 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 3df80c51cf77cd5215e64a48936831fad5f7d2accff3bed1ac62813bbd49da601cbca386b6efe0af67d33ddea423f428df14b4ca750ec7a376eb8a2e95893ba8 languageName: node linkType: hard -"@sentry/types@npm:7.48.0": - version: 7.48.0 - resolution: "@sentry/types@npm:7.48.0" - checksum: a2378f3ccfe0d3c28031c48edb4516e4fd77d5e709f2b758dffc4e0c98a83983a9c2f1022d2a719b14a0db9427a53f689ccae6df24644389e461152e44da1ae0 +"@smithy/util-endpoints@npm:^2.0.5": + version: 2.0.5 + resolution: "@smithy/util-endpoints@npm:2.0.5" + dependencies: + "@smithy/node-config-provider": ^3.1.4 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: bb2a96323f52beaf2820f4e5764c865cff3ac5bca0c0df6923bb4582b0f87faf1606110cd4e36005ac43f41e9673ebdca4bbb8b913880fc2a4e0ff3301250da8 languageName: node linkType: hard -"@sentry/utils@npm:7.48.0": - version: 7.48.0 - resolution: "@sentry/utils@npm:7.48.0" +"@smithy/util-hex-encoding@npm:^3.0.0": + version: 3.0.0 + resolution: "@smithy/util-hex-encoding@npm:3.0.0" dependencies: - "@sentry/types": 7.48.0 - tslib: ^1.9.3 - checksum: 879a2866897684b5af43fdf2946bc37f6e5d7dd4310d3cc838a3f9b59dc3ed39084e8cf90ebf5cc699946b7c280653d6bff9cf695b43203f033aee08781b787a + tslib: ^2.6.2 + checksum: dd32fd71e915825987a18bf7c0f8f0c4956d0b17a0ee71592b5563bb20e04f24dbf81d36161aac07caab3bb5e535cc609fce20aa4a38f66b457c4c6f5c7748d9 languageName: node linkType: hard -"@sindresorhus/is@npm:4.6.0": - version: 4.6.0 - resolution: "@sindresorhus/is@npm:4.6.0" - checksum: 83839f13da2c29d55c97abc3bc2c55b250d33a0447554997a85c539e058e57b8da092da396e252b11ec24a0279a0bed1f537fa26302209327060643e327f81d2 +"@smithy/util-middleware@npm:^3.0.3": + version: 3.0.3 + resolution: "@smithy/util-middleware@npm:3.0.3" + dependencies: + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: f37f25d65595af5ff4c3f69fa7e66545ac1651f77979e15ffbc9047e18fc668dae90458ee76add85a49ea3729c49d317e40542d5430e81e2eafe8dcae2ddb3bc languageName: node linkType: hard -"@sinonjs/commons@npm:^2.0.0": - version: 2.0.0 - resolution: "@sinonjs/commons@npm:2.0.0" +"@smithy/util-retry@npm:^3.0.3": + version: 3.0.3 + resolution: "@smithy/util-retry@npm:3.0.3" dependencies: - type-detect: 4.0.8 - checksum: 5023ba17edf2b85ed58262313b8e9b59e23c6860681a9af0200f239fe939e2b79736d04a260e8270ddd57196851dde3ba754d7230be5c5234e777ae2ca8af137 + "@smithy/service-error-classification": ^3.0.3 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: c760595376154be67414083aa6f76094022df72987521469b124ef3ef5848c0536757dcd2006520580380db6a4d7b597a05569470c3151f71d5e678df63f4c13 languageName: node linkType: hard -"@sinonjs/commons@npm:^3.0.0": - version: 3.0.1 - resolution: "@sinonjs/commons@npm:3.0.1" - dependencies: - type-detect: 4.0.8 - checksum: a7c3e7cc612352f4004873747d9d8b2d4d90b13a6d483f685598c945a70e734e255f1ca5dc49702515533c403b32725defff148177453b3f3915bcb60e9d4601 +"@smithy/util-stream@npm:^3.1.0, @smithy/util-stream@npm:^3.1.1": + version: 3.1.1 + resolution: "@smithy/util-stream@npm:3.1.1" + dependencies: + "@smithy/fetch-http-handler": ^3.2.2 + "@smithy/node-http-handler": ^3.1.3 + "@smithy/types": ^3.3.0 + "@smithy/util-base64": ^3.0.0 + "@smithy/util-buffer-from": ^3.0.0 + "@smithy/util-hex-encoding": ^3.0.0 + "@smithy/util-utf8": ^3.0.0 + tslib: ^2.6.2 + checksum: a66ce6ffebfccbf5bf81cfef08f9286839e6d17406203e42d41d611e69da558a0c1ef98b218e5544a07a8171a60792437c3468d92ef41910a8472c052f47c6bc languageName: node linkType: hard -"@sinonjs/fake-timers@npm:^10.0.2": - version: 10.3.0 - resolution: "@sinonjs/fake-timers@npm:10.3.0" +"@smithy/util-uri-escape@npm:^3.0.0": + version: 3.0.0 + resolution: "@smithy/util-uri-escape@npm:3.0.0" dependencies: - "@sinonjs/commons": ^3.0.0 - checksum: 614d30cb4d5201550c940945d44c9e0b6d64a888ff2cd5b357f95ad6721070d6b8839cd10e15b76bf5e14af0bcc1d8f9ec00d49a46318f1f669a4bec1d7f3148 + tslib: ^2.6.2 + checksum: d7ee01c978e2b08d0a89a3b678f5d5e5d5bb4ab4ab85567a238b1a6195dff1bdaf9ae62497e7f32ff5121b3dc007c370bcb6e8ef79b01fe5acdec5bbce8c7ce4 languageName: node linkType: hard -"@sinonjs/fake-timers@npm:^11.2.2": - version: 11.2.2 - resolution: "@sinonjs/fake-timers@npm:11.2.2" +"@smithy/util-utf8@npm:^2.0.0": + version: 2.3.0 + resolution: "@smithy/util-utf8@npm:2.3.0" dependencies: - "@sinonjs/commons": ^3.0.0 - checksum: 68c29b0e1856fdc280df03ddbf57c726420b78e9f943a241b471edc018fb14ff36fdc1daafd6026cba08c3c7f50c976fb7ae11b88ff44cd7f609692ca7d25158 + "@smithy/util-buffer-from": ^2.2.0 + tslib: ^2.6.2 + checksum: 00e55d4b4e37d48be0eef3599082402b933c52a1407fed7e8e8ad76d94d81a0b30b8bfaf2047c59d9c3af31e5f20e7a8c959cb7ae270f894255e05a2229964f0 languageName: node linkType: hard -"@sinonjs/samsam@npm:^8.0.0": - version: 8.0.0 - resolution: "@sinonjs/samsam@npm:8.0.0" +"@smithy/util-utf8@npm:^3.0.0": + version: 3.0.0 + resolution: "@smithy/util-utf8@npm:3.0.0" dependencies: - "@sinonjs/commons": ^2.0.0 - lodash.get: ^4.4.2 - type-detect: ^4.0.8 - checksum: 95e40d0bb9f7288e27c379bee1b03c3dc51e7e78b9d5ea6aef66a690da7e81efc4715145b561b449cefc5361a171791e3ce30fb1a46ab247d4c0766024c60a60 + "@smithy/util-buffer-from": ^3.0.0 + tslib: ^2.6.2 + checksum: d97be1748963263a1161ba80417d82318b977b38542f3fdf0379b0162461188be680e5bfb66a89d65652f0fad6ecf2ab23a43205979216e50602488f73434da3 languageName: node linkType: hard -"@sinonjs/text-encoding@npm:^0.7.2": - version: 0.7.2 - resolution: "@sinonjs/text-encoding@npm:0.7.2" - checksum: fe690002a32ba06906cf87e2e8fe84d1590294586f2a7fd180a65355b53660c155c3273d8011a5f2b77209b819aa7306678ae6e4aea0df014bd7ffd4bbbcf1ab +"@smithy/util-waiter@npm:^3.1.2": + version: 3.1.2 + resolution: "@smithy/util-waiter@npm:3.1.2" + dependencies: + "@smithy/abort-controller": ^3.1.1 + "@smithy/types": ^3.3.0 + tslib: ^2.6.2 + checksum: 35773b1bbbb215102555a55ce4de57cbd3e38f37546ca3e6748ce3856119019a613946b399c6d97981a0bad447ce9c41f87c276325ff4c0e5a2276ee4e9e384e languageName: node linkType: hard @@ -2834,7 +4147,7 @@ __metadata: languageName: node linkType: hard -"base64-js@npm:^1.3.0, base64-js@npm:^1.3.1": +"base64-js@npm:^1.0.2, base64-js@npm:^1.3.0, base64-js@npm:^1.3.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 @@ -2916,6 +4229,13 @@ __metadata: languageName: node linkType: hard +"bowser@npm:^2.11.0": + version: 2.11.0 + resolution: "bowser@npm:2.11.0" + checksum: 29c3f01f22e703fa6644fc3b684307442df4240b6e10f6cfe1b61c6ca5721073189ca97cdeedb376081148c8518e33b1d818a57f781d70b0b70e1f31fb48814f + languageName: node + linkType: hard + "boxen@npm:7.1.0": version: 7.1.0 resolution: "boxen@npm:7.1.0" @@ -2995,6 +4315,16 @@ __metadata: languageName: node linkType: hard +"buffer@npm:5.6.0": + version: 5.6.0 + resolution: "buffer@npm:5.6.0" + dependencies: + base64-js: ^1.0.2 + ieee754: ^1.1.4 + checksum: d659494c5032dd39d03d2912e64179cc44c6340e7e9d1f68d3840e7ab4559989fbce92b4950174593c38d05268224235ba404f0878775cab2a616b6dcad9c23e + languageName: node + linkType: hard + "buffer@npm:^5.5.0": version: 5.7.1 resolution: "buffer@npm:5.7.1" @@ -3286,6 +4616,9 @@ __metadata: version: 0.0.0-use.local resolution: "cli@workspace:cli" dependencies: + "@aws-sdk/client-s3": ^3.614.0 + "@aws-sdk/lib-storage": 3.616.0 + "@paralleldrive/cuid2": ^2.2.2 "@sentry/integrations": 7.48.0 "@sentry/node": 7.48.0 "@snaplet/copycat": 5.0.0 @@ -4886,7 +6219,7 @@ __metadata: languageName: node linkType: hard -"events@npm:^3.3.0": +"events@npm:3.3.0, events@npm:^3.3.0": version: 3.3.0 resolution: "events@npm:3.3.0" checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 @@ -5001,6 +6334,17 @@ __metadata: languageName: node linkType: hard +"fast-xml-parser@npm:4.2.5": + version: 4.2.5 + resolution: "fast-xml-parser@npm:4.2.5" + dependencies: + strnum: ^1.0.5 + bin: + fxparser: src/cli/cli.js + checksum: d32b22005504eeb207249bf40dc82d0994b5bb9ca9dcc731d335a1f425e47fe085b3cace3cf9d32172dd1a5544193c49e8615ca95b4bf95a4a4920a226b06d80 + languageName: node + linkType: hard + "fastest-levenshtein@npm:1.0.16": version: 1.0.16 resolution: "fastest-levenshtein@npm:1.0.16" @@ -5803,7 +7147,7 @@ __metadata: languageName: node linkType: hard -"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": +"ieee754@npm:^1.1.13, ieee754@npm:^1.1.4, ieee754@npm:^1.2.1": version: 1.2.1 resolution: "ieee754@npm:1.2.1" checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e @@ -5865,7 +7209,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3, inherits@npm:~2.0.4": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 @@ -8534,7 +9878,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": +"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -9341,6 +10685,16 @@ __metadata: languageName: node linkType: hard +"stream-browserify@npm:3.0.0": + version: 3.0.0 + resolution: "stream-browserify@npm:3.0.0" + dependencies: + inherits: ~2.0.4 + readable-stream: ^3.5.0 + checksum: 4c47ef64d6f03815a9ca3874e2319805e8e8a85f3550776c47ce523b6f4c6cd57f40e46ec6a9ab8ad260fde61863c2718f250d3bedb3fe9052444eb9abfd9921 + languageName: node + linkType: hard + "stream-meter@npm:^1.0.4": version: 1.0.4 resolution: "stream-meter@npm:1.0.4" @@ -9537,6 +10891,13 @@ __metadata: languageName: node linkType: hard +"strnum@npm:^1.0.5": + version: 1.0.5 + resolution: "strnum@npm:1.0.5" + checksum: 651b2031db5da1bf4a77fdd2f116a8ac8055157c5420f5569f64879133825915ad461513e7202a16d7fec63c54fd822410d0962f8ca12385c4334891b9ae6dd2 + languageName: node + linkType: hard + "summary@npm:^2.1.0": version: 2.1.0 resolution: "summary@npm:2.1.0" @@ -10273,6 +11634,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^9.0.1": + version: 9.0.1 + resolution: "uuid@npm:9.0.1" + bin: + uuid: dist/bin/uuid + checksum: 39931f6da74e307f51c0fb463dc2462807531dc80760a9bff1e35af4316131b4fc3203d16da60ae33f07fdca5b56f3f1dd662da0c99fea9aaeab2004780cc5f4 + languageName: node + linkType: hard + "valid-url@npm:^1.0.9": version: 1.0.9 resolution: "valid-url@npm:1.0.9" From 0f81082ba9b88d774413013816f2aae6ede87a94 Mon Sep 17 00:00:00 2001 From: khaya-zulu <39437696+khaya-zulu@users.noreply.github.com> Date: Wed, 24 Jul 2024 20:08:59 +0200 Subject: [PATCH 2/6] list snapshot --- cli/db.sqlite | Bin 0 -> 4096 bytes cli/db.sqlite-shm | Bin 0 -> 32768 bytes cli/db.sqlite-wal | 0 cli/package.json | 1 + .../snapshot/actions/list/lib/storage.ts | 175 ++++++++++++++++++ .../actions/share/shareAction.handler.ts | 16 ++ cli/src/lib/s3.ts | 82 ++++---- cli/src/lib/snapshotStorage.ts | 10 +- cli/src/tst.db | 0 9 files changed, 243 insertions(+), 41 deletions(-) create mode 100644 cli/db.sqlite create mode 100644 cli/db.sqlite-shm create mode 100644 cli/db.sqlite-wal create mode 100644 cli/src/commands/snapshot/actions/list/lib/storage.ts create mode 100644 cli/src/tst.db diff --git a/cli/db.sqlite b/cli/db.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..cc0c2467611109f6247c1a036b8c743ede0bfd8c GIT binary patch literal 4096 zcmWFz^vNtqRY=P(%1ta$FlG>7U}9o$P*7lCU|@t|AVoG{WYEjHzzfnYK(-m98b?E5 nGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nC=3Ar@T><* literal 0 HcmV?d00001 diff --git a/cli/db.sqlite-shm b/cli/db.sqlite-shm new file mode 100644 index 0000000000000000000000000000000000000000..fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10 GIT binary patch literal 32768 zcmeIuAr62r3 { + const storage = new SnapshotListStorage(settings, basePath) + await storage.init() + + const db = storage.getDatabase() + + return { + getSnapshotsMany: () => { + return db + .prepare('SELECT * FROM snapshots') + .all() + .map((r: any) => ({ + id: r.id, + name: r.name, + tags: r.tags, + createdAt: r.createdAt, + })) + }, + insertSnapshot: (data: { + id: string + name: string + createdAt: string + tags?: string[] + }) => { + return db.exec(`INSERT INTO snapshots ( + id, name, created_at, tags + ) VALUES ( + ${[ + `'${data.id}'`, + `'${data.name}'`, + `'${data.createdAt}'`, + data.tags ? `'${data.tags.toString()}'` : '[]', + ].join(',')} + )`) + }, + /** + * save current database instance to S3 + * bucket, will destroy the + */ + commit: async ( + opts: { + /** delete the file stored */ + destroy: boolean + } = { destroy: true } + ) => { + await storage.saveDatabaseFile() + if (opts.destroy) { + await storage.destoryDatabaseFile() + } + }, + } +} diff --git a/cli/src/commands/snapshot/actions/share/shareAction.handler.ts b/cli/src/commands/snapshot/actions/share/shareAction.handler.ts index ebd6954..b4d1c35 100644 --- a/cli/src/commands/snapshot/actions/share/shareAction.handler.ts +++ b/cli/src/commands/snapshot/actions/share/shareAction.handler.ts @@ -10,6 +10,8 @@ import { activity } from '~/lib/spinner.js' import { uploadSnapshot } from '~/lib/snapshotStorage.js' import { getOrCreateSnapshotIdStep } from './steps/getOrCreateSnapshot.js' import { needs } from '~/components/needs/index.js' +import { snapshotListStorage } from '../list/lib/storage.js' +import path from 'path' export async function handler(options: CommandOptions) { const { snapshotName: startsWith, latest, tags, noEncrypt } = await options @@ -67,5 +69,19 @@ export async function handler(options: CommandOptions) { act.done() } + const storage = await snapshotListStorage( + settings, + path.join(cache.paths.base, '..') + ) + + storage.insertSnapshot({ + id: snapshotId, + name: sss.summary.name, + tags: sss.summary.tags, + createdAt: new Date().toString(), + }) + + await storage.commit() + console.log(`Snapshot "${sss.summary.name}" shared`) } diff --git a/cli/src/lib/s3.ts b/cli/src/lib/s3.ts index 1930951..18cc1c0 100644 --- a/cli/src/lib/s3.ts +++ b/cli/src/lib/s3.ts @@ -1,7 +1,11 @@ -import { S3Client, HeadObjectCommand } from '@aws-sdk/client-s3' +import { + S3Client, + HeadObjectCommand, + ListObjectsV2Command, + GetObjectCommand, +} from '@aws-sdk/client-s3' import { Upload } from '@aws-sdk/lib-storage' import { type Readable } from 'stream' -import { config } from './config.js' export type S3Settings = { region?: string @@ -14,53 +18,42 @@ export type S3Settings = { export type StorageFile = string | Uint8Array | Buffer | Readable type UploadToBucketOptions = { - filename: string - snapshotId: string - settings?: S3Settings - bytes: number + bucket: string + key: string + client: S3Client } -let cachedClient: S3Client - /** * initialize an S3 client, if no config * is passed in, we will return the existing * instance or throw an error. * */ -export const initClient = (settings?: S3Settings) => { - if (!config && !cachedClient) { - throw new Error('No instance found, pass in config to create one.') - } - - if (settings) { - return new S3Client({ - region: settings.region, - endpoint: settings.endpoint, - credentials: { - accessKeyId: settings.accessKeyId, - secretAccessKey: settings.secretAccessKey, - }, - }) - } else { - return cachedClient - } +export const initClient = (settings: S3Settings) => { + return new S3Client({ + region: settings.region, + endpoint: settings.endpoint, + credentials: { + accessKeyId: settings.accessKeyId, + secretAccessKey: settings.secretAccessKey, + }, + }) } export const uploadFileToBucket = async ( body: StorageFile, options: UploadToBucketOptions, - hooks: { + hooks?: { onProgress: (progress: number) => void } ) => { - const { filename, snapshotId, settings } = options + const { client, bucket, key } = options const parellelUpload = new Upload({ - client: initClient(settings), + client: client, params: { - Bucket: settings?.bucket, - Key: generateSnapshotFileKey({ filename, snapshotId }), - Body: body, + Bucket: bucket, + Key: key, + Body: body }, tags: [ // TODO_BEFORE_REVIEW: pass in the Snapshot tags @@ -73,7 +66,7 @@ export const uploadFileToBucket = async ( if (ev.loaded && ev.total) { progress = (ev.loaded / ev.total) * 100 } - hooks.onProgress(progress) + hooks?.onProgress(progress) }) await parellelUpload.done() } @@ -95,15 +88,32 @@ export const generateSnapshotFileKey = (options: { export const checkIfObjectExists = async ( bucket: string, key: string, - settings?: S3Settings + client: S3Client ) => { try { - const client = await initClient(settings) await client.send(new HeadObjectCommand({ Bucket: bucket, Key: key })) - return true } catch (err) { - console.log(err) return false } } + +export const listBucketObjects = async (bucket: string, client: S3Client) => { + const listCommand = new ListObjectsV2Command({ + Bucket: bucket, + }) + + return client.send(listCommand) +} + +export const downloadFileFromBucket = async ( + bucket: string, + key: string, + options: { client: S3Client } +) => { + const getCommand = new GetObjectCommand({ Bucket: bucket, Key: key }) + const output = await options.client.send(getCommand) + + const unit8Array = await output.Body?.transformToByteArray() + return unit8Array ? Buffer.from(unit8Array) : undefined +} diff --git a/cli/src/lib/snapshotStorage.ts b/cli/src/lib/snapshotStorage.ts index f2603ba..93d85e1 100644 --- a/cli/src/lib/snapshotStorage.ts +++ b/cli/src/lib/snapshotStorage.ts @@ -10,7 +10,7 @@ import { getSnapshotFilePaths } from '@snaplet/sdk/cli' import md5File from 'md5-file' import { xdebugShare } from '~/commands/snapshot/actions/share/debugShare.js' -import { S3Settings, StorageFile, uploadFileToBucket } from '~/lib/s3.js' +import { generateSnapshotFileKey, initClient, S3Settings, StorageFile, uploadFileToBucket } from '~/lib/s3.js' const pipeline = util.promisify(stream.pipeline) @@ -212,13 +212,13 @@ const uploadFile = async ( xdebugShare(`upload file ${filepath} completed`) const fileToUpload = fs.createReadStream(filepath) + const snapshotKey = generateSnapshotFileKey({ filename, snapshotId }) await uploadFileToBucket( fileToUpload, { - bytes, - filename, - snapshotId, - settings, + bucket: settings.bucket, + key: snapshotKey, + client: initClient(settings) }, { onProgress, diff --git a/cli/src/tst.db b/cli/src/tst.db new file mode 100644 index 0000000..e69de29 From 09c4741f9b4edec3f12fb229fd6801f361b2c6d4 Mon Sep 17 00:00:00 2001 From: khaya-zulu <39437696+khaya-zulu@users.noreply.github.com> Date: Thu, 25 Jul 2024 11:41:58 +0200 Subject: [PATCH 3/6] add snapshot storage --- .../snapshot/actions/list/lib/storage.ts | 30 ++++++++++++--- cli/src/lib/hosts/cloudSnapshotHost.ts | 37 +++++++------------ cli/src/lib/hosts/hosts.ts | 2 +- yarn.lock | 34 ++++++++++++++++- 4 files changed, 73 insertions(+), 30 deletions(-) diff --git a/cli/src/commands/snapshot/actions/list/lib/storage.ts b/cli/src/commands/snapshot/actions/list/lib/storage.ts index f05d16a..ee93553 100644 --- a/cli/src/commands/snapshot/actions/list/lib/storage.ts +++ b/cli/src/commands/snapshot/actions/list/lib/storage.ts @@ -117,6 +117,10 @@ class SnapshotListStorage { } } +export type SnapshotListStorage = Awaited< + ReturnType +> + export const snapshotListStorage = async ( settings: S3Settings, /** base `.snaplet` folder */ @@ -128,10 +132,15 @@ export const snapshotListStorage = async ( const db = storage.getDatabase() return { - getSnapshotsMany: () => { + getSnapshotsMany: (rules?: { startsWith?: string }) => { return db - .prepare('SELECT * FROM snapshots') - .all() + .prepare( + [ + 'SELECT * FROM snapshots', + rules?.startsWith ? 'WHERE ? LIKE name || %' : null, + ].join(' ') + ) + .all(rules?.startsWith) .map((r: any) => ({ id: r.id, name: r.name, @@ -139,6 +148,17 @@ export const snapshotListStorage = async ( createdAt: r.createdAt, })) }, + getLatestSnapshot: () => { + return db + .prepare('SELECT * FROM snapshots ORDER BY created_at LIMIT 1') + .all() + .map((r: any) => ({ + id: r.id, + name: r.name, + tags: r.tags, + createdAt: r.created_at, + })) + }, insertSnapshot: (data: { id: string name: string @@ -152,13 +172,13 @@ export const snapshotListStorage = async ( `'${data.id}'`, `'${data.name}'`, `'${data.createdAt}'`, - data.tags ? `'${data.tags.toString()}'` : '[]', + data.tags ? `[${data.tags.toString()}]` : '[]', ].join(',')} )`) }, /** * save current database instance to S3 - * bucket, will destroy the + * bucket, will automatically delete the */ commit: async ( opts: { diff --git a/cli/src/lib/hosts/cloudSnapshotHost.ts b/cli/src/lib/hosts/cloudSnapshotHost.ts index 1f0aa3f..d1cb136 100644 --- a/cli/src/lib/hosts/cloudSnapshotHost.ts +++ b/cli/src/lib/hosts/cloudSnapshotHost.ts @@ -3,6 +3,8 @@ import { trpc } from '~/lib/trpc.js' import type { FilterSnapshotRules, Host } from './hosts.js' import { CloudSnapshot, determineExecTaskStatus } from '@snaplet/sdk/cli' +import { type SnapshotListStorage } from '~/commands/snapshot/actions/list/lib/storage.js' + type DbRetrievedSnapshot = NonNullable< Awaited> > @@ -53,34 +55,23 @@ function snapshotToCloudSnapshot(result: DbRetrievedSnapshot): CloudSnapshot { } export class CloudSnapshotHost implements Host { - public type = 'cloud' as const - private projectId: string - - constructor(o: { projectId: string }) { - this.projectId = o.projectId + storage: SnapshotListStorage + constructor(storage: SnapshotListStorage) { + this.storage = storage } - public getLatestSnapshot = async () => { - const result = await trpc.snapshot.latest.query({ - databaseId: this.projectId, - }) - if (!result) { - return undefined - } + getLatestSnapshot = async () => { + const result = this.storage.getLatestSnapshot() return snapshotToCloudSnapshot(result) } - public getAllSnapshots = async () => { - const snapshots = await trpc.snapshot.list.query({ - databaseId: this.projectId, - }) - const css = snapshots.map(snapshotToCloudSnapshot) - return css + + getAllSnapshots = async () => { + const snapshots = this.storage.getSnapshotsMany() + return snapshots } - public filterSnapshots = async (rules: FilterSnapshotRules) => { - const snapshots = await trpc.snapshot.filter.query({ - databaseId: this.projectId, - rules, - }) + + filterSnapshots = async (rules: FilterSnapshotRules) => { + const snaphots = this.storage.getSnapshotsMany(rules) return snapshots.map(snapshotToCloudSnapshot) } } diff --git a/cli/src/lib/hosts/hosts.ts b/cli/src/lib/hosts/hosts.ts index ae97d3e..d8da5ec 100644 --- a/cli/src/lib/hosts/hosts.ts +++ b/cli/src/lib/hosts/hosts.ts @@ -104,7 +104,7 @@ const getLocalHost = async () => { const getCloudHost = async () => { const projectConfig = await config.getProject() if (projectConfig.projectId) { - return new CloudSnapshotHost({ projectId: projectConfig.projectId }) + return new CloudSnapshotHost() } return null } diff --git a/yarn.lock b/yarn.lock index d00dc79..68ff48c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3459,6 +3459,15 @@ __metadata: languageName: node linkType: hard +"@types/temp@npm:^0.9.4": + version: 0.9.4 + resolution: "@types/temp@npm:0.9.4" + dependencies: + "@types/node": "*" + checksum: 4e82eed30bde68b33bbfa7c4cf6a2bc95f26eb31c90282bc8d98e00908d228074641cb4537cc00fd8a2924ff48ca10b4b10f7f133a85416f1751527c2e85863e + languageName: node + linkType: hard + "@types/urijs@npm:^1.19.19": version: 1.19.25 resolution: "@types/urijs@npm:1.19.25" @@ -4641,6 +4650,7 @@ __metadata: "@types/prompts": 2.4.4 "@types/semver": 7.3.13 "@types/sinon": 10.0.14 + "@types/temp": ^0.9.4 "@types/uuid": 8.3.4 "@types/yargs": 17.0.24 ansi-colors: 4.1.3 @@ -4681,6 +4691,7 @@ __metadata: prompts: 2.4.2 semver: 7.3.8 sinon: 15.0.4 + temp: ^0.9.4 terminal-link: 2.1.1 timeago.js: 4.0.2 tmp-promise: 3.0.3 @@ -8333,7 +8344,7 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:^0.5.6": +"mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.6": version: 0.5.6 resolution: "mkdirp@npm:0.5.6" dependencies: @@ -10090,6 +10101,17 @@ __metadata: languageName: node linkType: hard +"rimraf@npm:~2.6.2": + version: 2.6.3 + resolution: "rimraf@npm:2.6.3" + dependencies: + glob: ^7.1.3 + bin: + rimraf: ./bin.js + checksum: 3ea587b981a19016297edb96d1ffe48af7e6af69660e3b371dbfc73722a73a0b0e9be5c88089fbeeb866c389c1098e07f64929c7414290504b855f54f901ab10 + languageName: node + linkType: hard + "rollup@npm:^3.20.2": version: 3.29.4 resolution: "rollup@npm:3.29.4" @@ -10998,6 +11020,16 @@ __metadata: languageName: node linkType: hard +"temp@npm:^0.9.4": + version: 0.9.4 + resolution: "temp@npm:0.9.4" + dependencies: + mkdirp: ^0.5.1 + rimraf: ~2.6.2 + checksum: 8709d4d63278bd309ca0e49e80a268308dea543a949e71acd427b3314cd9417da9a2cc73425dd9c21c6780334dbffd67e05e7be5aaa73e9affe8479afc6f20e3 + languageName: node + linkType: hard + "terminal-link@npm:2.1.1": version: 2.1.1 resolution: "terminal-link@npm:2.1.1" From c52ba9f1cd741b08e86ef64cbe3c2be5c309e7ac Mon Sep 17 00:00:00 2001 From: khaya-zulu <39437696+khaya-zulu@users.noreply.github.com> Date: Thu, 25 Jul 2024 11:43:21 +0200 Subject: [PATCH 4/6] add snapshot storage --- .snaplet/config.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.snaplet/config.json b/.snaplet/config.json index be7c51f..f6564ae 100644 --- a/.snaplet/config.json +++ b/.snaplet/config.json @@ -2,6 +2,5 @@ "targetDatabaseUrl": "postgresql://postgres@localhost:5432/snaplet_development", "sourceDatabaseUrl": "postgresql://postgres@localhost:5432/snaplet_development", "s3Bucket": "snaplet", - "s3Region": "weur", - "s3Endpoint": "https://5a66eef6188e04b4072ce0caa4a95e24.r2.cloudflarestorage.com" + "s3Region": "weur" } \ No newline at end of file From 11fad8d24726acb632ce5fa15e9f3472f561d6b7 Mon Sep 17 00:00:00 2001 From: khaya-zulu <39437696+khaya-zulu@users.noreply.github.com> Date: Thu, 25 Jul 2024 11:44:21 +0200 Subject: [PATCH 5/6] remove sqlite db --- cli/db.sqlite | Bin 4096 -> 0 bytes cli/db.sqlite-shm | Bin 32768 -> 0 bytes cli/db.sqlite-wal | 0 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 cli/db.sqlite delete mode 100644 cli/db.sqlite-shm delete mode 100644 cli/db.sqlite-wal diff --git a/cli/db.sqlite b/cli/db.sqlite deleted file mode 100644 index cc0c2467611109f6247c1a036b8c743ede0bfd8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmWFz^vNtqRY=P(%1ta$FlG>7U}9o$P*7lCU|@t|AVoG{WYEjHzzfnYK(-m98b?E5 nGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nC=3Ar@T><* diff --git a/cli/db.sqlite-shm b/cli/db.sqlite-shm deleted file mode 100644 index fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeIuAr62r3 Date: Thu, 25 Jul 2024 23:51:50 +0200 Subject: [PATCH 6/6] remove --- cli/src/tst.db | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 cli/src/tst.db diff --git a/cli/src/tst.db b/cli/src/tst.db deleted file mode 100644 index e69de29..0000000