From ca32a834179d2302d2f97b8416b4bc5c9bae4eba Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Thu, 9 Apr 2026 11:22:36 -0700 Subject: [PATCH] fix(credentials): add cross-cache invalidation for oauth credential queries --- apps/sim/hooks/queries/credential-sets.ts | 16 ++++++++-------- apps/sim/hooks/queries/credentials.ts | 13 +++++++++++++ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/apps/sim/hooks/queries/credential-sets.ts b/apps/sim/hooks/queries/credential-sets.ts index 5c639fc16c8..e1b104fbb75 100644 --- a/apps/sim/hooks/queries/credential-sets.ts +++ b/apps/sim/hooks/queries/credential-sets.ts @@ -157,7 +157,7 @@ export function useAcceptCredentialSetInvitation() { } return response.json() }, - onSuccess: () => { + onSettled: () => { queryClient.invalidateQueries({ queryKey: credentialSetKeys.memberships() }) queryClient.invalidateQueries({ queryKey: credentialSetKeys.invitations() }) }, @@ -187,7 +187,7 @@ export function useCreateCredentialSet() { } return response.json() }, - onSuccess: (_data, variables) => { + onSettled: (_data, _error, variables) => { queryClient.invalidateQueries({ queryKey: credentialSetKeys.list(variables.organizationId) }) }, }) @@ -209,7 +209,7 @@ export function useCreateCredentialSetInvitation() { } return response.json() }, - onSuccess: (_data, variables) => { + onSettled: (_data, _error, variables) => { queryClient.invalidateQueries({ queryKey: credentialSetKeys.detailInvitations(variables.credentialSetId), }) @@ -264,7 +264,7 @@ export function useRemoveCredentialSetMember() { } return response.json() }, - onSuccess: (_data, variables) => { + onSettled: (_data, _error, variables) => { queryClient.invalidateQueries({ queryKey: credentialSetKeys.detailMembers(variables.credentialSetId), }) @@ -288,7 +288,7 @@ export function useLeaveCredentialSet() { } return response.json() }, - onSuccess: () => { + onSettled: () => { queryClient.invalidateQueries({ queryKey: credentialSetKeys.memberships() }) }, }) @@ -313,7 +313,7 @@ export function useDeleteCredentialSet() { } return response.json() }, - onSuccess: (_data, variables) => { + onSettled: (_data, _error, variables) => { queryClient.invalidateQueries({ queryKey: credentialSetKeys.list(variables.organizationId), }) @@ -370,7 +370,7 @@ export function useCancelCredentialSetInvitation() { } return response.json() }, - onSuccess: (_data, variables) => { + onSettled: (_data, _error, variables) => { queryClient.invalidateQueries({ queryKey: credentialSetKeys.detailInvitations(variables.credentialSetId), }) @@ -393,7 +393,7 @@ export function useResendCredentialSetInvitation() { } return response.json() }, - onSuccess: (_data, variables) => { + onSettled: (_data, _error, variables) => { queryClient.invalidateQueries({ queryKey: credentialSetKeys.detailInvitations(variables.credentialSetId), }) diff --git a/apps/sim/hooks/queries/credentials.ts b/apps/sim/hooks/queries/credentials.ts index 9267759209f..708554aa965 100644 --- a/apps/sim/hooks/queries/credentials.ts +++ b/apps/sim/hooks/queries/credentials.ts @@ -5,6 +5,12 @@ import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { environmentKeys } from '@/hooks/queries/environment' import { fetchJson } from '@/hooks/selectors/helpers' +/** + * Key prefix for OAuth credential queries. + * Duplicated here to avoid circular imports with oauth-credentials.ts. + */ +const OAUTH_CREDENTIALS_KEY = ['oauthCredentials'] as const + export type WorkspaceCredentialType = 'oauth' | 'env_workspace' | 'env_personal' | 'service_account' export type WorkspaceCredentialRole = 'admin' | 'member' export type WorkspaceCredentialMemberStatus = 'active' | 'pending' | 'revoked' @@ -192,6 +198,9 @@ export function useCreateWorkspaceCredential() { queryClient.invalidateQueries({ queryKey: workspaceCredentialKeys.lists(), }) + queryClient.invalidateQueries({ + queryKey: OAUTH_CREDENTIALS_KEY, + }) }, }) } @@ -269,6 +278,9 @@ export function useUpdateWorkspaceCredential() { queryClient.invalidateQueries({ queryKey: workspaceCredentialKeys.lists(), }) + queryClient.invalidateQueries({ + queryKey: OAUTH_CREDENTIALS_KEY, + }) }, }) } @@ -290,6 +302,7 @@ export function useDeleteWorkspaceCredential() { onSettled: (_data, _error, credentialId) => { queryClient.invalidateQueries({ queryKey: workspaceCredentialKeys.detail(credentialId) }) queryClient.invalidateQueries({ queryKey: workspaceCredentialKeys.lists() }) + queryClient.invalidateQueries({ queryKey: OAUTH_CREDENTIALS_KEY }) queryClient.invalidateQueries({ queryKey: environmentKeys.all }) }, })