diff --git a/apps/scheduler/src/activities/publish.activity.ts b/apps/scheduler/src/activities/publish.activity.ts index 3a35e83..27ca8a8 100644 --- a/apps/scheduler/src/activities/publish.activity.ts +++ b/apps/scheduler/src/activities/publish.activity.ts @@ -23,7 +23,20 @@ function connectionOf(job: ClaimedJob): ConnectorConnection { function postOf(job: ClaimedJob): NormalizedPost { const visibility = job.post.visibility; if (!["public", "unlisted", "private", "followers", "provider_default"].includes(visibility)) throw new Error("INVALID_POST_VISIBILITY"); - return { ...job.post, visibility: visibility as NormalizedPost["visibility"] }; + const post = job.post; + // Positional alt texts (aligned with mediaAssetIds at intake) become the + // connector's asset-id → description map; the Mastodon upload reads it. + const providerMetadata: Record = { ...post.providerMetadata }; + const altTexts = post.altTexts; + if (Array.isArray(altTexts) && altTexts.length > 0) { + const altText: Record = {}; + post.mediaAssetIds.forEach((id, index) => { + const text = altTexts[index]; + if (typeof text === "string" && text.trim() !== "") altText[id] = text; + }); + if (Object.keys(altText).length > 0) providerMetadata.altText = altText; + } + return { ...post, visibility: visibility as NormalizedPost["visibility"], providerMetadata }; } /** Persist only documented remote evidence; unknown fields never enter DB/history. */ export function safeMetadata(metadata: Record): Record {