diff options
Diffstat (limited to 'src/lib/link-meta/bsky.ts')
-rw-r--r-- | src/lib/link-meta/bsky.ts | 51 |
1 files changed, 46 insertions, 5 deletions
diff --git a/src/lib/link-meta/bsky.ts b/src/lib/link-meta/bsky.ts index c1fbb34b3..e3b4ea0c9 100644 --- a/src/lib/link-meta/bsky.ts +++ b/src/lib/link-meta/bsky.ts @@ -1,11 +1,16 @@ -import {AppBskyFeedPost, BskyAgent} from '@atproto/api' +import {AppBskyFeedPost, AppBskyGraphStarterpack, BskyAgent} from '@atproto/api' + +import {useFetchDid} from '#/state/queries/handle' +import {useGetPost} from '#/state/queries/post' import * as apilib from 'lib/api/index' -import {LikelyType, LinkMeta} from './link-meta' +import { + createStarterPackUri, + parseStarterPackUri, +} from 'lib/strings/starter-pack' +import {ComposerOptsQuote} from 'state/shell/composer' // import {match as matchRoute} from 'view/routes' import {convertBskyAppUrlIfNeeded, makeRecordUri} from '../strings/url-helpers' -import {ComposerOptsQuote} from 'state/shell/composer' -import {useGetPost} from '#/state/queries/post' -import {useFetchDid} from '#/state/queries/handle' +import {LikelyType, LinkMeta} from './link-meta' // TODO // import {Home} from 'view/screens/Home' @@ -174,3 +179,39 @@ export async function getListAsEmbed( }, } } + +export async function getStarterPackAsEmbed( + agent: BskyAgent, + fetchDid: ReturnType<typeof useFetchDid>, + url: string, +): Promise<apilib.ExternalEmbedDraft> { + const parsed = parseStarterPackUri(url) + if (!parsed) { + throw new Error( + 'Unexepectedly called getStarterPackAsEmbed with a non-starterpack url', + ) + } + const did = await fetchDid(parsed.name) + const starterPack = createStarterPackUri({did, rkey: parsed.rkey}) + const res = await agent.app.bsky.graph.getStarterPack({starterPack}) + const record = res.data.starterPack.record + return { + isLoading: false, + uri: starterPack, + meta: { + url: starterPack, + likelyType: LikelyType.AtpData, + // Validation here should never fail + title: AppBskyGraphStarterpack.isRecord(record) + ? record.name + : 'Starter Pack', + }, + embed: { + $type: 'app.bsky.embed.record', + record: { + uri: res.data.starterPack.uri, + cid: res.data.starterPack.cid, + }, + }, + } +} |