@atproto/bsky 0.0.15 → 0.0.17

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 (236) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/api/com/atproto/moderation/util.d.ts +4 -3
  3. package/dist/cache/read-through.d.ts +30 -0
  4. package/dist/config.d.ts +18 -0
  5. package/dist/context.d.ts +21 -6
  6. package/dist/daemon/config.d.ts +15 -0
  7. package/dist/daemon/context.d.ts +15 -0
  8. package/dist/daemon/index.d.ts +23 -0
  9. package/dist/daemon/logger.d.ts +3 -0
  10. package/dist/daemon/notifications.d.ts +18 -0
  11. package/dist/daemon/services.d.ts +11 -0
  12. package/dist/db/database-schema.d.ts +1 -2
  13. package/dist/db/index.js +41 -1
  14. package/dist/db/index.js.map +3 -3
  15. package/dist/db/migrations/20231003T202833377Z-create-moderation-subject-status.d.ts +3 -0
  16. package/dist/db/migrations/20231205T000257238Z-remove-did-cache.d.ts +3 -0
  17. package/dist/db/migrations/index.d.ts +2 -0
  18. package/dist/db/pagination.d.ts +2 -1
  19. package/dist/db/{periodic-moderation-action-reversal.d.ts → periodic-moderation-event-reversal.d.ts} +3 -5
  20. package/dist/db/tables/moderation.d.ts +24 -34
  21. package/dist/did-cache.d.ts +10 -7
  22. package/dist/feed-gen/types.d.ts +1 -1
  23. package/dist/index.d.ts +6 -1
  24. package/dist/index.js +4370 -2758
  25. package/dist/index.js.map +3 -3
  26. package/dist/indexer/context.d.ts +2 -0
  27. package/dist/indexer/index.d.ts +1 -0
  28. package/dist/lexicon/index.d.ts +23 -18
  29. package/dist/lexicon/lexicons.d.ts +561 -412
  30. package/dist/lexicon/types/app/bsky/feed/defs.d.ts +1 -7
  31. package/dist/lexicon/types/app/bsky/graph/defs.d.ts +1 -0
  32. package/dist/lexicon/types/com/atproto/admin/defs.d.ts +114 -48
  33. package/dist/lexicon/types/com/atproto/admin/{resolveModerationReports.d.ts → deleteAccount.d.ts} +2 -13
  34. package/dist/lexicon/types/com/atproto/admin/{takeModerationAction.d.ts → emitModerationEvent.d.ts} +5 -6
  35. package/dist/lexicon/types/com/atproto/admin/{getModerationAction.d.ts → getModerationEvent.d.ts} +1 -1
  36. package/dist/lexicon/types/com/atproto/admin/{getModerationActions.d.ts → queryModerationEvents.d.ts} +5 -1
  37. package/dist/lexicon/types/com/atproto/admin/{getModerationReports.d.ts → queryModerationStatuses.d.ts} +12 -6
  38. package/dist/lexicon/types/com/atproto/admin/sendEmail.d.ts +1 -0
  39. package/dist/lexicon/types/com/atproto/{admin/getModerationReport.d.ts → temp/importRepo.d.ts} +10 -7
  40. package/dist/lexicon/types/com/atproto/temp/pushBlob.d.ts +25 -0
  41. package/dist/lexicon/types/com/atproto/{admin/reverseModerationAction.d.ts → temp/transferAccount.d.ts} +11 -5
  42. package/dist/logger.d.ts +1 -0
  43. package/dist/migrate-moderation-data.d.ts +1 -0
  44. package/dist/redis.d.ts +10 -1
  45. package/dist/services/actor/index.d.ts +18 -4
  46. package/dist/services/actor/views.d.ts +6 -8
  47. package/dist/services/feed/index.d.ts +7 -4
  48. package/dist/services/feed/util.d.ts +9 -1
  49. package/dist/services/feed/views.d.ts +11 -21
  50. package/dist/services/graph/index.d.ts +5 -29
  51. package/dist/services/graph/types.d.ts +1 -0
  52. package/dist/services/index.d.ts +3 -7
  53. package/dist/services/label/index.d.ts +10 -4
  54. package/dist/services/moderation/index.d.ts +134 -72
  55. package/dist/services/moderation/pagination.d.ts +36 -0
  56. package/dist/services/moderation/status.d.ts +13 -0
  57. package/dist/services/moderation/types.d.ts +35 -0
  58. package/dist/services/moderation/views.d.ts +18 -14
  59. package/dist/services/types.d.ts +3 -0
  60. package/dist/services/util/notification.d.ts +5 -0
  61. package/dist/services/util/post.d.ts +6 -6
  62. package/dist/util/debug.d.ts +1 -1
  63. package/dist/util/retry.d.ts +1 -6
  64. package/package.json +11 -11
  65. package/src/api/app/bsky/feed/getActorFeeds.ts +2 -1
  66. package/src/api/app/bsky/feed/getActorLikes.ts +1 -3
  67. package/src/api/app/bsky/feed/getAuthorFeed.ts +1 -3
  68. package/src/api/app/bsky/feed/getFeed.ts +9 -9
  69. package/src/api/app/bsky/feed/getFeedGenerator.ts +3 -0
  70. package/src/api/app/bsky/feed/getFeedGenerators.ts +2 -1
  71. package/src/api/app/bsky/feed/getListFeed.ts +1 -3
  72. package/src/api/app/bsky/feed/getPostThread.ts +15 -54
  73. package/src/api/app/bsky/feed/getPosts.ts +21 -18
  74. package/src/api/app/bsky/feed/getSuggestedFeeds.ts +2 -1
  75. package/src/api/app/bsky/feed/getTimeline.ts +1 -3
  76. package/src/api/app/bsky/feed/searchPosts.ts +20 -17
  77. package/src/api/app/bsky/graph/getList.ts +6 -3
  78. package/src/api/app/bsky/graph/getListBlocks.ts +3 -2
  79. package/src/api/app/bsky/graph/getListMutes.ts +2 -1
  80. package/src/api/app/bsky/graph/getLists.ts +2 -1
  81. package/src/api/app/bsky/unspecced/getPopularFeedGenerators.ts +3 -1
  82. package/src/api/blob-resolver.ts +6 -11
  83. package/src/api/com/atproto/admin/emitModerationEvent.ts +220 -0
  84. package/src/api/com/atproto/admin/{getModerationActions.ts → getModerationEvent.ts} +5 -11
  85. package/src/api/com/atproto/admin/getRecord.ts +1 -0
  86. package/src/api/com/atproto/admin/{getModerationReports.ts → queryModerationEvents.ts} +13 -16
  87. package/src/api/com/atproto/admin/queryModerationStatuses.ts +55 -0
  88. package/src/api/com/atproto/moderation/createReport.ts +9 -7
  89. package/src/api/com/atproto/moderation/util.ts +38 -20
  90. package/src/api/index.ts +8 -14
  91. package/src/auth.ts +29 -21
  92. package/src/auto-moderator/index.ts +26 -19
  93. package/src/cache/read-through.ts +151 -0
  94. package/src/config.ts +90 -1
  95. package/src/context.ts +11 -7
  96. package/src/daemon/config.ts +60 -0
  97. package/src/daemon/context.ts +27 -0
  98. package/src/daemon/index.ts +78 -0
  99. package/src/daemon/logger.ts +6 -0
  100. package/src/daemon/notifications.ts +54 -0
  101. package/src/daemon/services.ts +22 -0
  102. package/src/db/database-schema.ts +0 -2
  103. package/src/db/migrations/20231003T202833377Z-create-moderation-subject-status.ts +123 -0
  104. package/src/db/migrations/20231205T000257238Z-remove-did-cache.ts +14 -0
  105. package/src/db/migrations/index.ts +2 -0
  106. package/src/db/pagination.ts +26 -3
  107. package/src/db/{periodic-moderation-action-reversal.ts → periodic-moderation-event-reversal.ts} +50 -46
  108. package/src/db/tables/moderation.ts +35 -52
  109. package/src/did-cache.ts +33 -56
  110. package/src/feed-gen/bsky-team.ts +1 -1
  111. package/src/feed-gen/hot-classic.ts +1 -1
  112. package/src/feed-gen/index.ts +0 -4
  113. package/src/feed-gen/mutuals.ts +6 -2
  114. package/src/feed-gen/types.ts +1 -1
  115. package/src/index.ts +57 -17
  116. package/src/indexer/context.ts +5 -0
  117. package/src/indexer/index.ts +10 -7
  118. package/src/lexicon/index.ts +80 -67
  119. package/src/lexicon/lexicons.ts +698 -507
  120. package/src/lexicon/types/app/bsky/feed/defs.ts +1 -18
  121. package/src/lexicon/types/app/bsky/graph/defs.ts +1 -0
  122. package/src/lexicon/types/com/atproto/admin/defs.ts +276 -84
  123. package/src/lexicon/types/com/atproto/admin/{resolveModerationReports.ts → deleteAccount.ts} +2 -13
  124. package/src/lexicon/types/com/atproto/admin/{takeModerationAction.ts → emitModerationEvent.ts} +13 -11
  125. package/src/lexicon/types/com/atproto/admin/{getModerationReport.ts → getModerationEvent.ts} +1 -1
  126. package/src/lexicon/types/com/atproto/admin/{getModerationActions.ts → queryModerationEvents.ts} +8 -1
  127. package/src/lexicon/types/com/atproto/admin/{getModerationReports.ts → queryModerationStatuses.ts} +21 -14
  128. package/src/lexicon/types/com/atproto/admin/sendEmail.ts +1 -0
  129. package/src/lexicon/types/com/atproto/{admin/getModerationAction.ts → temp/importRepo.ts} +11 -7
  130. package/src/lexicon/types/com/atproto/temp/pushBlob.ts +39 -0
  131. package/src/lexicon/types/com/atproto/{admin/reverseModerationAction.ts → temp/transferAccount.ts} +18 -5
  132. package/src/logger.ts +2 -0
  133. package/src/migrate-moderation-data.ts +414 -0
  134. package/src/redis.ts +43 -3
  135. package/src/services/actor/index.ts +55 -7
  136. package/src/services/actor/views.ts +18 -21
  137. package/src/services/feed/index.ts +52 -19
  138. package/src/services/feed/util.ts +47 -19
  139. package/src/services/feed/views.ts +87 -13
  140. package/src/services/graph/index.ts +21 -3
  141. package/src/services/graph/types.ts +1 -0
  142. package/src/services/index.ts +14 -14
  143. package/src/services/indexing/index.ts +7 -10
  144. package/src/services/indexing/plugins/block.ts +2 -3
  145. package/src/services/indexing/plugins/feed-generator.ts +2 -3
  146. package/src/services/indexing/plugins/follow.ts +2 -3
  147. package/src/services/indexing/plugins/like.ts +2 -3
  148. package/src/services/indexing/plugins/list-block.ts +2 -3
  149. package/src/services/indexing/plugins/list-item.ts +2 -3
  150. package/src/services/indexing/plugins/list.ts +2 -3
  151. package/src/services/indexing/plugins/post.ts +16 -4
  152. package/src/services/indexing/plugins/repost.ts +2 -3
  153. package/src/services/indexing/plugins/thread-gate.ts +2 -3
  154. package/src/services/label/index.ts +68 -25
  155. package/src/services/moderation/index.ts +380 -395
  156. package/src/services/moderation/pagination.ts +96 -0
  157. package/src/services/moderation/status.ts +241 -0
  158. package/src/services/moderation/types.ts +49 -0
  159. package/src/services/moderation/views.ts +278 -329
  160. package/src/services/types.ts +4 -0
  161. package/src/services/util/notification.ts +70 -0
  162. package/src/util/debug.ts +2 -2
  163. package/src/util/retry.ts +1 -44
  164. package/tests/__snapshots__/feed-generation.test.ts.snap +322 -6
  165. package/tests/__snapshots__/indexing.test.ts.snap +0 -6
  166. package/tests/admin/__snapshots__/get-record.test.ts.snap +30 -132
  167. package/tests/admin/__snapshots__/get-repo.test.ts.snap +14 -60
  168. package/tests/admin/__snapshots__/moderation-events.test.ts.snap +146 -0
  169. package/tests/admin/__snapshots__/moderation-statuses.test.ts.snap +64 -0
  170. package/tests/admin/__snapshots__/moderation.test.ts.snap +0 -125
  171. package/tests/admin/get-record.test.ts +5 -9
  172. package/tests/admin/get-repo.test.ts +10 -12
  173. package/tests/admin/moderation-events.test.ts +221 -0
  174. package/tests/admin/moderation-statuses.test.ts +145 -0
  175. package/tests/admin/moderation.test.ts +512 -860
  176. package/tests/admin/repo-search.test.ts +3 -3
  177. package/tests/algos/hot-classic.test.ts +1 -2
  178. package/tests/auth.test.ts +1 -1
  179. package/tests/auto-moderator/fuzzy-matcher.test.ts +2 -1
  180. package/tests/auto-moderator/labeler.test.ts +19 -20
  181. package/tests/auto-moderator/takedowns.test.ts +61 -28
  182. package/tests/blob-resolver.test.ts +4 -2
  183. package/tests/daemon.test.ts +191 -0
  184. package/tests/did-cache.test.ts +20 -5
  185. package/tests/feed-generation.test.ts +57 -9
  186. package/tests/handle-invalidation.test.ts +1 -5
  187. package/tests/indexing.test.ts +20 -13
  188. package/tests/redis-cache.test.ts +231 -0
  189. package/tests/seeds/basic.ts +3 -0
  190. package/tests/subscription/repo.test.ts +4 -7
  191. package/tests/views/__snapshots__/block-lists.test.ts.snap +3 -9
  192. package/tests/views/__snapshots__/blocks.test.ts.snap +0 -9
  193. package/tests/views/__snapshots__/mute-lists.test.ts.snap +5 -5
  194. package/tests/views/__snapshots__/mutes.test.ts.snap +0 -3
  195. package/tests/views/__snapshots__/thread.test.ts.snap +0 -30
  196. package/tests/views/actor-search.test.ts +2 -3
  197. package/tests/views/author-feed.test.ts +42 -36
  198. package/tests/views/follows.test.ts +40 -35
  199. package/tests/views/list-feed.test.ts +17 -9
  200. package/tests/views/notifications.test.ts +13 -9
  201. package/tests/views/profile.test.ts +20 -19
  202. package/tests/views/thread.test.ts +117 -94
  203. package/tests/views/threadgating.test.ts +89 -19
  204. package/tests/views/timeline.test.ts +21 -13
  205. package/dist/api/com/atproto/admin/resolveModerationReports.d.ts +0 -3
  206. package/dist/api/com/atproto/admin/reverseModerationAction.d.ts +0 -3
  207. package/dist/api/com/atproto/admin/takeModerationAction.d.ts +0 -3
  208. package/dist/db/tables/did-cache.d.ts +0 -10
  209. package/dist/feed-gen/best-of-follows.d.ts +0 -29
  210. package/dist/feed-gen/whats-hot.d.ts +0 -29
  211. package/dist/feed-gen/with-friends.d.ts +0 -3
  212. package/dist/label-cache.d.ts +0 -19
  213. package/src/api/com/atproto/admin/getModerationAction.ts +0 -44
  214. package/src/api/com/atproto/admin/getModerationReport.ts +0 -43
  215. package/src/api/com/atproto/admin/resolveModerationReports.ts +0 -24
  216. package/src/api/com/atproto/admin/reverseModerationAction.ts +0 -115
  217. package/src/api/com/atproto/admin/takeModerationAction.ts +0 -156
  218. package/src/db/tables/did-cache.ts +0 -13
  219. package/src/feed-gen/best-of-follows.ts +0 -74
  220. package/src/feed-gen/whats-hot.ts +0 -101
  221. package/src/feed-gen/with-friends.ts +0 -39
  222. package/src/label-cache.ts +0 -90
  223. package/tests/admin/__snapshots__/get-moderation-action.test.ts.snap +0 -172
  224. package/tests/admin/__snapshots__/get-moderation-actions.test.ts.snap +0 -178
  225. package/tests/admin/__snapshots__/get-moderation-report.test.ts.snap +0 -177
  226. package/tests/admin/__snapshots__/get-moderation-reports.test.ts.snap +0 -307
  227. package/tests/admin/get-moderation-action.test.ts +0 -100
  228. package/tests/admin/get-moderation-actions.test.ts +0 -164
  229. package/tests/admin/get-moderation-report.test.ts +0 -100
  230. package/tests/admin/get-moderation-reports.test.ts +0 -332
  231. package/tests/algos/whats-hot.test.ts +0 -118
  232. package/tests/algos/with-friends.test.ts +0 -145
  233. /package/dist/api/com/atproto/admin/{getModerationAction.d.ts → emitModerationEvent.d.ts} +0 -0
  234. /package/dist/api/com/atproto/admin/{getModerationActions.d.ts → getModerationEvent.d.ts} +0 -0
  235. /package/dist/api/com/atproto/admin/{getModerationReport.d.ts → queryModerationEvents.d.ts} +0 -0
  236. /package/dist/api/com/atproto/admin/{getModerationReports.d.ts → queryModerationStatuses.d.ts} +0 -0
