From 8c0732ddf1b39bd36defef2a5094977ed080d4af Mon Sep 17 00:00:00 2001 From: pengx17 Date: Fri, 19 Apr 2024 03:51:41 +0000 Subject: [PATCH] fix: handle 401 errors (#6611) upstream https://github.com/toeverything/blocksuite/pull/6809 --- .../block-suite-editor/ai/copilot-client.ts | 18 ++++++++++++++---- .../block-suite-editor/ai/provider.ts | 9 ++++++++- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/packages/frontend/core/src/components/blocksuite/block-suite-editor/ai/copilot-client.ts b/packages/frontend/core/src/components/blocksuite/block-suite-editor/ai/copilot-client.ts index 9bcbadc7ac..8239badde8 100644 --- a/packages/frontend/core/src/components/blocksuite/block-suite-editor/ai/copilot-client.ts +++ b/packages/frontend/core/src/components/blocksuite/block-suite-editor/ai/copilot-client.ts @@ -9,7 +9,11 @@ import { type QueryOptions, type RequestOptions, } from '@affine/graphql'; -import { GeneralNetworkError, PaymentRequiredError } from '@blocksuite/blocks'; +import { + GeneralNetworkError, + PaymentRequiredError, + UnauthorizedError, +} from '@blocksuite/blocks'; type OptionsField = RequestOptions['variables'] extends { options: infer U } ? U : never; @@ -21,10 +25,16 @@ const fetcher = async ( return await defaultFetcher(options); } catch (_err) { const error = Array.isArray(_err) ? _err.at(0) : _err; - if (error.extensions?.code === 402) { - throw new PaymentRequiredError(); + const code = error.extensions?.code; + + switch (code) { + case 401: + throw new UnauthorizedError(); + case 402: + throw new PaymentRequiredError(); + default: + throw new GeneralNetworkError(); } - throw new GeneralNetworkError(); } }; diff --git a/packages/frontend/core/src/components/blocksuite/block-suite-editor/ai/provider.ts b/packages/frontend/core/src/components/blocksuite/block-suite-editor/ai/provider.ts index 1565c61d7c..b761555dc9 100644 --- a/packages/frontend/core/src/components/blocksuite/block-suite-editor/ai/provider.ts +++ b/packages/frontend/core/src/components/blocksuite/block-suite-editor/ai/provider.ts @@ -1,4 +1,4 @@ -import { openSettingModalAtom } from '@affine/core/atoms'; +import { authAtom, openSettingModalAtom } from '@affine/core/atoms'; import { getBaseUrl } from '@affine/graphql'; import { assertExists } from '@blocksuite/global/utils'; import { AIProvider } from '@blocksuite/presets'; @@ -295,4 +295,11 @@ export function setupAIProvider() { open: true, }); }); + + AIProvider.slots.requestLogin.on(() => { + getCurrentStore().set(authAtom, s => ({ + ...s, + openModal: true, + })); + }); }