From 79d80fad0860a96fd109ff7c5104f24c5d736a16 Mon Sep 17 00:00:00 2001 From: x032205 Date: Wed, 9 Jul 2025 22:27:42 -0400 Subject: [PATCH] Fix greptile reviews --- .../cloudflare-connection-router.ts | 4 ++-- .../cloudflare/cloudflare-connection-fns.ts | 6 +++--- .../cloudflare-connection-service.ts | 18 +++++++++++------ .../cloudflare/cloudflare-connection-types.ts | 2 +- .../cloudflare-workers-schemas.ts | 3 +++ .../secret-syncs/cloudflare-workers.mdx | 6 ++---- .../CloudflareWorkersSyncFields.tsx | 16 +++++++-------- ...udflare-workers-sync-destination-schema.ts | 7 ++++++- .../api/appConnections/cloudflare/queries.tsx | 20 +++++++++---------- .../api/appConnections/cloudflare/types.ts | 2 +- 10 files changed, 48 insertions(+), 36 deletions(-) diff --git a/backend/src/server/routes/v1/app-connection-routers/cloudflare-connection-router.ts b/backend/src/server/routes/v1/app-connection-routers/cloudflare-connection-router.ts index e42935085..d18d0564e 100644 --- a/backend/src/server/routes/v1/app-connection-routers/cloudflare-connection-router.ts +++ b/backend/src/server/routes/v1/app-connection-routers/cloudflare-connection-router.ts @@ -53,7 +53,7 @@ export const registerCloudflareConnectionRouter = async (server: FastifyZodProvi server.route({ method: "GET", - url: `/:connectionId/cloudflare-workers-projects`, + url: `/:connectionId/cloudflare-workers-scripts`, config: { rateLimit: readLimit }, @@ -73,7 +73,7 @@ export const registerCloudflareConnectionRouter = async (server: FastifyZodProvi handler: async (req) => { const { connectionId } = req.params; - const projects = await server.services.appConnection.cloudflare.listWorkersProjects(connectionId, req.permission); + const projects = await server.services.appConnection.cloudflare.listWorkersScripts(connectionId, req.permission); return projects; } diff --git a/backend/src/services/app-connection/cloudflare/cloudflare-connection-fns.ts b/backend/src/services/app-connection/cloudflare/cloudflare-connection-fns.ts index 5b8cdd19b..d0ac070f3 100644 --- a/backend/src/services/app-connection/cloudflare/cloudflare-connection-fns.ts +++ b/backend/src/services/app-connection/cloudflare/cloudflare-connection-fns.ts @@ -10,7 +10,7 @@ import { TCloudflareConnection, TCloudflareConnectionConfig, TCloudflarePagesProject, - TCloudflareWorkersProject + TCloudflareWorkersScript } from "./cloudflare-connection-types"; export const getCloudflareConnectionListItem = () => { @@ -44,9 +44,9 @@ export const listCloudflarePagesProjects = async ( })); }; -export const listCloudflareWorkersProjects = async ( +export const listCloudflareWorkersScripts = async ( appConnection: TCloudflareConnection -): Promise => { +): Promise => { const { credentials: { apiToken, accountId } } = appConnection; diff --git a/backend/src/services/app-connection/cloudflare/cloudflare-connection-service.ts b/backend/src/services/app-connection/cloudflare/cloudflare-connection-service.ts index 4d7542a4b..5a8a161fc 100644 --- a/backend/src/services/app-connection/cloudflare/cloudflare-connection-service.ts +++ b/backend/src/services/app-connection/cloudflare/cloudflare-connection-service.ts @@ -2,7 +2,7 @@ import { logger } from "@app/lib/logger"; import { OrgServiceActor } from "@app/lib/types"; import { AppConnection } from "../app-connection-enums"; -import { listCloudflarePagesProjects, listCloudflareWorkersProjects } from "./cloudflare-connection-fns"; +import { listCloudflarePagesProjects, listCloudflareWorkersScripts } from "./cloudflare-connection-fns"; import { TCloudflareConnection } from "./cloudflare-connection-types"; type TGetAppConnectionFunc = ( @@ -19,25 +19,31 @@ export const cloudflareConnectionService = (getAppConnection: TGetAppConnectionF return projects; } catch (error) { - logger.error(error, "Failed to list Cloudflare Pages projects for Cloudflare connection"); + logger.error( + error, + `Failed to list Cloudflare Pages projects for Cloudflare connection [connectionId=${connectionId}]` + ); return []; } }; - const listWorkersProjects = async (connectionId: string, actor: OrgServiceActor) => { + const listWorkersScripts = async (connectionId: string, actor: OrgServiceActor) => { const appConnection = await getAppConnection(AppConnection.Cloudflare, connectionId, actor); try { - const projects = await listCloudflareWorkersProjects(appConnection); + const projects = await listCloudflareWorkersScripts(appConnection); return projects; } catch (error) { - logger.error(error, "Failed to list Cloudflare Workers projects for Cloudflare connection"); + logger.error( + error, + `Failed to list Cloudflare Workers scripts for Cloudflare connection [connectionId=${connectionId}]` + ); return []; } }; return { listPagesProjects, - listWorkersProjects + listWorkersScripts }; }; diff --git a/backend/src/services/app-connection/cloudflare/cloudflare-connection-types.ts b/backend/src/services/app-connection/cloudflare/cloudflare-connection-types.ts index a340a3dcd..0ac1b708c 100644 --- a/backend/src/services/app-connection/cloudflare/cloudflare-connection-types.ts +++ b/backend/src/services/app-connection/cloudflare/cloudflare-connection-types.ts @@ -29,6 +29,6 @@ export type TCloudflarePagesProject = { name: string; }; -export type TCloudflareWorkersProject = { +export type TCloudflareWorkersScript = { id: string; }; diff --git a/backend/src/services/secret-sync/cloudflare-workers/cloudflare-workers-schemas.ts b/backend/src/services/secret-sync/cloudflare-workers/cloudflare-workers-schemas.ts index c8bdac575..c03748eb3 100644 --- a/backend/src/services/secret-sync/cloudflare-workers/cloudflare-workers-schemas.ts +++ b/backend/src/services/secret-sync/cloudflare-workers/cloudflare-workers-schemas.ts @@ -1,3 +1,4 @@ +import RE2 from "re2"; import { z } from "zod"; import { SecretSyncs } from "@app/lib/api-docs"; @@ -14,6 +15,8 @@ const CloudflareWorkersSyncDestinationConfigSchema = z.object({ scriptId: z .string() .min(1, "Script ID is required") + .max(64) + .regex(new RE2(/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/), "Invalid script ID format") .describe(SecretSyncs.DESTINATION_CONFIG.CLOUDFLARE_WORKERS.scriptId) }); diff --git a/docs/integrations/secret-syncs/cloudflare-workers.mdx b/docs/integrations/secret-syncs/cloudflare-workers.mdx index 974d40e82..d6e7e25e8 100644 --- a/docs/integrations/secret-syncs/cloudflare-workers.mdx +++ b/docs/integrations/secret-syncs/cloudflare-workers.mdx @@ -75,8 +75,7 @@ description: "Learn how to configure a Cloudflare Workers Sync for Infisical." "initialSyncBehavior": "overwrite-destination" }, "destinationConfig": { - "projectId": "your-cloudflare-workers-project-id", - "scriptId": "my-workers-project" + "scriptId": "my-workers-script" } }' ``` @@ -119,8 +118,7 @@ description: "Learn how to configure a Cloudflare Workers Sync for Infisical." }, "destination": "cloudflare-workers", "destinationConfig": { - "projectId": "your-cloudflare-workers-project-id", - "scriptId": "my-workers-project" + "scriptId": "my-workers-script" } } } diff --git a/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/CloudflareWorkersSyncFields.tsx b/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/CloudflareWorkersSyncFields.tsx index a565abade..c8354fabc 100644 --- a/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/CloudflareWorkersSyncFields.tsx +++ b/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/CloudflareWorkersSyncFields.tsx @@ -4,8 +4,8 @@ import { SingleValue } from "react-select"; import { SecretSyncConnectionField } from "@app/components/secret-syncs/forms/SecretSyncConnectionField"; import { FilterableSelect, FormControl } from "@app/components/v2"; import { - TCloudflareWorkersProject, - useCloudflareConnectionListWorkersProjects + TCloudflareWorkersScript, + useCloudflareConnectionListWorkersScripts } from "@app/hooks/api/appConnections/cloudflare"; import { SecretSync } from "@app/hooks/api/secretSyncs"; @@ -18,8 +18,8 @@ export const CloudflareWorkersSyncFields = () => { const connectionId = useWatch({ name: "connection.id", control }); - const { data: projects = [], isPending: isProjectsPending } = - useCloudflareConnectionListWorkersProjects(connectionId, { + const { data: scripts = [], isPending: isScriptsPending } = + useCloudflareConnectionListWorkersScripts(connectionId, { enabled: Boolean(connectionId) }); @@ -40,13 +40,13 @@ export const CloudflareWorkersSyncFields = () => { label="Worker Script" > project.id === value) ?? []) : []} + value={scripts?.find((script) => script.id === value) || []} onChange={(option) => { - onChange((option as SingleValue)?.id ?? null); + onChange((option as SingleValue)?.id ?? null); }} - options={projects} + options={scripts} placeholder="Select a worker script..." getOptionLabel={(option) => option.id} getOptionValue={(option) => option.id} diff --git a/frontend/src/components/secret-syncs/forms/schemas/cloudflare-workers-sync-destination-schema.ts b/frontend/src/components/secret-syncs/forms/schemas/cloudflare-workers-sync-destination-schema.ts index 4723204fd..5e4c16d09 100644 --- a/frontend/src/components/secret-syncs/forms/schemas/cloudflare-workers-sync-destination-schema.ts +++ b/frontend/src/components/secret-syncs/forms/schemas/cloudflare-workers-sync-destination-schema.ts @@ -7,7 +7,12 @@ export const CloudflareWorkersSyncDestinationSchema = BaseSecretSyncSchema().mer z.object({ destination: z.literal(SecretSync.CloudflareWorkers), destinationConfig: z.object({ - scriptId: z.string().trim().min(1, "Script ID is required") + scriptId: z + .string() + .trim() + .min(1, "Script ID is required") + .max(64) + .regex(/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/, "Invalid script ID format") }) }) ); diff --git a/frontend/src/hooks/api/appConnections/cloudflare/queries.tsx b/frontend/src/hooks/api/appConnections/cloudflare/queries.tsx index 267de55cc..f4ca87ad1 100644 --- a/frontend/src/hooks/api/appConnections/cloudflare/queries.tsx +++ b/frontend/src/hooks/api/appConnections/cloudflare/queries.tsx @@ -3,14 +3,14 @@ import { useQuery, UseQueryOptions } from "@tanstack/react-query"; import { apiRequest } from "@app/config/request"; import { appConnectionKeys } from "../queries"; -import { TCloudflarePagesProject, TCloudflareWorkersProject } from "./types"; +import { TCloudflarePagesProject, TCloudflareWorkersScript } from "./types"; const cloudflareConnectionKeys = { all: [...appConnectionKeys.all, "cloudflare"] as const, listPagesProjects: (connectionId: string) => [...cloudflareConnectionKeys.all, "pages-projects", connectionId] as const, - listWorkersProjects: (connectionId: string) => - [...cloudflareConnectionKeys.all, "workers-projects", connectionId] as const + listWorkersScripts: (connectionId: string) => + [...cloudflareConnectionKeys.all, "workers-scripts", connectionId] as const }; export const useCloudflareConnectionListPagesProjects = ( @@ -38,23 +38,23 @@ export const useCloudflareConnectionListPagesProjects = ( }); }; -export const useCloudflareConnectionListWorkersProjects = ( +export const useCloudflareConnectionListWorkersScripts = ( connectionId: string, options?: Omit< UseQueryOptions< - TCloudflareWorkersProject[], + TCloudflareWorkersScript[], unknown, - TCloudflareWorkersProject[], - ReturnType + TCloudflareWorkersScript[], + ReturnType >, "queryKey" | "queryFn" > ) => { return useQuery({ - queryKey: cloudflareConnectionKeys.listWorkersProjects(connectionId), + queryKey: cloudflareConnectionKeys.listWorkersScripts(connectionId), queryFn: async () => { - const { data } = await apiRequest.get( - `/api/v1/app-connections/cloudflare/${connectionId}/cloudflare-workers-projects` + const { data } = await apiRequest.get( + `/api/v1/app-connections/cloudflare/${connectionId}/cloudflare-workers-scripts` ); return data; diff --git a/frontend/src/hooks/api/appConnections/cloudflare/types.ts b/frontend/src/hooks/api/appConnections/cloudflare/types.ts index 9f3996228..1d5ea53d4 100644 --- a/frontend/src/hooks/api/appConnections/cloudflare/types.ts +++ b/frontend/src/hooks/api/appConnections/cloudflare/types.ts @@ -3,6 +3,6 @@ export type TCloudflarePagesProject = { name: string; }; -export type TCloudflareWorkersProject = { +export type TCloudflareWorkersScript = { id: string; };