From 1f11868bc126f2f18e2849d4b4fad99211b7830c Mon Sep 17 00:00:00 2001 From: &mile Date: Thu, 9 Jul 2026 15:08:36 +0200 Subject: [PATCH] fix: CORS, readAllEntryLines, readAllComputationIncomeStatements path param bugs - fix(api): CORS allowMethods missing GET/PATCH/DELETE (only POST was allowed), blocking all non-POST requests at the browser preflight stage in production - fix(metadata): readAllEntryLines route path contained uninterpreted :idEntry param, causing YearDataWrapper to receive zero entry lines for the year - fix(metadata): readAllComputationIncomeStatements same bug with :idComputation - fix(dashboard): DeleteOneApiKey now passes params (idOrganization, idApiKey) so the URL path is built correctly --- VERSION | 2 +- packages/api/src/api.ts | 3 +++ .../organizationApi/keys/ApiKeyListTableRow.tsx | 7 ++++++- .../organizationApi/keys/ApiKeysListTable.tsx | 1 + .../organizationApi/keys/DeleteOneApiKey.tsx | 6 ++++++ .../entries/$idEntry/entryLines/readAllEntryLines.ts | 2 +- .../readAllComputationIncomeStatements.ts | 2 +- 7 files changed, 19 insertions(+), 4 deletions(-) diff --git a/VERSION b/VERSION index 9ccca861..69f93802 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v1.3.10 \ No newline at end of file +v1.3.11 diff --git a/packages/api/src/api.ts b/packages/api/src/api.ts index ed4b9979..8394bebe 100644 --- a/packages/api/src/api.ts +++ b/packages/api/src/api.ts @@ -53,7 +53,10 @@ export async function api(parameters: { "Cache-Control", ], allowMethods: [ + "GET", "POST", + "PATCH", + "DELETE", ], credentials: true, }) diff --git a/packages/dashboard/src/features/dashboard/$idOrganization/organizationApi/keys/ApiKeyListTableRow.tsx b/packages/dashboard/src/features/dashboard/$idOrganization/organizationApi/keys/ApiKeyListTableRow.tsx index 6db0c494..438df606 100644 --- a/packages/dashboard/src/features/dashboard/$idOrganization/organizationApi/keys/ApiKeyListTableRow.tsx +++ b/packages/dashboard/src/features/dashboard/$idOrganization/organizationApi/keys/ApiKeyListTableRow.tsx @@ -1,4 +1,5 @@ import type { readAllApiKeysRouteDefinition } from "@arrhes/application-metadata/routes" +import type { returnedSchemas } from "@arrhes/application-metadata/schemas" import { ButtonOutlineContent, Chip } from "@arrhes/ui" import { css } from "@arrhes/ui/utilities/cn.js" import { IconTrash } from "@tabler/icons-react" @@ -8,6 +9,7 @@ import { DeleteOneApiKey } from "./DeleteOneApiKey.tsx" export function ApiKeyListTableRow(props: { apiKey: v.InferOutput[number] + idOrganization: v.InferOutput["id"] }) { return ( @@ -64,7 +66,10 @@ export function ApiKeyListTableRow(props: { gap: "0.5rem", })} > - + } title="Supprimer la clé" diff --git a/packages/dashboard/src/features/dashboard/$idOrganization/organizationApi/keys/ApiKeysListTable.tsx b/packages/dashboard/src/features/dashboard/$idOrganization/organizationApi/keys/ApiKeysListTable.tsx index f2463a40..2603fd3a 100644 --- a/packages/dashboard/src/features/dashboard/$idOrganization/organizationApi/keys/ApiKeysListTable.tsx +++ b/packages/dashboard/src/features/dashboard/$idOrganization/organizationApi/keys/ApiKeysListTable.tsx @@ -31,6 +31,7 @@ export function ApiKeysListTable(props: { idOrganization: v.InferOutput )) }} diff --git a/packages/dashboard/src/features/dashboard/$idOrganization/organizationApi/keys/DeleteOneApiKey.tsx b/packages/dashboard/src/features/dashboard/$idOrganization/organizationApi/keys/DeleteOneApiKey.tsx index 587bc3d6..cff4f70b 100644 --- a/packages/dashboard/src/features/dashboard/$idOrganization/organizationApi/keys/DeleteOneApiKey.tsx +++ b/packages/dashboard/src/features/dashboard/$idOrganization/organizationApi/keys/DeleteOneApiKey.tsx @@ -1,5 +1,6 @@ import type { readAllApiKeysRouteDefinition as ReadAllApiKeysRouteDefinition } from "@arrhes/application-metadata/routes" import { deleteOneApiKeyRouteDefinition, readAllApiKeysRouteDefinition } from "@arrhes/application-metadata/routes" +import type { returnedSchemas } from "@arrhes/application-metadata/schemas" import { Button, ButtonOutlineContent, ButtonPlainContent, Dialog, toast, useModalStore } from "@arrhes/ui" import { type ComponentPropsWithRef, type ReactElement, useId } from "react" import type * as v from "valibot" @@ -8,6 +9,7 @@ import { invalidateData } from "../../../../../utilities/invalidateData.ts" export function DeleteOneApiKey(props: { apiKey: v.InferOutput[number] + idOrganization: v.InferOutput["id"] children: ReactElement> }) { const modalId = useId() @@ -19,6 +21,10 @@ export function DeleteOneApiKey(props: { body: { idApiKey: props.apiKey.id, }, + params: { + idOrganization: props.idOrganization, + idApiKey: props.apiKey.id, + }, }) if (deleteResponse.ok === false) { diff --git a/packages/metadata/src/routes/dashboard/auth/organizations/$idOrganization/years/$idYear/entries/$idEntry/entryLines/readAllEntryLines.ts b/packages/metadata/src/routes/dashboard/auth/organizations/$idOrganization/years/$idYear/entries/$idEntry/entryLines/readAllEntryLines.ts index 14093f49..ba68b7c8 100644 --- a/packages/metadata/src/routes/dashboard/auth/organizations/$idOrganization/years/$idYear/entries/$idEntry/entryLines/readAllEntryLines.ts +++ b/packages/metadata/src/routes/dashboard/auth/organizations/$idOrganization/years/$idYear/entries/$idEntry/entryLines/readAllEntryLines.ts @@ -6,7 +6,7 @@ import { routeDefinition } from "../../../../../../../../../../utilities/routeDe export const readAllEntryLinesRouteDefinition = routeDefinition({ protocol: "http", method: "GET", - path: `${routePath.v1}/organizations/:idOrganization/years/:idYear/entries/:idEntry/lines`, + path: `${routePath.v1}/organizations/:idOrganization/years/:idYear/entries/lines`, schemas: { body: v.object({ idYear: entryLineSchema.entries.idYear, diff --git a/packages/metadata/src/routes/dashboard/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/readAllComputationIncomeStatements.ts b/packages/metadata/src/routes/dashboard/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/readAllComputationIncomeStatements.ts index 2c3d670f..6e18fc14 100644 --- a/packages/metadata/src/routes/dashboard/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/readAllComputationIncomeStatements.ts +++ b/packages/metadata/src/routes/dashboard/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/readAllComputationIncomeStatements.ts @@ -9,7 +9,7 @@ import { routeDefinition } from "../../../../../../../../../../../utilities/rout export const readAllComputationIncomeStatementsRouteDefinition = routeDefinition({ protocol: "http", method: "GET", - path: `${routePath.v1}/organizations/:idOrganization/years/:idYear/computations/:idComputation/income-statements`, + path: `${routePath.v1}/organizations/:idOrganization/years/:idYear/computations/income-statements`, schemas: { body: v.object({ idYear: computationIncomeStatementSchema.entries.idYear,