diff --git a/src/platform/workflow/sharing/composables/useSharedWorkflowUrlLoader.test.ts b/src/platform/workflow/sharing/composables/useSharedWorkflowUrlLoader.test.ts index ebaff54b6c..67e75af908 100644 --- a/src/platform/workflow/sharing/composables/useSharedWorkflowUrlLoader.test.ts +++ b/src/platform/workflow/sharing/composables/useSharedWorkflowUrlLoader.test.ts @@ -244,7 +244,7 @@ describe('useSharedWorkflowUrlLoader', () => { const { loadSharedWorkflowFromUrl } = useSharedWorkflowUrlLoader() await loadSharedWorkflowFromUrl() - expect(mockImportPublishedAssets).toHaveBeenCalledWith(['a1']) + expect(mockImportPublishedAssets).toHaveBeenCalledWith(['a1'], 'share-id-1') }) it('does not call import when user chooses open-only', async () => { @@ -348,7 +348,7 @@ describe('useSharedWorkflowUrlLoader', () => { const { loadSharedWorkflowFromUrl } = useSharedWorkflowUrlLoader() await loadSharedWorkflowFromUrl() - expect(mockImportPublishedAssets).toHaveBeenCalledWith(['a1']) + expect(mockImportPublishedAssets).toHaveBeenCalledWith(['a1'], 'share-id-1') }) it('restores preserved share query before loading', async () => { diff --git a/src/platform/workflow/sharing/composables/useSharedWorkflowUrlLoader.ts b/src/platform/workflow/sharing/composables/useSharedWorkflowUrlLoader.ts index f840cf4a9b..e7acdb13b1 100644 --- a/src/platform/workflow/sharing/composables/useSharedWorkflowUrlLoader.ts +++ b/src/platform/workflow/sharing/composables/useSharedWorkflowUrlLoader.ts @@ -161,7 +161,8 @@ export function useSharedWorkflowUrlLoader() { if (result.action === 'copy-and-open' && nonOwnedAssets.length > 0) { try { await workflowShareService.importPublishedAssets( - nonOwnedAssets.map((a) => a.id) + nonOwnedAssets.map((a) => a.id), + payload.shareId ) } catch (importError) { console.error( diff --git a/src/platform/workflow/sharing/services/workflowShareService.test.ts b/src/platform/workflow/sharing/services/workflowShareService.test.ts index 67371d78fb..98a2f3ff6a 100644 --- a/src/platform/workflow/sharing/services/workflowShareService.test.ts +++ b/src/platform/workflow/sharing/services/workflowShareService.test.ts @@ -334,16 +334,45 @@ describe(useWorkflowShareService, () => { ) }) - it('imports published assets via POST /assets/import', async () => { + it('imports published assets via POST /assets/import with share_id', async () => { mockFetchApi.mockResolvedValue(mockJsonResponse({}, true, 200)) const service = useWorkflowShareService() - await service.importPublishedAssets(['pa-1', 'pa-2']) + await service.importPublishedAssets(['pa-1', 'pa-2'], 'share-id-1') expect(mockFetchApi).toHaveBeenCalledWith('/assets/import', { method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ published_asset_ids: ['pa-1', 'pa-2'] }) + body: JSON.stringify({ + published_asset_ids: ['pa-1', 'pa-2'], + share_id: 'share-id-1' + }) + }) + }) + + it('omits share_id from the payload when not provided', async () => { + mockFetchApi.mockResolvedValue(mockJsonResponse({}, true, 200)) + + const service = useWorkflowShareService() + await service.importPublishedAssets(['pa-1']) + + expect(mockFetchApi).toHaveBeenCalledWith('/assets/import', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ published_asset_ids: ['pa-1'] }) + }) + }) + + it('omits share_id from the payload when shareId is an empty string', async () => { + mockFetchApi.mockResolvedValue(mockJsonResponse({}, true, 200)) + + const service = useWorkflowShareService() + await service.importPublishedAssets(['pa-1'], '') + + expect(mockFetchApi).toHaveBeenCalledWith('/assets/import', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ published_asset_ids: ['pa-1'] }) }) }) @@ -352,9 +381,9 @@ describe(useWorkflowShareService, () => { const service = useWorkflowShareService() - await expect(service.importPublishedAssets(['bad-id'])).rejects.toThrow( - 'Failed to import assets: 400' - ) + await expect( + service.importPublishedAssets(['bad-id'], 'share-id-1') + ).rejects.toThrow('Failed to import assets: 400') }) it('throws when shared workflow payload is invalid', async () => { diff --git a/src/platform/workflow/sharing/services/workflowShareService.ts b/src/platform/workflow/sharing/services/workflowShareService.ts index 284a860e19..f0cb9d81af 100644 --- a/src/platform/workflow/sharing/services/workflowShareService.ts +++ b/src/platform/workflow/sharing/services/workflowShareService.ts @@ -1,3 +1,5 @@ +import type { ImportPublishedAssetsRequest } from '@comfyorg/ingest-types' + import type { PublishPrefill, SharedWorkflowPayload, @@ -255,11 +257,19 @@ export function useWorkflowShareService() { return workflow } - async function importPublishedAssets(assetIds: string[]): Promise { + async function importPublishedAssets( + assetIds: string[], + shareId?: string + ): Promise { + const body: ImportPublishedAssetsRequest = { + published_asset_ids: assetIds, + ...(shareId ? { share_id: shareId } : {}) + } + const response = await api.fetchApi('/assets/import', { method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ published_asset_ids: assetIds }) + body: JSON.stringify(body) }) if (!response.ok) {