diff --git a/oxlint-suppressions.json b/oxlint-suppressions.json index 954cd4fef50..65150d98bc5 100644 --- a/oxlint-suppressions.json +++ b/oxlint-suppressions.json @@ -4016,11 +4016,6 @@ "count": 1 } }, - "web/service/__tests__/use-pipeline.spec.tsx": { - "no-restricted-imports": { - "count": 1 - } - }, "web/service/access-control/__tests__/use-app-access-control.spec.tsx": { "no-restricted-imports": { "count": 1 @@ -4140,9 +4135,6 @@ "web/service/use-datasource.ts": { "@tanstack/query/prefer-query-options": { "count": 3 - }, - "no-restricted-imports": { - "count": 1 } }, "web/service/use-flow.ts": { @@ -4153,9 +4145,6 @@ "web/service/use-pipeline.ts": { "@tanstack/query/prefer-query-options": { "count": 8 - }, - "no-restricted-imports": { - "count": 1 } }, "web/service/use-plugins-auth.ts": { diff --git a/web/service/__tests__/use-pipeline.spec.tsx b/web/service/__tests__/use-pipeline.spec.tsx index 8dae4041b1d..999028b5d73 100644 --- a/web/service/__tests__/use-pipeline.spec.tsx +++ b/web/service/__tests__/use-pipeline.spec.tsx @@ -3,16 +3,25 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query' import { act, renderHook } from '@testing-library/react' import { beforeEach, describe, expect, it, vi } from 'vite-plus/test' import { DSLImportMode, DSLImportStatus } from '@/models/app' -import { post } from '../base' +import { consoleClient } from '../console' import { useImportPipelineDSL, useImportPipelineDSLConfirm } from '../use-pipeline' -vi.mock('../base', () => ({ - post: vi.fn(), - get: vi.fn(), - patch: vi.fn(), - del: vi.fn(), +vi.mock('../console', () => ({ + consoleClient: { + rag: { + pipelines: { + imports: { + post: vi.fn(), + byImportId: { confirm: { post: vi.fn() } }, + }, + }, + }, + }, })) +const importPost = vi.mocked(consoleClient.rag.pipelines.imports.post) +const confirmPost = vi.mocked(consoleClient.rag.pipelines.imports.byImportId.confirm.post) + const createWrapper = () => { const queryClient = new QueryClient({ defaultOptions: { @@ -29,14 +38,16 @@ const createWrapper = () => { describe('use-pipeline imports', () => { beforeEach(() => { vi.clearAllMocks() - vi.mocked(post).mockResolvedValue({ + const importResult = { id: 'import-id', status: DSLImportStatus.COMPLETED, pipeline_id: 'pipeline-id', dataset_id: 'dataset-id', current_dsl_version: '0.1.0', imported_dsl_version: '0.1.0', - }) + } + importPost.mockResolvedValue(importResult as never) + confirmPost.mockResolvedValue(importResult as never) }) it('should import pipeline DSL silently so callers can own error toasts', async () => { @@ -50,7 +61,7 @@ describe('use-pipeline imports', () => { await result.current.mutateAsync(request) }) - expect(post).toHaveBeenCalledWith('/rag/pipelines/imports', { body: request }, { silent: true }) + expect(importPost).toHaveBeenCalledWith({ body: request }, { context: { silent: true } }) }) it('should confirm pipeline DSL import silently so callers can own error toasts', async () => { @@ -60,10 +71,9 @@ describe('use-pipeline imports', () => { await result.current.mutateAsync('import-id') }) - expect(post).toHaveBeenCalledWith( - '/rag/pipelines/imports/import-id/confirm', - {}, - { silent: true }, + expect(confirmPost).toHaveBeenCalledWith( + { params: { import_id: 'import-id' } }, + { context: { silent: true } }, ) }) }) diff --git a/web/service/use-datasource.ts b/web/service/use-datasource.ts index 2e15fe2e30d..5ecb61c3ae1 100644 --- a/web/service/use-datasource.ts +++ b/web/service/use-datasource.ts @@ -3,7 +3,8 @@ import type { DataSourceCredential, } from '@/app/components/header/account-setting/data-source-page-new/types' import { useMutation, useQuery } from '@tanstack/react-query' -import { get } from './base' +import { consoleClient } from './console' +import { narrowResponse } from './console/narrow-response' import { useInvalid } from './use-base' const NAME_SPACE = 'data-source-auth' @@ -11,7 +12,8 @@ const NAME_SPACE = 'data-source-auth' export const useGetDataSourceListAuth = () => { return useQuery({ queryKey: [NAME_SPACE, 'list'], - queryFn: () => get<{ result: DataSourceAuth[] }>('/auth/plugin/datasource/list'), + queryFn: () => + narrowResponse<{ result: DataSourceAuth[] }>(consoleClient.auth.plugin.datasource.list.get()), retry: 0, }) } @@ -24,7 +26,10 @@ export const useInvalidDataSourceListAuth = () => { export const useGetDefaultDataSourceListAuth = () => { return useQuery({ queryKey: [NAME_SPACE, 'default-list'], - queryFn: () => get<{ result: DataSourceAuth[] }>('/auth/plugin/datasource/default-list'), + queryFn: () => + narrowResponse<{ result: DataSourceAuth[] }>( + consoleClient.auth.plugin.datasource.defaultList.get(), + ), retry: 0, }) } @@ -37,11 +42,16 @@ export const useGetDataSourceOAuthUrl = (provider: string) => { return useMutation({ mutationKey: [NAME_SPACE, 'oauth-url', provider], mutationFn: (credentialId?: string) => { - return get<{ + return narrowResponse<{ authorization_url: string state: string context_id: string - }>(`/oauth/plugin/${provider}/datasource/get-authorization-url?credential_id=${credentialId}`) + }>( + consoleClient.oauth.plugin.byProviderId.datasource.getAuthorizationUrl.get({ + params: { provider_id: provider }, + query: { credential_id: credentialId }, + }), + ) }, }) } @@ -56,7 +66,11 @@ export const useGetDataSourceAuth = ({ return useQuery({ queryKey: [NAME_SPACE, 'specific-data-source', pluginId, provider], queryFn: () => - get<{ result: DataSourceCredential[] }>(`/auth/plugin/datasource/${pluginId}/${provider}`), + narrowResponse<{ result: DataSourceCredential[] }>( + consoleClient.auth.plugin.datasource.byProviderId.get({ + params: { provider_id: `${pluginId}/${provider}` }, + }), + ), retry: 0, }) } diff --git a/web/service/use-pipeline.ts b/web/service/use-pipeline.ts index 37490c92023..dd6ddf43e84 100644 --- a/web/service/use-pipeline.ts +++ b/web/service/use-pipeline.ts @@ -31,7 +31,8 @@ import type { } from '@/models/pipeline' import { useMutation, useQuery } from '@tanstack/react-query' import { DatasourceType } from '@/models/pipeline' -import { del, get, patch, post } from './base' +import { consoleClient } from './console' +import { narrowResponse } from './console/narrow-response' import { useInvalid } from './use-base' const NAME_SPACE = 'pipeline' @@ -41,7 +42,9 @@ export const usePipelineTemplateList = (params: PipelineTemplateListParams, enab return useQuery({ queryKey: [...PipelineTemplateListQueryKeyPrefix, params], queryFn: () => { - return get('/rag/pipeline/templates', { params }) + return narrowResponse( + consoleClient.rag.pipeline.templates.get({ query: params }), + ) }, enabled, }) @@ -56,11 +59,14 @@ export const usePipelineTemplateById = (params: PipelineTemplateByIdRequest, ena return useQuery({ queryKey: [NAME_SPACE, 'template', type, template_id], queryFn: () => { - return get(`/rag/pipeline/templates/${template_id}`, { - params: { - type, - }, - }) + return narrowResponse( + consoleClient.rag.pipeline.templates.byTemplateId.get({ + params: { template_id }, + query: { + type, + }, + }), + ) }, enabled, staleTime: 0, @@ -78,11 +84,11 @@ export const useUpdateTemplateInfo = ( mutationKey: [NAME_SPACE, 'template-update'], mutationFn: (request: UpdateTemplateInfoRequest) => { const { template_id, ...rest } = request - return patch( - `/rag/pipeline/customized/templates/${template_id}`, - { + return narrowResponse( + consoleClient.rag.pipeline.customized.templates.byTemplateId.patch({ + params: { template_id }, body: rest, - }, + }), ) }, ...mutationOptions, @@ -95,7 +101,11 @@ export const useDeleteTemplate = ( return useMutation({ mutationKey: [NAME_SPACE, 'template-delete'], mutationFn: (templateId: string) => { - return del(`/rag/pipeline/customized/templates/${templateId}`) + return narrowResponse( + consoleClient.rag.pipeline.customized.templates.byTemplateId.delete({ + params: { template_id: templateId }, + }), + ) }, ...mutationOptions, }) @@ -107,7 +117,11 @@ export const useExportTemplateDSL = ( return useMutation({ mutationKey: [NAME_SPACE, 'template-dsl-export'], mutationFn: (templateId: string) => { - return post(`/rag/pipeline/customized/templates/${templateId}`) + return narrowResponse( + consoleClient.rag.pipeline.customized.templates.byTemplateId.post({ + params: { template_id: templateId }, + }), + ) }, ...mutationOptions, }) @@ -119,10 +133,8 @@ export const useImportPipelineDSL = ( return useMutation({ mutationKey: [NAME_SPACE, 'dsl-import'], mutationFn: (request: ImportPipelineDSLRequest) => { - return post( - '/rag/pipelines/imports', - { body: request }, - { silent: true }, + return narrowResponse( + consoleClient.rag.pipelines.imports.post({ body: request }, { context: { silent: true } }), ) }, ...mutationOptions, @@ -135,10 +147,11 @@ export const useImportPipelineDSLConfirm = ( return useMutation({ mutationKey: [NAME_SPACE, 'dsl-import-confirm'], mutationFn: (importId: string) => { - return post( - `/rag/pipelines/imports/${importId}/confirm`, - {}, - { silent: true }, + return narrowResponse( + consoleClient.rag.pipelines.imports.byImportId.confirm.post( + { params: { import_id: importId } }, + { context: { silent: true } }, + ), ) }, ...mutationOptions, @@ -151,8 +164,10 @@ export const useCheckPipelineDependencies = ( return useMutation({ mutationKey: [NAME_SPACE, 'check-dependencies'], mutationFn: (pipelineId: string) => { - return get( - `/rag/pipelines/imports/${pipelineId}/check-dependencies`, + return narrowResponse( + consoleClient.rag.pipelines.imports.byPipelineId.checkDependencies.get({ + params: { pipeline_id: pipelineId }, + }), ) }, ...mutationOptions, @@ -167,13 +182,13 @@ export const useDraftPipelineProcessingParams = ( return useQuery({ queryKey: [NAME_SPACE, 'draft-pipeline-processing-params', pipeline_id, node_id], queryFn: () => { - return get( - `/rag/pipelines/${pipeline_id}/workflows/draft/processing/parameters`, - { - params: { + return narrowResponse( + consoleClient.rag.pipelines.byPipelineId.workflows.draft.processing.parameters.get({ + params: { pipeline_id }, + query: { node_id, }, - }, + }), ) }, staleTime: 0, @@ -186,13 +201,13 @@ export const usePublishedPipelineProcessingParams = (params: PipelineProcessingP return useQuery({ queryKey: [NAME_SPACE, 'published-pipeline-processing-params', pipeline_id, node_id], queryFn: () => { - return get( - `/rag/pipelines/${pipeline_id}/workflows/published/processing/parameters`, - { - params: { + return narrowResponse( + consoleClient.rag.pipelines.byPipelineId.workflows.published.processing.parameters.get({ + params: { pipeline_id }, + query: { node_id, }, - }, + }), ) }, staleTime: 0, @@ -205,8 +220,10 @@ export const usePublishedPipelineInfo = (pipelineId: string) => { return useQuery({ queryKey: [...publishedPipelineInfoQueryKeyPrefix, pipelineId], queryFn: () => { - return get( - `/rag/pipelines/${pipelineId}/workflows/publish`, + return narrowResponse( + consoleClient.rag.pipelines.byPipelineId.workflows.publish.get({ + params: { pipeline_id: pipelineId }, + }), ) }, enabled: !!pipelineId, @@ -224,15 +241,15 @@ export const useRunPublishedPipeline = ( mutationKey: [NAME_SPACE, 'run-published-pipeline'], mutationFn: (request: PublishedPipelineRunRequest) => { const { pipeline_id: pipelineId, is_preview, ...rest } = request - return post( - `/rag/pipelines/${pipelineId}/workflows/published/run`, - { + return narrowResponse( + consoleClient.rag.pipelines.byPipelineId.workflows.published.run.post({ + params: { pipeline_id: pipelineId }, body: { ...rest, is_preview, response_mode: 'blocking', }, - }, + }), ) }, ...mutationOptions, @@ -247,13 +264,13 @@ export const useDraftPipelinePreProcessingParams = ( return useQuery({ queryKey: [NAME_SPACE, 'draft-pipeline-pre-processing-params', pipeline_id, node_id], queryFn: () => { - return get( - `/rag/pipelines/${pipeline_id}/workflows/draft/pre-processing/parameters`, - { - params: { + return narrowResponse( + consoleClient.rag.pipelines.byPipelineId.workflows.draft.preProcessing.parameters.get({ + params: { pipeline_id }, + query: { node_id, }, - }, + }), ) }, staleTime: 0, @@ -269,13 +286,13 @@ export const usePublishedPipelinePreProcessingParams = ( return useQuery({ queryKey: [NAME_SPACE, 'published-pipeline-pre-processing-params', pipeline_id, node_id], queryFn: () => { - return get( - `/rag/pipelines/${pipeline_id}/workflows/published/pre-processing/parameters`, - { - params: { + return narrowResponse( + consoleClient.rag.pipelines.byPipelineId.workflows.published.preProcessing.parameters.get({ + params: { pipeline_id }, + query: { node_id, }, - }, + }), ) }, staleTime: 0, @@ -287,8 +304,11 @@ export const useExportPipelineDSL = () => { return useMutation({ mutationKey: [NAME_SPACE, 'export-pipeline-dsl'], mutationFn: ({ pipelineId, include = false }: { pipelineId: string; include?: boolean }) => { - return get( - `/rag/pipelines/${pipelineId}/exports?include_secret=${include}`, + return narrowResponse( + consoleClient.rag.pipelines.byPipelineId.exports.get({ + params: { pipeline_id: pipelineId }, + query: { include_secret: String(include) }, + }), ) }, }) @@ -308,7 +328,8 @@ export const usePublishAsCustomizedPipeline = () => { icon_info: IconInfo description?: string }) => { - return post(`/rag/pipelines/${pipelineId}/customized/publish`, { + return consoleClient.rag.pipelines.byPipelineId.customized.publish.post({ + params: { pipeline_id: pipelineId }, body: { name, icon_info, @@ -324,8 +345,10 @@ export const usePipelineExecutionLog = (params: PipelineExecutionLogRequest) => return useQuery({ queryKey: [NAME_SPACE, 'pipeline-execution-log', dataset_id, document_id], queryFn: () => { - return get( - `/datasets/${dataset_id}/documents/${document_id}/pipeline-execution-log`, + return narrowResponse( + consoleClient.datasets.byDatasetId.documents.byDocumentId.pipelineExecutionLog.get({ + params: { dataset_id, document_id }, + }), ) }, staleTime: 0, @@ -337,19 +360,21 @@ export const usePreviewOnlineDocument = () => { mutationKey: [NAME_SPACE, 'preview-online-document'], mutationFn: (params: OnlineDocumentPreviewRequest) => { const { pipelineId, datasourceNodeId, workspaceID, pageID, pageType, credentialId } = params - return post( - `/rag/pipelines/${pipelineId}/workflows/published/datasource/nodes/${datasourceNodeId}/preview`, - { - body: { - datasource_type: DatasourceType.onlineDocument, - credential_id: credentialId, - inputs: { - workspace_id: workspaceID, - page_id: pageID, - type: pageType, + return narrowResponse( + consoleClient.rag.pipelines.byPipelineId.workflows.published.datasource.nodes.byNodeId.preview.post( + { + params: { pipeline_id: pipelineId, node_id: datasourceNodeId }, + body: { + datasource_type: DatasourceType.onlineDocument, + credential_id: credentialId, + inputs: { + workspace_id: workspaceID, + page_id: pageID, + type: pageType, + }, }, }, - }, + ), ) }, }) @@ -359,7 +384,11 @@ export const useConvertDatasetToPipeline = () => { return useMutation({ mutationKey: [NAME_SPACE, 'convert-dataset-to-pipeline'], mutationFn: (datasetId: string) => { - return post(`/rag/pipelines/transform/datasets/${datasetId}`) + return narrowResponse( + consoleClient.rag.pipelines.transform.datasets.byDatasetId.post({ + params: { dataset_id: datasetId }, + }), + ) }, }) } @@ -375,11 +404,11 @@ export const useDatasourceSingleRun = ( mutationKey: [NAME_SPACE, 'datasource-node-single-run'], mutationFn: (params: DatasourceNodeSingleRunRequest) => { const { pipeline_id: pipelineId, ...rest } = params - return post( - `/rag/pipelines/${pipelineId}/workflows/draft/datasource/variables-inspect`, - { + return narrowResponse( + consoleClient.rag.pipelines.byPipelineId.workflows.draft.datasource.variablesInspect.post({ + params: { pipeline_id: pipelineId }, body: rest, - }, + }), ) }, ...mutationOptions,