diff --git a/services/app-api/package.json b/services/app-api/package.json index f307ff38d9..02544ba272 100644 --- a/services/app-api/package.json +++ b/services/app-api/package.json @@ -55,7 +55,6 @@ "eta": "^2.0.0", "graphql": "^16.2.0", "graphql-scalars": "^1.11.1", - "json2csv": "^5.0.7", "lodash": "^4.17.21", "neverthrow": "^6.0.0", "path-to-regexp": "^6.2.1", @@ -71,7 +70,6 @@ "@types/aws-lambda": "^8.10.83", "@types/glob": "^8.0.0", "@types/jest": "^29.5.6", - "@types/json2csv": "^5.0.3", "@types/request": "^2.48.7", "@types/uuid": "^9.0.0", "@typescript-eslint/eslint-plugin": "^5.6.0", diff --git a/services/app-api/prisma/migrations/20231031204348_migrate_questions_to_contracts/migration.sql b/services/app-api/prisma/migrations/20231031204348_migrate_questions_to_contracts/migration.sql new file mode 100644 index 0000000000..3eccc0622c --- /dev/null +++ b/services/app-api/prisma/migrations/20231031204348_migrate_questions_to_contracts/migration.sql @@ -0,0 +1,17 @@ +BEGIN; + +ALTER TABLE "Question" ADD COLUMN "contractID" TEXT; + +-- AddForeignKey +ALTER TABLE "Question" ADD CONSTRAINT "Question_contractID_fkey" FOREIGN KEY ("contractID") REFERENCES "ContractTable"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- migrate data over +UPDATE "Question" SET "contractID"="pkgID"; + +-- make not nullable, drop pkgID +ALTER TABLE "Question" + ALTER COLUMN "contractID" SET NOT NULL, + DROP CONSTRAINT "Question_pkgID_fkey", + DROP COLUMN "pkgID"; + +COMMIT; diff --git a/services/app-api/prisma/schema.prisma b/services/app-api/prisma/schema.prisma index c40fbe6611..3f89e14ca5 100644 --- a/services/app-api/prisma/schema.prisma +++ b/services/app-api/prisma/schema.prisma @@ -13,7 +13,6 @@ model HealthPlanPackageTable { stateCode String state State @relation(fields: [stateCode], references: [stateCode]) revisions HealthPlanRevisionTable[] - questions Question[] } model ProtoMigrationsTable { @@ -41,9 +40,11 @@ model ContractTable { mccrsID String? stateCode String - state State @relation(fields: [stateCode], references: [stateCode]) + state State @relation(fields: [stateCode], references: [stateCode]) stateNumber Int + questions Question[] + revisions ContractRevisionTable[] // This relationship is a scam. We never call it in our code but Prisma // requires that there be an inverse to RateRevision.draftContracts which we do use @@ -72,8 +73,8 @@ model ContractRevisionTable { contractID String contract ContractTable @relation(fields: [contractID], references: [id]) - rateRevisions RateRevisionsOnContractRevisionsTable[] - draftRates RateTable[] + rateRevisions RateRevisionsOnContractRevisionsTable[] + draftRates RateTable[] unlockInfoID String? unlockInfo UpdateInfoTable? @relation("unlockContractInfo", fields: [unlockInfoID], references: [id]) @@ -130,21 +131,21 @@ model RateRevisionTable { submitInfoID String? submitInfo UpdateInfoTable? @relation("submitRateInfo", fields: [submitInfoID], references: [id], onDelete: Cascade) - rateType RateType? - rateCapitationType RateCapitationType? - rateDocuments RateDocument[] - supportingDocuments RateSupportingDocument[] - rateDateStart DateTime? @db.Date - rateDateEnd DateTime? @db.Date - rateDateCertified DateTime? @db.Date - amendmentEffectiveDateStart DateTime? @db.Date - amendmentEffectiveDateEnd DateTime? @db.Date - rateProgramIDs String[] - rateCertificationName String? - certifyingActuaryContacts ActuaryContact[] @relation(name: "CertifyingActuaryOnRateRevision") - addtlActuaryContacts ActuaryContact[] @relation(name: "AddtlActuaryOnRateRevision") - actuaryCommunicationPreference ActuaryCommunication? - contractsWithSharedRateRevision ContractTable[] @relation(name: "SharedRateRevisions") + rateType RateType? + rateCapitationType RateCapitationType? + rateDocuments RateDocument[] + supportingDocuments RateSupportingDocument[] + rateDateStart DateTime? @db.Date + rateDateEnd DateTime? @db.Date + rateDateCertified DateTime? @db.Date + amendmentEffectiveDateStart DateTime? @db.Date + amendmentEffectiveDateEnd DateTime? @db.Date + rateProgramIDs String[] + rateCertificationName String? + certifyingActuaryContacts ActuaryContact[] @relation(name: "CertifyingActuaryOnRateRevision") + addtlActuaryContacts ActuaryContact[] @relation(name: "AddtlActuaryOnRateRevision") + actuaryCommunicationPreference ActuaryCommunication? + contractsWithSharedRateRevision ContractTable[] @relation(name: "SharedRateRevisions") } model RateRevisionsOnContractRevisionsTable { @@ -291,12 +292,12 @@ model UserAudit { } model Question { - id String @id @default(uuid()) - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - pkgID String - pkg HealthPlanPackageTable @relation(fields: [pkgID], references: [id]) - addedBy User @relation(fields: [addedByUserID], references: [id]) + id String @id @default(uuid()) + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt + contractID String + contract ContractTable @relation(fields: [contractID], references: [id]) + addedBy User @relation(fields: [addedByUserID], references: [id]) addedByUserID String division Division documents QuestionDocument[] @@ -327,10 +328,10 @@ model QuestionResponse { id String @id @default(uuid()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt - question Question @relation(fields: [questionID], references: [id]) - addedBy User @relation(fields: [addedByUserID], references: [id]) questionID String + question Question @relation(fields: [questionID], references: [id]) addedByUserID String + addedBy User @relation(fields: [addedByUserID], references: [id]) documents QuestionResponseDocument[] } diff --git a/services/app-api/serverless.yml b/services/app-api/serverless.yml index da368f62a2..b5fc62aaa1 100644 --- a/services/app-api/serverless.yml +++ b/services/app-api/serverless.yml @@ -193,23 +193,6 @@ functions: method: get cors: true - reports: - handler: src/handlers/reports.main - events: - - http: - path: reports - method: get - cors: true - authorizer: aws_iam - layers: - - !Ref PrismaClientEngineLambdaLayer - - arn:aws:lambda:us-east-1:901920570463:layer:aws-otel-nodejs-amd64-ver-1-9-1:1 - timeout: 60 - vpc: - securityGroupIds: - - ${self:custom.sgId} - subnetIds: ${self:custom.privateSubnets} - otel: handler: src/handlers/otel_proxy.main events: diff --git a/services/app-api/src/domain-models/QuestionsType.ts b/services/app-api/src/domain-models/QuestionsType.ts index 7849aca2ee..448aa0d353 100644 --- a/services/app-api/src/domain-models/QuestionsType.ts +++ b/services/app-api/src/domain-models/QuestionsType.ts @@ -9,7 +9,7 @@ type Document = { type Question = { id: string - pkgID: string + contractID: string createdAt: Date addedBy: CMSUserType documents: Document[] @@ -40,7 +40,7 @@ type CreateQuestionPayload = { } type CreateQuestionInput = { - pkgID: string + contractID: string documents: Document[] } diff --git a/services/app-api/src/handlers/reports.ts b/services/app-api/src/handlers/reports.ts deleted file mode 100644 index 65e68c47d6..0000000000 --- a/services/app-api/src/handlers/reports.ts +++ /dev/null @@ -1,203 +0,0 @@ -import type { APIGatewayProxyHandler } from 'aws-lambda' -import { configurePostgres } from './configuration' -import { NewPostgresStore } from '../postgres/postgresStore' -import { Parser, transforms } from 'json2csv' -import type { HealthPlanRevisionTable } from '@prisma/client' -import type { ProgramArgType } from '../../../app-web/src/common-code/healthPlanFormDataType/State' -import type { - HealthPlanFormDataType, - RateInfoType, -} from '../../../app-web/src/common-code/healthPlanFormDataType' -import { packageName } from '../../../app-web/src/common-code/healthPlanFormDataType' -import { toDomain } from '../../../app-web/src/common-code/proto/healthPlanFormDataProto' -import statePrograms from '../../../app-web/src/common-code/data/statePrograms.json' -import type { StoreError } from '../postgres/storeError' -import { isStoreError } from '../postgres/storeError' -import type { HealthPlanPackageStatusType } from '../domain-models' -import { - userFromCognitoAuthProvider, - userFromLocalAuthProvider, -} from '../authn' -import { - initTracer, - initMeter, - recordException, -} from '../../../uploads/src/lib/otel' - -type RequiredRevisionWithDecodedProtobufProperties = { - formDataProto: HealthPlanFormDataType | Error - id: string - createdAt: Date - pkgID: string - submittedAt: Date | null - unlockedAt: Date | null - unlockedBy: string | null - unlockedReason: string | null - submittedBy: string | null - submittedReason: string | null - programNames?: string[] - derivedStatus?: HealthPlanPackageStatusType - packageName?: string -} - -/* We want to show the rateInfos array with each field in its own column, -so we attach each RateInfoType to the revision object and let the CSV parser -take it from there. This is the typing for supporting -rateInfo0: RateInfoType, -rateInfo1: RateInfoType, -etc. */ -type RevisionWithDecodedProtobuf = - RequiredRevisionWithDecodedProtobufProperties & { - [key: string]: RateInfoType - } - -/* formProtoData is an encoded protocal buffer in the db, -so we decode it and put it back on the revision as readable data */ -const decodeRevisions = ( - revisions: HealthPlanRevisionTable[], - programList: ProgramArgType[] -): RevisionWithDecodedProtobuf[] => { - const allRevisions = [] as RevisionWithDecodedProtobuf[] - revisions.forEach((revision) => { - let decodedRevision = {} as RevisionWithDecodedProtobuf - const decodedFormDataProto = toDomain(revision.formDataProto) - decodedRevision.formDataProto = decodedFormDataProto - const names = programList - .filter( - (p) => - !(decodedFormDataProto instanceof Error) && - decodedFormDataProto.programIDs.includes(p.id) - ) - .map((p) => p.name) - decodedRevision.programNames = names - decodedRevision = Object.assign(revision, decodedRevision) - allRevisions.push(decodedRevision) - }) - return allRevisions -} - -export const main: APIGatewayProxyHandler = async (event, context) => { - const authProvider = - event.requestContext.identity.cognitoAuthenticationProvider ?? '' - const programList = [] as ProgramArgType[] - statePrograms.states.forEach((state) => { - programList.push(...state.programs) - }) - const dbURL = process.env.DATABASE_URL - const secretsManagerSecret = process.env.SECRETS_MANAGER_SECRET - if (!dbURL) { - console.error('DATABASE_URL not set') - throw new Error('Init Error: DATABASE_URL is required to run app-api') - } - if (!secretsManagerSecret) { - console.error('SECRETS_MANAGER_SECRET not set') - } - - const pgResult = await configurePostgres(dbURL, secretsManagerSecret) - if (pgResult instanceof Error) { - console.error( - "Init Error: Postgres couldn't be configured in data exporter" - ) - throw pgResult - } else { - console.info('Postgres configured in data exporter') - } - const store = NewPostgresStore(pgResult) - const authMode = process.env.REACT_APP_AUTH_MODE - - // reject the request if it's not from a CMS or ADMIN user - const userFetcher = - authMode === 'LOCAL' - ? userFromLocalAuthProvider - : userFromCognitoAuthProvider - const userResult = await userFetcher(authProvider, store) - if (userResult.isErr()) { - console.error('Error getting user from auth provider') - throw new Error('Error getting user from auth provider') - } - if ( - userResult.value.role !== 'CMS_USER' && - userResult.value.role !== 'ADMIN_USER' - ) { - console.error('User is not authorized to run reports') - throw new Error('User is not authorized to run reports') - } - console.info('User is authorized to run reports') - - const result: HealthPlanRevisionTable[] | StoreError = - await store.findAllRevisions() - if (isStoreError(result)) { - console.error('Error getting revisions from db') - throw new Error('Error getting records; cannot generate report') - } - const allDecodedRevisions: RevisionWithDecodedProtobuf[] = decodeRevisions( - result, - programList - ) - const stageName = process.env.stage ?? 'stageNotSet' - const serviceName = `reports_endpoint-${stageName}` - const otelCollectorURL = process.env.REACT_APP_OTEL_COLLECTOR_URL - if (otelCollectorURL) { - initTracer(serviceName, otelCollectorURL) - } else { - console.error( - 'Configuration Error: REACT_APP_OTEL_COLLECTOR_URL must be set' - ) - } - initMeter(serviceName) - const bucket = [] as RevisionWithDecodedProtobuf[] - for (const revision of allDecodedRevisions) { - if (revision.formDataProto instanceof Error) { - console.error('Error decoding revision', revision.id) - recordException( - revision.formDataProto, - serviceName, - 'decode_revision' - ) - } else { - // add the package name to the revision - const { stateCode, stateNumber, programIDs } = - revision.formDataProto - revision.packageName = packageName( - stateCode, - stateNumber, - programIDs, - programList - ) - // add the rateInfo fields to the revision - revision.formDataProto.rateInfos.forEach((rateInfo, index) => { - revision['rateInfo' + index] = rateInfo - }) - revision.formDataProto.rateInfos = [] - /* both saved/unsubmitted and submitted/unlocked revisions have a DRAFT status - we only want the unlocked revisions */ - if ( - revision.formDataProto.status !== 'DRAFT' || - revision.unlockedReason !== null - ) { - bucket.push(revision) - } - } - } - const parser = new Parser({ - transforms: [ - transforms.flatten({ - objects: true, - arrays: false, - separator: ',', - }), - ], - }) - const csv = parser.parse(bucket) - - return { - statusCode: 200, - body: csv, - headers: { - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Credentials': true, - 'Content-Disposition': 'attachment', - 'Content-Type': 'text/csv', - }, - } -} diff --git a/services/app-api/src/postgres/postgresStore.ts b/services/app-api/src/postgres/postgresStore.ts index 13630c3218..5a00ae1a41 100644 --- a/services/app-api/src/postgres/postgresStore.ts +++ b/services/app-api/src/postgres/postgresStore.ts @@ -43,7 +43,7 @@ import { insertManyUsers, } from './user' import { - findAllQuestionsByHealthPlanPackage, + findAllQuestionsByContract, insertQuestion, insertQuestionResponse, } from './questionResponse' @@ -139,9 +139,7 @@ type Store = { user: CMSUserType ) => Promise - findAllQuestionsByHealthPlanPackage: ( - pkgID: string - ) => Promise + findAllQuestionsByContract: (pkgID: string) => Promise insertQuestionResponse: ( questionInput: InsertQuestionResponseArgs, @@ -240,8 +238,8 @@ function NewPostgresStore(client: PrismaClient): Store { findAllUsers: () => findAllUsers(client), insertQuestion: (questionInput, user) => insertQuestion(client, questionInput, user), - findAllQuestionsByHealthPlanPackage: (pkgID) => - findAllQuestionsByHealthPlanPackage(client, pkgID), + findAllQuestionsByContract: (pkgID) => + findAllQuestionsByContract(client, pkgID), insertQuestionResponse: (questionInput, user) => insertQuestionResponse(client, questionInput, user), /** diff --git a/services/app-api/src/postgres/questionResponse/findAllQuestionsByHealthPlanPackage.ts b/services/app-api/src/postgres/questionResponse/findAllQuestionsByContract.ts similarity index 78% rename from services/app-api/src/postgres/questionResponse/findAllQuestionsByHealthPlanPackage.ts rename to services/app-api/src/postgres/questionResponse/findAllQuestionsByContract.ts index bd65b04d1b..9f24fa4f07 100644 --- a/services/app-api/src/postgres/questionResponse/findAllQuestionsByHealthPlanPackage.ts +++ b/services/app-api/src/postgres/questionResponse/findAllQuestionsByContract.ts @@ -4,17 +4,15 @@ import type { Question, QuestionResponseType, } from '../../domain-models' -import type { StoreError } from '../storeError' -import { convertPrismaErrorToStoreError } from '../storeError' -export async function findAllQuestionsByHealthPlanPackage( +export async function findAllQuestionsByContract( client: PrismaClient, - pkgID: string -): Promise { + contractID: string +): Promise { try { const findResult = await client.question.findMany({ where: { - pkgID: pkgID, + contractID: contractID, }, include: { documents: { @@ -49,6 +47,10 @@ export async function findAllQuestionsByHealthPlanPackage( return questions } catch (e: unknown) { - return convertPrismaErrorToStoreError(e) + if (e instanceof Error) { + return e + } + console.error('Unknown object thrown by Prisma', e) + return new Error('Unknown object thrown by Prisma') } } diff --git a/services/app-api/src/postgres/questionResponse/index.ts b/services/app-api/src/postgres/questionResponse/index.ts index 5c5946411c..d06428f207 100644 --- a/services/app-api/src/postgres/questionResponse/index.ts +++ b/services/app-api/src/postgres/questionResponse/index.ts @@ -1,4 +1,4 @@ -export { findAllQuestionsByHealthPlanPackage } from './findAllQuestionsByHealthPlanPackage' +export { findAllQuestionsByContract } from './findAllQuestionsByContract' export { insertQuestion } from './insertQuestion' export { convertToIndexQuestionsPayload } from './questionHelpers' export { insertQuestionResponse } from './insertQuestionResponse' diff --git a/services/app-api/src/postgres/questionResponse/insertQuestion.ts b/services/app-api/src/postgres/questionResponse/insertQuestion.ts index 3399cd7e13..17d730bcdc 100644 --- a/services/app-api/src/postgres/questionResponse/insertQuestion.ts +++ b/services/app-api/src/postgres/questionResponse/insertQuestion.ts @@ -25,9 +25,9 @@ export async function insertQuestion( const result = await client.question.create({ data: { id: uuidv4(), - pkg: { + contract: { connect: { - id: questionInput.pkgID, + id: questionInput.contractID, }, }, addedBy: { diff --git a/services/app-api/src/resolvers/healthPlanPackage/healthPlanPackageResolver.ts b/services/app-api/src/resolvers/healthPlanPackage/healthPlanPackageResolver.ts index 5cc3ae3c11..9e9cc295bb 100644 --- a/services/app-api/src/resolvers/healthPlanPackage/healthPlanPackageResolver.ts +++ b/services/app-api/src/resolvers/healthPlanPackage/healthPlanPackageResolver.ts @@ -3,7 +3,6 @@ import { protoToBase64 } from '../../../../app-web/src/common-code/proto/healthP import statePrograms from '../../../../app-web/src/common-code/data/statePrograms.json' import type { Resolvers } from '../../gen/gqlServer' import type { Store } from '../../postgres' -import { isStoreError } from '../../postgres' import { convertToIndexQuestionsPayload } from '../../postgres/questionResponse' import { logError } from '../../logger' import { setErrorAttributesOnActiveSpan } from '../attributeHelper' @@ -59,15 +58,13 @@ export function healthPlanPackageResolver( } return state }, - questions: async (parent, args, context) => { + questions: async (parent, _args, context) => { const { span } = context const pkgID = parent.id - const result = await store.findAllQuestionsByHealthPlanPackage( - pkgID - ) + const result = await store.findAllQuestionsByContract(pkgID) - if (isStoreError(result)) { - const errMessage = `Issue finding questions of type ${result.code} for package with id: ${pkgID}. Message: ${result.message}` + if (result instanceof Error) { + const errMessage = `Issue finding questions for package with id: ${pkgID}. Message: ${result.message}` logError('indexQuestions', errMessage) setErrorAttributesOnActiveSpan(errMessage, span) throw new GraphQLError(errMessage, { diff --git a/services/app-api/src/resolvers/questionResponse/createQuestion.test.ts b/services/app-api/src/resolvers/questionResponse/createQuestion.test.ts index d7e7e78f1e..a661e8f327 100644 --- a/services/app-api/src/resolvers/questionResponse/createQuestion.test.ts +++ b/services/app-api/src/resolvers/questionResponse/createQuestion.test.ts @@ -13,8 +13,10 @@ import { createDBUsersWithFullData, testCMSUser, } from '../../testHelpers/userHelpers' +import { testLDService } from '../../testHelpers/launchDarklyHelpers' describe('createQuestion', () => { + const mockLDService = testLDService({ ['rates-db-refactor']: true }) const cmsUser = testCMSUser() beforeAll(async () => { //Inserting a new CMS user, with division assigned, in postgres in order to create the question to user relationship. @@ -22,11 +24,14 @@ describe('createQuestion', () => { }) it('returns question data after creation', async () => { - const stateServer = await constructTestPostgresServer() + const stateServer = await constructTestPostgresServer({ + ldService: mockLDService, + }) const cmsServer = await constructTestPostgresServer({ context: { user: cmsUser, }, + ldService: mockLDService, }) const submittedPkg = await createAndSubmitTestHealthPlanPackage( @@ -41,7 +46,7 @@ describe('createQuestion', () => { expect(createdQuestion.question).toEqual( expect.objectContaining({ id: expect.any(String), - pkgID: submittedPkg.id, + contractID: submittedPkg.id, division: 'DMCO', documents: [ { @@ -54,11 +59,14 @@ describe('createQuestion', () => { ) }) it('allows question creation on UNLOCKED and RESUBMITTED package', async () => { - const stateServer = await constructTestPostgresServer() + const stateServer = await constructTestPostgresServer({ + ldService: mockLDService, + }) const cmsServer = await constructTestPostgresServer({ context: { user: cmsUser, }, + ldService: mockLDService, }) const submittedPkg = await createAndSubmitTestHealthPlanPackage( @@ -104,7 +112,7 @@ describe('createQuestion', () => { node: expect.objectContaining({ id: expect.any(String), createdAt: expect.any(Date), - pkgID: submittedPkg.id, + contractID: submittedPkg.id, division: 'DMCO', documents: [ { @@ -119,7 +127,7 @@ describe('createQuestion', () => { node: expect.objectContaining({ id: expect.any(String), createdAt: expect.any(Date), - pkgID: submittedPkg.id, + contractID: submittedPkg.id, division: 'DMCO', documents: [ { @@ -144,11 +152,14 @@ describe('createQuestion', () => { ) }) it('returns an error package status is DRAFT', async () => { - const stateServer = await constructTestPostgresServer() + const stateServer = await constructTestPostgresServer({ + ldService: mockLDService, + }) const cmsServer = await constructTestPostgresServer({ context: { user: cmsUser, }, + ldService: mockLDService, }) const draftPkg = await createTestHealthPlanPackage(stateServer) @@ -157,7 +168,7 @@ describe('createQuestion', () => { query: CREATE_QUESTION, variables: { input: { - pkgID: draftPkg.id, + contractID: draftPkg.id, documents: [ { name: 'Test Question', @@ -175,7 +186,9 @@ describe('createQuestion', () => { ) }) it('returns an error if a state user attempts to create a question for a package', async () => { - const stateServer = await constructTestPostgresServer() + const stateServer = await constructTestPostgresServer({ + ldService: mockLDService, + }) const submittedPkg = await createAndSubmitTestHealthPlanPackage( stateServer ) @@ -184,7 +197,7 @@ describe('createQuestion', () => { query: CREATE_QUESTION, variables: { input: { - pkgID: submittedPkg.id, + contractID: submittedPkg.id, documents: [ { name: 'Test Question', @@ -202,11 +215,14 @@ describe('createQuestion', () => { ) }) it('returns error on invalid package id', async () => { - const stateServer = await constructTestPostgresServer() + const stateServer = await constructTestPostgresServer({ + ldService: mockLDService, + }) const cmsServer = await constructTestPostgresServer({ context: { user: cmsUser, }, + ldService: mockLDService, }) await createAndSubmitTestHealthPlanPackage(stateServer) @@ -215,7 +231,7 @@ describe('createQuestion', () => { query: CREATE_QUESTION, variables: { input: { - pkgID: 'invalid-pkg-id', + contractID: 'invalid-pkg-id', documents: [ { name: 'Test Question', @@ -229,7 +245,7 @@ describe('createQuestion', () => { expect(createdQuestion.errors).toBeDefined() expect(assertAnErrorCode(createdQuestion)).toBe('NOT_FOUND') expect(assertAnError(createdQuestion).message).toBe( - `Issue finding a package with id invalid-pkg-id. Message: Package with id invalid-pkg-id does not exist` + `Package with id invalid-pkg-id does not exist` ) }) it('returns error when CMS user division is unassigned', async () => { @@ -237,11 +253,14 @@ describe('createQuestion', () => { divisionAssignment: undefined, }) await createDBUsersWithFullData([cmsUserWithNoDivision]) - const stateServer = await constructTestPostgresServer() + const stateServer = await constructTestPostgresServer({ + ldService: mockLDService, + }) const cmsServer = await constructTestPostgresServer({ context: { user: cmsUserWithNoDivision, }, + ldService: mockLDService, }) await createAndSubmitTestHealthPlanPackage(stateServer) @@ -250,7 +269,7 @@ describe('createQuestion', () => { query: CREATE_QUESTION, variables: { input: { - pkgID: 'invalid-pkg-id', + contractID: 'invalid-pkg-id', documents: [ { name: 'Test Question', diff --git a/services/app-api/src/resolvers/questionResponse/createQuestion.ts b/services/app-api/src/resolvers/questionResponse/createQuestion.ts index 32b6eebc6d..aee2a351bb 100644 --- a/services/app-api/src/resolvers/questionResponse/createQuestion.ts +++ b/services/app-api/src/resolvers/questionResponse/createQuestion.ts @@ -1,11 +1,12 @@ import type { MutationResolvers } from '../../gen/gqlServer' -import { isCMSUser, packageStatus } from '../../domain-models' +import { isCMSUser } from '../../domain-models' import { logError, logSuccess } from '../../logger' import { setErrorAttributesOnActiveSpan, setSuccessAttributesOnActiveSpan, } from '../attributeHelper' import { ForbiddenError, UserInputError } from 'apollo-server-lambda' +import { NotFoundError } from '../../postgres' import type { Store } from '../../postgres' import { isStoreError } from '../../postgres' import { GraphQLError } from 'graphql' @@ -44,10 +45,20 @@ export function createQuestionResolver( } // Return error if package is not found or errors - const result = await store.findHealthPlanPackage(input.pkgID) + const contractResult = await store.findContractWithHistory( + input.contractID + ) + if (contractResult instanceof Error) { + if (contractResult instanceof NotFoundError) { + const errMessage = `Package with id ${input.contractID} does not exist` + logError('createQuestion', errMessage) + setErrorAttributesOnActiveSpan(errMessage, span) + throw new GraphQLError(errMessage, { + extensions: { code: 'NOT_FOUND' }, + }) + } - if (isStoreError(result)) { - const errMessage = `Issue finding a package of type ${result.code}. Message: ${result.message}` + const errMessage = `Issue finding a package. Message: ${contractResult.message}` logError('createQuestion', errMessage) setErrorAttributesOnActiveSpan(errMessage, span) throw new GraphQLError(errMessage, { @@ -58,19 +69,8 @@ export function createQuestionResolver( }) } - if (result === undefined) { - const errMessage = `Issue finding a package with id ${input.pkgID}. Message: Package with id ${input.pkgID} does not exist` - logError('createQuestion', errMessage) - setErrorAttributesOnActiveSpan(errMessage, span) - throw new GraphQLError(errMessage, { - extensions: { code: 'NOT_FOUND' }, - }) - } - - // Return error if package status is DRAFT - const packageStats = packageStatus(result) - - if (packageStats === 'DRAFT') { + // Return error if package status is DRAFT, contract will have no submitted revisions + if (contractResult.revisions.length === 0) { const errMessage = `Issue creating question for health plan package. Message: Cannot create question for health plan package in DRAFT status` logError('createQuestion', errMessage) setErrorAttributesOnActiveSpan(errMessage, span) diff --git a/services/app-api/src/resolvers/questionResponse/createQuestionResponse.test.ts b/services/app-api/src/resolvers/questionResponse/createQuestionResponse.test.ts index a82028ba8d..dbfbed1364 100644 --- a/services/app-api/src/resolvers/questionResponse/createQuestionResponse.test.ts +++ b/services/app-api/src/resolvers/questionResponse/createQuestionResponse.test.ts @@ -10,8 +10,10 @@ import { createDBUsersWithFullData, testCMSUser, } from '../../testHelpers/userHelpers' +import { testLDService } from '../../testHelpers/launchDarklyHelpers' describe('createQuestionResponse', () => { + const mockLDService = testLDService({ ['rates-db-refactor']: true }) const cmsUser = testCMSUser() beforeAll(async () => { //Inserting a new CMS user, with division assigned, in postgres in order to create the question to user relationship. @@ -19,11 +21,14 @@ describe('createQuestionResponse', () => { }) it('returns question response data', async () => { - const stateServer = await constructTestPostgresServer() + const stateServer = await constructTestPostgresServer({ + ldService: mockLDService, + }) const cmsServer = await constructTestPostgresServer({ context: { user: cmsUser, }, + ldService: mockLDService, }) const submittedPkg = await createAndSubmitTestHealthPlanPackage( @@ -58,7 +63,9 @@ describe('createQuestionResponse', () => { }) it('returns an error when attempting to create response for a question that does not exist', async () => { - const stateServer = await constructTestPostgresServer() + const stateServer = await constructTestPostgresServer({ + ldService: mockLDService, + }) const fakeID = 'abc-123' const createdResponse = await stateServer.executeOperation({ @@ -84,11 +91,14 @@ describe('createQuestionResponse', () => { }) it('returns an error if a cms user attempts to create a question response for a package', async () => { - const stateServer = await constructTestPostgresServer() + const stateServer = await constructTestPostgresServer({ + ldService: mockLDService, + }) const cmsServer = await constructTestPostgresServer({ context: { user: cmsUser, }, + ldService: mockLDService, }) const submittedPkg = await createAndSubmitTestHealthPlanPackage( stateServer diff --git a/services/app-api/src/resolvers/questionResponse/indexQuestions.test.ts b/services/app-api/src/resolvers/questionResponse/indexQuestions.test.ts index e68f222e39..23ff062804 100644 --- a/services/app-api/src/resolvers/questionResponse/indexQuestions.test.ts +++ b/services/app-api/src/resolvers/questionResponse/indexQuestions.test.ts @@ -11,8 +11,11 @@ import { createDBUsersWithFullData, testCMSUser, } from '../../testHelpers/userHelpers' +import { testLDService } from '../../testHelpers/launchDarklyHelpers' describe('indexQuestions', () => { + const mockLDService = testLDService({ ['rates-db-refactor']: true }) + const dmcoCMSUser = testCMSUser({ divisionAssignment: 'DMCO', }) @@ -28,21 +31,26 @@ describe('indexQuestions', () => { }) it('returns package with questions and responses for each division', async () => { - const stateServer = await constructTestPostgresServer() + const stateServer = await constructTestPostgresServer({ + ldService: mockLDService, + }) const dmcoCMSServer = await constructTestPostgresServer({ context: { user: dmcoCMSUser, }, + ldService: mockLDService, }) const dmcpCMSServer = await constructTestPostgresServer({ context: { user: dmcpCMSUser, }, + ldService: mockLDService, }) const oactCMServer = await constructTestPostgresServer({ context: { user: oactCMSUser, }, + ldService: mockLDService, }) const submittedPkg = await createAndSubmitTestHealthPlanPackage( @@ -117,7 +125,7 @@ describe('indexQuestions', () => { node: expect.objectContaining({ id: expect.any(String), createdAt: expect.any(Date), - pkgID: submittedPkg.id, + contractID: submittedPkg.id, division: 'DMCO', documents: [ { @@ -138,7 +146,7 @@ describe('indexQuestions', () => { node: expect.objectContaining({ id: expect.any(String), createdAt: expect.any(Date), - pkgID: submittedPkg.id, + contractID: submittedPkg.id, division: 'DMCP', documents: [ { @@ -159,7 +167,7 @@ describe('indexQuestions', () => { node: expect.objectContaining({ id: expect.any(String), createdAt: expect.any(Date), - pkgID: submittedPkg.id, + contractID: submittedPkg.id, division: 'OACT', documents: [ { @@ -177,7 +185,9 @@ describe('indexQuestions', () => { ) }) it('returns an error if you are requesting for a different state (403)', async () => { - const stateServer = await constructTestPostgresServer() + const stateServer = await constructTestPostgresServer({ + ldService: mockLDService, + }) const otherStateServer = await constructTestPostgresServer({ context: { user: { @@ -189,11 +199,13 @@ describe('indexQuestions', () => { givenName: 'Aang', }, }, + ldService: mockLDService, }) const cmsServer = await constructTestPostgresServer({ context: { user: dmcoCMSUser, }, + ldService: mockLDService, }) const submittedPkg = await createAndSubmitTestHealthPlanPackage( @@ -206,7 +218,7 @@ describe('indexQuestions', () => { query: INDEX_QUESTIONS, variables: { input: { - pkgID: submittedPkg.id, + contractID: submittedPkg.id, }, }, }) @@ -218,7 +230,9 @@ describe('indexQuestions', () => { ) }) it('returns an error if health plan package does not exist', async () => { - const server = await constructTestPostgresServer() + const server = await constructTestPostgresServer({ + ldService: mockLDService, + }) await createAndSubmitTestHealthPlanPackage(server) @@ -226,7 +240,7 @@ describe('indexQuestions', () => { query: INDEX_QUESTIONS, variables: { input: { - pkgID: 'invalid-pkg-id', + contractID: 'invalid-pkg-id', }, }, }) @@ -234,7 +248,7 @@ describe('indexQuestions', () => { expect(result.errors).toBeDefined() expect(assertAnErrorCode(result)).toBe('NOT_FOUND') expect(assertAnError(result).message).toBe( - 'Issue finding a package with id invalid-pkg-id. Message: Package with id invalid-pkg-id does not exist' + 'Issue finding a contract with id invalid-pkg-id. Message: Contract with id invalid-pkg-id does not exist' ) }) }) diff --git a/services/app-api/src/resolvers/questionResponse/indexQuestions.ts b/services/app-api/src/resolvers/questionResponse/indexQuestions.ts index 8fbb2c1474..c157073bbc 100644 --- a/services/app-api/src/resolvers/questionResponse/indexQuestions.ts +++ b/services/app-api/src/resolvers/questionResponse/indexQuestions.ts @@ -1,7 +1,7 @@ import { isStateUser } from '../../domain-models' import type { QueryResolvers } from '../../gen/gqlServer' +import { NotFoundError } from '../../postgres' import type { Store } from '../../postgres' -import { isStoreError } from '../../postgres' import { logError } from '../../logger' import { setErrorAttributesOnActiveSpan } from '../attributeHelper' import { ForbiddenError, UserInputError } from 'apollo-server-lambda' @@ -13,26 +13,28 @@ export function indexQuestionsResolver( ): QueryResolvers['indexQuestions'] { return async (_parent, { input }, context) => { const { user, span } = context - const pkgResult = await store.findHealthPlanPackage(input.pkgID) - if (isStoreError(pkgResult)) { - const errMessage = `Issue finding a package of type ${pkgResult.code}. Message: ${pkgResult.message}` + const contractResult = await store.findContractWithHistory( + input.contractID + ) + if (contractResult instanceof Error) { + if (contractResult instanceof NotFoundError) { + const errMessage = `Issue finding a contract with id ${input.contractID}. Message: Contract with id ${input.contractID} does not exist` + logError('createQuestion', errMessage) + setErrorAttributesOnActiveSpan(errMessage, span) + throw new GraphQLError(errMessage, { + extensions: { code: 'NOT_FOUND' }, + }) + } + const errMessage = `Issue finding a package. Message: ${contractResult.message}` logError('createQuestion', errMessage) setErrorAttributesOnActiveSpan(errMessage, span) throw new UserInputError(errMessage) } - if (pkgResult === undefined) { - const errMessage = `Issue finding a package with id ${input.pkgID}. Message: Package with id ${input.pkgID} does not exist` - logError('createQuestion', errMessage) - setErrorAttributesOnActiveSpan(errMessage, span) - throw new GraphQLError(errMessage, { - extensions: { code: 'NOT_FOUND' }, - }) - } - + const contract = contractResult // State users can only view if the state matches - if (isStateUser(user) && pkgResult.stateCode !== user.stateCode) { + if (isStateUser(user) && contract.stateCode !== user.stateCode) { const errMessage = 'User not authorized to fetch data from a different state' logError('indexQuestions', errMessage) @@ -40,12 +42,12 @@ export function indexQuestionsResolver( throw new ForbiddenError(errMessage) } - const questionResult = await store.findAllQuestionsByHealthPlanPackage( - input.pkgID + const questionResult = await store.findAllQuestionsByContract( + input.contractID ) - if (isStoreError(questionResult)) { - const errMessage = `Issue finding questions of type ${questionResult.code}. Message: ${questionResult.message}` + if (questionResult instanceof Error) { + const errMessage = `Issue finding questions. Message: ${questionResult.message}` logError('indexQuestions', errMessage) setErrorAttributesOnActiveSpan(errMessage, span) throw new Error(errMessage) diff --git a/services/app-api/src/testHelpers/gqlHelpers.ts b/services/app-api/src/testHelpers/gqlHelpers.ts index c8765b0f96..f28158f113 100644 --- a/services/app-api/src/testHelpers/gqlHelpers.ts +++ b/services/app-api/src/testHelpers/gqlHelpers.ts @@ -427,8 +427,8 @@ const fetchTestHealthPlanPackageById = async ( const createTestQuestion = async ( server: ApolloServer, - pkgID: string, - questionData?: Omit + contractID: string, + questionData?: Omit ): Promise => { const question = questionData || { documents: [ @@ -442,7 +442,7 @@ const createTestQuestion = async ( query: CREATE_QUESTION, variables: { input: { - pkgID, + contractID, ...question, }, }, @@ -462,13 +462,13 @@ const createTestQuestion = async ( const indexTestQuestions = async ( server: ApolloServer, - pkgID: string + contractID: string ): Promise => { const indexQuestionsResult = await server.executeOperation({ query: INDEX_QUESTIONS, variables: { input: { - pkgID: pkgID, + contractID, }, }, }) diff --git a/services/app-api/src/testHelpers/storeHelpers.ts b/services/app-api/src/testHelpers/storeHelpers.ts index dc0d372f48..bff94b49fa 100644 --- a/services/app-api/src/testHelpers/storeHelpers.ts +++ b/services/app-api/src/testHelpers/storeHelpers.ts @@ -95,8 +95,8 @@ function mockStoreThatErrors(): Store { insertQuestion: async (_ID) => { return genericStoreError }, - findAllQuestionsByHealthPlanPackage: async (_pkgID) => { - return genericStoreError + findAllQuestionsByContract: async (_pkgID) => { + return genericError }, insertQuestionResponse: async (_ID) => { return genericStoreError diff --git a/services/app-graphql/src/mutations/createQuestion.graphql b/services/app-graphql/src/mutations/createQuestion.graphql index 1181885a82..a81a5aadec 100644 --- a/services/app-graphql/src/mutations/createQuestion.graphql +++ b/services/app-graphql/src/mutations/createQuestion.graphql @@ -2,7 +2,7 @@ mutation createQuestion($input: CreateQuestionInput!) { createQuestion(input: $input) { question { id - pkgID + contractID createdAt addedBy { id diff --git a/services/app-graphql/src/queries/fetchHealthPlanPackageWithQuestions.graphql b/services/app-graphql/src/queries/fetchHealthPlanPackageWithQuestions.graphql index 54ef5681e7..340c3222ea 100644 --- a/services/app-graphql/src/queries/fetchHealthPlanPackageWithQuestions.graphql +++ b/services/app-graphql/src/queries/fetchHealthPlanPackageWithQuestions.graphql @@ -1,7 +1,7 @@ fragment questionEdgeFragment on QuestionEdge { node { id - pkgID + contractID createdAt addedBy { id diff --git a/services/app-graphql/src/queries/indexQuestions.graphql b/services/app-graphql/src/queries/indexQuestions.graphql index 2143fa6613..4ed303bae9 100644 --- a/services/app-graphql/src/queries/indexQuestions.graphql +++ b/services/app-graphql/src/queries/indexQuestions.graphql @@ -1,7 +1,7 @@ fragment questionEdgeFragment on QuestionEdge { node { id - pkgID + contractID createdAt addedBy { id diff --git a/services/app-graphql/src/schema.graphql b/services/app-graphql/src/schema.graphql index bbc37cb94f..c46bce7078 100644 --- a/services/app-graphql/src/schema.graphql +++ b/services/app-graphql/src/schema.graphql @@ -308,7 +308,7 @@ type IndexHealthPlanPackagesPayload { input IndexQuestionsInput { "The ID of the package for which to fetch associated questions" - pkgID: ID! + contractID: ID! } type IndexQuestionsPayload { @@ -338,7 +338,7 @@ input DocumentInput { input CreateQuestionInput { "The ID of the package for which to create a question" - pkgID: ID! + contractID: ID! "A list of documents to attach to the question" documents: [DocumentInput!]! # should be Generic Document with sha256 "A note to attach to the question" @@ -664,7 +664,7 @@ QuestionResponse with documents that answer the questions posed by CMS. """ type Question { id: ID! - pkgID: ID! + contractID: ID! createdAt: DateTime! addedBy: CMSUser! documents: [Document!]! diff --git a/services/app-web/package.json b/services/app-web/package.json index 8240c9f199..a237889b4c 100644 --- a/services/app-web/package.json +++ b/services/app-web/package.json @@ -107,7 +107,7 @@ "react-dom": "^18.2.0", "react-error-boundary": "^4.0.10", "react-router-dom": "^6.5.0", - "react-select": "^5.7.0", + "react-select": "^5.7.7", "sass": "^1.49.11", "typescript": "^4.4.4", "url-parse": "^1.5.2", diff --git a/services/app-web/src/components/Reports/Reports.module.scss b/services/app-web/src/components/Reports/Reports.module.scss deleted file mode 100644 index 7bc81cf558..0000000000 --- a/services/app-web/src/components/Reports/Reports.module.scss +++ /dev/null @@ -1,9 +0,0 @@ -.button { - background-color: transparent; - border: none; - cursor: pointer; - width: fit-content; - margin-top: 50px; - margin-left: 50px; - font-size: large; -} diff --git a/services/app-web/src/components/Reports/Reports.test.tsx b/services/app-web/src/components/Reports/Reports.test.tsx deleted file mode 100644 index 9ee8a936e1..0000000000 --- a/services/app-web/src/components/Reports/Reports.test.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react' -import { Reports } from './Reports' -import { render, screen } from '@testing-library/react' - -describe('Reports component', () => { - it('renders the page with a link to download reports', () => { - render() - expect(screen).toMatchSnapshot() - }) -}) diff --git a/services/app-web/src/components/Reports/Reports.tsx b/services/app-web/src/components/Reports/Reports.tsx deleted file mode 100644 index dbfe735cea..0000000000 --- a/services/app-web/src/components/Reports/Reports.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import React from 'react' -import { API } from 'aws-amplify' -import { Button } from '@trussworks/react-uswds' -import { getLoggedInUser } from '../../localAuth' -import styles from './Reports.module.scss' - -export const Reports = (): React.ReactElement => { - const getReports = async (): Promise => { - const currentUser = await getLoggedInUser() - const authMode = process.env.REACT_APP_AUTH_MODE - const options = { - responseType: 'blob', - response: true, - headers: - authMode === 'LOCAL' - ? { - 'cognito-authentication-provider': - JSON.stringify(currentUser), - } - : {}, - } - // code for downloading a file taken from https://gist.github.com/Sleavely/b243e4400a9e4772b00128d3e99b9946 - await API.get('api', '/reports', options) - .then((response) => { - const blob = new Blob([response.data], { - type: 'application/octet-stream', - }) - const filename = 'report.csv' - const blobURL = window.URL.createObjectURL(blob) - const tempLink = document.createElement('a') - tempLink.style.display = 'none' - tempLink.href = blobURL - tempLink.setAttribute('download', filename) - - // Safari thinks _blank anchor are pop ups. We only want to set _blank - // target if the browser does not support the HTML5 download attribute. - // This allows you to download files in desktop safari if pop up blocking - // is enabled. - if (typeof tempLink.download === 'undefined') { - tempLink.setAttribute('target', '_blank') - } - - document.body.appendChild(tempLink) - tempLink.click() - document.body.removeChild(tempLink) - window.URL.revokeObjectURL(blobURL) - }) - .catch((e) => { - console.info('Error downloading report: ', e) - }) - } - - return ( - <> - - - ) -} diff --git a/services/app-web/src/components/Reports/__snapshots__/Reports.test.tsx.snap b/services/app-web/src/components/Reports/__snapshots__/Reports.test.tsx.snap deleted file mode 100644 index 3422514edd..0000000000 --- a/services/app-web/src/components/Reports/__snapshots__/Reports.test.tsx.snap +++ /dev/null @@ -1,56 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Reports component renders the page with a link to download reports 1`] = ` -Object { - "debug": [Function], - "findAllByAltText": [Function], - "findAllByDisplayValue": [Function], - "findAllByLabelText": [Function], - "findAllByPlaceholderText": [Function], - "findAllByRole": [Function], - "findAllByTestId": [Function], - "findAllByText": [Function], - "findAllByTitle": [Function], - "findByAltText": [Function], - "findByDisplayValue": [Function], - "findByLabelText": [Function], - "findByPlaceholderText": [Function], - "findByRole": [Function], - "findByTestId": [Function], - "findByText": [Function], - "findByTitle": [Function], - "getAllByAltText": [Function], - "getAllByDisplayValue": [Function], - "getAllByLabelText": [Function], - "getAllByPlaceholderText": [Function], - "getAllByRole": [Function], - "getAllByTestId": [Function], - "getAllByText": [Function], - "getAllByTitle": [Function], - "getByAltText": [Function], - "getByDisplayValue": [Function], - "getByLabelText": [Function], - "getByPlaceholderText": [Function], - "getByRole": [Function], - "getByTestId": [Function], - "getByText": [Function], - "getByTitle": [Function], - "logTestingPlaygroundURL": [Function], - "queryAllByAltText": [Function], - "queryAllByDisplayValue": [Function], - "queryAllByLabelText": [Function], - "queryAllByPlaceholderText": [Function], - "queryAllByRole": [Function], - "queryAllByTestId": [Function], - "queryAllByText": [Function], - "queryAllByTitle": [Function], - "queryByAltText": [Function], - "queryByDisplayValue": [Function], - "queryByLabelText": [Function], - "queryByPlaceholderText": [Function], - "queryByRole": [Function], - "queryByTestId": [Function], - "queryByText": [Function], - "queryByTitle": [Function], -} -`; diff --git a/services/app-web/src/components/SectionHeader/SectionHeader.module.scss b/services/app-web/src/components/SectionHeader/SectionHeader.module.scss index d566e49b51..67f8752220 100644 --- a/services/app-web/src/components/SectionHeader/SectionHeader.module.scss +++ b/services/app-web/src/components/SectionHeader/SectionHeader.module.scss @@ -13,15 +13,15 @@ padding-bottom: units(1); min-height: 3rem; - &.alignTop { + &.hasSubheader { align-items: start; + a { + display: block; + margin-top: 17.5px; + padding-bottom: units(1); + } } - a { - display: block; - margin-top: 17.5px; - padding-bottom: units(1); - } } .summarySectionHeaderBorder { diff --git a/services/app-web/src/components/SectionHeader/SectionHeader.stories.tsx b/services/app-web/src/components/SectionHeader/SectionHeader.stories.tsx index e506d816ac..b846a7b91a 100644 --- a/services/app-web/src/components/SectionHeader/SectionHeader.stories.tsx +++ b/services/app-web/src/components/SectionHeader/SectionHeader.stories.tsx @@ -20,7 +20,7 @@ WithAction.decorators = [(Story) => ProvidersDecorator(Story, {})] WithAction.args = { header: 'Contract details', - navigateTo: 'contract-details', + editNavigateTo: 'contract-details', } export const WithoutAction = Template.bind({}) diff --git a/services/app-web/src/components/SectionHeader/SectionHeader.test.tsx b/services/app-web/src/components/SectionHeader/SectionHeader.test.tsx index 1eef66f462..84f04e36e3 100644 --- a/services/app-web/src/components/SectionHeader/SectionHeader.test.tsx +++ b/services/app-web/src/components/SectionHeader/SectionHeader.test.tsx @@ -22,9 +22,9 @@ describe('SectionHeader', () => { screen.getByRole('button', { name: 'Click Me' }) ).toBeInTheDocument() }) - it('displays Edit link if navigateTo prop is passed in', () => { + it('displays Edit link if editNavigateTo prop is passed in', () => { renderWithProviders( - + ) diff --git a/services/app-web/src/components/SectionHeader/SectionHeader.tsx b/services/app-web/src/components/SectionHeader/SectionHeader.tsx index acd740209d..dbc25d9496 100644 --- a/services/app-web/src/components/SectionHeader/SectionHeader.tsx +++ b/services/app-web/src/components/SectionHeader/SectionHeader.tsx @@ -5,9 +5,9 @@ import classNames from 'classnames' export type SectionHeaderProps = { header: string - navigateTo?: string children?: React.ReactNode - subHeaderComponent?: React.ReactNode + editNavigateTo?: string // Controls appearance of edit link to the right of main heading - should be pathname substring for use with NavLink + subHeaderComponent?: React.ReactNode // Controls appearance of additional component below main heading sectionId?: string headerId?: string hideBorder?: boolean @@ -16,7 +16,7 @@ export type SectionHeaderProps = { export const SectionHeader = ({ header, subHeaderComponent, - navigateTo, + editNavigateTo, children, sectionId, headerId, @@ -25,7 +25,7 @@ export const SectionHeader = ({ const classes = classNames({ [styles.summarySectionHeader]: true, [styles.summarySectionHeaderBorder]: !hideBorder, - [styles.alignTop]: subHeaderComponent, + [styles.hasSubheader]: subHeaderComponent, }) return (
@@ -34,12 +34,12 @@ export const SectionHeader = ({ {subHeaderComponent}
- {navigateTo && ( + {editNavigateTo && ( Edit {header} diff --git a/services/app-web/src/components/SubmissionSummarySection/ContactsSummarySection/ContactsSummarySection.stories.tsx b/services/app-web/src/components/SubmissionSummarySection/ContactsSummarySection/ContactsSummarySection.stories.tsx index 31e28f9635..e5cce14b44 100644 --- a/services/app-web/src/components/SubmissionSummarySection/ContactsSummarySection/ContactsSummarySection.stories.tsx +++ b/services/app-web/src/components/SubmissionSummarySection/ContactsSummarySection/ContactsSummarySection.stories.tsx @@ -24,7 +24,7 @@ WithAction.decorators = [(Story) => ProvidersDecorator(Story, {})] WithAction.args = { submission: mockContractAndRatesDraft(), - navigateTo: 'contract-details', + editNavigateTo: 'contract-details', } export const WithoutAction = Template.bind({}) diff --git a/services/app-web/src/components/SubmissionSummarySection/ContactsSummarySection/ContactsSummarySection.test.tsx b/services/app-web/src/components/SubmissionSummarySection/ContactsSummarySection/ContactsSummarySection.test.tsx index 11920cdb65..b6186352fb 100644 --- a/services/app-web/src/components/SubmissionSummarySection/ContactsSummarySection/ContactsSummarySection.test.tsx +++ b/services/app-web/src/components/SubmissionSummarySection/ContactsSummarySection/ContactsSummarySection.test.tsx @@ -15,7 +15,7 @@ describe('ContactsSummarySection', () => { renderWithProviders( ) @@ -54,7 +54,7 @@ describe('ContactsSummarySection', () => { renderWithProviders( ) diff --git a/services/app-web/src/components/SubmissionSummarySection/ContactsSummarySection/ContactsSummarySection.tsx b/services/app-web/src/components/SubmissionSummarySection/ContactsSummarySection/ContactsSummarySection.tsx index 6a7b542fa7..be070bb15f 100644 --- a/services/app-web/src/components/SubmissionSummarySection/ContactsSummarySection/ContactsSummarySection.tsx +++ b/services/app-web/src/components/SubmissionSummarySection/ContactsSummarySection/ContactsSummarySection.tsx @@ -11,7 +11,7 @@ import { DataDetail, DataDetailContactField } from '../../DataDetail' export type ContactsSummarySectionProps = { submission: HealthPlanFormDataType - navigateTo?: string + editNavigateTo?: string } export const getActuaryFirm = (actuaryContact: ActuaryContact): string => { @@ -32,13 +32,16 @@ export const getActuaryFirm = (actuaryContact: ActuaryContact): string => { export const ContactsSummarySection = ({ submission, - navigateTo, + editNavigateTo, }: ContactsSummarySectionProps): React.ReactElement => { const isSubmitted = submission.status === 'SUBMITTED' return (
- + diff --git a/services/app-web/src/components/SubmissionSummarySection/ContractDetailsSummarySection/ContractDetailsSummarySection.stories.tsx b/services/app-web/src/components/SubmissionSummarySection/ContractDetailsSummarySection/ContractDetailsSummarySection.stories.tsx index 7314d2ef90..4662fd5ecb 100644 --- a/services/app-web/src/components/SubmissionSummarySection/ContractDetailsSummarySection/ContractDetailsSummarySection.stories.tsx +++ b/services/app-web/src/components/SubmissionSummarySection/ContractDetailsSummarySection/ContractDetailsSummarySection.stories.tsx @@ -24,7 +24,7 @@ WithAction.decorators = [(Story) => ProvidersDecorator(Story, {})] WithAction.args = { submission: mockContractAndRatesDraft(), - navigateTo: 'contract-details', + editNavigateTo: 'contract-details', } export const WithoutAction = Template.bind({}) diff --git a/services/app-web/src/components/SubmissionSummarySection/ContractDetailsSummarySection/ContractDetailsSummarySection.test.tsx b/services/app-web/src/components/SubmissionSummarySection/ContractDetailsSummarySection/ContractDetailsSummarySection.test.tsx index d74bebca49..3d223b520e 100644 --- a/services/app-web/src/components/SubmissionSummarySection/ContractDetailsSummarySection/ContractDetailsSummarySection.test.tsx +++ b/services/app-web/src/components/SubmissionSummarySection/ContractDetailsSummarySection/ContractDetailsSummarySection.test.tsx @@ -36,7 +36,7 @@ describe('ContractDetailsSummarySection', () => { , { @@ -105,7 +105,7 @@ describe('ContractDetailsSummarySection', () => { ) @@ -616,7 +616,7 @@ describe('ContractDetailsSummarySection', () => { }} submission={contractWithUnansweredProvisions} submissionName="MN-PMAP-0001" - navigateTo="contract-details" + editNavigateTo="contract-details" />, { apolloProvider: { @@ -667,7 +667,7 @@ describe('ContractDetailsSummarySection', () => { }} submission={contractWithUnansweredProvisions} submissionName="MN-PMAP-0001" - navigateTo="contract-details" + editNavigateTo="contract-details" />, { apolloProvider: { @@ -772,7 +772,7 @@ describe('ContractDetailsSummarySection', () => { }} submission={contractWithAllUnmodifiedProvisions} submissionName="MN-PMAP-0001" - navigateTo="contract-details" + editNavigateTo="contract-details" />, { apolloProvider: { diff --git a/services/app-web/src/components/SubmissionSummarySection/ContractDetailsSummarySection/ContractDetailsSummarySection.tsx b/services/app-web/src/components/SubmissionSummarySection/ContractDetailsSummarySection/ContractDetailsSummarySection.tsx index 6ac86066d8..b360938a97 100644 --- a/services/app-web/src/components/SubmissionSummarySection/ContractDetailsSummarySection/ContractDetailsSummarySection.tsx +++ b/services/app-web/src/components/SubmissionSummarySection/ContractDetailsSummarySection/ContractDetailsSummarySection.tsx @@ -37,7 +37,7 @@ import { InlineDocumentWarning } from '../../DocumentWarning' export type ContractDetailsSummarySectionProps = { submission: HealthPlanFormDataType - navigateTo?: string + editNavigateTo?: string documentDateLookupTable: DocumentDateLookupTableType isCMSUser?: boolean submissionName: string @@ -60,7 +60,7 @@ function renderDownloadButton(zippedFilesURL: string | undefined | Error) { export const ContractDetailsSummarySection = ({ submission, - navigateTo, // this is the edit link for the section. When this prop exists, summary section is loaded in edit mode + editNavigateTo, // this is the edit link for the section. When this prop exists, summary section is loaded in edit mode documentDateLookupTable, submissionName, onDocumentError, @@ -75,7 +75,7 @@ export const ContractDetailsSummarySection = ({ const contractSupportingDocuments = submission.documents.filter((doc) => doc.documentCategories.includes('CONTRACT_RELATED' as const) ) - const isEditing = !isSubmitted(submission) && navigateTo !== undefined + const isEditing = !isSubmitted(submission) && editNavigateTo !== undefined const applicableFederalAuthorities = isCHIPOnly(submission) ? submission.federalAuthorities.filter((authority) => federalAuthorityKeysForCHIP.includes( @@ -134,7 +134,10 @@ export const ContractDetailsSummarySection = ({ return (
- + {isSubmitted(submission) && !isPreviousSubmission && renderDownloadButton(zippedFilesURL)} diff --git a/services/app-web/src/components/SubmissionSummarySection/RateDetailsSummarySection/RateDetailsSummarySection.stories.tsx b/services/app-web/src/components/SubmissionSummarySection/RateDetailsSummarySection/RateDetailsSummarySection.stories.tsx index 8fa58f48d7..ee1b56eb26 100644 --- a/services/app-web/src/components/SubmissionSummarySection/RateDetailsSummarySection/RateDetailsSummarySection.stories.tsx +++ b/services/app-web/src/components/SubmissionSummarySection/RateDetailsSummarySection/RateDetailsSummarySection.stories.tsx @@ -24,7 +24,7 @@ WithAction.decorators = [(Story) => ProvidersDecorator(Story, {})] WithAction.args = { submission: mockContractAndRatesDraft(), - navigateTo: 'contract-details', + editNavigateTo: 'contract-details', submissionName: 'StoryBook', statePrograms: [], } diff --git a/services/app-web/src/components/SubmissionSummarySection/RateDetailsSummarySection/RateDetailsSummarySection.test.tsx b/services/app-web/src/components/SubmissionSummarySection/RateDetailsSummarySection/RateDetailsSummarySection.test.tsx index a0474913b7..e21237ab13 100644 --- a/services/app-web/src/components/SubmissionSummarySection/RateDetailsSummarySection/RateDetailsSummarySection.test.tsx +++ b/services/app-web/src/components/SubmissionSummarySection/RateDetailsSummarySection/RateDetailsSummarySection.test.tsx @@ -97,7 +97,7 @@ describe('RateDetailsSummarySection', () => { , @@ -157,7 +157,7 @@ describe('RateDetailsSummarySection', () => { , @@ -203,7 +203,7 @@ describe('RateDetailsSummarySection', () => { previousSubmissionDate: '01/01/01', }} submission={submission} - navigateTo="rate-details" + editNavigateTo="rate-details" submissionName="MN-MSHO-0003" statePrograms={statePrograms} />, @@ -238,7 +238,7 @@ describe('RateDetailsSummarySection', () => { , @@ -334,7 +334,7 @@ describe('RateDetailsSummarySection', () => { , @@ -432,7 +432,7 @@ describe('RateDetailsSummarySection', () => { , @@ -459,7 +459,7 @@ describe('RateDetailsSummarySection', () => { , @@ -489,7 +489,7 @@ describe('RateDetailsSummarySection', () => { , @@ -516,7 +516,7 @@ describe('RateDetailsSummarySection', () => { , @@ -539,7 +539,7 @@ describe('RateDetailsSummarySection', () => { , @@ -562,7 +562,7 @@ describe('RateDetailsSummarySection', () => { , @@ -585,7 +585,7 @@ describe('RateDetailsSummarySection', () => { , @@ -618,7 +618,7 @@ describe('RateDetailsSummarySection', () => { , @@ -697,7 +697,7 @@ describe('RateDetailsSummarySection', () => { , @@ -801,7 +801,7 @@ describe('RateDetailsSummarySection', () => { , @@ -871,7 +871,7 @@ describe('RateDetailsSummarySection', () => { , @@ -897,7 +897,7 @@ describe('RateDetailsSummarySection', () => { , diff --git a/services/app-web/src/components/SubmissionSummarySection/RateDetailsSummarySection/RateDetailsSummarySection.tsx b/services/app-web/src/components/SubmissionSummarySection/RateDetailsSummarySection/RateDetailsSummarySection.tsx index 4a9ccbd4a4..7fe0bd07de 100644 --- a/services/app-web/src/components/SubmissionSummarySection/RateDetailsSummarySection/RateDetailsSummarySection.tsx +++ b/services/app-web/src/components/SubmissionSummarySection/RateDetailsSummarySection/RateDetailsSummarySection.tsx @@ -38,7 +38,7 @@ type PackageNamesLookupType = { export type RateDetailsSummarySectionProps = { submission: HealthPlanFormDataType - navigateTo?: string + editNavigateTo?: string documentDateLookupTable: DocumentDateLookupTableType isCMSUser?: boolean submissionName: string @@ -64,7 +64,7 @@ export function renderDownloadButton( export const RateDetailsSummarySection = ({ submission, - navigateTo, + editNavigateTo, documentDateLookupTable, isCMSUser, submissionName, @@ -82,7 +82,7 @@ export const RateDetailsSummarySection = ({ React.useState(null) const isSubmitted = submission.status === 'SUBMITTED' - const isEditing = !isSubmitted && navigateTo !== undefined + const isEditing = !isSubmitted && editNavigateTo !== undefined const isPreviousSubmission = usePreviousSubmission() const submissionLevelRateSupportingDocuments = submission.documents.filter( (doc) => doc.documentCategories.includes('RATES_RELATED') @@ -260,7 +260,10 @@ export const RateDetailsSummarySection = ({ return (
- + {isSubmitted && !isPreviousSubmission && renderDownloadButton(zippedFilesURL)} diff --git a/services/app-web/src/components/SubmissionSummarySection/SubmissionTypeSummarySection/SubmissionTypeSummarySection.stories.tsx b/services/app-web/src/components/SubmissionSummarySection/SubmissionTypeSummarySection/SubmissionTypeSummarySection.stories.tsx index b6e3395e1e..9a7dc78015 100644 --- a/services/app-web/src/components/SubmissionSummarySection/SubmissionTypeSummarySection/SubmissionTypeSummarySection.stories.tsx +++ b/services/app-web/src/components/SubmissionSummarySection/SubmissionTypeSummarySection/SubmissionTypeSummarySection.stories.tsx @@ -26,7 +26,7 @@ WithAction.args = { submission: mockContractAndRatesDraft(), //TODO: Use better mock program data statePrograms: [], - navigateTo: 'submission-type', + editNavigateTo: 'submission-type', } export const WithoutAction = Template.bind({}) diff --git a/services/app-web/src/components/SubmissionSummarySection/SubmissionTypeSummarySection/SubmissionTypeSummarySection.test.tsx b/services/app-web/src/components/SubmissionSummarySection/SubmissionTypeSummarySection/SubmissionTypeSummarySection.test.tsx index 82031b63c1..252c87e7e1 100644 --- a/services/app-web/src/components/SubmissionSummarySection/SubmissionTypeSummarySection/SubmissionTypeSummarySection.test.tsx +++ b/services/app-web/src/components/SubmissionSummarySection/SubmissionTypeSummarySection/SubmissionTypeSummarySection.test.tsx @@ -21,7 +21,7 @@ describe('SubmissionTypeSummarySection', () => { ) @@ -70,7 +70,7 @@ describe('SubmissionTypeSummarySection', () => { ) @@ -109,7 +109,7 @@ describe('SubmissionTypeSummarySection', () => { } as unknown as HealthPlanFormDataType } // allow type coercion to be able to test edge case statePrograms={statePrograms} - navigateTo="submission-type" + editNavigateTo="submission-type" submissionName="MN-PMAP-0001" /> ) @@ -138,7 +138,7 @@ describe('SubmissionTypeSummarySection', () => { } as unknown as HealthPlanFormDataType } // allow type coercion to be able to test edge case statePrograms={statePrograms} - navigateTo="submission-type" + editNavigateTo="submission-type" submissionName="MN-PMAP-0001" /> ) @@ -165,7 +165,7 @@ describe('SubmissionTypeSummarySection', () => { ) @@ -187,7 +187,7 @@ describe('SubmissionTypeSummarySection', () => { ) @@ -200,7 +200,7 @@ describe('SubmissionTypeSummarySection', () => { Test button} submissionName="MN-PMAP-0001" /> diff --git a/services/app-web/src/components/SubmissionSummarySection/SubmissionTypeSummarySection/SubmissionTypeSummarySection.tsx b/services/app-web/src/components/SubmissionSummarySection/SubmissionTypeSummarySection/SubmissionTypeSummarySection.tsx index 383b6d3235..b2c1db68e5 100644 --- a/services/app-web/src/components/SubmissionSummarySection/SubmissionTypeSummarySection/SubmissionTypeSummarySection.tsx +++ b/services/app-web/src/components/SubmissionSummarySection/SubmissionTypeSummarySection/SubmissionTypeSummarySection.tsx @@ -17,7 +17,7 @@ import styles from '../SubmissionSummarySection.module.scss' export type SubmissionTypeSummarySectionProps = { submission: HealthPlanFormDataType statePrograms: Program[] - navigateTo?: string + editNavigateTo?: string headerChildComponent?: React.ReactElement subHeaderComponent?: React.ReactElement initiallySubmittedAt?: Date @@ -27,7 +27,7 @@ export type SubmissionTypeSummarySectionProps = { export const SubmissionTypeSummarySection = ({ submission, statePrograms, - navigateTo, + editNavigateTo, subHeaderComponent, headerChildComponent, initiallySubmittedAt, @@ -44,7 +44,7 @@ export const SubmissionTypeSummarySection = ({ {headerChildComponent && headerChildComponent} diff --git a/services/app-web/src/components/SubmissionSummarySection/SupportingDocumentsSummarySection/SupportingDocumentsSummarySection.test.tsx b/services/app-web/src/components/SubmissionSummarySection/SupportingDocumentsSummarySection/SupportingDocumentsSummarySection.test.tsx index a3847971a8..7a0825ae26 100644 --- a/services/app-web/src/components/SubmissionSummarySection/SupportingDocumentsSummarySection/SupportingDocumentsSummarySection.test.tsx +++ b/services/app-web/src/components/SubmissionSummarySection/SupportingDocumentsSummarySection/SupportingDocumentsSummarySection.test.tsx @@ -39,7 +39,7 @@ describe('SupportingDocumentsSummarySection', () => { renderWithProviders( , { apolloProvider: { diff --git a/services/app-web/src/components/SubmissionSummarySection/SupportingDocumentsSummarySection/SupportingDocumentsSummarySection.tsx b/services/app-web/src/components/SubmissionSummarySection/SupportingDocumentsSummarySection/SupportingDocumentsSummarySection.tsx index 286786a5bd..e1d7b6ce14 100644 --- a/services/app-web/src/components/SubmissionSummarySection/SupportingDocumentsSummarySection/SupportingDocumentsSummarySection.tsx +++ b/services/app-web/src/components/SubmissionSummarySection/SupportingDocumentsSummarySection/SupportingDocumentsSummarySection.tsx @@ -16,7 +16,7 @@ type DocumentWithLink = { url: string | null } & SubmissionDocument export type SupportingDocumentsSummarySectionProps = { submission: HealthPlanFormDataType - navigateTo?: string + editNavigateTo?: string submissionName?: string onDocumentError?: (error: true) => void } @@ -45,7 +45,7 @@ function renderDownloadButton(zippedFilesURL: string | undefined | Error) { // since supporting documents are now displayed in the rate and contract sections export const SupportingDocumentsSummarySection = ({ submission, - navigateTo, + editNavigateTo, submissionName, onDocumentError, }: SupportingDocumentsSummarySectionProps): React.ReactElement | null => { @@ -139,7 +139,7 @@ export const SupportingDocumentsSummarySection = ({
{isSubmitted && renderDownloadButton(zippedFilesURL)} diff --git a/services/app-web/src/constants/routes.ts b/services/app-web/src/constants/routes.ts index b92105e250..09e5e8c481 100644 --- a/services/app-web/src/constants/routes.ts +++ b/services/app-web/src/constants/routes.ts @@ -10,7 +10,6 @@ const ROUTES = [ 'DASHBOARD_RATES', 'GRAPHQL_EXPLORER', 'HELP', - 'REPORTS', 'SETTINGS', 'RATES_SUMMARY', 'SUBMISSIONS', @@ -46,7 +45,6 @@ const RoutesRecord: Record = { DASHBOARD_RATES: '/dashboard/rate-reviews', GRAPHQL_EXPLORER: '/dev/graphql-explorer', HELP: '/help', - REPORTS: '/reports', SETTINGS: '/settings', RATES_SUMMARY: 'rates/:id', SUBMISSIONS: '/submissions', @@ -119,7 +117,6 @@ const PageTitlesRecord: Record = { AUTH: 'Login', GRAPHQL_EXPLORER: 'GraphQL explorer', HELP: 'Help', - REPORTS: 'Reports', SETTINGS: 'Settings', DASHBOARD: 'Dashboard', DASHBOARD_RATES: 'Rate Review Dashboard', diff --git a/services/app-web/src/constants/tealium.ts b/services/app-web/src/constants/tealium.ts index ce0cb008a6..02dbad6468 100644 --- a/services/app-web/src/constants/tealium.ts +++ b/services/app-web/src/constants/tealium.ts @@ -36,7 +36,6 @@ const CONTENT_TYPE_BY_ROUTE: Record = { DASHBOARD_RATES: 'table', HELP: 'glossary', GRAPHQL_EXPLORER: 'dev', - REPORTS: 'table', SETTINGS: 'table', RATES_SUMMARY: 'summary', SUBMISSIONS: 'form', diff --git a/services/app-web/src/gqlHelpers/mutationWrappersForUserFriendlyErrors.ts b/services/app-web/src/gqlHelpers/mutationWrappersForUserFriendlyErrors.ts index 7cf27c7f4a..aae2163742 100644 --- a/services/app-web/src/gqlHelpers/mutationWrappersForUserFriendlyErrors.ts +++ b/services/app-web/src/gqlHelpers/mutationWrappersForUserFriendlyErrors.ts @@ -168,7 +168,7 @@ export const createQuestionWrapper = async ( query: FetchHealthPlanPackageWithQuestionsDocument, variables: { input: { - pkgID: newQuestion.pkgID, + pkgID: newQuestion.contractID, }, }, } diff --git a/services/app-web/src/gqlHelpers/useIndexQuestionsQueryWrapper.ts b/services/app-web/src/gqlHelpers/useIndexQuestionsQueryWrapper.ts index 6a4dd2e7a6..b4dea6219d 100644 --- a/services/app-web/src/gqlHelpers/useIndexQuestionsQueryWrapper.ts +++ b/services/app-web/src/gqlHelpers/useIndexQuestionsQueryWrapper.ts @@ -10,7 +10,7 @@ function useIndexQuestionsQueryWrapper(id: string): WrappedFetchResultType { useIndexQuestionsQuery({ variables: { input: { - pkgID: id, + contractID: id, }, }, }) diff --git a/services/app-web/src/pages/App/AppRoutes.tsx b/services/app-web/src/pages/App/AppRoutes.tsx index 6439d075b2..390ca722c9 100644 --- a/services/app-web/src/pages/App/AppRoutes.tsx +++ b/services/app-web/src/pages/App/AppRoutes.tsx @@ -26,7 +26,6 @@ import { MccrsId } from '../MccrsId/MccrsId' import { NewStateSubmissionForm, StateSubmissionForm } from '../StateSubmission' import { SubmissionSummary } from '../SubmissionSummary' import { SubmissionRevisionSummary } from '../SubmissionRevisionSummary' -import { Reports } from '../../components/Reports/Reports' import { useScrollToPageTop } from '../../hooks/useScrollToPageTop' import { featureFlags } from '../../common-code/featureFlags' import { useLocalStorage } from '../../hooks/useLocalStorage' @@ -229,7 +228,6 @@ const CMSUserRoutes = ({ element={} /> )} - } /> } /> {UniversalRoutes} } /> diff --git a/services/app-web/src/pages/CMSDashboard/RateReviewsDashboard/RateReviewsDashboard.test.tsx b/services/app-web/src/pages/CMSDashboard/RateReviewsDashboard/RateReviewsDashboard.test.tsx index f4ca865618..9a8e5bc784 100644 --- a/services/app-web/src/pages/CMSDashboard/RateReviewsDashboard/RateReviewsDashboard.test.tsx +++ b/services/app-web/src/pages/CMSDashboard/RateReviewsDashboard/RateReviewsDashboard.test.tsx @@ -33,7 +33,9 @@ describe('RateReviewsDashboard', () => { }) // Expect 3 rates to be displayed - expect(screen.getByText('Displaying 3 of 3 rates')).toBeInTheDocument() + expect( + screen.getByText('Displaying 3 of 3 rate reviews') + ).toBeInTheDocument() }) it('renders error failed request page', async () => { diff --git a/services/app-web/src/pages/CMSDashboard/RateReviewsDashboard/RateReviewsTable.test.tsx b/services/app-web/src/pages/CMSDashboard/RateReviewsDashboard/RateReviewsTable.test.tsx index 6f2a0cc04e..d794024892 100644 --- a/services/app-web/src/pages/CMSDashboard/RateReviewsDashboard/RateReviewsTable.test.tsx +++ b/services/app-web/src/pages/CMSDashboard/RateReviewsDashboard/RateReviewsTable.test.tsx @@ -74,7 +74,7 @@ describe('RateReviewsTable', () => { await waitFor(() => { expect( - screen.queryByText('Displaying 3 of 3 rates') + screen.queryByText('Displaying 3 of 3 rate reviews') ).toBeInTheDocument() }) // expect filter accordion to be present @@ -183,6 +183,8 @@ describe('RateReviewsTable', () => { const rows = await screen.findAllByRole('row') expect(rows).toHaveLength(2) expect(rows[1]).toHaveTextContent('Ohio') // row[0] is the header - expect(screen.getByText('Displaying 1 of 3 rates')).toBeInTheDocument() + expect( + screen.getByText('Displaying 1 of 3 rate reviews') + ).toBeInTheDocument() }) }) diff --git a/services/app-web/src/pages/CMSDashboard/RateReviewsDashboard/RateReviewsTable.tsx b/services/app-web/src/pages/CMSDashboard/RateReviewsDashboard/RateReviewsTable.tsx index f63c375911..6364ac269e 100644 --- a/services/app-web/src/pages/CMSDashboard/RateReviewsDashboard/RateReviewsTable.tsx +++ b/services/app-web/src/pages/CMSDashboard/RateReviewsDashboard/RateReviewsTable.tsx @@ -230,7 +230,7 @@ export const RateReviewsTable = ({ }), columnHelper.accessor('rateType', { id: 'rateType', - header: 'Rate type', + header: 'Rate Type', cell: (info) => {info.getValue()}, meta: { dataTestID: 'rate-type', @@ -313,7 +313,7 @@ export const RateReviewsTable = ({ const submissionCount = !showFilters ? `${tableData.length} ${pluralize('rate', tableData.length)}` : `Displaying ${filteredRows.length} of ${tableData.length} ${pluralize( - 'rate', + 'rate review', tableData.length )}` diff --git a/services/app-web/src/pages/QuestionResponse/QATable/QATable.test.tsx b/services/app-web/src/pages/QuestionResponse/QATable/QATable.test.tsx index 0d279d3ddd..fc1d6025b9 100644 --- a/services/app-web/src/pages/QuestionResponse/QATable/QATable.test.tsx +++ b/services/app-web/src/pages/QuestionResponse/QATable/QATable.test.tsx @@ -14,7 +14,7 @@ const cmsUser = mockValidCMSUser() as CmsUser const testQuestionData: QuestionData = { id: 'question-1-id', - pkgID: '15', + contractID: '15', createdAt: new Date('2022-12-23T00:00:00.000Z'), addedBy: cmsUser, documents: [ @@ -133,7 +133,7 @@ it('renders question correctly as a state user', async () => { it('renders multiple documents', async () => { const testQuestionDocLinks: QuestionData = { id: 'question-1-id', - pkgID: '15', + contractID: '15', createdAt: new Date('2022-12-23T00:00:00.000Z'), addedBy: cmsUser, documents: [ diff --git a/services/app-web/src/pages/QuestionResponse/QATable/QATable.tsx b/services/app-web/src/pages/QuestionResponse/QATable/QATable.tsx index 365bc62fa1..000b887340 100644 --- a/services/app-web/src/pages/QuestionResponse/QATable/QATable.tsx +++ b/services/app-web/src/pages/QuestionResponse/QATable/QATable.tsx @@ -1,5 +1,5 @@ import styles from './QATable.module.scss' -import React, { useState } from 'react' +import { useState } from 'react' import { CmsUser, Document, @@ -20,7 +20,7 @@ type QuestionDocumentWithLink = { export type QuestionData = { id: string - pkgID: string + contractID: string createdAt: Date addedBy: CmsUser documents: Document[] diff --git a/services/app-web/src/pages/QuestionResponse/UploadQuestions/UploadQuestions.test.tsx b/services/app-web/src/pages/QuestionResponse/UploadQuestions/UploadQuestions.test.tsx index 89183b5556..ad388fe0b5 100644 --- a/services/app-web/src/pages/QuestionResponse/UploadQuestions/UploadQuestions.test.tsx +++ b/services/app-web/src/pages/QuestionResponse/UploadQuestions/UploadQuestions.test.tsx @@ -19,9 +19,11 @@ import { } from '../../../testHelpers/apolloMocks' import { createQuestionNetworkFailure, + createQuestionSuccess, fetchStateHealthPlanPackageWithQuestionsMockSuccess, } from '../../../testHelpers/apolloMocks/questionResponseGQLMock' import { SubmissionSideNav } from '../../SubmissionSideNav' +import { Location } from 'react-router-dom' describe('UploadQuestions', () => { beforeEach(() => { @@ -124,8 +126,77 @@ describe('UploadQuestions', () => { }) }) + it('allows submission with an uploaded doc', async () => { + let testLocation: Location + const { user } = renderWithProviders( + + }> + } + /> + + , + { + apolloProvider: { + mocks: [ + fetchCurrentUserMock({ + user: mockValidCMSUser(), + statusCode: 200, + }), + fetchStateHealthPlanPackageWithQuestionsMockSuccess({ + id: '15', + }), + createQuestionSuccess({ + contractID: '15', + documents: [ + { + name: 'testFile.doc', + s3URL: 's3://fake-bucket/fakeS3Key0-testFile.doc/testFile.doc', + }, + ], + }), + fetchStateHealthPlanPackageWithQuestionsMockSuccess({ + id: '15', + }), + ], + }, + routerProvider: { + route: `/submissions/15/question-and-answers/dmco/upload-questions`, + }, + location: (location) => (testLocation = location), + } + ) + + await screen.findByRole('heading', { + name: /Add questions/, + level: 2, + }) + const input = screen.getByLabelText('Upload questions') + expect(input).toBeInTheDocument() + expect(input).toHaveAttribute('accept', ACCEPTED_SUBMISSION_FILE_TYPES) + await userEvent.upload(input, [TEST_DOC_FILE]) + await waitFor(() => { + expect(screen.getByText(TEST_DOC_FILE.name)).toBeInTheDocument() + }) + + // OK, this document has been uploaded with an S3Key of the current timestamp + // is that serving us at all? gives us unique keys which is good. + // makes it pretty difficult to create the correct mock, since everything needs to match exactly. + + await user.click( + await screen.findByRole('button', { name: /Add questions/ }) + ) + + await waitFor(() => + expect(testLocation.pathname).toBe( + `/submissions/15/question-and-answers` + ) + ) + }) + it('displays form validation error if attempting to add question with zero files', async () => { - renderWithProviders( + const { user } = renderWithProviders( }> { }) expect(continueButton).not.toHaveAttribute('aria-disabled') - await continueButton.click() + await user.click(continueButton) await waitFor(() => { expect( @@ -170,7 +241,7 @@ describe('UploadQuestions', () => { }) it('displays file upload alert if attempting to add question with all invalid files', async () => { - renderWithProviders( + const { user } = renderWithProviders( }> { }) const targetEl = screen.getByTestId('file-input-droptarget') - await dragAndDrop(targetEl, [TEST_PNG_FILE]) + dragAndDrop(targetEl, [TEST_PNG_FILE]) expect( await screen.findByText('This is not a valid file type.') ).toBeInTheDocument() expect(continueButton).not.toHaveAttribute('aria-disabled') - await continueButton.click() + await user.click(continueButton) expect( await screen.findAllByText('You must upload at least one document') @@ -284,7 +355,7 @@ describe('UploadQuestions', () => { }) it('displays api error if createQuestion fails', async () => { - renderWithProviders( + const { user } = renderWithProviders( }> { fetchStateHealthPlanPackageWithQuestionsMockSuccess({ id: '15', }), - createQuestionNetworkFailure(), + createQuestionNetworkFailure({ + contractID: '15', + documents: [ + { + name: 'testFile.doc', + s3URL: 's3://fake-bucket/fakeS3Key0-testFile.doc/testFile.doc', + }, + ], + }), ], }, } @@ -322,7 +401,7 @@ describe('UploadQuestions', () => { await screen.findByText(TEST_DOC_FILE.name) await screen.findByText(/1 complete/) - createQuestionButton.click() + await user.click(createQuestionButton) await screen.findByTestId('error-alert') expect( diff --git a/services/app-web/src/pages/QuestionResponse/UploadQuestions/UploadQuestions.tsx b/services/app-web/src/pages/QuestionResponse/UploadQuestions/UploadQuestions.tsx index 17caf1e62f..73ec54dd9e 100644 --- a/services/app-web/src/pages/QuestionResponse/UploadQuestions/UploadQuestions.tsx +++ b/services/app-web/src/pages/QuestionResponse/UploadQuestions/UploadQuestions.tsx @@ -80,7 +80,7 @@ export const UploadQuestions = () => { }) const input: CreateQuestionInput = { - pkgID: id as string, + contractID: id as string, documents: questionDocs, } diff --git a/services/app-web/src/pages/StateSubmission/RateDetails/RateDetails.test.tsx b/services/app-web/src/pages/StateSubmission/RateDetails/RateDetails.test.tsx index 7d40d8eb4e..2d1e9ca4fe 100644 --- a/services/app-web/src/pages/StateSubmission/RateDetails/RateDetails.test.tsx +++ b/services/app-web/src/pages/StateSubmission/RateDetails/RateDetails.test.tsx @@ -111,7 +111,7 @@ describe('RateDetails', () => { ).not.toBeInTheDocument() const requiredLabels = await screen.findAllByText('Required') expect(requiredLabels).toHaveLength(6) - const optionalLabels = await screen.queryAllByText('Optional') + const optionalLabels = screen.queryAllByText('Optional') expect(optionalLabels).toHaveLength(1) }) diff --git a/services/app-web/src/pages/StateSubmission/ReviewSubmit/ReviewSubmit.tsx b/services/app-web/src/pages/StateSubmission/ReviewSubmit/ReviewSubmit.tsx index 1b2efef19a..615708ac98 100644 --- a/services/app-web/src/pages/StateSubmission/ReviewSubmit/ReviewSubmit.tsx +++ b/services/app-web/src/pages/StateSubmission/ReviewSubmit/ReviewSubmit.tsx @@ -47,13 +47,13 @@ export const ReviewSubmit = ({ @@ -61,7 +61,7 @@ export const ReviewSubmit = ({ {isContractActionAndRateCertification && ( ): MockedResponse => { const defaultQuestionInput: CreateQuestionInput = { - dueDate: new Date('11-11-2100'), - pkgID: '123-abc', + // dueDate: new Date('11-11-2100'), + contractID: '123-abc', documents: [ { name: 'Test document', @@ -47,7 +46,7 @@ const createQuestionSuccess = ( createQuestion: { question: { id: 'test123', - pkgID: testInput.pkgID, + contractID: testInput.contractID, createdAt: new Date(), addedBy: mockValidCMSUser(), division: 'DMCO', @@ -60,15 +59,18 @@ const createQuestionSuccess = ( } const createQuestionNetworkFailure = ( - question?: QuestionType | Partial + input: CreateQuestionInput ): MockedResponse => { return { - request: { query: CreateQuestionDocument }, + request: { + query: CreateQuestionDocument, + variables: { input }, + }, error: new Error('A network error occurred'), } } const createQuestionResponseNetworkFailure = ( - question?: QuestionResponseType | Partial + _question?: QuestionResponseType | Partial ): MockedResponse => { return { request: { query: CreateQuestionResponseDocument }, diff --git a/services/app-web/src/testHelpers/jestHelpers.tsx b/services/app-web/src/testHelpers/jestHelpers.tsx index 5e7b2ca483..cd8b68ed16 100644 --- a/services/app-web/src/testHelpers/jestHelpers.tsx +++ b/services/app-web/src/testHelpers/jestHelpers.tsx @@ -47,8 +47,9 @@ const renderWithProviders = ( const { route } = routerProvider const s3Client: S3ClientT = s3Provider ?? testS3Client() + const user = userEvent.setup() - return render( + const renderResult = render( @@ -60,6 +61,10 @@ const renderWithProviders = ( ) + return { + user, + ...renderResult, + } } const WithLocation = ({ diff --git a/services/app-web/src/testHelpers/s3Helpers.ts b/services/app-web/src/testHelpers/s3Helpers.ts index 71e5a934bc..5e80c117b6 100644 --- a/services/app-web/src/testHelpers/s3Helpers.ts +++ b/services/app-web/src/testHelpers/s3Helpers.ts @@ -2,9 +2,11 @@ import { S3ClientT } from '../s3' import { parseKey } from '../common-code/s3URLEncoding' export const testS3Client: () => S3ClientT = () => { + let fakeKeyID = 0 + return { uploadFile: async (file: File): Promise => { - return `${Date.now()}-${file.name}` + return `fakeS3Key${fakeKeyID++}-${file.name}` }, deleteFile: async (filename: string): Promise => { return diff --git a/services/cypress/integration/cmsWorkflow/generateReport.spec.ts b/services/cypress/integration/cmsWorkflow/generateReport.spec.ts deleted file mode 100644 index 9d30392205..0000000000 --- a/services/cypress/integration/cmsWorkflow/generateReport.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -describe('Generate reports', () => { - beforeEach(() => { - cy.stubFeatureFlags() - cy.interceptGraphQL() - }) - it('CMS user sees option to create report', () => { - cy.logInAsCMSUser() - cy.visit('/reports') - cy.findByText('Download reports').should('exist') - }) - it('State user sees a 404 on the reports page', () => { - cy.logInAsStateUser() - cy.visit('/reports') - cy.findByText('404 / Page not found').should('exist') - }) -}) diff --git a/services/cypress/integration/stateWorkflow/questionResponse/questionResponse.spec.ts b/services/cypress/integration/stateWorkflow/questionResponse/questionResponse.spec.ts index c7fe07b6f3..dfedff3bb6 100644 --- a/services/cypress/integration/stateWorkflow/questionResponse/questionResponse.spec.ts +++ b/services/cypress/integration/stateWorkflow/questionResponse/questionResponse.spec.ts @@ -5,9 +5,10 @@ describe('Q&A', () => { cy.interceptGraphQL() }) - it.skip('can add questions and responses', () => { + it('can add questions and responses', () => { cy.interceptFeatureFlags({ 'cms-questions': true, + 'rates-db-refactor': true }) // Assign Division to CMS user zuko diff --git a/services/cypress/support/apiCommands.ts b/services/cypress/support/apiCommands.ts index e19fa65f83..901ca24d7f 100644 --- a/services/cypress/support/apiCommands.ts +++ b/services/cypress/support/apiCommands.ts @@ -23,6 +23,7 @@ import { CMSUserType, } from '../utils/apollo-test-utils' import { ApolloClient, DocumentNode, NormalizedCacheObject } from '@apollo/client' +import {UnlockedHealthPlanFormDataType} from 'app-web/src/common-code/healthPlanFormDataType'; const createAndSubmitContractOnlyPackage = async ( apolloClient: ApolloClient @@ -47,7 +48,7 @@ const createAndSubmitContractOnlyPackage = async ( ...contractOnlyData(), } - const formDataProto = domainToBase64(fullFormData) + const formDataProto = domainToBase64(fullFormData as UnlockedHealthPlanFormDataType) await apolloClient.mutate({ mutation: UpdateHealthPlanFormDataDocument, @@ -94,7 +95,7 @@ const createAndSubmitContractWithRates = async ( ...contractAndRatesData(), } - const formDataProto = domainToBase64(fullFormData1) + const formDataProto = domainToBase64(fullFormData1 as UnlockedHealthPlanFormDataType) await apolloClient.mutate({ mutation: UpdateHealthPlanFormDataDocument, diff --git a/yarn.lock b/yarn.lock index 567805f957..a63d69d9cd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1719,47 +1719,49 @@ tslib "^2.5.0" "@aws-sdk/client-ssm@^3.226.0": - version "3.427.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-ssm/-/client-ssm-3.427.0.tgz#09b4990cf3d5d633c549b8f0cff3039c27c150c4" - integrity sha512-wKEO5olofXue2EFv5tMMZkDGWeapvdX7aaYpMjTz3KV2LXSl/KApqcv4G5jMNovbaFkVpBCbztBVW6S8VzHu/w== + version "3.441.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-ssm/-/client-ssm-3.441.0.tgz#70e2c3d472984b35e0e80a267bddfd88e1000c98" + integrity sha512-6HVB6a9A3BiXsJe2HDHD7cYw6BfgDcHZ9vdIXYWkPTA9hp0UWZ4FAv9D2FviRCw9ixyW9Dx633NFiodsAmEiAA== dependencies: "@aws-crypto/sha256-browser" "3.0.0" "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.427.0" - "@aws-sdk/credential-provider-node" "3.427.0" - "@aws-sdk/middleware-host-header" "3.425.0" - "@aws-sdk/middleware-logger" "3.425.0" - "@aws-sdk/middleware-recursion-detection" "3.425.0" - "@aws-sdk/middleware-signing" "3.425.0" - "@aws-sdk/middleware-user-agent" "3.427.0" - "@aws-sdk/region-config-resolver" "3.425.0" - "@aws-sdk/types" "3.425.0" - "@aws-sdk/util-endpoints" "3.427.0" - "@aws-sdk/util-user-agent-browser" "3.425.0" - "@aws-sdk/util-user-agent-node" "3.425.0" - "@smithy/config-resolver" "^2.0.11" - "@smithy/fetch-http-handler" "^2.2.1" - "@smithy/hash-node" "^2.0.10" - "@smithy/invalid-dependency" "^2.0.10" - "@smithy/middleware-content-length" "^2.0.12" - "@smithy/middleware-endpoint" "^2.0.10" - "@smithy/middleware-retry" "^2.0.13" - "@smithy/middleware-serde" "^2.0.10" - "@smithy/middleware-stack" "^2.0.4" - "@smithy/node-config-provider" "^2.0.13" - "@smithy/node-http-handler" "^2.1.6" - "@smithy/protocol-http" "^3.0.6" - "@smithy/smithy-client" "^2.1.9" - "@smithy/types" "^2.3.4" - "@smithy/url-parser" "^2.0.10" + "@aws-sdk/client-sts" "3.441.0" + "@aws-sdk/core" "3.441.0" + "@aws-sdk/credential-provider-node" "3.441.0" + "@aws-sdk/middleware-host-header" "3.433.0" + "@aws-sdk/middleware-logger" "3.433.0" + "@aws-sdk/middleware-recursion-detection" "3.433.0" + "@aws-sdk/middleware-signing" "3.433.0" + "@aws-sdk/middleware-user-agent" "3.438.0" + "@aws-sdk/region-config-resolver" "3.433.0" + "@aws-sdk/types" "3.433.0" + "@aws-sdk/util-endpoints" "3.438.0" + "@aws-sdk/util-user-agent-browser" "3.433.0" + "@aws-sdk/util-user-agent-node" "3.437.0" + "@smithy/config-resolver" "^2.0.16" + "@smithy/fetch-http-handler" "^2.2.4" + "@smithy/hash-node" "^2.0.12" + "@smithy/invalid-dependency" "^2.0.12" + "@smithy/middleware-content-length" "^2.0.14" + "@smithy/middleware-endpoint" "^2.1.3" + "@smithy/middleware-retry" "^2.0.18" + "@smithy/middleware-serde" "^2.0.12" + "@smithy/middleware-stack" "^2.0.6" + "@smithy/node-config-provider" "^2.1.3" + "@smithy/node-http-handler" "^2.1.8" + "@smithy/protocol-http" "^3.0.8" + "@smithy/smithy-client" "^2.1.12" + "@smithy/types" "^2.4.0" + "@smithy/url-parser" "^2.0.12" "@smithy/util-base64" "^2.0.0" "@smithy/util-body-length-browser" "^2.0.0" "@smithy/util-body-length-node" "^2.1.0" - "@smithy/util-defaults-mode-browser" "^2.0.13" - "@smithy/util-defaults-mode-node" "^2.0.15" - "@smithy/util-retry" "^2.0.3" + "@smithy/util-defaults-mode-browser" "^2.0.16" + "@smithy/util-defaults-mode-node" "^2.0.21" + "@smithy/util-endpoints" "^1.0.2" + "@smithy/util-retry" "^2.0.5" "@smithy/util-utf8" "^2.0.0" - "@smithy/util-waiter" "^2.0.10" + "@smithy/util-waiter" "^2.0.12" tslib "^2.5.0" uuid "^8.3.2" @@ -2344,6 +2346,48 @@ "@smithy/util-utf8" "^2.0.0" tslib "^2.5.0" +"@aws-sdk/client-sso@3.441.0": + version "3.441.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.441.0.tgz#4e35b42bdaf4f10f60d4d1f697f39d67635b467c" + integrity sha512-gndGymu4cEIN7WWhQ67RO0JMda09EGBlay2L8IKCHBK/65Y34FHUX1tCNbO2qezEzsi6BPW5o2n53Rd9QqpHUw== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.441.0" + "@aws-sdk/middleware-host-header" "3.433.0" + "@aws-sdk/middleware-logger" "3.433.0" + "@aws-sdk/middleware-recursion-detection" "3.433.0" + "@aws-sdk/middleware-user-agent" "3.438.0" + "@aws-sdk/region-config-resolver" "3.433.0" + "@aws-sdk/types" "3.433.0" + "@aws-sdk/util-endpoints" "3.438.0" + "@aws-sdk/util-user-agent-browser" "3.433.0" + "@aws-sdk/util-user-agent-node" "3.437.0" + "@smithy/config-resolver" "^2.0.16" + "@smithy/fetch-http-handler" "^2.2.4" + "@smithy/hash-node" "^2.0.12" + "@smithy/invalid-dependency" "^2.0.12" + "@smithy/middleware-content-length" "^2.0.14" + "@smithy/middleware-endpoint" "^2.1.3" + "@smithy/middleware-retry" "^2.0.18" + "@smithy/middleware-serde" "^2.0.12" + "@smithy/middleware-stack" "^2.0.6" + "@smithy/node-config-provider" "^2.1.3" + "@smithy/node-http-handler" "^2.1.8" + "@smithy/protocol-http" "^3.0.8" + "@smithy/smithy-client" "^2.1.12" + "@smithy/types" "^2.4.0" + "@smithy/url-parser" "^2.0.12" + "@smithy/util-base64" "^2.0.0" + "@smithy/util-body-length-browser" "^2.0.0" + "@smithy/util-body-length-node" "^2.1.0" + "@smithy/util-defaults-mode-browser" "^2.0.16" + "@smithy/util-defaults-mode-node" "^2.0.21" + "@smithy/util-endpoints" "^1.0.2" + "@smithy/util-retry" "^2.0.5" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.5.0" + "@aws-sdk/client-sts@3.186.3": version "3.186.3" resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.186.3.tgz#1c12355cb9d3cadc64ab74c91c3d57515680dfbd" @@ -2730,6 +2774,52 @@ fast-xml-parser "4.2.5" tslib "^2.5.0" +"@aws-sdk/client-sts@3.441.0": + version "3.441.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.441.0.tgz#9fcc8ece0274e53fc4234e97d7091f1afe2ade43" + integrity sha512-GL0Cw2v7XL1cn0T+Sk5VHLlgBJoUdMsysXsHa1mFdk0l6XHMAAnwXVXiNnjmoDSPrG0psz7dL2AKzPVRXbIUjA== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.441.0" + "@aws-sdk/credential-provider-node" "3.441.0" + "@aws-sdk/middleware-host-header" "3.433.0" + "@aws-sdk/middleware-logger" "3.433.0" + "@aws-sdk/middleware-recursion-detection" "3.433.0" + "@aws-sdk/middleware-sdk-sts" "3.433.0" + "@aws-sdk/middleware-signing" "3.433.0" + "@aws-sdk/middleware-user-agent" "3.438.0" + "@aws-sdk/region-config-resolver" "3.433.0" + "@aws-sdk/types" "3.433.0" + "@aws-sdk/util-endpoints" "3.438.0" + "@aws-sdk/util-user-agent-browser" "3.433.0" + "@aws-sdk/util-user-agent-node" "3.437.0" + "@smithy/config-resolver" "^2.0.16" + "@smithy/fetch-http-handler" "^2.2.4" + "@smithy/hash-node" "^2.0.12" + "@smithy/invalid-dependency" "^2.0.12" + "@smithy/middleware-content-length" "^2.0.14" + "@smithy/middleware-endpoint" "^2.1.3" + "@smithy/middleware-retry" "^2.0.18" + "@smithy/middleware-serde" "^2.0.12" + "@smithy/middleware-stack" "^2.0.6" + "@smithy/node-config-provider" "^2.1.3" + "@smithy/node-http-handler" "^2.1.8" + "@smithy/protocol-http" "^3.0.8" + "@smithy/smithy-client" "^2.1.12" + "@smithy/types" "^2.4.0" + "@smithy/url-parser" "^2.0.12" + "@smithy/util-base64" "^2.0.0" + "@smithy/util-body-length-browser" "^2.0.0" + "@smithy/util-body-length-node" "^2.1.0" + "@smithy/util-defaults-mode-browser" "^2.0.16" + "@smithy/util-defaults-mode-node" "^2.0.21" + "@smithy/util-endpoints" "^1.0.2" + "@smithy/util-retry" "^2.0.5" + "@smithy/util-utf8" "^2.0.0" + fast-xml-parser "4.2.5" + tslib "^2.5.0" + "@aws-sdk/client-textract@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/client-textract/-/client-textract-3.6.1.tgz#b8972f53f0353222b4c052adc784291e602be6aa" @@ -2856,6 +2946,13 @@ "@aws-sdk/types" "3.6.1" tslib "^1.8.0" +"@aws-sdk/core@3.441.0": + version "3.441.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.441.0.tgz#178d060a26e77bac1aee9e954254c2e6b7250fc5" + integrity sha512-gV0eQwR0VnSPUYAbgDkbBtfXbSpZgl/K6UB13DP1IFFjQYbF/BxYwvcQe4jHoPOBifSgjEbl8MfOOeIyI7k9vg== + dependencies: + "@smithy/smithy-client" "^2.1.12" + "@aws-sdk/credential-provider-env@3.186.0": version "3.186.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.186.0.tgz#55dec9c4c29ebbdff4f3bce72de9e98f7a1f92e1" @@ -2942,6 +3039,16 @@ "@smithy/types" "^2.3.4" tslib "^2.5.0" +"@aws-sdk/credential-provider-env@3.433.0": + version "3.433.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.433.0.tgz#7cceca1002ba2e79e10a9dfb119442bea7b88e7c" + integrity sha512-Vl7Qz5qYyxBurMn6hfSiNJeUHSqfVUlMt0C1Bds3tCkl3IzecRWwyBOlxtxO3VCrgVeW3HqswLzCvhAFzPH6nQ== + dependencies: + "@aws-sdk/types" "3.433.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/types" "^2.4.0" + tslib "^2.5.0" + "@aws-sdk/credential-provider-env@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.6.1.tgz#d8b2dd36836432a9b8ec05a5cf9fe428b04c9964" @@ -3143,6 +3250,22 @@ "@smithy/types" "^2.3.4" tslib "^2.5.0" +"@aws-sdk/credential-provider-ini@3.441.0": + version "3.441.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.441.0.tgz#b7479042eca9d41c713d2664c7d4a4eb169b7b1b" + integrity sha512-SQipQYxYqDUuSOfIhDmaTdwPTcndGQotGZXWJl56mMWqAhU8MkwjK+oMf3VgRt/umJC0QwUCF5HUHIj7gSB1JA== + dependencies: + "@aws-sdk/credential-provider-env" "3.433.0" + "@aws-sdk/credential-provider-process" "3.433.0" + "@aws-sdk/credential-provider-sso" "3.441.0" + "@aws-sdk/credential-provider-web-identity" "3.433.0" + "@aws-sdk/types" "3.433.0" + "@smithy/credential-provider-imds" "^2.0.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/shared-ini-file-loader" "^2.0.6" + "@smithy/types" "^2.4.0" + tslib "^2.5.0" + "@aws-sdk/credential-provider-ini@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.6.1.tgz#0da6d9341e621f8e0815814ed017b88e268fbc3d" @@ -3302,6 +3425,23 @@ "@smithy/types" "^2.3.4" tslib "^2.5.0" +"@aws-sdk/credential-provider-node@3.441.0": + version "3.441.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.441.0.tgz#b286d47c43b48988c7ee4f014dc823afabe5cb16" + integrity sha512-WB9p37yHq6fGJt6Vll29ijHbkh9VDbPM/n5ns73bTAgFD7R0ht5kPmdmHGQA6m3RKjcHLPbymQ3lXykkMwWf/Q== + dependencies: + "@aws-sdk/credential-provider-env" "3.433.0" + "@aws-sdk/credential-provider-ini" "3.441.0" + "@aws-sdk/credential-provider-process" "3.433.0" + "@aws-sdk/credential-provider-sso" "3.441.0" + "@aws-sdk/credential-provider-web-identity" "3.433.0" + "@aws-sdk/types" "3.433.0" + "@smithy/credential-provider-imds" "^2.0.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/shared-ini-file-loader" "^2.0.6" + "@smithy/types" "^2.4.0" + tslib "^2.5.0" + "@aws-sdk/credential-provider-node@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.6.1.tgz#0055292a4f0f49d053e8dfcc9174d8d2cf6862bb" @@ -3411,6 +3551,17 @@ "@smithy/types" "^2.3.4" tslib "^2.5.0" +"@aws-sdk/credential-provider-process@3.433.0": + version "3.433.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.433.0.tgz#dd51c92480ed620e4c3f989852ee408ab1209d59" + integrity sha512-W7FcGlQjio9Y/PepcZGRyl5Bpwb0uWU7qIUCh+u4+q2mW4D5ZngXg8V/opL9/I/p4tUH9VXZLyLGwyBSkdhL+A== + dependencies: + "@aws-sdk/types" "3.433.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/shared-ini-file-loader" "^2.0.6" + "@smithy/types" "^2.4.0" + tslib "^2.5.0" + "@aws-sdk/credential-provider-process@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.6.1.tgz#5bf851f3ee232c565b8c82608926df0ad28c1958" @@ -3534,6 +3685,19 @@ "@smithy/types" "^2.3.4" tslib "^2.5.0" +"@aws-sdk/credential-provider-sso@3.441.0": + version "3.441.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.441.0.tgz#ef116fdcc5489088acdfea33036666293d1723cb" + integrity sha512-pTg16G+62mWCE8yGKuQnEBqPdpG5g71remf2jUqXaI1c7GCzbnkQDV9eD4DaAGOvzIs0wo9zAQnS2kVDPFlCYA== + dependencies: + "@aws-sdk/client-sso" "3.441.0" + "@aws-sdk/token-providers" "3.438.0" + "@aws-sdk/types" "3.433.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/shared-ini-file-loader" "^2.0.6" + "@smithy/types" "^2.4.0" + tslib "^2.5.0" + "@aws-sdk/credential-provider-web-identity@3.186.0": version "3.186.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.186.0.tgz#db43f37f7827b553490dd865dbaa9a2c45f95494" @@ -3620,6 +3784,16 @@ "@smithy/types" "^2.3.4" tslib "^2.5.0" +"@aws-sdk/credential-provider-web-identity@3.433.0": + version "3.433.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.433.0.tgz#32403ba9cc47d3c46500f3c8e5e0041d20e4dbe8" + integrity sha512-RlwjP1I5wO+aPpwyCp23Mk8nmRbRL33hqRASy73c4JA2z2YiRua+ryt6MalIxehhwQU6xvXUKulJnPG9VaMFZg== + dependencies: + "@aws-sdk/types" "3.433.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/types" "^2.4.0" + tslib "^2.5.0" + "@aws-sdk/eventstream-codec@3.186.0": version "3.186.0" resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-codec/-/eventstream-codec-3.186.0.tgz#9da9608866b38179edf72987f2bc3b865d11db13" @@ -4345,6 +4519,16 @@ "@smithy/types" "^2.3.4" tslib "^2.5.0" +"@aws-sdk/middleware-host-header@3.433.0": + version "3.433.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.433.0.tgz#3b6687ee4021c2b56c96cff61b45a33fb762b1c7" + integrity sha512-mBTq3UWv1UzeHG+OfUQ2MB/5GEkt5LTKFaUqzL7ESwzW8XtpBgXnjZvIwu3Vcd3sEetMwijwaGiJhY0ae/YyaA== + dependencies: + "@aws-sdk/types" "3.433.0" + "@smithy/protocol-http" "^3.0.8" + "@smithy/types" "^2.4.0" + tslib "^2.5.0" + "@aws-sdk/middleware-host-header@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.6.1.tgz#6e1b4b95c5bfea5a4416fa32f11d8fa2e6edaeff" @@ -4456,6 +4640,15 @@ "@smithy/types" "^2.3.4" tslib "^2.5.0" +"@aws-sdk/middleware-logger@3.433.0": + version "3.433.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.433.0.tgz#fcd4e31a8f134861cd519477b959c218a3600186" + integrity sha512-We346Fb5xGonTGVZC9Nvqtnqy74VJzYuTLLiuuftA5sbNzftBDy/22QCfvYSTOAl3bvif+dkDUzQY2ihc5PwOQ== + dependencies: + "@aws-sdk/types" "3.433.0" + "@smithy/types" "^2.4.0" + tslib "^2.5.0" + "@aws-sdk/middleware-logger@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.6.1.tgz#78b3732cf188d5e4df13488db6418f7f98a77d6d" @@ -4550,6 +4743,16 @@ "@smithy/types" "^2.3.4" tslib "^2.5.0" +"@aws-sdk/middleware-recursion-detection@3.433.0": + version "3.433.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.433.0.tgz#5b4b7878ea46c70f507c9ea7c30ad0e5ee4ae6bf" + integrity sha512-HEvYC9PQlWY/ccUYtLvAlwwf1iCif2TSAmLNr3YTBRVa98x6jKL0hlCrHWYklFeqOGSKy6XhE+NGJMUII0/HaQ== + dependencies: + "@aws-sdk/types" "3.433.0" + "@smithy/protocol-http" "^3.0.8" + "@smithy/types" "^2.4.0" + tslib "^2.5.0" + "@aws-sdk/middleware-retry@3.186.0": version "3.186.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.186.0.tgz#0ff9af58d73855863683991a809b40b93c753ad1" @@ -4748,6 +4951,16 @@ "@smithy/types" "^2.3.4" tslib "^2.5.0" +"@aws-sdk/middleware-sdk-sts@3.433.0": + version "3.433.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.433.0.tgz#9b30f17a922ecc5fd46b93f1edcd20d7146b814f" + integrity sha512-ORYbJnBejUyonFl5FwIqhvI3Cq6sAp9j+JpkKZtFNma9tFPdrhmYgfCeNH32H/wGTQV/tUoQ3luh0gA4cuk6DA== + dependencies: + "@aws-sdk/middleware-signing" "3.433.0" + "@aws-sdk/types" "3.433.0" + "@smithy/types" "^2.4.0" + tslib "^2.5.0" + "@aws-sdk/middleware-serde@3.186.0": version "3.186.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-serde/-/middleware-serde-3.186.0.tgz#f7944241ad5fb31cb15cd250c9e92147942b9ec6" @@ -4901,6 +5114,19 @@ "@smithy/util-middleware" "^2.0.3" tslib "^2.5.0" +"@aws-sdk/middleware-signing@3.433.0": + version "3.433.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.433.0.tgz#670557ace5b97729dbabb6a991815e44eb0ef03b" + integrity sha512-jxPvt59NZo/epMNLNTu47ikmP8v0q217I6bQFGJG7JVFnfl36zDktMwGw+0xZR80qiK47/2BWrNpta61Zd2FxQ== + dependencies: + "@aws-sdk/types" "3.433.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/protocol-http" "^3.0.8" + "@smithy/signature-v4" "^2.0.0" + "@smithy/types" "^2.4.0" + "@smithy/util-middleware" "^2.0.5" + tslib "^2.5.0" + "@aws-sdk/middleware-signing@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.6.1.tgz#e70a2f35d85d70e33c9fddfb54b9520f6382db16" @@ -5065,6 +5291,17 @@ "@smithy/types" "^2.3.4" tslib "^2.5.0" +"@aws-sdk/middleware-user-agent@3.438.0": + version "3.438.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.438.0.tgz#a1165134d5b95e1fbeb841740084b3a43dead18a" + integrity sha512-a+xHT1wOxT6EA6YyLmrfaroKWOkwwyiktUfXKM0FsUutGzNi4fKhb5NZ2al58NsXzHgHFrasSDp+Lqbd/X2cEw== + dependencies: + "@aws-sdk/types" "3.433.0" + "@aws-sdk/util-endpoints" "3.438.0" + "@smithy/protocol-http" "^3.0.8" + "@smithy/types" "^2.4.0" + tslib "^2.5.0" + "@aws-sdk/middleware-user-agent@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.6.1.tgz#6845dfb3bc6187897f348c2c87dec833e6a65c99" @@ -5366,6 +5603,17 @@ "@smithy/util-middleware" "^2.0.3" tslib "^2.5.0" +"@aws-sdk/region-config-resolver@3.433.0": + version "3.433.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.433.0.tgz#37eb5f40db8af7ba9361aeb28c62b45421e780f0" + integrity sha512-xpjRjCZW+CDFdcMmmhIYg81ST5UAnJh61IHziQEk0FXONrg4kjyYPZAOjEdzXQ+HxJQuGQLKPhRdzxmQnbX7pg== + dependencies: + "@smithy/node-config-provider" "^2.1.3" + "@smithy/types" "^2.4.0" + "@smithy/util-config-provider" "^2.0.0" + "@smithy/util-middleware" "^2.0.5" + tslib "^2.5.0" + "@aws-sdk/s3-request-presigner@^3.352.0": version "3.354.0" resolved "https://registry.yarnpkg.com/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.354.0.tgz#4ff1621e1400b4db003d725edbf816da6bcc8d72" @@ -5758,6 +6006,49 @@ "@smithy/util-utf8" "^2.0.0" tslib "^2.5.0" +"@aws-sdk/token-providers@3.438.0": + version "3.438.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.438.0.tgz#e91baa37c9c78cb5b21cae96a12e7e1705c931d3" + integrity sha512-G2fUfTtU6/1ayYRMu0Pd9Ln4qYSvwJOWCqJMdkDgvXSwdgcOSOLsnAIk1AHGJDAvgLikdCzuyOsdJiexr9Vnww== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/middleware-host-header" "3.433.0" + "@aws-sdk/middleware-logger" "3.433.0" + "@aws-sdk/middleware-recursion-detection" "3.433.0" + "@aws-sdk/middleware-user-agent" "3.438.0" + "@aws-sdk/region-config-resolver" "3.433.0" + "@aws-sdk/types" "3.433.0" + "@aws-sdk/util-endpoints" "3.438.0" + "@aws-sdk/util-user-agent-browser" "3.433.0" + "@aws-sdk/util-user-agent-node" "3.437.0" + "@smithy/config-resolver" "^2.0.16" + "@smithy/fetch-http-handler" "^2.2.4" + "@smithy/hash-node" "^2.0.12" + "@smithy/invalid-dependency" "^2.0.12" + "@smithy/middleware-content-length" "^2.0.14" + "@smithy/middleware-endpoint" "^2.1.3" + "@smithy/middleware-retry" "^2.0.18" + "@smithy/middleware-serde" "^2.0.12" + "@smithy/middleware-stack" "^2.0.6" + "@smithy/node-config-provider" "^2.1.3" + "@smithy/node-http-handler" "^2.1.8" + "@smithy/property-provider" "^2.0.0" + "@smithy/protocol-http" "^3.0.8" + "@smithy/shared-ini-file-loader" "^2.0.6" + "@smithy/smithy-client" "^2.1.12" + "@smithy/types" "^2.4.0" + "@smithy/url-parser" "^2.0.12" + "@smithy/util-base64" "^2.0.0" + "@smithy/util-body-length-browser" "^2.0.0" + "@smithy/util-body-length-node" "^2.1.0" + "@smithy/util-defaults-mode-browser" "^2.0.16" + "@smithy/util-defaults-mode-node" "^2.0.21" + "@smithy/util-endpoints" "^1.0.2" + "@smithy/util-retry" "^2.0.5" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.5.0" + "@aws-sdk/types@3.186.0": version "3.186.0" resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.186.0.tgz#f6fb6997b6a364f399288bfd5cd494bc680ac922" @@ -5815,7 +6106,7 @@ "@smithy/types" "^2.3.1" tslib "^2.5.0" -"@aws-sdk/types@3.425.0", "@aws-sdk/types@^3.1.0", "@aws-sdk/types@^3.222.0": +"@aws-sdk/types@3.425.0": version "3.425.0" resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.425.0.tgz#8d4e94743a69c865a83785a9f3bcfd49945836f7" integrity sha512-6lqbmorwerN4v+J5dqbHPAsjynI0mkEF+blf+69QTaKKGaxBBVaXgqoqul9RXYcK5MMrrYRbQIMd0zYOoy90kA== @@ -5823,6 +6114,14 @@ "@smithy/types" "^2.3.4" tslib "^2.5.0" +"@aws-sdk/types@3.433.0", "@aws-sdk/types@^3.1.0", "@aws-sdk/types@^3.222.0": + version "3.433.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.433.0.tgz#0f94eae2a4a3525ca872c9ab04e143c01806d755" + integrity sha512-0jEE2mSrNDd8VGFjTc1otYrwYPIkzZJEIK90ZxisKvQ/EURGBhNzWn7ejWB9XCMFT6XumYLBR0V9qq5UPisWtA== + dependencies: + "@smithy/types" "^2.4.0" + tslib "^2.5.0" + "@aws-sdk/types@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.6.1.tgz#00686db69e998b521fcd4a5f81ef0960980f80c4" @@ -6205,6 +6504,15 @@ "@smithy/node-config-provider" "^2.0.13" tslib "^2.5.0" +"@aws-sdk/util-endpoints@3.438.0": + version "3.438.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.438.0.tgz#fe79a0ad87fc201c8ecb422f6f040bd300c98df9" + integrity sha512-6VyPTq1kN3GWxwFt5DdZfOsr6cJZPLjWh0troY/0uUv3hK74C9o3Y0Xf/z8UAUvQFkVqZse12O0/BgPVMImvfA== + dependencies: + "@aws-sdk/types" "3.433.0" + "@smithy/util-endpoints" "^1.0.2" + tslib "^2.5.0" + "@aws-sdk/util-format-url@3.329.0": version "3.329.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-format-url/-/util-format-url-3.329.0.tgz#2856379da026adc6355d63bdf6f207a4f8b7c6cb" @@ -6468,6 +6776,16 @@ bowser "^2.11.0" tslib "^2.5.0" +"@aws-sdk/util-user-agent-browser@3.433.0": + version "3.433.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.433.0.tgz#b5ed0c0cca0db34a2c1c2ffc1b65e7cdd8dc88ff" + integrity sha512-2Cf/Lwvxbt5RXvWFXrFr49vXv0IddiUwrZoAiwhDYxvsh+BMnh+NUFot+ZQaTrk/8IPZVDeLPWZRdVy00iaVXQ== + dependencies: + "@aws-sdk/types" "3.433.0" + "@smithy/types" "^2.4.0" + bowser "^2.11.0" + tslib "^2.5.0" + "@aws-sdk/util-user-agent-browser@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.6.1.tgz#11b9cc8743392761adb304460f4b54ec8acc2ee6" @@ -6563,6 +6881,16 @@ "@smithy/types" "^2.3.4" tslib "^2.5.0" +"@aws-sdk/util-user-agent-node@3.437.0": + version "3.437.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.437.0.tgz#f77729854ddf049ccaba8bae3d8fa279812b4716" + integrity sha512-JVEcvWaniamtYVPem4UthtCNoTBCfFTwYj7Y3CrWZ2Qic4TqrwLkAfaBGtI2TGrhIClVr77uzLI6exqMTN7orA== + dependencies: + "@aws-sdk/types" "3.433.0" + "@smithy/node-config-provider" "^2.1.3" + "@smithy/types" "^2.4.0" + tslib "^2.5.0" + "@aws-sdk/util-user-agent-node@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.6.1.tgz#98384095fa67d098ae7dd26f3ccaad028e8aebb6" @@ -11951,12 +12279,12 @@ "@smithy/types" "^2.0.2" tslib "^2.5.0" -"@smithy/abort-controller@^2.0.11": - version "2.0.11" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.0.11.tgz#e1d96a2ecbf103d0b075a7456ce3afeeb9f76a87" - integrity sha512-MSzE1qR2JNyb7ot3blIOT3O3H0Jn06iNDEgHRaqZUwBgx5EG+VIx24Y21tlKofzYryIOcWpIohLrIIyocD6LMA== +"@smithy/abort-controller@^2.0.12": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.0.12.tgz#62cd47c81fa1d7d6c2d6fde0c2f54ea89892fb6a" + integrity sha512-YIJyefe1mi3GxKdZxEBEuzYOeQ9xpYfqnFmWzojCssRAuR7ycxwpoRQgp965vuW426xUAQhCV5rCaWElQ7XsaA== dependencies: - "@smithy/types" "^2.3.5" + "@smithy/types" "^2.4.0" tslib "^2.5.0" "@smithy/chunked-blob-reader-native@^1.0.2": @@ -11984,15 +12312,15 @@ "@smithy/util-middleware" "^1.0.1" tslib "^2.5.0" -"@smithy/config-resolver@^2.0.1", "@smithy/config-resolver@^2.0.11", "@smithy/config-resolver@^2.0.14", "@smithy/config-resolver@^2.0.8": - version "2.0.14" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.0.14.tgz#16163e14053949f5a717be6f5802a7039e5ff4d1" - integrity sha512-K1K+FuWQoy8j/G7lAmK85o03O89s2Vvh6kMFmzEmiHUoQCRH1rzbDtMnGNiaMHeSeYJ6y79IyTusdRG+LuWwtg== +"@smithy/config-resolver@^2.0.1", "@smithy/config-resolver@^2.0.11", "@smithy/config-resolver@^2.0.16", "@smithy/config-resolver@^2.0.8": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.0.16.tgz#f2abf65a21f56731fdab2d39d2df2dd0e377c9cc" + integrity sha512-1k+FWHQDt2pfpXhJsOmNMmlAZ3NUQ98X5tYsjQhVGq+0X6cOBMhfh6Igd0IX3Ut6lEO6DQAdPMI/blNr3JZfMQ== dependencies: - "@smithy/node-config-provider" "^2.1.1" - "@smithy/types" "^2.3.5" + "@smithy/node-config-provider" "^2.1.3" + "@smithy/types" "^2.4.0" "@smithy/util-config-provider" "^2.0.0" - "@smithy/util-middleware" "^2.0.4" + "@smithy/util-middleware" "^2.0.5" tslib "^2.5.0" "@smithy/credential-provider-imds@^1.0.1": @@ -12017,15 +12345,15 @@ "@smithy/url-parser" "^2.0.1" tslib "^2.5.0" -"@smithy/credential-provider-imds@^2.0.16": - version "2.0.16" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.16.tgz#07da7ecd43eff92156ddc54f3b5330bbc128d5cd" - integrity sha512-tKa2xF+69TvGxJT+lnJpGrKxUuAZDLYXFhqnPEgnHz+psTpkpcB4QRjHj63+uj83KaeFJdTfW201eLZeRn6FfA== +"@smithy/credential-provider-imds@^2.0.18": + version "2.0.18" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.18.tgz#9a5b8be3f268bb4ac7b7ef321f57b0e9a61e2940" + integrity sha512-QnPBi6D2zj6AHJdUTo5zXmk8vwHJ2bNevhcVned1y+TZz/OI5cizz5DsYNkqFUIDn8tBuEyKNgbmKVNhBbuY3g== dependencies: - "@smithy/node-config-provider" "^2.1.1" - "@smithy/property-provider" "^2.0.12" - "@smithy/types" "^2.3.5" - "@smithy/url-parser" "^2.0.11" + "@smithy/node-config-provider" "^2.1.3" + "@smithy/property-provider" "^2.0.13" + "@smithy/types" "^2.4.0" + "@smithy/url-parser" "^2.0.12" tslib "^2.5.0" "@smithy/eventstream-codec@^1.0.1": @@ -12139,14 +12467,14 @@ "@smithy/util-base64" "^1.0.1" tslib "^2.5.0" -"@smithy/fetch-http-handler@^2.0.1", "@smithy/fetch-http-handler@^2.1.3", "@smithy/fetch-http-handler@^2.2.1", "@smithy/fetch-http-handler@^2.2.3": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.3.tgz#86445f63dbf09ec331b6199fc2f0f44fec1b1417" - integrity sha512-0G9sePU+0R+8d7cie+OXzNbbkjnD4RfBlVCs46ZEuQAMcxK8OniemYXSSkOc80CCk8Il4DnlYZcUSvsIs2OB2w== +"@smithy/fetch-http-handler@^2.0.1", "@smithy/fetch-http-handler@^2.1.3", "@smithy/fetch-http-handler@^2.2.1", "@smithy/fetch-http-handler@^2.2.4": + version "2.2.4" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.4.tgz#405716581a5a336f2c162daf4169bff600fc47ce" + integrity sha512-gIPRFEGi+c6V52eauGKrjDzPWF2Cu7Z1r5F8A3j2wcwz25sPG/t8kjsbEhli/tS/2zJp/ybCZXe4j4ro3yv/HA== dependencies: - "@smithy/protocol-http" "^3.0.7" - "@smithy/querystring-builder" "^2.0.11" - "@smithy/types" "^2.3.5" + "@smithy/protocol-http" "^3.0.8" + "@smithy/querystring-builder" "^2.0.12" + "@smithy/types" "^2.4.0" "@smithy/util-base64" "^2.0.0" tslib "^2.5.0" @@ -12170,12 +12498,12 @@ "@smithy/util-utf8" "^1.0.1" tslib "^2.5.0" -"@smithy/hash-node@^2.0.1", "@smithy/hash-node@^2.0.10", "@smithy/hash-node@^2.0.7": - version "2.0.11" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.0.11.tgz#07d73eefa9ab28e4f03461c6ec0532b85792329d" - integrity sha512-PbleVugN2tbhl1ZoNWVrZ1oTFFas/Hq+s6zGO8B9bv4w/StTriTKA9W+xZJACOj9X7zwfoTLbscM+avCB1KqOQ== +"@smithy/hash-node@^2.0.1", "@smithy/hash-node@^2.0.10", "@smithy/hash-node@^2.0.12", "@smithy/hash-node@^2.0.7": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.0.12.tgz#514586ca3f54840322273029eef66c41d9001e39" + integrity sha512-fDZnTr5j9t5qcbeJ037aMZXxMka13Znqwrgy3PAqYj6Dm3XHXHftTH3q+NWgayUxl1992GFtQt1RuEzRMy3NnQ== dependencies: - "@smithy/types" "^2.3.5" + "@smithy/types" "^2.4.0" "@smithy/util-buffer-from" "^2.0.0" "@smithy/util-utf8" "^2.0.0" tslib "^2.5.0" @@ -12197,12 +12525,12 @@ "@smithy/types" "^1.1.0" tslib "^2.5.0" -"@smithy/invalid-dependency@^2.0.1", "@smithy/invalid-dependency@^2.0.10", "@smithy/invalid-dependency@^2.0.7": - version "2.0.11" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.0.11.tgz#41811da5da9950f52a0491ea532add2b1895349b" - integrity sha512-zazq99ujxYv/NOf9zh7xXbNgzoVLsqE0wle8P/1zU/XdhPi/0zohTPKWUzIxjGdqb5hkkwfBkNkl5H+LE0mvgw== +"@smithy/invalid-dependency@^2.0.1", "@smithy/invalid-dependency@^2.0.10", "@smithy/invalid-dependency@^2.0.12", "@smithy/invalid-dependency@^2.0.7": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.0.12.tgz#de78a5e9457cc397aad0648e18c0260b522fe604" + integrity sha512-p5Y+iMHV3SoEpy3VSR7mifbreHQwVSvHSAz/m4GdoXfOzKzaYC8hYv10Ks7Deblkf7lhas8U+lAp9ThbBM+ZXA== dependencies: - "@smithy/types" "^2.3.5" + "@smithy/types" "^2.4.0" tslib "^2.5.0" "@smithy/is-array-buffer@^1.0.1": @@ -12244,13 +12572,13 @@ "@smithy/types" "^1.1.0" tslib "^2.5.0" -"@smithy/middleware-content-length@^2.0.1", "@smithy/middleware-content-length@^2.0.12", "@smithy/middleware-content-length@^2.0.9": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.0.13.tgz#eb8195510fac8e2d925e43f270f347d8e2ce038b" - integrity sha512-Md2kxWpaec3bXp1oERFPQPBhOXCkGSAF7uc1E+4rkwjgw3/tqAXRtbjbggu67HJdwaif76As8AV6XxbD1HzqTQ== +"@smithy/middleware-content-length@^2.0.1", "@smithy/middleware-content-length@^2.0.12", "@smithy/middleware-content-length@^2.0.14", "@smithy/middleware-content-length@^2.0.9": + version "2.0.14" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.0.14.tgz#ee1aa842490cee90b6ac208fb13a7d56d3ed84f2" + integrity sha512-poUNgKTw9XwPXfX9nEHpVgrMNVpaSMZbshqvPxFVoalF4wp6kRzYKOfdesSVectlQ51VtigoLfbXcdyPwvxgTg== dependencies: - "@smithy/protocol-http" "^3.0.7" - "@smithy/types" "^2.3.5" + "@smithy/protocol-http" "^3.0.8" + "@smithy/types" "^2.4.0" tslib "^2.5.0" "@smithy/middleware-endpoint@^1.0.1", "@smithy/middleware-endpoint@^1.0.2": @@ -12264,16 +12592,17 @@ "@smithy/util-middleware" "^1.0.2" tslib "^2.5.0" -"@smithy/middleware-endpoint@^2.0.1", "@smithy/middleware-endpoint@^2.0.10", "@smithy/middleware-endpoint@^2.0.7": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.1.0.tgz#847d8640759f60fca29d3249370d0582136535aa" - integrity sha512-e6HZbfrp9CNTJqIPSgkydB9mNQXiq5pkHF3ZB6rOzPPR9PkJBoGFo9TcM7FaaKFUaH4Kc20AX6WwwVyIlNhXTA== +"@smithy/middleware-endpoint@^2.0.1", "@smithy/middleware-endpoint@^2.0.10", "@smithy/middleware-endpoint@^2.0.7", "@smithy/middleware-endpoint@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.1.3.tgz#ab7ebff4ecbc9b02ec70dd57179f47c4f16bf03f" + integrity sha512-ZrQ0/YX6hNVTxqMEHtEaDbDv6pNeEji/a5Vk3HuFC5R3ZY8lfoATyxmOGxBVYnF3NUvZLNC7umEv1WzWGWvCGQ== dependencies: - "@smithy/middleware-serde" "^2.0.11" - "@smithy/node-config-provider" "^2.1.1" - "@smithy/types" "^2.3.5" - "@smithy/url-parser" "^2.0.11" - "@smithy/util-middleware" "^2.0.4" + "@smithy/middleware-serde" "^2.0.12" + "@smithy/node-config-provider" "^2.1.3" + "@smithy/shared-ini-file-loader" "^2.2.2" + "@smithy/types" "^2.4.0" + "@smithy/url-parser" "^2.0.12" + "@smithy/util-middleware" "^2.0.5" tslib "^2.5.0" "@smithy/middleware-retry@^1.0.1", "@smithy/middleware-retry@^1.0.2", "@smithy/middleware-retry@^1.0.3": @@ -12289,17 +12618,17 @@ tslib "^2.5.0" uuid "^8.3.2" -"@smithy/middleware-retry@^2.0.1", "@smithy/middleware-retry@^2.0.10", "@smithy/middleware-retry@^2.0.13": - version "2.0.16" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.0.16.tgz#f87401a01317de351df5228e4591961d04663607" - integrity sha512-Br5+0yoiMS0ugiOAfJxregzMMGIRCbX4PYo1kDHtLgvkA/d++aHbnHB819m5zOIAMPvPE7AThZgcsoK+WOsUTA== +"@smithy/middleware-retry@^2.0.1", "@smithy/middleware-retry@^2.0.10", "@smithy/middleware-retry@^2.0.13", "@smithy/middleware-retry@^2.0.18": + version "2.0.18" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.0.18.tgz#37982552a1d3815148797831df025e470423fc5e" + integrity sha512-VyrHQRldGSb3v9oFOB5yPxmLT7U2sQic2ytylOnYlnsmVOLlFIaI6sW22c+w2675yq+XZ6HOuzV7x2OBYCWRNA== dependencies: - "@smithy/node-config-provider" "^2.1.1" - "@smithy/protocol-http" "^3.0.7" - "@smithy/service-error-classification" "^2.0.4" - "@smithy/types" "^2.3.5" - "@smithy/util-middleware" "^2.0.4" - "@smithy/util-retry" "^2.0.4" + "@smithy/node-config-provider" "^2.1.3" + "@smithy/protocol-http" "^3.0.8" + "@smithy/service-error-classification" "^2.0.5" + "@smithy/types" "^2.4.0" + "@smithy/util-middleware" "^2.0.5" + "@smithy/util-retry" "^2.0.5" tslib "^2.5.0" uuid "^8.3.2" @@ -12311,12 +12640,12 @@ "@smithy/types" "^1.1.1" tslib "^2.5.0" -"@smithy/middleware-serde@^2.0.1", "@smithy/middleware-serde@^2.0.10", "@smithy/middleware-serde@^2.0.11", "@smithy/middleware-serde@^2.0.7": - version "2.0.11" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.0.11.tgz#89c4433b9b4077e2f71f436cd4f97d613e2cf3bd" - integrity sha512-NuxnjMyf4zQqhwwdh0OTj5RqpnuT6HcH5Xg5GrPijPcKzc2REXVEVK4Yyk8ckj8ez1XSj/bCmJ+oNjmqB02GWA== +"@smithy/middleware-serde@^2.0.1", "@smithy/middleware-serde@^2.0.10", "@smithy/middleware-serde@^2.0.12", "@smithy/middleware-serde@^2.0.7": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.0.12.tgz#edc93c400a5ffec6c068419163f9d880bdff5e5b" + integrity sha512-IBeco157lIScecq2Z+n0gq56i4MTnfKxS7rbfrAORveDJgnbBAaEQgYqMqp/cYqKrpvEXcyTjwKHrBjCCIZh2A== dependencies: - "@smithy/types" "^2.3.5" + "@smithy/types" "^2.4.0" tslib "^2.5.0" "@smithy/middleware-stack@^1.0.1": @@ -12326,12 +12655,12 @@ dependencies: tslib "^2.5.0" -"@smithy/middleware-stack@^2.0.0", "@smithy/middleware-stack@^2.0.4", "@smithy/middleware-stack@^2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.0.5.tgz#43cd8aa7141b23dfbb64dff9ead8a3983d3acc5c" - integrity sha512-bVQU/rZzBY7CbSxIrDTGZYnBWKtIw+PL/cRc9B7etZk1IKSOe0NvKMJyWllfhfhrTeMF6eleCzOihIQympAvPw== +"@smithy/middleware-stack@^2.0.0", "@smithy/middleware-stack@^2.0.4", "@smithy/middleware-stack@^2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.0.6.tgz#c58d6e4ffc4498bf47fd27adcddd142395d3ba84" + integrity sha512-YSvNZeOKWLJ0M/ycxwDIe2Ztkp6Qixmcml1ggsSv2fdHKGkBPhGrX5tMzPGMI1yyx55UEYBi2OB4s+RriXX48A== dependencies: - "@smithy/types" "^2.3.5" + "@smithy/types" "^2.4.0" tslib "^2.5.0" "@smithy/node-config-provider@^1.0.1": @@ -12344,14 +12673,14 @@ "@smithy/types" "^1.1.0" tslib "^2.5.0" -"@smithy/node-config-provider@^2.0.1", "@smithy/node-config-provider@^2.0.10", "@smithy/node-config-provider@^2.0.13", "@smithy/node-config-provider@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.1.1.tgz#34c861b95a4e1b66a2dc1d1aecc2bca08466bd5e" - integrity sha512-1lF6s1YWBi1LBu2O30tD3jyTgMtuvk/Z1twzXM4GPYe4dmZix4nNREPJIPOcfFikNU2o0eTYP80+izx5F2jIJA== +"@smithy/node-config-provider@^2.0.1", "@smithy/node-config-provider@^2.0.10", "@smithy/node-config-provider@^2.0.13", "@smithy/node-config-provider@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.1.3.tgz#bf4cee69df08d43618ad4329d234351b14d98ef7" + integrity sha512-J6lXvRHGVnSX3n1PYi+e1L5HN73DkkJpUviV3Ebf+8wSaIjAf+eVNbzyvh/S5EQz7nf4KVfwbD5vdoZMAthAEQ== dependencies: - "@smithy/property-provider" "^2.0.12" - "@smithy/shared-ini-file-loader" "^2.2.0" - "@smithy/types" "^2.3.5" + "@smithy/property-provider" "^2.0.13" + "@smithy/shared-ini-file-loader" "^2.2.2" + "@smithy/types" "^2.4.0" tslib "^2.5.0" "@smithy/node-http-handler@^1.0.1", "@smithy/node-http-handler@^1.0.2": @@ -12365,15 +12694,15 @@ "@smithy/types" "^1.1.0" tslib "^2.5.0" -"@smithy/node-http-handler@^2.0.1", "@smithy/node-http-handler@^2.1.3", "@smithy/node-http-handler@^2.1.6", "@smithy/node-http-handler@^2.1.7": - version "2.1.7" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.1.7.tgz#a920e0e40fd04e2ea399cb4f06092fea0a1b66da" - integrity sha512-PQIKZXlp3awCDn/xNlCSTFE7aYG/5Tx33M05NfQmWYeB5yV1GZZOSz4dXpwiNJYTXb9jPqjl+ueXXkwtEluFFA== +"@smithy/node-http-handler@^2.0.1", "@smithy/node-http-handler@^2.1.3", "@smithy/node-http-handler@^2.1.6", "@smithy/node-http-handler@^2.1.8": + version "2.1.8" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.1.8.tgz#aad989d5445c43a677e7e6161c6fa4abd0e46023" + integrity sha512-KZylM7Wff/So5SmCiwg2kQNXJ+RXgz34wkxS7WNwIUXuZrZZpY/jKJCK+ZaGyuESDu3TxcaY+zeYGJmnFKbQsA== dependencies: - "@smithy/abort-controller" "^2.0.11" - "@smithy/protocol-http" "^3.0.7" - "@smithy/querystring-builder" "^2.0.11" - "@smithy/types" "^2.3.5" + "@smithy/abort-controller" "^2.0.12" + "@smithy/protocol-http" "^3.0.8" + "@smithy/querystring-builder" "^2.0.12" + "@smithy/types" "^2.4.0" tslib "^2.5.0" "@smithy/property-provider@^1.0.1": @@ -12392,12 +12721,12 @@ "@smithy/types" "^2.0.2" tslib "^2.5.0" -"@smithy/property-provider@^2.0.12": - version "2.0.12" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.0.12.tgz#09391cae6f336300e88128717ee5fb7cff76c5b4" - integrity sha512-Un/OvvuQ1Kg8WYtoMCicfsFFuHb/TKL3pCA6ZIo/WvNTJTR94RtoRnL7mY4XkkUAoFMyf6KjcQJ76y1FX7S5rw== +"@smithy/property-provider@^2.0.13": + version "2.0.13" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.0.13.tgz#45ee47ad79d638082523f944c49fd2e851312098" + integrity sha512-VJqUf2CbsQX6uUiC5dUPuoEATuFjkbkW3lJHbRnpk9EDC9X+iKqhfTK+WP+lve5EQ9TcCI1Q6R7hrg41FyC54w== dependencies: - "@smithy/types" "^2.3.5" + "@smithy/types" "^2.4.0" tslib "^2.5.0" "@smithy/protocol-http@^1.0.1", "@smithy/protocol-http@^1.1.0", "@smithy/protocol-http@^1.1.1": @@ -12416,12 +12745,12 @@ "@smithy/types" "^2.0.2" tslib "^2.5.0" -"@smithy/protocol-http@^3.0.3", "@smithy/protocol-http@^3.0.6", "@smithy/protocol-http@^3.0.7": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.0.7.tgz#4deec17a27f7cc5d2bea962fcb0cdfbfd311b05c" - integrity sha512-HnZW8y+r66ntYueCDbLqKwWcMNWW8o3eVpSrHNluwtBJ/EUWfQHRKSiu6vZZtc6PGfPQWgVfucoCE/C3QufMAA== +"@smithy/protocol-http@^3.0.3", "@smithy/protocol-http@^3.0.6", "@smithy/protocol-http@^3.0.8": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.0.8.tgz#0f7c114f6b8e23a57dff7a275d085bac97b9233c" + integrity sha512-SHJvYeWq8q0FK8xHk+xjV9dzDUDjFMT+G1pZbV+XB6OVoac/FSVshlMNPeUJ8AmSkcDKHRu5vASnRqZHgD3qhw== dependencies: - "@smithy/types" "^2.3.5" + "@smithy/types" "^2.4.0" tslib "^2.5.0" "@smithy/querystring-builder@^1.0.1": @@ -12433,12 +12762,12 @@ "@smithy/util-uri-escape" "^1.0.1" tslib "^2.5.0" -"@smithy/querystring-builder@^2.0.11": - version "2.0.11" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.0.11.tgz#7a56bed12474ad46059116d87eb7b81cdba9d7f6" - integrity sha512-b4kEbVMxpmfv2VWUITn2otckTi7GlMteZQxi+jlwedoATOGEyrCJPfRcYQJjbCi3fZ2QTfh3PcORvB27+j38Yg== +"@smithy/querystring-builder@^2.0.12": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.0.12.tgz#d13e0eea08d43596bdbb182206ccdee0956d06fd" + integrity sha512-cDbF07IuCjiN8CdGvPzfJjXIrmDSelScRfyJYrYBNBbKl2+k7QD/KqiHhtRyEKgID5mmEVrV6KE6L/iPJ98sFw== dependencies: - "@smithy/types" "^2.3.5" + "@smithy/types" "^2.4.0" "@smithy/util-uri-escape" "^2.0.0" tslib "^2.5.0" @@ -12450,12 +12779,12 @@ "@smithy/types" "^1.1.1" tslib "^2.5.0" -"@smithy/querystring-parser@^2.0.11": - version "2.0.11" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.0.11.tgz#63b7fde68714974c220e386002100ad9b70d91a3" - integrity sha512-YXe7jhi7s3dQ0Fu9dLoY/gLu6NCyy8tBWJL/v2c9i7/RLpHgKT+uT96/OqZkHizCJ4kr0ZD46tzMjql/o60KLg== +"@smithy/querystring-parser@^2.0.12": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.0.12.tgz#d2c234031e266359716a0c62c8c1208a5bd2557e" + integrity sha512-fytyTcXaMzPBuNtPlhj5v6dbl4bJAnwKZFyyItAGt4Tgm9HFPZNo7a9r1SKPr/qdxUEBzvL9Rh+B9SkTX3kFxg== dependencies: - "@smithy/types" "^2.3.5" + "@smithy/types" "^2.4.0" tslib "^2.5.0" "@smithy/service-error-classification@^1.0.3": @@ -12463,12 +12792,12 @@ resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-1.0.3.tgz#c620c1562610d3351985eb6dd04262ca2657ae67" integrity sha512-2eglIYqrtcUnuI71yweu7rSfCgt6kVvRVf0C72VUqrd0LrV1M0BM0eYN+nitp2CHPSdmMI96pi+dU9U/UqAMSA== -"@smithy/service-error-classification@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.0.4.tgz#05c0a30eddbf63fb5f27704757da388aec5d66c2" - integrity sha512-77506l12I5gxTZqBkx3Wb0RqMG81bMYLaVQ+EqIWFwQDJRs5UFeXogKxSKojCmz1wLUziHZQXm03MBzPQiumQw== +"@smithy/service-error-classification@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.0.5.tgz#22c84fad456730adfa31cae91d47acd31304c346" + integrity sha512-M0SeJnEgD2ywJyV99Fb1yKFzmxDe9JfpJiYTVSRMyRLc467BPU0qsuuDPzMCdB1mU8M8u1rVOdkqdoyFN8UFTw== dependencies: - "@smithy/types" "^2.3.5" + "@smithy/types" "^2.4.0" "@smithy/shared-ini-file-loader@^1.0.1": version "1.0.1" @@ -12494,12 +12823,12 @@ "@smithy/types" "^2.3.2" tslib "^2.5.0" -"@smithy/shared-ini-file-loader@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.0.tgz#9e4a90a29fe3f109875c26e6127802ed0953f43d" - integrity sha512-xFXqs4vAb5BdkzHSRrTapFoaqS4/3m/CGZzdw46fBjYZ0paYuLAoMY60ICCn1FfGirG+PiJ3eWcqJNe4/SkfyA== +"@smithy/shared-ini-file-loader@^2.2.2": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.2.tgz#b52064c5254a01f5c98a821207448de439938667" + integrity sha512-noyQUPn7b1M8uB0GEXc/Zyxq+5K2b7aaqWnLp+hgJ7+xu/FCvtyWy5eWLDjQEsHnAet2IZhS5QF8872OR69uNg== dependencies: - "@smithy/types" "^2.3.5" + "@smithy/types" "^2.4.0" tslib "^2.5.0" "@smithy/signature-v4@^1.0.1": @@ -12540,14 +12869,14 @@ "@smithy/util-stream" "^1.0.1" tslib "^2.5.0" -"@smithy/smithy-client@^2.0.1", "@smithy/smithy-client@^2.1.11", "@smithy/smithy-client@^2.1.4", "@smithy/smithy-client@^2.1.9": - version "2.1.11" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.1.11.tgz#7e27c9969048952703ae493311245d1af62c73b8" - integrity sha512-okjMbuBBCTiieK665OFN/ap6u9+Z9z55PMphS5FYCsS6Zfp137Q3qlnt0OgBAnUVnH/mNGyoJV0LBX9gkTWptg== +"@smithy/smithy-client@^2.0.1", "@smithy/smithy-client@^2.1.12", "@smithy/smithy-client@^2.1.4", "@smithy/smithy-client@^2.1.9": + version "2.1.12" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.1.12.tgz#a7f10ab846d41ce1042eb81f087c4c9eb438b481" + integrity sha512-XXqhridfkKnpj+lt8vM6HRlZbqUAqBjVC74JIi13F/AYQd/zTj9SOyGfxnbp4mjY9q28LityxIuV8CTinr9r5w== dependencies: - "@smithy/middleware-stack" "^2.0.5" - "@smithy/types" "^2.3.5" - "@smithy/util-stream" "^2.0.16" + "@smithy/middleware-stack" "^2.0.6" + "@smithy/types" "^2.4.0" + "@smithy/util-stream" "^2.0.17" tslib "^2.5.0" "@smithy/types@^1.0.0", "@smithy/types@^1.1.0", "@smithy/types@^1.1.1", "@smithy/types@^1.2.0": @@ -12557,10 +12886,10 @@ dependencies: tslib "^2.5.0" -"@smithy/types@^2.0.2", "@smithy/types@^2.3.1", "@smithy/types@^2.3.2", "@smithy/types@^2.3.4", "@smithy/types@^2.3.5": - version "2.3.5" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.3.5.tgz#7684a74d4368f323b478bd9e99e7dc3a6156b5e5" - integrity sha512-ehyDt8M9hehyxrLQGoA1BGPou8Js1Ocoh5M0ngDhJMqbFmNK5N6Xhr9/ZExWkyIW8XcGkiMPq3ZUEE0ScrhbuQ== +"@smithy/types@^2.0.2", "@smithy/types@^2.3.1", "@smithy/types@^2.3.2", "@smithy/types@^2.3.4", "@smithy/types@^2.3.5", "@smithy/types@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.4.0.tgz#ed35e429e3ea3d089c68ed1bf951d0ccbdf2692e" + integrity sha512-iH1Xz68FWlmBJ9vvYeHifVMWJf82ONx+OybPW8ZGf5wnEv2S0UXcU4zwlwJkRXuLKpcSLHrraHbn2ucdVXLb4g== dependencies: tslib "^2.5.0" @@ -12573,13 +12902,13 @@ "@smithy/types" "^1.1.1" tslib "^2.5.0" -"@smithy/url-parser@^2.0.1", "@smithy/url-parser@^2.0.10", "@smithy/url-parser@^2.0.11", "@smithy/url-parser@^2.0.7": - version "2.0.11" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.0.11.tgz#19c157f9d47217259e587847101ef6bd83091a5e" - integrity sha512-h89yXMCCF+S5k9XIoKltMIWTYj+FcEkU/IIFZ6RtE222fskOTL4Iak6ZRG+ehSvZDt8yKEcxqheTDq7JvvtK3g== +"@smithy/url-parser@^2.0.1", "@smithy/url-parser@^2.0.10", "@smithy/url-parser@^2.0.12", "@smithy/url-parser@^2.0.7": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.0.12.tgz#a4cdd1b66176e48f10d119298f8f90b06b7e8a01" + integrity sha512-qgkW2mZqRvlNUcBkxYB/gYacRaAdck77Dk3/g2iw0S9F0EYthIS3loGfly8AwoWpIvHKhkTsCXXQfzksgZ4zIA== dependencies: - "@smithy/querystring-parser" "^2.0.11" - "@smithy/types" "^2.3.5" + "@smithy/querystring-parser" "^2.0.12" + "@smithy/types" "^2.4.0" tslib "^2.5.0" "@smithy/util-base64@^1.0.1", "@smithy/util-base64@^1.0.2": @@ -12674,14 +13003,14 @@ bowser "^2.11.0" tslib "^2.5.0" -"@smithy/util-defaults-mode-browser@^2.0.1", "@smithy/util-defaults-mode-browser@^2.0.13", "@smithy/util-defaults-mode-browser@^2.0.8": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.15.tgz#0ab82d6e88dbebcca5e570678790a0160bd2619c" - integrity sha512-2raMZOYKSuke7QlDg/HDcxQdrp0zteJ8z+S0B9Rn23J55ZFNK1+IjG4HkN6vo/0u3Xy/JOdJ93ibiBSB8F7kOw== +"@smithy/util-defaults-mode-browser@^2.0.1", "@smithy/util-defaults-mode-browser@^2.0.13", "@smithy/util-defaults-mode-browser@^2.0.16", "@smithy/util-defaults-mode-browser@^2.0.8": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.16.tgz#7d60c4e1d00ed569f47fd6343b822c4ff3c2c9f8" + integrity sha512-Uv5Cu8nVkuvLn0puX+R9zWbSNpLIR3AxUlPoLJ7hC5lvir8B2WVqVEkJLwtixKAncVLasnTVjPDCidtAUTGEQw== dependencies: - "@smithy/property-provider" "^2.0.12" - "@smithy/smithy-client" "^2.1.11" - "@smithy/types" "^2.3.5" + "@smithy/property-provider" "^2.0.13" + "@smithy/smithy-client" "^2.1.12" + "@smithy/types" "^2.4.0" bowser "^2.11.0" tslib "^2.5.0" @@ -12697,17 +13026,26 @@ "@smithy/types" "^1.1.0" tslib "^2.5.0" -"@smithy/util-defaults-mode-node@^2.0.1", "@smithy/util-defaults-mode-node@^2.0.10", "@smithy/util-defaults-mode-node@^2.0.15": - version "2.0.19" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.19.tgz#8996479c76dd68baae65fd863180a802a66fdf5d" - integrity sha512-7pScU4jBFADB2MBYKM3zb5onMh6Nn0X3IfaFVLYPyCarTIZDLUtUl1GtruzEUJPmDzP+uGeqOtU589HDY0Ni6g== - dependencies: - "@smithy/config-resolver" "^2.0.14" - "@smithy/credential-provider-imds" "^2.0.16" - "@smithy/node-config-provider" "^2.1.1" - "@smithy/property-provider" "^2.0.12" - "@smithy/smithy-client" "^2.1.11" - "@smithy/types" "^2.3.5" +"@smithy/util-defaults-mode-node@^2.0.1", "@smithy/util-defaults-mode-node@^2.0.10", "@smithy/util-defaults-mode-node@^2.0.15", "@smithy/util-defaults-mode-node@^2.0.21": + version "2.0.21" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.21.tgz#d10c887b3e641c63e235ce95ba32137fd0bd1838" + integrity sha512-cUEsttVZ79B7Al2rWK2FW03HBpD9LyuqFtm+1qFty5u9sHSdesr215gS2Ln53fTopNiPgeXpdoM3IgjvIO0rJw== + dependencies: + "@smithy/config-resolver" "^2.0.16" + "@smithy/credential-provider-imds" "^2.0.18" + "@smithy/node-config-provider" "^2.1.3" + "@smithy/property-provider" "^2.0.13" + "@smithy/smithy-client" "^2.1.12" + "@smithy/types" "^2.4.0" + tslib "^2.5.0" + +"@smithy/util-endpoints@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.0.2.tgz#8be5b840c19661e3830ca10973f775b331bd94cd" + integrity sha512-QEdq+sP68IJHAMVB2ugKVVZEWeKQtZLuf+akHzc8eTVElsZ2ZdVLWC6Cp+uKjJ/t4yOj1qu6ZzyxJQEQ8jdEjg== + dependencies: + "@smithy/node-config-provider" "^2.1.3" + "@smithy/types" "^2.4.0" tslib "^2.5.0" "@smithy/util-hex-encoding@^1.0.1": @@ -12752,7 +13090,7 @@ dependencies: tslib "^2.5.0" -"@smithy/util-middleware@^2.0.3", "@smithy/util-middleware@^2.0.4": +"@smithy/util-middleware@^2.0.3": version "2.0.4" resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.0.4.tgz#2c406efac04e341c3df6435d71fd9c73e03feb46" integrity sha512-Pbu6P4MBwRcjrLgdTR1O4Y3c0sTZn2JdOiJNcgL7EcIStcQodj+6ZTXtbyU/WTEU3MV2NMA10LxFc3AWHZ3+4A== @@ -12760,6 +13098,14 @@ "@smithy/types" "^2.3.5" tslib "^2.5.0" +"@smithy/util-middleware@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.0.5.tgz#c63dc491de81641c99ade9309f30c54ad0e28fbd" + integrity sha512-1lyT3TcaMJQe+OFfVI+TlomDkPuVzb27NZYdYtmSTltVmLaUjdCyt4KE+OH1CnhZKsz4/cdCL420Lg9UH5Z2Mw== + dependencies: + "@smithy/types" "^2.4.0" + tslib "^2.5.0" + "@smithy/util-retry@^1.0.1", "@smithy/util-retry@^1.0.2", "@smithy/util-retry@^1.0.3", "@smithy/util-retry@^1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-1.0.4.tgz#9d95df3884981414163d5f780d38e3529384d9ad" @@ -12768,13 +13114,13 @@ "@smithy/service-error-classification" "^1.0.3" tslib "^2.5.0" -"@smithy/util-retry@^2.0.0", "@smithy/util-retry@^2.0.3", "@smithy/util-retry@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.0.4.tgz#b3ae28e73b4bdec21480005e76f9eeb9d7279e89" - integrity sha512-b+n1jBBKc77C1E/zfBe1Zo7S9OXGBiGn55N0apfhZHxPUP/fMH5AhFUUcWaJh7NAnah284M5lGkBKuhnr3yK5w== +"@smithy/util-retry@^2.0.0", "@smithy/util-retry@^2.0.3", "@smithy/util-retry@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.0.5.tgz#1a93721da082301aca61d8b42380369761a7e80d" + integrity sha512-x3t1+MQAJ6QONk3GTbJNcugCFDVJ+Bkro5YqQQK1EyVesajNDqxFtCx9WdOFNGm/Cbm7tUdwVEmfKQOJoU2Vtw== dependencies: - "@smithy/service-error-classification" "^2.0.4" - "@smithy/types" "^2.3.5" + "@smithy/service-error-classification" "^2.0.5" + "@smithy/types" "^2.4.0" tslib "^2.5.0" "@smithy/util-stream@^1.0.1": @@ -12805,14 +13151,14 @@ "@smithy/util-utf8" "^2.0.0" tslib "^2.5.0" -"@smithy/util-stream@^2.0.16": - version "2.0.16" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.0.16.tgz#8501e14cfcac70913d2c4c01a8cfbf7fc73bc041" - integrity sha512-b5ZSRh1KzUzC7LoJcpfk7+iXGoRr3WylEfmPd4FnBLm90OwxSB9VgK1fDZwicfYxSEvWHdYXgvvjPtenEYBBhw== +"@smithy/util-stream@^2.0.17": + version "2.0.17" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.0.17.tgz#4c980891b0943e9e64949d7afcf1ec4a7b510ea8" + integrity sha512-fP/ZQ27rRvHsqItds8yB7jerwMpZFTL3QqbQbidUiG0+mttMoKdP0ZqnvM8UK5q0/dfc3/pN7g4XKPXOU7oRWw== dependencies: - "@smithy/fetch-http-handler" "^2.2.3" - "@smithy/node-http-handler" "^2.1.7" - "@smithy/types" "^2.3.5" + "@smithy/fetch-http-handler" "^2.2.4" + "@smithy/node-http-handler" "^2.1.8" + "@smithy/types" "^2.4.0" "@smithy/util-base64" "^2.0.0" "@smithy/util-buffer-from" "^2.0.0" "@smithy/util-hex-encoding" "^2.0.0" @@ -12858,13 +13204,13 @@ "@smithy/types" "^1.1.0" tslib "^2.5.0" -"@smithy/util-waiter@^2.0.1", "@smithy/util-waiter@^2.0.10": - version "2.0.11" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.0.11.tgz#1cef055d557675bb187221b510cd666643dc207a" - integrity sha512-8SJWUl9O1YhjC77EccgltI3q4XZQp3vp9DGEW6o0OdkUcwqm/H4qOLnMkA2n+NDojuM5Iia2jWoCdbluIiG7TA== +"@smithy/util-waiter@^2.0.1", "@smithy/util-waiter@^2.0.10", "@smithy/util-waiter@^2.0.12": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.0.12.tgz#a7348f9fd2bade5f2f3ee7ecf7c43ab86ed244ee" + integrity sha512-3sENmyVa1NnOPoiT2NCApPmu7ukP7S/v7kL9IxNmnygkDldn7/yK0TP42oPJLwB2k3mospNsSePIlqdXEUyPHA== dependencies: - "@smithy/abort-controller" "^2.0.11" - "@smithy/types" "^2.3.5" + "@smithy/abort-controller" "^2.0.12" + "@smithy/types" "^2.4.0" tslib "^2.5.0" "@storybook/addon-a11y@^6.5.15": @@ -14997,9 +15343,9 @@ "@types/istanbul-lib-report" "*" "@types/jest@^29.5.6": - version "29.5.6" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.6.tgz#f4cf7ef1b5b0bfc1aa744e41b24d9cc52533130b" - integrity sha512-/t9NnzkOpXb4Nfvg17ieHE6EeSjDS2SGSpNYfoLbUAeL/EOueU/RSdOWFpfQTXBEM7BguYW1XQ0EbM+6RlIh6w== + version "29.5.7" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.7.tgz#2c0dafe2715dd958a455bc10e2ec3e1ec47b5036" + integrity sha512-HLyetab6KVPSiF+7pFcUyMeLsx25LDNDemw9mGsJBkai/oouwrjTycocSDYopMEwFhN2Y4s9oPyOCZNofgSt2g== dependencies: expect "^29.0.0" pretty-format "^29.0.0" @@ -15024,13 +15370,6 @@ resolved "https://registry.yarnpkg.com/@types/json-stable-stringify/-/json-stable-stringify-1.0.34.tgz#c0fb25e4d957e0ee2e497c1f553d7f8bb668fd75" integrity sha512-s2cfwagOQAS8o06TcwKfr9Wx11dNGbH2E9vJz1cqV+a/LOyhWNLUNd6JSRYNzvB4d29UuJX2M0Dj9vE1T8fRXw== -"@types/json2csv@^5.0.3": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@types/json2csv/-/json2csv-5.0.3.tgz#759514772a90e35b08c10808dedeaf52248af418" - integrity sha512-ZJEv6SzhPhgpBpxZU4n/TZekbZqI4EcyXXRwms1lAITG2kIAtj85PfNYafUOY1zy8bWs5ujaub0GU4copaA0sw== - dependencies: - "@types/node" "*" - "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" @@ -15197,9 +15536,9 @@ integrity sha512-Abq9fBviLV93OiXMu+f6r0elxCzRwc0RC5f99cU892uBITL44pTvgvEqlRlPRi8EGcO1z7Cp8A4d0s/p3J/+Nw== "@types/node@^16.18.39": - version "16.18.59" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.59.tgz#4cdbd631be6d9be266a96fb17b5d0d7ad6bbe26c" - integrity sha512-PJ1w2cNeKUEdey4LiPra0ZuxZFOGvetswE8qHRriV/sUkL5Al4tTmPV9D2+Y/TPIxTHHgxTfRjZVKWhPw/ORhQ== + version "16.18.60" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.60.tgz#0b0f4316906f1bd0e03b640363f67bd4e86958bd" + integrity sha512-ZUGPWx5vKfN+G2/yN7pcSNLkIkXEvlwNaJEd4e0ppX7W2S8XAkdc/37hM4OUNJB9sa0p12AOvGvxL4JCPiz9DA== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -18717,7 +19056,7 @@ commander@^5.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== -commander@^6.1.0, commander@^6.2.1: +commander@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== @@ -25733,15 +26072,6 @@ json-to-pretty-yaml@^1.2.2: remedial "^1.0.7" remove-trailing-spaces "^1.0.6" -json2csv@^5.0.7: - version "5.0.7" - resolved "https://registry.yarnpkg.com/json2csv/-/json2csv-5.0.7.tgz#f3a583c25abd9804be873e495d1e65ad8d1b54ae" - integrity sha512-YRZbUnyaJZLZUJSRi2G/MqahCyRv9n/ds+4oIetjDF3jWQA7AG7iSeKTiZiCNqtMZM7HDyt0e/W6lEnoGEmMGA== - dependencies: - commander "^6.1.0" - jsonparse "^1.3.1" - lodash.get "^4.4.2" - json5@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" @@ -30350,10 +30680,10 @@ react-select-event@^5.5.0: dependencies: "@testing-library/dom" ">=7" -react-select@^5.7.0: - version "5.7.4" - resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.7.4.tgz#d8cad96e7bc9d6c8e2709bdda8f4363c5dd7ea7d" - integrity sha512-NhuE56X+p9QDFh4BgeygHFIvJJszO1i1KSkg/JPcIJrbovyRtI+GuOEa4XzFCEpZRAEoEI8u/cAHK+jG/PgUzQ== +react-select@^5.7.7: + version "5.7.7" + resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.7.7.tgz#dbade9dbf711ef2a181970c10f8ab319ac37fbd0" + integrity sha512-HhashZZJDRlfF/AKj0a0Lnfs3sRdw/46VJIRd8IbB9/Ovr74+ZIwkAdSBjSPXsFMG+u72c5xShqwLSKIJllzqw== dependencies: "@babel/runtime" "^7.12.0" "@emotion/cache" "^11.4.0" @@ -35345,9 +35675,9 @@ zip-stream@^4.1.0: readable-stream "^3.6.0" zod@^3.10.1, zod@^3.11.6: - version "3.22.3" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.3.tgz#2fbc96118b174290d94e8896371c95629e87a060" - integrity sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug== + version "3.22.4" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" + integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== zwitch@^1.0.0: version "1.0.5"