diff --git a/.env.example b/.env.example index 215edaf..5edad02 100644 --- a/.env.example +++ b/.env.example @@ -1,15 +1,8 @@ -# drizzlePlugin config -DATABASE_URL=postgresql+asyncpg://example:example@localhost:5555/example +SALEOR_URL=https://your.eu.saleor.cloud +STATIC_URL=https://your.storefront.com/public/emails +SQS_QUEUE_URL= -# awsSecretManagerPlugin config & SQS related logic -AWS_REGION -AWS_ACCESS_KEY_ID -AWS_SECRET_ACCESS_KEY - -SQS_QUEUE_URL=https://localhost:3001 - -# app config -SALEOR_URL=https://your.instance.eu.saleor.cloud -NODE_ENV=development -LOG_LEVEL=info -ENVIRONMENT=local +AWS_ACCESS_KEY_ID= +AWS_REGION= +AWS_SECRET_ACCESS_KEY= +SECRET_MANAGER_APP_CONFIG_PATH=nimara-mailer diff --git a/Dockerfile b/Dockerfile index 61001df..db2ee7a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,7 +21,7 @@ WORKDIR /app RUN apk add --no-cache bash RUN corepack enable -RUN corepack prepare pnpm@9.6.0 --activate +RUN corepack prepare pnpm@9.10.0 --activate COPY --from=builder /app/package.json /app/package.json COPY --from=builder /app/types/ /app/types/ diff --git a/README.md b/README.md index c2942a8..845a8d3 100644 --- a/README.md +++ b/README.md @@ -1,214 +1,40 @@ -## Local development - -Setup required envs: - -``` -SALEOR_URL=https://your.eu.saleor.cloud -``` - -Build the app: - -`$ docker compose build` - -Now, you can run all of the containers in the background: - -`$ docker compose up -d` - -And show the output of the app: - -`$ docker compose logs app -f` - -### Debugging - -Open chrome at [chrome://inspect/#devices](chrome://inspect/#devices) and you should se the app running. Click the inspect link and the chrome console should pop out with the debugger being attached. -More info [here](https://blog.risingstack.com/how-to-debug-a-node-js-app-in-a-docker-container/) - -### Drizzle - -Generate migrations - -`$ docker compose run --rm app db:migrate` - -Apply migrations - -`$ docker compose run --rm app db:push` - -### Graphql codegen - -`$ docker compose run --rm app codegen` - ---- - -### Serverless - -1. Add your credentials to [`~/.aws/credentials`](https://docs.aws.amazon.com/cli/v1/userguide/cli-configure-files.html) - -2. Build the package: - `$ ./etc/build.sh - -3. Deploy zip to AWS Lambda: - `$ aws lambda update-function-code --profile [YOUR PROFILE] --function-name [YOUR FUNCTION NAME] --zip-file fileb://artifact.zip` - -TODO: - -- [ ] Remove graphql yoga & related pacakges -- [ ] Proper readme -- [ ] Commitizen for jira -- [ ] esbuild for both lambdas - -```` - -## Plugins - -To enable one of the plugins, add it to the `plugins` array in `src/server.ts`. - -### AWS Secret Manager - -This plugin is used to retrieve secrets from AWS Secrets Manager. It exposes a `secretsManager` client object on the server instance, and `secretsManagerConfigPath` (secret name) on the server instance. - -To enable it, add the following to the `plugins` array in `src/server.ts`: - -```ts -import AWSSecretManagerPlugin from "@/lib/plugins/awsSecretManagerPlugin"; - -for (const [plugin, opts] of [ - (...) - [AWSSecretManagerPlugin, {}], - (...) -]) { -```` - -The plugin will look for the following environment variables: +# Nimara Mailer -- `AWS_ACCESS_KEY_ID` -- `AWS_SECRET_ACCESS_KEY` -- `AWS_REGION` - ---- - -### Drizzle - -This plugin is used to manage the database connection. It exposes a `db` object on the server instance, which can be used to run postgress queries. - -To enable it, add the following to the `plugins` array in `src/server.ts:67`: - -```ts -import DrizzlePlugin from "@/lib/plugins/drizzlePlugin"; - -for (const [plugin, opts] of [ - (...) - [DrizzlePlugin, {}], - (...) -]) { -``` - -The plugin will look for the following environment variables: - -- `DB_HOST` -- `DB_PORT` -- `DB_USER` -- `DB_PASSWORD` -- `DB_NAME` - ---- - -### Url - -This plugin is used to generate URLs for the app. It exposes a `appUrl` and `urlFull` properties on the server instance, where: - -- `appUrl` === `http://domain.com` -- `urlFull` === `http://domain.com/current/path` - -To enable it, add the following to the `plugins` array in `src/server.ts:67`: - -```ts -import UrlPlugin from "@/lib/plugins/urlPlugin"; - -for (const [plugin, opts] of [ - (...) - [UrlPlugin, {}], - (...) -]) { -``` - ---- - -### UrlFor - -This plugin is used to generate URLs for the app. When enabled, it will add a `urlFor` function to the request instance, which can be used to generate paths for the app via given route name. -Caveat: this plugin requires `urlPlugin` to be installed. - -To enable it, add the following to the `plugins` array in `src/server.ts:67`: - -```ts -import UrlForPlugin from "@/lib/plugins/urlForPlugin"; - -for (const [plugin, opts] of [ - (...) - [UrlForPlugin, {}], - (...) -]) -``` - -Usage: - -``` -fastify.withTypeProvider().post( - "/register", - { - name: "saleor:register", - }, -``` - -Then simply in the code: - -``` -request.urlFor("saleor:register") -``` - -Which results in: - -``` -https://your.app.com/register -``` - -## Providers - -### Config providers - -The app supports two types of config providers and u can choose the right one for you - -### Secrets manager - -This provider stores the app secrets and configuration in AWS Secrets Manager. To use enable it: +## Local development -1. Enable `AWSSecretManagerPlugin`. -2. Adjust the `getConfigProvider` in `/src/lib/saleor/config/provider.ts`o +1. Setup required envs. You can copy `.env.example` to `.env` and adjust it. -```ts -import { SaleorSecretsManagerConfigProvider } from "./secretsManager"; + ``` + SALEOR_URL= + STATIC_URL= + SQS_QUEUE_URL= -export const getConfigProvider = ({ server }: { server: FastifyInstance }) => SaleorSecretsManagerConfigProvider({ - secretsManagerConfigPath: server.secretsManagerConfigPath, - secretsManager: server.secretsManager, -}); -``` + AWS_ACCESS_KEY_ID= + AWS_REGION= + AWS_SECRET_ACCESS_KEY= + SECRET_MANAGER_APP_CONFIG_PATH= + ``` ---- +2. [`nvm use`](https://github.com/nvm-sh/nvm) - to set proper node version. +3. [`pnpm install`](https://pnpm.io/installation) - to install dependencies. +4. `pnpm dev` - to start the app. -### Drizzle +## Docker -This provider stores the app secrets and configuration in postgress database. To use enable it: +Alternatively, you can use docker to run the app. -1. Enable `DrizzlePlugin`. -2. Adjust the `getConfigProvider` in `/src/lib/saleor/config/provider.ts`o +1. Setup required envs. You can copy `.env.example` to `.env` and adjust it. -```ts -import { SaleorDrizzleConfigProvider } from "./drizzle"; + ``` + SALEOR_URL= + STATIC_URL= + SQS_QUEUE_URL= -export const getConfigProvider = ({ server }: { server: FastifyInstance }) => - SaleorDrizzleConfigProvider({ - db: server.db, - }); + AWS_ACCESS_KEY_ID= + AWS_REGION= + AWS_SECRET_ACCESS_KEY= + SECRET_MANAGER_APP_CONFIG_PATH= + ``` -``` +2. `docker compose build` - build the app. +3. `docker compose run --rm --service-ports app` - run the app. diff --git a/package.json b/package.json index 2fba58b..d2742de 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ }, "dependencies": { "@aws-sdk/client-secrets-manager": "^3.637.0", + "@aws-sdk/client-sqs": "^3.658.1", "@fastify/aws-lambda": "^4.1.0", "@fastify/error": "^4.0.0", "dataloader": "^2.2.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1d6bb54..a401389 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: '@aws-sdk/client-secrets-manager': specifier: ^3.637.0 version: 3.645.0 + '@aws-sdk/client-sqs': + specifier: ^3.658.1 + version: 3.658.1 '@fastify/aws-lambda': specifier: ^4.1.0 version: 4.1.0 @@ -239,90 +242,182 @@ packages: resolution: {integrity: sha512-bM0bgwVjrzpmbcsY8sWYW5JnSUwQMcM7+hrVA6bWXNkMAScwJit6fq0nmXBbHRcPDaRI5WPt8t6C9q1DIGW6eg==} engines: {node: '>=16.0.0'} + '@aws-sdk/client-sqs@3.658.1': + resolution: {integrity: sha512-rCUulDaRRSHIVDCb2UdREMLmhXrp5m++yzv4/UIT4WzGRd6jd2E8uqkoQEtvEiE5eaPYac0rU8J0/s/rnEo1Gw==} + engines: {node: '>=16.0.0'} + '@aws-sdk/client-sso-oidc@3.645.0': resolution: {integrity: sha512-X9ULtdk3cO+1ysurEkJ1MSnu6U00qodXx+IVual+1jXX4RYY1WmQmfo7uDKf6FFkz7wW1DAqU+GJIBNQr0YH8A==} engines: {node: '>=16.0.0'} peerDependencies: '@aws-sdk/client-sts': ^3.645.0 + '@aws-sdk/client-sso-oidc@3.658.1': + resolution: {integrity: sha512-RGcZAI3qEA05JszPKwa0cAyp8rnS1nUvs0Sqw4hqLNQ1kD7b7V6CPjRXe7EFQqCOMvM4kGqx0+cEEVTOmBsFLw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.658.1 + '@aws-sdk/client-sso@3.645.0': resolution: {integrity: sha512-2rc8TjnsNddOeKQ/pfNN7deNvGLXAeKeYtHtGDAiM2qfTKxd2sNcAsZ+JCDLyshuD4xLM5fpUyR0X8As9EAouQ==} engines: {node: '>=16.0.0'} + '@aws-sdk/client-sso@3.658.1': + resolution: {integrity: sha512-lOuaBtqPTYGn6xpXlQF4LsNDsQ8Ij2kOdnk+i69Kp6yS76TYvtUuukyLL5kx8zE1c8WbYtxj9y8VNw9/6uKl7Q==} + engines: {node: '>=16.0.0'} + '@aws-sdk/client-sts@3.645.0': resolution: {integrity: sha512-6azXYtvtnAsPf2ShN9vKynIYVcJOpo6IoVmoMAVgNaBJyllP+s/RORzranYZzckqfmrudSxtct4rVapjLWuAMg==} engines: {node: '>=16.0.0'} + '@aws-sdk/client-sts@3.658.1': + resolution: {integrity: sha512-yw9hc5blTnbT1V6mR7Cx9HGc9KQpcLQ1QXj8rntiJi6tIYu3aFNVEyy81JHL7NsuBSeQulJTvHO3y6r3O0sfRg==} + engines: {node: '>=16.0.0'} + '@aws-sdk/core@3.635.0': resolution: {integrity: sha512-i1x/E/sgA+liUE1XJ7rj1dhyXpAKO1UKFUcTTHXok2ARjWTvszHnSXMOsB77aPbmn0fUp1JTx2kHUAZ1LVt5Bg==} engines: {node: '>=16.0.0'} + '@aws-sdk/core@3.658.1': + resolution: {integrity: sha512-vJVMoMcSKXK2gBRSu9Ywwv6wQ7tXH8VL1fqB1uVxgCqBZ3IHfqNn4zvpMPWrwgO2/3wv7XFyikGQ5ypPTCw4jA==} + engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-env@3.620.1': resolution: {integrity: sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==} engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-env@3.654.0': + resolution: {integrity: sha512-kogsx3Ql81JouHS7DkheCDU9MYAvK0AokxjcshDveGmf7BbgbWCA8Fnb9wjQyNDaOXNvkZu8Z8rgkX91z324/w==} + engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-http@3.635.0': resolution: {integrity: sha512-iJyRgEjOCQlBMXqtwPLIKYc7Bsc6nqjrZybdMDenPDa+kmLg7xh8LxHsu9088e+2/wtLicE34FsJJIfzu3L82g==} engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-http@3.658.1': + resolution: {integrity: sha512-4ubkJjEVCZflxkZnV1JDQv8P2pburxk1LrEp55telfJRzXrnowzBKwuV2ED0QMNC448g2B3VCaffS+Ct7c4IWQ==} + engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-ini@3.645.0': resolution: {integrity: sha512-LlZW0qwUwNlTaAIDCNpLbPsyXvS42pRIwF92fgtCQedmdnpN3XRUC6hcwSYI7Xru3GGKp3RnceOvsdOaRJORsw==} engines: {node: '>=16.0.0'} peerDependencies: '@aws-sdk/client-sts': ^3.645.0 + '@aws-sdk/credential-provider-ini@3.658.1': + resolution: {integrity: sha512-2uwOamQg5ppwfegwen1ddPu5HM3/IBSnaGlaKLFhltkdtZ0jiqTZWUtX2V+4Q+buLnT0hQvLS/frQ+7QUam+0Q==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.658.1 + '@aws-sdk/credential-provider-node@3.645.0': resolution: {integrity: sha512-eGFFuNvLeXjCJf5OCIuSEflxUowmK+bCS+lK4M8ofsYOEGAivdx7C0UPxNjHpvM8wKd8vpMl5phTeS9BWX5jMQ==} engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-node@3.658.1': + resolution: {integrity: sha512-XwxW6N+uPXPYAuyq+GfOEdfL/MZGAlCSfB5gEWtLBFmFbikhmEuqfWtI6CD60OwudCUOh6argd21BsJf8o1SJA==} + engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-process@3.620.1': resolution: {integrity: sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==} engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-process@3.654.0': + resolution: {integrity: sha512-PmQoo8sZ9Q2Ow8OMzK++Z9lI7MsRUG7sNq3E72DVA215dhtTICTDQwGlXH2AAmIp7n+G9LLRds+4wo2ehG4mkg==} + engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-sso@3.645.0': resolution: {integrity: sha512-d6XuChAl5NCsCrUexc6AFb4efPmb9+66iwPylKG+iMTMYgO1ackfy1Q2/f35jdn0jolkPkzKsVyfzsEVoID6ew==} engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-sso@3.658.1': + resolution: {integrity: sha512-YOagVEsZEk9DmgJEBg+4MBXrPcw/tYas0VQ5OVBqC5XHNbi2OBGJqgmjVPesuu393E7W0VQxtJFDS00O1ewQgA==} + engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-web-identity@3.621.0': resolution: {integrity: sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==} engines: {node: '>=16.0.0'} peerDependencies: '@aws-sdk/client-sts': ^3.621.0 + '@aws-sdk/credential-provider-web-identity@3.654.0': + resolution: {integrity: sha512-6a2g9gMtZToqSu+CusjNK5zvbLJahQ9di7buO3iXgbizXpLXU1rnawCpWxwslMpT5fLgMSKDnKDrr6wdEk7jSw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.654.0 + '@aws-sdk/middleware-host-header@3.620.0': resolution: {integrity: sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==} engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-host-header@3.654.0': + resolution: {integrity: sha512-rxGgVHWKp8U2ubMv+t+vlIk7QYUaRCHaVpmUlJv0Wv6Q0KeO9a42T9FxHphjOTlCGQOLcjCreL9CF8Qhtb4mdQ==} + engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-logger@3.609.0': resolution: {integrity: sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==} engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-logger@3.654.0': + resolution: {integrity: sha512-OQYb+nWlmASyXfRb989pwkJ9EVUMP1CrKn2eyTk3usl20JZmKo2Vjis6I0tLUkMSxMhnBJJlQKyWkRpD/u1FVg==} + engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-recursion-detection@3.620.0': resolution: {integrity: sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==} engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-recursion-detection@3.654.0': + resolution: {integrity: sha512-gKSomgltKVmsT8sC6W7CrADZ4GHwX9epk3GcH6QhebVO3LA9LRbkL3TwOPUXakxxOLLUTYdOZLIOtFf7iH00lg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-sdk-sqs@3.658.1': + resolution: {integrity: sha512-tAHVjNS6WxCC/C5PZic4Bvm0sB+8CYoG+dhV+cmIXv7kYxEKyyjXV7n8equxUxmkjXPaGL4HecNViMYtUPaRag==} + engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-user-agent@3.645.0': resolution: {integrity: sha512-NpTAtqWK+49lRuxfz7st9for80r4NriCMK0RfdJSoPFVntjsSQiQ7+2nW2XL05uVY633e9DvCAw8YatX3zd1mw==} engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-user-agent@3.654.0': + resolution: {integrity: sha512-liCcqPAyRsr53cy2tYu4qeH4MMN0eh9g6k56XzI5xd4SghXH5YWh4qOYAlQ8T66ZV4nPMtD8GLtLXGzsH8moFg==} + engines: {node: '>=16.0.0'} + '@aws-sdk/region-config-resolver@3.614.0': resolution: {integrity: sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==} engines: {node: '>=16.0.0'} + '@aws-sdk/region-config-resolver@3.654.0': + resolution: {integrity: sha512-ydGOrXJxj3x0sJhsXyTmvJVLAE0xxuTWFJihTl67RtaO7VRNtd82I3P3bwoMMaDn5WpmV5mPo8fEUDRlBm3fPg==} + engines: {node: '>=16.0.0'} + '@aws-sdk/token-providers@3.614.0': resolution: {integrity: sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==} engines: {node: '>=16.0.0'} peerDependencies: '@aws-sdk/client-sso-oidc': ^3.614.0 + '@aws-sdk/token-providers@3.654.0': + resolution: {integrity: sha512-D8GeJYmvbfWkQDtTB4owmIobSMexZel0fOoetwvgCQ/7L8VPph3Q2bn1TRRIXvH7wdt6DcDxA3tKMHPBkT3GlA==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sso-oidc': ^3.654.0 + '@aws-sdk/types@3.609.0': resolution: {integrity: sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==} engines: {node: '>=16.0.0'} + '@aws-sdk/types@3.654.0': + resolution: {integrity: sha512-VWvbED3SV+10QJIcmU/PKjsKilsTV16d1I7/on4bvD/jo1qGeMXqLDBSen3ks/tuvXZF/mFc7ZW/W2DiLVtO7A==} + engines: {node: '>=16.0.0'} + '@aws-sdk/util-endpoints@3.645.0': resolution: {integrity: sha512-Oe+xaU4ic4PB1k3pb5VTC1/MWES13IlgpaQw01bVHGfwP6Yv6zZOxizRzca2Y3E+AyR+nKD7vXtHRY+w3bi4bg==} engines: {node: '>=16.0.0'} + '@aws-sdk/util-endpoints@3.654.0': + resolution: {integrity: sha512-i902fcBknHs0Irgdpi62+QMvzxE+bczvILXigYrlHL4+PiEnlMVpni5L5W1qCkNZXf8AaMrSBuR1NZAGp6UOUw==} + engines: {node: '>=16.0.0'} + '@aws-sdk/util-locate-window@3.568.0': resolution: {integrity: sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==} engines: {node: '>=16.0.0'} @@ -330,6 +425,9 @@ packages: '@aws-sdk/util-user-agent-browser@3.609.0': resolution: {integrity: sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA==} + '@aws-sdk/util-user-agent-browser@3.654.0': + resolution: {integrity: sha512-ykYAJqvnxLt7wfrqya28wuH3/7NdrwzfiFd7NqEVQf7dXVxL5RPEpD7DxjcyQo3DsHvvdUvGZVaQhozycn1pzA==} + '@aws-sdk/util-user-agent-node@3.614.0': resolution: {integrity: sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA==} engines: {node: '>=16.0.0'} @@ -339,6 +437,15 @@ packages: aws-crt: optional: true + '@aws-sdk/util-user-agent-node@3.654.0': + resolution: {integrity: sha512-a0ojjdBN6pqv6gB4H/QPPSfhs7mFtlVwnmKCM/QrTaFzN0U810PJ1BST3lBx5sa23I5jWHGaoFY+5q65C3clLQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + '@babel/code-frame@7.24.7': resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} @@ -1681,28 +1788,54 @@ packages: resolution: {integrity: sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==} engines: {node: '>=16.0.0'} + '@smithy/abort-controller@3.1.4': + resolution: {integrity: sha512-VupaALAQlXViW3/enTf/f5l5JZYSAxoJL7f0nanhNNKnww6DGCg1oYIuNP78KDugnkwthBO6iEcym16HhWV8RQ==} + engines: {node: '>=16.0.0'} + '@smithy/config-resolver@3.0.5': resolution: {integrity: sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA==} engines: {node: '>=16.0.0'} + '@smithy/config-resolver@3.0.8': + resolution: {integrity: sha512-Tv1obAC18XOd2OnDAjSWmmthzx6Pdeh63FbLin8MlPiuJ2ATpKkq0NcNOJFr0dO+JmZXnwu8FQxKJ3TKJ3Hulw==} + engines: {node: '>=16.0.0'} + '@smithy/core@2.4.0': resolution: {integrity: sha512-cHXq+FneIF/KJbt4q4pjN186+Jf4ZB0ZOqEaZMBhT79srEyGDDBV31NqBRBjazz8ppQ1bJbDJMY9ba5wKFV36w==} engines: {node: '>=16.0.0'} + '@smithy/core@2.4.6': + resolution: {integrity: sha512-6lQQp99hnyuNNIzeTYSzCUXJHwvvFLY7hfdFGSJM95tjRDJGfzWYFRBXPaM9766LiiTsQ561KErtbufzUFSYUg==} + engines: {node: '>=16.0.0'} + '@smithy/credential-provider-imds@3.2.0': resolution: {integrity: sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA==} engines: {node: '>=16.0.0'} + '@smithy/credential-provider-imds@3.2.3': + resolution: {integrity: sha512-VoxMzSzdvkkjMJNE38yQgx4CfnmT+Z+5EUXkg4x7yag93eQkVQgZvN3XBSHC/ylfBbLbAtdu7flTCChX9I+mVg==} + engines: {node: '>=16.0.0'} + '@smithy/fetch-http-handler@3.2.4': resolution: {integrity: sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==} + '@smithy/fetch-http-handler@3.2.8': + resolution: {integrity: sha512-Lqe0B8F5RM7zkw//6avq1SJ8AfaRd3ubFUS1eVp5WszV7p6Ne5hQ4dSuMHDpNRPhgTvj4va9Kd/pcVigHEHRow==} + '@smithy/hash-node@3.0.3': resolution: {integrity: sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw==} engines: {node: '>=16.0.0'} + '@smithy/hash-node@3.0.6': + resolution: {integrity: sha512-c/FHEdKK/7DU2z6ZE91L36ahyXWayR3B+FzELjnYq7wH5YqIseM24V+pWCS9kFn1Ln8OFGTf+pyYPiHZuX0s/Q==} + engines: {node: '>=16.0.0'} + '@smithy/invalid-dependency@3.0.3': resolution: {integrity: sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw==} + '@smithy/invalid-dependency@3.0.6': + resolution: {integrity: sha512-czM7Ioq3s8pIXht7oD+vmgy4Wfb4XavU/k/irO8NdXFFOx7YAlsCCcKOh/lJD1mJSYQqiR7NmpZ9JviryD/7AQ==} + '@smithy/is-array-buffer@2.2.0': resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} engines: {node: '>=14.0.0'} @@ -1711,73 +1844,143 @@ packages: resolution: {integrity: sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==} engines: {node: '>=16.0.0'} + '@smithy/md5-js@3.0.6': + resolution: {integrity: sha512-Ze690T8O3M5SVbb70WormwrKzVf9QQRtIuxtJDgpUQDkmt+PtdYDetBbyCbF9ryupxLw6tgzWKgwffAShhVIXQ==} + '@smithy/middleware-content-length@3.0.5': resolution: {integrity: sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw==} engines: {node: '>=16.0.0'} + '@smithy/middleware-content-length@3.0.8': + resolution: {integrity: sha512-VuyszlSO49WKh3H9/kIO2kf07VUwGV80QRiaDxUfP8P8UKlokz381ETJvwLhwuypBYhLymCYyNhB3fLAGBX2og==} + engines: {node: '>=16.0.0'} + '@smithy/middleware-endpoint@3.1.0': resolution: {integrity: sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==} engines: {node: '>=16.0.0'} + '@smithy/middleware-endpoint@3.1.3': + resolution: {integrity: sha512-KeM/OrK8MVFUsoJsmCN0MZMVPjKKLudn13xpgwIMpGTYpA8QZB2Xq5tJ+RE6iu3A6NhOI4VajDTwBsm8pwwrhg==} + engines: {node: '>=16.0.0'} + '@smithy/middleware-retry@3.0.15': resolution: {integrity: sha512-iTMedvNt1ApdvkaoE8aSDuwaoc+BhvHqttbA/FO4Ty+y/S5hW6Ci/CTScG7vam4RYJWZxdTElc3MEfHRVH6cgQ==} engines: {node: '>=16.0.0'} + '@smithy/middleware-retry@3.0.21': + resolution: {integrity: sha512-/h0fElV95LekVVEJuSw+aI11S1Y3zIUwBc6h9ZbUv43Gl2weXsbQwjLoet6j/Qtb0phfrSxS6pNg6FqgJOWZkA==} + engines: {node: '>=16.0.0'} + '@smithy/middleware-serde@3.0.3': resolution: {integrity: sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==} engines: {node: '>=16.0.0'} + '@smithy/middleware-serde@3.0.6': + resolution: {integrity: sha512-KKTUSl1MzOM0MAjGbudeaVNtIDo+PpekTBkCNwvfZlKndodrnvRo+00USatiyLOc0ujjO9UydMRu3O9dYML7ag==} + engines: {node: '>=16.0.0'} + '@smithy/middleware-stack@3.0.3': resolution: {integrity: sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==} engines: {node: '>=16.0.0'} + '@smithy/middleware-stack@3.0.6': + resolution: {integrity: sha512-2c0eSYhTQ8xQqHMcRxLMpadFbTXg6Zla5l0mwNftFCZMQmuhI7EbAJMx6R5eqfuV3YbJ3QGyS3d5uSmrHV8Khg==} + engines: {node: '>=16.0.0'} + '@smithy/node-config-provider@3.1.4': resolution: {integrity: sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==} engines: {node: '>=16.0.0'} + '@smithy/node-config-provider@3.1.7': + resolution: {integrity: sha512-g3mfnC3Oo8pOI0dYuPXLtdW1WGVb3bR2tkV21GNkm0ZvQjLTtamXAwCWt/FCb0HGvKt3gHHmF1XerG0ICfalOg==} + engines: {node: '>=16.0.0'} + '@smithy/node-http-handler@3.1.4': resolution: {integrity: sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==} engines: {node: '>=16.0.0'} + '@smithy/node-http-handler@3.2.3': + resolution: {integrity: sha512-/gcm5DJ3k1b1zEInzBGAZC8ntJ+jwrz1NcSIu+9dSXd1FfG0G6QgkDI40tt8/WYUbHtLyo8fEqtm2v29koWo/w==} + engines: {node: '>=16.0.0'} + '@smithy/property-provider@3.1.3': resolution: {integrity: sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==} engines: {node: '>=16.0.0'} + '@smithy/property-provider@3.1.6': + resolution: {integrity: sha512-NK3y/T7Q/Bw+Z8vsVs9MYIQ5v7gOX7clyrXcwhhIBQhbPgRl6JDrZbusO9qWDhcEus75Tg+VCxtIRfo3H76fpw==} + engines: {node: '>=16.0.0'} + '@smithy/protocol-http@4.1.0': resolution: {integrity: sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==} engines: {node: '>=16.0.0'} + '@smithy/protocol-http@4.1.3': + resolution: {integrity: sha512-GcbMmOYpH9iRqtC05RbRnc/0FssxSTHlmaNhYBTgSgNCYpdR3Kt88u5GAZTBmouzv+Zlj/VRv92J9ruuDeJuEw==} + engines: {node: '>=16.0.0'} + '@smithy/querystring-builder@3.0.3': resolution: {integrity: sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==} engines: {node: '>=16.0.0'} + '@smithy/querystring-builder@3.0.6': + resolution: {integrity: sha512-sQe08RunoObe+Usujn9+R2zrLuQERi3CWvRO3BvnoWSYUaIrLKuAIeY7cMeDax6xGyfIP3x/yFWbEKSXvOnvVg==} + engines: {node: '>=16.0.0'} + '@smithy/querystring-parser@3.0.3': resolution: {integrity: sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==} engines: {node: '>=16.0.0'} + '@smithy/querystring-parser@3.0.6': + resolution: {integrity: sha512-UJKw4LlEkytzz2Wq+uIdHf6qOtFfee/o7ruH0jF5I6UAuU+19r9QV7nU3P/uI0l6+oElRHmG/5cBBcGJrD7Ozg==} + engines: {node: '>=16.0.0'} + '@smithy/service-error-classification@3.0.3': resolution: {integrity: sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ==} engines: {node: '>=16.0.0'} + '@smithy/service-error-classification@3.0.6': + resolution: {integrity: sha512-53SpchU3+DUZrN7J6sBx9tBiCVGzsib2e4sc512Q7K9fpC5zkJKs6Z9s+qbMxSYrkEkle6hnMtrts7XNkMJJMg==} + engines: {node: '>=16.0.0'} + '@smithy/shared-ini-file-loader@3.1.4': resolution: {integrity: sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==} engines: {node: '>=16.0.0'} + '@smithy/shared-ini-file-loader@3.1.7': + resolution: {integrity: sha512-IA4K2qTJYXkF5OfVN4vsY1hfnUZjaslEE8Fsr/gGFza4TAC2A9NfnZuSY2srQIbt9bwtjHiAayrRVgKse4Q7fA==} + engines: {node: '>=16.0.0'} + '@smithy/signature-v4@4.1.0': resolution: {integrity: sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag==} engines: {node: '>=16.0.0'} + '@smithy/signature-v4@4.1.4': + resolution: {integrity: sha512-72MiK7xYukNsnLJI9NqvUHqTu0ziEsfMsYNlWpiJfuGQnCTFKpckThlEatirvcA/LmT1h7rRO+pJD06PYsPu9Q==} + engines: {node: '>=16.0.0'} + '@smithy/smithy-client@3.2.0': resolution: {integrity: sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==} engines: {node: '>=16.0.0'} + '@smithy/smithy-client@3.3.5': + resolution: {integrity: sha512-7IZi8J3Dr9n3tX+lcpmJ/5tCYIqoXdblFBaPuv0SEKZFRpCxE+TqIWL6I3t7jLlk9TWu3JSvEZAhtjB9yvB+zA==} + engines: {node: '>=16.0.0'} + '@smithy/types@3.3.0': resolution: {integrity: sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==} engines: {node: '>=16.0.0'} + '@smithy/types@3.4.2': + resolution: {integrity: sha512-tHiFcfcVedVBHpmHUEUHOCCih8iZbIAYn9NvPsNzaPm/237I3imdDdZoOC8c87H5HBAVEa06tTgb+OcSWV9g5w==} + engines: {node: '>=16.0.0'} + '@smithy/url-parser@3.0.3': resolution: {integrity: sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==} + '@smithy/url-parser@3.0.6': + resolution: {integrity: sha512-47Op/NU8Opt49KyGpHtVdnmmJMsp2hEwBdyjuFB9M2V5QVOwA7pBhhxKN5z6ztKGrMw76gd8MlbPuzzvaAncuQ==} + '@smithy/util-base64@3.0.0': resolution: {integrity: sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==} engines: {node: '>=16.0.0'} @@ -1805,14 +2008,26 @@ packages: resolution: {integrity: sha512-FZ4Psa3vjp8kOXcd3HJOiDPBCWtiilLl57r0cnNtq/Ga9RSDrM5ERL6xt+tO43+2af6Pn5Yp92x2n5vPuduNfg==} engines: {node: '>= 10.0.0'} + '@smithy/util-defaults-mode-browser@3.0.21': + resolution: {integrity: sha512-M/FhTBk4c/SsB91dD/M4gMGfJO7z/qJaM9+XQQIqBOf4qzZYMExnP7R4VdGwxxH8IKMGW+8F0I4rNtVRrcfPoA==} + engines: {node: '>= 10.0.0'} + '@smithy/util-defaults-mode-node@3.0.15': resolution: {integrity: sha512-KSyAAx2q6d0t6f/S4XB2+3+6aQacm3aLMhs9aLMqn18uYGUepbdssfogW5JQZpc6lXNBnp0tEnR5e9CEKmEd7A==} engines: {node: '>= 10.0.0'} + '@smithy/util-defaults-mode-node@3.0.21': + resolution: {integrity: sha512-NiLinPvF86U3S2Pdx/ycqd4bnY5dmFSPNL5KYRwbNjqQFS09M5Wzqk8BNk61/47xCYz1X/6KeiSk9qgYPTtuDw==} + engines: {node: '>= 10.0.0'} + '@smithy/util-endpoints@2.0.5': resolution: {integrity: sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg==} engines: {node: '>=16.0.0'} + '@smithy/util-endpoints@2.1.2': + resolution: {integrity: sha512-FEISzffb4H8DLzGq1g4MuDpcv6CIG15fXoQzDH9SjpRJv6h7J++1STFWWinilG0tQh9H1v2UKWG19Jjr2B16zQ==} + 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'} @@ -1821,14 +2036,26 @@ packages: resolution: {integrity: sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==} engines: {node: '>=16.0.0'} + '@smithy/util-middleware@3.0.6': + resolution: {integrity: sha512-BxbX4aBhI1O9p87/xM+zWy0GzT3CEVcXFPBRDoHAM+pV0eSW156pR+PSYEz0DQHDMYDsYAflC2bQNz2uaDBUZQ==} + engines: {node: '>=16.0.0'} + '@smithy/util-retry@3.0.3': resolution: {integrity: sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w==} engines: {node: '>=16.0.0'} + '@smithy/util-retry@3.0.6': + resolution: {integrity: sha512-BRZiuF7IwDntAbevqMco67an0Sr9oLQJqqRCsSPZZHYRnehS0LHDAkJk/pSmI7Z8c/1Vet294H7fY2fWUgB+Rg==} + engines: {node: '>=16.0.0'} + '@smithy/util-stream@3.1.3': resolution: {integrity: sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==} engines: {node: '>=16.0.0'} + '@smithy/util-stream@3.1.8': + resolution: {integrity: sha512-hoKOqSmb8FD3WLObuB5hwbM7bNIWgcnvkThokTvVq7J5PKjlLUK5qQQcB9zWLHIoSaIlf3VIv2OxZY2wtQjcRQ==} + engines: {node: '>=16.0.0'} + '@smithy/util-uri-escape@3.0.0': resolution: {integrity: sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==} engines: {node: '>=16.0.0'} @@ -5049,7 +5276,7 @@ snapshots: '@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.609.0 + '@aws-sdk/types': 3.654.0 '@aws-sdk/util-locate-window': 3.568.0 '@smithy/util-utf8': 2.3.0 tslib: 2.7.0 @@ -5057,7 +5284,7 @@ snapshots: '@aws-crypto/sha256-js@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.609.0 + '@aws-sdk/types': 3.654.0 tslib: 2.7.0 '@aws-crypto/supports-web-crypto@5.2.0': @@ -5066,7 +5293,7 @@ snapshots: '@aws-crypto/util@5.2.0': dependencies: - '@aws-sdk/types': 3.609.0 + '@aws-sdk/types': 3.654.0 '@smithy/util-utf8': 2.3.0 tslib: 2.7.0 @@ -5117,6 +5344,54 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/client-sqs@3.658.1': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.658.1(@aws-sdk/client-sts@3.658.1) + '@aws-sdk/client-sts': 3.658.1 + '@aws-sdk/core': 3.658.1 + '@aws-sdk/credential-provider-node': 3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))(@aws-sdk/client-sts@3.658.1) + '@aws-sdk/middleware-host-header': 3.654.0 + '@aws-sdk/middleware-logger': 3.654.0 + '@aws-sdk/middleware-recursion-detection': 3.654.0 + '@aws-sdk/middleware-sdk-sqs': 3.658.1 + '@aws-sdk/middleware-user-agent': 3.654.0 + '@aws-sdk/region-config-resolver': 3.654.0 + '@aws-sdk/types': 3.654.0 + '@aws-sdk/util-endpoints': 3.654.0 + '@aws-sdk/util-user-agent-browser': 3.654.0 + '@aws-sdk/util-user-agent-node': 3.654.0 + '@smithy/config-resolver': 3.0.8 + '@smithy/core': 2.4.6 + '@smithy/fetch-http-handler': 3.2.8 + '@smithy/hash-node': 3.0.6 + '@smithy/invalid-dependency': 3.0.6 + '@smithy/md5-js': 3.0.6 + '@smithy/middleware-content-length': 3.0.8 + '@smithy/middleware-endpoint': 3.1.3 + '@smithy/middleware-retry': 3.0.21 + '@smithy/middleware-serde': 3.0.6 + '@smithy/middleware-stack': 3.0.6 + '@smithy/node-config-provider': 3.1.7 + '@smithy/node-http-handler': 3.2.3 + '@smithy/protocol-http': 4.1.3 + '@smithy/smithy-client': 3.3.5 + '@smithy/types': 3.4.2 + '@smithy/url-parser': 3.0.6 + '@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.21 + '@smithy/util-defaults-mode-node': 3.0.21 + '@smithy/util-endpoints': 2.1.2 + '@smithy/util-middleware': 3.0.6 + '@smithy/util-retry': 3.0.6 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0)': dependencies: '@aws-crypto/sha256-browser': 5.2.0 @@ -5162,6 +5437,51 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1)': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sts': 3.658.1 + '@aws-sdk/core': 3.658.1 + '@aws-sdk/credential-provider-node': 3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))(@aws-sdk/client-sts@3.658.1) + '@aws-sdk/middleware-host-header': 3.654.0 + '@aws-sdk/middleware-logger': 3.654.0 + '@aws-sdk/middleware-recursion-detection': 3.654.0 + '@aws-sdk/middleware-user-agent': 3.654.0 + '@aws-sdk/region-config-resolver': 3.654.0 + '@aws-sdk/types': 3.654.0 + '@aws-sdk/util-endpoints': 3.654.0 + '@aws-sdk/util-user-agent-browser': 3.654.0 + '@aws-sdk/util-user-agent-node': 3.654.0 + '@smithy/config-resolver': 3.0.8 + '@smithy/core': 2.4.6 + '@smithy/fetch-http-handler': 3.2.8 + '@smithy/hash-node': 3.0.6 + '@smithy/invalid-dependency': 3.0.6 + '@smithy/middleware-content-length': 3.0.8 + '@smithy/middleware-endpoint': 3.1.3 + '@smithy/middleware-retry': 3.0.21 + '@smithy/middleware-serde': 3.0.6 + '@smithy/middleware-stack': 3.0.6 + '@smithy/node-config-provider': 3.1.7 + '@smithy/node-http-handler': 3.2.3 + '@smithy/protocol-http': 4.1.3 + '@smithy/smithy-client': 3.3.5 + '@smithy/types': 3.4.2 + '@smithy/url-parser': 3.0.6 + '@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.21 + '@smithy/util-defaults-mode-node': 3.0.21 + '@smithy/util-endpoints': 2.1.2 + '@smithy/util-middleware': 3.0.6 + '@smithy/util-retry': 3.0.6 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/client-sso@3.645.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 @@ -5205,6 +5525,49 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/client-sso@3.658.1': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.658.1 + '@aws-sdk/middleware-host-header': 3.654.0 + '@aws-sdk/middleware-logger': 3.654.0 + '@aws-sdk/middleware-recursion-detection': 3.654.0 + '@aws-sdk/middleware-user-agent': 3.654.0 + '@aws-sdk/region-config-resolver': 3.654.0 + '@aws-sdk/types': 3.654.0 + '@aws-sdk/util-endpoints': 3.654.0 + '@aws-sdk/util-user-agent-browser': 3.654.0 + '@aws-sdk/util-user-agent-node': 3.654.0 + '@smithy/config-resolver': 3.0.8 + '@smithy/core': 2.4.6 + '@smithy/fetch-http-handler': 3.2.8 + '@smithy/hash-node': 3.0.6 + '@smithy/invalid-dependency': 3.0.6 + '@smithy/middleware-content-length': 3.0.8 + '@smithy/middleware-endpoint': 3.1.3 + '@smithy/middleware-retry': 3.0.21 + '@smithy/middleware-serde': 3.0.6 + '@smithy/middleware-stack': 3.0.6 + '@smithy/node-config-provider': 3.1.7 + '@smithy/node-http-handler': 3.2.3 + '@smithy/protocol-http': 4.1.3 + '@smithy/smithy-client': 3.3.5 + '@smithy/types': 3.4.2 + '@smithy/url-parser': 3.0.6 + '@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.21 + '@smithy/util-defaults-mode-node': 3.0.21 + '@smithy/util-endpoints': 2.1.2 + '@smithy/util-middleware': 3.0.6 + '@smithy/util-retry': 3.0.6 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/client-sts@3.645.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 @@ -5250,6 +5613,51 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/client-sts@3.658.1': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.658.1(@aws-sdk/client-sts@3.658.1) + '@aws-sdk/core': 3.658.1 + '@aws-sdk/credential-provider-node': 3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))(@aws-sdk/client-sts@3.658.1) + '@aws-sdk/middleware-host-header': 3.654.0 + '@aws-sdk/middleware-logger': 3.654.0 + '@aws-sdk/middleware-recursion-detection': 3.654.0 + '@aws-sdk/middleware-user-agent': 3.654.0 + '@aws-sdk/region-config-resolver': 3.654.0 + '@aws-sdk/types': 3.654.0 + '@aws-sdk/util-endpoints': 3.654.0 + '@aws-sdk/util-user-agent-browser': 3.654.0 + '@aws-sdk/util-user-agent-node': 3.654.0 + '@smithy/config-resolver': 3.0.8 + '@smithy/core': 2.4.6 + '@smithy/fetch-http-handler': 3.2.8 + '@smithy/hash-node': 3.0.6 + '@smithy/invalid-dependency': 3.0.6 + '@smithy/middleware-content-length': 3.0.8 + '@smithy/middleware-endpoint': 3.1.3 + '@smithy/middleware-retry': 3.0.21 + '@smithy/middleware-serde': 3.0.6 + '@smithy/middleware-stack': 3.0.6 + '@smithy/node-config-provider': 3.1.7 + '@smithy/node-http-handler': 3.2.3 + '@smithy/protocol-http': 4.1.3 + '@smithy/smithy-client': 3.3.5 + '@smithy/types': 3.4.2 + '@smithy/url-parser': 3.0.6 + '@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.21 + '@smithy/util-defaults-mode-node': 3.0.21 + '@smithy/util-endpoints': 2.1.2 + '@smithy/util-middleware': 3.0.6 + '@smithy/util-retry': 3.0.6 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/core@3.635.0': dependencies: '@smithy/core': 2.4.0 @@ -5263,6 +5671,19 @@ snapshots: fast-xml-parser: 4.4.1 tslib: 2.7.0 + '@aws-sdk/core@3.658.1': + dependencies: + '@smithy/core': 2.4.6 + '@smithy/node-config-provider': 3.1.7 + '@smithy/property-provider': 3.1.6 + '@smithy/protocol-http': 4.1.3 + '@smithy/signature-v4': 4.1.4 + '@smithy/smithy-client': 3.3.5 + '@smithy/types': 3.4.2 + '@smithy/util-middleware': 3.0.6 + fast-xml-parser: 4.4.1 + tslib: 2.7.0 + '@aws-sdk/credential-provider-env@3.620.1': dependencies: '@aws-sdk/types': 3.609.0 @@ -5270,6 +5691,13 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.7.0 + '@aws-sdk/credential-provider-env@3.654.0': + dependencies: + '@aws-sdk/types': 3.654.0 + '@smithy/property-provider': 3.1.6 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@aws-sdk/credential-provider-http@3.635.0': dependencies: '@aws-sdk/types': 3.609.0 @@ -5282,6 +5710,18 @@ snapshots: '@smithy/util-stream': 3.1.3 tslib: 2.7.0 + '@aws-sdk/credential-provider-http@3.658.1': + dependencies: + '@aws-sdk/types': 3.654.0 + '@smithy/fetch-http-handler': 3.2.8 + '@smithy/node-http-handler': 3.2.3 + '@smithy/property-provider': 3.1.6 + '@smithy/protocol-http': 4.1.3 + '@smithy/smithy-client': 3.3.5 + '@smithy/types': 3.4.2 + '@smithy/util-stream': 3.1.8 + tslib: 2.7.0 + '@aws-sdk/credential-provider-ini@3.645.0(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0))(@aws-sdk/client-sts@3.645.0)': dependencies: '@aws-sdk/client-sts': 3.645.0 @@ -5300,6 +5740,24 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt + '@aws-sdk/credential-provider-ini@3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))(@aws-sdk/client-sts@3.658.1)': + dependencies: + '@aws-sdk/client-sts': 3.658.1 + '@aws-sdk/credential-provider-env': 3.654.0 + '@aws-sdk/credential-provider-http': 3.658.1 + '@aws-sdk/credential-provider-process': 3.654.0 + '@aws-sdk/credential-provider-sso': 3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1)) + '@aws-sdk/credential-provider-web-identity': 3.654.0(@aws-sdk/client-sts@3.658.1) + '@aws-sdk/types': 3.654.0 + '@smithy/credential-provider-imds': 3.2.3 + '@smithy/property-provider': 3.1.6 + '@smithy/shared-ini-file-loader': 3.1.7 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + '@aws-sdk/credential-provider-node@3.645.0(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0))(@aws-sdk/client-sts@3.645.0)': dependencies: '@aws-sdk/credential-provider-env': 3.620.1 @@ -5319,6 +5777,25 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt + '@aws-sdk/credential-provider-node@3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))(@aws-sdk/client-sts@3.658.1)': + dependencies: + '@aws-sdk/credential-provider-env': 3.654.0 + '@aws-sdk/credential-provider-http': 3.658.1 + '@aws-sdk/credential-provider-ini': 3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))(@aws-sdk/client-sts@3.658.1) + '@aws-sdk/credential-provider-process': 3.654.0 + '@aws-sdk/credential-provider-sso': 3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1)) + '@aws-sdk/credential-provider-web-identity': 3.654.0(@aws-sdk/client-sts@3.658.1) + '@aws-sdk/types': 3.654.0 + '@smithy/credential-provider-imds': 3.2.3 + '@smithy/property-provider': 3.1.6 + '@smithy/shared-ini-file-loader': 3.1.7 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' + - aws-crt + '@aws-sdk/credential-provider-process@3.620.1': dependencies: '@aws-sdk/types': 3.609.0 @@ -5327,6 +5804,14 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.7.0 + '@aws-sdk/credential-provider-process@3.654.0': + dependencies: + '@aws-sdk/types': 3.654.0 + '@smithy/property-provider': 3.1.6 + '@smithy/shared-ini-file-loader': 3.1.7 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@aws-sdk/credential-provider-sso@3.645.0(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0))': dependencies: '@aws-sdk/client-sso': 3.645.0 @@ -5340,6 +5825,19 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt + '@aws-sdk/credential-provider-sso@3.658.1(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))': + dependencies: + '@aws-sdk/client-sso': 3.658.1 + '@aws-sdk/token-providers': 3.654.0(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1)) + '@aws-sdk/types': 3.654.0 + '@smithy/property-provider': 3.1.6 + '@smithy/shared-ini-file-loader': 3.1.7 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + '@aws-sdk/credential-provider-web-identity@3.621.0(@aws-sdk/client-sts@3.645.0)': dependencies: '@aws-sdk/client-sts': 3.645.0 @@ -5348,6 +5846,14 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.7.0 + '@aws-sdk/credential-provider-web-identity@3.654.0(@aws-sdk/client-sts@3.658.1)': + dependencies: + '@aws-sdk/client-sts': 3.658.1 + '@aws-sdk/types': 3.654.0 + '@smithy/property-provider': 3.1.6 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@aws-sdk/middleware-host-header@3.620.0': dependencies: '@aws-sdk/types': 3.609.0 @@ -5355,12 +5861,25 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.7.0 + '@aws-sdk/middleware-host-header@3.654.0': + dependencies: + '@aws-sdk/types': 3.654.0 + '@smithy/protocol-http': 4.1.3 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@aws-sdk/middleware-logger@3.609.0': dependencies: '@aws-sdk/types': 3.609.0 '@smithy/types': 3.3.0 tslib: 2.7.0 + '@aws-sdk/middleware-logger@3.654.0': + dependencies: + '@aws-sdk/types': 3.654.0 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@aws-sdk/middleware-recursion-detection@3.620.0': dependencies: '@aws-sdk/types': 3.609.0 @@ -5368,6 +5887,22 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.7.0 + '@aws-sdk/middleware-recursion-detection@3.654.0': + dependencies: + '@aws-sdk/types': 3.654.0 + '@smithy/protocol-http': 4.1.3 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + + '@aws-sdk/middleware-sdk-sqs@3.658.1': + dependencies: + '@aws-sdk/types': 3.654.0 + '@smithy/smithy-client': 3.3.5 + '@smithy/types': 3.4.2 + '@smithy/util-hex-encoding': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + '@aws-sdk/middleware-user-agent@3.645.0': dependencies: '@aws-sdk/types': 3.609.0 @@ -5376,6 +5911,14 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.7.0 + '@aws-sdk/middleware-user-agent@3.654.0': + dependencies: + '@aws-sdk/types': 3.654.0 + '@aws-sdk/util-endpoints': 3.654.0 + '@smithy/protocol-http': 4.1.3 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@aws-sdk/region-config-resolver@3.614.0': dependencies: '@aws-sdk/types': 3.609.0 @@ -5385,6 +5928,15 @@ snapshots: '@smithy/util-middleware': 3.0.3 tslib: 2.7.0 + '@aws-sdk/region-config-resolver@3.654.0': + dependencies: + '@aws-sdk/types': 3.654.0 + '@smithy/node-config-provider': 3.1.7 + '@smithy/types': 3.4.2 + '@smithy/util-config-provider': 3.0.0 + '@smithy/util-middleware': 3.0.6 + tslib: 2.7.0 + '@aws-sdk/token-providers@3.614.0(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0))': dependencies: '@aws-sdk/client-sso-oidc': 3.645.0(@aws-sdk/client-sts@3.645.0) @@ -5394,11 +5946,25 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.7.0 + '@aws-sdk/token-providers@3.654.0(@aws-sdk/client-sso-oidc@3.658.1(@aws-sdk/client-sts@3.658.1))': + dependencies: + '@aws-sdk/client-sso-oidc': 3.658.1(@aws-sdk/client-sts@3.658.1) + '@aws-sdk/types': 3.654.0 + '@smithy/property-provider': 3.1.6 + '@smithy/shared-ini-file-loader': 3.1.7 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@aws-sdk/types@3.609.0': dependencies: '@smithy/types': 3.3.0 tslib: 2.7.0 + '@aws-sdk/types@3.654.0': + dependencies: + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@aws-sdk/util-endpoints@3.645.0': dependencies: '@aws-sdk/types': 3.609.0 @@ -5406,6 +5972,13 @@ snapshots: '@smithy/util-endpoints': 2.0.5 tslib: 2.7.0 + '@aws-sdk/util-endpoints@3.654.0': + dependencies: + '@aws-sdk/types': 3.654.0 + '@smithy/types': 3.4.2 + '@smithy/util-endpoints': 2.1.2 + tslib: 2.7.0 + '@aws-sdk/util-locate-window@3.568.0': dependencies: tslib: 2.7.0 @@ -5417,6 +5990,13 @@ snapshots: bowser: 2.11.0 tslib: 2.7.0 + '@aws-sdk/util-user-agent-browser@3.654.0': + dependencies: + '@aws-sdk/types': 3.654.0 + '@smithy/types': 3.4.2 + bowser: 2.11.0 + tslib: 2.7.0 + '@aws-sdk/util-user-agent-node@3.614.0': dependencies: '@aws-sdk/types': 3.609.0 @@ -5424,6 +6004,13 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.7.0 + '@aws-sdk/util-user-agent-node@3.654.0': + dependencies: + '@aws-sdk/types': 3.654.0 + '@smithy/node-config-provider': 3.1.7 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@babel/code-frame@7.24.7': dependencies: '@babel/highlight': 7.24.7 @@ -6831,6 +7418,11 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.7.0 + '@smithy/abort-controller@3.1.4': + dependencies: + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@smithy/config-resolver@3.0.5': dependencies: '@smithy/node-config-provider': 3.1.4 @@ -6839,6 +7431,14 @@ snapshots: '@smithy/util-middleware': 3.0.3 tslib: 2.7.0 + '@smithy/config-resolver@3.0.8': + dependencies: + '@smithy/node-config-provider': 3.1.7 + '@smithy/types': 3.4.2 + '@smithy/util-config-provider': 3.0.0 + '@smithy/util-middleware': 3.0.6 + tslib: 2.7.0 + '@smithy/core@2.4.0': dependencies: '@smithy/middleware-endpoint': 3.1.0 @@ -6852,6 +7452,19 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 + '@smithy/core@2.4.6': + dependencies: + '@smithy/middleware-endpoint': 3.1.3 + '@smithy/middleware-retry': 3.0.21 + '@smithy/middleware-serde': 3.0.6 + '@smithy/protocol-http': 4.1.3 + '@smithy/smithy-client': 3.3.5 + '@smithy/types': 3.4.2 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-middleware': 3.0.6 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + '@smithy/credential-provider-imds@3.2.0': dependencies: '@smithy/node-config-provider': 3.1.4 @@ -6860,6 +7473,14 @@ snapshots: '@smithy/url-parser': 3.0.3 tslib: 2.7.0 + '@smithy/credential-provider-imds@3.2.3': + dependencies: + '@smithy/node-config-provider': 3.1.7 + '@smithy/property-provider': 3.1.6 + '@smithy/types': 3.4.2 + '@smithy/url-parser': 3.0.6 + tslib: 2.7.0 + '@smithy/fetch-http-handler@3.2.4': dependencies: '@smithy/protocol-http': 4.1.0 @@ -6868,6 +7489,14 @@ snapshots: '@smithy/util-base64': 3.0.0 tslib: 2.7.0 + '@smithy/fetch-http-handler@3.2.8': + dependencies: + '@smithy/protocol-http': 4.1.3 + '@smithy/querystring-builder': 3.0.6 + '@smithy/types': 3.4.2 + '@smithy/util-base64': 3.0.0 + tslib: 2.7.0 + '@smithy/hash-node@3.0.3': dependencies: '@smithy/types': 3.3.0 @@ -6875,11 +7504,23 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 + '@smithy/hash-node@3.0.6': + dependencies: + '@smithy/types': 3.4.2 + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + '@smithy/invalid-dependency@3.0.3': dependencies: '@smithy/types': 3.3.0 tslib: 2.7.0 + '@smithy/invalid-dependency@3.0.6': + dependencies: + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@smithy/is-array-buffer@2.2.0': dependencies: tslib: 2.7.0 @@ -6888,12 +7529,24 @@ snapshots: dependencies: tslib: 2.7.0 + '@smithy/md5-js@3.0.6': + dependencies: + '@smithy/types': 3.4.2 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + '@smithy/middleware-content-length@3.0.5': dependencies: '@smithy/protocol-http': 4.1.0 '@smithy/types': 3.3.0 tslib: 2.7.0 + '@smithy/middleware-content-length@3.0.8': + dependencies: + '@smithy/protocol-http': 4.1.3 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@smithy/middleware-endpoint@3.1.0': dependencies: '@smithy/middleware-serde': 3.0.3 @@ -6904,6 +7557,16 @@ snapshots: '@smithy/util-middleware': 3.0.3 tslib: 2.7.0 + '@smithy/middleware-endpoint@3.1.3': + dependencies: + '@smithy/middleware-serde': 3.0.6 + '@smithy/node-config-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.7 + '@smithy/types': 3.4.2 + '@smithy/url-parser': 3.0.6 + '@smithy/util-middleware': 3.0.6 + tslib: 2.7.0 + '@smithy/middleware-retry@3.0.15': dependencies: '@smithy/node-config-provider': 3.1.4 @@ -6916,16 +7579,38 @@ snapshots: tslib: 2.7.0 uuid: 9.0.1 + '@smithy/middleware-retry@3.0.21': + dependencies: + '@smithy/node-config-provider': 3.1.7 + '@smithy/protocol-http': 4.1.3 + '@smithy/service-error-classification': 3.0.6 + '@smithy/smithy-client': 3.3.5 + '@smithy/types': 3.4.2 + '@smithy/util-middleware': 3.0.6 + '@smithy/util-retry': 3.0.6 + tslib: 2.7.0 + uuid: 9.0.1 + '@smithy/middleware-serde@3.0.3': dependencies: '@smithy/types': 3.3.0 tslib: 2.7.0 + '@smithy/middleware-serde@3.0.6': + dependencies: + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@smithy/middleware-stack@3.0.3': dependencies: '@smithy/types': 3.3.0 tslib: 2.7.0 + '@smithy/middleware-stack@3.0.6': + dependencies: + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@smithy/node-config-provider@3.1.4': dependencies: '@smithy/property-provider': 3.1.3 @@ -6933,6 +7618,13 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.7.0 + '@smithy/node-config-provider@3.1.7': + dependencies: + '@smithy/property-provider': 3.1.6 + '@smithy/shared-ini-file-loader': 3.1.7 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@smithy/node-http-handler@3.1.4': dependencies: '@smithy/abort-controller': 3.1.1 @@ -6941,36 +7633,74 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.7.0 + '@smithy/node-http-handler@3.2.3': + dependencies: + '@smithy/abort-controller': 3.1.4 + '@smithy/protocol-http': 4.1.3 + '@smithy/querystring-builder': 3.0.6 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@smithy/property-provider@3.1.3': dependencies: '@smithy/types': 3.3.0 tslib: 2.7.0 + '@smithy/property-provider@3.1.6': + dependencies: + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@smithy/protocol-http@4.1.0': dependencies: '@smithy/types': 3.3.0 tslib: 2.7.0 + '@smithy/protocol-http@4.1.3': + dependencies: + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@smithy/querystring-builder@3.0.3': dependencies: '@smithy/types': 3.3.0 '@smithy/util-uri-escape': 3.0.0 tslib: 2.7.0 + '@smithy/querystring-builder@3.0.6': + dependencies: + '@smithy/types': 3.4.2 + '@smithy/util-uri-escape': 3.0.0 + tslib: 2.7.0 + '@smithy/querystring-parser@3.0.3': dependencies: '@smithy/types': 3.3.0 tslib: 2.7.0 + '@smithy/querystring-parser@3.0.6': + dependencies: + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@smithy/service-error-classification@3.0.3': dependencies: '@smithy/types': 3.3.0 + '@smithy/service-error-classification@3.0.6': + dependencies: + '@smithy/types': 3.4.2 + '@smithy/shared-ini-file-loader@3.1.4': dependencies: '@smithy/types': 3.3.0 tslib: 2.7.0 + '@smithy/shared-ini-file-loader@3.1.7': + dependencies: + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@smithy/signature-v4@4.1.0': dependencies: '@smithy/is-array-buffer': 3.0.0 @@ -6982,6 +7712,17 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 + '@smithy/signature-v4@4.1.4': + dependencies: + '@smithy/is-array-buffer': 3.0.0 + '@smithy/protocol-http': 4.1.3 + '@smithy/types': 3.4.2 + '@smithy/util-hex-encoding': 3.0.0 + '@smithy/util-middleware': 3.0.6 + '@smithy/util-uri-escape': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.7.0 + '@smithy/smithy-client@3.2.0': dependencies: '@smithy/middleware-endpoint': 3.1.0 @@ -6991,16 +7732,35 @@ snapshots: '@smithy/util-stream': 3.1.3 tslib: 2.7.0 + '@smithy/smithy-client@3.3.5': + dependencies: + '@smithy/middleware-endpoint': 3.1.3 + '@smithy/middleware-stack': 3.0.6 + '@smithy/protocol-http': 4.1.3 + '@smithy/types': 3.4.2 + '@smithy/util-stream': 3.1.8 + tslib: 2.7.0 + '@smithy/types@3.3.0': dependencies: tslib: 2.7.0 + '@smithy/types@3.4.2': + dependencies: + tslib: 2.7.0 + '@smithy/url-parser@3.0.3': dependencies: '@smithy/querystring-parser': 3.0.3 '@smithy/types': 3.3.0 tslib: 2.7.0 + '@smithy/url-parser@3.0.6': + dependencies: + '@smithy/querystring-parser': 3.0.6 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@smithy/util-base64@3.0.0': dependencies: '@smithy/util-buffer-from': 3.0.0 @@ -7037,6 +7797,14 @@ snapshots: bowser: 2.11.0 tslib: 2.7.0 + '@smithy/util-defaults-mode-browser@3.0.21': + dependencies: + '@smithy/property-provider': 3.1.6 + '@smithy/smithy-client': 3.3.5 + '@smithy/types': 3.4.2 + bowser: 2.11.0 + tslib: 2.7.0 + '@smithy/util-defaults-mode-node@3.0.15': dependencies: '@smithy/config-resolver': 3.0.5 @@ -7047,12 +7815,28 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.7.0 + '@smithy/util-defaults-mode-node@3.0.21': + dependencies: + '@smithy/config-resolver': 3.0.8 + '@smithy/credential-provider-imds': 3.2.3 + '@smithy/node-config-provider': 3.1.7 + '@smithy/property-provider': 3.1.6 + '@smithy/smithy-client': 3.3.5 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@smithy/util-endpoints@2.0.5': dependencies: '@smithy/node-config-provider': 3.1.4 '@smithy/types': 3.3.0 tslib: 2.7.0 + '@smithy/util-endpoints@2.1.2': + dependencies: + '@smithy/node-config-provider': 3.1.7 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@smithy/util-hex-encoding@3.0.0': dependencies: tslib: 2.7.0 @@ -7062,12 +7846,23 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.7.0 + '@smithy/util-middleware@3.0.6': + dependencies: + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@smithy/util-retry@3.0.3': dependencies: '@smithy/service-error-classification': 3.0.3 '@smithy/types': 3.3.0 tslib: 2.7.0 + '@smithy/util-retry@3.0.6': + dependencies: + '@smithy/service-error-classification': 3.0.6 + '@smithy/types': 3.4.2 + tslib: 2.7.0 + '@smithy/util-stream@3.1.3': dependencies: '@smithy/fetch-http-handler': 3.2.4 @@ -7079,6 +7874,17 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.7.0 + '@smithy/util-stream@3.1.8': + dependencies: + '@smithy/fetch-http-handler': 3.2.8 + '@smithy/node-http-handler': 3.2.3 + '@smithy/types': 3.4.2 + '@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 diff --git a/src/api/rest/saleor/webhooks.ts b/src/api/rest/saleor/webhooks.ts index a581c5d..4afd975 100644 --- a/src/api/rest/saleor/webhooks.ts +++ b/src/api/rest/saleor/webhooks.ts @@ -1,11 +1,16 @@ +import { ReceiveMessageCommand, SendMessageCommand } from "@aws-sdk/client-sqs"; +import { type FastifyRequest } from "fastify"; import type { FastifyPluginAsync } from "fastify/types/plugin"; import rawBody from "fastify-raw-body"; +import type { ZodTypeProvider } from "fastify-type-provider-zod"; +import { CONFIG } from "@/config"; import { OrderCreatedSubscriptionDocument, OrderUpdatedSubscriptionDocument, } from "@/graphql/operations/subscriptions/generated"; import { type WebhookEventTypeAsyncEnum } from "@/graphql/schema"; +import { getJSONFormatHeader } from "@/lib/saleor/apps/utils"; import { verifyWebhookSignature } from "@/lib/saleor/auth"; import { saleorWebhookHeaders } from "@/lib/saleor/schema"; import { getJWKSProvider } from "@/providers/jwks"; @@ -27,31 +32,76 @@ export const EVENT_HANDLERS: { }, ]; +export const serializePayload = ({ + data, + event, +}: { + data: FastifyRequest["body"]; + event: Lowercase; +}) => ({ + format: getJSONFormatHeader({ name: CONFIG.NAME }), + payload: { + event, + data, + }, +}); + export const webhooks: FastifyPluginAsync = async (fastify) => { await fastify.register(rawBody); - fastify.addHook("preHandler", async (request) => { - const parsedHeaders = saleorWebhookHeaders.parse(request.headers, { - path: ["headers"], - }); - - await verifyWebhookSignature({ - forceRefresh: true, - issuer: parsedHeaders["saleor-api-url"], - jwksProvider: getJWKSProvider(), - jws: parsedHeaders["saleor-signature"], - payload: request.rawBody, - }); - }); - EVENT_HANDLERS.forEach(({ name }) => { - fastify.post( + fastify.withTypeProvider().post( `/email/${name}`, { name: `saleor:webhooks:email:${name}`, + schema: { + headers: saleorWebhookHeaders, + }, }, async (request, reply) => { - // TODO: Push to SQS + await verifyWebhookSignature({ + forceRefresh: true, + issuer: request.headers["saleor-api-url"], + jwksProvider: getJWKSProvider(), + jws: request.headers["saleor-signature"], + payload: request.rawBody, + }); + + fastify.log.info( + `Received webhook for '${request.headers["saleor-event"]}'.` + ); + + const payload = serializePayload({ + data: request.body, + event: request.headers["saleor-event"], + }); + const command = new SendMessageCommand({ + QueueUrl: CONFIG.SQS_QUEUE_URL, + MessageBody: JSON.stringify(payload), + }); + + await fastify.sqs.send(command); + + /** + * FIXME: Remove when proxy setup is ready. + * Temporary solution to mimic proxy behavior. + */ + const { Messages } = await fastify.sqs.send( + new ReceiveMessageCommand({ QueueUrl: CONFIG.SQS_QUEUE_URL }) + ); + await fetch(`http://0.0.0.0:${CONFIG.PROXY_PORT}`, { + method: "POST", + body: JSON.stringify({ + format: "application/vnd.mirumee.nimara.event_proxy.v1+json", + event: { + Records: Messages, + }, + }), + headers: { + "Content-Type": "application/json", + }, + }); + return reply.status(200).send({ status: "ok" }); } ); diff --git a/src/lib/plugins/awsSQSPlugin/client.ts b/src/lib/plugins/awsSQSPlugin/client.ts new file mode 100644 index 0000000..7cd80e1 --- /dev/null +++ b/src/lib/plugins/awsSQSPlugin/client.ts @@ -0,0 +1,6 @@ +import { SQSClient } from "@aws-sdk/client-sqs"; + +/** + * Envs are injected automatically by @aws-sdk - no need to pass them explicitly. + */ +export const sqsClient = new SQSClient(); diff --git a/src/lib/plugins/awsSQSPlugin/config.ts b/src/lib/plugins/awsSQSPlugin/config.ts new file mode 100644 index 0000000..4eaebc8 --- /dev/null +++ b/src/lib/plugins/awsSQSPlugin/config.ts @@ -0,0 +1,15 @@ +import { z } from "zod"; + +import { prepareConfig } from "@/lib/zod/util"; + +export const configSchema = z.object({ + AWS_ACCESS_KEY_ID: z.string(), + AWS_REGION: z.string(), + AWS_SECRET_ACCESS_KEY: z.string(), + SECRET_MANAGER_APP_CONFIG_PATH: z.string(), +}); + +export const PLUGIN_CONFIG = prepareConfig({ + name: "awsSQSPlugin", + schema: configSchema, +}); diff --git a/src/lib/plugins/awsSQSPlugin/index.ts b/src/lib/plugins/awsSQSPlugin/index.ts new file mode 100644 index 0000000..3b87858 --- /dev/null +++ b/src/lib/plugins/awsSQSPlugin/index.ts @@ -0,0 +1 @@ +export { default } from "./plugin"; diff --git a/src/lib/plugins/awsSQSPlugin/plugin.ts b/src/lib/plugins/awsSQSPlugin/plugin.ts new file mode 100644 index 0000000..009a4ea --- /dev/null +++ b/src/lib/plugins/awsSQSPlugin/plugin.ts @@ -0,0 +1,14 @@ +import "./config"; + +import type { FastifyPluginCallback } from "fastify"; +import fastifyPlugin from "fastify-plugin"; + +import { sqsClient } from "./client"; + +const index: FastifyPluginCallback = (fastify, {}, next) => { + fastify.decorate("sqs", sqsClient); + + next(); +}; + +export default fastifyPlugin(index, { name: "awsSQSPlugin" }); diff --git a/src/lib/plugins/awsSQSPlugin/types.d.ts b/src/lib/plugins/awsSQSPlugin/types.d.ts new file mode 100644 index 0000000..48a3025 --- /dev/null +++ b/src/lib/plugins/awsSQSPlugin/types.d.ts @@ -0,0 +1,8 @@ +import { type FastifyInstance } from "fastify"; +import { SQSClient } from "@aws-sdk/client-sqs"; + +declare module "fastify" { + interface FastifyInstance { + sqs: SQSClient; + } +} diff --git a/src/lib/saleor/schema.ts b/src/lib/saleor/schema.ts index 89a7d67..1aefafd 100644 --- a/src/lib/saleor/schema.ts +++ b/src/lib/saleor/schema.ts @@ -1,5 +1,7 @@ import { z } from "zod"; +import { type WebhookEventTypeAsyncEnum } from "@/graphql/schema"; + /** * Headers must be in lowercase, otherwise it will not be lookup by zod type provider. */ @@ -10,12 +12,15 @@ export const saleorHeaders = z.object({ export type SaleorHeaders = z.infer; -export const saleorWebhookHeaders = z - .object({ - "saleor-signature": z.string(), +export const saleorWebhookHeaders = ( + z.object({ "saleor-event": z.string(), - }) - .merge(saleorHeaders); + }) as unknown as z.ZodObject<{ + "saleor-event": z.ZodLiteral>; + }> +) + .and(z.object({ "saleor-signature": z.string() })) + .and(saleorHeaders); export type SaleorWebhookHeaders = z.infer; diff --git a/src/server.ts b/src/server.ts index 77c2e27..4fc2252 100644 --- a/src/server.ts +++ b/src/server.ts @@ -10,6 +10,7 @@ import { restRoutes } from "@/api/rest/routes"; import { CONFIG } from "@/config"; import { errorHandler } from "@/lib/api/errorHandler"; import AWSSecretManagerPlugin from "@/lib/plugins/awsSecretManagerPlugin"; +import AWSSQSPlugin from "@/lib/plugins/awsSQSPlugin"; import { type FastifyPlugin } from "@/lib/plugins/types"; import UrlForPlugin from "@/lib/plugins/urlForPlugin"; import UrlPlugin from "@/lib/plugins/urlPlugin"; @@ -39,8 +40,9 @@ export async function createServer() { for (const [plugin, opts] of [ [UrlPlugin], [UrlForPlugin], - [AWSSecretManagerPlugin], [WinstonLoggingPlugin], + [AWSSecretManagerPlugin], + [AWSSQSPlugin], ]) { // @ts-ignore const pluginName = plugin?.[Symbol.for("plugin-meta")]?.name ?? plugin.name;