diff --git a/.gitignore b/.gitignore index e2d9212..1a61733 100755 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ /node_modules -*/test/ \ No newline at end of file +test/ \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit index a39d331..57474aa 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -3,4 +3,4 @@ cd core && npm run format && npx tsc -b && npm run build cd ../docker-builder npm run format && npm run build -cd ../proxy-server && npm run format && npm run build \ No newline at end of file +cd ../proxy-server && npm run format \ No newline at end of file diff --git a/core/actions/gh/import.ts b/core/actions/gh/import.ts index cc00c69..8495179 100644 --- a/core/actions/gh/import.ts +++ b/core/actions/gh/import.ts @@ -17,6 +17,7 @@ export async function importProject(importProject: ImportProjectType) { } const accessToken = await getAccessTokenByEmail(session.user.email); + const slug = generateSlug(); if (redis) { console.log({ @@ -28,6 +29,7 @@ export async function importProject(importProject: ImportProjectType) { JSON.stringify({ ...importProject, GITHUB_TOKEN: accessToken, + projectSlug: slug, }), ); console.log(res); @@ -58,7 +60,7 @@ export async function importProject(importProject: ImportProjectType) { branch: importProject.branch, buildCommand: importProject.build.buildCommand, installCommand: importProject.build.installCommand, - slug: generateSlug(), + slug: slug, createdAt: new Date(), updatedAt: new Date(), }, diff --git a/docker-builder/Makefile b/docker-builder/Makefile index 798c01b..d7f7182 100755 --- a/docker-builder/Makefile +++ b/docker-builder/Makefile @@ -3,7 +3,7 @@ CONTAINER_NAME=test-vercel-builder DOCKERFILE_PATH=Dockerfile ENV_FILE=.env DESTINATION_DIR=output -BUILD_FOLDER=build +EXPORTS_FOLDER=export help: @echo "Makefile commands:" @@ -44,9 +44,9 @@ reset: -docker rmi $(IMAGE_NAME) @echo "" -clean: stop - @echo "Removing Docker image..." - rm -rf build dist project DESTINATION_DIR +clean: + @echo "Removing ALL Folers..." + rm -rf $(DESTINATION_DIR) @echo "" logs: @@ -62,7 +62,7 @@ shell: copy: @echo "Copying build artifacts to $(DESTINATION_DIR)..." rm -rf $(DESTINATION_DIR) - docker cp $(CONTAINER_NAME):'/app/$(BUILD_FOLDER)' '$(DESTINATION_DIR)' + docker cp $(CONTAINER_NAME):'/app/$(EXPORTS_FOLDER)' '$(DESTINATION_DIR)' @echo "" serve: diff --git a/docker-builder/package.json b/docker-builder/package.json index 9b4239a..61b783b 100755 --- a/docker-builder/package.json +++ b/docker-builder/package.json @@ -14,10 +14,18 @@ "license": "ISC", "description": "", "dependencies": { + "@aws-sdk/client-s3": "^3.670.0", "@types/node": "^22.7.4", "dotenv": "^16.4.5", + "gitignore-parser": "^0.0.2", + "ignore": "^6.0.2", + "mime-types": "^2.1.35", "prettier": "^3.3.3", "simple-git": "^3.27.0", "ts-node": "^10.9.2" + }, + "devDependencies": { + "@types/gitignore-parser": "^0.0.3", + "@types/mime-types": "^2.1.4" } } diff --git a/docker-builder/pnpm-lock.yaml b/docker-builder/pnpm-lock.yaml new file mode 100644 index 0000000..ed57317 --- /dev/null +++ b/docker-builder/pnpm-lock.yaml @@ -0,0 +1,1516 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@aws-sdk/client-s3': + specifier: ^3.670.0 + version: 3.670.0 + '@types/node': + specifier: ^22.7.4 + version: 22.7.5 + dotenv: + specifier: ^16.4.5 + version: 16.4.5 + gitignore-parser: + specifier: ^0.0.2 + version: 0.0.2 + ignore: + specifier: ^6.0.2 + version: 6.0.2 + mime-types: + specifier: ^2.1.35 + version: 2.1.35 + prettier: + specifier: ^3.3.3 + version: 3.3.3 + simple-git: + specifier: ^3.27.0 + version: 3.27.0 + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@22.7.5)(typescript@5.6.3) + devDependencies: + '@types/gitignore-parser': + specifier: ^0.0.3 + version: 0.0.3 + '@types/mime-types': + specifier: ^2.1.4 + version: 2.1.4 + +packages: + + '@aws-crypto/crc32@5.2.0': + resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/crc32c@5.2.0': + resolution: {integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==} + + '@aws-crypto/sha1-browser@5.2.0': + resolution: {integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==} + + '@aws-crypto/sha256-browser@5.2.0': + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} + + '@aws-crypto/sha256-js@5.2.0': + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/supports-web-crypto@5.2.0': + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + + '@aws-crypto/util@5.2.0': + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + + '@aws-sdk/client-s3@3.670.0': + resolution: {integrity: sha512-8Pwu1K+PgbYpXDaGKNy5hEbRH5FXHlfXJOhtV4oEDroL7ngix3ZUVWN9oIVVSDK02y1oQS1jCSEGUiUiauzb0g==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/client-sso-oidc@3.670.0': + resolution: {integrity: sha512-4qDK2L36Q4J1lfemaHHd9ZxqKRaos3STp44qPAHf/8QyX6Uk5sXgZNVO2yWM7SIEtVKwwBh/fZAsdBkGPBfZcw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.670.0 + + '@aws-sdk/client-sso@3.670.0': + resolution: {integrity: sha512-J+oz6uSsDvk4pimMDnKJb1wsV216zTrejvMTIL4RhUD1QPIVVOpteTdUShcjZUIZnkcJZGI+cym/SFK0kuzTpg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/client-sts@3.670.0': + resolution: {integrity: sha512-bExrNo8ZVWorS3cjMZKQnA2HWqDmAzcZoSN/cPVoPFNkHwdl1lzPxvcLzmhpIr48JHgKfybBjrbluDZfIYeEog==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/core@3.667.0': + resolution: {integrity: sha512-pMcDVI7Tmdsc8R3sDv0Omj/4iRParGY+uJtAfF669WnZfDfaBQaix2Mq7+Mu08vdjqO9K3gicFvjk9S1VLmOKA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-env@3.667.0': + resolution: {integrity: sha512-zZbrkkaPc54WXm+QAnpuv0LPNfsts0HPPd+oCECGs7IQRaFsGj187cwvPg9RMWDFZqpm64MdBDoA8OQHsqzYCw==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-http@3.667.0': + resolution: {integrity: sha512-sjtybFfERZWiqTY7fswBxKQLvUkiCucOWyqh3IaPo/4nE1PXRnaZCVG0+kRBPrYIxWqiVwytvZzMJy8sVZcG0A==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-ini@3.670.0': + resolution: {integrity: sha512-TB1gacUj75leaTt2JsCTzygDSIk4ksv9uZoR7VenlgFPRktyOeT+fapwIVBeB2Qg7b9uxAY2K5XkKstDZyBEEw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.670.0 + + '@aws-sdk/credential-provider-node@3.670.0': + resolution: {integrity: sha512-zwNrRYzubk4CaZ7zebeDhxsm8QtNWkbGKopZPOaZSnd5uqUGRcmx4ccVRngWUK68XDP44aEUWC8iU5Pc7btpHQ==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-process@3.667.0': + resolution: {integrity: sha512-HZHnvop32fKgsNHkdhVaul7UzQ25sEc0j9yqA4bjhtbk0ECl42kj3f1pJ+ZU/YD9ut8lMJs/vVqiOdNThVdeBw==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-sso@3.670.0': + resolution: {integrity: sha512-5PkA8BOy4q57Vhe9AESoHKZ7vjRbElNPKjXA4qC01xY+DitClRFz4O3B9sMzFp0PHlz9nDVSXXKgq0yzF/nAag==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.667.0': + resolution: {integrity: sha512-t8CFlZMD/1p/8Cli3rvRiTJpjr/8BO64gw166AHgFZYSN2h95L2l1tcW0jpsc3PprA32nLg1iQVKYt4WGM4ugw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.667.0 + + '@aws-sdk/middleware-bucket-endpoint@3.667.0': + resolution: {integrity: sha512-XGz4jMAkDoTyFdtLz7ZF+C05IAhCTC1PllpvTBaj821z/L0ilhbqVhrT/f2Buw8Id/K5A390csGXgusXyrFFjA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-expect-continue@3.667.0': + resolution: {integrity: sha512-0TiSL9S5DSG95NHGIz6qTMuV7GDKVn8tvvGSrSSZu/wXO3JaYSH0AElVpYfc4PtPRqVpEyNA7nnc7W56mMCLWQ==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-flexible-checksums@3.669.0': + resolution: {integrity: sha512-01UQLoUzVwWMf+b+AEuwJ2lluBD+Cp8AcbyEHqvEaPdjGKHIS4BCvnY70mZYnAfRtL8R2h9tt7iI61oWU3Gjkg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-host-header@3.667.0': + resolution: {integrity: sha512-Z7fIAMQnPegs7JjAQvlOeWXwpMRfegh5eCoIP6VLJIeR6DLfYKbP35JBtt98R6DXslrN2RsbTogjbxPEDQfw1w==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-location-constraint@3.667.0': + resolution: {integrity: sha512-ob85H3HhT3/u5O+x0o557xGZ78vSNeSSwMaSitxdsfs2hOuoUl1uk+OeLpi1hkuJnL41FPpokV7TVII2XrFfmg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-logger@3.667.0': + resolution: {integrity: sha512-PtTRNpNm/5c746jRgZCNg4X9xEJIwggkGJrF0GP9AB1ANg4pc/sF2Fvn1NtqPe9wtQ2stunJprnm5WkCHN7QiA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-recursion-detection@3.667.0': + resolution: {integrity: sha512-U5glWD3ehFohzpUpopLtmqAlDurGWo2wRGPNgi4SwhWU7UDt6LS7E/UvJjqC0CUrjlzOw+my2A+Ncf+fisMhxQ==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-sdk-s3@3.669.0': + resolution: {integrity: sha512-b2QUQ7DcIcVCUFhvmFEDI90BemvQhO0ntIajllLqQSy88PSNdLDCVx5mIzfxaaK/1tdY/UsEDRRm1kMQHJDQpg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-ssec@3.667.0': + resolution: {integrity: sha512-1wuAUZIkmZIvOmGg5qNQU821CGFHhkuKioxXgNh0DpUxZ9+AeiV7yorJr+bqkb2KBFv1i1TnzGRecvKf/KvZIQ==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-user-agent@3.669.0': + resolution: {integrity: sha512-K8ScPi45zjJrj5Y2gRqVsvKKQCQbvQBfYGcBw9ZOx9TTavH80bOCBjWg/GFnvs4f37tqVc1wMN2oGvcTF6HveQ==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/region-config-resolver@3.667.0': + resolution: {integrity: sha512-iNr+JhhA902JMKHG9IwT9YdaEx6KGl6vjAL5BRNeOjfj4cZYMog6Lz/IlfOAltMtT0w88DAHDEFrBd2uO0l2eg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/signature-v4-multi-region@3.669.0': + resolution: {integrity: sha512-TVwlWAxfBHnFjnfTBQWUhzVJzjwVhkq1+KR0JZV7JrfqeyBOdZjAaV9ie3VNY9HUouecq1fDuKaSwe4JiWQsHg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/token-providers@3.667.0': + resolution: {integrity: sha512-ZecJlG8p6D4UTYlBHwOWX6nknVtw/OBJ3yPXTSajBjhUlj9lE2xvejI8gl4rqkyLXk7z3bki+KR4tATbMaM9yg==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sso-oidc': ^3.667.0 + + '@aws-sdk/types@3.667.0': + resolution: {integrity: sha512-gYq0xCsqFfQaSL/yT1Gl1vIUjtsg7d7RhnUfsXaHt8xTxOKRTdH9GjbesBjXOzgOvB0W0vfssfreSNGFlOOMJg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/util-arn-parser@3.568.0': + resolution: {integrity: sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/util-endpoints@3.667.0': + resolution: {integrity: sha512-X22SYDAuQJWnkF1/q17pkX3nGw5XMD9YEUbmt87vUnRq7iyJ3JOpl6UKOBeUBaL838wA5yzdbinmCITJ/VZ1QA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/util-locate-window@3.568.0': + resolution: {integrity: sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/util-user-agent-browser@3.670.0': + resolution: {integrity: sha512-iRynWWazqEcCKwGMcQcywKTDLdLvqts1Yx474U64I9OKQXXwhOwhXbF5CAPSRta86lkVNAVYJa/0Bsv45pNn1A==} + + '@aws-sdk/util-user-agent-node@3.669.0': + resolution: {integrity: sha512-9jxCYrgggy2xd44ZASqI7AMiRVaSiFp+06Kg8BQSU0ijKpBJlwcsqIS8pDT/n6LxuOw2eV5ipvM2C0r1iKzrGA==} + engines: {node: '>=16.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + + '@aws-sdk/xml-builder@3.662.0': + resolution: {integrity: sha512-ikLkXn0igUpnJu2mCZjklvmcDGWT9OaLRv3JyC/cRkTaaSrblPjPM7KKsltxdMTLQ+v7fjCN0TsJpxphMfaOPA==} + engines: {node: '>=16.0.0'} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@kwsites/file-exists@1.1.1': + resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} + + '@kwsites/promise-deferred@1.1.1': + resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} + + '@smithy/abort-controller@3.1.5': + resolution: {integrity: sha512-DhNPnqTqPoG8aZ5dWkFOgsuY+i0GQ3CI6hMmvCoduNsnU9gUZWZBwGfDQsTTB7NvFPkom1df7jMIJWU90kuXXg==} + engines: {node: '>=16.0.0'} + + '@smithy/chunked-blob-reader-native@3.0.0': + resolution: {integrity: sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==} + + '@smithy/chunked-blob-reader@3.0.0': + resolution: {integrity: sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==} + + '@smithy/config-resolver@3.0.9': + resolution: {integrity: sha512-5d9oBf40qC7n2xUoHmntKLdqsyTMMo/r49+eqSIjJ73eDfEtljAxEhzIQ3bkgXJtR3xiv7YzMT/3FF3ORkjWdg==} + engines: {node: '>=16.0.0'} + + '@smithy/core@2.4.8': + resolution: {integrity: sha512-x4qWk7p/a4dcf7Vxb2MODIf4OIcqNbK182WxRvZ/3oKPrf/6Fdic5sSElhO1UtXpWKBazWfqg0ZEK9xN1DsuHA==} + engines: {node: '>=16.0.0'} + + '@smithy/credential-provider-imds@3.2.4': + resolution: {integrity: sha512-S9bb0EIokfYEuar4kEbLta+ivlKCWOCFsLZuilkNy9i0uEUEHSi47IFLPaxqqCl+0ftKmcOTHayY5nQhAuq7+w==} + engines: {node: '>=16.0.0'} + + '@smithy/eventstream-codec@3.1.6': + resolution: {integrity: sha512-SBiOYPBH+5wOyPS7lfI150ePfGLhnp/eTu5RnV9xvhGvRiKfnl6HzRK9wehBph+il8FxS9KTeadx7Rcmf1GLPQ==} + + '@smithy/eventstream-serde-browser@3.0.10': + resolution: {integrity: sha512-1i9aMY6Pl/SmA6NjvidxnfBLHMPzhKu2BP148pEt5VwhMdmXn36PE2kWKGa9Hj8b0XGtCTRucpCncylevCtI7g==} + engines: {node: '>=16.0.0'} + + '@smithy/eventstream-serde-config-resolver@3.0.7': + resolution: {integrity: sha512-eVzhGQBPEqXXYHvIUku0jMTxd4gDvenRzUQPTmKVWdRvp9JUCKrbAXGQRYiGxUYq9+cqQckRm0wq3kTWnNtDhw==} + engines: {node: '>=16.0.0'} + + '@smithy/eventstream-serde-node@3.0.9': + resolution: {integrity: sha512-JE0Guqvt0xsmfQ5y1EI342/qtJqznBv8cJqkHZV10PwC8GWGU5KNgFbQnsVCcX+xF+qIqwwfRmeWoJCjuOLmng==} + engines: {node: '>=16.0.0'} + + '@smithy/eventstream-serde-universal@3.0.9': + resolution: {integrity: sha512-bydfgSisfepCufw9kCEnWRxqxJFzX/o8ysXWv+W9F2FIyiaEwZ/D8bBKINbh4ONz3i05QJ1xE7A5OKYvgJsXaw==} + engines: {node: '>=16.0.0'} + + '@smithy/fetch-http-handler@3.2.9': + resolution: {integrity: sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A==} + + '@smithy/hash-blob-browser@3.1.6': + resolution: {integrity: sha512-BKNcMIaeZ9lB67sgo88iCF4YB35KT8X2dNJ8DqrtZNTgN6tUDYBKThzfGtos/mnZkGkW91AYHisESHmSiYQmKw==} + + '@smithy/hash-node@3.0.7': + resolution: {integrity: sha512-SAGHN+QkrwcHFjfWzs/czX94ZEjPJ0CrWJS3M43WswDXVEuP4AVy9gJ3+AF6JQHZD13bojmuf/Ap/ItDeZ+Qfw==} + engines: {node: '>=16.0.0'} + + '@smithy/hash-stream-node@3.1.6': + resolution: {integrity: sha512-sFSSt7cmCpFWZPfVx7k80Bgb1K2VJ27VmMxH8X+dDhp7Wv8IBgID4K2VK5ehMJROF8hQgcj4WywnkHIwX/xlwQ==} + engines: {node: '>=16.0.0'} + + '@smithy/invalid-dependency@3.0.7': + resolution: {integrity: sha512-Bq00GsAhHeYSuZX8Kpu4sbI9agH2BNYnqUmmbTGWOhki9NVsWn2jFr896vvoTMH8KAjNX/ErC/8t5QHuEXG+IA==} + + '@smithy/is-array-buffer@2.2.0': + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} + engines: {node: '>=14.0.0'} + + '@smithy/is-array-buffer@3.0.0': + resolution: {integrity: sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==} + engines: {node: '>=16.0.0'} + + '@smithy/md5-js@3.0.7': + resolution: {integrity: sha512-+wco9IN9uOW4tNGkZIqTR6IXyfO7Z8A+IOq82QCRn/f/xcmt7H1fXwmQVbfDSvbeFwfNnhv7s+u0G9PzPG6o2w==} + + '@smithy/middleware-content-length@3.0.9': + resolution: {integrity: sha512-t97PidoGElF9hTtLCrof32wfWMqC5g2SEJNxaVH3NjlatuNGsdxXRYO/t+RPnxA15RpYiS0f+zG7FuE2DeGgjA==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-endpoint@3.1.4': + resolution: {integrity: sha512-/ChcVHekAyzUbyPRI8CzPPLj6y8QRAfJngWcLMgsWxKVzw/RzBV69mSOzJYDD3pRwushA1+5tHtPF8fjmzBnrQ==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-retry@3.0.23': + resolution: {integrity: sha512-x9PbGXxkcXIpm6L26qRSCC+eaYcHwybRmqU8LO/WM2RRlW0g8lz6FIiKbKgGvHuoK3dLZRiQVSQJveiCzwnA5A==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-serde@3.0.7': + resolution: {integrity: sha512-VytaagsQqtH2OugzVTq4qvjkLNbWehHfGcGr0JLJmlDRrNCeZoWkWsSOw1nhS/4hyUUWF/TLGGml4X/OnEep5g==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-stack@3.0.7': + resolution: {integrity: sha512-EyTbMCdqS1DoeQsO4gI7z2Gzq1MoRFAeS8GkFYIwbedB7Lp5zlLHJdg+56tllIIG5Hnf9ZWX48YKSHlsKvugGA==} + engines: {node: '>=16.0.0'} + + '@smithy/node-config-provider@3.1.8': + resolution: {integrity: sha512-E0rU0DglpeJn5ge64mk8wTGEXcQwmpUTY5Zr7IzTpDLmHKiIamINERNZYrPQjg58Ck236sEKSwRSHA4CwshU6Q==} + engines: {node: '>=16.0.0'} + + '@smithy/node-http-handler@3.2.4': + resolution: {integrity: sha512-49reY3+JgLMFNm7uTAKBWiKCA6XSvkNp9FqhVmusm2jpVnHORYFeFZ704LShtqWfjZW/nhX+7Iexyb6zQfXYIQ==} + engines: {node: '>=16.0.0'} + + '@smithy/property-provider@3.1.7': + resolution: {integrity: sha512-QfzLi1GPMisY7bAM5hOUqBdGYnY5S2JAlr201pghksrQv139f8iiiMalXtjczIP5f6owxFn3MINLNUNvUkgtPw==} + engines: {node: '>=16.0.0'} + + '@smithy/protocol-http@4.1.4': + resolution: {integrity: sha512-MlWK8eqj0JlpZBnWmjQLqmFp71Ug00P+m72/1xQB3YByXD4zZ+y9N4hYrR0EDmrUCZIkyATWHOXFgtavwGDTzQ==} + engines: {node: '>=16.0.0'} + + '@smithy/querystring-builder@3.0.7': + resolution: {integrity: sha512-65RXGZZ20rzqqxTsChdqSpbhA6tdt5IFNgG6o7e1lnPVLCe6TNWQq4rTl4N87hTDD8mV4IxJJnvyE7brbnRkQw==} + engines: {node: '>=16.0.0'} + + '@smithy/querystring-parser@3.0.7': + resolution: {integrity: sha512-Fouw4KJVWqqUVIu1gZW8BH2HakwLz6dvdrAhXeXfeymOBrZw+hcqaWs+cS1AZPVp4nlbeIujYrKA921ZW2WMPA==} + engines: {node: '>=16.0.0'} + + '@smithy/service-error-classification@3.0.7': + resolution: {integrity: sha512-91PRkTfiBf9hxkIchhRKJfl1rsplRDyBnmyFca3y0Z3x/q0JJN480S83LBd8R6sBCkm2bBbqw2FHp0Mbh+ecSA==} + engines: {node: '>=16.0.0'} + + '@smithy/shared-ini-file-loader@3.1.8': + resolution: {integrity: sha512-0NHdQiSkeGl0ICQKcJQ2lCOKH23Nb0EaAa7RDRId6ZqwXkw4LJyIyZ0t3iusD4bnKYDPLGy2/5e2rfUhrt0Acw==} + engines: {node: '>=16.0.0'} + + '@smithy/signature-v4@4.2.0': + resolution: {integrity: sha512-LafbclHNKnsorMgUkKm7Tk7oJ7xizsZ1VwqhGKqoCIrXh4fqDDp73fK99HOEEgcsQbtemmeY/BPv0vTVYYUNEQ==} + engines: {node: '>=16.0.0'} + + '@smithy/smithy-client@3.4.0': + resolution: {integrity: sha512-nOfJ1nVQsxiP6srKt43r2My0Gp5PLWCW2ASqUioxIiGmu6d32v4Nekidiv5qOmmtzIrmaD+ADX5SKHUuhReeBQ==} + engines: {node: '>=16.0.0'} + + '@smithy/types@3.5.0': + resolution: {integrity: sha512-QN0twHNfe8mNJdH9unwsCK13GURU7oEAZqkBI+rsvpv1jrmserO+WnLE7jidR9W/1dxwZ0u/CB01mV2Gms/K2Q==} + engines: {node: '>=16.0.0'} + + '@smithy/url-parser@3.0.7': + resolution: {integrity: sha512-70UbSSR8J97c1rHZOWhl+VKiZDqHWxs/iW8ZHrHp5fCCPLSBE7GcUlUvKSle3Ca+J9LLbYCj/A79BxztBvAfpA==} + + '@smithy/util-base64@3.0.0': + resolution: {integrity: sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-body-length-browser@3.0.0': + resolution: {integrity: sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==} + + '@smithy/util-body-length-node@3.0.0': + resolution: {integrity: sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==} + engines: {node: '>=16.0.0'} + + '@smithy/util-buffer-from@2.2.0': + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} + engines: {node: '>=14.0.0'} + + '@smithy/util-buffer-from@3.0.0': + resolution: {integrity: sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==} + engines: {node: '>=16.0.0'} + + '@smithy/util-config-provider@3.0.0': + resolution: {integrity: sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-defaults-mode-browser@3.0.23': + resolution: {integrity: sha512-Y07qslyRtXDP/C5aWKqxTPBl4YxplEELG3xRrz2dnAQ6Lq/FgNrcKWmV561nNaZmFH+EzeGOX3ZRMbU8p1T6Nw==} + engines: {node: '>= 10.0.0'} + + '@smithy/util-defaults-mode-node@3.0.23': + resolution: {integrity: sha512-9Y4WH7f0vnDGuHUa4lGX9e2p+sMwODibsceSV6rfkZOvMC+BY3StB2LdO1NHafpsyHJLpwAgChxQ38tFyd6vkg==} + engines: {node: '>= 10.0.0'} + + '@smithy/util-endpoints@2.1.3': + resolution: {integrity: sha512-34eACeKov6jZdHqS5hxBMJ4KyWKztTMulhuQ2UdOoP6vVxMLrOKUqIXAwJe/wiWMhXhydLW664B02CNpQBQ4Aw==} + engines: {node: '>=16.0.0'} + + '@smithy/util-hex-encoding@3.0.0': + resolution: {integrity: sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-middleware@3.0.7': + resolution: {integrity: sha512-OVA6fv/3o7TMJTpTgOi1H5OTwnuUa8hzRzhSFDtZyNxi6OZ70L/FHattSmhE212I7b6WSOJAAmbYnvcjTHOJCA==} + engines: {node: '>=16.0.0'} + + '@smithy/util-retry@3.0.7': + resolution: {integrity: sha512-nh1ZO1vTeo2YX1plFPSe/OXaHkLAHza5jpokNiiKX2M5YpNUv6RxGJZhpfmiR4jSvVHCjIDmILjrxKmP+/Ghug==} + engines: {node: '>=16.0.0'} + + '@smithy/util-stream@3.1.9': + resolution: {integrity: sha512-7YAR0Ub3MwTMjDfjnup4qa6W8gygZMxikBhFMPESi6ASsl/rZJhwLpF/0k9TuezScCojsM0FryGdz4LZtjKPPQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-uri-escape@3.0.0': + resolution: {integrity: sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==} + engines: {node: '>=16.0.0'} + + '@smithy/util-utf8@2.3.0': + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + engines: {node: '>=14.0.0'} + + '@smithy/util-utf8@3.0.0': + resolution: {integrity: sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==} + engines: {node: '>=16.0.0'} + + '@smithy/util-waiter@3.1.6': + resolution: {integrity: sha512-xs/KAwWOeCklq8aMlnpk25LgxEYHKOEodfjfKclDMLcBJEVEKzDLxZxBQyztcuPJ7F54213NJS8PxoiHNMdItQ==} + engines: {node: '>=16.0.0'} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/gitignore-parser@0.0.3': + resolution: {integrity: sha512-sbdu1sG2pQcwjEYWTsX78OqJo5pKnonwC4FV3m2JeQRE2xYb3q0icHHopCHEvpn4uIBuvWBTpJUCJ76ISK24CA==} + + '@types/mime-types@2.1.4': + resolution: {integrity: sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==} + + '@types/node@22.7.5': + resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + + fast-xml-parser@4.4.1: + resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} + hasBin: true + + gitignore-parser@0.0.2: + resolution: {integrity: sha512-X6mpqUv59uWLGD4n3hZ8Cu8KbF2PMWPSFYmxZjdkpm3yOU7hSUYnzTkZI1mcWqchphvqyuz3/BhgBR4E/JtkCg==} + engines: {node: '>=0.10.0'} + + ignore@6.0.2: + resolution: {integrity: sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==} + engines: {node: '>= 4'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + + simple-git@3.27.0: + resolution: {integrity: sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA==} + + strnum@1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + + typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + +snapshots: + + '@aws-crypto/crc32@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.667.0 + tslib: 2.7.0 + + '@aws-crypto/crc32c@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.667.0 + tslib: 2.7.0 + + '@aws-crypto/sha1-browser@5.2.0': + dependencies: + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.667.0 + '@aws-sdk/util-locate-window': 3.568.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.7.0 + + '@aws-crypto/sha256-browser@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.667.0 + '@aws-sdk/util-locate-window': 3.568.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.7.0 + + '@aws-crypto/sha256-js@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.667.0 + tslib: 2.7.0 + + '@aws-crypto/supports-web-crypto@5.2.0': + dependencies: + tslib: 2.7.0 + + '@aws-crypto/util@5.2.0': + dependencies: + '@aws-sdk/types': 3.667.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.7.0 + + '@aws-sdk/client-s3@3.670.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.670.0(@aws-sdk/client-sts@3.670.0) + '@aws-sdk/client-sts': 3.670.0 + '@aws-sdk/core': 3.667.0 + '@aws-sdk/credential-provider-node': 3.670.0(@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0))(@aws-sdk/client-sts@3.670.0) + '@aws-sdk/middleware-bucket-endpoint': 3.667.0 + '@aws-sdk/middleware-expect-continue': 3.667.0 + '@aws-sdk/middleware-flexible-checksums': 3.669.0 + '@aws-sdk/middleware-host-header': 3.667.0 + '@aws-sdk/middleware-location-constraint': 3.667.0 + '@aws-sdk/middleware-logger': 3.667.0 + '@aws-sdk/middleware-recursion-detection': 3.667.0 + '@aws-sdk/middleware-sdk-s3': 3.669.0 + '@aws-sdk/middleware-ssec': 3.667.0 + '@aws-sdk/middleware-user-agent': 3.669.0 + '@aws-sdk/region-config-resolver': 3.667.0 + '@aws-sdk/signature-v4-multi-region': 3.669.0 + '@aws-sdk/types': 3.667.0 + '@aws-sdk/util-endpoints': 3.667.0 + '@aws-sdk/util-user-agent-browser': 3.670.0 + '@aws-sdk/util-user-agent-node': 3.669.0 + '@aws-sdk/xml-builder': 3.662.0 + '@smithy/config-resolver': 3.0.9 + '@smithy/core': 2.4.8 + '@smithy/eventstream-serde-browser': 3.0.10 + '@smithy/eventstream-serde-config-resolver': 3.0.7 + '@smithy/eventstream-serde-node': 3.0.9 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-blob-browser': 3.1.6 + '@smithy/hash-node': 3.0.7 + '@smithy/hash-stream-node': 3.1.6 + '@smithy/invalid-dependency': 3.0.7 + '@smithy/md5-js': 3.0.7 + '@smithy/middleware-content-length': 3.0.9 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.23 + '@smithy/middleware-serde': 3.0.7 + '@smithy/middleware-stack': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/node-http-handler': 3.2.4 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 + '@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.23 + '@smithy/util-defaults-mode-node': 3.0.23 + '@smithy/util-endpoints': 2.1.3 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 + '@smithy/util-stream': 3.1.9 + '@smithy/util-utf8': 3.0.0 + '@smithy/util-waiter': 3.1.6 + tslib: 2.7.0 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0)': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sts': 3.670.0 + '@aws-sdk/core': 3.667.0 + '@aws-sdk/credential-provider-node': 3.670.0(@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0))(@aws-sdk/client-sts@3.670.0) + '@aws-sdk/middleware-host-header': 3.667.0 + '@aws-sdk/middleware-logger': 3.667.0 + '@aws-sdk/middleware-recursion-detection': 3.667.0 + '@aws-sdk/middleware-user-agent': 3.669.0 + '@aws-sdk/region-config-resolver': 3.667.0 + '@aws-sdk/types': 3.667.0 + '@aws-sdk/util-endpoints': 3.667.0 + '@aws-sdk/util-user-agent-browser': 3.670.0 + '@aws-sdk/util-user-agent-node': 3.669.0 + '@smithy/config-resolver': 3.0.9 + '@smithy/core': 2.4.8 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-node': 3.0.7 + '@smithy/invalid-dependency': 3.0.7 + '@smithy/middleware-content-length': 3.0.9 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.23 + '@smithy/middleware-serde': 3.0.7 + '@smithy/middleware-stack': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/node-http-handler': 3.2.4 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 + '@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.23 + '@smithy/util-defaults-mode-node': 3.0.23 + '@smithy/util-endpoints': 2.1.3 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso@3.670.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.667.0 + '@aws-sdk/middleware-host-header': 3.667.0 + '@aws-sdk/middleware-logger': 3.667.0 + '@aws-sdk/middleware-recursion-detection': 3.667.0 + '@aws-sdk/middleware-user-agent': 3.669.0 + '@aws-sdk/region-config-resolver': 3.667.0 + '@aws-sdk/types': 3.667.0 + '@aws-sdk/util-endpoints': 3.667.0 + '@aws-sdk/util-user-agent-browser': 3.670.0 + '@aws-sdk/util-user-agent-node': 3.669.0 + '@smithy/config-resolver': 3.0.9 + '@smithy/core': 2.4.8 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-node': 3.0.7 + '@smithy/invalid-dependency': 3.0.7 + '@smithy/middleware-content-length': 3.0.9 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.23 + '@smithy/middleware-serde': 3.0.7 + '@smithy/middleware-stack': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/node-http-handler': 3.2.4 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 + '@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.23 + '@smithy/util-defaults-mode-node': 3.0.23 + '@smithy/util-endpoints': 2.1.3 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sts@3.670.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.670.0(@aws-sdk/client-sts@3.670.0) + '@aws-sdk/core': 3.667.0 + '@aws-sdk/credential-provider-node': 3.670.0(@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0))(@aws-sdk/client-sts@3.670.0) + '@aws-sdk/middleware-host-header': 3.667.0 + '@aws-sdk/middleware-logger': 3.667.0 + '@aws-sdk/middleware-recursion-detection': 3.667.0 + '@aws-sdk/middleware-user-agent': 3.669.0 + '@aws-sdk/region-config-resolver': 3.667.0 + '@aws-sdk/types': 3.667.0 + '@aws-sdk/util-endpoints': 3.667.0 + '@aws-sdk/util-user-agent-browser': 3.670.0 + '@aws-sdk/util-user-agent-node': 3.669.0 + '@smithy/config-resolver': 3.0.9 + '@smithy/core': 2.4.8 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-node': 3.0.7 + '@smithy/invalid-dependency': 3.0.7 + '@smithy/middleware-content-length': 3.0.9 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.23 + '@smithy/middleware-serde': 3.0.7 + '@smithy/middleware-stack': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/node-http-handler': 3.2.4 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 + '@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.23 + '@smithy/util-defaults-mode-node': 3.0.23 + '@smithy/util-endpoints': 2.1.3 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/core@3.667.0': + dependencies: + '@aws-sdk/types': 3.667.0 + '@smithy/core': 2.4.8 + '@smithy/node-config-provider': 3.1.8 + '@smithy/property-provider': 3.1.7 + '@smithy/protocol-http': 4.1.4 + '@smithy/signature-v4': 4.2.0 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/util-middleware': 3.0.7 + fast-xml-parser: 4.4.1 + tslib: 2.7.0 + + '@aws-sdk/credential-provider-env@3.667.0': + dependencies: + '@aws-sdk/core': 3.667.0 + '@aws-sdk/types': 3.667.0 + '@smithy/property-provider': 3.1.7 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/credential-provider-http@3.667.0': + dependencies: + '@aws-sdk/core': 3.667.0 + '@aws-sdk/types': 3.667.0 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/node-http-handler': 3.2.4 + '@smithy/property-provider': 3.1.7 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/util-stream': 3.1.9 + tslib: 2.7.0 + + '@aws-sdk/credential-provider-ini@3.670.0(@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0))(@aws-sdk/client-sts@3.670.0)': + dependencies: + '@aws-sdk/client-sts': 3.670.0 + '@aws-sdk/core': 3.667.0 + '@aws-sdk/credential-provider-env': 3.667.0 + '@aws-sdk/credential-provider-http': 3.667.0 + '@aws-sdk/credential-provider-process': 3.667.0 + '@aws-sdk/credential-provider-sso': 3.670.0(@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0)) + '@aws-sdk/credential-provider-web-identity': 3.667.0(@aws-sdk/client-sts@3.670.0) + '@aws-sdk/types': 3.667.0 + '@smithy/credential-provider-imds': 3.2.4 + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-node@3.670.0(@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0))(@aws-sdk/client-sts@3.670.0)': + dependencies: + '@aws-sdk/credential-provider-env': 3.667.0 + '@aws-sdk/credential-provider-http': 3.667.0 + '@aws-sdk/credential-provider-ini': 3.670.0(@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0))(@aws-sdk/client-sts@3.670.0) + '@aws-sdk/credential-provider-process': 3.667.0 + '@aws-sdk/credential-provider-sso': 3.670.0(@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0)) + '@aws-sdk/credential-provider-web-identity': 3.667.0(@aws-sdk/client-sts@3.670.0) + '@aws-sdk/types': 3.667.0 + '@smithy/credential-provider-imds': 3.2.4 + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' + - aws-crt + + '@aws-sdk/credential-provider-process@3.667.0': + dependencies: + '@aws-sdk/core': 3.667.0 + '@aws-sdk/types': 3.667.0 + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/credential-provider-sso@3.670.0(@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0))': + dependencies: + '@aws-sdk/client-sso': 3.670.0 + '@aws-sdk/core': 3.667.0 + '@aws-sdk/token-providers': 3.667.0(@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0)) + '@aws-sdk/types': 3.667.0 + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-web-identity@3.667.0(@aws-sdk/client-sts@3.670.0)': + dependencies: + '@aws-sdk/client-sts': 3.670.0 + '@aws-sdk/core': 3.667.0 + '@aws-sdk/types': 3.667.0 + '@smithy/property-provider': 3.1.7 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/middleware-bucket-endpoint@3.667.0': + dependencies: + '@aws-sdk/types': 3.667.0 + '@aws-sdk/util-arn-parser': 3.568.0 + '@smithy/node-config-provider': 3.1.8 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + '@smithy/util-config-provider': 3.0.0 + tslib: 2.7.0 + + '@aws-sdk/middleware-expect-continue@3.667.0': + dependencies: + '@aws-sdk/types': 3.667.0 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/middleware-flexible-checksums@3.669.0': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@aws-crypto/crc32c': 5.2.0 + '@aws-sdk/core': 3.667.0 + '@aws-sdk/types': 3.667.0 + '@smithy/is-array-buffer': 3.0.0 + '@smithy/node-config-provider': 3.1.8 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + + '@aws-sdk/middleware-host-header@3.667.0': + dependencies: + '@aws-sdk/types': 3.667.0 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/middleware-location-constraint@3.667.0': + dependencies: + '@aws-sdk/types': 3.667.0 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/middleware-logger@3.667.0': + dependencies: + '@aws-sdk/types': 3.667.0 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/middleware-recursion-detection@3.667.0': + dependencies: + '@aws-sdk/types': 3.667.0 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/middleware-sdk-s3@3.669.0': + dependencies: + '@aws-sdk/core': 3.667.0 + '@aws-sdk/types': 3.667.0 + '@aws-sdk/util-arn-parser': 3.568.0 + '@smithy/core': 2.4.8 + '@smithy/node-config-provider': 3.1.8 + '@smithy/protocol-http': 4.1.4 + '@smithy/signature-v4': 4.2.0 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/util-config-provider': 3.0.0 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-stream': 3.1.9 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + + '@aws-sdk/middleware-ssec@3.667.0': + dependencies: + '@aws-sdk/types': 3.667.0 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/middleware-user-agent@3.669.0': + dependencies: + '@aws-sdk/core': 3.667.0 + '@aws-sdk/types': 3.667.0 + '@aws-sdk/util-endpoints': 3.667.0 + '@smithy/core': 2.4.8 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/region-config-resolver@3.667.0': + dependencies: + '@aws-sdk/types': 3.667.0 + '@smithy/node-config-provider': 3.1.8 + '@smithy/types': 3.5.0 + '@smithy/util-config-provider': 3.0.0 + '@smithy/util-middleware': 3.0.7 + tslib: 2.7.0 + + '@aws-sdk/signature-v4-multi-region@3.669.0': + dependencies: + '@aws-sdk/middleware-sdk-s3': 3.669.0 + '@aws-sdk/types': 3.667.0 + '@smithy/protocol-http': 4.1.4 + '@smithy/signature-v4': 4.2.0 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/token-providers@3.667.0(@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0))': + dependencies: + '@aws-sdk/client-sso-oidc': 3.670.0(@aws-sdk/client-sts@3.670.0) + '@aws-sdk/types': 3.667.0 + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/types@3.667.0': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/util-arn-parser@3.568.0': + dependencies: + tslib: 2.7.0 + + '@aws-sdk/util-endpoints@3.667.0': + dependencies: + '@aws-sdk/types': 3.667.0 + '@smithy/types': 3.5.0 + '@smithy/util-endpoints': 2.1.3 + tslib: 2.7.0 + + '@aws-sdk/util-locate-window@3.568.0': + dependencies: + tslib: 2.7.0 + + '@aws-sdk/util-user-agent-browser@3.670.0': + dependencies: + '@aws-sdk/types': 3.667.0 + '@smithy/types': 3.5.0 + bowser: 2.11.0 + tslib: 2.7.0 + + '@aws-sdk/util-user-agent-node@3.669.0': + dependencies: + '@aws-sdk/middleware-user-agent': 3.669.0 + '@aws-sdk/types': 3.667.0 + '@smithy/node-config-provider': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@aws-sdk/xml-builder@3.662.0': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@kwsites/file-exists@1.1.1': + dependencies: + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + '@kwsites/promise-deferred@1.1.1': {} + + '@smithy/abort-controller@3.1.5': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@smithy/chunked-blob-reader-native@3.0.0': + dependencies: + '@smithy/util-base64': 3.0.0 + tslib: 2.7.0 + + '@smithy/chunked-blob-reader@3.0.0': + dependencies: + tslib: 2.7.0 + + '@smithy/config-resolver@3.0.9': + dependencies: + '@smithy/node-config-provider': 3.1.8 + '@smithy/types': 3.5.0 + '@smithy/util-config-provider': 3.0.0 + '@smithy/util-middleware': 3.0.7 + tslib: 2.7.0 + + '@smithy/core@2.4.8': + dependencies: + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.23 + '@smithy/middleware-serde': 3.0.7 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + + '@smithy/credential-provider-imds@3.2.4': + dependencies: + '@smithy/node-config-provider': 3.1.8 + '@smithy/property-provider': 3.1.7 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 + tslib: 2.7.0 + + '@smithy/eventstream-codec@3.1.6': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@smithy/types': 3.5.0 + '@smithy/util-hex-encoding': 3.0.0 + tslib: 2.7.0 + + '@smithy/eventstream-serde-browser@3.0.10': + dependencies: + '@smithy/eventstream-serde-universal': 3.0.9 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@smithy/eventstream-serde-config-resolver@3.0.7': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@smithy/eventstream-serde-node@3.0.9': + dependencies: + '@smithy/eventstream-serde-universal': 3.0.9 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@smithy/eventstream-serde-universal@3.0.9': + dependencies: + '@smithy/eventstream-codec': 3.1.6 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@smithy/fetch-http-handler@3.2.9': + dependencies: + '@smithy/protocol-http': 4.1.4 + '@smithy/querystring-builder': 3.0.7 + '@smithy/types': 3.5.0 + '@smithy/util-base64': 3.0.0 + tslib: 2.7.0 + + '@smithy/hash-blob-browser@3.1.6': + dependencies: + '@smithy/chunked-blob-reader': 3.0.0 + '@smithy/chunked-blob-reader-native': 3.0.0 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@smithy/hash-node@3.0.7': + dependencies: + '@smithy/types': 3.5.0 + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + + '@smithy/hash-stream-node@3.1.6': + dependencies: + '@smithy/types': 3.5.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + + '@smithy/invalid-dependency@3.0.7': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@smithy/is-array-buffer@2.2.0': + dependencies: + tslib: 2.7.0 + + '@smithy/is-array-buffer@3.0.0': + dependencies: + tslib: 2.7.0 + + '@smithy/md5-js@3.0.7': + dependencies: + '@smithy/types': 3.5.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + + '@smithy/middleware-content-length@3.0.9': + dependencies: + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@smithy/middleware-endpoint@3.1.4': + dependencies: + '@smithy/middleware-serde': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 + '@smithy/util-middleware': 3.0.7 + tslib: 2.7.0 + + '@smithy/middleware-retry@3.0.23': + dependencies: + '@smithy/node-config-provider': 3.1.8 + '@smithy/protocol-http': 4.1.4 + '@smithy/service-error-classification': 3.0.7 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 + tslib: 2.7.0 + uuid: 9.0.1 + + '@smithy/middleware-serde@3.0.7': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@smithy/middleware-stack@3.0.7': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@smithy/node-config-provider@3.1.8': + dependencies: + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@smithy/node-http-handler@3.2.4': + dependencies: + '@smithy/abort-controller': 3.1.5 + '@smithy/protocol-http': 4.1.4 + '@smithy/querystring-builder': 3.0.7 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@smithy/property-provider@3.1.7': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@smithy/protocol-http@4.1.4': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@smithy/querystring-builder@3.0.7': + dependencies: + '@smithy/types': 3.5.0 + '@smithy/util-uri-escape': 3.0.0 + tslib: 2.7.0 + + '@smithy/querystring-parser@3.0.7': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@smithy/service-error-classification@3.0.7': + dependencies: + '@smithy/types': 3.5.0 + + '@smithy/shared-ini-file-loader@3.1.8': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@smithy/signature-v4@4.2.0': + dependencies: + '@smithy/is-array-buffer': 3.0.0 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + '@smithy/util-hex-encoding': 3.0.0 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-uri-escape': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + + '@smithy/smithy-client@3.4.0': + dependencies: + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-stack': 3.0.7 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + '@smithy/util-stream': 3.1.9 + tslib: 2.7.0 + + '@smithy/types@3.5.0': + dependencies: + tslib: 2.7.0 + + '@smithy/url-parser@3.0.7': + dependencies: + '@smithy/querystring-parser': 3.0.7 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@smithy/util-base64@3.0.0': + dependencies: + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + + '@smithy/util-body-length-browser@3.0.0': + dependencies: + tslib: 2.7.0 + + '@smithy/util-body-length-node@3.0.0': + dependencies: + tslib: 2.7.0 + + '@smithy/util-buffer-from@2.2.0': + dependencies: + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.7.0 + + '@smithy/util-buffer-from@3.0.0': + dependencies: + '@smithy/is-array-buffer': 3.0.0 + tslib: 2.7.0 + + '@smithy/util-config-provider@3.0.0': + dependencies: + tslib: 2.7.0 + + '@smithy/util-defaults-mode-browser@3.0.23': + dependencies: + '@smithy/property-provider': 3.1.7 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + bowser: 2.11.0 + tslib: 2.7.0 + + '@smithy/util-defaults-mode-node@3.0.23': + dependencies: + '@smithy/config-resolver': 3.0.9 + '@smithy/credential-provider-imds': 3.2.4 + '@smithy/node-config-provider': 3.1.8 + '@smithy/property-provider': 3.1.7 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@smithy/util-endpoints@2.1.3': + dependencies: + '@smithy/node-config-provider': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@smithy/util-hex-encoding@3.0.0': + dependencies: + tslib: 2.7.0 + + '@smithy/util-middleware@3.0.7': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@smithy/util-retry@3.0.7': + dependencies: + '@smithy/service-error-classification': 3.0.7 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@smithy/util-stream@3.1.9': + dependencies: + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/node-http-handler': 3.2.4 + '@smithy/types': 3.5.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.7.0 + + '@smithy/util-uri-escape@3.0.0': + dependencies: + tslib: 2.7.0 + + '@smithy/util-utf8@2.3.0': + dependencies: + '@smithy/util-buffer-from': 2.2.0 + tslib: 2.7.0 + + '@smithy/util-utf8@3.0.0': + dependencies: + '@smithy/util-buffer-from': 3.0.0 + tslib: 2.7.0 + + '@smithy/util-waiter@3.1.6': + dependencies: + '@smithy/abort-controller': 3.1.5 + '@smithy/types': 3.5.0 + tslib: 2.7.0 + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@types/gitignore-parser@0.0.3': {} + + '@types/mime-types@2.1.4': {} + + '@types/node@22.7.5': + dependencies: + undici-types: 6.19.8 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.12.1 + + acorn@8.12.1: {} + + arg@4.1.3: {} + + bowser@2.11.0: {} + + create-require@1.1.1: {} + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + diff@4.0.2: {} + + dotenv@16.4.5: {} + + fast-xml-parser@4.4.1: + dependencies: + strnum: 1.0.5 + + gitignore-parser@0.0.2: {} + + ignore@6.0.2: {} + + make-error@1.3.6: {} + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + ms@2.1.3: {} + + prettier@3.3.3: {} + + simple-git@3.27.0: + dependencies: + '@kwsites/file-exists': 1.1.1 + '@kwsites/promise-deferred': 1.1.1 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + strnum@1.0.5: {} + + ts-node@10.9.2(@types/node@22.7.5)(typescript@5.6.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.7.5 + acorn: 8.12.1 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.6.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + tslib@2.7.0: {} + + typescript@5.6.3: {} + + undici-types@6.19.8: {} + + uuid@9.0.1: {} + + v8-compile-cache-lib@3.0.1: {} + + yn@3.1.1: {} diff --git a/docker-builder/src/envVars.ts b/docker-builder/src/envVars.ts index b2e4864..7b52222 100755 --- a/docker-builder/src/envVars.ts +++ b/docker-builder/src/envVars.ts @@ -10,7 +10,8 @@ export const ROOT_DIR = process.env.ROOT_DIR; export const BUILD_FOLDER = process.env.BUILD_FOLDER; export const BUILD_COMMAND = process.env.BUILD_COMMAND ?? "npm run build"; export const BRANCH = process.env.BRANCH; -const PROJECT_EXPORT_DIR = process.env.PROJECT_EXPORT_DIR ?? "project"; +export const PROJECT_EXPORT_DIR = process.env.PROJECT_EXPORT_DIR ?? "project"; +export const PROJECT_SLUG = process.env.PROJECT_SLUG; export const repoUrlFromSecret = `https://${GITHUB_TOKEN}@github.com/${REPO_OWNER}/${REPO_NAME}.git`; export const REPO_URL = `https://github.com/${REPO_OWNER}/${REPO_NAME}`; @@ -33,3 +34,50 @@ export const logFile = exportProjectDir; fs.mkdirSync(dir); } }); + +export const ignorePatterns = [ + ".git", + "node_modules", + "dist", + "build", + "temp", + "coverage", + "output", + "export", + ".next", + ".vercel", + ".cache", + ".DS_Store", + ".env", + ".env.local", + ".env.production", + ".env.production.local", + ".env.development", + ".env.development.local", + ".env.test", + ".env.test.local", + ".env.travis", + "yarn.lock", + "pnpm-lock.yaml", + ".gitignore", + ".husky", + ".eslintrc.cjs", +]; + +console.log({ + GITHUB_TOKEN, + REPO_OWNER, + REPO_NAME, + ROOT_DIR, + BUILD_FOLDER, + BUILD_COMMAND, + BRANCH, + PROJECT_EXPORT_DIR, + PROJECT_SLUG, + repoUrlFromSecret, + REPO_URL, + projectDir, + workDir, + exportProjectDir, + logFile, +}) \ No newline at end of file diff --git a/docker-builder/src/helper/build.ts b/docker-builder/src/helper/build.ts index 90b4b1b..6161d80 100755 --- a/docker-builder/src/helper/build.ts +++ b/docker-builder/src/helper/build.ts @@ -11,6 +11,7 @@ import { import { runCommand } from "../helper/shell"; import { cloneRepo } from "./git"; import { executeProcess } from "./process"; +import { uploadBuildDirContents } from "./upload"; export const buildAndCLone = async () => { try { @@ -68,6 +69,10 @@ export const buildAndCLone = async () => { }); console.log(exportProjectDir); }, {}); + + await uploadBuildDirContents(exportProjectDir); + console.log("Successfully uploaded the build contents"); + } catch (err: Error | any) { console.error(`Failed to complete the process: ${err.message}`); process.exit(1); diff --git a/docker-builder/src/helper/file.ts b/docker-builder/src/helper/file.ts new file mode 100644 index 0000000..a1694c6 --- /dev/null +++ b/docker-builder/src/helper/file.ts @@ -0,0 +1,44 @@ +import path from "path"; +import fs from "fs"; +import ignore from "ignore"; + +export function getFilesFromDirRec( + dir: string, + ignorePatterns: string[], +): string[] { + const files: string[] = []; + const ig = ignore().add(ignorePatterns); + + const getFilesRec = (dir: string) => { + for (const file of fs.readdirSync(dir)) { + const filePath = path.join(dir, file); + const relativePath = path.relative(process.cwd(), filePath); + + if (fs.lstatSync(filePath).isDirectory()) { + if (!ig.ignores(relativePath)) { + getFilesRec(filePath); + } + } else { + if (!ig.ignores(relativePath)) { + files.push(relativePath); + } + } + } + }; + + getFilesRec(dir); + console.log("Files found:", files); + return files; +} + +export function getFormatedSize(size: number) { + if (size < 1024) { + return size + "B"; + } else if (size < 1024 * 1024) { + return (size / 1024).toFixed(2) + "KB"; + } else if (size < 1024 * 1024 * 1024) { + return (size / (1024 * 1024)).toFixed(2) + "MB"; + } else { + return (size / (1024 * 1024 * 1024)).toFixed(2) + "GB"; + } +} diff --git a/docker-builder/src/helper/git.ts b/docker-builder/src/helper/git.ts index c5e2562..065c2ea 100755 --- a/docker-builder/src/helper/git.ts +++ b/docker-builder/src/helper/git.ts @@ -1,7 +1,7 @@ import path from "path"; import fs from "fs"; import simpleGit from "simple-git"; -import { projectDir } from "../envVars"; +import { ignorePatterns, projectDir } from "../envVars"; const git = simpleGit(); @@ -17,3 +17,31 @@ export async function cloneRepo(repoUrl: string, branch: string) { await git.cwd(projectDir); await git.checkout(branch); } + +export function recursiveSearchFor( + currentDir: string, + fileName: string, +): string | undefined { + const gitignorePath = path.join(currentDir, fileName); + if (fs.existsSync(gitignorePath)) { + return gitignorePath; + } + const parentDir = path.dirname(currentDir); + if (parentDir === currentDir) { + return undefined; + } + return recursiveSearchFor(parentDir, fileName); +} + +export function getGitignorePatterns(dir: string): string[] { + const gitignorePath = recursiveSearchFor(dir, ".gitignore"); + if (gitignorePath && fs.existsSync(gitignorePath)) { + const gitignoreContent = fs.readFileSync(gitignorePath, "utf8"); + ignorePatterns.push( + ...gitignoreContent + .split("\n") + .filter((line) => line && !line.startsWith("#")), + ); + } + return ignorePatterns; +} diff --git a/docker-builder/src/helper/upload.ts b/docker-builder/src/helper/upload.ts new file mode 100644 index 0000000..4d17e71 --- /dev/null +++ b/docker-builder/src/helper/upload.ts @@ -0,0 +1,56 @@ +import fs from "fs"; +import mime from "mime-types"; +import { PutObjectCommand, S3Client } from "@aws-sdk/client-s3"; +import { PROJECT_EXPORT_DIR, PROJECT_SLUG } from "../envVars"; +import { getGitignorePatterns } from "./git"; +import { runCommand } from "./shell"; +import { getFilesFromDirRec, getFormatedSize } from "./file"; + +const s3Client = new S3Client({ + region: "ap-south-1", + credentials: { + accessKeyId: "AKIATJB4PKLS3ROKSPEX", + secretAccessKey: "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", + }, +}); + +async function uploadFileToS3( + bucketName: string, + filePath: string, + key: string, +) { + const ContentType = mime.lookup(filePath); + + const command = new PutObjectCommand({ + Bucket: bucketName, + Key: PROJECT_SLUG + "/" + key, + Body: fs.createReadStream(filePath), + ContentType: !ContentType ? "application/octet-stream" : ContentType, + }); + await s3Client.send(command); +} + +export async function uploadBuildDirContents(buildDir: string) { + const sizeOfBuildDir = getFormatedSize(fs.statSync(buildDir).size); + console.log("Size of build dir: " + sizeOfBuildDir); + console.log("Uploading files from: " + buildDir); + await runCommand({ + command: "ls -la " + buildDir, + }); + const ignorePatterns = getGitignorePatterns(buildDir); + console.log("Ignoring patterns:", ignorePatterns); + const files = getFilesFromDirRec(buildDir, ignorePatterns); + for (const file of files) { + await uploadFileToS3( + "test-vultr", + file, + file.replace(PROJECT_EXPORT_DIR + "/", ""), + ); + console.log( + "Uploaded file: " + file, + ", key: " + file.replace(PROJECT_EXPORT_DIR + "/", ""), + ); + } + console.log("All files uploaded successfully."); + console.log("Total files uploaded: " + files.length); +} diff --git a/docker-builder/src/index.ts b/docker-builder/src/index.ts index 0224a3a..a4af661 100755 --- a/docker-builder/src/index.ts +++ b/docker-builder/src/index.ts @@ -1,7 +1,7 @@ -import { GITHUB_TOKEN, REPO_URL } from "./envVars"; +import { GITHUB_TOKEN, PROJECT_SLUG, REPO_URL } from "./envVars"; import { buildAndCLone } from "./helper/build"; -if (!GITHUB_TOKEN || !REPO_URL) { +if (!GITHUB_TOKEN || !REPO_URL || !PROJECT_SLUG) { console.error("Error: Missing environment variables."); process.exit(1); } diff --git a/docker-orch/.gitignore b/docker-orch/.gitignore index f19c74e..0a6ab83 100644 --- a/docker-orch/.gitignore +++ b/docker-orch/.gitignore @@ -2,4 +2,5 @@ output*/ tsconfig.tsbuildinfo node_modules/ .env -dist/ \ No newline at end of file +dist/ +build/ \ No newline at end of file diff --git a/docker-orch/build/envVars.js b/docker-orch/build/envVars.js deleted file mode 100644 index 3d8c35b..0000000 --- a/docker-orch/build/envVars.js +++ /dev/null @@ -1,72 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -var _a, _b, _c; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.logFile = exports.exportProjectDir = exports.workDir = exports.projectDir = exports.BREAK_COUNT = exports.REPO_URL = exports.repoUrlFromSecret = exports.BRANCH = exports.BUILD_COMMAND = exports.BUILD_FOLDER = exports.ROOT_DIR = exports.GITHUB_TOKEN = void 0; -const dotenv = __importStar(require("dotenv")); -const path_1 = __importDefault(require("path")); -const fs_1 = __importDefault(require("fs")); -dotenv.config(); -exports.GITHUB_TOKEN = process.env.GITHUB_TOKEN; -const REPO_OWNER = process.env.REPO_OWNER; -const REPO_NAME = process.env.REPO_NAME; -exports.ROOT_DIR = process.env.ROOT_DIR; -exports.BUILD_FOLDER = process.env.BUILD_FOLDER; -exports.BUILD_COMMAND = (_a = process.env.BUILD_COMMAND) !== null && _a !== void 0 ? _a : "npm run build"; -exports.BRANCH = process.env.BRANCH; -const PROJECT_EXPORT_DIR = (_b = process.env.PROJECT_EXPORT_DIR) !== null && _b !== void 0 ? _b : "project"; -exports.repoUrlFromSecret = `https://${exports.GITHUB_TOKEN}@github.com/${REPO_OWNER}/${REPO_NAME}.git`; -exports.REPO_URL = `https://github.com/${REPO_OWNER}/${REPO_NAME}`; -exports.BREAK_COUNT = (_c = parseInt(process.env.BREAK_COUNT)) !== null && _c !== void 0 ? _c : 30; -exports.projectDir = path_1.default.join(__dirname, "../project"); -exports.workDir = exports.ROOT_DIR ? path_1.default.join(exports.projectDir, exports.ROOT_DIR) : exports.projectDir; -exports.exportProjectDir = path_1.default.join(__dirname, "../" + PROJECT_EXPORT_DIR); -exports.logFile = exports.exportProjectDir; -[exports.projectDir, exports.exportProjectDir, exports.logFile].forEach((dir) => { - if (!fs_1.default.existsSync(dir)) { - fs_1.default.mkdirSync(dir); - } - else { - fs_1.default.rmSync(dir, { recursive: true }); - fs_1.default.mkdirSync(dir); - } -}); -console.log({ - GITHUB_TOKEN: exports.GITHUB_TOKEN, - REPO_OWNER, - REPO_NAME, - ROOT_DIR: exports.ROOT_DIR, - BUILD_FOLDER: exports.BUILD_FOLDER, - BUILD_COMMAND: exports.BUILD_COMMAND, - BRANCH: exports.BRANCH, - PROJECT_EXPORT_DIR, - projectDir: exports.projectDir, - workDir: exports.workDir, - exportProjectDir: exports.exportProjectDir, - logFile: exports.logFile, -}); diff --git a/docker-orch/build/helper/build.js b/docker-orch/build/helper/build.js deleted file mode 100644 index 04547f6..0000000 --- a/docker-orch/build/helper/build.js +++ /dev/null @@ -1,73 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.buildAndCLone = void 0; -const envVars_1 = require("../envVars"); -const shell_1 = require("../helper/shell"); -const git_1 = require("./git"); -const process_1 = require("./process"); -const buildAndCLone = () => __awaiter(void 0, void 0, void 0, function* () { - try { - yield (0, process_1.executeProcess)(function () { - return __awaiter(this, void 0, void 0, function* () { - if (!envVars_1.REPO_URL || !envVars_1.GITHUB_TOKEN || !envVars_1.BRANCH) { - console.error("Error: Missing environment variables."); - return process.exit(1); - } - yield (0, git_1.cloneRepo)(envVars_1.repoUrlFromSecret, envVars_1.BRANCH); - }); - }, { - initialLog: "Cloning repository from Github", - finalLog: `Project cloned`, - }); - yield (0, process_1.executeProcess)(function () { - return __awaiter(this, void 0, void 0, function* () { - yield (0, shell_1.runCommand)({ - command: "npm install", - cwd: envVars_1.workDir, - }); - }); - }, { - initialLog: "Installing dependencies", - finalLog: `Successfully installed dependencies`, - }); - yield (0, process_1.executeProcess)(function () { - return __awaiter(this, void 0, void 0, function* () { - if (!envVars_1.BUILD_COMMAND) { - console.error("Error: Missing BUILD_COMMAND"); - process.exit(1); - } - console.log("Building the project", envVars_1.BUILD_COMMAND); - yield (0, shell_1.runCommand)({ - command: envVars_1.BUILD_COMMAND, - cwd: envVars_1.workDir, - }); - }); - }, { - initialLog: "Building the project", - finalLog: `Successfully cloned, installed dependencies, and built the project`, - }); - console.log("Successfully built the project"); - yield (0, process_1.executeProcess)(function () { - return __awaiter(this, void 0, void 0, function* () { - yield (0, shell_1.runCommand)({ - command: `mv '${envVars_1.workDir}/${envVars_1.BUILD_FOLDER}/'* '${envVars_1.exportProjectDir}'`, - cwd: envVars_1.workDir, - }); - }); - }, {}); - } - catch (err) { - console.error(`Failed to complete the process: ${err.message}`); - process.exit(1); - } -}); -exports.buildAndCLone = buildAndCLone; diff --git a/docker-orch/build/helper/git.js b/docker-orch/build/helper/git.js deleted file mode 100644 index bf69851..0000000 --- a/docker-orch/build/helper/git.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.cloneRepo = cloneRepo; -const fs_1 = __importDefault(require("fs")); -const simple_git_1 = __importDefault(require("simple-git")); -const envVars_1 = require("../envVars"); -const git = (0, simple_git_1.default)(); -function cloneRepo(repoUrl, branch) { - return __awaiter(this, void 0, void 0, function* () { - if (fs_1.default.existsSync(envVars_1.projectDir)) { - fs_1.default.rmSync(envVars_1.projectDir, { recursive: true }); - } - else { - fs_1.default.mkdirSync(envVars_1.projectDir); - } - yield git.clone(repoUrl, envVars_1.projectDir); - yield git.cwd(envVars_1.projectDir); - yield git.checkout(branch); - }); -} diff --git a/docker-orch/build/helper/process.js b/docker-orch/build/helper/process.js deleted file mode 100644 index 28e3efc..0000000 --- a/docker-orch/build/helper/process.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.executeProcess = executeProcess; -const envVars_1 = require("../envVars"); -function executeProcess(method_1, _a) { - return __awaiter(this, arguments, void 0, function* (method, { initialLog, finalLog }) { - try { - initialLog && console.log(initialLog + "\n"); - const res = yield method(); - finalLog && console.log("\n" + finalLog + "\n"); - if (initialLog && finalLog) - console.log("=".repeat(envVars_1.BREAK_COUNT) + "\n"); - return res; - } - catch (err) { - console.error(err); - process.exit(1); - return null; - } - }); -} diff --git a/docker-orch/build/helper/shell.js b/docker-orch/build/helper/shell.js deleted file mode 100644 index 3247776..0000000 --- a/docker-orch/build/helper/shell.js +++ /dev/null @@ -1,41 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.runCommand = void 0; -const child_process_1 = require("child_process"); -const runCommand = (_a) => __awaiter(void 0, [_a], void 0, function* ({ command, cwd, }) { - return new Promise((resolve, reject) => { - const process = (0, child_process_1.exec)(command, { cwd }); - console.log(`Running command: ${command}`); - if (process.stdout) { - process.stdout.on("data", (data) => { - console.log(data.toString()); - }); - } - if (process.stderr) { - process.stderr.on("data", (data) => { - console.error(`Error: ${data.toString()}`); - }); - } - process.on("close", (code) => { - if (code === 0) { - resolve(`Process completed with code ${code}`); - } - else { - reject(new Error(`Process failed with exit code ${code}`)); - } - }); - process.on("error", (err) => { - reject(new Error(`Failed to start process: ${err.message}`)); - }); - }); -}); -exports.runCommand = runCommand; diff --git a/docker-orch/build/index.js b/docker-orch/build/index.js deleted file mode 100644 index 58139da..0000000 --- a/docker-orch/build/index.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const envVars_1 = require("./envVars"); -const build_1 = require("./helper/build"); -if (!envVars_1.GITHUB_TOKEN || !envVars_1.REPO_URL) { - console.error("Error: Missing environment variables."); - process.exit(1); -} -(0, build_1.buildAndCLone)(); diff --git a/docker-orch/package.json b/docker-orch/package.json index 66c57f6..ea624f5 100644 --- a/docker-orch/package.json +++ b/docker-orch/package.json @@ -1,6 +1,7 @@ { "devDependencies": { "@types/dockerode": "^3.3.31", + "@types/pg": "^8.11.10", "husky": "^8.0.0" }, "scripts": { @@ -14,11 +15,15 @@ "dependencies": { "@octokit/rest": "^21.0.2", "@types/node": "^22.7.5", + "@types/uuid": "^10.0.0", "axios": "^1.7.7", "dockerode": "^4.0.2", "dotenv": "^16.4.5", + "ignore": "^6.0.2", "ioredis": "^5.4.1", + "pg": "^8.13.0", "typescript": "^5.6.3", + "uuid": "^10.0.0", "zod": "^3.23.8" } } \ No newline at end of file diff --git a/docker-orch/pnpm-lock.yaml b/docker-orch/pnpm-lock.yaml index 813c175..5f47819 100644 --- a/docker-orch/pnpm-lock.yaml +++ b/docker-orch/pnpm-lock.yaml @@ -14,6 +14,9 @@ importers: '@types/node': specifier: ^22.7.5 version: 22.7.5 + '@types/uuid': + specifier: ^10.0.0 + version: 10.0.0 axios: specifier: ^1.7.7 version: 1.7.7 @@ -23,12 +26,21 @@ importers: dotenv: specifier: ^16.4.5 version: 16.4.5 + ignore: + specifier: ^6.0.2 + version: 6.0.2 ioredis: specifier: ^5.4.1 version: 5.4.1 + pg: + specifier: ^8.13.0 + version: 8.13.0 typescript: specifier: ^5.6.3 version: 5.6.3 + uuid: + specifier: ^10.0.0 + version: 10.0.0 zod: specifier: ^3.23.8 version: 3.23.8 @@ -36,6 +48,9 @@ importers: '@types/dockerode': specifier: ^3.3.31 version: 3.3.31 + '@types/pg': + specifier: ^8.11.10 + version: 8.11.10 husky: specifier: ^8.0.0 version: 8.0.3 @@ -112,9 +127,15 @@ packages: '@types/node@22.7.5': resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} + '@types/pg@8.11.10': + resolution: {integrity: sha512-LczQUW4dbOQzsH2RQ5qoeJ6qJPdrcM/DcMLoqWQkMLMsq83J5lAX3LXjdkWdpscFy67JSOWDnh7Ny/sPFykmkg==} + '@types/ssh2@1.15.1': resolution: {integrity: sha512-ZIbEqKAsi5gj35y4P4vkJYly642wIbY6PqoN0xiyQGshKUGXR9WQjF/iF9mXBQ8uBKy3ezfsCkcoHKhd0BzuDA==} + '@types/uuid@10.0.0': + resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} + asn1@0.2.6: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} @@ -214,6 +235,10 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore@6.0.2: + resolution: {integrity: sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==} + engines: {node: '>= 4'} + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -244,9 +269,89 @@ packages: nan@2.20.0: resolution: {integrity: sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==} + obuf@1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + pg-cloudflare@1.1.1: + resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==} + + pg-connection-string@2.7.0: + resolution: {integrity: sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA==} + + pg-int8@1.0.1: + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} + engines: {node: '>=4.0.0'} + + pg-numeric@1.0.2: + resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==} + engines: {node: '>=4'} + + pg-pool@3.7.0: + resolution: {integrity: sha512-ZOBQForurqh4zZWjrgSwwAtzJ7QiRX0ovFkZr2klsen3Nm0aoh33Ls0fzfv3imeH/nw/O27cjdz5kzYJfeGp/g==} + peerDependencies: + pg: '>=8.0' + + pg-protocol@1.7.0: + resolution: {integrity: sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ==} + + pg-types@2.2.0: + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} + engines: {node: '>=4'} + + pg-types@4.0.2: + resolution: {integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==} + engines: {node: '>=10'} + + pg@8.13.0: + resolution: {integrity: sha512-34wkUTh3SxTClfoHB3pQ7bIMvw9dpFU1audQQeZG837fmHfHpr14n/AELVDoOYVDW2h5RDWU78tFjkD+erSBsw==} + engines: {node: '>= 8.0.0'} + peerDependencies: + pg-native: '>=3.0.1' + peerDependenciesMeta: + pg-native: + optional: true + + pgpass@1.0.5: + resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} + + postgres-array@2.0.0: + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} + engines: {node: '>=4'} + + postgres-array@3.0.2: + resolution: {integrity: sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==} + engines: {node: '>=12'} + + postgres-bytea@1.0.0: + resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} + engines: {node: '>=0.10.0'} + + postgres-bytea@3.0.0: + resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==} + engines: {node: '>= 6'} + + postgres-date@1.0.7: + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} + engines: {node: '>=0.10.0'} + + postgres-date@2.1.0: + resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==} + engines: {node: '>=12'} + + postgres-interval@1.2.0: + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} + engines: {node: '>=0.10.0'} + + postgres-interval@3.0.0: + resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==} + engines: {node: '>=12'} + + postgres-range@1.1.4: + resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==} + proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -274,6 +379,10 @@ packages: split-ca@1.0.1: resolution: {integrity: sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==} + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + ssh2@1.16.0: resolution: {integrity: sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==} engines: {node: '>=10.16.0'} @@ -311,9 +420,17 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + hasBin: true + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} @@ -403,10 +520,18 @@ snapshots: dependencies: undici-types: 6.19.8 + '@types/pg@8.11.10': + dependencies: + '@types/node': 22.7.5 + pg-protocol: 1.7.0 + pg-types: 4.0.2 + '@types/ssh2@1.15.1': dependencies: '@types/node': 18.19.55 + '@types/uuid@10.0.0': {} + asn1@0.2.6: dependencies: safer-buffer: 2.1.2 @@ -502,6 +627,8 @@ snapshots: ieee754@1.2.1: {} + ignore@6.0.2: {} + inherits@2.0.4: {} ioredis@5.4.1: @@ -535,10 +662,81 @@ snapshots: nan@2.20.0: optional: true + obuf@1.1.2: {} + once@1.4.0: dependencies: wrappy: 1.0.2 + pg-cloudflare@1.1.1: + optional: true + + pg-connection-string@2.7.0: {} + + pg-int8@1.0.1: {} + + pg-numeric@1.0.2: {} + + pg-pool@3.7.0(pg@8.13.0): + dependencies: + pg: 8.13.0 + + pg-protocol@1.7.0: {} + + pg-types@2.2.0: + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.0 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + + pg-types@4.0.2: + dependencies: + pg-int8: 1.0.1 + pg-numeric: 1.0.2 + postgres-array: 3.0.2 + postgres-bytea: 3.0.0 + postgres-date: 2.1.0 + postgres-interval: 3.0.0 + postgres-range: 1.1.4 + + pg@8.13.0: + dependencies: + pg-connection-string: 2.7.0 + pg-pool: 3.7.0(pg@8.13.0) + pg-protocol: 1.7.0 + pg-types: 2.2.0 + pgpass: 1.0.5 + optionalDependencies: + pg-cloudflare: 1.1.1 + + pgpass@1.0.5: + dependencies: + split2: 4.2.0 + + postgres-array@2.0.0: {} + + postgres-array@3.0.2: {} + + postgres-bytea@1.0.0: {} + + postgres-bytea@3.0.0: + dependencies: + obuf: 1.1.2 + + postgres-date@1.0.7: {} + + postgres-date@2.1.0: {} + + postgres-interval@1.2.0: + dependencies: + xtend: 4.0.2 + + postgres-interval@3.0.0: {} + + postgres-range@1.1.4: {} + proxy-from-env@1.1.0: {} pump@3.0.2: @@ -564,6 +762,8 @@ snapshots: split-ca@1.0.1: {} + split2@4.2.0: {} + ssh2@1.16.0: dependencies: asn1: 0.2.6 @@ -605,6 +805,10 @@ snapshots: util-deprecate@1.0.2: {} + uuid@10.0.0: {} + wrappy@1.0.2: {} + xtend@4.0.2: {} + zod@3.23.8: {} diff --git a/docker-orch/src/db.ts b/docker-orch/src/db.ts new file mode 100644 index 0000000..eca7591 --- /dev/null +++ b/docker-orch/src/db.ts @@ -0,0 +1,8 @@ +import { Client } from "pg"; +import { DATABASE_URL } from "./envVars"; + +const client = new Client(DATABASE_URL); + +client.connect(); + +// export async function addLogs(log:string) diff --git a/docker-orch/src/envVars.ts b/docker-orch/src/envVars.ts index 7860a56..16dd038 100644 --- a/docker-orch/src/envVars.ts +++ b/docker-orch/src/envVars.ts @@ -4,3 +4,4 @@ dotenv.config(); export const dokcerImage = process.env.DOCKER_IMAGE; export const REDIS_URL = process.env.REDIS_URL; +export const DATABASE_URL=process.env.DATABASE_URL \ No newline at end of file diff --git a/docker-orch/src/index.ts b/docker-orch/src/index.ts index 656c221..afe30cd 100644 --- a/docker-orch/src/index.ts +++ b/docker-orch/src/index.ts @@ -1,26 +1,34 @@ -import { dokcerImage as DOCKER_IMAGE } from "./envVars"; +import { dokcerImage } from "./envVars"; import { ImportProject, validateImportProject } from "./project"; import redis from "./redis"; import Docker from "dockerode"; import fs from "fs"; +import { v4 as uuid } from "uuid"; + +const logFilePath = "./test/log.log"; const loopHandler = async () => { - if (!redis) { - return; - } + if (!redis) return; + while (true) { - const res = await redis.brpop("project_import_queue", 0); - if (!res) { - continue; - } - const message = res[1]; - console.log(message); - const parsedMessage = validateImportProject.safeParse(JSON.parse(message)); - if (parsedMessage.success) { - console.log(parsedMessage.data); - await handleProjectImportViaDocker(parsedMessage.data); - } else { - console.log(parsedMessage.error.issues); + try { + const res = await redis.brpop("project_import_queue", 0); + if (!res) continue; + + const message = res[1]; + console.log("Received message:", message); + + const parsedMessage = validateImportProject.safeParse( + JSON.parse(message), + ); + if (parsedMessage.success) { + console.log("Validated project data:", parsedMessage.data); + await handleProjectImportViaDocker(parsedMessage.data); + } else { + console.error("Validation error:", parsedMessage.error.issues); + } + } catch (error) { + console.error("Error processing message:", error); } } }; @@ -28,52 +36,62 @@ const loopHandler = async () => { const handleProjectImportViaDocker = async (importProject: ImportProject) => { const docker = new Docker({}); try { - const res = await docker.getContainer("devpulkit").remove({ force: true }); - console.log(`Container deleted ${res.toString()}`); - } catch (err) {} + await docker.getContainer("devpulkit").remove({ force: true }); + console.log("Previous container 'devpulkit' removed successfully."); + } catch (err: any) { + console.warn( + "No existing container to remove or failed removal:", + err.message, + ); + } const options: Docker.ContainerCreateOptions = { - Image: DOCKER_IMAGE, - name: "devpulkit", - Env: [ - `REPO_OWNER=${importProject.repoOwner}`, - `REPO_NAME=${importProject.repoName}`, - `BUILD_FOLDER=${importProject.build.buildDir}`, - ], + Image: dokcerImage, + name: "test-vercel-builder", + Env: generateEnvConfig(importProject), HostConfig: { AutoRemove: false, NetworkMode: "host", }, }; - if (importProject.rootDir) { - options.Env?.push(`ROOT_DIR=${importProject.rootDir}`); - } - if (importProject.build.buildCommand) { - options.Env?.push(`BUILD_COMMAND=${importProject.build.buildCommand}`); - } - if (importProject.build.installCommand) { - options.Env?.push(`INSTALL_COMMAND=${importProject.build.installCommand}`); - } - if (importProject.GITHUB_TOKEN) { - options.Env?.push(`GITHUB_TOKEN=${importProject.GITHUB_TOKEN}`); - } - if (importProject.branch) { - options.Env?.push(`BRANCH=${importProject.branch}`); - } - for (const [key, { value }] of Object.entries(importProject.env.values)) { - options.Env?.push(`${key}=${value}`); - } + console.log("Creating Docker container with options:", options); - console.log(options); + try { + const container = await docker.createContainer(options); + await container.start(); + printLiveLogs(container); + await container.wait(); - const container = await docker.createContainer(options); - await container.start(); + const logs = await container.logs({ stdout: true, stderr: true }); + console.log("Container logs:", logs.toString()); + } catch (error) { + console.error("Error creating or starting container:", error); + } +}; - printLiveLogs(container); +const generateEnvConfig = (importProject: ImportProject): string[] => { + const envVars = [ + { name: "PROJECT_EXPORT_DIR", value: "deployit-exports"+uuid() }, + { name: "BREAK_COUNT", value: 150 }, + { name: "REPO_OWNER", value: importProject.repoOwner }, + { name: "REPO_NAME", value: importProject.repoName }, + { name: "BUILD_FOLDER", value: importProject.build.buildDir }, + { name: "ROOT_DIR", value: importProject.rootDir }, + { name: "GITHUB_TOKEN", value: importProject.GITHUB_TOKEN }, + { name: "BRANCH", value: importProject.branch }, + { name: "PROJECT_SLUG", value: importProject.projectSlug }, + { name: "BUILD_COMMAND", value: importProject.build.buildCommand }, + { name: "INSTALL_COMMAND", value: importProject.build.installCommand }, + ]; - // detect if container is stopped - await container.wait(); + for (const [key, { value }] of Object.entries(importProject.env.values)) { + envVars.push({ name: key, value }); + } + + return envVars + .filter(({ value }) => value) + .map(({ name, value }) => `${name}=${value}`); }; async function printLiveLogs(container: Docker.Container) { @@ -85,38 +103,31 @@ async function printLiveLogs(container: Docker.Container) { }); logsStream.on("data", (chunk) => { - let logData = chunk.toString("utf8").replace(/[^\x20-\x7E]/g, ""); - if (logData.length > 0) { - logData = logData + "\n"; + const logData = chunk.toString("utf8").trim(); + const cleanedLogData = logData + .replace(/[\u0000-\u001F\u007F-\u009F]/g, "") // Remove control characters + .replace(/[^\x20-\x7E]/g, "") // Remove non-printable ASCII characters + .replace(/\s+/g, " ") // Replace multiple spaces with a single space + .trim(); + + if (cleanedLogData) { + fs.appendFileSync("./test/log.log", cleanedLogData + "\n", { + encoding: "utf8", + }); } - fs.appendFileSync("./test/log.log", logData, { encoding: "utf8" }); - console.log(logData); }); } -fs.rm("./test/log.log", { force: true }, () => {}); +fs.rm(logFilePath, { force: true }, () => { + console.log("Previous log file removed."); +}); redis?.on("error", (err) => { - console.log("Error from redis:", err); + console.error("Error from Redis:", err); process.exit(1); }); redis?.on("ready", () => { + console.log("Redis is ready, starting loop handler."); loopHandler(); }); - -// handleProjectImportViaDocker({ -// projectName: "My Portfolio", -// repoName: "devpulkit.in", -// repoOwner: "pulkitxm", -// rootDir: "/", -// branch: "reactv", -// build: { -// open: false, -// buildCommand: "", -// installCommand: "", -// buildDir: "dist", -// }, -// env: { open: false, values: [] }, -// GITHUB_TOKEN: "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", -// }); diff --git a/docker-orch/src/project.ts b/docker-orch/src/project.ts index b3ad5be..53809ab 100644 --- a/docker-orch/src/project.ts +++ b/docker-orch/src/project.ts @@ -22,6 +22,7 @@ export const validateImportProject = z.object({ ), }), GITHUB_TOKEN: z.string(), + projectSlug: z.string(), }); export type ImportProject = z.infer; diff --git a/proxy-server/package.json b/proxy-server/package.json index 0ff520e..1cfbc9a 100755 --- a/proxy-server/package.json +++ b/proxy-server/package.json @@ -3,8 +3,8 @@ "version": "1.0.0", "main": "index.js", "scripts": { - "start": "tsc -b && node dist/index.js", - "dev": "ts-node src/index.ts", + "start": "node src/index.js", + "dev": "nodemon src/index.js", "build": "tsc -b", "format": "prettier --write \"**/*.{ts,tsx,js,jsx,md,mdx,css,yaml,yml}\"", "check": "prettier --check \"**/*.{ts,tsx,js,jsx,md,mdx,css,yaml,yml}\"" @@ -14,23 +14,18 @@ "license": "ISC", "description": "", "dependencies": { - "@aws-sdk/client-s3": "^3.665.0", + "@aws-sdk/client-s3": "^3.670.0", + "@aws-sdk/s3-request-presigner": "^3.670.0", "@vercel/blob": "^0.24.1", "axios": "^1.7.7", "cloudinary": "^2.5.0", "dotenv": "^16.4.5", - "express": "^4.21.0", + "express": "^4.21.1", "express-http-proxy": "^2.1.1", "http-proxy": "^1.18.1", "http-proxy-middleware": "^3.0.2", + "mime-types": "^2.1.35", "prettier": "^3.3.3", - "streamifier": "^0.1.1", - "typescript": "^5.6.2" - }, - "devDependencies": { - "@types/express": "^5.0.0", - "@types/http-proxy": "^1.17.15", - "@types/node": "^22.7.4", - "@types/streamifier": "^0.1.2" + "streamifier": "^0.1.1" } } \ No newline at end of file diff --git a/proxy-server/pnpm-lock.yaml b/proxy-server/pnpm-lock.yaml new file mode 100644 index 0000000..cda67eb --- /dev/null +++ b/proxy-server/pnpm-lock.yaml @@ -0,0 +1,2754 @@ +lockfileVersion: "9.0" + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + .: + dependencies: + "@aws-sdk/client-s3": + specifier: ^3.670.0 + version: 3.670.0 + "@aws-sdk/s3-request-presigner": + specifier: ^3.670.0 + version: 3.670.0 + "@vercel/blob": + specifier: ^0.24.1 + version: 0.24.1 + axios: + specifier: ^1.7.7 + version: 1.7.7 + cloudinary: + specifier: ^2.5.0 + version: 2.5.1 + dotenv: + specifier: ^16.4.5 + version: 16.4.5 + express: + specifier: ^4.21.1 + version: 4.21.1 + express-http-proxy: + specifier: ^2.1.1 + version: 2.1.1 + http-proxy: + specifier: ^1.18.1 + version: 1.18.1(debug@4.3.7) + http-proxy-middleware: + specifier: ^3.0.2 + version: 3.0.3 + mime-types: + specifier: ^2.1.35 + version: 2.1.35 + prettier: + specifier: ^3.3.3 + version: 3.3.3 + streamifier: + specifier: ^0.1.1 + version: 0.1.1 + +packages: + "@aws-crypto/crc32@5.2.0": + resolution: + { + integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==, + } + engines: { node: ">=16.0.0" } + + "@aws-crypto/crc32c@5.2.0": + resolution: + { + integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==, + } + + "@aws-crypto/sha1-browser@5.2.0": + resolution: + { + integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==, + } + + "@aws-crypto/sha256-browser@5.2.0": + resolution: + { + integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==, + } + + "@aws-crypto/sha256-js@5.2.0": + resolution: + { + integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==, + } + engines: { node: ">=16.0.0" } + + "@aws-crypto/supports-web-crypto@5.2.0": + resolution: + { + integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==, + } + + "@aws-crypto/util@5.2.0": + resolution: + { + integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==, + } + + "@aws-sdk/client-s3@3.670.0": + resolution: + { + integrity: sha512-8Pwu1K+PgbYpXDaGKNy5hEbRH5FXHlfXJOhtV4oEDroL7ngix3ZUVWN9oIVVSDK02y1oQS1jCSEGUiUiauzb0g==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/client-sso-oidc@3.670.0": + resolution: + { + integrity: sha512-4qDK2L36Q4J1lfemaHHd9ZxqKRaos3STp44qPAHf/8QyX6Uk5sXgZNVO2yWM7SIEtVKwwBh/fZAsdBkGPBfZcw==, + } + engines: { node: ">=16.0.0" } + peerDependencies: + "@aws-sdk/client-sts": ^3.670.0 + + "@aws-sdk/client-sso@3.670.0": + resolution: + { + integrity: sha512-J+oz6uSsDvk4pimMDnKJb1wsV216zTrejvMTIL4RhUD1QPIVVOpteTdUShcjZUIZnkcJZGI+cym/SFK0kuzTpg==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/client-sts@3.670.0": + resolution: + { + integrity: sha512-bExrNo8ZVWorS3cjMZKQnA2HWqDmAzcZoSN/cPVoPFNkHwdl1lzPxvcLzmhpIr48JHgKfybBjrbluDZfIYeEog==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/core@3.667.0": + resolution: + { + integrity: sha512-pMcDVI7Tmdsc8R3sDv0Omj/4iRParGY+uJtAfF669WnZfDfaBQaix2Mq7+Mu08vdjqO9K3gicFvjk9S1VLmOKA==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/credential-provider-env@3.667.0": + resolution: + { + integrity: sha512-zZbrkkaPc54WXm+QAnpuv0LPNfsts0HPPd+oCECGs7IQRaFsGj187cwvPg9RMWDFZqpm64MdBDoA8OQHsqzYCw==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/credential-provider-http@3.667.0": + resolution: + { + integrity: sha512-sjtybFfERZWiqTY7fswBxKQLvUkiCucOWyqh3IaPo/4nE1PXRnaZCVG0+kRBPrYIxWqiVwytvZzMJy8sVZcG0A==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/credential-provider-ini@3.670.0": + resolution: + { + integrity: sha512-TB1gacUj75leaTt2JsCTzygDSIk4ksv9uZoR7VenlgFPRktyOeT+fapwIVBeB2Qg7b9uxAY2K5XkKstDZyBEEw==, + } + engines: { node: ">=16.0.0" } + peerDependencies: + "@aws-sdk/client-sts": ^3.670.0 + + "@aws-sdk/credential-provider-node@3.670.0": + resolution: + { + integrity: sha512-zwNrRYzubk4CaZ7zebeDhxsm8QtNWkbGKopZPOaZSnd5uqUGRcmx4ccVRngWUK68XDP44aEUWC8iU5Pc7btpHQ==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/credential-provider-process@3.667.0": + resolution: + { + integrity: sha512-HZHnvop32fKgsNHkdhVaul7UzQ25sEc0j9yqA4bjhtbk0ECl42kj3f1pJ+ZU/YD9ut8lMJs/vVqiOdNThVdeBw==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/credential-provider-sso@3.670.0": + resolution: + { + integrity: sha512-5PkA8BOy4q57Vhe9AESoHKZ7vjRbElNPKjXA4qC01xY+DitClRFz4O3B9sMzFp0PHlz9nDVSXXKgq0yzF/nAag==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/credential-provider-web-identity@3.667.0": + resolution: + { + integrity: sha512-t8CFlZMD/1p/8Cli3rvRiTJpjr/8BO64gw166AHgFZYSN2h95L2l1tcW0jpsc3PprA32nLg1iQVKYt4WGM4ugw==, + } + engines: { node: ">=16.0.0" } + peerDependencies: + "@aws-sdk/client-sts": ^3.667.0 + + "@aws-sdk/middleware-bucket-endpoint@3.667.0": + resolution: + { + integrity: sha512-XGz4jMAkDoTyFdtLz7ZF+C05IAhCTC1PllpvTBaj821z/L0ilhbqVhrT/f2Buw8Id/K5A390csGXgusXyrFFjA==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/middleware-expect-continue@3.667.0": + resolution: + { + integrity: sha512-0TiSL9S5DSG95NHGIz6qTMuV7GDKVn8tvvGSrSSZu/wXO3JaYSH0AElVpYfc4PtPRqVpEyNA7nnc7W56mMCLWQ==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/middleware-flexible-checksums@3.669.0": + resolution: + { + integrity: sha512-01UQLoUzVwWMf+b+AEuwJ2lluBD+Cp8AcbyEHqvEaPdjGKHIS4BCvnY70mZYnAfRtL8R2h9tt7iI61oWU3Gjkg==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/middleware-host-header@3.667.0": + resolution: + { + integrity: sha512-Z7fIAMQnPegs7JjAQvlOeWXwpMRfegh5eCoIP6VLJIeR6DLfYKbP35JBtt98R6DXslrN2RsbTogjbxPEDQfw1w==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/middleware-location-constraint@3.667.0": + resolution: + { + integrity: sha512-ob85H3HhT3/u5O+x0o557xGZ78vSNeSSwMaSitxdsfs2hOuoUl1uk+OeLpi1hkuJnL41FPpokV7TVII2XrFfmg==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/middleware-logger@3.667.0": + resolution: + { + integrity: sha512-PtTRNpNm/5c746jRgZCNg4X9xEJIwggkGJrF0GP9AB1ANg4pc/sF2Fvn1NtqPe9wtQ2stunJprnm5WkCHN7QiA==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/middleware-recursion-detection@3.667.0": + resolution: + { + integrity: sha512-U5glWD3ehFohzpUpopLtmqAlDurGWo2wRGPNgi4SwhWU7UDt6LS7E/UvJjqC0CUrjlzOw+my2A+Ncf+fisMhxQ==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/middleware-sdk-s3@3.669.0": + resolution: + { + integrity: sha512-b2QUQ7DcIcVCUFhvmFEDI90BemvQhO0ntIajllLqQSy88PSNdLDCVx5mIzfxaaK/1tdY/UsEDRRm1kMQHJDQpg==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/middleware-ssec@3.667.0": + resolution: + { + integrity: sha512-1wuAUZIkmZIvOmGg5qNQU821CGFHhkuKioxXgNh0DpUxZ9+AeiV7yorJr+bqkb2KBFv1i1TnzGRecvKf/KvZIQ==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/middleware-user-agent@3.669.0": + resolution: + { + integrity: sha512-K8ScPi45zjJrj5Y2gRqVsvKKQCQbvQBfYGcBw9ZOx9TTavH80bOCBjWg/GFnvs4f37tqVc1wMN2oGvcTF6HveQ==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/region-config-resolver@3.667.0": + resolution: + { + integrity: sha512-iNr+JhhA902JMKHG9IwT9YdaEx6KGl6vjAL5BRNeOjfj4cZYMog6Lz/IlfOAltMtT0w88DAHDEFrBd2uO0l2eg==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/s3-request-presigner@3.670.0": + resolution: + { + integrity: sha512-cTTQWJhmCRNH9NZbTqAhx3aXmC+p7gYzj7kNOyzdTA6D4jJOQZekxFFEQ0T2BPFYPR9Elk77W0yK+Nv9wMVD4g==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/signature-v4-multi-region@3.669.0": + resolution: + { + integrity: sha512-TVwlWAxfBHnFjnfTBQWUhzVJzjwVhkq1+KR0JZV7JrfqeyBOdZjAaV9ie3VNY9HUouecq1fDuKaSwe4JiWQsHg==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/token-providers@3.667.0": + resolution: + { + integrity: sha512-ZecJlG8p6D4UTYlBHwOWX6nknVtw/OBJ3yPXTSajBjhUlj9lE2xvejI8gl4rqkyLXk7z3bki+KR4tATbMaM9yg==, + } + engines: { node: ">=16.0.0" } + peerDependencies: + "@aws-sdk/client-sso-oidc": ^3.667.0 + + "@aws-sdk/types@3.667.0": + resolution: + { + integrity: sha512-gYq0xCsqFfQaSL/yT1Gl1vIUjtsg7d7RhnUfsXaHt8xTxOKRTdH9GjbesBjXOzgOvB0W0vfssfreSNGFlOOMJg==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/util-arn-parser@3.568.0": + resolution: + { + integrity: sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/util-endpoints@3.667.0": + resolution: + { + integrity: sha512-X22SYDAuQJWnkF1/q17pkX3nGw5XMD9YEUbmt87vUnRq7iyJ3JOpl6UKOBeUBaL838wA5yzdbinmCITJ/VZ1QA==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/util-format-url@3.667.0": + resolution: + { + integrity: sha512-S0D731SnEPnTfbJ/Dldw5dDrOc8uipK6NLXHDs2xIq0t61iwZLMEiN8yWCs2wAZVVJKpldUM1THLaaufU9SSSA==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/util-locate-window@3.568.0": + resolution: + { + integrity: sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==, + } + engines: { node: ">=16.0.0" } + + "@aws-sdk/util-user-agent-browser@3.670.0": + resolution: + { + integrity: sha512-iRynWWazqEcCKwGMcQcywKTDLdLvqts1Yx474U64I9OKQXXwhOwhXbF5CAPSRta86lkVNAVYJa/0Bsv45pNn1A==, + } + + "@aws-sdk/util-user-agent-node@3.669.0": + resolution: + { + integrity: sha512-9jxCYrgggy2xd44ZASqI7AMiRVaSiFp+06Kg8BQSU0ijKpBJlwcsqIS8pDT/n6LxuOw2eV5ipvM2C0r1iKzrGA==, + } + engines: { node: ">=16.0.0" } + peerDependencies: + aws-crt: ">=1.0.0" + peerDependenciesMeta: + aws-crt: + optional: true + + "@aws-sdk/xml-builder@3.662.0": + resolution: + { + integrity: sha512-ikLkXn0igUpnJu2mCZjklvmcDGWT9OaLRv3JyC/cRkTaaSrblPjPM7KKsltxdMTLQ+v7fjCN0TsJpxphMfaOPA==, + } + engines: { node: ">=16.0.0" } + + "@fastify/busboy@2.1.1": + resolution: + { + integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==, + } + engines: { node: ">=14" } + + "@smithy/abort-controller@3.1.5": + resolution: + { + integrity: sha512-DhNPnqTqPoG8aZ5dWkFOgsuY+i0GQ3CI6hMmvCoduNsnU9gUZWZBwGfDQsTTB7NvFPkom1df7jMIJWU90kuXXg==, + } + engines: { node: ">=16.0.0" } + + "@smithy/chunked-blob-reader-native@3.0.0": + resolution: + { + integrity: sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==, + } + + "@smithy/chunked-blob-reader@3.0.0": + resolution: + { + integrity: sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==, + } + + "@smithy/config-resolver@3.0.9": + resolution: + { + integrity: sha512-5d9oBf40qC7n2xUoHmntKLdqsyTMMo/r49+eqSIjJ73eDfEtljAxEhzIQ3bkgXJtR3xiv7YzMT/3FF3ORkjWdg==, + } + engines: { node: ">=16.0.0" } + + "@smithy/core@2.4.8": + resolution: + { + integrity: sha512-x4qWk7p/a4dcf7Vxb2MODIf4OIcqNbK182WxRvZ/3oKPrf/6Fdic5sSElhO1UtXpWKBazWfqg0ZEK9xN1DsuHA==, + } + engines: { node: ">=16.0.0" } + + "@smithy/credential-provider-imds@3.2.4": + resolution: + { + integrity: sha512-S9bb0EIokfYEuar4kEbLta+ivlKCWOCFsLZuilkNy9i0uEUEHSi47IFLPaxqqCl+0ftKmcOTHayY5nQhAuq7+w==, + } + engines: { node: ">=16.0.0" } + + "@smithy/eventstream-codec@3.1.6": + resolution: + { + integrity: sha512-SBiOYPBH+5wOyPS7lfI150ePfGLhnp/eTu5RnV9xvhGvRiKfnl6HzRK9wehBph+il8FxS9KTeadx7Rcmf1GLPQ==, + } + + "@smithy/eventstream-serde-browser@3.0.10": + resolution: + { + integrity: sha512-1i9aMY6Pl/SmA6NjvidxnfBLHMPzhKu2BP148pEt5VwhMdmXn36PE2kWKGa9Hj8b0XGtCTRucpCncylevCtI7g==, + } + engines: { node: ">=16.0.0" } + + "@smithy/eventstream-serde-config-resolver@3.0.7": + resolution: + { + integrity: sha512-eVzhGQBPEqXXYHvIUku0jMTxd4gDvenRzUQPTmKVWdRvp9JUCKrbAXGQRYiGxUYq9+cqQckRm0wq3kTWnNtDhw==, + } + engines: { node: ">=16.0.0" } + + "@smithy/eventstream-serde-node@3.0.9": + resolution: + { + integrity: sha512-JE0Guqvt0xsmfQ5y1EI342/qtJqznBv8cJqkHZV10PwC8GWGU5KNgFbQnsVCcX+xF+qIqwwfRmeWoJCjuOLmng==, + } + engines: { node: ">=16.0.0" } + + "@smithy/eventstream-serde-universal@3.0.9": + resolution: + { + integrity: sha512-bydfgSisfepCufw9kCEnWRxqxJFzX/o8ysXWv+W9F2FIyiaEwZ/D8bBKINbh4ONz3i05QJ1xE7A5OKYvgJsXaw==, + } + engines: { node: ">=16.0.0" } + + "@smithy/fetch-http-handler@3.2.9": + resolution: + { + integrity: sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A==, + } + + "@smithy/hash-blob-browser@3.1.6": + resolution: + { + integrity: sha512-BKNcMIaeZ9lB67sgo88iCF4YB35KT8X2dNJ8DqrtZNTgN6tUDYBKThzfGtos/mnZkGkW91AYHisESHmSiYQmKw==, + } + + "@smithy/hash-node@3.0.7": + resolution: + { + integrity: sha512-SAGHN+QkrwcHFjfWzs/czX94ZEjPJ0CrWJS3M43WswDXVEuP4AVy9gJ3+AF6JQHZD13bojmuf/Ap/ItDeZ+Qfw==, + } + engines: { node: ">=16.0.0" } + + "@smithy/hash-stream-node@3.1.6": + resolution: + { + integrity: sha512-sFSSt7cmCpFWZPfVx7k80Bgb1K2VJ27VmMxH8X+dDhp7Wv8IBgID4K2VK5ehMJROF8hQgcj4WywnkHIwX/xlwQ==, + } + engines: { node: ">=16.0.0" } + + "@smithy/invalid-dependency@3.0.7": + resolution: + { + integrity: sha512-Bq00GsAhHeYSuZX8Kpu4sbI9agH2BNYnqUmmbTGWOhki9NVsWn2jFr896vvoTMH8KAjNX/ErC/8t5QHuEXG+IA==, + } + + "@smithy/is-array-buffer@2.2.0": + resolution: + { + integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==, + } + engines: { node: ">=14.0.0" } + + "@smithy/is-array-buffer@3.0.0": + resolution: + { + integrity: sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==, + } + engines: { node: ">=16.0.0" } + + "@smithy/md5-js@3.0.7": + resolution: + { + integrity: sha512-+wco9IN9uOW4tNGkZIqTR6IXyfO7Z8A+IOq82QCRn/f/xcmt7H1fXwmQVbfDSvbeFwfNnhv7s+u0G9PzPG6o2w==, + } + + "@smithy/middleware-content-length@3.0.9": + resolution: + { + integrity: sha512-t97PidoGElF9hTtLCrof32wfWMqC5g2SEJNxaVH3NjlatuNGsdxXRYO/t+RPnxA15RpYiS0f+zG7FuE2DeGgjA==, + } + engines: { node: ">=16.0.0" } + + "@smithy/middleware-endpoint@3.1.4": + resolution: + { + integrity: sha512-/ChcVHekAyzUbyPRI8CzPPLj6y8QRAfJngWcLMgsWxKVzw/RzBV69mSOzJYDD3pRwushA1+5tHtPF8fjmzBnrQ==, + } + engines: { node: ">=16.0.0" } + + "@smithy/middleware-retry@3.0.23": + resolution: + { + integrity: sha512-x9PbGXxkcXIpm6L26qRSCC+eaYcHwybRmqU8LO/WM2RRlW0g8lz6FIiKbKgGvHuoK3dLZRiQVSQJveiCzwnA5A==, + } + engines: { node: ">=16.0.0" } + + "@smithy/middleware-serde@3.0.7": + resolution: + { + integrity: sha512-VytaagsQqtH2OugzVTq4qvjkLNbWehHfGcGr0JLJmlDRrNCeZoWkWsSOw1nhS/4hyUUWF/TLGGml4X/OnEep5g==, + } + engines: { node: ">=16.0.0" } + + "@smithy/middleware-stack@3.0.7": + resolution: + { + integrity: sha512-EyTbMCdqS1DoeQsO4gI7z2Gzq1MoRFAeS8GkFYIwbedB7Lp5zlLHJdg+56tllIIG5Hnf9ZWX48YKSHlsKvugGA==, + } + engines: { node: ">=16.0.0" } + + "@smithy/node-config-provider@3.1.8": + resolution: + { + integrity: sha512-E0rU0DglpeJn5ge64mk8wTGEXcQwmpUTY5Zr7IzTpDLmHKiIamINERNZYrPQjg58Ck236sEKSwRSHA4CwshU6Q==, + } + engines: { node: ">=16.0.0" } + + "@smithy/node-http-handler@3.2.4": + resolution: + { + integrity: sha512-49reY3+JgLMFNm7uTAKBWiKCA6XSvkNp9FqhVmusm2jpVnHORYFeFZ704LShtqWfjZW/nhX+7Iexyb6zQfXYIQ==, + } + engines: { node: ">=16.0.0" } + + "@smithy/property-provider@3.1.7": + resolution: + { + integrity: sha512-QfzLi1GPMisY7bAM5hOUqBdGYnY5S2JAlr201pghksrQv139f8iiiMalXtjczIP5f6owxFn3MINLNUNvUkgtPw==, + } + engines: { node: ">=16.0.0" } + + "@smithy/protocol-http@4.1.4": + resolution: + { + integrity: sha512-MlWK8eqj0JlpZBnWmjQLqmFp71Ug00P+m72/1xQB3YByXD4zZ+y9N4hYrR0EDmrUCZIkyATWHOXFgtavwGDTzQ==, + } + engines: { node: ">=16.0.0" } + + "@smithy/querystring-builder@3.0.7": + resolution: + { + integrity: sha512-65RXGZZ20rzqqxTsChdqSpbhA6tdt5IFNgG6o7e1lnPVLCe6TNWQq4rTl4N87hTDD8mV4IxJJnvyE7brbnRkQw==, + } + engines: { node: ">=16.0.0" } + + "@smithy/querystring-parser@3.0.7": + resolution: + { + integrity: sha512-Fouw4KJVWqqUVIu1gZW8BH2HakwLz6dvdrAhXeXfeymOBrZw+hcqaWs+cS1AZPVp4nlbeIujYrKA921ZW2WMPA==, + } + engines: { node: ">=16.0.0" } + + "@smithy/service-error-classification@3.0.7": + resolution: + { + integrity: sha512-91PRkTfiBf9hxkIchhRKJfl1rsplRDyBnmyFca3y0Z3x/q0JJN480S83LBd8R6sBCkm2bBbqw2FHp0Mbh+ecSA==, + } + engines: { node: ">=16.0.0" } + + "@smithy/shared-ini-file-loader@3.1.8": + resolution: + { + integrity: sha512-0NHdQiSkeGl0ICQKcJQ2lCOKH23Nb0EaAa7RDRId6ZqwXkw4LJyIyZ0t3iusD4bnKYDPLGy2/5e2rfUhrt0Acw==, + } + engines: { node: ">=16.0.0" } + + "@smithy/signature-v4@4.2.0": + resolution: + { + integrity: sha512-LafbclHNKnsorMgUkKm7Tk7oJ7xizsZ1VwqhGKqoCIrXh4fqDDp73fK99HOEEgcsQbtemmeY/BPv0vTVYYUNEQ==, + } + engines: { node: ">=16.0.0" } + + "@smithy/smithy-client@3.4.0": + resolution: + { + integrity: sha512-nOfJ1nVQsxiP6srKt43r2My0Gp5PLWCW2ASqUioxIiGmu6d32v4Nekidiv5qOmmtzIrmaD+ADX5SKHUuhReeBQ==, + } + engines: { node: ">=16.0.0" } + + "@smithy/types@3.5.0": + resolution: + { + integrity: sha512-QN0twHNfe8mNJdH9unwsCK13GURU7oEAZqkBI+rsvpv1jrmserO+WnLE7jidR9W/1dxwZ0u/CB01mV2Gms/K2Q==, + } + engines: { node: ">=16.0.0" } + + "@smithy/url-parser@3.0.7": + resolution: + { + integrity: sha512-70UbSSR8J97c1rHZOWhl+VKiZDqHWxs/iW8ZHrHp5fCCPLSBE7GcUlUvKSle3Ca+J9LLbYCj/A79BxztBvAfpA==, + } + + "@smithy/util-base64@3.0.0": + resolution: + { + integrity: sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==, + } + engines: { node: ">=16.0.0" } + + "@smithy/util-body-length-browser@3.0.0": + resolution: + { + integrity: sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==, + } + + "@smithy/util-body-length-node@3.0.0": + resolution: + { + integrity: sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==, + } + engines: { node: ">=16.0.0" } + + "@smithy/util-buffer-from@2.2.0": + resolution: + { + integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==, + } + engines: { node: ">=14.0.0" } + + "@smithy/util-buffer-from@3.0.0": + resolution: + { + integrity: sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==, + } + engines: { node: ">=16.0.0" } + + "@smithy/util-config-provider@3.0.0": + resolution: + { + integrity: sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==, + } + engines: { node: ">=16.0.0" } + + "@smithy/util-defaults-mode-browser@3.0.23": + resolution: + { + integrity: sha512-Y07qslyRtXDP/C5aWKqxTPBl4YxplEELG3xRrz2dnAQ6Lq/FgNrcKWmV561nNaZmFH+EzeGOX3ZRMbU8p1T6Nw==, + } + engines: { node: ">= 10.0.0" } + + "@smithy/util-defaults-mode-node@3.0.23": + resolution: + { + integrity: sha512-9Y4WH7f0vnDGuHUa4lGX9e2p+sMwODibsceSV6rfkZOvMC+BY3StB2LdO1NHafpsyHJLpwAgChxQ38tFyd6vkg==, + } + engines: { node: ">= 10.0.0" } + + "@smithy/util-endpoints@2.1.3": + resolution: + { + integrity: sha512-34eACeKov6jZdHqS5hxBMJ4KyWKztTMulhuQ2UdOoP6vVxMLrOKUqIXAwJe/wiWMhXhydLW664B02CNpQBQ4Aw==, + } + engines: { node: ">=16.0.0" } + + "@smithy/util-hex-encoding@3.0.0": + resolution: + { + integrity: sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==, + } + engines: { node: ">=16.0.0" } + + "@smithy/util-middleware@3.0.7": + resolution: + { + integrity: sha512-OVA6fv/3o7TMJTpTgOi1H5OTwnuUa8hzRzhSFDtZyNxi6OZ70L/FHattSmhE212I7b6WSOJAAmbYnvcjTHOJCA==, + } + engines: { node: ">=16.0.0" } + + "@smithy/util-retry@3.0.7": + resolution: + { + integrity: sha512-nh1ZO1vTeo2YX1plFPSe/OXaHkLAHza5jpokNiiKX2M5YpNUv6RxGJZhpfmiR4jSvVHCjIDmILjrxKmP+/Ghug==, + } + engines: { node: ">=16.0.0" } + + "@smithy/util-stream@3.1.9": + resolution: + { + integrity: sha512-7YAR0Ub3MwTMjDfjnup4qa6W8gygZMxikBhFMPESi6ASsl/rZJhwLpF/0k9TuezScCojsM0FryGdz4LZtjKPPQ==, + } + engines: { node: ">=16.0.0" } + + "@smithy/util-uri-escape@3.0.0": + resolution: + { + integrity: sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==, + } + engines: { node: ">=16.0.0" } + + "@smithy/util-utf8@2.3.0": + resolution: + { + integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==, + } + engines: { node: ">=14.0.0" } + + "@smithy/util-utf8@3.0.0": + resolution: + { + integrity: sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==, + } + engines: { node: ">=16.0.0" } + + "@smithy/util-waiter@3.1.6": + resolution: + { + integrity: sha512-xs/KAwWOeCklq8aMlnpk25LgxEYHKOEodfjfKclDMLcBJEVEKzDLxZxBQyztcuPJ7F54213NJS8PxoiHNMdItQ==, + } + engines: { node: ">=16.0.0" } + + "@types/http-proxy@1.17.15": + resolution: + { + integrity: sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==, + } + + "@types/node@22.7.5": + resolution: + { + integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==, + } + + "@vercel/blob@0.24.1": + resolution: + { + integrity: sha512-wHzgKzvAuF4tRDoXk3wGBYzQZ9z2fLr4oftiR1hOclPEdA1aj2/0mizvO2l5w91eZlTAaFth0S1DlqrrXqpntg==, + } + engines: { node: ">=16.14" } + + accepts@1.3.8: + resolution: + { + integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==, + } + engines: { node: ">= 0.6" } + + array-flatten@1.1.1: + resolution: + { + integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==, + } + + async-retry@1.3.3: + resolution: + { + integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==, + } + + asynckit@0.4.0: + resolution: + { + integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, + } + + axios@1.7.7: + resolution: + { + integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==, + } + + body-parser@1.20.3: + resolution: + { + integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==, + } + engines: { node: ">= 0.8", npm: 1.2.8000 || >= 1.4.16 } + + bowser@2.11.0: + resolution: + { + integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==, + } + + braces@3.0.3: + resolution: + { + integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==, + } + engines: { node: ">=8" } + + bytes@3.1.2: + resolution: + { + integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==, + } + engines: { node: ">= 0.8" } + + call-bind@1.0.7: + resolution: + { + integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==, + } + engines: { node: ">= 0.4" } + + cloudinary@2.5.1: + resolution: + { + integrity: sha512-CNg6uU53Hl4FEVynkTGpt5bQEAQWDHi3H+Sm62FzKf5uQHipSN2v7qVqS8GRVqeb0T1WNV+22+75DOJeRXYeSQ==, + } + engines: { node: ">=9" } + + combined-stream@1.0.8: + resolution: + { + integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, + } + engines: { node: ">= 0.8" } + + content-disposition@0.5.4: + resolution: + { + integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==, + } + engines: { node: ">= 0.6" } + + content-type@1.0.5: + resolution: + { + integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==, + } + engines: { node: ">= 0.6" } + + cookie-signature@1.0.6: + resolution: + { + integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==, + } + + cookie@0.7.1: + resolution: + { + integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==, + } + engines: { node: ">= 0.6" } + + debug@2.6.9: + resolution: + { + integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==, + } + peerDependencies: + supports-color: "*" + peerDependenciesMeta: + supports-color: + optional: true + + debug@3.2.7: + resolution: + { + integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, + } + peerDependencies: + supports-color: "*" + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.7: + resolution: + { + integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==, + } + engines: { node: ">=6.0" } + peerDependencies: + supports-color: "*" + peerDependenciesMeta: + supports-color: + optional: true + + define-data-property@1.1.4: + resolution: + { + integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==, + } + engines: { node: ">= 0.4" } + + delayed-stream@1.0.0: + resolution: + { + integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, + } + engines: { node: ">=0.4.0" } + + depd@2.0.0: + resolution: + { + integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==, + } + engines: { node: ">= 0.8" } + + destroy@1.2.0: + resolution: + { + integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==, + } + engines: { node: ">= 0.8", npm: 1.2.8000 || >= 1.4.16 } + + dotenv@16.4.5: + resolution: + { + integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==, + } + engines: { node: ">=12" } + + ee-first@1.1.1: + resolution: + { + integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==, + } + + encodeurl@1.0.2: + resolution: + { + integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==, + } + engines: { node: ">= 0.8" } + + encodeurl@2.0.0: + resolution: + { + integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==, + } + engines: { node: ">= 0.8" } + + es-define-property@1.0.0: + resolution: + { + integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==, + } + engines: { node: ">= 0.4" } + + es-errors@1.3.0: + resolution: + { + integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==, + } + engines: { node: ">= 0.4" } + + es6-promise@4.2.8: + resolution: + { + integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==, + } + + escape-html@1.0.3: + resolution: + { + integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==, + } + + etag@1.8.1: + resolution: + { + integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==, + } + engines: { node: ">= 0.6" } + + eventemitter3@4.0.7: + resolution: + { + integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==, + } + + express-http-proxy@2.1.1: + resolution: + { + integrity: sha512-4aRQRqDQU7qNPV5av0/hLcyc0guB9UP71nCYrQEYml7YphTo8tmWf3nDZWdTJMMjFikyz9xKXaURor7Chygdwg==, + } + engines: { node: ">=6.0.0" } + + express@4.21.1: + resolution: + { + integrity: sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==, + } + engines: { node: ">= 0.10.0" } + + fast-xml-parser@4.4.1: + resolution: + { + integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==, + } + hasBin: true + + fill-range@7.1.1: + resolution: + { + integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==, + } + engines: { node: ">=8" } + + finalhandler@1.3.1: + resolution: + { + integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==, + } + engines: { node: ">= 0.8" } + + follow-redirects@1.15.9: + resolution: + { + integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==, + } + engines: { node: ">=4.0" } + peerDependencies: + debug: "*" + peerDependenciesMeta: + debug: + optional: true + + form-data@4.0.1: + resolution: + { + integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==, + } + engines: { node: ">= 6" } + + forwarded@0.2.0: + resolution: + { + integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==, + } + engines: { node: ">= 0.6" } + + fresh@0.5.2: + resolution: + { + integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==, + } + engines: { node: ">= 0.6" } + + function-bind@1.1.2: + resolution: + { + integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, + } + + get-intrinsic@1.2.4: + resolution: + { + integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==, + } + engines: { node: ">= 0.4" } + + gopd@1.0.1: + resolution: + { + integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==, + } + + has-property-descriptors@1.0.2: + resolution: + { + integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==, + } + + has-proto@1.0.3: + resolution: + { + integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==, + } + engines: { node: ">= 0.4" } + + has-symbols@1.0.3: + resolution: + { + integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==, + } + engines: { node: ">= 0.4" } + + hasown@2.0.2: + resolution: + { + integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==, + } + engines: { node: ">= 0.4" } + + http-errors@2.0.0: + resolution: + { + integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==, + } + engines: { node: ">= 0.8" } + + http-proxy-middleware@3.0.3: + resolution: + { + integrity: sha512-usY0HG5nyDUwtqpiZdETNbmKtw3QQ1jwYFZ9wi5iHzX2BcILwQKtYDJPo7XHTsu5Z0B2Hj3W9NNnbd+AjFWjqg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + http-proxy@1.18.1: + resolution: + { + integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==, + } + engines: { node: ">=8.0.0" } + + iconv-lite@0.4.24: + resolution: + { + integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==, + } + engines: { node: ">=0.10.0" } + + inherits@2.0.4: + resolution: + { + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, + } + + ipaddr.js@1.9.1: + resolution: + { + integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==, + } + engines: { node: ">= 0.10" } + + is-buffer@2.0.5: + resolution: + { + integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==, + } + engines: { node: ">=4" } + + is-extglob@2.1.1: + resolution: + { + integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, + } + engines: { node: ">=0.10.0" } + + is-glob@4.0.3: + resolution: + { + integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, + } + engines: { node: ">=0.10.0" } + + is-number@7.0.0: + resolution: + { + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, + } + engines: { node: ">=0.12.0" } + + is-plain-object@5.0.0: + resolution: + { + integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==, + } + engines: { node: ">=0.10.0" } + + lodash@4.17.21: + resolution: + { + integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, + } + + media-typer@0.3.0: + resolution: + { + integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==, + } + engines: { node: ">= 0.6" } + + merge-descriptors@1.0.3: + resolution: + { + integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==, + } + + methods@1.1.2: + resolution: + { + integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==, + } + engines: { node: ">= 0.6" } + + micromatch@4.0.8: + resolution: + { + integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==, + } + engines: { node: ">=8.6" } + + mime-db@1.52.0: + resolution: + { + integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, + } + engines: { node: ">= 0.6" } + + mime-types@2.1.35: + resolution: + { + integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, + } + engines: { node: ">= 0.6" } + + mime@1.6.0: + resolution: + { + integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==, + } + engines: { node: ">=4" } + hasBin: true + + ms@2.0.0: + resolution: + { + integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==, + } + + ms@2.1.3: + resolution: + { + integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, + } + + negotiator@0.6.3: + resolution: + { + integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==, + } + engines: { node: ">= 0.6" } + + object-inspect@1.13.2: + resolution: + { + integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==, + } + engines: { node: ">= 0.4" } + + on-finished@2.4.1: + resolution: + { + integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==, + } + engines: { node: ">= 0.8" } + + parseurl@1.3.3: + resolution: + { + integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==, + } + engines: { node: ">= 0.8" } + + path-to-regexp@0.1.10: + resolution: + { + integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==, + } + + picomatch@2.3.1: + resolution: + { + integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, + } + engines: { node: ">=8.6" } + + prettier@3.3.3: + resolution: + { + integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==, + } + engines: { node: ">=14" } + hasBin: true + + proxy-addr@2.0.7: + resolution: + { + integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==, + } + engines: { node: ">= 0.10" } + + proxy-from-env@1.1.0: + resolution: + { + integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==, + } + + q@1.5.1: + resolution: + { + integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==, + } + engines: { node: ">=0.6.0", teleport: ">=0.2.0" } + deprecated: |- + You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. + + (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) + + qs@6.13.0: + resolution: + { + integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==, + } + engines: { node: ">=0.6" } + + range-parser@1.2.1: + resolution: + { + integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==, + } + engines: { node: ">= 0.6" } + + raw-body@2.5.2: + resolution: + { + integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==, + } + engines: { node: ">= 0.8" } + + requires-port@1.0.0: + resolution: + { + integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==, + } + + retry@0.13.1: + resolution: + { + integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==, + } + engines: { node: ">= 4" } + + safe-buffer@5.2.1: + resolution: + { + integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, + } + + safer-buffer@2.1.2: + resolution: + { + integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, + } + + send@0.19.0: + resolution: + { + integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==, + } + engines: { node: ">= 0.8.0" } + + serve-static@1.16.2: + resolution: + { + integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==, + } + engines: { node: ">= 0.8.0" } + + set-function-length@1.2.2: + resolution: + { + integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==, + } + engines: { node: ">= 0.4" } + + setprototypeof@1.2.0: + resolution: + { + integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==, + } + + side-channel@1.0.6: + resolution: + { + integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==, + } + engines: { node: ">= 0.4" } + + statuses@2.0.1: + resolution: + { + integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==, + } + engines: { node: ">= 0.8" } + + streamifier@0.1.1: + resolution: + { + integrity: sha512-zDgl+muIlWzXNsXeyUfOk9dChMjlpkq0DRsxujtYPgyJ676yQ8jEm6zzaaWHFDg5BNcLuif0eD2MTyJdZqXpdg==, + } + engines: { node: ">=0.10" } + + strnum@1.0.5: + resolution: + { + integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==, + } + + to-regex-range@5.0.1: + resolution: + { + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, + } + engines: { node: ">=8.0" } + + toidentifier@1.0.1: + resolution: + { + integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==, + } + engines: { node: ">=0.6" } + + tslib@2.7.0: + resolution: + { + integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==, + } + + type-is@1.6.18: + resolution: + { + integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==, + } + engines: { node: ">= 0.6" } + + undici-types@6.19.8: + resolution: + { + integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==, + } + + undici@5.28.4: + resolution: + { + integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==, + } + engines: { node: ">=14.0" } + + unpipe@1.0.0: + resolution: + { + integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==, + } + engines: { node: ">= 0.8" } + + utils-merge@1.0.1: + resolution: + { + integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==, + } + engines: { node: ">= 0.4.0" } + + uuid@9.0.1: + resolution: + { + integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==, + } + hasBin: true + + vary@1.1.2: + resolution: + { + integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==, + } + engines: { node: ">= 0.8" } + +snapshots: + "@aws-crypto/crc32@5.2.0": + dependencies: + "@aws-crypto/util": 5.2.0 + "@aws-sdk/types": 3.667.0 + tslib: 2.7.0 + + "@aws-crypto/crc32c@5.2.0": + dependencies: + "@aws-crypto/util": 5.2.0 + "@aws-sdk/types": 3.667.0 + tslib: 2.7.0 + + "@aws-crypto/sha1-browser@5.2.0": + dependencies: + "@aws-crypto/supports-web-crypto": 5.2.0 + "@aws-crypto/util": 5.2.0 + "@aws-sdk/types": 3.667.0 + "@aws-sdk/util-locate-window": 3.568.0 + "@smithy/util-utf8": 2.3.0 + tslib: 2.7.0 + + "@aws-crypto/sha256-browser@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.667.0 + "@aws-sdk/util-locate-window": 3.568.0 + "@smithy/util-utf8": 2.3.0 + tslib: 2.7.0 + + "@aws-crypto/sha256-js@5.2.0": + dependencies: + "@aws-crypto/util": 5.2.0 + "@aws-sdk/types": 3.667.0 + tslib: 2.7.0 + + "@aws-crypto/supports-web-crypto@5.2.0": + dependencies: + tslib: 2.7.0 + + "@aws-crypto/util@5.2.0": + dependencies: + "@aws-sdk/types": 3.667.0 + "@smithy/util-utf8": 2.3.0 + tslib: 2.7.0 + + "@aws-sdk/client-s3@3.670.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.670.0(@aws-sdk/client-sts@3.670.0) + "@aws-sdk/client-sts": 3.670.0 + "@aws-sdk/core": 3.667.0 + "@aws-sdk/credential-provider-node": 3.670.0(@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0))(@aws-sdk/client-sts@3.670.0) + "@aws-sdk/middleware-bucket-endpoint": 3.667.0 + "@aws-sdk/middleware-expect-continue": 3.667.0 + "@aws-sdk/middleware-flexible-checksums": 3.669.0 + "@aws-sdk/middleware-host-header": 3.667.0 + "@aws-sdk/middleware-location-constraint": 3.667.0 + "@aws-sdk/middleware-logger": 3.667.0 + "@aws-sdk/middleware-recursion-detection": 3.667.0 + "@aws-sdk/middleware-sdk-s3": 3.669.0 + "@aws-sdk/middleware-ssec": 3.667.0 + "@aws-sdk/middleware-user-agent": 3.669.0 + "@aws-sdk/region-config-resolver": 3.667.0 + "@aws-sdk/signature-v4-multi-region": 3.669.0 + "@aws-sdk/types": 3.667.0 + "@aws-sdk/util-endpoints": 3.667.0 + "@aws-sdk/util-user-agent-browser": 3.670.0 + "@aws-sdk/util-user-agent-node": 3.669.0 + "@aws-sdk/xml-builder": 3.662.0 + "@smithy/config-resolver": 3.0.9 + "@smithy/core": 2.4.8 + "@smithy/eventstream-serde-browser": 3.0.10 + "@smithy/eventstream-serde-config-resolver": 3.0.7 + "@smithy/eventstream-serde-node": 3.0.9 + "@smithy/fetch-http-handler": 3.2.9 + "@smithy/hash-blob-browser": 3.1.6 + "@smithy/hash-node": 3.0.7 + "@smithy/hash-stream-node": 3.1.6 + "@smithy/invalid-dependency": 3.0.7 + "@smithy/md5-js": 3.0.7 + "@smithy/middleware-content-length": 3.0.9 + "@smithy/middleware-endpoint": 3.1.4 + "@smithy/middleware-retry": 3.0.23 + "@smithy/middleware-serde": 3.0.7 + "@smithy/middleware-stack": 3.0.7 + "@smithy/node-config-provider": 3.1.8 + "@smithy/node-http-handler": 3.2.4 + "@smithy/protocol-http": 4.1.4 + "@smithy/smithy-client": 3.4.0 + "@smithy/types": 3.5.0 + "@smithy/url-parser": 3.0.7 + "@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.23 + "@smithy/util-defaults-mode-node": 3.0.23 + "@smithy/util-endpoints": 2.1.3 + "@smithy/util-middleware": 3.0.7 + "@smithy/util-retry": 3.0.7 + "@smithy/util-stream": 3.1.9 + "@smithy/util-utf8": 3.0.0 + "@smithy/util-waiter": 3.1.6 + tslib: 2.7.0 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0)": + dependencies: + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/client-sts": 3.670.0 + "@aws-sdk/core": 3.667.0 + "@aws-sdk/credential-provider-node": 3.670.0(@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0))(@aws-sdk/client-sts@3.670.0) + "@aws-sdk/middleware-host-header": 3.667.0 + "@aws-sdk/middleware-logger": 3.667.0 + "@aws-sdk/middleware-recursion-detection": 3.667.0 + "@aws-sdk/middleware-user-agent": 3.669.0 + "@aws-sdk/region-config-resolver": 3.667.0 + "@aws-sdk/types": 3.667.0 + "@aws-sdk/util-endpoints": 3.667.0 + "@aws-sdk/util-user-agent-browser": 3.670.0 + "@aws-sdk/util-user-agent-node": 3.669.0 + "@smithy/config-resolver": 3.0.9 + "@smithy/core": 2.4.8 + "@smithy/fetch-http-handler": 3.2.9 + "@smithy/hash-node": 3.0.7 + "@smithy/invalid-dependency": 3.0.7 + "@smithy/middleware-content-length": 3.0.9 + "@smithy/middleware-endpoint": 3.1.4 + "@smithy/middleware-retry": 3.0.23 + "@smithy/middleware-serde": 3.0.7 + "@smithy/middleware-stack": 3.0.7 + "@smithy/node-config-provider": 3.1.8 + "@smithy/node-http-handler": 3.2.4 + "@smithy/protocol-http": 4.1.4 + "@smithy/smithy-client": 3.4.0 + "@smithy/types": 3.5.0 + "@smithy/url-parser": 3.0.7 + "@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.23 + "@smithy/util-defaults-mode-node": 3.0.23 + "@smithy/util-endpoints": 2.1.3 + "@smithy/util-middleware": 3.0.7 + "@smithy/util-retry": 3.0.7 + "@smithy/util-utf8": 3.0.0 + tslib: 2.7.0 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/client-sso@3.670.0": + dependencies: + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/core": 3.667.0 + "@aws-sdk/middleware-host-header": 3.667.0 + "@aws-sdk/middleware-logger": 3.667.0 + "@aws-sdk/middleware-recursion-detection": 3.667.0 + "@aws-sdk/middleware-user-agent": 3.669.0 + "@aws-sdk/region-config-resolver": 3.667.0 + "@aws-sdk/types": 3.667.0 + "@aws-sdk/util-endpoints": 3.667.0 + "@aws-sdk/util-user-agent-browser": 3.670.0 + "@aws-sdk/util-user-agent-node": 3.669.0 + "@smithy/config-resolver": 3.0.9 + "@smithy/core": 2.4.8 + "@smithy/fetch-http-handler": 3.2.9 + "@smithy/hash-node": 3.0.7 + "@smithy/invalid-dependency": 3.0.7 + "@smithy/middleware-content-length": 3.0.9 + "@smithy/middleware-endpoint": 3.1.4 + "@smithy/middleware-retry": 3.0.23 + "@smithy/middleware-serde": 3.0.7 + "@smithy/middleware-stack": 3.0.7 + "@smithy/node-config-provider": 3.1.8 + "@smithy/node-http-handler": 3.2.4 + "@smithy/protocol-http": 4.1.4 + "@smithy/smithy-client": 3.4.0 + "@smithy/types": 3.5.0 + "@smithy/url-parser": 3.0.7 + "@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.23 + "@smithy/util-defaults-mode-node": 3.0.23 + "@smithy/util-endpoints": 2.1.3 + "@smithy/util-middleware": 3.0.7 + "@smithy/util-retry": 3.0.7 + "@smithy/util-utf8": 3.0.0 + tslib: 2.7.0 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/client-sts@3.670.0": + dependencies: + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/client-sso-oidc": 3.670.0(@aws-sdk/client-sts@3.670.0) + "@aws-sdk/core": 3.667.0 + "@aws-sdk/credential-provider-node": 3.670.0(@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0))(@aws-sdk/client-sts@3.670.0) + "@aws-sdk/middleware-host-header": 3.667.0 + "@aws-sdk/middleware-logger": 3.667.0 + "@aws-sdk/middleware-recursion-detection": 3.667.0 + "@aws-sdk/middleware-user-agent": 3.669.0 + "@aws-sdk/region-config-resolver": 3.667.0 + "@aws-sdk/types": 3.667.0 + "@aws-sdk/util-endpoints": 3.667.0 + "@aws-sdk/util-user-agent-browser": 3.670.0 + "@aws-sdk/util-user-agent-node": 3.669.0 + "@smithy/config-resolver": 3.0.9 + "@smithy/core": 2.4.8 + "@smithy/fetch-http-handler": 3.2.9 + "@smithy/hash-node": 3.0.7 + "@smithy/invalid-dependency": 3.0.7 + "@smithy/middleware-content-length": 3.0.9 + "@smithy/middleware-endpoint": 3.1.4 + "@smithy/middleware-retry": 3.0.23 + "@smithy/middleware-serde": 3.0.7 + "@smithy/middleware-stack": 3.0.7 + "@smithy/node-config-provider": 3.1.8 + "@smithy/node-http-handler": 3.2.4 + "@smithy/protocol-http": 4.1.4 + "@smithy/smithy-client": 3.4.0 + "@smithy/types": 3.5.0 + "@smithy/url-parser": 3.0.7 + "@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.23 + "@smithy/util-defaults-mode-node": 3.0.23 + "@smithy/util-endpoints": 2.1.3 + "@smithy/util-middleware": 3.0.7 + "@smithy/util-retry": 3.0.7 + "@smithy/util-utf8": 3.0.0 + tslib: 2.7.0 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/core@3.667.0": + dependencies: + "@aws-sdk/types": 3.667.0 + "@smithy/core": 2.4.8 + "@smithy/node-config-provider": 3.1.8 + "@smithy/property-provider": 3.1.7 + "@smithy/protocol-http": 4.1.4 + "@smithy/signature-v4": 4.2.0 + "@smithy/smithy-client": 3.4.0 + "@smithy/types": 3.5.0 + "@smithy/util-middleware": 3.0.7 + fast-xml-parser: 4.4.1 + tslib: 2.7.0 + + "@aws-sdk/credential-provider-env@3.667.0": + dependencies: + "@aws-sdk/core": 3.667.0 + "@aws-sdk/types": 3.667.0 + "@smithy/property-provider": 3.1.7 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@aws-sdk/credential-provider-http@3.667.0": + dependencies: + "@aws-sdk/core": 3.667.0 + "@aws-sdk/types": 3.667.0 + "@smithy/fetch-http-handler": 3.2.9 + "@smithy/node-http-handler": 3.2.4 + "@smithy/property-provider": 3.1.7 + "@smithy/protocol-http": 4.1.4 + "@smithy/smithy-client": 3.4.0 + "@smithy/types": 3.5.0 + "@smithy/util-stream": 3.1.9 + tslib: 2.7.0 + + "@aws-sdk/credential-provider-ini@3.670.0(@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0))(@aws-sdk/client-sts@3.670.0)": + dependencies: + "@aws-sdk/client-sts": 3.670.0 + "@aws-sdk/core": 3.667.0 + "@aws-sdk/credential-provider-env": 3.667.0 + "@aws-sdk/credential-provider-http": 3.667.0 + "@aws-sdk/credential-provider-process": 3.667.0 + "@aws-sdk/credential-provider-sso": 3.670.0(@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0)) + "@aws-sdk/credential-provider-web-identity": 3.667.0(@aws-sdk/client-sts@3.670.0) + "@aws-sdk/types": 3.667.0 + "@smithy/credential-provider-imds": 3.2.4 + "@smithy/property-provider": 3.1.7 + "@smithy/shared-ini-file-loader": 3.1.8 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + transitivePeerDependencies: + - "@aws-sdk/client-sso-oidc" + - aws-crt + + "@aws-sdk/credential-provider-node@3.670.0(@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0))(@aws-sdk/client-sts@3.670.0)": + dependencies: + "@aws-sdk/credential-provider-env": 3.667.0 + "@aws-sdk/credential-provider-http": 3.667.0 + "@aws-sdk/credential-provider-ini": 3.670.0(@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0))(@aws-sdk/client-sts@3.670.0) + "@aws-sdk/credential-provider-process": 3.667.0 + "@aws-sdk/credential-provider-sso": 3.670.0(@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0)) + "@aws-sdk/credential-provider-web-identity": 3.667.0(@aws-sdk/client-sts@3.670.0) + "@aws-sdk/types": 3.667.0 + "@smithy/credential-provider-imds": 3.2.4 + "@smithy/property-provider": 3.1.7 + "@smithy/shared-ini-file-loader": 3.1.8 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + transitivePeerDependencies: + - "@aws-sdk/client-sso-oidc" + - "@aws-sdk/client-sts" + - aws-crt + + "@aws-sdk/credential-provider-process@3.667.0": + dependencies: + "@aws-sdk/core": 3.667.0 + "@aws-sdk/types": 3.667.0 + "@smithy/property-provider": 3.1.7 + "@smithy/shared-ini-file-loader": 3.1.8 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@aws-sdk/credential-provider-sso@3.670.0(@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0))": + dependencies: + "@aws-sdk/client-sso": 3.670.0 + "@aws-sdk/core": 3.667.0 + "@aws-sdk/token-providers": 3.667.0(@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0)) + "@aws-sdk/types": 3.667.0 + "@smithy/property-provider": 3.1.7 + "@smithy/shared-ini-file-loader": 3.1.8 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + transitivePeerDependencies: + - "@aws-sdk/client-sso-oidc" + - aws-crt + + "@aws-sdk/credential-provider-web-identity@3.667.0(@aws-sdk/client-sts@3.670.0)": + dependencies: + "@aws-sdk/client-sts": 3.670.0 + "@aws-sdk/core": 3.667.0 + "@aws-sdk/types": 3.667.0 + "@smithy/property-provider": 3.1.7 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@aws-sdk/middleware-bucket-endpoint@3.667.0": + dependencies: + "@aws-sdk/types": 3.667.0 + "@aws-sdk/util-arn-parser": 3.568.0 + "@smithy/node-config-provider": 3.1.8 + "@smithy/protocol-http": 4.1.4 + "@smithy/types": 3.5.0 + "@smithy/util-config-provider": 3.0.0 + tslib: 2.7.0 + + "@aws-sdk/middleware-expect-continue@3.667.0": + dependencies: + "@aws-sdk/types": 3.667.0 + "@smithy/protocol-http": 4.1.4 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@aws-sdk/middleware-flexible-checksums@3.669.0": + dependencies: + "@aws-crypto/crc32": 5.2.0 + "@aws-crypto/crc32c": 5.2.0 + "@aws-sdk/core": 3.667.0 + "@aws-sdk/types": 3.667.0 + "@smithy/is-array-buffer": 3.0.0 + "@smithy/node-config-provider": 3.1.8 + "@smithy/protocol-http": 4.1.4 + "@smithy/types": 3.5.0 + "@smithy/util-middleware": 3.0.7 + "@smithy/util-utf8": 3.0.0 + tslib: 2.7.0 + + "@aws-sdk/middleware-host-header@3.667.0": + dependencies: + "@aws-sdk/types": 3.667.0 + "@smithy/protocol-http": 4.1.4 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@aws-sdk/middleware-location-constraint@3.667.0": + dependencies: + "@aws-sdk/types": 3.667.0 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@aws-sdk/middleware-logger@3.667.0": + dependencies: + "@aws-sdk/types": 3.667.0 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@aws-sdk/middleware-recursion-detection@3.667.0": + dependencies: + "@aws-sdk/types": 3.667.0 + "@smithy/protocol-http": 4.1.4 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@aws-sdk/middleware-sdk-s3@3.669.0": + dependencies: + "@aws-sdk/core": 3.667.0 + "@aws-sdk/types": 3.667.0 + "@aws-sdk/util-arn-parser": 3.568.0 + "@smithy/core": 2.4.8 + "@smithy/node-config-provider": 3.1.8 + "@smithy/protocol-http": 4.1.4 + "@smithy/signature-v4": 4.2.0 + "@smithy/smithy-client": 3.4.0 + "@smithy/types": 3.5.0 + "@smithy/util-config-provider": 3.0.0 + "@smithy/util-middleware": 3.0.7 + "@smithy/util-stream": 3.1.9 + "@smithy/util-utf8": 3.0.0 + tslib: 2.7.0 + + "@aws-sdk/middleware-ssec@3.667.0": + dependencies: + "@aws-sdk/types": 3.667.0 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@aws-sdk/middleware-user-agent@3.669.0": + dependencies: + "@aws-sdk/core": 3.667.0 + "@aws-sdk/types": 3.667.0 + "@aws-sdk/util-endpoints": 3.667.0 + "@smithy/core": 2.4.8 + "@smithy/protocol-http": 4.1.4 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@aws-sdk/region-config-resolver@3.667.0": + dependencies: + "@aws-sdk/types": 3.667.0 + "@smithy/node-config-provider": 3.1.8 + "@smithy/types": 3.5.0 + "@smithy/util-config-provider": 3.0.0 + "@smithy/util-middleware": 3.0.7 + tslib: 2.7.0 + + "@aws-sdk/s3-request-presigner@3.670.0": + dependencies: + "@aws-sdk/signature-v4-multi-region": 3.669.0 + "@aws-sdk/types": 3.667.0 + "@aws-sdk/util-format-url": 3.667.0 + "@smithy/middleware-endpoint": 3.1.4 + "@smithy/protocol-http": 4.1.4 + "@smithy/smithy-client": 3.4.0 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@aws-sdk/signature-v4-multi-region@3.669.0": + dependencies: + "@aws-sdk/middleware-sdk-s3": 3.669.0 + "@aws-sdk/types": 3.667.0 + "@smithy/protocol-http": 4.1.4 + "@smithy/signature-v4": 4.2.0 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@aws-sdk/token-providers@3.667.0(@aws-sdk/client-sso-oidc@3.670.0(@aws-sdk/client-sts@3.670.0))": + dependencies: + "@aws-sdk/client-sso-oidc": 3.670.0(@aws-sdk/client-sts@3.670.0) + "@aws-sdk/types": 3.667.0 + "@smithy/property-provider": 3.1.7 + "@smithy/shared-ini-file-loader": 3.1.8 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@aws-sdk/types@3.667.0": + dependencies: + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@aws-sdk/util-arn-parser@3.568.0": + dependencies: + tslib: 2.7.0 + + "@aws-sdk/util-endpoints@3.667.0": + dependencies: + "@aws-sdk/types": 3.667.0 + "@smithy/types": 3.5.0 + "@smithy/util-endpoints": 2.1.3 + tslib: 2.7.0 + + "@aws-sdk/util-format-url@3.667.0": + dependencies: + "@aws-sdk/types": 3.667.0 + "@smithy/querystring-builder": 3.0.7 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@aws-sdk/util-locate-window@3.568.0": + dependencies: + tslib: 2.7.0 + + "@aws-sdk/util-user-agent-browser@3.670.0": + dependencies: + "@aws-sdk/types": 3.667.0 + "@smithy/types": 3.5.0 + bowser: 2.11.0 + tslib: 2.7.0 + + "@aws-sdk/util-user-agent-node@3.669.0": + dependencies: + "@aws-sdk/middleware-user-agent": 3.669.0 + "@aws-sdk/types": 3.667.0 + "@smithy/node-config-provider": 3.1.8 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@aws-sdk/xml-builder@3.662.0": + dependencies: + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@fastify/busboy@2.1.1": {} + + "@smithy/abort-controller@3.1.5": + dependencies: + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@smithy/chunked-blob-reader-native@3.0.0": + dependencies: + "@smithy/util-base64": 3.0.0 + tslib: 2.7.0 + + "@smithy/chunked-blob-reader@3.0.0": + dependencies: + tslib: 2.7.0 + + "@smithy/config-resolver@3.0.9": + dependencies: + "@smithy/node-config-provider": 3.1.8 + "@smithy/types": 3.5.0 + "@smithy/util-config-provider": 3.0.0 + "@smithy/util-middleware": 3.0.7 + tslib: 2.7.0 + + "@smithy/core@2.4.8": + dependencies: + "@smithy/middleware-endpoint": 3.1.4 + "@smithy/middleware-retry": 3.0.23 + "@smithy/middleware-serde": 3.0.7 + "@smithy/protocol-http": 4.1.4 + "@smithy/smithy-client": 3.4.0 + "@smithy/types": 3.5.0 + "@smithy/util-body-length-browser": 3.0.0 + "@smithy/util-middleware": 3.0.7 + "@smithy/util-utf8": 3.0.0 + tslib: 2.7.0 + + "@smithy/credential-provider-imds@3.2.4": + dependencies: + "@smithy/node-config-provider": 3.1.8 + "@smithy/property-provider": 3.1.7 + "@smithy/types": 3.5.0 + "@smithy/url-parser": 3.0.7 + tslib: 2.7.0 + + "@smithy/eventstream-codec@3.1.6": + dependencies: + "@aws-crypto/crc32": 5.2.0 + "@smithy/types": 3.5.0 + "@smithy/util-hex-encoding": 3.0.0 + tslib: 2.7.0 + + "@smithy/eventstream-serde-browser@3.0.10": + dependencies: + "@smithy/eventstream-serde-universal": 3.0.9 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@smithy/eventstream-serde-config-resolver@3.0.7": + dependencies: + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@smithy/eventstream-serde-node@3.0.9": + dependencies: + "@smithy/eventstream-serde-universal": 3.0.9 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@smithy/eventstream-serde-universal@3.0.9": + dependencies: + "@smithy/eventstream-codec": 3.1.6 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@smithy/fetch-http-handler@3.2.9": + dependencies: + "@smithy/protocol-http": 4.1.4 + "@smithy/querystring-builder": 3.0.7 + "@smithy/types": 3.5.0 + "@smithy/util-base64": 3.0.0 + tslib: 2.7.0 + + "@smithy/hash-blob-browser@3.1.6": + dependencies: + "@smithy/chunked-blob-reader": 3.0.0 + "@smithy/chunked-blob-reader-native": 3.0.0 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@smithy/hash-node@3.0.7": + dependencies: + "@smithy/types": 3.5.0 + "@smithy/util-buffer-from": 3.0.0 + "@smithy/util-utf8": 3.0.0 + tslib: 2.7.0 + + "@smithy/hash-stream-node@3.1.6": + dependencies: + "@smithy/types": 3.5.0 + "@smithy/util-utf8": 3.0.0 + tslib: 2.7.0 + + "@smithy/invalid-dependency@3.0.7": + dependencies: + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@smithy/is-array-buffer@2.2.0": + dependencies: + tslib: 2.7.0 + + "@smithy/is-array-buffer@3.0.0": + dependencies: + tslib: 2.7.0 + + "@smithy/md5-js@3.0.7": + dependencies: + "@smithy/types": 3.5.0 + "@smithy/util-utf8": 3.0.0 + tslib: 2.7.0 + + "@smithy/middleware-content-length@3.0.9": + dependencies: + "@smithy/protocol-http": 4.1.4 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@smithy/middleware-endpoint@3.1.4": + dependencies: + "@smithy/middleware-serde": 3.0.7 + "@smithy/node-config-provider": 3.1.8 + "@smithy/shared-ini-file-loader": 3.1.8 + "@smithy/types": 3.5.0 + "@smithy/url-parser": 3.0.7 + "@smithy/util-middleware": 3.0.7 + tslib: 2.7.0 + + "@smithy/middleware-retry@3.0.23": + dependencies: + "@smithy/node-config-provider": 3.1.8 + "@smithy/protocol-http": 4.1.4 + "@smithy/service-error-classification": 3.0.7 + "@smithy/smithy-client": 3.4.0 + "@smithy/types": 3.5.0 + "@smithy/util-middleware": 3.0.7 + "@smithy/util-retry": 3.0.7 + tslib: 2.7.0 + uuid: 9.0.1 + + "@smithy/middleware-serde@3.0.7": + dependencies: + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@smithy/middleware-stack@3.0.7": + dependencies: + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@smithy/node-config-provider@3.1.8": + dependencies: + "@smithy/property-provider": 3.1.7 + "@smithy/shared-ini-file-loader": 3.1.8 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@smithy/node-http-handler@3.2.4": + dependencies: + "@smithy/abort-controller": 3.1.5 + "@smithy/protocol-http": 4.1.4 + "@smithy/querystring-builder": 3.0.7 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@smithy/property-provider@3.1.7": + dependencies: + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@smithy/protocol-http@4.1.4": + dependencies: + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@smithy/querystring-builder@3.0.7": + dependencies: + "@smithy/types": 3.5.0 + "@smithy/util-uri-escape": 3.0.0 + tslib: 2.7.0 + + "@smithy/querystring-parser@3.0.7": + dependencies: + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@smithy/service-error-classification@3.0.7": + dependencies: + "@smithy/types": 3.5.0 + + "@smithy/shared-ini-file-loader@3.1.8": + dependencies: + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@smithy/signature-v4@4.2.0": + dependencies: + "@smithy/is-array-buffer": 3.0.0 + "@smithy/protocol-http": 4.1.4 + "@smithy/types": 3.5.0 + "@smithy/util-hex-encoding": 3.0.0 + "@smithy/util-middleware": 3.0.7 + "@smithy/util-uri-escape": 3.0.0 + "@smithy/util-utf8": 3.0.0 + tslib: 2.7.0 + + "@smithy/smithy-client@3.4.0": + dependencies: + "@smithy/middleware-endpoint": 3.1.4 + "@smithy/middleware-stack": 3.0.7 + "@smithy/protocol-http": 4.1.4 + "@smithy/types": 3.5.0 + "@smithy/util-stream": 3.1.9 + tslib: 2.7.0 + + "@smithy/types@3.5.0": + dependencies: + tslib: 2.7.0 + + "@smithy/url-parser@3.0.7": + dependencies: + "@smithy/querystring-parser": 3.0.7 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@smithy/util-base64@3.0.0": + dependencies: + "@smithy/util-buffer-from": 3.0.0 + "@smithy/util-utf8": 3.0.0 + tslib: 2.7.0 + + "@smithy/util-body-length-browser@3.0.0": + dependencies: + tslib: 2.7.0 + + "@smithy/util-body-length-node@3.0.0": + dependencies: + tslib: 2.7.0 + + "@smithy/util-buffer-from@2.2.0": + dependencies: + "@smithy/is-array-buffer": 2.2.0 + tslib: 2.7.0 + + "@smithy/util-buffer-from@3.0.0": + dependencies: + "@smithy/is-array-buffer": 3.0.0 + tslib: 2.7.0 + + "@smithy/util-config-provider@3.0.0": + dependencies: + tslib: 2.7.0 + + "@smithy/util-defaults-mode-browser@3.0.23": + dependencies: + "@smithy/property-provider": 3.1.7 + "@smithy/smithy-client": 3.4.0 + "@smithy/types": 3.5.0 + bowser: 2.11.0 + tslib: 2.7.0 + + "@smithy/util-defaults-mode-node@3.0.23": + dependencies: + "@smithy/config-resolver": 3.0.9 + "@smithy/credential-provider-imds": 3.2.4 + "@smithy/node-config-provider": 3.1.8 + "@smithy/property-provider": 3.1.7 + "@smithy/smithy-client": 3.4.0 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@smithy/util-endpoints@2.1.3": + dependencies: + "@smithy/node-config-provider": 3.1.8 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@smithy/util-hex-encoding@3.0.0": + dependencies: + tslib: 2.7.0 + + "@smithy/util-middleware@3.0.7": + dependencies: + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@smithy/util-retry@3.0.7": + dependencies: + "@smithy/service-error-classification": 3.0.7 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@smithy/util-stream@3.1.9": + dependencies: + "@smithy/fetch-http-handler": 3.2.9 + "@smithy/node-http-handler": 3.2.4 + "@smithy/types": 3.5.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.7.0 + + "@smithy/util-uri-escape@3.0.0": + dependencies: + tslib: 2.7.0 + + "@smithy/util-utf8@2.3.0": + dependencies: + "@smithy/util-buffer-from": 2.2.0 + tslib: 2.7.0 + + "@smithy/util-utf8@3.0.0": + dependencies: + "@smithy/util-buffer-from": 3.0.0 + tslib: 2.7.0 + + "@smithy/util-waiter@3.1.6": + dependencies: + "@smithy/abort-controller": 3.1.5 + "@smithy/types": 3.5.0 + tslib: 2.7.0 + + "@types/http-proxy@1.17.15": + dependencies: + "@types/node": 22.7.5 + + "@types/node@22.7.5": + dependencies: + undici-types: 6.19.8 + + "@vercel/blob@0.24.1": + dependencies: + async-retry: 1.3.3 + bytes: 3.1.2 + is-buffer: 2.0.5 + undici: 5.28.4 + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + array-flatten@1.1.1: {} + + async-retry@1.3.3: + dependencies: + retry: 0.13.1 + + asynckit@0.4.0: {} + + axios@1.7.7: + dependencies: + follow-redirects: 1.15.9(debug@4.3.7) + form-data: 4.0.1 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + body-parser@1.20.3: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.13.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + bowser@2.11.0: {} + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + bytes@3.1.2: {} + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + cloudinary@2.5.1: + dependencies: + lodash: 4.17.21 + q: 1.5.1 + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + cookie-signature@1.0.6: {} + + cookie@0.7.1: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + delayed-stream@1.0.0: {} + + depd@2.0.0: {} + + destroy@1.2.0: {} + + dotenv@16.4.5: {} + + ee-first@1.1.1: {} + + encodeurl@1.0.2: {} + + encodeurl@2.0.0: {} + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es6-promise@4.2.8: {} + + escape-html@1.0.3: {} + + etag@1.8.1: {} + + eventemitter3@4.0.7: {} + + express-http-proxy@2.1.1: + dependencies: + debug: 3.2.7 + es6-promise: 4.2.8 + raw-body: 2.5.2 + transitivePeerDependencies: + - supports-color + + express@4.21.1: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.1 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.10 + proxy-addr: 2.0.7 + qs: 6.13.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + fast-xml-parser@4.4.1: + dependencies: + strnum: 1.0.5 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + finalhandler@1.3.1: + dependencies: + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + follow-redirects@1.15.9(debug@4.3.7): + optionalDependencies: + debug: 4.3.7 + + form-data@4.0.1: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + forwarded@0.2.0: {} + + fresh@0.5.2: {} + + function-bind@1.1.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + http-proxy-middleware@3.0.3: + dependencies: + "@types/http-proxy": 1.17.15 + debug: 4.3.7 + http-proxy: 1.18.1(debug@4.3.7) + is-glob: 4.0.3 + is-plain-object: 5.0.0 + micromatch: 4.0.8 + transitivePeerDependencies: + - supports-color + + http-proxy@1.18.1(debug@4.3.7): + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.15.9(debug@4.3.7) + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + inherits@2.0.4: {} + + ipaddr.js@1.9.1: {} + + is-buffer@2.0.5: {} + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-plain-object@5.0.0: {} + + lodash@4.17.21: {} + + media-typer@0.3.0: {} + + merge-descriptors@1.0.3: {} + + methods@1.1.2: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: {} + + ms@2.0.0: {} + + ms@2.1.3: {} + + negotiator@0.6.3: {} + + object-inspect@1.13.2: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + parseurl@1.3.3: {} + + path-to-regexp@0.1.10: {} + + picomatch@2.3.1: {} + + prettier@3.3.3: {} + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + proxy-from-env@1.1.0: {} + + q@1.5.1: {} + + qs@6.13.0: + dependencies: + side-channel: 1.0.6 + + range-parser@1.2.1: {} + + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + requires-port@1.0.0: {} + + retry@0.13.1: {} + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + send@0.19.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + serve-static@1.16.2: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.0 + transitivePeerDependencies: + - supports-color + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + setprototypeof@1.2.0: {} + + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 + + statuses@2.0.1: {} + + streamifier@0.1.1: {} + + strnum@1.0.5: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + tslib@2.7.0: {} + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + undici-types@6.19.8: {} + + undici@5.28.4: + dependencies: + "@fastify/busboy": 2.1.1 + + unpipe@1.0.0: {} + + utils-merge@1.0.1: {} + + uuid@9.0.1: {} + + vary@1.1.2: {} diff --git a/proxy-server/src/cloudflare.ts b/proxy-server/src/cloudflare.ts deleted file mode 100755 index a9c4c22..0000000 --- a/proxy-server/src/cloudflare.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3"; -import { createReadStream } from "fs"; -import { basename } from "path"; - -import dotenv from "dotenv"; -dotenv.config(); - -// Configure the S3 client -const s3Client = new S3Client({ - region: "auto", - endpoint: "https://974666f398d49d0e8c8a899ccc9d9cf7.r2.cloudflarestorage.com", - credentials: { - accessKeyId: process.env.CLOUDFLARE_ACCESS_KEY!, - secretAccessKey: process.env.CLOUDFLARE_SECRET_KEY!, - }, -}); - -async function uploadImageToR2( - filePath: string, - bucketName: string, - Key: string, -) { - const fileStream = createReadStream(filePath); - - const uploadParams = { - Bucket: bucketName, - Body: fileStream, - Key, - }; - - try { - const command = new PutObjectCommand(uploadParams); - const response = await s3Client.send(command); - console.log(`File uploaded successfully. ETag: ${response.ETag}`); - } catch (error) { - console.error("Error uploading file:", error); - } -} - -// Usage -const filePath = "./output/index.html"; -const bucketName = "vercel-clone"; - -uploadImageToR2(filePath, bucketName, "index.html"); diff --git a/proxy-server/src/cloudinary.ts b/proxy-server/src/cloudinary.ts deleted file mode 100755 index 25ddf38..0000000 --- a/proxy-server/src/cloudinary.ts +++ /dev/null @@ -1,100 +0,0 @@ -import fs from "fs/promises"; -import dotenv from "dotenv"; -import streamifier from "streamifier"; -import { v2 as cloudinary } from "cloudinary"; - -dotenv.config(); - -const data: any[] = []; - -const CLOUDINARY_CLOUD_NAME = process.env.CLOUDINARY_CLOUD_NAME || "cloud_name"; -const CLOUDINARY_API_KEY = process.env.CLOUDINARY_API_KEY || "api_key"; -const CLOUDINARY_API_SECRET = process.env.CLOUDINARY_API_SECRET || "api_secret"; - -cloudinary.config({ - cloud_name: CLOUDINARY_CLOUD_NAME, - api_key: CLOUDINARY_API_KEY, - api_secret: CLOUDINARY_API_SECRET, -}); - -async function uploadObject({ objectPath }: { objectPath: string }) { - try { - const object = await fs.readFile(objectPath); - - // Use Promise to handle Cloudinary stream correctly - return new Promise((resolve, reject) => { - const cld_upload_stream = cloudinary.uploader.upload_stream( - { - public_id: objectPath, - use_filename: true, - resource_type: "raw", - chunk_size: 4000000, - use_asset_folder_as_public_id_prefix: true, - overwrite: true, - }, - function (error, result) { - if (error) { - reject(error); - } else { - resolve(result); - } - }, - ); - - streamifier - .createReadStream(object) - .pipe(cld_upload_stream) - .on("error", (error: any) => { - reject(error); - }); - }); - } catch (err) { - console.error(`Error reading file ${objectPath}:`, err); - throw err; - } -} - -const getUrlOfCloudinaryAsset = (asset: any) => { - return `https://res.cloudinary.com/${CLOUDINARY_CLOUD_NAME}/raw/upload/v${asset.version}/${asset.public_id}`; -}; - -const getFilesRecursively = async (directory: string): Promise => { - const dirents = await fs.readdir(directory, { withFileTypes: true }); - const files = await Promise.all( - dirents.map(async (dirent) => { - const res = `${directory}/${dirent.name}`; - return dirent.isDirectory() ? getFilesRecursively(res) : res; - }), - ); - return Array.prototype.concat(...files); -}; -(async () => { - try { - const folderObjects = await getFilesRecursively("output"); - - const files = ( - await Promise.all( - folderObjects.map(async (file) => { - const stat = await fs.stat(file); - return stat.isFile() ? file : null; - }), - ) - ) - .filter(Boolean) - .filter((file) => file != null); - - for (const file of files) { - console.log(`Uploading file: ${file}`); - const result: any = await uploadObject({ objectPath: file }); - data.push({ - url: getUrlOfCloudinaryAsset(result), - version: result.version, - public_id: result.public_id, - }); - } - } catch (error) { - console.error("Error processing files:", error); - } -})().then(() => { - console.log(data); -}); diff --git a/proxy-server/src/index.js b/proxy-server/src/index.js new file mode 100755 index 0000000..8ce52e9 --- /dev/null +++ b/proxy-server/src/index.js @@ -0,0 +1,60 @@ +import express from "express"; +import httpProxy from "http-proxy"; +import url from "url"; + +const app = express(); +const PORT = 8000; +const BASE_PATH = "https://test-vultr.s3.ap-south-1.amazonaws.com"; +const proxy = httpProxy.createProxy(); + +app.use((req, res) => { + const hostname = req.hostname; + const subdomain = hostname.split(".")[0]; + req.subdomain = subdomain; + + const resolvesTo = `${BASE_PATH}/${subdomain}`; + + proxy.web(req, res, { target: resolvesTo, changeOrigin: true }); +}); + +proxy.on("proxyReq", (proxyReq, req) => { + const subdomain = req.subdomain; + let path = url.parse(req.url).pathname; + + if (path === "/" || !path.includes(".")) { + path = "/index.html"; + } + + proxyReq.path = `/${subdomain}${path}`; + + proxyReq.setHeader("X-Forwarded-Host", req.headers.host); + proxyReq.setHeader("X-Forwarded-Proto", req.protocol); + proxyReq.setHeader("Server", "devpulkit.in"); +}); + +proxy.on("proxyRes", (proxyRes, req, res) => { + const awsKeywords = ["amz-", "x-amz-", "s3", "aws"]; + + Object.keys(proxyRes.headers).forEach((header) => { + const headerLower = header.toLowerCase(); + const valueLower = String(proxyRes.headers[header]).toLowerCase(); + if ( + awsKeywords.some( + (keyword) => + headerLower.includes(keyword) || valueLower.includes(keyword), + ) + ) { + delete proxyRes.headers[header]; + } + }); + + proxyRes.headers["server"] = "devpulkit.in"; + proxyRes.headers["x-powered-by"] = "devpulkit.in"; +}); + +proxy.on("error", (err, req, res) => { + console.error("Proxy Error:", err); + res.status(500).send("Proxy Error"); +}); + +app.listen(PORT, () => console.log(`Reverse Proxy Running on port ${PORT}`)); diff --git a/proxy-server/src/index.ts b/proxy-server/src/index.ts deleted file mode 100755 index 3a1133e..0000000 --- a/proxy-server/src/index.ts +++ /dev/null @@ -1,40 +0,0 @@ -import express, { Request, Response } from "express"; -import httpProxy from "http-proxy"; - -const app = express(); -const PORT = 8000; - -const BASE_PATH = "https://vercelclonee.s3.amazonaws.com/output"; - -const proxy = httpProxy.createProxy(); - -app.use((req: Request, res: Response) => { - const decodedUrl = decodeURIComponent(req.url); - req.url = decodedUrl; - - proxy.web(req, res, { target: BASE_PATH, changeOrigin: true }, (err) => { - res.status(500).send("Something went wrong. Please try again later."); - }); -}); - -// @ts-ignore -proxy.on("proxyReq", (proxyReq, req: Request) => { - if (req.url === "/") proxyReq.path += "index.html"; - proxyReq.setHeader("X-Forwarded-For", req.socket.remoteAddress || ""); -}); - -// @ts-ignore -proxy.on("proxyRes", (proxyRes, req: Request, res: Response) => { - delete proxyRes.headers["x-amz-request-id"]; - delete proxyRes.headers["x-amz-id-2"]; - delete proxyRes.headers["server"]; - - proxyRes.headers["server"] = "devpulkit.in"; -}); - -// @ts-ignore -proxy.on("error", (err, req: Request, res: Response) => { - res.status(500).send("Internal Server Error"); -}); - -app.listen(PORT, () => console.log(`Reverse Proxy Running on port ${PORT}`)); diff --git a/proxy-server/src/vercel.ts b/proxy-server/src/vercel.ts deleted file mode 100755 index 5783145..0000000 --- a/proxy-server/src/vercel.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { list } from "@vercel/blob"; - -import dotenv from "dotenv"; -dotenv.config(); - -const BLOB_READ_WRITE_TOKEN = process.env.BLOB_READ_WRITE_TOKEN; - -(async () => { - const response = await list({ - token: BLOB_READ_WRITE_TOKEN, - }); - console.log(response); -})(); diff --git a/proxy-server/tsconfig.json b/proxy-server/tsconfig.json deleted file mode 100755 index b107b40..0000000 --- a/proxy-server/tsconfig.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ - - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "commonjs", /* Specify what module code is generated. */ - "rootDir": "./src", /* Specify the root folder within your source files. */ - // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ - // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ - // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ - // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ - // "noUncheckedSideEffectImports": true, /* Check side effect imports. */ - "resolveJsonModule": true, /* Enable importing .json files. */ - // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - "outDir": "./dist", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ - // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - - /* Type Checking */ - "strict": true, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } -} diff --git a/test/.env b/test/.env deleted file mode 100644 index ef458a9..0000000 --- a/test/.env +++ /dev/null @@ -1,5 +0,0 @@ -REDIS_HOST=localhost -REDIS_PASSWORD=redispassword -REDIS_URL=redis://:redispassword@localhost:6379 -REDIS_PORT=6379 -PUSH_NOTIFICATIONS_CHANNEL=push-notification \ No newline at end of file diff --git a/test/cmd.txt b/test/cmd.txt deleted file mode 100644 index d19e5fa..0000000 --- a/test/cmd.txt +++ /dev/null @@ -1,4 +0,0 @@ -docker run -d --name redis-stack -p 6379:6379 -p 8001:8001 -e REDIS_ARGS="--requirepass mypassword" redis/redis-stack:latest - - -docker run -d --name redis-stack -p 6379:6379 -p 8001:8001 redis/redis-stack:latest \ No newline at end of file diff --git a/test/data.json b/test/data.json deleted file mode 100644 index 347b22d..0000000 --- a/test/data.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "branches": [ - "main" - ], - "files": [ - { - "name": "backend", - "path": "backend", - "sha": "b0e39c2f1b55f6306fd2060ebf409f3c8c0f98af", - "size": 0, - "url": "https://api.github.com/repos/Pulkitxm/WanderAI/contents/backend?ref=main", - "html_url": "https://github.com/Pulkitxm/WanderAI/tree/main/backend", - "git_url": "https://api.github.com/repos/Pulkitxm/WanderAI/git/trees/b0e39c2f1b55f6306fd2060ebf409f3c8c0f98af", - "download_url": null, - "type": "dir", - "_links": { - "self": "https://api.github.com/repos/Pulkitxm/WanderAI/contents/backend?ref=main", - "git": "https://api.github.com/repos/Pulkitxm/WanderAI/git/trees/b0e39c2f1b55f6306fd2060ebf409f3c8c0f98af", - "html": "https://github.com/Pulkitxm/WanderAI/tree/main/backend" - } - }, - { - "name": "frontend", - "path": "frontend", - "sha": "c9d52acd6996ce4417ecc53033b30cd24852abc0", - "size": 0, - "url": "https://api.github.com/repos/Pulkitxm/WanderAI/contents/frontend?ref=main", - "html_url": "https://github.com/Pulkitxm/WanderAI/tree/main/frontend", - "git_url": "https://api.github.com/repos/Pulkitxm/WanderAI/git/trees/c9d52acd6996ce4417ecc53033b30cd24852abc0", - "download_url": null, - "type": "dir", - "_links": { - "self": "https://api.github.com/repos/Pulkitxm/WanderAI/contents/frontend?ref=main", - "git": "https://api.github.com/repos/Pulkitxm/WanderAI/git/trees/c9d52acd6996ce4417ecc53033b30cd24852abc0", - "html": "https://github.com/Pulkitxm/WanderAI/tree/main/frontend" - } - } - ] -} \ No newline at end of file diff --git a/test/data2.json b/test/data2.json deleted file mode 100644 index ffa79bc..0000000 --- a/test/data2.json +++ /dev/null @@ -1,861 +0,0 @@ -[ - { - "name": "backend", - "path": "backend", - "type": "directory", - "contents": [ - { - "name": ".gitignore", - "path": "backend/.gitignore", - "type": "file" - }, - { - "name": "App server", - "path": "backend/App server", - "type": "directory", - "contents": [ - { - "name": ".eslintrc.cjs", - "path": "backend/App server/.eslintrc.cjs", - "type": "file" - }, - { - "name": ".gitignore", - "path": "backend/App server/.gitignore", - "type": "file" - }, - { - "name": "controllers", - "path": "backend/App server/controllers", - "type": "directory", - "contents": [ - { - "name": "countries.js", - "path": "backend/App server/controllers/countries.js", - "type": "file" - }, - { - "name": "explore.js", - "path": "backend/App server/controllers/explore.js", - "type": "file" - }, - { - "name": "itenary.js", - "path": "backend/App server/controllers/itenary.js", - "type": "file" - }, - { - "name": "signin.js", - "path": "backend/App server/controllers/signin.js", - "type": "file" - }, - { - "name": "signup.js", - "path": "backend/App server/controllers/signup.js", - "type": "file" - }, - { - "name": "user.js", - "path": "backend/App server/controllers/user.js", - "type": "file" - }, - { - "name": "users.js", - "path": "backend/App server/controllers/users.js", - "type": "file" - } - ] - }, - { - "name": "index.js", - "path": "backend/App server/index.js", - "type": "file" - }, - { - "name": "middleware", - "path": "backend/App server/middleware", - "type": "directory", - "contents": [ - { - "name": "auth.js", - "path": "backend/App server/middleware/auth.js", - "type": "file" - } - ] - }, - { - "name": "models", - "path": "backend/App server/models", - "type": "directory", - "contents": [ - { - "name": "country.js", - "path": "backend/App server/models/country.js", - "type": "file" - }, - { - "name": "explore.js", - "path": "backend/App server/models/explore.js", - "type": "file" - }, - { - "name": "itenary.js", - "path": "backend/App server/models/itenary.js", - "type": "file" - }, - { - "name": "user.js", - "path": "backend/App server/models/user.js", - "type": "file" - } - ] - }, - { - "name": "mongo.js", - "path": "backend/App server/mongo.js", - "type": "file" - }, - { - "name": "package-lock.json", - "path": "backend/App server/package-lock.json", - "type": "file" - }, - { - "name": "package.json", - "path": "backend/App server/package.json", - "type": "file" - }, - { - "name": "routes", - "path": "backend/App server/routes", - "type": "directory", - "contents": [ - { - "name": "countries.js", - "path": "backend/App server/routes/countries.js", - "type": "file" - }, - { - "name": "explore.js", - "path": "backend/App server/routes/explore.js", - "type": "file" - }, - { - "name": "itenary.js", - "path": "backend/App server/routes/itenary.js", - "type": "file" - }, - { - "name": "signin.js", - "path": "backend/App server/routes/signin.js", - "type": "file" - }, - { - "name": "signup.js", - "path": "backend/App server/routes/signup.js", - "type": "file" - }, - { - "name": "user.js", - "path": "backend/App server/routes/user.js", - "type": "file" - }, - { - "name": "users.js", - "path": "backend/App server/routes/users.js", - "type": "file" - } - ] - }, - { - "name": "utils", - "path": "backend/App server/utils", - "type": "directory", - "contents": [ - { - "name": "password.js", - "path": "backend/App server/utils/password.js", - "type": "file" - } - ] - } - ] - }, - { - "name": "ai-server", - "path": "backend/ai-server", - "type": "directory", - "contents": [ - { - "name": ".gitignore", - "path": "backend/ai-server/.gitignore", - "type": "file" - }, - { - "name": "app.py", - "path": "backend/ai-server/app.py", - "type": "file" - }, - { - "name": "index.py", - "path": "backend/ai-server/index.py", - "type": "file" - }, - { - "name": "itinerary.txt", - "path": "backend/ai-server/itinerary.txt", - "type": "file" - }, - { - "name": "requirements.txt", - "path": "backend/ai-server/requirements.txt", - "type": "file" - }, - { - "name": "trip_plan.py", - "path": "backend/ai-server/trip_plan.py", - "type": "file" - }, - { - "name": "utils.py", - "path": "backend/ai-server/utils.py", - "type": "file" - }, - { - "name": "vercel.json", - "path": "backend/ai-server/vercel.json", - "type": "file" - }, - { - "name": "wsgi.py", - "path": "backend/ai-server/wsgi.py", - "type": "file" - } - ] - } - ] - }, - { - "name": "frontend", - "path": "frontend", - "type": "directory", - "contents": [ - { - "name": ".eslintrc.cjs", - "path": "frontend/.eslintrc.cjs", - "type": "file" - }, - { - "name": ".gitignore", - "path": "frontend/.gitignore", - "type": "file" - }, - { - "name": "README.md", - "path": "frontend/README.md", - "type": "file" - }, - { - "name": "index.html", - "path": "frontend/index.html", - "type": "file" - }, - { - "name": "package-lock.json", - "path": "frontend/package-lock.json", - "type": "file" - }, - { - "name": "package.json", - "path": "frontend/package.json", - "type": "file" - }, - { - "name": "postcss.config.js", - "path": "frontend/postcss.config.js", - "type": "file" - }, - { - "name": "public", - "path": "frontend/public", - "type": "directory", - "contents": [ - { - "name": "vite.svg", - "path": "frontend/public/vite.svg", - "type": "file" - } - ] - }, - { - "name": "src", - "path": "frontend/src", - "type": "directory", - "contents": [ - { - "name": "App.css", - "path": "frontend/src/App.css", - "type": "file" - }, - { - "name": "App.jsx", - "path": "frontend/src/App.jsx", - "type": "file" - }, - { - "name": "Auth", - "path": "frontend/src/Auth", - "type": "directory", - "contents": [ - { - "name": "Login.css", - "path": "frontend/src/Auth/Login.css", - "type": "file" - }, - { - "name": "Login.jsx", - "path": "frontend/src/Auth/Login.jsx", - "type": "file" - }, - { - "name": "Signup.css", - "path": "frontend/src/Auth/Signup.css", - "type": "file" - }, - { - "name": "Signup.jsx", - "path": "frontend/src/Auth/Signup.jsx", - "type": "file" - }, - { - "name": "Start.css", - "path": "frontend/src/Auth/Start.css", - "type": "file" - } - ] - }, - { - "name": "Icons", - "path": "frontend/src/Icons", - "type": "directory", - "contents": [ - { - "name": "User.jsx", - "path": "frontend/src/Icons/User.jsx", - "type": "file" - } - ] - }, - { - "name": "assets", - "path": "frontend/src/assets", - "type": "directory", - "contents": [ - { - "name": "404.gif", - "path": "frontend/src/assets/404.gif", - "type": "file" - }, - { - "name": "Colosseum.jpg", - "path": "frontend/src/assets/Colosseum.jpg", - "type": "file" - }, - { - "name": "bg.png", - "path": "frontend/src/assets/bg.png", - "type": "file" - }, - { - "name": "canyon.jpg", - "path": "frontend/src/assets/canyon.jpg", - "type": "file" - }, - { - "name": "china.jpg", - "path": "frontend/src/assets/china.jpg", - "type": "file" - }, - { - "name": "explore.png", - "path": "frontend/src/assets/explore.png", - "type": "file" - }, - { - "name": "google.png", - "path": "frontend/src/assets/google.png", - "type": "file" - }, - { - "name": "holiday.png", - "path": "frontend/src/assets/holiday.png", - "type": "file" - }, - { - "name": "hotel.png", - "path": "frontend/src/assets/hotel.png", - "type": "file" - }, - { - "name": "logo.png", - "path": "frontend/src/assets/logo.png", - "type": "file" - }, - { - "name": "machu-pichu.jpg", - "path": "frontend/src/assets/machu-pichu.jpg", - "type": "file" - }, - { - "name": "map.png", - "path": "frontend/src/assets/map.png", - "type": "file" - }, - { - "name": "plane.png", - "path": "frontend/src/assets/plane.png", - "type": "file" - }, - { - "name": "reef.jpg", - "path": "frontend/src/assets/reef.jpg", - "type": "file" - }, - { - "name": "right.png", - "path": "frontend/src/assets/right.png", - "type": "file" - }, - { - "name": "ship.png", - "path": "frontend/src/assets/ship.png", - "type": "file" - }, - { - "name": "taj-mahal.jpg", - "path": "frontend/src/assets/taj-mahal.jpg", - "type": "file" - }, - { - "name": "taxi.png", - "path": "frontend/src/assets/taxi.png", - "type": "file" - }, - { - "name": "ticket.png", - "path": "frontend/src/assets/ticket.png", - "type": "file" - } - ] - }, - { - "name": "components", - "path": "frontend/src/components", - "type": "directory", - "contents": [ - { - "name": "Chat", - "path": "frontend/src/components/Chat", - "type": "directory", - "contents": [ - { - "name": "Icon.jsx", - "path": "frontend/src/components/Chat/Icon.jsx", - "type": "file" - }, - { - "name": "chatBox.css", - "path": "frontend/src/components/Chat/chatBox.css", - "type": "file" - }, - { - "name": "index.jsx", - "path": "frontend/src/components/Chat/index.jsx", - "type": "file" - } - ] - }, - { - "name": "EmergencyModal", - "path": "frontend/src/components/EmergencyModal", - "type": "directory", - "contents": [ - { - "name": "index.jsx", - "path": "frontend/src/components/EmergencyModal/index.jsx", - "type": "file" - }, - { - "name": "style.css", - "path": "frontend/src/components/EmergencyModal/style.css", - "type": "file" - } - ] - }, - { - "name": "Ham", - "path": "frontend/src/components/Ham", - "type": "directory", - "contents": [ - { - "name": "Ham.css", - "path": "frontend/src/components/Ham/Ham.css", - "type": "file" - }, - { - "name": "index.jsx", - "path": "frontend/src/components/Ham/index.jsx", - "type": "file" - } - ] - }, - { - "name": "Modal", - "path": "frontend/src/components/Modal", - "type": "directory", - "contents": [ - { - "name": "Modal.css", - "path": "frontend/src/components/Modal/Modal.css", - "type": "file" - }, - { - "name": "index.jsx", - "path": "frontend/src/components/Modal/index.jsx", - "type": "file" - } - ] - }, - { - "name": "Navbar", - "path": "frontend/src/components/Navbar", - "type": "directory", - "contents": [ - { - "name": "DefaultNav.jsx", - "path": "frontend/src/components/Navbar/DefaultNav.jsx", - "type": "file" - }, - { - "name": "HomeNav.jsx", - "path": "frontend/src/components/Navbar/HomeNav.jsx", - "type": "file" - }, - { - "name": "Nav.css", - "path": "frontend/src/components/Navbar/Nav.css", - "type": "file" - }, - { - "name": "SignUpNav.jsx", - "path": "frontend/src/components/Navbar/SignUpNav.jsx", - "type": "file" - }, - { - "name": "SigninNav.jsx", - "path": "frontend/src/components/Navbar/SigninNav.jsx", - "type": "file" - }, - { - "name": "StartNav.jsx", - "path": "frontend/src/components/Navbar/StartNav.jsx", - "type": "file" - }, - { - "name": "index.jsx", - "path": "frontend/src/components/Navbar/index.jsx", - "type": "file" - } - ] - }, - { - "name": "ProtectedRoute.jsx", - "path": "frontend/src/components/ProtectedRoute.jsx", - "type": "file" - }, - { - "name": "Translator", - "path": "frontend/src/components/Translator", - "type": "directory", - "contents": [ - { - "name": "index.css", - "path": "frontend/src/components/Translator/index.css", - "type": "file" - }, - { - "name": "index.jsx", - "path": "frontend/src/components/Translator/index.jsx", - "type": "file" - } - ] - } - ] - }, - { - "name": "config.js", - "path": "frontend/src/config.js", - "type": "file" - }, - { - "name": "firebase.jsx", - "path": "frontend/src/firebase.jsx", - "type": "file" - }, - { - "name": "main.jsx", - "path": "frontend/src/main.jsx", - "type": "file" - }, - { - "name": "pages", - "path": "frontend/src/pages", - "type": "directory", - "contents": [ - { - "name": "Account", - "path": "frontend/src/pages/Account", - "type": "directory", - "contents": [ - { - "name": "Account.css", - "path": "frontend/src/pages/Account/Account.css", - "type": "file" - }, - { - "name": "index.jsx", - "path": "frontend/src/pages/Account/index.jsx", - "type": "file" - } - ] - }, - { - "name": "Experiences", - "path": "frontend/src/pages/Experiences", - "type": "directory", - "contents": [ - { - "name": "Explore.css", - "path": "frontend/src/pages/Experiences/Explore.css", - "type": "file" - }, - { - "name": "index.jsx", - "path": "frontend/src/pages/Experiences/index.jsx", - "type": "file" - } - ] - }, - { - "name": "Explore", - "path": "frontend/src/pages/Explore", - "type": "directory", - "contents": [ - { - "name": "DisplaItenary.jsx", - "path": "frontend/src/pages/Explore/DisplaItenary.jsx", - "type": "file" - }, - { - "name": "Modal.jsx", - "path": "frontend/src/pages/Explore/Modal.jsx", - "type": "file" - }, - { - "name": "Modal1.jsx", - "path": "frontend/src/pages/Explore/Modal1.jsx", - "type": "file" - }, - { - "name": "Modal2.jsx", - "path": "frontend/src/pages/Explore/Modal2.jsx", - "type": "file" - }, - { - "name": "Options.jsx", - "path": "frontend/src/pages/Explore/Options.jsx", - "type": "file" - }, - { - "name": "Steps.jsx", - "path": "frontend/src/pages/Explore/Steps.jsx", - "type": "file" - }, - { - "name": "index.jsx", - "path": "frontend/src/pages/Explore/index.jsx", - "type": "file" - }, - { - "name": "options.css", - "path": "frontend/src/pages/Explore/options.css", - "type": "file" - } - ] - }, - { - "name": "Home", - "path": "frontend/src/pages/Home", - "type": "directory", - "contents": [ - { - "name": "backgroundimg.jsx", - "path": "frontend/src/pages/Home/backgroundimg.jsx", - "type": "file" - }, - { - "name": "index.jsx", - "path": "frontend/src/pages/Home/index.jsx", - "type": "file" - } - ] - }, - { - "name": "Maps", - "path": "frontend/src/pages/Maps", - "type": "directory", - "contents": [ - { - "name": "index.jsx", - "path": "frontend/src/pages/Maps/index.jsx", - "type": "file" - } - ] - }, - { - "name": "NotFound", - "path": "frontend/src/pages/NotFound", - "type": "directory", - "contents": [ - { - "name": "index.jsx", - "path": "frontend/src/pages/NotFound/index.jsx", - "type": "file" - }, - { - "name": "notfound.css", - "path": "frontend/src/pages/NotFound/notfound.css", - "type": "file" - } - ] - }, - { - "name": "PlanATrip", - "path": "frontend/src/pages/PlanATrip", - "type": "directory", - "contents": [ - { - "name": "Plan.css", - "path": "frontend/src/pages/PlanATrip/Plan.css", - "type": "file" - }, - { - "name": "index.jsx", - "path": "frontend/src/pages/PlanATrip/index.jsx", - "type": "file" - } - ] - }, - { - "name": "Start", - "path": "frontend/src/pages/Start", - "type": "directory", - "contents": [ - { - "name": "Start.css", - "path": "frontend/src/pages/Start/Start.css", - "type": "file" - }, - { - "name": "index.jsx", - "path": "frontend/src/pages/Start/index.jsx", - "type": "file" - } - ] - } - ] - }, - { - "name": "state", - "path": "frontend/src/state", - "type": "directory", - "contents": [ - { - "name": "chat.jsx", - "path": "frontend/src/state/chat.jsx", - "type": "file" - }, - { - "name": "explore.jsx", - "path": "frontend/src/state/explore.jsx", - "type": "file" - }, - { - "name": "itenary.js", - "path": "frontend/src/state/itenary.js", - "type": "file" - }, - { - "name": "searchquery.js", - "path": "frontend/src/state/searchquery.js", - "type": "file" - }, - { - "name": "user.jsx", - "path": "frontend/src/state/user.jsx", - "type": "file" - } - ] - }, - { - "name": "store.jsx", - "path": "frontend/src/store.jsx", - "type": "file" - }, - { - "name": "utils", - "path": "frontend/src/utils", - "type": "directory", - "contents": [ - { - "name": "AIChat.jsx", - "path": "frontend/src/utils/AIChat.jsx", - "type": "file" - }, - { - "name": "User.jsx", - "path": "frontend/src/utils/User.jsx", - "type": "file" - }, - { - "name": "sendEmail.jsx", - "path": "frontend/src/utils/sendEmail.jsx", - "type": "file" - } - ] - }, - { - "name": "vercel.json", - "path": "frontend/src/vercel.json", - "type": "file" - } - ] - }, - { - "name": "tailwind.config.js", - "path": "frontend/tailwind.config.js", - "type": "file" - }, - { - "name": "vercel.json", - "path": "frontend/vercel.json", - "type": "file" - }, - { - "name": "vite.config.js", - "path": "frontend/vite.config.js", - "type": "file" - } - ] - } -] \ No newline at end of file diff --git a/test/octokit.js b/test/octokit.js deleted file mode 100644 index af11e1a..0000000 --- a/test/octokit.js +++ /dev/null @@ -1,34 +0,0 @@ -import { Octokit } from "@octokit/rest"; - -const octokit = new Octokit({ - auth: "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", -}); -// octokit.rest.repos -// .listForOrg({ -// org: "pulkitxm", -// type: "private", -// }) -// .then(({ data }) => { -// console.log(data); -// }); - -(async () => { - try { - const { data } = await octokit.request('POST /orgs/pulkitxm/repos', { - org: 'ORG', - name: 'Hello-World', - description: 'This is your first repository', - homepage: 'https://github.com', - 'private': false, - has_issues: true, - has_projects: true, - has_wiki: true, - headers: { - 'X-GitHub-Api-Version': '2022-11-28' - } - }) - console.log(data); - } catch (error) { - console.error(error); - } -})(); diff --git a/test/public/index.html b/test/public/index.html deleted file mode 100644 index 46d9939..0000000 --- a/test/public/index.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - Recursive File Structure - - - - -

