From e1df2aadeecf974df1ca76af428be57208051d1b Mon Sep 17 00:00:00 2001 From: SocksTheWolf <132639882+SocksTheWolf@users.noreply.github.com> Date: Thu, 20 Aug 2026 16:13:16 -0700 Subject: [PATCH] kill invalid mentions to stop posts from being stuck --- src/utils/bsky/bskyApi.ts | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/utils/bsky/bskyApi.ts b/src/utils/bsky/bskyApi.ts index 3c539f5..ce59bc4 100644 --- a/src/utils/bsky/bskyApi.ts +++ b/src/utils/bsky/bskyApi.ts @@ -2,9 +2,9 @@ import type { $Typed, AppBskyEmbedExternal, AppBskyEmbedGallery, AppBskyEmbedImages, AppBskyEmbedRecord, AppBskyEmbedVideo, - AppBskyFeedPost, BlobRef + AppBskyFeedPost, BlobRef, Facet, } from "@atproto/api"; -import { RichText } from "@atproto/api"; +import { AppBskyRichtextFacet, RichText } from "@atproto/api"; import { ResponseType, XRPCError } from "@atproto/xrpc"; import { imageDimensionsFromStream } from "image-dimensions"; import isEmpty from "just-is-empty"; @@ -128,6 +128,26 @@ export const makeRepost = async (_: AllContext, content: Repost, usingAgent: AtP } }; +const removeInvalidFacets = (inFacets?: Facet[]) => { + if (inFacets === undefined) { + return undefined; + } + const savedFacets: Facet[] = []; + for (const facet of inFacets) { + // mmmmmmm N^2 to fix the dumbest bug. + const facetsFeature: unknown[] = []; + for (const feature of facet.features) { + if (AppBskyRichtextFacet.isMention(feature) && !AppBskyRichtextFacet.validateMention(feature).success) { + continue; + } + facetsFeature.push(feature); + } + if (facetsFeature.length > 0) + savedFacets.push(facet); + } + return savedFacets; +} + const makePostRaw = async (c: AllContext, content: Post, agent: AtProtoAgent): Promise => { const username = await getUsernameForUserId(c, content.userId); // incredibly unlikely but we'll handle it @@ -147,7 +167,7 @@ const makePostRaw = async (c: AllContext, content: Post, agent: AtProtoAgent): P const postRecord: AppBskyFeedPost.Record = { $type: "app.bsky.feed.post", text: rt.text, - facets: rt.facets, + facets: removeInvalidFacets(rt.facets), createdAt: new Date().toISOString(), }; if (postData.contentLabel !== PostLabel.None) { -- 2.51.2