From fe4b63210e28ce4a4c04f835d5546cc8b4e6e39f Mon Sep 17 00:00:00 2001 From: yessenia Date: Fri, 17 Oct 2025 10:03:32 +0800 Subject: [PATCH] fix(trigger): oauth client config --- .../subscription-list/create/index.tsx | 6 +-- .../subscription-list/create/oauth-client.tsx | 42 +++++++++++-------- web/i18n/en-US/plugin-trigger.ts | 2 +- web/i18n/zh-Hans/plugin-trigger.ts | 2 +- web/service/use-triggers.ts | 14 ++++--- 5 files changed, 38 insertions(+), 28 deletions(-) diff --git a/web/app/components/plugins/plugin-detail-panel/subscription-list/create/index.tsx b/web/app/components/plugins/plugin-detail-panel/subscription-list/create/index.tsx index d4eeb498f6..6ff8d1dcde 100644 --- a/web/app/components/plugins/plugin-detail-panel/subscription-list/create/index.tsx +++ b/web/app/components/plugins/plugin-detail-panel/subscription-list/create/index.tsx @@ -100,7 +100,7 @@ export const CreateSubscriptionButton = ({ buttonType = CreateButtonType.FULL_BU ] }, [t, oauthConfig, supportedMethods, methodType]) - const onChooseCreateType = (type: SupportedCreationMethods) => { + const onChooseCreateType = async (type: SupportedCreationMethods) => { if (type === SupportedCreationMethods.OAUTH) { if (oauthConfig?.configured) { initiateOAuth(detail?.provider || '', { @@ -115,10 +115,10 @@ export const CreateSubscriptionButton = ({ buttonType = CreateButtonType.FULL_BU } }) }, - onError: (error: any) => { + onError: () => { Toast.notify({ type: 'error', - message: error?.message || t('pluginTrigger.modal.errors.authFailed'), + message: t('pluginTrigger.modal.oauth.authorization.authFailed'), }) }, }) diff --git a/web/app/components/plugins/plugin-detail-panel/subscription-list/create/oauth-client.tsx b/web/app/components/plugins/plugin-detail-panel/subscription-list/create/oauth-client.tsx index b1af8ae0e0..a303cdd2c7 100644 --- a/web/app/components/plugins/plugin-detail-panel/subscription-list/create/oauth-client.tsx +++ b/web/app/components/plugins/plugin-detail-panel/subscription-list/create/oauth-client.tsx @@ -7,6 +7,7 @@ import Toast from '@/app/components/base/toast' import type { TriggerOAuthClientParams, TriggerOAuthConfig, TriggerSubscriptionBuilder } from '@/app/components/workflow/block-selector/types' import OptionCard from '@/app/components/workflow/nodes/_base/components/option-card' import { openOAuthPopup } from '@/hooks/use-oauth' +import type { ConfigureTriggerOAuthPayload } from '@/service/use-triggers' import { useConfigureTriggerOAuth, useDeleteTriggerOAuth, @@ -71,10 +72,11 @@ export const OAuthClientSettingsModal = ({ oauthConfig, onClose, showOAuthCreate } }) }, - onError: (error: any) => { + onError: () => { + setAuthorizationStatus(AuthorizationStatusEnum.Failed) Toast.notify({ type: 'error', - message: error?.message || t('pluginTrigger.modal.errors.authFailed'), + message: t('pluginTrigger.modal.oauth.authorization.authFailed'), }) }, }) @@ -125,28 +127,32 @@ export const OAuthClientSettingsModal = ({ oauthConfig, onClose, showOAuthCreate } const handleSave = (needAuth: boolean) => { - const clientParams = clientFormRef.current?.getFormValues({})?.values || {} - if (clientParams.client_id === oauthConfig?.params.client_id) - clientParams.client_id = '[__HIDDEN__]' - - if (clientParams.client_secret === oauthConfig?.params.client_secret) - clientParams.client_secret = '[__HIDDEN__]' - - configureOAuth({ + const isCustom = clientType === ClientTypeEnum.Custom + const params: ConfigureTriggerOAuthPayload = { provider: providerName, - client_params: clientParams as TriggerOAuthClientParams, - enabled: clientType === ClientTypeEnum.Custom, - }, { + enabled: isCustom, + } + + if (isCustom) { + const clientFormValues = clientFormRef.current?.getFormValues({}) as { values: TriggerOAuthClientParams, isCheckValidated: boolean } + if (!clientFormValues.isCheckValidated) + return + const clientParams = clientFormValues.values + if (clientParams.client_id === oauthConfig?.params.client_id) + clientParams.client_id = '[__HIDDEN__]' + + if (clientParams.client_secret === oauthConfig?.params.client_secret) + clientParams.client_secret = '[__HIDDEN__]' + + params.client_params = clientParams + } + + configureOAuth(params, { onSuccess: () => { if (needAuth) handleAuthorization() else onClose() - - Toast.notify({ - type: 'success', - message: t('pluginTrigger.modal.oauth.configuration.success'), - }) }, onError: (error: any) => { Toast.notify({ diff --git a/web/i18n/en-US/plugin-trigger.ts b/web/i18n/en-US/plugin-trigger.ts index a88096798b..63f34af945 100644 --- a/web/i18n/en-US/plugin-trigger.ts +++ b/web/i18n/en-US/plugin-trigger.ts @@ -116,7 +116,7 @@ const translation = { authorizeButton: 'Authorize with {{provider}}', waitingAuth: 'Waiting for authorization...', authSuccess: 'Authorization successful', - authFailed: 'Authorization failed', + authFailed: 'Failed to get OAuth authorization information', waitingJump: 'Authorized, waiting for jump', }, configuration: { diff --git a/web/i18n/zh-Hans/plugin-trigger.ts b/web/i18n/zh-Hans/plugin-trigger.ts index 3d53c15474..bef0377457 100644 --- a/web/i18n/zh-Hans/plugin-trigger.ts +++ b/web/i18n/zh-Hans/plugin-trigger.ts @@ -116,7 +116,7 @@ const translation = { authorizeButton: '使用 {{provider}} 授权', waitingAuth: '等待授权中...', authSuccess: '授权成功', - authFailed: '授权失败', + authFailed: '获取 OAuth 授权信息失败', waitingJump: '已授权,待跳转', }, configuration: { diff --git a/web/service/use-triggers.ts b/web/service/use-triggers.ts index 651280442d..1aa165c13e 100644 --- a/web/service/use-triggers.ts +++ b/web/service/use-triggers.ts @@ -233,14 +233,16 @@ export const useTriggerOAuthConfig = (provider: string, enabled = true) => { }) } +export type ConfigureTriggerOAuthPayload = { + provider: string + client_params?: TriggerOAuthClientParams + enabled: boolean +} + export const useConfigureTriggerOAuth = () => { return useMutation({ mutationKey: [NAME_SPACE, 'configure-oauth'], - mutationFn: (payload: { - provider: string - client_params: TriggerOAuthClientParams - enabled: boolean - }) => { + mutationFn: (payload: ConfigureTriggerOAuthPayload) => { const { provider, ...body } = payload return post<{ result: string }>( `/workspaces/current/trigger-provider/${provider}/oauth/client`, @@ -267,6 +269,8 @@ export const useInitiateTriggerOAuth = () => { mutationFn: (provider: string) => { return get<{ authorization_url: string; subscription_builder: TriggerSubscriptionBuilder }>( `/workspaces/current/trigger-provider/${provider}/subscriptions/oauth/authorize`, + {}, + { silent: true }, ) }, })