GitHub Repo File Structure

-
    - -
- - - - - \ No newline at end of file diff --git a/test/public/index.js b/test/public/index.js deleted file mode 100644 index 23baf78..0000000 --- a/test/public/index.js +++ /dev/null @@ -1,44 +0,0 @@ -async function fetchDirectoryContent(path = "") { - try { - const response = await fetch(`/api/repo-content?path=${path}`); - const data = await response.json(); - - const list = document.createElement("ul"); - data.forEach((item) => { - const listItem = document.createElement("li"); - listItem.textContent = item.name; - - if (item.type === "dir") { - // Create an expand button for directories - const expandButton = document.createElement("button"); - expandButton.textContent = "Expand"; - expandButton.onclick = () => expandDirectory(listItem, item.path); - listItem.appendChild(expandButton); - } - - list.appendChild(listItem); - }); - - return list; - } catch (error) { - console.error("Error fetching directory content:", error); - return document.createTextNode("Failed to load content."); - } -} - -async function expandDirectory(listItem, path) { - // Prevent double-fetching by removing the expand button after it is clicked - const button = listItem.querySelector("button"); - if (button) { - button.remove(); - } - - const subContent = await fetchDirectoryContent(path); - listItem.appendChild(subContent); -} - -// Initial call to fetch the root directory (empty path indicates the root) -window.onload = async () => { - const rootContent = await fetchDirectoryContent(""); - document.getElementById("repo-content").appendChild(rootContent); -}; diff --git a/test/redis.js b/test/redis.js deleted file mode 100644 index c5552a6..0000000 --- a/test/redis.js +++ /dev/null @@ -1,21 +0,0 @@ -import dotenv from "dotenv"; - -dotenv.config(); - -import { Redis } from "ioredis"; - -const { REDIS_URL, REDIS_PORT, REDIS_PASSWORD } = process.env; - -let redis = new Redis(REDIS_URL); - -redis.on("error", (err) => { - console.log("Redis error:", err); -}); - -redis.on("connect", async () => { - console.log("Redis connected"); - while (true) { - const res = await redis.brpop("project_import_queue", 0); - console.log(res); - } -}); diff --git a/test/server.js b/test/server.js deleted file mode 100644 index 76ab327..0000000 --- a/test/server.js +++ /dev/null @@ -1,38 +0,0 @@ -// const express = require("express"); -// const { Octokit } = require("@octokit/rest"); -import express from "express"; -import { Octokit } from "@octokit/rest";`` - -const app = express(); -const octokit = new Octokit({ auth: "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" }); // Replace with your access token - -app.get("/api/repo-content", async (req, res) => { - const repoName = "wanderai"; // Replace with your repository name - const repoOwner = "pulkitxm"; // Replace with the repo owner - const path = req.query.path || ""; - - try { - const { data: contents } = await octokit.repos.getContent({ - owner: repoOwner, - repo: repoName, - path, - }); - - const result = contents.map((content) => ({ - name: content.name, - path: content.path, - type: content.type, // "file" or "dir" - })); - - res.json(result); - } catch (error) { - console.error("Error fetching repo content:", error); - res.status(500).send("Error fetching content."); - } -}); - -app.use(express.static("public")); // Serve static files (like index.html and index.js) - -app.listen(3001, () => { - console.log("Server listening on http://localhost:3001"); -}); diff --git a/test/test2.js b/test/test2.js deleted file mode 100644 index 9ddde82..0000000 --- a/test/test2.js +++ /dev/null @@ -1,33 +0,0 @@ -const accessToken = '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'; -const username = 'pulkitxm'; - -fetch(`https://api.github.com/user/repos?visibility=private`, { - headers: { - 'Authorization': `Bearer ${accessToken}`, - 'Accept': 'application/vnd.github.v3+json' - } -}) -.then(response => { - console.log('Response status:', response.status); - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - return response.json(); -}) -.then(repos => { - console.log('Number of private repositories:', repos.length); - if (repos.length === 0) { - console.log('You have no private repositories.'); - } else { - console.log('Your private repositories:'); - repos.forEach(repo => { - console.log(`- ${repo.name}`); - }); - } -}) -.catch(error => { - console.error('Error:', error.message); - if (error.message.includes('401')) { - console.error('This might be due to an invalid access token. Please check your token.'); - } -}); \ No newline at end of file