From e7a82b3d056fb4c7108c305a52fbbc02dc1cf30f Mon Sep 17 00:00:00 2001 From: zamanafzal Date: Mon, 18 May 2026 17:10:43 +0500 Subject: [PATCH 1/5] feat: Handle nullable page field from MITx Online client update --- frontends/api/package.json | 2 +- frontends/main/package.json | 2 +- .../DashboardPage/ContractContent.test.tsx | 25 +++++++++++++++++ .../ProductPages/CoursePage.test.tsx | 9 ++++++ .../src/app-pages/ProductPages/CoursePage.tsx | 4 +-- .../ProductPages/ProductSummary.test.tsx | 7 +++++ .../app-pages/ProductPages/ProductSummary.tsx | 12 ++++---- .../ProductPages/ProgramAsCoursePage.test.tsx | 11 ++++++++ .../ProductPages/ProgramAsCoursePage.tsx | 4 +-- .../ProductPages/ProgramPage.test.tsx | 9 ++++++ .../app-pages/ProductPages/ProgramPage.tsx | 4 +-- yarn.lock | 28 +++++++++++++++---- 12 files changed, 98 insertions(+), 19 deletions(-) diff --git a/frontends/api/package.json b/frontends/api/package.json index 519a37b11b..e1319b5614 100644 --- a/frontends/api/package.json +++ b/frontends/api/package.json @@ -30,7 +30,7 @@ "ol-test-utilities": "0.0.0" }, "dependencies": { - "@mitodl/mitxonline-api-axios": "2026.5.14", + "@mitodl/mitxonline-api-axios": "https://github.com/mitodl/mitxonline-api-clients/raw/96cb88a7aeac5ec38aeaf688b0784a0abeb7af47/src/typescript/mitxonline-api-axios/package.tgz", "@tanstack/react-query": "^5.66.0", "axios": "^1.12.2", "tiny-invariant": "^1.3.3" diff --git a/frontends/main/package.json b/frontends/main/package.json index 02c587c5a9..76ce610b23 100644 --- a/frontends/main/package.json +++ b/frontends/main/package.json @@ -14,7 +14,7 @@ "@emotion/styled": "^11.11.0", "@floating-ui/react": "^0.27.16", "@mitodl/course-search-utils": "^3.5.2", - "@mitodl/mitxonline-api-axios": "2026.5.14", + "@mitodl/mitxonline-api-axios": "https://github.com/mitodl/mitxonline-api-clients/raw/96cb88a7aeac5ec38aeaf688b0784a0abeb7af47/src/typescript/mitxonline-api-axios/package.tgz", "@mitodl/smoot-design": "^6.27.0", "@mui/material": "^6.4.5", "@mui/material-nextjs": "^6.4.3", diff --git a/frontends/main/src/app-pages/DashboardPage/ContractContent.test.tsx b/frontends/main/src/app-pages/DashboardPage/ContractContent.test.tsx index 08876330da..8ad9c55394 100644 --- a/frontends/main/src/app-pages/DashboardPage/ContractContent.test.tsx +++ b/frontends/main/src/app-pages/DashboardPage/ContractContent.test.tsx @@ -1910,4 +1910,29 @@ describe("ContractContent", () => { const coursewareButton = within(card).getByTestId("courseware-button") expect(coursewareButton).toHaveAttribute("href", enrolledRun.courseware_url) }) + + it("renders without crashing when program.page is null", async () => { + const { orgX, programA, programB } = setupProgramsAndCourses() + const contract = orgX.contracts[0] + + setMockResponse.get( + urls.programs.programsList({ + org_id: orgX.id, + contract_id: contract.id, + page_size: 30, + }), + { + results: [ + { ...programA, page: null }, + { ...programB, page: null }, + ], + }, + ) + + renderWithProviders( + , + ) + + await screen.findByRole("heading", { name: orgX.name }) + }) }) diff --git a/frontends/main/src/app-pages/ProductPages/CoursePage.test.tsx b/frontends/main/src/app-pages/ProductPages/CoursePage.test.tsx index 97bd76d09f..24da3c7eda 100644 --- a/frontends/main/src/app-pages/ProductPages/CoursePage.test.tsx +++ b/frontends/main/src/app-pages/ProductPages/CoursePage.test.tsx @@ -483,4 +483,13 @@ describe("CoursePage", () => { ).not.toBeInTheDocument() }) }) + + test("Renders without crashing when course_details.page is null", async () => { + const course = makeCourse({ page: null }) + const page = makePage({ course_details: course }) + setupApis({ course, page }) + renderWithProviders() + + await screen.findByRole("heading", { name: page.title }) + }) }) diff --git a/frontends/main/src/app-pages/ProductPages/CoursePage.tsx b/frontends/main/src/app-pages/ProductPages/CoursePage.tsx index b011bfe24d..3b1480728c 100644 --- a/frontends/main/src/app-pages/ProductPages/CoursePage.tsx +++ b/frontends/main/src/app-pages/ProductPages/CoursePage.tsx @@ -75,13 +75,13 @@ const CoursePage: React.FC = ({ readableId }) => { } const imageSrc = - page.course_details.page.feature_image_src || DEFAULT_RESOURCE_IMG + page.course_details.page?.feature_image_src || DEFAULT_RESOURCE_IMG return ( } diff --git a/frontends/main/src/app-pages/ProductPages/ProductSummary.test.tsx b/frontends/main/src/app-pages/ProductPages/ProductSummary.test.tsx index f402da563b..c0ae6f8acb 100644 --- a/frontends/main/src/app-pages/ProductPages/ProductSummary.test.tsx +++ b/frontends/main/src/app-pages/ProductPages/ProductSummary.test.tsx @@ -1185,6 +1185,13 @@ describe("ProgramSummary", () => { } }, ) + + test("Does not crash and hides duration row when program page is null", () => { + const program = factories.programs.program({ page: null }) + renderWithProviders() + + expect(screen.queryByTestId(TestIds.DurationRow)).toBeNull() + }) }) describe("Pacing Row", () => { diff --git a/frontends/main/src/app-pages/ProductPages/ProductSummary.tsx b/frontends/main/src/app-pages/ProductPages/ProductSummary.tsx index df6609e119..d18dd07d71 100644 --- a/frontends/main/src/app-pages/ProductPages/ProductSummary.tsx +++ b/frontends/main/src/app-pages/ProductPages/ProductSummary.tsx @@ -855,8 +855,8 @@ const ProgramDurationRow: React.FC = ({ program, ...others }) => { - const duration = program.page.length ?? "" - const effort = program.page.effort ?? "" + const duration = program.page?.length ?? "" + const effort = program.page?.effort ?? "" if (!duration) return null const display = [duration, effort].filter(Boolean).join(", ") @@ -932,7 +932,7 @@ const ProgramPriceRow: React.FC = ({ if (enrollmentType === "none") return null const currentPrice = program.products[0]?.price - const listPrice = program.page.list_price + const listPrice = program.page?.list_price const currentAmount = toNumericPrice(currentPrice) const listAmount = toNumericPrice(listPrice) @@ -980,10 +980,12 @@ const ProgramPriceRow: React.FC = ({ ) : null} - {program.page.financial_assistance_form_url ? ( + {program.page?.financial_assistance_form_url ? ( { ).not.toBeInTheDocument() }) }) + + test("Renders without crashing when program_details.page is null", async () => { + const program = makeProgramAsCourse({ page: null }) + const page = makePage({ program_details: program }) + setupApis({ program, page }) + renderWithProviders( + , + ) + + await screen.findByRole("heading", { name: page.title }) + }) }) diff --git a/frontends/main/src/app-pages/ProductPages/ProgramAsCoursePage.tsx b/frontends/main/src/app-pages/ProductPages/ProgramAsCoursePage.tsx index b7080c0f2f..deca2685bb 100644 --- a/frontends/main/src/app-pages/ProductPages/ProgramAsCoursePage.tsx +++ b/frontends/main/src/app-pages/ProductPages/ProgramAsCoursePage.tsx @@ -258,7 +258,7 @@ const ProgramAsCoursePage: React.FC = ({ } const imageSrc = - page.program_details.page.feature_image_src || DEFAULT_RESOURCE_IMG + page.program_details.page?.feature_image_src || DEFAULT_RESOURCE_IMG const dataLoading = (courseIds.length > 0 && !courses.isSuccess) || @@ -271,7 +271,7 @@ const ProgramAsCoursePage: React.FC = ({ shortDescription={ } imageSrc={imageSrc} diff --git a/frontends/main/src/app-pages/ProductPages/ProgramPage.test.tsx b/frontends/main/src/app-pages/ProductPages/ProgramPage.test.tsx index 7246de5194..805a57e11a 100644 --- a/frontends/main/src/app-pages/ProductPages/ProgramPage.test.tsx +++ b/frontends/main/src/app-pages/ProductPages/ProgramPage.test.tsx @@ -798,4 +798,13 @@ describe("ProgramPage", () => { ).not.toBeInTheDocument() }) }) + + test("Renders without crashing when program_details.page is null", async () => { + const program = makeProgram({ ...makeReqs(), page: null }) + const page = makePage({ program_details: program }) + setupApis({ program, page }) + renderWithProviders() + + await screen.findByRole("heading", { name: page.title }) + }) }) diff --git a/frontends/main/src/app-pages/ProductPages/ProgramPage.tsx b/frontends/main/src/app-pages/ProductPages/ProgramPage.tsx index 77e2e51fa5..2bfe1a4165 100644 --- a/frontends/main/src/app-pages/ProductPages/ProgramPage.tsx +++ b/frontends/main/src/app-pages/ProductPages/ProgramPage.tsx @@ -275,7 +275,7 @@ const ProgramPage: React.FC = ({ readableId }) => { } const imageSrc = - page.program_details.page.feature_image_src || DEFAULT_RESOURCE_IMG + page.program_details.page?.feature_image_src || DEFAULT_RESOURCE_IMG const dataLoading = (courseIds.length > 0 && !courses.isSuccess) || @@ -289,7 +289,7 @@ const ProgramPage: React.FC = ({ readableId }) => { shortDescription={ } imageSrc={imageSrc} diff --git a/yarn.lock b/yarn.lock index bee862bade..0ae9729f16 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3332,13 +3332,13 @@ __metadata: languageName: node linkType: hard -"@mitodl/mitxonline-api-axios@npm:2026.5.14": - version: 2026.5.14 - resolution: "@mitodl/mitxonline-api-axios@npm:2026.5.14" +"@mitodl/mitxonline-api-axios@https://github.com/mitodl/mitxonline-api-clients/raw/96cb88a7aeac5ec38aeaf688b0784a0abeb7af47/src/typescript/mitxonline-api-axios/package.tgz": + version: 2026.5.6 + resolution: "@mitodl/mitxonline-api-axios@https://github.com/mitodl/mitxonline-api-clients/raw/96cb88a7aeac5ec38aeaf688b0784a0abeb7af47/src/typescript/mitxonline-api-axios/package.tgz" dependencies: "@types/node": "npm:^20.11.19" axios: "npm:^1.6.5" - checksum: 10/24780dbfd2c9cf50c9b3ec877b4cad18bd30ca01202445215fdaadbf627bdf961d04354e7329cd05e2d5d58ad02d539972769d4848e682eaaf5aca57fdbca63f + checksum: 10/1d42c26f29b2694656877b5b3e70a97fc5075130b777d4aa83a7f91f0c4862df416aadebd88f30b2ecf9eee3a7981c27433842171f28a3cc78c416444804b9f3 languageName: node linkType: hard @@ -7655,6 +7655,13 @@ __metadata: languageName: node linkType: hard +"@types/validator@npm:^13.7.6": + version: 13.15.10 + resolution: "@types/validator@npm:13.15.10" + checksum: 10/63117a776ced4d066d7fb63130d90ba487d38209dd45c25641ca1a6f5040e8394cc9a855750b919b72a923c5ffb51f8474f213b10b5aaa27d9db108bef07ad10 + languageName: node + linkType: hard + "@types/whatwg-mimetype@npm:^3.0.2": version: 3.0.2 resolution: "@types/whatwg-mimetype@npm:3.0.2" @@ -8932,7 +8939,7 @@ __metadata: resolution: "api@workspace:frontends/api" dependencies: "@faker-js/faker": "npm:^10.0.0" - "@mitodl/mitxonline-api-axios": "npm:2026.5.14" + "@mitodl/mitxonline-api-axios": "https://github.com/mitodl/mitxonline-api-clients/raw/96cb88a7aeac5ec38aeaf688b0784a0abeb7af47/src/typescript/mitxonline-api-axios/package.tgz" "@tanstack/react-query": "npm:^5.66.0" "@testing-library/react": "npm:^16.3.0" axios: "npm:^1.12.2" @@ -16177,7 +16184,7 @@ __metadata: "@floating-ui/react": "npm:^0.27.16" "@happy-dom/jest-environment": "npm:^20.1.0" "@mitodl/course-search-utils": "npm:^3.5.2" - "@mitodl/mitxonline-api-axios": "npm:2026.5.14" + "@mitodl/mitxonline-api-axios": "https://github.com/mitodl/mitxonline-api-clients/raw/96cb88a7aeac5ec38aeaf688b0784a0abeb7af47/src/typescript/mitxonline-api-axios/package.tgz" "@mitodl/smoot-design": "npm:^6.27.0" "@mui/material": "npm:^6.4.5" "@mui/material-nextjs": "npm:^6.4.3" @@ -17804,6 +17811,7 @@ __metadata: "@types/react-google-recaptcha": "npm:^2.1.9" "@types/react-slick": "npm:^0.23.13" "@types/tinycolor2": "npm:^1.4.6" + "@types/validator": "npm:^13.7.6" api: "workspace:*" dotenv: "npm:^17.0.0" embla-carousel-react: "npm:^8.6.0" @@ -17823,6 +17831,7 @@ __metadata: storybook: "npm:^10.2.4" tiny-invariant: "npm:^1.3.3" typescript: "npm:^5.5.4" + validator: "npm:^13.11.0" wheel-indicator: "npm:^1.3.0" peerDependencies: "@mitodl/smoot-design": ^6.27.0 @@ -22974,6 +22983,13 @@ __metadata: languageName: node linkType: hard +"validator@npm:^13.11.0": + version: 13.12.0 + resolution: "validator@npm:13.12.0" + checksum: 10/db6eb0725e2b67d60d30073ae8573982713b5903195d031dc3c7db7e82df8b74e8c13baef8e2106d146d979599fd61a06cde1fec5c148e4abd53d52817ff0fd9 + languageName: node + linkType: hard + "varint@npm:^6.0.0": version: 6.0.0 resolution: "varint@npm:6.0.0" From 1cbfa3777bd9de45005a8f64b47035b1f3e3412c Mon Sep 17 00:00:00 2001 From: zamanafzal Date: Mon, 18 May 2026 18:07:14 +0500 Subject: [PATCH 2/5] fix: incorporate feedback --- .../main/src/app-pages/DashboardPage/ContractContent.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontends/main/src/app-pages/DashboardPage/ContractContent.test.tsx b/frontends/main/src/app-pages/DashboardPage/ContractContent.test.tsx index 8ad9c55394..6cea57b8dd 100644 --- a/frontends/main/src/app-pages/DashboardPage/ContractContent.test.tsx +++ b/frontends/main/src/app-pages/DashboardPage/ContractContent.test.tsx @@ -1933,6 +1933,7 @@ describe("ContractContent", () => { , ) - await screen.findByRole("heading", { name: orgX.name }) + await screen.findByText(programA.title) + await screen.findByText(programB.title) }) }) From 033436849ea29144e9fba73fdfcbb470f57ea76f Mon Sep 17 00:00:00 2001 From: zamanafzal Date: Thu, 21 May 2026 12:10:56 +0500 Subject: [PATCH 3/5] chore: updated mitxonline-api-axios --- frontends/api/package.json | 2 +- frontends/main/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontends/api/package.json b/frontends/api/package.json index e1319b5614..dbe68a09e9 100644 --- a/frontends/api/package.json +++ b/frontends/api/package.json @@ -30,7 +30,7 @@ "ol-test-utilities": "0.0.0" }, "dependencies": { - "@mitodl/mitxonline-api-axios": "https://github.com/mitodl/mitxonline-api-clients/raw/96cb88a7aeac5ec38aeaf688b0784a0abeb7af47/src/typescript/mitxonline-api-axios/package.tgz", + "@mitodl/mitxonline-api-axios": "2026.5.20.1", "@tanstack/react-query": "^5.66.0", "axios": "^1.12.2", "tiny-invariant": "^1.3.3" diff --git a/frontends/main/package.json b/frontends/main/package.json index 76ce610b23..65fb7bbfec 100644 --- a/frontends/main/package.json +++ b/frontends/main/package.json @@ -14,7 +14,7 @@ "@emotion/styled": "^11.11.0", "@floating-ui/react": "^0.27.16", "@mitodl/course-search-utils": "^3.5.2", - "@mitodl/mitxonline-api-axios": "https://github.com/mitodl/mitxonline-api-clients/raw/96cb88a7aeac5ec38aeaf688b0784a0abeb7af47/src/typescript/mitxonline-api-axios/package.tgz", + "@mitodl/mitxonline-api-axios": "2026.5.20.1", "@mitodl/smoot-design": "^6.27.0", "@mui/material": "^6.4.5", "@mui/material-nextjs": "^6.4.3", From 691d7368cad7d5d74c2fa5927756e459ae285ed3 Mon Sep 17 00:00:00 2001 From: zamanafzal Date: Thu, 21 May 2026 13:18:14 +0500 Subject: [PATCH 4/5] chore: current latest mitxonline-api-client version in yarn file --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0ae9729f16..d2ac5fe0cb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3332,13 +3332,13 @@ __metadata: languageName: node linkType: hard -"@mitodl/mitxonline-api-axios@https://github.com/mitodl/mitxonline-api-clients/raw/96cb88a7aeac5ec38aeaf688b0784a0abeb7af47/src/typescript/mitxonline-api-axios/package.tgz": - version: 2026.5.6 - resolution: "@mitodl/mitxonline-api-axios@https://github.com/mitodl/mitxonline-api-clients/raw/96cb88a7aeac5ec38aeaf688b0784a0abeb7af47/src/typescript/mitxonline-api-axios/package.tgz" +"@mitodl/mitxonline-api-axios@npm:2026.5.1": + version: 2026.5.1 + resolution: "@mitodl/mitxonline-api-axios@npm:2026.5.1" dependencies: "@types/node": "npm:^20.11.19" axios: "npm:^1.6.5" - checksum: 10/1d42c26f29b2694656877b5b3e70a97fc5075130b777d4aa83a7f91f0c4862df416aadebd88f30b2ecf9eee3a7981c27433842171f28a3cc78c416444804b9f3 + checksum: 10/6eb179298221fc2801ce4e3c0589de0378c68b7a32503101de675a85f6e3569c78ec6cb4b1bc5aa85094637532a34d10c110a4a9cdfa96c525dc4362e0236d5c languageName: node linkType: hard @@ -8939,7 +8939,7 @@ __metadata: resolution: "api@workspace:frontends/api" dependencies: "@faker-js/faker": "npm:^10.0.0" - "@mitodl/mitxonline-api-axios": "https://github.com/mitodl/mitxonline-api-clients/raw/96cb88a7aeac5ec38aeaf688b0784a0abeb7af47/src/typescript/mitxonline-api-axios/package.tgz" + "@mitodl/mitxonline-api-axios": "npm:2026.5.1" "@tanstack/react-query": "npm:^5.66.0" "@testing-library/react": "npm:^16.3.0" axios: "npm:^1.12.2" @@ -16184,7 +16184,7 @@ __metadata: "@floating-ui/react": "npm:^0.27.16" "@happy-dom/jest-environment": "npm:^20.1.0" "@mitodl/course-search-utils": "npm:^3.5.2" - "@mitodl/mitxonline-api-axios": "https://github.com/mitodl/mitxonline-api-clients/raw/96cb88a7aeac5ec38aeaf688b0784a0abeb7af47/src/typescript/mitxonline-api-axios/package.tgz" + "@mitodl/mitxonline-api-axios": "npm:2026.5.1" "@mitodl/smoot-design": "npm:^6.27.0" "@mui/material": "npm:^6.4.5" "@mui/material-nextjs": "npm:^6.4.3" From 3fa9d24d5ce08c3c9778b3205cb41ca42c3fb2d9 Mon Sep 17 00:00:00 2001 From: zamanafzal Date: Fri, 22 May 2026 00:18:15 +0500 Subject: [PATCH 5/5] chore: current latest mitxonline-api-client version --- frontends/api/package.json | 2 +- frontends/main/package.json | 2 +- yarn.lock | 28 ++++++---------------------- 3 files changed, 8 insertions(+), 24 deletions(-) diff --git a/frontends/api/package.json b/frontends/api/package.json index dbe68a09e9..2f2f4dd1ae 100644 --- a/frontends/api/package.json +++ b/frontends/api/package.json @@ -30,7 +30,7 @@ "ol-test-utilities": "0.0.0" }, "dependencies": { - "@mitodl/mitxonline-api-axios": "2026.5.20.1", + "@mitodl/mitxonline-api-axios": "2026.5.21", "@tanstack/react-query": "^5.66.0", "axios": "^1.12.2", "tiny-invariant": "^1.3.3" diff --git a/frontends/main/package.json b/frontends/main/package.json index 65fb7bbfec..2ec5327f52 100644 --- a/frontends/main/package.json +++ b/frontends/main/package.json @@ -14,7 +14,7 @@ "@emotion/styled": "^11.11.0", "@floating-ui/react": "^0.27.16", "@mitodl/course-search-utils": "^3.5.2", - "@mitodl/mitxonline-api-axios": "2026.5.20.1", + "@mitodl/mitxonline-api-axios": "2026.5.21", "@mitodl/smoot-design": "^6.27.0", "@mui/material": "^6.4.5", "@mui/material-nextjs": "^6.4.3", diff --git a/yarn.lock b/yarn.lock index d2ac5fe0cb..9a063c2f42 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3332,13 +3332,13 @@ __metadata: languageName: node linkType: hard -"@mitodl/mitxonline-api-axios@npm:2026.5.1": - version: 2026.5.1 - resolution: "@mitodl/mitxonline-api-axios@npm:2026.5.1" +"@mitodl/mitxonline-api-axios@npm:2026.5.21": + version: 2026.5.21 + resolution: "@mitodl/mitxonline-api-axios@npm:2026.5.21" dependencies: "@types/node": "npm:^20.11.19" axios: "npm:^1.6.5" - checksum: 10/6eb179298221fc2801ce4e3c0589de0378c68b7a32503101de675a85f6e3569c78ec6cb4b1bc5aa85094637532a34d10c110a4a9cdfa96c525dc4362e0236d5c + checksum: 10/01f91379031fff433fe511ad7fd49f7b0f77d4d45c22c693ab07e191586c98f0e90ba15bca966a3a5cba0039e1a1b85fa776128742a84b626fb6c736270df7f3 languageName: node linkType: hard @@ -7655,13 +7655,6 @@ __metadata: languageName: node linkType: hard -"@types/validator@npm:^13.7.6": - version: 13.15.10 - resolution: "@types/validator@npm:13.15.10" - checksum: 10/63117a776ced4d066d7fb63130d90ba487d38209dd45c25641ca1a6f5040e8394cc9a855750b919b72a923c5ffb51f8474f213b10b5aaa27d9db108bef07ad10 - languageName: node - linkType: hard - "@types/whatwg-mimetype@npm:^3.0.2": version: 3.0.2 resolution: "@types/whatwg-mimetype@npm:3.0.2" @@ -8939,7 +8932,7 @@ __metadata: resolution: "api@workspace:frontends/api" dependencies: "@faker-js/faker": "npm:^10.0.0" - "@mitodl/mitxonline-api-axios": "npm:2026.5.1" + "@mitodl/mitxonline-api-axios": "npm:2026.5.21" "@tanstack/react-query": "npm:^5.66.0" "@testing-library/react": "npm:^16.3.0" axios: "npm:^1.12.2" @@ -16184,7 +16177,7 @@ __metadata: "@floating-ui/react": "npm:^0.27.16" "@happy-dom/jest-environment": "npm:^20.1.0" "@mitodl/course-search-utils": "npm:^3.5.2" - "@mitodl/mitxonline-api-axios": "npm:2026.5.1" + "@mitodl/mitxonline-api-axios": "npm:2026.5.21" "@mitodl/smoot-design": "npm:^6.27.0" "@mui/material": "npm:^6.4.5" "@mui/material-nextjs": "npm:^6.4.3" @@ -17811,7 +17804,6 @@ __metadata: "@types/react-google-recaptcha": "npm:^2.1.9" "@types/react-slick": "npm:^0.23.13" "@types/tinycolor2": "npm:^1.4.6" - "@types/validator": "npm:^13.7.6" api: "workspace:*" dotenv: "npm:^17.0.0" embla-carousel-react: "npm:^8.6.0" @@ -17831,7 +17823,6 @@ __metadata: storybook: "npm:^10.2.4" tiny-invariant: "npm:^1.3.3" typescript: "npm:^5.5.4" - validator: "npm:^13.11.0" wheel-indicator: "npm:^1.3.0" peerDependencies: "@mitodl/smoot-design": ^6.27.0 @@ -22983,13 +22974,6 @@ __metadata: languageName: node linkType: hard -"validator@npm:^13.11.0": - version: 13.12.0 - resolution: "validator@npm:13.12.0" - checksum: 10/db6eb0725e2b67d60d30073ae8573982713b5903195d031dc3c7db7e82df8b74e8c13baef8e2106d146d979599fd61a06cde1fec5c148e4abd53d52817ff0fd9 - languageName: node - linkType: hard - "varint@npm:^6.0.0": version: 6.0.0 resolution: "varint@npm:6.0.0"