From 846403d424630d8a6fe4c2951c0c031fba0bd962 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Thu, 16 Oct 2025 00:08:28 +0530 Subject: [PATCH] fix: greptile review comments --- .../laravel-forge-connection-fns.ts | 2 +- .../laravel-forge-connection-service.ts | 2 +- .../laravel-forge-sync-schemas.ts | 20 ++++++++++++++++-- .../laravel-forge/laravel-forge-sync-types.ts | 2 +- .../secret-syncs/laravel-forge.mdx | 4 ++-- .../appConnections/laravel-forge/queries.tsx | 21 ++++++++++--------- .../secretSyncs/types/laravel-forge-sync.ts | 2 +- .../LaravelForgeSyncDestinationCol.tsx | 1 - 8 files changed, 35 insertions(+), 19 deletions(-) diff --git a/backend/src/services/app-connection/laravel-forge/laravel-forge-connection-fns.ts b/backend/src/services/app-connection/laravel-forge/laravel-forge-connection-fns.ts index e63c659a7..108c934fc 100644 --- a/backend/src/services/app-connection/laravel-forge/laravel-forge-connection-fns.ts +++ b/backend/src/services/app-connection/laravel-forge/laravel-forge-connection-fns.ts @@ -148,7 +148,7 @@ export const listLaravelForgeServers = async ( export const listLaravelForgeSites = async ( appConnection: TLaravelForgeConnection, organizationSlug: string, - serverId: string + serverId: number ): Promise => { const { credentials } = appConnection; const { apiToken } = credentials; diff --git a/backend/src/services/app-connection/laravel-forge/laravel-forge-connection-service.ts b/backend/src/services/app-connection/laravel-forge/laravel-forge-connection-service.ts index fc3c2bf80..cc7fc8790 100644 --- a/backend/src/services/app-connection/laravel-forge/laravel-forge-connection-service.ts +++ b/backend/src/services/app-connection/laravel-forge/laravel-forge-connection-service.ts @@ -54,7 +54,7 @@ export const laravelForgeConnectionService = (getAppConnection: TGetAppConnectio connectionId: string, actor: OrgServiceActor, organizationSlug: string, - serverId: string + serverId: number ): Promise => { const appConnection = await getAppConnection(AppConnection.LaravelForge, connectionId, actor); try { diff --git a/backend/src/services/secret-sync/laravel-forge/laravel-forge-sync-schemas.ts b/backend/src/services/secret-sync/laravel-forge/laravel-forge-sync-schemas.ts index 069638da0..0350dd501 100644 --- a/backend/src/services/secret-sync/laravel-forge/laravel-forge-sync-schemas.ts +++ b/backend/src/services/secret-sync/laravel-forge/laravel-forge-sync-schemas.ts @@ -1,3 +1,4 @@ +import RE2 from "re2"; import { z } from "zod"; import { SecretSyncs } from "@app/lib/api-docs"; @@ -10,10 +11,25 @@ import { } from "@app/services/secret-sync/secret-sync-schemas"; import { TSyncOptionsConfig } from "@app/services/secret-sync/secret-sync-types"; +const slugValidator = (val: string) => { + return new RE2("^[a-z0-9.-]+$").test(val) && !new RE2(".[-]$").test(val); +}; + const LaravelForgeSyncDestinationConfigSchema = z.object({ - orgSlug: z.string().min(1, "Org Slug is required").describe(SecretSyncs.DESTINATION_CONFIG.LARAVEL_FORGE.orgSlug), + orgSlug: z + .string() + .min(1, "Org Slug is required") + .max(512, "Org Slug cannot exceed 512 characters") + .refine( + (val) => slugValidator(val), + "Org Slug can only contain lowercase letters, numbers, dots, and dashes, and cannot end with a dot or dash." + ) + .describe(SecretSyncs.DESTINATION_CONFIG.LARAVEL_FORGE.orgSlug), orgName: z.string().optional().describe(SecretSyncs.DESTINATION_CONFIG.LARAVEL_FORGE.orgName), - serverId: z.string().min(1, "Server ID is required").describe(SecretSyncs.DESTINATION_CONFIG.LARAVEL_FORGE.serverId), + serverId: z.coerce + .number() + .int("Server ID must be a valid integer") + .describe(SecretSyncs.DESTINATION_CONFIG.LARAVEL_FORGE.serverId), serverName: z.string().optional().describe(SecretSyncs.DESTINATION_CONFIG.LARAVEL_FORGE.serverName), siteId: z.string().min(1, "Site ID is required").describe(SecretSyncs.DESTINATION_CONFIG.LARAVEL_FORGE.siteId), siteName: z.string().optional().describe(SecretSyncs.DESTINATION_CONFIG.LARAVEL_FORGE.siteName) diff --git a/backend/src/services/secret-sync/laravel-forge/laravel-forge-sync-types.ts b/backend/src/services/secret-sync/laravel-forge/laravel-forge-sync-types.ts index faa5dffa4..e4d624af1 100644 --- a/backend/src/services/secret-sync/laravel-forge/laravel-forge-sync-types.ts +++ b/backend/src/services/secret-sync/laravel-forge/laravel-forge-sync-types.ts @@ -21,7 +21,7 @@ export type TLaravelForgeSyncWithCredentials = TLaravelForgeSync & { export type TGetLaravelForgeSecrets = { apiToken: string; orgSlug: string; - serverId: string; + serverId: number; siteId: string; }; diff --git a/docs/integrations/secret-syncs/laravel-forge.mdx b/docs/integrations/secret-syncs/laravel-forge.mdx index 6dd52df50..ee794a599 100644 --- a/docs/integrations/secret-syncs/laravel-forge.mdx +++ b/docs/integrations/secret-syncs/laravel-forge.mdx @@ -103,7 +103,7 @@ description: "Learn how to configure a Laravel Forge Sync for Infisical." "destinationConfig": { "orgSlug": "org-abc123", "serverId": "server-abc123", - "siteId": "site-abc123", + "siteId": "site-abc123" } }' ``` @@ -147,7 +147,7 @@ description: "Learn how to configure a Laravel Forge Sync for Infisical." "destinationConfig": { "orgSlug": "org-abc123", "serverId": "server-abc123", - "siteId": "site-abc123", + "siteId": "site-abc123" } } } diff --git a/frontend/src/hooks/api/appConnections/laravel-forge/queries.tsx b/frontend/src/hooks/api/appConnections/laravel-forge/queries.tsx index 4940ab39f..3cbab178c 100644 --- a/frontend/src/hooks/api/appConnections/laravel-forge/queries.tsx +++ b/frontend/src/hooks/api/appConnections/laravel-forge/queries.tsx @@ -9,9 +9,9 @@ const laravelForgeConnectionKeys = { all: [...appConnectionKeys.all, "laravel-forge"] as const, listOrganizations: (connectionId: string) => [...laravelForgeConnectionKeys.all, "organizations", connectionId] as const, - listServers: (connectionId: string, organizationSlug?: string) => + listServers: (connectionId: string, organizationSlug: string) => [...laravelForgeConnectionKeys.all, "servers", connectionId, organizationSlug] as const, - listSites: (connectionId: string, organizationSlug?: string, serverId?: string) => + listSites: (connectionId: string, organizationSlug: string, serverId: number) => [...laravelForgeConnectionKeys.all, "sites", connectionId, organizationSlug, serverId] as const }; @@ -56,7 +56,7 @@ export const useLaravelForgeConnectionListServers = ( return useQuery({ queryKey: laravelForgeConnectionKeys.listServers(connectionId, organizationSlug), queryFn: async () => { - const params = organizationSlug ? { organizationSlug } : {}; + const params = { organizationSlug }; const { data } = await apiRequest.get( `/api/v1/app-connections/laravel-forge/${connectionId}/servers`, { params } @@ -64,15 +64,15 @@ export const useLaravelForgeConnectionListServers = ( return data; }, - enabled: Boolean(connectionId), + enabled: Boolean(connectionId && organizationSlug), ...options }); }; export const useLaravelForgeConnectionListSites = ( connectionId: string, - organizationSlug?: string, - serverId?: string, + organizationSlug: string, + serverId: number, options?: Omit< UseQueryOptions< TLaravelForgeSite[], @@ -86,9 +86,10 @@ export const useLaravelForgeConnectionListSites = ( return useQuery({ queryKey: laravelForgeConnectionKeys.listSites(connectionId, organizationSlug, serverId), queryFn: async () => { - const params: Record = {}; - if (organizationSlug) params.organizationSlug = organizationSlug; - if (serverId) params.serverId = serverId; + const params = { + organizationSlug, + serverId + }; const { data } = await apiRequest.get( `/api/v1/app-connections/laravel-forge/${connectionId}/sites`, @@ -97,7 +98,7 @@ export const useLaravelForgeConnectionListSites = ( return data; }, - enabled: Boolean(connectionId), + enabled: Boolean(connectionId && organizationSlug && serverId), ...options }); }; diff --git a/frontend/src/hooks/api/secretSyncs/types/laravel-forge-sync.ts b/frontend/src/hooks/api/secretSyncs/types/laravel-forge-sync.ts index cce693a48..40e53c044 100644 --- a/frontend/src/hooks/api/secretSyncs/types/laravel-forge-sync.ts +++ b/frontend/src/hooks/api/secretSyncs/types/laravel-forge-sync.ts @@ -7,7 +7,7 @@ export type TLaravelForgeSync = TRootSecretSync & { destinationConfig: { orgSlug: string; orgName: string; - serverId: string; + serverId: number; serverName: string; siteId: string; siteName: string; diff --git a/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncDestinationCol/LaravelForgeSyncDestinationCol.tsx b/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncDestinationCol/LaravelForgeSyncDestinationCol.tsx index dbb4f0ebd..0b5dad247 100644 --- a/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncDestinationCol/LaravelForgeSyncDestinationCol.tsx +++ b/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncDestinationCol/LaravelForgeSyncDestinationCol.tsx @@ -10,6 +10,5 @@ type Props = { export const LaravelForgeSyncDestinationCol = ({ secretSync }: Props) => { const { primaryText, secondaryText } = getSecretSyncDestinationColValues(secretSync); - console.log({ secretSync }); return ; };