diff options
author | Hailey <me@haileyok.com> | 2024-07-03 18:15:08 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-04 02:15:08 +0100 |
commit | aa7117edb60711a67464f7559118334185f01680 (patch) | |
tree | b0ccd3d7ef0d792613542a1af48c3fbae1f36f21 /src/lib/link-meta | |
parent | a3d4fb652b888ba81aecbf0e81a954968ea65d39 (diff) | |
download | voidsky-aa7117edb60711a67464f7559118334185f01680.tar.zst |
Add starter pack embeds to posts (#4699)
* starter pack embeds * revert test code * Types * add `BaseLink` * precache on click * rm log * add a comment * loading state * top margin --------- Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
Diffstat (limited to 'src/lib/link-meta')
-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, + }, + }, + } +} |