fix(publish): require submit marker before platform write
Desktop Client Build / Resolve Build Metadata (push) Successful in 20s
Frontend CI / Frontend (push) Successful in 2m57s
Desktop Client Build / Build Desktop Client (push) Successful in 25m11s
Desktop Client Build / Publish Client Artifacts to NAS (push) Successful in 34s
Backend CI / Backend (push) Successful in 50m56s

This commit is contained in:
2026-05-30 22:29:28 +08:00
parent dbd2a1c9f6
commit 8ea4a2ffff
20 changed files with 227 additions and 155 deletions
+8 -8
View File
@@ -58,7 +58,7 @@ export interface JianshuPublishTransport {
| 'save_content'
| 'upload_cover'
| 'publish',
): void
): void | Promise<void>
}
export type JianshuPublishResult =
@@ -394,7 +394,7 @@ export async function publishJianshuArticle(
input: JianshuPublishArticleInput,
transport: JianshuPublishTransport,
): Promise<JianshuPublishResult> {
transport.reportProgress?.('media_info')
await transport.reportProgress?.('media_info')
const media = await fetchJianshuMediaSnapshot(transport.fetchJson)
if (!media?.platformUid) {
return {
@@ -415,7 +415,7 @@ export async function publishJianshuArticle(
}
}
transport.reportProgress?.('fetch_notebook')
await transport.reportProgress?.('fetch_notebook')
const notebookId = await fetchPrimaryNotebookId(transport.fetchJson)
if (!notebookId) {
return {
@@ -426,7 +426,7 @@ export async function publishJianshuArticle(
}
}
transport.reportProgress?.('create_note')
await transport.reportProgress?.('create_note')
const note = await createNote(transport.fetchJson, notebookId, input.title)
if (!note?.id) {
return {
@@ -442,10 +442,10 @@ export async function publishJianshuArticle(
let publishOk = false
try {
transport.reportProgress?.('upload_content_images')
await transport.reportProgress?.('upload_content_images')
const processedContent = await processContentImages(transport, content)
transport.reportProgress?.('save_content')
await transport.reportProgress?.('save_content')
await transport.fetchJson<unknown>(`${JIANSHU_ORIGIN}/author/notes/${noteId}`, {
method: 'PUT',
headers: jianshuJsonHeaders(),
@@ -458,11 +458,11 @@ export async function publishJianshuArticle(
})
if (input.coverAssetUrl?.trim()) {
transport.reportProgress?.('upload_cover')
await transport.reportProgress?.('upload_cover')
await attachCoverImage(transport, noteId, input.coverAssetUrl.trim())
}
transport.reportProgress?.('publish')
await transport.reportProgress?.('publish')
const publicize = await transport
.fetchJson<JianshuPublicizeResponse>(`${JIANSHU_ORIGIN}/author/notes/${noteId}/publicize`, {
method: 'POST',
+7 -5
View File
@@ -61,7 +61,9 @@ export interface ToutiaoPublishTransport {
html: string,
uploader: (sourceUrl: string) => Promise<string | null>,
): Promise<{ html: string; uploaded?: Map<string, string> }>
reportProgress?(stage: 'media_info' | 'upload_content_images' | 'upload_cover' | 'submit'): void
reportProgress?(
stage: 'media_info' | 'upload_content_images' | 'upload_cover' | 'submit',
): void | Promise<void>
}
export type ToutiaoPublishResult =
@@ -236,7 +238,7 @@ export async function publishToutiaoArticle(
input: ToutiaoPublishArticleInput,
transport: ToutiaoPublishTransport,
): Promise<ToutiaoPublishResult> {
transport.reportProgress?.('media_info')
await transport.reportProgress?.('media_info')
const media = await fetchToutiaoMediaSnapshot(transport.fetchJson)
if (!media?.platformUid || !media.screenName) {
return {
@@ -257,7 +259,7 @@ export async function publishToutiaoArticle(
}
}
transport.reportProgress?.('upload_content_images')
await transport.reportProgress?.('upload_content_images')
const processed = await transport.uploadHtmlImages(normalizedHtml, async (sourceUrl) =>
uploadContentImage(transport, sourceUrl),
)
@@ -275,7 +277,7 @@ export async function publishToutiaoArticle(
}
}
transport.reportProgress?.('upload_cover')
await transport.reportProgress?.('upload_cover')
const cover = input.coverAssetUrl?.trim()
? await uploadCover(transport, input.coverAssetUrl.trim(), input.publishType)
: null
@@ -306,7 +308,7 @@ export async function publishToutiaoArticle(
}),
})
transport.reportProgress?.('submit')
await transport.reportProgress?.('submit')
const response: ToutiaoPublishResponse = await transport
.fetchJson<ToutiaoPublishResponse>(
'https://mp.toutiao.com/mp/agw/article/publish?source=mp&type=article&aid=1231',