diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index e72711f9f1..c0f4cda7c0 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -94,7 +94,7 @@ services: dynamodb-admin: image: "aaronshaf/dynamodb-admin" - container_name: dynamodb-admin + container_name: dynamodb-admin_token-generation-readmodel depends_on: - token-generation-readmodel restart: always diff --git a/packages/catalog-platformstate-writer/.env b/packages/catalog-platformstate-writer/.env index 1c5ad22067..8cf2111be7 100644 --- a/packages/catalog-platformstate-writer/.env +++ b/packages/catalog-platformstate-writer/.env @@ -6,11 +6,7 @@ KAFKA_BROKERS="localhost:9092" KAFKA_DISABLE_AWS_IAM_AUTH="true" CATALOG_TOPIC="event-store.catalog.events" AWS_CONFIG_FILE=aws.config.local -TOKEN_GENERATION_READMODEL_HOST="localhost" -TOKEN_GENERATION_READMODEL_PORT=8085 TOKEN_GENERATION_READMODEL_TABLE_NAME_PLATFORM="platform-states" TOKEN_GENERATION_READMODEL_TABLE_NAME_TOKEN_GENERATION="token-generation-states" AWS_REGION="eu-south-1" -AWS_ACCESS_KEY_ID="key" -AWS_SECRET_ACCESS_KEY="secret" diff --git a/packages/catalog-platformstate-writer/aws.config.local b/packages/catalog-platformstate-writer/aws.config.local index 811d9c951e..f3016f81d6 100644 --- a/packages/catalog-platformstate-writer/aws.config.local +++ b/packages/catalog-platformstate-writer/aws.config.local @@ -2,3 +2,8 @@ aws_access_key_id=key aws_secret_access_key=secret region=eu-south-1 +services=local + +[services local] +dynamodb= + endpoint_url=http://localhost:8085 diff --git a/packages/catalog-platformstate-writer/src/index.ts b/packages/catalog-platformstate-writer/src/index.ts index a9875fa099..8ac4fff55e 100644 --- a/packages/catalog-platformstate-writer/src/index.ts +++ b/packages/catalog-platformstate-writer/src/index.ts @@ -8,14 +8,7 @@ import { handleMessageV1 } from "./consumerServiceV1.js"; import { handleMessageV2 } from "./consumerServiceV2.js"; import { config } from "./config/config.js"; -const dynamoDBClient = new DynamoDBClient({ - credentials: { - accessKeyId: config.awsAccessKeyId, - secretAccessKey: config.awsSecretAccessKey, - }, - region: config.awsRegion, - endpoint: `http://${config.tokenGenerationReadModelDbHost}:${config.tokenGenerationReadModelDbPort}`, -}); +const dynamoDBClient = new DynamoDBClient(); async function processMessage({ message, diff --git a/packages/catalog-platformstate-writer/src/utils.ts b/packages/catalog-platformstate-writer/src/utils.ts index 7ac11652cc..e01e9d572c 100644 --- a/packages/catalog-platformstate-writer/src/utils.ts +++ b/packages/catalog-platformstate-writer/src/utils.ts @@ -148,8 +148,9 @@ export const updateDescriptorStateInPlatformStatesEntry = async ( await dynamoDBClient.send(command); }; -export const readTokenStateEntriesByEserviceIdAndDescriptorId = async ( +export const updateDescriptorStateInTokenGenerationStatesTable = async ( eserviceId_descriptorId: GSIPKEServiceIdDescriptorId, + descriptorState: ItemState, dynamoDBClient: DynamoDBClient ): Promise => { const runPaginatedQuery = async ( @@ -188,6 +189,12 @@ export const readTokenStateEntriesByEserviceIdAndDescriptorId = async ( ); } + await updateDescriptorStateEntriesInTokenGenerationStatesTable( + descriptorState, + dynamoDBClient, + tokenStateEntries.data + ); + if (!data.LastEvaluatedKey) { return tokenStateEntries.data; } else { @@ -210,17 +217,11 @@ export const readTokenStateEntriesByEserviceIdAndDescriptorId = async ( ); }; -export const updateDescriptorStateInTokenGenerationStatesTable = async ( - eserviceId_descriptorId: GSIPKEServiceIdDescriptorId, +const updateDescriptorStateEntriesInTokenGenerationStatesTable = async ( descriptorState: ItemState, - dynamoDBClient: DynamoDBClient + dynamoDBClient: DynamoDBClient, + entriesToUpdate: TokenGenerationStatesClientPurposeEntry[] ): Promise => { - const entriesToUpdate = - await readTokenStateEntriesByEserviceIdAndDescriptorId( - eserviceId_descriptorId, - dynamoDBClient - ); - for (const entry of entriesToUpdate) { const input: UpdateItemInput = { ConditionExpression: "attribute_exists(GSIPK_eserviceId_descriptorId)", diff --git a/packages/catalog-platformstate-writer/test/consumerServiceV1.test.ts b/packages/catalog-platformstate-writer/test/consumerServiceV1.test.ts index a4985bdba0..9ba36ba2d5 100644 --- a/packages/catalog-platformstate-writer/test/consumerServiceV1.test.ts +++ b/packages/catalog-platformstate-writer/test/consumerServiceV1.test.ts @@ -32,24 +32,19 @@ import { getMockTokenStatesClientPurposeEntry, buildDynamoDBTables, deleteDynamoDBTables, + readTokenStateEntriesByEserviceIdAndDescriptorId, } from "pagopa-interop-commons-test"; import { DynamoDBClient } from "@aws-sdk/client-dynamodb"; +import { writeTokenStateEntry } from "pagopa-interop-commons-test"; import { handleMessageV1 } from "../src/consumerServiceV1.js"; -import { - readCatalogEntry, - readTokenStateEntriesByEserviceIdAndDescriptorId, - writeCatalogEntry, -} from "../src/utils.js"; -import { config, sleep, writeTokenStateEntry } from "./utils.js"; - +import { readCatalogEntry, writeCatalogEntry } from "../src/utils.js"; +import { config, sleep } from "./utils.js"; describe("V1 events", async () => { if (!config) { fail(); } const dynamoDBClient = new DynamoDBClient({ - credentials: { accessKeyId: "key", secretAccessKey: "secret" }, - region: "eu-central-1", - endpoint: `http://${config.tokenGenerationReadModelDbHost}:${config.tokenGenerationReadModelDbPort}`, + endpoint: `http://localhost:${config.tokenGenerationReadModelDbPort}`, }); beforeEach(async () => { await buildDynamoDBTables(dynamoDBClient); diff --git a/packages/catalog-platformstate-writer/test/consumerServiceV2.test.ts b/packages/catalog-platformstate-writer/test/consumerServiceV2.test.ts index 46b6781fb3..104c5cf158 100644 --- a/packages/catalog-platformstate-writer/test/consumerServiceV2.test.ts +++ b/packages/catalog-platformstate-writer/test/consumerServiceV2.test.ts @@ -36,23 +36,19 @@ import { getMockTokenStatesClientPurposeEntry, buildDynamoDBTables, deleteDynamoDBTables, -} from "pagopa-interop-commons-test"; -import { - readCatalogEntry, readTokenStateEntriesByEserviceIdAndDescriptorId, - writeCatalogEntry, -} from "../src/utils.js"; + writeTokenStateEntry, +} from "pagopa-interop-commons-test"; +import { readCatalogEntry, writeCatalogEntry } from "../src/utils.js"; import { handleMessageV2 } from "../src/consumerServiceV2.js"; -import { config, sleep, writeTokenStateEntry } from "./utils.js"; +import { config, sleep } from "./utils.js"; describe("integration tests V2 events", async () => { if (!config) { fail(); } const dynamoDBClient = new DynamoDBClient({ - credentials: { accessKeyId: "key", secretAccessKey: "secret" }, - region: "eu-south-1", - endpoint: `http://${config.tokenGenerationReadModelDbHost}:${config.tokenGenerationReadModelDbPort}`, + endpoint: `http://localhost:${config.tokenGenerationReadModelDbPort}`, }); beforeEach(async () => { await buildDynamoDBTables(dynamoDBClient); diff --git a/packages/catalog-platformstate-writer/test/utils.test.ts b/packages/catalog-platformstate-writer/test/utils.test.ts index bc52274657..58c834f1c4 100644 --- a/packages/catalog-platformstate-writer/test/utils.test.ts +++ b/packages/catalog-platformstate-writer/test/utils.test.ts @@ -28,21 +28,19 @@ import { getMockTokenStatesClientPurposeEntry, buildDynamoDBTables, deleteDynamoDBTables, + readTokenStateEntriesByEserviceIdAndDescriptorId, + readAllTokenStateItems, + writeTokenStateEntry, } from "pagopa-interop-commons-test"; import { deleteCatalogEntry, descriptorStateToItemState, readCatalogEntry, - readTokenStateEntriesByEserviceIdAndDescriptorId, updateDescriptorStateInPlatformStatesEntry, updateDescriptorStateInTokenGenerationStatesTable, writeCatalogEntry, } from "../src/utils.js"; -import { - config, - readAllTokenStateItems, - writeTokenStateEntry, -} from "./utils.js"; +import { config } from "./utils.js"; describe("utils tests", async () => { if (!config) { @@ -51,11 +49,7 @@ describe("utils tests", async () => { const dynamoDBClient = new DynamoDBClient({ credentials: { accessKeyId: "key", secretAccessKey: "secret" }, region: "eu-central-1", - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - endpoint: `http://${config.tokenGenerationReadModelDbHost}:${ - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - config.tokenGenerationReadModelDbPort - }`, + endpoint: `http://localhost:${config.tokenGenerationReadModelDbPort}`, }); beforeEach(async () => { await buildDynamoDBTables(dynamoDBClient); diff --git a/packages/catalog-platformstate-writer/test/utils.ts b/packages/catalog-platformstate-writer/test/utils.ts index 883c912bc6..3c4071f28a 100644 --- a/packages/catalog-platformstate-writer/test/utils.ts +++ b/packages/catalog-platformstate-writer/test/utils.ts @@ -1,21 +1,6 @@ /* eslint-disable @typescript-eslint/no-unnecessary-type-assertion */ /* eslint-disable @typescript-eslint/no-non-null-assertion */ -import { fail } from "assert"; -import { - DynamoDBClient, - PutItemCommand, - PutItemInput, - ScanCommand, - ScanCommandOutput, - ScanInput, -} from "@aws-sdk/client-dynamodb"; -import { - genericInternalError, - TokenGenerationStatesClientPurposeEntry, -} from "pagopa-interop-models"; import { inject, vi } from "vitest"; -import { unmarshall } from "@aws-sdk/util-dynamodb"; -import { z } from "zod"; export const config = inject("tokenGenerationReadModelConfig"); @@ -26,110 +11,3 @@ export const sleep = (ms: number, mockDate = new Date()): Promise => vi.useFakeTimers(); vi.setSystemTime(mockDate); }); - -export const writeTokenStateEntry = async ( - tokenStateEntry: TokenGenerationStatesClientPurposeEntry, - dynamoDBClient: DynamoDBClient -): Promise => { - if (!config) { - fail(); - } - const input: PutItemInput = { - ConditionExpression: "attribute_not_exists(PK)", - Item: { - PK: { - S: tokenStateEntry.PK, - }, - descriptorState: { - S: tokenStateEntry.descriptorState!, - }, - descriptorAudience: { - L: tokenStateEntry.descriptorAudience - ? tokenStateEntry.descriptorAudience.map((item) => ({ - S: item, - })) - : [], - }, - updatedAt: { - S: tokenStateEntry.updatedAt, - }, - consumerId: { - S: tokenStateEntry.consumerId, - }, - agreementId: { - S: tokenStateEntry.agreementId!, - }, - purposeVersionId: { - S: tokenStateEntry.purposeVersionId!, - }, - GSIPK_consumerId_eserviceId: { - S: tokenStateEntry.GSIPK_consumerId_eserviceId!, - }, - clientKind: { - S: tokenStateEntry.clientKind, - }, - publicKey: { - S: tokenStateEntry.publicKey, - }, - GSIPK_clientId: { - S: tokenStateEntry.GSIPK_clientId, - }, - GSIPK_kid: { - S: tokenStateEntry.GSIPK_kid, - }, - GSIPK_clientId_purposeId: { - S: tokenStateEntry.GSIPK_clientId_purposeId!, - }, - agreementState: { - S: tokenStateEntry.agreementState!, - }, - GSIPK_eserviceId_descriptorId: { - S: tokenStateEntry.GSIPK_eserviceId_descriptorId!, - }, - GSIPK_purposeId: { - S: tokenStateEntry.GSIPK_purposeId!, - }, - purposeState: { - S: tokenStateEntry.purposeState!, - }, - }, - TableName: config.tokenGenerationReadModelTableNameTokenGeneration, - }; - const command = new PutItemCommand(input); - await dynamoDBClient.send(command); -}; - -export const readAllTokenStateItems = async ( - dynamoDBClient: DynamoDBClient -): Promise => { - if (!config) { - fail(); - } - - const readInput: ScanInput = { - TableName: config.tokenGenerationReadModelTableNameTokenGeneration, - }; - const commandQuery = new ScanCommand(readInput); - const data: ScanCommandOutput = await dynamoDBClient.send(commandQuery); - - if (!data.Items) { - throw genericInternalError( - `Unable to read token state entries: result ${JSON.stringify(data)} ` - ); - } else { - const unmarshalledItems = data.Items.map((item) => unmarshall(item)); - - const tokenStateEntries = z - .array(TokenGenerationStatesClientPurposeEntry) - .safeParse(unmarshalledItems); - - if (!tokenStateEntries.success) { - throw genericInternalError( - `Unable to parse token state entry item: result ${JSON.stringify( - tokenStateEntries - )} - data ${JSON.stringify(data)} ` - ); - } - return tokenStateEntries.data; - } -}; diff --git a/packages/client-assertion-validation/src/errors.ts b/packages/client-assertion-validation/src/errors.ts index 5d1a04bf55..b75dee4aa1 100644 --- a/packages/client-assertion-validation/src/errors.ts +++ b/packages/client-assertion-validation/src/errors.ts @@ -102,9 +102,8 @@ export function invalidClientAssertionFormat(): ApiError { export function unexpectedClientAssertionPayload( message: string ): ApiError { - const extraDetails = message ? ` - ${message}` : ""; return new ApiError({ - detail: "Unexpected client assertion payload" + extraDetails, + detail: `Unexpected client assertion payload: ${message}`, code: "unexpectedClientAssertionPayload", title: "Invalid client assertion payload", }); diff --git a/packages/client-assertion-validation/test/validation.test.ts b/packages/client-assertion-validation/test/validation.test.ts index 5a463d4d64..8dde5d388c 100644 --- a/packages/client-assertion-validation/test/validation.test.ts +++ b/packages/client-assertion-validation/test/validation.test.ts @@ -397,7 +397,9 @@ describe("validation test", () => { digest: undefined, }, }); - expect(() => verifyClientAssertion(jws, undefined)).not.toThrow(); + + const verifiedClientAssertion = verifyClientAssertion(jws, undefined); + expect(verifiedClientAssertion.data?.payload.digest).toBeUndefined(); }); it("digestClaimNotFound", () => { diff --git a/packages/commons-test/package.json b/packages/commons-test/package.json index 08b3557bb3..dde6a915e0 100644 --- a/packages/commons-test/package.json +++ b/packages/commons-test/package.json @@ -21,6 +21,7 @@ "@anatine/zod-mock": "3.13.4", "@aws-sdk/client-dynamodb": "3.637.0", "@aws-sdk/client-sesv2": "3.620.1", + "@aws-sdk/util-dynamodb": "3.658.1", "@pagopa/eslint-config": "3.0.0", "@protobuf-ts/runtime": "2.9.4", "@testcontainers/postgresql": "10.9.0", diff --git a/packages/commons-test/src/index.ts b/packages/commons-test/src/index.ts index 1ad03def43..332cfc56c9 100644 --- a/packages/commons-test/src/index.ts +++ b/packages/commons-test/src/index.ts @@ -7,3 +7,4 @@ export * from "./setupTestContainersVitest.js"; export * from "./setupTestContainersVitestGlobal.js"; export * from "./protobufConvertersToV1/catalogProtobufConverterToV1.js"; export * from "./setupDynamoDBtables.js"; +export * from "./tokenGenerationReadmodelUtils.js"; diff --git a/packages/commons-test/src/setupTestContainersVitestGlobal.ts b/packages/commons-test/src/setupTestContainersVitestGlobal.ts index a31dd0619f..ca34f76461 100644 --- a/packages/commons-test/src/setupTestContainersVitestGlobal.ts +++ b/packages/commons-test/src/setupTestContainersVitestGlobal.ts @@ -16,6 +16,7 @@ import { S3Config, TokenGenerationReadModelDbConfig, } from "pagopa-interop-commons"; +import { z } from "zod"; import { TEST_MINIO_PORT, TEST_MONGO_DB_PORT, @@ -33,10 +34,18 @@ import { } from "./containerTestUtils.js"; import { PecEmailManagerConfigTest } from "./testConfig.js"; +const EnhancedTokenGenerationReadModelDbConfig = + TokenGenerationReadModelDbConfig.and( + z.object({ tokenGenerationReadModelDbPort: z.number() }) + ); +type EnhancedTokenGenerationReadModelDbConfig = z.infer< + typeof EnhancedTokenGenerationReadModelDbConfig +>; + declare module "vitest" { export interface ProvidedContext { readModelConfig?: ReadModelDbConfig; - tokenGenerationReadModelConfig?: TokenGenerationReadModelDbConfig; + tokenGenerationReadModelConfig?: EnhancedTokenGenerationReadModelDbConfig; eventStoreConfig?: EventStoreConfig; fileManagerConfig?: FileManagerConfig & LoggerConfig & S3Config; redisRateLimiterConfig?: RedisRateLimiterConfig; @@ -140,13 +149,12 @@ export function setupTestContainersVitestGlobal() { // Setting up the DynamoDB container if the config is provided if (tokenGenerationReadModelConfig.success) { startedDynamoDbContainer = await dynamoDBContainer().start(); - tokenGenerationReadModelConfig.data.tokenGenerationReadModelDbPort = - startedDynamoDbContainer.getMappedPort(TEST_DYNAMODB_PORT); - provide( - "tokenGenerationReadModelConfig", - tokenGenerationReadModelConfig.data - ); + provide("tokenGenerationReadModelConfig", { + ...tokenGenerationReadModelConfig.data, + tokenGenerationReadModelDbPort: + startedDynamoDbContainer.getMappedPort(TEST_DYNAMODB_PORT), + }); } if (redisRateLimiterConfig.success) { diff --git a/packages/commons-test/src/tokenGenerationReadmodelUtils.ts b/packages/commons-test/src/tokenGenerationReadmodelUtils.ts new file mode 100644 index 0000000000..4a27dcd8c1 --- /dev/null +++ b/packages/commons-test/src/tokenGenerationReadmodelUtils.ts @@ -0,0 +1,183 @@ +/* eslint-disable @typescript-eslint/no-unnecessary-type-assertion */ +/* eslint-disable @typescript-eslint/no-non-null-assertion */ +import { + AttributeValue, + DynamoDBClient, + PutItemCommand, + PutItemInput, + QueryCommand, + QueryCommandOutput, + QueryInput, + ScanCommand, + ScanCommandOutput, + ScanInput, +} from "@aws-sdk/client-dynamodb"; +import { + genericInternalError, + GSIPKEServiceIdDescriptorId, + TokenGenerationStatesClientPurposeEntry, +} from "pagopa-interop-models"; +import { unmarshall } from "@aws-sdk/util-dynamodb"; +import { z } from "zod"; + +export const writeTokenStateEntry = async ( + tokenStateEntry: TokenGenerationStatesClientPurposeEntry, + dynamoDBClient: DynamoDBClient +): Promise => { + const input: PutItemInput = { + ConditionExpression: "attribute_not_exists(PK)", + Item: { + PK: { + S: tokenStateEntry.PK, + }, + descriptorState: { + S: tokenStateEntry.descriptorState!, + }, + descriptorAudience: { + L: tokenStateEntry.descriptorAudience + ? tokenStateEntry.descriptorAudience.map((item) => ({ + S: item, + })) + : [], + }, + updatedAt: { + S: tokenStateEntry.updatedAt, + }, + consumerId: { + S: tokenStateEntry.consumerId, + }, + agreementId: { + S: tokenStateEntry.agreementId!, + }, + purposeVersionId: { + S: tokenStateEntry.purposeVersionId!, + }, + GSIPK_consumerId_eserviceId: { + S: tokenStateEntry.GSIPK_consumerId_eserviceId!, + }, + clientKind: { + S: tokenStateEntry.clientKind, + }, + publicKey: { + S: tokenStateEntry.publicKey, + }, + GSIPK_clientId: { + S: tokenStateEntry.GSIPK_clientId, + }, + GSIPK_kid: { + S: tokenStateEntry.GSIPK_kid, + }, + GSIPK_clientId_purposeId: { + S: tokenStateEntry.GSIPK_clientId_purposeId!, + }, + agreementState: { + S: tokenStateEntry.agreementState!, + }, + GSIPK_eserviceId_descriptorId: { + S: tokenStateEntry.GSIPK_eserviceId_descriptorId!, + }, + GSIPK_purposeId: { + S: tokenStateEntry.GSIPK_purposeId!, + }, + purposeState: { + S: tokenStateEntry.purposeState!, + }, + }, + TableName: "token-generation-states", + }; + const command = new PutItemCommand(input); + await dynamoDBClient.send(command); +}; + +export const readAllTokenStateItems = async ( + dynamoDBClient: DynamoDBClient +): Promise => { + const readInput: ScanInput = { + TableName: "token-generation-states", + }; + const commandQuery = new ScanCommand(readInput); + const data: ScanCommandOutput = await dynamoDBClient.send(commandQuery); + + if (!data.Items) { + throw genericInternalError( + `Unable to read token state entries: result ${JSON.stringify(data)} ` + ); + } else { + const unmarshalledItems = data.Items.map((item) => unmarshall(item)); + + const tokenStateEntries = z + .array(TokenGenerationStatesClientPurposeEntry) + .safeParse(unmarshalledItems); + + if (!tokenStateEntries.success) { + throw genericInternalError( + `Unable to parse token state entry item: result ${JSON.stringify( + tokenStateEntries + )} - data ${JSON.stringify(data)} ` + ); + } + return tokenStateEntries.data; + } +}; + +export const readTokenStateEntriesByEserviceIdAndDescriptorId = async ( + eserviceId_descriptorId: GSIPKEServiceIdDescriptorId, + dynamoDBClient: DynamoDBClient +): Promise => { + const runPaginatedQuery = async ( + eserviceId_descriptorId: GSIPKEServiceIdDescriptorId, + dynamoDBClient: DynamoDBClient, + exclusiveStartKey?: Record + ): Promise => { + const input: QueryInput = { + TableName: "token-generation-states", + IndexName: "Descriptor", + KeyConditionExpression: `GSIPK_eserviceId_descriptorId = :gsiValue`, + ExpressionAttributeValues: { + ":gsiValue": { S: eserviceId_descriptorId }, + }, + ExclusiveStartKey: exclusiveStartKey, + }; + const command = new QueryCommand(input); + const data: QueryCommandOutput = await dynamoDBClient.send(command); + + if (!data.Items) { + throw genericInternalError( + `Unable to read token state entries: result ${JSON.stringify(data)} ` + ); + } else { + const unmarshalledItems = data.Items.map((item) => unmarshall(item)); + + const tokenStateEntries = z + .array(TokenGenerationStatesClientPurposeEntry) + .safeParse(unmarshalledItems); + + if (!tokenStateEntries.success) { + throw genericInternalError( + `Unable to parse token state entry item: result ${JSON.stringify( + tokenStateEntries + )} - data ${JSON.stringify(data)} ` + ); + } + + if (!data.LastEvaluatedKey) { + return tokenStateEntries.data; + } else { + return [ + ...tokenStateEntries.data, + ...(await runPaginatedQuery( + eserviceId_descriptorId, + dynamoDBClient, + data.LastEvaluatedKey + )), + ]; + } + } + }; + + return await runPaginatedQuery( + eserviceId_descriptorId, + dynamoDBClient, + undefined + ); +}; diff --git a/packages/commons/src/config/tokenGenerationReadmodelDbConfig.ts b/packages/commons/src/config/tokenGenerationReadmodelDbConfig.ts index 7c30841aef..e9ee8c01f7 100644 --- a/packages/commons/src/config/tokenGenerationReadmodelDbConfig.ts +++ b/packages/commons/src/config/tokenGenerationReadmodelDbConfig.ts @@ -2,22 +2,14 @@ import { z } from "zod"; export const TokenGenerationReadModelDbConfig = z .object({ - TOKEN_GENERATION_READMODEL_HOST: z.string(), - TOKEN_GENERATION_READMODEL_PORT: z.coerce.number().min(1001), TOKEN_GENERATION_READMODEL_TABLE_NAME_PLATFORM: z.string(), TOKEN_GENERATION_READMODEL_TABLE_NAME_TOKEN_GENERATION: z.string(), - AWS_ACCESS_KEY_ID: z.string(), - AWS_SECRET_ACCESS_KEY: z.string(), }) .transform((c) => ({ - tokenGenerationReadModelDbHost: c.TOKEN_GENERATION_READMODEL_HOST, - tokenGenerationReadModelDbPort: c.TOKEN_GENERATION_READMODEL_PORT, tokenGenerationReadModelTableNamePlatform: c.TOKEN_GENERATION_READMODEL_TABLE_NAME_PLATFORM, tokenGenerationReadModelTableNameTokenGeneration: c.TOKEN_GENERATION_READMODEL_TABLE_NAME_TOKEN_GENERATION, - awsAccessKeyId: c.AWS_ACCESS_KEY_ID, - awsSecretAccessKey: c.AWS_SECRET_ACCESS_KEY, })); export type TokenGenerationReadModelDbConfig = z.infer< diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ad76a7f5bd..bb062fd00f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1332,6 +1332,9 @@ importers: '@aws-sdk/client-sesv2': specifier: 3.620.1 version: 3.620.1 + '@aws-sdk/util-dynamodb': + specifier: 3.658.1 + version: 3.658.1(@aws-sdk/client-dynamodb@3.637.0) '@pagopa/eslint-config': specifier: 3.0.0 version: 3.0.0(typescript@5.4.5) @@ -2949,10 +2952,10 @@ packages: dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.620.1(@aws-sdk/client-sts@3.645.0) + '@aws-sdk/client-sso-oidc': 3.620.1(@aws-sdk/client-sts@3.620.1) '@aws-sdk/client-sts': 3.620.1 '@aws-sdk/core': 3.620.1 - '@aws-sdk/credential-provider-node': 3.620.1(@aws-sdk/client-sso-oidc@3.620.1)(@aws-sdk/client-sts@3.645.0) + '@aws-sdk/credential-provider-node': 3.620.1(@aws-sdk/client-sso-oidc@3.620.1)(@aws-sdk/client-sts@3.620.1) '@aws-sdk/middleware-host-header': 3.620.0 '@aws-sdk/middleware-logger': 3.609.0 '@aws-sdk/middleware-recursion-detection': 3.620.0 @@ -3139,6 +3142,7 @@ packages: tslib: 2.6.3 transitivePeerDependencies: - aws-crt + dev: false /@aws-sdk/client-sso-oidc@3.620.1(@aws-sdk/client-sts@3.620.1): resolution: {integrity: sha512-gm69ttbkr7Kbg/Zzr3SczyLWkLgmK3bEZtkvbM/40ZW5ItYhDzJE48Ovs2lyA64h2YsOftDqqwcbJirAAdTgSg==} @@ -3150,56 +3154,7 @@ packages: '@aws-crypto/sha256-js': 5.2.0 '@aws-sdk/client-sts': 3.620.1 '@aws-sdk/core': 3.620.1 - '@aws-sdk/credential-provider-node': 3.620.1(@aws-sdk/client-sso-oidc@3.620.1)(@aws-sdk/client-sts@3.645.0) - '@aws-sdk/middleware-host-header': 3.620.0 - '@aws-sdk/middleware-logger': 3.609.0 - '@aws-sdk/middleware-recursion-detection': 3.620.0 - '@aws-sdk/middleware-user-agent': 3.620.0 - '@aws-sdk/region-config-resolver': 3.614.0 - '@aws-sdk/types': 3.609.0 - '@aws-sdk/util-endpoints': 3.614.0 - '@aws-sdk/util-user-agent-browser': 3.609.0 - '@aws-sdk/util-user-agent-node': 3.614.0 - '@smithy/config-resolver': 3.0.5 - '@smithy/core': 2.4.0 - '@smithy/fetch-http-handler': 3.2.4 - '@smithy/hash-node': 3.0.3 - '@smithy/invalid-dependency': 3.0.3 - '@smithy/middleware-content-length': 3.0.5 - '@smithy/middleware-endpoint': 3.1.0 - '@smithy/middleware-retry': 3.0.15 - '@smithy/middleware-serde': 3.0.3 - '@smithy/middleware-stack': 3.0.3 - '@smithy/node-config-provider': 3.1.4 - '@smithy/node-http-handler': 3.1.4 - '@smithy/protocol-http': 4.1.0 - '@smithy/smithy-client': 3.2.0 - '@smithy/types': 3.3.0 - '@smithy/url-parser': 3.0.3 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.15 - '@smithy/util-defaults-mode-node': 3.0.15 - '@smithy/util-endpoints': 2.0.5 - '@smithy/util-middleware': 3.0.3 - '@smithy/util-retry': 3.0.3 - '@smithy/util-utf8': 3.0.0 - tslib: 2.6.3 - transitivePeerDependencies: - - aws-crt - - /@aws-sdk/client-sso-oidc@3.620.1(@aws-sdk/client-sts@3.645.0): - resolution: {integrity: sha512-gm69ttbkr7Kbg/Zzr3SczyLWkLgmK3bEZtkvbM/40ZW5ItYhDzJE48Ovs2lyA64h2YsOftDqqwcbJirAAdTgSg==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@aws-sdk/client-sts': ^3.620.1 - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sts': 3.645.0 - '@aws-sdk/core': 3.620.1 - '@aws-sdk/credential-provider-node': 3.620.1(@aws-sdk/client-sso-oidc@3.620.1)(@aws-sdk/client-sts@3.645.0) + '@aws-sdk/credential-provider-node': 3.620.1(@aws-sdk/client-sso-oidc@3.620.1)(@aws-sdk/client-sts@3.620.1) '@aws-sdk/middleware-host-header': 3.620.0 '@aws-sdk/middleware-logger': 3.609.0 '@aws-sdk/middleware-recursion-detection': 3.620.0 @@ -3335,6 +3290,7 @@ packages: tslib: 2.6.3 transitivePeerDependencies: - aws-crt + dev: false /@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0): resolution: {integrity: sha512-X9ULtdk3cO+1ysurEkJ1MSnu6U00qodXx+IVual+1jXX4RYY1WmQmfo7uDKf6FFkz7wW1DAqU+GJIBNQr0YH8A==} @@ -3384,6 +3340,7 @@ packages: tslib: 2.6.3 transitivePeerDependencies: - aws-crt + dev: false /@aws-sdk/client-sso@3.598.0: resolution: {integrity: sha512-nOI5lqPYa+YZlrrzwAJywJSw3MKVjvu6Ge2fCqQUNYMfxFB0NAaDFnl0EPjXi+sEbtCuz/uWE77poHbqiZ+7Iw==} @@ -3475,6 +3432,7 @@ packages: tslib: 2.6.3 transitivePeerDependencies: - aws-crt + dev: false /@aws-sdk/client-sso@3.620.1: resolution: {integrity: sha512-4Ox0BSs+atrAhLvjNHN2uiYvSTdpMv//IS4l4XRoQG0cJKIPLs3OU3PL5H0X1NfZehz9/8FTWl5Lv81uw4j1eA==} @@ -3610,6 +3568,7 @@ packages: tslib: 2.6.3 transitivePeerDependencies: - aws-crt + dev: false /@aws-sdk/client-sts@3.600.0: resolution: {integrity: sha512-KQG97B7LvTtTiGmjlrG1LRAY8wUvCQzrmZVV5bjrJ/1oXAU7DITYwVbSJeX9NWg6hDuSk0VE3MFwIXS2SvfLIA==} @@ -3705,6 +3664,7 @@ packages: tslib: 2.6.3 transitivePeerDependencies: - aws-crt + dev: false /@aws-sdk/client-sts@3.620.1: resolution: {integrity: sha512-d+ECGFDg0IsDdmfKU2O0VeMYKZcmbfBaA9HkZnZ39wu1BlXGI73xJe8cfmzbobvu+Ly+bAfHdLCpgIY+pD4D7g==} @@ -3714,7 +3674,7 @@ packages: '@aws-crypto/sha256-js': 5.2.0 '@aws-sdk/client-sso-oidc': 3.620.1(@aws-sdk/client-sts@3.620.1) '@aws-sdk/core': 3.620.1 - '@aws-sdk/credential-provider-node': 3.620.1(@aws-sdk/client-sso-oidc@3.620.1)(@aws-sdk/client-sts@3.645.0) + '@aws-sdk/credential-provider-node': 3.620.1(@aws-sdk/client-sso-oidc@3.620.1)(@aws-sdk/client-sts@3.620.1) '@aws-sdk/middleware-host-header': 3.620.0 '@aws-sdk/middleware-logger': 3.609.0 '@aws-sdk/middleware-recursion-detection': 3.620.0 @@ -3846,6 +3806,7 @@ packages: tslib: 2.6.3 transitivePeerDependencies: - aws-crt + dev: false /@aws-sdk/core@3.598.0: resolution: {integrity: sha512-HaSjt7puO5Cc7cOlrXFCW0rtA0BM9lvzjl56x0A20Pt+0wxXGeTOZZOkXQIepbrFkV2e/HYukuT9e99vXDm59g==} @@ -3871,6 +3832,7 @@ packages: '@smithy/types': 3.3.0 fast-xml-parser: 4.2.5 tslib: 2.6.3 + dev: false /@aws-sdk/core@3.620.1: resolution: {integrity: sha512-6Ejce93dDlDnovl6oYtxj3I/SJMOQoFdmmtM4+4W/cgMWH+l00T5aszVxDLjjPfu3Ryt7dNhrXaYeK2Ue1ZBmg==} @@ -3932,6 +3894,7 @@ packages: '@smithy/property-provider': 3.1.3 '@smithy/types': 3.3.0 tslib: 2.6.3 + dev: false /@aws-sdk/credential-provider-env@3.620.1: resolution: {integrity: sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==} @@ -3970,6 +3933,7 @@ packages: '@smithy/types': 3.3.0 '@smithy/util-stream': 3.1.3 tslib: 2.6.3 + dev: false /@aws-sdk/credential-provider-http@3.620.0: resolution: {integrity: sha512-BI2BdrSKDmB/2ouB/NJR0PT0x/+5fmoF6XOE78hFBb4F5w/yynGgcJY936dF+oREfpME6ehjB2b0okGg78Scpw==} @@ -4043,6 +4007,7 @@ packages: transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' - aws-crt + dev: false /@aws-sdk/credential-provider-ini@3.609.0(@aws-sdk/client-sso-oidc@3.645.0)(@aws-sdk/client-sts@3.609.0): resolution: {integrity: sha512-hwaBfXuBTv6/eAdEsDfGcteYUW6Km7lvvubbxEdxIuJNF3vswR7RMGIXaEC37hhPkTTgd3H0TONammhwZIfkog==} @@ -4067,18 +4032,18 @@ packages: - aws-crt dev: false - /@aws-sdk/credential-provider-ini@3.620.1(@aws-sdk/client-sso-oidc@3.620.1)(@aws-sdk/client-sts@3.645.0): + /@aws-sdk/credential-provider-ini@3.620.1(@aws-sdk/client-sso-oidc@3.620.1)(@aws-sdk/client-sts@3.620.1): resolution: {integrity: sha512-m9jwigMPRlRRhoPxCQZMOwQUd6imEJbksF6tSMYNae76DIvrCi4z2Jhp6RJ9Mij8cnewUZCAmvu2FlK9+n9M7A==} engines: {node: '>=16.0.0'} peerDependencies: '@aws-sdk/client-sts': ^3.620.1 dependencies: - '@aws-sdk/client-sts': 3.645.0 + '@aws-sdk/client-sts': 3.620.1 '@aws-sdk/credential-provider-env': 3.620.1 '@aws-sdk/credential-provider-http': 3.620.0 '@aws-sdk/credential-provider-process': 3.620.1 '@aws-sdk/credential-provider-sso': 3.620.1(@aws-sdk/client-sso-oidc@3.620.1) - '@aws-sdk/credential-provider-web-identity': 3.609.0(@aws-sdk/client-sts@3.645.0) + '@aws-sdk/credential-provider-web-identity': 3.609.0(@aws-sdk/client-sts@3.620.1) '@aws-sdk/types': 3.609.0 '@smithy/credential-provider-imds': 3.2.0 '@smithy/property-provider': 3.1.3 @@ -4132,6 +4097,7 @@ packages: transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' - aws-crt + dev: false /@aws-sdk/credential-provider-ini@3.645.0(@aws-sdk/client-sso-oidc@3.645.0)(@aws-sdk/client-sts@3.645.0): resolution: {integrity: sha512-LlZW0qwUwNlTaAIDCNpLbPsyXvS42pRIwF92fgtCQedmdnpN3XRUC6hcwSYI7Xru3GGKp3RnceOvsdOaRJORsw==} @@ -4154,6 +4120,7 @@ packages: transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' - aws-crt + dev: false /@aws-sdk/credential-provider-node@3.600.0(@aws-sdk/client-sso-oidc@3.600.0)(@aws-sdk/client-sts@3.600.0): resolution: {integrity: sha512-1pC7MPMYD45J7yFjA90SxpR0yaSvy+yZiq23aXhAPZLYgJBAxHLu0s0mDCk/piWGPh8+UGur5K0bVdx4B1D5hw==} @@ -4197,6 +4164,7 @@ packages: - '@aws-sdk/client-sso-oidc' - '@aws-sdk/client-sts' - aws-crt + dev: false /@aws-sdk/credential-provider-node@3.609.0(@aws-sdk/client-sso-oidc@3.645.0)(@aws-sdk/client-sts@3.609.0): resolution: {integrity: sha512-4J8/JRuqfxJDGD9jTHVCBxCvYt7/Vgj2Stlhj930mrjFPO/yRw8ilAAZxBWe0JHPX3QwepCmh4ErZe53F5ysxQ==} @@ -4220,16 +4188,16 @@ packages: - aws-crt dev: false - /@aws-sdk/credential-provider-node@3.620.1(@aws-sdk/client-sso-oidc@3.620.1)(@aws-sdk/client-sts@3.645.0): + /@aws-sdk/credential-provider-node@3.620.1(@aws-sdk/client-sso-oidc@3.620.1)(@aws-sdk/client-sts@3.620.1): resolution: {integrity: sha512-KaprIJW2azM+oTIHi7S1ayJ3oQqoFwpMBWFpZM1nvSzaPucrZIUmX2m4uVrMM4LfXsfUsgMkrme2rBI1fGAjCg==} engines: {node: '>=16.0.0'} dependencies: '@aws-sdk/credential-provider-env': 3.620.1 '@aws-sdk/credential-provider-http': 3.620.0 - '@aws-sdk/credential-provider-ini': 3.620.1(@aws-sdk/client-sso-oidc@3.620.1)(@aws-sdk/client-sts@3.645.0) + '@aws-sdk/credential-provider-ini': 3.620.1(@aws-sdk/client-sso-oidc@3.620.1)(@aws-sdk/client-sts@3.620.1) '@aws-sdk/credential-provider-process': 3.620.1 '@aws-sdk/credential-provider-sso': 3.620.1(@aws-sdk/client-sso-oidc@3.620.1) - '@aws-sdk/credential-provider-web-identity': 3.609.0(@aws-sdk/client-sts@3.645.0) + '@aws-sdk/credential-provider-web-identity': 3.609.0(@aws-sdk/client-sts@3.620.1) '@aws-sdk/types': 3.609.0 '@smithy/credential-provider-imds': 3.2.0 '@smithy/property-provider': 3.1.3 @@ -4282,6 +4250,7 @@ packages: - '@aws-sdk/client-sso-oidc' - '@aws-sdk/client-sts' - aws-crt + dev: false /@aws-sdk/credential-provider-node@3.645.0(@aws-sdk/client-sso-oidc@3.645.0)(@aws-sdk/client-sts@3.645.0): resolution: {integrity: sha512-eGFFuNvLeXjCJf5OCIuSEflxUowmK+bCS+lK4M8ofsYOEGAivdx7C0UPxNjHpvM8wKd8vpMl5phTeS9BWX5jMQ==} @@ -4303,6 +4272,7 @@ packages: - '@aws-sdk/client-sso-oidc' - '@aws-sdk/client-sts' - aws-crt + dev: false /@aws-sdk/credential-provider-process@3.598.0: resolution: {integrity: sha512-rM707XbLW8huMk722AgjVyxu2tMZee++fNA8TJVNgs1Ma02Wx6bBrfIvlyK0rCcIRb0WdQYP6fe3Xhiu4e8IBA==} @@ -4324,6 +4294,7 @@ packages: '@smithy/shared-ini-file-loader': 3.1.4 '@smithy/types': 3.3.0 tslib: 2.6.3 + dev: false /@aws-sdk/credential-provider-process@3.620.1: resolution: {integrity: sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==} @@ -4365,6 +4336,7 @@ packages: transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' - aws-crt + dev: false /@aws-sdk/credential-provider-sso@3.609.0(@aws-sdk/client-sso-oidc@3.645.0): resolution: {integrity: sha512-oQPGDKMMIxjvTcm86g07RPYeC7mCNk+29dPpY15ZAPRpAF7F0tircsC3wT9fHzNaKShEyK5LuI5Kg/uxsdy+Iw==} @@ -4426,6 +4398,7 @@ packages: transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' - aws-crt + dev: false /@aws-sdk/credential-provider-web-identity@3.598.0(@aws-sdk/client-sts@3.600.0): resolution: {integrity: sha512-GV5GdiMbz5Tz9JO4NJtRoFXjW0GPEujA0j+5J/B723rTN+REHthJu48HdBKouHGhdzkDWkkh1bu52V02Wprw8w==} @@ -4451,14 +4424,15 @@ packages: '@smithy/property-provider': 3.1.3 '@smithy/types': 3.3.0 tslib: 2.6.3 + dev: false - /@aws-sdk/credential-provider-web-identity@3.609.0(@aws-sdk/client-sts@3.645.0): + /@aws-sdk/credential-provider-web-identity@3.609.0(@aws-sdk/client-sts@3.620.1): resolution: {integrity: sha512-U+PG8NhlYYF45zbr1km3ROtBMYqyyj/oK8NRp++UHHeuavgrP+4wJ4wQnlEaKvJBjevfo3+dlIBcaeQ7NYejWg==} engines: {node: '>=16.0.0'} peerDependencies: '@aws-sdk/client-sts': ^3.609.0 dependencies: - '@aws-sdk/client-sts': 3.645.0 + '@aws-sdk/client-sts': 3.620.1 '@aws-sdk/types': 3.609.0 '@smithy/property-provider': 3.1.3 '@smithy/types': 3.3.0 @@ -4475,6 +4449,7 @@ packages: '@smithy/property-provider': 3.1.3 '@smithy/types': 3.3.0 tslib: 2.6.3 + dev: false /@aws-sdk/credential-provider-web-identity@3.621.0(@aws-sdk/client-sts@3.637.0): resolution: {integrity: sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==} @@ -4499,6 +4474,7 @@ packages: '@smithy/property-provider': 3.1.3 '@smithy/types': 3.3.0 tslib: 2.6.3 + dev: false /@aws-sdk/credential-providers@3.609.0(@aws-sdk/client-sso-oidc@3.645.0): resolution: {integrity: sha512-bJKMY4QwRVderh8R2s9kukoZhuNZew/xzwPa9DRRFVOIsznsS0faAdmAAFrKb8e06YyQq6DiZP0BfFyVHAXE2A==} @@ -4610,6 +4586,7 @@ packages: '@smithy/protocol-http': 4.1.0 '@smithy/types': 3.3.0 tslib: 2.6.3 + dev: false /@aws-sdk/middleware-host-header@3.620.0: resolution: {integrity: sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==} @@ -4664,6 +4641,7 @@ packages: '@smithy/protocol-http': 4.1.0 '@smithy/types': 3.3.0 tslib: 2.6.3 + dev: false /@aws-sdk/middleware-recursion-detection@3.620.0: resolution: {integrity: sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==} @@ -4760,6 +4738,7 @@ packages: '@smithy/protocol-http': 4.1.0 '@smithy/types': 3.3.0 tslib: 2.6.3 + dev: false /@aws-sdk/middleware-user-agent@3.620.0: resolution: {integrity: sha512-bvS6etn+KsuL32ubY5D3xNof1qkenpbJXf/ugGXbg0n98DvDFQ/F+SMLxHgbnER5dsKYchNnhmtI6/FC3HFu/A==} @@ -4790,6 +4769,7 @@ packages: '@smithy/protocol-http': 4.1.0 '@smithy/types': 3.3.0 tslib: 2.6.3 + dev: false /@aws-sdk/region-config-resolver@3.598.0: resolution: {integrity: sha512-oYXhmTokSav4ytmWleCr3rs/1nyvZW/S0tdi6X7u+dLNL5Jee+uMxWGzgOrWK6wrQOzucLVjS4E/wA11Kv2GTw==} @@ -4813,6 +4793,7 @@ packages: '@smithy/util-config-provider': 3.0.0 '@smithy/util-middleware': 3.0.3 tslib: 2.6.3 + dev: false /@aws-sdk/region-config-resolver@3.614.0: resolution: {integrity: sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==} @@ -4889,6 +4870,7 @@ packages: '@smithy/shared-ini-file-loader': 3.1.4 '@smithy/types': 3.3.0 tslib: 2.6.3 + dev: false /@aws-sdk/token-providers@3.609.0(@aws-sdk/client-sso-oidc@3.645.0): resolution: {integrity: sha512-WvhW/7XSf+H7YmtiIigQxfDVZVZI7mbKikQ09YpzN7FeN3TmYib1+0tB+EE9TbICkwssjiFc71FEBEh4K9grKQ==} @@ -4910,7 +4892,7 @@ packages: peerDependencies: '@aws-sdk/client-sso-oidc': ^3.614.0 dependencies: - '@aws-sdk/client-sso-oidc': 3.620.1(@aws-sdk/client-sts@3.645.0) + '@aws-sdk/client-sso-oidc': 3.620.1(@aws-sdk/client-sts@3.620.1) '@aws-sdk/types': 3.609.0 '@smithy/property-provider': 3.1.3 '@smithy/shared-ini-file-loader': 3.1.4 @@ -4942,6 +4924,7 @@ packages: '@smithy/shared-ini-file-loader': 3.1.4 '@smithy/types': 3.3.0 tslib: 2.6.3 + dev: false /@aws-sdk/types@3.598.0: resolution: {integrity: sha512-742uRl6z7u0LFmZwDrFP6r1wlZcgVPw+/TilluDJmCAR8BgRw3IR+743kUXKBGd8QZDRW2n6v/PYsi/AWCDDMQ==} @@ -4995,6 +4978,16 @@ packages: tslib: 2.6.3 dev: false + /@aws-sdk/util-dynamodb@3.658.1(@aws-sdk/client-dynamodb@3.637.0): + resolution: {integrity: sha512-lzlnis+35a2OhGZlVJvM3/30iIVoP2cIv5Bkw1F2nkM6Pr+1NOd3XvYhCY1Ud5zWtV6HUSptzessvUPqJTMfjQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-dynamodb': ^3.658.1 + dependencies: + '@aws-sdk/client-dynamodb': 3.637.0 + tslib: 2.6.3 + dev: true + /@aws-sdk/util-endpoints@3.598.0: resolution: {integrity: sha512-Qo9UoiVVZxcOEdiOMZg3xb1mzkTxrhd4qSlg5QQrfWPJVx/QOg+Iy0NtGxPtHtVZNHZxohYwDwV/tfsnDSE2gQ==} engines: {node: '>=16.0.0'} @@ -5013,6 +5006,7 @@ packages: '@smithy/types': 3.3.0 '@smithy/util-endpoints': 2.0.5 tslib: 2.6.3 + dev: false /@aws-sdk/util-endpoints@3.614.0: resolution: {integrity: sha512-wK2cdrXHH4oz4IomV/yrGkftU9A+ITB6nFL+rxxyO78is2ifHJpFdV4aqk4LSkXYPi6CXWNru/Dqc7yiKXgJPw==} @@ -5040,6 +5034,7 @@ packages: '@smithy/types': 3.3.0 '@smithy/util-endpoints': 2.0.5 tslib: 2.6.3 + dev: false /@aws-sdk/util-format-url@3.609.0: resolution: {integrity: sha512-fuk29BI/oLQlJ7pfm6iJ4gkEpHdavffAALZwXh9eaY1vQ0ip0aKfRTiNudPoJjyyahnz5yJ1HkmlcDitlzsOrQ==} @@ -5102,6 +5097,7 @@ packages: '@smithy/node-config-provider': 3.1.4 '@smithy/types': 3.3.0 tslib: 2.6.3 + dev: false /@aws-sdk/util-user-agent-node@3.614.0: resolution: {integrity: sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA==} @@ -6042,6 +6038,7 @@ packages: '@smithy/util-config-provider': 3.0.0 '@smithy/util-middleware': 3.0.3 tslib: 2.6.3 + dev: false /@smithy/config-resolver@3.0.5: resolution: {integrity: sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA==} @@ -6065,6 +6062,7 @@ packages: '@smithy/types': 3.3.0 '@smithy/util-middleware': 3.0.3 tslib: 2.6.3 + dev: false /@smithy/core@2.4.0: resolution: {integrity: sha512-cHXq+FneIF/KJbt4q4pjN186+Jf4ZB0ZOqEaZMBhT79srEyGDDBV31NqBRBjazz8ppQ1bJbDJMY9ba5wKFV36w==} @@ -6090,6 +6088,7 @@ packages: '@smithy/types': 3.3.0 '@smithy/url-parser': 3.0.3 tslib: 2.6.3 + dev: false /@smithy/credential-provider-imds@3.2.0: resolution: {integrity: sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA==} @@ -6153,6 +6152,7 @@ packages: '@smithy/types': 3.3.0 '@smithy/util-base64': 3.0.0 tslib: 2.6.3 + dev: false /@smithy/fetch-http-handler@3.2.4: resolution: {integrity: sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==} @@ -6223,6 +6223,7 @@ packages: '@smithy/protocol-http': 4.0.3 '@smithy/types': 3.3.0 tslib: 2.6.3 + dev: false /@smithy/middleware-content-length@3.0.5: resolution: {integrity: sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw==} @@ -6243,6 +6244,7 @@ packages: '@smithy/url-parser': 3.0.3 '@smithy/util-middleware': 3.0.3 tslib: 2.6.3 + dev: false /@smithy/middleware-endpoint@3.1.0: resolution: {integrity: sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==} @@ -6283,6 +6285,7 @@ packages: '@smithy/util-retry': 3.0.3 tslib: 2.6.3 uuid: 9.0.1 + dev: false /@smithy/middleware-serde@3.0.3: resolution: {integrity: sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==} @@ -6306,6 +6309,7 @@ packages: '@smithy/shared-ini-file-loader': 3.1.3 '@smithy/types': 3.3.0 tslib: 2.6.3 + dev: false /@smithy/node-config-provider@3.1.4: resolution: {integrity: sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==} @@ -6325,6 +6329,7 @@ packages: '@smithy/querystring-builder': 3.0.3 '@smithy/types': 3.3.0 tslib: 2.6.3 + dev: false /@smithy/node-http-handler@3.1.4: resolution: {integrity: sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==} @@ -6349,6 +6354,7 @@ packages: dependencies: '@smithy/types': 3.3.0 tslib: 2.6.3 + dev: false /@smithy/protocol-http@4.1.0: resolution: {integrity: sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==} @@ -6384,6 +6390,7 @@ packages: dependencies: '@smithy/types': 3.3.0 tslib: 2.6.3 + dev: false /@smithy/shared-ini-file-loader@3.1.4: resolution: {integrity: sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==} @@ -6416,6 +6423,7 @@ packages: '@smithy/util-uri-escape': 3.0.0 '@smithy/util-utf8': 3.0.0 tslib: 2.6.3 + dev: false /@smithy/signature-v4@4.1.0: resolution: {integrity: sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag==} @@ -6440,6 +6448,7 @@ packages: '@smithy/types': 3.3.0 '@smithy/util-stream': 3.0.5 tslib: 2.6.3 + dev: false /@smithy/smithy-client@3.2.0: resolution: {integrity: sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==} @@ -6530,6 +6539,7 @@ packages: '@smithy/types': 3.3.0 bowser: 2.11.0 tslib: 2.6.3 + dev: false /@smithy/util-defaults-mode-node@3.0.15: resolution: {integrity: sha512-KSyAAx2q6d0t6f/S4XB2+3+6aQacm3aLMhs9aLMqn18uYGUepbdssfogW5JQZpc6lXNBnp0tEnR5e9CEKmEd7A==} @@ -6554,6 +6564,7 @@ packages: '@smithy/smithy-client': 3.2.0 '@smithy/types': 3.3.0 tslib: 2.6.3 + dev: false /@smithy/util-endpoints@2.0.4: resolution: {integrity: sha512-ZAtNf+vXAsgzgRutDDiklU09ZzZiiV/nATyqde4Um4priTmasDH+eLpp3tspL0hS2dEootyFMhu1Y6Y+tzpWBQ==} @@ -6562,6 +6573,7 @@ packages: '@smithy/node-config-provider': 3.1.3 '@smithy/types': 3.3.0 tslib: 2.6.3 + dev: false /@smithy/util-endpoints@2.0.5: resolution: {integrity: sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg==} @@ -6619,6 +6631,7 @@ packages: '@smithy/util-hex-encoding': 3.0.0 '@smithy/util-utf8': 3.0.0 tslib: 2.6.3 + dev: false /@smithy/util-stream@3.1.3: resolution: {integrity: sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==}