@atproto/bsky 0.0.75 → 0.0.77

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 (268) hide show
  1. package/CHANGELOG.md +18 -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/getActorLikes.js +2 -2
  8. package/dist/api/app/bsky/feed/getActorLikes.js.map +1 -1
  9. package/dist/api/app/bsky/feed/getFeed.d.ts.map +1 -1
  10. package/dist/api/app/bsky/feed/getFeed.js +8 -1
  11. package/dist/api/app/bsky/feed/getFeed.js.map +1 -1
  12. package/dist/api/app/bsky/feed/getLikes.js +6 -6
  13. package/dist/api/app/bsky/feed/getLikes.js.map +1 -1
  14. package/dist/api/app/bsky/feed/getPosts.d.ts.map +1 -1
  15. package/dist/api/app/bsky/feed/getPosts.js +12 -5
  16. package/dist/api/app/bsky/feed/getPosts.js.map +1 -1
  17. package/dist/api/app/bsky/feed/getQuotes.d.ts +4 -0
  18. package/dist/api/app/bsky/feed/getQuotes.d.ts.map +1 -0
  19. package/dist/api/app/bsky/feed/getQuotes.js +67 -0
  20. package/dist/api/app/bsky/feed/getQuotes.js.map +1 -0
  21. package/dist/api/app/bsky/feed/getRepostedBy.js +6 -6
  22. package/dist/api/app/bsky/feed/getRepostedBy.js.map +1 -1
  23. package/dist/api/app/bsky/feed/searchPosts.js +4 -4
  24. package/dist/api/app/bsky/feed/searchPosts.js.map +1 -1
  25. package/dist/api/app/bsky/graph/getFollowers.js +8 -8
  26. package/dist/api/app/bsky/graph/getFollowers.js.map +1 -1
  27. package/dist/api/app/bsky/graph/getList.d.ts.map +1 -1
  28. package/dist/api/app/bsky/graph/getList.js +32 -2
  29. package/dist/api/app/bsky/graph/getList.js.map +1 -1
  30. package/dist/api/app/bsky/notification/listNotifications.d.ts.map +1 -1
  31. package/dist/api/app/bsky/notification/listNotifications.js +29 -8
  32. package/dist/api/app/bsky/notification/listNotifications.js.map +1 -1
  33. package/dist/api/index.d.ts.map +1 -1
  34. package/dist/api/index.js +2 -0
  35. package/dist/api/index.js.map +1 -1
  36. package/dist/auth-verifier.d.ts +8 -3
  37. package/dist/auth-verifier.d.ts.map +1 -1
  38. package/dist/auth-verifier.js +43 -29
  39. package/dist/auth-verifier.js.map +1 -1
  40. package/dist/data-plane/server/db/database-schema.d.ts +4 -2
  41. package/dist/data-plane/server/db/database-schema.d.ts.map +1 -1
  42. package/dist/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.d.ts +4 -0
  43. package/dist/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.d.ts.map +1 -0
  44. package/dist/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.js +15 -0
  45. package/dist/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.js.map +1 -0
  46. package/dist/data-plane/server/db/migrations/20240723T220703655Z-quotes.d.ts +4 -0
  47. package/dist/data-plane/server/db/migrations/20240723T220703655Z-quotes.d.ts.map +1 -0
  48. package/dist/data-plane/server/db/migrations/20240723T220703655Z-quotes.js +30 -0
  49. package/dist/data-plane/server/db/migrations/20240723T220703655Z-quotes.js.map +1 -0
  50. package/dist/data-plane/server/db/migrations/20240801T193939827Z-post-gate.d.ts +4 -0
  51. package/dist/data-plane/server/db/migrations/20240801T193939827Z-post-gate.d.ts.map +1 -0
  52. package/dist/data-plane/server/db/migrations/20240801T193939827Z-post-gate.js +20 -0
  53. package/dist/data-plane/server/db/migrations/20240801T193939827Z-post-gate.js.map +1 -0
  54. package/dist/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.d.ts +4 -0
  55. package/dist/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.d.ts.map +1 -0
  56. package/dist/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.js +28 -0
  57. package/dist/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.js.map +1 -0
  58. package/dist/data-plane/server/db/migrations/index.d.ts +4 -0
  59. package/dist/data-plane/server/db/migrations/index.d.ts.map +1 -1
  60. package/dist/data-plane/server/db/migrations/index.js +5 -1
  61. package/dist/data-plane/server/db/migrations/index.js.map +1 -1
  62. package/dist/data-plane/server/db/tables/post-agg.d.ts +1 -0
  63. package/dist/data-plane/server/db/tables/post-agg.d.ts.map +1 -1
  64. package/dist/data-plane/server/db/tables/post-gate.d.ts +14 -0
  65. package/dist/data-plane/server/db/tables/post-gate.d.ts.map +1 -0
  66. package/dist/data-plane/server/db/tables/post-gate.js +4 -0
  67. package/dist/data-plane/server/db/tables/post-gate.js.map +1 -0
  68. package/dist/data-plane/server/db/tables/post.d.ts +3 -0
  69. package/dist/data-plane/server/db/tables/post.d.ts.map +1 -1
  70. package/dist/data-plane/server/db/tables/quote.d.ts +16 -0
  71. package/dist/data-plane/server/db/tables/quote.d.ts.map +1 -0
  72. package/dist/data-plane/server/db/tables/quote.js +4 -0
  73. package/dist/data-plane/server/db/tables/quote.js.map +1 -0
  74. package/dist/data-plane/server/indexing/index.d.ts +2 -0
  75. package/dist/data-plane/server/indexing/index.d.ts.map +1 -1
  76. package/dist/data-plane/server/indexing/index.js +6 -0
  77. package/dist/data-plane/server/indexing/index.js.map +1 -1
  78. package/dist/data-plane/server/indexing/plugins/post-gate.d.ts +10 -0
  79. package/dist/data-plane/server/indexing/plugins/post-gate.d.ts.map +1 -0
  80. package/dist/data-plane/server/indexing/plugins/post-gate.js +101 -0
  81. package/dist/data-plane/server/indexing/plugins/post-gate.js.map +1 -0
  82. package/dist/data-plane/server/indexing/plugins/post.d.ts +2 -0
  83. package/dist/data-plane/server/indexing/plugins/post.d.ts.map +1 -1
  84. package/dist/data-plane/server/indexing/plugins/post.js +122 -15
  85. package/dist/data-plane/server/indexing/plugins/post.js.map +1 -1
  86. package/dist/data-plane/server/indexing/plugins/thread-gate.d.ts.map +1 -1
  87. package/dist/data-plane/server/indexing/plugins/thread-gate.js +12 -0
  88. package/dist/data-plane/server/indexing/plugins/thread-gate.js.map +1 -1
  89. package/dist/data-plane/server/routes/index.d.ts.map +1 -1
  90. package/dist/data-plane/server/routes/index.js +2 -0
  91. package/dist/data-plane/server/routes/index.js.map +1 -1
  92. package/dist/data-plane/server/routes/interactions.d.ts.map +1 -1
  93. package/dist/data-plane/server/routes/interactions.js +2 -1
  94. package/dist/data-plane/server/routes/interactions.js.map +1 -1
  95. package/dist/data-plane/server/routes/quotes.d.ts +6 -0
  96. package/dist/data-plane/server/routes/quotes.d.ts.map +1 -0
  97. package/dist/data-plane/server/routes/quotes.js +27 -0
  98. package/dist/data-plane/server/routes/quotes.js.map +1 -0
  99. package/dist/data-plane/server/routes/records.d.ts.map +1 -1
  100. package/dist/data-plane/server/routes/records.js +11 -1
  101. package/dist/data-plane/server/routes/records.js.map +1 -1
  102. package/dist/data-plane/server/util.d.ts +6 -7
  103. package/dist/data-plane/server/util.d.ts.map +1 -1
  104. package/dist/data-plane/server/util.js +1 -9
  105. package/dist/data-plane/server/util.js.map +1 -1
  106. package/dist/hydration/feed.d.ts +10 -0
  107. package/dist/hydration/feed.d.ts.map +1 -1
  108. package/dist/hydration/feed.js +31 -7
  109. package/dist/hydration/feed.js.map +1 -1
  110. package/dist/hydration/hydrator.d.ts +5 -2
  111. package/dist/hydration/hydrator.d.ts.map +1 -1
  112. package/dist/hydration/hydrator.js +102 -38
  113. package/dist/hydration/hydrator.js.map +1 -1
  114. package/dist/hydration/util.d.ts +0 -1
  115. package/dist/hydration/util.d.ts.map +1 -1
  116. package/dist/hydration/util.js +1 -5
  117. package/dist/hydration/util.js.map +1 -1
  118. package/dist/lexicon/index.d.ts +2 -0
  119. package/dist/lexicon/index.d.ts.map +1 -1
  120. package/dist/lexicon/index.js +4 -0
  121. package/dist/lexicon/index.js.map +1 -1
  122. package/dist/lexicon/lexicons.d.ts +141 -0
  123. package/dist/lexicon/lexicons.d.ts.map +1 -1
  124. package/dist/lexicon/lexicons.js +142 -0
  125. package/dist/lexicon/lexicons.js.map +1 -1
  126. package/dist/lexicon/types/app/bsky/embed/record.d.ts +8 -1
  127. package/dist/lexicon/types/app/bsky/embed/record.d.ts.map +1 -1
  128. package/dist/lexicon/types/app/bsky/embed/record.js +11 -1
  129. package/dist/lexicon/types/app/bsky/embed/record.js.map +1 -1
  130. package/dist/lexicon/types/app/bsky/feed/defs.d.ts +2 -0
  131. package/dist/lexicon/types/app/bsky/feed/defs.d.ts.map +1 -1
  132. package/dist/lexicon/types/app/bsky/feed/defs.js.map +1 -1
  133. package/dist/lexicon/types/app/bsky/feed/getQuotes.d.ts +44 -0
  134. package/dist/lexicon/types/app/bsky/feed/getQuotes.d.ts.map +1 -0
  135. package/dist/lexicon/types/app/bsky/feed/getQuotes.js +3 -0
  136. package/dist/lexicon/types/app/bsky/feed/getQuotes.js.map +1 -0
  137. package/dist/lexicon/types/app/bsky/feed/postgate.d.ts +25 -0
  138. package/dist/lexicon/types/app/bsky/feed/postgate.d.ts.map +1 -0
  139. package/dist/lexicon/types/app/bsky/feed/postgate.js +27 -0
  140. package/dist/lexicon/types/app/bsky/feed/postgate.js.map +1 -0
  141. package/dist/lexicon/types/app/bsky/feed/threadgate.d.ts +2 -0
  142. package/dist/lexicon/types/app/bsky/feed/threadgate.d.ts.map +1 -1
  143. package/dist/lexicon/types/app/bsky/feed/threadgate.js.map +1 -1
  144. package/dist/proto/bsky_connect.d.ts +21 -1
  145. package/dist/proto/bsky_connect.d.ts.map +1 -1
  146. package/dist/proto/bsky_connect.js +20 -0
  147. package/dist/proto/bsky_connect.js.map +1 -1
  148. package/dist/proto/bsky_pb.d.ts +96 -0
  149. package/dist/proto/bsky_pb.d.ts.map +1 -1
  150. package/dist/proto/bsky_pb.js +306 -4
  151. package/dist/proto/bsky_pb.js.map +1 -1
  152. package/dist/util/uris.d.ts +12 -0
  153. package/dist/util/uris.d.ts.map +1 -0
  154. package/dist/util/uris.js +34 -0
  155. package/dist/util/uris.js.map +1 -0
  156. package/dist/views/index.d.ts +8 -2
  157. package/dist/views/index.d.ts.map +1 -1
  158. package/dist/views/index.js +83 -39
  159. package/dist/views/index.js.map +1 -1
  160. package/dist/views/types.d.ts +1 -1
  161. package/dist/views/types.d.ts.map +1 -1
  162. package/dist/views/types.js.map +1 -1
  163. package/dist/views/util.d.ts +11 -1
  164. package/dist/views/util.d.ts.map +1 -1
  165. package/dist/views/util.js +19 -8
  166. package/dist/views/util.js.map +1 -1
  167. package/package.json +6 -6
  168. package/proto/bsky.proto +33 -0
  169. package/src/api/app/bsky/actor/getProfiles.ts +10 -1
  170. package/src/api/app/bsky/actor/searchActorsTypeahead.ts +9 -4
  171. package/src/api/app/bsky/feed/getActorLikes.ts +1 -1
  172. package/src/api/app/bsky/feed/getFeed.ts +12 -1
  173. package/src/api/app/bsky/feed/getLikes.ts +1 -1
  174. package/src/api/app/bsky/feed/getPosts.ts +10 -2
  175. package/src/api/app/bsky/feed/getQuotes.ts +105 -0
  176. package/src/api/app/bsky/feed/getRepostedBy.ts +1 -1
  177. package/src/api/app/bsky/feed/searchPosts.ts +1 -1
  178. package/src/api/app/bsky/graph/getFollowers.ts +1 -1
  179. package/src/api/app/bsky/graph/getList.ts +47 -4
  180. package/src/api/app/bsky/notification/listNotifications.ts +32 -6
  181. package/src/api/index.ts +2 -0
  182. package/src/auth-verifier.ts +78 -51
  183. package/src/data-plane/server/db/database-schema.ts +7 -3
  184. package/src/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.ts +12 -0
  185. package/src/data-plane/server/db/migrations/20240723T220703655Z-quotes.ts +28 -0
  186. package/src/data-plane/server/db/migrations/20240801T193939827Z-post-gate.ts +17 -0
  187. package/src/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.ts +25 -0
  188. package/src/data-plane/server/db/migrations/index.ts +4 -0
  189. package/src/data-plane/server/db/tables/post-agg.ts +1 -0
  190. package/src/data-plane/server/db/tables/post-gate.ts +12 -0
  191. package/src/data-plane/server/db/tables/post.ts +3 -0
  192. package/src/data-plane/server/db/tables/quote.ts +15 -0
  193. package/src/data-plane/server/indexing/index.ts +7 -0
  194. package/src/data-plane/server/indexing/plugins/post-gate.ts +104 -0
  195. package/src/data-plane/server/indexing/plugins/post.ts +151 -16
  196. package/src/data-plane/server/indexing/plugins/thread-gate.ts +12 -0
  197. package/src/data-plane/server/routes/index.ts +2 -0
  198. package/src/data-plane/server/routes/interactions.ts +2 -1
  199. package/src/data-plane/server/routes/quotes.ts +32 -0
  200. package/src/data-plane/server/routes/records.ts +11 -1
  201. package/src/data-plane/server/util.ts +0 -8
  202. package/src/hydration/feed.ts +58 -12
  203. package/src/hydration/hydrator.ts +112 -24
  204. package/src/hydration/util.ts +0 -4
  205. package/src/lexicon/index.ts +12 -0
  206. package/src/lexicon/lexicons.ts +145 -0
  207. package/src/lexicon/types/app/bsky/embed/record.ts +19 -0
  208. package/src/lexicon/types/app/bsky/feed/defs.ts +2 -0
  209. package/src/lexicon/types/app/bsky/feed/getQuotes.ts +54 -0
  210. package/src/lexicon/types/app/bsky/feed/postgate.ts +47 -0
  211. package/src/lexicon/types/app/bsky/feed/threadgate.ts +2 -0
  212. package/src/proto/bsky_connect.ts +24 -0
  213. package/src/proto/bsky_pb.ts +289 -0
  214. package/src/util/uris.ts +31 -0
  215. package/src/views/index.ts +90 -35
  216. package/src/views/types.ts +1 -0
  217. package/src/views/util.ts +37 -7
  218. package/tests/__snapshots__/feed-generation.test.ts.snap +37 -0
  219. package/tests/admin/admin-auth.test.ts +15 -8
  220. package/tests/auth.test.ts +2 -1
  221. package/tests/data-plane/__snapshots__/indexing.test.ts.snap +18 -0
  222. package/tests/data-plane/handle-invalidation.test.ts +31 -5
  223. package/tests/data-plane/indexing.test.ts +139 -23
  224. package/tests/data-plane/thread-mutes.test.ts +41 -9
  225. package/tests/feed-generation.test.ts +150 -32
  226. package/tests/postgates.test.ts +186 -0
  227. package/tests/seed/feed-hidden-replies.ts +62 -0
  228. package/tests/seed/postgates.ts +56 -0
  229. package/tests/server.test.ts +1 -1
  230. package/tests/views/__snapshots__/author-feed.test.ts.snap +56 -0
  231. package/tests/views/__snapshots__/block-lists.test.ts.snap +6 -0
  232. package/tests/views/__snapshots__/blocks.test.ts.snap +10 -0
  233. package/tests/views/__snapshots__/list-feed.test.ts.snap +22 -0
  234. package/tests/views/__snapshots__/lists.test.ts.snap +145 -26
  235. package/tests/views/__snapshots__/mute-lists.test.ts.snap +8 -0
  236. package/tests/views/__snapshots__/mutes.test.ts.snap +6 -0
  237. package/tests/views/__snapshots__/posts.test.ts.snap +12 -0
  238. package/tests/views/__snapshots__/quotes.test.ts.snap +399 -0
  239. package/tests/views/__snapshots__/starter-packs.test.ts.snap +245 -4
  240. package/tests/views/__snapshots__/thread.test.ts.snap +50 -0
  241. package/tests/views/__snapshots__/timeline.test.ts.snap +170 -0
  242. package/tests/views/account-deactivation.test.ts +8 -2
  243. package/tests/views/actor-likes.test.ts +27 -6
  244. package/tests/views/actor-search.test.ts +5 -1
  245. package/tests/views/author-feed.test.ts +76 -21
  246. package/tests/views/block-lists.test.ts +201 -40
  247. package/tests/views/blocks.test.ts +245 -46
  248. package/tests/views/feed-hidden-replies.test.ts +246 -0
  249. package/tests/views/feed-view-post.test.ts +501 -0
  250. package/tests/views/follows.test.ts +133 -22
  251. package/tests/views/known-followers.test.ts +43 -7
  252. package/tests/views/labeler-service.test.ts +36 -6
  253. package/tests/views/likes.test.ts +8 -5
  254. package/tests/views/list-feed.test.ts +25 -4
  255. package/tests/views/lists.test.ts +73 -31
  256. package/tests/views/mute-lists.test.ts +101 -29
  257. package/tests/views/mutes.test.ts +77 -17
  258. package/tests/views/notifications.test.ts +141 -25
  259. package/tests/views/posts.test.ts +13 -2
  260. package/tests/views/profile.test.ts +37 -11
  261. package/tests/views/quotes.test.ts +105 -0
  262. package/tests/views/reposts.test.ts +31 -5
  263. package/tests/views/starter-packs.test.ts +83 -3
  264. package/tests/views/suggested-follows.test.ts +31 -5
  265. package/tests/views/suggestions.test.ts +37 -6
  266. package/tests/views/thread.test.ts +121 -20
  267. package/tests/views/threadgating.test.ts +128 -22
  268. package/tests/views/timeline.test.ts +67 -14
