From 8f2e61c1b9b247e83b55943ecc48a71bdc85f776 Mon Sep 17 00:00:00 2001 From: martzcodes <978362+martzcodes@users.noreply.github.com> Date: Fri, 3 Feb 2023 00:27:34 -0500 Subject: [PATCH 01/13] ported everything except the state machine... --- README.md | 200 +- bin/blog-crossposting-automation.ts | 20 + cdk.json | 44 + functions/identify-new-content.ts | 134 + functions/identify-new-content/index.js | 122 - .../identify-new-content/package-lock.json | 3189 ----- functions/identify-new-content/package.json | 15 - .../index.js => load-cross-posts.ts} | 10 +- functions/load-cross-posts/package-lock.json | 2125 --- functions/load-cross-posts/package.json | 15 - .../{parse-post/index.js => parse-post.ts} | 14 +- functions/parse-post/package-lock.json | 255 - functions/parse-post/package.json | 14 - .../index.js => send-api-request.ts} | 12 +- functions/send-api-request/package-lock.json | 187 - functions/send-api-request/package.json | 14 - functions/send-email-sendgrid.ts | 34 + functions/send-email-sendgrid/index.js | 40 - functions/send-email-sendgrid/package.json | 14 - functions/utils/secrets.ts | 17 + jest.config.js | 8 + layers/index.js | 16 - layers/package-lock.json | 3814 ------ layers/package.json | 24 - lib/blog-crossposting-automation-stack.ts | 115 + lib/dyanmo.ts | 29 + package-lock.json | 11325 ++++++++++++++++ package.json | 41 + test/blog-crossposting-automation.test.ts | 17 + tsconfig.json | 30 + 30 files changed, 11842 insertions(+), 10052 deletions(-) create mode 100644 bin/blog-crossposting-automation.ts create mode 100644 cdk.json create mode 100644 functions/identify-new-content.ts delete mode 100644 functions/identify-new-content/index.js delete mode 100644 functions/identify-new-content/package-lock.json delete mode 100644 functions/identify-new-content/package.json rename functions/{load-cross-posts/index.js => load-cross-posts.ts} (74%) delete mode 100644 functions/load-cross-posts/package-lock.json delete mode 100644 functions/load-cross-posts/package.json rename functions/{parse-post/index.js => parse-post.ts} (84%) delete mode 100644 functions/parse-post/package-lock.json delete mode 100644 functions/parse-post/package.json rename functions/{send-api-request/index.js => send-api-request.ts} (61%) delete mode 100644 functions/send-api-request/package-lock.json delete mode 100644 functions/send-api-request/package.json create mode 100644 functions/send-email-sendgrid.ts delete mode 100644 functions/send-email-sendgrid/index.js delete mode 100644 functions/send-email-sendgrid/package.json create mode 100644 functions/utils/secrets.ts create mode 100644 jest.config.js delete mode 100644 layers/index.js delete mode 100644 layers/package-lock.json delete mode 100644 layers/package.json create mode 100644 lib/blog-crossposting-automation-stack.ts create mode 100644 lib/dyanmo.ts create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 test/blog-crossposting-automation.test.ts create mode 100644 tsconfig.json diff --git a/README.md b/README.md index 9d72532..320efc0 100644 --- a/README.md +++ b/README.md @@ -1,194 +1,14 @@ -# Blog Crossposting Automation +# Welcome to your CDK TypeScript project -Are you a blog writer? Hate cross-posting your content across the web? You're in luck! +This is a blank project for CDK development with TypeScript. -This solution will hook into your blog creation process and automatically cross-post your content for you to Medium, Dev.to, and Hashnode! +The `cdk.json` file tells the CDK Toolkit how to execute your app. -Deploy into your AWS account and type away! +## Useful commands -For a full summary of this solution [please refer to this blog post](https://www.readysetcloud.io/blog/allen.helton/how-i-built-a-serverless-automation-to-cross-post-my-blogs/) by [Allen Helton](https://twitter.com/allenheltondev). - -## Prerequisites - -For cross-posts to work successfully, there are a few prereqs that must be met in your setup. - -* Your blog post must be written in [markdown](https://en.wikipedia.org/wiki/Markdown). -* Content is checked into a repository in GitHub -* You have an application in [AWS Amplify](https://aws.amazon.com/amplify/) that has a runnable CI pipeline -* Blog posts have front matter in the format outlined in the [Blog Metadata](#blog-metadata) section - -*Note - it is highly recommended you host your blog on your own site. This guarantees you own your content and prevents accidental loss if your favorite platform goes down or has an incident. It also enables [easy canonification](https://support.google.com/webmasters/answer/10347851) of your content when it is cross posted so it ranks higher in search engine results. For a step by step guide on hosting your own blog for free, please [reference this post](https://www.readysetcloud.io/blog/allen.helton/how-to-build-your-blog-with-aws-and-hugo/).* - -## How It Works - -![](/docs/workflow.png) - -The cross posting process is outlined below. - -1. Completed blog post written in markdown is committed to main branch -2. AWS Amplify CI pipeline picks up changes and runs build -3. On success, Amplify publishes a `Amplify Deployment Status Change` event to EventBridge, triggering a Lambda function deployed in this stack -4. The function uses your GitHub PAT to identify and load the blog post content and pass it into a Step Function workflow -5. The workflow will do an idempotency check, and if it's ok to continue will transform and publish to Medium, Hashnode, and Dev.to in parallel -6. After publish is complete, the workflow checks if there were any failures. - * If there was a failure, it sends an email with a link to the execution for debugging - * On success, it sends an email with links to the published content and updates the idempotency record and article catalog - -*Note - If you do not provide a SendGrid API key, you will not receive email status updates* - -## Platforms - -This solution will take content you create and automatically cross-post it on three platforms: - -* [Medium](https://medium.com) - *[generate API Key](https://help.medium.com/hc/en-us/articles/213480228-Get-an-integration-token-for-your-writing-app)* -* [Dev.to](https://dev.to) - *[generate API Key](https://dev.to/settings/extensions)* -* [Hashnode](https://hashnode.com) - *[generate API Key](https://hashnode.com/settings/developer)* - -You are required to have an account on all three platforms and must generate an API key for each of them. - -Optionally, you can publish straight to publications on each of the platforms. If there is a specific organization on Dev.to or publication on Medium or Hashnode you typically write for, you can fill out `DevOrganizationId`, `MediumPublicationId`, and `HashnodePublicationId` deployment variables respectively. For example, you could automatically submit your story to the [AWS Community Builders](https://dev.to/aws-builders) organization on dev.to instead of under your name. - -## Deployment - -The solution is built using AWS SAM. To deploy the resources into the cloud you must install the [SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html). - -Once installed, run the following commands in the root folder of the solution. - -```bash -sam build --parallel -sam deploy --guided -``` - -This will walk you through deployment, prompting you for all the parameters necessary for proper use. Below are the parameters you must fill out on deploy. - -|Parameter|Description|Required| -|---------|-----------|--------| -|TableName|Name of the DynamoDB table to create|No| -|GSI1|Name of the GSI on the DDB table|No| -|GitHubPAT|Personal Access Token to load newsletter content from your repository|Yes| -|GitHubOwner|The GitHub user name that owns the repository for your content|Yes| -|GitHubRepo|The repository name that contains your content|Yes| -|AmplifyProjectId|Identifier of the Amplify project that builds your newsletter|Yes| -|MediumApiKey|API key used to manipulate data in your Medium account|Yes| -|MediumPublicationId|Identifier of the publication you wish to submit to on Medium|No| -|MediumAuthorId|Identifier of your user on Medium|Yes if `MediumPublicationId` is not provided| -|DevApiKey|API key used to manipulate data in your Dev.to account|Yes| -|DevOrganizationId|Identifier of the organization you wish to submit to on Dev.to|No| -|HashnodeApiKey|API key used to manipulate data in your Hashnode account|Yes| -|HashnodePublicationId|Identifier for your blog publication on Hashnode|Yes| -|HashnodeBlogUrl|Base url of your blog hosted in Hashnode|Yes| -|BlogBaseUrl|Vase url of your blog on your personal site|Yes| -|BlogContentPath|Relative path from the root directory to the blog content folder in your GitHub repo|Yes| -|SendgridApiKey|Api Key of the SendGrid account that will send the status report when cross-posting is complete|No| -|NotificationEmail|Email address to notify when cross posting is complete|No| -|SendgridFromEmail|Email address for SendGrid that sends you the status email|No| - -## Notification Emails - -If you wish to get notification emails on the status of the cross posting, you must use [SendGrid](https://sendgrid.com). SendGrid offers a generous free tier for email messages and is quick to get started. To configure SendGrid to send you emails you must: - -* [Create an API key](https://docs.sendgrid.com/ui/account-and-settings/api-keys) -* [Create a sender](https://docs.sendgrid.com/ui/sending-email/senders) - -Once you perform the above actions, you may use the values in the respective deployment variables listed above. - -## Replay / Idempotency - -In the event the cross-posting does not work, it can be safely retried without worrying about pushing your content multiple times. Each post will update the idempotency DynamoDB record for the cross-posting state machine. This record holds the status (*success/failure*) for each platform. If the article was successfully posted on a platform, it will be skipped on subsequent executions. - -## Blog Metadata - -Your blog must be written in Markdown for this solution to work appropriately. To save metadata about your post, you can add [front matter](https://gohugo.io/content-management/front-matter/) at the beginning of the file. This solution requires a specific set of metadata in order to function appropriately. - -**Example** -```yaml ---- -title: My first blog! -description: This is the subtitle that is used for SEO and visible in Medium and Hashnode posts. -image: https://link-to-hero-image.png -image_attribution: Any attribution required for hero image -categories: - - categoryOne -tags: - - serverless - - other tag -slug: /my-first-blog ---- -``` - -|Field|Description|Required?| -|-----|-----------|---------| -|title|Title of the blog issue |Yes| -|description| Brief summary of article. This shows up on Hashnode and Medium and is used in SEO previews|Yes| -|image|Link to the hero image for your article|Yes| -|image_attribution|Any attribution text needed for your hero image|No| -|categories|Array of categories. This will be used as tags for Dev and Medium|No| -|tags|Array of tags. Also used as tags for Dev and Medium|No| -|slug|Relative url of your post. Used in the article catalog|Yes| - -## Article Catalog - -One of the neat features provided by this solution is substituting relative urls for the appropriate urls on a given page. For example, if you use a relative url to link to another blog post you've written on your site, this solution will replace that with the cross-posted version. So Medium articles will always point to Medium articles, Hashnode articles will always point to Hashnode, etc... - -This is managed for you by the solution. It creates entries for your content in DynamoDB with the following format: - -```json -{ - "pk": "
", - "sk": "article", - "GSI1PK": "article", - "GSI1SK": "", - "links": { - "url": "<article slug>", - "devUrl": "<full path to article on dev.to>", - "mediumUrl": "<full path to article on Medium>", - "hashnodeUrl": "<full path to article on Hashnode>" - } -} -``` - -When transforming your Markdown content, it will load all articles from DynamoDB, use a Regex to match on the article slug in your content, and replace with the url of appropriate site. - -If you already have a number of articles and wish to seed the database with the cross references, you will have to compile the data manually and put it in the following format: - -```json -[ - { - "title": "<title of article>", - "devUrl": "<url of article on dev.to>", - "url": "<relative url of article on your blog>", - "mediumUrl": "<url of article on medium>", - "hashnodeUrl": "<url of article on hashnode>" - } -] -``` - -Take this data and update the [load-cross-posts](/functions/load-cross-posts/index.js) function to load and handle that data. Run the function manually to seed the data in your database table. - -## Embeds - -If you are embedding content in your posts, they might not work out of the box. *There is only support for Hugo twitter embeds.* The format of a Hugo Twitter embed is: - -``` -{{<tweet user="" id="">}} -``` - -If you include this in your content, it will be automatically transformed to the appropriate embed style on the appropriate platform. - -## Limitations - -Below are a list of known limitations: - -* Your content must be written in Markdown with front matter describing the blog post. -* Content must be hosted in GitHub. -* You are required to post to Dev.to, Medium, and Hashnode. You cannot pick and choose which platforms you want to use. -* Only Hugo style Twitter embeds are supported. Embeds for other content will not work. -* This process is triggered on a successful build of an AWS Amplify project. Other triggers are not supported (but can easily be modified to add them). -* Notifications are limited to sending emails in SendGrid. -* The only way to deploy the solution is with AWS SAM. - -## Contributions - -Please feel free to contribute to this project! Bonus points if you can meaningfully address any of the limitations listed above :) - -This is an AWS Community Builders project and is meant to help the community. If you see fit, please donate some time into making it better! +* `npm run build` compile typescript to js +* `npm run watch` watch for changes and compile +* `npm run test` perform the jest unit tests +* `cdk deploy` deploy this stack to your default AWS account/region +* `cdk diff` compare deployed stack with current state +* `cdk synth` emits the synthesized CloudFormation template diff --git a/bin/blog-crossposting-automation.ts b/bin/blog-crossposting-automation.ts new file mode 100644 index 0000000..5317289 --- /dev/null +++ b/bin/blog-crossposting-automation.ts @@ -0,0 +1,20 @@ +#!/usr/bin/env node +import 'source-map-support/register'; +import { BlogCrosspostingAutomationStack } from '../lib/blog-crossposting-automation-stack'; +import { App } from 'aws-cdk-lib'; + +const app = new App(); +new BlogCrosspostingAutomationStack(app, 'BlogCrosspostingAutomationStack', { + githubOwner: '', + githubRepo: '', + amplifyProjectId: '', + mediumPublicationId: '', + mediumAuthorId: '', + devOrganizationId: '', + hashnodePublicationId: '', + hashnodeBlogUrl: '', + blogBaseUrl: '', + blogContentPath: '', + notificationEmail: '', + sendgridFromEmail: '', +}); \ No newline at end of file diff --git a/cdk.json b/cdk.json new file mode 100644 index 0000000..3fdb4cd --- /dev/null +++ b/cdk.json @@ -0,0 +1,44 @@ +{ + "app": "npx ts-node --prefer-ts-exts bin/blog-crossposting-automation.ts", + "watch": { + "include": [ + "**" + ], + "exclude": [ + "README.md", + "cdk*.json", + "**/*.d.ts", + "**/*.js", + "tsconfig.json", + "package*.json", + "yarn.lock", + "node_modules", + "test" + ] + }, + "context": { + "@aws-cdk/aws-lambda:recognizeLayerVersion": true, + "@aws-cdk/core:checkSecretUsage": true, + "@aws-cdk/core:target-partitions": [ + "aws", + "aws-cn" + ], + "@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true, + "@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true, + "@aws-cdk/aws-ecs:arnFormatIncludesClusterName": true, + "@aws-cdk/aws-iam:minimizePolicies": true, + "@aws-cdk/core:validateSnapshotRemovalPolicy": true, + "@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName": true, + "@aws-cdk/aws-s3:createDefaultLoggingPolicy": true, + "@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption": true, + "@aws-cdk/aws-apigateway:disableCloudWatchRole": true, + "@aws-cdk/core:enablePartitionLiterals": true, + "@aws-cdk/aws-events:eventsTargetQueueSameAccount": true, + "@aws-cdk/aws-iam:standardizedServicePrincipals": true, + "@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker": true, + "@aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName": true, + "@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy": true, + "@aws-cdk/aws-route53-patters:useCertificate": true, + "@aws-cdk/customresources:installLatestAwsSdkDefault": false + } +} diff --git a/functions/identify-new-content.ts b/functions/identify-new-content.ts new file mode 100644 index 0000000..491d697 --- /dev/null +++ b/functions/identify-new-content.ts @@ -0,0 +1,134 @@ +import { Octokit } from "octokit"; +import { + EventBridgeClient, + PutEventsCommand, +} from "@aws-sdk/client-eventbridge"; +import { getSecret } from "./utils/secrets"; + +const eb = new EventBridgeClient({}); + +let octokit: Octokit; + +export const handler = async () => { + try { + await initializeOctokit(); + + const recentCommits = await getRecentCommits(); + if (recentCommits.length) { + const newContent = await getNewContent(recentCommits); + if (newContent.length) { + const data = await getContentData(newContent); + await processNewContent(data); + } + } + } catch (err) { + console.error(err); + } +}; + +const initializeOctokit = async () => { + if (!octokit) { + const gitHubSecret = await getSecret("github"); + octokit = new Octokit({ auth: gitHubSecret }); + } +}; + +const getRecentCommits = async () => { + const timeTolerance = Number(process.env.COMMIT_TIME_TOLERANCE_MINUTES); + const date = new Date(); + date.setMinutes(date.getMinutes() - timeTolerance); + + const result = await octokit.rest.repos.listCommits({ + owner: `${process.env.OWNER}`, + repo: `${process.env.REPO}`, + path: process.env.PATH, + since: date.toISOString(), + }); + + const newPostCommits = result.data.filter((c) => + c.commit.message + .toLowerCase() + .startsWith(`${process.env.NEW_CONTENT_INDICATOR}`) + ); + return newPostCommits.map((d) => d.sha); +}; + +const getNewContent = async (commits: string[]) => { + const newContent: { fileName: string; commit: string }[] = []; + for (let j = 0; j < commits.length; j++) { + const commitDetail = await octokit.rest.repos.getCommit({ + owner: `${process.env.OWNER}`, + repo: `${process.env.REPO}`, + ref: commits[j], + }); + + const newFiles = commitDetail.data.files?.filter( + (f) => + f.status == "added" && f.filename.startsWith(`${process.env.PATH}/`) + ); + newContent.push( + ...(newFiles?.map((p) => { + return { + fileName: p.filename, + commit: commits[j], + }; + }) || []) + ); + } + + return newContent; +}; + +const getContentData = async ( + newContent: { fileName: string; commit: string }[] +) => { + const contentData: { + fileName: string; + commit: string; + content: string; + sendStatusEmail: boolean; + }[] = []; + for (let j = 0; j < newContent.length; j++) { + const content = newContent[j]; + const postContent = await octokit.request( + "GET /repos/{owner}/{repo}/contents/{path}", + { + owner: `${process.env.OWNER}`, + repo: `${process.env.REPO}`, + path: content.fileName, + } + ); + + const buffer = Buffer.from((postContent.data as any).content, "base64"); + const data = buffer.toString("utf8"); + + contentData.push({ + fileName: content.fileName, + commit: content.commit, + content: data, + sendStatusEmail: process.env.SEND_STATUS_EMAIL == "true", + }); + } + + return contentData; +}; + +const processNewContent = async ( + newContent: { + fileName: string; + commit: string; + content: string; + sendStatusEmail: boolean; + }[] +) => { + const Entries = newContent.map((content) => ({ + Source: `cross-post`, + DetailType: "process-new-content", + Detail: JSON.stringify(content), + })); + + const putEventsCommand = new PutEventsCommand({ + Entries, + }); + await eb.send(putEventsCommand); +}; diff --git a/functions/identify-new-content/index.js b/functions/identify-new-content/index.js deleted file mode 100644 index b1e1d7e..0000000 --- a/functions/identify-new-content/index.js +++ /dev/null @@ -1,122 +0,0 @@ -const { Octokit } = require('octokit'); -const { SFNClient, StartExecutionCommand } = require('@aws-sdk/client-sfn'); -const shared = require('/opt/nodejs/index'); - -const sfn = new SFNClient(); -let octokit; - -exports.handler = async (event) => { - try { - await initializeOctokit(); - - const recentCommits = await getRecentCommits(); - if (recentCommits.length) { - const newContent = await getNewContent(recentCommits); - if (newContent.length) { - const data = await getContentData(newContent); - await processNewContent(data); - } - } - } catch (err) { - console.error(err); - } -}; - -const initializeOctokit = async () => { - if (!octokit) { - const gitHubSecret = await shared.getSecret('github'); - octokit = new Octokit({ auth: gitHubSecret }); - } -}; - -const getRecentCommits = async () => { - const timeTolerance = Number(process.env.COMMIT_TIME_TOLERANCE_MINUTES); - const date = new Date(); - date.setMinutes(date.getMinutes() - timeTolerance); - - const result = await octokit.rest.repos.listCommits({ - owner: process.env.OWNER, - repo: process.env.REPO, - path: process.env.PATH, - since: date.toISOString() - }); - - const newPostCommits = result.data.filter(c => c.commit.message.toLowerCase().startsWith(process.env.NEW_CONTENT_INDICATOR)); - return newPostCommits.map(d => d.sha); -}; - -const getNewContent = async (commits) => { - const newContent = await Promise.allSettled(commits.map(async (commit) => { - const commitDetail = await octokit.rest.repos.getCommit({ - owner: process.env.OWNER, - repo: process.env.REPO, - ref: commit - }); - - const newFiles = commitDetail.data.files.filter(f => f.status == 'added' && f.filename.startsWith(`${process.env.PATH}/`)); - return newFiles.map(p => { - return { - fileName: p.filename, - commit: commit - } - }); - })); - - let content = []; - for (const result of newContent) { - if (result.status == 'rejected') { - console.error(result.reason); - } else { - content = [...content, ...result.value]; - } - } - - return content; -}; - -const getContentData = async (newContent) => { - const contentData = await Promise.allSettled(newContent.map(async (content) => { - const postContent = await octokit.request('GET /repos/{owner}/{repo}/contents/{path}', { - owner: process.env.OWNER, - repo: process.env.REPO, - path: content.fileName - }); - - const buffer = Buffer.from(postContent.data.content, 'base64'); - const data = buffer.toString('utf8'); - - return { - fileName: content.fileName, - commit: content.commit, - content: data, - sendStatusEmail: process.env.SEND_STATUS_EMAIL == 'true' - }; - })); - - let allContent = []; - for (const result of contentData) { - if (result.status == 'rejected') { - console.error(result.reason); - } else { - allContent.push(result.value); - } - } - - return allContent; -}; - -const processNewContent = async (newContent) => { - const executions = await Promise.allSettled(newContent.map(async (content) => { - const command = new StartExecutionCommand({ - stateMachineArn: process.env.STATE_MACHINE_ARN, - input: JSON.stringify(content) - }); - await sfn.send(command); - })); - - for (const execution of executions) { - if (execution.status == 'rejected') { - console.error(execution.reason); - } - } -}; \ No newline at end of file diff --git a/functions/identify-new-content/package-lock.json b/functions/identify-new-content/package-lock.json deleted file mode 100644 index dc6d2d2..0000000 --- a/functions/identify-new-content/package-lock.json +++ /dev/null @@ -1,3189 +0,0 @@ -{ - "name": "identify-new-content", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "identify-new-content", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@aws-sdk/client-sfn": "^3.229.0", - "octokit": "^2.0.10" - } - }, - "node_modules/@aws-crypto/ie11-detection": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz", - "integrity": "sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==", - "dev": true, - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@aws-crypto/sha256-browser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz", - "integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==", - "dev": true, - "dependencies": { - "@aws-crypto/ie11-detection": "^2.0.0", - "@aws-crypto/sha256-js": "^2.0.0", - "@aws-crypto/supports-web-crypto": "^2.0.0", - "@aws-crypto/util": "^2.0.0", - "@aws-sdk/types": "^3.1.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@aws-crypto/sha256-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz", - "integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==", - "dev": true, - "dependencies": { - "@aws-crypto/util": "^2.0.0", - "@aws-sdk/types": "^3.1.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@aws-crypto/supports-web-crypto": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz", - "integrity": "sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==", - "dev": true, - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@aws-crypto/util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz", - "integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "^3.110.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/util/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@aws-sdk/abort-controller": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.226.0.tgz", - "integrity": "sha512-cJVzr1xxPBd08voknXvR0RLgtZKGKt6WyDpH/BaPCu3rfSqWCDZKzwqe940eqosjmKrxC6pUZNKASIqHOQ8xxQ==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sfn": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sfn/-/client-sfn-3.245.0.tgz", - "integrity": "sha512-1doyWldzORmD8r/kic8Sm6Ji9KfyMGYpYROTNtX8ZKCaNDCfjCUG25+y8b5tNLkYlKJFZ144D9Hf6s3mRe0vZg==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/client-sts": "3.245.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/credential-provider-node": "3.245.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-signing": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.245.0.tgz", - "integrity": "sha512-dxzRwRo55ZNQ4hQigC+cishxLSWlBrbr3iszG0FLviavLDOlnVG5UUxWpOIGvwr8pYiSfM4jnfMxiwYwiCLg1g==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.245.0.tgz", - "integrity": "sha512-0pGPA00kEsu2Yq1Ul+OwftHxws5YVllm4iZrPtGnqmXr7wmf6B9lOtrMQF44y7Tfw53po6+bKz08OKTEWkkjUA==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.245.0.tgz", - "integrity": "sha512-E+7v2sy34TLni/Dmz6bTU20NWvbHYH9sVUHKQ9kHhmFopUWrs4Nt77f85PbuiKJz/irjUh9ppT5q1odJNRKRVQ==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/credential-provider-node": "3.245.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-sdk-sts": "3.226.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-signing": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "fast-xml-parser": "4.0.11", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/config-resolver": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.234.0.tgz", - "integrity": "sha512-uZxy4wzllfvgCQxVc+Iqhde0NGAnfmV2hWR6ejadJaAFTuYNvQiRg9IqJy3pkyDPqXySiJ8Bom5PoJfgn55J/A==", - "dev": true, - "dependencies": { - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-config-provider": "3.208.0", - "@aws-sdk/util-middleware": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.226.0.tgz", - "integrity": "sha512-sd8uK1ojbXxaZXlthzw/VXZwCPUtU3PjObOfr3Evj7MPIM2IH8h29foOlggx939MdLQGboJf9gKvLlvKDWtJRA==", - "dev": true, - "dependencies": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-imds": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.226.0.tgz", - "integrity": "sha512-//z/COQm2AjYFI1Lb0wKHTQSrvLFTyuKLFQGPJsKS7DPoxGOCKB7hmYerlbl01IDoCxTdyL//TyyPxbZEOQD5Q==", - "dev": true, - "dependencies": { - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.245.0.tgz", - "integrity": "sha512-1SjfVc5Wg0lLRUvwMrfjGgFkl+zfxn74gnkPr6by1QyMAoTzmeUkalPLAIqd+uHtFom9e3K633BQtX7zVPZ5XQ==", - "dev": true, - "dependencies": { - "@aws-sdk/credential-provider-env": "3.226.0", - "@aws-sdk/credential-provider-imds": "3.226.0", - "@aws-sdk/credential-provider-process": "3.226.0", - "@aws-sdk/credential-provider-sso": "3.245.0", - "@aws-sdk/credential-provider-web-identity": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.245.0.tgz", - "integrity": "sha512-Dwv8zmRLTDLeEkGrK/sLNFZSC+ahXZxr07CuID054QKACIdUEvkqYlnalRiTeXngiHGQ54u8wU7f0D32R2oL0g==", - "dev": true, - "dependencies": { - "@aws-sdk/credential-provider-env": "3.226.0", - "@aws-sdk/credential-provider-imds": "3.226.0", - "@aws-sdk/credential-provider-ini": "3.245.0", - "@aws-sdk/credential-provider-process": "3.226.0", - "@aws-sdk/credential-provider-sso": "3.245.0", - "@aws-sdk/credential-provider-web-identity": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.226.0.tgz", - "integrity": "sha512-iUDMdnrTvbvaCFhWwqyXrhvQ9+ojPqPqXhwZtY1X/Qaz+73S9gXBPJHZaZb2Ke0yKE1Ql3bJbKvmmxC/qLQMng==", - "dev": true, - "dependencies": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.245.0.tgz", - "integrity": "sha512-txWrJc0WNBhXMi7q+twjx7cs/qzgTfbQ+vbag5idRmdoUeiR8rfLvihCab2NaGg50xhh+TaoUCXrgJp3E/XjYQ==", - "dev": true, - "dependencies": { - "@aws-sdk/client-sso": "3.245.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/token-providers": "3.245.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.226.0.tgz", - "integrity": "sha512-CCpv847rLB0SFOHz2igvUMFAzeT2fD3YnY4C8jltuJoEkn0ITn1Hlgt13nTJ5BUuvyti2mvyXZHmNzhMIMrIlw==", - "dev": true, - "dependencies": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/fetch-http-handler": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.226.0.tgz", - "integrity": "sha512-JewZPMNEBXfi1xVnRa7pVtK/zgZD8/lQ/YnD8pq79WuMa2cwyhDtr8oqCoqsPW+WJT5ScXoMtuHxN78l8eKWgg==", - "dev": true, - "dependencies": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/querystring-builder": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/hash-node": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.226.0.tgz", - "integrity": "sha512-MdlJhJ9/Espwd0+gUXdZRsHuostB2WxEVAszWxobP0FTT9PnicqnfK7ExmW+DUAc0ywxtEbR3e0UND65rlSTVw==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-buffer-from": "3.208.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/invalid-dependency": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.226.0.tgz", - "integrity": "sha512-QXOYFmap8g9QzRjumcRCIo2GEZkdCwd7ePQW0OABWPhKHzlJ74vvBxywjU3s39EEBEluWXtZ7Iufg6GxZM4ifw==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/is-array-buffer": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz", - "integrity": "sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-content-length": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.226.0.tgz", - "integrity": "sha512-ksUzlHJN2JMuyavjA46a4sctvnrnITqt2tbGGWWrAuXY1mel2j+VbgnmJUiwHKUO6bTFBBeft5Vd1TSOb4JmiA==", - "dev": true, - "dependencies": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-endpoint": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.226.0.tgz", - "integrity": "sha512-EvLFafjtUxTT0AC9p3aBQu1/fjhWdIeK58jIXaNFONfZ3F8QbEYUPuF/SqZvJM6cWfOO9qwYKkRDbCSTYhprIg==", - "dev": true, - "dependencies": { - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-config-provider": "3.208.0", - "@aws-sdk/util-middleware": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.226.0.tgz", - "integrity": "sha512-haVkWVh6BUPwKgWwkL6sDvTkcZWvJjv8AgC8jiQuSl8GLZdzHTB8Qhi3IsfFta9HAuoLjxheWBE5Z/L0UrfhLA==", - "dev": true, - "dependencies": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.226.0.tgz", - "integrity": "sha512-m9gtLrrYnpN6yckcQ09rV7ExWOLMuq8mMPF/K3DbL/YL0TuILu9i2T1W+JuxSX+K9FMG2HrLAKivE/kMLr55xA==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.226.0.tgz", - "integrity": "sha512-mwRbdKEUeuNH5TEkyZ5FWxp6bL2UC1WbY+LDv6YjHxmSMKpAoOueEdtU34PqDOLrpXXxIGHDFmjeGeMfktyEcA==", - "dev": true, - "dependencies": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-retry": { - "version": "3.235.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.235.0.tgz", - "integrity": "sha512-50WHbJGpD3SNp9763MAlHqIhXil++JdQbKejNpHg7HsJne/ao3ub+fDOfx//mMBjpzBV25BGd5UlfL6blrClSg==", - "dev": true, - "dependencies": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/service-error-classification": "3.229.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-middleware": "3.226.0", - "@aws-sdk/util-retry": "3.229.0", - "tslib": "^2.3.1", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.226.0.tgz", - "integrity": "sha512-NN9T/qoSD1kZvAT+VLny3NnlqgylYQcsgV3rvi/8lYzw/G/2s8VS6sm/VTWGGZhx08wZRv20MWzYu3bftcyqUg==", - "dev": true, - "dependencies": { - "@aws-sdk/middleware-signing": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-serde": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.226.0.tgz", - "integrity": "sha512-nPuOOAkSfx9TxzdKFx0X2bDlinOxGrqD7iof926K/AEflxGD1DBdcaDdjlYlPDW2CVE8LV/rAgbYuLxh/E/1VA==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-signing": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.226.0.tgz", - "integrity": "sha512-E6HmtPcl+IjYDDzi1xI2HpCbBq2avNWcjvCriMZWuTAtRVpnA6XDDGW5GY85IfS3A8G8vuWqEVPr8JcYUcjfew==", - "dev": true, - "dependencies": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-middleware": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-stack": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.226.0.tgz", - "integrity": "sha512-85wF29LvPvpoed60fZGDYLwv1Zpd/cM0C22WSSFPw1SSJeqO4gtFYyCg2squfT3KI6kF43IIkOCJ+L7GtryPug==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.226.0.tgz", - "integrity": "sha512-N1WnfzCW1Y5yWhVAphf8OPGTe8Df3vmV7/LdsoQfmpkCZgLZeK2o0xITkUQhRj1mbw7yp8tVFLFV3R2lMurdAQ==", - "dev": true, - "dependencies": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/node-config-provider": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.226.0.tgz", - "integrity": "sha512-B8lQDqiRk7X5izFEUMXmi8CZLOKCTWQJU9HQf3ako+sF0gexo4nHN3jhoRWyLtcgC5S3on/2jxpAcqtm7kuY3w==", - "dev": true, - "dependencies": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/node-http-handler": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.226.0.tgz", - "integrity": "sha512-xQCddnZNMiPmjr3W7HYM+f5ir4VfxgJh37eqZwX6EZmyItFpNNeVzKUgA920ka1VPz/ZUYB+2OFGiX3LCLkkaA==", - "dev": true, - "dependencies": { - "@aws-sdk/abort-controller": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/querystring-builder": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/property-provider": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.226.0.tgz", - "integrity": "sha512-TsljjG+Sg0LmdgfiAlWohluWKnxB/k8xenjeozZfzOr5bHmNHtdbWv6BtNvD/R83hw7SFXxbJHlD5H4u9p2NFg==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/protocol-http": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.226.0.tgz", - "integrity": "sha512-zWkVqiTA9RXL6y0hhfZc9bcU4DX2NI6Hw9IhQmSPeM59mdbPjJlY4bLlMr5YxywqO3yQ/ylNoAfrEzrDjlOSRg==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/querystring-builder": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.226.0.tgz", - "integrity": "sha512-LVurypuNeotO4lmirKXRC4NYrZRAyMJXuwO0f2a5ZAUJCjauwYrifKue6yCfU7bls7gut7nfcR6B99WBYpHs3g==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-uri-escape": "3.201.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/querystring-parser": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.226.0.tgz", - "integrity": "sha512-FzB+VrQ47KAFxiPt2YXrKZ8AOLZQqGTLCKHzx4bjxGmwgsjV8yIbtJiJhZLMcUQV4LtGeIY9ixIqQhGvnZHE4A==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/service-error-classification": { - "version": "3.229.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.229.0.tgz", - "integrity": "sha512-dnzWWQ0/NoWMUZ5C0DW3dPm0wC1O76Y/SpKbuJzWPkx1EYy6r8p32Ly4D9vUzrKDbRGf48YHIF2kOkBmu21CLg==", - "dev": true, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/shared-ini-file-loader": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.226.0.tgz", - "integrity": "sha512-661VQefsARxVyyV2FX9V61V+nNgImk7aN2hYlFKla6BCwZfMng+dEtD0xVGyg1PfRw0qvEv5LQyxMVgHcUSevA==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.226.0.tgz", - "integrity": "sha512-/R5q5agdPd7HJB68XMzpxrNPk158EHUvkFkuRu5Qf3kkkHebEzWEBlWoVpUe6ss4rP9Tqcue6xPuaftEmhjpYw==", - "dev": true, - "dependencies": { - "@aws-sdk/is-array-buffer": "3.201.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-hex-encoding": "3.201.0", - "@aws-sdk/util-middleware": "3.226.0", - "@aws-sdk/util-uri-escape": "3.201.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/smithy-client": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.234.0.tgz", - "integrity": "sha512-8AtR/k4vsFvjXeQbIzq/Wy7Nbk48Ou0wUEeVYPHWHPSU8QamFWORkOwmKtKMfHAyZvmqiAPeQqHFkq+UJhWyyQ==", - "dev": true, - "dependencies": { - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.245.0.tgz", - "integrity": "sha512-m/spXR/vEXGb+zMqRUMQYVMwFZSTdK5RkddYqamYkNhIoLm60EYeRu57JsMMs5djKi8dBRSKiXwVHx0l2rXMjg==", - "dev": true, - "dependencies": { - "@aws-sdk/client-sso-oidc": "3.245.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/types": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.226.0.tgz", - "integrity": "sha512-MmmNHrWeO4man7wpOwrAhXlevqtOV9ZLcH4RhnG5LmRce0RFOApx24HoKENfFCcOyCm5LQBlsXCqi0dZWDWU0A==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/url-parser": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.226.0.tgz", - "integrity": "sha512-p5RLE0QWyP0OcTOLmFcLdVgUcUEzmEfmdrnOxyNzomcYb0p3vUagA5zfa1HVK2azsQJFBv28GfvMnba9bGhObg==", - "dev": true, - "dependencies": { - "@aws-sdk/querystring-parser": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/util-base64": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.208.0.tgz", - "integrity": "sha512-PQniZph5A6N7uuEOQi+1hnMz/FSOK/8kMFyFO+4DgA1dZ5pcKcn5wiFwHkcTb/BsgVqQa3Jx0VHNnvhlS8JyTg==", - "dev": true, - "dependencies": { - "@aws-sdk/util-buffer-from": "3.208.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-body-length-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.188.0.tgz", - "integrity": "sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/util-body-length-node": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.208.0.tgz", - "integrity": "sha512-3zj50e5g7t/MQf53SsuuSf0hEELzMtD8RX8C76f12OSRo2Bca4FLLYHe0TZbxcfQHom8/hOaeZEyTyMogMglqg==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-buffer-from": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.208.0.tgz", - "integrity": "sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw==", - "dev": true, - "dependencies": { - "@aws-sdk/is-array-buffer": "3.201.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-config-provider": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.208.0.tgz", - "integrity": "sha512-DSRqwrERUsT34ug+anlMBIFooBEGwM8GejC7q00Y/9IPrQy50KnG5PW2NiTjuLKNi7pdEOlwTSEocJE15eDZIg==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-defaults-mode-browser": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.234.0.tgz", - "integrity": "sha512-IHMKXjTbOD8XMz5+2oCOsVP94BYb9YyjXdns0aAXr2NAo7k2+RCzXQ2DebJXppGda1F6opFutoKwyVSN0cmbMw==", - "dev": true, - "dependencies": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "bowser": "^2.11.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@aws-sdk/util-defaults-mode-node": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.234.0.tgz", - "integrity": "sha512-UGjQ+OjBYYhxFVtUY+jtr0ZZgzZh6OHtYwRhFt8IHewJXFCfZTyfsbX20szBj5y1S4HRIUJ7cwBLIytTqMbI5w==", - "dev": true, - "dependencies": { - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/credential-provider-imds": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.245.0.tgz", - "integrity": "sha512-UNOFquB1tKx+8RT8n82Zb5tIwDyZHVPBg/m0LB0RsLETjr6krien5ASpqWezsXKIR1hftN9uaxN4bvf2dZrWHg==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-hex-encoding": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz", - "integrity": "sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz", - "integrity": "sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-middleware": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.226.0.tgz", - "integrity": "sha512-B96CQnwX4gRvQdaQkdUtqvDPkrptV5+va6FVeJOocU/DbSYMAScLxtR3peMS8cnlOT6nL1Eoa42OI9AfZz1VwQ==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-retry": { - "version": "3.229.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.229.0.tgz", - "integrity": "sha512-0zKTqi0P1inD0LzIMuXRIYYQ/8c1lWMg/cfiqUcIAF1TpatlpZuN7umU0ierpBFud7S+zDgg0oemh+Nj8xliJw==", - "dev": true, - "dependencies": { - "@aws-sdk/service-error-classification": "3.229.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@aws-sdk/util-uri-escape": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz", - "integrity": "sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.226.0.tgz", - "integrity": "sha512-PhBIu2h6sPJPcv2I7ELfFizdl5pNiL4LfxrasMCYXQkJvVnoXztHA1x+CQbXIdtZOIlpjC+6BjDcE0uhnpvfcA==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "bowser": "^2.11.0", - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.226.0.tgz", - "integrity": "sha512-othPc5Dz/pkYkxH+nZPhc1Al0HndQT8zHD4e9h+EZ+8lkd8n+IsnLfTS/mSJWrfiC6UlNRVw55cItstmJyMe/A==", - "dev": true, - "dependencies": { - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "node_modules/@aws-sdk/util-utf8-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.188.0.tgz", - "integrity": "sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/util-utf8-node": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.208.0.tgz", - "integrity": "sha512-jKY87Acv0yWBdFxx6bveagy5FYjz+dtV8IPT7ay1E2WPWH1czoIdMAkc8tSInK31T6CRnHWkLZ1qYwCbgRfERQ==", - "dev": true, - "dependencies": { - "@aws-sdk/util-buffer-from": "3.208.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@octokit/app": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@octokit/app/-/app-13.1.1.tgz", - "integrity": "sha512-83TPUMWPAWaACe8AJVBlg6gptbDJk/33C/0V9e0yWfBqXINqF2ZutctQIcrRcyWBPlfYmFElPbElMqlspe8UWg==", - "dev": true, - "dependencies": { - "@octokit/auth-app": "^4.0.8", - "@octokit/auth-unauthenticated": "^3.0.0", - "@octokit/core": "^4.0.0", - "@octokit/oauth-app": "^4.0.7", - "@octokit/plugin-paginate-rest": "^5.0.0", - "@octokit/types": "^8.0.0", - "@octokit/webhooks": "^10.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-app": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-4.0.8.tgz", - "integrity": "sha512-miI7y9FfS/fL1bSPsDaAfCGSxQ04iGLyisI2GA8N7P6eB6AkCOt+F1XXapJKRnAubQubvYF0dqxoTZYyKk93NQ==", - "dev": true, - "dependencies": { - "@octokit/auth-oauth-app": "^5.0.0", - "@octokit/auth-oauth-user": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", - "@types/lru-cache": "^5.1.0", - "deprecation": "^2.3.1", - "lru-cache": "^6.0.0", - "universal-github-app-jwt": "^1.1.1", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-oauth-app": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-5.0.4.tgz", - "integrity": "sha512-zlWuii5hAN50vsV6SJC+uIJ7SMhyWjQMEmKJQxkmNDlieE9LjnkZnbOjqRsfcG7VO7WTl4K8ccpo/3A7Kdpmrw==", - "dev": true, - "dependencies": { - "@octokit/auth-oauth-device": "^4.0.0", - "@octokit/auth-oauth-user": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", - "@types/btoa-lite": "^1.0.0", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-oauth-device": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-4.0.3.tgz", - "integrity": "sha512-KPTx5nMntKjNZzzltO3X4T68v22rd7Cp/TcLJXQE2U8aXPcZ9LFuww9q9Q5WUNSu3jwi3lRwzfkPguRfz1R8Vg==", - "dev": true, - "dependencies": { - "@octokit/oauth-methods": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-oauth-user": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-2.0.4.tgz", - "integrity": "sha512-HrbDzTPqz6GcGSOUkR+wSeF3vEqsb9NMsmPja/qqqdiGmlk/Czkxctc3KeWYogHonp62Ml4kjz2VxKawrFsadQ==", - "dev": true, - "dependencies": { - "@octokit/auth-oauth-device": "^4.0.0", - "@octokit/oauth-methods": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-token": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.2.tgz", - "integrity": "sha512-pq7CwIMV1kmzkFTimdwjAINCXKTajZErLB4wMLYapR2nuB/Jpr66+05wOTZMSCBXP6n4DdDWT2W19Bm17vU69Q==", - "dev": true, - "dependencies": { - "@octokit/types": "^8.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-unauthenticated": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-3.0.3.tgz", - "integrity": "sha512-IyfLo1T5GmIC9+07hHGlD3gHtZI1Bona8PLhHXUnwcYDuZt0BhjlNJDYMoPG21C4r7v7+ZSxQHBKrGgkxpYb7A==", - "dev": true, - "dependencies": { - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/core": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.1.0.tgz", - "integrity": "sha512-Czz/59VefU+kKDy+ZfDwtOIYIkFjExOKf+HA92aiTZJ6EfWpFzYQWw0l54ji8bVmyhc+mGaLUbSUmXazG7z5OQ==", - "dev": true, - "dependencies": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/endpoint": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.3.tgz", - "integrity": "sha512-57gRlb28bwTsdNXq+O3JTQ7ERmBTuik9+LelgcLIVfYwf235VHbN9QNo4kXExtp/h8T423cR5iJThKtFYxC7Lw==", - "dev": true, - "dependencies": { - "@octokit/types": "^8.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/graphql": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.4.tgz", - "integrity": "sha512-amO1M5QUQgYQo09aStR/XO7KAl13xpigcy/kI8/N1PnZYSS69fgte+xA4+c2DISKqUZfsh0wwjc2FaCt99L41A==", - "dev": true, - "dependencies": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/oauth-app": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-4.2.0.tgz", - "integrity": "sha512-gyGclT77RQMkVUEW3YBeAKY+LBSc5u3eC9Wn/Uwt3WhuKuu9mrV18EnNpDqmeNll+mdV02yyBROU29Tlili6gg==", - "dev": true, - "dependencies": { - "@octokit/auth-oauth-app": "^5.0.0", - "@octokit/auth-oauth-user": "^2.0.0", - "@octokit/auth-unauthenticated": "^3.0.0", - "@octokit/core": "^4.0.0", - "@octokit/oauth-authorization-url": "^5.0.0", - "@octokit/oauth-methods": "^2.0.0", - "@types/aws-lambda": "^8.10.83", - "fromentries": "^1.3.1", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/oauth-authorization-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-5.0.0.tgz", - "integrity": "sha512-y1WhN+ERDZTh0qZ4SR+zotgsQUE1ysKnvBt1hvDRB2WRzYtVKQjn97HEPzoehh66Fj9LwNdlZh+p6TJatT0zzg==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/oauth-methods": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-2.0.4.tgz", - "integrity": "sha512-RDSa6XL+5waUVrYSmOlYROtPq0+cfwppP4VaQY/iIei3xlFb0expH6YNsxNrZktcLhJWSpm9uzeom+dQrXlS3A==", - "dev": true, - "dependencies": { - "@octokit/oauth-authorization-url": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", - "btoa-lite": "^1.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/openapi-types": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", - "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==", - "dev": true - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-5.0.1.tgz", - "integrity": "sha512-7A+rEkS70pH36Z6JivSlR7Zqepz3KVucEFVDnSrgHXzG7WLAzYwcHZbKdfTXHwuTHbkT1vKvz7dHl1+HNf6Qyw==", - "dev": true, - "dependencies": { - "@octokit/types": "^8.0.0" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=4" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.7.0.tgz", - "integrity": "sha512-orxQ0fAHA7IpYhG2flD2AygztPlGYNAdlzYz8yrD8NDgelPfOYoRPROfEyIe035PlxvbYrgkfUZIhSBKju/Cvw==", - "dev": true, - "dependencies": { - "@octokit/types": "^8.0.0", - "deprecation": "^2.3.1" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/plugin-retry": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-4.0.3.tgz", - "integrity": "sha512-tDR+4Cs9GPPNJ7/RjTEq5ty2wqjKe1hRUV7/hch+nORow5LshlHXTT1qfYNsFPw3S9szvFFAfDEFq/xwrEpL7g==", - "dev": true, - "dependencies": { - "@octokit/types": "^8.0.0", - "bottleneck": "^2.15.3" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/plugin-throttling": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-4.3.2.tgz", - "integrity": "sha512-ZaCK599h3tzcoy0Jtdab95jgmD7X9iAk59E2E7hYKCAmnURaI4WpzwL9vckImilybUGrjY1JOWJapDs2N2D3vw==", - "dev": true, - "dependencies": { - "@octokit/types": "^8.0.0", - "bottleneck": "^2.15.3" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": "^4.0.0" - } - }, - "node_modules/@octokit/request": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.2.tgz", - "integrity": "sha512-6VDqgj0HMc2FUX2awIs+sM6OwLgwHvAi4KCK3mT2H2IKRt6oH9d0fej5LluF5mck1lRR/rFWN0YIDSYXYSylbw==", - "dev": true, - "dependencies": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/request-error": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.2.tgz", - "integrity": "sha512-WMNOFYrSaX8zXWoJg9u/pKgWPo94JXilMLb2VManNOby9EZxrQaBe/QSC4a1TzpAlpxofg2X/jMnCyZgL6y7eg==", - "dev": true, - "dependencies": { - "@octokit/types": "^8.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/types": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.0.0.tgz", - "integrity": "sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg==", - "dev": true, - "dependencies": { - "@octokit/openapi-types": "^14.0.0" - } - }, - "node_modules/@octokit/webhooks": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-10.5.0.tgz", - "integrity": "sha512-IQkogbujbLKXrpfsuH7PV33tMiivMeUhggOfimetwdaX4M7WB+mRdxwFsc8dJCOt9wCSrXfZtpd8eK3VOf4GCQ==", - "dev": true, - "dependencies": { - "@octokit/request-error": "^3.0.0", - "@octokit/webhooks-methods": "^3.0.0", - "@octokit/webhooks-types": "6.7.0", - "aggregate-error": "^3.1.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/webhooks-methods": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-3.0.1.tgz", - "integrity": "sha512-XftYVcBxtzC2G05kdBNn9IYLtQ+Cz6ufKkjZd0DU/qGaZEFTPzM2OabXAWG5tvL0q/I+Exio1JnRiPfetiMSEw==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/webhooks-types": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-6.7.0.tgz", - "integrity": "sha512-bykm7UkSnxmb2uhSfcLM1Pity/LQ6ZBSdzy9HU0vXjR+2g+tzlmRhXb7Go8oj0TlgO+vDrTivGXju6zkzOGKjA==", - "dev": true - }, - "node_modules/@types/aws-lambda": { - "version": "8.10.109", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.109.tgz", - "integrity": "sha512-/ME92FneNyXQzrAfcnQQlW1XkCZGPDlpi2ao1MJwecN+6SbeonKeggU8eybv1DfKli90FAVT1MlIZVXfwVuCyg==", - "dev": true - }, - "node_modules/@types/btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==", - "dev": true - }, - "node_modules/@types/jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-mM4TkDpA9oixqg1Fv2vVpOFyIVLJjm5x4k0V+K/rEsizfjD7Tk7LKk3GTtbB7KCfP0FEHQtsZqFxYA0+sijNVg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", - "dev": true - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", - "dev": true - }, - "node_modules/bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", - "dev": true - }, - "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", - "dev": true - }, - "node_modules/btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==", - "dev": true - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "dev": true - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/fast-xml-parser": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.11.tgz", - "integrity": "sha512-4aUg3aNRR/WjQAcpceODG1C3x3lFANXRo8+1biqfieHmg9pyMt7qB4lQV/Ta6sJCTbA5vfD8fnA8S54JATiFUA==", - "dev": true, - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - }, - "funding": { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - }, - "node_modules/fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", - "dev": true, - "dependencies": { - "jws": "^3.2.2", - "lodash": "^4.17.21", - "ms": "^2.1.1", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dev": true, - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dev": true, - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/octokit": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/octokit/-/octokit-2.0.11.tgz", - "integrity": "sha512-Ivjapy5RXWvJfmZe0BvfMM2gnNi39rjheZV/s3SjICb7gfl83JWPDmBERe4f/l2czdRnj4NVIn4YO7Q737oLCg==", - "dev": true, - "dependencies": { - "@octokit/app": "^13.1.1", - "@octokit/core": "^4.0.4", - "@octokit/oauth-app": "^4.0.6", - "@octokit/plugin-paginate-rest": "^5.0.0", - "@octokit/plugin-rest-endpoint-methods": "^6.0.0", - "@octokit/plugin-retry": "^4.0.3", - "@octokit/plugin-throttling": "^4.0.1", - "@octokit/types": "^8.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "dev": true - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/universal-github-app-jwt": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz", - "integrity": "sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w==", - "dev": true, - "dependencies": { - "@types/jsonwebtoken": "^9.0.0", - "jsonwebtoken": "^9.0.0" - } - }, - "node_modules/universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", - "dev": true - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - }, - "dependencies": { - "@aws-crypto/ie11-detection": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz", - "integrity": "sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==", - "dev": true, - "requires": { - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@aws-crypto/sha256-browser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz", - "integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==", - "dev": true, - "requires": { - "@aws-crypto/ie11-detection": "^2.0.0", - "@aws-crypto/sha256-js": "^2.0.0", - "@aws-crypto/supports-web-crypto": "^2.0.0", - "@aws-crypto/util": "^2.0.0", - "@aws-sdk/types": "^3.1.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@aws-crypto/sha256-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz", - "integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==", - "dev": true, - "requires": { - "@aws-crypto/util": "^2.0.0", - "@aws-sdk/types": "^3.1.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@aws-crypto/supports-web-crypto": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz", - "integrity": "sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==", - "dev": true, - "requires": { - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@aws-crypto/util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz", - "integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==", - "dev": true, - "requires": { - "@aws-sdk/types": "^3.110.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@aws-sdk/abort-controller": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.226.0.tgz", - "integrity": "sha512-cJVzr1xxPBd08voknXvR0RLgtZKGKt6WyDpH/BaPCu3rfSqWCDZKzwqe940eqosjmKrxC6pUZNKASIqHOQ8xxQ==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/client-sfn": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sfn/-/client-sfn-3.245.0.tgz", - "integrity": "sha512-1doyWldzORmD8r/kic8Sm6Ji9KfyMGYpYROTNtX8ZKCaNDCfjCUG25+y8b5tNLkYlKJFZ144D9Hf6s3mRe0vZg==", - "dev": true, - "requires": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/client-sts": "3.245.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/credential-provider-node": "3.245.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-signing": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/client-sso": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.245.0.tgz", - "integrity": "sha512-dxzRwRo55ZNQ4hQigC+cishxLSWlBrbr3iszG0FLviavLDOlnVG5UUxWpOIGvwr8pYiSfM4jnfMxiwYwiCLg1g==", - "dev": true, - "requires": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/client-sso-oidc": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.245.0.tgz", - "integrity": "sha512-0pGPA00kEsu2Yq1Ul+OwftHxws5YVllm4iZrPtGnqmXr7wmf6B9lOtrMQF44y7Tfw53po6+bKz08OKTEWkkjUA==", - "dev": true, - "requires": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/client-sts": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.245.0.tgz", - "integrity": "sha512-E+7v2sy34TLni/Dmz6bTU20NWvbHYH9sVUHKQ9kHhmFopUWrs4Nt77f85PbuiKJz/irjUh9ppT5q1odJNRKRVQ==", - "dev": true, - "requires": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/credential-provider-node": "3.245.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-sdk-sts": "3.226.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-signing": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "fast-xml-parser": "4.0.11", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/config-resolver": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.234.0.tgz", - "integrity": "sha512-uZxy4wzllfvgCQxVc+Iqhde0NGAnfmV2hWR6ejadJaAFTuYNvQiRg9IqJy3pkyDPqXySiJ8Bom5PoJfgn55J/A==", - "dev": true, - "requires": { - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-config-provider": "3.208.0", - "@aws-sdk/util-middleware": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/credential-provider-env": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.226.0.tgz", - "integrity": "sha512-sd8uK1ojbXxaZXlthzw/VXZwCPUtU3PjObOfr3Evj7MPIM2IH8h29foOlggx939MdLQGboJf9gKvLlvKDWtJRA==", - "dev": true, - "requires": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/credential-provider-imds": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.226.0.tgz", - "integrity": "sha512-//z/COQm2AjYFI1Lb0wKHTQSrvLFTyuKLFQGPJsKS7DPoxGOCKB7hmYerlbl01IDoCxTdyL//TyyPxbZEOQD5Q==", - "dev": true, - "requires": { - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/credential-provider-ini": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.245.0.tgz", - "integrity": "sha512-1SjfVc5Wg0lLRUvwMrfjGgFkl+zfxn74gnkPr6by1QyMAoTzmeUkalPLAIqd+uHtFom9e3K633BQtX7zVPZ5XQ==", - "dev": true, - "requires": { - "@aws-sdk/credential-provider-env": "3.226.0", - "@aws-sdk/credential-provider-imds": "3.226.0", - "@aws-sdk/credential-provider-process": "3.226.0", - "@aws-sdk/credential-provider-sso": "3.245.0", - "@aws-sdk/credential-provider-web-identity": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/credential-provider-node": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.245.0.tgz", - "integrity": "sha512-Dwv8zmRLTDLeEkGrK/sLNFZSC+ahXZxr07CuID054QKACIdUEvkqYlnalRiTeXngiHGQ54u8wU7f0D32R2oL0g==", - "dev": true, - "requires": { - "@aws-sdk/credential-provider-env": "3.226.0", - "@aws-sdk/credential-provider-imds": "3.226.0", - "@aws-sdk/credential-provider-ini": "3.245.0", - "@aws-sdk/credential-provider-process": "3.226.0", - "@aws-sdk/credential-provider-sso": "3.245.0", - "@aws-sdk/credential-provider-web-identity": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/credential-provider-process": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.226.0.tgz", - "integrity": "sha512-iUDMdnrTvbvaCFhWwqyXrhvQ9+ojPqPqXhwZtY1X/Qaz+73S9gXBPJHZaZb2Ke0yKE1Ql3bJbKvmmxC/qLQMng==", - "dev": true, - "requires": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/credential-provider-sso": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.245.0.tgz", - "integrity": "sha512-txWrJc0WNBhXMi7q+twjx7cs/qzgTfbQ+vbag5idRmdoUeiR8rfLvihCab2NaGg50xhh+TaoUCXrgJp3E/XjYQ==", - "dev": true, - "requires": { - "@aws-sdk/client-sso": "3.245.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/token-providers": "3.245.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/credential-provider-web-identity": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.226.0.tgz", - "integrity": "sha512-CCpv847rLB0SFOHz2igvUMFAzeT2fD3YnY4C8jltuJoEkn0ITn1Hlgt13nTJ5BUuvyti2mvyXZHmNzhMIMrIlw==", - "dev": true, - "requires": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/fetch-http-handler": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.226.0.tgz", - "integrity": "sha512-JewZPMNEBXfi1xVnRa7pVtK/zgZD8/lQ/YnD8pq79WuMa2cwyhDtr8oqCoqsPW+WJT5ScXoMtuHxN78l8eKWgg==", - "dev": true, - "requires": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/querystring-builder": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/hash-node": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.226.0.tgz", - "integrity": "sha512-MdlJhJ9/Espwd0+gUXdZRsHuostB2WxEVAszWxobP0FTT9PnicqnfK7ExmW+DUAc0ywxtEbR3e0UND65rlSTVw==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-buffer-from": "3.208.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/invalid-dependency": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.226.0.tgz", - "integrity": "sha512-QXOYFmap8g9QzRjumcRCIo2GEZkdCwd7ePQW0OABWPhKHzlJ74vvBxywjU3s39EEBEluWXtZ7Iufg6GxZM4ifw==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/is-array-buffer": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz", - "integrity": "sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-content-length": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.226.0.tgz", - "integrity": "sha512-ksUzlHJN2JMuyavjA46a4sctvnrnITqt2tbGGWWrAuXY1mel2j+VbgnmJUiwHKUO6bTFBBeft5Vd1TSOb4JmiA==", - "dev": true, - "requires": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-endpoint": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.226.0.tgz", - "integrity": "sha512-EvLFafjtUxTT0AC9p3aBQu1/fjhWdIeK58jIXaNFONfZ3F8QbEYUPuF/SqZvJM6cWfOO9qwYKkRDbCSTYhprIg==", - "dev": true, - "requires": { - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-config-provider": "3.208.0", - "@aws-sdk/util-middleware": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-host-header": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.226.0.tgz", - "integrity": "sha512-haVkWVh6BUPwKgWwkL6sDvTkcZWvJjv8AgC8jiQuSl8GLZdzHTB8Qhi3IsfFta9HAuoLjxheWBE5Z/L0UrfhLA==", - "dev": true, - "requires": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-logger": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.226.0.tgz", - "integrity": "sha512-m9gtLrrYnpN6yckcQ09rV7ExWOLMuq8mMPF/K3DbL/YL0TuILu9i2T1W+JuxSX+K9FMG2HrLAKivE/kMLr55xA==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-recursion-detection": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.226.0.tgz", - "integrity": "sha512-mwRbdKEUeuNH5TEkyZ5FWxp6bL2UC1WbY+LDv6YjHxmSMKpAoOueEdtU34PqDOLrpXXxIGHDFmjeGeMfktyEcA==", - "dev": true, - "requires": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-retry": { - "version": "3.235.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.235.0.tgz", - "integrity": "sha512-50WHbJGpD3SNp9763MAlHqIhXil++JdQbKejNpHg7HsJne/ao3ub+fDOfx//mMBjpzBV25BGd5UlfL6blrClSg==", - "dev": true, - "requires": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/service-error-classification": "3.229.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-middleware": "3.226.0", - "@aws-sdk/util-retry": "3.229.0", - "tslib": "^2.3.1", - "uuid": "^8.3.2" - } - }, - "@aws-sdk/middleware-sdk-sts": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.226.0.tgz", - "integrity": "sha512-NN9T/qoSD1kZvAT+VLny3NnlqgylYQcsgV3rvi/8lYzw/G/2s8VS6sm/VTWGGZhx08wZRv20MWzYu3bftcyqUg==", - "dev": true, - "requires": { - "@aws-sdk/middleware-signing": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-serde": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.226.0.tgz", - "integrity": "sha512-nPuOOAkSfx9TxzdKFx0X2bDlinOxGrqD7iof926K/AEflxGD1DBdcaDdjlYlPDW2CVE8LV/rAgbYuLxh/E/1VA==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-signing": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.226.0.tgz", - "integrity": "sha512-E6HmtPcl+IjYDDzi1xI2HpCbBq2avNWcjvCriMZWuTAtRVpnA6XDDGW5GY85IfS3A8G8vuWqEVPr8JcYUcjfew==", - "dev": true, - "requires": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-middleware": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-stack": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.226.0.tgz", - "integrity": "sha512-85wF29LvPvpoed60fZGDYLwv1Zpd/cM0C22WSSFPw1SSJeqO4gtFYyCg2squfT3KI6kF43IIkOCJ+L7GtryPug==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-user-agent": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.226.0.tgz", - "integrity": "sha512-N1WnfzCW1Y5yWhVAphf8OPGTe8Df3vmV7/LdsoQfmpkCZgLZeK2o0xITkUQhRj1mbw7yp8tVFLFV3R2lMurdAQ==", - "dev": true, - "requires": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/node-config-provider": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.226.0.tgz", - "integrity": "sha512-B8lQDqiRk7X5izFEUMXmi8CZLOKCTWQJU9HQf3ako+sF0gexo4nHN3jhoRWyLtcgC5S3on/2jxpAcqtm7kuY3w==", - "dev": true, - "requires": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/node-http-handler": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.226.0.tgz", - "integrity": "sha512-xQCddnZNMiPmjr3W7HYM+f5ir4VfxgJh37eqZwX6EZmyItFpNNeVzKUgA920ka1VPz/ZUYB+2OFGiX3LCLkkaA==", - "dev": true, - "requires": { - "@aws-sdk/abort-controller": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/querystring-builder": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/property-provider": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.226.0.tgz", - "integrity": "sha512-TsljjG+Sg0LmdgfiAlWohluWKnxB/k8xenjeozZfzOr5bHmNHtdbWv6BtNvD/R83hw7SFXxbJHlD5H4u9p2NFg==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/protocol-http": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.226.0.tgz", - "integrity": "sha512-zWkVqiTA9RXL6y0hhfZc9bcU4DX2NI6Hw9IhQmSPeM59mdbPjJlY4bLlMr5YxywqO3yQ/ylNoAfrEzrDjlOSRg==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/querystring-builder": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.226.0.tgz", - "integrity": "sha512-LVurypuNeotO4lmirKXRC4NYrZRAyMJXuwO0f2a5ZAUJCjauwYrifKue6yCfU7bls7gut7nfcR6B99WBYpHs3g==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-uri-escape": "3.201.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/querystring-parser": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.226.0.tgz", - "integrity": "sha512-FzB+VrQ47KAFxiPt2YXrKZ8AOLZQqGTLCKHzx4bjxGmwgsjV8yIbtJiJhZLMcUQV4LtGeIY9ixIqQhGvnZHE4A==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/service-error-classification": { - "version": "3.229.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.229.0.tgz", - "integrity": "sha512-dnzWWQ0/NoWMUZ5C0DW3dPm0wC1O76Y/SpKbuJzWPkx1EYy6r8p32Ly4D9vUzrKDbRGf48YHIF2kOkBmu21CLg==", - "dev": true - }, - "@aws-sdk/shared-ini-file-loader": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.226.0.tgz", - "integrity": "sha512-661VQefsARxVyyV2FX9V61V+nNgImk7aN2hYlFKla6BCwZfMng+dEtD0xVGyg1PfRw0qvEv5LQyxMVgHcUSevA==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/signature-v4": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.226.0.tgz", - "integrity": "sha512-/R5q5agdPd7HJB68XMzpxrNPk158EHUvkFkuRu5Qf3kkkHebEzWEBlWoVpUe6ss4rP9Tqcue6xPuaftEmhjpYw==", - "dev": true, - "requires": { - "@aws-sdk/is-array-buffer": "3.201.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-hex-encoding": "3.201.0", - "@aws-sdk/util-middleware": "3.226.0", - "@aws-sdk/util-uri-escape": "3.201.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/smithy-client": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.234.0.tgz", - "integrity": "sha512-8AtR/k4vsFvjXeQbIzq/Wy7Nbk48Ou0wUEeVYPHWHPSU8QamFWORkOwmKtKMfHAyZvmqiAPeQqHFkq+UJhWyyQ==", - "dev": true, - "requires": { - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/token-providers": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.245.0.tgz", - "integrity": "sha512-m/spXR/vEXGb+zMqRUMQYVMwFZSTdK5RkddYqamYkNhIoLm60EYeRu57JsMMs5djKi8dBRSKiXwVHx0l2rXMjg==", - "dev": true, - "requires": { - "@aws-sdk/client-sso-oidc": "3.245.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/types": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.226.0.tgz", - "integrity": "sha512-MmmNHrWeO4man7wpOwrAhXlevqtOV9ZLcH4RhnG5LmRce0RFOApx24HoKENfFCcOyCm5LQBlsXCqi0dZWDWU0A==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/url-parser": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.226.0.tgz", - "integrity": "sha512-p5RLE0QWyP0OcTOLmFcLdVgUcUEzmEfmdrnOxyNzomcYb0p3vUagA5zfa1HVK2azsQJFBv28GfvMnba9bGhObg==", - "dev": true, - "requires": { - "@aws-sdk/querystring-parser": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-base64": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.208.0.tgz", - "integrity": "sha512-PQniZph5A6N7uuEOQi+1hnMz/FSOK/8kMFyFO+4DgA1dZ5pcKcn5wiFwHkcTb/BsgVqQa3Jx0VHNnvhlS8JyTg==", - "dev": true, - "requires": { - "@aws-sdk/util-buffer-from": "3.208.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-body-length-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.188.0.tgz", - "integrity": "sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-body-length-node": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.208.0.tgz", - "integrity": "sha512-3zj50e5g7t/MQf53SsuuSf0hEELzMtD8RX8C76f12OSRo2Bca4FLLYHe0TZbxcfQHom8/hOaeZEyTyMogMglqg==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-buffer-from": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.208.0.tgz", - "integrity": "sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw==", - "dev": true, - "requires": { - "@aws-sdk/is-array-buffer": "3.201.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-config-provider": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.208.0.tgz", - "integrity": "sha512-DSRqwrERUsT34ug+anlMBIFooBEGwM8GejC7q00Y/9IPrQy50KnG5PW2NiTjuLKNi7pdEOlwTSEocJE15eDZIg==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-defaults-mode-browser": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.234.0.tgz", - "integrity": "sha512-IHMKXjTbOD8XMz5+2oCOsVP94BYb9YyjXdns0aAXr2NAo7k2+RCzXQ2DebJXppGda1F6opFutoKwyVSN0cmbMw==", - "dev": true, - "requires": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "bowser": "^2.11.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-defaults-mode-node": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.234.0.tgz", - "integrity": "sha512-UGjQ+OjBYYhxFVtUY+jtr0ZZgzZh6OHtYwRhFt8IHewJXFCfZTyfsbX20szBj5y1S4HRIUJ7cwBLIytTqMbI5w==", - "dev": true, - "requires": { - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/credential-provider-imds": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-endpoints": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.245.0.tgz", - "integrity": "sha512-UNOFquB1tKx+8RT8n82Zb5tIwDyZHVPBg/m0LB0RsLETjr6krien5ASpqWezsXKIR1hftN9uaxN4bvf2dZrWHg==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-hex-encoding": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz", - "integrity": "sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-locate-window": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz", - "integrity": "sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-middleware": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.226.0.tgz", - "integrity": "sha512-B96CQnwX4gRvQdaQkdUtqvDPkrptV5+va6FVeJOocU/DbSYMAScLxtR3peMS8cnlOT6nL1Eoa42OI9AfZz1VwQ==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-retry": { - "version": "3.229.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.229.0.tgz", - "integrity": "sha512-0zKTqi0P1inD0LzIMuXRIYYQ/8c1lWMg/cfiqUcIAF1TpatlpZuN7umU0ierpBFud7S+zDgg0oemh+Nj8xliJw==", - "dev": true, - "requires": { - "@aws-sdk/service-error-classification": "3.229.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-uri-escape": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz", - "integrity": "sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-user-agent-browser": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.226.0.tgz", - "integrity": "sha512-PhBIu2h6sPJPcv2I7ELfFizdl5pNiL4LfxrasMCYXQkJvVnoXztHA1x+CQbXIdtZOIlpjC+6BjDcE0uhnpvfcA==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "bowser": "^2.11.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-user-agent-node": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.226.0.tgz", - "integrity": "sha512-othPc5Dz/pkYkxH+nZPhc1Al0HndQT8zHD4e9h+EZ+8lkd8n+IsnLfTS/mSJWrfiC6UlNRVw55cItstmJyMe/A==", - "dev": true, - "requires": { - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-utf8-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.188.0.tgz", - "integrity": "sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-utf8-node": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.208.0.tgz", - "integrity": "sha512-jKY87Acv0yWBdFxx6bveagy5FYjz+dtV8IPT7ay1E2WPWH1czoIdMAkc8tSInK31T6CRnHWkLZ1qYwCbgRfERQ==", - "dev": true, - "requires": { - "@aws-sdk/util-buffer-from": "3.208.0", - "tslib": "^2.3.1" - } - }, - "@octokit/app": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@octokit/app/-/app-13.1.1.tgz", - "integrity": "sha512-83TPUMWPAWaACe8AJVBlg6gptbDJk/33C/0V9e0yWfBqXINqF2ZutctQIcrRcyWBPlfYmFElPbElMqlspe8UWg==", - "dev": true, - "requires": { - "@octokit/auth-app": "^4.0.8", - "@octokit/auth-unauthenticated": "^3.0.0", - "@octokit/core": "^4.0.0", - "@octokit/oauth-app": "^4.0.7", - "@octokit/plugin-paginate-rest": "^5.0.0", - "@octokit/types": "^8.0.0", - "@octokit/webhooks": "^10.0.0" - } - }, - "@octokit/auth-app": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-4.0.8.tgz", - "integrity": "sha512-miI7y9FfS/fL1bSPsDaAfCGSxQ04iGLyisI2GA8N7P6eB6AkCOt+F1XXapJKRnAubQubvYF0dqxoTZYyKk93NQ==", - "dev": true, - "requires": { - "@octokit/auth-oauth-app": "^5.0.0", - "@octokit/auth-oauth-user": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", - "@types/lru-cache": "^5.1.0", - "deprecation": "^2.3.1", - "lru-cache": "^6.0.0", - "universal-github-app-jwt": "^1.1.1", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/auth-oauth-app": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-5.0.4.tgz", - "integrity": "sha512-zlWuii5hAN50vsV6SJC+uIJ7SMhyWjQMEmKJQxkmNDlieE9LjnkZnbOjqRsfcG7VO7WTl4K8ccpo/3A7Kdpmrw==", - "dev": true, - "requires": { - "@octokit/auth-oauth-device": "^4.0.0", - "@octokit/auth-oauth-user": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", - "@types/btoa-lite": "^1.0.0", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/auth-oauth-device": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-4.0.3.tgz", - "integrity": "sha512-KPTx5nMntKjNZzzltO3X4T68v22rd7Cp/TcLJXQE2U8aXPcZ9LFuww9q9Q5WUNSu3jwi3lRwzfkPguRfz1R8Vg==", - "dev": true, - "requires": { - "@octokit/oauth-methods": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/auth-oauth-user": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-2.0.4.tgz", - "integrity": "sha512-HrbDzTPqz6GcGSOUkR+wSeF3vEqsb9NMsmPja/qqqdiGmlk/Czkxctc3KeWYogHonp62Ml4kjz2VxKawrFsadQ==", - "dev": true, - "requires": { - "@octokit/auth-oauth-device": "^4.0.0", - "@octokit/oauth-methods": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/auth-token": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.2.tgz", - "integrity": "sha512-pq7CwIMV1kmzkFTimdwjAINCXKTajZErLB4wMLYapR2nuB/Jpr66+05wOTZMSCBXP6n4DdDWT2W19Bm17vU69Q==", - "dev": true, - "requires": { - "@octokit/types": "^8.0.0" - } - }, - "@octokit/auth-unauthenticated": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-3.0.3.tgz", - "integrity": "sha512-IyfLo1T5GmIC9+07hHGlD3gHtZI1Bona8PLhHXUnwcYDuZt0BhjlNJDYMoPG21C4r7v7+ZSxQHBKrGgkxpYb7A==", - "dev": true, - "requires": { - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0" - } - }, - "@octokit/core": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.1.0.tgz", - "integrity": "sha512-Czz/59VefU+kKDy+ZfDwtOIYIkFjExOKf+HA92aiTZJ6EfWpFzYQWw0l54ji8bVmyhc+mGaLUbSUmXazG7z5OQ==", - "dev": true, - "requires": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/endpoint": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.3.tgz", - "integrity": "sha512-57gRlb28bwTsdNXq+O3JTQ7ERmBTuik9+LelgcLIVfYwf235VHbN9QNo4kXExtp/h8T423cR5iJThKtFYxC7Lw==", - "dev": true, - "requires": { - "@octokit/types": "^8.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/graphql": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.4.tgz", - "integrity": "sha512-amO1M5QUQgYQo09aStR/XO7KAl13xpigcy/kI8/N1PnZYSS69fgte+xA4+c2DISKqUZfsh0wwjc2FaCt99L41A==", - "dev": true, - "requires": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/oauth-app": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-4.2.0.tgz", - "integrity": "sha512-gyGclT77RQMkVUEW3YBeAKY+LBSc5u3eC9Wn/Uwt3WhuKuu9mrV18EnNpDqmeNll+mdV02yyBROU29Tlili6gg==", - "dev": true, - "requires": { - "@octokit/auth-oauth-app": "^5.0.0", - "@octokit/auth-oauth-user": "^2.0.0", - "@octokit/auth-unauthenticated": "^3.0.0", - "@octokit/core": "^4.0.0", - "@octokit/oauth-authorization-url": "^5.0.0", - "@octokit/oauth-methods": "^2.0.0", - "@types/aws-lambda": "^8.10.83", - "fromentries": "^1.3.1", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/oauth-authorization-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-5.0.0.tgz", - "integrity": "sha512-y1WhN+ERDZTh0qZ4SR+zotgsQUE1ysKnvBt1hvDRB2WRzYtVKQjn97HEPzoehh66Fj9LwNdlZh+p6TJatT0zzg==", - "dev": true - }, - "@octokit/oauth-methods": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-2.0.4.tgz", - "integrity": "sha512-RDSa6XL+5waUVrYSmOlYROtPq0+cfwppP4VaQY/iIei3xlFb0expH6YNsxNrZktcLhJWSpm9uzeom+dQrXlS3A==", - "dev": true, - "requires": { - "@octokit/oauth-authorization-url": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", - "btoa-lite": "^1.0.0" - } - }, - "@octokit/openapi-types": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", - "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==", - "dev": true - }, - "@octokit/plugin-paginate-rest": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-5.0.1.tgz", - "integrity": "sha512-7A+rEkS70pH36Z6JivSlR7Zqepz3KVucEFVDnSrgHXzG7WLAzYwcHZbKdfTXHwuTHbkT1vKvz7dHl1+HNf6Qyw==", - "dev": true, - "requires": { - "@octokit/types": "^8.0.0" - } - }, - "@octokit/plugin-rest-endpoint-methods": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.7.0.tgz", - "integrity": "sha512-orxQ0fAHA7IpYhG2flD2AygztPlGYNAdlzYz8yrD8NDgelPfOYoRPROfEyIe035PlxvbYrgkfUZIhSBKju/Cvw==", - "dev": true, - "requires": { - "@octokit/types": "^8.0.0", - "deprecation": "^2.3.1" - } - }, - "@octokit/plugin-retry": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-4.0.3.tgz", - "integrity": "sha512-tDR+4Cs9GPPNJ7/RjTEq5ty2wqjKe1hRUV7/hch+nORow5LshlHXTT1qfYNsFPw3S9szvFFAfDEFq/xwrEpL7g==", - "dev": true, - "requires": { - "@octokit/types": "^8.0.0", - "bottleneck": "^2.15.3" - } - }, - "@octokit/plugin-throttling": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-4.3.2.tgz", - "integrity": "sha512-ZaCK599h3tzcoy0Jtdab95jgmD7X9iAk59E2E7hYKCAmnURaI4WpzwL9vckImilybUGrjY1JOWJapDs2N2D3vw==", - "dev": true, - "requires": { - "@octokit/types": "^8.0.0", - "bottleneck": "^2.15.3" - } - }, - "@octokit/request": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.2.tgz", - "integrity": "sha512-6VDqgj0HMc2FUX2awIs+sM6OwLgwHvAi4KCK3mT2H2IKRt6oH9d0fej5LluF5mck1lRR/rFWN0YIDSYXYSylbw==", - "dev": true, - "requires": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/request-error": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.2.tgz", - "integrity": "sha512-WMNOFYrSaX8zXWoJg9u/pKgWPo94JXilMLb2VManNOby9EZxrQaBe/QSC4a1TzpAlpxofg2X/jMnCyZgL6y7eg==", - "dev": true, - "requires": { - "@octokit/types": "^8.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@octokit/types": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.0.0.tgz", - "integrity": "sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg==", - "dev": true, - "requires": { - "@octokit/openapi-types": "^14.0.0" - } - }, - "@octokit/webhooks": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-10.5.0.tgz", - "integrity": "sha512-IQkogbujbLKXrpfsuH7PV33tMiivMeUhggOfimetwdaX4M7WB+mRdxwFsc8dJCOt9wCSrXfZtpd8eK3VOf4GCQ==", - "dev": true, - "requires": { - "@octokit/request-error": "^3.0.0", - "@octokit/webhooks-methods": "^3.0.0", - "@octokit/webhooks-types": "6.7.0", - "aggregate-error": "^3.1.0" - } - }, - "@octokit/webhooks-methods": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-3.0.1.tgz", - "integrity": "sha512-XftYVcBxtzC2G05kdBNn9IYLtQ+Cz6ufKkjZd0DU/qGaZEFTPzM2OabXAWG5tvL0q/I+Exio1JnRiPfetiMSEw==", - "dev": true - }, - "@octokit/webhooks-types": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-6.7.0.tgz", - "integrity": "sha512-bykm7UkSnxmb2uhSfcLM1Pity/LQ6ZBSdzy9HU0vXjR+2g+tzlmRhXb7Go8oj0TlgO+vDrTivGXju6zkzOGKjA==", - "dev": true - }, - "@types/aws-lambda": { - "version": "8.10.109", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.109.tgz", - "integrity": "sha512-/ME92FneNyXQzrAfcnQQlW1XkCZGPDlpi2ao1MJwecN+6SbeonKeggU8eybv1DfKli90FAVT1MlIZVXfwVuCyg==", - "dev": true - }, - "@types/btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==", - "dev": true - }, - "@types/jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-mM4TkDpA9oixqg1Fv2vVpOFyIVLJjm5x4k0V+K/rEsizfjD7Tk7LKk3GTtbB7KCfP0FEHQtsZqFxYA0+sijNVg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true - }, - "@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", - "dev": true - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", - "dev": true - }, - "bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", - "dev": true - }, - "bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", - "dev": true - }, - "btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==", - "dev": true - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "dev": true - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true - }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "fast-xml-parser": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.11.tgz", - "integrity": "sha512-4aUg3aNRR/WjQAcpceODG1C3x3lFANXRo8+1biqfieHmg9pyMt7qB4lQV/Ta6sJCTbA5vfD8fnA8S54JATiFUA==", - "dev": true, - "requires": { - "strnum": "^1.0.5" - } - }, - "fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - }, - "jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", - "dev": true, - "requires": { - "jws": "^3.2.2", - "lodash": "^4.17.21", - "ms": "^2.1.1", - "semver": "^7.3.8" - } - }, - "jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dev": true, - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dev": true, - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "octokit": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/octokit/-/octokit-2.0.11.tgz", - "integrity": "sha512-Ivjapy5RXWvJfmZe0BvfMM2gnNi39rjheZV/s3SjICb7gfl83JWPDmBERe4f/l2czdRnj4NVIn4YO7Q737oLCg==", - "dev": true, - "requires": { - "@octokit/app": "^13.1.1", - "@octokit/core": "^4.0.4", - "@octokit/oauth-app": "^4.0.6", - "@octokit/plugin-paginate-rest": "^5.0.0", - "@octokit/plugin-rest-endpoint-methods": "^6.0.0", - "@octokit/plugin-retry": "^4.0.3", - "@octokit/plugin-throttling": "^4.0.1", - "@octokit/types": "^8.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "dev": true - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "universal-github-app-jwt": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz", - "integrity": "sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w==", - "dev": true, - "requires": { - "@types/jsonwebtoken": "^9.0.0", - "jsonwebtoken": "^9.0.0" - } - }, - "universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } -} diff --git a/functions/identify-new-content/package.json b/functions/identify-new-content/package.json deleted file mode 100644 index c7754dc..0000000 --- a/functions/identify-new-content/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "identify-new-content", - "version": "1.0.0", - "description": "Identifies if new content was recently published on your blog", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "allenheltondev", - "license": "ISC", - "devDependencies": { - "octokit": "^2.0.10", - "@aws-sdk/client-sfn": "^3.229.0" - } -} diff --git a/functions/load-cross-posts/index.js b/functions/load-cross-posts.ts similarity index 74% rename from functions/load-cross-posts/index.js rename to functions/load-cross-posts.ts index fc15f30..73e7dc9 100644 --- a/functions/load-cross-posts/index.js +++ b/functions/load-cross-posts.ts @@ -1,9 +1,9 @@ -const { PutItemCommand, DynamoDBClient } = require('@aws-sdk/client-dynamodb'); -const { marshall } = require('@aws-sdk/util-dynamodb'); +import { PutItemCommand, DynamoDBClient } from '@aws-sdk/client-dynamodb'; +import { marshall } from '@aws-sdk/util-dynamodb'; -const ddb = new DynamoDBClient(); +const ddb = new DynamoDBClient({}); -exports.handler = async (event) => { +export const handler = async () => { try { const data = getData(); await Promise.allSettled(data.map(async (item) => { @@ -14,7 +14,7 @@ exports.handler = async (event) => { } }; -const addToDb = async (item) => { +const addToDb = async (item: { title: any; devUrl: any; url: any; mediumUrl: any; hashnodeUrl: any; }) => { await ddb.send(new PutItemCommand({ TableName: process.env.TABLE_NAME, Item: marshall({ diff --git a/functions/load-cross-posts/package-lock.json b/functions/load-cross-posts/package-lock.json deleted file mode 100644 index aace995..0000000 --- a/functions/load-cross-posts/package-lock.json +++ /dev/null @@ -1,2125 +0,0 @@ -{ - "name": "load-cross-posts", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "load-cross-posts", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@aws-sdk/client-dynamodb": "^3.229.0", - "@aws-sdk/util-dynamodb": "^3.229.0" - } - }, - "node_modules/@aws-crypto/ie11-detection": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz", - "integrity": "sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==", - "dev": true, - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@aws-crypto/sha256-browser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz", - "integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==", - "dev": true, - "dependencies": { - "@aws-crypto/ie11-detection": "^2.0.0", - "@aws-crypto/sha256-js": "^2.0.0", - "@aws-crypto/supports-web-crypto": "^2.0.0", - "@aws-crypto/util": "^2.0.0", - "@aws-sdk/types": "^3.1.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@aws-crypto/sha256-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz", - "integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==", - "dev": true, - "dependencies": { - "@aws-crypto/util": "^2.0.0", - "@aws-sdk/types": "^3.1.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@aws-crypto/supports-web-crypto": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz", - "integrity": "sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==", - "dev": true, - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@aws-crypto/util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz", - "integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "^3.110.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/util/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@aws-sdk/abort-controller": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.226.0.tgz", - "integrity": "sha512-cJVzr1xxPBd08voknXvR0RLgtZKGKt6WyDpH/BaPCu3rfSqWCDZKzwqe940eqosjmKrxC6pUZNKASIqHOQ8xxQ==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-dynamodb": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.245.0.tgz", - "integrity": "sha512-k9zPoUXQ6o91iAIceaDyz1p1tXhA3gcmw4R0oB6gREDGc9bkIqBzwS6+Zu8m4B2PPhZQIl9uMpktHw9NPyMRxA==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/client-sts": "3.245.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/credential-provider-node": "3.245.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-endpoint-discovery": "3.234.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-signing": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "@aws-sdk/util-waiter": "3.226.0", - "tslib": "^2.3.1", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.245.0.tgz", - "integrity": "sha512-dxzRwRo55ZNQ4hQigC+cishxLSWlBrbr3iszG0FLviavLDOlnVG5UUxWpOIGvwr8pYiSfM4jnfMxiwYwiCLg1g==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.245.0.tgz", - "integrity": "sha512-0pGPA00kEsu2Yq1Ul+OwftHxws5YVllm4iZrPtGnqmXr7wmf6B9lOtrMQF44y7Tfw53po6+bKz08OKTEWkkjUA==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.245.0.tgz", - "integrity": "sha512-E+7v2sy34TLni/Dmz6bTU20NWvbHYH9sVUHKQ9kHhmFopUWrs4Nt77f85PbuiKJz/irjUh9ppT5q1odJNRKRVQ==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/credential-provider-node": "3.245.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-sdk-sts": "3.226.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-signing": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "fast-xml-parser": "4.0.11", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/config-resolver": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.234.0.tgz", - "integrity": "sha512-uZxy4wzllfvgCQxVc+Iqhde0NGAnfmV2hWR6ejadJaAFTuYNvQiRg9IqJy3pkyDPqXySiJ8Bom5PoJfgn55J/A==", - "dev": true, - "dependencies": { - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-config-provider": "3.208.0", - "@aws-sdk/util-middleware": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.226.0.tgz", - "integrity": "sha512-sd8uK1ojbXxaZXlthzw/VXZwCPUtU3PjObOfr3Evj7MPIM2IH8h29foOlggx939MdLQGboJf9gKvLlvKDWtJRA==", - "dev": true, - "dependencies": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-imds": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.226.0.tgz", - "integrity": "sha512-//z/COQm2AjYFI1Lb0wKHTQSrvLFTyuKLFQGPJsKS7DPoxGOCKB7hmYerlbl01IDoCxTdyL//TyyPxbZEOQD5Q==", - "dev": true, - "dependencies": { - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.245.0.tgz", - "integrity": "sha512-1SjfVc5Wg0lLRUvwMrfjGgFkl+zfxn74gnkPr6by1QyMAoTzmeUkalPLAIqd+uHtFom9e3K633BQtX7zVPZ5XQ==", - "dev": true, - "dependencies": { - "@aws-sdk/credential-provider-env": "3.226.0", - "@aws-sdk/credential-provider-imds": "3.226.0", - "@aws-sdk/credential-provider-process": "3.226.0", - "@aws-sdk/credential-provider-sso": "3.245.0", - "@aws-sdk/credential-provider-web-identity": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.245.0.tgz", - "integrity": "sha512-Dwv8zmRLTDLeEkGrK/sLNFZSC+ahXZxr07CuID054QKACIdUEvkqYlnalRiTeXngiHGQ54u8wU7f0D32R2oL0g==", - "dev": true, - "dependencies": { - "@aws-sdk/credential-provider-env": "3.226.0", - "@aws-sdk/credential-provider-imds": "3.226.0", - "@aws-sdk/credential-provider-ini": "3.245.0", - "@aws-sdk/credential-provider-process": "3.226.0", - "@aws-sdk/credential-provider-sso": "3.245.0", - "@aws-sdk/credential-provider-web-identity": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.226.0.tgz", - "integrity": "sha512-iUDMdnrTvbvaCFhWwqyXrhvQ9+ojPqPqXhwZtY1X/Qaz+73S9gXBPJHZaZb2Ke0yKE1Ql3bJbKvmmxC/qLQMng==", - "dev": true, - "dependencies": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.245.0.tgz", - "integrity": "sha512-txWrJc0WNBhXMi7q+twjx7cs/qzgTfbQ+vbag5idRmdoUeiR8rfLvihCab2NaGg50xhh+TaoUCXrgJp3E/XjYQ==", - "dev": true, - "dependencies": { - "@aws-sdk/client-sso": "3.245.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/token-providers": "3.245.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.226.0.tgz", - "integrity": "sha512-CCpv847rLB0SFOHz2igvUMFAzeT2fD3YnY4C8jltuJoEkn0ITn1Hlgt13nTJ5BUuvyti2mvyXZHmNzhMIMrIlw==", - "dev": true, - "dependencies": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/endpoint-cache": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/endpoint-cache/-/endpoint-cache-3.208.0.tgz", - "integrity": "sha512-MkrCvaZhTb1qZCjcDH73t5n43h0Kr0GS+30lpXZ9PAnHJZPqv+vhWFPK0ZsFe1XktbS0WOoDR4ED+lWm0Dw7Rg==", - "dev": true, - "dependencies": { - "mnemonist": "0.38.3", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/fetch-http-handler": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.226.0.tgz", - "integrity": "sha512-JewZPMNEBXfi1xVnRa7pVtK/zgZD8/lQ/YnD8pq79WuMa2cwyhDtr8oqCoqsPW+WJT5ScXoMtuHxN78l8eKWgg==", - "dev": true, - "dependencies": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/querystring-builder": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/hash-node": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.226.0.tgz", - "integrity": "sha512-MdlJhJ9/Espwd0+gUXdZRsHuostB2WxEVAszWxobP0FTT9PnicqnfK7ExmW+DUAc0ywxtEbR3e0UND65rlSTVw==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-buffer-from": "3.208.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/invalid-dependency": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.226.0.tgz", - "integrity": "sha512-QXOYFmap8g9QzRjumcRCIo2GEZkdCwd7ePQW0OABWPhKHzlJ74vvBxywjU3s39EEBEluWXtZ7Iufg6GxZM4ifw==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/is-array-buffer": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz", - "integrity": "sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-content-length": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.226.0.tgz", - "integrity": "sha512-ksUzlHJN2JMuyavjA46a4sctvnrnITqt2tbGGWWrAuXY1mel2j+VbgnmJUiwHKUO6bTFBBeft5Vd1TSOb4JmiA==", - "dev": true, - "dependencies": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-endpoint": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.226.0.tgz", - "integrity": "sha512-EvLFafjtUxTT0AC9p3aBQu1/fjhWdIeK58jIXaNFONfZ3F8QbEYUPuF/SqZvJM6cWfOO9qwYKkRDbCSTYhprIg==", - "dev": true, - "dependencies": { - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-config-provider": "3.208.0", - "@aws-sdk/util-middleware": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-endpoint-discovery": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.234.0.tgz", - "integrity": "sha512-HNZJbxXrSJfITJjAisqrju7T4S7U186xcmYr28CZX9XQNm6fc/bxcqj+8JRntWsekiJYyTvQLIrKxiCaa+TA9A==", - "dev": true, - "dependencies": { - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/endpoint-cache": "3.208.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.226.0.tgz", - "integrity": "sha512-haVkWVh6BUPwKgWwkL6sDvTkcZWvJjv8AgC8jiQuSl8GLZdzHTB8Qhi3IsfFta9HAuoLjxheWBE5Z/L0UrfhLA==", - "dev": true, - "dependencies": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.226.0.tgz", - "integrity": "sha512-m9gtLrrYnpN6yckcQ09rV7ExWOLMuq8mMPF/K3DbL/YL0TuILu9i2T1W+JuxSX+K9FMG2HrLAKivE/kMLr55xA==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.226.0.tgz", - "integrity": "sha512-mwRbdKEUeuNH5TEkyZ5FWxp6bL2UC1WbY+LDv6YjHxmSMKpAoOueEdtU34PqDOLrpXXxIGHDFmjeGeMfktyEcA==", - "dev": true, - "dependencies": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-retry": { - "version": "3.235.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.235.0.tgz", - "integrity": "sha512-50WHbJGpD3SNp9763MAlHqIhXil++JdQbKejNpHg7HsJne/ao3ub+fDOfx//mMBjpzBV25BGd5UlfL6blrClSg==", - "dev": true, - "dependencies": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/service-error-classification": "3.229.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-middleware": "3.226.0", - "@aws-sdk/util-retry": "3.229.0", - "tslib": "^2.3.1", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.226.0.tgz", - "integrity": "sha512-NN9T/qoSD1kZvAT+VLny3NnlqgylYQcsgV3rvi/8lYzw/G/2s8VS6sm/VTWGGZhx08wZRv20MWzYu3bftcyqUg==", - "dev": true, - "dependencies": { - "@aws-sdk/middleware-signing": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-serde": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.226.0.tgz", - "integrity": "sha512-nPuOOAkSfx9TxzdKFx0X2bDlinOxGrqD7iof926K/AEflxGD1DBdcaDdjlYlPDW2CVE8LV/rAgbYuLxh/E/1VA==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-signing": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.226.0.tgz", - "integrity": "sha512-E6HmtPcl+IjYDDzi1xI2HpCbBq2avNWcjvCriMZWuTAtRVpnA6XDDGW5GY85IfS3A8G8vuWqEVPr8JcYUcjfew==", - "dev": true, - "dependencies": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-middleware": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-stack": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.226.0.tgz", - "integrity": "sha512-85wF29LvPvpoed60fZGDYLwv1Zpd/cM0C22WSSFPw1SSJeqO4gtFYyCg2squfT3KI6kF43IIkOCJ+L7GtryPug==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.226.0.tgz", - "integrity": "sha512-N1WnfzCW1Y5yWhVAphf8OPGTe8Df3vmV7/LdsoQfmpkCZgLZeK2o0xITkUQhRj1mbw7yp8tVFLFV3R2lMurdAQ==", - "dev": true, - "dependencies": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/node-config-provider": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.226.0.tgz", - "integrity": "sha512-B8lQDqiRk7X5izFEUMXmi8CZLOKCTWQJU9HQf3ako+sF0gexo4nHN3jhoRWyLtcgC5S3on/2jxpAcqtm7kuY3w==", - "dev": true, - "dependencies": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/node-http-handler": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.226.0.tgz", - "integrity": "sha512-xQCddnZNMiPmjr3W7HYM+f5ir4VfxgJh37eqZwX6EZmyItFpNNeVzKUgA920ka1VPz/ZUYB+2OFGiX3LCLkkaA==", - "dev": true, - "dependencies": { - "@aws-sdk/abort-controller": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/querystring-builder": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/property-provider": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.226.0.tgz", - "integrity": "sha512-TsljjG+Sg0LmdgfiAlWohluWKnxB/k8xenjeozZfzOr5bHmNHtdbWv6BtNvD/R83hw7SFXxbJHlD5H4u9p2NFg==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/protocol-http": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.226.0.tgz", - "integrity": "sha512-zWkVqiTA9RXL6y0hhfZc9bcU4DX2NI6Hw9IhQmSPeM59mdbPjJlY4bLlMr5YxywqO3yQ/ylNoAfrEzrDjlOSRg==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/querystring-builder": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.226.0.tgz", - "integrity": "sha512-LVurypuNeotO4lmirKXRC4NYrZRAyMJXuwO0f2a5ZAUJCjauwYrifKue6yCfU7bls7gut7nfcR6B99WBYpHs3g==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-uri-escape": "3.201.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/querystring-parser": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.226.0.tgz", - "integrity": "sha512-FzB+VrQ47KAFxiPt2YXrKZ8AOLZQqGTLCKHzx4bjxGmwgsjV8yIbtJiJhZLMcUQV4LtGeIY9ixIqQhGvnZHE4A==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/service-error-classification": { - "version": "3.229.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.229.0.tgz", - "integrity": "sha512-dnzWWQ0/NoWMUZ5C0DW3dPm0wC1O76Y/SpKbuJzWPkx1EYy6r8p32Ly4D9vUzrKDbRGf48YHIF2kOkBmu21CLg==", - "dev": true, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/shared-ini-file-loader": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.226.0.tgz", - "integrity": "sha512-661VQefsARxVyyV2FX9V61V+nNgImk7aN2hYlFKla6BCwZfMng+dEtD0xVGyg1PfRw0qvEv5LQyxMVgHcUSevA==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.226.0.tgz", - "integrity": "sha512-/R5q5agdPd7HJB68XMzpxrNPk158EHUvkFkuRu5Qf3kkkHebEzWEBlWoVpUe6ss4rP9Tqcue6xPuaftEmhjpYw==", - "dev": true, - "dependencies": { - "@aws-sdk/is-array-buffer": "3.201.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-hex-encoding": "3.201.0", - "@aws-sdk/util-middleware": "3.226.0", - "@aws-sdk/util-uri-escape": "3.201.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/smithy-client": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.234.0.tgz", - "integrity": "sha512-8AtR/k4vsFvjXeQbIzq/Wy7Nbk48Ou0wUEeVYPHWHPSU8QamFWORkOwmKtKMfHAyZvmqiAPeQqHFkq+UJhWyyQ==", - "dev": true, - "dependencies": { - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.245.0.tgz", - "integrity": "sha512-m/spXR/vEXGb+zMqRUMQYVMwFZSTdK5RkddYqamYkNhIoLm60EYeRu57JsMMs5djKi8dBRSKiXwVHx0l2rXMjg==", - "dev": true, - "dependencies": { - "@aws-sdk/client-sso-oidc": "3.245.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/types": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.226.0.tgz", - "integrity": "sha512-MmmNHrWeO4man7wpOwrAhXlevqtOV9ZLcH4RhnG5LmRce0RFOApx24HoKENfFCcOyCm5LQBlsXCqi0dZWDWU0A==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/url-parser": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.226.0.tgz", - "integrity": "sha512-p5RLE0QWyP0OcTOLmFcLdVgUcUEzmEfmdrnOxyNzomcYb0p3vUagA5zfa1HVK2azsQJFBv28GfvMnba9bGhObg==", - "dev": true, - "dependencies": { - "@aws-sdk/querystring-parser": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/util-base64": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.208.0.tgz", - "integrity": "sha512-PQniZph5A6N7uuEOQi+1hnMz/FSOK/8kMFyFO+4DgA1dZ5pcKcn5wiFwHkcTb/BsgVqQa3Jx0VHNnvhlS8JyTg==", - "dev": true, - "dependencies": { - "@aws-sdk/util-buffer-from": "3.208.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-body-length-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.188.0.tgz", - "integrity": "sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/util-body-length-node": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.208.0.tgz", - "integrity": "sha512-3zj50e5g7t/MQf53SsuuSf0hEELzMtD8RX8C76f12OSRo2Bca4FLLYHe0TZbxcfQHom8/hOaeZEyTyMogMglqg==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-buffer-from": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.208.0.tgz", - "integrity": "sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw==", - "dev": true, - "dependencies": { - "@aws-sdk/is-array-buffer": "3.201.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-config-provider": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.208.0.tgz", - "integrity": "sha512-DSRqwrERUsT34ug+anlMBIFooBEGwM8GejC7q00Y/9IPrQy50KnG5PW2NiTjuLKNi7pdEOlwTSEocJE15eDZIg==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-defaults-mode-browser": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.234.0.tgz", - "integrity": "sha512-IHMKXjTbOD8XMz5+2oCOsVP94BYb9YyjXdns0aAXr2NAo7k2+RCzXQ2DebJXppGda1F6opFutoKwyVSN0cmbMw==", - "dev": true, - "dependencies": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "bowser": "^2.11.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@aws-sdk/util-defaults-mode-node": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.234.0.tgz", - "integrity": "sha512-UGjQ+OjBYYhxFVtUY+jtr0ZZgzZh6OHtYwRhFt8IHewJXFCfZTyfsbX20szBj5y1S4HRIUJ7cwBLIytTqMbI5w==", - "dev": true, - "dependencies": { - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/credential-provider-imds": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@aws-sdk/util-dynamodb": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.245.0.tgz", - "integrity": "sha512-Wx06Ey92DRRSQTFfpQs1DkHSoajcwVu2TLWTg07yHXgGxdi6EveJPNqh111ot5yzHGmzPIHas/IPZe3hDttzcw==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.245.0.tgz", - "integrity": "sha512-UNOFquB1tKx+8RT8n82Zb5tIwDyZHVPBg/m0LB0RsLETjr6krien5ASpqWezsXKIR1hftN9uaxN4bvf2dZrWHg==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-hex-encoding": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz", - "integrity": "sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz", - "integrity": "sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-middleware": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.226.0.tgz", - "integrity": "sha512-B96CQnwX4gRvQdaQkdUtqvDPkrptV5+va6FVeJOocU/DbSYMAScLxtR3peMS8cnlOT6nL1Eoa42OI9AfZz1VwQ==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-retry": { - "version": "3.229.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.229.0.tgz", - "integrity": "sha512-0zKTqi0P1inD0LzIMuXRIYYQ/8c1lWMg/cfiqUcIAF1TpatlpZuN7umU0ierpBFud7S+zDgg0oemh+Nj8xliJw==", - "dev": true, - "dependencies": { - "@aws-sdk/service-error-classification": "3.229.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@aws-sdk/util-uri-escape": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz", - "integrity": "sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.226.0.tgz", - "integrity": "sha512-PhBIu2h6sPJPcv2I7ELfFizdl5pNiL4LfxrasMCYXQkJvVnoXztHA1x+CQbXIdtZOIlpjC+6BjDcE0uhnpvfcA==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.226.0", - "bowser": "^2.11.0", - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.226.0.tgz", - "integrity": "sha512-othPc5Dz/pkYkxH+nZPhc1Al0HndQT8zHD4e9h+EZ+8lkd8n+IsnLfTS/mSJWrfiC6UlNRVw55cItstmJyMe/A==", - "dev": true, - "dependencies": { - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "node_modules/@aws-sdk/util-utf8-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.188.0.tgz", - "integrity": "sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/util-utf8-node": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.208.0.tgz", - "integrity": "sha512-jKY87Acv0yWBdFxx6bveagy5FYjz+dtV8IPT7ay1E2WPWH1czoIdMAkc8tSInK31T6CRnHWkLZ1qYwCbgRfERQ==", - "dev": true, - "dependencies": { - "@aws-sdk/util-buffer-from": "3.208.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-waiter": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.226.0.tgz", - "integrity": "sha512-qYQMRxnu5k8qQihJXoIWMkBOj0+XkHHj/drLdbRnwL6ni6NcG8++cs9M3DSjIcxmxgF/7SLpDjn1H3sC7cYo4g==", - "dev": true, - "dependencies": { - "@aws-sdk/abort-controller": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", - "dev": true - }, - "node_modules/fast-xml-parser": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.11.tgz", - "integrity": "sha512-4aUg3aNRR/WjQAcpceODG1C3x3lFANXRo8+1biqfieHmg9pyMt7qB4lQV/Ta6sJCTbA5vfD8fnA8S54JATiFUA==", - "dev": true, - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - }, - "funding": { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - }, - "node_modules/mnemonist": { - "version": "0.38.3", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.3.tgz", - "integrity": "sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==", - "dev": true, - "dependencies": { - "obliterator": "^1.6.1" - } - }, - "node_modules/obliterator": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-1.6.1.tgz", - "integrity": "sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig==", - "dev": true - }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "dev": true - }, - "node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - } - }, - "dependencies": { - "@aws-crypto/ie11-detection": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz", - "integrity": "sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==", - "dev": true, - "requires": { - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@aws-crypto/sha256-browser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz", - "integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==", - "dev": true, - "requires": { - "@aws-crypto/ie11-detection": "^2.0.0", - "@aws-crypto/sha256-js": "^2.0.0", - "@aws-crypto/supports-web-crypto": "^2.0.0", - "@aws-crypto/util": "^2.0.0", - "@aws-sdk/types": "^3.1.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@aws-crypto/sha256-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz", - "integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==", - "dev": true, - "requires": { - "@aws-crypto/util": "^2.0.0", - "@aws-sdk/types": "^3.1.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@aws-crypto/supports-web-crypto": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz", - "integrity": "sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==", - "dev": true, - "requires": { - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@aws-crypto/util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz", - "integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==", - "dev": true, - "requires": { - "@aws-sdk/types": "^3.110.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@aws-sdk/abort-controller": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.226.0.tgz", - "integrity": "sha512-cJVzr1xxPBd08voknXvR0RLgtZKGKt6WyDpH/BaPCu3rfSqWCDZKzwqe940eqosjmKrxC6pUZNKASIqHOQ8xxQ==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/client-dynamodb": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.245.0.tgz", - "integrity": "sha512-k9zPoUXQ6o91iAIceaDyz1p1tXhA3gcmw4R0oB6gREDGc9bkIqBzwS6+Zu8m4B2PPhZQIl9uMpktHw9NPyMRxA==", - "dev": true, - "requires": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/client-sts": "3.245.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/credential-provider-node": "3.245.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-endpoint-discovery": "3.234.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-signing": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "@aws-sdk/util-waiter": "3.226.0", - "tslib": "^2.3.1", - "uuid": "^8.3.2" - } - }, - "@aws-sdk/client-sso": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.245.0.tgz", - "integrity": "sha512-dxzRwRo55ZNQ4hQigC+cishxLSWlBrbr3iszG0FLviavLDOlnVG5UUxWpOIGvwr8pYiSfM4jnfMxiwYwiCLg1g==", - "dev": true, - "requires": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/client-sso-oidc": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.245.0.tgz", - "integrity": "sha512-0pGPA00kEsu2Yq1Ul+OwftHxws5YVllm4iZrPtGnqmXr7wmf6B9lOtrMQF44y7Tfw53po6+bKz08OKTEWkkjUA==", - "dev": true, - "requires": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/client-sts": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.245.0.tgz", - "integrity": "sha512-E+7v2sy34TLni/Dmz6bTU20NWvbHYH9sVUHKQ9kHhmFopUWrs4Nt77f85PbuiKJz/irjUh9ppT5q1odJNRKRVQ==", - "dev": true, - "requires": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/credential-provider-node": "3.245.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-sdk-sts": "3.226.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-signing": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "fast-xml-parser": "4.0.11", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/config-resolver": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.234.0.tgz", - "integrity": "sha512-uZxy4wzllfvgCQxVc+Iqhde0NGAnfmV2hWR6ejadJaAFTuYNvQiRg9IqJy3pkyDPqXySiJ8Bom5PoJfgn55J/A==", - "dev": true, - "requires": { - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-config-provider": "3.208.0", - "@aws-sdk/util-middleware": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/credential-provider-env": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.226.0.tgz", - "integrity": "sha512-sd8uK1ojbXxaZXlthzw/VXZwCPUtU3PjObOfr3Evj7MPIM2IH8h29foOlggx939MdLQGboJf9gKvLlvKDWtJRA==", - "dev": true, - "requires": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/credential-provider-imds": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.226.0.tgz", - "integrity": "sha512-//z/COQm2AjYFI1Lb0wKHTQSrvLFTyuKLFQGPJsKS7DPoxGOCKB7hmYerlbl01IDoCxTdyL//TyyPxbZEOQD5Q==", - "dev": true, - "requires": { - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/credential-provider-ini": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.245.0.tgz", - "integrity": "sha512-1SjfVc5Wg0lLRUvwMrfjGgFkl+zfxn74gnkPr6by1QyMAoTzmeUkalPLAIqd+uHtFom9e3K633BQtX7zVPZ5XQ==", - "dev": true, - "requires": { - "@aws-sdk/credential-provider-env": "3.226.0", - "@aws-sdk/credential-provider-imds": "3.226.0", - "@aws-sdk/credential-provider-process": "3.226.0", - "@aws-sdk/credential-provider-sso": "3.245.0", - "@aws-sdk/credential-provider-web-identity": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/credential-provider-node": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.245.0.tgz", - "integrity": "sha512-Dwv8zmRLTDLeEkGrK/sLNFZSC+ahXZxr07CuID054QKACIdUEvkqYlnalRiTeXngiHGQ54u8wU7f0D32R2oL0g==", - "dev": true, - "requires": { - "@aws-sdk/credential-provider-env": "3.226.0", - "@aws-sdk/credential-provider-imds": "3.226.0", - "@aws-sdk/credential-provider-ini": "3.245.0", - "@aws-sdk/credential-provider-process": "3.226.0", - "@aws-sdk/credential-provider-sso": "3.245.0", - "@aws-sdk/credential-provider-web-identity": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/credential-provider-process": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.226.0.tgz", - "integrity": "sha512-iUDMdnrTvbvaCFhWwqyXrhvQ9+ojPqPqXhwZtY1X/Qaz+73S9gXBPJHZaZb2Ke0yKE1Ql3bJbKvmmxC/qLQMng==", - "dev": true, - "requires": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/credential-provider-sso": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.245.0.tgz", - "integrity": "sha512-txWrJc0WNBhXMi7q+twjx7cs/qzgTfbQ+vbag5idRmdoUeiR8rfLvihCab2NaGg50xhh+TaoUCXrgJp3E/XjYQ==", - "dev": true, - "requires": { - "@aws-sdk/client-sso": "3.245.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/token-providers": "3.245.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/credential-provider-web-identity": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.226.0.tgz", - "integrity": "sha512-CCpv847rLB0SFOHz2igvUMFAzeT2fD3YnY4C8jltuJoEkn0ITn1Hlgt13nTJ5BUuvyti2mvyXZHmNzhMIMrIlw==", - "dev": true, - "requires": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/endpoint-cache": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/endpoint-cache/-/endpoint-cache-3.208.0.tgz", - "integrity": "sha512-MkrCvaZhTb1qZCjcDH73t5n43h0Kr0GS+30lpXZ9PAnHJZPqv+vhWFPK0ZsFe1XktbS0WOoDR4ED+lWm0Dw7Rg==", - "dev": true, - "requires": { - "mnemonist": "0.38.3", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/fetch-http-handler": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.226.0.tgz", - "integrity": "sha512-JewZPMNEBXfi1xVnRa7pVtK/zgZD8/lQ/YnD8pq79WuMa2cwyhDtr8oqCoqsPW+WJT5ScXoMtuHxN78l8eKWgg==", - "dev": true, - "requires": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/querystring-builder": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/hash-node": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.226.0.tgz", - "integrity": "sha512-MdlJhJ9/Espwd0+gUXdZRsHuostB2WxEVAszWxobP0FTT9PnicqnfK7ExmW+DUAc0ywxtEbR3e0UND65rlSTVw==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-buffer-from": "3.208.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/invalid-dependency": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.226.0.tgz", - "integrity": "sha512-QXOYFmap8g9QzRjumcRCIo2GEZkdCwd7ePQW0OABWPhKHzlJ74vvBxywjU3s39EEBEluWXtZ7Iufg6GxZM4ifw==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/is-array-buffer": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz", - "integrity": "sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-content-length": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.226.0.tgz", - "integrity": "sha512-ksUzlHJN2JMuyavjA46a4sctvnrnITqt2tbGGWWrAuXY1mel2j+VbgnmJUiwHKUO6bTFBBeft5Vd1TSOb4JmiA==", - "dev": true, - "requires": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-endpoint": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.226.0.tgz", - "integrity": "sha512-EvLFafjtUxTT0AC9p3aBQu1/fjhWdIeK58jIXaNFONfZ3F8QbEYUPuF/SqZvJM6cWfOO9qwYKkRDbCSTYhprIg==", - "dev": true, - "requires": { - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-config-provider": "3.208.0", - "@aws-sdk/util-middleware": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-endpoint-discovery": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.234.0.tgz", - "integrity": "sha512-HNZJbxXrSJfITJjAisqrju7T4S7U186xcmYr28CZX9XQNm6fc/bxcqj+8JRntWsekiJYyTvQLIrKxiCaa+TA9A==", - "dev": true, - "requires": { - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/endpoint-cache": "3.208.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-host-header": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.226.0.tgz", - "integrity": "sha512-haVkWVh6BUPwKgWwkL6sDvTkcZWvJjv8AgC8jiQuSl8GLZdzHTB8Qhi3IsfFta9HAuoLjxheWBE5Z/L0UrfhLA==", - "dev": true, - "requires": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-logger": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.226.0.tgz", - "integrity": "sha512-m9gtLrrYnpN6yckcQ09rV7ExWOLMuq8mMPF/K3DbL/YL0TuILu9i2T1W+JuxSX+K9FMG2HrLAKivE/kMLr55xA==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-recursion-detection": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.226.0.tgz", - "integrity": "sha512-mwRbdKEUeuNH5TEkyZ5FWxp6bL2UC1WbY+LDv6YjHxmSMKpAoOueEdtU34PqDOLrpXXxIGHDFmjeGeMfktyEcA==", - "dev": true, - "requires": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-retry": { - "version": "3.235.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.235.0.tgz", - "integrity": "sha512-50WHbJGpD3SNp9763MAlHqIhXil++JdQbKejNpHg7HsJne/ao3ub+fDOfx//mMBjpzBV25BGd5UlfL6blrClSg==", - "dev": true, - "requires": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/service-error-classification": "3.229.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-middleware": "3.226.0", - "@aws-sdk/util-retry": "3.229.0", - "tslib": "^2.3.1", - "uuid": "^8.3.2" - } - }, - "@aws-sdk/middleware-sdk-sts": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.226.0.tgz", - "integrity": "sha512-NN9T/qoSD1kZvAT+VLny3NnlqgylYQcsgV3rvi/8lYzw/G/2s8VS6sm/VTWGGZhx08wZRv20MWzYu3bftcyqUg==", - "dev": true, - "requires": { - "@aws-sdk/middleware-signing": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-serde": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.226.0.tgz", - "integrity": "sha512-nPuOOAkSfx9TxzdKFx0X2bDlinOxGrqD7iof926K/AEflxGD1DBdcaDdjlYlPDW2CVE8LV/rAgbYuLxh/E/1VA==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-signing": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.226.0.tgz", - "integrity": "sha512-E6HmtPcl+IjYDDzi1xI2HpCbBq2avNWcjvCriMZWuTAtRVpnA6XDDGW5GY85IfS3A8G8vuWqEVPr8JcYUcjfew==", - "dev": true, - "requires": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-middleware": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-stack": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.226.0.tgz", - "integrity": "sha512-85wF29LvPvpoed60fZGDYLwv1Zpd/cM0C22WSSFPw1SSJeqO4gtFYyCg2squfT3KI6kF43IIkOCJ+L7GtryPug==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-user-agent": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.226.0.tgz", - "integrity": "sha512-N1WnfzCW1Y5yWhVAphf8OPGTe8Df3vmV7/LdsoQfmpkCZgLZeK2o0xITkUQhRj1mbw7yp8tVFLFV3R2lMurdAQ==", - "dev": true, - "requires": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/node-config-provider": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.226.0.tgz", - "integrity": "sha512-B8lQDqiRk7X5izFEUMXmi8CZLOKCTWQJU9HQf3ako+sF0gexo4nHN3jhoRWyLtcgC5S3on/2jxpAcqtm7kuY3w==", - "dev": true, - "requires": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/node-http-handler": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.226.0.tgz", - "integrity": "sha512-xQCddnZNMiPmjr3W7HYM+f5ir4VfxgJh37eqZwX6EZmyItFpNNeVzKUgA920ka1VPz/ZUYB+2OFGiX3LCLkkaA==", - "dev": true, - "requires": { - "@aws-sdk/abort-controller": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/querystring-builder": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/property-provider": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.226.0.tgz", - "integrity": "sha512-TsljjG+Sg0LmdgfiAlWohluWKnxB/k8xenjeozZfzOr5bHmNHtdbWv6BtNvD/R83hw7SFXxbJHlD5H4u9p2NFg==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/protocol-http": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.226.0.tgz", - "integrity": "sha512-zWkVqiTA9RXL6y0hhfZc9bcU4DX2NI6Hw9IhQmSPeM59mdbPjJlY4bLlMr5YxywqO3yQ/ylNoAfrEzrDjlOSRg==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/querystring-builder": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.226.0.tgz", - "integrity": "sha512-LVurypuNeotO4lmirKXRC4NYrZRAyMJXuwO0f2a5ZAUJCjauwYrifKue6yCfU7bls7gut7nfcR6B99WBYpHs3g==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-uri-escape": "3.201.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/querystring-parser": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.226.0.tgz", - "integrity": "sha512-FzB+VrQ47KAFxiPt2YXrKZ8AOLZQqGTLCKHzx4bjxGmwgsjV8yIbtJiJhZLMcUQV4LtGeIY9ixIqQhGvnZHE4A==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/service-error-classification": { - "version": "3.229.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.229.0.tgz", - "integrity": "sha512-dnzWWQ0/NoWMUZ5C0DW3dPm0wC1O76Y/SpKbuJzWPkx1EYy6r8p32Ly4D9vUzrKDbRGf48YHIF2kOkBmu21CLg==", - "dev": true - }, - "@aws-sdk/shared-ini-file-loader": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.226.0.tgz", - "integrity": "sha512-661VQefsARxVyyV2FX9V61V+nNgImk7aN2hYlFKla6BCwZfMng+dEtD0xVGyg1PfRw0qvEv5LQyxMVgHcUSevA==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/signature-v4": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.226.0.tgz", - "integrity": "sha512-/R5q5agdPd7HJB68XMzpxrNPk158EHUvkFkuRu5Qf3kkkHebEzWEBlWoVpUe6ss4rP9Tqcue6xPuaftEmhjpYw==", - "dev": true, - "requires": { - "@aws-sdk/is-array-buffer": "3.201.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-hex-encoding": "3.201.0", - "@aws-sdk/util-middleware": "3.226.0", - "@aws-sdk/util-uri-escape": "3.201.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/smithy-client": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.234.0.tgz", - "integrity": "sha512-8AtR/k4vsFvjXeQbIzq/Wy7Nbk48Ou0wUEeVYPHWHPSU8QamFWORkOwmKtKMfHAyZvmqiAPeQqHFkq+UJhWyyQ==", - "dev": true, - "requires": { - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/token-providers": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.245.0.tgz", - "integrity": "sha512-m/spXR/vEXGb+zMqRUMQYVMwFZSTdK5RkddYqamYkNhIoLm60EYeRu57JsMMs5djKi8dBRSKiXwVHx0l2rXMjg==", - "dev": true, - "requires": { - "@aws-sdk/client-sso-oidc": "3.245.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/types": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.226.0.tgz", - "integrity": "sha512-MmmNHrWeO4man7wpOwrAhXlevqtOV9ZLcH4RhnG5LmRce0RFOApx24HoKENfFCcOyCm5LQBlsXCqi0dZWDWU0A==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/url-parser": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.226.0.tgz", - "integrity": "sha512-p5RLE0QWyP0OcTOLmFcLdVgUcUEzmEfmdrnOxyNzomcYb0p3vUagA5zfa1HVK2azsQJFBv28GfvMnba9bGhObg==", - "dev": true, - "requires": { - "@aws-sdk/querystring-parser": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-base64": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.208.0.tgz", - "integrity": "sha512-PQniZph5A6N7uuEOQi+1hnMz/FSOK/8kMFyFO+4DgA1dZ5pcKcn5wiFwHkcTb/BsgVqQa3Jx0VHNnvhlS8JyTg==", - "dev": true, - "requires": { - "@aws-sdk/util-buffer-from": "3.208.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-body-length-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.188.0.tgz", - "integrity": "sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-body-length-node": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.208.0.tgz", - "integrity": "sha512-3zj50e5g7t/MQf53SsuuSf0hEELzMtD8RX8C76f12OSRo2Bca4FLLYHe0TZbxcfQHom8/hOaeZEyTyMogMglqg==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-buffer-from": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.208.0.tgz", - "integrity": "sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw==", - "dev": true, - "requires": { - "@aws-sdk/is-array-buffer": "3.201.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-config-provider": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.208.0.tgz", - "integrity": "sha512-DSRqwrERUsT34ug+anlMBIFooBEGwM8GejC7q00Y/9IPrQy50KnG5PW2NiTjuLKNi7pdEOlwTSEocJE15eDZIg==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-defaults-mode-browser": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.234.0.tgz", - "integrity": "sha512-IHMKXjTbOD8XMz5+2oCOsVP94BYb9YyjXdns0aAXr2NAo7k2+RCzXQ2DebJXppGda1F6opFutoKwyVSN0cmbMw==", - "dev": true, - "requires": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "bowser": "^2.11.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-defaults-mode-node": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.234.0.tgz", - "integrity": "sha512-UGjQ+OjBYYhxFVtUY+jtr0ZZgzZh6OHtYwRhFt8IHewJXFCfZTyfsbX20szBj5y1S4HRIUJ7cwBLIytTqMbI5w==", - "dev": true, - "requires": { - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/credential-provider-imds": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-dynamodb": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.245.0.tgz", - "integrity": "sha512-Wx06Ey92DRRSQTFfpQs1DkHSoajcwVu2TLWTg07yHXgGxdi6EveJPNqh111ot5yzHGmzPIHas/IPZe3hDttzcw==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-endpoints": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.245.0.tgz", - "integrity": "sha512-UNOFquB1tKx+8RT8n82Zb5tIwDyZHVPBg/m0LB0RsLETjr6krien5ASpqWezsXKIR1hftN9uaxN4bvf2dZrWHg==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-hex-encoding": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz", - "integrity": "sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-locate-window": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz", - "integrity": "sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-middleware": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.226.0.tgz", - "integrity": "sha512-B96CQnwX4gRvQdaQkdUtqvDPkrptV5+va6FVeJOocU/DbSYMAScLxtR3peMS8cnlOT6nL1Eoa42OI9AfZz1VwQ==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-retry": { - "version": "3.229.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.229.0.tgz", - "integrity": "sha512-0zKTqi0P1inD0LzIMuXRIYYQ/8c1lWMg/cfiqUcIAF1TpatlpZuN7umU0ierpBFud7S+zDgg0oemh+Nj8xliJw==", - "dev": true, - "requires": { - "@aws-sdk/service-error-classification": "3.229.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-uri-escape": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz", - "integrity": "sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-user-agent-browser": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.226.0.tgz", - "integrity": "sha512-PhBIu2h6sPJPcv2I7ELfFizdl5pNiL4LfxrasMCYXQkJvVnoXztHA1x+CQbXIdtZOIlpjC+6BjDcE0uhnpvfcA==", - "dev": true, - "requires": { - "@aws-sdk/types": "3.226.0", - "bowser": "^2.11.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-user-agent-node": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.226.0.tgz", - "integrity": "sha512-othPc5Dz/pkYkxH+nZPhc1Al0HndQT8zHD4e9h+EZ+8lkd8n+IsnLfTS/mSJWrfiC6UlNRVw55cItstmJyMe/A==", - "dev": true, - "requires": { - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-utf8-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.188.0.tgz", - "integrity": "sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-utf8-node": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.208.0.tgz", - "integrity": "sha512-jKY87Acv0yWBdFxx6bveagy5FYjz+dtV8IPT7ay1E2WPWH1czoIdMAkc8tSInK31T6CRnHWkLZ1qYwCbgRfERQ==", - "dev": true, - "requires": { - "@aws-sdk/util-buffer-from": "3.208.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-waiter": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.226.0.tgz", - "integrity": "sha512-qYQMRxnu5k8qQihJXoIWMkBOj0+XkHHj/drLdbRnwL6ni6NcG8++cs9M3DSjIcxmxgF/7SLpDjn1H3sC7cYo4g==", - "dev": true, - "requires": { - "@aws-sdk/abort-controller": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", - "dev": true - }, - "fast-xml-parser": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.11.tgz", - "integrity": "sha512-4aUg3aNRR/WjQAcpceODG1C3x3lFANXRo8+1biqfieHmg9pyMt7qB4lQV/Ta6sJCTbA5vfD8fnA8S54JATiFUA==", - "dev": true, - "requires": { - "strnum": "^1.0.5" - } - }, - "mnemonist": { - "version": "0.38.3", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.3.tgz", - "integrity": "sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==", - "dev": true, - "requires": { - "obliterator": "^1.6.1" - } - }, - "obliterator": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-1.6.1.tgz", - "integrity": "sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig==", - "dev": true - }, - "strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "dev": true - }, - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - } - } -} diff --git a/functions/load-cross-posts/package.json b/functions/load-cross-posts/package.json deleted file mode 100644 index 138aeae..0000000 --- a/functions/load-cross-posts/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "load-cross-posts", - "version": "1.0.0", - "description": "Bootstrap your existing articles into the database", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "allenheltondev", - "license": "ISC", - "devDependencies": { - "@aws-sdk/client-dynamodb": "^3.229.0", - "@aws-sdk/util-dynamodb": "^3.229.0" - } -} diff --git a/functions/parse-post/index.js b/functions/parse-post.ts similarity index 84% rename from functions/parse-post/index.js rename to functions/parse-post.ts index 2becc7a..18a8a2b 100644 --- a/functions/parse-post/index.js +++ b/functions/parse-post.ts @@ -1,6 +1,6 @@ const frontmatter = require('@github-docs/frontmatter'); -exports.handler = async (state) => { +export const handler = async (state: { post: any; format: string; articleCatalog: any; }) => { const details = frontmatter(state.post); const links = getLinks(details.content); const tweets = getTweets(details.content); @@ -23,7 +23,7 @@ exports.handler = async (state) => { }; }; -const formatMediumData = (postDetail, articleCatalog, links, tweets) => { +const formatMediumData = (postDetail: { data: { title: any; description: any; image_attribution: any; image: any; categories: any; tags: any; slug: string; }; content: string | any[]; }, articleCatalog: any[], links: any, tweets: any) => { let mediumContent = `\n# ${postDetail.data.title}\n` + `#### ${postDetail.data.description}\n` + `![${postDetail.data.image_attribution ?? ''}](${postDetail.data.image})\n` @@ -58,7 +58,7 @@ const formatMediumData = (postDetail, articleCatalog, links, tweets) => { return mediumData; }; -const formatDevData = (postDetail, articleCatalog, links, tweets) => { +const formatDevData = (postDetail: { content: string; data: { title: any; image: any; slug: string; description: any; categories: any[]; tags: any[]; }; }, articleCatalog: any[], links: any, tweets: any) => { let devContent = postDetail.content.slice(0); for (const link of links) { const replacement = articleCatalog.find(c => c.links.M.url.S == link[1]); @@ -90,7 +90,7 @@ const formatDevData = (postDetail, articleCatalog, links, tweets) => { return { article: devData }; }; -const formatHashnodeData = (postDetail, articleCatalog, links, tweets) => { +const formatHashnodeData = (postDetail: { content: string; data: { title: any; image: any; slug: string; description: any; }; }, articleCatalog: any[], links: any, tweets: any) => { let hashnodeContent = postDetail.content.slice(0); for (const link of links) { const replacement = articleCatalog.find(c => c.links.M.url.S == link[1]); @@ -128,16 +128,16 @@ const formatHashnodeData = (postDetail, articleCatalog, links, tweets) => { return hashnodeData; }; -const getLinks = (postContent) => { +const getLinks = (postContent: string) => { const linkMatches = postContent.matchAll(/\(([^\)]*)\)/g); return linkMatches; }; -const getTweets = (postContent) => { +const getTweets = (postContent: string) => { const tweetMatches = postContent.matchAll(/\{\{<tweet user="([a-zA-Z0-9]*)" id="([\d]*)">\}\}/g); return tweetMatches; }; -const getTweetUrl = (tweet) => { +const getTweetUrl = (tweet: string[]) => { return `https://twitter.com/${tweet[1]}/status/${tweet[2]}`; } \ No newline at end of file diff --git a/functions/parse-post/package-lock.json b/functions/parse-post/package-lock.json deleted file mode 100644 index 16c18b4..0000000 --- a/functions/parse-post/package-lock.json +++ /dev/null @@ -1,255 +0,0 @@ -{ - "name": "parse-post", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "parse-post", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@github-docs/frontmatter": "^1.3.1" - } - }, - "node_modules/@github-docs/frontmatter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@github-docs/frontmatter/-/frontmatter-1.3.1.tgz", - "integrity": "sha512-1BFouSuheb7GelUDlLmv/Qrpi8Ybtyfch91grZbqx+aGzDEh7CAna+mAHIYaaN3HppNB8JnppGvX2DXM4v0pzQ==", - "dev": true, - "dependencies": { - "gray-matter": "^4.0.2", - "lodash": "^4.17.15", - "revalidator": "^0.3.1" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "dev": true, - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/revalidator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.3.1.tgz", - "integrity": "sha512-orq+Nw+V5pDpQwGEuN2n1AgJ+0A8WqhFHKt5KgkxfAowUKgO1CWV32IR3TNB4g9/FX3gJt9qBJO8DYlwonnB0Q==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - } - }, - "dependencies": { - "@github-docs/frontmatter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@github-docs/frontmatter/-/frontmatter-1.3.1.tgz", - "integrity": "sha512-1BFouSuheb7GelUDlLmv/Qrpi8Ybtyfch91grZbqx+aGzDEh7CAna+mAHIYaaN3HppNB8JnppGvX2DXM4v0pzQ==", - "dev": true, - "requires": { - "gray-matter": "^4.0.2", - "lodash": "^4.17.15", - "revalidator": "^0.3.1" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "dev": true, - "requires": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "revalidator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.3.1.tgz", - "integrity": "sha512-orq+Nw+V5pDpQwGEuN2n1AgJ+0A8WqhFHKt5KgkxfAowUKgO1CWV32IR3TNB4g9/FX3gJt9qBJO8DYlwonnB0Q==", - "dev": true - }, - "section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "dev": true - } - } -} diff --git a/functions/parse-post/package.json b/functions/parse-post/package.json deleted file mode 100644 index 2efd4a4..0000000 --- a/functions/parse-post/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "parse-post", - "version": "1.0.0", - "description": "Parse a markdown file and convert it to a format for a specific blogging site", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "allenheltondev", - "license": "ISC", - "devDependencies": { - "@github-docs/frontmatter": "^1.3.1" - } -} diff --git a/functions/send-api-request/index.js b/functions/send-api-request.ts similarity index 61% rename from functions/send-api-request/index.js rename to functions/send-api-request.ts index c8bd5af..b518aca 100644 --- a/functions/send-api-request/index.js +++ b/functions/send-api-request.ts @@ -1,8 +1,8 @@ -const axios = require('axios').default; -const shared = require('/opt/nodejs/index'); +import axios from 'axios'; +import { getSecret } from './utils/secrets'; -exports.handler = async (state) => { - const authToken = await shared.getSecret(state.secretKey); +export const handler = async (state: { secretKey: any; request: { method: any; baseUrl: any; headers: any; body: any; query: ArrayLike<unknown> | { [s: string]: unknown; }; }; auth: { prefix: any; location: string; key: string | number; }; }) => { + const authToken = await getSecret(state.secretKey); if (!authToken) { throw new Error('Unable to get secret'); } @@ -12,14 +12,14 @@ exports.handler = async (state) => { return response.data; }; -const getAxiosConfig = (state, authToken) => { +const getAxiosConfig = (state: { request: { method: any; baseUrl: any; headers: any; body: any; query: { [s: string]: unknown; } | ArrayLike<unknown>; }; auth: { prefix: any; location: string; key: string | number; }; }, authToken: string) => { const config = { method: state.request.method, baseURL: state.request.baseUrl, headers: state.request.headers ?? {}, ...state.request.body && { data: state.request.body }, responseType: 'json', - validateStatus: (status) => status < 400 + validateStatus: (status: number) => status < 400 }; let authValue = authToken; diff --git a/functions/send-api-request/package-lock.json b/functions/send-api-request/package-lock.json deleted file mode 100644 index 2ed4a53..0000000 --- a/functions/send-api-request/package-lock.json +++ /dev/null @@ -1,187 +0,0 @@ -{ - "name": "send-api-request", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "send-api-request", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "axios": "^1.2.1" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/axios": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.2.tgz", - "integrity": "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==", - "dev": true, - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - } - }, - "dependencies": { - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "axios": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.2.tgz", - "integrity": "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==", - "dev": true, - "requires": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - } - } -} diff --git a/functions/send-api-request/package.json b/functions/send-api-request/package.json deleted file mode 100644 index efb1c68..0000000 --- a/functions/send-api-request/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "send-api-request", - "version": "1.0.0", - "description": "Sends an API request via axios", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "allenheltondev", - "license": "ISC", - "devDependencies": { - "axios": "^1.2.1" - } -} diff --git a/functions/send-email-sendgrid.ts b/functions/send-email-sendgrid.ts new file mode 100644 index 0000000..c46d385 --- /dev/null +++ b/functions/send-email-sendgrid.ts @@ -0,0 +1,34 @@ +import * as sendgrid from '@sendgrid/mail'; +import {EventBridgeEvent } from 'aws-lambda'; +import { getSecret } from './utils/secrets'; + +export const handler = async (state: EventBridgeEvent<string, { to: string; subject: string; html: string; text: string; }>) => { + try { + const apiKey = await getSecret('sendgrid'); + sendgrid.setApiKey(apiKey); + + const { to, subject, html, text } = state.detail; + await sendMessage(to, subject, html, text); + } catch (err) { + console.error(err); + } +}; + +const sendMessage = async (to: string, subject: string, html: string, text: string) => { + const msg = { + to: to, + from: process.env.FROM_EMAIL, + subject: subject, + ...html && { + content: [ + { + type: 'text/html', + value: html + } + ] + }, + ...text && { text: text } + } as sendgrid.MailDataRequired; + + await sendgrid.send(msg); +}; \ No newline at end of file diff --git a/functions/send-email-sendgrid/index.js b/functions/send-email-sendgrid/index.js deleted file mode 100644 index c68503e..0000000 --- a/functions/send-email-sendgrid/index.js +++ /dev/null @@ -1,40 +0,0 @@ -const sendgrid = require('@sendgrid/mail'); -const shared = require('/opt/nodejs/index'); - -exports.handler = async (state) => { - try { - const apiKey = await shared.getSecret('sendgrid'); - sendgrid.setApiKey(apiKey); - - let { to, subject, html, text } = state; - if(state.detail){ - to = state.detail.to; - subject = state.detail.subject; - html = state.detail.html; - text = state.detail.text; - } - - await sendMessage(to, subject, html, text); - } catch (err) { - console.error(err); - } -}; - -const sendMessage = async (to, subject, html, text) => { - const msg = { - to: to, - from: process.env.FROM_EMAIL, - subject: subject, - ...html && { - content: [ - { - type: 'text/html', - value: html - } - ] - }, - ...text && { text: text } - }; - - await sendgrid.send(msg); -}; \ No newline at end of file diff --git a/functions/send-email-sendgrid/package.json b/functions/send-email-sendgrid/package.json deleted file mode 100644 index 992434b..0000000 --- a/functions/send-email-sendgrid/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "send-email-sendgrid", - "version": "1.0.0", - "description": "Sends an email via sendgrid", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "allenheltondev", - "license": "ISC", - "devDependencies": { - "@sendgrid/mail": "^7.7.0" - } -} diff --git a/functions/utils/secrets.ts b/functions/utils/secrets.ts new file mode 100644 index 0000000..856dfb4 --- /dev/null +++ b/functions/utils/secrets.ts @@ -0,0 +1,17 @@ +import { SecretsManagerClient, GetSecretValueCommand } from '@aws-sdk/client-secrets-manager'; + +const secrets = new SecretsManagerClient({}); +let cachedSecrets: Record<string, string> = {}; + +export const getSecret = async (secretKey: string): Promise<string> => { + if (cachedSecrets[secretKey]) { + return cachedSecrets[secretKey]; + } else { + const secretResponse = await secrets.send(new GetSecretValueCommand({ SecretId: process.env.SECRET_ID })); + if (secretResponse && secretResponse.SecretString) { + cachedSecrets = JSON.parse(secretResponse.SecretString); + return cachedSecrets[secretKey]; + } + throw new Error("No data in secret"); + } +}; \ No newline at end of file diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..08263b8 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,8 @@ +module.exports = { + testEnvironment: 'node', + roots: ['<rootDir>/test'], + testMatch: ['**/*.test.ts'], + transform: { + '^.+\\.tsx?$': 'ts-jest' + } +}; diff --git a/layers/index.js b/layers/index.js deleted file mode 100644 index 222f824..0000000 --- a/layers/index.js +++ /dev/null @@ -1,16 +0,0 @@ -const { SecretsManagerClient, GetSecretValueCommand } = require('@aws-sdk/client-secrets-manager'); - -const secrets = new SecretsManagerClient(); -let cachedSecrets; - -exports.getSecret = async (secretKey) => { - if (cachedSecrets) { - return cachedSecrets[secretKey]; - } else { - const secretResponse = await secrets.send(new GetSecretValueCommand({ SecretId: process.env.SECRET_ID })); - if (secretResponse) { - cachedSecrets = JSON.parse(secretResponse.SecretString); - return cachedSecrets[secretKey]; - } - } -}; \ No newline at end of file diff --git a/layers/package-lock.json b/layers/package-lock.json deleted file mode 100644 index d7b6302..0000000 --- a/layers/package-lock.json +++ /dev/null @@ -1,3814 +0,0 @@ -{ - "name": "dependency-layer", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "dependency-layer", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "@aws-sdk/client-dynamodb": "^3.231.0", - "@aws-sdk/client-secrets-manager": "^3.231.0", - "@aws-sdk/client-sfn": "^3.231.0", - "@aws-sdk/util-dynamodb": "^3.231.0", - "@github-docs/frontmatter": "^1.3.1", - "@sendgrid/client": "^7.7.0", - "@sendgrid/mail": "^7.7.0", - "axios": "^1.2.1", - "handlebars": "^4.7.7", - "octokit": "^2.0.10", - "showdown": "^2.1.0" - } - }, - "node_modules/@aws-crypto/ie11-detection": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz", - "integrity": "sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==", - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/sha256-browser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz", - "integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==", - "dependencies": { - "@aws-crypto/ie11-detection": "^2.0.0", - "@aws-crypto/sha256-js": "^2.0.0", - "@aws-crypto/supports-web-crypto": "^2.0.0", - "@aws-crypto/util": "^2.0.0", - "@aws-sdk/types": "^3.1.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/sha256-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz", - "integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==", - "dependencies": { - "@aws-crypto/util": "^2.0.0", - "@aws-sdk/types": "^3.1.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/supports-web-crypto": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz", - "integrity": "sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==", - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz", - "integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==", - "dependencies": { - "@aws-sdk/types": "^3.110.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/util/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-sdk/abort-controller": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.226.0.tgz", - "integrity": "sha512-cJVzr1xxPBd08voknXvR0RLgtZKGKt6WyDpH/BaPCu3rfSqWCDZKzwqe940eqosjmKrxC6pUZNKASIqHOQ8xxQ==", - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-dynamodb": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.245.0.tgz", - "integrity": "sha512-k9zPoUXQ6o91iAIceaDyz1p1tXhA3gcmw4R0oB6gREDGc9bkIqBzwS6+Zu8m4B2PPhZQIl9uMpktHw9NPyMRxA==", - "dependencies": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/client-sts": "3.245.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/credential-provider-node": "3.245.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-endpoint-discovery": "3.234.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-signing": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "@aws-sdk/util-waiter": "3.226.0", - "tslib": "^2.3.1", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-secrets-manager": { - "version": "3.250.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.250.0.tgz", - "integrity": "sha512-CB4OcFJPpAuW3rRXBxgOtF9RXHBixEvJSDkh8RsCAamt37Fw61+e+CsdXixSWA4rzQA+3PQuts7zlwhcxobbJg==", - "dependencies": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/client-sts": "3.245.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/credential-provider-node": "3.245.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-signing": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "tslib": "^2.3.1", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sfn": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sfn/-/client-sfn-3.245.0.tgz", - "integrity": "sha512-1doyWldzORmD8r/kic8Sm6Ji9KfyMGYpYROTNtX8ZKCaNDCfjCUG25+y8b5tNLkYlKJFZ144D9Hf6s3mRe0vZg==", - "dependencies": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/client-sts": "3.245.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/credential-provider-node": "3.245.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-signing": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.245.0.tgz", - "integrity": "sha512-dxzRwRo55ZNQ4hQigC+cishxLSWlBrbr3iszG0FLviavLDOlnVG5UUxWpOIGvwr8pYiSfM4jnfMxiwYwiCLg1g==", - "dependencies": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.245.0.tgz", - "integrity": "sha512-0pGPA00kEsu2Yq1Ul+OwftHxws5YVllm4iZrPtGnqmXr7wmf6B9lOtrMQF44y7Tfw53po6+bKz08OKTEWkkjUA==", - "dependencies": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.245.0.tgz", - "integrity": "sha512-E+7v2sy34TLni/Dmz6bTU20NWvbHYH9sVUHKQ9kHhmFopUWrs4Nt77f85PbuiKJz/irjUh9ppT5q1odJNRKRVQ==", - "dependencies": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/credential-provider-node": "3.245.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-sdk-sts": "3.226.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-signing": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "fast-xml-parser": "4.0.11", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/config-resolver": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.234.0.tgz", - "integrity": "sha512-uZxy4wzllfvgCQxVc+Iqhde0NGAnfmV2hWR6ejadJaAFTuYNvQiRg9IqJy3pkyDPqXySiJ8Bom5PoJfgn55J/A==", - "dependencies": { - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-config-provider": "3.208.0", - "@aws-sdk/util-middleware": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.226.0.tgz", - "integrity": "sha512-sd8uK1ojbXxaZXlthzw/VXZwCPUtU3PjObOfr3Evj7MPIM2IH8h29foOlggx939MdLQGboJf9gKvLlvKDWtJRA==", - "dependencies": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-imds": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.226.0.tgz", - "integrity": "sha512-//z/COQm2AjYFI1Lb0wKHTQSrvLFTyuKLFQGPJsKS7DPoxGOCKB7hmYerlbl01IDoCxTdyL//TyyPxbZEOQD5Q==", - "dependencies": { - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.245.0.tgz", - "integrity": "sha512-1SjfVc5Wg0lLRUvwMrfjGgFkl+zfxn74gnkPr6by1QyMAoTzmeUkalPLAIqd+uHtFom9e3K633BQtX7zVPZ5XQ==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.226.0", - "@aws-sdk/credential-provider-imds": "3.226.0", - "@aws-sdk/credential-provider-process": "3.226.0", - "@aws-sdk/credential-provider-sso": "3.245.0", - "@aws-sdk/credential-provider-web-identity": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.245.0.tgz", - "integrity": "sha512-Dwv8zmRLTDLeEkGrK/sLNFZSC+ahXZxr07CuID054QKACIdUEvkqYlnalRiTeXngiHGQ54u8wU7f0D32R2oL0g==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.226.0", - "@aws-sdk/credential-provider-imds": "3.226.0", - "@aws-sdk/credential-provider-ini": "3.245.0", - "@aws-sdk/credential-provider-process": "3.226.0", - "@aws-sdk/credential-provider-sso": "3.245.0", - "@aws-sdk/credential-provider-web-identity": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.226.0.tgz", - "integrity": "sha512-iUDMdnrTvbvaCFhWwqyXrhvQ9+ojPqPqXhwZtY1X/Qaz+73S9gXBPJHZaZb2Ke0yKE1Ql3bJbKvmmxC/qLQMng==", - "dependencies": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.245.0.tgz", - "integrity": "sha512-txWrJc0WNBhXMi7q+twjx7cs/qzgTfbQ+vbag5idRmdoUeiR8rfLvihCab2NaGg50xhh+TaoUCXrgJp3E/XjYQ==", - "dependencies": { - "@aws-sdk/client-sso": "3.245.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/token-providers": "3.245.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.226.0.tgz", - "integrity": "sha512-CCpv847rLB0SFOHz2igvUMFAzeT2fD3YnY4C8jltuJoEkn0ITn1Hlgt13nTJ5BUuvyti2mvyXZHmNzhMIMrIlw==", - "dependencies": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/endpoint-cache": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/endpoint-cache/-/endpoint-cache-3.208.0.tgz", - "integrity": "sha512-MkrCvaZhTb1qZCjcDH73t5n43h0Kr0GS+30lpXZ9PAnHJZPqv+vhWFPK0ZsFe1XktbS0WOoDR4ED+lWm0Dw7Rg==", - "dependencies": { - "mnemonist": "0.38.3", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/fetch-http-handler": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.226.0.tgz", - "integrity": "sha512-JewZPMNEBXfi1xVnRa7pVtK/zgZD8/lQ/YnD8pq79WuMa2cwyhDtr8oqCoqsPW+WJT5ScXoMtuHxN78l8eKWgg==", - "dependencies": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/querystring-builder": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/hash-node": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.226.0.tgz", - "integrity": "sha512-MdlJhJ9/Espwd0+gUXdZRsHuostB2WxEVAszWxobP0FTT9PnicqnfK7ExmW+DUAc0ywxtEbR3e0UND65rlSTVw==", - "dependencies": { - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-buffer-from": "3.208.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/invalid-dependency": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.226.0.tgz", - "integrity": "sha512-QXOYFmap8g9QzRjumcRCIo2GEZkdCwd7ePQW0OABWPhKHzlJ74vvBxywjU3s39EEBEluWXtZ7Iufg6GxZM4ifw==", - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/is-array-buffer": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz", - "integrity": "sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg==", - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-content-length": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.226.0.tgz", - "integrity": "sha512-ksUzlHJN2JMuyavjA46a4sctvnrnITqt2tbGGWWrAuXY1mel2j+VbgnmJUiwHKUO6bTFBBeft5Vd1TSOb4JmiA==", - "dependencies": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-endpoint": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.226.0.tgz", - "integrity": "sha512-EvLFafjtUxTT0AC9p3aBQu1/fjhWdIeK58jIXaNFONfZ3F8QbEYUPuF/SqZvJM6cWfOO9qwYKkRDbCSTYhprIg==", - "dependencies": { - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-config-provider": "3.208.0", - "@aws-sdk/util-middleware": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-endpoint-discovery": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.234.0.tgz", - "integrity": "sha512-HNZJbxXrSJfITJjAisqrju7T4S7U186xcmYr28CZX9XQNm6fc/bxcqj+8JRntWsekiJYyTvQLIrKxiCaa+TA9A==", - "dependencies": { - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/endpoint-cache": "3.208.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.226.0.tgz", - "integrity": "sha512-haVkWVh6BUPwKgWwkL6sDvTkcZWvJjv8AgC8jiQuSl8GLZdzHTB8Qhi3IsfFta9HAuoLjxheWBE5Z/L0UrfhLA==", - "dependencies": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.226.0.tgz", - "integrity": "sha512-m9gtLrrYnpN6yckcQ09rV7ExWOLMuq8mMPF/K3DbL/YL0TuILu9i2T1W+JuxSX+K9FMG2HrLAKivE/kMLr55xA==", - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.226.0.tgz", - "integrity": "sha512-mwRbdKEUeuNH5TEkyZ5FWxp6bL2UC1WbY+LDv6YjHxmSMKpAoOueEdtU34PqDOLrpXXxIGHDFmjeGeMfktyEcA==", - "dependencies": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-retry": { - "version": "3.235.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.235.0.tgz", - "integrity": "sha512-50WHbJGpD3SNp9763MAlHqIhXil++JdQbKejNpHg7HsJne/ao3ub+fDOfx//mMBjpzBV25BGd5UlfL6blrClSg==", - "dependencies": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/service-error-classification": "3.229.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-middleware": "3.226.0", - "@aws-sdk/util-retry": "3.229.0", - "tslib": "^2.3.1", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.226.0.tgz", - "integrity": "sha512-NN9T/qoSD1kZvAT+VLny3NnlqgylYQcsgV3rvi/8lYzw/G/2s8VS6sm/VTWGGZhx08wZRv20MWzYu3bftcyqUg==", - "dependencies": { - "@aws-sdk/middleware-signing": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-serde": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.226.0.tgz", - "integrity": "sha512-nPuOOAkSfx9TxzdKFx0X2bDlinOxGrqD7iof926K/AEflxGD1DBdcaDdjlYlPDW2CVE8LV/rAgbYuLxh/E/1VA==", - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-signing": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.226.0.tgz", - "integrity": "sha512-E6HmtPcl+IjYDDzi1xI2HpCbBq2avNWcjvCriMZWuTAtRVpnA6XDDGW5GY85IfS3A8G8vuWqEVPr8JcYUcjfew==", - "dependencies": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-middleware": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-stack": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.226.0.tgz", - "integrity": "sha512-85wF29LvPvpoed60fZGDYLwv1Zpd/cM0C22WSSFPw1SSJeqO4gtFYyCg2squfT3KI6kF43IIkOCJ+L7GtryPug==", - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.226.0.tgz", - "integrity": "sha512-N1WnfzCW1Y5yWhVAphf8OPGTe8Df3vmV7/LdsoQfmpkCZgLZeK2o0xITkUQhRj1mbw7yp8tVFLFV3R2lMurdAQ==", - "dependencies": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/node-config-provider": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.226.0.tgz", - "integrity": "sha512-B8lQDqiRk7X5izFEUMXmi8CZLOKCTWQJU9HQf3ako+sF0gexo4nHN3jhoRWyLtcgC5S3on/2jxpAcqtm7kuY3w==", - "dependencies": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/node-http-handler": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.226.0.tgz", - "integrity": "sha512-xQCddnZNMiPmjr3W7HYM+f5ir4VfxgJh37eqZwX6EZmyItFpNNeVzKUgA920ka1VPz/ZUYB+2OFGiX3LCLkkaA==", - "dependencies": { - "@aws-sdk/abort-controller": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/querystring-builder": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/property-provider": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.226.0.tgz", - "integrity": "sha512-TsljjG+Sg0LmdgfiAlWohluWKnxB/k8xenjeozZfzOr5bHmNHtdbWv6BtNvD/R83hw7SFXxbJHlD5H4u9p2NFg==", - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/protocol-http": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.226.0.tgz", - "integrity": "sha512-zWkVqiTA9RXL6y0hhfZc9bcU4DX2NI6Hw9IhQmSPeM59mdbPjJlY4bLlMr5YxywqO3yQ/ylNoAfrEzrDjlOSRg==", - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/querystring-builder": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.226.0.tgz", - "integrity": "sha512-LVurypuNeotO4lmirKXRC4NYrZRAyMJXuwO0f2a5ZAUJCjauwYrifKue6yCfU7bls7gut7nfcR6B99WBYpHs3g==", - "dependencies": { - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-uri-escape": "3.201.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/querystring-parser": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.226.0.tgz", - "integrity": "sha512-FzB+VrQ47KAFxiPt2YXrKZ8AOLZQqGTLCKHzx4bjxGmwgsjV8yIbtJiJhZLMcUQV4LtGeIY9ixIqQhGvnZHE4A==", - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/service-error-classification": { - "version": "3.229.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.229.0.tgz", - "integrity": "sha512-dnzWWQ0/NoWMUZ5C0DW3dPm0wC1O76Y/SpKbuJzWPkx1EYy6r8p32Ly4D9vUzrKDbRGf48YHIF2kOkBmu21CLg==", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/shared-ini-file-loader": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.226.0.tgz", - "integrity": "sha512-661VQefsARxVyyV2FX9V61V+nNgImk7aN2hYlFKla6BCwZfMng+dEtD0xVGyg1PfRw0qvEv5LQyxMVgHcUSevA==", - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.226.0.tgz", - "integrity": "sha512-/R5q5agdPd7HJB68XMzpxrNPk158EHUvkFkuRu5Qf3kkkHebEzWEBlWoVpUe6ss4rP9Tqcue6xPuaftEmhjpYw==", - "dependencies": { - "@aws-sdk/is-array-buffer": "3.201.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-hex-encoding": "3.201.0", - "@aws-sdk/util-middleware": "3.226.0", - "@aws-sdk/util-uri-escape": "3.201.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/smithy-client": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.234.0.tgz", - "integrity": "sha512-8AtR/k4vsFvjXeQbIzq/Wy7Nbk48Ou0wUEeVYPHWHPSU8QamFWORkOwmKtKMfHAyZvmqiAPeQqHFkq+UJhWyyQ==", - "dependencies": { - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.245.0.tgz", - "integrity": "sha512-m/spXR/vEXGb+zMqRUMQYVMwFZSTdK5RkddYqamYkNhIoLm60EYeRu57JsMMs5djKi8dBRSKiXwVHx0l2rXMjg==", - "dependencies": { - "@aws-sdk/client-sso-oidc": "3.245.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/types": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.226.0.tgz", - "integrity": "sha512-MmmNHrWeO4man7wpOwrAhXlevqtOV9ZLcH4RhnG5LmRce0RFOApx24HoKENfFCcOyCm5LQBlsXCqi0dZWDWU0A==", - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/url-parser": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.226.0.tgz", - "integrity": "sha512-p5RLE0QWyP0OcTOLmFcLdVgUcUEzmEfmdrnOxyNzomcYb0p3vUagA5zfa1HVK2azsQJFBv28GfvMnba9bGhObg==", - "dependencies": { - "@aws-sdk/querystring-parser": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/util-base64": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.208.0.tgz", - "integrity": "sha512-PQniZph5A6N7uuEOQi+1hnMz/FSOK/8kMFyFO+4DgA1dZ5pcKcn5wiFwHkcTb/BsgVqQa3Jx0VHNnvhlS8JyTg==", - "dependencies": { - "@aws-sdk/util-buffer-from": "3.208.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-body-length-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.188.0.tgz", - "integrity": "sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==", - "dependencies": { - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/util-body-length-node": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.208.0.tgz", - "integrity": "sha512-3zj50e5g7t/MQf53SsuuSf0hEELzMtD8RX8C76f12OSRo2Bca4FLLYHe0TZbxcfQHom8/hOaeZEyTyMogMglqg==", - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-buffer-from": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.208.0.tgz", - "integrity": "sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw==", - "dependencies": { - "@aws-sdk/is-array-buffer": "3.201.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-config-provider": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.208.0.tgz", - "integrity": "sha512-DSRqwrERUsT34ug+anlMBIFooBEGwM8GejC7q00Y/9IPrQy50KnG5PW2NiTjuLKNi7pdEOlwTSEocJE15eDZIg==", - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-defaults-mode-browser": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.234.0.tgz", - "integrity": "sha512-IHMKXjTbOD8XMz5+2oCOsVP94BYb9YyjXdns0aAXr2NAo7k2+RCzXQ2DebJXppGda1F6opFutoKwyVSN0cmbMw==", - "dependencies": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "bowser": "^2.11.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@aws-sdk/util-defaults-mode-node": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.234.0.tgz", - "integrity": "sha512-UGjQ+OjBYYhxFVtUY+jtr0ZZgzZh6OHtYwRhFt8IHewJXFCfZTyfsbX20szBj5y1S4HRIUJ7cwBLIytTqMbI5w==", - "dependencies": { - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/credential-provider-imds": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@aws-sdk/util-dynamodb": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.245.0.tgz", - "integrity": "sha512-Wx06Ey92DRRSQTFfpQs1DkHSoajcwVu2TLWTg07yHXgGxdi6EveJPNqh111ot5yzHGmzPIHas/IPZe3hDttzcw==", - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.245.0.tgz", - "integrity": "sha512-UNOFquB1tKx+8RT8n82Zb5tIwDyZHVPBg/m0LB0RsLETjr6krien5ASpqWezsXKIR1hftN9uaxN4bvf2dZrWHg==", - "dependencies": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-hex-encoding": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz", - "integrity": "sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA==", - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz", - "integrity": "sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==", - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-middleware": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.226.0.tgz", - "integrity": "sha512-B96CQnwX4gRvQdaQkdUtqvDPkrptV5+va6FVeJOocU/DbSYMAScLxtR3peMS8cnlOT6nL1Eoa42OI9AfZz1VwQ==", - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-retry": { - "version": "3.229.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.229.0.tgz", - "integrity": "sha512-0zKTqi0P1inD0LzIMuXRIYYQ/8c1lWMg/cfiqUcIAF1TpatlpZuN7umU0ierpBFud7S+zDgg0oemh+Nj8xliJw==", - "dependencies": { - "@aws-sdk/service-error-classification": "3.229.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@aws-sdk/util-uri-escape": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz", - "integrity": "sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA==", - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.226.0.tgz", - "integrity": "sha512-PhBIu2h6sPJPcv2I7ELfFizdl5pNiL4LfxrasMCYXQkJvVnoXztHA1x+CQbXIdtZOIlpjC+6BjDcE0uhnpvfcA==", - "dependencies": { - "@aws-sdk/types": "3.226.0", - "bowser": "^2.11.0", - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.226.0.tgz", - "integrity": "sha512-othPc5Dz/pkYkxH+nZPhc1Al0HndQT8zHD4e9h+EZ+8lkd8n+IsnLfTS/mSJWrfiC6UlNRVw55cItstmJyMe/A==", - "dependencies": { - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "node_modules/@aws-sdk/util-utf8-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.188.0.tgz", - "integrity": "sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==", - "dependencies": { - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/util-utf8-node": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.208.0.tgz", - "integrity": "sha512-jKY87Acv0yWBdFxx6bveagy5FYjz+dtV8IPT7ay1E2WPWH1czoIdMAkc8tSInK31T6CRnHWkLZ1qYwCbgRfERQ==", - "dependencies": { - "@aws-sdk/util-buffer-from": "3.208.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/util-waiter": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.226.0.tgz", - "integrity": "sha512-qYQMRxnu5k8qQihJXoIWMkBOj0+XkHHj/drLdbRnwL6ni6NcG8++cs9M3DSjIcxmxgF/7SLpDjn1H3sC7cYo4g==", - "dependencies": { - "@aws-sdk/abort-controller": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@github-docs/frontmatter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@github-docs/frontmatter/-/frontmatter-1.3.1.tgz", - "integrity": "sha512-1BFouSuheb7GelUDlLmv/Qrpi8Ybtyfch91grZbqx+aGzDEh7CAna+mAHIYaaN3HppNB8JnppGvX2DXM4v0pzQ==", - "dependencies": { - "gray-matter": "^4.0.2", - "lodash": "^4.17.15", - "revalidator": "^0.3.1" - } - }, - "node_modules/@octokit/app": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@octokit/app/-/app-13.1.1.tgz", - "integrity": "sha512-83TPUMWPAWaACe8AJVBlg6gptbDJk/33C/0V9e0yWfBqXINqF2ZutctQIcrRcyWBPlfYmFElPbElMqlspe8UWg==", - "dependencies": { - "@octokit/auth-app": "^4.0.8", - "@octokit/auth-unauthenticated": "^3.0.0", - "@octokit/core": "^4.0.0", - "@octokit/oauth-app": "^4.0.7", - "@octokit/plugin-paginate-rest": "^5.0.0", - "@octokit/types": "^8.0.0", - "@octokit/webhooks": "^10.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-app": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-4.0.8.tgz", - "integrity": "sha512-miI7y9FfS/fL1bSPsDaAfCGSxQ04iGLyisI2GA8N7P6eB6AkCOt+F1XXapJKRnAubQubvYF0dqxoTZYyKk93NQ==", - "dependencies": { - "@octokit/auth-oauth-app": "^5.0.0", - "@octokit/auth-oauth-user": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", - "@types/lru-cache": "^5.1.0", - "deprecation": "^2.3.1", - "lru-cache": "^6.0.0", - "universal-github-app-jwt": "^1.1.1", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-oauth-app": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-5.0.4.tgz", - "integrity": "sha512-zlWuii5hAN50vsV6SJC+uIJ7SMhyWjQMEmKJQxkmNDlieE9LjnkZnbOjqRsfcG7VO7WTl4K8ccpo/3A7Kdpmrw==", - "dependencies": { - "@octokit/auth-oauth-device": "^4.0.0", - "@octokit/auth-oauth-user": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", - "@types/btoa-lite": "^1.0.0", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-oauth-device": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-4.0.3.tgz", - "integrity": "sha512-KPTx5nMntKjNZzzltO3X4T68v22rd7Cp/TcLJXQE2U8aXPcZ9LFuww9q9Q5WUNSu3jwi3lRwzfkPguRfz1R8Vg==", - "dependencies": { - "@octokit/oauth-methods": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-oauth-user": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-2.1.0.tgz", - "integrity": "sha512-TC2Mj8NkSy9uAnZLYX+FKB/IH6uDe+qYNzHzH8l13JlzsrTE7GKkcqtXdSGGN4tncyROAB4/KS5rDPRCEnWHlA==", - "dependencies": { - "@octokit/auth-oauth-device": "^4.0.0", - "@octokit/oauth-methods": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-token": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.2.tgz", - "integrity": "sha512-pq7CwIMV1kmzkFTimdwjAINCXKTajZErLB4wMLYapR2nuB/Jpr66+05wOTZMSCBXP6n4DdDWT2W19Bm17vU69Q==", - "dependencies": { - "@octokit/types": "^8.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-unauthenticated": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-3.0.3.tgz", - "integrity": "sha512-IyfLo1T5GmIC9+07hHGlD3gHtZI1Bona8PLhHXUnwcYDuZt0BhjlNJDYMoPG21C4r7v7+ZSxQHBKrGgkxpYb7A==", - "dependencies": { - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/core": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.1.0.tgz", - "integrity": "sha512-Czz/59VefU+kKDy+ZfDwtOIYIkFjExOKf+HA92aiTZJ6EfWpFzYQWw0l54ji8bVmyhc+mGaLUbSUmXazG7z5OQ==", - "dependencies": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/endpoint": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.3.tgz", - "integrity": "sha512-57gRlb28bwTsdNXq+O3JTQ7ERmBTuik9+LelgcLIVfYwf235VHbN9QNo4kXExtp/h8T423cR5iJThKtFYxC7Lw==", - "dependencies": { - "@octokit/types": "^8.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/graphql": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.4.tgz", - "integrity": "sha512-amO1M5QUQgYQo09aStR/XO7KAl13xpigcy/kI8/N1PnZYSS69fgte+xA4+c2DISKqUZfsh0wwjc2FaCt99L41A==", - "dependencies": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/oauth-app": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-4.2.0.tgz", - "integrity": "sha512-gyGclT77RQMkVUEW3YBeAKY+LBSc5u3eC9Wn/Uwt3WhuKuu9mrV18EnNpDqmeNll+mdV02yyBROU29Tlili6gg==", - "dependencies": { - "@octokit/auth-oauth-app": "^5.0.0", - "@octokit/auth-oauth-user": "^2.0.0", - "@octokit/auth-unauthenticated": "^3.0.0", - "@octokit/core": "^4.0.0", - "@octokit/oauth-authorization-url": "^5.0.0", - "@octokit/oauth-methods": "^2.0.0", - "@types/aws-lambda": "^8.10.83", - "fromentries": "^1.3.1", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/oauth-authorization-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-5.0.0.tgz", - "integrity": "sha512-y1WhN+ERDZTh0qZ4SR+zotgsQUE1ysKnvBt1hvDRB2WRzYtVKQjn97HEPzoehh66Fj9LwNdlZh+p6TJatT0zzg==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/oauth-methods": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-2.0.4.tgz", - "integrity": "sha512-RDSa6XL+5waUVrYSmOlYROtPq0+cfwppP4VaQY/iIei3xlFb0expH6YNsxNrZktcLhJWSpm9uzeom+dQrXlS3A==", - "dependencies": { - "@octokit/oauth-authorization-url": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", - "btoa-lite": "^1.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/openapi-types": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", - "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==" - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-5.0.1.tgz", - "integrity": "sha512-7A+rEkS70pH36Z6JivSlR7Zqepz3KVucEFVDnSrgHXzG7WLAzYwcHZbKdfTXHwuTHbkT1vKvz7dHl1+HNf6Qyw==", - "dependencies": { - "@octokit/types": "^8.0.0" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=4" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.7.0.tgz", - "integrity": "sha512-orxQ0fAHA7IpYhG2flD2AygztPlGYNAdlzYz8yrD8NDgelPfOYoRPROfEyIe035PlxvbYrgkfUZIhSBKju/Cvw==", - "dependencies": { - "@octokit/types": "^8.0.0", - "deprecation": "^2.3.1" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/plugin-retry": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-4.0.3.tgz", - "integrity": "sha512-tDR+4Cs9GPPNJ7/RjTEq5ty2wqjKe1hRUV7/hch+nORow5LshlHXTT1qfYNsFPw3S9szvFFAfDEFq/xwrEpL7g==", - "dependencies": { - "@octokit/types": "^8.0.0", - "bottleneck": "^2.15.3" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/plugin-throttling": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-4.3.2.tgz", - "integrity": "sha512-ZaCK599h3tzcoy0Jtdab95jgmD7X9iAk59E2E7hYKCAmnURaI4WpzwL9vckImilybUGrjY1JOWJapDs2N2D3vw==", - "dependencies": { - "@octokit/types": "^8.0.0", - "bottleneck": "^2.15.3" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": "^4.0.0" - } - }, - "node_modules/@octokit/request": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.2.tgz", - "integrity": "sha512-6VDqgj0HMc2FUX2awIs+sM6OwLgwHvAi4KCK3mT2H2IKRt6oH9d0fej5LluF5mck1lRR/rFWN0YIDSYXYSylbw==", - "dependencies": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/request-error": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.2.tgz", - "integrity": "sha512-WMNOFYrSaX8zXWoJg9u/pKgWPo94JXilMLb2VManNOby9EZxrQaBe/QSC4a1TzpAlpxofg2X/jMnCyZgL6y7eg==", - "dependencies": { - "@octokit/types": "^8.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/types": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.1.1.tgz", - "integrity": "sha512-7tjk+6DyhYAmei8FOEwPfGKc0VE1x56CKPJ+eE44zhDbOyMT+9yan8apfQFxo8oEFsy+0O7PiBtH8w0Yo0Y9Kw==", - "dependencies": { - "@octokit/openapi-types": "^14.0.0" - } - }, - "node_modules/@octokit/webhooks": { - "version": "10.6.1", - "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-10.6.1.tgz", - "integrity": "sha512-+1LZDqSD9geJq6T1GRvjilzx+1l8SrJm9gdQlpOUFeIHhgYJXDvsobx3Ha4yvX4BjhH47BtyuEPZW6EUAOCwNw==", - "dependencies": { - "@octokit/request-error": "^3.0.0", - "@octokit/webhooks-methods": "^3.0.0", - "@octokit/webhooks-types": "6.7.0", - "aggregate-error": "^3.1.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/webhooks-methods": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-3.0.2.tgz", - "integrity": "sha512-Vlnv5WBscf07tyAvfDbp7pTkMZUwk7z7VwEF32x6HqI+55QRwBTcT+D7DDjZXtad/1dU9E32x0HmtDlF9VIRaQ==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/webhooks-types": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-6.7.0.tgz", - "integrity": "sha512-bykm7UkSnxmb2uhSfcLM1Pity/LQ6ZBSdzy9HU0vXjR+2g+tzlmRhXb7Go8oj0TlgO+vDrTivGXju6zkzOGKjA==" - }, - "node_modules/@sendgrid/client": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@sendgrid/client/-/client-7.7.0.tgz", - "integrity": "sha512-SxH+y8jeAQSnDavrTD0uGDXYIIkFylCo+eDofVmZLQ0f862nnqbC3Vd1ej6b7Le7lboyzQF6F7Fodv02rYspuA==", - "dependencies": { - "@sendgrid/helpers": "^7.7.0", - "axios": "^0.26.0" - }, - "engines": { - "node": "6.* || 8.* || >=10.*" - } - }, - "node_modules/@sendgrid/client/node_modules/axios": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", - "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", - "dependencies": { - "follow-redirects": "^1.14.8" - } - }, - "node_modules/@sendgrid/helpers": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@sendgrid/helpers/-/helpers-7.7.0.tgz", - "integrity": "sha512-3AsAxfN3GDBcXoZ/y1mzAAbKzTtUZ5+ZrHOmWQ279AuaFXUNCh9bPnRpN504bgveTqoW+11IzPg3I0WVgDINpw==", - "dependencies": { - "deepmerge": "^4.2.2" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/@sendgrid/mail": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@sendgrid/mail/-/mail-7.7.0.tgz", - "integrity": "sha512-5+nApPE9wINBvHSUxwOxkkQqM/IAAaBYoP9hw7WwgDNQPxraruVqHizeTitVtKGiqWCKm2mnjh4XGN3fvFLqaw==", - "dependencies": { - "@sendgrid/client": "^7.7.0", - "@sendgrid/helpers": "^7.7.0" - }, - "engines": { - "node": "6.* || 8.* || >=10.*" - } - }, - "node_modules/@types/aws-lambda": { - "version": "8.10.109", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.109.tgz", - "integrity": "sha512-/ME92FneNyXQzrAfcnQQlW1XkCZGPDlpi2ao1MJwecN+6SbeonKeggU8eybv1DfKli90FAVT1MlIZVXfwVuCyg==" - }, - "node_modules/@types/btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==" - }, - "node_modules/@types/jsonwebtoken": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz", - "integrity": "sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" - }, - "node_modules/@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/axios": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.2.tgz", - "integrity": "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" - }, - "node_modules/bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" - }, - "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" - }, - "node_modules/btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==" - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-xml-parser": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.11.tgz", - "integrity": "sha512-4aUg3aNRR/WjQAcpceODG1C3x3lFANXRo8+1biqfieHmg9pyMt7qB4lQV/Ta6sJCTbA5vfD8fnA8S54JATiFUA==", - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - }, - "funding": { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", - "dependencies": { - "jws": "^3.2.2", - "lodash": "^4.17.21", - "ms": "^2.1.1", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mnemonist": { - "version": "0.38.3", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.3.tgz", - "integrity": "sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==", - "dependencies": { - "obliterator": "^1.6.1" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/node-fetch": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz", - "integrity": "sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/obliterator": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-1.6.1.tgz", - "integrity": "sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig==" - }, - "node_modules/octokit": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/octokit/-/octokit-2.0.11.tgz", - "integrity": "sha512-Ivjapy5RXWvJfmZe0BvfMM2gnNi39rjheZV/s3SjICb7gfl83JWPDmBERe4f/l2czdRnj4NVIn4YO7Q737oLCg==", - "dependencies": { - "@octokit/app": "^13.1.1", - "@octokit/core": "^4.0.4", - "@octokit/oauth-app": "^4.0.6", - "@octokit/plugin-paginate-rest": "^5.0.0", - "@octokit/plugin-rest-endpoint-methods": "^6.0.0", - "@octokit/plugin-retry": "^4.0.3", - "@octokit/plugin-throttling": "^4.0.1", - "@octokit/types": "^8.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/revalidator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.3.1.tgz", - "integrity": "sha512-orq+Nw+V5pDpQwGEuN2n1AgJ+0A8WqhFHKt5KgkxfAowUKgO1CWV32IR3TNB4g9/FX3gJt9qBJO8DYlwonnB0Q==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/showdown": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/showdown/-/showdown-2.1.0.tgz", - "integrity": "sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==", - "dependencies": { - "commander": "^9.0.0" - }, - "bin": { - "showdown": "bin/showdown.js" - }, - "funding": { - "type": "individual", - "url": "https://www.paypal.me/tiviesantos" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/universal-github-app-jwt": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz", - "integrity": "sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w==", - "dependencies": { - "@types/jsonwebtoken": "^9.0.0", - "jsonwebtoken": "^9.0.0" - } - }, - "node_modules/universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - }, - "dependencies": { - "@aws-crypto/ie11-detection": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz", - "integrity": "sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==", - "requires": { - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@aws-crypto/sha256-browser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz", - "integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==", - "requires": { - "@aws-crypto/ie11-detection": "^2.0.0", - "@aws-crypto/sha256-js": "^2.0.0", - "@aws-crypto/supports-web-crypto": "^2.0.0", - "@aws-crypto/util": "^2.0.0", - "@aws-sdk/types": "^3.1.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@aws-crypto/sha256-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz", - "integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==", - "requires": { - "@aws-crypto/util": "^2.0.0", - "@aws-sdk/types": "^3.1.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@aws-crypto/supports-web-crypto": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz", - "integrity": "sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==", - "requires": { - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@aws-crypto/util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz", - "integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==", - "requires": { - "@aws-sdk/types": "^3.110.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@aws-sdk/abort-controller": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.226.0.tgz", - "integrity": "sha512-cJVzr1xxPBd08voknXvR0RLgtZKGKt6WyDpH/BaPCu3rfSqWCDZKzwqe940eqosjmKrxC6pUZNKASIqHOQ8xxQ==", - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/client-dynamodb": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.245.0.tgz", - "integrity": "sha512-k9zPoUXQ6o91iAIceaDyz1p1tXhA3gcmw4R0oB6gREDGc9bkIqBzwS6+Zu8m4B2PPhZQIl9uMpktHw9NPyMRxA==", - "requires": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/client-sts": "3.245.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/credential-provider-node": "3.245.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-endpoint-discovery": "3.234.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-signing": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "@aws-sdk/util-waiter": "3.226.0", - "tslib": "^2.3.1", - "uuid": "^8.3.2" - } - }, - "@aws-sdk/client-secrets-manager": { - "version": "3.250.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.250.0.tgz", - "integrity": "sha512-CB4OcFJPpAuW3rRXBxgOtF9RXHBixEvJSDkh8RsCAamt37Fw61+e+CsdXixSWA4rzQA+3PQuts7zlwhcxobbJg==", - "requires": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/client-sts": "3.245.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/credential-provider-node": "3.245.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-signing": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "tslib": "^2.3.1", - "uuid": "^8.3.2" - } - }, - "@aws-sdk/client-sfn": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sfn/-/client-sfn-3.245.0.tgz", - "integrity": "sha512-1doyWldzORmD8r/kic8Sm6Ji9KfyMGYpYROTNtX8ZKCaNDCfjCUG25+y8b5tNLkYlKJFZ144D9Hf6s3mRe0vZg==", - "requires": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/client-sts": "3.245.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/credential-provider-node": "3.245.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-signing": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/client-sso": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.245.0.tgz", - "integrity": "sha512-dxzRwRo55ZNQ4hQigC+cishxLSWlBrbr3iszG0FLviavLDOlnVG5UUxWpOIGvwr8pYiSfM4jnfMxiwYwiCLg1g==", - "requires": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/client-sso-oidc": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.245.0.tgz", - "integrity": "sha512-0pGPA00kEsu2Yq1Ul+OwftHxws5YVllm4iZrPtGnqmXr7wmf6B9lOtrMQF44y7Tfw53po6+bKz08OKTEWkkjUA==", - "requires": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/client-sts": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.245.0.tgz", - "integrity": "sha512-E+7v2sy34TLni/Dmz6bTU20NWvbHYH9sVUHKQ9kHhmFopUWrs4Nt77f85PbuiKJz/irjUh9ppT5q1odJNRKRVQ==", - "requires": { - "@aws-crypto/sha256-browser": "2.0.0", - "@aws-crypto/sha256-js": "2.0.0", - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/credential-provider-node": "3.245.0", - "@aws-sdk/fetch-http-handler": "3.226.0", - "@aws-sdk/hash-node": "3.226.0", - "@aws-sdk/invalid-dependency": "3.226.0", - "@aws-sdk/middleware-content-length": "3.226.0", - "@aws-sdk/middleware-endpoint": "3.226.0", - "@aws-sdk/middleware-host-header": "3.226.0", - "@aws-sdk/middleware-logger": "3.226.0", - "@aws-sdk/middleware-recursion-detection": "3.226.0", - "@aws-sdk/middleware-retry": "3.235.0", - "@aws-sdk/middleware-sdk-sts": "3.226.0", - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/middleware-signing": "3.226.0", - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/middleware-user-agent": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/node-http-handler": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/smithy-client": "3.234.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.234.0", - "@aws-sdk/util-defaults-mode-node": "3.234.0", - "@aws-sdk/util-endpoints": "3.245.0", - "@aws-sdk/util-retry": "3.229.0", - "@aws-sdk/util-user-agent-browser": "3.226.0", - "@aws-sdk/util-user-agent-node": "3.226.0", - "@aws-sdk/util-utf8-browser": "3.188.0", - "@aws-sdk/util-utf8-node": "3.208.0", - "fast-xml-parser": "4.0.11", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/config-resolver": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.234.0.tgz", - "integrity": "sha512-uZxy4wzllfvgCQxVc+Iqhde0NGAnfmV2hWR6ejadJaAFTuYNvQiRg9IqJy3pkyDPqXySiJ8Bom5PoJfgn55J/A==", - "requires": { - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-config-provider": "3.208.0", - "@aws-sdk/util-middleware": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/credential-provider-env": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.226.0.tgz", - "integrity": "sha512-sd8uK1ojbXxaZXlthzw/VXZwCPUtU3PjObOfr3Evj7MPIM2IH8h29foOlggx939MdLQGboJf9gKvLlvKDWtJRA==", - "requires": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/credential-provider-imds": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.226.0.tgz", - "integrity": "sha512-//z/COQm2AjYFI1Lb0wKHTQSrvLFTyuKLFQGPJsKS7DPoxGOCKB7hmYerlbl01IDoCxTdyL//TyyPxbZEOQD5Q==", - "requires": { - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/credential-provider-ini": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.245.0.tgz", - "integrity": "sha512-1SjfVc5Wg0lLRUvwMrfjGgFkl+zfxn74gnkPr6by1QyMAoTzmeUkalPLAIqd+uHtFom9e3K633BQtX7zVPZ5XQ==", - "requires": { - "@aws-sdk/credential-provider-env": "3.226.0", - "@aws-sdk/credential-provider-imds": "3.226.0", - "@aws-sdk/credential-provider-process": "3.226.0", - "@aws-sdk/credential-provider-sso": "3.245.0", - "@aws-sdk/credential-provider-web-identity": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/credential-provider-node": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.245.0.tgz", - "integrity": "sha512-Dwv8zmRLTDLeEkGrK/sLNFZSC+ahXZxr07CuID054QKACIdUEvkqYlnalRiTeXngiHGQ54u8wU7f0D32R2oL0g==", - "requires": { - "@aws-sdk/credential-provider-env": "3.226.0", - "@aws-sdk/credential-provider-imds": "3.226.0", - "@aws-sdk/credential-provider-ini": "3.245.0", - "@aws-sdk/credential-provider-process": "3.226.0", - "@aws-sdk/credential-provider-sso": "3.245.0", - "@aws-sdk/credential-provider-web-identity": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/credential-provider-process": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.226.0.tgz", - "integrity": "sha512-iUDMdnrTvbvaCFhWwqyXrhvQ9+ojPqPqXhwZtY1X/Qaz+73S9gXBPJHZaZb2Ke0yKE1Ql3bJbKvmmxC/qLQMng==", - "requires": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/credential-provider-sso": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.245.0.tgz", - "integrity": "sha512-txWrJc0WNBhXMi7q+twjx7cs/qzgTfbQ+vbag5idRmdoUeiR8rfLvihCab2NaGg50xhh+TaoUCXrgJp3E/XjYQ==", - "requires": { - "@aws-sdk/client-sso": "3.245.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/token-providers": "3.245.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/credential-provider-web-identity": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.226.0.tgz", - "integrity": "sha512-CCpv847rLB0SFOHz2igvUMFAzeT2fD3YnY4C8jltuJoEkn0ITn1Hlgt13nTJ5BUuvyti2mvyXZHmNzhMIMrIlw==", - "requires": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/endpoint-cache": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/endpoint-cache/-/endpoint-cache-3.208.0.tgz", - "integrity": "sha512-MkrCvaZhTb1qZCjcDH73t5n43h0Kr0GS+30lpXZ9PAnHJZPqv+vhWFPK0ZsFe1XktbS0WOoDR4ED+lWm0Dw7Rg==", - "requires": { - "mnemonist": "0.38.3", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/fetch-http-handler": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.226.0.tgz", - "integrity": "sha512-JewZPMNEBXfi1xVnRa7pVtK/zgZD8/lQ/YnD8pq79WuMa2cwyhDtr8oqCoqsPW+WJT5ScXoMtuHxN78l8eKWgg==", - "requires": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/querystring-builder": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-base64": "3.208.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/hash-node": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.226.0.tgz", - "integrity": "sha512-MdlJhJ9/Espwd0+gUXdZRsHuostB2WxEVAszWxobP0FTT9PnicqnfK7ExmW+DUAc0ywxtEbR3e0UND65rlSTVw==", - "requires": { - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-buffer-from": "3.208.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/invalid-dependency": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.226.0.tgz", - "integrity": "sha512-QXOYFmap8g9QzRjumcRCIo2GEZkdCwd7ePQW0OABWPhKHzlJ74vvBxywjU3s39EEBEluWXtZ7Iufg6GxZM4ifw==", - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/is-array-buffer": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz", - "integrity": "sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg==", - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-content-length": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.226.0.tgz", - "integrity": "sha512-ksUzlHJN2JMuyavjA46a4sctvnrnITqt2tbGGWWrAuXY1mel2j+VbgnmJUiwHKUO6bTFBBeft5Vd1TSOb4JmiA==", - "requires": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-endpoint": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.226.0.tgz", - "integrity": "sha512-EvLFafjtUxTT0AC9p3aBQu1/fjhWdIeK58jIXaNFONfZ3F8QbEYUPuF/SqZvJM6cWfOO9qwYKkRDbCSTYhprIg==", - "requires": { - "@aws-sdk/middleware-serde": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/url-parser": "3.226.0", - "@aws-sdk/util-config-provider": "3.208.0", - "@aws-sdk/util-middleware": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-endpoint-discovery": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.234.0.tgz", - "integrity": "sha512-HNZJbxXrSJfITJjAisqrju7T4S7U186xcmYr28CZX9XQNm6fc/bxcqj+8JRntWsekiJYyTvQLIrKxiCaa+TA9A==", - "requires": { - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/endpoint-cache": "3.208.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-host-header": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.226.0.tgz", - "integrity": "sha512-haVkWVh6BUPwKgWwkL6sDvTkcZWvJjv8AgC8jiQuSl8GLZdzHTB8Qhi3IsfFta9HAuoLjxheWBE5Z/L0UrfhLA==", - "requires": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-logger": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.226.0.tgz", - "integrity": "sha512-m9gtLrrYnpN6yckcQ09rV7ExWOLMuq8mMPF/K3DbL/YL0TuILu9i2T1W+JuxSX+K9FMG2HrLAKivE/kMLr55xA==", - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-recursion-detection": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.226.0.tgz", - "integrity": "sha512-mwRbdKEUeuNH5TEkyZ5FWxp6bL2UC1WbY+LDv6YjHxmSMKpAoOueEdtU34PqDOLrpXXxIGHDFmjeGeMfktyEcA==", - "requires": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-retry": { - "version": "3.235.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.235.0.tgz", - "integrity": "sha512-50WHbJGpD3SNp9763MAlHqIhXil++JdQbKejNpHg7HsJne/ao3ub+fDOfx//mMBjpzBV25BGd5UlfL6blrClSg==", - "requires": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/service-error-classification": "3.229.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-middleware": "3.226.0", - "@aws-sdk/util-retry": "3.229.0", - "tslib": "^2.3.1", - "uuid": "^8.3.2" - } - }, - "@aws-sdk/middleware-sdk-sts": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.226.0.tgz", - "integrity": "sha512-NN9T/qoSD1kZvAT+VLny3NnlqgylYQcsgV3rvi/8lYzw/G/2s8VS6sm/VTWGGZhx08wZRv20MWzYu3bftcyqUg==", - "requires": { - "@aws-sdk/middleware-signing": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-serde": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.226.0.tgz", - "integrity": "sha512-nPuOOAkSfx9TxzdKFx0X2bDlinOxGrqD7iof926K/AEflxGD1DBdcaDdjlYlPDW2CVE8LV/rAgbYuLxh/E/1VA==", - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-signing": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.226.0.tgz", - "integrity": "sha512-E6HmtPcl+IjYDDzi1xI2HpCbBq2avNWcjvCriMZWuTAtRVpnA6XDDGW5GY85IfS3A8G8vuWqEVPr8JcYUcjfew==", - "requires": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/signature-v4": "3.226.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-middleware": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-stack": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.226.0.tgz", - "integrity": "sha512-85wF29LvPvpoed60fZGDYLwv1Zpd/cM0C22WSSFPw1SSJeqO4gtFYyCg2squfT3KI6kF43IIkOCJ+L7GtryPug==", - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/middleware-user-agent": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.226.0.tgz", - "integrity": "sha512-N1WnfzCW1Y5yWhVAphf8OPGTe8Df3vmV7/LdsoQfmpkCZgLZeK2o0xITkUQhRj1mbw7yp8tVFLFV3R2lMurdAQ==", - "requires": { - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/node-config-provider": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.226.0.tgz", - "integrity": "sha512-B8lQDqiRk7X5izFEUMXmi8CZLOKCTWQJU9HQf3ako+sF0gexo4nHN3jhoRWyLtcgC5S3on/2jxpAcqtm7kuY3w==", - "requires": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/node-http-handler": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.226.0.tgz", - "integrity": "sha512-xQCddnZNMiPmjr3W7HYM+f5ir4VfxgJh37eqZwX6EZmyItFpNNeVzKUgA920ka1VPz/ZUYB+2OFGiX3LCLkkaA==", - "requires": { - "@aws-sdk/abort-controller": "3.226.0", - "@aws-sdk/protocol-http": "3.226.0", - "@aws-sdk/querystring-builder": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/property-provider": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.226.0.tgz", - "integrity": "sha512-TsljjG+Sg0LmdgfiAlWohluWKnxB/k8xenjeozZfzOr5bHmNHtdbWv6BtNvD/R83hw7SFXxbJHlD5H4u9p2NFg==", - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/protocol-http": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.226.0.tgz", - "integrity": "sha512-zWkVqiTA9RXL6y0hhfZc9bcU4DX2NI6Hw9IhQmSPeM59mdbPjJlY4bLlMr5YxywqO3yQ/ylNoAfrEzrDjlOSRg==", - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/querystring-builder": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.226.0.tgz", - "integrity": "sha512-LVurypuNeotO4lmirKXRC4NYrZRAyMJXuwO0f2a5ZAUJCjauwYrifKue6yCfU7bls7gut7nfcR6B99WBYpHs3g==", - "requires": { - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-uri-escape": "3.201.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/querystring-parser": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.226.0.tgz", - "integrity": "sha512-FzB+VrQ47KAFxiPt2YXrKZ8AOLZQqGTLCKHzx4bjxGmwgsjV8yIbtJiJhZLMcUQV4LtGeIY9ixIqQhGvnZHE4A==", - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/service-error-classification": { - "version": "3.229.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.229.0.tgz", - "integrity": "sha512-dnzWWQ0/NoWMUZ5C0DW3dPm0wC1O76Y/SpKbuJzWPkx1EYy6r8p32Ly4D9vUzrKDbRGf48YHIF2kOkBmu21CLg==" - }, - "@aws-sdk/shared-ini-file-loader": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.226.0.tgz", - "integrity": "sha512-661VQefsARxVyyV2FX9V61V+nNgImk7aN2hYlFKla6BCwZfMng+dEtD0xVGyg1PfRw0qvEv5LQyxMVgHcUSevA==", - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/signature-v4": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.226.0.tgz", - "integrity": "sha512-/R5q5agdPd7HJB68XMzpxrNPk158EHUvkFkuRu5Qf3kkkHebEzWEBlWoVpUe6ss4rP9Tqcue6xPuaftEmhjpYw==", - "requires": { - "@aws-sdk/is-array-buffer": "3.201.0", - "@aws-sdk/types": "3.226.0", - "@aws-sdk/util-hex-encoding": "3.201.0", - "@aws-sdk/util-middleware": "3.226.0", - "@aws-sdk/util-uri-escape": "3.201.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/smithy-client": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.234.0.tgz", - "integrity": "sha512-8AtR/k4vsFvjXeQbIzq/Wy7Nbk48Ou0wUEeVYPHWHPSU8QamFWORkOwmKtKMfHAyZvmqiAPeQqHFkq+UJhWyyQ==", - "requires": { - "@aws-sdk/middleware-stack": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/token-providers": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.245.0.tgz", - "integrity": "sha512-m/spXR/vEXGb+zMqRUMQYVMwFZSTdK5RkddYqamYkNhIoLm60EYeRu57JsMMs5djKi8dBRSKiXwVHx0l2rXMjg==", - "requires": { - "@aws-sdk/client-sso-oidc": "3.245.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/shared-ini-file-loader": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/types": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.226.0.tgz", - "integrity": "sha512-MmmNHrWeO4man7wpOwrAhXlevqtOV9ZLcH4RhnG5LmRce0RFOApx24HoKENfFCcOyCm5LQBlsXCqi0dZWDWU0A==", - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/url-parser": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.226.0.tgz", - "integrity": "sha512-p5RLE0QWyP0OcTOLmFcLdVgUcUEzmEfmdrnOxyNzomcYb0p3vUagA5zfa1HVK2azsQJFBv28GfvMnba9bGhObg==", - "requires": { - "@aws-sdk/querystring-parser": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-base64": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.208.0.tgz", - "integrity": "sha512-PQniZph5A6N7uuEOQi+1hnMz/FSOK/8kMFyFO+4DgA1dZ5pcKcn5wiFwHkcTb/BsgVqQa3Jx0VHNnvhlS8JyTg==", - "requires": { - "@aws-sdk/util-buffer-from": "3.208.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-body-length-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.188.0.tgz", - "integrity": "sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==", - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-body-length-node": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.208.0.tgz", - "integrity": "sha512-3zj50e5g7t/MQf53SsuuSf0hEELzMtD8RX8C76f12OSRo2Bca4FLLYHe0TZbxcfQHom8/hOaeZEyTyMogMglqg==", - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-buffer-from": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.208.0.tgz", - "integrity": "sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw==", - "requires": { - "@aws-sdk/is-array-buffer": "3.201.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-config-provider": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.208.0.tgz", - "integrity": "sha512-DSRqwrERUsT34ug+anlMBIFooBEGwM8GejC7q00Y/9IPrQy50KnG5PW2NiTjuLKNi7pdEOlwTSEocJE15eDZIg==", - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-defaults-mode-browser": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.234.0.tgz", - "integrity": "sha512-IHMKXjTbOD8XMz5+2oCOsVP94BYb9YyjXdns0aAXr2NAo7k2+RCzXQ2DebJXppGda1F6opFutoKwyVSN0cmbMw==", - "requires": { - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "bowser": "^2.11.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-defaults-mode-node": { - "version": "3.234.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.234.0.tgz", - "integrity": "sha512-UGjQ+OjBYYhxFVtUY+jtr0ZZgzZh6OHtYwRhFt8IHewJXFCfZTyfsbX20szBj5y1S4HRIUJ7cwBLIytTqMbI5w==", - "requires": { - "@aws-sdk/config-resolver": "3.234.0", - "@aws-sdk/credential-provider-imds": "3.226.0", - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/property-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-dynamodb": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.245.0.tgz", - "integrity": "sha512-Wx06Ey92DRRSQTFfpQs1DkHSoajcwVu2TLWTg07yHXgGxdi6EveJPNqh111ot5yzHGmzPIHas/IPZe3hDttzcw==", - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-endpoints": { - "version": "3.245.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.245.0.tgz", - "integrity": "sha512-UNOFquB1tKx+8RT8n82Zb5tIwDyZHVPBg/m0LB0RsLETjr6krien5ASpqWezsXKIR1hftN9uaxN4bvf2dZrWHg==", - "requires": { - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-hex-encoding": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz", - "integrity": "sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA==", - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-locate-window": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz", - "integrity": "sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==", - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-middleware": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.226.0.tgz", - "integrity": "sha512-B96CQnwX4gRvQdaQkdUtqvDPkrptV5+va6FVeJOocU/DbSYMAScLxtR3peMS8cnlOT6nL1Eoa42OI9AfZz1VwQ==", - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-retry": { - "version": "3.229.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.229.0.tgz", - "integrity": "sha512-0zKTqi0P1inD0LzIMuXRIYYQ/8c1lWMg/cfiqUcIAF1TpatlpZuN7umU0ierpBFud7S+zDgg0oemh+Nj8xliJw==", - "requires": { - "@aws-sdk/service-error-classification": "3.229.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-uri-escape": { - "version": "3.201.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz", - "integrity": "sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA==", - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-user-agent-browser": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.226.0.tgz", - "integrity": "sha512-PhBIu2h6sPJPcv2I7ELfFizdl5pNiL4LfxrasMCYXQkJvVnoXztHA1x+CQbXIdtZOIlpjC+6BjDcE0uhnpvfcA==", - "requires": { - "@aws-sdk/types": "3.226.0", - "bowser": "^2.11.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-user-agent-node": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.226.0.tgz", - "integrity": "sha512-othPc5Dz/pkYkxH+nZPhc1Al0HndQT8zHD4e9h+EZ+8lkd8n+IsnLfTS/mSJWrfiC6UlNRVw55cItstmJyMe/A==", - "requires": { - "@aws-sdk/node-config-provider": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-utf8-browser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.188.0.tgz", - "integrity": "sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==", - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-utf8-node": { - "version": "3.208.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.208.0.tgz", - "integrity": "sha512-jKY87Acv0yWBdFxx6bveagy5FYjz+dtV8IPT7ay1E2WPWH1czoIdMAkc8tSInK31T6CRnHWkLZ1qYwCbgRfERQ==", - "requires": { - "@aws-sdk/util-buffer-from": "3.208.0", - "tslib": "^2.3.1" - } - }, - "@aws-sdk/util-waiter": { - "version": "3.226.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.226.0.tgz", - "integrity": "sha512-qYQMRxnu5k8qQihJXoIWMkBOj0+XkHHj/drLdbRnwL6ni6NcG8++cs9M3DSjIcxmxgF/7SLpDjn1H3sC7cYo4g==", - "requires": { - "@aws-sdk/abort-controller": "3.226.0", - "@aws-sdk/types": "3.226.0", - "tslib": "^2.3.1" - } - }, - "@github-docs/frontmatter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@github-docs/frontmatter/-/frontmatter-1.3.1.tgz", - "integrity": "sha512-1BFouSuheb7GelUDlLmv/Qrpi8Ybtyfch91grZbqx+aGzDEh7CAna+mAHIYaaN3HppNB8JnppGvX2DXM4v0pzQ==", - "requires": { - "gray-matter": "^4.0.2", - "lodash": "^4.17.15", - "revalidator": "^0.3.1" - } - }, - "@octokit/app": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@octokit/app/-/app-13.1.1.tgz", - "integrity": "sha512-83TPUMWPAWaACe8AJVBlg6gptbDJk/33C/0V9e0yWfBqXINqF2ZutctQIcrRcyWBPlfYmFElPbElMqlspe8UWg==", - "requires": { - "@octokit/auth-app": "^4.0.8", - "@octokit/auth-unauthenticated": "^3.0.0", - "@octokit/core": "^4.0.0", - "@octokit/oauth-app": "^4.0.7", - "@octokit/plugin-paginate-rest": "^5.0.0", - "@octokit/types": "^8.0.0", - "@octokit/webhooks": "^10.0.0" - } - }, - "@octokit/auth-app": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-4.0.8.tgz", - "integrity": "sha512-miI7y9FfS/fL1bSPsDaAfCGSxQ04iGLyisI2GA8N7P6eB6AkCOt+F1XXapJKRnAubQubvYF0dqxoTZYyKk93NQ==", - "requires": { - "@octokit/auth-oauth-app": "^5.0.0", - "@octokit/auth-oauth-user": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", - "@types/lru-cache": "^5.1.0", - "deprecation": "^2.3.1", - "lru-cache": "^6.0.0", - "universal-github-app-jwt": "^1.1.1", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/auth-oauth-app": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-5.0.4.tgz", - "integrity": "sha512-zlWuii5hAN50vsV6SJC+uIJ7SMhyWjQMEmKJQxkmNDlieE9LjnkZnbOjqRsfcG7VO7WTl4K8ccpo/3A7Kdpmrw==", - "requires": { - "@octokit/auth-oauth-device": "^4.0.0", - "@octokit/auth-oauth-user": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", - "@types/btoa-lite": "^1.0.0", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/auth-oauth-device": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-4.0.3.tgz", - "integrity": "sha512-KPTx5nMntKjNZzzltO3X4T68v22rd7Cp/TcLJXQE2U8aXPcZ9LFuww9q9Q5WUNSu3jwi3lRwzfkPguRfz1R8Vg==", - "requires": { - "@octokit/oauth-methods": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/auth-oauth-user": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-2.1.0.tgz", - "integrity": "sha512-TC2Mj8NkSy9uAnZLYX+FKB/IH6uDe+qYNzHzH8l13JlzsrTE7GKkcqtXdSGGN4tncyROAB4/KS5rDPRCEnWHlA==", - "requires": { - "@octokit/auth-oauth-device": "^4.0.0", - "@octokit/oauth-methods": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/auth-token": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.2.tgz", - "integrity": "sha512-pq7CwIMV1kmzkFTimdwjAINCXKTajZErLB4wMLYapR2nuB/Jpr66+05wOTZMSCBXP6n4DdDWT2W19Bm17vU69Q==", - "requires": { - "@octokit/types": "^8.0.0" - } - }, - "@octokit/auth-unauthenticated": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-3.0.3.tgz", - "integrity": "sha512-IyfLo1T5GmIC9+07hHGlD3gHtZI1Bona8PLhHXUnwcYDuZt0BhjlNJDYMoPG21C4r7v7+ZSxQHBKrGgkxpYb7A==", - "requires": { - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0" - } - }, - "@octokit/core": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.1.0.tgz", - "integrity": "sha512-Czz/59VefU+kKDy+ZfDwtOIYIkFjExOKf+HA92aiTZJ6EfWpFzYQWw0l54ji8bVmyhc+mGaLUbSUmXazG7z5OQ==", - "requires": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/endpoint": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.3.tgz", - "integrity": "sha512-57gRlb28bwTsdNXq+O3JTQ7ERmBTuik9+LelgcLIVfYwf235VHbN9QNo4kXExtp/h8T423cR5iJThKtFYxC7Lw==", - "requires": { - "@octokit/types": "^8.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/graphql": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.4.tgz", - "integrity": "sha512-amO1M5QUQgYQo09aStR/XO7KAl13xpigcy/kI8/N1PnZYSS69fgte+xA4+c2DISKqUZfsh0wwjc2FaCt99L41A==", - "requires": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/oauth-app": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-4.2.0.tgz", - "integrity": "sha512-gyGclT77RQMkVUEW3YBeAKY+LBSc5u3eC9Wn/Uwt3WhuKuu9mrV18EnNpDqmeNll+mdV02yyBROU29Tlili6gg==", - "requires": { - "@octokit/auth-oauth-app": "^5.0.0", - "@octokit/auth-oauth-user": "^2.0.0", - "@octokit/auth-unauthenticated": "^3.0.0", - "@octokit/core": "^4.0.0", - "@octokit/oauth-authorization-url": "^5.0.0", - "@octokit/oauth-methods": "^2.0.0", - "@types/aws-lambda": "^8.10.83", - "fromentries": "^1.3.1", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/oauth-authorization-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-5.0.0.tgz", - "integrity": "sha512-y1WhN+ERDZTh0qZ4SR+zotgsQUE1ysKnvBt1hvDRB2WRzYtVKQjn97HEPzoehh66Fj9LwNdlZh+p6TJatT0zzg==" - }, - "@octokit/oauth-methods": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-2.0.4.tgz", - "integrity": "sha512-RDSa6XL+5waUVrYSmOlYROtPq0+cfwppP4VaQY/iIei3xlFb0expH6YNsxNrZktcLhJWSpm9uzeom+dQrXlS3A==", - "requires": { - "@octokit/oauth-authorization-url": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", - "btoa-lite": "^1.0.0" - } - }, - "@octokit/openapi-types": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", - "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==" - }, - "@octokit/plugin-paginate-rest": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-5.0.1.tgz", - "integrity": "sha512-7A+rEkS70pH36Z6JivSlR7Zqepz3KVucEFVDnSrgHXzG7WLAzYwcHZbKdfTXHwuTHbkT1vKvz7dHl1+HNf6Qyw==", - "requires": { - "@octokit/types": "^8.0.0" - } - }, - "@octokit/plugin-rest-endpoint-methods": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.7.0.tgz", - "integrity": "sha512-orxQ0fAHA7IpYhG2flD2AygztPlGYNAdlzYz8yrD8NDgelPfOYoRPROfEyIe035PlxvbYrgkfUZIhSBKju/Cvw==", - "requires": { - "@octokit/types": "^8.0.0", - "deprecation": "^2.3.1" - } - }, - "@octokit/plugin-retry": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-4.0.3.tgz", - "integrity": "sha512-tDR+4Cs9GPPNJ7/RjTEq5ty2wqjKe1hRUV7/hch+nORow5LshlHXTT1qfYNsFPw3S9szvFFAfDEFq/xwrEpL7g==", - "requires": { - "@octokit/types": "^8.0.0", - "bottleneck": "^2.15.3" - } - }, - "@octokit/plugin-throttling": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-4.3.2.tgz", - "integrity": "sha512-ZaCK599h3tzcoy0Jtdab95jgmD7X9iAk59E2E7hYKCAmnURaI4WpzwL9vckImilybUGrjY1JOWJapDs2N2D3vw==", - "requires": { - "@octokit/types": "^8.0.0", - "bottleneck": "^2.15.3" - } - }, - "@octokit/request": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.2.tgz", - "integrity": "sha512-6VDqgj0HMc2FUX2awIs+sM6OwLgwHvAi4KCK3mT2H2IKRt6oH9d0fej5LluF5mck1lRR/rFWN0YIDSYXYSylbw==", - "requires": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/request-error": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.2.tgz", - "integrity": "sha512-WMNOFYrSaX8zXWoJg9u/pKgWPo94JXilMLb2VManNOby9EZxrQaBe/QSC4a1TzpAlpxofg2X/jMnCyZgL6y7eg==", - "requires": { - "@octokit/types": "^8.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@octokit/types": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.1.1.tgz", - "integrity": "sha512-7tjk+6DyhYAmei8FOEwPfGKc0VE1x56CKPJ+eE44zhDbOyMT+9yan8apfQFxo8oEFsy+0O7PiBtH8w0Yo0Y9Kw==", - "requires": { - "@octokit/openapi-types": "^14.0.0" - } - }, - "@octokit/webhooks": { - "version": "10.6.1", - "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-10.6.1.tgz", - "integrity": "sha512-+1LZDqSD9geJq6T1GRvjilzx+1l8SrJm9gdQlpOUFeIHhgYJXDvsobx3Ha4yvX4BjhH47BtyuEPZW6EUAOCwNw==", - "requires": { - "@octokit/request-error": "^3.0.0", - "@octokit/webhooks-methods": "^3.0.0", - "@octokit/webhooks-types": "6.7.0", - "aggregate-error": "^3.1.0" - } - }, - "@octokit/webhooks-methods": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-3.0.2.tgz", - "integrity": "sha512-Vlnv5WBscf07tyAvfDbp7pTkMZUwk7z7VwEF32x6HqI+55QRwBTcT+D7DDjZXtad/1dU9E32x0HmtDlF9VIRaQ==" - }, - "@octokit/webhooks-types": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-6.7.0.tgz", - "integrity": "sha512-bykm7UkSnxmb2uhSfcLM1Pity/LQ6ZBSdzy9HU0vXjR+2g+tzlmRhXb7Go8oj0TlgO+vDrTivGXju6zkzOGKjA==" - }, - "@sendgrid/client": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@sendgrid/client/-/client-7.7.0.tgz", - "integrity": "sha512-SxH+y8jeAQSnDavrTD0uGDXYIIkFylCo+eDofVmZLQ0f862nnqbC3Vd1ej6b7Le7lboyzQF6F7Fodv02rYspuA==", - "requires": { - "@sendgrid/helpers": "^7.7.0", - "axios": "^0.26.0" - }, - "dependencies": { - "axios": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", - "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", - "requires": { - "follow-redirects": "^1.14.8" - } - } - } - }, - "@sendgrid/helpers": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@sendgrid/helpers/-/helpers-7.7.0.tgz", - "integrity": "sha512-3AsAxfN3GDBcXoZ/y1mzAAbKzTtUZ5+ZrHOmWQ279AuaFXUNCh9bPnRpN504bgveTqoW+11IzPg3I0WVgDINpw==", - "requires": { - "deepmerge": "^4.2.2" - } - }, - "@sendgrid/mail": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@sendgrid/mail/-/mail-7.7.0.tgz", - "integrity": "sha512-5+nApPE9wINBvHSUxwOxkkQqM/IAAaBYoP9hw7WwgDNQPxraruVqHizeTitVtKGiqWCKm2mnjh4XGN3fvFLqaw==", - "requires": { - "@sendgrid/client": "^7.7.0", - "@sendgrid/helpers": "^7.7.0" - } - }, - "@types/aws-lambda": { - "version": "8.10.109", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.109.tgz", - "integrity": "sha512-/ME92FneNyXQzrAfcnQQlW1XkCZGPDlpi2ao1MJwecN+6SbeonKeggU8eybv1DfKli90FAVT1MlIZVXfwVuCyg==" - }, - "@types/btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==" - }, - "@types/jsonwebtoken": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz", - "integrity": "sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw==", - "requires": { - "@types/node": "*" - } - }, - "@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" - }, - "@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "axios": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.2.tgz", - "integrity": "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==", - "requires": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" - }, - "bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" - }, - "bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" - }, - "btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==" - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==" - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "fast-xml-parser": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.11.tgz", - "integrity": "sha512-4aUg3aNRR/WjQAcpceODG1C3x3lFANXRo8+1biqfieHmg9pyMt7qB4lQV/Ta6sJCTbA5vfD8fnA8S54JATiFUA==", - "requires": { - "strnum": "^1.0.5" - } - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==" - }, - "gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "requires": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - } - }, - "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - } - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", - "requires": { - "jws": "^3.2.2", - "lodash": "^4.17.21", - "ms": "^2.1.1", - "semver": "^7.3.8" - } - }, - "jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" - }, - "mnemonist": { - "version": "0.38.3", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.3.tgz", - "integrity": "sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==", - "requires": { - "obliterator": "^1.6.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node-fetch": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz", - "integrity": "sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "obliterator": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-1.6.1.tgz", - "integrity": "sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig==" - }, - "octokit": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/octokit/-/octokit-2.0.11.tgz", - "integrity": "sha512-Ivjapy5RXWvJfmZe0BvfMM2gnNi39rjheZV/s3SjICb7gfl83JWPDmBERe4f/l2czdRnj4NVIn4YO7Q737oLCg==", - "requires": { - "@octokit/app": "^13.1.1", - "@octokit/core": "^4.0.4", - "@octokit/oauth-app": "^4.0.6", - "@octokit/plugin-paginate-rest": "^5.0.0", - "@octokit/plugin-rest-endpoint-methods": "^6.0.0", - "@octokit/plugin-retry": "^4.0.3", - "@octokit/plugin-throttling": "^4.0.1", - "@octokit/types": "^8.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "revalidator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.3.1.tgz", - "integrity": "sha512-orq+Nw+V5pDpQwGEuN2n1AgJ+0A8WqhFHKt5KgkxfAowUKgO1CWV32IR3TNB4g9/FX3gJt9qBJO8DYlwonnB0Q==" - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "requires": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "showdown": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/showdown/-/showdown-2.1.0.tgz", - "integrity": "sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==", - "requires": { - "commander": "^9.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==" - }, - "strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - }, - "uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "optional": true - }, - "universal-github-app-jwt": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz", - "integrity": "sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w==", - "requires": { - "@types/jsonwebtoken": "^9.0.0", - "jsonwebtoken": "^9.0.0" - } - }, - "universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } -} diff --git a/layers/package.json b/layers/package.json deleted file mode 100644 index 5415d37..0000000 --- a/layers/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "dependency-layer", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "allenheltondev", - "license": "ISC", - "dependencies": { - "@aws-sdk/client-dynamodb": "^3.231.0", - "@aws-sdk/client-secrets-manager": "^3.231.0", - "@aws-sdk/client-sfn": "^3.231.0", - "@aws-sdk/util-dynamodb": "^3.231.0", - "@github-docs/frontmatter": "^1.3.1", - "@sendgrid/client": "^7.7.0", - "@sendgrid/mail": "^7.7.0", - "axios": "^1.2.1", - "handlebars": "^4.7.7", - "octokit": "^2.0.10", - "showdown": "^2.1.0" - } -} diff --git a/lib/blog-crossposting-automation-stack.ts b/lib/blog-crossposting-automation-stack.ts new file mode 100644 index 0000000..b2b90f1 --- /dev/null +++ b/lib/blog-crossposting-automation-stack.ts @@ -0,0 +1,115 @@ +import { StackProps, Stack } from "aws-cdk-lib"; +import { EventBus, Rule } from "aws-cdk-lib/aws-events"; +import { LambdaFunction } from "aws-cdk-lib/aws-events-targets"; +import { Runtime } from "aws-cdk-lib/aws-lambda"; +import { NodejsFunction } from "aws-cdk-lib/aws-lambda-nodejs"; +import { Secret } from "aws-cdk-lib/aws-secretsmanager"; +import { Construct } from "constructs"; +import { join } from "path"; +import { DynamoDb } from "./dyanmo"; + +export interface BlogCrosspostingAutomationStackProps extends StackProps { + githubOwner: string; + githubRepo: string; + amplifyProjectId: string; + mediumPublicationId: string; + mediumAuthorId: string; + devOrganizationId: string; + hashnodePublicationId: string; + hashnodeBlogUrl: string; + blogBaseUrl: string; + blogContentPath: string; + notificationEmail: string; + sendgridFromEmail: string; +} +export class BlogCrosspostingAutomationStack extends Stack { + constructor( + scope: Construct, + id: string, + props: BlogCrosspostingAutomationStackProps + ) { + super(scope, id, props); + + const { table } = new DynamoDb(this, `CrosspostTable`); + + const eventBus = EventBus.fromEventBusName(this, `Bus`, "default"); + + const secret = Secret.fromSecretNameV2( + this, + `CrosspostSecrets`, + `CrosspostSecrets` + ); + + const lambdaProps = { + runtime: Runtime.NODEJS_18_X, + environment: { + TABLE_NAME: table.tableName, + SECRET_ID: secret.secretName, + }, + }; + + const parsePostFn = new NodejsFunction(this, `ParsePostFn`, { + ...lambdaProps, + entry: join(__dirname, `../functions/parse-post.ts`), + }); + + const sendApiRequestFn = new NodejsFunction(this, `SendApiRequestFn`, { + ...lambdaProps, + entry: join(__dirname, `../functions/send-api-request.ts`), + }); + secret.grantRead(sendApiRequestFn); + + const loadCrossPostsFn = new NodejsFunction(this, `LoadCrossPostsFn`, { + ...lambdaProps, + entry: join(__dirname, `../functions/load-cross-posts.ts`), + }); + table.grantWriteData(loadCrossPostsFn); + + const identifyNewContentFn = new NodejsFunction( + this, + `IdentifyNewContentFn`, + { + ...lambdaProps, + entry: join(__dirname, `../functions/identify-new-content.ts`), + } + ); + secret.grantRead(identifyNewContentFn); + new Rule(this, `NewArticlesRule`, { + eventBus, + eventPattern: { + source: ["aws.amplify"], + detailType: ["Amplify Deployment Status Change"], + detail: { + appId: props.amplifyProjectId, + jobStatus: "SUCCEED", + }, + }, + targets: [new LambdaFunction(identifyNewContentFn)], + }); + eventBus.grantPutEventsTo(identifyNewContentFn); + + const sendEmailFn = new NodejsFunction(this, `SendEmailFn`, { + ...lambdaProps, + entry: join(__dirname, `../functions/send-email-sendgrid.ts`), + }); + secret.grantRead(sendEmailFn); + new Rule(this, `SendEmailRule`, { + eventBus, + eventPattern: { + detailType: ["Send Email"], + }, + targets: [new LambdaFunction(sendEmailFn)], + }); + + // TODO convert the state machine + + new Rule(this, "CrossPostMachineRule", { + eventBus, + eventPattern: { + source: [`cross-post`], + detailType: ["process-new-content"], + }, + // targets: [new SfnStateMachine(stateMachine, {})] + }); + } +} diff --git a/lib/dyanmo.ts b/lib/dyanmo.ts new file mode 100644 index 0000000..e90111a --- /dev/null +++ b/lib/dyanmo.ts @@ -0,0 +1,29 @@ +import { RemovalPolicy } from "aws-cdk-lib"; +import { + Table, + AttributeType, + BillingMode, + ProjectionType, +} from "aws-cdk-lib/aws-dynamodb"; +import { Construct } from "constructs"; + +export class DynamoDb extends Construct { + table: Table; + constructor(scope: Construct, id: string) { + super(scope, id); + this.table = new Table(this, `ActivityPubTable`, { + partitionKey: { name: "pk", type: AttributeType.STRING }, + sortKey: { name: "sk", type: AttributeType.STRING }, + billingMode: BillingMode.PAY_PER_REQUEST, + timeToLiveAttribute: "ttl", + removalPolicy: RemovalPolicy.DESTROY, + }); + + this.table.addGlobalSecondaryIndex({ + indexName: "GSI1", + partitionKey: { name: "GSI1PK", type: AttributeType.STRING }, + sortKey: { name: "GSI1SK", type: AttributeType.STRING }, + projectionType: ProjectionType.ALL, + }); + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..0688d96 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,11325 @@ +{ + "name": "blog-crossposting-automation", + "version": "0.1.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "blog-crossposting-automation", + "version": "0.1.0", + "dependencies": { + "@aws-sdk/client-dynamodb": "^3.229.0", + "@aws-sdk/client-eventbridge": "^3.264.0", + "@aws-sdk/client-secrets-manager": "^3.231.0", + "@aws-sdk/client-sfn": "^3.229.0", + "@aws-sdk/util-dynamodb": "^3.229.0", + "@github-docs/frontmatter": "^1.3.1", + "@sendgrid/client": "^7.7.0", + "@sendgrid/mail": "^7.7.0", + "aws-cdk-lib": "2.63.0", + "axios": "^1.2.1", + "constructs": "^10.0.0", + "handlebars": "^4.7.7", + "octokit": "^2.0.10", + "showdown": "^2.1.0", + "source-map-support": "^0.5.21" + }, + "bin": { + "blog-crossposting-automation": "bin/blog-crossposting-automation.js" + }, + "devDependencies": { + "@types/aws-lambda": "^8.10.110", + "@types/jest": "^29.4.0", + "@types/node": "18.11.18", + "aws-cdk": "2.63.0", + "esbuild": "^0.17.5", + "jest": "^29.4.1", + "ts-jest": "^29.0.5", + "ts-node": "^10.9.1", + "typescript": "~4.9.4" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@aws-cdk/asset-awscli-v1": { + "version": "2.2.56", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.56.tgz", + "integrity": "sha512-+o6SvOsPbeloSscRGBrVXcuAQML20KS1sRrjp7lF5Abkkdjbc2gmEVqOlHtzOyhriJz3Zr16yrcCWuNeAawMXw==" + }, + "node_modules/@aws-cdk/asset-kubectl-v20": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.1.tgz", + "integrity": "sha512-U1ntiX8XiMRRRH5J1IdC+1t5CE89015cwyt5U63Cpk0GnMlN5+h9WsWMlKlPXZR4rdq/m806JRlBMRpBUB2Dhw==" + }, + "node_modules/@aws-cdk/asset-node-proxy-agent-v5": { + "version": "2.0.45", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v5/-/asset-node-proxy-agent-v5-2.0.45.tgz", + "integrity": "sha512-Ys98Zu4tMkDEr2jChe7oAbB/u857QPEMKsAKbNaKJtODpupQOdWIcKw0sEAQtamNvTrNRSEaLGEgMEpxKvcHKA==" + }, + "node_modules/@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/sha256-js": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/abort-controller": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.257.0.tgz", + "integrity": "sha512-ekWy391lOerS0ZECdhp/c+X7AToJIpfNrCPjuj3bKr+GMQYckGsYsdbm6AUD4sxBmfvuaQmVniSXWovaxwcFcQ==", + "dependencies": { + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.264.0.tgz", + "integrity": "sha512-5CPrUdZYf2UDVDG4bPTN5GCyvwCEoMBTEDTRN8stvTBuYiTNGtQfflPaC0BUYSD+Vtm66XPCVBSzXO5ghqqywg==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.264.0", + "@aws-sdk/config-resolver": "3.259.0", + "@aws-sdk/credential-provider-node": "3.264.0", + "@aws-sdk/fetch-http-handler": "3.257.0", + "@aws-sdk/hash-node": "3.257.0", + "@aws-sdk/invalid-dependency": "3.257.0", + "@aws-sdk/middleware-content-length": "3.257.0", + "@aws-sdk/middleware-endpoint": "3.264.0", + "@aws-sdk/middleware-endpoint-discovery": "3.259.0", + "@aws-sdk/middleware-host-header": "3.257.0", + "@aws-sdk/middleware-logger": "3.257.0", + "@aws-sdk/middleware-recursion-detection": "3.257.0", + "@aws-sdk/middleware-retry": "3.259.0", + "@aws-sdk/middleware-serde": "3.257.0", + "@aws-sdk/middleware-signing": "3.257.0", + "@aws-sdk/middleware-stack": "3.257.0", + "@aws-sdk/middleware-user-agent": "3.257.0", + "@aws-sdk/node-config-provider": "3.259.0", + "@aws-sdk/node-http-handler": "3.257.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/smithy-client": "3.261.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/url-parser": "3.257.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.261.0", + "@aws-sdk/util-defaults-mode-node": "3.261.0", + "@aws-sdk/util-endpoints": "3.257.0", + "@aws-sdk/util-retry": "3.257.0", + "@aws-sdk/util-user-agent-browser": "3.257.0", + "@aws-sdk/util-user-agent-node": "3.259.0", + "@aws-sdk/util-utf8": "3.254.0", + "@aws-sdk/util-waiter": "3.257.0", + "tslib": "^2.3.1", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-eventbridge": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-eventbridge/-/client-eventbridge-3.264.0.tgz", + "integrity": "sha512-v6LXaJXBtVTCP46iHLy2LGGu7WfWduwt/Ww5VhTRCIsBiviV/9tJ2p+xL1AlZs3vZ6em/xS6JoLJ8kuVI0l2VA==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.264.0", + "@aws-sdk/config-resolver": "3.259.0", + "@aws-sdk/credential-provider-node": "3.264.0", + "@aws-sdk/fetch-http-handler": "3.257.0", + "@aws-sdk/hash-node": "3.257.0", + "@aws-sdk/invalid-dependency": "3.257.0", + "@aws-sdk/middleware-content-length": "3.257.0", + "@aws-sdk/middleware-endpoint": "3.264.0", + "@aws-sdk/middleware-host-header": "3.257.0", + "@aws-sdk/middleware-logger": "3.257.0", + "@aws-sdk/middleware-recursion-detection": "3.257.0", + "@aws-sdk/middleware-retry": "3.259.0", + "@aws-sdk/middleware-serde": "3.257.0", + "@aws-sdk/middleware-signing": "3.257.0", + "@aws-sdk/middleware-stack": "3.257.0", + "@aws-sdk/middleware-user-agent": "3.257.0", + "@aws-sdk/node-config-provider": "3.259.0", + "@aws-sdk/node-http-handler": "3.257.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/signature-v4-multi-region": "3.264.0", + "@aws-sdk/smithy-client": "3.261.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/url-parser": "3.257.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.261.0", + "@aws-sdk/util-defaults-mode-node": "3.261.0", + "@aws-sdk/util-endpoints": "3.257.0", + "@aws-sdk/util-retry": "3.257.0", + "@aws-sdk/util-user-agent-browser": "3.257.0", + "@aws-sdk/util-user-agent-node": "3.259.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-secrets-manager": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.264.0.tgz", + "integrity": "sha512-Fp6qLY9Q7GH4Hmpna69FYvikJpd58YoA80aCAdAY6gHS8stJHsgyqhM3NGwK5YvVFLqcEVVEeyaMFpjaGe4Qgw==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.264.0", + "@aws-sdk/config-resolver": "3.259.0", + "@aws-sdk/credential-provider-node": "3.264.0", + "@aws-sdk/fetch-http-handler": "3.257.0", + "@aws-sdk/hash-node": "3.257.0", + "@aws-sdk/invalid-dependency": "3.257.0", + "@aws-sdk/middleware-content-length": "3.257.0", + "@aws-sdk/middleware-endpoint": "3.264.0", + "@aws-sdk/middleware-host-header": "3.257.0", + "@aws-sdk/middleware-logger": "3.257.0", + "@aws-sdk/middleware-recursion-detection": "3.257.0", + "@aws-sdk/middleware-retry": "3.259.0", + "@aws-sdk/middleware-serde": "3.257.0", + "@aws-sdk/middleware-signing": "3.257.0", + "@aws-sdk/middleware-stack": "3.257.0", + "@aws-sdk/middleware-user-agent": "3.257.0", + "@aws-sdk/node-config-provider": "3.259.0", + "@aws-sdk/node-http-handler": "3.257.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/smithy-client": "3.261.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/url-parser": "3.257.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.261.0", + "@aws-sdk/util-defaults-mode-node": "3.261.0", + "@aws-sdk/util-endpoints": "3.257.0", + "@aws-sdk/util-retry": "3.257.0", + "@aws-sdk/util-user-agent-browser": "3.257.0", + "@aws-sdk/util-user-agent-node": "3.259.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sfn": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sfn/-/client-sfn-3.264.0.tgz", + "integrity": "sha512-5h6X3xzGW5+GYB7zAObmpxEObdDZEtRpYj+w2Xj8K6pF6RmzO57cOML2V4bncfkUkeLpvR8S3L7mXWreRyr/sg==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.264.0", + "@aws-sdk/config-resolver": "3.259.0", + "@aws-sdk/credential-provider-node": "3.264.0", + "@aws-sdk/fetch-http-handler": "3.257.0", + "@aws-sdk/hash-node": "3.257.0", + "@aws-sdk/invalid-dependency": "3.257.0", + "@aws-sdk/middleware-content-length": "3.257.0", + "@aws-sdk/middleware-endpoint": "3.264.0", + "@aws-sdk/middleware-host-header": "3.257.0", + "@aws-sdk/middleware-logger": "3.257.0", + "@aws-sdk/middleware-recursion-detection": "3.257.0", + "@aws-sdk/middleware-retry": "3.259.0", + "@aws-sdk/middleware-serde": "3.257.0", + "@aws-sdk/middleware-signing": "3.257.0", + "@aws-sdk/middleware-stack": "3.257.0", + "@aws-sdk/middleware-user-agent": "3.257.0", + "@aws-sdk/node-config-provider": "3.259.0", + "@aws-sdk/node-http-handler": "3.257.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/smithy-client": "3.261.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/url-parser": "3.257.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.261.0", + "@aws-sdk/util-defaults-mode-node": "3.261.0", + "@aws-sdk/util-endpoints": "3.257.0", + "@aws-sdk/util-retry": "3.257.0", + "@aws-sdk/util-user-agent-browser": "3.257.0", + "@aws-sdk/util-user-agent-node": "3.259.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.264.0.tgz", + "integrity": "sha512-p+7sYpRcdv9omnnsPhD/vOFuZ1SpfV62ZgistBK/RDsQg2W9SIWQRW1KPt7gOCQ0nwp4efntw4Sle0LjS7ykxg==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.259.0", + "@aws-sdk/fetch-http-handler": "3.257.0", + "@aws-sdk/hash-node": "3.257.0", + "@aws-sdk/invalid-dependency": "3.257.0", + "@aws-sdk/middleware-content-length": "3.257.0", + "@aws-sdk/middleware-endpoint": "3.264.0", + "@aws-sdk/middleware-host-header": "3.257.0", + "@aws-sdk/middleware-logger": "3.257.0", + "@aws-sdk/middleware-recursion-detection": "3.257.0", + "@aws-sdk/middleware-retry": "3.259.0", + "@aws-sdk/middleware-serde": "3.257.0", + "@aws-sdk/middleware-stack": "3.257.0", + "@aws-sdk/middleware-user-agent": "3.257.0", + "@aws-sdk/node-config-provider": "3.259.0", + "@aws-sdk/node-http-handler": "3.257.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/smithy-client": "3.261.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/url-parser": "3.257.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.261.0", + "@aws-sdk/util-defaults-mode-node": "3.261.0", + "@aws-sdk/util-endpoints": "3.257.0", + "@aws-sdk/util-retry": "3.257.0", + "@aws-sdk/util-user-agent-browser": "3.257.0", + "@aws-sdk/util-user-agent-node": "3.259.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.264.0.tgz", + "integrity": "sha512-82hGEbfsD4lBGIF1q8o82jTNSgBCcBpfFsvA+ltZf0bh4ChIWOi4vVvg8G+zVQN1mm/Rj8vWYO/D0tNF8OSyWw==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.259.0", + "@aws-sdk/fetch-http-handler": "3.257.0", + "@aws-sdk/hash-node": "3.257.0", + "@aws-sdk/invalid-dependency": "3.257.0", + "@aws-sdk/middleware-content-length": "3.257.0", + "@aws-sdk/middleware-endpoint": "3.264.0", + "@aws-sdk/middleware-host-header": "3.257.0", + "@aws-sdk/middleware-logger": "3.257.0", + "@aws-sdk/middleware-recursion-detection": "3.257.0", + "@aws-sdk/middleware-retry": "3.259.0", + "@aws-sdk/middleware-serde": "3.257.0", + "@aws-sdk/middleware-stack": "3.257.0", + "@aws-sdk/middleware-user-agent": "3.257.0", + "@aws-sdk/node-config-provider": "3.259.0", + "@aws-sdk/node-http-handler": "3.257.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/smithy-client": "3.261.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/url-parser": "3.257.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.261.0", + "@aws-sdk/util-defaults-mode-node": "3.261.0", + "@aws-sdk/util-endpoints": "3.257.0", + "@aws-sdk/util-retry": "3.257.0", + "@aws-sdk/util-user-agent-browser": "3.257.0", + "@aws-sdk/util-user-agent-node": "3.259.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.264.0.tgz", + "integrity": "sha512-sco1jREkDdds4Z3V19Vlu/YpBHSzeEt1KFqOPnbjFw7pSakRNzpyWmLLxOwWjwgGKt6pSF3Aw0ZOMYsAUDc5qQ==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.259.0", + "@aws-sdk/credential-provider-node": "3.264.0", + "@aws-sdk/fetch-http-handler": "3.257.0", + "@aws-sdk/hash-node": "3.257.0", + "@aws-sdk/invalid-dependency": "3.257.0", + "@aws-sdk/middleware-content-length": "3.257.0", + "@aws-sdk/middleware-endpoint": "3.264.0", + "@aws-sdk/middleware-host-header": "3.257.0", + "@aws-sdk/middleware-logger": "3.257.0", + "@aws-sdk/middleware-recursion-detection": "3.257.0", + "@aws-sdk/middleware-retry": "3.259.0", + "@aws-sdk/middleware-sdk-sts": "3.257.0", + "@aws-sdk/middleware-serde": "3.257.0", + "@aws-sdk/middleware-signing": "3.257.0", + "@aws-sdk/middleware-stack": "3.257.0", + "@aws-sdk/middleware-user-agent": "3.257.0", + "@aws-sdk/node-config-provider": "3.259.0", + "@aws-sdk/node-http-handler": "3.257.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/smithy-client": "3.261.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/url-parser": "3.257.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.261.0", + "@aws-sdk/util-defaults-mode-node": "3.261.0", + "@aws-sdk/util-endpoints": "3.257.0", + "@aws-sdk/util-retry": "3.257.0", + "@aws-sdk/util-user-agent-browser": "3.257.0", + "@aws-sdk/util-user-agent-node": "3.259.0", + "@aws-sdk/util-utf8": "3.254.0", + "fast-xml-parser": "4.0.11", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/config-resolver": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.259.0.tgz", + "integrity": "sha512-gViMRsc4Ye6+nzJ0OYTZIT8m4glIAdtugN2Sr/t6P2iJW5X0bSL/EcbcHBgsve1lHjeGPeyzVkT7UnyGOZ5Z/A==", + "dependencies": { + "@aws-sdk/signature-v4": "3.257.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/util-config-provider": "3.208.0", + "@aws-sdk/util-middleware": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.257.0.tgz", + "integrity": "sha512-GsmBi5Di6hk1JAi1iB6/LCY8o+GmlCvJoB7wuoVmXI3VxRVwptUVjuj8EtJbIrVGrF9dSuIRPCzUoSuzEzYGlg==", + "dependencies": { + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-imds": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.259.0.tgz", + "integrity": "sha512-yCxoYWZAaDrCUEWxRfrpB0Mp1cFgJEMYW8T6GIb/+DQ5QLpZmorgaVD/j90QXupqFrR5tlxwuskBIkdD2E9YNg==", + "dependencies": { + "@aws-sdk/node-config-provider": "3.259.0", + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/url-parser": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.264.0.tgz", + "integrity": "sha512-UU5NNlfn+Go+5PLBzyTH1YE3r/pgykpE4QYFon87sCnEQnQH9xmlRTW1f1cBSQ9kivbFZd2/C2X3qhB3fe2JfA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.257.0", + "@aws-sdk/credential-provider-imds": "3.259.0", + "@aws-sdk/credential-provider-process": "3.257.0", + "@aws-sdk/credential-provider-sso": "3.264.0", + "@aws-sdk/credential-provider-web-identity": "3.257.0", + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/shared-ini-file-loader": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.264.0.tgz", + "integrity": "sha512-DPzL7oawcILs5Mduim9Z8SVeJaUpaDRVbUIrBHsMBu+N7Zuqtzr+0ckHc1bEi3iYq2QUCk5pH5vpQaZYkMlbtw==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.257.0", + "@aws-sdk/credential-provider-imds": "3.259.0", + "@aws-sdk/credential-provider-ini": "3.264.0", + "@aws-sdk/credential-provider-process": "3.257.0", + "@aws-sdk/credential-provider-sso": "3.264.0", + "@aws-sdk/credential-provider-web-identity": "3.257.0", + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/shared-ini-file-loader": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.257.0.tgz", + "integrity": "sha512-xK8uYeNXaclaBCGrLi4z2pxPRngqLf5BM5jg2fn57zqvlL9V5gJF972FehrVBL0bfp1/laG0ZJtD2K2sapyWAw==", + "dependencies": { + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/shared-ini-file-loader": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.264.0.tgz", + "integrity": "sha512-CJuAlqIIJap6LXoqimvEAnYZ7Kb5pTbiS3e+aY+fajO3OPujmQpHuiY8kOmscjwZ4ErJdEskivcTGwXph0dPZQ==", + "dependencies": { + "@aws-sdk/client-sso": "3.264.0", + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/shared-ini-file-loader": "3.257.0", + "@aws-sdk/token-providers": "3.264.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.257.0.tgz", + "integrity": "sha512-Cm0uvRv4JuIbD0Kp3W0J/vwjADIyCx8HoZi5yg+QIi5nilocuTQ3ajvLeuPVSvFvdy+yaxSc5FxNXquWt7Mngw==", + "dependencies": { + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/endpoint-cache": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/endpoint-cache/-/endpoint-cache-3.208.0.tgz", + "integrity": "sha512-MkrCvaZhTb1qZCjcDH73t5n43h0Kr0GS+30lpXZ9PAnHJZPqv+vhWFPK0ZsFe1XktbS0WOoDR4ED+lWm0Dw7Rg==", + "dependencies": { + "mnemonist": "0.38.3", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/fetch-http-handler": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.257.0.tgz", + "integrity": "sha512-zOF+RzQ+wfF7tq7tGUdPcqUTh3+k2f8KCVJE07A8kCopVq4nBu4NH6Eq29Tjpwdya3YlKvE+kFssuQRRRRex+Q==", + "dependencies": { + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/querystring-builder": "3.257.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/util-base64": "3.208.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/hash-node": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.257.0.tgz", + "integrity": "sha512-W/USUuea5Ep3OJ2U7Ve8/5KN1YsDun2WzOFUxc1PyxXP5pW6OgC15/op0e+bmWPG851clvp5S8ZuroUr3aKi3Q==", + "dependencies": { + "@aws-sdk/types": "3.257.0", + "@aws-sdk/util-buffer-from": "3.208.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/invalid-dependency": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.257.0.tgz", + "integrity": "sha512-T68SAPRNMEhpke0wlxURgogL7q0B8dfqZsSeS20BVR/lksJxLse9+pbmCDxiu1RrXoEIsEwl5rbLN+Hw8BFFYw==", + "dependencies": { + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/is-array-buffer": { + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz", + "integrity": "sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-content-length": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.257.0.tgz", + "integrity": "sha512-yiawbV2azm6QnMY1L2ypG8PDRdjOcEIvFmT0T7y0F49rfbKJOu21j1ONAoCkLrINK6kMqcD5JSQLVCoURxiTxQ==", + "dependencies": { + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-endpoint": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.264.0.tgz", + "integrity": "sha512-H9JEAug3Oo3IA2wZIplVVF6NtauCIjICXWgbNbA8Im+I2KPe0jWtOdtQv4U+tqHe9T4zIixaCM3gjUBld+FoOA==", + "dependencies": { + "@aws-sdk/middleware-serde": "3.257.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/signature-v4": "3.257.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/url-parser": "3.257.0", + "@aws-sdk/util-config-provider": "3.208.0", + "@aws-sdk/util-middleware": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-endpoint-discovery": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.259.0.tgz", + "integrity": "sha512-1FeoJKD5wRZmxsHl+g+SOm1VfBZuwW8T/7rBHah63lWB2zOrvBiwJ2jfIalXEtlZYqPRYwsxiQYgR0J5w8Fk9Q==", + "dependencies": { + "@aws-sdk/config-resolver": "3.259.0", + "@aws-sdk/endpoint-cache": "3.208.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.257.0.tgz", + "integrity": "sha512-gEi9AJdJfRfU8Qr6HK1hfhxTzyV3Giq4B/h7um99hIFAT/GCg9xiPvAOKPo6UeuiKEv3b7RpSL4s6cBvnJMJBA==", + "dependencies": { + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.257.0.tgz", + "integrity": "sha512-8RDXW/VbMKBsXDfcCLmROZcWKyrekyiPa3J1aIaBy0tq9o4xpGoXw/lwwIrNVvISAFslb57rteup34bfn6ta6w==", + "dependencies": { + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.257.0.tgz", + "integrity": "sha512-rUCih6zHh8k9Edf5N5Er4s508FYbwLM0MWTD2axzlj9TjLqEQ9OKED3wHaLffXSDzodd3oTAfJCLPbWQyoZ3ZQ==", + "dependencies": { + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-retry": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.259.0.tgz", + "integrity": "sha512-pVh1g8e84MAi7eVtWLiiiCtn82LzxOP7+LxTRHatmgIeN22yGQBZILliPDJypUPvDYlwxI1ekiK+oPTcte0Uww==", + "dependencies": { + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/service-error-classification": "3.257.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/util-middleware": "3.257.0", + "@aws-sdk/util-retry": "3.257.0", + "tslib": "^2.3.1", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.257.0.tgz", + "integrity": "sha512-d6IJCLRi3O2tm4AFK60WNhIwmMmspj1WzKR1q1TaoPzoREPG2xg+Am18wZBRkCyYuRPPrbizmkvAmAJiUolMAw==", + "dependencies": { + "@aws-sdk/middleware-signing": "3.257.0", + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/signature-v4": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-serde": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.257.0.tgz", + "integrity": "sha512-/JasfXPWFq24mnCrx9fxW/ISBSp07RJwhsF14qzm8Qy3Z0z470C+QRM6otTwAkYuuVt1wuLjja5agq3Jtzq7dQ==", + "dependencies": { + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-signing": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.257.0.tgz", + "integrity": "sha512-hCH3D83LHmm6nqmtNrGTWZCVjsQXrGHIXbd17/qrw7aPFvcAhsiiCncGFP+XsUXEKa2ZqcSNMUyPrx69ofNRZQ==", + "dependencies": { + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/signature-v4": "3.257.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/util-middleware": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-stack": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.257.0.tgz", + "integrity": "sha512-awg2F0SvwACBaw4HIObK8pQGfSqAc4Vy+YFzWSfZNVC35oRO6RsRdKHVU99lRC0LrT2Ptmfghl2DMPSrRDbvlQ==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.257.0.tgz", + "integrity": "sha512-37rt75LZyD0UWpbcFuxEGqwF3DZKSixQPl7AsDe6q3KtrO5gGQB+diH5vbY0txNNYyv5IK9WMwvY73mVmoWRmw==", + "dependencies": { + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/node-config-provider": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.259.0.tgz", + "integrity": "sha512-DUOqr71oonBvM6yKPdhDBmraqgXHCFrVWFw7hc5ZNxL2wS/EsbKfGPJp+C+SUgpn1upIWPNnh/bNoLAbBkcLsA==", + "dependencies": { + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/shared-ini-file-loader": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/node-http-handler": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.257.0.tgz", + "integrity": "sha512-8KnWHVVwaGKyTlkTU9BSOAiSovNDoagxemU2l10QqBbzUCVpljCUMUkABEGRJ1yoQCl6DJ7RtNkAyZ8Ne/E15A==", + "dependencies": { + "@aws-sdk/abort-controller": "3.257.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/querystring-builder": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/property-provider": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.257.0.tgz", + "integrity": "sha512-3rUbRAcF0GZ5PhDiXhS4yREfZ5hOEtvYEa9S/19OdM5eoypOaLU5XnFcCKfnccSP8SkdgpJujzxOMRWNWadlAQ==", + "dependencies": { + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/protocol-http": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.257.0.tgz", + "integrity": "sha512-xt7LGOgZIvbLS3418AYQLacOqx+mo5j4mPiIMz7f6AaUg+/fBUgESVsncKDqxbEJVwwCXSka8Ca0cntJmoeMSw==", + "dependencies": { + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/querystring-builder": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.257.0.tgz", + "integrity": "sha512-mZHWLP7XIkzx1GIXO5WfX/iJ+aY9TWs02RE9FkdL2+by0HEMR65L3brQTbU1mIBJ7BjaPwYH24dljUOSABX7yg==", + "dependencies": { + "@aws-sdk/types": "3.257.0", + "@aws-sdk/util-uri-escape": "3.201.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/querystring-parser": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.257.0.tgz", + "integrity": "sha512-UDrE1dEwWrWT8dG2VCrGYrPxCWOkZ1fPTPkjpkR4KZEdQDZBqU5gYZF2xPj8Nz7pjQVHFuW2wFm3XYEk56GEjg==", + "dependencies": { + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/service-error-classification": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.257.0.tgz", + "integrity": "sha512-FAyR0XsueGkkqDtkP03cTJQk52NdQ9sZelLynmmlGPUP75LApRPvFe1riKrou6+LsDbwVNVffj6mbDfIcOhaOw==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/shared-ini-file-loader": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.257.0.tgz", + "integrity": "sha512-HNjC1+Wx3xHiJc+CP14GhIdVhfQGSjroAsWseRxAhONocA9Fl1ZX4hx7+sA5c9nOoMVOovi6ivJ/6lCRPTDRrQ==", + "dependencies": { + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.257.0.tgz", + "integrity": "sha512-aLQQN59X/D0+ShzPD3Anj5ntdMA/RFeNLOUCDyDvremViGi6yxUS98usQ/8bG5Rq0sW2GGMdbFUFmrDvqdiqEQ==", + "dependencies": { + "@aws-sdk/is-array-buffer": "3.201.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/util-hex-encoding": "3.201.0", + "@aws-sdk/util-middleware": "3.257.0", + "@aws-sdk/util-uri-escape": "3.201.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.264.0.tgz", + "integrity": "sha512-45rNJeC245g2HtDlxlcgNhB9YU0PcWXGNOLOiMWq3cSMNsaKJoTD1tLdBke2VjW7Hz7QBCWLCRAftHatnWcdyg==", + "dependencies": { + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/signature-v4": "3.257.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/util-arn-parser": "3.208.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@aws-sdk/signature-v4-crt": "^3.118.0" + }, + "peerDependenciesMeta": { + "@aws-sdk/signature-v4-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/smithy-client": { + "version": "3.261.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.261.0.tgz", + "integrity": "sha512-j8XQEa3caZUVFVZfhJjaskw80O/tB+IXu84HMN44N7UkXaCFHirUsNjTDztJhnVXf/gKXzIqUqprfRnOvwLtIg==", + "dependencies": { + "@aws-sdk/middleware-stack": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.264.0.tgz", + "integrity": "sha512-1N54FCdBJRqrwFWHUoDpGI0rKhI29Or9ZwGjjcBzKzLhz5sEF/DEhuID7h1/KKEkXdQ0+lmXOFGMMrahrMpOow==", + "dependencies": { + "@aws-sdk/client-sso-oidc": "3.264.0", + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/shared-ini-file-loader": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.257.0.tgz", + "integrity": "sha512-LmqXuBQBGeaGi/3Rp7XiEX1B5IPO2UUfBVvu0wwGqVsmstT0SbOVDZGPmxygACbm64n+PRx3uTSDefRfoiWYZg==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/url-parser": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.257.0.tgz", + "integrity": "sha512-Qe/AcFe/NFZHa6cN2afXEQn9ehXxh57dWGdRjfjd2lQqNV4WW1R2pl2Tm1ZJ1dwuCNLJi4NHLMk8lrD3QQ8rdg==", + "dependencies": { + "@aws-sdk/querystring-parser": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.208.0.tgz", + "integrity": "sha512-QV4af+kscova9dv4VuHOgH8wEr/IIYHDGcnyVtkUEqahCejWr1Kuk+SBK0xMwnZY5LSycOtQ8aeqHOn9qOjZtA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-base64": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.208.0.tgz", + "integrity": "sha512-PQniZph5A6N7uuEOQi+1hnMz/FSOK/8kMFyFO+4DgA1dZ5pcKcn5wiFwHkcTb/BsgVqQa3Jx0VHNnvhlS8JyTg==", + "dependencies": { + "@aws-sdk/util-buffer-from": "3.208.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-body-length-browser": { + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.188.0.tgz", + "integrity": "sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/util-body-length-node": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.208.0.tgz", + "integrity": "sha512-3zj50e5g7t/MQf53SsuuSf0hEELzMtD8RX8C76f12OSRo2Bca4FLLYHe0TZbxcfQHom8/hOaeZEyTyMogMglqg==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-buffer-from": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.208.0.tgz", + "integrity": "sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw==", + "dependencies": { + "@aws-sdk/is-array-buffer": "3.201.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-config-provider": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.208.0.tgz", + "integrity": "sha512-DSRqwrERUsT34ug+anlMBIFooBEGwM8GejC7q00Y/9IPrQy50KnG5PW2NiTjuLKNi7pdEOlwTSEocJE15eDZIg==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-defaults-mode-browser": { + "version": "3.261.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.261.0.tgz", + "integrity": "sha512-lX3X1NfzQVV6cakepGV24uRcqevlDnQ8VgaCV8dhnw1FVThueFigyoFaUA02+uRXbV9KIbNWkEvweNtm2wvyDw==", + "dependencies": { + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/types": "3.257.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/util-defaults-mode-node": { + "version": "3.261.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.261.0.tgz", + "integrity": "sha512-4AK6yu4bOmHSocUdbGoEHbNXB09UA58ON2HBHY4NxMBuFBAd9XB2tYiyhce+Cm+o+lHbS8oQnw0VZw16WMzzew==", + "dependencies": { + "@aws-sdk/config-resolver": "3.259.0", + "@aws-sdk/credential-provider-imds": "3.259.0", + "@aws-sdk/node-config-provider": "3.259.0", + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/util-dynamodb": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.264.0.tgz", + "integrity": "sha512-JV92vDCDpYKYSHMddj/jw1LU5/smkSG7SZ6bHTHfwT50sLbG5KVZSzKt2JbGTZ78PRCD2WfVEyuitNBCkUV0Ug==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.257.0.tgz", + "integrity": "sha512-3bvmRn5XGYzPPWjLuvHBKdJOb+fijnb8Ungu9bfXnTYFsng/ndHUWeHC22O/p8w3OWoRYUIMaZHxdxe27BFozg==", + "dependencies": { + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-hex-encoding": { + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz", + "integrity": "sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz", + "integrity": "sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-middleware": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.257.0.tgz", + "integrity": "sha512-F9ieon8B8eGVs5tyZtAIG3DZEObDvujkspho0qRbUTHUosM0ylJLsMU800fmC/uRHLRrZvb/RSp59+kNDwSAMw==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-retry": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.257.0.tgz", + "integrity": "sha512-l9TOsOAYtZxwW3q5fQKW4rsD9t2HVaBfQ4zBamHkNTfB4vBVvCnz4oxkvSvA2MlxCA6am+K1K/oj917Tpqk53g==", + "dependencies": { + "@aws-sdk/service-error-classification": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/util-uri-escape": { + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz", + "integrity": "sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.257.0.tgz", + "integrity": "sha512-YdavWK6/8Cw6mypEgysGGX/dT9p9qnzFbnN5PQsUY+JJk2Nx8fKFydjGiQ+6rWPeW17RAv9mmbboh9uPVWxVlw==", + "dependencies": { + "@aws-sdk/types": "3.257.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.259.0.tgz", + "integrity": "sha512-R0VTmNs+ySDDebU98BUbsLyeIM5YmAEr9esPpy15XfSy3AWmAeru8nLlztdaLilHZzLIDzvM2t7NGk/FzZFCvA==", + "dependencies": { + "@aws-sdk/node-config-provider": "3.259.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/util-utf8": { + "version": "3.254.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8/-/util-utf8-3.254.0.tgz", + "integrity": "sha512-14Kso/eIt5/qfIBmhEL9L1IfyUqswjSTqO2mY7KOzUZ9SZbwn3rpxmtkhmATkRjD7XIlLKaxBkI7tU9Zjzj8Kw==", + "dependencies": { + "@aws-sdk/util-buffer-from": "3.208.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/util-waiter": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.257.0.tgz", + "integrity": "sha512-Fr6of3EDOcXVDs5534o7VsJMXdybB0uLy2LzeFAVSwGOY3geKhIquBAiUDqCVu9B+iTldrC0rQ9NIM7ZSpPG8w==", + "dependencies": { + "@aws-sdk/abort-controller": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.20.14", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", + "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", + "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helpers": "^7.20.7", + "@babel/parser": "^7.20.7", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.12", + "@babel/types": "^7.20.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/@babel/generator": { + "version": "7.20.14", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", + "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", + "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.10", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", + "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.13", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.20.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz", + "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", + "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.13", + "@babel/types": "^7.20.7", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.5.tgz", + "integrity": "sha512-crmPUzgCmF+qZXfl1YkiFoUta2XAfixR1tEnr/gXIixE+WL8Z0BGqfydP5oox0EUOgQMMRgtATtakyAcClQVqQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.5.tgz", + "integrity": "sha512-KHWkDqYAMmKZjY4RAN1PR96q6UOtfkWlTS8uEwWxdLtkRt/0F/csUhXIrVfaSIFxnscIBMPynGfhsMwQDRIBQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.5.tgz", + "integrity": "sha512-8fI/AnIdmWz/+1iza2WrCw8kwXK9wZp/yZY/iS8ioC+U37yJCeppi9EHY05ewJKN64ASoBIseufZROtcFnX5GA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.5.tgz", + "integrity": "sha512-EAvaoyIySV6Iif3NQCglUNpnMfHSUgC5ugt2efl3+QDntucJe5spn0udNZjTgNi6tKVqSceOw9tQ32liNZc1Xw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.5.tgz", + "integrity": "sha512-ha7QCJh1fuSwwCgoegfdaljowwWozwTDjBgjD3++WAy/qwee5uUi1gvOg2WENJC6EUyHBOkcd3YmLDYSZ2TPPA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.5.tgz", + "integrity": "sha512-VbdXJkn2aI2pQ/wxNEjEcnEDwPpxt3CWWMFYmO7CcdFBoOsABRy2W8F3kjbF9F/pecEUDcI3b5i2w+By4VQFPg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.5.tgz", + "integrity": "sha512-olgGYND1/XnnWxwhjtY3/ryjOG/M4WfcA6XH8dBTH1cxMeBemMODXSFhkw71Kf4TeZFFTN25YOomaNh0vq2iXg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.5.tgz", + "integrity": "sha512-YBdCyQwA3OQupi6W2/WO4FnI+NWFWe79cZEtlbqSESOHEg7a73htBIRiE6uHPQe7Yp5E4aALv+JxkRLGEUL7tw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.5.tgz", + "integrity": "sha512-8a0bqSwu3OlLCfu2FBbDNgQyBYdPJh1B9PvNX7jMaKGC9/KopgHs37t+pQqeMLzcyRqG6z55IGNQAMSlCpBuqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.5.tgz", + "integrity": "sha512-uCwm1r/+NdP7vndctgq3PoZrnmhmnecWAr114GWMRwg2QMFFX+kIWnp7IO220/JLgnXK/jP7VKAFBGmeOYBQYQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.5.tgz", + "integrity": "sha512-3YxhSBl5Sb6TtBjJu+HP93poBruFzgXmf3PVfIe4xOXMj1XpxboYZyw3W8BhoX/uwxzZz4K1I99jTE/5cgDT1g==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.5.tgz", + "integrity": "sha512-Hy5Z0YVWyYHdtQ5mfmfp8LdhVwGbwVuq8mHzLqrG16BaMgEmit2xKO+iDakHs+OetEx0EN/2mUzDdfdktI+Nmg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.5.tgz", + "integrity": "sha512-5dbQvBLbU/Y3Q4ABc9gi23hww1mQcM7KZ9KBqabB7qhJswYMf8WrDDOSw3gdf3p+ffmijMd28mfVMvFucuECyg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.5.tgz", + "integrity": "sha512-fp/KUB/ZPzEWGTEUgz9wIAKCqu7CjH1GqXUO2WJdik1UNBQ7Xzw7myIajpxztE4Csb9504ERiFMxZg5KZ6HlZQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.5.tgz", + "integrity": "sha512-kRV3yw19YDqHTp8SfHXfObUFXlaiiw4o2lvT1XjsPZ++22GqZwSsYWJLjMi1Sl7j9qDlDUduWDze/nQx0d6Lzw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.5.tgz", + "integrity": "sha512-vnxuhh9e4pbtABNLbT2ANW4uwQ/zvcHRCm1JxaYkzSehugoFd5iXyC4ci1nhXU13mxEwCnrnTIiiSGwa/uAF1g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.5.tgz", + "integrity": "sha512-cigBpdiSx/vPy7doUyImsQQBnBjV5f1M99ZUlaJckDAJjgXWl6y9W17FIfJTy8TxosEF6MXq+fpLsitMGts2nA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.5.tgz", + "integrity": "sha512-VdqRqPVIjjZfkf40LrqOaVuhw9EQiAZ/GNCSM2UplDkaIzYVsSnycxcFfAnHdWI8Gyt6dO15KHikbpxwx+xHbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.5.tgz", + "integrity": "sha512-ItxPaJ3MBLtI4nK+mALLEoUs6amxsx+J1ibnfcYMkqaCqHST1AkF4aENpBehty3czqw64r/XqL+W9WqU6kc2Qw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.5.tgz", + "integrity": "sha512-4u2Q6qsJTYNFdS9zHoAi80spzf78C16m2wla4eJPh4kSbRv+BpXIfl6TmBSWupD8e47B1NrTfrOlEuco7mYQtg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.5.tgz", + "integrity": "sha512-KYlm+Xu9TXsfTWAcocLuISRtqxKp/Y9ZBVg6CEEj0O5J9mn7YvBKzAszo2j1ndyzUPk+op+Tie2PJeN+BnXGqQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.5.tgz", + "integrity": "sha512-XgA9qWRqby7xdYXuF6KALsn37QGBMHsdhmnpjfZtYxKxbTOwfnDM6MYi2WuUku5poNaX2n9XGVr20zgT/2QwCw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@github-docs/frontmatter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@github-docs/frontmatter/-/frontmatter-1.3.1.tgz", + "integrity": "sha512-1BFouSuheb7GelUDlLmv/Qrpi8Ybtyfch91grZbqx+aGzDEh7CAna+mAHIYaaN3HppNB8JnppGvX2DXM4v0pzQ==", + "dependencies": { + "gray-matter": "^4.0.2", + "lodash": "^4.17.15", + "revalidator": "^0.3.1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.4.1.tgz", + "integrity": "sha512-m+XpwKSi3PPM9znm5NGS8bBReeAJJpSkL1OuFCqaMaJL2YX9YXLkkI+MBchMPwu+ZuM2rynL51sgfkQteQ1CKQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.4.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.4.1", + "jest-util": "^29.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.4.1.tgz", + "integrity": "sha512-RXFTohpBqpaTebNdg5l3I5yadnKo9zLBajMT0I38D0tDhreVBYv3fA8kywthI00sWxPztWLD3yjiUkewwu/wKA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.4.1", + "@jest/reporters": "^29.4.1", + "@jest/test-result": "^29.4.1", + "@jest/transform": "^29.4.1", + "@jest/types": "^29.4.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.4.0", + "jest-config": "^29.4.1", + "jest-haste-map": "^29.4.1", + "jest-message-util": "^29.4.1", + "jest-regex-util": "^29.2.0", + "jest-resolve": "^29.4.1", + "jest-resolve-dependencies": "^29.4.1", + "jest-runner": "^29.4.1", + "jest-runtime": "^29.4.1", + "jest-snapshot": "^29.4.1", + "jest-util": "^29.4.1", + "jest-validate": "^29.4.1", + "jest-watcher": "^29.4.1", + "micromatch": "^4.0.4", + "pretty-format": "^29.4.1", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.4.1.tgz", + "integrity": "sha512-pJ14dHGSQke7Q3mkL/UZR9ZtTOxqskZaC91NzamEH4dlKRt42W+maRBXiw/LWkdJe+P0f/zDR37+SPMplMRlPg==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.4.1", + "@jest/types": "^29.4.1", + "@types/node": "*", + "jest-mock": "^29.4.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.4.1.tgz", + "integrity": "sha512-ZxKJP5DTUNF2XkpJeZIzvnzF1KkfrhEF6Rz0HGG69fHl6Bgx5/GoU3XyaeFYEjuuKSOOsbqD/k72wFvFxc3iTw==", + "dev": true, + "dependencies": { + "expect": "^29.4.1", + "jest-snapshot": "^29.4.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.1.tgz", + "integrity": "sha512-w6YJMn5DlzmxjO00i9wu2YSozUYRBhIoJ6nQwpMYcBMtiqMGJm1QBzOf6DDgRao8dbtpDoaqLg6iiQTvv0UHhQ==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.2.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.4.1.tgz", + "integrity": "sha512-/1joI6rfHFmmm39JxNfmNAO3Nwm6Y0VoL5fJDy7H1AtWrD1CgRtqJbN9Ld6rhAkGO76qqp4cwhhxJ9o9kYjQMw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.4.1", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.4.1", + "jest-mock": "^29.4.1", + "jest-util": "^29.4.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.4.1.tgz", + "integrity": "sha512-znoK2EuFytbHH0ZSf2mQK2K1xtIgmaw4Da21R2C/NE/+NnItm5mPEFQmn8gmF3f0rfOlmZ3Y3bIf7bFj7DHxAA==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.4.1", + "@jest/expect": "^29.4.1", + "@jest/types": "^29.4.1", + "jest-mock": "^29.4.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.4.1.tgz", + "integrity": "sha512-AISY5xpt2Xpxj9R6y0RF1+O6GRy9JsGa8+vK23Lmzdy1AYcpQn5ItX79wJSsTmfzPKSAcsY1LNt/8Y5Xe5LOSg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.4.1", + "@jest/test-result": "^29.4.1", + "@jest/transform": "^29.4.1", + "@jest/types": "^29.4.1", + "@jridgewell/trace-mapping": "^0.3.15", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.4.1", + "jest-util": "^29.4.1", + "jest-worker": "^29.4.1", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.4.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.0.tgz", + "integrity": "sha512-0E01f/gOZeNTG76i5eWWSupvSHaIINrTie7vCyjiYFKgzNdyEGd12BUv4oNBFHOqlHDbtoJi3HrQ38KCC90NsQ==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.25.16" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.2.0.tgz", + "integrity": "sha512-1NX9/7zzI0nqa6+kgpSdKPK+WU1p+SJk3TloWZf5MzPbxri9UEeXX5bWZAPCzbQcyuAzubcdUHA7hcNznmRqWQ==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.15", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.4.1.tgz", + "integrity": "sha512-WRt29Lwt+hEgfN8QDrXqXGgCTidq1rLyFqmZ4lmJOpVArC8daXrZWkWjiaijQvgd3aOUj2fM8INclKHsQW9YyQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.4.1", + "@jest/types": "^29.4.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.4.1.tgz", + "integrity": "sha512-v5qLBNSsM0eHzWLXsQ5fiB65xi49A3ILPSFQKPXzGL4Vyux0DPZAIN7NAFJa9b4BiTDP9MBF/Zqc/QA1vuiJ0w==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.4.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.4.1.tgz", + "integrity": "sha512-5w6YJrVAtiAgr0phzKjYd83UPbCXsBRTeYI4BXokv9Er9CcrH9hfXL/crCvP2d2nGOcovPUnlYiLPFLZrkG5Hg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.4.1", + "@jridgewell/trace-mapping": "^0.3.15", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.4.1", + "jest-regex-util": "^29.2.0", + "jest-util": "^29.4.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^5.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.1.tgz", + "integrity": "sha512-zbrAXDUOnpJ+FMST2rV7QZOgec8rskg2zv8g2ajeqitp4tvZiyqTCYXANrKsM+ryj5o+LI+ZN2EgU9drrkiwSA==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.4.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@octokit/app": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@octokit/app/-/app-13.1.2.tgz", + "integrity": "sha512-Kf+h5sa1SOI33hFsuHvTsWj1jUrjp1x4MuiJBq7U/NicfEGa6nArPUoDnyfP/YTmcQ5cQ5yvOgoIBkbwPg6kzQ==", + "dependencies": { + "@octokit/auth-app": "^4.0.8", + "@octokit/auth-unauthenticated": "^3.0.0", + "@octokit/core": "^4.0.0", + "@octokit/oauth-app": "^4.0.7", + "@octokit/plugin-paginate-rest": "^6.0.0", + "@octokit/types": "^9.0.0", + "@octokit/webhooks": "^10.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-app": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-4.0.9.tgz", + "integrity": "sha512-VFpKIXhHO+kVJtane5cEvdYPtjDKCOI0uKsRrsZfJP+uEu7rcPbQCLCcRKgyT+mUIzGr1IIOmwP/lFqSip1dXA==", + "dependencies": { + "@octokit/auth-oauth-app": "^5.0.0", + "@octokit/auth-oauth-user": "^2.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "@types/lru-cache": "^5.1.0", + "deprecation": "^2.3.1", + "lru-cache": "^6.0.0", + "universal-github-app-jwt": "^1.1.1", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-app/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@octokit/auth-app/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/@octokit/auth-oauth-app": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-5.0.5.tgz", + "integrity": "sha512-UPX1su6XpseaeLVCi78s9droxpGtBWIgz9XhXAx9VXabksoF0MyI5vaa1zo1njyYt6VaAjFisC2A2Wchcu2WmQ==", + "dependencies": { + "@octokit/auth-oauth-device": "^4.0.0", + "@octokit/auth-oauth-user": "^2.0.0", + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "@types/btoa-lite": "^1.0.0", + "btoa-lite": "^1.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-oauth-device": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-4.0.4.tgz", + "integrity": "sha512-Xl85BZYfqCMv+Uvz33nVVUjE7I/PVySNaK6dRRqlkvYcArSr9vRcZC9KVjXYObGRTCN6mISeYdakAZvWEN4+Jw==", + "dependencies": { + "@octokit/oauth-methods": "^2.0.0", + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-oauth-user": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-2.1.1.tgz", + "integrity": "sha512-JgqnNNPf9CaWLxWm9uh2WgxcaVYhxBR09NVIPTiMU2dVZ3FObOHs3njBiLNw+zq84k+rEdm5Y7AsiASrZ84Apg==", + "dependencies": { + "@octokit/auth-oauth-device": "^4.0.0", + "@octokit/oauth-methods": "^2.0.0", + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "btoa-lite": "^1.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-token": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.3.tgz", + "integrity": "sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA==", + "dependencies": { + "@octokit/types": "^9.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-unauthenticated": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-3.0.4.tgz", + "integrity": "sha512-AT74XGBylcLr4lmUp1s6mjSUgphGdlse21Qjtv5DzpX1YOl5FXKwvNcZWESdhyBbpDT8VkVyLFqa/7a7eqpPNw==", + "dependencies": { + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.0.tgz", + "integrity": "sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg==", + "dependencies": { + "@octokit/auth-token": "^3.0.0", + "@octokit/graphql": "^5.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/endpoint": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.5.tgz", + "integrity": "sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA==", + "dependencies": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/graphql": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.5.tgz", + "integrity": "sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ==", + "dependencies": { + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/oauth-app": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-4.2.0.tgz", + "integrity": "sha512-gyGclT77RQMkVUEW3YBeAKY+LBSc5u3eC9Wn/Uwt3WhuKuu9mrV18EnNpDqmeNll+mdV02yyBROU29Tlili6gg==", + "dependencies": { + "@octokit/auth-oauth-app": "^5.0.0", + "@octokit/auth-oauth-user": "^2.0.0", + "@octokit/auth-unauthenticated": "^3.0.0", + "@octokit/core": "^4.0.0", + "@octokit/oauth-authorization-url": "^5.0.0", + "@octokit/oauth-methods": "^2.0.0", + "@types/aws-lambda": "^8.10.83", + "fromentries": "^1.3.1", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/oauth-authorization-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-5.0.0.tgz", + "integrity": "sha512-y1WhN+ERDZTh0qZ4SR+zotgsQUE1ysKnvBt1hvDRB2WRzYtVKQjn97HEPzoehh66Fj9LwNdlZh+p6TJatT0zzg==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/oauth-methods": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-2.0.5.tgz", + "integrity": "sha512-yQP6B5gE3axNxuM3U9KqWs/ErAQ+WLPaPgC/7EjsZsQibkf8sjdAfF8/y/EJW+Dd05XQvadX4WhQZPMnO1SE1A==", + "dependencies": { + "@octokit/oauth-authorization-url": "^5.0.0", + "@octokit/request": "^6.2.3", + "@octokit/request-error": "^3.0.3", + "@octokit/types": "^9.0.0", + "btoa-lite": "^1.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.0.0.tgz", + "integrity": "sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw==", + "dependencies": { + "@octokit/types": "^9.0.0" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "@octokit/core": ">=4" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.0.1.tgz", + "integrity": "sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA==", + "dependencies": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.3.1" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/plugin-retry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-4.1.1.tgz", + "integrity": "sha512-iR7rg5KRSl6L6RELTQQ3CYeNgeBJyuAmP95odzcQ/zyefnRT/Peo8rWeky4z7V/+/oPWqOL4I5Z+V8KtjpHCJw==", + "dependencies": { + "@octokit/types": "^9.0.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/plugin-throttling": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-5.0.1.tgz", + "integrity": "sha512-I4qxs7wYvYlFuY3PAUGWAVPhFXG3RwnvTiSr5Fu/Auz7bYhDLnzS2MjwV8nGLq/FPrWwYiweeZrI5yjs1YG4tQ==", + "dependencies": { + "@octokit/types": "^9.0.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "@octokit/core": "^4.0.0" + } + }, + "node_modules/@octokit/request": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.3.tgz", + "integrity": "sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA==", + "dependencies": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/request-error": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "dependencies": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "dependencies": { + "@octokit/openapi-types": "^16.0.0" + } + }, + "node_modules/@octokit/webhooks": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-10.7.0.tgz", + "integrity": "sha512-zZBbQMpXXnK/ki/utrFG/TuWv9545XCSLibfDTxrYqR1PmU6zel02ebTOrA7t5XIGHzlEOc/NgISUIBUe7pMFA==", + "dependencies": { + "@octokit/request-error": "^3.0.0", + "@octokit/webhooks-methods": "^3.0.0", + "@octokit/webhooks-types": "6.10.0", + "aggregate-error": "^3.1.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/webhooks-methods": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-3.0.2.tgz", + "integrity": "sha512-Vlnv5WBscf07tyAvfDbp7pTkMZUwk7z7VwEF32x6HqI+55QRwBTcT+D7DDjZXtad/1dU9E32x0HmtDlF9VIRaQ==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/webhooks-types": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-6.10.0.tgz", + "integrity": "sha512-lDNv83BeEyxxukdQ0UttiUXawk9+6DkdjjFtm2GFED+24IQhTVaoSbwV9vWWKONyGLzRmCQqZmoEWkDhkEmPlw==" + }, + "node_modules/@sendgrid/client": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@sendgrid/client/-/client-7.7.0.tgz", + "integrity": "sha512-SxH+y8jeAQSnDavrTD0uGDXYIIkFylCo+eDofVmZLQ0f862nnqbC3Vd1ej6b7Le7lboyzQF6F7Fodv02rYspuA==", + "dependencies": { + "@sendgrid/helpers": "^7.7.0", + "axios": "^0.26.0" + }, + "engines": { + "node": "6.* || 8.* || >=10.*" + } + }, + "node_modules/@sendgrid/client/node_modules/axios": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", + "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", + "dependencies": { + "follow-redirects": "^1.14.8" + } + }, + "node_modules/@sendgrid/helpers": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@sendgrid/helpers/-/helpers-7.7.0.tgz", + "integrity": "sha512-3AsAxfN3GDBcXoZ/y1mzAAbKzTtUZ5+ZrHOmWQ279AuaFXUNCh9bPnRpN504bgveTqoW+11IzPg3I0WVgDINpw==", + "dependencies": { + "deepmerge": "^4.2.2" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/@sendgrid/mail": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@sendgrid/mail/-/mail-7.7.0.tgz", + "integrity": "sha512-5+nApPE9wINBvHSUxwOxkkQqM/IAAaBYoP9hw7WwgDNQPxraruVqHizeTitVtKGiqWCKm2mnjh4XGN3fvFLqaw==", + "dependencies": { + "@sendgrid/client": "^7.7.0", + "@sendgrid/helpers": "^7.7.0" + }, + "engines": { + "node": "6.* || 8.* || >=10.*" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.25.21", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.21.tgz", + "integrity": "sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", + "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^2.0.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, + "node_modules/@types/aws-lambda": { + "version": "8.10.110", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.110.tgz", + "integrity": "sha512-r6egf2Cwv/JaFTTrF9OXFVUB3j/SXTgM9BwrlbBRjWAa2Tu6GWoDoLflppAZ8uSfbUJdXvC7Br3DjuN9pQ2NUQ==" + }, + "node_modules/@types/babel__core": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", + "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", + "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/btoa-lite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.0.tgz", + "integrity": "sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==" + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.4.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.4.0.tgz", + "integrity": "sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz", + "integrity": "sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" + }, + "node_modules/@types/node": { + "version": "18.11.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", + "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" + }, + "node_modules/@types/prettier": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", + "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", + "dev": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "17.0.22", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", + "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/aws-cdk": { + "version": "2.63.0", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.63.0.tgz", + "integrity": "sha512-2bv/egScdBxWnzcGkWT21Evi+20Qt356H4SqxQLskjhcjc+zvN9nsDNTJvI58BI/pkyU/K8cemHCKnBjBVdXkg==", + "dev": true, + "bin": { + "cdk": "bin/cdk" + }, + "engines": { + "node": ">= 14.15.0" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/aws-cdk-lib": { + "version": "2.63.0", + "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.63.0.tgz", + "integrity": "sha512-+thToi/7coSufwaEafgofTaZERXxFUeEwEIp0SGU0wHz6IbPll5yAzoEIkE51kM8AMCMfqwJddYOjM3qs43cPg==", + "bundleDependencies": [ + "@balena/dockerignore", + "case", + "fs-extra", + "ignore", + "jsonschema", + "minimatch", + "punycode", + "semver", + "yaml" + ], + "dependencies": { + "@aws-cdk/asset-awscli-v1": "^2.2.52", + "@aws-cdk/asset-kubectl-v20": "^2.1.1", + "@aws-cdk/asset-node-proxy-agent-v5": "^2.0.42", + "@balena/dockerignore": "^1.0.2", + "case": "1.6.3", + "fs-extra": "^9.1.0", + "ignore": "^5.2.4", + "jsonschema": "^1.4.1", + "minimatch": "^3.1.2", + "punycode": "^2.3.0", + "semver": "^7.3.8", + "yaml": "1.10.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "constructs": "^10.0.0" + } + }, + "node_modules/aws-cdk-lib/node_modules/@balena/dockerignore": { + "version": "1.0.2", + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/aws-cdk-lib/node_modules/at-least-node": { + "version": "1.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/aws-cdk-lib/node_modules/balanced-match": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/brace-expansion": { + "version": "1.1.11", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/aws-cdk-lib/node_modules/case": { + "version": "1.6.3", + "inBundle": true, + "license": "(MIT OR GPL-3.0-or-later)", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/aws-cdk-lib/node_modules/concat-map": { + "version": "0.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/fs-extra": { + "version": "9.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/aws-cdk-lib/node_modules/graceful-fs": { + "version": "4.2.10", + "inBundle": true, + "license": "ISC" + }, + "node_modules/aws-cdk-lib/node_modules/ignore": { + "version": "5.2.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/aws-cdk-lib/node_modules/jsonfile": { + "version": "6.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/aws-cdk-lib/node_modules/jsonschema": { + "version": "1.4.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/aws-cdk-lib/node_modules/lru-cache": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/aws-cdk-lib/node_modules/minimatch": { + "version": "3.1.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/aws-cdk-lib/node_modules/punycode": { + "version": "2.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/aws-cdk-lib/node_modules/semver": { + "version": "7.3.8", + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/aws-cdk-lib/node_modules/universalify": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aws-cdk-lib/node_modules/yallist": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/aws-cdk-lib/node_modules/yaml": { + "version": "1.10.2", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/axios": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.1.tgz", + "integrity": "sha512-78pWJsQTceInlyaeBQeYZ/QgZeWS8hGeKiIJiDKQe3hEyBb7sEMq0K4gjx+Va6WHTYO4zI/RRl8qGRzn0YMadA==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-jest": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.4.1.tgz", + "integrity": "sha512-xBZa/pLSsF/1sNpkgsiT3CmY7zV1kAsZ9OxxtrFqYucnOuRftXAfcJqcDVyOPeN4lttWTwhLdu0T9f8uvoPEUg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.4.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.4.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.4.0.tgz", + "integrity": "sha512-a/sZRLQJEmsmejQ2rPEUe35nO1+C9dc9O1gplH1SXmJxveQSRUYdBk8yGZG/VOUuZs1u2aHZJusEGoRMbhhwCg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.4.0.tgz", + "integrity": "sha512-fUB9vZflUSM3dO/6M2TCAepTzvA4VkOvl67PjErcrQMGt9Eve7uazaeyCZ2th3UtI7ljpiBJES0F7A1vBRsLZA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.4.0", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/before-after-hook": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" + }, + "node_modules/bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/btoa-lite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", + "integrity": "sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==" + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001450", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001450.tgz", + "integrity": "sha512-qMBmvmQmFXaSxexkjjfMvD5rnDL0+m+dUMZKoDYsGG8iZN29RuYh9eRoMvKsT6uMAWlyUUGDEQGJJYjzCIO9ew==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/constructs": { + "version": "10.1.239", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-10.1.239.tgz", + "integrity": "sha512-yE0w8NyRoVsLYDaEFmTTO0pSnY4K+/ekaKbeNkXKPkRbtdJISsY+9iXUuWKyH6dW9MquQe9tXUyABB4IvWLs/A==", + "engines": { + "node": ">= 14.17.0" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", + "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.3.1.tgz", + "integrity": "sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/esbuild": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.5.tgz", + "integrity": "sha512-Bu6WLCc9NMsNoMJUjGl3yBzTjVLXdysMltxQWiLAypP+/vQrf+3L1Xe8fCXzxaECus2cEJ9M7pk4yKatEwQMqQ==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.5", + "@esbuild/android-arm64": "0.17.5", + "@esbuild/android-x64": "0.17.5", + "@esbuild/darwin-arm64": "0.17.5", + "@esbuild/darwin-x64": "0.17.5", + "@esbuild/freebsd-arm64": "0.17.5", + "@esbuild/freebsd-x64": "0.17.5", + "@esbuild/linux-arm": "0.17.5", + "@esbuild/linux-arm64": "0.17.5", + "@esbuild/linux-ia32": "0.17.5", + "@esbuild/linux-loong64": "0.17.5", + "@esbuild/linux-mips64el": "0.17.5", + "@esbuild/linux-ppc64": "0.17.5", + "@esbuild/linux-riscv64": "0.17.5", + "@esbuild/linux-s390x": "0.17.5", + "@esbuild/linux-x64": "0.17.5", + "@esbuild/netbsd-x64": "0.17.5", + "@esbuild/openbsd-x64": "0.17.5", + "@esbuild/sunos-x64": "0.17.5", + "@esbuild/win32-arm64": "0.17.5", + "@esbuild/win32-ia32": "0.17.5", + "@esbuild/win32-x64": "0.17.5" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.4.1.tgz", + "integrity": "sha512-OKrGESHOaMxK3b6zxIq9SOW8kEXztKff/Dvg88j4xIJxur1hspEbedVkR3GpHe5LO+WB2Qw7OWN0RMTdp6as5A==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.4.1", + "jest-get-type": "^29.2.0", + "jest-matcher-utils": "^29.4.1", + "jest-message-util": "^29.4.1", + "jest-util": "^29.4.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-xml-parser": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.11.tgz", + "integrity": "sha512-4aUg3aNRR/WjQAcpceODG1C3x3lFANXRo8+1biqfieHmg9pyMt7qB4lQV/Ta6sJCTbA5vfD8fnA8S54JATiFUA==", + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + }, + "funding": { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.4.1.tgz", + "integrity": "sha512-cknimw7gAXPDOmj0QqztlxVtBVCw2lYY9CeIE5N6kD+kET1H4H79HSNISJmijb1HF+qk+G+ploJgiDi5k/fRlg==", + "dev": true, + "dependencies": { + "@jest/core": "^29.4.1", + "@jest/types": "^29.4.1", + "import-local": "^3.0.2", + "jest-cli": "^29.4.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.4.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.4.0.tgz", + "integrity": "sha512-rnI1oPxgFghoz32Y8eZsGJMjW54UlqT17ycQeCEktcxxwqqKdlj9afl8LNeO0Pbu+h2JQHThQP0BzS67eTRx4w==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.4.1.tgz", + "integrity": "sha512-v02NuL5crMNY4CGPHBEflLzl4v91NFb85a+dH9a1pUNx6Xjggrd8l9pPy4LZ1VYNRXlb+f65+7O/MSIbLir6pA==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.4.1", + "@jest/expect": "^29.4.1", + "@jest/test-result": "^29.4.1", + "@jest/types": "^29.4.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.4.1", + "jest-matcher-utils": "^29.4.1", + "jest-message-util": "^29.4.1", + "jest-runtime": "^29.4.1", + "jest-snapshot": "^29.4.1", + "jest-util": "^29.4.1", + "p-limit": "^3.1.0", + "pretty-format": "^29.4.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.4.1.tgz", + "integrity": "sha512-jz7GDIhtxQ37M+9dlbv5K+/FVcIo1O/b1sX3cJgzlQUf/3VG25nvuWzlDC4F1FLLzUThJeWLu8I7JF9eWpuURQ==", + "dev": true, + "dependencies": { + "@jest/core": "^29.4.1", + "@jest/test-result": "^29.4.1", + "@jest/types": "^29.4.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^29.4.1", + "jest-util": "^29.4.1", + "jest-validate": "^29.4.1", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.4.1.tgz", + "integrity": "sha512-g7p3q4NuXiM4hrS4XFATTkd+2z0Ml2RhFmFPM8c3WyKwVDNszbl4E7cV7WIx1YZeqqCtqbtTtZhGZWJlJqngzg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.4.1", + "@jest/types": "^29.4.1", + "babel-jest": "^29.4.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.4.1", + "jest-environment-node": "^29.4.1", + "jest-get-type": "^29.2.0", + "jest-regex-util": "^29.2.0", + "jest-resolve": "^29.4.1", + "jest-runner": "^29.4.1", + "jest-util": "^29.4.1", + "jest-validate": "^29.4.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.4.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.1.tgz", + "integrity": "sha512-uazdl2g331iY56CEyfbNA0Ut7Mn2ulAG5vUaEHXycf1L6IPyuImIxSz4F0VYBKi7LYIuxOwTZzK3wh5jHzASMw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.3.1", + "jest-get-type": "^29.2.0", + "pretty-format": "^29.4.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.2.0.tgz", + "integrity": "sha512-bkxUsxTgWQGbXV5IENmfiIuqZhJcyvF7tU4zJ/7ioTutdz4ToB5Yx6JOFBpgI+TphRY4lhOyCWGNH/QFQh5T6A==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.4.1.tgz", + "integrity": "sha512-QlYFiX3llJMWUV0BtWht/esGEz9w+0i7BHwODKCze7YzZzizgExB9MOfiivF/vVT0GSQ8wXLhvHXh3x2fVD4QQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.4.1", + "chalk": "^4.0.0", + "jest-get-type": "^29.2.0", + "jest-util": "^29.4.1", + "pretty-format": "^29.4.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.4.1.tgz", + "integrity": "sha512-x/H2kdVgxSkxWAIlIh9MfMuBa0hZySmfsC5lCsWmWr6tZySP44ediRKDUiNggX/eHLH7Cd5ZN10Rw+XF5tXsqg==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.4.1", + "@jest/fake-timers": "^29.4.1", + "@jest/types": "^29.4.1", + "@types/node": "*", + "jest-mock": "^29.4.1", + "jest-util": "^29.4.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz", + "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.4.1.tgz", + "integrity": "sha512-imTjcgfVVTvg02khXL11NNLTx9ZaofbAWhilrMg/G8dIkp+HYCswhxf0xxJwBkfhWb3e8dwbjuWburvxmcr58w==", + "dev": true, + "dependencies": { + "@jest/types": "^29.4.1", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.2.0", + "jest-util": "^29.4.1", + "jest-worker": "^29.4.1", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.4.1.tgz", + "integrity": "sha512-akpZv7TPyGMnH2RimOCgy+hPmWZf55EyFUvymQ4LMsQP8xSPlZumCPtXGoDhFNhUE2039RApZkTQDKU79p/FiQ==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.2.0", + "pretty-format": "^29.4.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.1.tgz", + "integrity": "sha512-k5h0u8V4nAEy6lSACepxL/rw78FLDkBnXhZVgFneVpnJONhb2DhZj/Gv4eNe+1XqQ5IhgUcqj745UwH0HJmMnA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.4.1", + "jest-get-type": "^29.2.0", + "pretty-format": "^29.4.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.1.tgz", + "integrity": "sha512-H4/I0cXUaLeCw6FM+i4AwCnOwHRgitdaUFOdm49022YD5nfyr8C/DrbXOBEyJaj+w/y0gGJ57klssOaUiLLQGQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.4.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.4.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.1.tgz", + "integrity": "sha512-MwA4hQ7zBOcgVCVnsM8TzaFLVUD/pFWTfbkY953Y81L5ret3GFRZtmPmRFAjKQSdCKoJvvqOu6Bvfpqlwwb0dQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.4.1", + "@types/node": "*", + "jest-util": "^29.4.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.2.0.tgz", + "integrity": "sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.4.1.tgz", + "integrity": "sha512-j/ZFNV2lm9IJ2wmlq1uYK0Y/1PiyDq9g4HEGsNTNr3viRbJdV+8Lf1SXIiLZXFvyiisu0qUyIXGBnw+OKWkJwQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.4.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.4.1", + "jest-validate": "^29.4.1", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.4.1.tgz", + "integrity": "sha512-Y3QG3M1ncAMxfjbYgtqNXC5B595zmB6e//p/qpA/58JkQXu/IpLDoLeOa8YoYfsSglBKQQzNUqtfGJJT/qLmJg==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.2.0", + "jest-snapshot": "^29.4.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.4.1.tgz", + "integrity": "sha512-8d6XXXi7GtHmsHrnaqBKWxjKb166Eyj/ksSaUYdcBK09VbjPwIgWov1VwSmtupCIz8q1Xv4Qkzt/BTo3ZqiCeg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.4.1", + "@jest/environment": "^29.4.1", + "@jest/test-result": "^29.4.1", + "@jest/transform": "^29.4.1", + "@jest/types": "^29.4.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.2.0", + "jest-environment-node": "^29.4.1", + "jest-haste-map": "^29.4.1", + "jest-leak-detector": "^29.4.1", + "jest-message-util": "^29.4.1", + "jest-resolve": "^29.4.1", + "jest-runtime": "^29.4.1", + "jest-util": "^29.4.1", + "jest-watcher": "^29.4.1", + "jest-worker": "^29.4.1", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.4.1.tgz", + "integrity": "sha512-UXTMU9uKu2GjYwTtoAw5rn4STxWw/nadOfW7v1sx6LaJYa3V/iymdCLQM6xy3+7C6mY8GfX22vKpgxY171UIoA==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.4.1", + "@jest/fake-timers": "^29.4.1", + "@jest/globals": "^29.4.1", + "@jest/source-map": "^29.2.0", + "@jest/test-result": "^29.4.1", + "@jest/transform": "^29.4.1", + "@jest/types": "^29.4.1", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.4.1", + "jest-message-util": "^29.4.1", + "jest-mock": "^29.4.1", + "jest-regex-util": "^29.2.0", + "jest-resolve": "^29.4.1", + "jest-snapshot": "^29.4.1", + "jest-util": "^29.4.1", + "semver": "^7.3.5", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-runtime/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-runtime/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/jest-snapshot": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.4.1.tgz", + "integrity": "sha512-l4iV8EjGgQWVz3ee/LR9sULDk2pCkqb71bjvlqn+qp90lFwpnulHj4ZBT8nm1hA1C5wowXLc7MGnw321u0tsYA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.4.1", + "@jest/transform": "^29.4.1", + "@jest/types": "^29.4.1", + "@types/babel__traverse": "^7.0.6", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.4.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.4.1", + "jest-get-type": "^29.2.0", + "jest-haste-map": "^29.4.1", + "jest-matcher-utils": "^29.4.1", + "jest-message-util": "^29.4.1", + "jest-util": "^29.4.1", + "natural-compare": "^1.4.0", + "pretty-format": "^29.4.1", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/jest-util": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.1.tgz", + "integrity": "sha512-bQy9FPGxVutgpN4VRc0hk6w7Hx/m6L53QxpDreTZgJd9gfx/AV2MjyPde9tGyZRINAUrSv57p2inGBu2dRLmkQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.4.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.4.1.tgz", + "integrity": "sha512-qNZXcZQdIQx4SfUB/atWnI4/I2HUvhz8ajOSYUu40CSmf9U5emil8EDHgE7M+3j9/pavtk3knlZBDsgFvv/SWw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.4.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.2.0", + "leven": "^3.1.0", + "pretty-format": "^29.4.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.4.1.tgz", + "integrity": "sha512-vFOzflGFs27nU6h8dpnVRER3O2rFtL+VMEwnG0H3KLHcllLsU8y9DchSh0AL/Rg5nN1/wSiQ+P4ByMGpuybaVw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.4.1", + "@jest/types": "^29.4.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.4.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.1.tgz", + "integrity": "sha512-O9doU/S1EBe+yp/mstQ0VpPwpv0Clgn68TkNwGxL6/usX/KUW9Arnn4ag8C3jc6qHcXznhsT5Na1liYzAsuAbQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.4.1", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "dependencies": { + "jws": "^3.2.2", + "lodash": "^4.17.21", + "ms": "^2.1.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsonwebtoken/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mnemonist": { + "version": "0.38.3", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.3.tgz", + "integrity": "sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==", + "dependencies": { + "obliterator": "^1.6.1" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/node-fetch": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.9.tgz", + "integrity": "sha512-2xfmOrRkGogbTK9R6Leda0DGiXeY3p2NJpy4+gNCffdUvV6mdEJnaDEic1i3Ec2djAo8jWYoJMR5PB0MSMpxUA==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/obliterator": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-1.6.1.tgz", + "integrity": "sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig==" + }, + "node_modules/octokit": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/octokit/-/octokit-2.0.14.tgz", + "integrity": "sha512-z6cgZBFxirpFEQ1La8Lg83GCs5hOV2EPpkYYdjsGNbfQMv8qUGjq294MiRBCbZqLufviakGsPUxaNKe3JrPmsA==", + "dependencies": { + "@octokit/app": "^13.1.1", + "@octokit/core": "^4.0.4", + "@octokit/oauth-app": "^4.0.6", + "@octokit/plugin-paginate-rest": "^6.0.0", + "@octokit/plugin-rest-endpoint-methods": "^7.0.0", + "@octokit/plugin-retry": "^4.0.3", + "@octokit/plugin-throttling": "^5.0.0", + "@octokit/types": "^9.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-format": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.1.tgz", + "integrity": "sha512-dt/Z761JUVsrIKaY215o1xQJBGlSmTx/h4cSqXqjHLnU1+Kt+mavVE7UgqJJO5ukx5HjSswHfmXz4LjS2oIJfg==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.4.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.0.tgz", + "integrity": "sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/revalidator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.3.1.tgz", + "integrity": "sha512-orq+Nw+V5pDpQwGEuN2n1AgJ+0A8WqhFHKt5KgkxfAowUKgO1CWV32IR3TNB4g9/FX3gJt9qBJO8DYlwonnB0Q==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/showdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/showdown/-/showdown-2.1.0.tgz", + "integrity": "sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==", + "dependencies": { + "commander": "^9.0.0" + }, + "bin": { + "showdown": "bin/showdown.js" + }, + "funding": { + "type": "individual", + "url": "https://www.paypal.me/tiviesantos" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/ts-jest": { + "version": "29.0.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.0.5.tgz", + "integrity": "sha512-PL3UciSgIpQ7f6XjVOmbi96vmDHUqAyqDr8YxzopDqX3kfgYtX1cuNeBjP+L9sFXi6nzsGGA6R3fP3DDDJyrxA==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-jest/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "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 + } + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/universal-github-app-jwt": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz", + "integrity": "sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w==", + "dependencies": { + "@types/jsonwebtoken": "^9.0.0", + "jsonwebtoken": "^9.0.0" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.0.tgz", + "integrity": "sha512-R7NYMnHSlV42K54lwY9lvW6MnSm1HSJqZL3xiSgi9E7//FYaI74r2G0rd+/X6VAMkHEdzxQaU5HUOXWUz5kA/w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@aws-cdk/asset-awscli-v1": { + "version": "2.2.56", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.56.tgz", + "integrity": "sha512-+o6SvOsPbeloSscRGBrVXcuAQML20KS1sRrjp7lF5Abkkdjbc2gmEVqOlHtzOyhriJz3Zr16yrcCWuNeAawMXw==" + }, + "@aws-cdk/asset-kubectl-v20": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.1.tgz", + "integrity": "sha512-U1ntiX8XiMRRRH5J1IdC+1t5CE89015cwyt5U63Cpk0GnMlN5+h9WsWMlKlPXZR4rdq/m806JRlBMRpBUB2Dhw==" + }, + "@aws-cdk/asset-node-proxy-agent-v5": { + "version": "2.0.45", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v5/-/asset-node-proxy-agent-v5-2.0.45.tgz", + "integrity": "sha512-Ys98Zu4tMkDEr2jChe7oAbB/u857QPEMKsAKbNaKJtODpupQOdWIcKw0sEAQtamNvTrNRSEaLGEgMEpxKvcHKA==" + }, + "@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/sha256-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "requires": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/sha256-js": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/sha256-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "requires": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/supports-web-crypto": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "requires": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/abort-controller": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.257.0.tgz", + "integrity": "sha512-ekWy391lOerS0ZECdhp/c+X7AToJIpfNrCPjuj3bKr+GMQYckGsYsdbm6AUD4sxBmfvuaQmVniSXWovaxwcFcQ==", + "requires": { + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/client-dynamodb": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.264.0.tgz", + "integrity": "sha512-5CPrUdZYf2UDVDG4bPTN5GCyvwCEoMBTEDTRN8stvTBuYiTNGtQfflPaC0BUYSD+Vtm66XPCVBSzXO5ghqqywg==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.264.0", + "@aws-sdk/config-resolver": "3.259.0", + "@aws-sdk/credential-provider-node": "3.264.0", + "@aws-sdk/fetch-http-handler": "3.257.0", + "@aws-sdk/hash-node": "3.257.0", + "@aws-sdk/invalid-dependency": "3.257.0", + "@aws-sdk/middleware-content-length": "3.257.0", + "@aws-sdk/middleware-endpoint": "3.264.0", + "@aws-sdk/middleware-endpoint-discovery": "3.259.0", + "@aws-sdk/middleware-host-header": "3.257.0", + "@aws-sdk/middleware-logger": "3.257.0", + "@aws-sdk/middleware-recursion-detection": "3.257.0", + "@aws-sdk/middleware-retry": "3.259.0", + "@aws-sdk/middleware-serde": "3.257.0", + "@aws-sdk/middleware-signing": "3.257.0", + "@aws-sdk/middleware-stack": "3.257.0", + "@aws-sdk/middleware-user-agent": "3.257.0", + "@aws-sdk/node-config-provider": "3.259.0", + "@aws-sdk/node-http-handler": "3.257.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/smithy-client": "3.261.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/url-parser": "3.257.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.261.0", + "@aws-sdk/util-defaults-mode-node": "3.261.0", + "@aws-sdk/util-endpoints": "3.257.0", + "@aws-sdk/util-retry": "3.257.0", + "@aws-sdk/util-user-agent-browser": "3.257.0", + "@aws-sdk/util-user-agent-node": "3.259.0", + "@aws-sdk/util-utf8": "3.254.0", + "@aws-sdk/util-waiter": "3.257.0", + "tslib": "^2.3.1", + "uuid": "^8.3.2" + } + }, + "@aws-sdk/client-eventbridge": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-eventbridge/-/client-eventbridge-3.264.0.tgz", + "integrity": "sha512-v6LXaJXBtVTCP46iHLy2LGGu7WfWduwt/Ww5VhTRCIsBiviV/9tJ2p+xL1AlZs3vZ6em/xS6JoLJ8kuVI0l2VA==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.264.0", + "@aws-sdk/config-resolver": "3.259.0", + "@aws-sdk/credential-provider-node": "3.264.0", + "@aws-sdk/fetch-http-handler": "3.257.0", + "@aws-sdk/hash-node": "3.257.0", + "@aws-sdk/invalid-dependency": "3.257.0", + "@aws-sdk/middleware-content-length": "3.257.0", + "@aws-sdk/middleware-endpoint": "3.264.0", + "@aws-sdk/middleware-host-header": "3.257.0", + "@aws-sdk/middleware-logger": "3.257.0", + "@aws-sdk/middleware-recursion-detection": "3.257.0", + "@aws-sdk/middleware-retry": "3.259.0", + "@aws-sdk/middleware-serde": "3.257.0", + "@aws-sdk/middleware-signing": "3.257.0", + "@aws-sdk/middleware-stack": "3.257.0", + "@aws-sdk/middleware-user-agent": "3.257.0", + "@aws-sdk/node-config-provider": "3.259.0", + "@aws-sdk/node-http-handler": "3.257.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/signature-v4-multi-region": "3.264.0", + "@aws-sdk/smithy-client": "3.261.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/url-parser": "3.257.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.261.0", + "@aws-sdk/util-defaults-mode-node": "3.261.0", + "@aws-sdk/util-endpoints": "3.257.0", + "@aws-sdk/util-retry": "3.257.0", + "@aws-sdk/util-user-agent-browser": "3.257.0", + "@aws-sdk/util-user-agent-node": "3.259.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/client-secrets-manager": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.264.0.tgz", + "integrity": "sha512-Fp6qLY9Q7GH4Hmpna69FYvikJpd58YoA80aCAdAY6gHS8stJHsgyqhM3NGwK5YvVFLqcEVVEeyaMFpjaGe4Qgw==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.264.0", + "@aws-sdk/config-resolver": "3.259.0", + "@aws-sdk/credential-provider-node": "3.264.0", + "@aws-sdk/fetch-http-handler": "3.257.0", + "@aws-sdk/hash-node": "3.257.0", + "@aws-sdk/invalid-dependency": "3.257.0", + "@aws-sdk/middleware-content-length": "3.257.0", + "@aws-sdk/middleware-endpoint": "3.264.0", + "@aws-sdk/middleware-host-header": "3.257.0", + "@aws-sdk/middleware-logger": "3.257.0", + "@aws-sdk/middleware-recursion-detection": "3.257.0", + "@aws-sdk/middleware-retry": "3.259.0", + "@aws-sdk/middleware-serde": "3.257.0", + "@aws-sdk/middleware-signing": "3.257.0", + "@aws-sdk/middleware-stack": "3.257.0", + "@aws-sdk/middleware-user-agent": "3.257.0", + "@aws-sdk/node-config-provider": "3.259.0", + "@aws-sdk/node-http-handler": "3.257.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/smithy-client": "3.261.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/url-parser": "3.257.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.261.0", + "@aws-sdk/util-defaults-mode-node": "3.261.0", + "@aws-sdk/util-endpoints": "3.257.0", + "@aws-sdk/util-retry": "3.257.0", + "@aws-sdk/util-user-agent-browser": "3.257.0", + "@aws-sdk/util-user-agent-node": "3.259.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1", + "uuid": "^8.3.2" + } + }, + "@aws-sdk/client-sfn": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sfn/-/client-sfn-3.264.0.tgz", + "integrity": "sha512-5h6X3xzGW5+GYB7zAObmpxEObdDZEtRpYj+w2Xj8K6pF6RmzO57cOML2V4bncfkUkeLpvR8S3L7mXWreRyr/sg==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.264.0", + "@aws-sdk/config-resolver": "3.259.0", + "@aws-sdk/credential-provider-node": "3.264.0", + "@aws-sdk/fetch-http-handler": "3.257.0", + "@aws-sdk/hash-node": "3.257.0", + "@aws-sdk/invalid-dependency": "3.257.0", + "@aws-sdk/middleware-content-length": "3.257.0", + "@aws-sdk/middleware-endpoint": "3.264.0", + "@aws-sdk/middleware-host-header": "3.257.0", + "@aws-sdk/middleware-logger": "3.257.0", + "@aws-sdk/middleware-recursion-detection": "3.257.0", + "@aws-sdk/middleware-retry": "3.259.0", + "@aws-sdk/middleware-serde": "3.257.0", + "@aws-sdk/middleware-signing": "3.257.0", + "@aws-sdk/middleware-stack": "3.257.0", + "@aws-sdk/middleware-user-agent": "3.257.0", + "@aws-sdk/node-config-provider": "3.259.0", + "@aws-sdk/node-http-handler": "3.257.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/smithy-client": "3.261.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/url-parser": "3.257.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.261.0", + "@aws-sdk/util-defaults-mode-node": "3.261.0", + "@aws-sdk/util-endpoints": "3.257.0", + "@aws-sdk/util-retry": "3.257.0", + "@aws-sdk/util-user-agent-browser": "3.257.0", + "@aws-sdk/util-user-agent-node": "3.259.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/client-sso": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.264.0.tgz", + "integrity": "sha512-p+7sYpRcdv9omnnsPhD/vOFuZ1SpfV62ZgistBK/RDsQg2W9SIWQRW1KPt7gOCQ0nwp4efntw4Sle0LjS7ykxg==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.259.0", + "@aws-sdk/fetch-http-handler": "3.257.0", + "@aws-sdk/hash-node": "3.257.0", + "@aws-sdk/invalid-dependency": "3.257.0", + "@aws-sdk/middleware-content-length": "3.257.0", + "@aws-sdk/middleware-endpoint": "3.264.0", + "@aws-sdk/middleware-host-header": "3.257.0", + "@aws-sdk/middleware-logger": "3.257.0", + "@aws-sdk/middleware-recursion-detection": "3.257.0", + "@aws-sdk/middleware-retry": "3.259.0", + "@aws-sdk/middleware-serde": "3.257.0", + "@aws-sdk/middleware-stack": "3.257.0", + "@aws-sdk/middleware-user-agent": "3.257.0", + "@aws-sdk/node-config-provider": "3.259.0", + "@aws-sdk/node-http-handler": "3.257.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/smithy-client": "3.261.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/url-parser": "3.257.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.261.0", + "@aws-sdk/util-defaults-mode-node": "3.261.0", + "@aws-sdk/util-endpoints": "3.257.0", + "@aws-sdk/util-retry": "3.257.0", + "@aws-sdk/util-user-agent-browser": "3.257.0", + "@aws-sdk/util-user-agent-node": "3.259.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/client-sso-oidc": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.264.0.tgz", + "integrity": "sha512-82hGEbfsD4lBGIF1q8o82jTNSgBCcBpfFsvA+ltZf0bh4ChIWOi4vVvg8G+zVQN1mm/Rj8vWYO/D0tNF8OSyWw==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.259.0", + "@aws-sdk/fetch-http-handler": "3.257.0", + "@aws-sdk/hash-node": "3.257.0", + "@aws-sdk/invalid-dependency": "3.257.0", + "@aws-sdk/middleware-content-length": "3.257.0", + "@aws-sdk/middleware-endpoint": "3.264.0", + "@aws-sdk/middleware-host-header": "3.257.0", + "@aws-sdk/middleware-logger": "3.257.0", + "@aws-sdk/middleware-recursion-detection": "3.257.0", + "@aws-sdk/middleware-retry": "3.259.0", + "@aws-sdk/middleware-serde": "3.257.0", + "@aws-sdk/middleware-stack": "3.257.0", + "@aws-sdk/middleware-user-agent": "3.257.0", + "@aws-sdk/node-config-provider": "3.259.0", + "@aws-sdk/node-http-handler": "3.257.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/smithy-client": "3.261.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/url-parser": "3.257.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.261.0", + "@aws-sdk/util-defaults-mode-node": "3.261.0", + "@aws-sdk/util-endpoints": "3.257.0", + "@aws-sdk/util-retry": "3.257.0", + "@aws-sdk/util-user-agent-browser": "3.257.0", + "@aws-sdk/util-user-agent-node": "3.259.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/client-sts": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.264.0.tgz", + "integrity": "sha512-sco1jREkDdds4Z3V19Vlu/YpBHSzeEt1KFqOPnbjFw7pSakRNzpyWmLLxOwWjwgGKt6pSF3Aw0ZOMYsAUDc5qQ==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.259.0", + "@aws-sdk/credential-provider-node": "3.264.0", + "@aws-sdk/fetch-http-handler": "3.257.0", + "@aws-sdk/hash-node": "3.257.0", + "@aws-sdk/invalid-dependency": "3.257.0", + "@aws-sdk/middleware-content-length": "3.257.0", + "@aws-sdk/middleware-endpoint": "3.264.0", + "@aws-sdk/middleware-host-header": "3.257.0", + "@aws-sdk/middleware-logger": "3.257.0", + "@aws-sdk/middleware-recursion-detection": "3.257.0", + "@aws-sdk/middleware-retry": "3.259.0", + "@aws-sdk/middleware-sdk-sts": "3.257.0", + "@aws-sdk/middleware-serde": "3.257.0", + "@aws-sdk/middleware-signing": "3.257.0", + "@aws-sdk/middleware-stack": "3.257.0", + "@aws-sdk/middleware-user-agent": "3.257.0", + "@aws-sdk/node-config-provider": "3.259.0", + "@aws-sdk/node-http-handler": "3.257.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/smithy-client": "3.261.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/url-parser": "3.257.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.261.0", + "@aws-sdk/util-defaults-mode-node": "3.261.0", + "@aws-sdk/util-endpoints": "3.257.0", + "@aws-sdk/util-retry": "3.257.0", + "@aws-sdk/util-user-agent-browser": "3.257.0", + "@aws-sdk/util-user-agent-node": "3.259.0", + "@aws-sdk/util-utf8": "3.254.0", + "fast-xml-parser": "4.0.11", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/config-resolver": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.259.0.tgz", + "integrity": "sha512-gViMRsc4Ye6+nzJ0OYTZIT8m4glIAdtugN2Sr/t6P2iJW5X0bSL/EcbcHBgsve1lHjeGPeyzVkT7UnyGOZ5Z/A==", + "requires": { + "@aws-sdk/signature-v4": "3.257.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/util-config-provider": "3.208.0", + "@aws-sdk/util-middleware": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-env": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.257.0.tgz", + "integrity": "sha512-GsmBi5Di6hk1JAi1iB6/LCY8o+GmlCvJoB7wuoVmXI3VxRVwptUVjuj8EtJbIrVGrF9dSuIRPCzUoSuzEzYGlg==", + "requires": { + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-imds": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.259.0.tgz", + "integrity": "sha512-yCxoYWZAaDrCUEWxRfrpB0Mp1cFgJEMYW8T6GIb/+DQ5QLpZmorgaVD/j90QXupqFrR5tlxwuskBIkdD2E9YNg==", + "requires": { + "@aws-sdk/node-config-provider": "3.259.0", + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/url-parser": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-ini": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.264.0.tgz", + "integrity": "sha512-UU5NNlfn+Go+5PLBzyTH1YE3r/pgykpE4QYFon87sCnEQnQH9xmlRTW1f1cBSQ9kivbFZd2/C2X3qhB3fe2JfA==", + "requires": { + "@aws-sdk/credential-provider-env": "3.257.0", + "@aws-sdk/credential-provider-imds": "3.259.0", + "@aws-sdk/credential-provider-process": "3.257.0", + "@aws-sdk/credential-provider-sso": "3.264.0", + "@aws-sdk/credential-provider-web-identity": "3.257.0", + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/shared-ini-file-loader": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-node": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.264.0.tgz", + "integrity": "sha512-DPzL7oawcILs5Mduim9Z8SVeJaUpaDRVbUIrBHsMBu+N7Zuqtzr+0ckHc1bEi3iYq2QUCk5pH5vpQaZYkMlbtw==", + "requires": { + "@aws-sdk/credential-provider-env": "3.257.0", + "@aws-sdk/credential-provider-imds": "3.259.0", + "@aws-sdk/credential-provider-ini": "3.264.0", + "@aws-sdk/credential-provider-process": "3.257.0", + "@aws-sdk/credential-provider-sso": "3.264.0", + "@aws-sdk/credential-provider-web-identity": "3.257.0", + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/shared-ini-file-loader": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-process": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.257.0.tgz", + "integrity": "sha512-xK8uYeNXaclaBCGrLi4z2pxPRngqLf5BM5jg2fn57zqvlL9V5gJF972FehrVBL0bfp1/laG0ZJtD2K2sapyWAw==", + "requires": { + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/shared-ini-file-loader": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-sso": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.264.0.tgz", + "integrity": "sha512-CJuAlqIIJap6LXoqimvEAnYZ7Kb5pTbiS3e+aY+fajO3OPujmQpHuiY8kOmscjwZ4ErJdEskivcTGwXph0dPZQ==", + "requires": { + "@aws-sdk/client-sso": "3.264.0", + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/shared-ini-file-loader": "3.257.0", + "@aws-sdk/token-providers": "3.264.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-web-identity": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.257.0.tgz", + "integrity": "sha512-Cm0uvRv4JuIbD0Kp3W0J/vwjADIyCx8HoZi5yg+QIi5nilocuTQ3ajvLeuPVSvFvdy+yaxSc5FxNXquWt7Mngw==", + "requires": { + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/endpoint-cache": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/endpoint-cache/-/endpoint-cache-3.208.0.tgz", + "integrity": "sha512-MkrCvaZhTb1qZCjcDH73t5n43h0Kr0GS+30lpXZ9PAnHJZPqv+vhWFPK0ZsFe1XktbS0WOoDR4ED+lWm0Dw7Rg==", + "requires": { + "mnemonist": "0.38.3", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/fetch-http-handler": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.257.0.tgz", + "integrity": "sha512-zOF+RzQ+wfF7tq7tGUdPcqUTh3+k2f8KCVJE07A8kCopVq4nBu4NH6Eq29Tjpwdya3YlKvE+kFssuQRRRRex+Q==", + "requires": { + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/querystring-builder": "3.257.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/util-base64": "3.208.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/hash-node": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.257.0.tgz", + "integrity": "sha512-W/USUuea5Ep3OJ2U7Ve8/5KN1YsDun2WzOFUxc1PyxXP5pW6OgC15/op0e+bmWPG851clvp5S8ZuroUr3aKi3Q==", + "requires": { + "@aws-sdk/types": "3.257.0", + "@aws-sdk/util-buffer-from": "3.208.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/invalid-dependency": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.257.0.tgz", + "integrity": "sha512-T68SAPRNMEhpke0wlxURgogL7q0B8dfqZsSeS20BVR/lksJxLse9+pbmCDxiu1RrXoEIsEwl5rbLN+Hw8BFFYw==", + "requires": { + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/is-array-buffer": { + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz", + "integrity": "sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-content-length": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.257.0.tgz", + "integrity": "sha512-yiawbV2azm6QnMY1L2ypG8PDRdjOcEIvFmT0T7y0F49rfbKJOu21j1ONAoCkLrINK6kMqcD5JSQLVCoURxiTxQ==", + "requires": { + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-endpoint": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.264.0.tgz", + "integrity": "sha512-H9JEAug3Oo3IA2wZIplVVF6NtauCIjICXWgbNbA8Im+I2KPe0jWtOdtQv4U+tqHe9T4zIixaCM3gjUBld+FoOA==", + "requires": { + "@aws-sdk/middleware-serde": "3.257.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/signature-v4": "3.257.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/url-parser": "3.257.0", + "@aws-sdk/util-config-provider": "3.208.0", + "@aws-sdk/util-middleware": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-endpoint-discovery": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.259.0.tgz", + "integrity": "sha512-1FeoJKD5wRZmxsHl+g+SOm1VfBZuwW8T/7rBHah63lWB2zOrvBiwJ2jfIalXEtlZYqPRYwsxiQYgR0J5w8Fk9Q==", + "requires": { + "@aws-sdk/config-resolver": "3.259.0", + "@aws-sdk/endpoint-cache": "3.208.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-host-header": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.257.0.tgz", + "integrity": "sha512-gEi9AJdJfRfU8Qr6HK1hfhxTzyV3Giq4B/h7um99hIFAT/GCg9xiPvAOKPo6UeuiKEv3b7RpSL4s6cBvnJMJBA==", + "requires": { + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-logger": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.257.0.tgz", + "integrity": "sha512-8RDXW/VbMKBsXDfcCLmROZcWKyrekyiPa3J1aIaBy0tq9o4xpGoXw/lwwIrNVvISAFslb57rteup34bfn6ta6w==", + "requires": { + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-recursion-detection": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.257.0.tgz", + "integrity": "sha512-rUCih6zHh8k9Edf5N5Er4s508FYbwLM0MWTD2axzlj9TjLqEQ9OKED3wHaLffXSDzodd3oTAfJCLPbWQyoZ3ZQ==", + "requires": { + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-retry": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.259.0.tgz", + "integrity": "sha512-pVh1g8e84MAi7eVtWLiiiCtn82LzxOP7+LxTRHatmgIeN22yGQBZILliPDJypUPvDYlwxI1ekiK+oPTcte0Uww==", + "requires": { + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/service-error-classification": "3.257.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/util-middleware": "3.257.0", + "@aws-sdk/util-retry": "3.257.0", + "tslib": "^2.3.1", + "uuid": "^8.3.2" + } + }, + "@aws-sdk/middleware-sdk-sts": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.257.0.tgz", + "integrity": "sha512-d6IJCLRi3O2tm4AFK60WNhIwmMmspj1WzKR1q1TaoPzoREPG2xg+Am18wZBRkCyYuRPPrbizmkvAmAJiUolMAw==", + "requires": { + "@aws-sdk/middleware-signing": "3.257.0", + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/signature-v4": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-serde": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.257.0.tgz", + "integrity": "sha512-/JasfXPWFq24mnCrx9fxW/ISBSp07RJwhsF14qzm8Qy3Z0z470C+QRM6otTwAkYuuVt1wuLjja5agq3Jtzq7dQ==", + "requires": { + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-signing": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.257.0.tgz", + "integrity": "sha512-hCH3D83LHmm6nqmtNrGTWZCVjsQXrGHIXbd17/qrw7aPFvcAhsiiCncGFP+XsUXEKa2ZqcSNMUyPrx69ofNRZQ==", + "requires": { + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/signature-v4": "3.257.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/util-middleware": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-stack": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.257.0.tgz", + "integrity": "sha512-awg2F0SvwACBaw4HIObK8pQGfSqAc4Vy+YFzWSfZNVC35oRO6RsRdKHVU99lRC0LrT2Ptmfghl2DMPSrRDbvlQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-user-agent": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.257.0.tgz", + "integrity": "sha512-37rt75LZyD0UWpbcFuxEGqwF3DZKSixQPl7AsDe6q3KtrO5gGQB+diH5vbY0txNNYyv5IK9WMwvY73mVmoWRmw==", + "requires": { + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/node-config-provider": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.259.0.tgz", + "integrity": "sha512-DUOqr71oonBvM6yKPdhDBmraqgXHCFrVWFw7hc5ZNxL2wS/EsbKfGPJp+C+SUgpn1upIWPNnh/bNoLAbBkcLsA==", + "requires": { + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/shared-ini-file-loader": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/node-http-handler": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.257.0.tgz", + "integrity": "sha512-8KnWHVVwaGKyTlkTU9BSOAiSovNDoagxemU2l10QqBbzUCVpljCUMUkABEGRJ1yoQCl6DJ7RtNkAyZ8Ne/E15A==", + "requires": { + "@aws-sdk/abort-controller": "3.257.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/querystring-builder": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/property-provider": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.257.0.tgz", + "integrity": "sha512-3rUbRAcF0GZ5PhDiXhS4yREfZ5hOEtvYEa9S/19OdM5eoypOaLU5XnFcCKfnccSP8SkdgpJujzxOMRWNWadlAQ==", + "requires": { + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/protocol-http": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.257.0.tgz", + "integrity": "sha512-xt7LGOgZIvbLS3418AYQLacOqx+mo5j4mPiIMz7f6AaUg+/fBUgESVsncKDqxbEJVwwCXSka8Ca0cntJmoeMSw==", + "requires": { + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/querystring-builder": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.257.0.tgz", + "integrity": "sha512-mZHWLP7XIkzx1GIXO5WfX/iJ+aY9TWs02RE9FkdL2+by0HEMR65L3brQTbU1mIBJ7BjaPwYH24dljUOSABX7yg==", + "requires": { + "@aws-sdk/types": "3.257.0", + "@aws-sdk/util-uri-escape": "3.201.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/querystring-parser": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.257.0.tgz", + "integrity": "sha512-UDrE1dEwWrWT8dG2VCrGYrPxCWOkZ1fPTPkjpkR4KZEdQDZBqU5gYZF2xPj8Nz7pjQVHFuW2wFm3XYEk56GEjg==", + "requires": { + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/service-error-classification": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.257.0.tgz", + "integrity": "sha512-FAyR0XsueGkkqDtkP03cTJQk52NdQ9sZelLynmmlGPUP75LApRPvFe1riKrou6+LsDbwVNVffj6mbDfIcOhaOw==" + }, + "@aws-sdk/shared-ini-file-loader": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.257.0.tgz", + "integrity": "sha512-HNjC1+Wx3xHiJc+CP14GhIdVhfQGSjroAsWseRxAhONocA9Fl1ZX4hx7+sA5c9nOoMVOovi6ivJ/6lCRPTDRrQ==", + "requires": { + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/signature-v4": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.257.0.tgz", + "integrity": "sha512-aLQQN59X/D0+ShzPD3Anj5ntdMA/RFeNLOUCDyDvremViGi6yxUS98usQ/8bG5Rq0sW2GGMdbFUFmrDvqdiqEQ==", + "requires": { + "@aws-sdk/is-array-buffer": "3.201.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/util-hex-encoding": "3.201.0", + "@aws-sdk/util-middleware": "3.257.0", + "@aws-sdk/util-uri-escape": "3.201.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/signature-v4-multi-region": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.264.0.tgz", + "integrity": "sha512-45rNJeC245g2HtDlxlcgNhB9YU0PcWXGNOLOiMWq3cSMNsaKJoTD1tLdBke2VjW7Hz7QBCWLCRAftHatnWcdyg==", + "requires": { + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/signature-v4": "3.257.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/util-arn-parser": "3.208.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/smithy-client": { + "version": "3.261.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.261.0.tgz", + "integrity": "sha512-j8XQEa3caZUVFVZfhJjaskw80O/tB+IXu84HMN44N7UkXaCFHirUsNjTDztJhnVXf/gKXzIqUqprfRnOvwLtIg==", + "requires": { + "@aws-sdk/middleware-stack": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/token-providers": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.264.0.tgz", + "integrity": "sha512-1N54FCdBJRqrwFWHUoDpGI0rKhI29Or9ZwGjjcBzKzLhz5sEF/DEhuID7h1/KKEkXdQ0+lmXOFGMMrahrMpOow==", + "requires": { + "@aws-sdk/client-sso-oidc": "3.264.0", + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/shared-ini-file-loader": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/types": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.257.0.tgz", + "integrity": "sha512-LmqXuBQBGeaGi/3Rp7XiEX1B5IPO2UUfBVvu0wwGqVsmstT0SbOVDZGPmxygACbm64n+PRx3uTSDefRfoiWYZg==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/url-parser": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.257.0.tgz", + "integrity": "sha512-Qe/AcFe/NFZHa6cN2afXEQn9ehXxh57dWGdRjfjd2lQqNV4WW1R2pl2Tm1ZJ1dwuCNLJi4NHLMk8lrD3QQ8rdg==", + "requires": { + "@aws-sdk/querystring-parser": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-arn-parser": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.208.0.tgz", + "integrity": "sha512-QV4af+kscova9dv4VuHOgH8wEr/IIYHDGcnyVtkUEqahCejWr1Kuk+SBK0xMwnZY5LSycOtQ8aeqHOn9qOjZtA==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-base64": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.208.0.tgz", + "integrity": "sha512-PQniZph5A6N7uuEOQi+1hnMz/FSOK/8kMFyFO+4DgA1dZ5pcKcn5wiFwHkcTb/BsgVqQa3Jx0VHNnvhlS8JyTg==", + "requires": { + "@aws-sdk/util-buffer-from": "3.208.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-body-length-browser": { + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.188.0.tgz", + "integrity": "sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-body-length-node": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.208.0.tgz", + "integrity": "sha512-3zj50e5g7t/MQf53SsuuSf0hEELzMtD8RX8C76f12OSRo2Bca4FLLYHe0TZbxcfQHom8/hOaeZEyTyMogMglqg==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-buffer-from": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.208.0.tgz", + "integrity": "sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw==", + "requires": { + "@aws-sdk/is-array-buffer": "3.201.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-config-provider": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.208.0.tgz", + "integrity": "sha512-DSRqwrERUsT34ug+anlMBIFooBEGwM8GejC7q00Y/9IPrQy50KnG5PW2NiTjuLKNi7pdEOlwTSEocJE15eDZIg==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-defaults-mode-browser": { + "version": "3.261.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.261.0.tgz", + "integrity": "sha512-lX3X1NfzQVV6cakepGV24uRcqevlDnQ8VgaCV8dhnw1FVThueFigyoFaUA02+uRXbV9KIbNWkEvweNtm2wvyDw==", + "requires": { + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/types": "3.257.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-defaults-mode-node": { + "version": "3.261.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.261.0.tgz", + "integrity": "sha512-4AK6yu4bOmHSocUdbGoEHbNXB09UA58ON2HBHY4NxMBuFBAd9XB2tYiyhce+Cm+o+lHbS8oQnw0VZw16WMzzew==", + "requires": { + "@aws-sdk/config-resolver": "3.259.0", + "@aws-sdk/credential-provider-imds": "3.259.0", + "@aws-sdk/node-config-provider": "3.259.0", + "@aws-sdk/property-provider": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-dynamodb": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.264.0.tgz", + "integrity": "sha512-JV92vDCDpYKYSHMddj/jw1LU5/smkSG7SZ6bHTHfwT50sLbG5KVZSzKt2JbGTZ78PRCD2WfVEyuitNBCkUV0Ug==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-endpoints": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.257.0.tgz", + "integrity": "sha512-3bvmRn5XGYzPPWjLuvHBKdJOb+fijnb8Ungu9bfXnTYFsng/ndHUWeHC22O/p8w3OWoRYUIMaZHxdxe27BFozg==", + "requires": { + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-hex-encoding": { + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz", + "integrity": "sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-locate-window": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz", + "integrity": "sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-middleware": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.257.0.tgz", + "integrity": "sha512-F9ieon8B8eGVs5tyZtAIG3DZEObDvujkspho0qRbUTHUosM0ylJLsMU800fmC/uRHLRrZvb/RSp59+kNDwSAMw==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-retry": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.257.0.tgz", + "integrity": "sha512-l9TOsOAYtZxwW3q5fQKW4rsD9t2HVaBfQ4zBamHkNTfB4vBVvCnz4oxkvSvA2MlxCA6am+K1K/oj917Tpqk53g==", + "requires": { + "@aws-sdk/service-error-classification": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-uri-escape": { + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz", + "integrity": "sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-user-agent-browser": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.257.0.tgz", + "integrity": "sha512-YdavWK6/8Cw6mypEgysGGX/dT9p9qnzFbnN5PQsUY+JJk2Nx8fKFydjGiQ+6rWPeW17RAv9mmbboh9uPVWxVlw==", + "requires": { + "@aws-sdk/types": "3.257.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-user-agent-node": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.259.0.tgz", + "integrity": "sha512-R0VTmNs+ySDDebU98BUbsLyeIM5YmAEr9esPpy15XfSy3AWmAeru8nLlztdaLilHZzLIDzvM2t7NGk/FzZFCvA==", + "requires": { + "@aws-sdk/node-config-provider": "3.259.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-utf8": { + "version": "3.254.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8/-/util-utf8-3.254.0.tgz", + "integrity": "sha512-14Kso/eIt5/qfIBmhEL9L1IfyUqswjSTqO2mY7KOzUZ9SZbwn3rpxmtkhmATkRjD7XIlLKaxBkI7tU9Zjzj8Kw==", + "requires": { + "@aws-sdk/util-buffer-from": "3.208.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-waiter": { + "version": "3.257.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.257.0.tgz", + "integrity": "sha512-Fr6of3EDOcXVDs5534o7VsJMXdybB0uLy2LzeFAVSwGOY3geKhIquBAiUDqCVu9B+iTldrC0rQ9NIM7ZSpPG8w==", + "requires": { + "@aws-sdk/abort-controller": "3.257.0", + "@aws-sdk/types": "3.257.0", + "tslib": "^2.3.1" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.20.14", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", + "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==", + "dev": true + }, + "@babel/core": { + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", + "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helpers": "^7.20.7", + "@babel/parser": "^7.20.7", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.12", + "@babel/types": "^7.20.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "dependencies": { + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.20.14", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", + "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", + "dev": true, + "requires": { + "@babel/types": "^7.20.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", + "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.10", + "@babel/types": "^7.20.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "dev": true, + "requires": { + "@babel/types": "^7.20.2" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", + "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", + "dev": true, + "requires": { + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.13", + "@babel/types": "^7.20.7" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.20.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz", + "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==", + "dev": true + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + } + }, + "@babel/traverse": { + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", + "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.13", + "@babel/types": "^7.20.7", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, + "@esbuild/android-arm": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.5.tgz", + "integrity": "sha512-crmPUzgCmF+qZXfl1YkiFoUta2XAfixR1tEnr/gXIixE+WL8Z0BGqfydP5oox0EUOgQMMRgtATtakyAcClQVqQ==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.5.tgz", + "integrity": "sha512-KHWkDqYAMmKZjY4RAN1PR96q6UOtfkWlTS8uEwWxdLtkRt/0F/csUhXIrVfaSIFxnscIBMPynGfhsMwQDRIBQw==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.5.tgz", + "integrity": "sha512-8fI/AnIdmWz/+1iza2WrCw8kwXK9wZp/yZY/iS8ioC+U37yJCeppi9EHY05ewJKN64ASoBIseufZROtcFnX5GA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.5.tgz", + "integrity": "sha512-EAvaoyIySV6Iif3NQCglUNpnMfHSUgC5ugt2efl3+QDntucJe5spn0udNZjTgNi6tKVqSceOw9tQ32liNZc1Xw==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.5.tgz", + "integrity": "sha512-ha7QCJh1fuSwwCgoegfdaljowwWozwTDjBgjD3++WAy/qwee5uUi1gvOg2WENJC6EUyHBOkcd3YmLDYSZ2TPPA==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.5.tgz", + "integrity": "sha512-VbdXJkn2aI2pQ/wxNEjEcnEDwPpxt3CWWMFYmO7CcdFBoOsABRy2W8F3kjbF9F/pecEUDcI3b5i2w+By4VQFPg==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.5.tgz", + "integrity": "sha512-olgGYND1/XnnWxwhjtY3/ryjOG/M4WfcA6XH8dBTH1cxMeBemMODXSFhkw71Kf4TeZFFTN25YOomaNh0vq2iXg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.5.tgz", + "integrity": "sha512-YBdCyQwA3OQupi6W2/WO4FnI+NWFWe79cZEtlbqSESOHEg7a73htBIRiE6uHPQe7Yp5E4aALv+JxkRLGEUL7tw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.5.tgz", + "integrity": "sha512-8a0bqSwu3OlLCfu2FBbDNgQyBYdPJh1B9PvNX7jMaKGC9/KopgHs37t+pQqeMLzcyRqG6z55IGNQAMSlCpBuqg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.5.tgz", + "integrity": "sha512-uCwm1r/+NdP7vndctgq3PoZrnmhmnecWAr114GWMRwg2QMFFX+kIWnp7IO220/JLgnXK/jP7VKAFBGmeOYBQYQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.5.tgz", + "integrity": "sha512-3YxhSBl5Sb6TtBjJu+HP93poBruFzgXmf3PVfIe4xOXMj1XpxboYZyw3W8BhoX/uwxzZz4K1I99jTE/5cgDT1g==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.5.tgz", + "integrity": "sha512-Hy5Z0YVWyYHdtQ5mfmfp8LdhVwGbwVuq8mHzLqrG16BaMgEmit2xKO+iDakHs+OetEx0EN/2mUzDdfdktI+Nmg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.5.tgz", + "integrity": "sha512-5dbQvBLbU/Y3Q4ABc9gi23hww1mQcM7KZ9KBqabB7qhJswYMf8WrDDOSw3gdf3p+ffmijMd28mfVMvFucuECyg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.5.tgz", + "integrity": "sha512-fp/KUB/ZPzEWGTEUgz9wIAKCqu7CjH1GqXUO2WJdik1UNBQ7Xzw7myIajpxztE4Csb9504ERiFMxZg5KZ6HlZQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.5.tgz", + "integrity": "sha512-kRV3yw19YDqHTp8SfHXfObUFXlaiiw4o2lvT1XjsPZ++22GqZwSsYWJLjMi1Sl7j9qDlDUduWDze/nQx0d6Lzw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.5.tgz", + "integrity": "sha512-vnxuhh9e4pbtABNLbT2ANW4uwQ/zvcHRCm1JxaYkzSehugoFd5iXyC4ci1nhXU13mxEwCnrnTIiiSGwa/uAF1g==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.5.tgz", + "integrity": "sha512-cigBpdiSx/vPy7doUyImsQQBnBjV5f1M99ZUlaJckDAJjgXWl6y9W17FIfJTy8TxosEF6MXq+fpLsitMGts2nA==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.5.tgz", + "integrity": "sha512-VdqRqPVIjjZfkf40LrqOaVuhw9EQiAZ/GNCSM2UplDkaIzYVsSnycxcFfAnHdWI8Gyt6dO15KHikbpxwx+xHbw==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.5.tgz", + "integrity": "sha512-ItxPaJ3MBLtI4nK+mALLEoUs6amxsx+J1ibnfcYMkqaCqHST1AkF4aENpBehty3czqw64r/XqL+W9WqU6kc2Qw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.5.tgz", + "integrity": "sha512-4u2Q6qsJTYNFdS9zHoAi80spzf78C16m2wla4eJPh4kSbRv+BpXIfl6TmBSWupD8e47B1NrTfrOlEuco7mYQtg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.5.tgz", + "integrity": "sha512-KYlm+Xu9TXsfTWAcocLuISRtqxKp/Y9ZBVg6CEEj0O5J9mn7YvBKzAszo2j1ndyzUPk+op+Tie2PJeN+BnXGqQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.5.tgz", + "integrity": "sha512-XgA9qWRqby7xdYXuF6KALsn37QGBMHsdhmnpjfZtYxKxbTOwfnDM6MYi2WuUku5poNaX2n9XGVr20zgT/2QwCw==", + "dev": true, + "optional": true + }, + "@github-docs/frontmatter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@github-docs/frontmatter/-/frontmatter-1.3.1.tgz", + "integrity": "sha512-1BFouSuheb7GelUDlLmv/Qrpi8Ybtyfch91grZbqx+aGzDEh7CAna+mAHIYaaN3HppNB8JnppGvX2DXM4v0pzQ==", + "requires": { + "gray-matter": "^4.0.2", + "lodash": "^4.17.15", + "revalidator": "^0.3.1" + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/console": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.4.1.tgz", + "integrity": "sha512-m+XpwKSi3PPM9znm5NGS8bBReeAJJpSkL1OuFCqaMaJL2YX9YXLkkI+MBchMPwu+ZuM2rynL51sgfkQteQ1CKQ==", + "dev": true, + "requires": { + "@jest/types": "^29.4.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.4.1", + "jest-util": "^29.4.1", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.4.1.tgz", + "integrity": "sha512-RXFTohpBqpaTebNdg5l3I5yadnKo9zLBajMT0I38D0tDhreVBYv3fA8kywthI00sWxPztWLD3yjiUkewwu/wKA==", + "dev": true, + "requires": { + "@jest/console": "^29.4.1", + "@jest/reporters": "^29.4.1", + "@jest/test-result": "^29.4.1", + "@jest/transform": "^29.4.1", + "@jest/types": "^29.4.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.4.0", + "jest-config": "^29.4.1", + "jest-haste-map": "^29.4.1", + "jest-message-util": "^29.4.1", + "jest-regex-util": "^29.2.0", + "jest-resolve": "^29.4.1", + "jest-resolve-dependencies": "^29.4.1", + "jest-runner": "^29.4.1", + "jest-runtime": "^29.4.1", + "jest-snapshot": "^29.4.1", + "jest-util": "^29.4.1", + "jest-validate": "^29.4.1", + "jest-watcher": "^29.4.1", + "micromatch": "^4.0.4", + "pretty-format": "^29.4.1", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/environment": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.4.1.tgz", + "integrity": "sha512-pJ14dHGSQke7Q3mkL/UZR9ZtTOxqskZaC91NzamEH4dlKRt42W+maRBXiw/LWkdJe+P0f/zDR37+SPMplMRlPg==", + "dev": true, + "requires": { + "@jest/fake-timers": "^29.4.1", + "@jest/types": "^29.4.1", + "@types/node": "*", + "jest-mock": "^29.4.1" + } + }, + "@jest/expect": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.4.1.tgz", + "integrity": "sha512-ZxKJP5DTUNF2XkpJeZIzvnzF1KkfrhEF6Rz0HGG69fHl6Bgx5/GoU3XyaeFYEjuuKSOOsbqD/k72wFvFxc3iTw==", + "dev": true, + "requires": { + "expect": "^29.4.1", + "jest-snapshot": "^29.4.1" + } + }, + "@jest/expect-utils": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.1.tgz", + "integrity": "sha512-w6YJMn5DlzmxjO00i9wu2YSozUYRBhIoJ6nQwpMYcBMtiqMGJm1QBzOf6DDgRao8dbtpDoaqLg6iiQTvv0UHhQ==", + "dev": true, + "requires": { + "jest-get-type": "^29.2.0" + } + }, + "@jest/fake-timers": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.4.1.tgz", + "integrity": "sha512-/1joI6rfHFmmm39JxNfmNAO3Nwm6Y0VoL5fJDy7H1AtWrD1CgRtqJbN9Ld6rhAkGO76qqp4cwhhxJ9o9kYjQMw==", + "dev": true, + "requires": { + "@jest/types": "^29.4.1", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.4.1", + "jest-mock": "^29.4.1", + "jest-util": "^29.4.1" + } + }, + "@jest/globals": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.4.1.tgz", + "integrity": "sha512-znoK2EuFytbHH0ZSf2mQK2K1xtIgmaw4Da21R2C/NE/+NnItm5mPEFQmn8gmF3f0rfOlmZ3Y3bIf7bFj7DHxAA==", + "dev": true, + "requires": { + "@jest/environment": "^29.4.1", + "@jest/expect": "^29.4.1", + "@jest/types": "^29.4.1", + "jest-mock": "^29.4.1" + } + }, + "@jest/reporters": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.4.1.tgz", + "integrity": "sha512-AISY5xpt2Xpxj9R6y0RF1+O6GRy9JsGa8+vK23Lmzdy1AYcpQn5ItX79wJSsTmfzPKSAcsY1LNt/8Y5Xe5LOSg==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.4.1", + "@jest/test-result": "^29.4.1", + "@jest/transform": "^29.4.1", + "@jest/types": "^29.4.1", + "@jridgewell/trace-mapping": "^0.3.15", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.4.1", + "jest-util": "^29.4.1", + "jest-worker": "^29.4.1", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + } + }, + "@jest/schemas": { + "version": "29.4.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.0.tgz", + "integrity": "sha512-0E01f/gOZeNTG76i5eWWSupvSHaIINrTie7vCyjiYFKgzNdyEGd12BUv4oNBFHOqlHDbtoJi3HrQ38KCC90NsQ==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.25.16" + } + }, + "@jest/source-map": { + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.2.0.tgz", + "integrity": "sha512-1NX9/7zzI0nqa6+kgpSdKPK+WU1p+SJk3TloWZf5MzPbxri9UEeXX5bWZAPCzbQcyuAzubcdUHA7hcNznmRqWQ==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.15", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + } + }, + "@jest/test-result": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.4.1.tgz", + "integrity": "sha512-WRt29Lwt+hEgfN8QDrXqXGgCTidq1rLyFqmZ4lmJOpVArC8daXrZWkWjiaijQvgd3aOUj2fM8INclKHsQW9YyQ==", + "dev": true, + "requires": { + "@jest/console": "^29.4.1", + "@jest/types": "^29.4.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.4.1.tgz", + "integrity": "sha512-v5qLBNSsM0eHzWLXsQ5fiB65xi49A3ILPSFQKPXzGL4Vyux0DPZAIN7NAFJa9b4BiTDP9MBF/Zqc/QA1vuiJ0w==", + "dev": true, + "requires": { + "@jest/test-result": "^29.4.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.4.1", + "slash": "^3.0.0" + } + }, + "@jest/transform": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.4.1.tgz", + "integrity": "sha512-5w6YJrVAtiAgr0phzKjYd83UPbCXsBRTeYI4BXokv9Er9CcrH9hfXL/crCvP2d2nGOcovPUnlYiLPFLZrkG5Hg==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.4.1", + "@jridgewell/trace-mapping": "^0.3.15", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.4.1", + "jest-regex-util": "^29.2.0", + "jest-util": "^29.4.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^5.0.0" + } + }, + "@jest/types": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.1.tgz", + "integrity": "sha512-zbrAXDUOnpJ+FMST2rV7QZOgec8rskg2zv8g2ajeqitp4tvZiyqTCYXANrKsM+ryj5o+LI+ZN2EgU9drrkiwSA==", + "dev": true, + "requires": { + "@jest/schemas": "^29.4.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@octokit/app": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@octokit/app/-/app-13.1.2.tgz", + "integrity": "sha512-Kf+h5sa1SOI33hFsuHvTsWj1jUrjp1x4MuiJBq7U/NicfEGa6nArPUoDnyfP/YTmcQ5cQ5yvOgoIBkbwPg6kzQ==", + "requires": { + "@octokit/auth-app": "^4.0.8", + "@octokit/auth-unauthenticated": "^3.0.0", + "@octokit/core": "^4.0.0", + "@octokit/oauth-app": "^4.0.7", + "@octokit/plugin-paginate-rest": "^6.0.0", + "@octokit/types": "^9.0.0", + "@octokit/webhooks": "^10.0.0" + } + }, + "@octokit/auth-app": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-4.0.9.tgz", + "integrity": "sha512-VFpKIXhHO+kVJtane5cEvdYPtjDKCOI0uKsRrsZfJP+uEu7rcPbQCLCcRKgyT+mUIzGr1IIOmwP/lFqSip1dXA==", + "requires": { + "@octokit/auth-oauth-app": "^5.0.0", + "@octokit/auth-oauth-user": "^2.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "@types/lru-cache": "^5.1.0", + "deprecation": "^2.3.1", + "lru-cache": "^6.0.0", + "universal-github-app-jwt": "^1.1.1", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "@octokit/auth-oauth-app": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-5.0.5.tgz", + "integrity": "sha512-UPX1su6XpseaeLVCi78s9droxpGtBWIgz9XhXAx9VXabksoF0MyI5vaa1zo1njyYt6VaAjFisC2A2Wchcu2WmQ==", + "requires": { + "@octokit/auth-oauth-device": "^4.0.0", + "@octokit/auth-oauth-user": "^2.0.0", + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "@types/btoa-lite": "^1.0.0", + "btoa-lite": "^1.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/auth-oauth-device": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-4.0.4.tgz", + "integrity": "sha512-Xl85BZYfqCMv+Uvz33nVVUjE7I/PVySNaK6dRRqlkvYcArSr9vRcZC9KVjXYObGRTCN6mISeYdakAZvWEN4+Jw==", + "requires": { + "@octokit/oauth-methods": "^2.0.0", + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/auth-oauth-user": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-2.1.1.tgz", + "integrity": "sha512-JgqnNNPf9CaWLxWm9uh2WgxcaVYhxBR09NVIPTiMU2dVZ3FObOHs3njBiLNw+zq84k+rEdm5Y7AsiASrZ84Apg==", + "requires": { + "@octokit/auth-oauth-device": "^4.0.0", + "@octokit/oauth-methods": "^2.0.0", + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "btoa-lite": "^1.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/auth-token": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.3.tgz", + "integrity": "sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA==", + "requires": { + "@octokit/types": "^9.0.0" + } + }, + "@octokit/auth-unauthenticated": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-3.0.4.tgz", + "integrity": "sha512-AT74XGBylcLr4lmUp1s6mjSUgphGdlse21Qjtv5DzpX1YOl5FXKwvNcZWESdhyBbpDT8VkVyLFqa/7a7eqpPNw==", + "requires": { + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0" + } + }, + "@octokit/core": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.0.tgz", + "integrity": "sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg==", + "requires": { + "@octokit/auth-token": "^3.0.0", + "@octokit/graphql": "^5.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/endpoint": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.5.tgz", + "integrity": "sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA==", + "requires": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/graphql": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.5.tgz", + "integrity": "sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ==", + "requires": { + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/oauth-app": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-4.2.0.tgz", + "integrity": "sha512-gyGclT77RQMkVUEW3YBeAKY+LBSc5u3eC9Wn/Uwt3WhuKuu9mrV18EnNpDqmeNll+mdV02yyBROU29Tlili6gg==", + "requires": { + "@octokit/auth-oauth-app": "^5.0.0", + "@octokit/auth-oauth-user": "^2.0.0", + "@octokit/auth-unauthenticated": "^3.0.0", + "@octokit/core": "^4.0.0", + "@octokit/oauth-authorization-url": "^5.0.0", + "@octokit/oauth-methods": "^2.0.0", + "@types/aws-lambda": "^8.10.83", + "fromentries": "^1.3.1", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/oauth-authorization-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-5.0.0.tgz", + "integrity": "sha512-y1WhN+ERDZTh0qZ4SR+zotgsQUE1ysKnvBt1hvDRB2WRzYtVKQjn97HEPzoehh66Fj9LwNdlZh+p6TJatT0zzg==" + }, + "@octokit/oauth-methods": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-2.0.5.tgz", + "integrity": "sha512-yQP6B5gE3axNxuM3U9KqWs/ErAQ+WLPaPgC/7EjsZsQibkf8sjdAfF8/y/EJW+Dd05XQvadX4WhQZPMnO1SE1A==", + "requires": { + "@octokit/oauth-authorization-url": "^5.0.0", + "@octokit/request": "^6.2.3", + "@octokit/request-error": "^3.0.3", + "@octokit/types": "^9.0.0", + "btoa-lite": "^1.0.0" + } + }, + "@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "@octokit/plugin-paginate-rest": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.0.0.tgz", + "integrity": "sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw==", + "requires": { + "@octokit/types": "^9.0.0" + } + }, + "@octokit/plugin-rest-endpoint-methods": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.0.1.tgz", + "integrity": "sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA==", + "requires": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.3.1" + } + }, + "@octokit/plugin-retry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-4.1.1.tgz", + "integrity": "sha512-iR7rg5KRSl6L6RELTQQ3CYeNgeBJyuAmP95odzcQ/zyefnRT/Peo8rWeky4z7V/+/oPWqOL4I5Z+V8KtjpHCJw==", + "requires": { + "@octokit/types": "^9.0.0", + "bottleneck": "^2.15.3" + } + }, + "@octokit/plugin-throttling": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-5.0.1.tgz", + "integrity": "sha512-I4qxs7wYvYlFuY3PAUGWAVPhFXG3RwnvTiSr5Fu/Auz7bYhDLnzS2MjwV8nGLq/FPrWwYiweeZrI5yjs1YG4tQ==", + "requires": { + "@octokit/types": "^9.0.0", + "bottleneck": "^2.15.3" + } + }, + "@octokit/request": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.3.tgz", + "integrity": "sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA==", + "requires": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/request-error": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "requires": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "requires": { + "@octokit/openapi-types": "^16.0.0" + } + }, + "@octokit/webhooks": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-10.7.0.tgz", + "integrity": "sha512-zZBbQMpXXnK/ki/utrFG/TuWv9545XCSLibfDTxrYqR1PmU6zel02ebTOrA7t5XIGHzlEOc/NgISUIBUe7pMFA==", + "requires": { + "@octokit/request-error": "^3.0.0", + "@octokit/webhooks-methods": "^3.0.0", + "@octokit/webhooks-types": "6.10.0", + "aggregate-error": "^3.1.0" + } + }, + "@octokit/webhooks-methods": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-3.0.2.tgz", + "integrity": "sha512-Vlnv5WBscf07tyAvfDbp7pTkMZUwk7z7VwEF32x6HqI+55QRwBTcT+D7DDjZXtad/1dU9E32x0HmtDlF9VIRaQ==" + }, + "@octokit/webhooks-types": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-6.10.0.tgz", + "integrity": "sha512-lDNv83BeEyxxukdQ0UttiUXawk9+6DkdjjFtm2GFED+24IQhTVaoSbwV9vWWKONyGLzRmCQqZmoEWkDhkEmPlw==" + }, + "@sendgrid/client": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@sendgrid/client/-/client-7.7.0.tgz", + "integrity": "sha512-SxH+y8jeAQSnDavrTD0uGDXYIIkFylCo+eDofVmZLQ0f862nnqbC3Vd1ej6b7Le7lboyzQF6F7Fodv02rYspuA==", + "requires": { + "@sendgrid/helpers": "^7.7.0", + "axios": "^0.26.0" + }, + "dependencies": { + "axios": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", + "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", + "requires": { + "follow-redirects": "^1.14.8" + } + } + } + }, + "@sendgrid/helpers": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@sendgrid/helpers/-/helpers-7.7.0.tgz", + "integrity": "sha512-3AsAxfN3GDBcXoZ/y1mzAAbKzTtUZ5+ZrHOmWQ279AuaFXUNCh9bPnRpN504bgveTqoW+11IzPg3I0WVgDINpw==", + "requires": { + "deepmerge": "^4.2.2" + } + }, + "@sendgrid/mail": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@sendgrid/mail/-/mail-7.7.0.tgz", + "integrity": "sha512-5+nApPE9wINBvHSUxwOxkkQqM/IAAaBYoP9hw7WwgDNQPxraruVqHizeTitVtKGiqWCKm2mnjh4XGN3fvFLqaw==", + "requires": { + "@sendgrid/client": "^7.7.0", + "@sendgrid/helpers": "^7.7.0" + } + }, + "@sinclair/typebox": { + "version": "0.25.21", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.21.tgz", + "integrity": "sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==", + "dev": true + }, + "@sinonjs/commons": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", + "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^2.0.0" + } + }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, + "@types/aws-lambda": { + "version": "8.10.110", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.110.tgz", + "integrity": "sha512-r6egf2Cwv/JaFTTrF9OXFVUB3j/SXTgM9BwrlbBRjWAa2Tu6GWoDoLflppAZ8uSfbUJdXvC7Br3DjuN9pQ2NUQ==" + }, + "@types/babel__core": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", + "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", + "dev": true, + "requires": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", + "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/btoa-lite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.0.tgz", + "integrity": "sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==" + }, + "@types/graceful-fs": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "29.4.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.4.0.tgz", + "integrity": "sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==", + "dev": true, + "requires": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "@types/jsonwebtoken": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz", + "integrity": "sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw==", + "requires": { + "@types/node": "*" + } + }, + "@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" + }, + "@types/node": { + "version": "18.11.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", + "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" + }, + "@types/prettier": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", + "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", + "dev": true + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "@types/yargs": { + "version": "17.0.22", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", + "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "aws-cdk": { + "version": "2.63.0", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.63.0.tgz", + "integrity": "sha512-2bv/egScdBxWnzcGkWT21Evi+20Qt356H4SqxQLskjhcjc+zvN9nsDNTJvI58BI/pkyU/K8cemHCKnBjBVdXkg==", + "dev": true, + "requires": { + "fsevents": "2.3.2" + } + }, + "aws-cdk-lib": { + "version": "2.63.0", + "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.63.0.tgz", + "integrity": "sha512-+thToi/7coSufwaEafgofTaZERXxFUeEwEIp0SGU0wHz6IbPll5yAzoEIkE51kM8AMCMfqwJddYOjM3qs43cPg==", + "requires": { + "@aws-cdk/asset-awscli-v1": "^2.2.52", + "@aws-cdk/asset-kubectl-v20": "^2.1.1", + "@aws-cdk/asset-node-proxy-agent-v5": "^2.0.42", + "@balena/dockerignore": "^1.0.2", + "case": "1.6.3", + "fs-extra": "^9.1.0", + "ignore": "^5.2.4", + "jsonschema": "^1.4.1", + "minimatch": "^3.1.2", + "punycode": "^2.3.0", + "semver": "^7.3.8", + "yaml": "1.10.2" + }, + "dependencies": { + "@balena/dockerignore": { + "version": "1.0.2", + "bundled": true + }, + "at-least-node": { + "version": "1.0.0", + "bundled": true + }, + "balanced-match": { + "version": "1.0.2", + "bundled": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "case": { + "version": "1.6.3", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "fs-extra": { + "version": "9.1.0", + "bundled": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "bundled": true + }, + "ignore": { + "version": "5.2.4", + "bundled": true + }, + "jsonfile": { + "version": "6.1.0", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsonschema": { + "version": "1.4.1", + "bundled": true + }, + "lru-cache": { + "version": "6.0.0", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "punycode": { + "version": "2.3.0", + "bundled": true + }, + "semver": { + "version": "7.3.8", + "bundled": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "bundled": true + }, + "yallist": { + "version": "4.0.0", + "bundled": true + }, + "yaml": { + "version": "1.10.2", + "bundled": true + } + } + }, + "axios": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.1.tgz", + "integrity": "sha512-78pWJsQTceInlyaeBQeYZ/QgZeWS8hGeKiIJiDKQe3hEyBb7sEMq0K4gjx+Va6WHTYO4zI/RRl8qGRzn0YMadA==", + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "babel-jest": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.4.1.tgz", + "integrity": "sha512-xBZa/pLSsF/1sNpkgsiT3CmY7zV1kAsZ9OxxtrFqYucnOuRftXAfcJqcDVyOPeN4lttWTwhLdu0T9f8uvoPEUg==", + "dev": true, + "requires": { + "@jest/transform": "^29.4.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.4.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "29.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.4.0.tgz", + "integrity": "sha512-a/sZRLQJEmsmejQ2rPEUe35nO1+C9dc9O1gplH1SXmJxveQSRUYdBk8yGZG/VOUuZs1u2aHZJusEGoRMbhhwCg==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "29.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.4.0.tgz", + "integrity": "sha512-fUB9vZflUSM3dO/6M2TCAepTzvA4VkOvl67PjErcrQMGt9Eve7uazaeyCZ2th3UtI7ljpiBJES0F7A1vBRsLZA==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^29.4.0", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "before-after-hook": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" + }, + "bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" + }, + "bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "btoa-lite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", + "integrity": "sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==" + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001450", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001450.tgz", + "integrity": "sha512-qMBmvmQmFXaSxexkjjfMvD5rnDL0+m+dUMZKoDYsGG8iZN29RuYh9eRoMvKsT6uMAWlyUUGDEQGJJYjzCIO9ew==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, + "ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "dev": true + }, + "cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "constructs": { + "version": "10.1.239", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-10.1.239.tgz", + "integrity": "sha512-yE0w8NyRoVsLYDaEFmTTO0pSnY4K+/ekaKbeNkXKPkRbtdJISsY+9iXUuWKyH6dW9MquQe9tXUyABB4IvWLs/A==" + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "deepmerge": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", + "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "diff-sequences": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.3.1.tgz", + "integrity": "sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==", + "dev": true + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true + }, + "emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "esbuild": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.5.tgz", + "integrity": "sha512-Bu6WLCc9NMsNoMJUjGl3yBzTjVLXdysMltxQWiLAypP+/vQrf+3L1Xe8fCXzxaECus2cEJ9M7pk4yKatEwQMqQ==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.17.5", + "@esbuild/android-arm64": "0.17.5", + "@esbuild/android-x64": "0.17.5", + "@esbuild/darwin-arm64": "0.17.5", + "@esbuild/darwin-x64": "0.17.5", + "@esbuild/freebsd-arm64": "0.17.5", + "@esbuild/freebsd-x64": "0.17.5", + "@esbuild/linux-arm": "0.17.5", + "@esbuild/linux-arm64": "0.17.5", + "@esbuild/linux-ia32": "0.17.5", + "@esbuild/linux-loong64": "0.17.5", + "@esbuild/linux-mips64el": "0.17.5", + "@esbuild/linux-ppc64": "0.17.5", + "@esbuild/linux-riscv64": "0.17.5", + "@esbuild/linux-s390x": "0.17.5", + "@esbuild/linux-x64": "0.17.5", + "@esbuild/netbsd-x64": "0.17.5", + "@esbuild/openbsd-x64": "0.17.5", + "@esbuild/sunos-x64": "0.17.5", + "@esbuild/win32-arm64": "0.17.5", + "@esbuild/win32-ia32": "0.17.5", + "@esbuild/win32-x64": "0.17.5" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true + }, + "expect": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.4.1.tgz", + "integrity": "sha512-OKrGESHOaMxK3b6zxIq9SOW8kEXztKff/Dvg88j4xIJxur1hspEbedVkR3GpHe5LO+WB2Qw7OWN0RMTdp6as5A==", + "dev": true, + "requires": { + "@jest/expect-utils": "^29.4.1", + "jest-get-type": "^29.2.0", + "jest-matcher-utils": "^29.4.1", + "jest-message-util": "^29.4.1", + "jest-util": "^29.4.1" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-xml-parser": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.11.tgz", + "integrity": "sha512-4aUg3aNRR/WjQAcpceODG1C3x3lFANXRo8+1biqfieHmg9pyMt7qB4lQV/Ta6sJCTbA5vfD8fnA8S54JATiFUA==", + "requires": { + "strnum": "^1.0.5" + } + }, + "fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "requires": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + } + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.4.1.tgz", + "integrity": "sha512-cknimw7gAXPDOmj0QqztlxVtBVCw2lYY9CeIE5N6kD+kET1H4H79HSNISJmijb1HF+qk+G+ploJgiDi5k/fRlg==", + "dev": true, + "requires": { + "@jest/core": "^29.4.1", + "@jest/types": "^29.4.1", + "import-local": "^3.0.2", + "jest-cli": "^29.4.1" + } + }, + "jest-changed-files": { + "version": "29.4.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.4.0.tgz", + "integrity": "sha512-rnI1oPxgFghoz32Y8eZsGJMjW54UlqT17ycQeCEktcxxwqqKdlj9afl8LNeO0Pbu+h2JQHThQP0BzS67eTRx4w==", + "dev": true, + "requires": { + "execa": "^5.0.0", + "p-limit": "^3.1.0" + } + }, + "jest-circus": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.4.1.tgz", + "integrity": "sha512-v02NuL5crMNY4CGPHBEflLzl4v91NFb85a+dH9a1pUNx6Xjggrd8l9pPy4LZ1VYNRXlb+f65+7O/MSIbLir6pA==", + "dev": true, + "requires": { + "@jest/environment": "^29.4.1", + "@jest/expect": "^29.4.1", + "@jest/test-result": "^29.4.1", + "@jest/types": "^29.4.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.4.1", + "jest-matcher-utils": "^29.4.1", + "jest-message-util": "^29.4.1", + "jest-runtime": "^29.4.1", + "jest-snapshot": "^29.4.1", + "jest-util": "^29.4.1", + "p-limit": "^3.1.0", + "pretty-format": "^29.4.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-cli": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.4.1.tgz", + "integrity": "sha512-jz7GDIhtxQ37M+9dlbv5K+/FVcIo1O/b1sX3cJgzlQUf/3VG25nvuWzlDC4F1FLLzUThJeWLu8I7JF9eWpuURQ==", + "dev": true, + "requires": { + "@jest/core": "^29.4.1", + "@jest/test-result": "^29.4.1", + "@jest/types": "^29.4.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^29.4.1", + "jest-util": "^29.4.1", + "jest-validate": "^29.4.1", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + } + }, + "jest-config": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.4.1.tgz", + "integrity": "sha512-g7p3q4NuXiM4hrS4XFATTkd+2z0Ml2RhFmFPM8c3WyKwVDNszbl4E7cV7WIx1YZeqqCtqbtTtZhGZWJlJqngzg==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.4.1", + "@jest/types": "^29.4.1", + "babel-jest": "^29.4.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.4.1", + "jest-environment-node": "^29.4.1", + "jest-get-type": "^29.2.0", + "jest-regex-util": "^29.2.0", + "jest-resolve": "^29.4.1", + "jest-runner": "^29.4.1", + "jest-util": "^29.4.1", + "jest-validate": "^29.4.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.4.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + } + }, + "jest-diff": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.1.tgz", + "integrity": "sha512-uazdl2g331iY56CEyfbNA0Ut7Mn2ulAG5vUaEHXycf1L6IPyuImIxSz4F0VYBKi7LYIuxOwTZzK3wh5jHzASMw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.3.1", + "jest-get-type": "^29.2.0", + "pretty-format": "^29.4.1" + } + }, + "jest-docblock": { + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.2.0.tgz", + "integrity": "sha512-bkxUsxTgWQGbXV5IENmfiIuqZhJcyvF7tU4zJ/7ioTutdz4ToB5Yx6JOFBpgI+TphRY4lhOyCWGNH/QFQh5T6A==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.4.1.tgz", + "integrity": "sha512-QlYFiX3llJMWUV0BtWht/esGEz9w+0i7BHwODKCze7YzZzizgExB9MOfiivF/vVT0GSQ8wXLhvHXh3x2fVD4QQ==", + "dev": true, + "requires": { + "@jest/types": "^29.4.1", + "chalk": "^4.0.0", + "jest-get-type": "^29.2.0", + "jest-util": "^29.4.1", + "pretty-format": "^29.4.1" + } + }, + "jest-environment-node": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.4.1.tgz", + "integrity": "sha512-x/H2kdVgxSkxWAIlIh9MfMuBa0hZySmfsC5lCsWmWr6tZySP44ediRKDUiNggX/eHLH7Cd5ZN10Rw+XF5tXsqg==", + "dev": true, + "requires": { + "@jest/environment": "^29.4.1", + "@jest/fake-timers": "^29.4.1", + "@jest/types": "^29.4.1", + "@types/node": "*", + "jest-mock": "^29.4.1", + "jest-util": "^29.4.1" + } + }, + "jest-get-type": { + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz", + "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==", + "dev": true + }, + "jest-haste-map": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.4.1.tgz", + "integrity": "sha512-imTjcgfVVTvg02khXL11NNLTx9ZaofbAWhilrMg/G8dIkp+HYCswhxf0xxJwBkfhWb3e8dwbjuWburvxmcr58w==", + "dev": true, + "requires": { + "@jest/types": "^29.4.1", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.2.0", + "jest-util": "^29.4.1", + "jest-worker": "^29.4.1", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-leak-detector": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.4.1.tgz", + "integrity": "sha512-akpZv7TPyGMnH2RimOCgy+hPmWZf55EyFUvymQ4LMsQP8xSPlZumCPtXGoDhFNhUE2039RApZkTQDKU79p/FiQ==", + "dev": true, + "requires": { + "jest-get-type": "^29.2.0", + "pretty-format": "^29.4.1" + } + }, + "jest-matcher-utils": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.1.tgz", + "integrity": "sha512-k5h0u8V4nAEy6lSACepxL/rw78FLDkBnXhZVgFneVpnJONhb2DhZj/Gv4eNe+1XqQ5IhgUcqj745UwH0HJmMnA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^29.4.1", + "jest-get-type": "^29.2.0", + "pretty-format": "^29.4.1" + } + }, + "jest-message-util": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.1.tgz", + "integrity": "sha512-H4/I0cXUaLeCw6FM+i4AwCnOwHRgitdaUFOdm49022YD5nfyr8C/DrbXOBEyJaj+w/y0gGJ57klssOaUiLLQGQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.4.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.4.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.1.tgz", + "integrity": "sha512-MwA4hQ7zBOcgVCVnsM8TzaFLVUD/pFWTfbkY953Y81L5ret3GFRZtmPmRFAjKQSdCKoJvvqOu6Bvfpqlwwb0dQ==", + "dev": true, + "requires": { + "@jest/types": "^29.4.1", + "@types/node": "*", + "jest-util": "^29.4.1" + } + }, + "jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.2.0.tgz", + "integrity": "sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA==", + "dev": true + }, + "jest-resolve": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.4.1.tgz", + "integrity": "sha512-j/ZFNV2lm9IJ2wmlq1uYK0Y/1PiyDq9g4HEGsNTNr3viRbJdV+8Lf1SXIiLZXFvyiisu0qUyIXGBnw+OKWkJwQ==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.4.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.4.1", + "jest-validate": "^29.4.1", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.4.1.tgz", + "integrity": "sha512-Y3QG3M1ncAMxfjbYgtqNXC5B595zmB6e//p/qpA/58JkQXu/IpLDoLeOa8YoYfsSglBKQQzNUqtfGJJT/qLmJg==", + "dev": true, + "requires": { + "jest-regex-util": "^29.2.0", + "jest-snapshot": "^29.4.1" + } + }, + "jest-runner": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.4.1.tgz", + "integrity": "sha512-8d6XXXi7GtHmsHrnaqBKWxjKb166Eyj/ksSaUYdcBK09VbjPwIgWov1VwSmtupCIz8q1Xv4Qkzt/BTo3ZqiCeg==", + "dev": true, + "requires": { + "@jest/console": "^29.4.1", + "@jest/environment": "^29.4.1", + "@jest/test-result": "^29.4.1", + "@jest/transform": "^29.4.1", + "@jest/types": "^29.4.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.2.0", + "jest-environment-node": "^29.4.1", + "jest-haste-map": "^29.4.1", + "jest-leak-detector": "^29.4.1", + "jest-message-util": "^29.4.1", + "jest-resolve": "^29.4.1", + "jest-runtime": "^29.4.1", + "jest-util": "^29.4.1", + "jest-watcher": "^29.4.1", + "jest-worker": "^29.4.1", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "dependencies": { + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, + "jest-runtime": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.4.1.tgz", + "integrity": "sha512-UXTMU9uKu2GjYwTtoAw5rn4STxWw/nadOfW7v1sx6LaJYa3V/iymdCLQM6xy3+7C6mY8GfX22vKpgxY171UIoA==", + "dev": true, + "requires": { + "@jest/environment": "^29.4.1", + "@jest/fake-timers": "^29.4.1", + "@jest/globals": "^29.4.1", + "@jest/source-map": "^29.2.0", + "@jest/test-result": "^29.4.1", + "@jest/transform": "^29.4.1", + "@jest/types": "^29.4.1", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.4.1", + "jest-message-util": "^29.4.1", + "jest-mock": "^29.4.1", + "jest-regex-util": "^29.2.0", + "jest-resolve": "^29.4.1", + "jest-snapshot": "^29.4.1", + "jest-util": "^29.4.1", + "semver": "^7.3.5", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "jest-snapshot": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.4.1.tgz", + "integrity": "sha512-l4iV8EjGgQWVz3ee/LR9sULDk2pCkqb71bjvlqn+qp90lFwpnulHj4ZBT8nm1hA1C5wowXLc7MGnw321u0tsYA==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.4.1", + "@jest/transform": "^29.4.1", + "@jest/types": "^29.4.1", + "@types/babel__traverse": "^7.0.6", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.4.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.4.1", + "jest-get-type": "^29.2.0", + "jest-haste-map": "^29.4.1", + "jest-matcher-utils": "^29.4.1", + "jest-message-util": "^29.4.1", + "jest-util": "^29.4.1", + "natural-compare": "^1.4.0", + "pretty-format": "^29.4.1", + "semver": "^7.3.5" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "jest-util": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.1.tgz", + "integrity": "sha512-bQy9FPGxVutgpN4VRc0hk6w7Hx/m6L53QxpDreTZgJd9gfx/AV2MjyPde9tGyZRINAUrSv57p2inGBu2dRLmkQ==", + "dev": true, + "requires": { + "@jest/types": "^29.4.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-validate": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.4.1.tgz", + "integrity": "sha512-qNZXcZQdIQx4SfUB/atWnI4/I2HUvhz8ajOSYUu40CSmf9U5emil8EDHgE7M+3j9/pavtk3knlZBDsgFvv/SWw==", + "dev": true, + "requires": { + "@jest/types": "^29.4.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.2.0", + "leven": "^3.1.0", + "pretty-format": "^29.4.1" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + } + } + }, + "jest-watcher": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.4.1.tgz", + "integrity": "sha512-vFOzflGFs27nU6h8dpnVRER3O2rFtL+VMEwnG0H3KLHcllLsU8y9DchSh0AL/Rg5nN1/wSiQ+P4ByMGpuybaVw==", + "dev": true, + "requires": { + "@jest/test-result": "^29.4.1", + "@jest/types": "^29.4.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.4.1", + "string-length": "^4.0.1" + } + }, + "jest-worker": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.1.tgz", + "integrity": "sha512-O9doU/S1EBe+yp/mstQ0VpPwpv0Clgn68TkNwGxL6/usX/KUW9Arnn4ag8C3jc6qHcXznhsT5Na1liYzAsuAbQ==", + "dev": true, + "requires": { + "@types/node": "*", + "jest-util": "^29.4.1", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "requires": { + "jws": "^3.2.2", + "lodash": "^4.17.21", + "ms": "^2.1.1", + "semver": "^7.3.8" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + }, + "mnemonist": { + "version": "0.38.3", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.3.tgz", + "integrity": "sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==", + "requires": { + "obliterator": "^1.6.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node-fetch": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node-releases": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.9.tgz", + "integrity": "sha512-2xfmOrRkGogbTK9R6Leda0DGiXeY3p2NJpy4+gNCffdUvV6mdEJnaDEic1i3Ec2djAo8jWYoJMR5PB0MSMpxUA==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "obliterator": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-1.6.1.tgz", + "integrity": "sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig==" + }, + "octokit": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/octokit/-/octokit-2.0.14.tgz", + "integrity": "sha512-z6cgZBFxirpFEQ1La8Lg83GCs5hOV2EPpkYYdjsGNbfQMv8qUGjq294MiRBCbZqLufviakGsPUxaNKe3JrPmsA==", + "requires": { + "@octokit/app": "^13.1.1", + "@octokit/core": "^4.0.4", + "@octokit/oauth-app": "^4.0.6", + "@octokit/plugin-paginate-rest": "^6.0.0", + "@octokit/plugin-rest-endpoint-methods": "^7.0.0", + "@octokit/plugin-retry": "^4.0.3", + "@octokit/plugin-throttling": "^5.0.0", + "@octokit/types": "^9.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + }, + "dependencies": { + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + } + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "pretty-format": { + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.1.tgz", + "integrity": "sha512-dt/Z761JUVsrIKaY215o1xQJBGlSmTx/h4cSqXqjHLnU1+Kt+mavVE7UgqJJO5ukx5HjSswHfmXz4LjS2oIJfg==", + "dev": true, + "requires": { + "@jest/schemas": "^29.4.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "resolve.exports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.0.tgz", + "integrity": "sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==", + "dev": true + }, + "revalidator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.3.1.tgz", + "integrity": "sha512-orq+Nw+V5pDpQwGEuN2n1AgJ+0A8WqhFHKt5KgkxfAowUKgO1CWV32IR3TNB4g9/FX3gJt9qBJO8DYlwonnB0Q==" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "requires": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "showdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/showdown/-/showdown-2.1.0.tgz", + "integrity": "sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==", + "requires": { + "commander": "^9.0.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==" + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "ts-jest": { + "version": "29.0.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.0.5.tgz", + "integrity": "sha512-PL3UciSgIpQ7f6XjVOmbi96vmDHUqAyqDr8YxzopDqX3kfgYtX1cuNeBjP+L9sFXi6nzsGGA6R3fP3DDDJyrxA==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "^21.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + } + }, + "tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + }, + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true + }, + "uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "optional": true + }, + "universal-github-app-jwt": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz", + "integrity": "sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w==", + "requires": { + "@types/jsonwebtoken": "^9.0.0", + "jsonwebtoken": "^9.0.0" + } + }, + "universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "dependencies": { + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + } + } + }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "write-file-atomic": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.0.tgz", + "integrity": "sha512-R7NYMnHSlV42K54lwY9lvW6MnSm1HSJqZL3xiSgi9E7//FYaI74r2G0rd+/X6VAMkHEdzxQaU5HUOXWUz5kA/w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..b553d8c --- /dev/null +++ b/package.json @@ -0,0 +1,41 @@ +{ + "name": "blog-crossposting-automation", + "version": "0.1.0", + "bin": { + "blog-crossposting-automation": "bin/blog-crossposting-automation.js" + }, + "scripts": { + "build": "tsc", + "watch": "tsc -w", + "test": "jest", + "cdk": "cdk" + }, + "devDependencies": { + "@types/aws-lambda": "^8.10.110", + "@types/jest": "^29.4.0", + "@types/node": "18.11.18", + "aws-cdk": "2.63.0", + "esbuild": "^0.17.5", + "jest": "^29.4.1", + "ts-jest": "^29.0.5", + "ts-node": "^10.9.1", + "typescript": "~4.9.4" + }, + "dependencies": { + "@aws-sdk/client-dynamodb": "^3.229.0", + "@aws-sdk/client-eventbridge": "^3.264.0", + "@aws-sdk/client-secrets-manager": "^3.231.0", + "@aws-sdk/client-sfn": "^3.229.0", + "@aws-sdk/util-dynamodb": "^3.229.0", + "@github-docs/frontmatter": "^1.3.1", + "@sendgrid/client": "^7.7.0", + "@sendgrid/mail": "^7.7.0", + "aws-cdk-lib": "2.63.0", + "axios": "^1.2.1", + "constructs": "^10.0.0", + "handlebars": "^4.7.7", + "octokit": "^2.0.10", + "showdown": "^2.1.0", + "source-map-support": "^0.5.21" + } +} diff --git a/test/blog-crossposting-automation.test.ts b/test/blog-crossposting-automation.test.ts new file mode 100644 index 0000000..c43d056 --- /dev/null +++ b/test/blog-crossposting-automation.test.ts @@ -0,0 +1,17 @@ +// import * as cdk from 'aws-cdk-lib'; +// import { Template } from 'aws-cdk-lib/assertions'; +// import * as BlogCrosspostingAutomation from '../lib/blog-crossposting-automation-stack'; + +// example test. To run these tests, uncomment this file along with the +// example resource in lib/blog-crossposting-automation-stack.ts +test('SQS Queue Created', () => { +// const app = new cdk.App(); +// // WHEN +// const stack = new BlogCrosspostingAutomation.BlogCrosspostingAutomationStack(app, 'MyTestStack'); +// // THEN +// const template = Template.fromStack(stack); + +// template.hasResourceProperties('AWS::SQS::Queue', { +// VisibilityTimeout: 300 +// }); +}); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..fc44377 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "commonjs", + "lib": [ + "es2020" + ], + "declaration": true, + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "noImplicitThis": true, + "alwaysStrict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": false, + "inlineSourceMap": true, + "inlineSources": true, + "experimentalDecorators": true, + "strictPropertyInitialization": false, + "typeRoots": [ + "./node_modules/@types" + ] + }, + "exclude": [ + "node_modules", + "cdk.out" + ] +} From 5778e9429d8ff10b3ec4345d136fb6850b27ccf4 Mon Sep 17 00:00:00 2001 From: martzcodes <978362+martzcodes@users.noreply.github.com> Date: Sat, 4 Feb 2023 18:08:38 -0500 Subject: [PATCH 02/13] step function WIP --- lib/step-function-branch.ts | 158 +++++++++++++++++++++++ lib/step-function.ts | 243 ++++++++++++++++++++++++++++++++++++ 2 files changed, 401 insertions(+) create mode 100644 lib/step-function-branch.ts create mode 100644 lib/step-function.ts diff --git a/lib/step-function-branch.ts b/lib/step-function-branch.ts new file mode 100644 index 0000000..e3fda3f --- /dev/null +++ b/lib/step-function-branch.ts @@ -0,0 +1,158 @@ +import { Table } from "aws-cdk-lib/aws-dynamodb"; +import { NodejsFunction } from "aws-cdk-lib/aws-lambda-nodejs"; +import { + Pass, + Choice, + Condition, + TaskInput, + JsonPath, + StateMachineFragment, + INextable, + State, +} from "aws-cdk-lib/aws-stepfunctions"; +import { + LambdaInvoke, + DynamoUpdateItem, + DynamoAttributeValue, +} from "aws-cdk-lib/aws-stepfunctions-tasks"; +import { Construct } from "constructs"; + +export interface StepFunctionBranchProps { + hashnodeBlogUrl?: string; + parsePostFn: NodejsFunction; + publishPayload: TaskInput; + sendApiRequestFn: NodejsFunction; + table: Table; +} + +export class StepFunctionBranch extends StateMachineFragment { + public readonly startState: State; + public readonly endStates: INextable[]; + constructor(scope: Construct, + id: string, + props: StepFunctionBranchProps) { + super(scope, id); + const { + hashnodeBlogUrl, + parsePostFn, + publishPayload, + sendApiRequestFn, + table, + } = props; + const format = id.toLowerCase(); + const skipped = new Pass(this, `Skipped`, { + parameters: { + "url.$": "$.existingArticle.Item.url.S", + [`${format}Url.$`]: `$.existingArticle.Item.${format}.M.${format}Url.S`, + success: true, + }, + }); + const skipPublish = new Choice(this, `SkipPublish`); + skipPublish.when( + Condition.and( + Condition.isPresent(`$.existingArticle.Item.${format}.M.status.S`), + Condition.stringEquals( + `$.existingArticle.Item.${format}.M.status.S`, + "succeeded" + ) + ), + skipped + ); + const transform = new LambdaInvoke(this, `Transform`, { + lambdaFunction: parsePostFn, + payload: TaskInput.fromObject({ + "post.$": "$.content", + "articleCatalog.$": "$.catalog.Items", + format, + }), + retryOnServiceExceptions: true, + }); + const updateArticleRecordFailure = new DynamoUpdateItem( + this, + `UpdateArticleRecordFailure`, + { + table, + key: { + pk: DynamoAttributeValue.fromString( + JsonPath.stringAt( + `States.Format('{}#{}', $$.Execution.Input.commit, $$.Execution.Input.fileName)` + ) + ), + sk: DynamoAttributeValue.fromString("article"), + }, + updateExpression: "SET #status = :status", + expressionAttributeNames: { + "#status": format, + }, + expressionAttributeValues: { + ":status": DynamoAttributeValue.fromMap({ + status: DynamoAttributeValue.fromString("failed"), + }), + }, + resultPath: JsonPath.DISCARD, + } + ); + transform.addCatch(updateArticleRecordFailure); + const failed = new Pass(this, `Failed`, { + parameters: { + success: false, + }, + }); + updateArticleRecordFailure.next(failed); + const publish = new LambdaInvoke(this, `Publish`, { + lambdaFunction: sendApiRequestFn, + payload: publishPayload, + retryOnServiceExceptions: true, + }); + publish.addCatch(updateArticleRecordFailure); + const updateArticleRecordSuccess = new DynamoUpdateItem( + this, + `UpdateArticleRecordSuccess`, + { + table, + key: { + pk: DynamoAttributeValue.fromString( + JsonPath.stringAt( + `States.Format('{}#{}', $$.Execution.Input.commit, $$.Execution.Input.fileName)` + ) + ), + sk: DynamoAttributeValue.fromString("article"), + }, + updateExpression: "SET #format = :format, #url = :url", + expressionAttributeNames: { + "#format": format, + "#url": "url", + }, + expressionAttributeValues: { + [`:${format}`]: DynamoAttributeValue.fromMap({ + status: DynamoAttributeValue.fromString("succeeded"), + [`${format}Url`]: DynamoAttributeValue.fromString( + format === "hashnode" + ? JsonPath.stringAt( + `States.Format('${hashnodeBlogUrl}/{}', $.result.Payload.data.createPublicationStory.post.slug)` + ) + : JsonPath.stringAt(`$.result.Payload.url`) + ), + }), + ":url": DynamoAttributeValue.fromString(JsonPath.stringAt("$.url")), + }, + resultPath: JsonPath.DISCARD, + } + ); + publish.next(updateArticleRecordSuccess); + const success = new Pass(this, `Success`, { + parameters: { + "url.$": "$.url", + [`${format}Url.$`]: + format === "hashnode" + ? `States.Format('${hashnodeBlogUrl}/{}', $.result.Payload.data.createPublicationStory.post.slug)` + : "$.result.Payload.url", + success: true, + }, + }); + updateArticleRecordSuccess.next(success); + + this.startState = skipPublish; + this.endStates = [skipped, failed, success]; + } +} diff --git a/lib/step-function.ts b/lib/step-function.ts new file mode 100644 index 0000000..3e0ab05 --- /dev/null +++ b/lib/step-function.ts @@ -0,0 +1,243 @@ +import { Table } from "aws-cdk-lib/aws-dynamodb"; +import { + Choice, + Condition, + Fail, + JsonPath, + Parallel, + Pass, + Succeed, + TaskInput, +} from "aws-cdk-lib/aws-stepfunctions"; +import { + CallAwsService, + DynamoAttributeValue, + DynamoGetItem, + DynamoUpdateItem, + LambdaInvoke, +} from "aws-cdk-lib/aws-stepfunctions-tasks"; +import { NodejsFunction } from "aws-cdk-lib/aws-lambda-nodejs"; +import { Construct } from "constructs"; +import { StepFunctionBranch } from "./step-function-branch"; + +export interface CrossPostStepFunctionProps { + table: Table; + devTo?: boolean; + medium?: boolean; + hashnode?: boolean; + parsePostFn: NodejsFunction; + sendApiRequestFn: NodejsFunction; +} +export class CrossPostStepFunction extends Construct { + constructor(scope: Construct, id: string, props: CrossPostStepFunctionProps) { + super(scope, id); + + const { parsePostFn, sendApiRequestFn, table } = props; + const getExistingArticle = new DynamoGetItem(this, `GetExistingArticle`, { + table, + key: { + pk: DynamoAttributeValue.fromString( + JsonPath.stringAt(`States.Format('{}#{}', $.commit, $.fileName)`) + ), + sk: DynamoAttributeValue.fromString("article"), + }, + }); + const setArticleInProgress = new DynamoUpdateItem( + this, + `SetArticleInProgress`, + { + table, + key: { + pk: DynamoAttributeValue.fromString( + JsonPath.stringAt(`States.Format('{}#{}', $.commit, $.fileName)`) + ), + sk: DynamoAttributeValue.fromString("article"), + }, + updateExpression: "SET #status = :status", + expressionAttributeNames: { + "#status": "status", + }, + expressionAttributeValues: { + ":status": DynamoAttributeValue.fromString("in progress"), + }, + resultPath: JsonPath.DISCARD, + } + ); + const successDuplicateRequest = new Succeed( + this, + `SuccessDuplicateRequest` + ); + const hasArticleBeenProcessed = new Choice(this, `HasArticleBeenProcessed`); + hasArticleBeenProcessed.when( + Condition.isNotPresent("$.existingArticle.Item"), + setArticleInProgress + ); + hasArticleBeenProcessed.when( + Condition.and( + Condition.isPresent("$.existingArticle.Item"), + Condition.stringEquals("$.existingArticle.Item.status.S", "failed") + ), + setArticleInProgress + ); + hasArticleBeenProcessed.otherwise(successDuplicateRequest); + const loadArticleCatalog = new CallAwsService(this, "LoadArticleCatalog", { + service: "dynamodb", + action: "query", + iamResources: [table.tableArn], + parameters: { + TableName: table.tableName, + IndexName: "GSI1", + KeyConditionExpression: "#GSI1PK = :GSI1PK", + ExpressionAttributeNames: { + "#GSI1PK": "GSI1PK", + }, + ExpressionAttributeValues: { + ":GSI1PK": DynamoAttributeValue.fromString("article"), + }, + }, + resultPath: "$.catalog", + }); + // addCatch + const updateArticleRecordFailure = new DynamoUpdateItem( + this, + `UpdateArticleRecordFailure`, + { + table, + key: { + pk: DynamoAttributeValue.fromString( + JsonPath.stringAt( + `States.Format('{}#{}', $$.Execution.Input.commit, $$.Execution.Input.fileName)` + ) + ), + sk: DynamoAttributeValue.fromString("article"), + }, + updateExpression: "SET #status = :status", + expressionAttributeNames: { + "#status": "status", + }, + expressionAttributeValues: { + ":status": DynamoAttributeValue.fromString("failed"), + }, + resultPath: JsonPath.DISCARD, + } + ); + loadArticleCatalog.addCatch(updateArticleRecordFailure); + + // PARALLEL + const devTo = new StepFunctionBranch(this, `Dev`, { + parsePostFn, + publishPayload: TaskInput.fromObject({ + secretKey: "dev", + auth: { + location: "header", + key: "api-key", + }, + request: { + method: "POST", + headers: { + accept: "application/vnd.forem.api-v1+json", + }, + baseUrl: "https://dev.to/api/articles", + "body.$": "$.payload", + }, + }), + sendApiRequestFn, + table, + }); + const medium = new StepFunctionBranch(this, `Medium`, { + parsePostFn, + publishPayload: TaskInput.fromObject({ + secretKey: "medium", + auth: { + location: "query", + key: "accessToken", + }, + request: { + method: "POST", + baseUrl: "${MediumUrl}", // TODO <-- + "body.$": "$.payload", + }, + }), + sendApiRequestFn, + table, + }); + const hashnode = new StepFunctionBranch(this, `Hashnode`, { + parsePostFn, + publishPayload: TaskInput.fromObject({ + secretKey: "hashnode", + auth: { + location: "header", + key: "Authorization", + }, + request: { + method: "POST", + headers: { + "content-type": "application/json", + }, + baseUrl: "https://api.hashnode.com", + "body.$": "$.payload", + }, + }), + sendApiRequestFn, + table, + }); + + const parallel = new Parallel(this, "TransformAndPublish") + .branch(devTo.prefixStates()) + .branch(hashnode.prefixStates()) + .branch(medium.prefixStates()); + + const formatFailureCheck = new Pass(this, "FormatFailureCheck", { + parameters: { + "results.$": "$.transform", + failureFormat: { + success: false, + }, + }, + }); + parallel.next(formatFailureCheck); + const checkForFailures = new Pass(this, `CheckForFailures`, { + parameters: { + "results.$": "$.results", + "hasFailure.$": "States.ArrayContains($.results, $.failureFormat)", + }, + }); + formatFailureCheck.next(checkForFailures); + const didFailureOccur = new Choice(this, `DidFailureOccur`); + const updateArticleRecordFailed = new DynamoUpdateItem( + this, + `UpdateArticleRecordFailed`, + { + table, + key: { + pk: DynamoAttributeValue.fromString( + JsonPath.stringAt( + `States.Format('{}#{}', $$.Execution.Input.commit, $$.Execution.Input.fileName)` + ) + ), + sk: DynamoAttributeValue.fromString("article"), + }, + updateExpression: "SET #status = :status", + expressionAttributeNames: { + "#status": "status", + }, + expressionAttributeValues: { + ":status": DynamoAttributeValue.fromString("failed"), + }, + resultPath: JsonPath.DISCARD, + } + ); + didFailureOccur.when( + Condition.booleanEquals("$.existingArticle.Item.status.S", true), + updateArticleRecordFailed + ); + + const shouldSendFailureEmail = new Choice(this, `ShouldSendFailureEmail`); + updateArticleRecordFailed.next(shouldSendFailureEmail); + const somethingWentWrong = new Fail(this, `SomethingWentWrong`, { + error: "PublishError", + cause: "An error occured publishing to one or more sites", + }); + shouldSendFailureEmail.otherwise(somethingWentWrong); + } +} From 13477d9bce9e81ab38df700bfd3e9a8bf854c0fc Mon Sep 17 00:00:00 2001 From: martzcodes <978362+martzcodes@users.noreply.github.com> Date: Sat, 4 Feb 2023 23:15:15 -0500 Subject: [PATCH 03/13] ...pretty close... --- .gitignore | 3 +- bin/blog-crossposting-automation.ts | 18 +- config/default.json | 30 + functions/identify-new-content.ts | 4 +- functions/parse-dev-post.ts | 77 ++ functions/parse-hashnode-post.ts | 85 ++ functions/parse-medium-post.ts | 53 ++ functions/parse-post.ts | 143 ---- functions/utils/getLinks.ts | 4 + functions/utils/getTweetUrl.ts | 3 + functions/utils/getTweets.ts | 6 + lib/blog-crossposting-automation-stack.ts | 191 ++++- lib/step-function.ts | 275 +++++-- package-lock.json | 35 + package.json | 2 + template.yaml | 306 ------- tsconfig.json | 1 + workflows/cross-post.asl.json | 953 ---------------------- 18 files changed, 660 insertions(+), 1529 deletions(-) create mode 100644 config/default.json create mode 100644 functions/parse-dev-post.ts create mode 100644 functions/parse-hashnode-post.ts create mode 100644 functions/parse-medium-post.ts delete mode 100644 functions/parse-post.ts create mode 100644 functions/utils/getLinks.ts create mode 100644 functions/utils/getTweetUrl.ts create mode 100644 functions/utils/getTweets.ts delete mode 100644 template.yaml delete mode 100644 workflows/cross-post.asl.json diff --git a/.gitignore b/.gitignore index c8b08c8..26ab5af 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules/ .aws-sam/ -samconfig.toml \ No newline at end of file +samconfig.toml +local.json \ No newline at end of file diff --git a/bin/blog-crossposting-automation.ts b/bin/blog-crossposting-automation.ts index 5317289..0feb3db 100644 --- a/bin/blog-crossposting-automation.ts +++ b/bin/blog-crossposting-automation.ts @@ -1,20 +1,12 @@ #!/usr/bin/env node import 'source-map-support/register'; -import { BlogCrosspostingAutomationStack } from '../lib/blog-crossposting-automation-stack'; +import { BlogCrosspostingAutomationStack, BlogCrosspostingAutomationStackProps } from '../lib/blog-crossposting-automation-stack'; import { App } from 'aws-cdk-lib'; +import config from 'config'; + +const props: BlogCrosspostingAutomationStackProps = config.get('cdk'); const app = new App(); new BlogCrosspostingAutomationStack(app, 'BlogCrosspostingAutomationStack', { - githubOwner: '', - githubRepo: '', - amplifyProjectId: '', - mediumPublicationId: '', - mediumAuthorId: '', - devOrganizationId: '', - hashnodePublicationId: '', - hashnodeBlogUrl: '', - blogBaseUrl: '', - blogContentPath: '', - notificationEmail: '', - sendgridFromEmail: '', + ...props, }); \ No newline at end of file diff --git a/config/default.json b/config/default.json new file mode 100644 index 0000000..7e6753f --- /dev/null +++ b/config/default.json @@ -0,0 +1,30 @@ +{ + "cdk": { + "amplify": { + "amplifyProjectId": "" + }, + "blogBaseUrl": "", + "commitTimeToleranceMinutes": 0, + "devTo": { + "devOrganizationId": "" + }, + "email": { + "adminEmail": "", + "sendgridFromEmail": "" + }, + "github": { + "owner": "", + "repo": "", + "path": "" + }, + "hashnode": { + "hashnodePublicationId": "", + "hashnodeBlogUrl": "" + }, + "medium": { + "mediumPublicationId": "", + "mediumAuthorId": "" + }, + "newContentIndicator": "" + } +} diff --git a/functions/identify-new-content.ts b/functions/identify-new-content.ts index 491d697..7959333 100644 --- a/functions/identify-new-content.ts +++ b/functions/identify-new-content.ts @@ -34,7 +34,7 @@ const initializeOctokit = async () => { }; const getRecentCommits = async () => { - const timeTolerance = Number(process.env.COMMIT_TIME_TOLERANCE_MINUTES); + const timeTolerance = Number(process.env.COMMIT_TIME_TOLERANCE_MINUTES || 10); const date = new Date(); date.setMinutes(date.getMinutes() - timeTolerance); @@ -48,7 +48,7 @@ const getRecentCommits = async () => { const newPostCommits = result.data.filter((c) => c.commit.message .toLowerCase() - .startsWith(`${process.env.NEW_CONTENT_INDICATOR}`) + .startsWith(`${process.env.NEW_CONTENT_INDICATOR || '[blog]'}`) ); return newPostCommits.map((d) => d.sha); }; diff --git a/functions/parse-dev-post.ts b/functions/parse-dev-post.ts new file mode 100644 index 0000000..4d503e7 --- /dev/null +++ b/functions/parse-dev-post.ts @@ -0,0 +1,77 @@ +import { getLinks } from "./utils/getLinks"; +import { getTweets } from "./utils/getTweets"; +import { getTweetUrl } from "./utils/getTweetUrl"; + +const frontmatter = require("@github-docs/frontmatter"); + +export const handler = async (state: { + post: any; + format: string; + articleCatalog: any; +}) => { + const details = frontmatter(state.post); + const links = getLinks(details.content); + const tweets = getTweets(details.content); + + const payload = formatDevData(details, state.articleCatalog, links, tweets); + return { + payload, + url: `/${details.data.slug.replace(/^\/|\/$/g, "")}`, + }; +}; + +const formatDevData = ( + postDetail: { + content: string; + data: { + title: any; + image: any; + slug: string; + description: any; + categories: any[]; + tags: any[]; + }; + }, + articleCatalog: any[], + links: any, + tweets: any +) => { + let devContent = postDetail.content.slice(0); + for (const link of links) { + const replacement = articleCatalog.find((c) => c.links.M.url.S == link[1]); + if (replacement) { + if (replacement.links.M.devUrl && replacement.links.M.devUrl.S) { + devContent = devContent.replace(link[1], replacement.links.M.devUrl.S); + } else { + devContent = devContent.replace( + link[1], + `${process.env.BLOG_BASE_URL}${replacement.links.M.url.S}` + ); + } + } + } + + for (const tweet of tweets) { + const tweetUrl = getTweetUrl(tweet); + devContent = devContent.replace(tweet[0], `{% twitter ${tweetUrl} %}`); + } + + const devData = { + title: postDetail.data.title, + published: true, + main_image: postDetail.data.image, + canonical_url: `${process.env.BLOG_BASE_URL}/${postDetail.data.slug.replace( + /^\/|\/$/g, + "" + )}`, + description: postDetail.data.description, + tags: [ + ...postDetail.data.categories.map((c) => c.replace(/ /g, "")), + ...postDetail.data.tags.map((t) => t.toString().replace(/ /g, "")), + ], + ...(process.env.DEV_ORG_ID && { organization_id: process.env.DEV_ORG_ID }), + body_markdown: devContent, + }; + + return { article: devData }; +}; diff --git a/functions/parse-hashnode-post.ts b/functions/parse-hashnode-post.ts new file mode 100644 index 0000000..47aac35 --- /dev/null +++ b/functions/parse-hashnode-post.ts @@ -0,0 +1,85 @@ +import { getLinks } from "./utils/getLinks"; +import { getTweets } from "./utils/getTweets"; +import { getTweetUrl } from "./utils/getTweetUrl"; + +const frontmatter = require("@github-docs/frontmatter"); + +export const handler = async (state: { + post: any; + format: string; + articleCatalog: any; +}) => { + const details = frontmatter(state.post); + const links = getLinks(details.content); + const tweets = getTweets(details.content); + + const payload = formatHashnodeData( + details, + state.articleCatalog, + links, + tweets + ); + + return { + payload, + url: `/${details.data.slug.replace(/^\/|\/$/g, "")}`, + }; +}; + +const formatHashnodeData = ( + postDetail: { + content: string; + data: { title: any; image: any; slug: string; description: any }; + }, + articleCatalog: any[], + links: any, + tweets: any +) => { + let hashnodeContent = postDetail.content.slice(0); + for (const link of links) { + const replacement = articleCatalog.find((c) => c.links.M.url.S == link[1]); + if (replacement) { + if ( + replacement.links.M.hashnodeUrl && + replacement.links.M.hashnodeUrl.S + ) { + hashnodeContent = hashnodeContent.replace( + link[1], + replacement.links.M.hashnodeUrl.S + ); + } else { + hashnodeContent = hashnodeContent.replace( + link[1], + `${process.env.BLOG_BASE_URL}${replacement.links.M.url.S}` + ); + } + } + } + + for (const tweet of tweets) { + const tweetUrl = getTweetUrl(tweet); + hashnodeContent = hashnodeContent.replace(tweet[0], `%[${tweetUrl}]`); + } + + const hashnodeData = { + query: + "mutation createPublicationStory($input: CreateStoryInput!, $publicationId: String!){ createPublicationStory( input: $input, publicationId: $publicationId ){ code success message post { slug }} }", + variables: { + publicationId: process.env.HASHNODE_PUBLICATION_ID, + input: { + title: postDetail.data.title, + contentMarkdown: hashnodeContent, + coverImageURL: postDetail.data.image, + isRepublished: { + originalArticleURL: `${ + process.env.BLOG_BASE_URL + }/${postDetail.data.slug.replace(/^\/|\/$/g, "")}`, + }, + tags: [], + subtitle: postDetail.data.description, + }, + }, + }; + + return hashnodeData; +}; diff --git a/functions/parse-medium-post.ts b/functions/parse-medium-post.ts new file mode 100644 index 0000000..4daa352 --- /dev/null +++ b/functions/parse-medium-post.ts @@ -0,0 +1,53 @@ +import { getLinks } from "./utils/getLinks"; +import { getTweets } from "./utils/getTweets"; +import { getTweetUrl } from "./utils/getTweetUrl"; + +const frontmatter = require('@github-docs/frontmatter'); + +export const handler = async (state: { post: any; format: string; articleCatalog: any; }) => { + const details = frontmatter(state.post); + const links = getLinks(details.content); + const tweets = getTweets(details.content); + + const payload = formatMediumData(details, state.articleCatalog, links, tweets); + + return { + payload, + url: `/${details.data.slug.replace(/^\/|\/$/g, '')}` + }; +}; + +const formatMediumData = (postDetail: { data: { title: any; description: any; image_attribution: any; image: any; categories: any; tags: any; slug: string; }; content: string | any[]; }, articleCatalog: any[], links: any, tweets: any) => { + let mediumContent = `\n# ${postDetail.data.title}\n` + + `#### ${postDetail.data.description}\n` + + `![${postDetail.data.image_attribution ?? ''}](${postDetail.data.image})\n` + + `${postDetail.content.slice(0)}`; + + for (const link of links) { + const replacement = articleCatalog.find(c => c.links.M.url.S == link[1]); + if (replacement) { + if (replacement.links.M.mediumUrl && replacement.links.M.mediumUrl.S) { + mediumContent = mediumContent.replace(link[1], replacement.links.M.mediumUrl.S); + } else { + mediumContent = mediumContent.replace(link[1], `${process.env.BLOG_BASE_URL}${replacement.links.M.url.S}`); + } + } + } + + for (const tweet of tweets) { + const tweetUrl = getTweetUrl(tweet); + mediumContent = mediumContent.replace(tweet[0], tweetUrl); + } + + const mediumData = { + title: postDetail.data.title, + contentFormat: 'markdown', + tags: [...postDetail.data.categories, ...postDetail.data.tags], + canonicalUrl: `${process.env.BLOG_BASE_URL}/${postDetail.data.slug.replace(/^\/|\/$/g, '')}`, + publishStatus: 'draft', + notifyFollowers: true, + content: mediumContent + }; + + return mediumData; +}; \ No newline at end of file diff --git a/functions/parse-post.ts b/functions/parse-post.ts deleted file mode 100644 index 18a8a2b..0000000 --- a/functions/parse-post.ts +++ /dev/null @@ -1,143 +0,0 @@ -const frontmatter = require('@github-docs/frontmatter'); - -export const handler = async (state: { post: any; format: string; articleCatalog: any; }) => { - const details = frontmatter(state.post); - const links = getLinks(details.content); - const tweets = getTweets(details.content); - - let payload; - switch (state.format.toLowerCase()) { - case 'medium': - payload = formatMediumData(details, state.articleCatalog, links, tweets); - break; - case 'dev': - payload = formatDevData(details, state.articleCatalog, links, tweets); - break; - case 'hashnode': - payload = formatHashnodeData(details, state.articleCatalog, links, tweets); - break; - } - return { - payload, - url: `/${details.data.slug.replace(/^\/|\/$/g, '')}` - }; -}; - -const formatMediumData = (postDetail: { data: { title: any; description: any; image_attribution: any; image: any; categories: any; tags: any; slug: string; }; content: string | any[]; }, articleCatalog: any[], links: any, tweets: any) => { - let mediumContent = `\n# ${postDetail.data.title}\n` - + `#### ${postDetail.data.description}\n` - + `![${postDetail.data.image_attribution ?? ''}](${postDetail.data.image})\n` - + `${postDetail.content.slice(0)}`; - - for (const link of links) { - const replacement = articleCatalog.find(c => c.links.M.url.S == link[1]); - if (replacement) { - if (replacement.links.M.mediumUrl && replacement.links.M.mediumUrl.S) { - mediumContent = mediumContent.replace(link[1], replacement.links.M.mediumUrl.S); - } else { - mediumContent = mediumContent.replace(link[1], `${process.env.BLOG_BASE_URL}${replacement.links.M.url.S}`); - } - } - } - - for (const tweet of tweets) { - const tweetUrl = getTweetUrl(tweet); - mediumContent = mediumContent.replace(tweet[0], tweetUrl); - } - - const mediumData = { - title: postDetail.data.title, - contentFormat: 'markdown', - tags: [...postDetail.data.categories, ...postDetail.data.tags], - canonicalUrl: `${process.env.BLOG_BASE_URL}/${postDetail.data.slug.replace(/^\/|\/$/g, '')}`, - publishStatus: 'draft', - notifyFollowers: true, - content: mediumContent - }; - - return mediumData; -}; - -const formatDevData = (postDetail: { content: string; data: { title: any; image: any; slug: string; description: any; categories: any[]; tags: any[]; }; }, articleCatalog: any[], links: any, tweets: any) => { - let devContent = postDetail.content.slice(0); - for (const link of links) { - const replacement = articleCatalog.find(c => c.links.M.url.S == link[1]); - if (replacement) { - if (replacement.links.M.devUrl && replacement.links.M.devUrl.S) { - devContent = devContent.replace(link[1], replacement.links.M.devUrl.S); - } else { - devContent = devContent.replace(link[1], `${process.env.BLOG_BASE_URL}${replacement.links.M.url.S}`); - } - } - } - - for (const tweet of tweets) { - const tweetUrl = getTweetUrl(tweet); - devContent = devContent.replace(tweet[0], `{% twitter ${tweetUrl} %}`); - } - - const devData = { - title: postDetail.data.title, - published: true, - main_image: postDetail.data.image, - canonical_url: `${process.env.BLOG_BASE_URL}/${postDetail.data.slug.replace(/^\/|\/$/g, '')}`, - description: postDetail.data.description, - tags: [...postDetail.data.categories.map(c => c.replace(/ /g, '')), ...postDetail.data.tags.map(t => t.toString().replace(/ /g, ''))], - ...process.env.DEV_ORG_ID && { organization_id: process.env.DEV_ORG_ID }, - body_markdown: devContent - }; - - return { article: devData }; -}; - -const formatHashnodeData = (postDetail: { content: string; data: { title: any; image: any; slug: string; description: any; }; }, articleCatalog: any[], links: any, tweets: any) => { - let hashnodeContent = postDetail.content.slice(0); - for (const link of links) { - const replacement = articleCatalog.find(c => c.links.M.url.S == link[1]); - if (replacement) { - if (replacement.links.M.hashnodeUrl && replacement.links.M.hashnodeUrl.S) { - hashnodeContent = hashnodeContent.replace(link[1], replacement.links.M.hashnodeUrl.S); - } else { - hashnodeContent = hashnodeContent.replace(link[1], `${process.env.BLOG_BASE_URL}${replacement.links.M.url.S}`); - } - } - } - - for (const tweet of tweets) { - const tweetUrl = getTweetUrl(tweet); - hashnodeContent = hashnodeContent.replace(tweet[0], `%[${tweetUrl}]`); - } - - const hashnodeData = { - query: 'mutation createPublicationStory($input: CreateStoryInput!, $publicationId: String!){ createPublicationStory( input: $input, publicationId: $publicationId ){ code success message post { slug }} }', - variables: { - publicationId: process.env.HASHNODE_PUBLICATION_ID, - input: { - title: postDetail.data.title, - contentMarkdown: hashnodeContent, - coverImageURL: postDetail.data.image, - isRepublished: { - originalArticleURL: `${process.env.BLOG_BASE_URL}/${postDetail.data.slug.replace(/^\/|\/$/g, '')}` - }, - tags: [], - subtitle: postDetail.data.description - }, - } - } - - return hashnodeData; -}; - -const getLinks = (postContent: string) => { - const linkMatches = postContent.matchAll(/\(([^\)]*)\)/g); - return linkMatches; -}; - -const getTweets = (postContent: string) => { - const tweetMatches = postContent.matchAll(/\{\{<tweet user="([a-zA-Z0-9]*)" id="([\d]*)">\}\}/g); - return tweetMatches; -}; - -const getTweetUrl = (tweet: string[]) => { - return `https://twitter.com/${tweet[1]}/status/${tweet[2]}`; -} \ No newline at end of file diff --git a/functions/utils/getLinks.ts b/functions/utils/getLinks.ts new file mode 100644 index 0000000..f28626f --- /dev/null +++ b/functions/utils/getLinks.ts @@ -0,0 +1,4 @@ +export const getLinks = (postContent: string) => { + const linkMatches = postContent.matchAll(/\(([^\)]*)\)/g); + return linkMatches; +}; \ No newline at end of file diff --git a/functions/utils/getTweetUrl.ts b/functions/utils/getTweetUrl.ts new file mode 100644 index 0000000..7ec6b94 --- /dev/null +++ b/functions/utils/getTweetUrl.ts @@ -0,0 +1,3 @@ +export const getTweetUrl = (tweet: string[]) => { + return `https://twitter.com/${tweet[1]}/status/${tweet[2]}`; +}; \ No newline at end of file diff --git a/functions/utils/getTweets.ts b/functions/utils/getTweets.ts new file mode 100644 index 0000000..82676e8 --- /dev/null +++ b/functions/utils/getTweets.ts @@ -0,0 +1,6 @@ +export const getTweets = (postContent: string) => { + const tweetMatches = postContent.matchAll( + /\{\{<tweet user="([a-zA-Z0-9]*)" id="([\d]*)">\}\}/g + ); + return tweetMatches; +}; \ No newline at end of file diff --git a/lib/blog-crossposting-automation-stack.ts b/lib/blog-crossposting-automation-stack.ts index b2b90f1..5055c1e 100644 --- a/lib/blog-crossposting-automation-stack.ts +++ b/lib/blog-crossposting-automation-stack.ts @@ -1,26 +1,44 @@ -import { StackProps, Stack } from "aws-cdk-lib"; +import { StackProps, Stack, CfnOutput } from "aws-cdk-lib"; import { EventBus, Rule } from "aws-cdk-lib/aws-events"; -import { LambdaFunction } from "aws-cdk-lib/aws-events-targets"; -import { Runtime } from "aws-cdk-lib/aws-lambda"; +import { + LambdaFunction, + SfnStateMachine, +} from "aws-cdk-lib/aws-events-targets"; +import { FunctionUrlAuthType, Runtime } from "aws-cdk-lib/aws-lambda"; import { NodejsFunction } from "aws-cdk-lib/aws-lambda-nodejs"; import { Secret } from "aws-cdk-lib/aws-secretsmanager"; import { Construct } from "constructs"; import { join } from "path"; import { DynamoDb } from "./dyanmo"; +import { CrossPostStepFunction } from "./step-function"; export interface BlogCrosspostingAutomationStackProps extends StackProps { - githubOwner: string; - githubRepo: string; - amplifyProjectId: string; - mediumPublicationId: string; - mediumAuthorId: string; - devOrganizationId: string; - hashnodePublicationId: string; - hashnodeBlogUrl: string; + amplify?: { + amplifyProjectId: string; + }; blogBaseUrl: string; - blogContentPath: string; - notificationEmail: string; - sendgridFromEmail: string; + commitTimeToleranceMinutes?: number; + devTo?: { + devOrganizationId: string; + }; + email?: { + adminEmail: string; + sendgridFromEmail: string; + }; + github: { + owner: string; + repo: string; + path: string; + }; + hashnode?: { + hashnodePublicationId: string; + hashnodeBlogUrl: string; + }; + medium?: { + mediumPublicationId?: string; + mediumAuthorId?: string; + }; + newContentIndicator?: string; } export class BlogCrosspostingAutomationStack extends Stack { constructor( @@ -29,6 +47,17 @@ export class BlogCrosspostingAutomationStack extends Stack { props: BlogCrosspostingAutomationStackProps ) { super(scope, id, props); + const { + amplify, + blogBaseUrl, + commitTimeToleranceMinutes, + devTo, + email, + github, + hashnode, + medium, + newContentIndicator, + } = props; const { table } = new DynamoDb(this, `CrosspostTable`); @@ -48,10 +77,30 @@ export class BlogCrosspostingAutomationStack extends Stack { }, }; - const parsePostFn = new NodejsFunction(this, `ParsePostFn`, { - ...lambdaProps, - entry: join(__dirname, `../functions/parse-post.ts`), - }); + let parseDevFn, parseHashnodeFn, parseMediumFn; + if (devTo) { + parseDevFn = new NodejsFunction(this, `ParseDevToFn`, { + ...lambdaProps, + entry: join(__dirname, `../functions/parse-dev-post.ts`), + }); + parseDevFn.addEnvironment("BLOG_BASE_URL", blogBaseUrl); + parseDevFn.addEnvironment("DEV_ORG_ID", devTo.devOrganizationId); + } + if (hashnode) { + parseHashnodeFn = new NodejsFunction(this, `ParseHashnodeFn`, { + ...lambdaProps, + entry: join(__dirname, `../functions/parse-hashnode-post.ts`), + }); + parseHashnodeFn.addEnvironment("BLOG_BASE_URL", blogBaseUrl); + parseHashnodeFn.addEnvironment("HASHNODE_PUBLICATION_ID", hashnode.hashnodePublicationId); + } + if (medium) { + parseMediumFn = new NodejsFunction(this, `ParseMediumFn`, { + ...lambdaProps, + entry: join(__dirname, `../functions/parse-medium-post.ts`), + }); + parseMediumFn.addEnvironment("BLOG_BASE_URL", blogBaseUrl); + } const sendApiRequestFn = new NodejsFunction(this, `SendApiRequestFn`, { ...lambdaProps, @@ -73,35 +122,89 @@ export class BlogCrosspostingAutomationStack extends Stack { entry: join(__dirname, `../functions/identify-new-content.ts`), } ); + identifyNewContentFn.addEnvironment("OWNER", github.owner); + identifyNewContentFn.addEnvironment("REPO", github.repo); + identifyNewContentFn.addEnvironment("PATH", github.path); + if (commitTimeToleranceMinutes) { + identifyNewContentFn.addEnvironment("COMMIT_TIME_TOLERANCE_MINUTES", `${commitTimeToleranceMinutes}`); + } + if (newContentIndicator) { + identifyNewContentFn.addEnvironment("NEW_CONTENT_INDICATOR", newContentIndicator); + } secret.grantRead(identifyNewContentFn); - new Rule(this, `NewArticlesRule`, { - eventBus, - eventPattern: { - source: ["aws.amplify"], - detailType: ["Amplify Deployment Status Change"], - detail: { - appId: props.amplifyProjectId, - jobStatus: "SUCCEED", - }, - }, - targets: [new LambdaFunction(identifyNewContentFn)], - }); eventBus.grantPutEventsTo(identifyNewContentFn); - const sendEmailFn = new NodejsFunction(this, `SendEmailFn`, { - ...lambdaProps, - entry: join(__dirname, `../functions/send-email-sendgrid.ts`), - }); - secret.grantRead(sendEmailFn); - new Rule(this, `SendEmailRule`, { - eventBus, - eventPattern: { - detailType: ["Send Email"], - }, - targets: [new LambdaFunction(sendEmailFn)], - }); + if (amplify) { + new Rule(this, `NewArticlesRule`, { + eventBus, + eventPattern: { + source: ["aws.amplify"], + detailType: ["Amplify Deployment Status Change"], + detail: { + appId: amplify.amplifyProjectId, + jobStatus: "SUCCEED", + }, + }, + targets: [new LambdaFunction(identifyNewContentFn)], + }); + } else { + const fnUrl = identifyNewContentFn.addFunctionUrl({ + authType: FunctionUrlAuthType.NONE, + cors: { + allowedOrigins: ["*"], + }, + }); + new CfnOutput(this, `GithubWebhook`, { value: fnUrl.url }); + } + + if (email) { + const sendEmailFn = new NodejsFunction(this, `SendEmailFn`, { + ...lambdaProps, + entry: join(__dirname, `../functions/send-email-sendgrid.ts`), + }); + secret.grantRead(sendEmailFn); + new Rule(this, `SendEmailRule`, { + eventBus, + eventPattern: { + detailType: ["Send Email"], + }, + targets: [new LambdaFunction(sendEmailFn)], + }); + } - // TODO convert the state machine + const { stateMachine } = new CrossPostStepFunction( + this, + `CrossPostStepFn`, + { + ...(email + ? { + adminEmail: email.adminEmail, + } + : {}), + ...(devTo + ? { + fn: parseDevFn, + } + : {}), + ...(hashnode + ? { + fn: parseHashnodeFn, + url: hashnode.hashnodeBlogUrl, + } + : {}), + ...(medium + ? { + fn: parseMediumFn, + url: medium.mediumPublicationId ? `https://api.medium.com/v1/publications/${medium.mediumPublicationId}/posts` : `https://api.medium.com/v1/users/${medium.mediumAuthorId}/posts`, + } + : {}), + eventBus, + sendApiRequestFn, + table, + } + ); + table.grantReadWriteData(stateMachine); + eventBus.grantPutEventsTo(stateMachine); new Rule(this, "CrossPostMachineRule", { eventBus, @@ -109,7 +212,7 @@ export class BlogCrosspostingAutomationStack extends Stack { source: [`cross-post`], detailType: ["process-new-content"], }, - // targets: [new SfnStateMachine(stateMachine, {})] + targets: [new SfnStateMachine(stateMachine, {})], }); } } diff --git a/lib/step-function.ts b/lib/step-function.ts index 3e0ab05..9457732 100644 --- a/lib/step-function.ts +++ b/lib/step-function.ts @@ -1,11 +1,13 @@ import { Table } from "aws-cdk-lib/aws-dynamodb"; import { + Chain, Choice, Condition, Fail, JsonPath, Parallel, Pass, + StateMachine, Succeed, TaskInput, } from "aws-cdk-lib/aws-stepfunctions"; @@ -13,26 +15,47 @@ import { CallAwsService, DynamoAttributeValue, DynamoGetItem, + DynamoPutItem, DynamoUpdateItem, - LambdaInvoke, + EventBridgePutEvents, } from "aws-cdk-lib/aws-stepfunctions-tasks"; import { NodejsFunction } from "aws-cdk-lib/aws-lambda-nodejs"; import { Construct } from "constructs"; import { StepFunctionBranch } from "./step-function-branch"; +import { IEventBus } from "aws-cdk-lib/aws-events"; +import { Duration } from "aws-cdk-lib"; export interface CrossPostStepFunctionProps { - table: Table; - devTo?: boolean; - medium?: boolean; - hashnode?: boolean; - parsePostFn: NodejsFunction; + adminEmail?: string; + devTo?: { + fn: NodejsFunction; + }; + eventBus: IEventBus; + hashnode?: { + url: string; + fn: NodejsFunction; + }; + medium?: { + url: string; + fn: NodejsFunction; + }; sendApiRequestFn: NodejsFunction; + table: Table; } export class CrossPostStepFunction extends Construct { + stateMachine: StateMachine; constructor(scope: Construct, id: string, props: CrossPostStepFunctionProps) { super(scope, id); - const { parsePostFn, sendApiRequestFn, table } = props; + const { + adminEmail, + devTo, + eventBus, + hashnode, + medium, + sendApiRequestFn, + table, + } = props; const getExistingArticle = new DynamoGetItem(this, `GetExistingArticle`, { table, key: { @@ -65,7 +88,10 @@ export class CrossPostStepFunction extends Construct { ); const successDuplicateRequest = new Succeed( this, - `SuccessDuplicateRequest` + `SuccessDuplicateRequest`, + { + comment: "This article has already been processed", + } ); const hasArticleBeenProcessed = new Choice(this, `HasArticleBeenProcessed`); hasArticleBeenProcessed.when( @@ -124,68 +150,75 @@ export class CrossPostStepFunction extends Construct { loadArticleCatalog.addCatch(updateArticleRecordFailure); // PARALLEL - const devTo = new StepFunctionBranch(this, `Dev`, { - parsePostFn, - publishPayload: TaskInput.fromObject({ - secretKey: "dev", - auth: { - location: "header", - key: "api-key", - }, - request: { - method: "POST", - headers: { - accept: "application/vnd.forem.api-v1+json", + const parallel = new Parallel(this, "TransformAndPublish"); + if (devTo) { + const devToBranch = new StepFunctionBranch(this, `Dev`, { + parsePostFn: devTo.fn, + publishPayload: TaskInput.fromObject({ + secretKey: "dev", + auth: { + location: "header", + key: "api-key", }, - baseUrl: "https://dev.to/api/articles", - "body.$": "$.payload", - }, - }), - sendApiRequestFn, - table, - }); - const medium = new StepFunctionBranch(this, `Medium`, { - parsePostFn, - publishPayload: TaskInput.fromObject({ - secretKey: "medium", - auth: { - location: "query", - key: "accessToken", - }, - request: { - method: "POST", - baseUrl: "${MediumUrl}", // TODO <-- - "body.$": "$.payload", - }, - }), - sendApiRequestFn, - table, - }); - const hashnode = new StepFunctionBranch(this, `Hashnode`, { - parsePostFn, - publishPayload: TaskInput.fromObject({ - secretKey: "hashnode", - auth: { - location: "header", - key: "Authorization", - }, - request: { - method: "POST", - headers: { - "content-type": "application/json", + request: { + method: "POST", + headers: { + accept: "application/vnd.forem.api-v1+json", + }, + baseUrl: "https://dev.to/api/articles", + "body.$": "$.payload", }, - baseUrl: "https://api.hashnode.com", - "body.$": "$.payload", - }, - }), - sendApiRequestFn, - table, - }); + }), + sendApiRequestFn, + table, + }); + parallel.branch(devToBranch.prefixStates()); + } + if (medium) { + const mediumBranch = new StepFunctionBranch(this, `Medium`, { + parsePostFn: medium.fn, + publishPayload: TaskInput.fromObject({ + secretKey: "medium", + auth: { + location: "query", + key: "accessToken", + }, + request: { + method: "POST", + baseUrl: `${medium}`, + "body.$": "$.payload", + }, + }), + sendApiRequestFn, + table, + }); + parallel.branch(mediumBranch.prefixStates()); + } - const parallel = new Parallel(this, "TransformAndPublish") - .branch(devTo.prefixStates()) - .branch(hashnode.prefixStates()) - .branch(medium.prefixStates()); + if (hashnode) { + const hashnodeBranch = new StepFunctionBranch(this, `Hashnode`, { + hashnodeBlogUrl: hashnode.url, + parsePostFn: hashnode.fn, + publishPayload: TaskInput.fromObject({ + secretKey: "hashnode", + auth: { + location: "header", + key: "Authorization", + }, + request: { + method: "POST", + headers: { + "content-type": "application/json", + }, + baseUrl: "https://api.hashnode.com", + "body.$": "$.payload", + }, + }), + sendApiRequestFn, + table, + }); + parallel.branch(hashnodeBranch.prefixStates()); + } const formatFailureCheck = new Pass(this, "FormatFailureCheck", { parameters: { @@ -239,5 +272,113 @@ export class CrossPostStepFunction extends Construct { cause: "An error occured publishing to one or more sites", }); shouldSendFailureEmail.otherwise(somethingWentWrong); + + const success = new Succeed(this, `Success`); + + const saveArticles = new Parallel(this, `SaveArticles`); + saveArticles.next(success); + + const saveCatalogArticle = new DynamoPutItem(this, `SaveArticle`, { + table, + item: { + pk: DynamoAttributeValue.fromString(JsonPath.stringAt(`$.url`)), + sk: DynamoAttributeValue.fromString("article"), + GSI1PK: DynamoAttributeValue.fromString("article"), + GSI1SK: DynamoAttributeValue.fromString( + JsonPath.stringAt(`$$.Execution.Input.fileName`) + ), + links: DynamoAttributeValue.fromMap({ + devUrl: DynamoAttributeValue.fromString( + JsonPath.stringAt(`$.devUrl`) + ), + url: DynamoAttributeValue.fromString(JsonPath.stringAt(`$.url`)), + mediumUrl: DynamoAttributeValue.fromString( + JsonPath.stringAt(`$.mediumUrl`) + ), + hashnodeUrl: DynamoAttributeValue.fromString( + JsonPath.stringAt(`$.hashnodeUrl`) + ), + }), + }, + resultPath: JsonPath.DISCARD, + }); + saveArticles.branch(saveCatalogArticle); + + const updateArticleRecordSuccess = new DynamoUpdateItem( + this, + `UpdateArticleRecordSuccess`, + { + table, + key: { + pk: DynamoAttributeValue.fromString( + JsonPath.stringAt( + `States.Format('{}#{}', $$.Execution.Input.commit, $$.Execution.Input.fileName)` + ) + ), + sk: DynamoAttributeValue.fromString("article"), + }, + updateExpression: "SET #status = :status", + expressionAttributeNames: { + "#status": "status", + }, + expressionAttributeValues: { + ":status": DynamoAttributeValue.fromString("succeeded"), + }, + resultPath: JsonPath.DISCARD, + } + ); + saveArticles.branch(updateArticleRecordSuccess); + + if (adminEmail) { + const sendFailureEmail = new EventBridgePutEvents( + this, + "SendFailureEmail", + { + entries: [ + { + detail: TaskInput.fromObject({ + subject: "Cross Post Failed!", + to: `${adminEmail}`, + "html.$": + "States.Format('<p>Republishing of your new blog post failed :(</p><p>Found file: <i>{}</i></p><p><a href=\"${ExecutionUrl}/{}\">View state machine execution</a></p>', $$.Execution.Input.fileName, $$.Execution.Id)", + }), + eventBus, + detailType: "Send Email", + source: "user.CrossPostStateMachine", + }, + ], + } + ); + shouldSendFailureEmail.when( + Condition.and( + Condition.isPresent("$$.Execution.Input.sendStatusEmail"), + Condition.booleanEquals("$$.Execution.Input.sendStatusEmail", true) + ), + sendFailureEmail + ); + sendFailureEmail.next(somethingWentWrong); + const sendEmailEvent = new EventBridgePutEvents(this, "SendEmailEvent", { + entries: [ + { + detail: TaskInput.fromObject({ + subject: "Cross Post Successful!", + to: `${adminEmail}`, + "html.$": + 'States.Format(\'<p>Republishing of your new blog post was successful!</p><p>Found file: <i>{}</i></p><p><b>Links</b></p><ul><li><b><a href="{}">Medium</a></b></li><li><b><a href="{}">Dev.to</a></b></li><li><b><a href="{}">Hashnode</a></b></li></ul>\', $$.Execution.Input.fileName, $.mediumUrl, $.devUrl, $.hashnodeUrl)', + }), + eventBus, + detailType: "Send Email", + source: "user.CrossPostStateMachine", + }, + ], + }); + sendEmailEvent.next(success); + } + + const definition = Chain.start(getExistingArticle); + this.stateMachine = new StateMachine(this, `CrossPostMachine`, { + definition, + timeout: Duration.minutes(5), + }); } } diff --git a/package-lock.json b/package-lock.json index 0688d96..32d10be 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,9 +29,11 @@ }, "devDependencies": { "@types/aws-lambda": "^8.10.110", + "@types/config": "^3.3.0", "@types/jest": "^29.4.0", "@types/node": "18.11.18", "aws-cdk": "2.63.0", + "config": "^3.3.9", "esbuild": "^0.17.5", "jest": "^29.4.1", "ts-jest": "^29.0.5", @@ -3031,6 +3033,12 @@ "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.0.tgz", "integrity": "sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==" }, + "node_modules/@types/config": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@types/config/-/config-3.3.0.tgz", + "integrity": "sha512-9kZSbl3/X3TVNowLCu5HFQdQmD+4287Om55avknEYkuo6R2dDrsp/EXEHUFvfYeG7m1eJ0WYGj+cbcUIhARJAQ==", + "dev": true + }, "node_modules/@types/graceful-fs": { "version": "4.1.6", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", @@ -3794,6 +3802,18 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/config": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/config/-/config-3.3.9.tgz", + "integrity": "sha512-G17nfe+cY7kR0wVpc49NCYvNtelm/pPy8czHoFkAgtV1lkmcp7DHtWCdDu+C9Z7gb2WVqa9Tm3uF9aKaPbCfhg==", + "dev": true, + "dependencies": { + "json5": "^2.2.3" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/constructs": { "version": "10.1.239", "resolved": "https://registry.npmjs.org/constructs/-/constructs-10.1.239.tgz", @@ -8800,6 +8820,12 @@ "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.0.tgz", "integrity": "sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==" }, + "@types/config": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@types/config/-/config-3.3.0.tgz", + "integrity": "sha512-9kZSbl3/X3TVNowLCu5HFQdQmD+4287Om55avknEYkuo6R2dDrsp/EXEHUFvfYeG7m1eJ0WYGj+cbcUIhARJAQ==", + "dev": true + }, "@types/graceful-fs": { "version": "4.1.6", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", @@ -9360,6 +9386,15 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "config": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/config/-/config-3.3.9.tgz", + "integrity": "sha512-G17nfe+cY7kR0wVpc49NCYvNtelm/pPy8czHoFkAgtV1lkmcp7DHtWCdDu+C9Z7gb2WVqa9Tm3uF9aKaPbCfhg==", + "dev": true, + "requires": { + "json5": "^2.2.3" + } + }, "constructs": { "version": "10.1.239", "resolved": "https://registry.npmjs.org/constructs/-/constructs-10.1.239.tgz", diff --git a/package.json b/package.json index b553d8c..6f74000 100644 --- a/package.json +++ b/package.json @@ -12,9 +12,11 @@ }, "devDependencies": { "@types/aws-lambda": "^8.10.110", + "@types/config": "^3.3.0", "@types/jest": "^29.4.0", "@types/node": "18.11.18", "aws-cdk": "2.63.0", + "config": "^3.3.9", "esbuild": "^0.17.5", "jest": "^29.4.1", "ts-jest": "^29.0.5", diff --git a/template.yaml b/template.yaml deleted file mode 100644 index 27d3135..0000000 --- a/template.yaml +++ /dev/null @@ -1,306 +0,0 @@ -AWSTemplateFormatVersion: '2010-09-09' -Transform: AWS::Serverless-2016-10-31 -Description: > - Cross post blogs to Medium, Dev.to, and Hashnode triggered by a successful Amplify build - -Parameters: - TableName: - Type: String - Default: blog - GSI1: - Type: String - Default: GSI1 - GitHubPAT: - Type: String - Description: PAT to load blog markdown content from your repository - GitHubOwner: - Type: String - Description: Owner's username of the GitHub repository that holds blog content - GitHubRepo: - Type: String - Description: Repository name of the blog - AmplifyProjectId: - Type: String - Description: Identifier of the Amplify project that triggers the cross-posting - MediumApiKey: - Type: String - Description: API key used to manipulate data in your Medium account - MediumPublicationId: - Type: String - Description: Identifier of the publication you wish to submit to on Medium - Default: '' - MediumAuthorId: - Type: String - Description: Identifier of your user on Medium - Default: '' - DevApiKey: - Type: String - Description: API key used to manipulate data in your Dev.to account - DevOrganizationId: - Type: String - Description: Identifier of the publication you wish to submit to on Dev.to - Default: '' - HashnodeApiKey: - Type: String - Description: API key used to manipulate data in your Hashnode account - HashnodePublicationId: - Type: String - Description: Identifier for your blog publication on Hashnode - HashnodeBlogUrl: - Type: String - Description: Base url of your blog hosted in Hashnode - BlogBaseUrl: - Type: String - Description: Base url of your blog on your personal site - BlogContentPath: - Type: String - Description: Relative path from the root directory to the blog content folder in your GitHub repo - SendgridApiKey: - Type: String - Default: '' - Description: Api Key of the SendGrid account that will send the status report when cross-posting is complete - NotificationEmail: - Type: String - Default: '' - Description: Email address to notify when cross posting is complete - SendgridFromEmail: - Type: String - Default: '' - Description: Email address for SendGrid that sends you the status email - -Conditions: - ShouldSendStatusEmail: - !Not [!Equals [ !Ref SendgridApiKey, '']] - PostToMediumPublication: - !Not [!Equals [!Ref MediumPublicationId, '']] - -Globals: - Function: - Runtime: nodejs14.x #set to this because Amplify build image has SAM version that supports up to 14 - Architectures: - - arm64 - Tracing: Active - Timeout: 15 - MemorySize: 1024 - Handler: index.handler - Layers: - - !Ref SharedLayer - Environment: - Variables: - AWS_NODEJS_CONNECTION_REUSE_ENABLED: 1 - -Resources: - BlogTable: - Type: AWS::DynamoDB::Table - Properties: - TableName: !Ref TableName - BillingMode: PAY_PER_REQUEST - KeySchema: - - AttributeName: pk - KeyType: HASH - - AttributeName: sk - KeyType: RANGE - AttributeDefinitions: - - AttributeName: pk - AttributeType: S - - AttributeName: sk - AttributeType: S - - AttributeName: GSI1PK - AttributeType: S - - AttributeName: GSI1SK - AttributeType: S - GlobalSecondaryIndexes: - - IndexName: !Ref GSI1 - KeySchema: - - AttributeName: GSI1PK - KeyType: HASH - - AttributeName: GSI1SK - KeyType: RANGE - Projection: - ProjectionType: ALL - - SharedLayer: - Type: AWS::Serverless::LayerVersion - Metadata: - BuildMethod: nodejs14.x - BuildArchitecture: arm64 - Properties: - ContentUri: layers/ - CompatibleRuntimes: - - nodejs14.x - - ParsePostFunction: - Type: AWS::Serverless::Function - Properties: - CodeUri: functions/parse-post - Policies: - - AWSLambdaBasicExecutionRole - Environment: - Variables: - BLOG_BASE_URL: !Ref BlogBaseUrl - HASHNODE_PUBLICATION_ID: !Ref HashnodePublicationId - DEV_ORG_ID: !Ref DevOrganizationId - - SendApiRequestFunction: - Type: AWS::Serverless::Function - Properties: - CodeUri: functions/send-api-request - Policies: - - AWSLambdaBasicExecutionRole - - Version: 2012-10-17 - Statement: - - Effect: Allow - Action: - - secretsmanager:GetSecretValue - Resource: !Ref AuthTokensSecret - Environment: - Variables: - SECRET_ID: !Ref AuthTokensSecret - - AuthTokensSecret: - Type: AWS::SecretsManager::Secret - Properties: - SecretString: - Fn::Sub: - - |- - { - "medium": "${MediumApiKey}", - "dev": "${DevApiKey}", - "hashnode": "${HashnodeApiKey}", - "github": "${GitHubPAT}", - "sendgrid":"${SengridApiKey}" - } - - MediumApiKey: !Ref MediumApiKey - DevApiKey: !Ref DevApiKey - HashnodeApiKey: !Ref HashnodeApiKey - GitHubPAT: !Ref GitHubPAT - SengridApiKey: !Ref SendgridApiKey - - LoadCrossPostsFunction: - Type: AWS::Serverless::Function - Properties: - CodeUri: functions/load-cross-posts - Policies: - - AWSLambdaBasicExecutionRole - - Version: 2012-10-17 - Statement: - - Effect: Allow - Action: - - dynamodb:PutItem - Resource: !GetAtt BlogTable.Arn - Environment: - Variables: - TABLE_NAME: !Ref TableName - - IdentifyNewArticlesFunction: - Type: AWS::Serverless::Function - Properties: - CodeUri: functions/identify-new-content - Policies: - - AWSLambdaBasicExecutionRole - - Version: 2012-10-17 - Statement: - - Effect: Allow - Action: - - secretsmanager:GetSecretValue - Resource: !Ref AuthTokensSecret - - Effect: Allow - Action: - - states:StartExecution - Resource: - - !Ref CrossPostStateMachine - Environment: - Variables: - SECRET_ID: !Ref AuthTokensSecret - OWNER: !Ref GitHubOwner - REPO: !Ref GitHubRepo - COMMIT_TIME_TOLERANCE_MINUTES: 10 - STATE_MACHINE_ARN: !Ref CrossPostStateMachine - PATH: !Ref BlogContentPath - NEW_CONTENT_INDICATOR: "[blog]" - SEND_STATUS_EMAIL: !If [ShouldSendStatusEmail, 'true', 'false'] - Events: - AmplifyBuildSuccessful: - Type: EventBridgeRule - Properties: - Pattern: - source: - - aws.amplify - detail-type: - - Amplify Deployment Status Change - detail: - appId: - - !Ref AmplifyProjectId - jobStatus: - - SUCCEED - - CrossPostStateMachine: - Type: AWS::Serverless::StateMachine - Properties: - Type: STANDARD - DefinitionUri: workflows/cross-post.asl.json - DefinitionSubstitutions: - DynamodbGetItem: !Sub arn:${AWS::Partition}:states:::dynamodb:getItem - TableName: !Ref TableName - DynamodbPutItem: !Sub arn:${AWS::Partition}:states:::dynamodb:putItem - DynamodbQuery: !Sub arn:${AWS::Partition}:states:::aws-sdk:dynamodb:query - IndexName: !Ref GSI1 - DynamodbUpdateItem: !Sub arn:${AWS::Partition}:states:::dynamodb:updateItem - LambdaInvoke: !Sub arn:${AWS::Partition}:states:::lambda:invoke - ParsePostFunction: !GetAtt ParsePostFunction.Arn - SendApiRequestFunction: !GetAtt SendApiRequestFunction.Arn - AdminEmail: !Ref NotificationEmail - HashnodeBlogUrl: !Ref HashnodeBlogUrl - EventBridgePutEvents: !Sub arn:${AWS::Partition}:states:::events:putEvents - ExecutionUrl: !Sub https://${AWS::Region}.console.${AWS::Partition}.amazon.com/states/home?region=${AWS::Region}#/v2/executions/details - MediumUrl: !If [ PostToMediumPublication, !Sub 'https://api.medium.com/v1/publications/${MediumPublicationId}/posts', !Sub 'https://api.medium.com/v1/users/${MediumAuthorId}/posts' ] - Policies: - - Version: 2012-10-17 - Statement: - - Effect: Allow - Action: - - dynamodb:getItem - - dynamodb:putItem - - dynamodb:updateItem - Resource: - - !Sub arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${TableName} - - Effect: Allow - Action: - - dynamodb:query - Resource: - - !Sub arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${TableName}/index/${GSI1} - - Effect: Allow - Action: - - lambda:InvokeFunction - Resource: - - !GetAtt ParsePostFunction.Arn - - !GetAtt SendApiRequestFunction.Arn - - Effect: Allow - Action: - - events:PutEvents - Resource: - - !Sub arn:${AWS::Partition}:events:${AWS::Region}:${AWS::AccountId}:event-bus/default - - SendEmailFunction: - Type: AWS::Serverless::Function - Properties: - CodeUri: functions/send-email-sendgrid - Policies: - - AWSLambdaBasicExecutionRole - - Version: 2012-10-17 - Statement: - - Effect: Allow - Action: - - secretsmanager:GetSecretValue - Resource: !Ref AuthTokensSecret - Environment: - Variables: - SECRET_ID: !Ref AuthTokensSecret - FROM_EMAIL: !Ref SendgridFromEmail - Events: - SendMailEvent: - Type: EventBridgeRule - Properties: - Pattern: - detail-type: - - Send Email \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index fc44377..c1fe9d5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,6 +5,7 @@ "lib": [ "es2020" ], + "esModuleInterop": true, "declaration": true, "strict": true, "noImplicitAny": true, diff --git a/workflows/cross-post.asl.json b/workflows/cross-post.asl.json deleted file mode 100644 index 3fab744..0000000 --- a/workflows/cross-post.asl.json +++ /dev/null @@ -1,953 +0,0 @@ -{ - "Comment": "Cross-post a blog on dev.to, medium, and hashnode", - "StartAt": "Get Existing Article", - "States": { - "Get Existing Article": { - "Type": "Task", - "Resource": "${DynamodbGetItem}", - "Parameters": { - "TableName": "${TableName}", - "Key": { - "pk": { - "S.$": "States.Format('{}#{}', $.commit, $.fileName)" - }, - "sk": { - "S": "article" - } - } - }, - "Next": "Has Article Been Processed?", - "ResultPath": "$.existingArticle" - }, - "Has Article Been Processed?": { - "Type": "Choice", - "Choices": [ - { - "Not": { - "Variable": "$.existingArticle.Item", - "IsPresent": true - }, - "Next": "Set Article Record To In Progress" - }, - { - "And": [ - { - "Variable": "$.existingArticle.Item", - "IsPresent": true - }, - { - "Variable": "$.existingArticle.Item.status.S", - "StringEquals": "failed" - } - ], - "Next": "Set Article Record To In Progress" - } - ], - "Default": "Success - Duplicate Request" - }, - "Set Article Record To In Progress": { - "Type": "Task", - "Resource": "${DynamodbUpdateItem}", - "Parameters": { - "TableName": "${TableName}", - "Key": { - "pk": { - "S.$": "States.Format('{}#{}', $.commit, $.fileName)" - }, - "sk": { - "S": "article" - } - }, - "UpdateExpression": "SET #status = :status", - "ExpressionAttributeNames": { - "#status": "status" - }, - "ExpressionAttributeValues": { - ":status": { - "S": "in progress" - } - } - }, - "Next": "Load Article Catalog", - "ResultPath": null - }, - "Load Article Catalog": { - "Type": "Task", - "Next": "Transform and Publish", - "Parameters": { - "TableName": "${TableName}", - "IndexName": "${IndexName}", - "KeyConditionExpression": "#GSI1PK = :GSI1PK", - "ExpressionAttributeNames": { - "#GSI1PK": "GSI1PK" - }, - "ExpressionAttributeValues": { - ":GSI1PK": { - "S": "article" - } - } - }, - "Resource": "${DynamodbQuery}", - "ResultPath": "$.catalog", - "Catch": [ - { - "ErrorEquals": [ - "States.ALL" - ], - "Next": "Update Article Record (Failure)" - } - ] - }, - "Update Article Record (Failure)": { - "Type": "Task", - "Resource": "${DynamodbUpdateItem}", - "Parameters": { - "TableName": "${TableName}", - "Key": { - "pk": { - "S.$": "States.Format('{}#{}', $$.Execution.Input.commit, $$.Execution.Input.fileName)" - }, - "sk": { - "S": "article" - } - }, - "UpdateExpression": "SET #status = :status", - "ExpressionAttributeNames": { - "#status": "status" - }, - "ExpressionAttributeValues": { - ":status": { - "S": "failed" - } - } - }, - "End": true, - "ResultPath": null - }, - "Transform and Publish": { - "Type": "Parallel", - "Branches": [ - { - "StartAt": "Skip Publish to Dev?", - "States": { - "Skip Publish to Dev?": { - "Type": "Choice", - "Choices": [ - { - "And": [ - { - "Variable": "$.existingArticle.Item.dev.M.status.S", - "IsPresent": true - }, - { - "Variable": "$.existingArticle.Item.dev.M.status.S", - "StringEquals": "succeeded" - } - ], - "Next": "Format Skipped Output - Dev" - } - ], - "Default": "Transform For Dev" - }, - "Format Skipped Output - Dev": { - "Type": "Pass", - "Parameters": { - "url.$": "$.existingArticle.Item.url.S", - "devUrl.$": "$.existingArticle.Item.dev.M.devUrl.S", - "success": true - }, - "End": true - }, - "Transform For Dev": { - "Type": "Task", - "Resource": "${LambdaInvoke}", - "OutputPath": "$.Payload", - "Parameters": { - "FunctionName": "${ParsePostFunction}", - "Payload": { - "post.$": "$.content", - "articleCatalog.$": "$.catalog.Items", - "format": "dev" - } - }, - "Retry": [ - { - "ErrorEquals": [ - "Lambda.ServiceException", - "Lambda.AWSLambdaException", - "Lambda.SdkClientException", - "Lambda.TooManyRequestsException" - ], - "IntervalSeconds": 2, - "MaxAttempts": 6, - "BackoffRate": 2 - } - ], - "Next": "Publish to Dev", - "Catch": [ - { - "ErrorEquals": [ - "States.ALL" - ], - "Next": "Update Article Record (Failure-Dev)" - } - ] - }, - "Update Article Record (Failure-Dev)": { - "Type": "Task", - "Resource": "${DynamodbUpdateItem}", - "Parameters": { - "TableName": "${TableName}", - "Key": { - "pk": { - "S.$": "States.Format('{}#{}', $$.Execution.Input.commit, $$.Execution.Input.fileName)" - }, - "sk": { - "S": "article" - } - }, - "UpdateExpression": "SET #dev = :dev", - "ExpressionAttributeNames": { - "#dev": "dev" - }, - "ExpressionAttributeValues": { - ":dev": { - "M": { - "status": { - "S": "failed" - } - } - } - } - }, - "ResultPath": null, - "Next": "Format Failed Output - Dev" - }, - "Format Failed Output - Dev": { - "Type": "Pass", - "Parameters": { - "success": false - }, - "End": true - }, - "Publish to Dev": { - "Type": "Task", - "Resource": "${LambdaInvoke}", - "Parameters": { - "FunctionName": "${SendApiRequestFunction}", - "Payload": { - "secretKey": "dev", - "auth": { - "location": "header", - "key": "api-key" - }, - "request": { - "method": "POST", - "headers": { - "accept": "application/vnd.forem.api-v1+json" - }, - "baseUrl": "https://dev.to/api/articles", - "body.$": "$.payload" - } - } - }, - "Retry": [ - { - "ErrorEquals": [ - "Lambda.ServiceException", - "Lambda.AWSLambdaException", - "Lambda.SdkClientException", - "Lambda.TooManyRequestsException" - ], - "IntervalSeconds": 2, - "MaxAttempts": 6, - "BackoffRate": 2 - } - ], - "Catch": [ - { - "ErrorEquals": [ - "States.ALL" - ], - "Next": "Update Article Record (Failure-Dev)" - } - ], - "ResultPath": "$.result", - "Next": "Update Article Record (Success-Dev)" - }, - "Update Article Record (Success-Dev)": { - "Type": "Task", - "Resource": "${DynamodbUpdateItem}", - "Parameters": { - "TableName": "${TableName}", - "Key": { - "pk": { - "S.$": "States.Format('{}#{}', $$.Execution.Input.commit, $$.Execution.Input.fileName)" - }, - "sk": { - "S": "article" - } - }, - "UpdateExpression": "SET #dev = :dev, #url = :url", - "ExpressionAttributeNames": { - "#dev": "dev", - "#url": "url" - }, - "ExpressionAttributeValues": { - ":dev": { - "M": { - "status": { - "S": "succeeded" - }, - "devUrl": { - "S.$": "$.result.Payload.url" - } - } - }, - ":url": { - "S.$": "$.url" - } - } - }, - "ResultPath": null, - "Next": "Format Success Output - Dev" - }, - "Format Success Output - Dev": { - "Type": "Pass", - "Parameters": { - "url.$": "$.url", - "devUrl.$": "$.result.Payload.url", - "success": true - }, - "End": true - } - } - }, - { - "StartAt": "Skip Publish to Medium?", - "States": { - "Skip Publish to Medium?": { - "Type": "Choice", - "Choices": [ - { - "And": [ - { - "Variable": "$.existingArticle.Item.medium.M.status.S", - "IsPresent": true - }, - { - "Variable": "$.existingArticle.Item.medium.M.status.S", - "StringEquals": "succeeded" - } - ], - "Next": "Format Skipped Output - Medium" - } - ], - "Default": "Transform For Medium" - }, - "Format Skipped Output - Medium": { - "Type": "Pass", - "Parameters": { - "url.$": "$.existingArticle.Item.url.S", - "mediumUrl.$": "$.existingArticle.Item.medium.M.mediumUrl.S", - "success": true - }, - "End": true - }, - "Transform For Medium": { - "Type": "Task", - "Resource": "${LambdaInvoke}", - "OutputPath": "$.Payload", - "Parameters": { - "FunctionName": "${ParsePostFunction}", - "Payload": { - "post.$": "$.content", - "articleCatalog.$": "$.catalog.Items", - "format": "medium" - } - }, - "Retry": [ - { - "ErrorEquals": [ - "Lambda.ServiceException", - "Lambda.AWSLambdaException", - "Lambda.SdkClientException", - "Lambda.TooManyRequestsException" - ], - "IntervalSeconds": 2, - "MaxAttempts": 6, - "BackoffRate": 2 - } - ], - "Catch": [ - { - "ErrorEquals": [ - "States.ALL" - ], - "Next": "Update Article Record (Failure-Medium)" - } - ], - "Next": "Publish to Medium" - }, - "Update Article Record (Failure-Medium)": { - "Type": "Task", - "Resource": "${DynamodbUpdateItem}", - "Parameters": { - "TableName": "${TableName}", - "Key": { - "pk": { - "S.$": "States.Format('{}#{}', $$.Execution.Input.commit, $$.Execution.Input.fileName)" - }, - "sk": { - "S": "article" - } - }, - "UpdateExpression": "SET #medium = :medium", - "ExpressionAttributeNames": { - "#medium": "medium" - }, - "ExpressionAttributeValues": { - ":medium": { - "M": { - "status": { - "S": "failed" - } - } - } - } - }, - "ResultPath": null, - "Next": "Format Failed Output - Medium" - }, - "Format Failed Output - Medium": { - "Type": "Pass", - "Parameters": { - "success": false - }, - "End": true - }, - "Publish to Medium": { - "Type": "Task", - "Resource": "${LambdaInvoke}", - "Parameters": { - "FunctionName": "${SendApiRequestFunction}", - "Payload": { - "secretKey": "medium", - "auth": { - "location": "query", - "key": "accessToken" - }, - "request": { - "method": "POST", - "baseUrl": "${MediumUrl}", - "body.$": "$.payload" - } - } - }, - "Retry": [ - { - "ErrorEquals": [ - "Lambda.ServiceException", - "Lambda.AWSLambdaException", - "Lambda.SdkClientException", - "Lambda.TooManyRequestsException" - ], - "IntervalSeconds": 2, - "MaxAttempts": 6, - "BackoffRate": 2 - } - ], - "Catch": [ - { - "ErrorEquals": [ - "States.ALL" - ], - "Next": "Update Article Record (Failure-Medium)" - } - ], - "Next": "Update Article Record (Success-Medium)", - "ResultPath": "$.result" - }, - "Update Article Record (Success-Medium)": { - "Type": "Task", - "Resource": "${DynamodbUpdateItem}", - "Parameters": { - "TableName": "${TableName}", - "Key": { - "pk": { - "S.$": "States.Format('{}#{}', $$.Execution.Input.commit, $$.Execution.Input.fileName)" - }, - "sk": { - "S": "article" - } - }, - "UpdateExpression": "SET #medium = :medium, #url = :url", - "ExpressionAttributeNames": { - "#medium": "medium", - "#url": "url" - }, - "ExpressionAttributeValues": { - ":medium": { - "M": { - "status": { - "S": "succeeded" - }, - "mediumUrl": { - "S.$": "$.result.Payload.data.url" - } - } - }, - ":url": { - "S.$": "$.url" - } - } - }, - "ResultPath": null, - "Next": "Format Success Output - Medium" - }, - "Format Success Output - Medium": { - "Type": "Pass", - "End": true, - "Parameters": { - "mediumUrl.$": "$.result.Payload.data.url", - "url.$": "$.url", - "success": true - } - } - } - }, - { - "StartAt": "Skip Publish to Hashnode?", - "States": { - "Skip Publish to Hashnode?": { - "Type": "Choice", - "Choices": [ - { - "And": [ - { - "Variable": "$.existingArticle.Item.hashnode.M.status.S", - "IsPresent": true - }, - { - "Variable": "$.existingArticle.Item.hashnode.M.status.S", - "StringEquals": "succeeded" - } - ], - "Next": "Format Skipped Output - Hashnode" - } - ], - "Default": "Transform For Hashnode" - }, - "Format Skipped Output - Hashnode": { - "Type": "Pass", - "End": true, - "Parameters": { - "url.$": "$.existingArticle.Item.url.S", - "hashnodeUrl.$": "$.existingArticle.Item.hashnode.M.hashnodeUrl.S", - "success": true - } - }, - "Transform For Hashnode": { - "Type": "Task", - "Resource": "${LambdaInvoke}", - "OutputPath": "$.Payload", - "Parameters": { - "FunctionName": "${ParsePostFunction}", - "Payload": { - "post.$": "$.content", - "articleCatalog.$": "$.catalog.Items", - "format": "hashnode" - } - }, - "Retry": [ - { - "ErrorEquals": [ - "Lambda.ServiceException", - "Lambda.AWSLambdaException", - "Lambda.SdkClientException", - "Lambda.TooManyRequestsException" - ], - "IntervalSeconds": 2, - "MaxAttempts": 6, - "BackoffRate": 2 - } - ], - "Catch": [ - { - "ErrorEquals": [ - "States.ALL" - ], - "Next": "Update Article Record (Failure-Hashnode)" - } - ], - "Next": "Publish to Hashnode" - }, - "Publish to Hashnode": { - "Type": "Task", - "Resource": "${LambdaInvoke}", - "Parameters": { - "FunctionName": "${SendApiRequestFunction}", - "Payload": { - "secretKey": "hashnode", - "auth": { - "location": "header", - "key": "Authorization" - }, - "request": { - "method": "POST", - "headers": { - "content-type": "application/json" - }, - "baseUrl": "https://api.hashnode.com", - "body.$": "$.payload" - } - } - }, - "Retry": [ - { - "ErrorEquals": [ - "Lambda.ServiceException", - "Lambda.AWSLambdaException", - "Lambda.SdkClientException", - "Lambda.TooManyRequestsException" - ], - "IntervalSeconds": 2, - "MaxAttempts": 6, - "BackoffRate": 2 - } - ], - "Catch": [ - { - "ErrorEquals": [ - "States.ALL" - ], - "Next": "Update Article Record (Failure-Hashnode)" - } - ], - "ResultPath": "$.result", - "Next": "Update Article Record (Success-Hashnode)" - }, - "Update Article Record (Success-Hashnode)": { - "Type": "Task", - "Resource": "${DynamodbUpdateItem}", - "Parameters": { - "TableName": "${TableName}", - "Key": { - "pk": { - "S.$": "States.Format('{}#{}', $$.Execution.Input.commit, $$.Execution.Input.fileName)" - }, - "sk": { - "S": "article" - } - }, - "UpdateExpression": "SET #hashnode = :hashnode, #url = :url", - "ExpressionAttributeNames": { - "#hashnode": "hashnode", - "#url": "url" - }, - "ExpressionAttributeValues": { - ":hashnode": { - "M": { - "status": { - "S": "succeeded" - }, - "hashnodeUrl": { - "S.$": "States.Format('${HashnodeBlogUrl}/{}', $.result.Payload.data.createPublicationStory.post.slug)" - } - } - }, - ":url": { - "S.$": "$.url" - } - } - }, - "ResultPath": null, - "Next": "Format Hashnode Data" - }, - "Format Hashnode Data": { - "Type": "Pass", - "End": true, - "Parameters": { - "hashnodeUrl.$": "States.Format('${HashnodeBlogUrl}/{}', $.result.Payload.data.createPublicationStory.post.slug)", - "url.$": "$.url", - "success": true - } - }, - "Update Article Record (Failure-Hashnode)": { - "Type": "Task", - "Resource": "${DynamodbUpdateItem}", - "Parameters": { - "TableName": "${TableName}", - "Key": { - "pk": { - "S.$": "States.Format('{}#{}', $$.Execution.Input.commit, $$.Execution.Input.fileName)" - }, - "sk": { - "S": "article" - } - }, - "UpdateExpression": "SET #hashnode = :hashnode", - "ExpressionAttributeNames": { - "#hashnode": "hashnode" - }, - "ExpressionAttributeValues": { - ":hashnode": { - "M": { - "status": { - "S": "failed" - } - } - } - } - }, - "ResultPath": null, - "Next": "Format Failed Output - Hashnode" - }, - "Format Failed Output - Hashnode": { - "Type": "Pass", - "Parameters": { - "success": false - }, - "End": true - } - } - } - ], - "Next": "Format Failure Check", - "ResultPath": "$.transform" - }, - "Format Failure Check": { - "Type": "Pass", - "Next": "Check For Failures", - "Parameters": { - "results.$": "$.transform", - "failureFormat": { - "success": false - } - } - }, - "Check For Failures": { - "Type": "Pass", - "Next": "Did Failure Occur?", - "Parameters": { - "results.$": "$.results", - "hasFailure.$": "States.ArrayContains($.results, $.failureFormat)" - } - }, - "Did Failure Occur?": { - "Type": "Choice", - "Choices": [ - { - "Variable": "$.hasFailure", - "BooleanEquals": true, - "Next": "Update Article Record (failed)" - } - ], - "Default": "Format Catalog Article" - }, - "Update Article Record (failed)": { - "Type": "Task", - "Resource": "${DynamodbUpdateItem}", - "Parameters": { - "TableName": "${TableName}", - "Key": { - "pk": { - "S.$": "States.Format('{}#{}', $$.Execution.Input.commit, $$.Execution.Input.fileName)" - }, - "sk": { - "S": "article" - } - }, - "UpdateExpression": "SET #status = :status", - "ExpressionAttributeNames": { - "#status": "status" - }, - "ExpressionAttributeValues": { - ":status": { - "S": "failed" - } - } - }, - "ResultPath": null, - "Next": "Should Send Failure Email?" - }, - "Should Send Failure Email?": { - "Type": "Choice", - "Choices": [ - { - "And": [ - { - "Variable": "$$.Execution.Input.sendStatusEmail", - "IsPresent": true - }, - { - "Variable": "$$.Execution.Input.sendStatusEmail", - "BooleanEquals": true - } - ], - "Next": "Send Failure Email" - } - ], - "Default": "Something Went Wrong" - }, - "Something Went Wrong": { - "Type": "Fail", - "Error": "PublishError", - "Cause": "An error occurred publishing to one or more sites" - }, - "Send Failure Email": { - "Type": "Task", - "Resource": "${EventBridgePutEvents}", - "Parameters": { - "Entries": [ - { - "Detail": { - "subject": "Cross Post Failed!", - "to": "${AdminEmail}", - "html.$": "States.Format('<p>Republishing of your new blog post failed :(</p><p>Found file: <i>{}</i></p><p><a href=\"${ExecutionUrl}/{}\">View state machine execution</a></p>', $$.Execution.Input.fileName, $$.Execution.Id)" - }, - "DetailType": "Send Email", - "Source": "user.CrossPostStateMachine" - } - ] - }, - "Next": "Something Went Wrong" - }, - "Format Catalog Article": { - "Type": "Pass", - "Parameters": { - "url.$": "$.results[0].url", - "devUrl.$": "$.results[0].devUrl", - "mediumUrl.$": "$.results[1].mediumUrl", - "hashnodeUrl.$": "$.results[2].hashnodeUrl" - }, - "Next": "Save Records" - }, - "Save Records": { - "Type": "Parallel", - "Next": "Should Send Success Email?", - "Branches": [ - { - "StartAt": "Save Catalog Article", - "States": { - "Save Catalog Article": { - "Type": "Task", - "Resource": "${DynamodbPutItem}", - "Parameters": { - "TableName": "${TableName}", - "Item": { - "pk": { - "S.$": "$.url" - }, - "sk": { - "S": "article" - }, - "GSI1PK": { - "S": "article" - }, - "GSI1SK": { - "S.$": "$$.Execution.Input.fileName" - }, - "links": { - "M": { - "devUrl": { - "S.$": "$.devUrl" - }, - "url": { - "S.$": "$.url" - }, - "mediumUrl": { - "S.$": "$.mediumUrl" - }, - "hashnodeUrl": { - "S.$": "$.hashnodeUrl" - } - } - } - } - }, - "ResultPath": null, - "End": true - } - } - }, - { - "StartAt": "Update Article Record (success)", - "States": { - "Update Article Record (success)": { - "Type": "Task", - "Resource": "${DynamodbUpdateItem}", - "Parameters": { - "TableName": "${TableName}", - "Key": { - "pk": { - "S.$": "States.Format('{}#{}', $$.Execution.Input.commit, $$.Execution.Input.fileName)" - }, - "sk": { - "S": "article" - } - }, - "UpdateExpression": "SET #status = :status", - "ExpressionAttributeNames": { - "#status": "status" - }, - "ExpressionAttributeValues": { - ":status": { - "S": "succeeded" - } - } - }, - "ResultPath": null, - "End": true - } - } - } - ], - "ResultPath": null - }, - "Should Send Success Email?": { - "Type": "Choice", - "Choices": [ - { - "And": [ - { - "Variable": "$$.Execution.Input.sendStatusEmail", - "IsPresent": true - }, - { - "Variable": "$$.Execution.Input.sendStatusEmail", - "BooleanEquals": true - } - ], - "Next": "Send Success Email" - } - ], - "Default": "Success" - }, - "Send Success Email": { - "Type": "Task", - "Resource": "${EventBridgePutEvents}", - "Parameters": { - "Entries": [ - { - "Detail": { - "subject": "Cross Post Successful!", - "to": "${AdminEmail}", - "html.$": "States.Format('<p>Republishing of your new blog post was successful!</p><p>Found file: <i>{}</i></p><p><b>Links</b></p><ul><li><b><a href=\"{}\">Medium</a></b></li><li><b><a href=\"{}\">Dev.to</a></b></li><li><b><a href=\"{}\">Hashnode</a></b></li></ul>', $$.Execution.Input.fileName, $.mediumUrl, $.devUrl, $.hashnodeUrl)" - }, - "DetailType": "Send Email", - "Source": "user.CrossPostStateMachine" - } - ] - }, - "Next": "Success" - }, - "Success": { - "Type": "Succeed" - }, - "Success - Duplicate Request": { - "Type": "Succeed", - "Comment": "This article has already been processed" - } - } -} \ No newline at end of file From 8fc51f90e1c9c1a70e35a4b311a0e8fa1a11998b Mon Sep 17 00:00:00 2001 From: martzcodes <978362+martzcodes@users.noreply.github.com> Date: Sat, 4 Feb 2023 23:16:45 -0500 Subject: [PATCH 04/13] revert readme --- README.md | 200 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 190 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 320efc0..9d72532 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,194 @@ -# Welcome to your CDK TypeScript project +# Blog Crossposting Automation -This is a blank project for CDK development with TypeScript. +Are you a blog writer? Hate cross-posting your content across the web? You're in luck! -The `cdk.json` file tells the CDK Toolkit how to execute your app. +This solution will hook into your blog creation process and automatically cross-post your content for you to Medium, Dev.to, and Hashnode! -## Useful commands +Deploy into your AWS account and type away! -* `npm run build` compile typescript to js -* `npm run watch` watch for changes and compile -* `npm run test` perform the jest unit tests -* `cdk deploy` deploy this stack to your default AWS account/region -* `cdk diff` compare deployed stack with current state -* `cdk synth` emits the synthesized CloudFormation template +For a full summary of this solution [please refer to this blog post](https://www.readysetcloud.io/blog/allen.helton/how-i-built-a-serverless-automation-to-cross-post-my-blogs/) by [Allen Helton](https://twitter.com/allenheltondev). + +## Prerequisites + +For cross-posts to work successfully, there are a few prereqs that must be met in your setup. + +* Your blog post must be written in [markdown](https://en.wikipedia.org/wiki/Markdown). +* Content is checked into a repository in GitHub +* You have an application in [AWS Amplify](https://aws.amazon.com/amplify/) that has a runnable CI pipeline +* Blog posts have front matter in the format outlined in the [Blog Metadata](#blog-metadata) section + +*Note - it is highly recommended you host your blog on your own site. This guarantees you own your content and prevents accidental loss if your favorite platform goes down or has an incident. It also enables [easy canonification](https://support.google.com/webmasters/answer/10347851) of your content when it is cross posted so it ranks higher in search engine results. For a step by step guide on hosting your own blog for free, please [reference this post](https://www.readysetcloud.io/blog/allen.helton/how-to-build-your-blog-with-aws-and-hugo/).* + +## How It Works + +![](/docs/workflow.png) + +The cross posting process is outlined below. + +1. Completed blog post written in markdown is committed to main branch +2. AWS Amplify CI pipeline picks up changes and runs build +3. On success, Amplify publishes a `Amplify Deployment Status Change` event to EventBridge, triggering a Lambda function deployed in this stack +4. The function uses your GitHub PAT to identify and load the blog post content and pass it into a Step Function workflow +5. The workflow will do an idempotency check, and if it's ok to continue will transform and publish to Medium, Hashnode, and Dev.to in parallel +6. After publish is complete, the workflow checks if there were any failures. + * If there was a failure, it sends an email with a link to the execution for debugging + * On success, it sends an email with links to the published content and updates the idempotency record and article catalog + +*Note - If you do not provide a SendGrid API key, you will not receive email status updates* + +## Platforms + +This solution will take content you create and automatically cross-post it on three platforms: + +* [Medium](https://medium.com) - *[generate API Key](https://help.medium.com/hc/en-us/articles/213480228-Get-an-integration-token-for-your-writing-app)* +* [Dev.to](https://dev.to) - *[generate API Key](https://dev.to/settings/extensions)* +* [Hashnode](https://hashnode.com) - *[generate API Key](https://hashnode.com/settings/developer)* + +You are required to have an account on all three platforms and must generate an API key for each of them. + +Optionally, you can publish straight to publications on each of the platforms. If there is a specific organization on Dev.to or publication on Medium or Hashnode you typically write for, you can fill out `DevOrganizationId`, `MediumPublicationId`, and `HashnodePublicationId` deployment variables respectively. For example, you could automatically submit your story to the [AWS Community Builders](https://dev.to/aws-builders) organization on dev.to instead of under your name. + +## Deployment + +The solution is built using AWS SAM. To deploy the resources into the cloud you must install the [SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html). + +Once installed, run the following commands in the root folder of the solution. + +```bash +sam build --parallel +sam deploy --guided +``` + +This will walk you through deployment, prompting you for all the parameters necessary for proper use. Below are the parameters you must fill out on deploy. + +|Parameter|Description|Required| +|---------|-----------|--------| +|TableName|Name of the DynamoDB table to create|No| +|GSI1|Name of the GSI on the DDB table|No| +|GitHubPAT|Personal Access Token to load newsletter content from your repository|Yes| +|GitHubOwner|The GitHub user name that owns the repository for your content|Yes| +|GitHubRepo|The repository name that contains your content|Yes| +|AmplifyProjectId|Identifier of the Amplify project that builds your newsletter|Yes| +|MediumApiKey|API key used to manipulate data in your Medium account|Yes| +|MediumPublicationId|Identifier of the publication you wish to submit to on Medium|No| +|MediumAuthorId|Identifier of your user on Medium|Yes if `MediumPublicationId` is not provided| +|DevApiKey|API key used to manipulate data in your Dev.to account|Yes| +|DevOrganizationId|Identifier of the organization you wish to submit to on Dev.to|No| +|HashnodeApiKey|API key used to manipulate data in your Hashnode account|Yes| +|HashnodePublicationId|Identifier for your blog publication on Hashnode|Yes| +|HashnodeBlogUrl|Base url of your blog hosted in Hashnode|Yes| +|BlogBaseUrl|Vase url of your blog on your personal site|Yes| +|BlogContentPath|Relative path from the root directory to the blog content folder in your GitHub repo|Yes| +|SendgridApiKey|Api Key of the SendGrid account that will send the status report when cross-posting is complete|No| +|NotificationEmail|Email address to notify when cross posting is complete|No| +|SendgridFromEmail|Email address for SendGrid that sends you the status email|No| + +## Notification Emails + +If you wish to get notification emails on the status of the cross posting, you must use [SendGrid](https://sendgrid.com). SendGrid offers a generous free tier for email messages and is quick to get started. To configure SendGrid to send you emails you must: + +* [Create an API key](https://docs.sendgrid.com/ui/account-and-settings/api-keys) +* [Create a sender](https://docs.sendgrid.com/ui/sending-email/senders) + +Once you perform the above actions, you may use the values in the respective deployment variables listed above. + +## Replay / Idempotency + +In the event the cross-posting does not work, it can be safely retried without worrying about pushing your content multiple times. Each post will update the idempotency DynamoDB record for the cross-posting state machine. This record holds the status (*success/failure*) for each platform. If the article was successfully posted on a platform, it will be skipped on subsequent executions. + +## Blog Metadata + +Your blog must be written in Markdown for this solution to work appropriately. To save metadata about your post, you can add [front matter](https://gohugo.io/content-management/front-matter/) at the beginning of the file. This solution requires a specific set of metadata in order to function appropriately. + +**Example** +```yaml +--- +title: My first blog! +description: This is the subtitle that is used for SEO and visible in Medium and Hashnode posts. +image: https://link-to-hero-image.png +image_attribution: Any attribution required for hero image +categories: + - categoryOne +tags: + - serverless + - other tag +slug: /my-first-blog +--- +``` + +|Field|Description|Required?| +|-----|-----------|---------| +|title|Title of the blog issue |Yes| +|description| Brief summary of article. This shows up on Hashnode and Medium and is used in SEO previews|Yes| +|image|Link to the hero image for your article|Yes| +|image_attribution|Any attribution text needed for your hero image|No| +|categories|Array of categories. This will be used as tags for Dev and Medium|No| +|tags|Array of tags. Also used as tags for Dev and Medium|No| +|slug|Relative url of your post. Used in the article catalog|Yes| + +## Article Catalog + +One of the neat features provided by this solution is substituting relative urls for the appropriate urls on a given page. For example, if you use a relative url to link to another blog post you've written on your site, this solution will replace that with the cross-posted version. So Medium articles will always point to Medium articles, Hashnode articles will always point to Hashnode, etc... + +This is managed for you by the solution. It creates entries for your content in DynamoDB with the following format: + +```json +{ + "pk": "<article slug>", + "sk": "article", + "GSI1PK": "article", + "GSI1SK": "<title of the post>", + "links": { + "url": "<article slug>", + "devUrl": "<full path to article on dev.to>", + "mediumUrl": "<full path to article on Medium>", + "hashnodeUrl": "<full path to article on Hashnode>" + } +} +``` + +When transforming your Markdown content, it will load all articles from DynamoDB, use a Regex to match on the article slug in your content, and replace with the url of appropriate site. + +If you already have a number of articles and wish to seed the database with the cross references, you will have to compile the data manually and put it in the following format: + +```json +[ + { + "title": "<title of article>", + "devUrl": "<url of article on dev.to>", + "url": "<relative url of article on your blog>", + "mediumUrl": "<url of article on medium>", + "hashnodeUrl": "<url of article on hashnode>" + } +] +``` + +Take this data and update the [load-cross-posts](/functions/load-cross-posts/index.js) function to load and handle that data. Run the function manually to seed the data in your database table. + +## Embeds + +If you are embedding content in your posts, they might not work out of the box. *There is only support for Hugo twitter embeds.* The format of a Hugo Twitter embed is: + +``` +{{<tweet user="" id="">}} +``` + +If you include this in your content, it will be automatically transformed to the appropriate embed style on the appropriate platform. + +## Limitations + +Below are a list of known limitations: + +* Your content must be written in Markdown with front matter describing the blog post. +* Content must be hosted in GitHub. +* You are required to post to Dev.to, Medium, and Hashnode. You cannot pick and choose which platforms you want to use. +* Only Hugo style Twitter embeds are supported. Embeds for other content will not work. +* This process is triggered on a successful build of an AWS Amplify project. Other triggers are not supported (but can easily be modified to add them). +* Notifications are limited to sending emails in SendGrid. +* The only way to deploy the solution is with AWS SAM. + +## Contributions + +Please feel free to contribute to this project! Bonus points if you can meaningfully address any of the limitations listed above :) + +This is an AWS Community Builders project and is meant to help the community. If you see fit, please donate some time into making it better! From a710c778d4aae57adda4f8b8c579c70d3137cf5a Mon Sep 17 00:00:00 2001 From: martzcodes <978362+martzcodes@users.noreply.github.com> Date: Sat, 4 Feb 2023 23:28:11 -0500 Subject: [PATCH 05/13] add a dryrun option --- functions/send-api-request.ts | 17 +++++++++++++++-- lib/blog-crossposting-automation-stack.ts | 3 +++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/functions/send-api-request.ts b/functions/send-api-request.ts index b518aca..0516ac3 100644 --- a/functions/send-api-request.ts +++ b/functions/send-api-request.ts @@ -8,8 +8,21 @@ export const handler = async (state: { secretKey: any; request: { method: any; b } const config = getAxiosConfig(state, authToken); - const response = await axios.request(config); - return response.data; + if (process.env.DRY_RUN === '1') { + return { + url: 'someUrl', + data: { + createPublicationStory: { + post: { + slug: 'someSlug' + } + } + } + }; + } else { + const response = await axios.request(config); + return response.data; + } }; const getAxiosConfig = (state: { request: { method: any; baseUrl: any; headers: any; body: any; query: { [s: string]: unknown; } | ArrayLike<unknown>; }; auth: { prefix: any; location: string; key: string | number; }; }, authToken: string) => { diff --git a/lib/blog-crossposting-automation-stack.ts b/lib/blog-crossposting-automation-stack.ts index 5055c1e..b20f695 100644 --- a/lib/blog-crossposting-automation-stack.ts +++ b/lib/blog-crossposting-automation-stack.ts @@ -21,6 +21,7 @@ export interface BlogCrosspostingAutomationStackProps extends StackProps { devTo?: { devOrganizationId: string; }; + dryRun?: boolean; email?: { adminEmail: string; sendgridFromEmail: string; @@ -52,6 +53,7 @@ export class BlogCrosspostingAutomationStack extends Stack { blogBaseUrl, commitTimeToleranceMinutes, devTo, + dryRun, email, github, hashnode, @@ -106,6 +108,7 @@ export class BlogCrosspostingAutomationStack extends Stack { ...lambdaProps, entry: join(__dirname, `../functions/send-api-request.ts`), }); + sendApiRequestFn.addEnvironment("DRY_RUN", dryRun ? '1' : '0'); secret.grantRead(sendApiRequestFn); const loadCrossPostsFn = new NodejsFunction(this, `LoadCrossPostsFn`, { From 5331db5e81f75ba314be482b6d2910648c04b586 Mon Sep 17 00:00:00 2001 From: martzcodes <978362+martzcodes@users.noreply.github.com> Date: Thu, 16 Feb 2023 01:04:15 -0500 Subject: [PATCH 06/13] fix step function, need to upload images to s3 and handle non-amplify canonical urls --- .gitignore | 3 +- config/default.json | 5 +- functions/identify-new-content.ts | 22 +++- lib/blog-crossposting-automation-stack.ts | 148 +++++++++++++--------- lib/step-function-branch.ts | 2 + lib/step-function.ts | 46 +++++-- package-lock.json | 14 +- package.json | 2 +- 8 files changed, 151 insertions(+), 91 deletions(-) diff --git a/.gitignore b/.gitignore index 26ab5af..408fb1a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ node_modules/ .aws-sam/ samconfig.toml -local.json \ No newline at end of file +local.json +cdk.out \ No newline at end of file diff --git a/config/default.json b/config/default.json index 7e6753f..9a83749 100644 --- a/config/default.json +++ b/config/default.json @@ -1,9 +1,10 @@ { "cdk": { "amplify": { - "amplifyProjectId": "" + "amplifyProjectId": "", + "blogBaseUrl": "" }, - "blogBaseUrl": "", + "canonical": "amplify", "commitTimeToleranceMinutes": 0, "devTo": { "devOrganizationId": "" diff --git a/functions/identify-new-content.ts b/functions/identify-new-content.ts index 7959333..de5ba83 100644 --- a/functions/identify-new-content.ts +++ b/functions/identify-new-content.ts @@ -9,7 +9,7 @@ const eb = new EventBridgeClient({}); let octokit: Octokit; -export const handler = async () => { +export const handler = async (event: any) => { try { await initializeOctokit(); @@ -41,14 +41,16 @@ const getRecentCommits = async () => { const result = await octokit.rest.repos.listCommits({ owner: `${process.env.OWNER}`, repo: `${process.env.REPO}`, - path: process.env.PATH, + ...(process.env.BLOG_PATH && process.env.BLOG_PATH !== "/" + ? { path: `${process.env.BLOG_PATH}` } + : {}), since: date.toISOString(), }); const newPostCommits = result.data.filter((c) => c.commit.message .toLowerCase() - .startsWith(`${process.env.NEW_CONTENT_INDICATOR || '[blog]'}`) + .startsWith(`${process.env.NEW_CONTENT_INDICATOR || "[blog]"}`) ); return newPostCommits.map((d) => d.sha); }; @@ -62,9 +64,10 @@ const getNewContent = async (commits: string[]) => { ref: commits[j], }); + const blogPath = process.env.BLOG_PATH && process.env.BLOG_PATH !== "/"; const newFiles = commitDetail.data.files?.filter( (f) => - f.status == "added" && f.filename.startsWith(`${process.env.PATH}/`) + f.status == "added" && (!blogPath || f.filename.startsWith(`${process.env.BLOG_PATH}/`)) ); newContent.push( ...(newFiles?.map((p) => { @@ -113,6 +116,17 @@ const getContentData = async ( return contentData; }; +const saveImagesToS3 = async ( + newContent: { + fileName: string; + commit: string; + content: string; + sendStatusEmail: boolean; + }[] +) => { + // TODO: regex for images stored in github and fetch them / store them in a public s3 bucket +} + const processNewContent = async ( newContent: { fileName: string; diff --git a/lib/blog-crossposting-automation-stack.ts b/lib/blog-crossposting-automation-stack.ts index b20f695..af9f61f 100644 --- a/lib/blog-crossposting-automation-stack.ts +++ b/lib/blog-crossposting-automation-stack.ts @@ -1,22 +1,27 @@ -import { StackProps, Stack, CfnOutput } from "aws-cdk-lib"; +import { StackProps, Stack, CfnOutput, Duration } from "aws-cdk-lib"; import { EventBus, Rule } from "aws-cdk-lib/aws-events"; import { LambdaFunction, SfnStateMachine, } from "aws-cdk-lib/aws-events-targets"; -import { FunctionUrlAuthType, Runtime } from "aws-cdk-lib/aws-lambda"; +import { Architecture, FunctionUrlAuthType, Runtime } from "aws-cdk-lib/aws-lambda"; import { NodejsFunction } from "aws-cdk-lib/aws-lambda-nodejs"; import { Secret } from "aws-cdk-lib/aws-secretsmanager"; import { Construct } from "constructs"; import { join } from "path"; import { DynamoDb } from "./dyanmo"; -import { CrossPostStepFunction } from "./step-function"; +import { + CrossPostStepFunction, + CrossPostStepFunctionProps, +} from "./step-function"; export interface BlogCrosspostingAutomationStackProps extends StackProps { amplify?: { amplifyProjectId: string; + blogBaseUrl: string; }; - blogBaseUrl: string; + // TODO: properly handle canonical urls for non-amplify blogs + canonical: "dev" | "medium" | "hashnode" | "amplify"; commitTimeToleranceMinutes?: number; devTo?: { devOrganizationId: string; @@ -32,7 +37,7 @@ export interface BlogCrosspostingAutomationStackProps extends StackProps { path: string; }; hashnode?: { - hashnodePublicationId: string; + hashnodePublicationId?: string; hashnodeBlogUrl: string; }; medium?: { @@ -40,6 +45,7 @@ export interface BlogCrosspostingAutomationStackProps extends StackProps { mediumAuthorId?: string; }; newContentIndicator?: string; + secretName?: string; } export class BlogCrosspostingAutomationStack extends Stack { constructor( @@ -50,7 +56,7 @@ export class BlogCrosspostingAutomationStack extends Stack { super(scope, id, props); const { amplify, - blogBaseUrl, + canonical, commitTimeToleranceMinutes, devTo, dryRun, @@ -59,6 +65,7 @@ export class BlogCrosspostingAutomationStack extends Stack { hashnode, medium, newContentIndicator, + secretName = `CrosspostSecrets`, } = props; const { table } = new DynamoDb(this, `CrosspostTable`); @@ -68,10 +75,13 @@ export class BlogCrosspostingAutomationStack extends Stack { const secret = Secret.fromSecretNameV2( this, `CrosspostSecrets`, - `CrosspostSecrets` + secretName ); const lambdaProps = { + architecture: Architecture.ARM_64, + memory: 1024, + timeout: Duration.minutes(5), runtime: Runtime.NODEJS_18_X, environment: { TABLE_NAME: table.tableName, @@ -79,38 +89,74 @@ export class BlogCrosspostingAutomationStack extends Stack { }, }; - let parseDevFn, parseHashnodeFn, parseMediumFn; - if (devTo) { - parseDevFn = new NodejsFunction(this, `ParseDevToFn`, { + const sendApiRequestFn = new NodejsFunction(this, `SendApiRequestFn`, { + ...lambdaProps, + entry: join(__dirname, `../functions/send-api-request.ts`), + }); + sendApiRequestFn.addEnvironment("DRY_RUN", dryRun ? "1" : "0"); + secret.grantRead(sendApiRequestFn); + + const crossPostStepFunctionProps: CrossPostStepFunctionProps = { + ...(email?.adminEmail + ? { + adminEmail: email.adminEmail, + } + : {}), + eventBus, + sendApiRequestFn, + table, + }; + if (devTo?.devOrganizationId) { + const parseDevFn = new NodejsFunction(this, `ParseDevToFn`, { ...lambdaProps, entry: join(__dirname, `../functions/parse-dev-post.ts`), }); - parseDevFn.addEnvironment("BLOG_BASE_URL", blogBaseUrl); + parseDevFn.addEnvironment("CANONICAL", canonical); parseDevFn.addEnvironment("DEV_ORG_ID", devTo.devOrganizationId); + if (amplify) { + parseDevFn.addEnvironment("BLOG_BASE_URL", amplify.blogBaseUrl); + } + crossPostStepFunctionProps.devTo = { + fn: parseDevFn!, + }; } - if (hashnode) { - parseHashnodeFn = new NodejsFunction(this, `ParseHashnodeFn`, { + if (hashnode?.hashnodeBlogUrl) { + const parseHashnodeFn = new NodejsFunction(this, `ParseHashnodeFn`, { ...lambdaProps, entry: join(__dirname, `../functions/parse-hashnode-post.ts`), }); - parseHashnodeFn.addEnvironment("BLOG_BASE_URL", blogBaseUrl); - parseHashnodeFn.addEnvironment("HASHNODE_PUBLICATION_ID", hashnode.hashnodePublicationId); + parseHashnodeFn.addEnvironment("CANONICAL", canonical); + if (amplify) { + parseHashnodeFn.addEnvironment("BLOG_BASE_URL", amplify.blogBaseUrl); + } + if (hashnode.hashnodePublicationId) { + parseHashnodeFn.addEnvironment( + "HASHNODE_PUBLICATION_ID", + hashnode.hashnodePublicationId + ); + } + crossPostStepFunctionProps.hashnode = { + fn: parseHashnodeFn!, + url: hashnode.hashnodeBlogUrl, + }; } - if (medium) { - parseMediumFn = new NodejsFunction(this, `ParseMediumFn`, { + if (medium?.mediumAuthorId || medium?.mediumPublicationId) { + const parseMediumFn = new NodejsFunction(this, `ParseMediumFn`, { ...lambdaProps, entry: join(__dirname, `../functions/parse-medium-post.ts`), }); - parseMediumFn.addEnvironment("BLOG_BASE_URL", blogBaseUrl); + parseMediumFn.addEnvironment("CANONICAL", canonical); + if (amplify) { + parseMediumFn.addEnvironment("BLOG_BASE_URL", amplify.blogBaseUrl); + } + crossPostStepFunctionProps.medium = { + fn: parseMediumFn!, + url: medium.mediumPublicationId + ? `https://api.medium.com/v1/publications/${medium.mediumPublicationId}/posts` + : `https://api.medium.com/v1/users/${medium.mediumAuthorId}/posts`, + }; } - const sendApiRequestFn = new NodejsFunction(this, `SendApiRequestFn`, { - ...lambdaProps, - entry: join(__dirname, `../functions/send-api-request.ts`), - }); - sendApiRequestFn.addEnvironment("DRY_RUN", dryRun ? '1' : '0'); - secret.grantRead(sendApiRequestFn); - const loadCrossPostsFn = new NodejsFunction(this, `LoadCrossPostsFn`, { ...lambdaProps, entry: join(__dirname, `../functions/load-cross-posts.ts`), @@ -127,25 +173,31 @@ export class BlogCrosspostingAutomationStack extends Stack { ); identifyNewContentFn.addEnvironment("OWNER", github.owner); identifyNewContentFn.addEnvironment("REPO", github.repo); - identifyNewContentFn.addEnvironment("PATH", github.path); + identifyNewContentFn.addEnvironment("BLOG_PATH", github.path); if (commitTimeToleranceMinutes) { - identifyNewContentFn.addEnvironment("COMMIT_TIME_TOLERANCE_MINUTES", `${commitTimeToleranceMinutes}`); + identifyNewContentFn.addEnvironment( + "COMMIT_TIME_TOLERANCE_MINUTES", + `${commitTimeToleranceMinutes}` + ); } if (newContentIndicator) { - identifyNewContentFn.addEnvironment("NEW_CONTENT_INDICATOR", newContentIndicator); + identifyNewContentFn.addEnvironment( + "NEW_CONTENT_INDICATOR", + newContentIndicator + ); } secret.grantRead(identifyNewContentFn); eventBus.grantPutEventsTo(identifyNewContentFn); - if (amplify) { + if (amplify?.amplifyProjectId) { new Rule(this, `NewArticlesRule`, { eventBus, eventPattern: { source: ["aws.amplify"], detailType: ["Amplify Deployment Status Change"], detail: { - appId: amplify.amplifyProjectId, - jobStatus: "SUCCEED", + appId: [amplify.amplifyProjectId], + jobStatus: ["SUCCEED"], }, }, targets: [new LambdaFunction(identifyNewContentFn)], @@ -160,7 +212,7 @@ export class BlogCrosspostingAutomationStack extends Stack { new CfnOutput(this, `GithubWebhook`, { value: fnUrl.url }); } - if (email) { + if (email?.sendgridFromEmail) { const sendEmailFn = new NodejsFunction(this, `SendEmailFn`, { ...lambdaProps, entry: join(__dirname, `../functions/send-email-sendgrid.ts`), @@ -175,37 +227,7 @@ export class BlogCrosspostingAutomationStack extends Stack { }); } - const { stateMachine } = new CrossPostStepFunction( - this, - `CrossPostStepFn`, - { - ...(email - ? { - adminEmail: email.adminEmail, - } - : {}), - ...(devTo - ? { - fn: parseDevFn, - } - : {}), - ...(hashnode - ? { - fn: parseHashnodeFn, - url: hashnode.hashnodeBlogUrl, - } - : {}), - ...(medium - ? { - fn: parseMediumFn, - url: medium.mediumPublicationId ? `https://api.medium.com/v1/publications/${medium.mediumPublicationId}/posts` : `https://api.medium.com/v1/users/${medium.mediumAuthorId}/posts`, - } - : {}), - eventBus, - sendApiRequestFn, - table, - } - ); + const { stateMachine } = new CrossPostStepFunction(this, `CrossPostStepFn`, crossPostStepFunctionProps); table.grantReadWriteData(stateMachine); eventBus.grantPutEventsTo(stateMachine); diff --git a/lib/step-function-branch.ts b/lib/step-function-branch.ts index e3fda3f..3168cb4 100644 --- a/lib/step-function-branch.ts +++ b/lib/step-function-branch.ts @@ -67,6 +67,7 @@ export class StepFunctionBranch extends StateMachineFragment { }), retryOnServiceExceptions: true, }); + skipPublish.otherwise(transform); const updateArticleRecordFailure = new DynamoUpdateItem( this, `UpdateArticleRecordFailure`, @@ -104,6 +105,7 @@ export class StepFunctionBranch extends StateMachineFragment { payload: publishPayload, retryOnServiceExceptions: true, }); + transform.next(publish); publish.addCatch(updateArticleRecordFailure); const updateArticleRecordSuccess = new DynamoUpdateItem( this, diff --git a/lib/step-function.ts b/lib/step-function.ts index 9457732..d0f2269 100644 --- a/lib/step-function.ts +++ b/lib/step-function.ts @@ -1,6 +1,5 @@ import { Table } from "aws-cdk-lib/aws-dynamodb"; import { - Chain, Choice, Condition, Fail, @@ -94,6 +93,7 @@ export class CrossPostStepFunction extends Construct { } ); const hasArticleBeenProcessed = new Choice(this, `HasArticleBeenProcessed`); + getExistingArticle.next(hasArticleBeenProcessed); hasArticleBeenProcessed.when( Condition.isNotPresent("$.existingArticle.Item"), setArticleInProgress @@ -109,6 +109,7 @@ export class CrossPostStepFunction extends Construct { const loadArticleCatalog = new CallAwsService(this, "LoadArticleCatalog", { service: "dynamodb", action: "query", + iamAction: "dyanamodb:Query", iamResources: [table.tableArn], parameters: { TableName: table.tableName, @@ -118,12 +119,16 @@ export class CrossPostStepFunction extends Construct { "#GSI1PK": "GSI1PK", }, ExpressionAttributeValues: { - ":GSI1PK": DynamoAttributeValue.fromString("article"), + ":GSI1PK": { + S: "article", + }, }, }, resultPath: "$.catalog", }); + setArticleInProgress.next(loadArticleCatalog); // addCatch + const updateFailure = new Fail(this, `UpdateFailure`); const updateArticleRecordFailure = new DynamoUpdateItem( this, `UpdateArticleRecordFailure`, @@ -147,10 +152,12 @@ export class CrossPostStepFunction extends Construct { resultPath: JsonPath.DISCARD, } ); + updateArticleRecordFailure.next(updateFailure); loadArticleCatalog.addCatch(updateArticleRecordFailure); // PARALLEL const parallel = new Parallel(this, "TransformAndPublish"); + loadArticleCatalog.next(parallel); if (devTo) { const devToBranch = new StepFunctionBranch(this, `Dev`, { parsePostFn: devTo.fn, @@ -237,6 +244,7 @@ export class CrossPostStepFunction extends Construct { }); formatFailureCheck.next(checkForFailures); const didFailureOccur = new Choice(this, `DidFailureOccur`); + checkForFailures.next(didFailureOccur); const updateArticleRecordFailed = new DynamoUpdateItem( this, `UpdateArticleRecordFailed`, @@ -261,23 +269,26 @@ export class CrossPostStepFunction extends Construct { } ); didFailureOccur.when( - Condition.booleanEquals("$.existingArticle.Item.status.S", true), + Condition.booleanEquals("$.hasFailure", true), updateArticleRecordFailed ); - const shouldSendFailureEmail = new Choice(this, `ShouldSendFailureEmail`); - updateArticleRecordFailed.next(shouldSendFailureEmail); - const somethingWentWrong = new Fail(this, `SomethingWentWrong`, { - error: "PublishError", - cause: "An error occured publishing to one or more sites", - }); - shouldSendFailureEmail.otherwise(somethingWentWrong); - const success = new Succeed(this, `Success`); const saveArticles = new Parallel(this, `SaveArticles`); saveArticles.next(success); + const formatArticle = new Pass(this, `FormatArticle`, { + parameters: { + "url.$": "$.results[0].url", + "devUrl.$": "$.results[0].devUrl", + "mediumUrl.$": "$.results[1].mediumUrl", + "hashnodeUrl.$": "$.results[2].hashnodeUrl", + }, + }); + didFailureOccur.otherwise(formatArticle); + formatArticle.next(saveArticles); + const saveCatalogArticle = new DynamoPutItem(this, `SaveArticle`, { table, item: { @@ -329,7 +340,15 @@ export class CrossPostStepFunction extends Construct { ); saveArticles.branch(updateArticleRecordSuccess); + const somethingWentWrong = new Fail(this, `SomethingWentWrong`, { + error: "PublishError", + cause: "An error occured publishing to one or more sites", + }); + if (adminEmail) { + const shouldSendFailureEmail = new Choice(this, `ShouldSendFailureEmail`); + updateArticleRecordFailed.next(shouldSendFailureEmail); + shouldSendFailureEmail.otherwise(somethingWentWrong); const sendFailureEmail = new EventBridgePutEvents( this, "SendFailureEmail", @@ -373,11 +392,12 @@ export class CrossPostStepFunction extends Construct { ], }); sendEmailEvent.next(success); + } else { + updateArticleRecordFailed.next(somethingWentWrong); } - const definition = Chain.start(getExistingArticle); this.stateMachine = new StateMachine(this, `CrossPostMachine`, { - definition, + definition: getExistingArticle, timeout: Duration.minutes(5), }); } diff --git a/package-lock.json b/package-lock.json index 32d10be..1d91c8f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,7 @@ "@types/config": "^3.3.0", "@types/jest": "^29.4.0", "@types/node": "18.11.18", - "aws-cdk": "2.63.0", + "aws-cdk": "2.65.0", "config": "^3.3.9", "esbuild": "^0.17.5", "jest": "^29.4.1", @@ -3232,9 +3232,9 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/aws-cdk": { - "version": "2.63.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.63.0.tgz", - "integrity": "sha512-2bv/egScdBxWnzcGkWT21Evi+20Qt356H4SqxQLskjhcjc+zvN9nsDNTJvI58BI/pkyU/K8cemHCKnBjBVdXkg==", + "version": "2.65.0", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.65.0.tgz", + "integrity": "sha512-a1xtdf95N7MLPcwCs+IkE6kCD1utLMuDh+1RIyYbX7SYzAjlNJzOXQ7M16kBktt4KflVWseZnYsGbKWJ2DraMw==", "dev": true, "bin": { "cdk": "bin/cdk" @@ -8989,9 +8989,9 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "aws-cdk": { - "version": "2.63.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.63.0.tgz", - "integrity": "sha512-2bv/egScdBxWnzcGkWT21Evi+20Qt356H4SqxQLskjhcjc+zvN9nsDNTJvI58BI/pkyU/K8cemHCKnBjBVdXkg==", + "version": "2.65.0", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.65.0.tgz", + "integrity": "sha512-a1xtdf95N7MLPcwCs+IkE6kCD1utLMuDh+1RIyYbX7SYzAjlNJzOXQ7M16kBktt4KflVWseZnYsGbKWJ2DraMw==", "dev": true, "requires": { "fsevents": "2.3.2" diff --git a/package.json b/package.json index 6f74000..14ee303 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "@types/config": "^3.3.0", "@types/jest": "^29.4.0", "@types/node": "18.11.18", - "aws-cdk": "2.63.0", + "aws-cdk": "2.65.0", "config": "^3.3.9", "esbuild": "^0.17.5", "jest": "^29.4.1", From d61eae3e3857b89d6186a5215c7db78b583f4b66 Mon Sep 17 00:00:00 2001 From: martzcodes <978362+martzcodes@users.noreply.github.com> Date: Thu, 16 Feb 2023 23:21:58 -0500 Subject: [PATCH 07/13] untested canonical improvements, still need to parse out images --- functions/identify-new-content.ts | 27 ++++++++-------- functions/parse-dev-post.ts | 13 +++++--- functions/parse-hashnode-post.ts | 9 +++--- functions/parse-medium-post.ts | 11 +++++-- lib/blog-crossposting-automation-stack.ts | 25 +++++---------- lib/step-function-branch.ts | 5 +++ lib/step-function.ts | 39 +++++++++++++++++++---- 7 files changed, 80 insertions(+), 49 deletions(-) diff --git a/functions/identify-new-content.ts b/functions/identify-new-content.ts index de5ba83..b814e6e 100644 --- a/functions/identify-new-content.ts +++ b/functions/identify-new-content.ts @@ -1,12 +1,8 @@ import { Octokit } from "octokit"; -import { - EventBridgeClient, - PutEventsCommand, -} from "@aws-sdk/client-eventbridge"; +import { SFNClient, StartExecutionCommand } from '@aws-sdk/client-sfn'; import { getSecret } from "./utils/secrets"; -const eb = new EventBridgeClient({}); - +const sfn = new SFNClient({}); let octokit: Octokit; export const handler = async (event: any) => { @@ -135,14 +131,17 @@ const processNewContent = async ( sendStatusEmail: boolean; }[] ) => { - const Entries = newContent.map((content) => ({ - Source: `cross-post`, - DetailType: "process-new-content", - Detail: JSON.stringify(content), + const executions = await Promise.allSettled(newContent.map(async (content) => { + const command = new StartExecutionCommand({ + stateMachineArn: process.env.STATE_MACHINE_ARN, + input: JSON.stringify(content) + }); + await sfn.send(command); })); - const putEventsCommand = new PutEventsCommand({ - Entries, - }); - await eb.send(putEventsCommand); + for (const execution of executions) { + if (execution.status == 'rejected') { + console.error(execution.reason); + } + } }; diff --git a/functions/parse-dev-post.ts b/functions/parse-dev-post.ts index 4d503e7..895c353 100644 --- a/functions/parse-dev-post.ts +++ b/functions/parse-dev-post.ts @@ -8,6 +8,7 @@ export const handler = async (state: { post: any; format: string; articleCatalog: any; + canonical?: string; }) => { const details = frontmatter(state.post); const links = getLinks(details.content); @@ -45,7 +46,7 @@ const formatDevData = ( } else { devContent = devContent.replace( link[1], - `${process.env.BLOG_BASE_URL}${replacement.links.M.url.S}` + `${process.env.AMPLIFY_BASE_URL}${replacement.links.M.url.S}` ); } } @@ -60,10 +61,12 @@ const formatDevData = ( title: postDetail.data.title, published: true, main_image: postDetail.data.image, - canonical_url: `${process.env.BLOG_BASE_URL}/${postDetail.data.slug.replace( - /^\/|\/$/g, - "" - )}`, + ...(process.env.CANONICAL === "dev" ? {} : { + canonical_url: process.env.AMPLIFY_BASE_URL ? `${process.env.AMPLIFY_BASE_URL}/${postDetail.data.slug.replace( + /^\/|\/$/g, + "" + )}` : ``, + }), description: postDetail.data.description, tags: [ ...postDetail.data.categories.map((c) => c.replace(/ /g, "")), diff --git a/functions/parse-hashnode-post.ts b/functions/parse-hashnode-post.ts index 47aac35..66e92af 100644 --- a/functions/parse-hashnode-post.ts +++ b/functions/parse-hashnode-post.ts @@ -8,6 +8,7 @@ export const handler = async (state: { post: any; format: string; articleCatalog: any; + canonical?: string; }) => { const details = frontmatter(state.post); const links = getLinks(details.content); @@ -50,7 +51,7 @@ const formatHashnodeData = ( } else { hashnodeContent = hashnodeContent.replace( link[1], - `${process.env.BLOG_BASE_URL}${replacement.links.M.url.S}` + `${process.env.AMPLIFY_BASE_URL}${replacement.links.M.url.S}` ); } } @@ -71,9 +72,9 @@ const formatHashnodeData = ( contentMarkdown: hashnodeContent, coverImageURL: postDetail.data.image, isRepublished: { - originalArticleURL: `${ - process.env.BLOG_BASE_URL - }/${postDetail.data.slug.replace(/^\/|\/$/g, "")}`, + ...(process.env.CANONICAL === "hashnode" ? {} : { + originalArticleURL: process.env.AMPLIFY_BASE_URL ? `${process.env.AMPLIFY_BASE_URL}/${postDetail.data.slug.replace(/^\/|\/$/g, "")}` : ``, + }), }, tags: [], subtitle: postDetail.data.description, diff --git a/functions/parse-medium-post.ts b/functions/parse-medium-post.ts index 4daa352..f935289 100644 --- a/functions/parse-medium-post.ts +++ b/functions/parse-medium-post.ts @@ -4,7 +4,7 @@ import { getTweetUrl } from "./utils/getTweetUrl"; const frontmatter = require('@github-docs/frontmatter'); -export const handler = async (state: { post: any; format: string; articleCatalog: any; }) => { +export const handler = async (state: { post: any; format: string; articleCatalog: any; canonical?: string; }) => { const details = frontmatter(state.post); const links = getLinks(details.content); const tweets = getTweets(details.content); @@ -29,7 +29,7 @@ const formatMediumData = (postDetail: { data: { title: any; description: any; im if (replacement.links.M.mediumUrl && replacement.links.M.mediumUrl.S) { mediumContent = mediumContent.replace(link[1], replacement.links.M.mediumUrl.S); } else { - mediumContent = mediumContent.replace(link[1], `${process.env.BLOG_BASE_URL}${replacement.links.M.url.S}`); + mediumContent = mediumContent.replace(link[1], `${process.env.AMPLIFY_BASE_URL}${replacement.links.M.url.S}`); } } } @@ -43,7 +43,12 @@ const formatMediumData = (postDetail: { data: { title: any; description: any; im title: postDetail.data.title, contentFormat: 'markdown', tags: [...postDetail.data.categories, ...postDetail.data.tags], - canonicalUrl: `${process.env.BLOG_BASE_URL}/${postDetail.data.slug.replace(/^\/|\/$/g, '')}`, + ...(process.env.CANONICAL === "medium" ? {} : { + canonical_url: process.env.AMPLIFY_BASE_URL ? `${process.env.AMPLIFY_BASE_URL}/${postDetail.data.slug.replace( + /^\/|\/$/g, + "" + )}` : ``, + }), publishStatus: 'draft', notifyFollowers: true, content: mediumContent diff --git a/lib/blog-crossposting-automation-stack.ts b/lib/blog-crossposting-automation-stack.ts index af9f61f..edb9a9e 100644 --- a/lib/blog-crossposting-automation-stack.ts +++ b/lib/blog-crossposting-automation-stack.ts @@ -2,10 +2,9 @@ import { StackProps, Stack, CfnOutput, Duration } from "aws-cdk-lib"; import { EventBus, Rule } from "aws-cdk-lib/aws-events"; import { LambdaFunction, - SfnStateMachine, } from "aws-cdk-lib/aws-events-targets"; import { Architecture, FunctionUrlAuthType, Runtime } from "aws-cdk-lib/aws-lambda"; -import { NodejsFunction } from "aws-cdk-lib/aws-lambda-nodejs"; +import { NodejsFunction, NodejsFunctionProps } from "aws-cdk-lib/aws-lambda-nodejs"; import { Secret } from "aws-cdk-lib/aws-secretsmanager"; import { Construct } from "constructs"; import { join } from "path"; @@ -78,9 +77,9 @@ export class BlogCrosspostingAutomationStack extends Stack { secretName ); - const lambdaProps = { + const lambdaProps: NodejsFunctionProps = { architecture: Architecture.ARM_64, - memory: 1024, + memorySize: 1024, timeout: Duration.minutes(5), runtime: Runtime.NODEJS_18_X, environment: { @@ -105,6 +104,7 @@ export class BlogCrosspostingAutomationStack extends Stack { eventBus, sendApiRequestFn, table, + canonical, }; if (devTo?.devOrganizationId) { const parseDevFn = new NodejsFunction(this, `ParseDevToFn`, { @@ -114,7 +114,7 @@ export class BlogCrosspostingAutomationStack extends Stack { parseDevFn.addEnvironment("CANONICAL", canonical); parseDevFn.addEnvironment("DEV_ORG_ID", devTo.devOrganizationId); if (amplify) { - parseDevFn.addEnvironment("BLOG_BASE_URL", amplify.blogBaseUrl); + parseDevFn.addEnvironment("AMPLIFY_BASE_URL", amplify.blogBaseUrl); } crossPostStepFunctionProps.devTo = { fn: parseDevFn!, @@ -127,7 +127,7 @@ export class BlogCrosspostingAutomationStack extends Stack { }); parseHashnodeFn.addEnvironment("CANONICAL", canonical); if (amplify) { - parseHashnodeFn.addEnvironment("BLOG_BASE_URL", amplify.blogBaseUrl); + parseHashnodeFn.addEnvironment("AMPLIFY_BASE_URL", amplify.blogBaseUrl); } if (hashnode.hashnodePublicationId) { parseHashnodeFn.addEnvironment( @@ -147,7 +147,7 @@ export class BlogCrosspostingAutomationStack extends Stack { }); parseMediumFn.addEnvironment("CANONICAL", canonical); if (amplify) { - parseMediumFn.addEnvironment("BLOG_BASE_URL", amplify.blogBaseUrl); + parseMediumFn.addEnvironment("AMPLIFY_BASE_URL", amplify.blogBaseUrl); } crossPostStepFunctionProps.medium = { fn: parseMediumFn!, @@ -187,7 +187,6 @@ export class BlogCrosspostingAutomationStack extends Stack { ); } secret.grantRead(identifyNewContentFn); - eventBus.grantPutEventsTo(identifyNewContentFn); if (amplify?.amplifyProjectId) { new Rule(this, `NewArticlesRule`, { @@ -228,16 +227,8 @@ export class BlogCrosspostingAutomationStack extends Stack { } const { stateMachine } = new CrossPostStepFunction(this, `CrossPostStepFn`, crossPostStepFunctionProps); + stateMachine.grantStartExecution(identifyNewContentFn); table.grantReadWriteData(stateMachine); eventBus.grantPutEventsTo(stateMachine); - - new Rule(this, "CrossPostMachineRule", { - eventBus, - eventPattern: { - source: [`cross-post`], - detailType: ["process-new-content"], - }, - targets: [new SfnStateMachine(stateMachine, {})], - }); } } diff --git a/lib/step-function-branch.ts b/lib/step-function-branch.ts index 3168cb4..60eeca7 100644 --- a/lib/step-function-branch.ts +++ b/lib/step-function-branch.ts @@ -19,6 +19,7 @@ import { Construct } from "constructs"; export interface StepFunctionBranchProps { hashnodeBlogUrl?: string; + includeCanonical: boolean; parsePostFn: NodejsFunction; publishPayload: TaskInput; sendApiRequestFn: NodejsFunction; @@ -34,6 +35,7 @@ export class StepFunctionBranch extends StateMachineFragment { super(scope, id); const { hashnodeBlogUrl, + includeCanonical, parsePostFn, publishPayload, sendApiRequestFn, @@ -61,6 +63,9 @@ export class StepFunctionBranch extends StateMachineFragment { const transform = new LambdaInvoke(this, `Transform`, { lambdaFunction: parsePostFn, payload: TaskInput.fromObject({ + ...(includeCanonical ? { + "canonical.$": `$.canonical.${format}Url`, + } : {}), "post.$": "$.content", "articleCatalog.$": "$.catalog.Items", format, diff --git a/lib/step-function.ts b/lib/step-function.ts index d0f2269..2889409 100644 --- a/lib/step-function.ts +++ b/lib/step-function.ts @@ -26,6 +26,7 @@ import { Duration } from "aws-cdk-lib"; export interface CrossPostStepFunctionProps { adminEmail?: string; + canonical: "dev" | "medium" | "hashnode" | "amplify"; devTo?: { fn: NodejsFunction; }; @@ -48,6 +49,7 @@ export class CrossPostStepFunction extends Construct { const { adminEmail, + canonical, devTo, eventBus, hashnode, @@ -156,10 +158,21 @@ export class CrossPostStepFunction extends Construct { loadArticleCatalog.addCatch(updateArticleRecordFailure); // PARALLEL - const parallel = new Parallel(this, "TransformAndPublish"); - loadArticleCatalog.next(parallel); + const transformAndPublish = new Parallel(this, "TransformAndPublish"); + let transformAndPublishCanonical = transformAndPublish; + if (canonical !== "amplify") { + transformAndPublishCanonical = new Parallel(this, "TransformAndPublishCanonical", { + resultPath: "$.canonical" + }); + loadArticleCatalog.next(transformAndPublishCanonical); + transformAndPublishCanonical.next(transformAndPublish); + } else { + loadArticleCatalog.next(transformAndPublish); + } + if (devTo) { const devToBranch = new StepFunctionBranch(this, `Dev`, { + includeCanonical: !(canonical === "dev" || canonical === "amplify"), parsePostFn: devTo.fn, publishPayload: TaskInput.fromObject({ secretKey: "dev", @@ -179,10 +192,15 @@ export class CrossPostStepFunction extends Construct { sendApiRequestFn, table, }); - parallel.branch(devToBranch.prefixStates()); + if (canonical === "dev") { + transformAndPublishCanonical.branch(devToBranch.prefixStates()); + } else { + transformAndPublish.branch(devToBranch.prefixStates()); + } } if (medium) { const mediumBranch = new StepFunctionBranch(this, `Medium`, { + includeCanonical: !(canonical === "medium" || canonical === "amplify"), parsePostFn: medium.fn, publishPayload: TaskInput.fromObject({ secretKey: "medium", @@ -199,11 +217,16 @@ export class CrossPostStepFunction extends Construct { sendApiRequestFn, table, }); - parallel.branch(mediumBranch.prefixStates()); + if (canonical === "medium") { + transformAndPublishCanonical.branch(mediumBranch.prefixStates()); + } else { + transformAndPublish.branch(mediumBranch.prefixStates()); + } } if (hashnode) { const hashnodeBranch = new StepFunctionBranch(this, `Hashnode`, { + includeCanonical: !(canonical === "hashnode" || canonical === "amplify"), hashnodeBlogUrl: hashnode.url, parsePostFn: hashnode.fn, publishPayload: TaskInput.fromObject({ @@ -224,7 +247,11 @@ export class CrossPostStepFunction extends Construct { sendApiRequestFn, table, }); - parallel.branch(hashnodeBranch.prefixStates()); + if (canonical === "hashnode") { + transformAndPublishCanonical.branch(hashnodeBranch.prefixStates()); + } else { + transformAndPublish.branch(hashnodeBranch.prefixStates()); + } } const formatFailureCheck = new Pass(this, "FormatFailureCheck", { @@ -235,7 +262,7 @@ export class CrossPostStepFunction extends Construct { }, }, }); - parallel.next(formatFailureCheck); + transformAndPublish.next(formatFailureCheck); const checkForFailures = new Pass(this, `CheckForFailures`, { parameters: { "results.$": "$.results", From a3177f1b041feddb47e93da21ed61ab5c75134ef Mon Sep 17 00:00:00 2001 From: martzcodes <978362+martzcodes@users.noreply.github.com> Date: Mon, 20 Feb 2023 15:14:52 -0500 Subject: [PATCH 08/13] step function code working with private github + hashnode (primary) + devTo --- functions/identify-new-content.ts | 147 +- functions/parse-dev-post.ts | 2 +- functions/parse-hashnode-post.ts | 16 +- functions/parse-medium-post.ts | 85 +- functions/send-api-request.ts | 1 + lib/blog-crossposting-automation-stack.ts | 13 +- lib/step-function-branch.ts | 12 +- lib/step-function.ts | 75 +- package-lock.json | 2675 ++++++++++++++++++++- package.json | 1 + 10 files changed, 2914 insertions(+), 113 deletions(-) diff --git a/functions/identify-new-content.ts b/functions/identify-new-content.ts index b814e6e..1f34aa7 100644 --- a/functions/identify-new-content.ts +++ b/functions/identify-new-content.ts @@ -1,22 +1,63 @@ import { Octokit } from "octokit"; -import { SFNClient, StartExecutionCommand } from '@aws-sdk/client-sfn'; +import { SFNClient, StartExecutionCommand } from "@aws-sdk/client-sfn"; import { getSecret } from "./utils/secrets"; +import { join } from "path"; +import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3"; const sfn = new SFNClient({}); +const s3 = new S3Client({}); +const blogPathDefined = !!( + process.env.BLOG_PATH && process.env.BLOG_PATH !== "/" +); let octokit: Octokit; export const handler = async (event: any) => { try { await initializeOctokit(); - const recentCommits = await getRecentCommits(); - if (recentCommits.length) { - const newContent = await getNewContent(recentCommits); - if (newContent.length) { - const data = await getContentData(newContent); - await processNewContent(data); + let newContent: { fileName: string; commit: string }[] = []; + if (event.body) { + const body = JSON.parse(event.body); + console.log(JSON.stringify({ body }, null, 2)); + if (body.commits) { + newContent = body.commits.reduce( + ( + p: { fileName: string; commit: string }[], + commit: { + id: string; + added: string[]; + modified: string[]; + // ... there's more stuff here, but this is all we need + } + ) => { + const addedFiles = commit.added.filter( + (addedFile: string) => + (!blogPathDefined || + addedFile.startsWith(`${process.env.BLOG_PATH}/`)) && + addedFile.endsWith(".md") + ); + return [ + ...p, + ...addedFiles.map((addedFile) => ({ + fileName: addedFile, + commit: commit.id, + })), + ]; + }, + [] as { fileName: string; commit: string }[] + ); + } else { + const recentCommits = await getRecentCommits(); + if (recentCommits.length) { + newContent = await getNewContent(recentCommits); + } } } + if (newContent.length) { + const data = await getContentData(newContent); + const imagesProcessed = await saveImagesToS3(data); + await processNewContent(imagesProcessed); + } } catch (err) { console.error(err); } @@ -60,10 +101,12 @@ const getNewContent = async (commits: string[]) => { ref: commits[j], }); - const blogPath = process.env.BLOG_PATH && process.env.BLOG_PATH !== "/"; const newFiles = commitDetail.data.files?.filter( (f) => - f.status == "added" && (!blogPath || f.filename.startsWith(`${process.env.BLOG_PATH}/`)) + f.status == "added" && + (!blogPathDefined || + f.filename.startsWith(`${process.env.BLOG_PATH}/`)) && + f.filename.endsWith(".md") ); newContent.push( ...(newFiles?.map((p) => { @@ -120,8 +163,72 @@ const saveImagesToS3 = async ( sendStatusEmail: boolean; }[] ) => { - // TODO: regex for images stored in github and fetch them / store them in a public s3 bucket -} + const contentData: { + fileName: string; + commit: string; + content: string; + sendStatusEmail: boolean; + }[] = []; + const imgRegex = /!\[(.*?)\]\((.*?)\)/g; + for (let j = 0; j < newContent.length; j++) { + const workingContent = { ...newContent[j] }; + const imageSet = new Set<string>([]); + let match; + while ((match = imgRegex.exec(newContent[j].content)) !== null) { + imageSet.add(match[2]); + } + const images = [...imageSet]; + if (images.length === 0) { + // no images in the post... passthrough + contentData.push(newContent[j]); + continue; + } + const blogFile = newContent[j].fileName; + const blogSplit = `${blogFile}`.split("/"); + blogSplit.pop(); + const blogBase = blogSplit.join("/"); + const s3Mapping: Record<string, string> = {}; + for (let k = 0; k < images.length; k++) { + const image = images[k]; + const githubPath = join(blogBase, image); + const imageSplit = image.split("."); + const imageExtension = imageSplit[imageSplit.length - 1]; + const s3Path = `${blogFile}/${k}.${imageExtension}`.replace(/\ /g, "-"); + const s3Url = `https://s3.amazonaws.com/${process.env.MEDIA_BUCKET}/${s3Path}`; + console.log( + JSON.stringify({ image, githubPath, s3Path, s3Url }, null, 2) + ); + const postContent = await octokit.request( + "GET /repos/{owner}/{repo}/contents/{path}", + { + owner: `${process.env.OWNER}`, + repo: `${process.env.REPO}`, + path: githubPath, + } + ); + + const buffer = Buffer.from((postContent.data as any).content, "base64"); + + // upload images to s3 + const putImage = new PutObjectCommand({ + Bucket: `${process.env.MEDIA_BUCKET}`, + Key: s3Path, + Body: buffer, + }); + await s3.send(putImage); + + s3Mapping[image] = s3Url; + } + const rewriteLink = (match: string, text: string, url: string) => { + console.log(JSON.stringify({ match, text, url })); + return `![${text}](${s3Mapping[url]})`; + } + workingContent.content = workingContent.content.replace(imgRegex, rewriteLink); + contentData.push(workingContent); + } + console.log(JSON.stringify({ contentData })); + return contentData; +}; const processNewContent = async ( newContent: { @@ -131,16 +238,18 @@ const processNewContent = async ( sendStatusEmail: boolean; }[] ) => { - const executions = await Promise.allSettled(newContent.map(async (content) => { - const command = new StartExecutionCommand({ - stateMachineArn: process.env.STATE_MACHINE_ARN, - input: JSON.stringify(content) - }); - await sfn.send(command); - })); + const executions = await Promise.allSettled( + newContent.map(async (content) => { + const command = new StartExecutionCommand({ + stateMachineArn: process.env.STATE_MACHINE_ARN, + input: JSON.stringify(content), + }); + await sfn.send(command); + }) + ); for (const execution of executions) { - if (execution.status == 'rejected') { + if (execution.status == "rejected") { console.error(execution.reason); } } diff --git a/functions/parse-dev-post.ts b/functions/parse-dev-post.ts index 895c353..9e05b5c 100644 --- a/functions/parse-dev-post.ts +++ b/functions/parse-dev-post.ts @@ -65,7 +65,7 @@ const formatDevData = ( canonical_url: process.env.AMPLIFY_BASE_URL ? `${process.env.AMPLIFY_BASE_URL}/${postDetail.data.slug.replace( /^\/|\/$/g, "" - )}` : ``, + )}` : `${process.env.CANONICAL}`, }), description: postDetail.data.description, tags: [ diff --git a/functions/parse-hashnode-post.ts b/functions/parse-hashnode-post.ts index 66e92af..7b98e92 100644 --- a/functions/parse-hashnode-post.ts +++ b/functions/parse-hashnode-post.ts @@ -71,11 +71,17 @@ const formatHashnodeData = ( title: postDetail.data.title, contentMarkdown: hashnodeContent, coverImageURL: postDetail.data.image, - isRepublished: { - ...(process.env.CANONICAL === "hashnode" ? {} : { - originalArticleURL: process.env.AMPLIFY_BASE_URL ? `${process.env.AMPLIFY_BASE_URL}/${postDetail.data.slug.replace(/^\/|\/$/g, "")}` : ``, - }), - }, + ...(process.env.CANONICAL === "hashnode" + ? {} + : { + isRepublished: { + originalArticleURL: process.env.AMPLIFY_BASE_URL + ? `${ + process.env.AMPLIFY_BASE_URL + }/${postDetail.data.slug.replace(/^\/|\/$/g, "")}` + : `${process.env.CANONICAL}`, + }, + }), tags: [], subtitle: postDetail.data.description, }, diff --git a/functions/parse-medium-post.ts b/functions/parse-medium-post.ts index f935289..acad1ce 100644 --- a/functions/parse-medium-post.ts +++ b/functions/parse-medium-post.ts @@ -2,34 +2,69 @@ import { getLinks } from "./utils/getLinks"; import { getTweets } from "./utils/getTweets"; import { getTweetUrl } from "./utils/getTweetUrl"; -const frontmatter = require('@github-docs/frontmatter'); +const frontmatter = require("@github-docs/frontmatter"); -export const handler = async (state: { post: any; format: string; articleCatalog: any; canonical?: string; }) => { +export const handler = async (state: { + post: any; + format: string; + articleCatalog: any; + canonical?: string; +}) => { const details = frontmatter(state.post); const links = getLinks(details.content); const tweets = getTweets(details.content); - const payload = formatMediumData(details, state.articleCatalog, links, tweets); - + const payload = formatMediumData( + details, + state.articleCatalog, + links, + tweets + ); + return { payload, - url: `/${details.data.slug.replace(/^\/|\/$/g, '')}` + url: `/${details.data.slug.replace(/^\/|\/$/g, "")}`, }; }; -const formatMediumData = (postDetail: { data: { title: any; description: any; image_attribution: any; image: any; categories: any; tags: any; slug: string; }; content: string | any[]; }, articleCatalog: any[], links: any, tweets: any) => { - let mediumContent = `\n# ${postDetail.data.title}\n` - + `#### ${postDetail.data.description}\n` - + `![${postDetail.data.image_attribution ?? ''}](${postDetail.data.image})\n` - + `${postDetail.content.slice(0)}`; +const formatMediumData = ( + postDetail: { + data: { + title: any; + description: any; + image_attribution: any; + image: any; + categories: any; + tags: any; + slug: string; + }; + content: string | any[]; + }, + articleCatalog: any[], + links: any, + tweets: any +) => { + let mediumContent = + `\n# ${postDetail.data.title}\n` + + `#### ${postDetail.data.description}\n` + + `![${postDetail.data.image_attribution ?? ""}](${ + postDetail.data.image + })\n` + + `${postDetail.content.slice(0)}`; for (const link of links) { - const replacement = articleCatalog.find(c => c.links.M.url.S == link[1]); + const replacement = articleCatalog.find((c) => c.links.M.url.S == link[1]); if (replacement) { if (replacement.links.M.mediumUrl && replacement.links.M.mediumUrl.S) { - mediumContent = mediumContent.replace(link[1], replacement.links.M.mediumUrl.S); + mediumContent = mediumContent.replace( + link[1], + replacement.links.M.mediumUrl.S + ); } else { - mediumContent = mediumContent.replace(link[1], `${process.env.AMPLIFY_BASE_URL}${replacement.links.M.url.S}`); + mediumContent = mediumContent.replace( + link[1], + `${process.env.AMPLIFY_BASE_URL}${replacement.links.M.url.S}` + ); } } } @@ -41,18 +76,22 @@ const formatMediumData = (postDetail: { data: { title: any; description: any; im const mediumData = { title: postDetail.data.title, - contentFormat: 'markdown', + contentFormat: "markdown", tags: [...postDetail.data.categories, ...postDetail.data.tags], - ...(process.env.CANONICAL === "medium" ? {} : { - canonical_url: process.env.AMPLIFY_BASE_URL ? `${process.env.AMPLIFY_BASE_URL}/${postDetail.data.slug.replace( - /^\/|\/$/g, - "" - )}` : ``, - }), - publishStatus: 'draft', + ...(process.env.CANONICAL === "medium" + ? {} + : { + canonical_url: process.env.AMPLIFY_BASE_URL + ? `${process.env.AMPLIFY_BASE_URL}/${postDetail.data.slug.replace( + /^\/|\/$/g, + "" + )}` + : `${process.env.CANONICAL}`, + }), + publishStatus: "draft", notifyFollowers: true, - content: mediumContent + content: mediumContent, }; return mediumData; -}; \ No newline at end of file +}; diff --git a/functions/send-api-request.ts b/functions/send-api-request.ts index 0516ac3..2da6a7b 100644 --- a/functions/send-api-request.ts +++ b/functions/send-api-request.ts @@ -20,6 +20,7 @@ export const handler = async (state: { secretKey: any; request: { method: any; b } }; } else { + console.log(JSON.stringify({ config, state }, null, 2)); const response = await axios.request(config); return response.data; } diff --git a/lib/blog-crossposting-automation-stack.ts b/lib/blog-crossposting-automation-stack.ts index edb9a9e..ca08cb2 100644 --- a/lib/blog-crossposting-automation-stack.ts +++ b/lib/blog-crossposting-automation-stack.ts @@ -1,10 +1,11 @@ -import { StackProps, Stack, CfnOutput, Duration } from "aws-cdk-lib"; +import { StackProps, Stack, CfnOutput, Duration, RemovalPolicy } from "aws-cdk-lib"; import { EventBus, Rule } from "aws-cdk-lib/aws-events"; import { LambdaFunction, } from "aws-cdk-lib/aws-events-targets"; import { Architecture, FunctionUrlAuthType, Runtime } from "aws-cdk-lib/aws-lambda"; import { NodejsFunction, NodejsFunctionProps } from "aws-cdk-lib/aws-lambda-nodejs"; +import { Bucket } from "aws-cdk-lib/aws-s3"; import { Secret } from "aws-cdk-lib/aws-secretsmanager"; import { Construct } from "constructs"; import { join } from "path"; @@ -19,7 +20,6 @@ export interface BlogCrosspostingAutomationStackProps extends StackProps { amplifyProjectId: string; blogBaseUrl: string; }; - // TODO: properly handle canonical urls for non-amplify blogs canonical: "dev" | "medium" | "hashnode" | "amplify"; commitTimeToleranceMinutes?: number; devTo?: { @@ -163,6 +163,12 @@ export class BlogCrosspostingAutomationStack extends Stack { }); table.grantWriteData(loadCrossPostsFn); + const mediaBucket = new Bucket(this, `BlogPostMediaBucket`, { + autoDeleteObjects: true, + publicReadAccess: true, + removalPolicy: RemovalPolicy.DESTROY, + }); + const identifyNewContentFn = new NodejsFunction( this, `IdentifyNewContentFn`, @@ -174,6 +180,8 @@ export class BlogCrosspostingAutomationStack extends Stack { identifyNewContentFn.addEnvironment("OWNER", github.owner); identifyNewContentFn.addEnvironment("REPO", github.repo); identifyNewContentFn.addEnvironment("BLOG_PATH", github.path); + identifyNewContentFn.addEnvironment("MEDIA_BUCKET", mediaBucket.bucketName); + mediaBucket.grantReadWrite(identifyNewContentFn); if (commitTimeToleranceMinutes) { identifyNewContentFn.addEnvironment( "COMMIT_TIME_TOLERANCE_MINUTES", @@ -228,6 +236,7 @@ export class BlogCrosspostingAutomationStack extends Stack { const { stateMachine } = new CrossPostStepFunction(this, `CrossPostStepFn`, crossPostStepFunctionProps); stateMachine.grantStartExecution(identifyNewContentFn); + identifyNewContentFn.addEnvironment("STATE_MACHINE_ARN", stateMachine.stateMachineArn); table.grantReadWriteData(stateMachine); eventBus.grantPutEventsTo(stateMachine); } diff --git a/lib/step-function-branch.ts b/lib/step-function-branch.ts index 60eeca7..dfab93d 100644 --- a/lib/step-function-branch.ts +++ b/lib/step-function-branch.ts @@ -19,7 +19,7 @@ import { Construct } from "constructs"; export interface StepFunctionBranchProps { hashnodeBlogUrl?: string; - includeCanonical: boolean; + canonical?: string; parsePostFn: NodejsFunction; publishPayload: TaskInput; sendApiRequestFn: NodejsFunction; @@ -35,7 +35,7 @@ export class StepFunctionBranch extends StateMachineFragment { super(scope, id); const { hashnodeBlogUrl, - includeCanonical, + canonical, parsePostFn, publishPayload, sendApiRequestFn, @@ -63,14 +63,15 @@ export class StepFunctionBranch extends StateMachineFragment { const transform = new LambdaInvoke(this, `Transform`, { lambdaFunction: parsePostFn, payload: TaskInput.fromObject({ - ...(includeCanonical ? { - "canonical.$": `$.canonical.${format}Url`, + ...(canonical ? { + "canonical.$": `$.canonical[0].${canonical}Url`, } : {}), "post.$": "$.content", "articleCatalog.$": "$.catalog.Items", format, }), retryOnServiceExceptions: true, + outputPath: '$.Payload', }); skipPublish.otherwise(transform); const updateArticleRecordFailure = new DynamoUpdateItem( @@ -109,6 +110,7 @@ export class StepFunctionBranch extends StateMachineFragment { lambdaFunction: sendApiRequestFn, payload: publishPayload, retryOnServiceExceptions: true, + resultPath: '$.result', }); transform.next(publish); publish.addCatch(updateArticleRecordFailure); @@ -131,7 +133,7 @@ export class StepFunctionBranch extends StateMachineFragment { "#url": "url", }, expressionAttributeValues: { - [`:${format}`]: DynamoAttributeValue.fromMap({ + ':format': DynamoAttributeValue.fromMap({ status: DynamoAttributeValue.fromString("succeeded"), [`${format}Url`]: DynamoAttributeValue.fromString( format === "hashnode" diff --git a/lib/step-function.ts b/lib/step-function.ts index 2889409..7098404 100644 --- a/lib/step-function.ts +++ b/lib/step-function.ts @@ -65,6 +65,7 @@ export class CrossPostStepFunction extends Construct { ), sk: DynamoAttributeValue.fromString("article"), }, + resultPath: "$.existingArticle", }); const setArticleInProgress = new DynamoUpdateItem( this, @@ -158,21 +159,31 @@ export class CrossPostStepFunction extends Construct { loadArticleCatalog.addCatch(updateArticleRecordFailure); // PARALLEL - const transformAndPublish = new Parallel(this, "TransformAndPublish"); + const transformAndPublish = new Parallel(this, "TransformAndPublish", { + resultPath: "$.transform", + }); let transformAndPublishCanonical = transformAndPublish; if (canonical !== "amplify") { - transformAndPublishCanonical = new Parallel(this, "TransformAndPublishCanonical", { - resultPath: "$.canonical" - }); + transformAndPublishCanonical = new Parallel( + this, + "TransformAndPublishCanonical", + { + resultPath: "$.canonical", + } + ); + transformAndPublishCanonical.addCatch(new Fail(this, `CanonicalFailed`)); loadArticleCatalog.next(transformAndPublishCanonical); transformAndPublishCanonical.next(transformAndPublish); } else { loadArticleCatalog.next(transformAndPublish); } + const parallelResults: string[] = []; if (devTo) { const devToBranch = new StepFunctionBranch(this, `Dev`, { - includeCanonical: !(canonical === "dev" || canonical === "amplify"), + ...(canonical === "dev" || canonical === "amplify" + ? {} + : { canonical }), parsePostFn: devTo.fn, publishPayload: TaskInput.fromObject({ secretKey: "dev", @@ -196,11 +207,14 @@ export class CrossPostStepFunction extends Construct { transformAndPublishCanonical.branch(devToBranch.prefixStates()); } else { transformAndPublish.branch(devToBranch.prefixStates()); + parallelResults.push("dev"); } } if (medium) { const mediumBranch = new StepFunctionBranch(this, `Medium`, { - includeCanonical: !(canonical === "medium" || canonical === "amplify"), + ...(canonical === "medium" || canonical === "amplify" + ? {} + : { canonical }), parsePostFn: medium.fn, publishPayload: TaskInput.fromObject({ secretKey: "medium", @@ -221,12 +235,15 @@ export class CrossPostStepFunction extends Construct { transformAndPublishCanonical.branch(mediumBranch.prefixStates()); } else { transformAndPublish.branch(mediumBranch.prefixStates()); + parallelResults.push("medium"); } } if (hashnode) { const hashnodeBranch = new StepFunctionBranch(this, `Hashnode`, { - includeCanonical: !(canonical === "hashnode" || canonical === "amplify"), + ...(canonical === "hashnode" || canonical === "amplify" + ? {} + : { canonical }), hashnodeBlogUrl: hashnode.url, parsePostFn: hashnode.fn, publishPayload: TaskInput.fromObject({ @@ -251,11 +268,13 @@ export class CrossPostStepFunction extends Construct { transformAndPublishCanonical.branch(hashnodeBranch.prefixStates()); } else { transformAndPublish.branch(hashnodeBranch.prefixStates()); + parallelResults.push("hashnode"); } } const formatFailureCheck = new Pass(this, "FormatFailureCheck", { parameters: { + "canonical.$": "$.canonical[0]", "results.$": "$.transform", failureFormat: { success: false, @@ -265,6 +284,7 @@ export class CrossPostStepFunction extends Construct { transformAndPublish.next(formatFailureCheck); const checkForFailures = new Pass(this, `CheckForFailures`, { parameters: { + "canonical.$": "$.canonical", "results.$": "$.results", "hasFailure.$": "States.ArrayContains($.results, $.failureFormat)", }, @@ -308,9 +328,14 @@ export class CrossPostStepFunction extends Construct { const formatArticle = new Pass(this, `FormatArticle`, { parameters: { "url.$": "$.results[0].url", - "devUrl.$": "$.results[0].devUrl", - "mediumUrl.$": "$.results[1].mediumUrl", - "hashnodeUrl.$": "$.results[2].hashnodeUrl", + ...(canonical !== "amplify" + ? { + [`${canonical}Url.$`]: `$.canonical.${canonical}Url`, + } + : {}), + ...parallelResults.reduce((p, c, ind) => { + return { ...p, [`${c}Url.$`]: `$.results[${ind}].${c}Url` }; + }, {} as Record<string, string>), }, }); didFailureOccur.otherwise(formatArticle); @@ -326,16 +351,28 @@ export class CrossPostStepFunction extends Construct { JsonPath.stringAt(`$$.Execution.Input.fileName`) ), links: DynamoAttributeValue.fromMap({ - devUrl: DynamoAttributeValue.fromString( - JsonPath.stringAt(`$.devUrl`) - ), + ...(devTo + ? { + devUrl: DynamoAttributeValue.fromString( + JsonPath.stringAt(`$.devUrl`) + ), + } + : {}), + ...(hashnode + ? { + hashnodeUrl: DynamoAttributeValue.fromString( + JsonPath.stringAt(`$.hashnodeUrl`) + ), + } + : {}), + ...(medium + ? { + mediumUrl: DynamoAttributeValue.fromString( + JsonPath.stringAt(`$.mediumUrl`) + ), + } + : {}), url: DynamoAttributeValue.fromString(JsonPath.stringAt(`$.url`)), - mediumUrl: DynamoAttributeValue.fromString( - JsonPath.stringAt(`$.mediumUrl`) - ), - hashnodeUrl: DynamoAttributeValue.fromString( - JsonPath.stringAt(`$.hashnodeUrl`) - ), }), }, resultPath: JsonPath.DISCARD, diff --git a/package-lock.json b/package-lock.json index 1d91c8f..7f378e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@aws-sdk/client-dynamodb": "^3.229.0", "@aws-sdk/client-eventbridge": "^3.264.0", + "@aws-sdk/client-s3": "^3.272.0", "@aws-sdk/client-secrets-manager": "^3.231.0", "@aws-sdk/client-sfn": "^3.229.0", "@aws-sdk/util-dynamodb": "^3.229.0", @@ -69,6 +70,36 @@ "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v5/-/asset-node-proxy-agent-v5-2.0.45.tgz", "integrity": "sha512-Ys98Zu4tMkDEr2jChe7oAbB/u857QPEMKsAKbNaKJtODpupQOdWIcKw0sEAQtamNvTrNRSEaLGEgMEpxKvcHKA==" }, + "node_modules/@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/crc32c": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", + "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32c/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, "node_modules/@aws-crypto/ie11-detection": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", @@ -82,6 +113,25 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, + "node_modules/@aws-crypto/sha1-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", + "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, "node_modules/@aws-crypto/sha256-browser": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", @@ -157,6 +207,23 @@ "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/chunked-blob-reader": { + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.188.0.tgz", + "integrity": "sha512-zkPRFZZPL3eH+kH86LDYYXImiClA1/sW60zYOjse9Pgka+eDJlvBN6hcYxwDEKjcwATYiSRR1aVQHcfCinlGXg==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/chunked-blob-reader-native": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader-native/-/chunked-blob-reader-native-3.208.0.tgz", + "integrity": "sha512-JeOZ95PW+fJ6bbuqPySYqLqHk1n4+4ueEEraJsiUrPBV0S1ZtyvOGHcnGztKUjr2PYNaiexmpWuvUve9K12HRA==", + "dependencies": { + "@aws-sdk/util-base64": "3.208.0", + "tslib": "^2.3.1" + } + }, "node_modules/@aws-sdk/client-dynamodb": { "version": "3.264.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.264.0.tgz", @@ -205,46 +272,862 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-eventbridge": { - "version": "3.264.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-eventbridge/-/client-eventbridge-3.264.0.tgz", - "integrity": "sha512-v6LXaJXBtVTCP46iHLy2LGGu7WfWduwt/Ww5VhTRCIsBiviV/9tJ2p+xL1AlZs3vZ6em/xS6JoLJ8kuVI0l2VA==", + "node_modules/@aws-sdk/client-eventbridge": { + "version": "3.264.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-eventbridge/-/client-eventbridge-3.264.0.tgz", + "integrity": "sha512-v6LXaJXBtVTCP46iHLy2LGGu7WfWduwt/Ww5VhTRCIsBiviV/9tJ2p+xL1AlZs3vZ6em/xS6JoLJ8kuVI0l2VA==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.264.0", + "@aws-sdk/config-resolver": "3.259.0", + "@aws-sdk/credential-provider-node": "3.264.0", + "@aws-sdk/fetch-http-handler": "3.257.0", + "@aws-sdk/hash-node": "3.257.0", + "@aws-sdk/invalid-dependency": "3.257.0", + "@aws-sdk/middleware-content-length": "3.257.0", + "@aws-sdk/middleware-endpoint": "3.264.0", + "@aws-sdk/middleware-host-header": "3.257.0", + "@aws-sdk/middleware-logger": "3.257.0", + "@aws-sdk/middleware-recursion-detection": "3.257.0", + "@aws-sdk/middleware-retry": "3.259.0", + "@aws-sdk/middleware-serde": "3.257.0", + "@aws-sdk/middleware-signing": "3.257.0", + "@aws-sdk/middleware-stack": "3.257.0", + "@aws-sdk/middleware-user-agent": "3.257.0", + "@aws-sdk/node-config-provider": "3.259.0", + "@aws-sdk/node-http-handler": "3.257.0", + "@aws-sdk/protocol-http": "3.257.0", + "@aws-sdk/signature-v4-multi-region": "3.264.0", + "@aws-sdk/smithy-client": "3.261.0", + "@aws-sdk/types": "3.257.0", + "@aws-sdk/url-parser": "3.257.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.261.0", + "@aws-sdk/util-defaults-mode-node": "3.261.0", + "@aws-sdk/util-endpoints": "3.257.0", + "@aws-sdk/util-retry": "3.257.0", + "@aws-sdk/util-user-agent-browser": "3.257.0", + "@aws-sdk/util-user-agent-node": "3.259.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.272.0.tgz", + "integrity": "sha512-KxlVhTHfmcm3HlAP5+vY1cuQt60AaYOISp1ccYOPsww7Ly7fbDnbov0AV9bcwlLLVcfZFWQYJqH+Gvk2SpyXFQ==", + "dependencies": { + "@aws-crypto/sha1-browser": "3.0.0", + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.272.0", + "@aws-sdk/config-resolver": "3.272.0", + "@aws-sdk/credential-provider-node": "3.272.0", + "@aws-sdk/eventstream-serde-browser": "3.272.0", + "@aws-sdk/eventstream-serde-config-resolver": "3.272.0", + "@aws-sdk/eventstream-serde-node": "3.272.0", + "@aws-sdk/fetch-http-handler": "3.272.0", + "@aws-sdk/hash-blob-browser": "3.272.0", + "@aws-sdk/hash-node": "3.272.0", + "@aws-sdk/hash-stream-node": "3.272.0", + "@aws-sdk/invalid-dependency": "3.272.0", + "@aws-sdk/md5-js": "3.272.0", + "@aws-sdk/middleware-bucket-endpoint": "3.272.0", + "@aws-sdk/middleware-content-length": "3.272.0", + "@aws-sdk/middleware-endpoint": "3.272.0", + "@aws-sdk/middleware-expect-continue": "3.272.0", + "@aws-sdk/middleware-flexible-checksums": "3.272.0", + "@aws-sdk/middleware-host-header": "3.272.0", + "@aws-sdk/middleware-location-constraint": "3.272.0", + "@aws-sdk/middleware-logger": "3.272.0", + "@aws-sdk/middleware-recursion-detection": "3.272.0", + "@aws-sdk/middleware-retry": "3.272.0", + "@aws-sdk/middleware-sdk-s3": "3.272.0", + "@aws-sdk/middleware-serde": "3.272.0", + "@aws-sdk/middleware-signing": "3.272.0", + "@aws-sdk/middleware-ssec": "3.272.0", + "@aws-sdk/middleware-stack": "3.272.0", + "@aws-sdk/middleware-user-agent": "3.272.0", + "@aws-sdk/node-config-provider": "3.272.0", + "@aws-sdk/node-http-handler": "3.272.0", + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/signature-v4-multi-region": "3.272.0", + "@aws-sdk/smithy-client": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/url-parser": "3.272.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.272.0", + "@aws-sdk/util-defaults-mode-node": "3.272.0", + "@aws-sdk/util-endpoints": "3.272.0", + "@aws-sdk/util-retry": "3.272.0", + "@aws-sdk/util-stream-browser": "3.272.0", + "@aws-sdk/util-stream-node": "3.272.0", + "@aws-sdk/util-user-agent-browser": "3.272.0", + "@aws-sdk/util-user-agent-node": "3.272.0", + "@aws-sdk/util-utf8": "3.254.0", + "@aws-sdk/util-waiter": "3.272.0", + "@aws-sdk/xml-builder": "3.201.0", + "fast-xml-parser": "4.0.11", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/abort-controller": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.272.0.tgz", + "integrity": "sha512-s2TV3phapcTwZNr4qLxbfuQuE9ZMP4RoJdkvRRCkKdm6jslsWLJf2Zlcxti/23hOlINUMYv2iXE2pftIgWGdpg==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sso": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.272.0.tgz", + "integrity": "sha512-xn9a0IGONwQIARmngThoRhF1lLGjHAD67sUaShgIMaIMc6ipVYN6alWG1VuUpoUQ6iiwMEt0CHdfCyLyUV/fTA==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.272.0", + "@aws-sdk/fetch-http-handler": "3.272.0", + "@aws-sdk/hash-node": "3.272.0", + "@aws-sdk/invalid-dependency": "3.272.0", + "@aws-sdk/middleware-content-length": "3.272.0", + "@aws-sdk/middleware-endpoint": "3.272.0", + "@aws-sdk/middleware-host-header": "3.272.0", + "@aws-sdk/middleware-logger": "3.272.0", + "@aws-sdk/middleware-recursion-detection": "3.272.0", + "@aws-sdk/middleware-retry": "3.272.0", + "@aws-sdk/middleware-serde": "3.272.0", + "@aws-sdk/middleware-stack": "3.272.0", + "@aws-sdk/middleware-user-agent": "3.272.0", + "@aws-sdk/node-config-provider": "3.272.0", + "@aws-sdk/node-http-handler": "3.272.0", + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/smithy-client": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/url-parser": "3.272.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.272.0", + "@aws-sdk/util-defaults-mode-node": "3.272.0", + "@aws-sdk/util-endpoints": "3.272.0", + "@aws-sdk/util-retry": "3.272.0", + "@aws-sdk/util-user-agent-browser": "3.272.0", + "@aws-sdk/util-user-agent-node": "3.272.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.272.0.tgz", + "integrity": "sha512-ECcXu3xoa1yggnGKMTh29eWNHiF/wC6r5Uqbla22eOOosyh0+Z6lkJ3JUSLOUKCkBXA4Cs/tJL9UDFBrKbSlvA==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.272.0", + "@aws-sdk/fetch-http-handler": "3.272.0", + "@aws-sdk/hash-node": "3.272.0", + "@aws-sdk/invalid-dependency": "3.272.0", + "@aws-sdk/middleware-content-length": "3.272.0", + "@aws-sdk/middleware-endpoint": "3.272.0", + "@aws-sdk/middleware-host-header": "3.272.0", + "@aws-sdk/middleware-logger": "3.272.0", + "@aws-sdk/middleware-recursion-detection": "3.272.0", + "@aws-sdk/middleware-retry": "3.272.0", + "@aws-sdk/middleware-serde": "3.272.0", + "@aws-sdk/middleware-stack": "3.272.0", + "@aws-sdk/middleware-user-agent": "3.272.0", + "@aws-sdk/node-config-provider": "3.272.0", + "@aws-sdk/node-http-handler": "3.272.0", + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/smithy-client": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/url-parser": "3.272.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.272.0", + "@aws-sdk/util-defaults-mode-node": "3.272.0", + "@aws-sdk/util-endpoints": "3.272.0", + "@aws-sdk/util-retry": "3.272.0", + "@aws-sdk/util-user-agent-browser": "3.272.0", + "@aws-sdk/util-user-agent-node": "3.272.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sts": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.272.0.tgz", + "integrity": "sha512-kigxCxURp3WupufGaL/LABMb7UQfzAQkKcj9royizL3ItJ0vw5kW/JFrPje5IW1mfLgdPF7PI9ShOjE0fCLTqA==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.272.0", + "@aws-sdk/credential-provider-node": "3.272.0", + "@aws-sdk/fetch-http-handler": "3.272.0", + "@aws-sdk/hash-node": "3.272.0", + "@aws-sdk/invalid-dependency": "3.272.0", + "@aws-sdk/middleware-content-length": "3.272.0", + "@aws-sdk/middleware-endpoint": "3.272.0", + "@aws-sdk/middleware-host-header": "3.272.0", + "@aws-sdk/middleware-logger": "3.272.0", + "@aws-sdk/middleware-recursion-detection": "3.272.0", + "@aws-sdk/middleware-retry": "3.272.0", + "@aws-sdk/middleware-sdk-sts": "3.272.0", + "@aws-sdk/middleware-serde": "3.272.0", + "@aws-sdk/middleware-signing": "3.272.0", + "@aws-sdk/middleware-stack": "3.272.0", + "@aws-sdk/middleware-user-agent": "3.272.0", + "@aws-sdk/node-config-provider": "3.272.0", + "@aws-sdk/node-http-handler": "3.272.0", + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/smithy-client": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/url-parser": "3.272.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.272.0", + "@aws-sdk/util-defaults-mode-node": "3.272.0", + "@aws-sdk/util-endpoints": "3.272.0", + "@aws-sdk/util-retry": "3.272.0", + "@aws-sdk/util-user-agent-browser": "3.272.0", + "@aws-sdk/util-user-agent-node": "3.272.0", + "@aws-sdk/util-utf8": "3.254.0", + "fast-xml-parser": "4.0.11", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/config-resolver": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.272.0.tgz", + "integrity": "sha512-Dr4CffRVNsOp3LRNdpvcH6XuSgXOSLblWliCy/5I86cNl567KVMxujVx6uPrdTXYs2h1rt3MNl6jQGnAiJeTbw==", + "dependencies": { + "@aws-sdk/signature-v4": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-config-provider": "3.208.0", + "@aws-sdk/util-middleware": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.272.0.tgz", + "integrity": "sha512-QI65NbLnKLYHyTYhXaaUrq6eVsCCrMUb05WDA7+TJkWkjXesovpjc8vUKgFiLSxmgKmb2uOhHNcDyObKMrYQFw==", + "dependencies": { + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-imds": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.272.0.tgz", + "integrity": "sha512-wwAfVY1jTFQEfxVfdYD5r5ieYGl+0g4nhekVxNMqE8E1JeRDd18OqiwAflzpgBIqxfqvCUkf+vl5JYyacMkNAQ==", + "dependencies": { + "@aws-sdk/node-config-provider": "3.272.0", + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/url-parser": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.272.0.tgz", + "integrity": "sha512-iE3CDzK5NcupHYjfYjBdY1JCy8NLEoRUsboEjG0i0gy3S3jVpDeVHX1dLVcL/slBFj6GiM7SoNV/UfKnJf3Gaw==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.272.0", + "@aws-sdk/credential-provider-imds": "3.272.0", + "@aws-sdk/credential-provider-process": "3.272.0", + "@aws-sdk/credential-provider-sso": "3.272.0", + "@aws-sdk/credential-provider-web-identity": "3.272.0", + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/shared-ini-file-loader": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.272.0.tgz", + "integrity": "sha512-FI8uvwM1IxiRSvbkdKv8DZG5vxU3ezaseTaB1fHWTxEUFb0pWIoHX9oeOKer9Fj31SOZTCNAaYFURbSRuZlm/w==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.272.0", + "@aws-sdk/credential-provider-imds": "3.272.0", + "@aws-sdk/credential-provider-ini": "3.272.0", + "@aws-sdk/credential-provider-process": "3.272.0", + "@aws-sdk/credential-provider-sso": "3.272.0", + "@aws-sdk/credential-provider-web-identity": "3.272.0", + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/shared-ini-file-loader": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.272.0.tgz", + "integrity": "sha512-hiCAjWWm2PeBFp5cjkxqyam/XADjiS+e7GzwC34TbZn3LisS0uoweLojj9tD11NnnUhyhbLteUvu5+rotOLwrg==", + "dependencies": { + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/shared-ini-file-loader": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.272.0.tgz", + "integrity": "sha512-hwYaulyiU/7chKKFecxCeo0ls6Dxs7h+5EtoYcJJGvfpvCncyOZF35t00OAsCd3Wo7HkhhgfpGdb6dmvCNQAZQ==", + "dependencies": { + "@aws-sdk/client-sso": "3.272.0", + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/shared-ini-file-loader": "3.272.0", + "@aws-sdk/token-providers": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.272.0.tgz", + "integrity": "sha512-ImrHMkcgneGa/HadHAQXPwOrX26sAKuB8qlMxZF/ZCM2B55u8deY+ZVkVuraeKb7YsahMGehPFOfRAF6mvFI5Q==", + "dependencies": { + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/fetch-http-handler": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.272.0.tgz", + "integrity": "sha512-1Qhm9e0RbS1Xf4CZqUbQyUMkDLd7GrsRXWIvm9b86/vgeV8/WnjO3CMue9D51nYgcyQORhYXv6uVjAYCWbUExA==", + "dependencies": { + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/querystring-builder": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-base64": "3.208.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/hash-node": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.272.0.tgz", + "integrity": "sha512-40dwND+iAm3VtPHPZu7/+CIdVJFk2s0cWZt1lOiMPMSXycSYJ45wMk7Lly3uoqRx0uWfFK5iT2OCv+fJi5jTng==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-buffer-from": "3.208.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/invalid-dependency": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.272.0.tgz", + "integrity": "sha512-ysW6wbjl1Y78txHUQ/Tldj2Rg1BI7rpMO9B9xAF6yAX3mQ7t6SUPQG/ewOGvH2208NBIl3qP5e/hDf0Q6r/1iw==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-content-length": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.272.0.tgz", + "integrity": "sha512-sAbDZSTNmLX+UTGwlUHJBWy0QGQkiClpHwVFXACon+aG0ySLNeRKEVYs6NCPYldw4cj6hveLUn50cX44ukHErw==", + "dependencies": { + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-endpoint": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.272.0.tgz", + "integrity": "sha512-Dk3JVjj7SxxoUKv3xGiOeBksvPtFhTDrVW75XJ98Ymv8gJH5L1sq4hIeJAHRKogGiRFq2J73mnZSlM9FVXEylg==", + "dependencies": { + "@aws-sdk/middleware-serde": "3.272.0", + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/signature-v4": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/url-parser": "3.272.0", + "@aws-sdk/util-config-provider": "3.208.0", + "@aws-sdk/util-middleware": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.272.0.tgz", + "integrity": "sha512-Q8K7bMMFZnioUXpxn57HIt4p+I63XaNAawMLIZ5B4F2piyukbQeM9q2XVKMGwqLvijHR8CyP5nHrtKqVuINogQ==", + "dependencies": { + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-logger": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.272.0.tgz", + "integrity": "sha512-u2SQ0hWrFwxbxxYMG5uMEgf01pQY5jauK/LYWgGIvuCmFgiyRQQP3oN7kkmsxnS9MWmNmhbyQguX2NY02s5e9w==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.272.0.tgz", + "integrity": "sha512-Gp/eKWeUWVNiiBdmUM2qLkBv+VLSJKoWAO+aKmyxxwjjmWhE0FrfA1NQ1a3g+NGMhRbAfQdaYswRAKsul70ISg==", + "dependencies": { + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-retry": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.272.0.tgz", + "integrity": "sha512-pCGvHM7C76VbO/dFerH+Vwf7tGv7j+e+eGrvhQ35mRghCtfIou/WMfTZlD1TNee93crrAQQVZKjtW3dMB3WCzg==", + "dependencies": { + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/service-error-classification": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-middleware": "3.272.0", + "@aws-sdk/util-retry": "3.272.0", + "tslib": "^2.3.1", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.272.0.tgz", + "integrity": "sha512-VvYPg7LrDIjUOWueSzo2wBzcNG7dw+cmzV6zAKaLxf0RC5jeAP4hE0OzDiiZfDrjNghEzgq/V+0NO+LewqYL9Q==", + "dependencies": { + "@aws-sdk/middleware-signing": "3.272.0", + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/signature-v4": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-serde": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.272.0.tgz", + "integrity": "sha512-kW1uOxgPSwtXPB5rm3QLdWomu42lkYpQL94tM1BjyFOWmBLO2lQhk5a7Dw6HkTozT9a+vxtscLChRa6KZe61Hw==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-signing": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.272.0.tgz", + "integrity": "sha512-4LChFK4VAR91X+dupqM8fQqYhFGE0G4Bf9rQlVTgGSbi2KUOmpqXzH0/WKE228nKuEhmH8+Qd2VPSAE2JcyAUA==", + "dependencies": { + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/signature-v4": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-middleware": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-stack": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.272.0.tgz", + "integrity": "sha512-jhwhknnPBGhfXAGV5GXUWfEhDFoP/DN8MPCO2yC5OAxyp6oVJ8lTPLkZYMTW5VL0c0eG44dXpF4Ib01V+PlDrQ==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.272.0.tgz", + "integrity": "sha512-Qy7/0fsDJxY5l0bEk7WKDfqb4Os/sCAgFR2zEvrhDtbkhYPf72ysvg/nRUTncmCbo8tOok4SJii2myk8KMfjjw==", + "dependencies": { + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/node-config-provider": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.272.0.tgz", + "integrity": "sha512-YYCIBh9g1EQo7hm2l22HX5Yr9RoPQ2RCvhzKvF1n1e8t1QH4iObQrYUtqHG4khcm64Cft8C5MwZmgzHbya5Z6Q==", + "dependencies": { + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/shared-ini-file-loader": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/node-http-handler": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.272.0.tgz", + "integrity": "sha512-VrW9PjhhngeyYp4yGYPe5S0vgZH6NwU3Po9xAgayUeE37Inr7LS1YteFMHdpgsUUeNXnh7d06CXqHo1XjtqOKA==", + "dependencies": { + "@aws-sdk/abort-controller": "3.272.0", + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/querystring-builder": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/property-provider": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.272.0.tgz", + "integrity": "sha512-V1pZTaH5eqpAt8O8CzbItHhOtzIfFuWymvwZFkAtwKuaHpnl7jjrTouV482zoq8AD/fF+VVSshwBKYA7bhidIw==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/protocol-http": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.272.0.tgz", + "integrity": "sha512-4JQ54v5Yn08jspNDeHo45CaSn1CvTJqS1Ywgr79eU6jBExtguOWv6LNtwVSBD9X37v88iqaxt8iu1Z3pZZAJeg==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/querystring-builder": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.272.0.tgz", + "integrity": "sha512-ndo++7GkdCj5tBXE6rGcITpSpZS4PfyV38wntGYAlj9liL1omk3bLZRY6uzqqkJpVHqbg2fD7O2qHNItzZgqhw==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-uri-escape": "3.201.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/querystring-parser": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.272.0.tgz", + "integrity": "sha512-5oS4/9n6N1LZW9tI3qq/0GnCuWoOXRgcHVB+AJLRBvDbEe+GI+C/xK1tKLsfpDNgsQJHc4IPQoIt4megyZ/1+A==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/service-error-classification": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.272.0.tgz", + "integrity": "sha512-REoltM1LK9byyIufLqx9znhSolPcHQgVHIA2S0zu5sdt5qER4OubkLAXuo4MBbisUTmh8VOOvIyUb5ijZCXq1w==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/shared-ini-file-loader": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.272.0.tgz", + "integrity": "sha512-lzFPohp5sy2XvwFjZIzLVCRpC0i5cwBiaXmFzXYQZJm6FSCszHO4ax+m9yrtlyVFF/2YPWl+/bzNthy4aJtseA==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/signature-v4": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.272.0.tgz", + "integrity": "sha512-pWxnHG1NqJWMwlhJ6NHNiUikOL00DHROmxah6krJPMPq4I3am2KY2Rs/8ouWhnEXKaHAv4EQhSALJ+7Mq5S4/A==", + "dependencies": { + "@aws-sdk/is-array-buffer": "3.201.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-hex-encoding": "3.201.0", + "@aws-sdk/util-middleware": "3.272.0", + "@aws-sdk/util-uri-escape": "3.201.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.272.0.tgz", + "integrity": "sha512-nir/ICA3saE303tS+DuJ803Uocn/d3hOpOl5DqI9RDjaZxbTXwv9uHP+by8sdyyfwCE8TFaYWoiSW5rLI+Qt0g==", + "dependencies": { + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/signature-v4": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-arn-parser": "3.208.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@aws-sdk/signature-v4-crt": "^3.118.0" + }, + "peerDependenciesMeta": { + "@aws-sdk/signature-v4-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/smithy-client": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.272.0.tgz", + "integrity": "sha512-pvdleJ3kaRvyRw2pIZnqL85ZlWBOZrPKmR9I69GCvlyrfdjRBhbSjIEZ+sdhZudw0vdHxq25AGoLUXhofVLf5Q==", + "dependencies": { + "@aws-sdk/middleware-stack": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/token-providers": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.272.0.tgz", + "integrity": "sha512-0GISJ4IKN2rXvbSddB775VjBGSKhYIGQnAdMqbvxi9LB6pSvVxcH9aIL28G0spiuL+dy3yGQZ8RlJPAyP9JW9A==", + "dependencies": { + "@aws-sdk/client-sso-oidc": "3.272.0", + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/shared-ini-file-loader": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/url-parser": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.272.0.tgz", + "integrity": "sha512-vX/Tx02PlnQ/Kgtf5TnrNDHPNbY+amLZjW0Z1d9vzAvSZhQ4i9Y18yxoRDIaDTCNVRDjdhV8iuctW+05PB5JtQ==", + "dependencies": { + "@aws-sdk/querystring-parser": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-defaults-mode-browser": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.272.0.tgz", + "integrity": "sha512-W8ZVJSZRuUBg8l0JEZzUc+9fKlthVp/cdE+pFeF8ArhZelOLCiaeCrMaZAeJusaFzIpa6cmOYQAjtSMVyrwRtg==", + "dependencies": { + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/types": "3.272.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-defaults-mode-node": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.272.0.tgz", + "integrity": "sha512-U0NTcbMw6KFk7uz/avBmfxQSTREEiX6JDMH68oN/3ux4AICd2I4jHyxnloSWGuiER1FxZf1dEJ8ZTwy8Ibl21Q==", + "dependencies": { + "@aws-sdk/config-resolver": "3.272.0", + "@aws-sdk/credential-provider-imds": "3.272.0", + "@aws-sdk/node-config-provider": "3.272.0", + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-endpoints": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.272.0.tgz", + "integrity": "sha512-c4MPUaJt2G6gGpoiwIOqDfUa98c1J63RpYvf/spQEKOtC/tF5Gfqlxuq8FnAl5lHnrqj1B9ZXLLxFhHtDR0IiQ==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-middleware": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.272.0.tgz", + "integrity": "sha512-Abw8m30arbwxqmeMMha5J11ESpHUNmCeSqSzE8/C4B8jZQtHY4kq7f+upzcNIQ11lsd+uzBEzNG3+dDRi0XOJQ==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-retry": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.272.0.tgz", + "integrity": "sha512-Ngha5414LR4gRHURVKC9ZYXsEJhMkm+SJ+44wlzOhavglfdcKKPUsibz5cKY1jpUV7oKECwaxHWpBB8r6h+hOg==", + "dependencies": { + "@aws-sdk/service-error-classification": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.272.0.tgz", + "integrity": "sha512-Lp5QX5bH6uuwBlIdr7w7OAcAI50ttyskb++yUr9i+SPvj6RI2dsfIBaK4mDg1qUdM5LeUdvIyqwj3XHjFKAAvA==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.272.0.tgz", + "integrity": "sha512-ljK+R3l+Q1LIHrcR+Knhk0rmcSkfFadZ8V+crEGpABf/QUQRg7NkZMsoe814tfBO5F7tMxo8wwwSdaVNNHtoRA==", + "dependencies": { + "@aws-sdk/node-config-provider": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-waiter": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.272.0.tgz", + "integrity": "sha512-N25/XsJ2wkPh1EgkFyb/GRgfHDityScfD49Hk1AwJWpfetzgkcEtWdeW4IuPymXlSKhrm5L+SBw49USxo9kBag==", "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.264.0", - "@aws-sdk/config-resolver": "3.259.0", - "@aws-sdk/credential-provider-node": "3.264.0", - "@aws-sdk/fetch-http-handler": "3.257.0", - "@aws-sdk/hash-node": "3.257.0", - "@aws-sdk/invalid-dependency": "3.257.0", - "@aws-sdk/middleware-content-length": "3.257.0", - "@aws-sdk/middleware-endpoint": "3.264.0", - "@aws-sdk/middleware-host-header": "3.257.0", - "@aws-sdk/middleware-logger": "3.257.0", - "@aws-sdk/middleware-recursion-detection": "3.257.0", - "@aws-sdk/middleware-retry": "3.259.0", - "@aws-sdk/middleware-serde": "3.257.0", - "@aws-sdk/middleware-signing": "3.257.0", - "@aws-sdk/middleware-stack": "3.257.0", - "@aws-sdk/middleware-user-agent": "3.257.0", - "@aws-sdk/node-config-provider": "3.259.0", - "@aws-sdk/node-http-handler": "3.257.0", - "@aws-sdk/protocol-http": "3.257.0", - "@aws-sdk/signature-v4-multi-region": "3.264.0", - "@aws-sdk/smithy-client": "3.261.0", - "@aws-sdk/types": "3.257.0", - "@aws-sdk/url-parser": "3.257.0", - "@aws-sdk/util-base64": "3.208.0", - "@aws-sdk/util-body-length-browser": "3.188.0", - "@aws-sdk/util-body-length-node": "3.208.0", - "@aws-sdk/util-defaults-mode-browser": "3.261.0", - "@aws-sdk/util-defaults-mode-node": "3.261.0", - "@aws-sdk/util-endpoints": "3.257.0", - "@aws-sdk/util-retry": "3.257.0", - "@aws-sdk/util-user-agent-browser": "3.257.0", - "@aws-sdk/util-user-agent-node": "3.259.0", - "@aws-sdk/util-utf8": "3.254.0", + "@aws-sdk/abort-controller": "3.272.0", + "@aws-sdk/types": "3.272.0", "tslib": "^2.3.1" }, "engines": { @@ -609,6 +1492,123 @@ "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/eventstream-codec": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-codec/-/eventstream-codec-3.272.0.tgz", + "integrity": "sha512-HYMzglDnqUhvx3u9MdzZ/OjLuavaaH9zF9XMXRuv7bdsN9AAi3/0he0FEx84ZXNXSAZCebLwXJYf0ZrN6g37QA==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-hex-encoding": "3.201.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/eventstream-codec/node_modules/@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-serde-browser": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.272.0.tgz", + "integrity": "sha512-mE1+mevS+KVKpnTLi5FytsBwAK1kWZ92ERtAiElp58SKE1OpfSg8lEY8VI6JKGlueN540Qq3LeIgA2/HJOcK/w==", + "dependencies": { + "@aws-sdk/eventstream-serde-universal": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-serde-browser/node_modules/@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-serde-config-resolver": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.272.0.tgz", + "integrity": "sha512-e47BhGBvx+me53cvYx+47ml5KNDj7XoTth80krHlyLrimFELE1ij4tHSKR/XzilKKH1uIWmJQdlAi29129ZX5w==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-serde-config-resolver/node_modules/@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-serde-node": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.272.0.tgz", + "integrity": "sha512-uto8y4FoZugWnczM1TKwv6oV2Po2Jgrp+W1Ws3baRQ4Lan+QpFx3Tps1N5rNzQ+7Uz0xT1BhbSNPAkKs22/jtg==", + "dependencies": { + "@aws-sdk/eventstream-serde-universal": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-serde-node/node_modules/@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-serde-universal": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.272.0.tgz", + "integrity": "sha512-E9jlt8tzDcEMoNlgv3+01jGPJPHmbmw2NsajZhB4axVMpEy247JV6qvCZe+5R+EGy96t0pfsO2naViEB4Va47g==", + "dependencies": { + "@aws-sdk/eventstream-codec": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-serde-universal/node_modules/@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@aws-sdk/fetch-http-handler": { "version": "3.257.0", "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.257.0.tgz", @@ -621,6 +1621,28 @@ "tslib": "^2.3.1" } }, + "node_modules/@aws-sdk/hash-blob-browser": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.272.0.tgz", + "integrity": "sha512-IRCIMG42fXcdD92C8Sb0CQI8D/msxDwHGAIqP94iGhVEnKX2egyx5J8lmPY4gEky5UzyMMaH7cayBv89ZMEBmQ==", + "dependencies": { + "@aws-sdk/chunked-blob-reader": "3.188.0", + "@aws-sdk/chunked-blob-reader-native": "3.208.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/hash-blob-browser/node_modules/@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@aws-sdk/hash-node": { "version": "3.257.0", "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.257.0.tgz", @@ -635,6 +1657,30 @@ "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/hash-stream-node": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-stream-node/-/hash-stream-node-3.272.0.tgz", + "integrity": "sha512-mWwQWdfVYoR6PXRLkHP6pC1cghZMg0ULuOAm70EtTO2YXiyLlMIDb+VD4RRbjh3hNkzh+y/W47wSUJthGBM1kg==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/hash-stream-node/node_modules/@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@aws-sdk/invalid-dependency": { "version": "3.257.0", "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.257.0.tgz", @@ -655,6 +1701,65 @@ "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/md5-js": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/md5-js/-/md5-js-3.272.0.tgz", + "integrity": "sha512-/GK32mgAarhn/F0xCeBKbYfLRof3tOCNrg8mAGNz9Di8E1/qMOnX/OXUGag0lsvNZ6DTjdjln29t4e8iKmOVqA==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/md5-js/node_modules/@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.272.0.tgz", + "integrity": "sha512-523T6JXfjsY9uSgMusa6myCccRv2TWyUSjzMx/0aUHfHRacJSunfPtSNX1kfYxXWn/ByWhaieHFBPehVI6wg1A==", + "dependencies": { + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-arn-parser": "3.208.0", + "@aws-sdk/util-config-provider": "3.208.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/@aws-sdk/protocol-http": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.272.0.tgz", + "integrity": "sha512-4JQ54v5Yn08jspNDeHo45CaSn1CvTJqS1Ywgr79eU6jBExtguOWv6LNtwVSBD9X37v88iqaxt8iu1Z3pZZAJeg==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@aws-sdk/middleware-content-length": { "version": "3.257.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.257.0.tgz", @@ -701,6 +1806,82 @@ "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.272.0.tgz", + "integrity": "sha512-TNx61LCZUKp/yZqcb38qb4tU3lbhKaI9zn2FQ+fpKzUSTI3H6E5aw42wHaq2LEacYlyK3b5Wg1R0sKR+vsUutw==", + "dependencies": { + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue/node_modules/@aws-sdk/protocol-http": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.272.0.tgz", + "integrity": "sha512-4JQ54v5Yn08jspNDeHo45CaSn1CvTJqS1Ywgr79eU6jBExtguOWv6LNtwVSBD9X37v88iqaxt8iu1Z3pZZAJeg==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue/node_modules/@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.272.0.tgz", + "integrity": "sha512-dc/tMiYM4wTZpjXf2PSQCFD4SQI5wyVwY5SoBgcB3W2XLq1SzXahiDnnUSn2EzDTKPIrmQmYyDFRpFEPo0sP/g==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@aws-crypto/crc32c": "3.0.0", + "@aws-sdk/is-array-buffer": "3.201.0", + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@aws-sdk/protocol-http": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.272.0.tgz", + "integrity": "sha512-4JQ54v5Yn08jspNDeHo45CaSn1CvTJqS1Ywgr79eU6jBExtguOWv6LNtwVSBD9X37v88iqaxt8iu1Z3pZZAJeg==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@aws-sdk/middleware-host-header": { "version": "3.257.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.257.0.tgz", @@ -714,6 +1895,29 @@ "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.272.0.tgz", + "integrity": "sha512-tROQ1DM9djxfXmXPTT0XietrUt6y6QEHShPI9rQMstjXYiaHBVXRveuRLcLAKwl4nXIrgmnIU7ygyj2ZyD8gcA==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint/node_modules/@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@aws-sdk/middleware-logger": { "version": "3.257.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.257.0.tgz", @@ -756,6 +1960,43 @@ "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.272.0.tgz", + "integrity": "sha512-uMvoLePkyP54b9BckMELlDnFh0SGPAfTkBwiH/FC79K7noGLA5A4KgqKObtB9LPYHkPfm1WLqIgdaE6gS1BlFQ==", + "dependencies": { + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-arn-parser": "3.208.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@aws-sdk/protocol-http": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.272.0.tgz", + "integrity": "sha512-4JQ54v5Yn08jspNDeHo45CaSn1CvTJqS1Ywgr79eU6jBExtguOWv6LNtwVSBD9X37v88iqaxt8iu1Z3pZZAJeg==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@aws-sdk/middleware-sdk-sts": { "version": "3.257.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.257.0.tgz", @@ -800,6 +2041,29 @@ "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.272.0.tgz", + "integrity": "sha512-WDPcNPkscTmJUzdAvfx8p+YuUn2YR9ocmZA7yYUJ5kA94MyGH6Rbjp8tleWwQvah/HweeCQrYUzJk9wsH64LPA==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec/node_modules/@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@aws-sdk/middleware-stack": { "version": "3.257.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.257.0.tgz", @@ -1174,6 +2438,144 @@ "node": ">= 14.0.0" } }, + "node_modules/@aws-sdk/util-stream-browser": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-stream-browser/-/util-stream-browser-3.272.0.tgz", + "integrity": "sha512-vD514YffKxBjV/erjUNgkXcb/mzXAz3uk/KUFMXsodo3cA4Z8WxL4P0p1O09FVuJlNa0gZ8mhFPNzNOekh31GA==", + "dependencies": { + "@aws-sdk/fetch-http-handler": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-hex-encoding": "3.201.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/util-stream-browser/node_modules/@aws-sdk/fetch-http-handler": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.272.0.tgz", + "integrity": "sha512-1Qhm9e0RbS1Xf4CZqUbQyUMkDLd7GrsRXWIvm9b86/vgeV8/WnjO3CMue9D51nYgcyQORhYXv6uVjAYCWbUExA==", + "dependencies": { + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/querystring-builder": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-base64": "3.208.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/util-stream-browser/node_modules/@aws-sdk/protocol-http": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.272.0.tgz", + "integrity": "sha512-4JQ54v5Yn08jspNDeHo45CaSn1CvTJqS1Ywgr79eU6jBExtguOWv6LNtwVSBD9X37v88iqaxt8iu1Z3pZZAJeg==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-stream-browser/node_modules/@aws-sdk/querystring-builder": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.272.0.tgz", + "integrity": "sha512-ndo++7GkdCj5tBXE6rGcITpSpZS4PfyV38wntGYAlj9liL1omk3bLZRY6uzqqkJpVHqbg2fD7O2qHNItzZgqhw==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-uri-escape": "3.201.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-stream-browser/node_modules/@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-stream-node": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-stream-node/-/util-stream-node-3.272.0.tgz", + "integrity": "sha512-s7dGeM1ImzihqBKgrpaeZokLnPUk3H4Et5oiM+t+TpRxotXTecJPyuD0p76HRgO8KSXfVT5Nxw/FoHXqj1fiMg==", + "dependencies": { + "@aws-sdk/node-http-handler": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-buffer-from": "3.208.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-stream-node/node_modules/@aws-sdk/abort-controller": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.272.0.tgz", + "integrity": "sha512-s2TV3phapcTwZNr4qLxbfuQuE9ZMP4RoJdkvRRCkKdm6jslsWLJf2Zlcxti/23hOlINUMYv2iXE2pftIgWGdpg==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-stream-node/node_modules/@aws-sdk/node-http-handler": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.272.0.tgz", + "integrity": "sha512-VrW9PjhhngeyYp4yGYPe5S0vgZH6NwU3Po9xAgayUeE37Inr7LS1YteFMHdpgsUUeNXnh7d06CXqHo1XjtqOKA==", + "dependencies": { + "@aws-sdk/abort-controller": "3.272.0", + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/querystring-builder": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-stream-node/node_modules/@aws-sdk/protocol-http": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.272.0.tgz", + "integrity": "sha512-4JQ54v5Yn08jspNDeHo45CaSn1CvTJqS1Ywgr79eU6jBExtguOWv6LNtwVSBD9X37v88iqaxt8iu1Z3pZZAJeg==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-stream-node/node_modules/@aws-sdk/querystring-builder": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.272.0.tgz", + "integrity": "sha512-ndo++7GkdCj5tBXE6rGcITpSpZS4PfyV38wntGYAlj9liL1omk3bLZRY6uzqqkJpVHqbg2fD7O2qHNItzZgqhw==", + "dependencies": { + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-uri-escape": "3.201.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-stream-node/node_modules/@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@aws-sdk/util-uri-escape": { "version": "3.201.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz", @@ -1249,6 +2651,17 @@ "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.201.0.tgz", + "integrity": "sha512-brRdB1wwMgjWEnOQsv7zSUhIQuh7DEicrfslAqHop4S4FtSI3GQAShpQqgOpMTNFYcpaWKmE/Y1MJmNY7xLCnw==", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", @@ -6539,6 +7952,40 @@ "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v5/-/asset-node-proxy-agent-v5-2.0.45.tgz", "integrity": "sha512-Ys98Zu4tMkDEr2jChe7oAbB/u857QPEMKsAKbNaKJtODpupQOdWIcKw0sEAQtamNvTrNRSEaLGEgMEpxKvcHKA==" }, + "@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "requires": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/crc32c": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", + "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", + "requires": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, "@aws-crypto/ie11-detection": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", @@ -6554,6 +8001,27 @@ } } }, + "@aws-crypto/sha1-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", + "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", + "requires": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, "@aws-crypto/sha256-browser": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", @@ -6634,6 +8102,23 @@ "tslib": "^2.3.1" } }, + "@aws-sdk/chunked-blob-reader": { + "version": "3.188.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.188.0.tgz", + "integrity": "sha512-zkPRFZZPL3eH+kH86LDYYXImiClA1/sW60zYOjse9Pgka+eDJlvBN6hcYxwDEKjcwATYiSRR1aVQHcfCinlGXg==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/chunked-blob-reader-native": { + "version": "3.208.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader-native/-/chunked-blob-reader-native-3.208.0.tgz", + "integrity": "sha512-JeOZ95PW+fJ6bbuqPySYqLqHk1n4+4ueEEraJsiUrPBV0S1ZtyvOGHcnGztKUjr2PYNaiexmpWuvUve9K12HRA==", + "requires": { + "@aws-sdk/util-base64": "3.208.0", + "tslib": "^2.3.1" + } + }, "@aws-sdk/client-dynamodb": { "version": "3.264.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.264.0.tgz", @@ -6722,6 +8207,673 @@ "tslib": "^2.3.1" } }, + "@aws-sdk/client-s3": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.272.0.tgz", + "integrity": "sha512-KxlVhTHfmcm3HlAP5+vY1cuQt60AaYOISp1ccYOPsww7Ly7fbDnbov0AV9bcwlLLVcfZFWQYJqH+Gvk2SpyXFQ==", + "requires": { + "@aws-crypto/sha1-browser": "3.0.0", + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.272.0", + "@aws-sdk/config-resolver": "3.272.0", + "@aws-sdk/credential-provider-node": "3.272.0", + "@aws-sdk/eventstream-serde-browser": "3.272.0", + "@aws-sdk/eventstream-serde-config-resolver": "3.272.0", + "@aws-sdk/eventstream-serde-node": "3.272.0", + "@aws-sdk/fetch-http-handler": "3.272.0", + "@aws-sdk/hash-blob-browser": "3.272.0", + "@aws-sdk/hash-node": "3.272.0", + "@aws-sdk/hash-stream-node": "3.272.0", + "@aws-sdk/invalid-dependency": "3.272.0", + "@aws-sdk/md5-js": "3.272.0", + "@aws-sdk/middleware-bucket-endpoint": "3.272.0", + "@aws-sdk/middleware-content-length": "3.272.0", + "@aws-sdk/middleware-endpoint": "3.272.0", + "@aws-sdk/middleware-expect-continue": "3.272.0", + "@aws-sdk/middleware-flexible-checksums": "3.272.0", + "@aws-sdk/middleware-host-header": "3.272.0", + "@aws-sdk/middleware-location-constraint": "3.272.0", + "@aws-sdk/middleware-logger": "3.272.0", + "@aws-sdk/middleware-recursion-detection": "3.272.0", + "@aws-sdk/middleware-retry": "3.272.0", + "@aws-sdk/middleware-sdk-s3": "3.272.0", + "@aws-sdk/middleware-serde": "3.272.0", + "@aws-sdk/middleware-signing": "3.272.0", + "@aws-sdk/middleware-ssec": "3.272.0", + "@aws-sdk/middleware-stack": "3.272.0", + "@aws-sdk/middleware-user-agent": "3.272.0", + "@aws-sdk/node-config-provider": "3.272.0", + "@aws-sdk/node-http-handler": "3.272.0", + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/signature-v4-multi-region": "3.272.0", + "@aws-sdk/smithy-client": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/url-parser": "3.272.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.272.0", + "@aws-sdk/util-defaults-mode-node": "3.272.0", + "@aws-sdk/util-endpoints": "3.272.0", + "@aws-sdk/util-retry": "3.272.0", + "@aws-sdk/util-stream-browser": "3.272.0", + "@aws-sdk/util-stream-node": "3.272.0", + "@aws-sdk/util-user-agent-browser": "3.272.0", + "@aws-sdk/util-user-agent-node": "3.272.0", + "@aws-sdk/util-utf8": "3.254.0", + "@aws-sdk/util-waiter": "3.272.0", + "@aws-sdk/xml-builder": "3.201.0", + "fast-xml-parser": "4.0.11", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/abort-controller": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.272.0.tgz", + "integrity": "sha512-s2TV3phapcTwZNr4qLxbfuQuE9ZMP4RoJdkvRRCkKdm6jslsWLJf2Zlcxti/23hOlINUMYv2iXE2pftIgWGdpg==", + "requires": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/client-sso": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.272.0.tgz", + "integrity": "sha512-xn9a0IGONwQIARmngThoRhF1lLGjHAD67sUaShgIMaIMc6ipVYN6alWG1VuUpoUQ6iiwMEt0CHdfCyLyUV/fTA==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.272.0", + "@aws-sdk/fetch-http-handler": "3.272.0", + "@aws-sdk/hash-node": "3.272.0", + "@aws-sdk/invalid-dependency": "3.272.0", + "@aws-sdk/middleware-content-length": "3.272.0", + "@aws-sdk/middleware-endpoint": "3.272.0", + "@aws-sdk/middleware-host-header": "3.272.0", + "@aws-sdk/middleware-logger": "3.272.0", + "@aws-sdk/middleware-recursion-detection": "3.272.0", + "@aws-sdk/middleware-retry": "3.272.0", + "@aws-sdk/middleware-serde": "3.272.0", + "@aws-sdk/middleware-stack": "3.272.0", + "@aws-sdk/middleware-user-agent": "3.272.0", + "@aws-sdk/node-config-provider": "3.272.0", + "@aws-sdk/node-http-handler": "3.272.0", + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/smithy-client": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/url-parser": "3.272.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.272.0", + "@aws-sdk/util-defaults-mode-node": "3.272.0", + "@aws-sdk/util-endpoints": "3.272.0", + "@aws-sdk/util-retry": "3.272.0", + "@aws-sdk/util-user-agent-browser": "3.272.0", + "@aws-sdk/util-user-agent-node": "3.272.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/client-sso-oidc": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.272.0.tgz", + "integrity": "sha512-ECcXu3xoa1yggnGKMTh29eWNHiF/wC6r5Uqbla22eOOosyh0+Z6lkJ3JUSLOUKCkBXA4Cs/tJL9UDFBrKbSlvA==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.272.0", + "@aws-sdk/fetch-http-handler": "3.272.0", + "@aws-sdk/hash-node": "3.272.0", + "@aws-sdk/invalid-dependency": "3.272.0", + "@aws-sdk/middleware-content-length": "3.272.0", + "@aws-sdk/middleware-endpoint": "3.272.0", + "@aws-sdk/middleware-host-header": "3.272.0", + "@aws-sdk/middleware-logger": "3.272.0", + "@aws-sdk/middleware-recursion-detection": "3.272.0", + "@aws-sdk/middleware-retry": "3.272.0", + "@aws-sdk/middleware-serde": "3.272.0", + "@aws-sdk/middleware-stack": "3.272.0", + "@aws-sdk/middleware-user-agent": "3.272.0", + "@aws-sdk/node-config-provider": "3.272.0", + "@aws-sdk/node-http-handler": "3.272.0", + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/smithy-client": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/url-parser": "3.272.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.272.0", + "@aws-sdk/util-defaults-mode-node": "3.272.0", + "@aws-sdk/util-endpoints": "3.272.0", + "@aws-sdk/util-retry": "3.272.0", + "@aws-sdk/util-user-agent-browser": "3.272.0", + "@aws-sdk/util-user-agent-node": "3.272.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/client-sts": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.272.0.tgz", + "integrity": "sha512-kigxCxURp3WupufGaL/LABMb7UQfzAQkKcj9royizL3ItJ0vw5kW/JFrPje5IW1mfLgdPF7PI9ShOjE0fCLTqA==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/config-resolver": "3.272.0", + "@aws-sdk/credential-provider-node": "3.272.0", + "@aws-sdk/fetch-http-handler": "3.272.0", + "@aws-sdk/hash-node": "3.272.0", + "@aws-sdk/invalid-dependency": "3.272.0", + "@aws-sdk/middleware-content-length": "3.272.0", + "@aws-sdk/middleware-endpoint": "3.272.0", + "@aws-sdk/middleware-host-header": "3.272.0", + "@aws-sdk/middleware-logger": "3.272.0", + "@aws-sdk/middleware-recursion-detection": "3.272.0", + "@aws-sdk/middleware-retry": "3.272.0", + "@aws-sdk/middleware-sdk-sts": "3.272.0", + "@aws-sdk/middleware-serde": "3.272.0", + "@aws-sdk/middleware-signing": "3.272.0", + "@aws-sdk/middleware-stack": "3.272.0", + "@aws-sdk/middleware-user-agent": "3.272.0", + "@aws-sdk/node-config-provider": "3.272.0", + "@aws-sdk/node-http-handler": "3.272.0", + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/smithy-client": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/url-parser": "3.272.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-body-length-browser": "3.188.0", + "@aws-sdk/util-body-length-node": "3.208.0", + "@aws-sdk/util-defaults-mode-browser": "3.272.0", + "@aws-sdk/util-defaults-mode-node": "3.272.0", + "@aws-sdk/util-endpoints": "3.272.0", + "@aws-sdk/util-retry": "3.272.0", + "@aws-sdk/util-user-agent-browser": "3.272.0", + "@aws-sdk/util-user-agent-node": "3.272.0", + "@aws-sdk/util-utf8": "3.254.0", + "fast-xml-parser": "4.0.11", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/config-resolver": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.272.0.tgz", + "integrity": "sha512-Dr4CffRVNsOp3LRNdpvcH6XuSgXOSLblWliCy/5I86cNl567KVMxujVx6uPrdTXYs2h1rt3MNl6jQGnAiJeTbw==", + "requires": { + "@aws-sdk/signature-v4": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-config-provider": "3.208.0", + "@aws-sdk/util-middleware": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-env": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.272.0.tgz", + "integrity": "sha512-QI65NbLnKLYHyTYhXaaUrq6eVsCCrMUb05WDA7+TJkWkjXesovpjc8vUKgFiLSxmgKmb2uOhHNcDyObKMrYQFw==", + "requires": { + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-imds": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.272.0.tgz", + "integrity": "sha512-wwAfVY1jTFQEfxVfdYD5r5ieYGl+0g4nhekVxNMqE8E1JeRDd18OqiwAflzpgBIqxfqvCUkf+vl5JYyacMkNAQ==", + "requires": { + "@aws-sdk/node-config-provider": "3.272.0", + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/url-parser": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-ini": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.272.0.tgz", + "integrity": "sha512-iE3CDzK5NcupHYjfYjBdY1JCy8NLEoRUsboEjG0i0gy3S3jVpDeVHX1dLVcL/slBFj6GiM7SoNV/UfKnJf3Gaw==", + "requires": { + "@aws-sdk/credential-provider-env": "3.272.0", + "@aws-sdk/credential-provider-imds": "3.272.0", + "@aws-sdk/credential-provider-process": "3.272.0", + "@aws-sdk/credential-provider-sso": "3.272.0", + "@aws-sdk/credential-provider-web-identity": "3.272.0", + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/shared-ini-file-loader": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-node": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.272.0.tgz", + "integrity": "sha512-FI8uvwM1IxiRSvbkdKv8DZG5vxU3ezaseTaB1fHWTxEUFb0pWIoHX9oeOKer9Fj31SOZTCNAaYFURbSRuZlm/w==", + "requires": { + "@aws-sdk/credential-provider-env": "3.272.0", + "@aws-sdk/credential-provider-imds": "3.272.0", + "@aws-sdk/credential-provider-ini": "3.272.0", + "@aws-sdk/credential-provider-process": "3.272.0", + "@aws-sdk/credential-provider-sso": "3.272.0", + "@aws-sdk/credential-provider-web-identity": "3.272.0", + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/shared-ini-file-loader": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-process": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.272.0.tgz", + "integrity": "sha512-hiCAjWWm2PeBFp5cjkxqyam/XADjiS+e7GzwC34TbZn3LisS0uoweLojj9tD11NnnUhyhbLteUvu5+rotOLwrg==", + "requires": { + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/shared-ini-file-loader": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-sso": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.272.0.tgz", + "integrity": "sha512-hwYaulyiU/7chKKFecxCeo0ls6Dxs7h+5EtoYcJJGvfpvCncyOZF35t00OAsCd3Wo7HkhhgfpGdb6dmvCNQAZQ==", + "requires": { + "@aws-sdk/client-sso": "3.272.0", + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/shared-ini-file-loader": "3.272.0", + "@aws-sdk/token-providers": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/credential-provider-web-identity": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.272.0.tgz", + "integrity": "sha512-ImrHMkcgneGa/HadHAQXPwOrX26sAKuB8qlMxZF/ZCM2B55u8deY+ZVkVuraeKb7YsahMGehPFOfRAF6mvFI5Q==", + "requires": { + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/fetch-http-handler": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.272.0.tgz", + "integrity": "sha512-1Qhm9e0RbS1Xf4CZqUbQyUMkDLd7GrsRXWIvm9b86/vgeV8/WnjO3CMue9D51nYgcyQORhYXv6uVjAYCWbUExA==", + "requires": { + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/querystring-builder": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-base64": "3.208.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/hash-node": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.272.0.tgz", + "integrity": "sha512-40dwND+iAm3VtPHPZu7/+CIdVJFk2s0cWZt1lOiMPMSXycSYJ45wMk7Lly3uoqRx0uWfFK5iT2OCv+fJi5jTng==", + "requires": { + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-buffer-from": "3.208.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/invalid-dependency": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.272.0.tgz", + "integrity": "sha512-ysW6wbjl1Y78txHUQ/Tldj2Rg1BI7rpMO9B9xAF6yAX3mQ7t6SUPQG/ewOGvH2208NBIl3qP5e/hDf0Q6r/1iw==", + "requires": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-content-length": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.272.0.tgz", + "integrity": "sha512-sAbDZSTNmLX+UTGwlUHJBWy0QGQkiClpHwVFXACon+aG0ySLNeRKEVYs6NCPYldw4cj6hveLUn50cX44ukHErw==", + "requires": { + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-endpoint": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.272.0.tgz", + "integrity": "sha512-Dk3JVjj7SxxoUKv3xGiOeBksvPtFhTDrVW75XJ98Ymv8gJH5L1sq4hIeJAHRKogGiRFq2J73mnZSlM9FVXEylg==", + "requires": { + "@aws-sdk/middleware-serde": "3.272.0", + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/signature-v4": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/url-parser": "3.272.0", + "@aws-sdk/util-config-provider": "3.208.0", + "@aws-sdk/util-middleware": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-host-header": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.272.0.tgz", + "integrity": "sha512-Q8K7bMMFZnioUXpxn57HIt4p+I63XaNAawMLIZ5B4F2piyukbQeM9q2XVKMGwqLvijHR8CyP5nHrtKqVuINogQ==", + "requires": { + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-logger": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.272.0.tgz", + "integrity": "sha512-u2SQ0hWrFwxbxxYMG5uMEgf01pQY5jauK/LYWgGIvuCmFgiyRQQP3oN7kkmsxnS9MWmNmhbyQguX2NY02s5e9w==", + "requires": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-recursion-detection": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.272.0.tgz", + "integrity": "sha512-Gp/eKWeUWVNiiBdmUM2qLkBv+VLSJKoWAO+aKmyxxwjjmWhE0FrfA1NQ1a3g+NGMhRbAfQdaYswRAKsul70ISg==", + "requires": { + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-retry": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.272.0.tgz", + "integrity": "sha512-pCGvHM7C76VbO/dFerH+Vwf7tGv7j+e+eGrvhQ35mRghCtfIou/WMfTZlD1TNee93crrAQQVZKjtW3dMB3WCzg==", + "requires": { + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/service-error-classification": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-middleware": "3.272.0", + "@aws-sdk/util-retry": "3.272.0", + "tslib": "^2.3.1", + "uuid": "^8.3.2" + } + }, + "@aws-sdk/middleware-sdk-sts": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.272.0.tgz", + "integrity": "sha512-VvYPg7LrDIjUOWueSzo2wBzcNG7dw+cmzV6zAKaLxf0RC5jeAP4hE0OzDiiZfDrjNghEzgq/V+0NO+LewqYL9Q==", + "requires": { + "@aws-sdk/middleware-signing": "3.272.0", + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/signature-v4": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-serde": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.272.0.tgz", + "integrity": "sha512-kW1uOxgPSwtXPB5rm3QLdWomu42lkYpQL94tM1BjyFOWmBLO2lQhk5a7Dw6HkTozT9a+vxtscLChRa6KZe61Hw==", + "requires": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-signing": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.272.0.tgz", + "integrity": "sha512-4LChFK4VAR91X+dupqM8fQqYhFGE0G4Bf9rQlVTgGSbi2KUOmpqXzH0/WKE228nKuEhmH8+Qd2VPSAE2JcyAUA==", + "requires": { + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/signature-v4": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-middleware": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-stack": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.272.0.tgz", + "integrity": "sha512-jhwhknnPBGhfXAGV5GXUWfEhDFoP/DN8MPCO2yC5OAxyp6oVJ8lTPLkZYMTW5VL0c0eG44dXpF4Ib01V+PlDrQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/middleware-user-agent": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.272.0.tgz", + "integrity": "sha512-Qy7/0fsDJxY5l0bEk7WKDfqb4Os/sCAgFR2zEvrhDtbkhYPf72ysvg/nRUTncmCbo8tOok4SJii2myk8KMfjjw==", + "requires": { + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/node-config-provider": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.272.0.tgz", + "integrity": "sha512-YYCIBh9g1EQo7hm2l22HX5Yr9RoPQ2RCvhzKvF1n1e8t1QH4iObQrYUtqHG4khcm64Cft8C5MwZmgzHbya5Z6Q==", + "requires": { + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/shared-ini-file-loader": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/node-http-handler": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.272.0.tgz", + "integrity": "sha512-VrW9PjhhngeyYp4yGYPe5S0vgZH6NwU3Po9xAgayUeE37Inr7LS1YteFMHdpgsUUeNXnh7d06CXqHo1XjtqOKA==", + "requires": { + "@aws-sdk/abort-controller": "3.272.0", + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/querystring-builder": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/property-provider": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.272.0.tgz", + "integrity": "sha512-V1pZTaH5eqpAt8O8CzbItHhOtzIfFuWymvwZFkAtwKuaHpnl7jjrTouV482zoq8AD/fF+VVSshwBKYA7bhidIw==", + "requires": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/protocol-http": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.272.0.tgz", + "integrity": "sha512-4JQ54v5Yn08jspNDeHo45CaSn1CvTJqS1Ywgr79eU6jBExtguOWv6LNtwVSBD9X37v88iqaxt8iu1Z3pZZAJeg==", + "requires": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/querystring-builder": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.272.0.tgz", + "integrity": "sha512-ndo++7GkdCj5tBXE6rGcITpSpZS4PfyV38wntGYAlj9liL1omk3bLZRY6uzqqkJpVHqbg2fD7O2qHNItzZgqhw==", + "requires": { + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-uri-escape": "3.201.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/querystring-parser": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.272.0.tgz", + "integrity": "sha512-5oS4/9n6N1LZW9tI3qq/0GnCuWoOXRgcHVB+AJLRBvDbEe+GI+C/xK1tKLsfpDNgsQJHc4IPQoIt4megyZ/1+A==", + "requires": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/service-error-classification": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.272.0.tgz", + "integrity": "sha512-REoltM1LK9byyIufLqx9znhSolPcHQgVHIA2S0zu5sdt5qER4OubkLAXuo4MBbisUTmh8VOOvIyUb5ijZCXq1w==" + }, + "@aws-sdk/shared-ini-file-loader": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.272.0.tgz", + "integrity": "sha512-lzFPohp5sy2XvwFjZIzLVCRpC0i5cwBiaXmFzXYQZJm6FSCszHO4ax+m9yrtlyVFF/2YPWl+/bzNthy4aJtseA==", + "requires": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/signature-v4": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.272.0.tgz", + "integrity": "sha512-pWxnHG1NqJWMwlhJ6NHNiUikOL00DHROmxah6krJPMPq4I3am2KY2Rs/8ouWhnEXKaHAv4EQhSALJ+7Mq5S4/A==", + "requires": { + "@aws-sdk/is-array-buffer": "3.201.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-hex-encoding": "3.201.0", + "@aws-sdk/util-middleware": "3.272.0", + "@aws-sdk/util-uri-escape": "3.201.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/signature-v4-multi-region": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.272.0.tgz", + "integrity": "sha512-nir/ICA3saE303tS+DuJ803Uocn/d3hOpOl5DqI9RDjaZxbTXwv9uHP+by8sdyyfwCE8TFaYWoiSW5rLI+Qt0g==", + "requires": { + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/signature-v4": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-arn-parser": "3.208.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/smithy-client": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.272.0.tgz", + "integrity": "sha512-pvdleJ3kaRvyRw2pIZnqL85ZlWBOZrPKmR9I69GCvlyrfdjRBhbSjIEZ+sdhZudw0vdHxq25AGoLUXhofVLf5Q==", + "requires": { + "@aws-sdk/middleware-stack": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/token-providers": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.272.0.tgz", + "integrity": "sha512-0GISJ4IKN2rXvbSddB775VjBGSKhYIGQnAdMqbvxi9LB6pSvVxcH9aIL28G0spiuL+dy3yGQZ8RlJPAyP9JW9A==", + "requires": { + "@aws-sdk/client-sso-oidc": "3.272.0", + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/shared-ini-file-loader": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/url-parser": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.272.0.tgz", + "integrity": "sha512-vX/Tx02PlnQ/Kgtf5TnrNDHPNbY+amLZjW0Z1d9vzAvSZhQ4i9Y18yxoRDIaDTCNVRDjdhV8iuctW+05PB5JtQ==", + "requires": { + "@aws-sdk/querystring-parser": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-defaults-mode-browser": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.272.0.tgz", + "integrity": "sha512-W8ZVJSZRuUBg8l0JEZzUc+9fKlthVp/cdE+pFeF8ArhZelOLCiaeCrMaZAeJusaFzIpa6cmOYQAjtSMVyrwRtg==", + "requires": { + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/types": "3.272.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-defaults-mode-node": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.272.0.tgz", + "integrity": "sha512-U0NTcbMw6KFk7uz/avBmfxQSTREEiX6JDMH68oN/3ux4AICd2I4jHyxnloSWGuiER1FxZf1dEJ8ZTwy8Ibl21Q==", + "requires": { + "@aws-sdk/config-resolver": "3.272.0", + "@aws-sdk/credential-provider-imds": "3.272.0", + "@aws-sdk/node-config-provider": "3.272.0", + "@aws-sdk/property-provider": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-endpoints": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.272.0.tgz", + "integrity": "sha512-c4MPUaJt2G6gGpoiwIOqDfUa98c1J63RpYvf/spQEKOtC/tF5Gfqlxuq8FnAl5lHnrqj1B9ZXLLxFhHtDR0IiQ==", + "requires": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-middleware": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.272.0.tgz", + "integrity": "sha512-Abw8m30arbwxqmeMMha5J11ESpHUNmCeSqSzE8/C4B8jZQtHY4kq7f+upzcNIQ11lsd+uzBEzNG3+dDRi0XOJQ==", + "requires": { + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-retry": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.272.0.tgz", + "integrity": "sha512-Ngha5414LR4gRHURVKC9ZYXsEJhMkm+SJ+44wlzOhavglfdcKKPUsibz5cKY1jpUV7oKECwaxHWpBB8r6h+hOg==", + "requires": { + "@aws-sdk/service-error-classification": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-user-agent-browser": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.272.0.tgz", + "integrity": "sha512-Lp5QX5bH6uuwBlIdr7w7OAcAI50ttyskb++yUr9i+SPvj6RI2dsfIBaK4mDg1qUdM5LeUdvIyqwj3XHjFKAAvA==", + "requires": { + "@aws-sdk/types": "3.272.0", + "bowser": "^2.11.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-user-agent-node": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.272.0.tgz", + "integrity": "sha512-ljK+R3l+Q1LIHrcR+Knhk0rmcSkfFadZ8V+crEGpABf/QUQRg7NkZMsoe814tfBO5F7tMxo8wwwSdaVNNHtoRA==", + "requires": { + "@aws-sdk/node-config-provider": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/util-waiter": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.272.0.tgz", + "integrity": "sha512-N25/XsJ2wkPh1EgkFyb/GRgfHDityScfD49Hk1AwJWpfetzgkcEtWdeW4IuPymXlSKhrm5L+SBw49USxo9kBag==", + "requires": { + "@aws-sdk/abort-controller": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + } + } + }, "@aws-sdk/client-secrets-manager": { "version": "3.264.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.264.0.tgz", @@ -7038,6 +9190,106 @@ "tslib": "^2.3.1" } }, + "@aws-sdk/eventstream-codec": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-codec/-/eventstream-codec-3.272.0.tgz", + "integrity": "sha512-HYMzglDnqUhvx3u9MdzZ/OjLuavaaH9zF9XMXRuv7bdsN9AAi3/0he0FEx84ZXNXSAZCebLwXJYf0ZrN6g37QA==", + "requires": { + "@aws-crypto/crc32": "3.0.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-hex-encoding": "3.201.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "requires": { + "tslib": "^2.3.1" + } + } + } + }, + "@aws-sdk/eventstream-serde-browser": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.272.0.tgz", + "integrity": "sha512-mE1+mevS+KVKpnTLi5FytsBwAK1kWZ92ERtAiElp58SKE1OpfSg8lEY8VI6JKGlueN540Qq3LeIgA2/HJOcK/w==", + "requires": { + "@aws-sdk/eventstream-serde-universal": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "requires": { + "tslib": "^2.3.1" + } + } + } + }, + "@aws-sdk/eventstream-serde-config-resolver": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.272.0.tgz", + "integrity": "sha512-e47BhGBvx+me53cvYx+47ml5KNDj7XoTth80krHlyLrimFELE1ij4tHSKR/XzilKKH1uIWmJQdlAi29129ZX5w==", + "requires": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "requires": { + "tslib": "^2.3.1" + } + } + } + }, + "@aws-sdk/eventstream-serde-node": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.272.0.tgz", + "integrity": "sha512-uto8y4FoZugWnczM1TKwv6oV2Po2Jgrp+W1Ws3baRQ4Lan+QpFx3Tps1N5rNzQ+7Uz0xT1BhbSNPAkKs22/jtg==", + "requires": { + "@aws-sdk/eventstream-serde-universal": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "requires": { + "tslib": "^2.3.1" + } + } + } + }, + "@aws-sdk/eventstream-serde-universal": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.272.0.tgz", + "integrity": "sha512-E9jlt8tzDcEMoNlgv3+01jGPJPHmbmw2NsajZhB4axVMpEy247JV6qvCZe+5R+EGy96t0pfsO2naViEB4Va47g==", + "requires": { + "@aws-sdk/eventstream-codec": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "requires": { + "tslib": "^2.3.1" + } + } + } + }, "@aws-sdk/fetch-http-handler": { "version": "3.257.0", "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.257.0.tgz", @@ -7050,6 +9302,27 @@ "tslib": "^2.3.1" } }, + "@aws-sdk/hash-blob-browser": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.272.0.tgz", + "integrity": "sha512-IRCIMG42fXcdD92C8Sb0CQI8D/msxDwHGAIqP94iGhVEnKX2egyx5J8lmPY4gEky5UzyMMaH7cayBv89ZMEBmQ==", + "requires": { + "@aws-sdk/chunked-blob-reader": "3.188.0", + "@aws-sdk/chunked-blob-reader-native": "3.208.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "requires": { + "tslib": "^2.3.1" + } + } + } + }, "@aws-sdk/hash-node": { "version": "3.257.0", "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.257.0.tgz", @@ -7061,6 +9334,26 @@ "tslib": "^2.3.1" } }, + "@aws-sdk/hash-stream-node": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-stream-node/-/hash-stream-node-3.272.0.tgz", + "integrity": "sha512-mWwQWdfVYoR6PXRLkHP6pC1cghZMg0ULuOAm70EtTO2YXiyLlMIDb+VD4RRbjh3hNkzh+y/W47wSUJthGBM1kg==", + "requires": { + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "requires": { + "tslib": "^2.3.1" + } + } + } + }, "@aws-sdk/invalid-dependency": { "version": "3.257.0", "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.257.0.tgz", @@ -7078,6 +9371,57 @@ "tslib": "^2.3.1" } }, + "@aws-sdk/md5-js": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/md5-js/-/md5-js-3.272.0.tgz", + "integrity": "sha512-/GK32mgAarhn/F0xCeBKbYfLRof3tOCNrg8mAGNz9Di8E1/qMOnX/OXUGag0lsvNZ6DTjdjln29t4e8iKmOVqA==", + "requires": { + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "requires": { + "tslib": "^2.3.1" + } + } + } + }, + "@aws-sdk/middleware-bucket-endpoint": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.272.0.tgz", + "integrity": "sha512-523T6JXfjsY9uSgMusa6myCccRv2TWyUSjzMx/0aUHfHRacJSunfPtSNX1kfYxXWn/ByWhaieHFBPehVI6wg1A==", + "requires": { + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-arn-parser": "3.208.0", + "@aws-sdk/util-config-provider": "3.208.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/protocol-http": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.272.0.tgz", + "integrity": "sha512-4JQ54v5Yn08jspNDeHo45CaSn1CvTJqS1Ywgr79eU6jBExtguOWv6LNtwVSBD9X37v88iqaxt8iu1Z3pZZAJeg==", + "requires": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "requires": { + "tslib": "^2.3.1" + } + } + } + }, "@aws-sdk/middleware-content-length": { "version": "3.257.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.257.0.tgz", @@ -7115,6 +9459,68 @@ "tslib": "^2.3.1" } }, + "@aws-sdk/middleware-expect-continue": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.272.0.tgz", + "integrity": "sha512-TNx61LCZUKp/yZqcb38qb4tU3lbhKaI9zn2FQ+fpKzUSTI3H6E5aw42wHaq2LEacYlyK3b5Wg1R0sKR+vsUutw==", + "requires": { + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/protocol-http": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.272.0.tgz", + "integrity": "sha512-4JQ54v5Yn08jspNDeHo45CaSn1CvTJqS1Ywgr79eU6jBExtguOWv6LNtwVSBD9X37v88iqaxt8iu1Z3pZZAJeg==", + "requires": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "requires": { + "tslib": "^2.3.1" + } + } + } + }, + "@aws-sdk/middleware-flexible-checksums": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.272.0.tgz", + "integrity": "sha512-dc/tMiYM4wTZpjXf2PSQCFD4SQI5wyVwY5SoBgcB3W2XLq1SzXahiDnnUSn2EzDTKPIrmQmYyDFRpFEPo0sP/g==", + "requires": { + "@aws-crypto/crc32": "3.0.0", + "@aws-crypto/crc32c": "3.0.0", + "@aws-sdk/is-array-buffer": "3.201.0", + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/protocol-http": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.272.0.tgz", + "integrity": "sha512-4JQ54v5Yn08jspNDeHo45CaSn1CvTJqS1Ywgr79eU6jBExtguOWv6LNtwVSBD9X37v88iqaxt8iu1Z3pZZAJeg==", + "requires": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "requires": { + "tslib": "^2.3.1" + } + } + } + }, "@aws-sdk/middleware-host-header": { "version": "3.257.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.257.0.tgz", @@ -7125,6 +9531,25 @@ "tslib": "^2.3.1" } }, + "@aws-sdk/middleware-location-constraint": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.272.0.tgz", + "integrity": "sha512-tROQ1DM9djxfXmXPTT0XietrUt6y6QEHShPI9rQMstjXYiaHBVXRveuRLcLAKwl4nXIrgmnIU7ygyj2ZyD8gcA==", + "requires": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "requires": { + "tslib": "^2.3.1" + } + } + } + }, "@aws-sdk/middleware-logger": { "version": "3.257.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.257.0.tgz", @@ -7158,6 +9583,36 @@ "uuid": "^8.3.2" } }, + "@aws-sdk/middleware-sdk-s3": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.272.0.tgz", + "integrity": "sha512-uMvoLePkyP54b9BckMELlDnFh0SGPAfTkBwiH/FC79K7noGLA5A4KgqKObtB9LPYHkPfm1WLqIgdaE6gS1BlFQ==", + "requires": { + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-arn-parser": "3.208.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/protocol-http": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.272.0.tgz", + "integrity": "sha512-4JQ54v5Yn08jspNDeHo45CaSn1CvTJqS1Ywgr79eU6jBExtguOWv6LNtwVSBD9X37v88iqaxt8iu1Z3pZZAJeg==", + "requires": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "requires": { + "tslib": "^2.3.1" + } + } + } + }, "@aws-sdk/middleware-sdk-sts": { "version": "3.257.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.257.0.tgz", @@ -7193,6 +9648,25 @@ "tslib": "^2.3.1" } }, + "@aws-sdk/middleware-ssec": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.272.0.tgz", + "integrity": "sha512-WDPcNPkscTmJUzdAvfx8p+YuUn2YR9ocmZA7yYUJ5kA94MyGH6Rbjp8tleWwQvah/HweeCQrYUzJk9wsH64LPA==", + "requires": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "requires": { + "tslib": "^2.3.1" + } + } + } + }, "@aws-sdk/middleware-stack": { "version": "3.257.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.257.0.tgz", @@ -7475,6 +9949,121 @@ "tslib": "^2.3.1" } }, + "@aws-sdk/util-stream-browser": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-stream-browser/-/util-stream-browser-3.272.0.tgz", + "integrity": "sha512-vD514YffKxBjV/erjUNgkXcb/mzXAz3uk/KUFMXsodo3cA4Z8WxL4P0p1O09FVuJlNa0gZ8mhFPNzNOekh31GA==", + "requires": { + "@aws-sdk/fetch-http-handler": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-base64": "3.208.0", + "@aws-sdk/util-hex-encoding": "3.201.0", + "@aws-sdk/util-utf8": "3.254.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/fetch-http-handler": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.272.0.tgz", + "integrity": "sha512-1Qhm9e0RbS1Xf4CZqUbQyUMkDLd7GrsRXWIvm9b86/vgeV8/WnjO3CMue9D51nYgcyQORhYXv6uVjAYCWbUExA==", + "requires": { + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/querystring-builder": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-base64": "3.208.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/protocol-http": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.272.0.tgz", + "integrity": "sha512-4JQ54v5Yn08jspNDeHo45CaSn1CvTJqS1Ywgr79eU6jBExtguOWv6LNtwVSBD9X37v88iqaxt8iu1Z3pZZAJeg==", + "requires": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/querystring-builder": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.272.0.tgz", + "integrity": "sha512-ndo++7GkdCj5tBXE6rGcITpSpZS4PfyV38wntGYAlj9liL1omk3bLZRY6uzqqkJpVHqbg2fD7O2qHNItzZgqhw==", + "requires": { + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-uri-escape": "3.201.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "requires": { + "tslib": "^2.3.1" + } + } + } + }, + "@aws-sdk/util-stream-node": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-stream-node/-/util-stream-node-3.272.0.tgz", + "integrity": "sha512-s7dGeM1ImzihqBKgrpaeZokLnPUk3H4Et5oiM+t+TpRxotXTecJPyuD0p76HRgO8KSXfVT5Nxw/FoHXqj1fiMg==", + "requires": { + "@aws-sdk/node-http-handler": "3.272.0", + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-buffer-from": "3.208.0", + "tslib": "^2.3.1" + }, + "dependencies": { + "@aws-sdk/abort-controller": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.272.0.tgz", + "integrity": "sha512-s2TV3phapcTwZNr4qLxbfuQuE9ZMP4RoJdkvRRCkKdm6jslsWLJf2Zlcxti/23hOlINUMYv2iXE2pftIgWGdpg==", + "requires": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/node-http-handler": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.272.0.tgz", + "integrity": "sha512-VrW9PjhhngeyYp4yGYPe5S0vgZH6NwU3Po9xAgayUeE37Inr7LS1YteFMHdpgsUUeNXnh7d06CXqHo1XjtqOKA==", + "requires": { + "@aws-sdk/abort-controller": "3.272.0", + "@aws-sdk/protocol-http": "3.272.0", + "@aws-sdk/querystring-builder": "3.272.0", + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/protocol-http": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.272.0.tgz", + "integrity": "sha512-4JQ54v5Yn08jspNDeHo45CaSn1CvTJqS1Ywgr79eU6jBExtguOWv6LNtwVSBD9X37v88iqaxt8iu1Z3pZZAJeg==", + "requires": { + "@aws-sdk/types": "3.272.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/querystring-builder": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.272.0.tgz", + "integrity": "sha512-ndo++7GkdCj5tBXE6rGcITpSpZS4PfyV38wntGYAlj9liL1omk3bLZRY6uzqqkJpVHqbg2fD7O2qHNItzZgqhw==", + "requires": { + "@aws-sdk/types": "3.272.0", + "@aws-sdk/util-uri-escape": "3.201.0", + "tslib": "^2.3.1" + } + }, + "@aws-sdk/types": { + "version": "3.272.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.272.0.tgz", + "integrity": "sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA==", + "requires": { + "tslib": "^2.3.1" + } + } + } + }, "@aws-sdk/util-uri-escape": { "version": "3.201.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz", @@ -7530,6 +10119,14 @@ "tslib": "^2.3.1" } }, + "@aws-sdk/xml-builder": { + "version": "3.201.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.201.0.tgz", + "integrity": "sha512-brRdB1wwMgjWEnOQsv7zSUhIQuh7DEicrfslAqHop4S4FtSI3GQAShpQqgOpMTNFYcpaWKmE/Y1MJmNY7xLCnw==", + "requires": { + "tslib": "^2.3.1" + } + }, "@babel/code-frame": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", diff --git a/package.json b/package.json index 14ee303..1d88f6f 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "dependencies": { "@aws-sdk/client-dynamodb": "^3.229.0", "@aws-sdk/client-eventbridge": "^3.264.0", + "@aws-sdk/client-s3": "^3.272.0", "@aws-sdk/client-secrets-manager": "^3.231.0", "@aws-sdk/client-sfn": "^3.229.0", "@aws-sdk/util-dynamodb": "^3.229.0", From def0392345567f512404e1d09f2330b7d3d6010e Mon Sep 17 00:00:00 2001 From: martzcodes <978362+martzcodes@users.noreply.github.com> Date: Tue, 21 Feb 2023 21:30:29 -0500 Subject: [PATCH 09/13] update readme for PR prep --- README.md | 104 +++++++++++++++++++++++++-------------- docs/github-workflow.png | Bin 0 -> 81057 bytes docs/secrets.png | Bin 0 -> 119855 bytes 3 files changed, 66 insertions(+), 38 deletions(-) create mode 100644 docs/github-workflow.png create mode 100644 docs/secrets.png diff --git a/README.md b/README.md index 9d72532..540a0b6 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,8 @@ This solution will hook into your blog creation process and automatically cross- Deploy into your AWS account and type away! -For a full summary of this solution [please refer to this blog post](https://www.readysetcloud.io/blog/allen.helton/how-i-built-a-serverless-automation-to-cross-post-my-blogs/) by [Allen Helton](https://twitter.com/allenheltondev). +For a full summary of this solution [please refer to this blog post](https://www.readysetcloud.io/blog/allen.helton/how-i-built-a-serverless-automation-to-cross-post-my-blogs/) by [Allen Helton](https://twitter.com/allenheltondev) +and the [CDK-ification of it here](https://matt.martz.codes/improving-a-serverless-app-to-cross-post-blogs) by [Matt Martz](https://awscommunity.social/@martzcodes). ## Prerequisites @@ -14,28 +15,38 @@ For cross-posts to work successfully, there are a few prereqs that must be met i * Your blog post must be written in [markdown](https://en.wikipedia.org/wiki/Markdown). * Content is checked into a repository in GitHub -* You have an application in [AWS Amplify](https://aws.amazon.com/amplify/) that has a runnable CI pipeline * Blog posts have front matter in the format outlined in the [Blog Metadata](#blog-metadata) section +Optionally, you can also publish via an application in [AWS Amplify](https://aws.amazon.com/amplify/) that has a runnable CI pipeline + *Note - it is highly recommended you host your blog on your own site. This guarantees you own your content and prevents accidental loss if your favorite platform goes down or has an incident. It also enables [easy canonification](https://support.google.com/webmasters/answer/10347851) of your content when it is cross posted so it ranks higher in search engine results. For a step by step guide on hosting your own blog for free, please [reference this post](https://www.readysetcloud.io/blog/allen.helton/how-to-build-your-blog-with-aws-and-hugo/).* ## How It Works -![](/docs/workflow.png) +![](/docs/github-workflow.png) The cross posting process is outlined below. 1. Completed blog post written in markdown is committed to main branch -2. AWS Amplify CI pipeline picks up changes and runs build -3. On success, Amplify publishes a `Amplify Deployment Status Change` event to EventBridge, triggering a Lambda function deployed in this stack -4. The function uses your GitHub PAT to identify and load the blog post content and pass it into a Step Function workflow -5. The workflow will do an idempotency check, and if it's ok to continue will transform and publish to Medium, Hashnode, and Dev.to in parallel -6. After publish is complete, the workflow checks if there were any failures. +2. Either Amplify's Event or a GitHub webhook triggers a lambda to identify content +3. The function uses your GitHub PAT to identify and load the blog post content and pass it into a Step Function workflow +4. The workflow will do an idempotency check, and if it's ok to continue will transform and publish to Medium, Hashnode, and Dev.to in parallel +5. After publish is complete, the workflow checks if there were any failures. * If there was a failure, it sends an email with a link to the execution for debugging * On success, it sends an email with links to the published content and updates the idempotency record and article catalog *Note - If you do not provide a SendGrid API key, you will not receive email status updates* +### Without Amplify + +For Step 2 above (Without Amplify), the content-identification lambda creates a function URL. This function URL is added to the GitHub Repo where the blog content lives as a webhook. On push events to the repo the lambda is triggered and it uses a Personal Access Token to fetch files from the repo and detect / upload content to S3. + +### With Amplify + +![](/docs/workflow.png) + +For Step 2 above (With Amplify), the AWS Amplify CI pipeline picks up changes and runs build. On success, Amplify publishes a `Amplify Deployment Status Change` event to EventBridge, triggering a Lambda function deployed in this stack + ## Platforms This solution will take content you create and automatically cross-post it on three platforms: @@ -50,38 +61,44 @@ Optionally, you can publish straight to publications on each of the platforms. I ## Deployment -The solution is built using AWS SAM. To deploy the resources into the cloud you must install the [SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html). +The solution is built using AWS CDK. Get ready by copying `./config/default.json` to `./config/local.json` and adding in the appropriate fields (and removing ones you dont need). + +Here is an example: + +```json +{ + "cdk": { + "canonical": "hashnode", + "commitTimeToleranceMinutes": 0, + "devTo": { + "devOrganizationId": "1234" + }, + "github": { + "owner": "martzcodes", + "repo": "blog-crossposts", + "path": "/" + }, + "hashnode": { + "hashnodePublicationId": "asdf1234", + "hashnodeBlogUrl": "https://matt.martz.codes" + } + } +} + +``` + +In this example, since there isn't an AWS Amplify blog I chose to use hashnode as my "Original" article source. Articles will first be posted there and then dev.to will set the Canonical URL as being from Hashnode. -Once installed, run the following commands in the root folder of the solution. +Once you have the config done... ```bash -sam build --parallel -sam deploy --guided +npm install +npx cdk deploy ``` -This will walk you through deployment, prompting you for all the parameters necessary for proper use. Below are the parameters you must fill out on deploy. - -|Parameter|Description|Required| -|---------|-----------|--------| -|TableName|Name of the DynamoDB table to create|No| -|GSI1|Name of the GSI on the DDB table|No| -|GitHubPAT|Personal Access Token to load newsletter content from your repository|Yes| -|GitHubOwner|The GitHub user name that owns the repository for your content|Yes| -|GitHubRepo|The repository name that contains your content|Yes| -|AmplifyProjectId|Identifier of the Amplify project that builds your newsletter|Yes| -|MediumApiKey|API key used to manipulate data in your Medium account|Yes| -|MediumPublicationId|Identifier of the publication you wish to submit to on Medium|No| -|MediumAuthorId|Identifier of your user on Medium|Yes if `MediumPublicationId` is not provided| -|DevApiKey|API key used to manipulate data in your Dev.to account|Yes| -|DevOrganizationId|Identifier of the organization you wish to submit to on Dev.to|No| -|HashnodeApiKey|API key used to manipulate data in your Hashnode account|Yes| -|HashnodePublicationId|Identifier for your blog publication on Hashnode|Yes| -|HashnodeBlogUrl|Base url of your blog hosted in Hashnode|Yes| -|BlogBaseUrl|Vase url of your blog on your personal site|Yes| -|BlogContentPath|Relative path from the root directory to the blog content folder in your GitHub repo|Yes| -|SendgridApiKey|Api Key of the SendGrid account that will send the status report when cross-posting is complete|No| -|NotificationEmail|Email address to notify when cross posting is complete|No| -|SendgridFromEmail|Email address for SendGrid that sends you the status email|No| +After the first deploy a Secret called `CrosspostSecrets` will be created in AWS Secrets Manager. Go there in the console and paste in the secrets that you've generated. + +![](./docs/secrets.png) ## Notification Emails @@ -120,12 +137,18 @@ slug: /my-first-blog |-----|-----------|---------| |title|Title of the blog issue |Yes| |description| Brief summary of article. This shows up on Hashnode and Medium and is used in SEO previews|Yes| -|image|Link to the hero image for your article|Yes| +|image|Link to the hero image for your article|No| |image_attribution|Any attribution text needed for your hero image|No| |categories|Array of categories. This will be used as tags for Dev and Medium|No| |tags|Array of tags. Also used as tags for Dev and Medium|No| |slug|Relative url of your post. Used in the article catalog|Yes| +## Image Uploads to a Public S3 Bucket (GitHub Only) + +When NOT using Amplify and using private GitHub repos as your article source, the identify-content lambda will automatically parse out `![](imagehere)` style image embeds and upload the images to a public S3 bucket. It will also re-write the content to use those public S3-based images. + +***CORS is not set up for the S3 Bucket... though that could be easily added*** + ## Article Catalog One of the neat features provided by this solution is substituting relative urls for the appropriate urls on a given page. For example, if you use a relative url to link to another blog post you've written on your site, this solution will replace that with the cross-posted version. So Medium articles will always point to Medium articles, Hashnode articles will always point to Hashnode, etc... @@ -181,12 +204,17 @@ Below are a list of known limitations: * Your content must be written in Markdown with front matter describing the blog post. * Content must be hosted in GitHub. -* You are required to post to Dev.to, Medium, and Hashnode. You cannot pick and choose which platforms you want to use. * Only Hugo style Twitter embeds are supported. Embeds for other content will not work. -* This process is triggered on a successful build of an AWS Amplify project. Other triggers are not supported (but can easily be modified to add them). +* This process is triggered on a successful build of an AWS Amplify project OR a GitHub Webhook. Other triggers are not supported (but can easily be modified to add them). * Notifications are limited to sending emails in SendGrid. + +### Limitations Addressed via Contributions + +* You are required to post to Dev.to, Medium, and Hashnode. You cannot pick and choose which platforms you want to use. +* This process is triggered on a successful build of an AWS Amplify project. * The only way to deploy the solution is with AWS SAM. + ## Contributions Please feel free to contribute to this project! Bonus points if you can meaningfully address any of the limitations listed above :) diff --git a/docs/github-workflow.png b/docs/github-workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..25ba45d3c0e6b7b74716cf0aae4c33a400f8d8d1 GIT binary patch literal 81057 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%0AjBi8`PpO2i)QK}FJRgA6J=?$v)Ly`qrIdY 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 g_3$Dk3C=huhfI6+DZr-4s8`i5%>GV<nkM z{LY%QDK=H72`mc*V1^NkiR^<*x3iDsFL>YL-hc~x{=Jh(E4U3RkrpQ*q961hqDE*^ zV&S<JNv^v@vkeDefH;8b)ZiRL`&9-#4eP9+=2k?&^*BK))@q{ucyf=*!^6mt%T<^) zzJyFq&c8Abn6OGT9>IZNB!*-b+oQ^BP8zItLm&<5EGk({Lu&OO8E*BgaUm#SbQd%% zAkSsdBLc(>{BA@_VG%W)Rw_4n-&DS#!3V0iq|!k4u(o`r#Mb^l@ynQ9*;svJq({R6 z0%@&hRo}A8FYAN2%Qu(l>%9TZEUiWV+@Tv<s`I)rsVyrl9Y^A74&cZ=m5>Vm$P^tL z8;kndhVzSN0&0E75CRVE7s=64`C(V5s?v<sI$-a;!nQ!Q%CueY*M^Y~Gba4~>z%u# zO9|HdTN9Go93v$q`<+@1jky2~KgaP5ax%eQ(Hpng7W54D2yjQm$+c^sGZly`;9dMt zYc5N3L5*)SANlF~oApzH<Ht%K41^Y`XuMB{kHFRgFPw^zN)fn)EyHOZBd|;?nqYDx zlYoy>1>A)n@;boHJ?)?VQ-0K(oI;O-e;D>%Cwfh0^Ds<!dXhDQ`Z_`&R*bn%X=A^b z{uEYXYk>}F?+9(``&`xQ>aacG4>DpGv`m2L8zv|(E*-wOEIK@t<R_=3q!+x?9qo*O zvV<7^f+p2kobG;8!WB4o#$unm!e4E)$mJ{D(J7I0Rkk#;D{f#?u)wU18ElVgIgjdw zsaKf9Q!^=72y(GL0GrH9ROw;S;YU8j%0AuykY7Ji_N^$wb8|UOXF{2eV4P(a96usK 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 UkoAusU?T^&bGcl5>DImf0P+PP&Hw-a literal 0 HcmV?d00001 diff --git a/docs/secrets.png b/docs/secrets.png new file mode 100644 index 0000000000000000000000000000000000000000..f386fe4f119d31598206b3d74aaa1d1c3b02d5b2 GIT binary patch literal 119855 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 C$SI)! literal 0 HcmV?d00001 From 9e10279d9dd8c1c9c25a052ab25e46f68d3d545e Mon Sep 17 00:00:00 2001 From: martzcodes <978362+martzcodes@users.noreply.github.com> Date: Fri, 9 Jun 2023 22:02:17 -0400 Subject: [PATCH 10/13] update bucket for public access after AWS updates --- lib/blog-crossposting-automation-stack.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/blog-crossposting-automation-stack.ts b/lib/blog-crossposting-automation-stack.ts index ca08cb2..5f8003c 100644 --- a/lib/blog-crossposting-automation-stack.ts +++ b/lib/blog-crossposting-automation-stack.ts @@ -5,7 +5,7 @@ import { } from "aws-cdk-lib/aws-events-targets"; import { Architecture, FunctionUrlAuthType, Runtime } from "aws-cdk-lib/aws-lambda"; import { NodejsFunction, NodejsFunctionProps } from "aws-cdk-lib/aws-lambda-nodejs"; -import { Bucket } from "aws-cdk-lib/aws-s3"; +import { BlockPublicAccess, Bucket } from "aws-cdk-lib/aws-s3"; import { Secret } from "aws-cdk-lib/aws-secretsmanager"; import { Construct } from "constructs"; import { join } from "path"; @@ -167,6 +167,12 @@ export class BlogCrosspostingAutomationStack extends Stack { autoDeleteObjects: true, publicReadAccess: true, removalPolicy: RemovalPolicy.DESTROY, + blockPublicAccess: new BlockPublicAccess({ + blockPublicAcls: false, + ignorePublicAcls: false, + blockPublicPolicy: false, + restrictPublicBuckets: false, + }), }); const identifyNewContentFn = new NodejsFunction( From 2009e94e7cc0da5b0e2f1c06d7cc3bec7f7aab9c Mon Sep 17 00:00:00 2001 From: martzcodes <978362+martzcodes@users.noreply.github.com> Date: Sat, 10 Jun 2023 12:45:09 -0400 Subject: [PATCH 11/13] send email event after sending email --- lib/step-function.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/step-function.ts b/lib/step-function.ts index 7098404..a593912 100644 --- a/lib/step-function.ts +++ b/lib/step-function.ts @@ -439,7 +439,6 @@ export class CrossPostStepFunction extends Construct { ), sendFailureEmail ); - sendFailureEmail.next(somethingWentWrong); const sendEmailEvent = new EventBridgePutEvents(this, "SendEmailEvent", { entries: [ { @@ -455,6 +454,7 @@ export class CrossPostStepFunction extends Construct { }, ], }); + sendFailureEmail.next(sendEmailEvent); sendEmailEvent.next(success); } else { updateArticleRecordFailed.next(somethingWentWrong); From 04b6d3e36408f85970c43a6606439056737d0383 Mon Sep 17 00:00:00 2001 From: martzcodes <978362+martzcodes@users.noreply.github.com> Date: Mon, 12 Jun 2023 16:35:39 -0400 Subject: [PATCH 12/13] move else for getting recent commits --- functions/identify-new-content.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/functions/identify-new-content.ts b/functions/identify-new-content.ts index 1f34aa7..aeb9fae 100644 --- a/functions/identify-new-content.ts +++ b/functions/identify-new-content.ts @@ -46,11 +46,11 @@ export const handler = async (event: any) => { }, [] as { fileName: string; commit: string }[] ); - } else { - const recentCommits = await getRecentCommits(); - if (recentCommits.length) { - newContent = await getNewContent(recentCommits); - } + } + } else { + const recentCommits = await getRecentCommits(); + if (recentCommits.length) { + newContent = await getNewContent(recentCommits); } } if (newContent.length) { From 509ebef0d61c233cfb5a5ad1ae96879997daaee1 Mon Sep 17 00:00:00 2001 From: martzcodes <978362+martzcodes@users.noreply.github.com> Date: Tue, 20 Jun 2023 23:32:25 -0400 Subject: [PATCH 13/13] fix medium url --- lib/step-function.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/step-function.ts b/lib/step-function.ts index a593912..c389a93 100644 --- a/lib/step-function.ts +++ b/lib/step-function.ts @@ -224,7 +224,7 @@ export class CrossPostStepFunction extends Construct { }, request: { method: "POST", - baseUrl: `${medium}`, + baseUrl: `${medium.url}`, "body.$": "$.payload", }, }),