1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
import {
AppBskyGraphFollow,
AppBskyGraphGetFollows,
BskyAgent,
} from '@atproto/api'
import {until} from '#/lib/async/until'
export async function bulkWriteFollows(agent: BskyAgent, dids: string[]) {
const session = agent.session
if (!session) {
throw new Error(`bulkWriteFollows failed: no session`)
}
const followRecords: AppBskyGraphFollow.Record[] = dids.map(did => {
return {
$type: 'app.bsky.graph.follow',
subject: did,
createdAt: new Date().toISOString(),
}
})
const followWrites = followRecords.map(r => ({
$type: 'com.atproto.repo.applyWrites#create',
collection: 'app.bsky.graph.follow',
value: r,
}))
await agent.com.atproto.repo.applyWrites({
repo: session.did,
writes: followWrites,
})
await whenFollowsIndexed(agent, session.did, res => !!res.data.follows.length)
}
async function whenFollowsIndexed(
agent: BskyAgent,
actor: string,
fn: (res: AppBskyGraphGetFollows.Response) => boolean,
) {
await until(
5, // 5 tries
1e3, // 1s delay between tries
fn,
() =>
agent.app.bsky.graph.getFollows({
actor,
limit: 1,
}),
)
}
|