@@ -1,8 +1,9 @@
1
1
  import { AtpAgent } from '@atproto/api'
2
- import { TestNetwork, SeedClient, basicSeed, RecordRef } from '@atproto/dev-env'
2
+ import { TestNetwork, SeedClient, RecordRef, basicSeed } from '@atproto/dev-env'
3
3
  import { isRecord as isProfile } from '../../src/lexicon/types/app/bsky/actor/profile'
4
4
  import { forSnapshot } from '../_util'
5
5
  import assert from 'assert'
6
+ import { ids } from '../../src/lexicon/lexicons'
6
7
 
7
8
  describe('starter packs', () => {
8
9
  let network: TestNetwork
@@ -10,6 +11,7 @@ describe('starter packs', () => {
10
11
  let sc: SeedClient
11
12
  let sp1: RecordRef
12
13
  let sp2: RecordRef
14
+ let sp3: RecordRef
13
15
 
14
16
  beforeAll(async () => {
15
17
  network = await TestNetwork.create({
@@ -47,6 +49,25 @@ describe('starter packs', () => {
47
49
  })
48
50
  await sc.createProfile(did, `Newskie ${n}`, 'New here', [], sp1)
49
51
  }
52
+
53
+ await sc.createAccount('frankie', {
54
+ handle: 'frankie.test',
55
+ email: 'frankie@frankie.com',
56
+ password: 'password',
57
+ })
58
+ await sc.createAccount('greta', {
59
+ handle: 'greta.test',
60
+ email: 'greta@greta.com',
61
+ password: 'password',
62
+ })
63
+ sp3 = await sc.createStarterPack(
64
+ sc.dids.alice,
65
+ "alice's about to get blocked starter pack",
66
+ [sc.dids.alice, sc.dids.frankie, sc.dids.greta],
67
+ [],
68
+ )
69
+ await sc.block(sc.dids.frankie, sc.dids.alice)
70
+
50
71
  await network.processAll()
51
72
  })
52
73
 
@@ -58,7 +79,7 @@ describe('starter packs', () => {
58
79
  const { data } = await agent.api.app.bsky.graph.getActorStarterPacks({
59
80
  actor: sc.dids.alice,
60
81
  })
61
- expect(data.starterPacks).toHaveLength(2)
82
+ expect(data.starterPacks).toHaveLength(3)
62
83
  expect(forSnapshot(data.starterPacks)).toMatchSnapshot()
63
84
  })
64
85
 
@@ -106,7 +127,12 @@ describe('starter packs', () => {
106
127
  data: { notifications },
107
128
  } = await agent.api.app.bsky.notification.listNotifications(
108
129
  { limit: 3 }, // three most recent
109
- { headers: await network.serviceHeaders(sc.dids.alice) },
130
+ {
131
+ headers: await network.serviceHeaders(
132
+ sc.dids.alice,
133
+ ids.AppBskyNotificationListNotifications,
134
+ ),
135
+ },
110
136
  )
111
137
  expect(notifications).toHaveLength(3)
112
138
  notifications.forEach((notif) => {
@@ -118,4 +144,58 @@ describe('starter packs', () => {
118
144
  })
119
145
  expect(forSnapshot(notifications)).toMatchSnapshot()
120
146
  })
147
+
148
+ it('does not include users with creator block relationship in list sample for non-creator, in-list viewers', async () => {
149
+ const view = await agent.api.app.bsky.graph.getStarterPack(
150
+ {
151
+ starterPack: sp3.uriStr,
152
+ },
153
+ {
154
+ headers: await network.serviceHeaders(
155
+ sc.dids.frankie,
156
+ ids.AppBskyGraphGetStarterPack,
157
+ ),
158
+ },
159
+ )
160
+ expect(view.data.starterPack.listItemsSample?.length).toBe(2)
161
+ expect(forSnapshot(view.data.starterPack.listItemsSample)).toMatchSnapshot()
162
+ })
163
+
164
+ it('does not include users with creator block relationship in list sample for non-creator, not-in-list viewers', async () => {
165
+ const view = await agent.api.app.bsky.graph.getStarterPack(
166
+ {
167
+ starterPack: sp3.uriStr,
168
+ },
169
+ {
170
+ headers: await network.serviceHeaders(
171
+ sc.dids.bob,
172
+ ids.AppBskyGraphGetStarterPack,
173
+ ),
174
+ },
175
+ )
176
+ expect(view.data.starterPack.listItemsSample?.length).toBe(2)
177
+ expect(forSnapshot(view.data.starterPack.listItemsSample)).toMatchSnapshot()
178
+ })
179
+
180
+ it('does not include users with creator block relationship in list sample for signed-out viewers', async () => {
181
+ const view = await agent.api.app.bsky.graph.getStarterPack({
182
+ starterPack: sp3.uriStr,
183
+ })
184
+ expect(view.data.starterPack.listItemsSample?.length).toBe(2)
185
+ expect(forSnapshot(view.data.starterPack.listItemsSample)).toMatchSnapshot()
186
+ })
187
+
188
+ it('does include users with creator block relationship in list sample for creator', async () => {
189
+ const view = await agent.api.app.bsky.graph.getStarterPack(
190
+ { starterPack: sp3.uriStr },
191
+ {
192
+ headers: await network.serviceHeaders(
193
+ sc.dids.alice,
194
+ ids.AppBskyGraphGetStarterPack,
195
+ ),
196
+ },
197
+ )
198
+ expect(view.data.starterPack.listItemsSample?.length).toBe(3)
199
+ expect(forSnapshot(view.data.starterPack.listItemsSample)).toMatchSnapshot()
200
+ })
121
201
  })
@@ -1,5 +1,6 @@
1
1
  import { AtpAgent, AtUri } from '@atproto/api'
2
2
  import { TestNetwork, SeedClient, likesSeed } from '@atproto/dev-env'
3
+ import { ids } from '../../src/lexicon/lexicons'
3
4
 
4
5
  describe('suggested follows', () => {
5
6
  let network: TestNetwork
@@ -40,7 +41,12 @@ describe('suggested follows', () => {
40
41
  {
41
42
  actor: sc.dids.alice,
42
43
  },
43
- { headers: await network.serviceHeaders(sc.dids.carol) },
44
+ {
45
+ headers: await network.serviceHeaders(
46
+ sc.dids.carol,
47
+ ids.AppBskyGraphGetSuggestedFollowsByActor,
48
+ ),
49
+ },
44
50
  )
45
51
 
46
52
  expect(result.data.suggestions.length).toBe(4) // backfilled with 2 NPCs
@@ -56,7 +62,12 @@ describe('suggested follows', () => {
56
62
  {
57
63
  actor: sc.dids.alice,
58
64
  },
59
- { headers: await network.serviceHeaders(sc.dids.fred) },
65
+ {
66
+ headers: await network.serviceHeaders(
67
+ sc.dids.fred,
68
+ ids.AppBskyGraphGetSuggestedFollowsByActor,
69
+ ),
70
+ },
60
71
  )
61
72
 
62
73
  expect(result.data.suggestions.length).toBe(4) // backfilled with 2 NPCs
@@ -76,7 +87,12 @@ describe('suggested follows', () => {
76
87
  {
77
88
  actor: sc.dids.alice,
78
89
  },
79
- { headers: await network.serviceHeaders(sc.dids.carol) },
90
+ {
91
+ headers: await network.serviceHeaders(
92
+ sc.dids.carol,
93
+ ids.AppBskyGraphGetSuggestedFollowsByActor,
94
+ ),
95
+ },
80
96
  )
81
97
 
82
98
  expect(
@@ -101,7 +117,12 @@ describe('suggested follows', () => {
101
117
  {
102
118
  actor: sc.dids.alice,
103
119
  },
104
- { headers: await network.serviceHeaders(sc.dids.carol) },
120
+ {
121
+ headers: await network.serviceHeaders(
122
+ sc.dids.carol,
123
+ ids.AppBskyGraphGetSuggestedFollowsByActor,
124
+ ),
125
+ },
105
126
  )
106
127
 
107
128
  expect(
@@ -126,7 +147,12 @@ describe('suggested follows', () => {
126
147
  {
127
148
  actor: sc.dids.alice,
128
149
  },
129
- { headers: await network.serviceHeaders(sc.dids.carol) },
150
+ {
151
+ headers: await network.serviceHeaders(
152
+ sc.dids.carol,
153
+ ids.AppBskyGraphGetSuggestedFollowsByActor,
154
+ ),
155
+ },
130
156
  )
131
157
 
132
158
  expect(
@@ -1,6 +1,7 @@
1
1
  import { AtpAgent } from '@atproto/api'
2
2
  import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env'
3
3
  import { stripViewer } from '../_util'
4
+ import { ids } from '../../src/lexicon/lexicons'
4
5
 
5
6
  describe('pds user search views', () => {
6
7
  let network: TestNetwork
@@ -36,7 +37,12 @@ describe('pds user search views', () => {
36
37
  it('actor suggestion gives users', async () => {
37
38
  const result = await agent.api.app.bsky.actor.getSuggestions(
38
39
  {},
39
- { headers: await network.serviceHeaders(sc.dids.carol) },
40
+ {
41
+ headers: await network.serviceHeaders(
42
+ sc.dids.carol,
43
+ ids.AppBskyActorGetSuggestions,
44
+ ),
45
+ },
40
46
  )
41
47
 
42
48
  // does not include carol, because she is requesting
@@ -50,7 +56,12 @@ describe('pds user search views', () => {
50
56
  it('does not suggest followed users', async () => {
51
57
  const result = await agent.api.app.bsky.actor.getSuggestions(
52
58
  {},
53
- { headers: await network.serviceHeaders(sc.dids.alice) },
59
+ {
60
+ headers: await network.serviceHeaders(
61
+ sc.dids.alice,
62
+ ids.AppBskyActorGetSuggestions,
63
+ ),
64
+ },
54
65
  )
55
66
 
56
67
  // alice follows everyone
@@ -60,21 +71,36 @@ describe('pds user search views', () => {
60
71
  it('paginates', async () => {
61
72
  const result1 = await agent.api.app.bsky.actor.getSuggestions(
62
73
  { limit: 2 },
63
- { headers: await network.serviceHeaders(sc.dids.carol) },
74
+ {
75
+ headers: await network.serviceHeaders(
76
+ sc.dids.carol,
77
+ ids.AppBskyActorGetSuggestions,
78
+ ),
79
+ },
64
80
  )
65
81
  expect(result1.data.actors.length).toBe(1)
66
82
  expect(result1.data.actors[0].handle).toEqual('bob.test')
67
83
 
68
84
  const result2 = await agent.api.app.bsky.actor.getSuggestions(
69
85
  { limit: 2, cursor: result1.data.cursor },
70
- { headers: await network.serviceHeaders(sc.dids.carol) },
86
+ {
87
+ headers: await network.serviceHeaders(
88
+ sc.dids.carol,
89
+ ids.AppBskyActorGetSuggestions,
90
+ ),
91
+ },
71
92
  )
72
93
  expect(result2.data.actors.length).toBe(1)
73
94
  expect(result2.data.actors[0].handle).toEqual('dan.test')
74
95
 
75
96
  const result3 = await agent.api.app.bsky.actor.getSuggestions(
76
97
  { limit: 2, cursor: result2.data.cursor },
77
- { headers: await network.serviceHeaders(sc.dids.carol) },
98
+ {
99
+ headers: await network.serviceHeaders(
100
+ sc.dids.carol,
101
+ ids.AppBskyActorGetSuggestions,
102
+ ),
103
+ },
78
104
  )
79
105
  expect(result3.data.actors.length).toBe(0)
80
106
  expect(result3.data.cursor).toBeUndefined()
@@ -83,7 +109,12 @@ describe('pds user search views', () => {
83
109
  it('fetches suggestions unauthed', async () => {
84
110
  const { data: authed } = await agent.api.app.bsky.actor.getSuggestions(
85
111
  {},
86
- { headers: await network.serviceHeaders(sc.dids.carol) },
112
+ {
113
+ headers: await network.serviceHeaders(
114
+ sc.dids.carol,
115
+ ids.AppBskyActorGetSuggestions,
116
+ ),
117
+ },
87
118
  )
88
119
  const { data: unauthed } = await agent.api.app.bsky.actor.getSuggestions({})
89
120
  const omitViewerFollows = ({ did }) => {
@@ -5,6 +5,7 @@ import {
5
5
  forSnapshot,
6
6
  stripViewerFromThread,
7
7
  } from '../_util'
8
+ import { ids } from '../../src/lexicon/lexicons'
8
9
 
9
10
  describe('pds thread views', () => {
10
11
  let network: TestNetwork
@@ -41,7 +42,12 @@ describe('pds thread views', () => {
41
42
  it('fetches deep post thread', async () => {
42
43
  const thread = await agent.api.app.bsky.feed.getPostThread(
43
44
  { uri: sc.posts[alice][1].ref.uriStr },
44
- { headers: await network.serviceHeaders(bob) },
45
+ {
46
+ headers: await network.serviceHeaders(
47
+ bob,
48
+ ids.AppBskyFeedGetPostThread,
49
+ ),
50
+ },
45
51
  )
46
52
 
47
53
  expect(forSnapshot(thread.data.thread)).toMatchSnapshot()
@@ -50,7 +56,12 @@ describe('pds thread views', () => {
50
56
  it('fetches shallow post thread', async () => {
51
57
  const thread = await agent.api.app.bsky.feed.getPostThread(
52
58
  { depth: 1, uri: sc.posts[alice][1].ref.uriStr },
53
- { headers: await network.serviceHeaders(bob) },
59
+ {
60
+ headers: await network.serviceHeaders(
61
+ bob,
62
+ ids.AppBskyFeedGetPostThread,
63
+ ),
64
+ },
54
65
  )
55
66
 
56
67
  expect(forSnapshot(thread.data.thread)).toMatchSnapshot()
@@ -65,7 +76,12 @@ describe('pds thread views', () => {
65
76
  `at://${sc.accounts[alice].handle}`,
66
77
  ),
67
78
  },
68
- { headers: await network.serviceHeaders(bob) },
79
+ {
80
+ headers: await network.serviceHeaders(
81
+ bob,
82
+ ids.AppBskyFeedGetPostThread,
83
+ ),
84
+ },
69
85
  )
70
86
 
71
87
  expect(forSnapshot(thread.data.thread)).toMatchSnapshot()
@@ -74,7 +90,12 @@ describe('pds thread views', () => {
74
90
  it('fetches ancestors', async () => {
75
91
  const thread = await agent.api.app.bsky.feed.getPostThread(
76
92
  { depth: 1, uri: sc.replies[alice][0].ref.uriStr },
77
- { headers: await network.serviceHeaders(bob) },
93
+ {
94
+ headers: await network.serviceHeaders(
95
+ bob,
96
+ ids.AppBskyFeedGetPostThread,
97
+ ),
98
+ },
78
99
  )
79
100
 
80
101
  expect(forSnapshot(thread.data.thread)).toMatchSnapshot()
@@ -83,7 +104,12 @@ describe('pds thread views', () => {
83
104
  it('fails for an unknown post', async () => {
84
105
  const promise = agent.api.app.bsky.feed.getPostThread(
85
106
  { uri: 'at://did:example:fake/does.not.exist/self' },
86
- { headers: await network.serviceHeaders(bob) },
107
+ {
108
+ headers: await network.serviceHeaders(
109
+ bob,
110
+ ids.AppBskyFeedGetPostThread,
111
+ ),
112
+ },
87
113
  )
88
114
 
89
115
  await expect(promise).rejects.toThrow(
@@ -94,7 +120,12 @@ describe('pds thread views', () => {
94
120
  it('fetches post thread unauthed', async () => {
95
121
  const { data: authed } = await agent.api.app.bsky.feed.getPostThread(
96
122
  { uri: sc.posts[alice][1].ref.uriStr },
97
- { headers: await network.serviceHeaders(bob) },
123
+ {
124
+ headers: await network.serviceHeaders(
125
+ bob,
126
+ ids.AppBskyFeedGetPostThread,
127
+ ),
128
+ },
98
129
  )
99
130
  const { data: unauthed } = await agent.api.app.bsky.feed.getPostThread({
100
131
  uri: sc.posts[alice][1].ref.uriStr,
@@ -133,7 +164,12 @@ describe('pds thread views', () => {
133
164
 
134
165
  const thread1 = await agent.api.app.bsky.feed.getPostThread(
135
166
  { uri: sc.posts[alice][indexes.aliceRoot].ref.uriStr },
136
- { headers: await network.serviceHeaders(bob) },
167
+ {
168
+ headers: await network.serviceHeaders(
169
+ bob,
170
+ ids.AppBskyFeedGetPostThread,
171
+ ),
172
+ },
137
173
  )
138
174
  expect(forSnapshot(thread1.data.thread)).toMatchSnapshot()
139
175
 
@@ -142,13 +178,23 @@ describe('pds thread views', () => {
142
178
 
143
179
  const thread2 = await agent.api.app.bsky.feed.getPostThread(
144
180
  { uri: sc.posts[alice][indexes.aliceRoot].ref.uriStr },
145
- { headers: await network.serviceHeaders(bob) },
181
+ {
182
+ headers: await network.serviceHeaders(
183
+ bob,
184
+ ids.AppBskyFeedGetPostThread,
185
+ ),
186
+ },
146
187
  )
147
188
  expect(forSnapshot(thread2.data.thread)).toMatchSnapshot()
148
189
 
149
190
  const thread3 = await agent.api.app.bsky.feed.getPostThread(
150
191
  { uri: sc.replies[alice][indexes.aliceReplyReply].ref.uriStr },
151
- { headers: await network.serviceHeaders(bob) },
192
+ {
193
+ headers: await network.serviceHeaders(
194
+ bob,
195
+ ids.AppBskyFeedGetPostThread,
196
+ ),
197
+ },
152
198
  )
153
199
  expect(forSnapshot(thread3.data.thread)).toMatchSnapshot()
154
200
  })
@@ -179,7 +225,12 @@ describe('pds thread views', () => {
179
225
  const { data: goodReply1Thread } =
180
226
  await agent.api.app.bsky.feed.getPostThread(
181
227
  { uri: goodReply1.ref.uriStr },
182
- { headers: await network.serviceHeaders(alice) },
228
+ {
229
+ headers: await network.serviceHeaders(
230
+ alice,
231
+ ids.AppBskyFeedGetPostThread,
232
+ ),
233
+ },
183
234
  )
184
235
  assertIsThreadViewPost(goodReply1Thread.thread)
185
236
  assertIsThreadViewPost(goodReply1Thread.thread.parent)
@@ -197,7 +248,12 @@ describe('pds thread views', () => {
197
248
  const { data: badReplyThread } =
198
249
  await agent.api.app.bsky.feed.getPostThread(
199
250
  { uri: badReply.ref.uriStr },
200
- { headers: await network.serviceHeaders(alice) },
251
+ {
252
+ headers: await network.serviceHeaders(
253
+ alice,
254
+ ids.AppBskyFeedGetPostThread,
255
+ ),
256
+ },
201
257
  )
202
258
  assertIsThreadViewPost(badReplyThread.thread)
203
259
  expect(badReplyThread.thread.parent).toBeUndefined() // is not goodReply1
@@ -206,7 +262,12 @@ describe('pds thread views', () => {
206
262
  it('reflects self-labels', async () => {
207
263
  const { data: thread } = await agent.api.app.bsky.feed.getPostThread(
208
264
  { uri: sc.posts[alice][0].ref.uriStr },
209
- { headers: await network.serviceHeaders(bob) },
265
+ {
266
+ headers: await network.serviceHeaders(
267
+ bob,
268
+ ids.AppBskyFeedGetPostThread,
269
+ ),
270
+ },
210
271
  )
211
272
 
212
273
  assertIsThreadViewPost(thread.thread)
@@ -236,7 +297,12 @@ describe('pds thread views', () => {
236
297
  // Same as shallow post thread test, minus alice
237
298
  const promise = agent.api.app.bsky.feed.getPostThread(
238
299
  { depth: 1, uri: sc.posts[alice][1].ref.uriStr },
239
- { headers: await network.serviceHeaders(bob) },
300
+ {
301
+ headers: await network.serviceHeaders(
302
+ bob,
303
+ ids.AppBskyFeedGetPostThread,
304
+ ),
305
+ },
240
306
  )
241
307
 
242
308
  await expect(promise).rejects.toThrow(
@@ -257,7 +323,12 @@ describe('pds thread views', () => {
257
323
  // Same as deep post thread test, minus carol
258
324
  const thread = await agent.api.app.bsky.feed.getPostThread(
259
325
  { uri: sc.posts[alice][1].ref.uriStr },
260
- { headers: await network.serviceHeaders(bob) },
326
+ {
327
+ headers: await network.serviceHeaders(
328
+ bob,
329
+ ids.AppBskyFeedGetPostThread,
330
+ ),
331
+ },
261
332
  )
262
333
 
263
334
  expect(forSnapshot(thread.data.thread)).toMatchSnapshot()
@@ -276,7 +347,12 @@ describe('pds thread views', () => {
276
347
  // Same as ancestor post thread test, minus bob
277
348
  const thread = await agent.api.app.bsky.feed.getPostThread(
278
349
  { depth: 1, uri: sc.replies[alice][0].ref.uriStr },
279
- { headers: await network.serviceHeaders(bob) },
350
+ {
351
+ headers: await network.serviceHeaders(
352
+ bob,
353
+ ids.AppBskyFeedGetPostThread,
354
+ ),
355
+ },
280
356
  )
281
357
 
282
358
  expect(forSnapshot(thread.data.thread)).toMatchSnapshot()
@@ -295,7 +371,12 @@ describe('pds thread views', () => {
295
371
 
296
372
  const promise = agent.api.app.bsky.feed.getPostThread(
297
373
  { depth: 1, uri: postRef.uriStr },
298
- { headers: await network.serviceHeaders(bob) },
374
+ {
375
+ headers: await network.serviceHeaders(
376
+ bob,
377
+ ids.AppBskyFeedGetPostThread,
378
+ ),
379
+ },
299
380
  )
300
381
 
301
382
  await expect(promise).rejects.toThrow(
@@ -311,7 +392,12 @@ describe('pds thread views', () => {
311
392
  it('blocks ancestors by record', async () => {
312
393
  const threadPreTakedown = await agent.api.app.bsky.feed.getPostThread(
313
394
  { depth: 1, uri: sc.replies[alice][0].ref.uriStr },
314
- { headers: await network.serviceHeaders(bob) },
395
+ {
396
+ headers: await network.serviceHeaders(
397
+ bob,
398
+ ids.AppBskyFeedGetPostThread,
399
+ ),
400
+ },
315
401
  )
316
402
 
317
403
  const parent = threadPreTakedown.data.thread.parent?.['post']
@@ -323,7 +409,12 @@ describe('pds thread views', () => {
323
409
  // Same as ancestor post thread test, minus parent post
324
410
  const thread = await agent.api.app.bsky.feed.getPostThread(
325
411
  { depth: 1, uri: sc.replies[alice][0].ref.uriStr },
326
- { headers: await network.serviceHeaders(bob) },
412
+ {
413
+ headers: await network.serviceHeaders(
414
+ bob,
415
+ ids.AppBskyFeedGetPostThread,
416
+ ),
417
+ },
327
418
  )
328
419
 
329
420
  expect(forSnapshot(thread.data.thread)).toMatchSnapshot()
@@ -337,7 +428,12 @@ describe('pds thread views', () => {
337
428
  it('blocks replies by record', async () => {
338
429
  const threadPreTakedown = await agent.api.app.bsky.feed.getPostThread(
339
430
  { uri: sc.posts[alice][1].ref.uriStr },
340
- { headers: await network.serviceHeaders(bob) },
431
+ {
432
+ headers: await network.serviceHeaders(
433
+ bob,
434
+ ids.AppBskyFeedGetPostThread,
435
+ ),
436
+ },
341
437
  )
342
438
  const post1 = threadPreTakedown.data.thread.replies?.[0].post
343
439
  const post2 = threadPreTakedown.data.thread.replies?.[1].replies[0].post
@@ -353,7 +449,12 @@ describe('pds thread views', () => {
353
449
  // Same as deep post thread test, minus some replies
354
450
  const thread = await agent.api.app.bsky.feed.getPostThread(
355
451
  { uri: sc.posts[alice][1].ref.uriStr },
356
- { headers: await network.serviceHeaders(bob) },
452
+ {
453
+ headers: await network.serviceHeaders(
454
+ bob,
455
+ ids.AppBskyFeedGetPostThread,
456
+ ),
457
+ },
357
458
  )
358
459
 
359
460
  expect(forSnapshot(thread.data.thread)).toMatchSnapshot()