merge: integrate marketplace and design v2 client
This commit is contained in:
@@ -12,11 +12,9 @@ import {
|
||||
designAssetDownloadPath,
|
||||
type DesignAsset,
|
||||
type DesignAssetSaveResult,
|
||||
type DesignConversation,
|
||||
type DesignCommandInput,
|
||||
type DesignCommandResult,
|
||||
type DesignDeleteWorkspaceResult,
|
||||
type DesignGenerationParameters,
|
||||
type DesignGenerationQuote,
|
||||
type DesignGenerationTask,
|
||||
type DesignWorkspace,
|
||||
type DesignWorkspaceBootstrap,
|
||||
} from '../../shared/image-workspace';
|
||||
@@ -49,12 +47,8 @@ function createClientId(prefix: string): string {
|
||||
return `${prefix}-${id}`;
|
||||
}
|
||||
|
||||
export function createImageWorkspaceTurnId(): string {
|
||||
return createClientId('turn');
|
||||
}
|
||||
|
||||
export function createImageWorkspaceConversationId(): string {
|
||||
return createClientId('conversation');
|
||||
export function createImageWorkspaceOperationId(): string {
|
||||
return createClientId('design-operation');
|
||||
}
|
||||
|
||||
function getErrorStatus(error: unknown): number {
|
||||
@@ -105,10 +99,7 @@ export function createImageWorkspaceProject(
|
||||
): Promise<DesignWorkspace> {
|
||||
return requestData(`${IMAGE_WORKSPACE_API_PATH}/workspaces`, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({
|
||||
clientWorkspaceId,
|
||||
title: title.trim(),
|
||||
}),
|
||||
body: JSON.stringify({ clientWorkspaceId, title: title.trim() }),
|
||||
});
|
||||
}
|
||||
|
||||
@@ -118,10 +109,7 @@ export function renameImageWorkspaceProject(
|
||||
): Promise<DesignWorkspace> {
|
||||
return requestData(
|
||||
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}`,
|
||||
{
|
||||
method: 'PATCH',
|
||||
body: JSON.stringify({ title: title.trim() }),
|
||||
},
|
||||
{ method: 'PATCH', body: JSON.stringify({ title: title.trim() }) },
|
||||
);
|
||||
}
|
||||
|
||||
@@ -140,115 +128,26 @@ export function fetchImageWorkspaceProject(workspaceId: string): Promise<DesignW
|
||||
);
|
||||
}
|
||||
|
||||
export function createImageWorkspaceConversation(
|
||||
workspaceId: string,
|
||||
title = '新会话',
|
||||
clientConversationId = createImageWorkspaceConversationId(),
|
||||
): Promise<DesignConversation> {
|
||||
export function submitImageWorkspaceCommand(
|
||||
command: DesignCommandInput,
|
||||
): Promise<DesignCommandResult> {
|
||||
const { workspaceId, ...body } = command;
|
||||
return requestData(
|
||||
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}/conversations`,
|
||||
{
|
||||
method: 'POST',
|
||||
body: JSON.stringify({
|
||||
clientConversationId,
|
||||
title: title.trim(),
|
||||
}),
|
||||
},
|
||||
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}/commands`,
|
||||
{ method: 'POST', body: JSON.stringify(body) },
|
||||
);
|
||||
}
|
||||
|
||||
export function fetchImageWorkspaceConversation(
|
||||
export async function openImageWorkspaceEvents(
|
||||
workspaceId: string,
|
||||
conversationId: string,
|
||||
before?: string,
|
||||
): Promise<DesignConversation> {
|
||||
const query = before ? `?before=${encodeURIComponent(before)}` : '';
|
||||
return requestData(
|
||||
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}/conversations/${encodeURIComponent(conversationId)}${query}`,
|
||||
);
|
||||
}
|
||||
|
||||
export function sendImageWorkspaceMessage(
|
||||
workspaceId: string,
|
||||
conversationId: string,
|
||||
expectedTurnRevision: number,
|
||||
message: string,
|
||||
clientTurnId = createImageWorkspaceTurnId(),
|
||||
attachmentAssetIds: string[] = [],
|
||||
): Promise<DesignConversation> {
|
||||
return requestData(
|
||||
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}/conversations/${encodeURIComponent(conversationId)}/messages`,
|
||||
{
|
||||
method: 'POST',
|
||||
body: JSON.stringify({
|
||||
clientTurnId,
|
||||
expectedTurnRevision,
|
||||
message: message.trim(),
|
||||
attachmentAssetIds,
|
||||
}),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
export function confirmImageWorkspaceGeneration(
|
||||
workspaceId: string,
|
||||
conversationId: string,
|
||||
expectedTurnRevision: number,
|
||||
quoteId: string,
|
||||
clientTurnId = createImageWorkspaceTurnId(),
|
||||
finalPrompt?: string,
|
||||
generationParameters?: DesignGenerationParameters,
|
||||
): Promise<DesignConversation> {
|
||||
return requestData(
|
||||
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}/conversations/${encodeURIComponent(conversationId)}/quotes/${encodeURIComponent(quoteId)}/confirm`,
|
||||
{
|
||||
method: 'POST',
|
||||
body: JSON.stringify({
|
||||
clientTurnId,
|
||||
expectedTurnRevision,
|
||||
...(finalPrompt === undefined ? {} : { finalPrompt }),
|
||||
...(generationParameters === undefined ? {} : { generationParameters }),
|
||||
}),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
export function updateImageWorkspaceGenerationQuote(
|
||||
workspaceId: string,
|
||||
quoteId: string,
|
||||
finalPrompt: string,
|
||||
generationParameters: DesignGenerationParameters,
|
||||
): Promise<DesignGenerationQuote> {
|
||||
return requestData(
|
||||
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}/generation-quotes/${encodeURIComponent(quoteId)}`,
|
||||
{
|
||||
method: 'PATCH',
|
||||
body: JSON.stringify({
|
||||
finalPrompt,
|
||||
model: generationParameters.model,
|
||||
resolution: generationParameters.resolution,
|
||||
aspectRatio: generationParameters.aspectRatio,
|
||||
durationSeconds: generationParameters.durationSeconds,
|
||||
}),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
export function fetchImageWorkspaceTasks(
|
||||
workspaceId: string,
|
||||
): Promise<DesignGenerationTask[]> {
|
||||
return requestData(
|
||||
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}/tasks`,
|
||||
);
|
||||
}
|
||||
|
||||
export async function openImageWorkspaceTaskEvents(
|
||||
workspaceId: string,
|
||||
conversationId: string,
|
||||
sessionId: string,
|
||||
afterEventId?: string,
|
||||
): Promise<EventSource> {
|
||||
await ensureHostApiToken();
|
||||
const query = new URLSearchParams({ sessionId });
|
||||
if (afterEventId) query.set('afterEventId', afterEventId);
|
||||
return createHostEventSource(
|
||||
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}/conversations/${encodeURIComponent(conversationId)}/events`,
|
||||
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}/events?${query}`,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -289,11 +188,7 @@ export function saveImageWorkspaceAsset(asset: DesignAsset): Promise<DesignAsset
|
||||
);
|
||||
}
|
||||
|
||||
const DESIGN_IMAGE_UPLOAD_MIME_TYPES = new Set([
|
||||
'image/jpeg',
|
||||
'image/png',
|
||||
'image/webp',
|
||||
]);
|
||||
const DESIGN_IMAGE_UPLOAD_MIME_TYPES = new Set(['image/jpeg', 'image/png', 'image/webp']);
|
||||
const MAX_DESIGN_IMAGE_UPLOAD_BYTES = 10 * 1024 * 1024;
|
||||
|
||||
async function fileToBase64(file: File): Promise<string> {
|
||||
|
||||
Reference in New Issue
Block a user