diff --git a/.github/workflows/deploy-dev.yml b/.github/workflows/deploy-dev.yml index dfc5bf17..6a63af66 100644 --- a/.github/workflows/deploy-dev.yml +++ b/.github/workflows/deploy-dev.yml @@ -88,5 +88,7 @@ jobs: uses: actions/setup-python@v5 with: python-version: 3.11 + - name: Run health check + run: make dev_health_check - name: Run live testing run: make test_live_integration diff --git a/.husky/pre-commit b/.husky/pre-commit index 8f78b629..64947b3a 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1 +1,17 @@ -yarn lint --fix \ No newline at end of file +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +# Get all staged files +STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACMR) + +if [ -n "$STAGED_FILES" ]; then + echo "Running lint with fix on staged files..." + # Run lint on all files (modifies files in the working directory) + yarn lint --fix + + echo "Re-adding originally staged files to the staging area..." + # Re-add only the originally staged files + echo "$STAGED_FILES" | xargs git add +else + echo "No staged files to process." +fi diff --git a/src/api/functions/entraId.ts b/src/api/functions/entraId.ts index eccbc1fb..4c5b48d5 100644 --- a/src/api/functions/entraId.ts +++ b/src/api/functions/entraId.ts @@ -1,5 +1,12 @@ -import { genericConfig } from "../../common/config.js"; import { + execCouncilGroupId, + execCouncilTestingGroupId, + genericConfig, + officersGroupId, + officersGroupTestingId, +} from "../../common/config.js"; +import { + BaseError, EntraGroupError, EntraInvitationError, InternalServerError, @@ -190,7 +197,32 @@ export async function modifyGroup( message: "User's domain must be illinois.edu to be added to the group.", }); } - + // if adding to exec group, check that all exec members we want to add are paid members + const paidMemberRequiredGroups = [ + execCouncilGroupId, + execCouncilTestingGroupId, + officersGroupId, + officersGroupTestingId, + ]; + if ( + paidMemberRequiredGroups.includes(group) && + action === EntraGroupActions.ADD + ) { + const netId = email.split("@")[0]; + const response = await fetch( + `https://membership.acm.illinois.edu/api/v1/checkMembership?netId=${netId}`, + ); + const membershipStatus = (await response.json()) as { + netId: string; + isPaidMember: boolean; + }; + if (!membershipStatus["isPaidMember"]) { + throw new EntraGroupError({ + message: `${netId} is not a paid member. This group requires that all members are paid members.`, + group, + }); + } + } try { const oid = await resolveEmailToOid(token, email); const methodMapper = { @@ -220,6 +252,12 @@ export async function modifyGroup( const errorData = (await response.json()) as { error?: { message?: string }; }; + if ( + errorData?.error?.message === + "One or more added object references already exist for the following modified properties: 'members'." + ) { + return true; + } throw new EntraGroupError({ message: errorData?.error?.message ?? response.statusText, group, @@ -231,12 +269,15 @@ export async function modifyGroup( if (error instanceof EntraGroupError) { throw error; } - - throw new EntraGroupError({ - message: error instanceof Error ? error.message : String(error), - group, - }); + const message = error instanceof Error ? error.message : String(error); + if (message) { + throw new EntraGroupError({ + message, + group, + }); + } } + return false; } /** diff --git a/src/api/index.ts b/src/api/index.ts index f82b9d85..55f9d310 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -10,20 +10,24 @@ import { InternalServerError } from "../common/errors/index.js"; import eventsPlugin from "./routes/events.js"; import cors from "@fastify/cors"; import fastifyZodValidationPlugin from "./plugins/validate.js"; -import { environmentConfig } from "../common/config.js"; +import { environmentConfig, genericConfig } from "../common/config.js"; import organizationsPlugin from "./routes/organizations.js"; import icalPlugin from "./routes/ics.js"; import vendingPlugin from "./routes/vending.js"; import * as dotenv from "dotenv"; import iamRoutes from "./routes/iam.js"; import ticketsPlugin from "./routes/tickets.js"; +import { STSClient, GetCallerIdentityCommand } from "@aws-sdk/client-sts"; + dotenv.config(); const now = () => Date.now(); async function init() { const app: FastifyInstance = fastify({ - logger: true, + logger: { + level: process.env.LOG_LEVEL || "info", + }, disableRequestLogging: true, genReqId: (request) => { const header = request.headers["x-apigateway-event"]; @@ -90,12 +94,22 @@ async function init() { } if (import.meta.url === `file://${process.argv[1]}`) { - // local development + console.log(`Logging level set to ${process.env.LOG_LEVEL || "info"}`); + const client = new STSClient({ region: genericConfig.AwsRegion }); + const command = new GetCallerIdentityCommand({}); + try { + const data = await client.send(command); + console.log(`Logged in to AWS as ${data.Arn} on account ${data.Account}.`); + } catch { + console.error( + `Could not get AWS STS credentials: are you logged in to AWS? Run "aws configure sso" to log in.`, + ); + process.exit(1); + } const app = await init(); - app.listen({ port: 8080 }, (err) => { + app.listen({ port: 8080 }, async (err) => { /* eslint no-console: ["error", {"allow": ["log", "error"]}] */ if (err) console.error(err); - console.log("Server listening on 8080"); }); } export default init; diff --git a/src/api/package.json b/src/api/package.json index b7745ef6..568ec136 100644 --- a/src/api/package.json +++ b/src/api/package.json @@ -8,10 +8,13 @@ "type": "module", "scripts": { "build": "tsc", - "dev": "tsx watch index.ts", + "dev": "cross-env LOG_LEVEL=debug tsx watch index.ts", "typecheck": "tsc --noEmit", "lint": "eslint . --ext .ts --cache", "prettier": "prettier --check *.ts **/*.ts", "prettier:write": "prettier --write *.ts **/*.ts" + }, + "dependencies": { + "@aws-sdk/client-sts": "^3.726.0" } -} \ No newline at end of file +} diff --git a/src/api/routes/iam.ts b/src/api/routes/iam.ts index 2bb207af..9d19b296 100644 --- a/src/api/routes/iam.ts +++ b/src/api/routes/iam.ts @@ -15,13 +15,18 @@ import { EntraInvitationError, InternalServerError, NotFoundError, + ValidationError, } from "../../common/errors/index.js"; import { DynamoDBClient, GetItemCommand, PutItemCommand, } from "@aws-sdk/client-dynamodb"; -import { genericConfig } from "../../common/config.js"; +import { + execCouncilGroupId, + execCouncilTestingGroupId, + genericConfig, +} from "../../common/config.js"; import { marshall, unmarshall } from "@aws-sdk/util-dynamodb"; import { InviteUserPostRequest, diff --git a/src/common/config.ts b/src/common/config.ts index 77857fe6..b9f67113 100644 --- a/src/common/config.ts +++ b/src/common/config.ts @@ -39,7 +39,9 @@ type EnvironmentConfigType = { export const infraChairsGroupId = "48591dbc-cdcb-4544-9f63-e6b92b067e33"; export const officersGroupId = "ff49e948-4587-416b-8224-65147540d5fc"; +export const officersGroupTestingId = "0e6e9199-506f-4ede-9d1b-e73f6811c9e5"; export const execCouncilGroupId = "ad81254b-4eeb-4c96-8191-3acdce9194b1"; +export const execCouncilTestingGroupId = "dbe18eb2-9675-46c4-b1ef-749a6db4fedd"; const genericConfig: GenericConfigType = { EventsDynamoTableName: "infra-core-api-events", @@ -109,7 +111,7 @@ const environmentConfig: EnvironmentConfigType = { /^https:\/\/(?:.*\.)?acmuiuc\.pages\.dev$/, ], AadValidClientId: "5e08cf0f-53bb-4e09-9df2-e9bdc3467296", - }, + } }; export type SecretConfig = { diff --git a/src/ui/config.ts b/src/ui/config.ts index 5fd09bf7..fe539910 100644 --- a/src/ui/config.ts +++ b/src/ui/config.ts @@ -1,3 +1,5 @@ +import { execCouncilGroupId, execCouncilTestingGroupId } from '@common/config'; + export const runEnvironments = ['dev', 'prod', 'local-dev'] as const; // local dev should be used when you want to test against a local instance of the API @@ -9,6 +11,9 @@ export type ValidService = ValidServices; export type ConfigType = { AadValidClientId: string; ServiceConfiguration: Record; + KnownGroupMappings: { + Exec: string; + }; }; export type ServiceConfiguration = { @@ -45,6 +50,9 @@ const environmentConfig: EnvironmentConfigType = { baseEndpoint: 'https://merchapi.acm.illinois.edu', }, }, + KnownGroupMappings: { + Exec: execCouncilTestingGroupId, + }, }, dev: { AadValidClientId: 'd1978c23-6455-426a-be4d-528b2d2e4026', @@ -65,6 +73,9 @@ const environmentConfig: EnvironmentConfigType = { baseEndpoint: 'https://merchapi.acm.illinois.edu', }, }, + KnownGroupMappings: { + Exec: execCouncilTestingGroupId, + }, }, prod: { AadValidClientId: '43fee67e-e383-4071-9233-ef33110e9386', @@ -85,6 +96,9 @@ const environmentConfig: EnvironmentConfigType = { baseEndpoint: 'https://merchapi.acm.illinois.edu', }, }, + KnownGroupMappings: { + Exec: execCouncilGroupId, + }, }, } as const; diff --git a/src/ui/pages/iam/GroupMemberManagement.test.tsx b/src/ui/pages/iam/GroupMemberManagement.test.tsx new file mode 100644 index 00000000..6ab07804 --- /dev/null +++ b/src/ui/pages/iam/GroupMemberManagement.test.tsx @@ -0,0 +1,344 @@ +import React from 'react'; +import { render, screen, act } from '@testing-library/react'; +import { MemoryRouter } from 'react-router-dom'; +import { vi } from 'vitest'; +import GroupMemberManagement from './GroupMemberManagement'; +import { MantineProvider } from '@mantine/core'; +import { notifications } from '@mantine/notifications'; +import userEvent from '@testing-library/user-event'; + +describe('Exec Group Management Panel read tests', () => { + const renderComponent = async ( + fetchMembers: () => Promise, + updateMembers: () => Promise + ) => { + await act(async () => { + render( + + + + + + ); + }); + }; + + beforeEach(() => { + vi.resetModules(); + }); + + it('renders with no members', async () => { + const fetchMembers = async () => []; + const updateMembers = async () => ({ success: [] }); + + await renderComponent(fetchMembers, updateMembers); + + expect(screen.getByText('Current Members')).toBeInTheDocument(); + expect(screen.queryByText(/.*@illinois\.edu/)).not.toBeInTheDocument(); + }); + + it('renders with a single member', async () => { + const fetchMembers = async () => [{ name: 'Doe, John', email: 'jdoe@illinois.edu' }]; + const updateMembers = async () => ({ + success: [{ email: 'jdoe@illinois.edu' }], + }); + + await renderComponent(fetchMembers, updateMembers); + expect(screen.getByText(/Doe, John \(jdoe@illinois\.edu\)/)).toBeInTheDocument(); + }); + + it('renders with multiple members', async () => { + const fetchMembers = async () => [ + { name: 'Doe, John', email: 'jdoe@illinois.edu' }, + { name: 'Smith, Jane', email: 'jsmith@illinois.edu' }, + { name: 'Brown, Bob', email: 'bbrown@illinois.edu' }, + ]; + const updateMembers = async () => ({ + success: [ + { email: 'jdoe@illinois.edu' }, + { email: 'jsmith@illinois.edu' }, + { email: 'bbrown@illinois.edu' }, + ], + }); + + await renderComponent(fetchMembers, updateMembers); + expect(screen.getByText(/Doe, John \(jdoe@illinois\.edu\)/)).toBeInTheDocument(); + expect(screen.getByText(/Smith, Jane \(jsmith@illinois\.edu\)/)).toBeInTheDocument(); + expect(screen.getByText(/Brown, Bob \(bbrown@illinois\.edu\)/)).toBeInTheDocument(); + }); + + it('displays all required UI elements', async () => { + const fetchMembers = async () => []; + const updateMembers = async () => ({ success: [] }); + + await renderComponent(fetchMembers, updateMembers); + + expect(screen.getByText('Exec Council Group Management')).toBeInTheDocument(); + expect(screen.getByText('Current Members')).toBeInTheDocument(); + expect(screen.getByLabelText('Add Member')).toBeInTheDocument(); + expect(screen.getByPlaceholderText('Enter email')).toBeInTheDocument(); + expect(screen.getByRole('button', { name: 'Add Member' })).toBeInTheDocument(); + expect(screen.getByRole('button', { name: 'Save Changes' })).toBeDisabled(); + }); + + it('adds a new member and saves changes', async () => { + const notificationsMock = vi.spyOn(notifications, 'show'); + const user = userEvent.setup(); + const fetchMembers = async () => []; + const updateMembers = vi.fn().mockResolvedValue({ + success: [{ email: 'member@illinois.edu' }], + failure: [], + }); + + await renderComponent(fetchMembers, updateMembers); + + // Input the email + const emailInput = screen.getByPlaceholderText('Enter email'); + await user.type(emailInput, 'member@illinois.edu'); + + // Click Add Member button + const addButton = screen.getByRole('button', { name: 'Add Member' }); + await user.click(addButton); + + // Verify member appears with "Queued for addition" badge + expect(screen.getByText('member@illinois.edu')).toBeInTheDocument(); + expect(screen.getByText('Queued for addition')).toBeInTheDocument(); + + // Click Save Changes which opens modal + const saveButton = screen.getByRole('button', { name: 'Save Changes' }); + expect(saveButton).toBeEnabled(); + await user.click(saveButton); + + // Wait for the modal to appear with title + await screen.findByText('Confirm Changes'); + + // Find and click confirm button in modal + const confirmButton = screen.getByRole('button', { name: 'Confirm and Save' }); + await user.click(confirmButton); + + // Verify updateMembers was called with correct parameters + expect(updateMembers).toHaveBeenCalledWith(['member@illinois.edu'], []); + + // Verify list is updated - "Queued for addition" badge should be gone + expect(screen.getByText(/member \(member@illinois\.edu\)/)).toBeInTheDocument(); + expect(screen.queryByText('Queued for addition')).not.toBeInTheDocument(); + + // Verify notifications were shown + expect(notificationsMock).toHaveBeenCalledWith( + expect.objectContaining({ + message: 'All changes processed successfully!', + color: 'green', + }) + ); + + // Verify Save Changes button is disabled again after successful update + expect(screen.getByRole('button', { name: 'Save Changes' })).toBeDisabled(); + + // Clean up + notificationsMock.mockRestore(); + }); + it('handles failed member updates correctly', async () => { + const notificationsMock = vi.spyOn(notifications, 'show'); + const user = userEvent.setup(); + const fetchMembers = async () => []; + const updateMembers = vi.fn().mockResolvedValue({ + success: [], + failure: [ + { + email: 'member@illinois.edu', + message: 'User does not exist in directory', + }, + ], + }); + + await renderComponent(fetchMembers, updateMembers); + + // Add a member that will fail + const emailInput = screen.getByPlaceholderText('Enter email'); + await user.type(emailInput, 'member@illinois.edu'); + await user.click(screen.getByRole('button', { name: 'Add Member' })); + + // Verify member shows in queue + expect(screen.getByText('member@illinois.edu')).toBeInTheDocument(); + expect(screen.getByText('Queued for addition')).toBeInTheDocument(); + + // Try to save changes + await user.click(screen.getByRole('button', { name: 'Save Changes' })); + await screen.findByText('Confirm Changes'); + await user.click(screen.getByRole('button', { name: 'Confirm and Save' })); + + expect(notificationsMock).toHaveBeenCalledWith( + expect.objectContaining({ + title: 'Error adding member@illinois.edu', + message: 'User does not exist in directory', + color: 'red', + }) + ); + + // Verify member is no longer shown as queued (since queues are cleared) + expect(screen.queryByText('Queued for addition')).not.toBeInTheDocument(); + + // Verify Save Changes button is disabled since queues are cleared + expect(screen.getByRole('button', { name: 'Save Changes' })).toBeDisabled(); + + notificationsMock.mockRestore(); + }); + + it('removes an existing member', async () => { + const notificationsMock = vi.spyOn(notifications, 'show'); + const user = userEvent.setup(); + const fetchMembers = async () => [ + { + name: 'Existing Member', + email: 'existing@illinois.edu', + }, + ]; + const updateMembers = vi.fn().mockResolvedValue({ + success: [{ email: 'existing@illinois.edu' }], + failure: [], + }); + + await renderComponent(fetchMembers, updateMembers); + + // Click remove button for the existing member using data-testid + const removeButton = screen.getByTestId('remove-exec-member-existing@illinois.edu'); + await user.click(removeButton); + + // Verify member shows removal badge + expect(screen.getByText('Queued for removal')).toBeInTheDocument(); + + // Save changes + const saveButton = screen.getByRole('button', { name: 'Save Changes' }); + expect(saveButton).toBeEnabled(); + await user.click(saveButton); + + await screen.findByText('Confirm Changes'); + const confirmButton = screen.getByRole('button', { name: 'Confirm and Save' }); + await user.click(confirmButton); + + // Verify updateMembers was called with correct parameters + expect(updateMembers).toHaveBeenCalledWith( + [], // toAdd + ['existing@illinois.edu'] // toRemove + ); + + // Verify member is removed from the list + expect( + screen.queryByText(/Existing Member \(existing@illinois\.edu\)/) + ).not.toBeInTheDocument(); + + // Verify success notification + expect(notificationsMock).toHaveBeenCalledWith( + expect.objectContaining({ + message: 'All changes processed successfully!', + color: 'green', + }) + ); + + notificationsMock.mockRestore(); + }); + it('handles multiple member changes with mixed success/failure results', async () => { + const notificationsMock = vi.spyOn(notifications, 'show'); + const user = userEvent.setup(); + + // Start with two existing members + const fetchMembers = async () => [ + { name: 'Stay Member', email: 'stay@illinois.edu' }, + { name: 'Remove Success', email: 'removesuccess@illinois.edu' }, + { name: 'Remove Fail', email: 'removefail@illinois.edu' }, + ]; + + // Mock mixed success/failure response + const updateMembers = vi.fn().mockResolvedValue({ + success: [ + { email: 'removesuccess@illinois.edu' }, // removal succeeded + { email: 'addsuccess@illinois.edu' }, // addition succeeded + ], + failure: [ + { + email: 'removefail@illinois.edu', + message: 'Cannot remove admin user', + }, + { + email: 'addfail@illinois.edu', + message: 'User not found in directory', + }, + ], + }); + + await renderComponent(fetchMembers, updateMembers); + + // Add two new members - one will succeed, one will fail + const emailInput = screen.getByPlaceholderText('Enter email'); + + await user.type(emailInput, 'addsuccess@illinois.edu'); + await user.click(screen.getByRole('button', { name: 'Add Member' })); + + await user.type(emailInput, 'addfail@illinois.edu'); + await user.click(screen.getByRole('button', { name: 'Add Member' })); + + // Remove two existing members - one will succeed, one will fail + await user.click(screen.getByTestId('remove-exec-member-removesuccess@illinois.edu')); + await user.click(screen.getByTestId('remove-exec-member-removefail@illinois.edu')); + + // Verify queued states before save + expect(screen.getByText('addsuccess@illinois.edu')).toBeInTheDocument(); + expect(screen.getByText('addfail@illinois.edu')).toBeInTheDocument(); + expect(screen.getAllByText('Queued for addition')).toHaveLength(2); + expect(screen.getAllByText('Queued for removal')).toHaveLength(2); + + // Save changes + const saveButton = screen.getByRole('button', { name: 'Save Changes' }); + expect(saveButton).toBeEnabled(); + await user.click(saveButton); + + // Confirm in modal + await screen.findByText('Confirm Changes'); + const confirmButton = screen.getByRole('button', { name: 'Confirm and Save' }); + await user.click(confirmButton); + + // Verify updateMembers was called with all changes + expect(updateMembers).toHaveBeenCalledWith( + ['addsuccess@illinois.edu', 'addfail@illinois.edu'], + ['removesuccess@illinois.edu', 'removefail@illinois.edu'] + ); + + // Verify error notifications for failures + expect(notificationsMock).toHaveBeenCalledWith( + expect.objectContaining({ + title: 'Error adding addfail@illinois.edu', + message: 'User not found in directory', + color: 'red', + }) + ); + + expect(notificationsMock).toHaveBeenCalledWith( + expect.objectContaining({ + title: 'Error removing removefail@illinois.edu', + message: 'Cannot remove admin user', + color: 'red', + }) + ); + + // Verify end state of member list + // Success cases + expect(screen.queryByText(/removesuccess@illinois\.edu/)).not.toBeInTheDocument(); // Successfully removed + expect(screen.getByText(/addsuccess@illinois\.edu/)).toBeInTheDocument(); // Successfully added + + // Failure cases + expect(screen.getByText(/removefail@illinois\.edu/)).toBeInTheDocument(); // Failed to remove + expect(screen.queryByText(/addfail@illinois\.edu/)).not.toBeInTheDocument(); // Failed to add + + // Unchanged member + expect(screen.getByText(/stay@illinois\.edu/)).toBeInTheDocument(); + + // Verify queued badges are cleared + expect(screen.queryByText('Queued for addition')).not.toBeInTheDocument(); + expect(screen.queryByText('Queued for removal')).not.toBeInTheDocument(); + + // Verify Save Changes button is disabled after operation + expect(screen.getByRole('button', { name: 'Save Changes' })).toBeDisabled(); + + notificationsMock.mockRestore(); + }); +}); diff --git a/src/ui/pages/iam/GroupMemberManagement.tsx b/src/ui/pages/iam/GroupMemberManagement.tsx index 7b33d215..ffc0b8b9 100644 --- a/src/ui/pages/iam/GroupMemberManagement.tsx +++ b/src/ui/pages/iam/GroupMemberManagement.tsx @@ -70,25 +70,62 @@ export const GroupMemberManagement: React.FC = ({ setIsLoading(true); try { const response = await updateMembers(toAdd, toRemove); - if (response.success) { - setMembers((prev) => - prev - .filter((member) => !toRemove.includes(member.email)) - .concat(toAdd.map((email) => ({ name: '', email }))) - ); - setToAdd([]); - setToRemove([]); + let { success, failure } = response; + if (!success) { + success = []; + } + if (!failure) { + failure = []; } - notifications.show({ - title: 'Success', - message: 'Changes saved successfully!', - color: 'green', - }); + const successfulAdds = success.filter((entry) => toAdd.includes(entry.email)); + const successfulRemoves = success.filter((entry) => toRemove.includes(entry.email)); + const failedAdds = failure.filter(({ email }) => toAdd.includes(email)); + const failedRemoves = failure.filter(({ email }) => toRemove.includes(email)); + + setMembers((prev) => + prev + .filter((member) => !successfulRemoves.some((remove) => remove.email === member.email)) + .concat(successfulAdds.map(({ email }) => ({ name: email.split('@')[0], email }))) + ); + + setToAdd([]); + setToRemove([]); + + if (failure.length === 0) { + notifications.show({ + title: 'Success', + message: 'All changes processed successfully!', + color: 'green', + }); + } else { + failedAdds.forEach(({ email, message }) => { + notifications.show({ + title: `Error adding ${email}`, + message, + color: 'red', + }); + }); + + failedRemoves.forEach(({ email, message }) => { + notifications.show({ + title: `Error removing ${email}`, + message, + color: 'red', + }); + }); + const allSuccess = successfulAdds.concat(successfulRemoves); + allSuccess.forEach(({ email }) => { + notifications.show({ + message: `Successfully modified ${email}`, + color: 'green', + }); + }); + } } catch (error) { notifications.show({ title: 'Error', - message: 'Failed to save changes.', + message: 'Failed to save changes due to an unexpected error.', color: 'red', }); } finally { @@ -99,7 +136,7 @@ export const GroupMemberManagement: React.FC = ({ return ( - Exec Group Management + Exec Council Group Management {/* Member List */} @@ -117,7 +154,7 @@ export const GroupMemberManagement: React.FC = ({ {member.name} ({member.email}) {toRemove.includes(member.email) && ( - + Queued for removal )} @@ -126,6 +163,7 @@ export const GroupMemberManagement: React.FC = ({ color="red" variant="light" onClick={() => handleRemoveMember(member.email)} + data-testid={`remove-exec-member-${member.email}`} > @@ -137,7 +175,7 @@ export const GroupMemberManagement: React.FC = ({ {member} - + Queued for addition diff --git a/src/ui/pages/iam/ManageIam.page.tsx b/src/ui/pages/iam/ManageIam.page.tsx index dde0398a..e0e3b6a4 100644 --- a/src/ui/pages/iam/ManageIam.page.tsx +++ b/src/ui/pages/iam/ManageIam.page.tsx @@ -5,15 +5,16 @@ import { useApi } from '@ui/util/api'; import { AppRoles } from '@common/roles'; import UserInvitePanel from './UserInvitePanel'; import GroupMemberManagement from './GroupMemberManagement'; -import { execCouncilGroupId } from '@common/config'; import { EntraActionResponse, GroupMemberGetResponse, GroupModificationPatchRequest, } from '@common/types/iam'; +import { getRunEnvironmentConfig } from '@ui/config'; export const ManageIamPage = () => { const api = useApi('core'); + const groupId = getRunEnvironmentConfig().KnownGroupMappings.Exec; const handleInviteSubmit = async (emailList: string[]) => { try { @@ -35,7 +36,7 @@ export const ManageIamPage = () => { const getExecMembers = async () => { try { - const response = await api.get(`/api/v1/iam/groups/${execCouncilGroupId}`); + const response = await api.get(`/api/v1/iam/groups/${groupId}`); return response.data as GroupMemberGetResponse; } catch (error: any) { console.error('Failed to get users:', error); @@ -46,7 +47,7 @@ export const ManageIamPage = () => { const updateExecMembers = async (toAdd: string[], toRemove: string[]) => { const allMembers = toAdd.concat(toRemove); try { - const response = await api.patch(`/api/v1/iam/groups/${execCouncilGroupId}`, { + const response = await api.patch(`/api/v1/iam/groups/${groupId}`, { remove: toRemove, add: toAdd, } as GroupModificationPatchRequest); diff --git a/yarn.lock b/yarn.lock index 5cf5f79b..8f1f32ae 100644 --- a/yarn.lock +++ b/yarn.lock @@ -198,6 +198,51 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/client-sso-oidc@3.726.0": + version "3.726.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.726.0.tgz#6c83f6f95f15a7557f84c0d9ccd3f489368601a8" + integrity sha512-5JzTX9jwev7+y2Jkzjz0pd1wobB5JQfPOQF3N2DrJ5Pao0/k6uRYwE4NqB0p0HlGrMTDm7xNq7OSPPIPG575Jw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.723.0" + "@aws-sdk/credential-provider-node" "3.726.0" + "@aws-sdk/middleware-host-header" "3.723.0" + "@aws-sdk/middleware-logger" "3.723.0" + "@aws-sdk/middleware-recursion-detection" "3.723.0" + "@aws-sdk/middleware-user-agent" "3.726.0" + "@aws-sdk/region-config-resolver" "3.723.0" + "@aws-sdk/types" "3.723.0" + "@aws-sdk/util-endpoints" "3.726.0" + "@aws-sdk/util-user-agent-browser" "3.723.0" + "@aws-sdk/util-user-agent-node" "3.726.0" + "@smithy/config-resolver" "^4.0.0" + "@smithy/core" "^3.0.0" + "@smithy/fetch-http-handler" "^5.0.0" + "@smithy/hash-node" "^4.0.0" + "@smithy/invalid-dependency" "^4.0.0" + "@smithy/middleware-content-length" "^4.0.0" + "@smithy/middleware-endpoint" "^4.0.0" + "@smithy/middleware-retry" "^4.0.0" + "@smithy/middleware-serde" "^4.0.0" + "@smithy/middleware-stack" "^4.0.0" + "@smithy/node-config-provider" "^4.0.0" + "@smithy/node-http-handler" "^4.0.0" + "@smithy/protocol-http" "^5.0.0" + "@smithy/smithy-client" "^4.0.0" + "@smithy/types" "^4.0.0" + "@smithy/url-parser" "^4.0.0" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.0" + "@smithy/util-defaults-mode-node" "^4.0.0" + "@smithy/util-endpoints" "^3.0.0" + "@smithy/util-middleware" "^4.0.0" + "@smithy/util-retry" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/client-sso@3.721.0": version "3.721.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.721.0.tgz#3a99c3f54081024e16fc22f43913155a403f84aa" @@ -242,6 +287,50 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/client-sso@3.726.0": + version "3.726.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.726.0.tgz#802a9a8d22db029361b859ae4a079ad680c98db4" + integrity sha512-NM5pjv2qglEc4XN3nnDqtqGsSGv1k5YTmzDo3W3pObItHmpS8grSeNfX9zSH+aVl0Q8hE4ZIgvTPNZ+GzwVlqg== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.723.0" + "@aws-sdk/middleware-host-header" "3.723.0" + "@aws-sdk/middleware-logger" "3.723.0" + "@aws-sdk/middleware-recursion-detection" "3.723.0" + "@aws-sdk/middleware-user-agent" "3.726.0" + "@aws-sdk/region-config-resolver" "3.723.0" + "@aws-sdk/types" "3.723.0" + "@aws-sdk/util-endpoints" "3.726.0" + "@aws-sdk/util-user-agent-browser" "3.723.0" + "@aws-sdk/util-user-agent-node" "3.726.0" + "@smithy/config-resolver" "^4.0.0" + "@smithy/core" "^3.0.0" + "@smithy/fetch-http-handler" "^5.0.0" + "@smithy/hash-node" "^4.0.0" + "@smithy/invalid-dependency" "^4.0.0" + "@smithy/middleware-content-length" "^4.0.0" + "@smithy/middleware-endpoint" "^4.0.0" + "@smithy/middleware-retry" "^4.0.0" + "@smithy/middleware-serde" "^4.0.0" + "@smithy/middleware-stack" "^4.0.0" + "@smithy/node-config-provider" "^4.0.0" + "@smithy/node-http-handler" "^4.0.0" + "@smithy/protocol-http" "^5.0.0" + "@smithy/smithy-client" "^4.0.0" + "@smithy/types" "^4.0.0" + "@smithy/url-parser" "^4.0.0" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.0" + "@smithy/util-defaults-mode-node" "^4.0.0" + "@smithy/util-endpoints" "^3.0.0" + "@smithy/util-middleware" "^4.0.0" + "@smithy/util-retry" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/client-sts@3.721.0": version "3.721.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.721.0.tgz#701de8e0877aec3974291e19cd1361feda742680" @@ -288,6 +377,52 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/client-sts@^3.726.0": + version "3.726.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.726.0.tgz#d878419a0bac65f5bf975c4d94efad5029e46932" + integrity sha512-047EqXv2BAn/43eP92zsozPnR3paFFMsj5gjytx9kGNtp+WV0fUZNztCOobtouAxBY0ZQ8Xx5RFnmjpRb6Kjsg== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.726.0" + "@aws-sdk/core" "3.723.0" + "@aws-sdk/credential-provider-node" "3.726.0" + "@aws-sdk/middleware-host-header" "3.723.0" + "@aws-sdk/middleware-logger" "3.723.0" + "@aws-sdk/middleware-recursion-detection" "3.723.0" + "@aws-sdk/middleware-user-agent" "3.726.0" + "@aws-sdk/region-config-resolver" "3.723.0" + "@aws-sdk/types" "3.723.0" + "@aws-sdk/util-endpoints" "3.726.0" + "@aws-sdk/util-user-agent-browser" "3.723.0" + "@aws-sdk/util-user-agent-node" "3.726.0" + "@smithy/config-resolver" "^4.0.0" + "@smithy/core" "^3.0.0" + "@smithy/fetch-http-handler" "^5.0.0" + "@smithy/hash-node" "^4.0.0" + "@smithy/invalid-dependency" "^4.0.0" + "@smithy/middleware-content-length" "^4.0.0" + "@smithy/middleware-endpoint" "^4.0.0" + "@smithy/middleware-retry" "^4.0.0" + "@smithy/middleware-serde" "^4.0.0" + "@smithy/middleware-stack" "^4.0.0" + "@smithy/node-config-provider" "^4.0.0" + "@smithy/node-http-handler" "^4.0.0" + "@smithy/protocol-http" "^5.0.0" + "@smithy/smithy-client" "^4.0.0" + "@smithy/types" "^4.0.0" + "@smithy/url-parser" "^4.0.0" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.0" + "@smithy/util-defaults-mode-node" "^4.0.0" + "@smithy/util-endpoints" "^3.0.0" + "@smithy/util-middleware" "^4.0.0" + "@smithy/util-retry" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/core@3.716.0": version "3.716.0" resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.716.0.tgz#17f92240a035ed6aea5ac277e35db8683ad5c734" @@ -305,6 +440,23 @@ fast-xml-parser "4.4.1" tslib "^2.6.2" +"@aws-sdk/core@3.723.0": + version "3.723.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.723.0.tgz#7a441b1362fa22609f80ede42d4e069829b9b4d1" + integrity sha512-UraXNmvqj3vScSsTkjMwQkhei30BhXlW5WxX6JacMKVtl95c7z0qOXquTWeTalYkFfulfdirUhvSZrl+hcyqTw== + dependencies: + "@aws-sdk/types" "3.723.0" + "@smithy/core" "^3.0.0" + "@smithy/node-config-provider" "^4.0.0" + "@smithy/property-provider" "^4.0.0" + "@smithy/protocol-http" "^5.0.0" + "@smithy/signature-v4" "^5.0.0" + "@smithy/smithy-client" "^4.0.0" + "@smithy/types" "^4.0.0" + "@smithy/util-middleware" "^4.0.0" + fast-xml-parser "4.4.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-env@3.716.0": version "3.716.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.716.0.tgz#10ab93c5806f5e1b29dde8dae38307c766b99197" @@ -316,6 +468,17 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@aws-sdk/credential-provider-env@3.723.0": + version "3.723.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.723.0.tgz#7d85014d21ce50f9f6a108c5c673e87c54860eaa" + integrity sha512-OuH2yULYUHTVDUotBoP/9AEUIJPn81GQ/YBtZLoo2QyezRJ2QiO/1epVtbJlhNZRwXrToLEDmQGA2QfC8c7pbA== + dependencies: + "@aws-sdk/core" "3.723.0" + "@aws-sdk/types" "3.723.0" + "@smithy/property-provider" "^4.0.0" + "@smithy/types" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-http@3.716.0": version "3.716.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.716.0.tgz#6d02e3c8b67069a30f51cd3fa761a1e939940da4" @@ -332,6 +495,22 @@ "@smithy/util-stream" "^3.3.2" tslib "^2.6.2" +"@aws-sdk/credential-provider-http@3.723.0": + version "3.723.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.723.0.tgz#3b5db3225bb6dd97fecf22e18c06c3567eb1bce4" + integrity sha512-DTsKC6xo/kz/ZSs1IcdbQMTgiYbpGTGEd83kngFc1bzmw7AmK92DBZKNZpumf8R/UfSpTcj9zzUUmrWz1kD0eQ== + dependencies: + "@aws-sdk/core" "3.723.0" + "@aws-sdk/types" "3.723.0" + "@smithy/fetch-http-handler" "^5.0.0" + "@smithy/node-http-handler" "^4.0.0" + "@smithy/property-provider" "^4.0.0" + "@smithy/protocol-http" "^5.0.0" + "@smithy/smithy-client" "^4.0.0" + "@smithy/types" "^4.0.0" + "@smithy/util-stream" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-ini@3.721.0": version "3.721.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.721.0.tgz#6b28d36fb3409099eb2f8e6222a6b8064516ab32" @@ -350,6 +529,24 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@aws-sdk/credential-provider-ini@3.726.0": + version "3.726.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.726.0.tgz#25115ecb3814f3f8e106cf12f5f34ab247095244" + integrity sha512-seTtcKL2+gZX6yK1QRPr5mDJIBOatrpoyrO8D5b8plYtV/PDbDW3mtDJSWFHet29G61ZmlNElyXRqQCXn9WX+A== + dependencies: + "@aws-sdk/core" "3.723.0" + "@aws-sdk/credential-provider-env" "3.723.0" + "@aws-sdk/credential-provider-http" "3.723.0" + "@aws-sdk/credential-provider-process" "3.723.0" + "@aws-sdk/credential-provider-sso" "3.726.0" + "@aws-sdk/credential-provider-web-identity" "3.723.0" + "@aws-sdk/types" "3.723.0" + "@smithy/credential-provider-imds" "^4.0.0" + "@smithy/property-provider" "^4.0.0" + "@smithy/shared-ini-file-loader" "^4.0.0" + "@smithy/types" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-node@3.721.0": version "3.721.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.721.0.tgz#a52dc78efebfa566711e12b53e01a9e7216cba8a" @@ -368,6 +565,24 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@aws-sdk/credential-provider-node@3.726.0": + version "3.726.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.726.0.tgz#a997ea8e8e871e77cbebf6c8a6179d6f6af8897c" + integrity sha512-jjsewBcw/uLi24x8JbnuDjJad4VA9ROCE94uVRbEnGmUEsds75FWOKp3fWZLQlmjLtzsIbJOZLALkZP86liPaw== + dependencies: + "@aws-sdk/credential-provider-env" "3.723.0" + "@aws-sdk/credential-provider-http" "3.723.0" + "@aws-sdk/credential-provider-ini" "3.726.0" + "@aws-sdk/credential-provider-process" "3.723.0" + "@aws-sdk/credential-provider-sso" "3.726.0" + "@aws-sdk/credential-provider-web-identity" "3.723.0" + "@aws-sdk/types" "3.723.0" + "@smithy/credential-provider-imds" "^4.0.0" + "@smithy/property-provider" "^4.0.0" + "@smithy/shared-ini-file-loader" "^4.0.0" + "@smithy/types" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-process@3.716.0": version "3.716.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.716.0.tgz#a8a7b9416cb28c0e2ef601a2713342533619ce4c" @@ -380,6 +595,18 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@aws-sdk/credential-provider-process@3.723.0": + version "3.723.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.723.0.tgz#32bc55573b0a8f31e69b15939202d266adbbe711" + integrity sha512-fgupvUjz1+jeoCBA7GMv0L6xEk92IN6VdF4YcFhsgRHlHvNgm7ayaoKQg7pz2JAAhG/3jPX6fp0ASNy+xOhmPA== + dependencies: + "@aws-sdk/core" "3.723.0" + "@aws-sdk/types" "3.723.0" + "@smithy/property-provider" "^4.0.0" + "@smithy/shared-ini-file-loader" "^4.0.0" + "@smithy/types" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-sso@3.721.0": version "3.721.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.721.0.tgz#14350ec1ccdb612af36f35e4383067ecfb99f8e6" @@ -394,6 +621,20 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@aws-sdk/credential-provider-sso@3.726.0": + version "3.726.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.726.0.tgz#460dbc65e3d8dfd151d7b41e2da85ba7e7cc1f0a" + integrity sha512-WxkN76WeB08j2yw7jUH9yCMPxmT9eBFd9ZA/aACG7yzOIlsz7gvG3P2FQ0tVg25GHM0E4PdU3p/ByTOawzcOAg== + dependencies: + "@aws-sdk/client-sso" "3.726.0" + "@aws-sdk/core" "3.723.0" + "@aws-sdk/token-providers" "3.723.0" + "@aws-sdk/types" "3.723.0" + "@smithy/property-provider" "^4.0.0" + "@smithy/shared-ini-file-loader" "^4.0.0" + "@smithy/types" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-web-identity@3.716.0": version "3.716.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.716.0.tgz#dfde14b78a311c0d5ef974f42049c41bef604a83" @@ -405,6 +646,17 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@aws-sdk/credential-provider-web-identity@3.723.0": + version "3.723.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.723.0.tgz#5c17ea243b05b4dca0584db597ac68d8509dd754" + integrity sha512-tl7pojbFbr3qLcOE6xWaNCf1zEfZrIdSJtOPeSXfV/thFMMAvIjgf3YN6Zo1a6cxGee8zrV/C8PgOH33n+Ev/A== + dependencies: + "@aws-sdk/core" "3.723.0" + "@aws-sdk/types" "3.723.0" + "@smithy/property-provider" "^4.0.0" + "@smithy/types" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/endpoint-cache@3.693.0": version "3.693.0" resolved "https://registry.yarnpkg.com/@aws-sdk/endpoint-cache/-/endpoint-cache-3.693.0.tgz#4b3f0bbc16dc2907e1b977e3d8ddfc7ba008fd12" @@ -435,6 +687,16 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@aws-sdk/middleware-host-header@3.723.0": + version "3.723.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.723.0.tgz#f043689755e5b45ee6500b0d0a7090d9b4a864f7" + integrity sha512-LLVzLvk299pd7v4jN9yOSaWDZDfH0SnBPb6q+FDPaOCMGBY8kuwQso7e/ozIKSmZHRMGO3IZrflasHM+rI+2YQ== + dependencies: + "@aws-sdk/types" "3.723.0" + "@smithy/protocol-http" "^5.0.0" + "@smithy/types" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/middleware-logger@3.714.0": version "3.714.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.714.0.tgz#c059e1aabf28fdfc647db6a3dba625a9813787cd" @@ -444,6 +706,15 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@aws-sdk/middleware-logger@3.723.0": + version "3.723.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.723.0.tgz#e8718056fc2d73a0d51308cad20676228be26652" + integrity sha512-chASQfDG5NJ8s5smydOEnNK7N0gDMyuPbx7dYYcm1t/PKtnVfvWF+DHCTrRC2Ej76gLJVCVizlAJKM8v8Kg3cg== + dependencies: + "@aws-sdk/types" "3.723.0" + "@smithy/types" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/middleware-recursion-detection@3.714.0": version "3.714.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.714.0.tgz#c2d20d335c035196ac1cd5cdf3f58c5f31b01bdb" @@ -454,6 +725,16 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@aws-sdk/middleware-recursion-detection@3.723.0": + version "3.723.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.723.0.tgz#b4557c7f554492f56eeb0cbf5bc02dac7ef102a8" + integrity sha512-7usZMtoynT9/jxL/rkuDOFQ0C2mhXl4yCm67Rg7GNTstl67u7w5WN1aIRImMeztaKlw8ExjoTyo6WTs1Kceh7A== + dependencies: + "@aws-sdk/types" "3.723.0" + "@smithy/protocol-http" "^5.0.0" + "@smithy/types" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/middleware-user-agent@3.721.0": version "3.721.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.721.0.tgz#2a5fbfb63d42a79b4f4b9d94e5aefa66b4e57ddd" @@ -467,6 +748,19 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@aws-sdk/middleware-user-agent@3.726.0": + version "3.726.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.726.0.tgz#d8a791c61adca1f26332ce5128da7aa6c1433e89" + integrity sha512-hZvzuE5S0JmFie1r68K2wQvJbzyxJFdzltj9skgnnwdvLe8F/tz7MqLkm28uV0m4jeHk0LpiBo6eZaPkQiwsZQ== + dependencies: + "@aws-sdk/core" "3.723.0" + "@aws-sdk/types" "3.723.0" + "@aws-sdk/util-endpoints" "3.726.0" + "@smithy/core" "^3.0.0" + "@smithy/protocol-http" "^5.0.0" + "@smithy/types" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/region-config-resolver@3.714.0": version "3.714.0" resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.714.0.tgz#26449aeb67daa00560c69bb80cb6cd187ee18dc9" @@ -479,6 +773,18 @@ "@smithy/util-middleware" "^3.0.11" tslib "^2.6.2" +"@aws-sdk/region-config-resolver@3.723.0": + version "3.723.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.723.0.tgz#07b7ee4788ec7a7f5638bbbe0f9f7565125caf22" + integrity sha512-tGF/Cvch3uQjZIj34LY2mg8M2Dr4kYG8VU8Yd0dFnB1ybOEOveIK/9ypUo9ycZpB9oO6q01KRe5ijBaxNueUQg== + dependencies: + "@aws-sdk/types" "3.723.0" + "@smithy/node-config-provider" "^4.0.0" + "@smithy/types" "^4.0.0" + "@smithy/util-config-provider" "^4.0.0" + "@smithy/util-middleware" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/token-providers@3.721.0": version "3.721.0" resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.721.0.tgz#7956b8e88fd995b0fed3716a4d33f0e35f76a598" @@ -490,6 +796,17 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@aws-sdk/token-providers@3.723.0": + version "3.723.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.723.0.tgz#ae173a18783886e592212abb820d28cbdb9d9237" + integrity sha512-hniWi1x4JHVwKElANh9afKIMUhAutHVBRD8zo6usr0PAoj+Waf220+1ULS74GXtLXAPCiNXl5Og+PHA7xT8ElQ== + dependencies: + "@aws-sdk/types" "3.723.0" + "@smithy/property-provider" "^4.0.0" + "@smithy/shared-ini-file-loader" "^4.0.0" + "@smithy/types" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/types@3.714.0", "@aws-sdk/types@^3.222.0": version "3.714.0" resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.714.0.tgz#de6afee1436d2d95364efa0663887f3bf0b1303a" @@ -498,6 +815,14 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@aws-sdk/types@3.723.0": + version "3.723.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.723.0.tgz#f0c5a6024a73470421c469b6c1dd5bc4b8fb851b" + integrity sha512-LmK3kwiMZG1y5g3LGihT9mNkeNOmwEyPk6HGcJqh0wOSV4QpWoKu2epyKE4MLQNUUlz2kOVbVbOrwmI6ZcteuA== + dependencies: + "@smithy/types" "^4.0.0" + tslib "^2.6.2" + "@aws-sdk/util-dynamodb@^3.624.0": version "3.721.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-dynamodb/-/util-dynamodb-3.721.0.tgz#781723705f5a6c8dd8b3bd163acb5b0a78b7e33b" @@ -515,6 +840,16 @@ "@smithy/util-endpoints" "^2.1.7" tslib "^2.6.2" +"@aws-sdk/util-endpoints@3.726.0": + version "3.726.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.726.0.tgz#0b39d4e2fe4b8b4a35d7e3714f1ed126114befd9" + integrity sha512-sLd30ASsPMoPn3XBK50oe/bkpJ4N8Bpb7SbhoxcY3Lk+fSASaWxbbXE81nbvCnkxrZCvkPOiDHzJCp1E2im71A== + dependencies: + "@aws-sdk/types" "3.723.0" + "@smithy/types" "^4.0.0" + "@smithy/util-endpoints" "^3.0.0" + tslib "^2.6.2" + "@aws-sdk/util-locate-window@^3.0.0": version "3.693.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.693.0.tgz#1160f6d055cf074ca198eb8ecf89b6311537ad6c" @@ -532,6 +867,16 @@ bowser "^2.11.0" tslib "^2.6.2" +"@aws-sdk/util-user-agent-browser@3.723.0": + version "3.723.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.723.0.tgz#64b0b4413c1be1585f95c3e2606429cc9f86df83" + integrity sha512-Wh9I6j2jLhNFq6fmXydIpqD1WyQLyTfSxjW9B+PXSnPyk3jtQW8AKQur7p97rO8LAUzVI0bv8kb3ZzDEVbquIg== + dependencies: + "@aws-sdk/types" "3.723.0" + "@smithy/types" "^4.0.0" + bowser "^2.11.0" + tslib "^2.6.2" + "@aws-sdk/util-user-agent-node@3.721.0": version "3.721.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.721.0.tgz#d5336167c753d1bbb749044155cb54aebdf3cf32" @@ -543,6 +888,17 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@aws-sdk/util-user-agent-node@3.726.0": + version "3.726.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.726.0.tgz#f093568a730b0d58ef7eca231f27309b11b8ef61" + integrity sha512-iEj6KX9o6IQf23oziorveRqyzyclWai95oZHDJtYav3fvLJKStwSjygO4xSF7ycHcTYeCHSLO1FFOHgGVs4Viw== + dependencies: + "@aws-sdk/middleware-user-agent" "3.726.0" + "@aws-sdk/types" "3.723.0" + "@smithy/node-config-provider" "^4.0.0" + "@smithy/types" "^4.0.0" + tslib "^2.6.2" + "@azure/msal-browser@^3.20.0": version "3.28.0" resolved "https://registry.yarnpkg.com/@azure/msal-browser/-/msal-browser-3.28.0.tgz#faf955f1debe24ebf24cf8cbfb67246c658c3f11" @@ -1703,6 +2059,14 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@smithy/abort-controller@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.0.1.tgz#7c5e73690c4105ad264c2896bd1ea822450c3819" + integrity sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + "@smithy/config-resolver@^3.0.13": version "3.0.13" resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.13.tgz#653643a77a33d0f5907a5e7582353886b07ba752" @@ -1714,6 +2078,17 @@ "@smithy/util-middleware" "^3.0.11" tslib "^2.6.2" +"@smithy/config-resolver@^4.0.0", "@smithy/config-resolver@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-4.0.1.tgz#3d6c78bbc51adf99c9819bb3f0ea197fe03ad363" + integrity sha512-Igfg8lKu3dRVkTSEm98QpZUvKEOa71jDX4vKRcvJVyRc3UgN3j7vFMf0s7xLQhYmKa8kyJGQgUJDOV5V3neVlQ== + dependencies: + "@smithy/node-config-provider" "^4.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-config-provider" "^4.0.0" + "@smithy/util-middleware" "^4.0.1" + tslib "^2.6.2" + "@smithy/core@^2.5.5", "@smithy/core@^2.5.7": version "2.5.7" resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.5.7.tgz#b545649071905f064cb0407102f3b9159246f8d9" @@ -1728,6 +2103,20 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@smithy/core@^3.0.0", "@smithy/core@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.1.0.tgz#7af3f2f06ffd84e98e402da21dd9a40c2abb58ff" + integrity sha512-swFv0wQiK7TGHeuAp6lfF5Kw1dHWsTrCuc+yh4Kh05gEShjsE2RUxHucEerR9ih9JITNtaHcSpUThn5Y/vDw0A== + dependencies: + "@smithy/middleware-serde" "^4.0.1" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-stream" "^4.0.1" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@smithy/credential-provider-imds@^3.2.8": version "3.2.8" resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.8.tgz#27ed2747074c86a7d627a98e56f324a65cba88de" @@ -1739,6 +2128,17 @@ "@smithy/url-parser" "^3.0.11" tslib "^2.6.2" +"@smithy/credential-provider-imds@^4.0.0", "@smithy/credential-provider-imds@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.1.tgz#807110739982acd1588a4847b61e6edf196d004e" + integrity sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg== + dependencies: + "@smithy/node-config-provider" "^4.0.1" + "@smithy/property-provider" "^4.0.1" + "@smithy/types" "^4.1.0" + "@smithy/url-parser" "^4.0.1" + tslib "^2.6.2" + "@smithy/fetch-http-handler@^4.1.2", "@smithy/fetch-http-handler@^4.1.3": version "4.1.3" resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-4.1.3.tgz#fc590dea2470d32559ae298306f1277729d24aa9" @@ -1750,6 +2150,17 @@ "@smithy/util-base64" "^3.0.0" tslib "^2.6.2" +"@smithy/fetch-http-handler@^5.0.0", "@smithy/fetch-http-handler@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.1.tgz#8463393442ca6a1644204849e42c386066f0df79" + integrity sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA== + dependencies: + "@smithy/protocol-http" "^5.0.1" + "@smithy/querystring-builder" "^4.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-base64" "^4.0.0" + tslib "^2.6.2" + "@smithy/hash-node@^3.0.11": version "3.0.11" resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.11.tgz#99e09ead3fc99c8cd7ca0f254ea0e35714f2a0d3" @@ -1760,6 +2171,16 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@smithy/hash-node@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-4.0.1.tgz#ce78fc11b848a4f47c2e1e7a07fb6b982d2f130c" + integrity sha512-TJ6oZS+3r2Xu4emVse1YPB3Dq3d8RkZDKcPr71Nj/lJsdAP1c7oFzYqEn1IBc915TsgLl2xIJNuxCz+gLbLE0w== + dependencies: + "@smithy/types" "^4.1.0" + "@smithy/util-buffer-from" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@smithy/invalid-dependency@^3.0.11": version "3.0.11" resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.11.tgz#8144d7b0af9d34ab5f672e1f674f97f8740bb9ae" @@ -1768,6 +2189,14 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@smithy/invalid-dependency@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.0.1.tgz#704d1acb6fac105558c17d53f6d55da6b0d6b6fc" + integrity sha512-gdudFPf4QRQ5pzj7HEnu6FhKRi61BfH/Gk5Yf6O0KiSbr1LlVhgjThcvjdu658VE6Nve8vaIWB8/fodmS1rBPQ== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + "@smithy/is-array-buffer@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz#f84f0d9f9a36601a9ca9381688bd1b726fd39111" @@ -1782,6 +2211,13 @@ dependencies: tslib "^2.6.2" +"@smithy/is-array-buffer@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz#55a939029321fec462bcc574890075cd63e94206" + integrity sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw== + dependencies: + tslib "^2.6.2" + "@smithy/middleware-content-length@^3.0.13": version "3.0.13" resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.13.tgz#6e08fe52739ac8fb3996088e0f8837e4b2ea187f" @@ -1791,6 +2227,15 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@smithy/middleware-content-length@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.0.1.tgz#378bc94ae623f45e412fb4f164b5bb90b9de2ba3" + integrity sha512-OGXo7w5EkB5pPiac7KNzVtfCW2vKBTZNuCctn++TTSOMpe6RZO/n6WEC1AxJINn3+vWLKW49uad3lo/u0WJ9oQ== + dependencies: + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + "@smithy/middleware-endpoint@^3.2.6", "@smithy/middleware-endpoint@^3.2.8": version "3.2.8" resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.8.tgz#6ca5de80543ba0f0d40e15dc3f9d0f14d192e06e" @@ -1805,6 +2250,20 @@ "@smithy/util-middleware" "^3.0.11" tslib "^2.6.2" +"@smithy/middleware-endpoint@^4.0.0", "@smithy/middleware-endpoint@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.1.tgz#a80ee5b7d2ba3f735e7cc77864f8211db1c63ccb" + integrity sha512-hCCOPu9+sRI7Wj0rZKKnGylKXBEd9cQJetzjQqe8cT4PWvtQAbvNVa6cgAONiZg9m8LaXtP9/waxm3C3eO4hiw== + dependencies: + "@smithy/core" "^3.1.0" + "@smithy/middleware-serde" "^4.0.1" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/shared-ini-file-loader" "^4.0.1" + "@smithy/types" "^4.1.0" + "@smithy/url-parser" "^4.0.1" + "@smithy/util-middleware" "^4.0.1" + tslib "^2.6.2" + "@smithy/middleware-retry@^3.0.31": version "3.0.34" resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.34.tgz#136c89fc22d70819fdefc51b0d24952cf98883f1" @@ -1820,6 +2279,21 @@ tslib "^2.6.2" uuid "^9.0.1" +"@smithy/middleware-retry@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.0.1.tgz#1f7fb3086f80d49a5990ffeafade0a264d230146" + integrity sha512-n3g2zZFgOWaz2ZYCy8+4wxSmq+HSTD8QKkRhFDv+nkxY1o7gzyp4PDz/+tOdcNPMPZ/A6Mt4aVECYNjQNiaHJw== + dependencies: + "@smithy/node-config-provider" "^4.0.1" + "@smithy/protocol-http" "^5.0.1" + "@smithy/service-error-classification" "^4.0.1" + "@smithy/smithy-client" "^4.1.0" + "@smithy/types" "^4.1.0" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-retry" "^4.0.1" + tslib "^2.6.2" + uuid "^9.0.1" + "@smithy/middleware-serde@^3.0.11": version "3.0.11" resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.11.tgz#c7d54e0add4f83e05c6878a011fc664e21022f12" @@ -1828,6 +2302,14 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@smithy/middleware-serde@^4.0.0", "@smithy/middleware-serde@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.0.1.tgz#4c9218cecd5316ab696e73fdc1c80b38bcaffa99" + integrity sha512-Fh0E2SOF+S+P1+CsgKyiBInAt3o2b6Qk7YOp2W0Qx2XnfTdfMuSDKUEcnrtpxCzgKJnqXeLUZYqtThaP0VGqtA== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + "@smithy/middleware-stack@^3.0.11": version "3.0.11" resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.11.tgz#453af2096924e4064d9da4e053cfdf65d9a36acc" @@ -1836,6 +2318,14 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@smithy/middleware-stack@^4.0.0", "@smithy/middleware-stack@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.0.1.tgz#c157653f9df07f7c26e32f49994d368e4e071d22" + integrity sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + "@smithy/node-config-provider@^3.1.12": version "3.1.12" resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.12.tgz#1b1d674fc83f943dc7b3017e37f16f374e878a6c" @@ -1846,6 +2336,16 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@smithy/node-config-provider@^4.0.0", "@smithy/node-config-provider@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.0.1.tgz#4e84fe665c0774d5f4ebb75144994fc6ebedf86e" + integrity sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ== + dependencies: + "@smithy/property-provider" "^4.0.1" + "@smithy/shared-ini-file-loader" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + "@smithy/node-http-handler@^3.3.2", "@smithy/node-http-handler@^3.3.3": version "3.3.3" resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.3.3.tgz#94dbb3f15342b656ceba2b26e14aa741cace8919" @@ -1857,6 +2357,17 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@smithy/node-http-handler@^4.0.0", "@smithy/node-http-handler@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.0.1.tgz#3673102f9d719ccbbe18183f59cee368b3881b2c" + integrity sha512-ddQc7tvXiVLC5c3QKraGWde761KSk+mboCheZoWtuqnXh5l0WKyFy3NfDIM/dsKrI9HlLVH/21pi9wWK2gUFFA== + dependencies: + "@smithy/abort-controller" "^4.0.1" + "@smithy/protocol-http" "^5.0.1" + "@smithy/querystring-builder" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + "@smithy/property-provider@^3.1.11": version "3.1.11" resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.11.tgz#161cf1c2a2ada361e417382c57f5ba6fbca8acad" @@ -1865,6 +2376,14 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@smithy/property-provider@^4.0.0", "@smithy/property-provider@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.0.1.tgz#8d35d5997af2a17cf15c5e921201ef6c5e3fc870" + integrity sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + "@smithy/protocol-http@^4.1.8": version "4.1.8" resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.8.tgz#0461758671335f65e8ff3fc0885ab7ed253819c9" @@ -1873,6 +2392,14 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@smithy/protocol-http@^5.0.0", "@smithy/protocol-http@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.0.1.tgz#37c248117b29c057a9adfad4eb1d822a67079ff1" + integrity sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + "@smithy/querystring-builder@^3.0.11": version "3.0.11" resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.11.tgz#2ed04adbe725671824c5613d0d6f9376d791a909" @@ -1882,6 +2409,15 @@ "@smithy/util-uri-escape" "^3.0.0" tslib "^2.6.2" +"@smithy/querystring-builder@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.0.1.tgz#37e1e05d0d33c6f694088abc3e04eafb65cb6976" + integrity sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg== + dependencies: + "@smithy/types" "^4.1.0" + "@smithy/util-uri-escape" "^4.0.0" + tslib "^2.6.2" + "@smithy/querystring-parser@^3.0.11": version "3.0.11" resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.11.tgz#9d3177ea19ce8462f18d9712b395239e1ca1f969" @@ -1890,6 +2426,14 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@smithy/querystring-parser@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.0.1.tgz#312dc62b146f8bb8a67558d82d4722bb9211af42" + integrity sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + "@smithy/service-error-classification@^3.0.11": version "3.0.11" resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.11.tgz#d3d7fc0aacd2e60d022507367e55c7939e5bcb8a" @@ -1897,6 +2441,13 @@ dependencies: "@smithy/types" "^3.7.2" +"@smithy/service-error-classification@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.0.1.tgz#84e78579af46c7b79c900b6d6cc822c9465f3259" + integrity sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA== + dependencies: + "@smithy/types" "^4.1.0" + "@smithy/shared-ini-file-loader@^3.1.12": version "3.1.12" resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.12.tgz#d98b1b663eb18935ce2cbc79024631d34f54042a" @@ -1905,6 +2456,14 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@smithy/shared-ini-file-loader@^4.0.0", "@smithy/shared-ini-file-loader@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.1.tgz#d35c21c29454ca4e58914a4afdde68d3b2def1ee" + integrity sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + "@smithy/signature-v4@^4.2.4": version "4.2.4" resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.2.4.tgz#3501d3d09fd82768867bfc00a7be4bad62f62f4d" @@ -1919,6 +2478,20 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@smithy/signature-v4@^5.0.0": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.0.1.tgz#f93401b176150286ba246681031b0503ec359270" + integrity sha512-nCe6fQ+ppm1bQuw5iKoeJ0MJfz2os7Ic3GBjOkLOPtavbD1ONoyE3ygjBfz2ythFWm4YnRm6OxW+8p/m9uCoIA== + dependencies: + "@smithy/is-array-buffer" "^4.0.0" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-hex-encoding" "^4.0.0" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-uri-escape" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@smithy/smithy-client@^3.5.1", "@smithy/smithy-client@^3.7.0": version "3.7.0" resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.7.0.tgz#8cfaa7b68b7af15e588b96aa14e5dce393f85839" @@ -1932,6 +2505,19 @@ "@smithy/util-stream" "^3.3.4" tslib "^2.6.2" +"@smithy/smithy-client@^4.0.0", "@smithy/smithy-client@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.1.0.tgz#066ddfb5214a75e619e43c657dcfe531fd757d43" + integrity sha512-NiboZnrsrZY+Cy5hQNbYi+nVNssXVi2I+yL4CIKNIanOhH8kpC5PKQ2jx/MQpwVr21a3XcVoQBArlpRF36OeEQ== + dependencies: + "@smithy/core" "^3.1.0" + "@smithy/middleware-endpoint" "^4.0.1" + "@smithy/middleware-stack" "^4.0.1" + "@smithy/protocol-http" "^5.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-stream" "^4.0.1" + tslib "^2.6.2" + "@smithy/types@^3.7.2": version "3.7.2" resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.7.2.tgz#05cb14840ada6f966de1bf9a9c7dd86027343e10" @@ -1939,6 +2525,13 @@ dependencies: tslib "^2.6.2" +"@smithy/types@^4.0.0", "@smithy/types@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.1.0.tgz#19de0b6087bccdd4182a334eb5d3d2629699370f" + integrity sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw== + dependencies: + tslib "^2.6.2" + "@smithy/url-parser@^3.0.11": version "3.0.11" resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.11.tgz#e5f5ffabfb6230159167cf4cc970705fca6b8b2d" @@ -1948,6 +2541,15 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@smithy/url-parser@^4.0.0", "@smithy/url-parser@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.0.1.tgz#b47743f785f5b8d81324878cbb1b5f834bf8d85a" + integrity sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g== + dependencies: + "@smithy/querystring-parser" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + "@smithy/util-base64@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-3.0.0.tgz#f7a9a82adf34e27a72d0719395713edf0e493017" @@ -1957,6 +2559,15 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@smithy/util-base64@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-4.0.0.tgz#8345f1b837e5f636e5f8470c4d1706ae0c6d0358" + integrity sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg== + dependencies: + "@smithy/util-buffer-from" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@smithy/util-body-length-browser@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz#86ec2f6256310b4845a2f064e2f571c1ca164ded" @@ -1964,6 +2575,13 @@ dependencies: tslib "^2.6.2" +"@smithy/util-body-length-browser@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz#965d19109a4b1e5fe7a43f813522cce718036ded" + integrity sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA== + dependencies: + tslib "^2.6.2" + "@smithy/util-body-length-node@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz#99a291bae40d8932166907fe981d6a1f54298a6d" @@ -1971,6 +2589,13 @@ dependencies: tslib "^2.6.2" +"@smithy/util-body-length-node@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz#3db245f6844a9b1e218e30c93305bfe2ffa473b3" + integrity sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg== + dependencies: + tslib "^2.6.2" + "@smithy/util-buffer-from@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz#6fc88585165ec73f8681d426d96de5d402021e4b" @@ -1987,6 +2612,14 @@ "@smithy/is-array-buffer" "^3.0.0" tslib "^2.6.2" +"@smithy/util-buffer-from@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz#b23b7deb4f3923e84ef50c8b2c5863d0dbf6c0b9" + integrity sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug== + dependencies: + "@smithy/is-array-buffer" "^4.0.0" + tslib "^2.6.2" + "@smithy/util-config-provider@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz#62c6b73b22a430e84888a8f8da4b6029dd5b8efe" @@ -1994,6 +2627,13 @@ dependencies: tslib "^2.6.2" +"@smithy/util-config-provider@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz#e0c7c8124c7fba0b696f78f0bd0ccb060997d45e" + integrity sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w== + dependencies: + tslib "^2.6.2" + "@smithy/util-defaults-mode-browser@^3.0.31": version "3.0.34" resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.34.tgz#885312529599cf24b09335cb20439c838e452f9f" @@ -2005,6 +2645,17 @@ bowser "^2.11.0" tslib "^2.6.2" +"@smithy/util-defaults-mode-browser@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.1.tgz#ace4442dbc73a144e686097a2855c3dfa9d8fb2f" + integrity sha512-nkQifWzWUHw/D0aLPgyKut+QnJ5X+5E8wBvGfvrYLLZ86xPfVO6MoqfQo/9s4bF3Xscefua1M6KLZtobHMWrBg== + dependencies: + "@smithy/property-provider" "^4.0.1" + "@smithy/smithy-client" "^4.1.0" + "@smithy/types" "^4.1.0" + bowser "^2.11.0" + tslib "^2.6.2" + "@smithy/util-defaults-mode-node@^3.0.31": version "3.0.34" resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.34.tgz#5eb0d97231a34e137980abfb08ea5e3a8f2156f7" @@ -2018,6 +2669,19 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@smithy/util-defaults-mode-node@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.1.tgz#c18f0014852b947aa54013e437da13a10a04c8e6" + integrity sha512-LeAx2faB83litC9vaOdwFaldtto2gczUHxfFf8yoRwDU3cwL4/pDm7i0hxsuBCRk5mzHsrVGw+3EVCj32UZMdw== + dependencies: + "@smithy/config-resolver" "^4.0.1" + "@smithy/credential-provider-imds" "^4.0.1" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/property-provider" "^4.0.1" + "@smithy/smithy-client" "^4.1.0" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + "@smithy/util-endpoints@^2.1.7": version "2.1.7" resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.1.7.tgz#a088ebfab946a7219dd4763bfced82709894b82d" @@ -2027,6 +2691,15 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@smithy/util-endpoints@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.0.1.tgz#44ccbf1721447966f69496c9003b87daa8f61975" + integrity sha512-zVdUENQpdtn9jbpD9SCFK4+aSiavRb9BxEtw9ZGUR1TYo6bBHbIoi7VkrFQ0/RwZlzx0wRBaRmPclj8iAoJCLA== + dependencies: + "@smithy/node-config-provider" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + "@smithy/util-hex-encoding@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz#32938b33d5bf2a15796cd3f178a55b4155c535e6" @@ -2034,6 +2707,13 @@ dependencies: tslib "^2.6.2" +"@smithy/util-hex-encoding@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz#dd449a6452cffb37c5b1807ec2525bb4be551e8d" + integrity sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw== + dependencies: + tslib "^2.6.2" + "@smithy/util-middleware@^3.0.11": version "3.0.11" resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.11.tgz#2ab5c17266b42c225e62befcffb048afa682b5bf" @@ -2042,6 +2722,14 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@smithy/util-middleware@^4.0.0", "@smithy/util-middleware@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.0.1.tgz#58d363dcd661219298c89fa176a28e98ccc4bf43" + integrity sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA== + dependencies: + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + "@smithy/util-retry@^3.0.11": version "3.0.11" resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.11.tgz#d267e5ccb290165cee69732547fea17b695a7425" @@ -2051,6 +2739,15 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@smithy/util-retry@^4.0.0", "@smithy/util-retry@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.0.1.tgz#fb5f26492383dcb9a09cc4aee23a10f839cd0769" + integrity sha512-WmRHqNVwn3kI3rKk1LsKcVgPBG6iLTBGC1iYOV3GQegwJ3E8yjzHytPt26VNzOWr1qu0xE03nK0Ug8S7T7oufw== + dependencies: + "@smithy/service-error-classification" "^4.0.1" + "@smithy/types" "^4.1.0" + tslib "^2.6.2" + "@smithy/util-stream@^3.3.2", "@smithy/util-stream@^3.3.4": version "3.3.4" resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.3.4.tgz#c506ac41310ebcceb0c3f0ba20755e4fe0a90b8d" @@ -2065,6 +2762,20 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@smithy/util-stream@^4.0.0", "@smithy/util-stream@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.0.1.tgz#cbbaf4a73ca5a6292074cd83682c0c401321e863" + integrity sha512-Js16gOgU6Qht6qTPfuJgb+1YD4AEO+5Y1UPGWKSp3BNo8ONl/qhXSYDhFKJtwybRJynlCqvP5IeiaBsUmkSPTQ== + dependencies: + "@smithy/fetch-http-handler" "^5.0.1" + "@smithy/node-http-handler" "^4.0.1" + "@smithy/types" "^4.1.0" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-buffer-from" "^4.0.0" + "@smithy/util-hex-encoding" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + "@smithy/util-uri-escape@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz#e43358a78bf45d50bb736770077f0f09195b6f54" @@ -2072,6 +2783,13 @@ dependencies: tslib "^2.6.2" +"@smithy/util-uri-escape@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz#a96c160c76f3552458a44d8081fade519d214737" + integrity sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg== + dependencies: + tslib "^2.6.2" + "@smithy/util-utf8@^2.0.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.3.0.tgz#dd96d7640363259924a214313c3cf16e7dd329c5" @@ -2088,6 +2806,14 @@ "@smithy/util-buffer-from" "^3.0.0" tslib "^2.6.2" +"@smithy/util-utf8@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-4.0.0.tgz#09ca2d9965e5849e72e347c130f2a29d5c0c863c" + integrity sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow== + dependencies: + "@smithy/util-buffer-from" "^4.0.0" + tslib "^2.6.2" + "@smithy/util-waiter@^3.2.0": version "3.2.0" resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-3.2.0.tgz#1e52f870e77d2e5572025f7606053e6ff00df93d"