diff --git a/services/app-api/src/launchDarkly/launchDarkly.ts b/services/app-api/src/launchDarkly/launchDarkly.ts index 07880cf2ff..9ec2f5546f 100644 --- a/services/app-api/src/launchDarkly/launchDarkly.ts +++ b/services/app-api/src/launchDarkly/launchDarkly.ts @@ -11,14 +11,12 @@ import { logError } from '../logger' import { setErrorAttributesOnActiveSpan } from '../resolvers/attributeHelper' //Set up default feature flag values used to returned data -const defaultFeatureFlags: FeatureFlagSettings = featureFlagKeys.reduce( - (a, c) => { +const defaultFeatureFlags = (): FeatureFlagSettings => + featureFlagKeys.reduce((a, c) => { const flag = featureFlags[c].flag const defaultValue = featureFlags[c].defaultValue return Object.assign(a, { [flag]: defaultValue }) - }, - {} as FeatureFlagSettings -) + }, {} as FeatureFlagSettings) type LDService = { getFeatureFlag: ( @@ -50,7 +48,8 @@ function offlineLDService(): LDService { `No connection to LaunchDarkly, fallback to offlineLDService with default value for ${flag}`, context.span ) - return defaultFeatureFlags[flag] + const featureFlags = defaultFeatureFlags() + return featureFlags[flag] }, } } diff --git a/services/app-api/src/postgres/contractAndRates/findContractWithHistory.test.ts b/services/app-api/src/postgres/contractAndRates/findContractWithHistory.test.ts index 5601b40fc6..c01208f53d 100644 --- a/services/app-api/src/postgres/contractAndRates/findContractWithHistory.test.ts +++ b/services/app-api/src/postgres/contractAndRates/findContractWithHistory.test.ts @@ -92,9 +92,8 @@ describe('findContract', () => { must(await submitRate(client, rate3.id, stateUser.id, '3.0 create')) // Now, find that contract and assert the history is what we expected - const threeContract = await findContractWithHistory( - client, - contractA.id + const threeContract = must( + await findContractWithHistory(client, contractA.id) ) if (threeContract instanceof Error) { throw threeContract @@ -114,7 +113,9 @@ describe('findContract', () => { must(await submitRate(client, rate2.id, stateUser.id, '2.1 remove')) // Now, find that contract and assert the history is what we expected - const twoContract = await findContractWithHistory(client, contractA.id) + const twoContract = must( + await findContractWithHistory(client, contractA.id) + ) if (twoContract instanceof Error) { throw twoContract } @@ -131,9 +132,8 @@ describe('findContract', () => { must(await submitRate(client, rate1.id, stateUser.id, '1.1 new name')) // Now, find that contract and assert the history is what we expected - const backAgainContract = await findContractWithHistory( - client, - contractA.id + const backAgainContract = must( + await findContractWithHistory(client, contractA.id) ) if (backAgainContract instanceof Error) { throw backAgainContract @@ -159,9 +159,8 @@ describe('findContract', () => { ) // Now, find that contract and assert the history is what we expected - let testingContract = await findContractWithHistory( - client, - contractA.id + let testingContract = must( + await findContractWithHistory(client, contractA.id) ) if (testingContract instanceof Error) { throw testingContract @@ -202,16 +201,17 @@ describe('findContract', () => { ) // Now, find that contract and assert the history is what we expected - testingContract = await findContractWithHistory(client, contractA.id) + testingContract = must( + await findContractWithHistory(client, contractA.id) + ) if (testingContract instanceof Error) { throw testingContract } expect(testingContract.revisions).toHaveLength(8) // Now, find that contract and assert the history is what we expected - const resultingContract = await findContractWithHistory( - client, - contractA.id + const resultingContract = must( + await findContractWithHistory(client, contractA.id) ) if (resultingContract instanceof Error) { throw resultingContract @@ -453,9 +453,8 @@ describe('findContract', () => { ) // Now, find that contract and assert the history is what we expected - const resultingContract = await findContractWithHistory( - client, - contractA.id + const resultingContract = must( + await findContractWithHistory(client, contractA.id) ) if (resultingContract instanceof Error) { throw resultingContract @@ -628,11 +627,7 @@ describe('findContract', () => { throw new Error('Should be impossible to submit twice in a row.') } - const res = await findContractWithHistory(client, contractA.id) - - if (res instanceof Error) { - throw res - } + const res = must(await findContractWithHistory(client, contractA.id)) const revisions = res.revisions.reverse() diff --git a/services/app-api/src/postgres/contractAndRates/findContractWithHistory.ts b/services/app-api/src/postgres/contractAndRates/findContractWithHistory.ts index 344c0646ac..f9b207b846 100644 --- a/services/app-api/src/postgres/contractAndRates/findContractWithHistory.ts +++ b/services/app-api/src/postgres/contractAndRates/findContractWithHistory.ts @@ -1,7 +1,7 @@ import { PrismaTransactionType } from '../prismaTypes' import { ContractType } from '../../domain-models/contractAndRates/contractAndRatesZodSchema' import { updateInfoIncludeUpdater } from '../prismaHelpers' -import { parseContractWithHistory } from './prismaContractWithHistoryConverter' +import { NotFoundError } from '../storeError' // findContractWithHistory returns a ContractType with a full set of // ContractRevisions in reverse chronological order. Each revision is a change to this @@ -10,7 +10,7 @@ import { parseContractWithHistory } from './prismaContractWithHistoryConverter' async function findContractWithHistory( client: PrismaTransactionType, contractID: string -): Promise { +): Promise { try { const contract = await client.contractTable.findFirst({ where: { @@ -48,7 +48,7 @@ async function findContractWithHistory( if (!contract) { const err = `PRISMA ERROR: Cannot find contract with id: ${contractID}` console.error(err) - return new Error(err) + return new NotFoundError(err) } return parseContractWithHistory(contract) diff --git a/services/app-api/src/postgres/contractAndRates/index.ts b/services/app-api/src/postgres/contractAndRates/index.ts new file mode 100644 index 0000000000..a19f8dabd8 --- /dev/null +++ b/services/app-api/src/postgres/contractAndRates/index.ts @@ -0,0 +1,31 @@ +import { insertDraftContract, InsertContractArgsType } from './insertContract' +import { findContractWithHistory } from './findContractWithHistory' +import { findDraftContract } from './findDraftContract' +import { + contractFormDataToDomainModel, + convertUpdateInfoToDomainModel, + draftContractRevToDomainModel, + draftContractToDomainModel, + contractRevToDomainModel, + draftRatesToDomainModel, + ratesRevisionsToDomainModel, + contractWithHistoryToDomainModel, + getContractStatus, +} from './prismaToDomainModel' + +export { + insertDraftContract, + findContractWithHistory, + findDraftContract, + contractFormDataToDomainModel, + convertUpdateInfoToDomainModel, + draftContractRevToDomainModel, + draftContractToDomainModel, + contractRevToDomainModel, + draftRatesToDomainModel, + ratesRevisionsToDomainModel, + contractWithHistoryToDomainModel, + getContractStatus, +} + +export type { InsertContractArgsType } diff --git a/services/app-api/src/postgres/contractAndRates/prismaContractWithHistoryConverter.ts b/services/app-api/src/postgres/contractAndRates/prismaContractWithHistoryConverter.ts index 1c5c838e15..d0e5658538 100644 --- a/services/app-api/src/postgres/contractAndRates/prismaContractWithHistoryConverter.ts +++ b/services/app-api/src/postgres/contractAndRates/prismaContractWithHistoryConverter.ts @@ -87,6 +87,9 @@ function contractWithHistoryToDomainModel( continue } + // This initial entry is the first history record of this contract revision. + // Then the for loop with it's rateRevisions are additional history records for each change in rate revisions. + // This is why allRevisionSets could have more entries than contract revisions. const initialEntry: ContractRevisionSet = { contractRev, submitInfo: contractRev.submitInfo, @@ -97,6 +100,7 @@ function contractWithHistoryToDomainModel( allRevisionSets.push(initialEntry) let lastEntry = initialEntry + // Now we construct a revision history for each change in rate revisions. // go through every rate revision in the join table in time order and construct a revisionSet // with (or without) the new rate revision in it. for (const rateRev of contractRev.rateRevisions) { @@ -142,11 +146,9 @@ function contractWithHistoryToDomainModel( const revisions = contractRevToDomainModel(allRevisionSets).reverse() - const contractStatus = getContractStatus(contract.revisions) - return { id: contract.id, - status: contractStatus, + status: getContractStatus(contract.revisions), stateCode: contract.stateCode, stateNumber: contract.stateNumber, revisions: revisions, diff --git a/services/app-api/src/postgres/contractAndRates/submitContract.test.ts b/services/app-api/src/postgres/contractAndRates/submitContract.test.ts index b4688f87eb..a6ed1034cd 100644 --- a/services/app-api/src/postgres/contractAndRates/submitContract.test.ts +++ b/services/app-api/src/postgres/contractAndRates/submitContract.test.ts @@ -6,6 +6,7 @@ import { insertDraftRate } from './insertRate' import { submitRate } from './submitRate' import { updateDraftRate } from './updateDraftRate' import { must, createInsertContractData } from '../../testHelpers' +import { NotFoundError } from '../storeError' describe('submitContract', () => { it('creates a submission from a draft', async () => { @@ -23,9 +24,13 @@ describe('submitContract', () => { }) // submitting before there's a draft should be an error - expect( - await submitContract(client, '1111', '1111', 'failed submit') - ).toBeInstanceOf(Error) + const submitError = await submitContract( + client, + '1111', + '1111', + 'failed submit' + ) + expect(submitError).toBeInstanceOf(NotFoundError) // create a draft contract const draftContractData = createInsertContractData({ @@ -61,15 +66,15 @@ describe('submitContract', () => { }) ) - // resubmitting should be an error - expect( - await submitContract( - client, - contractA.id, - stateUser.id, - 'initial submit' - ) - ).toBeInstanceOf(Error) + const resubmitStoreError = await submitContract( + client, + contractA.id, + stateUser.id, + 'initial submit' + ) + + // resubmitting should be a store error + expect(resubmitStoreError).toBeInstanceOf(NotFoundError) }) it('invalidates old revisions when new revisions are submitted', async () => { diff --git a/services/app-api/src/postgres/contractAndRates/submitContract.ts b/services/app-api/src/postgres/contractAndRates/submitContract.ts index 9987204109..e62153049d 100644 --- a/services/app-api/src/postgres/contractAndRates/submitContract.ts +++ b/services/app-api/src/postgres/contractAndRates/submitContract.ts @@ -1,6 +1,7 @@ import { PrismaClient } from '@prisma/client' import { ContractType } from '../../domain-models/contractAndRates/contractAndRatesZodSchema' import { findContractWithHistory } from './findContractWithHistory' +import { NotFoundError } from '../storeError' // Update the given revision // * invalidate relationships of previous revision @@ -10,7 +11,7 @@ async function submitContract( contractID: string, submittedByUserID: string, submitReason: string -): Promise { +): Promise { const groupTime = new Date() try { @@ -38,9 +39,11 @@ async function submitContract( }, }, }) + if (!currentRev) { - console.error('No Unsubmitted Rev!') - return new Error('cant find the current rev to submit') + const err = `PRISMA ERROR: Cannot find the current rev to submit with contract id: ${contractID}` + console.error(err) + return new NotFoundError(err) } const submittedRateRevisions = currentRev.draftRates.map( @@ -149,7 +152,7 @@ async function submitContract( return await findContractWithHistory(tx, contractID) }) } catch (err) { - console.error('SUBMITeeee PRISMA CONTRACT ERR', err) + console.error('SUBMIT PRISMA CONTRACT ERR', err) return err } } diff --git a/services/app-api/src/postgres/contractAndRates/unlockContract.ts b/services/app-api/src/postgres/contractAndRates/unlockContract.ts index 928d0dfc03..e579a2adb7 100644 --- a/services/app-api/src/postgres/contractAndRates/unlockContract.ts +++ b/services/app-api/src/postgres/contractAndRates/unlockContract.ts @@ -1,6 +1,7 @@ import { PrismaClient } from '@prisma/client' import { ContractType } from '../../domain-models/contractAndRates/contractAndRatesZodSchema' import { findContractWithHistory } from './findContractWithHistory' +import { NotFoundError } from '../storeError' // Unlock the given contract // * copy form data @@ -10,7 +11,7 @@ async function unlockContract( contractID: string, unlockedByUserID: string, unlockReason: string -): Promise { +): Promise { const groupTime = new Date() try { @@ -36,12 +37,9 @@ async function unlockContract( }, }) if (!currentRev) { - console.error( - 'Programming Error: cannot find the current revision to submit' - ) - return new Error( - 'Programming Error: cannot find the current revision to submit' - ) + const err = `PRISMA ERROR: Cannot find the current revision to unlock with contract id: ${contractID}` + console.error(err) + return new NotFoundError(err) } if (!currentRev.submitInfoID) { @@ -95,7 +93,7 @@ async function unlockContract( return findContractWithHistory(tx, contractID) }) } catch (err) { - console.error('SUBMIT PRISMA CONTRACT ERR', err) + console.error('UNLOCK PRISMA CONTRACT ERR', err) return err } } diff --git a/services/app-api/src/postgres/contractAndRates/updateDraftContract.ts b/services/app-api/src/postgres/contractAndRates/updateDraftContract.ts index 73b20ebb71..79f50dccbf 100644 --- a/services/app-api/src/postgres/contractAndRates/updateDraftContract.ts +++ b/services/app-api/src/postgres/contractAndRates/updateDraftContract.ts @@ -6,6 +6,7 @@ import { } from '@prisma/client' import { ContractType } from '../../domain-models/contractAndRates/contractAndRatesZodSchema' import { findContractWithHistory } from './findContractWithHistory' +import { NotFoundError } from '../storeError' type UpdateContractArgsType = { populationCovered: PopulationCoverageType @@ -24,7 +25,7 @@ async function updateDraftContract( contractID: string, formData: UpdateContractArgsType, rateIDs: string[] -): Promise { +): Promise { try { // Given all the Rates associated with this draft, find the most recent submitted // rateRevision to update. @@ -35,8 +36,9 @@ async function updateDraftContract( }, }) if (!currentRev) { - console.error('No Draft Rev!') - return new Error('cant find a draft rev to submit') + const err = `PRISMA ERROR: Cannot find the current rev to update with contract id: ${contractID}` + console.error(err) + return new NotFoundError(err) } await client.contractRevisionTable.update({ @@ -67,7 +69,7 @@ async function updateDraftContract( return findContractWithHistory(client, contractID) } catch (err) { - console.error('SUBMIT PRISMA CONTRACT ERR', err) + console.error('UPDATE PRISMA CONTRACT ERR', err) return err } } diff --git a/services/app-api/src/postgres/index.ts b/services/app-api/src/postgres/index.ts index ec79d0fa33..734bfd32f5 100644 --- a/services/app-api/src/postgres/index.ts +++ b/services/app-api/src/postgres/index.ts @@ -3,5 +3,5 @@ export { InsertHealthPlanPackageArgsType } from './healthPlanPackage' export { InsertUserArgsType } from './user' export { NewPostgresStore, Store } from './postgresStore' export { NewPrismaClient } from './prismaClient' -export { isStoreError, StoreError } from './storeError' +export { isStoreError, StoreError, NotFoundError } from './storeError' export { findStatePrograms } from './state/findStatePrograms' diff --git a/services/app-api/src/postgres/postgresStore.ts b/services/app-api/src/postgres/postgresStore.ts index a5defc4649..34c3a0af6b 100644 --- a/services/app-api/src/postgres/postgresStore.ts +++ b/services/app-api/src/postgres/postgresStore.ts @@ -43,11 +43,16 @@ import { insertQuestionResponse, } from './questionResponse' import { findAllSupportedStates } from './state' -import { ContractType } from '../domain-models/contractAndRates/contractAndRatesZodSchema' +import { + ContractRevisionType, + ContractType, +} from '../domain-models/contractAndRates/contractAndRatesZodSchema' import { InsertContractArgsType, insertDraftContract, -} from './contractAndRates/insertContract' + findContractWithHistory, + findDraftContract, +} from './contractAndRates' type Store = { findPrograms: ( @@ -122,9 +127,20 @@ type Store = { user: StateUserType ) => Promise + /** + * Rates database refactor prisma functions + */ insertDraftContract: ( args: InsertContractArgsType ) => Promise + + findContractWithHistory: ( + contractID: string + ) => Promise + + findDraftContract: ( + contractID: string + ) => Promise } function NewPostgresStore(client: PrismaClient): Store { @@ -183,6 +199,9 @@ function NewPostgresStore(client: PrismaClient): Store { * Rates database refactor prisma functions */ insertDraftContract: (args) => insertDraftContract(client, args), + findContractWithHistory: (args) => + findContractWithHistory(client, args), + findDraftContract: (args) => findDraftContract(client, args), } } diff --git a/services/app-api/src/postgres/storeError.ts b/services/app-api/src/postgres/storeError.ts index 543fb05fd7..25d2b61aaa 100644 --- a/services/app-api/src/postgres/storeError.ts +++ b/services/app-api/src/postgres/storeError.ts @@ -11,6 +11,7 @@ const StoreErrorCodes = [ 'USER_FORMAT_ERROR', 'UNEXPECTED_EXCEPTION', 'WRONG_STATUS', + 'NOT_FOUND_ERROR', ] as const type StoreErrorCode = (typeof StoreErrorCodes)[number] // iterable union type @@ -53,12 +54,11 @@ const convertPrismaErrorToStoreError = (prismaErr: unknown): StoreError => { // An operation failed because it depends on one or more records // that were required but not found. - // This is also returned when the userID doesn't exist in trying to connect - // a user and some states if (prismaErr.code === 'P2025') { return { - code: 'INSERT_ERROR', - message: 'insert failed because required record not found', + code: 'NOT_FOUND_ERROR', + message: + 'An operation failed because it depends on one or more records that were required but not found.', } } @@ -90,4 +90,17 @@ const convertPrismaErrorToStoreError = (prismaErr: unknown): StoreError => { } } -export { StoreError, isStoreError, convertPrismaErrorToStoreError } +class NotFoundError extends Error { + constructor(message: string) { + super(message) + + Object.setPrototypeOf(this, NotFoundError.prototype) + } +} + +export { + NotFoundError, + StoreError, + isStoreError, + convertPrismaErrorToStoreError, +} diff --git a/services/app-api/src/resolvers/configureResolvers.ts b/services/app-api/src/resolvers/configureResolvers.ts index 1f7f396fa6..91d0ee8f53 100644 --- a/services/app-api/src/resolvers/configureResolvers.ts +++ b/services/app-api/src/resolvers/configureResolvers.ts @@ -38,7 +38,10 @@ export function configureResolvers( DateTime: GraphQLDateTime, Query: { fetchCurrentUser: fetchCurrentUserResolver(), - fetchHealthPlanPackage: fetchHealthPlanPackageResolver(store), + fetchHealthPlanPackage: fetchHealthPlanPackageResolver( + store, + launchDarkly + ), indexHealthPlanPackages: indexHealthPlanPackagesResolver(store), indexUsers: indexUsersResolver(store), indexQuestions: indexQuestionsResolver(store), diff --git a/services/app-api/src/resolvers/healthPlanPackage/createHealthPlanPackage.ts b/services/app-api/src/resolvers/healthPlanPackage/createHealthPlanPackage.ts index 10f5ebfcc2..37891d3b4c 100644 --- a/services/app-api/src/resolvers/healthPlanPackage/createHealthPlanPackage.ts +++ b/services/app-api/src/resolvers/healthPlanPackage/createHealthPlanPackage.ts @@ -113,9 +113,7 @@ export function createHealthPlanPackageResolver( logSuccess('createHealthPlanPackage') setSuccessAttributesOnActiveSpan(span) - return { - pkg, - } + return { pkg } } else { const pkgResult = await store.insertHealthPlanPackage(insertArgs) if (isStoreError(pkgResult)) { diff --git a/services/app-api/src/resolvers/healthPlanPackage/fetchHealthPlanPackage.test.ts b/services/app-api/src/resolvers/healthPlanPackage/fetchHealthPlanPackage.test.ts index e5318d77e8..480123c9c2 100644 --- a/services/app-api/src/resolvers/healthPlanPackage/fetchHealthPlanPackage.test.ts +++ b/services/app-api/src/resolvers/healthPlanPackage/fetchHealthPlanPackage.test.ts @@ -9,6 +9,7 @@ import { resubmitTestHealthPlanPackage, } from '../../testHelpers/gqlHelpers' import { testCMSUser, testStateUser } from '../../testHelpers/userHelpers' +import { testLDService } from '../../testHelpers/launchDarklyHelpers' describe('fetchHealthPlanPackage', () => { const testUserCMS = testCMSUser() @@ -48,6 +49,10 @@ describe('fetchHealthPlanPackage', () => { throw subData } + // When not using tables, the protobuf ID is used to as the HPP id when inserting a new HPP in the tables. + // So HPP id and proto id are the same. + // Now that our form data is in postgres contract revision table, the ids are not the same. So this expect is + // removed when flag is on. expect(subData.id).toEqual(createdID) expect(subData.programIDs).toEqual([ '5c10fe9f-bec9-416f-a20c-718b152ad633', @@ -63,7 +68,7 @@ describe('fetchHealthPlanPackage', () => { ]) }) - it('returns nothing if the ID doesnt exist', async () => { + it('returns error if the ID doesnt exist', async () => { const server = await constructTestPostgresServer() // then see if we can fetch that same submission @@ -76,10 +81,17 @@ describe('fetchHealthPlanPackage', () => { variables: { input }, }) - expect(result.errors).toBeUndefined() + expect(result.errors).toBeDefined() + if (result.errors === undefined) { + throw new Error('annoying jest typing behavior') + } + expect(result.errors).toHaveLength(1) + const resultErr = result.errors[0] - const resultSub = result.data?.fetchHealthPlanPackage.pkg - expect(resultSub).toBeNull() + expect(resultErr?.message).toBe( + `Issue finding a package with id ${input.pkgID}. Message: Result was undefined.` + ) + expect(resultErr?.extensions?.code).toBe('NOT_FOUND') }) it('returns multiple submissions payload with multiple revisions', async () => { @@ -377,3 +389,79 @@ describe('fetchHealthPlanPackage', () => { } }) }) + +// Currently we cannot set up fetchHPP tests like createHPP because not all resolvers have been migrated yet. +// Once all resolvers are migrated and tests in this describe block mirrors the ones above, we can then use describe.each +describe('fetchHealthPlanPackage rates-db-refactor flag on tests', () => { + const mockLDService = testLDService({ 'rates-db-refactor': true }) + it('returns package with one revision', async () => { + const server = await constructTestPostgresServer({ + ldService: mockLDService, + }) + + // First, create a new submission + const stateSubmission = await createTestHealthPlanPackage(server) + + const createdID = stateSubmission.id + + // then see if we can fetch that same submission + const input = { + pkgID: createdID, + } + + const result = await server.executeOperation({ + query: FETCH_HEALTH_PLAN_PACKAGE, + variables: { input }, + }) + + expect(result.errors).toBeUndefined() + + const resultSub = result.data?.fetchHealthPlanPackage.pkg + expect(resultSub.id).toEqual(createdID) + expect(resultSub.revisions).toHaveLength(1) + + const revision = resultSub.revisions[0].node + + const subData = base64ToDomain(revision.formDataProto) + if (subData instanceof Error) { + throw subData + } + + // Expect the created revision and the fetchHPP revision are the same. + expect(subData.id).toEqual(stateSubmission.revisions[0].node.id) + + expect(subData.programIDs).toEqual([ + '5c10fe9f-bec9-416f-a20c-718b152ad633', + ]) + expect(subData.submissionDescription).toBe('A created submission') + expect(subData.documents).toEqual([]) + }) + + it('returns error if the ID doesnt exist', async () => { + const server = await constructTestPostgresServer({ + ldService: mockLDService, + }) + + // then see if we can fetch that same submission + const input = { + pkgID: 'BOGUS-ID', + } + + const result = await server.executeOperation({ + query: FETCH_HEALTH_PLAN_PACKAGE, + variables: { input }, + }) + + expect(result.errors).toBeDefined() + if (result.errors === undefined) { + throw new Error('annoying jest typing behavior') + } + expect(result.errors).toHaveLength(1) + const resultErr = result.errors[0] + + expect(resultErr?.message).toBe( + `Issue finding a contract with history with id ${input.pkgID}. Message: PRISMA ERROR: Cannot find contract with id: BOGUS-ID` + ) + expect(resultErr?.extensions?.code).toBe('NOT_FOUND') + }) +}) diff --git a/services/app-api/src/resolvers/healthPlanPackage/fetchHealthPlanPackage.ts b/services/app-api/src/resolvers/healthPlanPackage/fetchHealthPlanPackage.ts index 4955d41e7c..d0511de994 100644 --- a/services/app-api/src/resolvers/healthPlanPackage/fetchHealthPlanPackage.ts +++ b/services/app-api/src/resolvers/healthPlanPackage/fetchHealthPlanPackage.ts @@ -5,6 +5,7 @@ import { isAdminUser, HealthPlanPackageType, packageStatus, + convertContractToUnlockedHealthPlanPackage, } from '../../domain-models' import { isHelpdeskUser } from '../../domain-models/user' import { QueryResolvers, State } from '../../gen/gqlServer' @@ -15,33 +16,128 @@ import { setResolverDetailsOnActiveSpan, setSuccessAttributesOnActiveSpan, } from '../attributeHelper' +import { LDService } from '../../launchDarkly/launchDarkly' +import { GraphQLError } from 'graphql/index' +import { NotFoundError } from '../../postgres' export function fetchHealthPlanPackageResolver( - store: Store + store: Store, + launchDarkly: LDService ): QueryResolvers['fetchHealthPlanPackage'] { return async (_parent, { input }, context) => { const { user, span } = context setResolverDetailsOnActiveSpan('fetchHealthPlanPackage', user, span) - // fetch from the store - const result = await store.findHealthPlanPackage(input.pkgID) - - if (isStoreError(result)) { - const errMessage = `Issue finding a package of type ${result.code}. Message: ${result.message}` - logError('fetchHealthPlanPackage', errMessage) - setErrorAttributesOnActiveSpan(errMessage, span) - throw new Error(errMessage) - } - if (result === undefined) { - const errMessage = `Issue finding a package with id ${input.pkgID}. Message: Result was undefined ` - logError('fetchHealthPlanPackage', errMessage) - setErrorAttributesOnActiveSpan(errMessage, span) - return { - pkg: undefined, + const ratesDatabaseRefactor = await launchDarkly.getFeatureFlag( + context, + 'rates-db-refactor' + ) + + let pkg: HealthPlanPackageType + + // Here is where we flag finding health plan + if (ratesDatabaseRefactor) { + // Health plans can be in two states Draft and Submitted, and we have 2 postgres functions for each. + // findContractWithHistory gets all submitted revisions and findDraftContract gets just the one draft revision + // We don't have function that gets all revisions including draft. So we have to call both functions when a + // contract is DRAFT. + const contractWithHistory = await store.findContractWithHistory( + input.pkgID + ) + + if (contractWithHistory instanceof Error) { + const errMessage = `Issue finding a contract with history with id ${input.pkgID}. Message: ${contractWithHistory.message}` + logError('fetchHealthPlanPackage', errMessage) + setErrorAttributesOnActiveSpan(errMessage, span) + + if (contractWithHistory instanceof NotFoundError) { + throw new GraphQLError(errMessage, { + extensions: { + code: 'NOT_FOUND', + cause: 'DB_ERROR', + }, + }) + } + + throw new GraphQLError(errMessage, { + extensions: { + code: 'INTERNAL_SERVER_ERROR', + cause: 'DB_ERROR', + }, + }) + } + + if (contractWithHistory.status === 'DRAFT') { + const draftRevision = await store.findDraftContract(input.pkgID) + if (draftRevision instanceof Error) { + // If draft returns undefined we error because a draft submission should always have a draft revision. + const errMessage = `Issue finding a draft contract with id ${input.pkgID}. Message: ${draftRevision.message}` + logError('fetchHealthPlanPackage', errMessage) + setErrorAttributesOnActiveSpan(errMessage, span) + throw new GraphQLError(errMessage, { + extensions: { + code: 'INTERNAL_SERVER_ERROR', + cause: 'DB_ERROR', + }, + }) + } + + if (draftRevision === undefined) { + const errMessage = `Issue finding a draft contract with id ${input.pkgID}. Message: Result was undefined.` + logError('fetchHealthPlanPackage', errMessage) + setErrorAttributesOnActiveSpan(errMessage, span) + throw new GraphQLError(errMessage, { + extensions: { + code: 'NOT_FOUND', + cause: 'DB_ERROR', + }, + }) + } + + // Pushing in the draft revision, so it would be first in the array of revisions. + contractWithHistory.revisions.push(draftRevision) } - } - const pkg: HealthPlanPackageType = result + const convertedPkg = + convertContractToUnlockedHealthPlanPackage(contractWithHistory) + + if (convertedPkg instanceof Error) { + const errMessage = `Issue converting contract. Message: ${convertedPkg.message}` + logError('fetchHealthPlanPackage', errMessage) + setErrorAttributesOnActiveSpan(errMessage, span) + throw new GraphQLError(errMessage, { + extensions: { + code: 'INTERNAL_SERVER_ERROR', + cause: 'PROTO_DECODE_ERROR', + }, + }) + } + + pkg = convertedPkg + } else { + const result = await store.findHealthPlanPackage(input.pkgID) + + if (isStoreError(result)) { + const errMessage = `Issue finding a package of type ${result.code}. Message: ${result.message}` + logError('fetchHealthPlanPackage', errMessage) + setErrorAttributesOnActiveSpan(errMessage, span) + throw new Error(errMessage) + } + + if (result === undefined) { + const errMessage = `Issue finding a package with id ${input.pkgID}. Message: Result was undefined.` + logError('fetchHealthPlanPackage', errMessage) + setErrorAttributesOnActiveSpan(errMessage, span) + throw new GraphQLError(errMessage, { + extensions: { + code: 'NOT_FOUND', + cause: 'DB_ERROR', + }, + }) + } + + pkg = result + } // Authorization CMS users can view, state users can only view if the state matches if (isStateUser(context.user)) { diff --git a/services/app-api/src/resolvers/questionResponse/createQuestionResponse.test.ts b/services/app-api/src/resolvers/questionResponse/createQuestionResponse.test.ts index abd4eee846..a82028ba8d 100644 --- a/services/app-api/src/resolvers/questionResponse/createQuestionResponse.test.ts +++ b/services/app-api/src/resolvers/questionResponse/createQuestionResponse.test.ts @@ -79,7 +79,7 @@ describe('createQuestionResponse', () => { expect(createdResponse.errors).toBeDefined() expect(assertAnErrorCode(createdResponse)).toBe('BAD_USER_INPUT') expect(assertAnError(createdResponse).message).toBe( - `Issue creating question response for question ${fakeID} of type INSERT_ERROR. Message: insert failed because required record not found` + `Issue creating question response for question ${fakeID} of type NOT_FOUND_ERROR. Message: An operation failed because it depends on one or more records that were required but not found.` ) }) diff --git a/services/app-api/src/resolvers/user/updateCMSUser.ts b/services/app-api/src/resolvers/user/updateCMSUser.ts index f819483e01..23c59c977f 100644 --- a/services/app-api/src/resolvers/user/updateCMSUser.ts +++ b/services/app-api/src/resolvers/user/updateCMSUser.ts @@ -106,7 +106,7 @@ export function updateCMSUserResolver( 'Updated user assignments' // someday might have a note field and make this a param ) if (isStoreError(result)) { - if (result.code === 'INSERT_ERROR') { + if (result.code === 'NOT_FOUND_ERROR') { const errMsg = 'cmsUserID does not exist' logError('updateCmsUser', errMsg) setErrorAttributesOnActiveSpan(errMsg, span) diff --git a/services/app-api/src/testHelpers/errorHelpers.ts b/services/app-api/src/testHelpers/errorHelpers.ts index 30275a9b56..505d93ac1a 100644 --- a/services/app-api/src/testHelpers/errorHelpers.ts +++ b/services/app-api/src/testHelpers/errorHelpers.ts @@ -1,8 +1,14 @@ // For use in TESTS only. Throws a returned error -function must(maybeErr: T | Error): T { +import { isStoreError, StoreError } from '../postgres' + +function must(maybeErr: T | Error | StoreError): T { if (maybeErr instanceof Error) { throw maybeErr } + + if (isStoreError(maybeErr)) { + throw maybeErr + } return maybeErr } diff --git a/services/app-api/src/testHelpers/launchDarklyHelpers.ts b/services/app-api/src/testHelpers/launchDarklyHelpers.ts index 10e7228288..2d7b4d497f 100644 --- a/services/app-api/src/testHelpers/launchDarklyHelpers.ts +++ b/services/app-api/src/testHelpers/launchDarklyHelpers.ts @@ -7,7 +7,7 @@ import { import { defaultFeatureFlags } from '../launchDarkly/launchDarkly' function testLDService(mockFeatureFlags?: FeatureFlagSettings): LDService { - const featureFlags = defaultFeatureFlags + const featureFlags = defaultFeatureFlags() //Update featureFlags with mock flag values. if (mockFeatureFlags) { diff --git a/services/app-api/src/testHelpers/storeHelpers.ts b/services/app-api/src/testHelpers/storeHelpers.ts index fc3811c7a2..88a12605d2 100644 --- a/services/app-api/src/testHelpers/storeHelpers.ts +++ b/services/app-api/src/testHelpers/storeHelpers.ts @@ -101,6 +101,16 @@ function mockStoreThatErrors(): Store { 'UNEXPECTED_EXCEPTION: This error came from the generic store with errors mock' ) }, + findContractWithHistory: async (_ID) => { + return new Error( + 'UNEXPECTED_EXCEPTION: This error came from the generic store with errors mock' + ) + }, + findDraftContract: async (_ID) => { + return new Error( + 'UNEXPECTED_EXCEPTION: This error came from the generic store with errors mock' + ) + }, } } diff --git a/services/app-graphql/src/schema.graphql b/services/app-graphql/src/schema.graphql index e61739561b..4740511a71 100644 --- a/services/app-graphql/src/schema.graphql +++ b/services/app-graphql/src/schema.graphql @@ -264,7 +264,7 @@ input FetchHealthPlanPackageInput { type FetchHealthPlanPackagePayload { "A single HealthPlanPackage" - pkg: HealthPlanPackage + pkg: HealthPlanPackage! } type HealthPlanPackageEdge { diff --git a/services/app-web/src/pages/StateSubmission/StateSubmissionForm.test.tsx b/services/app-web/src/pages/StateSubmission/StateSubmissionForm.test.tsx index ec58313c78..f029eca5b0 100644 --- a/services/app-web/src/pages/StateSubmission/StateSubmissionForm.test.tsx +++ b/services/app-web/src/pages/StateSubmission/StateSubmissionForm.test.tsx @@ -488,7 +488,7 @@ describe('StateSubmissionForm', () => { }) }) - it('shows a generic 404 page when package is undefined', async () => { + it('shows a generic 404 page when package is not found', async () => { renderWithProviders( { if (fetchResult.status === 'ERROR') { const err = fetchResult.error console.error('Error from API fetch', fetchResult.error) + if (err instanceof ApolloError) { handleApolloError(err, true) - } else { - recordJSException(err) + if (err.graphQLErrors[0]?.extensions?.code === 'NOT_FOUND') { + return + } } + + recordJSException(err) return // api failure or protobuf decode failure } const { data, revisionsLookup } = fetchResult const pkg = data.fetchHealthPlanPackage.pkg - // fetchHPP returns null if no package is found with the given ID - if (!pkg) { - return - } - // pull out the latest revision and document lookups const latestRevision = pkg.revisions[0].node const formDataFromLatestRevision = diff --git a/services/app-web/src/pages/SubmissionRevisionSummary/SubmissionRevisionSummary.tsx b/services/app-web/src/pages/SubmissionRevisionSummary/SubmissionRevisionSummary.tsx index 691e7a1645..3ce975b62b 100644 --- a/services/app-web/src/pages/SubmissionRevisionSummary/SubmissionRevisionSummary.tsx +++ b/services/app-web/src/pages/SubmissionRevisionSummary/SubmissionRevisionSummary.tsx @@ -54,20 +54,19 @@ export const SubmissionRevisionSummary = (): React.ReactElement => { console.error('Error from API fetch', fetchResult.error) if (err instanceof ApolloError) { handleApolloError(err, true) - } else { - recordJSException(err) + + if (err.graphQLErrors[0]?.extensions?.code === 'NOT_FOUND') { + return + } } + + recordJSException(err) return // api failure or protobuf decode failure } const { data, revisionsLookup, documentDates } = fetchResult const pkg = data.fetchHealthPlanPackage.pkg - // fetchHPP returns null if no package is found with the given ID - if (!pkg) { - return - } - //We offset version by +1 of index, remove offset to find revision in revisions const revisionIndex = Number(revisionVersion) - 1 //Reversing revisions to get correct submission order diff --git a/services/app-web/src/pages/SubmissionSideNav/SubmissionSideNav.test.tsx b/services/app-web/src/pages/SubmissionSideNav/SubmissionSideNav.test.tsx index b6b3860627..ac9b7e42b4 100644 --- a/services/app-web/src/pages/SubmissionSideNav/SubmissionSideNav.test.tsx +++ b/services/app-web/src/pages/SubmissionSideNav/SubmissionSideNav.test.tsx @@ -493,7 +493,7 @@ describe('SubmissionSideNav', () => { expect(await screen.findByText('System error')).toBeInTheDocument() }) - it('shows a generic 404 page when package is undefined', async () => { + it('shows a generic 404 page when package is not found', async () => { renderWithProviders( }> diff --git a/services/app-web/src/pages/SubmissionSideNav/SubmissionSideNav.tsx b/services/app-web/src/pages/SubmissionSideNav/SubmissionSideNav.tsx index cbcd0eae30..aac7193e37 100644 --- a/services/app-web/src/pages/SubmissionSideNav/SubmissionSideNav.tsx +++ b/services/app-web/src/pages/SubmissionSideNav/SubmissionSideNav.tsx @@ -75,9 +75,13 @@ export const SubmissionSideNav = () => { console.error('Error from API fetch', fetchResult.error) if (err instanceof ApolloError) { handleApolloError(err, true) - } else { - recordJSException(err) + + if (err.graphQLErrors[0]?.extensions?.code === 'NOT_FOUND') { + return + } } + + recordJSException(err) return // api failure or protobuf decode failure } @@ -97,10 +101,6 @@ export const SubmissionSideNav = () => { return } - // fetchHPP with questions returns null if no package or questions is found with the given ID - if (!pkg) { - return - } const submissionStatus = pkg.status const isCMSUser = loggedInUser?.role === 'CMS_USER' diff --git a/services/app-web/src/testHelpers/apolloMocks/healthPlanPackageGQLMock.ts b/services/app-web/src/testHelpers/apolloMocks/healthPlanPackageGQLMock.ts index 60f2ec88b8..9702f12d68 100644 --- a/services/app-web/src/testHelpers/apolloMocks/healthPlanPackageGQLMock.ts +++ b/services/app-web/src/testHelpers/apolloMocks/healthPlanPackageGQLMock.ts @@ -63,17 +63,22 @@ const fetchHealthPlanPackageMockSuccess = ({ const fetchHealthPlanPackageMockNotFound = ({ id, }: fetchHealthPlanPackageMockProps): MockedResponse => { + const graphQLError = new GraphQLError( + 'Issue finding a package with id a6039ed6-39cc-4814-8eaa-0c99f25e325d. Message: Result was undefined.', + { + extensions: { + code: 'NOT_FOUND', + }, + } + ) + return { request: { query: FetchHealthPlanPackageDocument, variables: { input: { pkgID: id } }, }, result: { - data: { - fetchHealthPlanPackage: { - pkg: undefined, - }, - }, + errors: [graphQLError], }, } } diff --git a/services/app-web/src/testHelpers/apolloMocks/questionResponseGQLMock.ts b/services/app-web/src/testHelpers/apolloMocks/questionResponseGQLMock.ts index 326f8a9613..797985f20d 100644 --- a/services/app-web/src/testHelpers/apolloMocks/questionResponseGQLMock.ts +++ b/services/app-web/src/testHelpers/apolloMocks/questionResponseGQLMock.ts @@ -13,6 +13,7 @@ import { } from '../../gen/gqlClient' import { mockValidCMSUser } from './userGQLMock' import { mockSubmittedHealthPlanPackage, mockQuestionsPayload } from './' +import { GraphQLError } from 'graphql' type fetchStateHealthPlanPackageWithQuestionsProps = { stateSubmission?: HealthPlanPackage | Partial @@ -109,17 +110,22 @@ const fetchStateHealthPlanPackageWithQuestionsMockSuccess = ({ const fetchStateHealthPlanPackageWithQuestionsMockNotFound = ({ id, }: fetchStateHealthPlanPackageWithQuestionsProps): MockedResponse => { + const graphQLError = new GraphQLError( + 'Issue finding a package with id a6039ed6-39cc-4814-8eaa-0c99f25e325d. Message: Result was undefined.', + { + extensions: { + code: 'NOT_FOUND', + }, + } + ) + return { request: { query: FetchHealthPlanPackageWithQuestionsDocument, variables: { input: { pkgID: id } }, }, result: { - data: { - fetchHealthPlanPackage: { - pkg: undefined, - }, - }, + errors: [graphQLError], }, } } diff --git a/yarn.lock b/yarn.lock index 164a3e03e5..275fbba6f8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -802,45 +802,45 @@ tslib "^1.8.0" "@aws-sdk/client-amplify@^3.226.0", "@aws-sdk/client-amplify@^3.294.0": - version "3.370.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-amplify/-/client-amplify-3.370.0.tgz#66e324f5d2383b07ee8ac3eb881bb1941f9752b4" - integrity sha512-0CWB2Yfez8PT8cd3b7QUZ1s970cL2DHRBmQoVgg/h1aC6yOaRGxBBtLp7mFGnDcdYtTrys3VYMcGQqKJ3viQGQ== + version "3.382.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-amplify/-/client-amplify-3.382.0.tgz#e5bcfcc3c0c35a959e54fc456af7ea17fc69a6a2" + integrity sha512-Q+QDLvq35j/HD2/LMi85RIt/JztACrnr+ie7jOS155EQWuwnqUZ4zrHHFC3WtVOYcDAqgyQW6bMn7mHgLmWZ5g== dependencies: "@aws-crypto/sha256-browser" "3.0.0" "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.370.0" - "@aws-sdk/credential-provider-node" "3.370.0" - "@aws-sdk/middleware-host-header" "3.370.0" - "@aws-sdk/middleware-logger" "3.370.0" - "@aws-sdk/middleware-recursion-detection" "3.370.0" - "@aws-sdk/middleware-signing" "3.370.0" - "@aws-sdk/middleware-user-agent" "3.370.0" - "@aws-sdk/types" "3.370.0" - "@aws-sdk/util-endpoints" "3.370.0" - "@aws-sdk/util-user-agent-browser" "3.370.0" - "@aws-sdk/util-user-agent-node" "3.370.0" - "@smithy/config-resolver" "^1.0.1" - "@smithy/fetch-http-handler" "^1.0.1" - "@smithy/hash-node" "^1.0.1" - "@smithy/invalid-dependency" "^1.0.1" - "@smithy/middleware-content-length" "^1.0.1" - "@smithy/middleware-endpoint" "^1.0.2" - "@smithy/middleware-retry" "^1.0.3" - "@smithy/middleware-serde" "^1.0.1" - "@smithy/middleware-stack" "^1.0.1" - "@smithy/node-config-provider" "^1.0.1" - "@smithy/node-http-handler" "^1.0.2" - "@smithy/protocol-http" "^1.1.0" - "@smithy/smithy-client" "^1.0.3" - "@smithy/types" "^1.1.0" - "@smithy/url-parser" "^1.0.1" - "@smithy/util-base64" "^1.0.1" - "@smithy/util-body-length-browser" "^1.0.1" - "@smithy/util-body-length-node" "^1.0.1" - "@smithy/util-defaults-mode-browser" "^1.0.1" - "@smithy/util-defaults-mode-node" "^1.0.1" - "@smithy/util-retry" "^1.0.3" - "@smithy/util-utf8" "^1.0.1" + "@aws-sdk/client-sts" "3.382.0" + "@aws-sdk/credential-provider-node" "3.382.0" + "@aws-sdk/middleware-host-header" "3.379.1" + "@aws-sdk/middleware-logger" "3.378.0" + "@aws-sdk/middleware-recursion-detection" "3.378.0" + "@aws-sdk/middleware-signing" "3.379.1" + "@aws-sdk/middleware-user-agent" "3.382.0" + "@aws-sdk/types" "3.378.0" + "@aws-sdk/util-endpoints" "3.382.0" + "@aws-sdk/util-user-agent-browser" "3.378.0" + "@aws-sdk/util-user-agent-node" "3.378.0" + "@smithy/config-resolver" "^2.0.1" + "@smithy/fetch-http-handler" "^2.0.1" + "@smithy/hash-node" "^2.0.1" + "@smithy/invalid-dependency" "^2.0.1" + "@smithy/middleware-content-length" "^2.0.1" + "@smithy/middleware-endpoint" "^2.0.1" + "@smithy/middleware-retry" "^2.0.1" + "@smithy/middleware-serde" "^2.0.1" + "@smithy/middleware-stack" "^2.0.0" + "@smithy/node-config-provider" "^2.0.1" + "@smithy/node-http-handler" "^2.0.1" + "@smithy/protocol-http" "^2.0.1" + "@smithy/smithy-client" "^2.0.1" + "@smithy/types" "^2.0.2" + "@smithy/url-parser" "^2.0.1" + "@smithy/util-base64" "^2.0.0" + "@smithy/util-body-length-browser" "^2.0.0" + "@smithy/util-body-length-node" "^2.0.0" + "@smithy/util-defaults-mode-browser" "^2.0.1" + "@smithy/util-defaults-mode-node" "^2.0.1" + "@smithy/util-retry" "^2.0.0" + "@smithy/util-utf8" "^2.0.0" tslib "^2.5.0" "@aws-sdk/client-cloudformation@^3.202.0": @@ -1699,45 +1699,45 @@ tslib "^2.5.0" "@aws-sdk/client-secrets-manager@^3.226.0": - version "3.354.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.354.0.tgz#688f79e4c0302d846a99ec46446a95ca56aa1bc6" - integrity sha512-x/cbIL7YskM3rTA/wjGW1sK3ZGedvQDroUmKLdUWae6/VvjpVktasLInoeZiEP0tICbGzTVSxJUEwdg6dp9+Mw== + version "3.382.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.382.0.tgz#8c6cc378162a7c6c9b992a7297d0fd53a97e3469" + integrity sha512-K7b3FvYT7aekhIgdgJI3+rvJRntX0c09z/ijKw9aX1cx34HAxKYO37tBuK8qAhurP4Duc//UkcfcSXVSi7KLIg== dependencies: "@aws-crypto/sha256-browser" "3.0.0" "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.354.0" - "@aws-sdk/config-resolver" "3.354.0" - "@aws-sdk/credential-provider-node" "3.354.0" - "@aws-sdk/fetch-http-handler" "3.353.0" - "@aws-sdk/hash-node" "3.347.0" - "@aws-sdk/invalid-dependency" "3.347.0" - "@aws-sdk/middleware-content-length" "3.347.0" - "@aws-sdk/middleware-endpoint" "3.347.0" - "@aws-sdk/middleware-host-header" "3.347.0" - "@aws-sdk/middleware-logger" "3.347.0" - "@aws-sdk/middleware-recursion-detection" "3.347.0" - "@aws-sdk/middleware-retry" "3.354.0" - "@aws-sdk/middleware-serde" "3.347.0" - "@aws-sdk/middleware-signing" "3.354.0" - "@aws-sdk/middleware-stack" "3.347.0" - "@aws-sdk/middleware-user-agent" "3.352.0" - "@aws-sdk/node-config-provider" "3.354.0" - "@aws-sdk/node-http-handler" "3.350.0" - "@aws-sdk/smithy-client" "3.347.0" - "@aws-sdk/types" "3.347.0" - "@aws-sdk/url-parser" "3.347.0" - "@aws-sdk/util-base64" "3.310.0" - "@aws-sdk/util-body-length-browser" "3.310.0" - "@aws-sdk/util-body-length-node" "3.310.0" - "@aws-sdk/util-defaults-mode-browser" "3.353.0" - "@aws-sdk/util-defaults-mode-node" "3.354.0" - "@aws-sdk/util-endpoints" "3.352.0" - "@aws-sdk/util-retry" "3.347.0" - "@aws-sdk/util-user-agent-browser" "3.347.0" - "@aws-sdk/util-user-agent-node" "3.354.0" - "@aws-sdk/util-utf8" "3.310.0" - "@smithy/protocol-http" "^1.0.1" - "@smithy/types" "^1.0.0" + "@aws-sdk/client-sts" "3.382.0" + "@aws-sdk/credential-provider-node" "3.382.0" + "@aws-sdk/middleware-host-header" "3.379.1" + "@aws-sdk/middleware-logger" "3.378.0" + "@aws-sdk/middleware-recursion-detection" "3.378.0" + "@aws-sdk/middleware-signing" "3.379.1" + "@aws-sdk/middleware-user-agent" "3.382.0" + "@aws-sdk/types" "3.378.0" + "@aws-sdk/util-endpoints" "3.382.0" + "@aws-sdk/util-user-agent-browser" "3.378.0" + "@aws-sdk/util-user-agent-node" "3.378.0" + "@smithy/config-resolver" "^2.0.1" + "@smithy/fetch-http-handler" "^2.0.1" + "@smithy/hash-node" "^2.0.1" + "@smithy/invalid-dependency" "^2.0.1" + "@smithy/middleware-content-length" "^2.0.1" + "@smithy/middleware-endpoint" "^2.0.1" + "@smithy/middleware-retry" "^2.0.1" + "@smithy/middleware-serde" "^2.0.1" + "@smithy/middleware-stack" "^2.0.0" + "@smithy/node-config-provider" "^2.0.1" + "@smithy/node-http-handler" "^2.0.1" + "@smithy/protocol-http" "^2.0.1" + "@smithy/smithy-client" "^2.0.1" + "@smithy/types" "^2.0.2" + "@smithy/url-parser" "^2.0.1" + "@smithy/util-base64" "^2.0.0" + "@smithy/util-body-length-browser" "^2.0.0" + "@smithy/util-body-length-node" "^2.0.0" + "@smithy/util-defaults-mode-browser" "^2.0.1" + "@smithy/util-defaults-mode-node" "^2.0.1" + "@smithy/util-retry" "^2.0.0" + "@smithy/util-utf8" "^2.0.0" tslib "^2.5.0" uuid "^8.3.2" @@ -1980,45 +1980,6 @@ "@smithy/types" "^1.0.0" tslib "^2.5.0" -"@aws-sdk/client-sso-oidc@3.354.0": - version "3.354.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.354.0.tgz#2a99ed5579a65c0157d99d9f43236863c450bbee" - integrity sha512-XZcg4s2zKb4S8ltluiw5yxpm974uZqzo2HTECt1lbzUJgVgLsMAh/nPJ1fLqg4jadT+rf8Lq2FEFqOM/vxWT8A== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/config-resolver" "3.354.0" - "@aws-sdk/fetch-http-handler" "3.353.0" - "@aws-sdk/hash-node" "3.347.0" - "@aws-sdk/invalid-dependency" "3.347.0" - "@aws-sdk/middleware-content-length" "3.347.0" - "@aws-sdk/middleware-endpoint" "3.347.0" - "@aws-sdk/middleware-host-header" "3.347.0" - "@aws-sdk/middleware-logger" "3.347.0" - "@aws-sdk/middleware-recursion-detection" "3.347.0" - "@aws-sdk/middleware-retry" "3.354.0" - "@aws-sdk/middleware-serde" "3.347.0" - "@aws-sdk/middleware-stack" "3.347.0" - "@aws-sdk/middleware-user-agent" "3.352.0" - "@aws-sdk/node-config-provider" "3.354.0" - "@aws-sdk/node-http-handler" "3.350.0" - "@aws-sdk/smithy-client" "3.347.0" - "@aws-sdk/types" "3.347.0" - "@aws-sdk/url-parser" "3.347.0" - "@aws-sdk/util-base64" "3.310.0" - "@aws-sdk/util-body-length-browser" "3.310.0" - "@aws-sdk/util-body-length-node" "3.310.0" - "@aws-sdk/util-defaults-mode-browser" "3.353.0" - "@aws-sdk/util-defaults-mode-node" "3.354.0" - "@aws-sdk/util-endpoints" "3.352.0" - "@aws-sdk/util-retry" "3.347.0" - "@aws-sdk/util-user-agent-browser" "3.347.0" - "@aws-sdk/util-user-agent-node" "3.354.0" - "@aws-sdk/util-utf8" "3.310.0" - "@smithy/protocol-http" "^1.0.1" - "@smithy/types" "^1.0.0" - tslib "^2.5.0" - "@aws-sdk/client-sso-oidc@3.363.0": version "3.363.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.363.0.tgz#71240d729a0847fd5a7aaac09ed5a3a07c3666cf" @@ -2326,45 +2287,6 @@ "@smithy/types" "^1.0.0" tslib "^2.5.0" -"@aws-sdk/client-sso@3.354.0": - version "3.354.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.354.0.tgz#60810abfe575ef3f5f4a078e965eb8d3da95ea5f" - integrity sha512-4jmvjJYDaaPmm1n2TG4LYfTEnHLKcJmImgBqhgzhMgaypb4u/k1iw0INV2r/afYPL/FsrLFwc46RM3HYx3nc4A== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/config-resolver" "3.354.0" - "@aws-sdk/fetch-http-handler" "3.353.0" - "@aws-sdk/hash-node" "3.347.0" - "@aws-sdk/invalid-dependency" "3.347.0" - "@aws-sdk/middleware-content-length" "3.347.0" - "@aws-sdk/middleware-endpoint" "3.347.0" - "@aws-sdk/middleware-host-header" "3.347.0" - "@aws-sdk/middleware-logger" "3.347.0" - "@aws-sdk/middleware-recursion-detection" "3.347.0" - "@aws-sdk/middleware-retry" "3.354.0" - "@aws-sdk/middleware-serde" "3.347.0" - "@aws-sdk/middleware-stack" "3.347.0" - "@aws-sdk/middleware-user-agent" "3.352.0" - "@aws-sdk/node-config-provider" "3.354.0" - "@aws-sdk/node-http-handler" "3.350.0" - "@aws-sdk/smithy-client" "3.347.0" - "@aws-sdk/types" "3.347.0" - "@aws-sdk/url-parser" "3.347.0" - "@aws-sdk/util-base64" "3.310.0" - "@aws-sdk/util-body-length-browser" "3.310.0" - "@aws-sdk/util-body-length-node" "3.310.0" - "@aws-sdk/util-defaults-mode-browser" "3.353.0" - "@aws-sdk/util-defaults-mode-node" "3.354.0" - "@aws-sdk/util-endpoints" "3.352.0" - "@aws-sdk/util-retry" "3.347.0" - "@aws-sdk/util-user-agent-browser" "3.347.0" - "@aws-sdk/util-user-agent-node" "3.354.0" - "@aws-sdk/util-utf8" "3.310.0" - "@smithy/protocol-http" "^1.0.1" - "@smithy/types" "^1.0.0" - tslib "^2.5.0" - "@aws-sdk/client-sso@3.363.0": version "3.363.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.363.0.tgz#b1939ee6769cf208f1dd4fbfa924c223da9d60ec" @@ -2693,49 +2615,6 @@ fast-xml-parser "4.2.4" tslib "^2.5.0" -"@aws-sdk/client-sts@3.354.0": - version "3.354.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.354.0.tgz#3ff15a95c8361aef485954b23a2051d1c77e0d04" - integrity sha512-l9Ar/C/3PNlToM1ukHVfBtp4plbRUxLMYY2DOTMI0nb3jzfcvETBcdEGCP51fX4uAfJ2vc4g5qBF/qXKX0LMWA== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/config-resolver" "3.354.0" - "@aws-sdk/credential-provider-node" "3.354.0" - "@aws-sdk/fetch-http-handler" "3.353.0" - "@aws-sdk/hash-node" "3.347.0" - "@aws-sdk/invalid-dependency" "3.347.0" - "@aws-sdk/middleware-content-length" "3.347.0" - "@aws-sdk/middleware-endpoint" "3.347.0" - "@aws-sdk/middleware-host-header" "3.347.0" - "@aws-sdk/middleware-logger" "3.347.0" - "@aws-sdk/middleware-recursion-detection" "3.347.0" - "@aws-sdk/middleware-retry" "3.354.0" - "@aws-sdk/middleware-sdk-sts" "3.354.0" - "@aws-sdk/middleware-serde" "3.347.0" - "@aws-sdk/middleware-signing" "3.354.0" - "@aws-sdk/middleware-stack" "3.347.0" - "@aws-sdk/middleware-user-agent" "3.352.0" - "@aws-sdk/node-config-provider" "3.354.0" - "@aws-sdk/node-http-handler" "3.350.0" - "@aws-sdk/smithy-client" "3.347.0" - "@aws-sdk/types" "3.347.0" - "@aws-sdk/url-parser" "3.347.0" - "@aws-sdk/util-base64" "3.310.0" - "@aws-sdk/util-body-length-browser" "3.310.0" - "@aws-sdk/util-body-length-node" "3.310.0" - "@aws-sdk/util-defaults-mode-browser" "3.353.0" - "@aws-sdk/util-defaults-mode-node" "3.354.0" - "@aws-sdk/util-endpoints" "3.352.0" - "@aws-sdk/util-retry" "3.347.0" - "@aws-sdk/util-user-agent-browser" "3.347.0" - "@aws-sdk/util-user-agent-node" "3.354.0" - "@aws-sdk/util-utf8" "3.310.0" - "@smithy/protocol-http" "^1.0.1" - "@smithy/types" "^1.0.0" - fast-xml-parser "4.2.4" - tslib "^2.5.0" - "@aws-sdk/client-sts@3.363.0": version "3.363.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.363.0.tgz#c02b3cf3bd2ef9d54195323370db964cd1df4711" @@ -2993,16 +2872,6 @@ "@aws-sdk/util-middleware" "3.347.0" tslib "^2.5.0" -"@aws-sdk/config-resolver@3.354.0": - version "3.354.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-3.354.0.tgz#8e8c85f7fc09b6fedfbfefdf41fadcfb9d2e0b07" - integrity sha512-K4XWie8yJPT8bpYVX54VJMQhiJRTw8PrjEs9QrKqvwoCcZ3G4qEt40tIu33XksuokXxk8rrVH5d7odOPBsAtdg== - dependencies: - "@aws-sdk/types" "3.347.0" - "@aws-sdk/util-config-provider" "3.310.0" - "@aws-sdk/util-middleware" "3.347.0" - tslib "^2.5.0" - "@aws-sdk/config-resolver@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-3.6.1.tgz#3bcc5e6a0ebeedf0981b0540e1f18a72b4dafebf" @@ -3067,15 +2936,6 @@ "@aws-sdk/types" "3.347.0" tslib "^2.5.0" -"@aws-sdk/credential-provider-env@3.353.0": - version "3.353.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.353.0.tgz#ef8c72978af09f4582cf98325f7f328e8f41574d" - integrity sha512-Y4VsNS8O1FAD5J7S5itOhnOghQ5LIXlZ44t35nF8cbcF+JPvY3ToKzYpjYN1jM7DXKqU4shtqgYpzSqxlvEgKQ== - dependencies: - "@aws-sdk/property-provider" "3.353.0" - "@aws-sdk/types" "3.347.0" - tslib "^2.5.0" - "@aws-sdk/credential-provider-env@3.363.0": version "3.363.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.363.0.tgz#5b8471a243cdb54696ecae99ad4cc1c48d687657" @@ -3170,17 +3030,6 @@ "@aws-sdk/url-parser" "3.347.0" tslib "^2.5.0" -"@aws-sdk/credential-provider-imds@3.354.0": - version "3.354.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.354.0.tgz#3b3face6881817deedc3a06892990f90df3d4321" - integrity sha512-AB+PuDd1jX6qgz+JYvIyOn8Kz9/lQ60KuY1TFb7g3S8zURw+DSeMJNR1jzEsorWICTzhxXmyasHVMa4Eo4Uq+Q== - dependencies: - "@aws-sdk/node-config-provider" "3.354.0" - "@aws-sdk/property-provider" "3.353.0" - "@aws-sdk/types" "3.347.0" - "@aws-sdk/url-parser" "3.347.0" - tslib "^2.5.0" - "@aws-sdk/credential-provider-imds@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.6.1.tgz#b5a8b8ef15eac26c58e469451a6c7c34ab3ca875" @@ -3263,21 +3112,6 @@ "@aws-sdk/types" "3.347.0" tslib "^2.5.0" -"@aws-sdk/credential-provider-ini@3.354.0": - version "3.354.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.354.0.tgz#ec0d9df76a4c8bc422013a8ae5d66f38e3a475b1" - integrity sha512-bn2ifrRsxWpxzwXa25jRdUECQ1dC+NB3YlRYnGdIaIQLF559N2jnfCabYzqyfKI++WU7aQeMofPe2PxVGlbv9Q== - dependencies: - "@aws-sdk/credential-provider-env" "3.353.0" - "@aws-sdk/credential-provider-imds" "3.354.0" - "@aws-sdk/credential-provider-process" "3.354.0" - "@aws-sdk/credential-provider-sso" "3.354.0" - "@aws-sdk/credential-provider-web-identity" "3.354.0" - "@aws-sdk/property-provider" "3.353.0" - "@aws-sdk/shared-ini-file-loader" "3.354.0" - "@aws-sdk/types" "3.347.0" - tslib "^2.5.0" - "@aws-sdk/credential-provider-ini@3.363.0": version "3.363.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.363.0.tgz#e77e65e1ffc7c736aa724ebdf038e99dca57a87b" @@ -3416,22 +3250,6 @@ "@aws-sdk/types" "3.347.0" tslib "^2.5.0" -"@aws-sdk/credential-provider-node@3.354.0": - version "3.354.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.354.0.tgz#1ab83974a0522dd784fcb7a4cb5a07b3864cb1fe" - integrity sha512-ltKiRtHfqDaCcrb44DIoSHQ9MposFl/aDtNdu5OdQv/2Q1r7M/r2fQdq9DHOrxeQQjaUH4C6k6fGTsxALTHyNA== - dependencies: - "@aws-sdk/credential-provider-env" "3.353.0" - "@aws-sdk/credential-provider-imds" "3.354.0" - "@aws-sdk/credential-provider-ini" "3.354.0" - "@aws-sdk/credential-provider-process" "3.354.0" - "@aws-sdk/credential-provider-sso" "3.354.0" - "@aws-sdk/credential-provider-web-identity" "3.354.0" - "@aws-sdk/property-provider" "3.353.0" - "@aws-sdk/shared-ini-file-loader" "3.354.0" - "@aws-sdk/types" "3.347.0" - tslib "^2.5.0" - "@aws-sdk/credential-provider-node@3.363.0": version "3.363.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.363.0.tgz#70815b3c8bc98d9afd148b851c8fdae9ce11fcd6" @@ -3547,16 +3365,6 @@ "@aws-sdk/types" "3.347.0" tslib "^2.5.0" -"@aws-sdk/credential-provider-process@3.354.0": - version "3.354.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.354.0.tgz#674f8eccaeffe17a3fff7d85878569be05ee9d8f" - integrity sha512-AxpASm+tS8V1PY4PLfG9dtqa96lzBJ3niTQb+RAm4uYCddW7gxNDkGB+jSCzVdUPVa3xA2ITBS/ka3C5yM8YWg== - dependencies: - "@aws-sdk/property-provider" "3.353.0" - "@aws-sdk/shared-ini-file-loader" "3.354.0" - "@aws-sdk/types" "3.347.0" - tslib "^2.5.0" - "@aws-sdk/credential-provider-process@3.363.0": version "3.363.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.363.0.tgz#08608f6da246084f9b20481ac0de17f04ae54b4d" @@ -3660,18 +3468,6 @@ "@aws-sdk/types" "3.347.0" tslib "^2.5.0" -"@aws-sdk/credential-provider-sso@3.354.0": - version "3.354.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.354.0.tgz#bdcf18778415d69ec6cbeaff28ad5a373f8a2e67" - integrity sha512-ihiaUxh8V/nQgTOgQZxWQcbckXhM+J6Wdc4F0z9soi48iSOqzRpzPw5E14wSZScEZjNY/gKEDz8gCt8WkT/G0w== - dependencies: - "@aws-sdk/client-sso" "3.354.0" - "@aws-sdk/property-provider" "3.353.0" - "@aws-sdk/shared-ini-file-loader" "3.354.0" - "@aws-sdk/token-providers" "3.354.0" - "@aws-sdk/types" "3.347.0" - tslib "^2.5.0" - "@aws-sdk/credential-provider-sso@3.363.0": version "3.363.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.363.0.tgz#949190c9ea510d9772aef9c61345575f4b40b44d" @@ -3756,15 +3552,6 @@ "@aws-sdk/types" "3.347.0" tslib "^2.5.0" -"@aws-sdk/credential-provider-web-identity@3.354.0": - version "3.354.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.354.0.tgz#f7e557cf7f85bc9b41905e6ae9cbf5c0f7c62ba3" - integrity sha512-scx9mAf4m3Hc3uMX2Vh8GciEcC/5GqeDI8qc0zBj+UF/5c/GtihZA4WoCV3Sg3jMPDUKY81DiFCtcKHhtUqKfg== - dependencies: - "@aws-sdk/property-provider" "3.353.0" - "@aws-sdk/types" "3.347.0" - tslib "^2.5.0" - "@aws-sdk/credential-provider-web-identity@3.363.0": version "3.363.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.363.0.tgz#a5312519126ff7c3fea56ffefa0e51ef9383663c" @@ -4041,17 +3828,6 @@ "@aws-sdk/util-base64" "3.310.0" tslib "^2.5.0" -"@aws-sdk/fetch-http-handler@3.353.0": - version "3.353.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.353.0.tgz#0fe801aaf0ceeb21e878803b0e397464f1890537" - integrity sha512-8ic2+4E6jzfDevd++QS1rOR05QFkAhEFbi5Ja3/Zzp7TkWIS8wv5wwMATjNkbbdsXYuB5Lhl/OsjfZmIv5aqRw== - dependencies: - "@aws-sdk/protocol-http" "3.347.0" - "@aws-sdk/querystring-builder" "3.347.0" - "@aws-sdk/types" "3.347.0" - "@aws-sdk/util-base64" "3.310.0" - tslib "^2.5.0" - "@aws-sdk/fetch-http-handler@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.6.1.tgz#c5fb4a4ee158161fca52b220d2c11dddcda9b092" @@ -4837,19 +4613,6 @@ tslib "^2.5.0" uuid "^8.3.2" -"@aws-sdk/middleware-retry@3.354.0": - version "3.354.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.354.0.tgz#7797ef55c94999f6eaa3671e14b53b6a1758acf3" - integrity sha512-dnG5Nd/mobbhcWCM71DQWI9+f6b6fDSzALXftFIP/8lsXKRcWDSQuYjrnVST2wZzk/QmdF8TnVD0C1xL14K6CQ== - dependencies: - "@aws-sdk/protocol-http" "3.347.0" - "@aws-sdk/service-error-classification" "3.347.0" - "@aws-sdk/types" "3.347.0" - "@aws-sdk/util-middleware" "3.347.0" - "@aws-sdk/util-retry" "3.347.0" - tslib "^2.5.0" - uuid "^8.3.2" - "@aws-sdk/middleware-retry@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.6.1.tgz#202aadb1a3bf0e1ceabcd8319a5fa308b32db247" @@ -4958,15 +4721,6 @@ "@aws-sdk/types" "3.347.0" tslib "^2.5.0" -"@aws-sdk/middleware-sdk-sts@3.354.0": - version "3.354.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.354.0.tgz#a438c56127baadb036a89473341fd2c1250363da" - integrity sha512-L6vyAwYrdcOoB4YgCqNJNr+ZZtLHEF2Ym3CTfmFm2srXHqHuRB+mBu0NLV/grz77znIArK1H1ZL/ZaH2I5hclA== - dependencies: - "@aws-sdk/middleware-signing" "3.354.0" - "@aws-sdk/types" "3.347.0" - tslib "^2.5.0" - "@aws-sdk/middleware-sdk-sts@3.363.0": version "3.363.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.363.0.tgz#41b10aa8b8004bda9156cadde3b2302a84309e6a" @@ -5105,18 +4859,6 @@ "@aws-sdk/util-middleware" "3.347.0" tslib "^2.5.0" -"@aws-sdk/middleware-signing@3.354.0": - version "3.354.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.354.0.tgz#7249c77694a3b4f04551f150129324b8ba9fbacf" - integrity sha512-Dd+vIhJL0VqqKWqlTKlKC5jkCaEIk73ZEXNfv44XbsI25a0vXbatHp1M8jB/cgkJC/Mri1TX9dmckP/C0FDEwA== - dependencies: - "@aws-sdk/property-provider" "3.353.0" - "@aws-sdk/protocol-http" "3.347.0" - "@aws-sdk/signature-v4" "3.354.0" - "@aws-sdk/types" "3.347.0" - "@aws-sdk/util-middleware" "3.347.0" - tslib "^2.5.0" - "@aws-sdk/middleware-signing@3.363.0": version "3.363.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.363.0.tgz#81067698e0566584f0ca30be56232758f69e2232" @@ -5372,16 +5114,6 @@ "@aws-sdk/types" "3.347.0" tslib "^2.5.0" -"@aws-sdk/node-config-provider@3.354.0": - version "3.354.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/node-config-provider/-/node-config-provider-3.354.0.tgz#4169d2957315aa23f8b45e4d53eafc97dcb3760c" - integrity sha512-pF1ZGWWvmwbrloNHYF3EDqCb9hq5wfZwDqAwAPhWkYnUYKkR7E7MZVuTwUDU48io8k6Z5pM52l/54w8e8aedTw== - dependencies: - "@aws-sdk/property-provider" "3.353.0" - "@aws-sdk/shared-ini-file-loader" "3.354.0" - "@aws-sdk/types" "3.347.0" - tslib "^2.5.0" - "@aws-sdk/node-config-provider@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/node-config-provider/-/node-config-provider-3.6.1.tgz#cb85d06329347fde566f08426f8714b1f65d2fb7" @@ -5498,14 +5230,6 @@ "@aws-sdk/types" "3.347.0" tslib "^2.5.0" -"@aws-sdk/property-provider@3.353.0": - version "3.353.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/property-provider/-/property-provider-3.353.0.tgz#a877ca6d4a165773609eb776483ffb8606f03b7e" - integrity sha512-Iu6J59hncaew7eBKroTcLjZ8cgrom0IWyZZ09rsow3rZDHVtw7LQSrUyuqsSbKGY9eRtL7Wa6ZtYHnXFiAE2kg== - dependencies: - "@aws-sdk/types" "3.347.0" - tslib "^2.5.0" - "@aws-sdk/property-provider@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/property-provider/-/property-provider-3.6.1.tgz#d973fc87d199d32c44d947e17f2ee2dd140a9593" @@ -5760,14 +5484,6 @@ "@aws-sdk/types" "3.347.0" tslib "^2.5.0" -"@aws-sdk/shared-ini-file-loader@3.354.0": - version "3.354.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.354.0.tgz#8dc6db99e12dd39abf7a70d31205c1d718e84c7a" - integrity sha512-UL9loGEsdzpHBu/PtlwUvkl/yRdmWXkySp22jUaeeRtBhiGAnyeYhxJLIt+u+UkX7Mwz+810SaZJqA9ptOXNAg== - dependencies: - "@aws-sdk/types" "3.347.0" - tslib "^2.5.0" - "@aws-sdk/shared-ini-file-loader@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.6.1.tgz#2b7182cbb0d632ad7c9712bebffdeee24a6f7eb6" @@ -5993,17 +5709,6 @@ "@aws-sdk/types" "3.347.0" tslib "^2.5.0" -"@aws-sdk/token-providers@3.354.0": - version "3.354.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.354.0.tgz#4a653781b13cb6729e88be28cdc3e1b81c0bdfcf" - integrity sha512-KcijiySy0oIyafKQagcwgu0fo35mK+2K8pwxRU1WfXqe80Gn1qGceeWcG4iW+t/rUaxa/LVo857N0LcagxCrZA== - dependencies: - "@aws-sdk/client-sso-oidc" "3.354.0" - "@aws-sdk/property-provider" "3.353.0" - "@aws-sdk/shared-ini-file-loader" "3.354.0" - "@aws-sdk/types" "3.347.0" - tslib "^2.5.0" - "@aws-sdk/token-providers@3.363.0": version "3.363.0" resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.363.0.tgz#c211ed6db62620c46194506db6d785f5c36aedc5" @@ -6438,16 +6143,6 @@ bowser "^2.11.0" tslib "^2.5.0" -"@aws-sdk/util-defaults-mode-browser@3.353.0": - version "3.353.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.353.0.tgz#b90b8b354bfb582a9cc7b87b67ce1508d57176ea" - integrity sha512-ushvOQKJIH7S6E//xMDPyf2/Bbu0K2A0GJRB88qQV6VKRBo4PEbeHTb6BbzPhYVX0IbY3uR/X7+Xwk4FeEkMWg== - dependencies: - "@aws-sdk/property-provider" "3.353.0" - "@aws-sdk/types" "3.347.0" - bowser "^2.11.0" - tslib "^2.5.0" - "@aws-sdk/util-defaults-mode-node@3.186.0": version "3.186.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.186.0.tgz#8572453ba910fd2ab08d2cfee130ce5a0db83ba7" @@ -6508,18 +6203,6 @@ "@aws-sdk/types" "3.347.0" tslib "^2.5.0" -"@aws-sdk/util-defaults-mode-node@3.354.0": - version "3.354.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.354.0.tgz#55949d8ee4403b6c54dc3d7dc732f0eeb081c5cd" - integrity sha512-CaaRVBdOYX4wZadj+CDUxpO+4RjyYJcSv71A60jV6CZ/ya1+oYfmPbG5QZ4AlV6crdev2B+aUoR2LPIYqn/GnQ== - dependencies: - "@aws-sdk/config-resolver" "3.354.0" - "@aws-sdk/credential-provider-imds" "3.354.0" - "@aws-sdk/node-config-provider" "3.354.0" - "@aws-sdk/property-provider" "3.353.0" - "@aws-sdk/types" "3.347.0" - tslib "^2.5.0" - "@aws-sdk/util-endpoints@3.226.0": version "3.226.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.226.0.tgz#3728b2e30f6f757ae862a0b7cf3991e75f252c3f" @@ -6912,15 +6595,6 @@ "@aws-sdk/types" "3.347.0" tslib "^2.5.0" -"@aws-sdk/util-user-agent-node@3.354.0": - version "3.354.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.354.0.tgz#153d5748d707a42c765c353769e4d41cbf27215d" - integrity sha512-2xkblZS3PGxxh//0lgCwJw2gvh9ZBcI9H9xv05YP7hcwlz9BmkAlbei2i6Uew6agJMLO4unfgWoBTpzp3WLaKg== - dependencies: - "@aws-sdk/node-config-provider" "3.354.0" - "@aws-sdk/types" "3.347.0" - tslib "^2.5.0" - "@aws-sdk/util-user-agent-node@3.363.0": version "3.363.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.363.0.tgz#9df26188a3d22694b4d06f5f40c489cb22fddb48"