@atproto/bsky 0.0.75 → 0.0.76

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/api/app/bsky/actor/getProfiles.d.ts.map +1 -1
  3. package/dist/api/app/bsky/actor/getProfiles.js +9 -1
  4. package/dist/api/app/bsky/actor/getProfiles.js.map +1 -1
  5. package/dist/api/app/bsky/actor/searchActorsTypeahead.js +10 -2
  6. package/dist/api/app/bsky/actor/searchActorsTypeahead.js.map +1 -1
  7. package/dist/api/app/bsky/feed/getFeed.d.ts.map +1 -1
  8. package/dist/api/app/bsky/feed/getFeed.js +8 -1
  9. package/dist/api/app/bsky/feed/getFeed.js.map +1 -1
  10. package/dist/api/app/bsky/feed/getPosts.d.ts.map +1 -1
  11. package/dist/api/app/bsky/feed/getPosts.js +8 -1
  12. package/dist/api/app/bsky/feed/getPosts.js.map +1 -1
  13. package/dist/api/app/bsky/graph/getList.d.ts.map +1 -1
  14. package/dist/api/app/bsky/graph/getList.js +32 -2
  15. package/dist/api/app/bsky/graph/getList.js.map +1 -1
  16. package/dist/auth-verifier.d.ts +8 -3
  17. package/dist/auth-verifier.d.ts.map +1 -1
  18. package/dist/auth-verifier.js +43 -29
  19. package/dist/auth-verifier.js.map +1 -1
  20. package/dist/hydration/hydrator.d.ts +1 -0
  21. package/dist/hydration/hydrator.d.ts.map +1 -1
  22. package/dist/hydration/hydrator.js +15 -6
  23. package/dist/hydration/hydrator.js.map +1 -1
  24. package/package.json +4 -4
  25. package/src/api/app/bsky/actor/getProfiles.ts +10 -1
  26. package/src/api/app/bsky/actor/searchActorsTypeahead.ts +9 -4
  27. package/src/api/app/bsky/feed/getFeed.ts +12 -1
  28. package/src/api/app/bsky/feed/getPosts.ts +9 -1
  29. package/src/api/app/bsky/graph/getList.ts +47 -4
  30. package/src/auth-verifier.ts +78 -51
  31. package/src/hydration/hydrator.ts +18 -2
  32. package/tests/admin/admin-auth.test.ts +15 -8
  33. package/tests/auth.test.ts +2 -1
  34. package/tests/data-plane/handle-invalidation.test.ts +31 -5
  35. package/tests/data-plane/indexing.test.ts +138 -23
  36. package/tests/data-plane/thread-mutes.test.ts +41 -9
  37. package/tests/feed-generation.test.ts +150 -32
  38. package/tests/server.test.ts +1 -1
  39. package/tests/views/__snapshots__/lists.test.ts.snap +145 -26
  40. package/tests/views/__snapshots__/starter-packs.test.ts.snap +245 -4
  41. package/tests/views/account-deactivation.test.ts +8 -2
  42. package/tests/views/actor-likes.test.ts +27 -6
  43. package/tests/views/actor-search.test.ts +5 -1
  44. package/tests/views/author-feed.test.ts +73 -12
  45. package/tests/views/block-lists.test.ts +201 -40
  46. package/tests/views/blocks.test.ts +245 -46
  47. package/tests/views/follows.test.ts +133 -22
  48. package/tests/views/known-followers.test.ts +43 -7
  49. package/tests/views/labeler-service.test.ts +36 -6
  50. package/tests/views/likes.test.ts +8 -5
  51. package/tests/views/list-feed.test.ts +25 -4
  52. package/tests/views/lists.test.ts +73 -31
  53. package/tests/views/mute-lists.test.ts +101 -29
  54. package/tests/views/mutes.test.ts +77 -17
  55. package/tests/views/notifications.test.ts +141 -25
  56. package/tests/views/posts.test.ts +13 -2
  57. package/tests/views/profile.test.ts +37 -11
  58. package/tests/views/reposts.test.ts +31 -5
  59. package/tests/views/starter-packs.test.ts +83 -3
  60. package/tests/views/suggested-follows.test.ts +31 -5
  61. package/tests/views/suggestions.test.ts +37 -6
  62. package/tests/views/thread.test.ts +121 -20
  63. package/tests/views/threadgating.test.ts +128 -22
  64. package/tests/views/timeline.test.ts +67 -14
