mirror of
https://github.com/langgenius/dify.git
synced 2026-10-16 07:20:34 +08:00
refactor(web): migrate pipeline and datasource hooks to the console contract
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
0f7e4fd5a8
commit
191d4d8f41
@@ -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": {
|
||||
|
||||
@@ -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 } },
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -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,
|
||||
})
|
||||
}
|
||||
|
||||
+99
-70
@@ -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<PipelineTemplateListResponse>({
|
||||
queryKey: [...PipelineTemplateListQueryKeyPrefix, params],
|
||||
queryFn: () => {
|
||||
return get<PipelineTemplateListResponse>('/rag/pipeline/templates', { params })
|
||||
return narrowResponse<PipelineTemplateListResponse>(
|
||||
consoleClient.rag.pipeline.templates.get({ query: params }),
|
||||
)
|
||||
},
|
||||
enabled,
|
||||
})
|
||||
@@ -56,11 +59,14 @@ export const usePipelineTemplateById = (params: PipelineTemplateByIdRequest, ena
|
||||
return useQuery<PipelineTemplateByIdResponse>({
|
||||
queryKey: [NAME_SPACE, 'template', type, template_id],
|
||||
queryFn: () => {
|
||||
return get<PipelineTemplateByIdResponse>(`/rag/pipeline/templates/${template_id}`, {
|
||||
params: {
|
||||
type,
|
||||
},
|
||||
})
|
||||
return narrowResponse<PipelineTemplateByIdResponse>(
|
||||
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<UpdateTemplateInfoResponse>(
|
||||
`/rag/pipeline/customized/templates/${template_id}`,
|
||||
{
|
||||
return narrowResponse<UpdateTemplateInfoResponse>(
|
||||
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<DeleteTemplateResponse>(`/rag/pipeline/customized/templates/${templateId}`)
|
||||
return narrowResponse<DeleteTemplateResponse>(
|
||||
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<ExportTemplateDSLResponse>(`/rag/pipeline/customized/templates/${templateId}`)
|
||||
return narrowResponse<ExportTemplateDSLResponse>(
|
||||
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<ImportPipelineDSLResponse>(
|
||||
'/rag/pipelines/imports',
|
||||
{ body: request },
|
||||
{ silent: true },
|
||||
return narrowResponse<ImportPipelineDSLResponse>(
|
||||
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<ImportPipelineDSLConfirmResponse>(
|
||||
`/rag/pipelines/imports/${importId}/confirm`,
|
||||
{},
|
||||
{ silent: true },
|
||||
return narrowResponse<ImportPipelineDSLConfirmResponse>(
|
||||
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<PipelineCheckDependenciesResponse>(
|
||||
`/rag/pipelines/imports/${pipelineId}/check-dependencies`,
|
||||
return narrowResponse<PipelineCheckDependenciesResponse>(
|
||||
consoleClient.rag.pipelines.imports.byPipelineId.checkDependencies.get({
|
||||
params: { pipeline_id: pipelineId },
|
||||
}),
|
||||
)
|
||||
},
|
||||
...mutationOptions,
|
||||
@@ -167,13 +182,13 @@ export const useDraftPipelineProcessingParams = (
|
||||
return useQuery<PipelineProcessingParamsResponse>({
|
||||
queryKey: [NAME_SPACE, 'draft-pipeline-processing-params', pipeline_id, node_id],
|
||||
queryFn: () => {
|
||||
return get<PipelineProcessingParamsResponse>(
|
||||
`/rag/pipelines/${pipeline_id}/workflows/draft/processing/parameters`,
|
||||
{
|
||||
params: {
|
||||
return narrowResponse<PipelineProcessingParamsResponse>(
|
||||
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<PipelineProcessingParamsResponse>({
|
||||
queryKey: [NAME_SPACE, 'published-pipeline-processing-params', pipeline_id, node_id],
|
||||
queryFn: () => {
|
||||
return get<PipelineProcessingParamsResponse>(
|
||||
`/rag/pipelines/${pipeline_id}/workflows/published/processing/parameters`,
|
||||
{
|
||||
params: {
|
||||
return narrowResponse<PipelineProcessingParamsResponse>(
|
||||
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<PublishedPipelineInfoResponse | null>({
|
||||
queryKey: [...publishedPipelineInfoQueryKeyPrefix, pipelineId],
|
||||
queryFn: () => {
|
||||
return get<PublishedPipelineInfoResponse | null>(
|
||||
`/rag/pipelines/${pipelineId}/workflows/publish`,
|
||||
return narrowResponse<PublishedPipelineInfoResponse | null>(
|
||||
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<PublishedPipelineRunPreviewResponse | PublishedPipelineRunResponse>(
|
||||
`/rag/pipelines/${pipelineId}/workflows/published/run`,
|
||||
{
|
||||
return narrowResponse<PublishedPipelineRunPreviewResponse | PublishedPipelineRunResponse>(
|
||||
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<PipelinePreProcessingParamsResponse>({
|
||||
queryKey: [NAME_SPACE, 'draft-pipeline-pre-processing-params', pipeline_id, node_id],
|
||||
queryFn: () => {
|
||||
return get<PipelinePreProcessingParamsResponse>(
|
||||
`/rag/pipelines/${pipeline_id}/workflows/draft/pre-processing/parameters`,
|
||||
{
|
||||
params: {
|
||||
return narrowResponse<PipelinePreProcessingParamsResponse>(
|
||||
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<PipelinePreProcessingParamsResponse>({
|
||||
queryKey: [NAME_SPACE, 'published-pipeline-pre-processing-params', pipeline_id, node_id],
|
||||
queryFn: () => {
|
||||
return get<PipelinePreProcessingParamsResponse>(
|
||||
`/rag/pipelines/${pipeline_id}/workflows/published/pre-processing/parameters`,
|
||||
{
|
||||
params: {
|
||||
return narrowResponse<PipelinePreProcessingParamsResponse>(
|
||||
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<ExportTemplateDSLResponse>(
|
||||
`/rag/pipelines/${pipelineId}/exports?include_secret=${include}`,
|
||||
return narrowResponse<ExportTemplateDSLResponse>(
|
||||
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<PipelineExecutionLogResponse>({
|
||||
queryKey: [NAME_SPACE, 'pipeline-execution-log', dataset_id, document_id],
|
||||
queryFn: () => {
|
||||
return get<PipelineExecutionLogResponse>(
|
||||
`/datasets/${dataset_id}/documents/${document_id}/pipeline-execution-log`,
|
||||
return narrowResponse<PipelineExecutionLogResponse>(
|
||||
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<OnlineDocumentPreviewResponse>(
|
||||
`/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<OnlineDocumentPreviewResponse>(
|
||||
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<ConversionResponse>(`/rag/pipelines/transform/datasets/${datasetId}`)
|
||||
return narrowResponse<ConversionResponse>(
|
||||
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<DatasourceNodeSingleRunResponse>(
|
||||
`/rag/pipelines/${pipelineId}/workflows/draft/datasource/variables-inspect`,
|
||||
{
|
||||
return narrowResponse<DatasourceNodeSingleRunResponse>(
|
||||
consoleClient.rag.pipelines.byPipelineId.workflows.draft.datasource.variablesInspect.post({
|
||||
params: { pipeline_id: pipelineId },
|
||||
body: rest,
|
||||
},
|
||||
}),
|
||||
)
|
||||
},
|
||||
...mutationOptions,
|
||||
|
||||
Reference in New Issue
Block a user