@@ -1,118 +0,0 @@
1
- import { HOUR } from '@atproto/common'
2
- import AtpAgent, { AtUri } from '@atproto/api'
3
- import { TestNetwork, SeedClient } from '@atproto/dev-env'
4
- import basicSeed from '../seeds/basic'
5
- import { makeAlgos } from '../../src'
6
-
7
- describe.skip('algo whats-hot', () => {
8
- let network: TestNetwork
9
- let agent: AtpAgent
10
- let sc: SeedClient
11
-
12
- // account dids, for convenience
13
- let alice: string
14
- let bob: string
15
- let carol: string
16
-
17
- const feedPublisherDid = 'did:example:feed-publisher'
18
- const feedUri = AtUri.make(
19
- feedPublisherDid,
20
- 'app.bsky.feed.generator',
21
- 'whats-hot',
22
- ).toString()
23
-
24
- beforeAll(async () => {
25
- network = await TestNetwork.create({
26
- dbPostgresSchema: 'bsky_algo_whats_hot',
27
- bsky: { algos: makeAlgos(feedPublisherDid) },
28
- })
29
- agent = new AtpAgent({ service: network.bsky.url })
30
- sc = network.getSeedClient()
31
- await basicSeed(sc)
32
-
33
- alice = sc.dids.alice
34
- bob = sc.dids.bob
35
- carol = sc.dids.carol
36
- await network.processAll()
37
- await network.bsky.processAll()
38
- })
39
-
40
- afterAll(async () => {
41
- await network.close()
42
- })
43
-
44
- it('returns well liked posts', async () => {
45
- const img = await sc.uploadFile(
46
- alice,
47
- 'tests/sample-img/key-landscape-small.jpg',
48
- 'image/jpeg',
49
- )
50
- const one = await sc.post(carol, 'carol is in the chat')
51
- const two = await sc.post(carol, "it's me, carol")
52
- const three = await sc.post(alice, 'first post', undefined, [img])
53
- const four = await sc.post(bob, 'bobby boi')
54
- const five = await sc.post(bob, 'another one')
55
-
56
- for (let i = 0; i < 20; i++) {
57
- const name = `user${i}`
58
- await sc.createAccount(name, {
59
- handle: `user${i}.test`,
60
- email: `user${i}@test.com`,
61
- password: 'password',
62
- })
63
- await sc.like(sc.dids[name], three.ref) // will be down-regulated by time
64
- if (i > 3) {
65
- await sc.like(sc.dids[name], one.ref)
66
- }
67
- if (i > 5) {
68
- await sc.like(sc.dids[name], two.ref)
69
- }
70
- if (i > 7) {
71
- await sc.like(sc.dids[name], four.ref)
72
- await sc.like(sc.dids[name], five.ref)
73
- }
74
- }
75
- await network.bsky.processAll()
76
-
77
- // move the 3rd post 5 hours into the past to check gravity
78
- await network.bsky.ctx.db
79
- .getPrimary()
80
- .db.updateTable('post')
81
- .where('uri', '=', three.ref.uriStr)
82
- .set({ indexedAt: new Date(Date.now() - 5 * HOUR).toISOString() })
83
- .execute()
84
-
85
- await network.bsky.ctx.db
86
- .getPrimary()
87
- .refreshMaterializedView('algo_whats_hot_view')
88
-
89
- const res = await agent.api.app.bsky.feed.getFeed(
90
- { feed: feedUri },
91
- { headers: await network.serviceHeaders(alice) },
92
- )
93
- expect(res.data.feed[0].post.uri).toBe(one.ref.uriStr)
94
- expect(res.data.feed[1].post.uri).toBe(two.ref.uriStr)
95
- const indexOfThird = res.data.feed.findIndex(
96
- (item) => item.post.uri === three.ref.uriStr,
97
- )
98
- // doesn't quite matter where this cam in but it should be down-regulated pretty severely from gravity
99
- expect(indexOfThird).toBeGreaterThan(3)
100
- })
101
-
102
- it('paginates', async () => {
103
- const res = await agent.api.app.bsky.feed.getFeed(
104
- { feed: feedUri },
105
- { headers: await network.serviceHeaders(alice) },
106
- )
107
- const first = await agent.api.app.bsky.feed.getFeed(
108
- { feed: feedUri, limit: 3 },
109
- { headers: await network.serviceHeaders(alice) },
110
- )
111
- const second = await agent.api.app.bsky.feed.getFeed(
112
- { feed: feedUri, cursor: first.data.cursor },
113
- { headers: await network.serviceHeaders(alice) },
114
- )
115
-
116
- expect([...first.data.feed, ...second.data.feed]).toEqual(res.data.feed)
117
- })
118
- })
@@ -1,145 +0,0 @@
1
- import AtpAgent, { AtUri } from '@atproto/api'
2
- import userSeed from '../seeds/users'
3
- import { makeAlgos } from '../../src'
4
- import { TestNetwork, SeedClient, RecordRef } from '@atproto/dev-env'
5
-
6
- describe.skip('algo with friends', () => {
7
- let network: TestNetwork
8
- let agent: AtpAgent
9
- let sc: SeedClient
10
-
11
- // account dids, for convenience
12
- let alice: string
13
- let bob: string
14
- let carol: string
15
- let dan: string
16
-
17
- const feedPublisherDid = 'did:example:feed-publisher'
18
- const feedUri = AtUri.make(
19
- feedPublisherDid,
20
- 'app.bsky.feed.generator',
21
- 'with-friends',
22
- ).toString()
23
-
24
- beforeAll(async () => {
25
- network = await TestNetwork.create({
26
- dbPostgresSchema: 'bsky_algo_with_friends',
27
- bsky: { algos: makeAlgos(feedPublisherDid) },
28
- })
29
- agent = new AtpAgent({ service: network.bsky.url })
30
- sc = network.getSeedClient()
31
- await userSeed(sc)
32
-
33
- alice = sc.dids.alice
34
- bob = sc.dids.bob
35
- carol = sc.dids.carol
36
- dan = sc.dids.dan
37
- await network.processAll()
38
- await network.bsky.processAll()
39
- })
40
-
41
- afterAll(async () => {
42
- await network.close()
43
- })
44
-
45
- let expectedFeed: string[]
46
-
47
- it('setup', async () => {
48
- for (let i = 0; i < 10; i++) {
49
- const name = `user${i}`
50
- await sc.createAccount(name, {
51
- handle: `user${i}.test`,
52
- email: `user${i}@test.com`,
53
- password: 'password',
54
- })
55
- }
56
-
57
- const hitLikeThreshold = async (ref: RecordRef) => {
58
- for (let i = 0; i < 10; i++) {
59
- const name = `user${i}`
60
- await sc.like(sc.dids[name], ref)
61
- }
62
- }
63
-
64
- // bob and dan are mutuals of alice, all userN are out-of-network.
65
- await sc.follow(alice, bob)
66
- await sc.follow(alice, carol)
67
- await sc.follow(alice, dan)
68
- await sc.follow(bob, alice)
69
- await sc.follow(dan, alice)
70
- const one = await sc.post(bob, 'one')
71
- const two = await sc.post(bob, 'two')
72
- const three = await sc.post(carol, 'three')
73
- const four = await sc.post(carol, 'four')
74
- const five = await sc.post(dan, 'five')
75
- const six = await sc.post(dan, 'six')
76
- const seven = await sc.post(sc.dids.user0, 'seven')
77
- const eight = await sc.post(sc.dids.user0, 'eight')
78
- const nine = await sc.post(sc.dids.user1, 'nine')
79
- const ten = await sc.post(sc.dids.user1, 'ten')
80
-
81
- // 1, 2, 3, 4, 6, 8, 10 hit like threshold
82
- await hitLikeThreshold(one.ref)
83
- await hitLikeThreshold(two.ref)
84
- await hitLikeThreshold(three.ref)
85
- await hitLikeThreshold(four.ref)
86
- await hitLikeThreshold(six.ref)
87
- await hitLikeThreshold(eight.ref)
88
- await hitLikeThreshold(ten.ref)
89
-
90
- // 1, 4, 7, 8, 10 liked by mutual
91
- await sc.like(bob, one.ref)
92
- await sc.like(dan, four.ref)
93
- await sc.like(bob, seven.ref)
94
- await sc.like(dan, eight.ref)
95
- await sc.like(bob, nine.ref)
96
- await sc.like(dan, ten.ref)
97
-
98
- // all liked by non-mutual
99
- await sc.like(carol, one.ref)
100
- await sc.like(carol, two.ref)
101
- await sc.like(carol, three.ref)
102
- await sc.like(carol, four.ref)
103
- await sc.like(carol, five.ref)
104
- await sc.like(carol, six.ref)
105
- await sc.like(carol, seven.ref)
106
- await sc.like(carol, eight.ref)
107
- await sc.like(carol, nine.ref)
108
- await sc.like(carol, ten.ref)
109
-
110
- await network.bsky.processAll()
111
-
112
- expectedFeed = [
113
- ten.ref.uriStr,
114
- eight.ref.uriStr,
115
- four.ref.uriStr,
116
- one.ref.uriStr,
117
- ]
118
- })
119
-
120
- it('returns popular in & out of network posts', async () => {
121
- const res = await agent.api.app.bsky.feed.getFeed(
122
- { feed: feedUri },
123
- { headers: await network.serviceHeaders(alice) },
124
- )
125
- const feedUris = res.data.feed.map((i) => i.post.uri)
126
- expect(feedUris).toEqual(expectedFeed)
127
- })
128
-
129
- it('paginates', async () => {
130
- const res = await agent.api.app.bsky.feed.getFeed(
131
- { feed: feedUri },
132
- { headers: await network.serviceHeaders(alice) },
133
- )
134
- const first = await agent.api.app.bsky.feed.getFeed(
135
- { feed: feedUri, limit: 2 },
136
- { headers: await network.serviceHeaders(alice) },
137
- )
138
- const second = await agent.api.app.bsky.feed.getFeed(
139
- { feed: feedUri, cursor: first.data.cursor },
140
- { headers: await network.serviceHeaders(alice) },
141
- )
142
-
143
- expect([...first.data.feed, ...second.data.feed]).toEqual(res.data.feed)
144
- })
145
- })