diff --git a/packages/dynamodb/CHANGELOG.md b/packages/dynamodb/CHANGELOG.md new file mode 100644 index 00000000..0b229460 --- /dev/null +++ b/packages/dynamodb/CHANGELOG.md @@ -0,0 +1,6 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## 0.1.0: Initial version diff --git a/packages/dynamodb/LICENSE b/packages/dynamodb/LICENSE new file mode 100644 index 00000000..93ab7b3f --- /dev/null +++ b/packages/dynamodb/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021-2025 grammyjs, thelleboid-tsr + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/dynamodb/README.md b/packages/dynamodb/README.md new file mode 100644 index 00000000..eab1715e --- /dev/null +++ b/packages/dynamodb/README.md @@ -0,0 +1,166 @@ +# DynamoDB Storage for grammY + +This package provides a [DynamoDB](https://aws.amazon.com/dynamodb/) storage adapter for [grammY](https://grammy.dev) sessions. + +## Installation + +```bash +npm install @grammyjs/storage-dynamodb @aws-sdk/client-dynamodb @aws-sdk/lib-dynamodb +``` + +## Usage + +### With Sessions + +```typescript +import { Bot, Context, session, SessionFlavor } from 'grammy'; +import { DynamoDBClient } from '@aws-sdk/client-dynamodb'; +import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb'; +import { DynamoDBAdapter } from '@grammyjs/storage-dynamodb'; + +// Define the shape of our session. +interface SessionData { + counter: number; +} +type MyContext = Context & SessionFlavor; + +const bot = new Bot('your-bot-token'); + +// Build your own DynamoDBClient. You may need to pass credentials here +const client = new DynamoDBClient({ + region: 'us-east-1', +}); +const docClient = DynamoDBDocumentClient.from(client); + +bot.use( + session({ + initial: () => ({ counter: 0 }), + storage: new DynamoDBAdapter({ + instance: docClient, + tableName: 'telegram_sessions', + ttl: 60 * 60 * 24 * 30, // 30 days + }), + }) +); +``` + +### With Conversations + +```typescript +import { Bot, Context } from 'grammy'; +import { ConversationFlavor, conversations } from '@grammyjs/conversations'; +import { DynamoDBClient } from '@aws-sdk/client-dynamodb'; +import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb'; +import { DynamoDBAdapter } from '@grammyjs/storage-dynamodb'; + +// Build your own DynamoDBClient. You may need to pass credentials here +const client = new DynamoDBClient({ + region: 'us-east-1', +}); +const docClient = DynamoDBDocumentClient.from(client); + +const bot = new Bot>('your-bot-token'); + +bot.use( + conversations({ + storage: new DynamoDBAdapter({ + instance: docClient, + tableName: 'ConversationSessions', + ttl: 24 * 60 * 60, // 24 hours in seconds + }), + }) +); +``` + +## Configuration + +The `DynamoDBAdapter` constructor accepts the following options: + +- `instance` (required): An instance of `DynamoDBDocumentClient` +- `tableName` (required): The name of the DynamoDB table +- `ttl` (optional): Session time to live in SECONDS. If not provided, uncleaned sessions (due to crash) may stay forever +- `sessionKey` (optional): The name of the primary key field in the DynamoDB table. Defaults to `'sessionKey'` +- `ttlKey` (optional): The name of the TTL field in the DynamoDB table. Defaults to `'ttl'` + +## DynamoDB Table Setup + +You need to create a DynamoDB table with the following structure: + +### Table Configuration + +- **Table name**: `GrammySessions` (or your custom table name) +- **Partition key**: `sessionKey` (or the value you've set for `sessionKey`) +- **Sort key**: None + +### Using AWS CLI + +```bash +aws dynamodb create-table \ + --table-name GrammySessions \ + --attribute-definitions AttributeName=sessionKey,AttributeType=S \ + --key-schema AttributeName=sessionKey,KeyType=HASH \ + --billing-mode PAY_PER_REQUEST +``` + +### Using Terraform + +```hcl +resource "aws_dynamodb_table" "grammy_sessions" { + name = "GrammySessions" + billing_mode = "PAY_PER_REQUEST" + hash_key = "sessionKey" + + attribute { + name = "sessionKey" + type = "S" + } + + # Optional, to be added only if TTL is used + ttl { + attribute_name = "ttl" + enabled = true + } +} +``` + +## TTL (Time To Live) + +Grammy automatically cleans session and conversation data. For session, [data is removed the next time the respective session data is read](https://grammy.dev/plugins/session#timeouts). For conversation, data is removed when the conversation ends. + +This adapter allows to leverage the [native DynamoDB TTL](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/TTL.html) to remove items after some time. This helps prevent the table from growing indefinitely. You can enable TTL on your DynamoDB table to automatically delete expired items: + +```bash +aws dynamodb update-time-to-live \ + --table-name GrammySessions \ + --time-to-live-specification Enabled=true,AttributeName=ttl +``` + +## Authentication + +Since you pass the DynamoDB client instance yourself, you have full control over authentication. The AWS SDK supports several authentication methods: + +1. **Environment variables**: `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` +2. **AWS credentials file**: `~/.aws/credentials` +3. **IAM roles** (when running on EC2/Lambda/ECS) +4. **Explicit credentials** in the client constructor + +## Required IAM Permissions + +Make sure your AWS credentials have the following DynamoDB permissions: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": ["dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:DeleteItem"], + "Resource": "arn:aws:dynamodb:region:account-id:table/GrammySessions" + } + ] +} +``` + +## Error Handling + +The adapter includes built-in error handling and logging. Errors during read operations return `undefined`, while write and delete operations will throw errors. diff --git a/packages/dynamodb/examples/basic.ts b/packages/dynamodb/examples/basic.ts new file mode 100644 index 00000000..747cf6e0 --- /dev/null +++ b/packages/dynamodb/examples/basic.ts @@ -0,0 +1,46 @@ +import { Bot, session } from 'grammy'; +import { DynamoDBClient } from '@aws-sdk/client-dynamodb'; +import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb'; +import { DynamoDBAdapter } from '@grammyjs/storage-dynamodb'; + +const client = new DynamoDBClient({ + region: 'us-east-1', + // Optional: provide credentials if not using AWS environment + // credentials: { + // accessKeyId: 'your-access-key-id', + // secretAccessKey: 'your-secret-access-key' + // } +}); + +const docClient = DynamoDBDocumentClient.from(client); + +const adapter = new DynamoDBAdapter({ + instance: docClient, + tableName: 'GrammySessions', + ttl: 24 * 60 * 60, // 24 hours in seconds +}); + +interface SessionData { + counter: number; + lastMessage?: string; +} + +const bot = new Bot('your-bot-token'); + +bot.use(session({ + initial: () => ({ counter: 0 }), + storage: adapter, +})); + +bot.command('start', (ctx) => { + ctx.session.counter++; + ctx.reply(`Welcome! This is your visit #${ctx.session.counter}`); +}); + +bot.on('message:text', (ctx) => { + ctx.session.counter++; + ctx.session.lastMessage = ctx.message.text; + ctx.reply(`Message #${ctx.session.counter}: "${ctx.message.text}"`); +}); + +bot.start(); \ No newline at end of file diff --git a/packages/dynamodb/package-lock.json b/packages/dynamodb/package-lock.json new file mode 100644 index 00000000..72fdb785 --- /dev/null +++ b/packages/dynamodb/package-lock.json @@ -0,0 +1,1409 @@ +{ + "name": "@grammyjs/storage-dynamodb", + "version": "2.4.2", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@grammyjs/storage-dynamodb", + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "@aws-sdk/client-dynamodb": "^3.0.0", + "@aws-sdk/lib-dynamodb": "^3.0.0" + }, + "devDependencies": { + "grammy": "^1.21.1" + } + }, + "../../libs/utils": { + "name": "@grammyjs/storage-utils", + "version": "2.4.2", + "extraneous": true, + "dependencies": { + "grammy": "^1.21.1" + } + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-dynamodb": { + "version": "3.863.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.863.0.tgz", + "integrity": "sha512-P9ufSZDJ3VvrEEXs7Wl4eLFYQFCTdfLrxL0IlnFBG2hk8ioq/kSzo+0ifQz1yv8RNEwLSAiMYLQNOctYZNii1w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.863.0", + "@aws-sdk/credential-provider-node": "3.863.0", + "@aws-sdk/middleware-endpoint-discovery": "3.862.0", + "@aws-sdk/middleware-host-header": "3.862.0", + "@aws-sdk/middleware-logger": "3.862.0", + "@aws-sdk/middleware-recursion-detection": "3.862.0", + "@aws-sdk/middleware-user-agent": "3.863.0", + "@aws-sdk/region-config-resolver": "3.862.0", + "@aws-sdk/types": "3.862.0", + "@aws-sdk/util-endpoints": "3.862.0", + "@aws-sdk/util-user-agent-browser": "3.862.0", + "@aws-sdk/util-user-agent-node": "3.863.0", + "@smithy/config-resolver": "^4.1.5", + "@smithy/core": "^3.8.0", + "@smithy/fetch-http-handler": "^5.1.1", + "@smithy/hash-node": "^4.0.5", + "@smithy/invalid-dependency": "^4.0.5", + "@smithy/middleware-content-length": "^4.0.5", + "@smithy/middleware-endpoint": "^4.1.18", + "@smithy/middleware-retry": "^4.1.19", + "@smithy/middleware-serde": "^4.0.9", + "@smithy/middleware-stack": "^4.0.5", + "@smithy/node-config-provider": "^4.1.4", + "@smithy/node-http-handler": "^4.1.1", + "@smithy/protocol-http": "^5.1.3", + "@smithy/smithy-client": "^4.4.10", + "@smithy/types": "^4.3.2", + "@smithy/url-parser": "^4.0.5", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.26", + "@smithy/util-defaults-mode-node": "^4.0.26", + "@smithy/util-endpoints": "^3.0.7", + "@smithy/util-middleware": "^4.0.5", + "@smithy/util-retry": "^4.0.7", + "@smithy/util-utf8": "^4.0.0", + "@smithy/util-waiter": "^4.0.7", + "@types/uuid": "^9.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.863.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.863.0.tgz", + "integrity": "sha512-3DZE5lx5A+MgTVS8yRBz/Ne8pWvwc7tDy4KBx5sDd93wvnDYjZW28g7W73d1dD7jfN8ZIC0REtiuNj00Ty0PBg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.863.0", + "@aws-sdk/middleware-host-header": "3.862.0", + "@aws-sdk/middleware-logger": "3.862.0", + "@aws-sdk/middleware-recursion-detection": "3.862.0", + "@aws-sdk/middleware-user-agent": "3.863.0", + "@aws-sdk/region-config-resolver": "3.862.0", + "@aws-sdk/types": "3.862.0", + "@aws-sdk/util-endpoints": "3.862.0", + "@aws-sdk/util-user-agent-browser": "3.862.0", + "@aws-sdk/util-user-agent-node": "3.863.0", + "@smithy/config-resolver": "^4.1.5", + "@smithy/core": "^3.8.0", + "@smithy/fetch-http-handler": "^5.1.1", + "@smithy/hash-node": "^4.0.5", + "@smithy/invalid-dependency": "^4.0.5", + "@smithy/middleware-content-length": "^4.0.5", + "@smithy/middleware-endpoint": "^4.1.18", + "@smithy/middleware-retry": "^4.1.19", + "@smithy/middleware-serde": "^4.0.9", + "@smithy/middleware-stack": "^4.0.5", + "@smithy/node-config-provider": "^4.1.4", + "@smithy/node-http-handler": "^4.1.1", + "@smithy/protocol-http": "^5.1.3", + "@smithy/smithy-client": "^4.4.10", + "@smithy/types": "^4.3.2", + "@smithy/url-parser": "^4.0.5", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.26", + "@smithy/util-defaults-mode-node": "^4.0.26", + "@smithy/util-endpoints": "^3.0.7", + "@smithy/util-middleware": "^4.0.5", + "@smithy/util-retry": "^4.0.7", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.863.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.863.0.tgz", + "integrity": "sha512-6KUD82jb8Z+PWRoAwqpjFcrhcCvUlKNfUKKdkhj2yEdugem36d29avTpTPa6RiOEsfUi7CM4Yh60Qrj0pNI4xQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.862.0", + "@aws-sdk/xml-builder": "3.862.0", + "@smithy/core": "^3.8.0", + "@smithy/node-config-provider": "^4.1.4", + "@smithy/property-provider": "^4.0.5", + "@smithy/protocol-http": "^5.1.3", + "@smithy/signature-v4": "^5.1.3", + "@smithy/smithy-client": "^4.4.10", + "@smithy/types": "^4.3.2", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.5", + "@smithy/util-utf8": "^4.0.0", + "fast-xml-parser": "5.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.863.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.863.0.tgz", + "integrity": "sha512-KmA5cjJU5ihR+oFJtraraeQ7aDSp3GtogSoBUKaHBsiSP7awgxuVcAWSr8wCxi0kPUjCE7kHSLTv4i9UC4soYw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.863.0", + "@aws-sdk/types": "3.862.0", + "@smithy/property-provider": "^4.0.5", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.863.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.863.0.tgz", + "integrity": "sha512-AsMgQgYG5YwBFHAuB5y/ngwT9K2axBqJm1ZM+wBMTqPvyQ7cjnfsliCAGEY2QPIxE2prX85Bc50s1OPQVPROHg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.863.0", + "@aws-sdk/types": "3.862.0", + "@smithy/fetch-http-handler": "^5.1.1", + "@smithy/node-http-handler": "^4.1.1", + "@smithy/property-provider": "^4.0.5", + "@smithy/protocol-http": "^5.1.3", + "@smithy/smithy-client": "^4.4.10", + "@smithy/types": "^4.3.2", + "@smithy/util-stream": "^4.2.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.863.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.863.0.tgz", + "integrity": "sha512-RyyUZ7onXQdcjTnnmX3LvO3/tKsmYR9PJrLCnQQUVYlUzwref4E0ytBgk/mycxx6KHCJNVUzY4QV7s9VaUxcZA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.863.0", + "@aws-sdk/credential-provider-env": "3.863.0", + "@aws-sdk/credential-provider-http": "3.863.0", + "@aws-sdk/credential-provider-process": "3.863.0", + "@aws-sdk/credential-provider-sso": "3.863.0", + "@aws-sdk/credential-provider-web-identity": "3.863.0", + "@aws-sdk/nested-clients": "3.863.0", + "@aws-sdk/types": "3.862.0", + "@smithy/credential-provider-imds": "^4.0.7", + "@smithy/property-provider": "^4.0.5", + "@smithy/shared-ini-file-loader": "^4.0.5", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.863.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.863.0.tgz", + "integrity": "sha512-ApRpvgB+DN4BHVmiLvXIdpFN21wBdL5p81G5cXmipJHStThAkk2N9SSG0XxhMaCpzdRWt+4JPRwR5pHiPvnxug==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.863.0", + "@aws-sdk/credential-provider-http": "3.863.0", + "@aws-sdk/credential-provider-ini": "3.863.0", + "@aws-sdk/credential-provider-process": "3.863.0", + "@aws-sdk/credential-provider-sso": "3.863.0", + "@aws-sdk/credential-provider-web-identity": "3.863.0", + "@aws-sdk/types": "3.862.0", + "@smithy/credential-provider-imds": "^4.0.7", + "@smithy/property-provider": "^4.0.5", + "@smithy/shared-ini-file-loader": "^4.0.5", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.863.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.863.0.tgz", + "integrity": "sha512-UN8AfjFvLGIHg2lMr4SNiOhCsDUv6uaD/XbAiRpt/u0z/xMsICxwkOawnKtHj24xGRAh+GgefMirl6QiTkbJ4Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.863.0", + "@aws-sdk/types": "3.862.0", + "@smithy/property-provider": "^4.0.5", + "@smithy/shared-ini-file-loader": "^4.0.5", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.863.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.863.0.tgz", + "integrity": "sha512-oV4F1zY0o/txR9ruTCH+UlRf7LAKBiwkthsHplNJT0kVq98RtBIMrzk9DgibvjfBsJH1572wozDIc4yOpcB4YA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.863.0", + "@aws-sdk/core": "3.863.0", + "@aws-sdk/token-providers": "3.863.0", + "@aws-sdk/types": "3.862.0", + "@smithy/property-provider": "^4.0.5", + "@smithy/shared-ini-file-loader": "^4.0.5", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.863.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.863.0.tgz", + "integrity": "sha512-INN5BNFalw68BxBFT+9sj2Yxia1XvS0+ZG0dkfFAmo8iXb2mw0o52PgqOiKlQfxnjbyOH7LgTB2hfbuuEwpKjw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.863.0", + "@aws-sdk/nested-clients": "3.863.0", + "@aws-sdk/types": "3.862.0", + "@smithy/property-provider": "^4.0.5", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/endpoint-cache": { + "version": "3.804.0", + "license": "Apache-2.0", + "dependencies": { + "mnemonist": "0.38.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/lib-dynamodb": { + "version": "3.863.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-dynamodb/-/lib-dynamodb-3.863.0.tgz", + "integrity": "sha512-LTvHm6/H6NnrfKpqQaY/6Xk/RVb6QP+NTHV9FZ+udSIgHMTNGkgIkDR8U/bKgNUMon9JmYG1FEO9EzxY/fZvKw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.863.0", + "@aws-sdk/util-dynamodb": "3.863.0", + "@smithy/core": "^3.8.0", + "@smithy/smithy-client": "^4.4.10", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-dynamodb": "^3.863.0" + } + }, + "node_modules/@aws-sdk/middleware-endpoint-discovery": { + "version": "3.862.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/endpoint-cache": "3.804.0", + "@aws-sdk/types": "3.862.0", + "@smithy/node-config-provider": "^4.1.4", + "@smithy/protocol-http": "^5.1.3", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.862.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.862.0.tgz", + "integrity": "sha512-jDje8dCFeFHfuCAxMDXBs8hy8q9NCTlyK4ThyyfAj3U4Pixly2mmzY2u7b7AyGhWsjJNx8uhTjlYq5zkQPQCYw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.862.0", + "@smithy/protocol-http": "^5.1.3", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.862.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.862.0.tgz", + "integrity": "sha512-N/bXSJznNBR/i7Ofmf9+gM6dx/SPBK09ZWLKsW5iQjqKxAKn/2DozlnE54uiEs1saHZWoNDRg69Ww4XYYSlG1Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.862.0", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.862.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.862.0.tgz", + "integrity": "sha512-KVoo3IOzEkTq97YKM4uxZcYFSNnMkhW/qj22csofLegZi5fk90ztUnnaeKfaEJHfHp/tm1Y3uSoOXH45s++kKQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.862.0", + "@smithy/protocol-http": "^5.1.3", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.863.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.863.0.tgz", + "integrity": "sha512-AqXzUUpHM51E/cmq/h3yja+GFff7zxQFj6Fq1bVkkc4vzXBCGpyTmaMcUv4rrR/OmmWfidyzbxdy7PuhMNAspg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.863.0", + "@aws-sdk/types": "3.862.0", + "@aws-sdk/util-endpoints": "3.862.0", + "@smithy/core": "^3.8.0", + "@smithy/protocol-http": "^5.1.3", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.863.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.863.0.tgz", + "integrity": "sha512-TgVr6d1MmJz7H6RehaFevZlJ+d1KSmyftp8oi2V5FCQ4OR22ITsTxmm5cIODYk8VInaie2ZABlPCN5fs+glJuA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.863.0", + "@aws-sdk/middleware-host-header": "3.862.0", + "@aws-sdk/middleware-logger": "3.862.0", + "@aws-sdk/middleware-recursion-detection": "3.862.0", + "@aws-sdk/middleware-user-agent": "3.863.0", + "@aws-sdk/region-config-resolver": "3.862.0", + "@aws-sdk/types": "3.862.0", + "@aws-sdk/util-endpoints": "3.862.0", + "@aws-sdk/util-user-agent-browser": "3.862.0", + "@aws-sdk/util-user-agent-node": "3.863.0", + "@smithy/config-resolver": "^4.1.5", + "@smithy/core": "^3.8.0", + "@smithy/fetch-http-handler": "^5.1.1", + "@smithy/hash-node": "^4.0.5", + "@smithy/invalid-dependency": "^4.0.5", + "@smithy/middleware-content-length": "^4.0.5", + "@smithy/middleware-endpoint": "^4.1.18", + "@smithy/middleware-retry": "^4.1.19", + "@smithy/middleware-serde": "^4.0.9", + "@smithy/middleware-stack": "^4.0.5", + "@smithy/node-config-provider": "^4.1.4", + "@smithy/node-http-handler": "^4.1.1", + "@smithy/protocol-http": "^5.1.3", + "@smithy/smithy-client": "^4.4.10", + "@smithy/types": "^4.3.2", + "@smithy/url-parser": "^4.0.5", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.26", + "@smithy/util-defaults-mode-node": "^4.0.26", + "@smithy/util-endpoints": "^3.0.7", + "@smithy/util-middleware": "^4.0.5", + "@smithy/util-retry": "^4.0.7", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.862.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.862.0.tgz", + "integrity": "sha512-VisR+/HuVFICrBPY+q9novEiE4b3mvDofWqyvmxHcWM7HumTz9ZQSuEtnlB/92GVM3KDUrR9EmBHNRrfXYZkcQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.862.0", + "@smithy/node-config-provider": "^4.1.4", + "@smithy/types": "^4.3.2", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.863.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.863.0.tgz", + "integrity": "sha512-rGZ8QsnLWa725etzdPW2rH6+LN9eCcGsTIcxcCyh59cSgZLxT913q84WaUj6fOA7ElCOEU+WrV4Jiz4qwZI2DA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.863.0", + "@aws-sdk/nested-clients": "3.863.0", + "@aws-sdk/types": "3.862.0", + "@smithy/property-provider": "^4.0.5", + "@smithy/shared-ini-file-loader": "^4.0.5", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.862.0", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-dynamodb": { + "version": "3.863.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.863.0.tgz", + "integrity": "sha512-siYzM635HLNb8hLq2nPdd2ZSpsrCMaXAdIwtpSS4NLgRl67ZSBrvU5Fvf9pSHSIfCVj4BN/NrUZ+trLM3ba/ig==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-dynamodb": "^3.863.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.862.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.862.0.tgz", + "integrity": "sha512-eCZuScdE9MWWkHGM2BJxm726MCmWk/dlHjOKvkM0sN1zxBellBMw5JohNss1Z8/TUmnW2gb9XHTOiHuGjOdksA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.862.0", + "@smithy/types": "^4.3.2", + "@smithy/url-parser": "^4.0.5", + "@smithy/util-endpoints": "^3.0.7", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.804.0.tgz", + "integrity": "sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.862.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.862.0.tgz", + "integrity": "sha512-BmPTlm0r9/10MMr5ND9E92r8KMZbq5ltYXYpVcUbAsnB1RJ8ASJuRoLne5F7mB3YMx0FJoOTuSq7LdQM3LgW3Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.862.0", + "@smithy/types": "^4.3.2", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.863.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.863.0.tgz", + "integrity": "sha512-qoYXCe07xs0z+MjcDGuNBbP8P47i6h13BiHsXxiMKKiCihB3w2slvRbJYwUwc2fzZWSk0isKbdDmsdNZBKyBHg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.863.0", + "@aws-sdk/types": "3.862.0", + "@smithy/node-config-provider": "^4.1.4", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.862.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.862.0.tgz", + "integrity": "sha512-6Ed0kmC1NMbuFTEgNmamAUU1h5gShgxL1hBVLbEzUa3trX5aJBz1vU4bXaBTvOYUAnOHtiy1Ml4AMStd6hJnFA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@grammyjs/types": { + "version": "3.21.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@smithy/abort-controller": { + "version": "4.0.5", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.5.tgz", + "integrity": "sha512-viuHMxBAqydkB0AfWwHIdwf/PRH2z5KHGUzqyRtS/Wv+n3IHI993Sk76VCA7dD/+GzgGOmlJDITfPcJC1nIVIw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.4", + "@smithy/types": "^4.3.2", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "3.8.0", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.0.9", + "@smithy/protocol-http": "^5.1.3", + "@smithy/types": "^4.3.2", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.5", + "@smithy/util-stream": "^4.2.4", + "@smithy/util-utf8": "^4.0.0", + "@types/uuid": "^9.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.7.tgz", + "integrity": "sha512-dDzrMXA8d8riFNiPvytxn0mNwR4B3h8lgrQ5UjAGu6T9z/kRg/Xncf4tEQHE/+t25sY8IH3CowcmWi+1U5B1Gw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.4", + "@smithy/property-provider": "^4.0.5", + "@smithy/types": "^4.3.2", + "@smithy/url-parser": "^4.0.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "5.1.1", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.3", + "@smithy/querystring-builder": "^4.0.5", + "@smithy/types": "^4.3.2", + "@smithy/util-base64": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.5.tgz", + "integrity": "sha512-cv1HHkKhpyRb6ahD8Vcfb2Hgz67vNIXEp2vnhzfxLFGRukLCNEA5QdsorbUEzXma1Rco0u3rx5VTqbM06GcZqQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.5.tgz", + "integrity": "sha512-IVnb78Qtf7EJpoEVo7qJ8BEXQwgC4n3igeJNNKEj/MLYtapnx8A67Zt/J3RXAj2xSO1910zk0LdFiygSemuLow==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "4.0.0", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.5.tgz", + "integrity": "sha512-l1jlNZoYzoCC7p0zCtBDE5OBXZ95yMKlRlftooE5jPWQn4YBPLgsp+oeHp7iMHaTGoUdFqmHOPa8c9G3gBsRpQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.3", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "4.1.18", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.8.0", + "@smithy/middleware-serde": "^4.0.9", + "@smithy/node-config-provider": "^4.1.4", + "@smithy/shared-ini-file-loader": "^4.0.5", + "@smithy/types": "^4.3.2", + "@smithy/url-parser": "^4.0.5", + "@smithy/util-middleware": "^4.0.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "4.1.19", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.19.tgz", + "integrity": "sha512-X58zx/NVECjeuUB6A8HBu4bhx72EoUz+T5jTMIyeNKx2lf+Gs9TmWPNNkH+5QF0COjpInP/xSpJGJ7xEnAklQQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.4", + "@smithy/protocol-http": "^5.1.3", + "@smithy/service-error-classification": "^4.0.7", + "@smithy/smithy-client": "^4.4.10", + "@smithy/types": "^4.3.2", + "@smithy/util-middleware": "^4.0.5", + "@smithy/util-retry": "^4.0.7", + "@types/uuid": "^9.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "4.0.9", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.3", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "4.0.5", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "4.1.4", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.5", + "@smithy/shared-ini-file-loader": "^4.0.5", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.1.1", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.0.5", + "@smithy/protocol-http": "^5.1.3", + "@smithy/querystring-builder": "^4.0.5", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "4.0.5", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "5.1.3", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "4.0.5", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "@smithy/util-uri-escape": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "4.0.5", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.7.tgz", + "integrity": "sha512-XvRHOipqpwNhEjDf2L5gJowZEm5nsxC16pAZOeEcsygdjv9A2jdOh3YoDQvOXBGTsaJk6mNWtzWalOB9976Wlg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "4.0.5", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.1.3.tgz", + "integrity": "sha512-mARDSXSEgllNzMw6N+mC+r1AQlEBO3meEAkR/UlfAgnMzJUB3goRBWgip1EAMG99wh36MDqzo86SfIX5Y+VEaw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/protocol-http": "^5.1.3", + "@smithy/types": "^4.3.2", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-middleware": "^4.0.5", + "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "4.4.10", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.8.0", + "@smithy/middleware-endpoint": "^4.1.18", + "@smithy/middleware-stack": "^4.0.5", + "@smithy/protocol-http": "^5.1.3", + "@smithy/types": "^4.3.2", + "@smithy/util-stream": "^4.2.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "4.3.2", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "4.0.5", + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.0.5", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "4.0.0", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "4.0.0", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz", + "integrity": "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "4.0.0", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz", + "integrity": "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.0.26", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.26.tgz", + "integrity": "sha512-xgl75aHIS/3rrGp7iTxQAOELYeyiwBu+eEgAk4xfKwJJ0L8VUjhO2shsDpeil54BOFsqmk5xfdesiewbUY5tKQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.5", + "@smithy/smithy-client": "^4.4.10", + "@smithy/types": "^4.3.2", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.0.26", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.26.tgz", + "integrity": "sha512-z81yyIkGiLLYVDetKTUeCZQ8x20EEzvQjrqJtb/mXnevLq2+w3XCEWTJ2pMp401b6BkEkHVfXb/cROBpVauLMQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.1.5", + "@smithy/credential-provider-imds": "^4.0.7", + "@smithy/node-config-provider": "^4.1.4", + "@smithy/property-provider": "^4.0.5", + "@smithy/smithy-client": "^4.4.10", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.7.tgz", + "integrity": "sha512-klGBP+RpBp6V5JbrY2C/VKnHXn3d5V2YrifZbmMY8os7M6m8wdYFoO6w/fe5VkP+YVwrEktW3IWYaSQVNZJ8oQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.4", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "4.0.0", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "4.0.5", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.7.tgz", + "integrity": "sha512-TTO6rt0ppK70alZpkjwy+3nQlTiqNfoXja+qwuAchIEAIoSZW8Qyd76dvBv3I5bCpE38APafG23Y/u270NspiQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^4.0.7", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "4.2.4", + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.1.1", + "@smithy/node-http-handler": "^4.1.1", + "@smithy/types": "^4.3.2", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "4.0.0", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "4.0.0", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "4.0.7", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.0.5", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@types/uuid": { + "version": "9.0.8", + "license": "MIT" + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-xml-parser": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", + "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^2.1.0" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/grammy": { + "version": "1.37.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@grammyjs/types": "3.21.0", + "abort-controller": "^3.0.0", + "debug": "^4.3.4", + "node-fetch": "^2.7.0" + }, + "engines": { + "node": "^12.20.0 || >=14.13.1" + } + }, + "node_modules/mnemonist": { + "version": "0.38.3", + "license": "MIT", + "dependencies": { + "obliterator": "^1.6.1" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "dev": true, + "license": "MIT", + "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", + "license": "MIT" + }, + "node_modules/strnum": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", + "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/tr46": { + "version": "0.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.8.1", + "license": "0BSD" + }, + "node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } +} diff --git a/packages/dynamodb/package.json b/packages/dynamodb/package.json new file mode 100644 index 00000000..b5630eca --- /dev/null +++ b/packages/dynamodb/package.json @@ -0,0 +1,37 @@ +{ + "name": "@grammyjs/storage-dynamodb", + "version": "0.1.0", + "private": false, + "description": "DynamoDB session storage for grammY.", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "type": "module", + "files": [ + "README.md", + "dist", + "package.json", + "LICENSE" + ], + "scripts": { + "test": "echo \"No tests found\"", + "test:deno": "echo \"No tests found\"", + "prebuild": "rimraf dist", + "build": "tsc" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/grammyjs/storages.git" + }, + "author": "grammyjs", + "license": "MIT", + "bugs": { + "url": "https://github.com/grammyjs/storages/issues" + }, + "homepage": "https://github.com/grammyjs/storages/tree/main/packages/dynamodb#readme", + "dependencies": { + "@aws-sdk/lib-dynamodb": "^3.0.0" + }, + "devDependencies": { + "grammy": "^1.21.1" + } +} \ No newline at end of file diff --git a/packages/dynamodb/src/adapter.ts b/packages/dynamodb/src/adapter.ts new file mode 100644 index 00000000..a572bd60 --- /dev/null +++ b/packages/dynamodb/src/adapter.ts @@ -0,0 +1,115 @@ +import { + DeleteCommand, + DynamoDBDocumentClient, + GetCommand, + PutCommand, +} from '@aws-sdk/lib-dynamodb'; +import type { StorageAdapter } from 'grammy/web'; + +export interface DynamoDBAdapterConfig { + instance: DynamoDBDocumentClient; + tableName: string; + ttl?: number; + sessionKey?: string; + ttlKey?: string; +} + +export class DynamoDBAdapter implements StorageAdapter { + private readonly tableName: string; + private readonly client: DynamoDBDocumentClient; + private readonly ttl?: number; + private readonly sessionKey: string; + private readonly ttlKey: string; + + constructor({ instance, tableName, ttl, sessionKey = 'sessionKey', ttlKey = 'ttl' }: DynamoDBAdapterConfig) { + if (!instance) { + throw new Error( + 'You should pass DynamoDBDocumentClient instance to constructor.' + ); + } + + if (!tableName) { + throw new Error('You should pass tableName to constructor.'); + } + + this.client = instance; + this.tableName = tableName; + this.ttl = ttl; + this.sessionKey = sessionKey; + this.ttlKey = ttlKey; + } + + async read(key: string): Promise { + try { + const result = await this.client.send( + new GetCommand({ + TableName: this.tableName, + Key: { [this.sessionKey]: key }, + }) + ); + + if (!result.Item || !result.Item.sessionData) { + return undefined; + } + + return JSON.parse(result.Item.sessionData) as T; + } catch (error) { + console.error('Error reading from DynamoDB:', error); + return undefined; + } + } + + async write(key: string, value: T): Promise { + const item: any = { + [this.sessionKey]: key, + sessionData: JSON.stringify(value), + }; + + if (this.ttl) { + item[this.ttlKey] = Math.floor(Date.now() / 1000) + this.ttl; + } + + try { + await this.client.send( + new PutCommand({ + TableName: this.tableName, + Item: item, + }) + ); + } catch (error) { + console.error('Error writing to DynamoDB:', error); + throw error; + } + } + + async delete(key: string): Promise { + try { + await this.client.send( + new DeleteCommand({ + TableName: this.tableName, + Key: { [this.sessionKey]: key }, + }) + ); + } catch (error) { + console.error('Error deleting from DynamoDB:', error); + throw error; + } + } + + async has(key: string): Promise { + try { + const result = await this.client.send( + new GetCommand({ + TableName: this.tableName, + Key: { [this.sessionKey]: key }, + ProjectionExpression: 'sessionKey', + }) + ); + + return !!result.Item; + } catch (error) { + console.error('Error checking key existence in DynamoDB:', error); + return false; + } + } +} diff --git a/packages/dynamodb/src/index.ts b/packages/dynamodb/src/index.ts new file mode 100644 index 00000000..79ba0214 --- /dev/null +++ b/packages/dynamodb/src/index.ts @@ -0,0 +1 @@ +export { DynamoDBAdapter, type DynamoDBAdapterConfig } from './adapter.js'; diff --git a/packages/dynamodb/tsconfig.json b/packages/dynamodb/tsconfig.json new file mode 100644 index 00000000..fe17455d --- /dev/null +++ b/packages/dynamodb/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "es6", + "outDir": "./dist", + "strict": true + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index db2b1f10..2806d791 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -80,6 +80,16 @@ importers: specifier: ^1.21.1 version: 1.21.1(encoding@0.1.13) + packages/dynamodb: + dependencies: + "@aws-sdk/lib-dynamodb": + specifier: ^3.0.0 + version: 3.863.0(@aws-sdk/client-dynamodb@3.863.0) + devDependencies: + grammy: + specifier: ^1.21.1 + version: 1.35.0(encoding@0.1.13) + packages/file: devDependencies: '@grammyjs/storage-utils': @@ -221,6 +231,276 @@ importers: version: 1.3.1(@types/node@20.11.22) packages: + "@aashutoshrathi/word-wrap@1.2.6": + resolution: + { + integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==, + } + engines: { node: ">=0.10.0" } + + "@aws-crypto/sha256-browser@5.2.0": + resolution: + { + integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==, + } + + "@aws-crypto/sha256-js@5.2.0": + resolution: + { + integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==, + } + engines: { node: ">=16.0.0" } + + "@aws-crypto/supports-web-crypto@5.2.0": + resolution: + { + integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==, + } + + "@aws-crypto/util@5.2.0": + resolution: + { + integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==, + } + + "@aws-sdk/client-dynamodb@3.863.0": + resolution: + { + integrity: sha512-P9ufSZDJ3VvrEEXs7Wl4eLFYQFCTdfLrxL0IlnFBG2hk8ioq/kSzo+0ifQz1yv8RNEwLSAiMYLQNOctYZNii1w==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/client-sso@3.863.0": + resolution: + { + integrity: sha512-3DZE5lx5A+MgTVS8yRBz/Ne8pWvwc7tDy4KBx5sDd93wvnDYjZW28g7W73d1dD7jfN8ZIC0REtiuNj00Ty0PBg==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/core@3.863.0": + resolution: + { + integrity: sha512-6KUD82jb8Z+PWRoAwqpjFcrhcCvUlKNfUKKdkhj2yEdugem36d29avTpTPa6RiOEsfUi7CM4Yh60Qrj0pNI4xQ==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/credential-provider-env@3.863.0": + resolution: + { + integrity: sha512-KmA5cjJU5ihR+oFJtraraeQ7aDSp3GtogSoBUKaHBsiSP7awgxuVcAWSr8wCxi0kPUjCE7kHSLTv4i9UC4soYw==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/credential-provider-http@3.863.0": + resolution: + { + integrity: sha512-AsMgQgYG5YwBFHAuB5y/ngwT9K2axBqJm1ZM+wBMTqPvyQ7cjnfsliCAGEY2QPIxE2prX85Bc50s1OPQVPROHg==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/credential-provider-ini@3.863.0": + resolution: + { + integrity: sha512-RyyUZ7onXQdcjTnnmX3LvO3/tKsmYR9PJrLCnQQUVYlUzwref4E0ytBgk/mycxx6KHCJNVUzY4QV7s9VaUxcZA==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/credential-provider-node@3.863.0": + resolution: + { + integrity: sha512-ApRpvgB+DN4BHVmiLvXIdpFN21wBdL5p81G5cXmipJHStThAkk2N9SSG0XxhMaCpzdRWt+4JPRwR5pHiPvnxug==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/credential-provider-process@3.863.0": + resolution: + { + integrity: sha512-UN8AfjFvLGIHg2lMr4SNiOhCsDUv6uaD/XbAiRpt/u0z/xMsICxwkOawnKtHj24xGRAh+GgefMirl6QiTkbJ4Q==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/credential-provider-sso@3.863.0": + resolution: + { + integrity: sha512-oV4F1zY0o/txR9ruTCH+UlRf7LAKBiwkthsHplNJT0kVq98RtBIMrzk9DgibvjfBsJH1572wozDIc4yOpcB4YA==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/credential-provider-web-identity@3.863.0": + resolution: + { + integrity: sha512-INN5BNFalw68BxBFT+9sj2Yxia1XvS0+ZG0dkfFAmo8iXb2mw0o52PgqOiKlQfxnjbyOH7LgTB2hfbuuEwpKjw==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/endpoint-cache@3.804.0": + resolution: + { + integrity: sha512-TQVDkA/lV6ua75ELZaichMzlp6x7tDa1bqdy/+0ZftmODPtKXuOOEcJxmdN7Ui/YRo1gkRz2D9txYy7IlNg1Og==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/lib-dynamodb@3.863.0": + resolution: + { + integrity: sha512-LTvHm6/H6NnrfKpqQaY/6Xk/RVb6QP+NTHV9FZ+udSIgHMTNGkgIkDR8U/bKgNUMon9JmYG1FEO9EzxY/fZvKw==, + } + engines: { node: ">=18.0.0" } + peerDependencies: + "@aws-sdk/client-dynamodb": ^3.863.0 + + "@aws-sdk/middleware-endpoint-discovery@3.862.0": + resolution: + { + integrity: sha512-43KnrSlzsa6/locegW9SLe/kMv51PPPAslDbBuLVtLcFUNWuCE7wgKTTzMPeA+NJQHKuJTFRR2TLKPYEs+4VJA==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/middleware-host-header@3.862.0": + resolution: + { + integrity: sha512-jDje8dCFeFHfuCAxMDXBs8hy8q9NCTlyK4ThyyfAj3U4Pixly2mmzY2u7b7AyGhWsjJNx8uhTjlYq5zkQPQCYw==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/middleware-logger@3.862.0": + resolution: + { + integrity: sha512-N/bXSJznNBR/i7Ofmf9+gM6dx/SPBK09ZWLKsW5iQjqKxAKn/2DozlnE54uiEs1saHZWoNDRg69Ww4XYYSlG1Q==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/middleware-recursion-detection@3.862.0": + resolution: + { + integrity: sha512-KVoo3IOzEkTq97YKM4uxZcYFSNnMkhW/qj22csofLegZi5fk90ztUnnaeKfaEJHfHp/tm1Y3uSoOXH45s++kKQ==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/middleware-user-agent@3.863.0": + resolution: + { + integrity: sha512-AqXzUUpHM51E/cmq/h3yja+GFff7zxQFj6Fq1bVkkc4vzXBCGpyTmaMcUv4rrR/OmmWfidyzbxdy7PuhMNAspg==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/nested-clients@3.863.0": + resolution: + { + integrity: sha512-TgVr6d1MmJz7H6RehaFevZlJ+d1KSmyftp8oi2V5FCQ4OR22ITsTxmm5cIODYk8VInaie2ZABlPCN5fs+glJuA==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/region-config-resolver@3.862.0": + resolution: + { + integrity: sha512-VisR+/HuVFICrBPY+q9novEiE4b3mvDofWqyvmxHcWM7HumTz9ZQSuEtnlB/92GVM3KDUrR9EmBHNRrfXYZkcQ==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/token-providers@3.863.0": + resolution: + { + integrity: sha512-rGZ8QsnLWa725etzdPW2rH6+LN9eCcGsTIcxcCyh59cSgZLxT913q84WaUj6fOA7ElCOEU+WrV4Jiz4qwZI2DA==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/types@3.862.0": + resolution: + { + integrity: sha512-Bei+RL0cDxxV+lW2UezLbCYYNeJm6Nzee0TpW0FfyTRBhH9C1XQh4+x+IClriXvgBnRquTMMYsmJfvx8iyLKrg==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/util-dynamodb@3.863.0": + resolution: + { + integrity: sha512-siYzM635HLNb8hLq2nPdd2ZSpsrCMaXAdIwtpSS4NLgRl67ZSBrvU5Fvf9pSHSIfCVj4BN/NrUZ+trLM3ba/ig==, + } + engines: { node: ">=18.0.0" } + peerDependencies: + "@aws-sdk/client-dynamodb": ^3.863.0 + + "@aws-sdk/util-endpoints@3.862.0": + resolution: + { + integrity: sha512-eCZuScdE9MWWkHGM2BJxm726MCmWk/dlHjOKvkM0sN1zxBellBMw5JohNss1Z8/TUmnW2gb9XHTOiHuGjOdksA==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/util-locate-window@3.804.0": + resolution: + { + integrity: sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A==, + } + engines: { node: ">=18.0.0" } + + "@aws-sdk/util-user-agent-browser@3.862.0": + resolution: + { + integrity: sha512-BmPTlm0r9/10MMr5ND9E92r8KMZbq5ltYXYpVcUbAsnB1RJ8ASJuRoLne5F7mB3YMx0FJoOTuSq7LdQM3LgW3Q==, + } + + "@aws-sdk/util-user-agent-node@3.863.0": + resolution: + { + integrity: sha512-qoYXCe07xs0z+MjcDGuNBbP8P47i6h13BiHsXxiMKKiCihB3w2slvRbJYwUwc2fzZWSk0isKbdDmsdNZBKyBHg==, + } + engines: { node: ">=18.0.0" } + peerDependencies: + aws-crt: ">=1.0.0" + peerDependenciesMeta: + aws-crt: + optional: true + + "@aws-sdk/xml-builder@3.862.0": + resolution: + { + integrity: sha512-6Ed0kmC1NMbuFTEgNmamAUU1h5gShgxL1hBVLbEzUa3trX5aJBz1vU4bXaBTvOYUAnOHtiy1Ml4AMStd6hJnFA==, + } + engines: { node: ">=18.0.0" } + + "@babel/code-frame@7.23.5": + resolution: + { + integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-string-parser@7.21.5": + resolution: + { + integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-validator-identifier@7.19.1": + resolution: + { + integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-validator-identifier@7.22.20": + resolution: + { + integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==, + } + engines: { node: ">=6.9.0" } + + "@babel/highlight@7.23.4": + resolution: + { + integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==, + } + engines: { node: ">=6.9.0" } + + "@babel/parser@7.22.4": + resolution: + { + integrity: sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==, + } + engines: { node: ">=6.0.0" } '@aashutoshrathi/word-wrap@1.2.6': resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} @@ -970,6 +1250,617 @@ packages: cpu: [x64] os: [win32] + "@sigstore/bundle@1.1.0": + resolution: + { + integrity: sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==, + } + engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } + + "@sigstore/bundle@2.2.0": + resolution: + { + integrity: sha512-5VI58qgNs76RDrwXNhpmyN/jKpq9evV/7f1XrcqcAfvxDl5SeVY/I5Rmfe96ULAV7/FK5dge9RBKGBJPhL1WsQ==, + } + engines: { node: ^16.14.0 || >=18.0.0 } + + "@sigstore/core@1.0.0": + resolution: + { + integrity: sha512-dW2qjbWLRKGu6MIDUTBuJwXCnR8zivcSpf5inUzk7y84zqy/dji0/uahppoIgMoKeR+6pUZucrwHfkQQtiG9Rw==, + } + engines: { node: ^16.14.0 || >=18.0.0 } + + "@sigstore/protobuf-specs@0.2.1": + resolution: + { + integrity: sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==, + } + engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } + + "@sigstore/protobuf-specs@0.3.0": + resolution: + { + integrity: sha512-zxiQ66JFOjVvP9hbhGj/F/qNdsZfkGb/dVXSanNRNuAzMlr4MC95voPUBX8//ZNnmv3uSYzdfR/JSkrgvZTGxA==, + } + engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } + + "@sigstore/sign@1.0.0": + resolution: + { + integrity: sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==, + } + engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } + + "@sigstore/sign@2.2.3": + resolution: + { + integrity: sha512-LqlA+ffyN02yC7RKszCdMTS6bldZnIodiox+IkT8B2f8oRYXCB3LQ9roXeiEL21m64CVH1wyveYAORfD65WoSw==, + } + engines: { node: ^16.14.0 || >=18.0.0 } + + "@sigstore/tuf@1.0.3": + resolution: + { + integrity: sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==, + } + engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } + + "@sigstore/tuf@2.3.1": + resolution: + { + integrity: sha512-9Iv40z652td/QbV0o5n/x25H9w6IYRt2pIGbTX55yFDYlApDQn/6YZomjz6+KBx69rXHLzHcbtTS586mDdFD+Q==, + } + engines: { node: ^16.14.0 || >=18.0.0 } + + "@sigstore/verify@1.1.0": + resolution: + { + integrity: sha512-1fTqnqyTBWvV7cftUUFtDcHPdSox0N3Ub7C0lRyReYx4zZUlNTZjCV+HPy4Lre+r45dV7Qx5JLKvqqsgxuyYfg==, + } + engines: { node: ^16.14.0 || >=18.0.0 } + + "@sinclair/typebox@0.27.8": + resolution: + { + integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==, + } + + "@smithy/abort-controller@4.0.5": + resolution: + { + integrity: sha512-jcrqdTQurIrBbUm4W2YdLVMQDoL0sA9DTxYd2s+R/y+2U9NLOP7Xf/YqfSg1FZhlZIYEnvk2mwbyvIfdLEPo8g==, + } + engines: { node: ">=18.0.0" } + + "@smithy/config-resolver@4.1.5": + resolution: + { + integrity: sha512-viuHMxBAqydkB0AfWwHIdwf/PRH2z5KHGUzqyRtS/Wv+n3IHI993Sk76VCA7dD/+GzgGOmlJDITfPcJC1nIVIw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/core@3.8.0": + resolution: + { + integrity: sha512-EYqsIYJmkR1VhVE9pccnk353xhs+lB6btdutJEtsp7R055haMJp2yE16eSxw8fv+G0WUY6vqxyYOP8kOqawxYQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/credential-provider-imds@4.0.7": + resolution: + { + integrity: sha512-dDzrMXA8d8riFNiPvytxn0mNwR4B3h8lgrQ5UjAGu6T9z/kRg/Xncf4tEQHE/+t25sY8IH3CowcmWi+1U5B1Gw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/fetch-http-handler@5.1.1": + resolution: + { + integrity: sha512-61WjM0PWmZJR+SnmzaKI7t7G0UkkNFboDpzIdzSoy7TByUzlxo18Qlh9s71qug4AY4hlH/CwXdubMtkcNEb/sQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/hash-node@4.0.5": + resolution: + { + integrity: sha512-cv1HHkKhpyRb6ahD8Vcfb2Hgz67vNIXEp2vnhzfxLFGRukLCNEA5QdsorbUEzXma1Rco0u3rx5VTqbM06GcZqQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/invalid-dependency@4.0.5": + resolution: + { + integrity: sha512-IVnb78Qtf7EJpoEVo7qJ8BEXQwgC4n3igeJNNKEj/MLYtapnx8A67Zt/J3RXAj2xSO1910zk0LdFiygSemuLow==, + } + engines: { node: ">=18.0.0" } + + "@smithy/is-array-buffer@2.2.0": + resolution: + { + integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==, + } + engines: { node: ">=14.0.0" } + + "@smithy/is-array-buffer@4.0.0": + resolution: + { + integrity: sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-content-length@4.0.5": + resolution: + { + integrity: sha512-l1jlNZoYzoCC7p0zCtBDE5OBXZ95yMKlRlftooE5jPWQn4YBPLgsp+oeHp7iMHaTGoUdFqmHOPa8c9G3gBsRpQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-endpoint@4.1.18": + resolution: + { + integrity: sha512-ZhvqcVRPZxnZlokcPaTwb+r+h4yOIOCJmx0v2d1bpVlmP465g3qpVSf7wxcq5zZdu4jb0H4yIMxuPwDJSQc3MQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-retry@4.1.19": + resolution: + { + integrity: sha512-X58zx/NVECjeuUB6A8HBu4bhx72EoUz+T5jTMIyeNKx2lf+Gs9TmWPNNkH+5QF0COjpInP/xSpJGJ7xEnAklQQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-serde@4.0.9": + resolution: + { + integrity: sha512-uAFFR4dpeoJPGz8x9mhxp+RPjo5wW0QEEIPPPbLXiRRWeCATf/Km3gKIVR5vaP8bN1kgsPhcEeh+IZvUlBv6Xg==, + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-stack@4.0.5": + resolution: + { + integrity: sha512-/yoHDXZPh3ocRVyeWQFvC44u8seu3eYzZRveCMfgMOBcNKnAmOvjbL9+Cp5XKSIi9iYA9PECUuW2teDAk8T+OQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/node-config-provider@4.1.4": + resolution: + { + integrity: sha512-+UDQV/k42jLEPPHSn39l0Bmc4sB1xtdI9Gd47fzo/0PbXzJ7ylgaOByVjF5EeQIumkepnrJyfx86dPa9p47Y+w==, + } + engines: { node: ">=18.0.0" } + + "@smithy/node-http-handler@4.1.1": + resolution: + { + integrity: sha512-RHnlHqFpoVdjSPPiYy/t40Zovf3BBHc2oemgD7VsVTFFZrU5erFFe0n52OANZZ/5sbshgD93sOh5r6I35Xmpaw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/property-provider@4.0.5": + resolution: + { + integrity: sha512-R/bswf59T/n9ZgfgUICAZoWYKBHcsVDurAGX88zsiUtOTA/xUAPyiT+qkNCPwFn43pZqN84M4MiUsbSGQmgFIQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/protocol-http@5.1.3": + resolution: + { + integrity: sha512-fCJd2ZR7D22XhDY0l+92pUag/7je2BztPRQ01gU5bMChcyI0rlly7QFibnYHzcxDvccMjlpM/Q1ev8ceRIb48w==, + } + engines: { node: ">=18.0.0" } + + "@smithy/querystring-builder@4.0.5": + resolution: + { + integrity: sha512-NJeSCU57piZ56c+/wY+AbAw6rxCCAOZLCIniRE7wqvndqxcKKDOXzwWjrY7wGKEISfhL9gBbAaWWgHsUGedk+A==, + } + engines: { node: ">=18.0.0" } + + "@smithy/querystring-parser@4.0.5": + resolution: + { + integrity: sha512-6SV7md2CzNG/WUeTjVe6Dj8noH32r4MnUeFKZrnVYsQxpGSIcphAanQMayi8jJLZAWm6pdM9ZXvKCpWOsIGg0w==, + } + engines: { node: ">=18.0.0" } + + "@smithy/service-error-classification@4.0.7": + resolution: + { + integrity: sha512-XvRHOipqpwNhEjDf2L5gJowZEm5nsxC16pAZOeEcsygdjv9A2jdOh3YoDQvOXBGTsaJk6mNWtzWalOB9976Wlg==, + } + engines: { node: ">=18.0.0" } + + "@smithy/shared-ini-file-loader@4.0.5": + resolution: + { + integrity: sha512-YVVwehRDuehgoXdEL4r1tAAzdaDgaC9EQvhK0lEbfnbrd0bd5+CTQumbdPryX3J2shT7ZqQE+jPW4lmNBAB8JQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/signature-v4@5.1.3": + resolution: + { + integrity: sha512-mARDSXSEgllNzMw6N+mC+r1AQlEBO3meEAkR/UlfAgnMzJUB3goRBWgip1EAMG99wh36MDqzo86SfIX5Y+VEaw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/smithy-client@4.4.10": + resolution: + { + integrity: sha512-iW6HjXqN0oPtRS0NK/zzZ4zZeGESIFcxj2FkWed3mcK8jdSdHzvnCKXSjvewESKAgGKAbJRA+OsaqKhkdYRbQQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/types@4.3.2": + resolution: + { + integrity: sha512-QO4zghLxiQ5W9UZmX2Lo0nta2PuE1sSrXUYDoaB6HMR762C0P7v/HEPHf6ZdglTVssJG1bsrSBxdc3quvDSihw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/url-parser@4.0.5": + resolution: + { + integrity: sha512-j+733Um7f1/DXjYhCbvNXABV53NyCRRA54C7bNEIxNPs0YjfRxeMKjjgm2jvTYrciZyCjsicHwQ6Q0ylo+NAUw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-base64@4.0.0": + resolution: + { + integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-body-length-browser@4.0.0": + resolution: + { + integrity: sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-body-length-node@4.0.0": + resolution: + { + integrity: sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-buffer-from@2.2.0": + resolution: + { + integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==, + } + engines: { node: ">=14.0.0" } + + "@smithy/util-buffer-from@4.0.0": + resolution: + { + integrity: sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-config-provider@4.0.0": + resolution: + { + integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-defaults-mode-browser@4.0.26": + resolution: + { + integrity: sha512-xgl75aHIS/3rrGp7iTxQAOELYeyiwBu+eEgAk4xfKwJJ0L8VUjhO2shsDpeil54BOFsqmk5xfdesiewbUY5tKQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-defaults-mode-node@4.0.26": + resolution: + { + integrity: sha512-z81yyIkGiLLYVDetKTUeCZQ8x20EEzvQjrqJtb/mXnevLq2+w3XCEWTJ2pMp401b6BkEkHVfXb/cROBpVauLMQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-endpoints@3.0.7": + resolution: + { + integrity: sha512-klGBP+RpBp6V5JbrY2C/VKnHXn3d5V2YrifZbmMY8os7M6m8wdYFoO6w/fe5VkP+YVwrEktW3IWYaSQVNZJ8oQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-hex-encoding@4.0.0": + resolution: + { + integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-middleware@4.0.5": + resolution: + { + integrity: sha512-N40PfqsZHRSsByGB81HhSo+uvMxEHT+9e255S53pfBw/wI6WKDI7Jw9oyu5tJTLwZzV5DsMha3ji8jk9dsHmQQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-retry@4.0.7": + resolution: + { + integrity: sha512-TTO6rt0ppK70alZpkjwy+3nQlTiqNfoXja+qwuAchIEAIoSZW8Qyd76dvBv3I5bCpE38APafG23Y/u270NspiQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-stream@4.2.4": + resolution: + { + integrity: sha512-vSKnvNZX2BXzl0U2RgCLOwWaAP9x/ddd/XobPK02pCbzRm5s55M53uwb1rl/Ts7RXZvdJZerPkA+en2FDghLuQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-uri-escape@4.0.0": + resolution: + { + integrity: sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-utf8@2.3.0": + resolution: + { + integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==, + } + engines: { node: ">=14.0.0" } + + "@smithy/util-utf8@4.0.0": + resolution: + { + integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-waiter@4.0.7": + resolution: + { + integrity: sha512-mYqtQXPmrwvUljaHyGxYUIIRI3qjBTEb/f5QFi3A6VlxhpmZd5mWXn9W+qUkf2pVE1Hv3SqxefiZOPGdxmO64A==, + } + engines: { node: ">=18.0.0" } + + "@sqltools/formatter@1.2.5": + resolution: + { + integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==, + } + + "@supabase/functions-js@1.3.4": + resolution: + { + integrity: sha512-yYVgkECjv7IZEBKBI3EB5Q7R1p0FJ10g8Q9N7SWKIHUU6i6DnbEGHIMFLyQRm1hmiNWD8fL7bRVEYacmTRJhHw==, + } + + "@supabase/gotrue-js@1.24.0": + resolution: + { + integrity: sha512-6PVv7mHCFOxLm6TSBfR7hsq/y3CMKpvzePVR+ZWtlFBTjJ2J87g2OYE9bgC61P5TNeZopUXKw93H92yz0MTALw==, + } + + "@supabase/postgrest-js@0.37.4": + resolution: + { + integrity: sha512-x+c2rk1fz9s6f1PrGxCJ0QTUgXPDI0G3ngIqD5sSiXhhCyfl8Q5V92mXl2EYtlDhkiUkjFNrOZFhXVbXOHgvDw==, + } + + "@supabase/realtime-js@1.7.5": + resolution: + { + integrity: sha512-nXuoxt7NE1NTI+G8WBim1K2gkUC8YE3e9evBUG+t6xwd9Sq+sSOrjcE0qJ8/Y631BCnLzlhX6yhFYQFh1oQDOg==, + } + + "@supabase/storage-js@1.7.3": + resolution: + { + integrity: sha512-jnIZWqOc9TGclOozgX9v/RWGFCgJAyW/yvmauexgRZhWknUXoA4b2i8tj7vfwE0WTvNRuA5JpXID98rfJeSG7Q==, + } + + "@supabase/supabase-js@1.35.7": + resolution: + { + integrity: sha512-X+qCzmj5sH0dozagbLoK7LzysBaWoivO0gsAUAPPBQkQupQWuBfaOqG18gKhlfL0wp2PL888QzhQNScp/IwUfA==, + } + + "@tootallnate/once@2.0.0": + resolution: + { + integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==, + } + engines: { node: ">= 10" } + + "@ts-morph/common@0.22.0": + resolution: + { + integrity: sha512-HqNBuV/oIlMKdkLshXd1zKBqNQCsuPEsgQOkfFQ/eUKjRlwndXW1AjN9LVkBEIukm00gGXSRmfkl0Wv5VXLnlw==, + } + + "@tufjs/canonical-json@1.0.0": + resolution: + { + integrity: sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==, + } + engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } + + "@tufjs/canonical-json@2.0.0": + resolution: + { + integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==, + } + engines: { node: ^16.14.0 || >=18.0.0 } + + "@tufjs/models@1.0.4": + resolution: + { + integrity: sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==, + } + engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } + + "@tufjs/models@2.0.0": + resolution: + { + integrity: sha512-c8nj8BaOExmZKO2DXhDfegyhSGcG9E/mPN3U13L+/PsoWm1uaGiHHjxqSHQiasDBQwDA3aHuw9+9spYAP1qvvg==, + } + engines: { node: ^16.14.0 || >=18.0.0 } + + "@types/estree@1.0.5": + resolution: + { + integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==, + } + + "@types/glob@8.1.0": + resolution: + { + integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==, + } + + "@types/ioredis@5.0.0": + resolution: + { + integrity: sha512-zJbJ3FVE17CNl5KXzdeSPtdltc4tMT3TzC6fxQS0sQngkbFZ6h+0uTafsRqu+eSLIugf6Yb0Ea0SUuRr42Nk9g==, + } + deprecated: This is a stub types definition. ioredis provides its own type definitions, so you do not need this installed. + + "@types/json-schema@7.0.15": + resolution: + { + integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, + } + + "@types/linkify-it@3.0.2": + resolution: + { + integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==, + } + + "@types/long@4.0.2": + resolution: + { + integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==, + } + + "@types/markdown-it@12.2.3": + resolution: + { + integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==, + } + + "@types/mdurl@1.0.2": + resolution: + { + integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==, + } + + "@types/minimatch@3.0.5": + resolution: + { + integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==, + } + + "@types/minimatch@5.1.2": + resolution: + { + integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==, + } + + "@types/minimist@1.2.5": + resolution: + { + integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==, + } + + "@types/node-fetch@2.6.11": + resolution: + { + integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==, + } + + "@types/node-forge@1.3.11": + resolution: + { + integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==, + } + + "@types/node@20.11.22": + resolution: + { + integrity: sha512-/G+IxWxma6V3E+pqK1tSl2Fo1kl41pK1yeCyDsgkF9WlVAme4j5ISYM2zR11bgLFJGLN5sVK40T4RJNuiZbEjA==, + } + + "@types/normalize-package-data@2.4.4": + resolution: + { + integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==, + } + + "@types/pg@8.11.2": + resolution: + { + integrity: sha512-G2Mjygf2jFMU/9hCaTYxJrwdObdcnuQde1gndooZSOHsNSaCehAuwc7EIuSA34Do8Jx2yZ19KtvW8P0j4EuUXw==, + } + + "@types/phoenix@1.5.5": + resolution: + { + integrity: sha512-1eWWT19k0L4ZiTvdXjAvJ9KvW0B8SdiVftQmFPJGTEx78Q4PCSIQDpz+EfkFVR1N4U9gREjlW4JXL8YCIlY0bw==, + } + + "@types/rimraf@3.0.2": + resolution: + { + integrity: sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==, + } + + "@types/semver@7.5.8": + resolution: + { + integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==, + } + + "@types/uuid@9.0.8": + resolution: + { + integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==, + } + + "@types/webidl-conversions@7.0.0": + resolution: + { + integrity: sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==, + } + + "@types/webidl-conversions@7.0.3": + resolution: + { + integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==, + } + + "@types/whatwg-url@11.0.4": + resolution: + { + integrity: sha512-lXCmTWSHJvf0TRSO58nm978b8HJ/EdsSsEKLd3ODHFjo+3VGAyyTp4v50nWvwtzBxSMQrVOK7tcuN0zGPLICMw==, + } + + "@types/whatwg-url@8.2.2": + resolution: + { + integrity: sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==, + } + + "@typescript-eslint/eslint-plugin@7.1.0": + resolution: + { + integrity: sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w==, + } + engines: { node: ^16.0.0 || >=18.0.0 } '@sigstore/bundle@1.1.0': resolution: {integrity: sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -1402,6 +2293,12 @@ packages: bluebird@3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + bowser@2.11.0: + resolution: + { + integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==, + } + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -2052,6 +2949,13 @@ packages: fast-text-encoding@1.0.6: resolution: {integrity: sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==} + fast-xml-parser@5.2.5: + resolution: + { + integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==, + } + hasBin: true + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -3009,6 +3913,12 @@ packages: mlly@1.6.1: resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} + mnemonist@0.38.3: + resolution: + { + integrity: sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==, + } + modify-values@1.0.1: resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==} engines: {node: '>=0.10.0'} @@ -3309,6 +4219,12 @@ packages: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} + obliterator@1.6.1: + resolution: + { + integrity: sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig==, + } + obuf@1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} @@ -4170,6 +5086,12 @@ packages: strip-literal@2.0.0: resolution: {integrity: sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==} + strnum@2.1.1: + resolution: + { + integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==, + } + strong-log-transformer@2.1.0: resolution: {integrity: sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==} engines: {node: '>=4'} @@ -4718,6 +5640,391 @@ packages: snapshots: + "@aws-crypto/sha256-browser@5.2.0": + dependencies: + "@aws-crypto/sha256-js": 5.2.0 + "@aws-crypto/supports-web-crypto": 5.2.0 + "@aws-crypto/util": 5.2.0 + "@aws-sdk/types": 3.862.0 + "@aws-sdk/util-locate-window": 3.804.0 + "@smithy/util-utf8": 2.3.0 + tslib: 2.6.2 + + "@aws-crypto/sha256-js@5.2.0": + dependencies: + "@aws-crypto/util": 5.2.0 + "@aws-sdk/types": 3.862.0 + tslib: 2.6.2 + + "@aws-crypto/supports-web-crypto@5.2.0": + dependencies: + tslib: 2.6.2 + + "@aws-crypto/util@5.2.0": + dependencies: + "@aws-sdk/types": 3.862.0 + "@smithy/util-utf8": 2.3.0 + tslib: 2.6.2 + + "@aws-sdk/client-dynamodb@3.863.0": + dependencies: + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/core": 3.863.0 + "@aws-sdk/credential-provider-node": 3.863.0 + "@aws-sdk/middleware-endpoint-discovery": 3.862.0 + "@aws-sdk/middleware-host-header": 3.862.0 + "@aws-sdk/middleware-logger": 3.862.0 + "@aws-sdk/middleware-recursion-detection": 3.862.0 + "@aws-sdk/middleware-user-agent": 3.863.0 + "@aws-sdk/region-config-resolver": 3.862.0 + "@aws-sdk/types": 3.862.0 + "@aws-sdk/util-endpoints": 3.862.0 + "@aws-sdk/util-user-agent-browser": 3.862.0 + "@aws-sdk/util-user-agent-node": 3.863.0 + "@smithy/config-resolver": 4.1.5 + "@smithy/core": 3.8.0 + "@smithy/fetch-http-handler": 5.1.1 + "@smithy/hash-node": 4.0.5 + "@smithy/invalid-dependency": 4.0.5 + "@smithy/middleware-content-length": 4.0.5 + "@smithy/middleware-endpoint": 4.1.18 + "@smithy/middleware-retry": 4.1.19 + "@smithy/middleware-serde": 4.0.9 + "@smithy/middleware-stack": 4.0.5 + "@smithy/node-config-provider": 4.1.4 + "@smithy/node-http-handler": 4.1.1 + "@smithy/protocol-http": 5.1.3 + "@smithy/smithy-client": 4.4.10 + "@smithy/types": 4.3.2 + "@smithy/url-parser": 4.0.5 + "@smithy/util-base64": 4.0.0 + "@smithy/util-body-length-browser": 4.0.0 + "@smithy/util-body-length-node": 4.0.0 + "@smithy/util-defaults-mode-browser": 4.0.26 + "@smithy/util-defaults-mode-node": 4.0.26 + "@smithy/util-endpoints": 3.0.7 + "@smithy/util-middleware": 4.0.5 + "@smithy/util-retry": 4.0.7 + "@smithy/util-utf8": 4.0.0 + "@smithy/util-waiter": 4.0.7 + "@types/uuid": 9.0.8 + tslib: 2.6.2 + uuid: 9.0.1 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/client-sso@3.863.0": + dependencies: + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/core": 3.863.0 + "@aws-sdk/middleware-host-header": 3.862.0 + "@aws-sdk/middleware-logger": 3.862.0 + "@aws-sdk/middleware-recursion-detection": 3.862.0 + "@aws-sdk/middleware-user-agent": 3.863.0 + "@aws-sdk/region-config-resolver": 3.862.0 + "@aws-sdk/types": 3.862.0 + "@aws-sdk/util-endpoints": 3.862.0 + "@aws-sdk/util-user-agent-browser": 3.862.0 + "@aws-sdk/util-user-agent-node": 3.863.0 + "@smithy/config-resolver": 4.1.5 + "@smithy/core": 3.8.0 + "@smithy/fetch-http-handler": 5.1.1 + "@smithy/hash-node": 4.0.5 + "@smithy/invalid-dependency": 4.0.5 + "@smithy/middleware-content-length": 4.0.5 + "@smithy/middleware-endpoint": 4.1.18 + "@smithy/middleware-retry": 4.1.19 + "@smithy/middleware-serde": 4.0.9 + "@smithy/middleware-stack": 4.0.5 + "@smithy/node-config-provider": 4.1.4 + "@smithy/node-http-handler": 4.1.1 + "@smithy/protocol-http": 5.1.3 + "@smithy/smithy-client": 4.4.10 + "@smithy/types": 4.3.2 + "@smithy/url-parser": 4.0.5 + "@smithy/util-base64": 4.0.0 + "@smithy/util-body-length-browser": 4.0.0 + "@smithy/util-body-length-node": 4.0.0 + "@smithy/util-defaults-mode-browser": 4.0.26 + "@smithy/util-defaults-mode-node": 4.0.26 + "@smithy/util-endpoints": 3.0.7 + "@smithy/util-middleware": 4.0.5 + "@smithy/util-retry": 4.0.7 + "@smithy/util-utf8": 4.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/core@3.863.0": + dependencies: + "@aws-sdk/types": 3.862.0 + "@aws-sdk/xml-builder": 3.862.0 + "@smithy/core": 3.8.0 + "@smithy/node-config-provider": 4.1.4 + "@smithy/property-provider": 4.0.5 + "@smithy/protocol-http": 5.1.3 + "@smithy/signature-v4": 5.1.3 + "@smithy/smithy-client": 4.4.10 + "@smithy/types": 4.3.2 + "@smithy/util-base64": 4.0.0 + "@smithy/util-body-length-browser": 4.0.0 + "@smithy/util-middleware": 4.0.5 + "@smithy/util-utf8": 4.0.0 + fast-xml-parser: 5.2.5 + tslib: 2.6.2 + + "@aws-sdk/credential-provider-env@3.863.0": + dependencies: + "@aws-sdk/core": 3.863.0 + "@aws-sdk/types": 3.862.0 + "@smithy/property-provider": 4.0.5 + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@aws-sdk/credential-provider-http@3.863.0": + dependencies: + "@aws-sdk/core": 3.863.0 + "@aws-sdk/types": 3.862.0 + "@smithy/fetch-http-handler": 5.1.1 + "@smithy/node-http-handler": 4.1.1 + "@smithy/property-provider": 4.0.5 + "@smithy/protocol-http": 5.1.3 + "@smithy/smithy-client": 4.4.10 + "@smithy/types": 4.3.2 + "@smithy/util-stream": 4.2.4 + tslib: 2.6.2 + + "@aws-sdk/credential-provider-ini@3.863.0": + dependencies: + "@aws-sdk/core": 3.863.0 + "@aws-sdk/credential-provider-env": 3.863.0 + "@aws-sdk/credential-provider-http": 3.863.0 + "@aws-sdk/credential-provider-process": 3.863.0 + "@aws-sdk/credential-provider-sso": 3.863.0 + "@aws-sdk/credential-provider-web-identity": 3.863.0 + "@aws-sdk/nested-clients": 3.863.0 + "@aws-sdk/types": 3.862.0 + "@smithy/credential-provider-imds": 4.0.7 + "@smithy/property-provider": 4.0.5 + "@smithy/shared-ini-file-loader": 4.0.5 + "@smithy/types": 4.3.2 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/credential-provider-node@3.863.0": + dependencies: + "@aws-sdk/credential-provider-env": 3.863.0 + "@aws-sdk/credential-provider-http": 3.863.0 + "@aws-sdk/credential-provider-ini": 3.863.0 + "@aws-sdk/credential-provider-process": 3.863.0 + "@aws-sdk/credential-provider-sso": 3.863.0 + "@aws-sdk/credential-provider-web-identity": 3.863.0 + "@aws-sdk/types": 3.862.0 + "@smithy/credential-provider-imds": 4.0.7 + "@smithy/property-provider": 4.0.5 + "@smithy/shared-ini-file-loader": 4.0.5 + "@smithy/types": 4.3.2 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/credential-provider-process@3.863.0": + dependencies: + "@aws-sdk/core": 3.863.0 + "@aws-sdk/types": 3.862.0 + "@smithy/property-provider": 4.0.5 + "@smithy/shared-ini-file-loader": 4.0.5 + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@aws-sdk/credential-provider-sso@3.863.0": + dependencies: + "@aws-sdk/client-sso": 3.863.0 + "@aws-sdk/core": 3.863.0 + "@aws-sdk/token-providers": 3.863.0 + "@aws-sdk/types": 3.862.0 + "@smithy/property-provider": 4.0.5 + "@smithy/shared-ini-file-loader": 4.0.5 + "@smithy/types": 4.3.2 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/credential-provider-web-identity@3.863.0": + dependencies: + "@aws-sdk/core": 3.863.0 + "@aws-sdk/nested-clients": 3.863.0 + "@aws-sdk/types": 3.862.0 + "@smithy/property-provider": 4.0.5 + "@smithy/types": 4.3.2 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/endpoint-cache@3.804.0": + dependencies: + mnemonist: 0.38.3 + tslib: 2.6.2 + + "@aws-sdk/lib-dynamodb@3.863.0(@aws-sdk/client-dynamodb@3.863.0)": + dependencies: + "@aws-sdk/client-dynamodb": 3.863.0 + "@aws-sdk/core": 3.863.0 + "@aws-sdk/util-dynamodb": 3.863.0(@aws-sdk/client-dynamodb@3.863.0) + "@smithy/core": 3.8.0 + "@smithy/smithy-client": 4.4.10 + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@aws-sdk/middleware-endpoint-discovery@3.862.0": + dependencies: + "@aws-sdk/endpoint-cache": 3.804.0 + "@aws-sdk/types": 3.862.0 + "@smithy/node-config-provider": 4.1.4 + "@smithy/protocol-http": 5.1.3 + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@aws-sdk/middleware-host-header@3.862.0": + dependencies: + "@aws-sdk/types": 3.862.0 + "@smithy/protocol-http": 5.1.3 + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@aws-sdk/middleware-logger@3.862.0": + dependencies: + "@aws-sdk/types": 3.862.0 + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@aws-sdk/middleware-recursion-detection@3.862.0": + dependencies: + "@aws-sdk/types": 3.862.0 + "@smithy/protocol-http": 5.1.3 + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@aws-sdk/middleware-user-agent@3.863.0": + dependencies: + "@aws-sdk/core": 3.863.0 + "@aws-sdk/types": 3.862.0 + "@aws-sdk/util-endpoints": 3.862.0 + "@smithy/core": 3.8.0 + "@smithy/protocol-http": 5.1.3 + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@aws-sdk/nested-clients@3.863.0": + dependencies: + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/core": 3.863.0 + "@aws-sdk/middleware-host-header": 3.862.0 + "@aws-sdk/middleware-logger": 3.862.0 + "@aws-sdk/middleware-recursion-detection": 3.862.0 + "@aws-sdk/middleware-user-agent": 3.863.0 + "@aws-sdk/region-config-resolver": 3.862.0 + "@aws-sdk/types": 3.862.0 + "@aws-sdk/util-endpoints": 3.862.0 + "@aws-sdk/util-user-agent-browser": 3.862.0 + "@aws-sdk/util-user-agent-node": 3.863.0 + "@smithy/config-resolver": 4.1.5 + "@smithy/core": 3.8.0 + "@smithy/fetch-http-handler": 5.1.1 + "@smithy/hash-node": 4.0.5 + "@smithy/invalid-dependency": 4.0.5 + "@smithy/middleware-content-length": 4.0.5 + "@smithy/middleware-endpoint": 4.1.18 + "@smithy/middleware-retry": 4.1.19 + "@smithy/middleware-serde": 4.0.9 + "@smithy/middleware-stack": 4.0.5 + "@smithy/node-config-provider": 4.1.4 + "@smithy/node-http-handler": 4.1.1 + "@smithy/protocol-http": 5.1.3 + "@smithy/smithy-client": 4.4.10 + "@smithy/types": 4.3.2 + "@smithy/url-parser": 4.0.5 + "@smithy/util-base64": 4.0.0 + "@smithy/util-body-length-browser": 4.0.0 + "@smithy/util-body-length-node": 4.0.0 + "@smithy/util-defaults-mode-browser": 4.0.26 + "@smithy/util-defaults-mode-node": 4.0.26 + "@smithy/util-endpoints": 3.0.7 + "@smithy/util-middleware": 4.0.5 + "@smithy/util-retry": 4.0.7 + "@smithy/util-utf8": 4.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/region-config-resolver@3.862.0": + dependencies: + "@aws-sdk/types": 3.862.0 + "@smithy/node-config-provider": 4.1.4 + "@smithy/types": 4.3.2 + "@smithy/util-config-provider": 4.0.0 + "@smithy/util-middleware": 4.0.5 + tslib: 2.6.2 + + "@aws-sdk/token-providers@3.863.0": + dependencies: + "@aws-sdk/core": 3.863.0 + "@aws-sdk/nested-clients": 3.863.0 + "@aws-sdk/types": 3.862.0 + "@smithy/property-provider": 4.0.5 + "@smithy/shared-ini-file-loader": 4.0.5 + "@smithy/types": 4.3.2 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/types@3.862.0": + dependencies: + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@aws-sdk/util-dynamodb@3.863.0(@aws-sdk/client-dynamodb@3.863.0)": + dependencies: + "@aws-sdk/client-dynamodb": 3.863.0 + tslib: 2.6.2 + + "@aws-sdk/util-endpoints@3.862.0": + dependencies: + "@aws-sdk/types": 3.862.0 + "@smithy/types": 4.3.2 + "@smithy/url-parser": 4.0.5 + "@smithy/util-endpoints": 3.0.7 + tslib: 2.6.2 + + "@aws-sdk/util-locate-window@3.804.0": + dependencies: + tslib: 2.6.2 + + "@aws-sdk/util-user-agent-browser@3.862.0": + dependencies: + "@aws-sdk/types": 3.862.0 + "@smithy/types": 4.3.2 + bowser: 2.11.0 + tslib: 2.6.2 + + "@aws-sdk/util-user-agent-node@3.863.0": + dependencies: + "@aws-sdk/middleware-user-agent": 3.863.0 + "@aws-sdk/types": 3.862.0 + "@smithy/node-config-provider": 4.1.4 + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@aws-sdk/xml-builder@3.862.0": + dependencies: + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@babel/code-frame@7.23.5": '@aashutoshrathi/word-wrap@1.2.6': {} '@babel/code-frame@7.23.5': @@ -5433,6 +6740,285 @@ snapshots: '@sinclair/typebox@0.27.8': {} + "@smithy/abort-controller@4.0.5": + dependencies: + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@smithy/config-resolver@4.1.5": + dependencies: + "@smithy/node-config-provider": 4.1.4 + "@smithy/types": 4.3.2 + "@smithy/util-config-provider": 4.0.0 + "@smithy/util-middleware": 4.0.5 + tslib: 2.6.2 + + "@smithy/core@3.8.0": + dependencies: + "@smithy/middleware-serde": 4.0.9 + "@smithy/protocol-http": 5.1.3 + "@smithy/types": 4.3.2 + "@smithy/util-base64": 4.0.0 + "@smithy/util-body-length-browser": 4.0.0 + "@smithy/util-middleware": 4.0.5 + "@smithy/util-stream": 4.2.4 + "@smithy/util-utf8": 4.0.0 + "@types/uuid": 9.0.8 + tslib: 2.6.2 + uuid: 9.0.1 + + "@smithy/credential-provider-imds@4.0.7": + dependencies: + "@smithy/node-config-provider": 4.1.4 + "@smithy/property-provider": 4.0.5 + "@smithy/types": 4.3.2 + "@smithy/url-parser": 4.0.5 + tslib: 2.6.2 + + "@smithy/fetch-http-handler@5.1.1": + dependencies: + "@smithy/protocol-http": 5.1.3 + "@smithy/querystring-builder": 4.0.5 + "@smithy/types": 4.3.2 + "@smithy/util-base64": 4.0.0 + tslib: 2.6.2 + + "@smithy/hash-node@4.0.5": + dependencies: + "@smithy/types": 4.3.2 + "@smithy/util-buffer-from": 4.0.0 + "@smithy/util-utf8": 4.0.0 + tslib: 2.6.2 + + "@smithy/invalid-dependency@4.0.5": + dependencies: + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@smithy/is-array-buffer@2.2.0": + dependencies: + tslib: 2.6.2 + + "@smithy/is-array-buffer@4.0.0": + dependencies: + tslib: 2.6.2 + + "@smithy/middleware-content-length@4.0.5": + dependencies: + "@smithy/protocol-http": 5.1.3 + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@smithy/middleware-endpoint@4.1.18": + dependencies: + "@smithy/core": 3.8.0 + "@smithy/middleware-serde": 4.0.9 + "@smithy/node-config-provider": 4.1.4 + "@smithy/shared-ini-file-loader": 4.0.5 + "@smithy/types": 4.3.2 + "@smithy/url-parser": 4.0.5 + "@smithy/util-middleware": 4.0.5 + tslib: 2.6.2 + + "@smithy/middleware-retry@4.1.19": + dependencies: + "@smithy/node-config-provider": 4.1.4 + "@smithy/protocol-http": 5.1.3 + "@smithy/service-error-classification": 4.0.7 + "@smithy/smithy-client": 4.4.10 + "@smithy/types": 4.3.2 + "@smithy/util-middleware": 4.0.5 + "@smithy/util-retry": 4.0.7 + "@types/uuid": 9.0.8 + tslib: 2.6.2 + uuid: 9.0.1 + + "@smithy/middleware-serde@4.0.9": + dependencies: + "@smithy/protocol-http": 5.1.3 + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@smithy/middleware-stack@4.0.5": + dependencies: + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@smithy/node-config-provider@4.1.4": + dependencies: + "@smithy/property-provider": 4.0.5 + "@smithy/shared-ini-file-loader": 4.0.5 + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@smithy/node-http-handler@4.1.1": + dependencies: + "@smithy/abort-controller": 4.0.5 + "@smithy/protocol-http": 5.1.3 + "@smithy/querystring-builder": 4.0.5 + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@smithy/property-provider@4.0.5": + dependencies: + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@smithy/protocol-http@5.1.3": + dependencies: + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@smithy/querystring-builder@4.0.5": + dependencies: + "@smithy/types": 4.3.2 + "@smithy/util-uri-escape": 4.0.0 + tslib: 2.6.2 + + "@smithy/querystring-parser@4.0.5": + dependencies: + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@smithy/service-error-classification@4.0.7": + dependencies: + "@smithy/types": 4.3.2 + + "@smithy/shared-ini-file-loader@4.0.5": + dependencies: + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@smithy/signature-v4@5.1.3": + dependencies: + "@smithy/is-array-buffer": 4.0.0 + "@smithy/protocol-http": 5.1.3 + "@smithy/types": 4.3.2 + "@smithy/util-hex-encoding": 4.0.0 + "@smithy/util-middleware": 4.0.5 + "@smithy/util-uri-escape": 4.0.0 + "@smithy/util-utf8": 4.0.0 + tslib: 2.6.2 + + "@smithy/smithy-client@4.4.10": + dependencies: + "@smithy/core": 3.8.0 + "@smithy/middleware-endpoint": 4.1.18 + "@smithy/middleware-stack": 4.0.5 + "@smithy/protocol-http": 5.1.3 + "@smithy/types": 4.3.2 + "@smithy/util-stream": 4.2.4 + tslib: 2.6.2 + + "@smithy/types@4.3.2": + dependencies: + tslib: 2.6.2 + + "@smithy/url-parser@4.0.5": + dependencies: + "@smithy/querystring-parser": 4.0.5 + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@smithy/util-base64@4.0.0": + dependencies: + "@smithy/util-buffer-from": 4.0.0 + "@smithy/util-utf8": 4.0.0 + tslib: 2.6.2 + + "@smithy/util-body-length-browser@4.0.0": + dependencies: + tslib: 2.6.2 + + "@smithy/util-body-length-node@4.0.0": + dependencies: + tslib: 2.6.2 + + "@smithy/util-buffer-from@2.2.0": + dependencies: + "@smithy/is-array-buffer": 2.2.0 + tslib: 2.6.2 + + "@smithy/util-buffer-from@4.0.0": + dependencies: + "@smithy/is-array-buffer": 4.0.0 + tslib: 2.6.2 + + "@smithy/util-config-provider@4.0.0": + dependencies: + tslib: 2.6.2 + + "@smithy/util-defaults-mode-browser@4.0.26": + dependencies: + "@smithy/property-provider": 4.0.5 + "@smithy/smithy-client": 4.4.10 + "@smithy/types": 4.3.2 + bowser: 2.11.0 + tslib: 2.6.2 + + "@smithy/util-defaults-mode-node@4.0.26": + dependencies: + "@smithy/config-resolver": 4.1.5 + "@smithy/credential-provider-imds": 4.0.7 + "@smithy/node-config-provider": 4.1.4 + "@smithy/property-provider": 4.0.5 + "@smithy/smithy-client": 4.4.10 + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@smithy/util-endpoints@3.0.7": + dependencies: + "@smithy/node-config-provider": 4.1.4 + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@smithy/util-hex-encoding@4.0.0": + dependencies: + tslib: 2.6.2 + + "@smithy/util-middleware@4.0.5": + dependencies: + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@smithy/util-retry@4.0.7": + dependencies: + "@smithy/service-error-classification": 4.0.7 + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@smithy/util-stream@4.2.4": + dependencies: + "@smithy/fetch-http-handler": 5.1.1 + "@smithy/node-http-handler": 4.1.1 + "@smithy/types": 4.3.2 + "@smithy/util-base64": 4.0.0 + "@smithy/util-buffer-from": 4.0.0 + "@smithy/util-hex-encoding": 4.0.0 + "@smithy/util-utf8": 4.0.0 + tslib: 2.6.2 + + "@smithy/util-uri-escape@4.0.0": + dependencies: + tslib: 2.6.2 + + "@smithy/util-utf8@2.3.0": + dependencies: + "@smithy/util-buffer-from": 2.2.0 + tslib: 2.6.2 + + "@smithy/util-utf8@4.0.0": + dependencies: + "@smithy/util-buffer-from": 4.0.0 + tslib: 2.6.2 + + "@smithy/util-waiter@4.0.7": + dependencies: + "@smithy/abort-controller": 4.0.5 + "@smithy/types": 4.3.2 + tslib: 2.6.2 + + "@sqltools/formatter@1.2.5": {} '@sqltools/formatter@1.2.5': {} '@supabase/functions-js@1.3.4(encoding@0.1.13)': @@ -5562,6 +7148,9 @@ snapshots: '@types/semver@7.5.8': {} + "@types/uuid@9.0.8": {} + + "@types/webidl-conversions@7.0.0": {} '@types/webidl-conversions@7.0.0': {} '@types/webidl-conversions@7.0.3': {} @@ -5872,6 +7461,8 @@ snapshots: bluebird@3.7.2: {} + bowser@2.11.0: {} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -6603,6 +8194,10 @@ snapshots: fast-text-encoding@1.0.6: {} + fast-xml-parser@5.2.5: + dependencies: + strnum: 2.1.1 + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -7772,6 +9367,10 @@ snapshots: pkg-types: 1.0.3 ufo: 1.4.0 + mnemonist@0.38.3: + dependencies: + obliterator: 1.6.1 + modify-values@1.0.1: {} moment@2.30.1: {} @@ -8124,6 +9723,8 @@ snapshots: object-keys@1.1.1: {} + obliterator@1.6.1: {} + obuf@1.1.2: {} once@1.4.0: @@ -9006,6 +10607,8 @@ snapshots: dependencies: js-tokens: 8.0.3 + strnum@2.1.1: {} + strong-log-transformer@2.1.0: dependencies: duplexer: 0.1.2