@@ -2,6 +2,7 @@ import assert from 'assert'
2
2
  import { TestNetwork, RecordRef, SeedClient, basicSeed } from '@atproto/dev-env'
3
3
  import { AtpAgent, AtUri } from '@atproto/api'
4
4
  import { assertIsThreadViewPost, forSnapshot } from '../_util'
5
+ import { ids } from '../../src/lexicon/lexicons'
5
6
 
6
7
  describe('pds views with blocking', () => {
7
8
  let network: TestNetwork
@@ -68,7 +69,12 @@ describe('pds views with blocking', () => {
68
69
  it('blocks thread post', async () => {
69
70
  const { data: threadAlice } = await agent.api.app.bsky.feed.getPostThread(
70
71
  { depth: 1, uri: sc.posts[carol][0].ref.uriStr },
71
- { headers: await network.serviceHeaders(dan) },
72
+ {
73
+ headers: await network.serviceHeaders(
74
+ dan,
75
+ ids.AppBskyFeedGetPostThread,
76
+ ),
77
+ },
72
78
  )
73
79
  expect(threadAlice).toEqual({
74
80
  thread: {
@@ -86,7 +92,12 @@ describe('pds views with blocking', () => {
86
92
  })
87
93
  const { data: threadCarol } = await agent.api.app.bsky.feed.getPostThread(
88
94
  { depth: 1, uri: sc.posts[dan][0].ref.uriStr },
89
- { headers: await network.serviceHeaders(carol) },
95
+ {
96
+ headers: await network.serviceHeaders(
97
+ carol,
98
+ ids.AppBskyFeedGetPostThread,
99
+ ),
100
+ },
90
101
  )
91
102
  expect(threadCarol).toEqual({
92
103
  thread: {
@@ -107,7 +118,12 @@ describe('pds views with blocking', () => {
107
118
  // Contains reply by carol
108
119
  const { data: thread } = await agent.api.app.bsky.feed.getPostThread(
109
120
  { depth: 1, uri: sc.posts[alice][1].ref.uriStr },
110
- { headers: await network.serviceHeaders(dan) },
121
+ {
122
+ headers: await network.serviceHeaders(
123
+ dan,
124
+ ids.AppBskyFeedGetPostThread,
125
+ ),
126
+ },
111
127
  )
112
128
  expect(forSnapshot(thread)).toMatchSnapshot()
113
129
  })
@@ -115,7 +131,12 @@ describe('pds views with blocking', () => {
115
131
  it('loads blocked reply as anchor with blocked parent', async () => {
116
132
  const { data: thread } = await agent.api.app.bsky.feed.getPostThread(
117
133
  { depth: 1, uri: carolReplyToDan.ref.uriStr },
118
- { headers: await network.serviceHeaders(alice) },
134
+ {
135
+ headers: await network.serviceHeaders(
136
+ alice,
137
+ ids.AppBskyFeedGetPostThread,
138
+ ),
139
+ },
119
140
  )
120
141
 
121
142
  assertIsThreadViewPost(thread.thread)
@@ -131,7 +152,12 @@ describe('pds views with blocking', () => {
131
152
  // Parent is a post by dan
132
153
  const { data: thread } = await agent.api.app.bsky.feed.getPostThread(
133
154
  { depth: 1, uri: aliceReplyToDan.ref.uriStr },
134
- { headers: await network.serviceHeaders(carol) },
155
+ {
156
+ headers: await network.serviceHeaders(
157
+ carol,
158
+ ids.AppBskyFeedGetPostThread,
159
+ ),
160
+ },
135
161
  )
136
162
  expect(forSnapshot(thread)).toMatchSnapshot()
137
163
  })
@@ -140,7 +166,12 @@ describe('pds views with blocking', () => {
140
166
  // Contains a deep embed of carol's post, blocked by dan
141
167
  const { data: thread } = await agent.api.app.bsky.feed.getPostThread(
142
168
  { depth: 0, uri: sc.posts[alice][2].ref.uriStr },
143
- { headers: await network.serviceHeaders(dan) },
169
+ {
170
+ headers: await network.serviceHeaders(
171
+ dan,
172
+ ids.AppBskyFeedGetPostThread,
173
+ ),
174
+ },
144
175
  )
145
176
  expect(forSnapshot(thread)).toMatchSnapshot()
146
177
  })
@@ -148,7 +179,12 @@ describe('pds views with blocking', () => {
148
179
  it('errors on getting author feed', async () => {
149
180
  const attempt1 = agent.api.app.bsky.feed.getAuthorFeed(
150
181
  { actor: carol },
151
- { headers: await network.serviceHeaders(dan) },
182
+ {
183
+ headers: await network.serviceHeaders(
184
+ dan,
185
+ ids.AppBskyFeedGetAuthorFeed,
186
+ ),
187
+ },
152
188
  )
153
189
  await expect(attempt1).rejects.toMatchObject({
154
190
  error: 'BlockedActor',
@@ -156,7 +192,12 @@ describe('pds views with blocking', () => {
156
192
 
157
193
  const attempt2 = agent.api.app.bsky.feed.getAuthorFeed(
158
194
  { actor: dan },
159
- { headers: await network.serviceHeaders(carol) },
195
+ {
196
+ headers: await network.serviceHeaders(
197
+ carol,
198
+ ids.AppBskyFeedGetAuthorFeed,
199
+ ),
200
+ },
160
201
  )
161
202
  await expect(attempt2).rejects.toMatchObject({
162
203
  error: 'BlockedByActor',
@@ -166,7 +207,12 @@ describe('pds views with blocking', () => {
166
207
  it('strips blocked users out of getTimeline', async () => {
167
208
  const resCarol = await agent.api.app.bsky.feed.getTimeline(
168
209
  { limit: 100 },
169
- { headers: await network.serviceHeaders(carol) },
210
+ {
211
+ headers: await network.serviceHeaders(
212
+ carol,
213
+ ids.AppBskyFeedGetTimeline,
214
+ ),
215
+ },
170
216
  )
171
217
 
172
218
  // dan's posts don't appear, nor alice's reply to dan, nor carol's reply to alice (which was a reply to dan)
@@ -181,7 +227,9 @@ describe('pds views with blocking', () => {
181
227
 
182
228
  const resDan = await agent.api.app.bsky.feed.getTimeline(
183
229
  { limit: 100 },
184
- { headers: await network.serviceHeaders(dan) },
230
+ {
231
+ headers: await network.serviceHeaders(dan, ids.AppBskyFeedGetTimeline),
232
+ },
185
233
  )
186
234
  expect(
187
235
  resDan.data.feed.some(
@@ -201,7 +249,12 @@ describe('pds views with blocking', () => {
201
249
 
202
250
  const resCarol = await agent.api.app.bsky.feed.getListFeed(
203
251
  { list: listRef.uriStr, limit: 100 },
204
- { headers: await network.serviceHeaders(carol) },
252
+ {
253
+ headers: await network.serviceHeaders(
254
+ carol,
255
+ ids.AppBskyFeedGetListFeed,
256
+ ),
257
+ },
205
258
  )
206
259
  expect(
207
260
  resCarol.data.feed.some((post) => post.post.author.did === dan),
@@ -209,7 +262,9 @@ describe('pds views with blocking', () => {
209
262
 
210
263
  const resDan = await agent.api.app.bsky.feed.getListFeed(
211
264
  { list: listRef.uriStr, limit: 100 },
212
- { headers: await network.serviceHeaders(dan) },
265
+ {
266
+ headers: await network.serviceHeaders(dan, ids.AppBskyFeedGetListFeed),
267
+ },
213
268
  )
214
269
  expect(
215
270
  resDan.data.feed.some((post) => post.post.author.did === carol),
@@ -219,14 +274,21 @@ describe('pds views with blocking', () => {
219
274
  it('returns block status on getProfile', async () => {
220
275
  const resCarol = await agent.api.app.bsky.actor.getProfile(
221
276
  { actor: dan },
222
- { headers: await network.serviceHeaders(carol) },
277
+ {
278
+ headers: await network.serviceHeaders(
279
+ carol,
280
+ ids.AppBskyActorGetProfile,
281
+ ),
282
+ },
223
283
  )
224
284
  expect(resCarol.data.viewer?.blocking).toBeUndefined()
225
285
  expect(resCarol.data.viewer?.blockedBy).toBe(true)
226
286
 
227
287
  const resDan = await agent.api.app.bsky.actor.getProfile(
228
288
  { actor: carol },
229
- { headers: await network.serviceHeaders(dan) },
289
+ {
290
+ headers: await network.serviceHeaders(dan, ids.AppBskyActorGetProfile),
291
+ },
230
292
  )
231
293
  expect(resDan.data.viewer?.blocking).toBeDefined()
232
294
  expect(resDan.data.viewer?.blockedBy).toBe(false)
@@ -236,13 +298,15 @@ describe('pds views with blocking', () => {
236
298
  // there are follows between carol and dan
237
299
  const { data: profile } = await agent.api.app.bsky.actor.getProfile(
238
300
  { actor: carol },
239
- { headers: await network.serviceHeaders(dan) },
301
+ {
302
+ headers: await network.serviceHeaders(dan, ids.AppBskyActorGetProfile),
303
+ },
240
304
  )
241
305
  expect(profile.viewer?.following).toBeUndefined()
242
306
  expect(profile.viewer?.followedBy).toBeUndefined()
243
307
  const { data: result } = await agent.api.app.bsky.graph.getBlocks(
244
308
  {},
245
- { headers: await network.serviceHeaders(dan) },
309
+ { headers: await network.serviceHeaders(dan, ids.AppBskyGraphGetBlocks) },
246
310
  )
247
311
  const blocked = result.blocks.find((block) => block.did === carol)
248
312
  expect(blocked).toBeDefined()
@@ -253,7 +317,12 @@ describe('pds views with blocking', () => {
253
317
  it('returns block status on getProfiles', async () => {
254
318
  const resCarol = await agent.api.app.bsky.actor.getProfiles(
255
319
  { actors: [alice, dan] },
256
- { headers: await network.serviceHeaders(carol) },
320
+ {
321
+ headers: await network.serviceHeaders(
322
+ carol,
323
+ ids.AppBskyActorGetProfiles,
324
+ ),
325
+ },
257
326
  )
258
327
  expect(resCarol.data.profiles[0].viewer?.blocking).toBeUndefined()
259
328
  expect(resCarol.data.profiles[0].viewer?.blockingByList).toBeUndefined()
@@ -264,7 +333,9 @@ describe('pds views with blocking', () => {
264
333
 
265
334
  const resDan = await agent.api.app.bsky.actor.getProfiles(
266
335
  { actors: [alice, carol] },
267
- { headers: await network.serviceHeaders(dan) },
336
+ {
337
+ headers: await network.serviceHeaders(dan, ids.AppBskyActorGetProfiles),
338
+ },
268
339
  )
269
340
  expect(resDan.data.profiles[0].viewer?.blocking).toBeUndefined()
270
341
  expect(resDan.data.profiles[0].viewer?.blockingByList).toBeUndefined()
@@ -277,13 +348,23 @@ describe('pds views with blocking', () => {
277
348
  it('does not return block violating follows', async () => {
278
349
  const resCarol = await agent.api.app.bsky.graph.getFollows(
279
350
  { actor: carol },
280
- { headers: await network.serviceHeaders(alice) },
351
+ {
352
+ headers: await network.serviceHeaders(
353
+ alice,
354
+ ids.AppBskyGraphGetFollows,
355
+ ),
356
+ },
281
357
  )
282
358
  expect(resCarol.data.follows.some((f) => f.did === dan)).toBe(false)
283
359
 
284
360
  const resDan = await agent.api.app.bsky.graph.getFollows(
285
361
  { actor: dan },
286
- { headers: await network.serviceHeaders(alice) },
362
+ {
363
+ headers: await network.serviceHeaders(
364
+ alice,
365
+ ids.AppBskyGraphGetFollows,
366
+ ),
367
+ },
287
368
  )
288
369
  expect(resDan.data.follows.some((f) => f.did === carol)).toBe(false)
289
370
  })
@@ -291,13 +372,23 @@ describe('pds views with blocking', () => {
291
372
  it('does not return block violating followers', async () => {
292
373
  const resCarol = await agent.api.app.bsky.graph.getFollowers(
293
374
  { actor: carol },
294
- { headers: await network.serviceHeaders(alice) },
375
+ {
376
+ headers: await network.serviceHeaders(
377
+ alice,
378
+ ids.AppBskyGraphGetFollowers,
379
+ ),
380
+ },
295
381
  )
296
382
  expect(resCarol.data.followers.some((f) => f.did === dan)).toBe(false)
297
383
 
298
384
  const resDan = await agent.api.app.bsky.graph.getFollowers(
299
385
  { actor: dan },
300
- { headers: await network.serviceHeaders(alice) },
386
+ {
387
+ headers: await network.serviceHeaders(
388
+ alice,
389
+ ids.AppBskyGraphGetFollowers,
390
+ ),
391
+ },
301
392
  )
302
393
  expect(resDan.data.followers.some((f) => f.did === carol)).toBe(false)
303
394
  })
@@ -309,7 +400,7 @@ describe('pds views with blocking', () => {
309
400
 
310
401
  const resCarol = await agent.api.app.bsky.feed.getPosts(
311
402
  { uris: [alicePost, carolPost, danPost] },
312
- { headers: await network.serviceHeaders(carol) },
403
+ { headers: await network.serviceHeaders(carol, ids.AppBskyFeedGetPosts) },
313
404
  )
314
405
  expect(resCarol.data.posts.some((p) => p.uri === alicePost)).toBe(true)
315
406
  expect(resCarol.data.posts.some((p) => p.uri === carolPost)).toBe(true)
@@ -317,7 +408,7 @@ describe('pds views with blocking', () => {
317
408
 
318
409
  const resDan = await agent.api.app.bsky.feed.getPosts(
319
410
  { uris: [alicePost, carolPost, danPost] },
320
- { headers: await network.serviceHeaders(dan) },
411
+ { headers: await network.serviceHeaders(dan, ids.AppBskyFeedGetPosts) },
321
412
  )
322
413
  expect(resDan.data.posts.some((p) => p.uri === alicePost)).toBe(true)
323
414
  expect(resDan.data.posts.some((p) => p.uri === carolPost)).toBe(false)
@@ -329,7 +420,12 @@ describe('pds views with blocking', () => {
329
420
  {
330
421
  limit: 100,
331
422
  },
332
- { headers: await network.serviceHeaders(carol) },
423
+ {
424
+ headers: await network.serviceHeaders(
425
+ carol,
426
+ ids.AppBskyNotificationListNotifications,
427
+ ),
428
+ },
333
429
  )
334
430
  expect(
335
431
  resCarol.data.notifications.some((notif) => notif.author.did === dan),
@@ -339,7 +435,12 @@ describe('pds views with blocking', () => {
339
435
  {
340
436
  limit: 100,
341
437
  },
342
- { headers: await network.serviceHeaders(dan) },
438
+ {
439
+ headers: await network.serviceHeaders(
440
+ dan,
441
+ ids.AppBskyNotificationListNotifications,
442
+ ),
443
+ },
343
444
  )
344
445
  expect(
345
446
  resDan.data.notifications.some((notif) => notif.author.did === carol),
@@ -351,7 +452,12 @@ describe('pds views with blocking', () => {
351
452
  {
352
453
  term: 'dan.test',
353
454
  },
354
- { headers: await network.serviceHeaders(carol) },
455
+ {
456
+ headers: await network.serviceHeaders(
457
+ carol,
458
+ ids.AppBskyActorSearchActors,
459
+ ),
460
+ },
355
461
  )
356
462
  expect(resCarol.data.actors.some((actor) => actor.did === dan)).toBeFalsy()
357
463
 
@@ -359,7 +465,12 @@ describe('pds views with blocking', () => {
359
465
  {
360
466
  term: 'carol.test',
361
467
  },
362
- { headers: await network.serviceHeaders(dan) },
468
+ {
469
+ headers: await network.serviceHeaders(
470
+ dan,
471
+ ids.AppBskyActorSearchActors,
472
+ ),
473
+ },
363
474
  )
364
475
  expect(resDan.data.actors.some((actor) => actor.did === carol)).toBeFalsy()
365
476
  })
@@ -367,21 +478,59 @@ describe('pds views with blocking', () => {
367
478
  it('does not return blocked accounts in actor search typeahead', async () => {
368
479
  const resCarol = await agent.api.app.bsky.actor.searchActorsTypeahead(
369
480
  {
370
- term: 'dan.test',
481
+ term: 'dan.tes',
482
+ },
483
+ {
484
+ headers: await network.serviceHeaders(
485
+ carol,
486
+ ids.AppBskyActorSearchActorsTypeahead,
487
+ ),
371
488
  },
372
- { headers: await network.serviceHeaders(carol) },
373
489
  )
374
490
  expect(resCarol.data.actors.some((actor) => actor.did === dan)).toBeFalsy()
375
491
 
376
492
  const resDan = await agent.api.app.bsky.actor.searchActorsTypeahead(
377
493
  {
378
- term: 'carol.test',
494
+ term: 'carol.tes',
495
+ },
496
+ {
497
+ headers: await network.serviceHeaders(
498
+ dan,
499
+ ids.AppBskyActorSearchActorsTypeahead,
500
+ ),
379
501
  },
380
- { headers: await network.serviceHeaders(dan) },
381
502
  )
382
503
  expect(resDan.data.actors.some((actor) => actor.did === carol)).toBeFalsy()
383
504
  })
384
505
 
506
+ it('does return blocked accounts in actor search typeahead when term is exact handle', async () => {
507
+ const resCarol = await agent.api.app.bsky.actor.searchActorsTypeahead(
508
+ {
509
+ term: 'dan.test',
510
+ },
511
+ {
512
+ headers: await network.serviceHeaders(
513
+ carol,
514
+ ids.AppBskyActorSearchActorsTypeahead,
515
+ ),
516
+ },
517
+ )
518
+ expect(resCarol.data.actors.some((actor) => actor.did === dan)).toBeTruthy()
519
+
520
+ const resDan = await agent.api.app.bsky.actor.searchActorsTypeahead(
521
+ {
522
+ term: 'carol.test',
523
+ },
524
+ {
525
+ headers: await network.serviceHeaders(
526
+ dan,
527
+ ids.AppBskyActorSearchActorsTypeahead,
528
+ ),
529
+ },
530
+ )
531
+ expect(resDan.data.actors.some((actor) => actor.did === carol)).toBeTruthy()
532
+ })
533
+
385
534
  it('does not return blocked accounts in get suggestions', async () => {
386
535
  // unfollow so they _would_ show up in suggestions if not for block
387
536
  await sc.unfollow(carol, dan)
@@ -392,7 +541,12 @@ describe('pds views with blocking', () => {
392
541
  {
393
542
  limit: 100,
394
543
  },
395
- { headers: await network.serviceHeaders(carol) },
544
+ {
545
+ headers: await network.serviceHeaders(
546
+ carol,
547
+ ids.AppBskyActorGetSuggestions,
548
+ ),
549
+ },
396
550
  )
397
551
  expect(resCarol.data.actors.some((actor) => actor.did === dan)).toBeFalsy()
398
552
 
@@ -400,7 +554,12 @@ describe('pds views with blocking', () => {
400
554
  {
401
555
  limit: 100,
402
556
  },
403
- { headers: await network.serviceHeaders(dan) },
557
+ {
558
+ headers: await network.serviceHeaders(
559
+ dan,
560
+ ids.AppBskyActorGetSuggestions,
561
+ ),
562
+ },
404
563
  )
405
564
  expect(resDan.data.actors.some((actor) => actor.did === carol)).toBeFalsy()
406
565
  })
@@ -411,7 +570,12 @@ describe('pds views with blocking', () => {
411
570
  const { data: replyThenBlock } =
412
571
  await agent.api.app.bsky.feed.getPostThread(
413
572
  { depth: 1, uri: sc.posts[dan][0].ref.uriStr },
414
- { headers: await network.serviceHeaders(alice) },
573
+ {
574
+ headers: await network.serviceHeaders(
575
+ alice,
576
+ ids.AppBskyFeedGetPostThread,
577
+ ),
578
+ },
415
579
  )
416
580
  assertIsThreadViewPost(replyThenBlock.thread)
417
581
 
@@ -427,7 +591,12 @@ describe('pds views with blocking', () => {
427
591
  await network.processAll()
428
592
  const { data: unblock } = await agent.api.app.bsky.feed.getPostThread(
429
593
  { depth: 1, uri: sc.posts[dan][0].ref.uriStr },
430
- { headers: await network.serviceHeaders(alice) },
594
+ {
595
+ headers: await network.serviceHeaders(
596
+ alice,
597
+ ids.AppBskyFeedGetPostThread,
598
+ ),
599
+ },
431
600
  )
432
601
 
433
602
  assertIsThreadViewPost(unblock.thread)
@@ -452,7 +621,12 @@ describe('pds views with blocking', () => {
452
621
  const { data: blockThenReply } =
453
622
  await agent.api.app.bsky.feed.getPostThread(
454
623
  { depth: 1, uri: sc.posts[dan][0].ref.uriStr },
455
- { headers: await network.serviceHeaders(alice) },
624
+ {
625
+ headers: await network.serviceHeaders(
626
+ alice,
627
+ ids.AppBskyFeedGetPostThread,
628
+ ),
629
+ },
456
630
  )
457
631
 
458
632
  assertIsThreadViewPost(blockThenReply.thread)
@@ -474,7 +648,12 @@ describe('pds views with blocking', () => {
474
648
  const { data: embedThenBlock } =
475
649
  await agent.api.app.bsky.feed.getPostThread(
476
650
  { depth: 0, uri: sc.posts[dan][1].ref.uriStr },
477
- { headers: await network.serviceHeaders(alice) },
651
+ {
652
+ headers: await network.serviceHeaders(
653
+ alice,
654
+ ids.AppBskyFeedGetPostThread,
655
+ ),
656
+ },
478
657
  )
479
658
 
480
659
  assertIsThreadViewPost(embedThenBlock.thread)
@@ -491,7 +670,12 @@ describe('pds views with blocking', () => {
491
670
  await network.processAll()
492
671
  const { data: unblock } = await agent.api.app.bsky.feed.getPostThread(
493
672
  { depth: 0, uri: sc.posts[dan][1].ref.uriStr },
494
- { headers: await network.serviceHeaders(alice) },
673
+ {
674
+ headers: await network.serviceHeaders(
675
+ alice,
676
+ ids.AppBskyFeedGetPostThread,
677
+ ),
678
+ },
495
679
  )
496
680
 
497
681
  assertIsThreadViewPost(unblock.thread)
@@ -517,7 +701,12 @@ describe('pds views with blocking', () => {
517
701
  const { data: blockThenEmbed } =
518
702
  await agent.api.app.bsky.feed.getPostThread(
519
703
  { depth: 0, uri: carolEmbedsDan.ref.uriStr },
520
- { headers: await network.serviceHeaders(alice) },
704
+ {
705
+ headers: await network.serviceHeaders(
706
+ alice,
707
+ ids.AppBskyFeedGetPostThread,
708
+ ),
709
+ },
521
710
  )
522
711
  assertIsThreadViewPost(blockThenEmbed.thread)
523
712
 
@@ -540,7 +729,12 @@ describe('pds views with blocking', () => {
540
729
  const embedBlockedUri = sc.posts[dan][1].ref.uriStr
541
730
  const { data: timeline } = await agent.api.app.bsky.feed.getTimeline(
542
731
  { limit: 100 },
543
- { headers: await network.serviceHeaders(alice) },
732
+ {
733
+ headers: await network.serviceHeaders(
734
+ alice,
735
+ ids.AppBskyFeedGetTimeline,
736
+ ),
737
+ },
544
738
  )
545
739
  const replyBlockedPost = timeline.feed.find(
546
740
  (item) => item.post.uri === replyBlockedUri,
@@ -575,7 +769,7 @@ describe('pds views with blocking', () => {
575
769
 
576
770
  const res = await agent.api.app.bsky.graph.getBlocks(
577
771
  {},
578
- { headers: await network.serviceHeaders(dan) },
772
+ { headers: await network.serviceHeaders(dan, ids.AppBskyGraphGetBlocks) },
579
773
  )
580
774
  const dids = res.data.blocks.map((block) => block.did).sort()
581
775
  expect(dids).toEqual([alice, carol].sort())
@@ -584,15 +778,15 @@ describe('pds views with blocking', () => {
584
778
  it('paginates getBlocks', async () => {
585
779
  const full = await agent.api.app.bsky.graph.getBlocks(
586
780
  {},
587
- { headers: await network.serviceHeaders(dan) },
781
+ { headers: await network.serviceHeaders(dan, ids.AppBskyGraphGetBlocks) },
588
782
  )
589
783
  const first = await agent.api.app.bsky.graph.getBlocks(
590
784
  { limit: 1 },
591
- { headers: await network.serviceHeaders(dan) },
785
+ { headers: await network.serviceHeaders(dan, ids.AppBskyGraphGetBlocks) },
592
786
  )
593
787
  const second = await agent.api.app.bsky.graph.getBlocks(
594
788
  { cursor: first.data.cursor },
595
- { headers: await network.serviceHeaders(dan) },
789
+ { headers: await network.serviceHeaders(dan, ids.AppBskyGraphGetBlocks) },
596
790
  )
597
791
  const combined = [...first.data.blocks, ...second.data.blocks]
598
792
  expect(combined).toEqual(full.data.blocks)
@@ -601,7 +795,12 @@ describe('pds views with blocking', () => {
601
795
  it('returns knownFollowers with blocks filtered', async () => {
602
796
  const carolForAlice = await agent.api.app.bsky.actor.getProfile(
603
797
  { actor: bob },
604
- { headers: await network.serviceHeaders(alice) },
798
+ {
799
+ headers: await network.serviceHeaders(
800
+ alice,
801
+ ids.AppBskyActorGetProfile,
802
+ ),
803
+ },
605
804
  )
606
805
 
607
806
  const knownFollowers = carolForAlice.data.viewer?.knownFollowers