@atproto/bsky 0.0.76 → 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 (219) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/api/app/bsky/feed/getActorLikes.js +2 -2
  3. package/dist/api/app/bsky/feed/getActorLikes.js.map +1 -1
  4. package/dist/api/app/bsky/feed/getLikes.js +6 -6
  5. package/dist/api/app/bsky/feed/getLikes.js.map +1 -1
  6. package/dist/api/app/bsky/feed/getPosts.js +4 -4
  7. package/dist/api/app/bsky/feed/getPosts.js.map +1 -1
  8. package/dist/api/app/bsky/feed/getQuotes.d.ts +4 -0
  9. package/dist/api/app/bsky/feed/getQuotes.d.ts.map +1 -0
  10. package/dist/api/app/bsky/feed/getQuotes.js +67 -0
  11. package/dist/api/app/bsky/feed/getQuotes.js.map +1 -0
  12. package/dist/api/app/bsky/feed/getRepostedBy.js +6 -6
  13. package/dist/api/app/bsky/feed/getRepostedBy.js.map +1 -1
  14. package/dist/api/app/bsky/feed/searchPosts.js +4 -4
  15. package/dist/api/app/bsky/feed/searchPosts.js.map +1 -1
  16. package/dist/api/app/bsky/graph/getFollowers.js +8 -8
  17. package/dist/api/app/bsky/graph/getFollowers.js.map +1 -1
  18. package/dist/api/app/bsky/graph/getList.js +3 -3
  19. package/dist/api/app/bsky/graph/getList.js.map +1 -1
  20. package/dist/api/app/bsky/notification/listNotifications.d.ts.map +1 -1
  21. package/dist/api/app/bsky/notification/listNotifications.js +29 -8
  22. package/dist/api/app/bsky/notification/listNotifications.js.map +1 -1
  23. package/dist/api/index.d.ts.map +1 -1
  24. package/dist/api/index.js +2 -0
  25. package/dist/api/index.js.map +1 -1
  26. package/dist/data-plane/server/db/database-schema.d.ts +4 -2
  27. package/dist/data-plane/server/db/database-schema.d.ts.map +1 -1
  28. package/dist/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.d.ts +4 -0
  29. package/dist/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.d.ts.map +1 -0
  30. package/dist/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.js +15 -0
  31. package/dist/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.js.map +1 -0
  32. package/dist/data-plane/server/db/migrations/20240723T220703655Z-quotes.d.ts +4 -0
  33. package/dist/data-plane/server/db/migrations/20240723T220703655Z-quotes.d.ts.map +1 -0
  34. package/dist/data-plane/server/db/migrations/20240723T220703655Z-quotes.js +30 -0
  35. package/dist/data-plane/server/db/migrations/20240723T220703655Z-quotes.js.map +1 -0
  36. package/dist/data-plane/server/db/migrations/20240801T193939827Z-post-gate.d.ts +4 -0
  37. package/dist/data-plane/server/db/migrations/20240801T193939827Z-post-gate.d.ts.map +1 -0
  38. package/dist/data-plane/server/db/migrations/20240801T193939827Z-post-gate.js +20 -0
  39. package/dist/data-plane/server/db/migrations/20240801T193939827Z-post-gate.js.map +1 -0
  40. package/dist/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.d.ts +4 -0
  41. package/dist/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.d.ts.map +1 -0
  42. package/dist/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.js +28 -0
  43. package/dist/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.js.map +1 -0
  44. package/dist/data-plane/server/db/migrations/index.d.ts +4 -0
  45. package/dist/data-plane/server/db/migrations/index.d.ts.map +1 -1
  46. package/dist/data-plane/server/db/migrations/index.js +5 -1
  47. package/dist/data-plane/server/db/migrations/index.js.map +1 -1
  48. package/dist/data-plane/server/db/tables/post-agg.d.ts +1 -0
  49. package/dist/data-plane/server/db/tables/post-agg.d.ts.map +1 -1
  50. package/dist/data-plane/server/db/tables/post-gate.d.ts +14 -0
  51. package/dist/data-plane/server/db/tables/post-gate.d.ts.map +1 -0
  52. package/dist/data-plane/server/db/tables/post-gate.js +4 -0
  53. package/dist/data-plane/server/db/tables/post-gate.js.map +1 -0
  54. package/dist/data-plane/server/db/tables/post.d.ts +3 -0
  55. package/dist/data-plane/server/db/tables/post.d.ts.map +1 -1
  56. package/dist/data-plane/server/db/tables/quote.d.ts +16 -0
  57. package/dist/data-plane/server/db/tables/quote.d.ts.map +1 -0
  58. package/dist/data-plane/server/db/tables/quote.js +4 -0
  59. package/dist/data-plane/server/db/tables/quote.js.map +1 -0
  60. package/dist/data-plane/server/indexing/index.d.ts +2 -0
  61. package/dist/data-plane/server/indexing/index.d.ts.map +1 -1
  62. package/dist/data-plane/server/indexing/index.js +6 -0
  63. package/dist/data-plane/server/indexing/index.js.map +1 -1
  64. package/dist/data-plane/server/indexing/plugins/post-gate.d.ts +10 -0
  65. package/dist/data-plane/server/indexing/plugins/post-gate.d.ts.map +1 -0
  66. package/dist/data-plane/server/indexing/plugins/post-gate.js +101 -0
  67. package/dist/data-plane/server/indexing/plugins/post-gate.js.map +1 -0
  68. package/dist/data-plane/server/indexing/plugins/post.d.ts +2 -0
  69. package/dist/data-plane/server/indexing/plugins/post.d.ts.map +1 -1
  70. package/dist/data-plane/server/indexing/plugins/post.js +122 -15
  71. package/dist/data-plane/server/indexing/plugins/post.js.map +1 -1
  72. package/dist/data-plane/server/indexing/plugins/thread-gate.d.ts.map +1 -1
  73. package/dist/data-plane/server/indexing/plugins/thread-gate.js +12 -0
  74. package/dist/data-plane/server/indexing/plugins/thread-gate.js.map +1 -1
  75. package/dist/data-plane/server/routes/index.d.ts.map +1 -1
  76. package/dist/data-plane/server/routes/index.js +2 -0
  77. package/dist/data-plane/server/routes/index.js.map +1 -1
  78. package/dist/data-plane/server/routes/interactions.d.ts.map +1 -1
  79. package/dist/data-plane/server/routes/interactions.js +2 -1
  80. package/dist/data-plane/server/routes/interactions.js.map +1 -1
  81. package/dist/data-plane/server/routes/quotes.d.ts +6 -0
  82. package/dist/data-plane/server/routes/quotes.d.ts.map +1 -0
  83. package/dist/data-plane/server/routes/quotes.js +27 -0
  84. package/dist/data-plane/server/routes/quotes.js.map +1 -0
  85. package/dist/data-plane/server/routes/records.d.ts.map +1 -1
  86. package/dist/data-plane/server/routes/records.js +11 -1
  87. package/dist/data-plane/server/routes/records.js.map +1 -1
  88. package/dist/data-plane/server/util.d.ts +6 -7
  89. package/dist/data-plane/server/util.d.ts.map +1 -1
  90. package/dist/data-plane/server/util.js +1 -9
  91. package/dist/data-plane/server/util.js.map +1 -1
  92. package/dist/hydration/feed.d.ts +10 -0
  93. package/dist/hydration/feed.d.ts.map +1 -1
  94. package/dist/hydration/feed.js +31 -7
  95. package/dist/hydration/feed.js.map +1 -1
  96. package/dist/hydration/hydrator.d.ts +4 -2
  97. package/dist/hydration/hydrator.d.ts.map +1 -1
  98. package/dist/hydration/hydrator.js +89 -34
  99. package/dist/hydration/hydrator.js.map +1 -1
  100. package/dist/hydration/util.d.ts +0 -1
  101. package/dist/hydration/util.d.ts.map +1 -1
  102. package/dist/hydration/util.js +1 -5
  103. package/dist/hydration/util.js.map +1 -1
  104. package/dist/lexicon/index.d.ts +2 -0
  105. package/dist/lexicon/index.d.ts.map +1 -1
  106. package/dist/lexicon/index.js +4 -0
  107. package/dist/lexicon/index.js.map +1 -1
  108. package/dist/lexicon/lexicons.d.ts +141 -0
  109. package/dist/lexicon/lexicons.d.ts.map +1 -1
  110. package/dist/lexicon/lexicons.js +142 -0
  111. package/dist/lexicon/lexicons.js.map +1 -1
  112. package/dist/lexicon/types/app/bsky/embed/record.d.ts +8 -1
  113. package/dist/lexicon/types/app/bsky/embed/record.d.ts.map +1 -1
  114. package/dist/lexicon/types/app/bsky/embed/record.js +11 -1
  115. package/dist/lexicon/types/app/bsky/embed/record.js.map +1 -1
  116. package/dist/lexicon/types/app/bsky/feed/defs.d.ts +2 -0
  117. package/dist/lexicon/types/app/bsky/feed/defs.d.ts.map +1 -1
  118. package/dist/lexicon/types/app/bsky/feed/defs.js.map +1 -1
  119. package/dist/lexicon/types/app/bsky/feed/getQuotes.d.ts +44 -0
  120. package/dist/lexicon/types/app/bsky/feed/getQuotes.d.ts.map +1 -0
  121. package/dist/lexicon/types/app/bsky/feed/getQuotes.js +3 -0
  122. package/dist/lexicon/types/app/bsky/feed/getQuotes.js.map +1 -0
  123. package/dist/lexicon/types/app/bsky/feed/postgate.d.ts +25 -0
  124. package/dist/lexicon/types/app/bsky/feed/postgate.d.ts.map +1 -0
  125. package/dist/lexicon/types/app/bsky/feed/postgate.js +27 -0
  126. package/dist/lexicon/types/app/bsky/feed/postgate.js.map +1 -0
  127. package/dist/lexicon/types/app/bsky/feed/threadgate.d.ts +2 -0
  128. package/dist/lexicon/types/app/bsky/feed/threadgate.d.ts.map +1 -1
  129. package/dist/lexicon/types/app/bsky/feed/threadgate.js.map +1 -1
  130. package/dist/proto/bsky_connect.d.ts +21 -1
  131. package/dist/proto/bsky_connect.d.ts.map +1 -1
  132. package/dist/proto/bsky_connect.js +20 -0
  133. package/dist/proto/bsky_connect.js.map +1 -1
  134. package/dist/proto/bsky_pb.d.ts +96 -0
  135. package/dist/proto/bsky_pb.d.ts.map +1 -1
  136. package/dist/proto/bsky_pb.js +306 -4
  137. package/dist/proto/bsky_pb.js.map +1 -1
  138. package/dist/util/uris.d.ts +12 -0
  139. package/dist/util/uris.d.ts.map +1 -0
  140. package/dist/util/uris.js +34 -0
  141. package/dist/util/uris.js.map +1 -0
  142. package/dist/views/index.d.ts +8 -2
  143. package/dist/views/index.d.ts.map +1 -1
  144. package/dist/views/index.js +83 -39
  145. package/dist/views/index.js.map +1 -1
  146. package/dist/views/types.d.ts +1 -1
  147. package/dist/views/types.d.ts.map +1 -1
  148. package/dist/views/types.js.map +1 -1
  149. package/dist/views/util.d.ts +11 -1
  150. package/dist/views/util.d.ts.map +1 -1
  151. package/dist/views/util.js +19 -8
  152. package/dist/views/util.js.map +1 -1
  153. package/package.json +4 -4
  154. package/proto/bsky.proto +33 -0
  155. package/src/api/app/bsky/feed/getActorLikes.ts +1 -1
  156. package/src/api/app/bsky/feed/getLikes.ts +1 -1
  157. package/src/api/app/bsky/feed/getPosts.ts +1 -1
  158. package/src/api/app/bsky/feed/getQuotes.ts +105 -0
  159. package/src/api/app/bsky/feed/getRepostedBy.ts +1 -1
  160. package/src/api/app/bsky/feed/searchPosts.ts +1 -1
  161. package/src/api/app/bsky/graph/getFollowers.ts +1 -1
  162. package/src/api/app/bsky/graph/getList.ts +1 -1
  163. package/src/api/app/bsky/notification/listNotifications.ts +32 -6
  164. package/src/api/index.ts +2 -0
  165. package/src/data-plane/server/db/database-schema.ts +7 -3
  166. package/src/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.ts +12 -0
  167. package/src/data-plane/server/db/migrations/20240723T220703655Z-quotes.ts +28 -0
  168. package/src/data-plane/server/db/migrations/20240801T193939827Z-post-gate.ts +17 -0
  169. package/src/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.ts +25 -0
  170. package/src/data-plane/server/db/migrations/index.ts +4 -0
  171. package/src/data-plane/server/db/tables/post-agg.ts +1 -0
  172. package/src/data-plane/server/db/tables/post-gate.ts +12 -0
  173. package/src/data-plane/server/db/tables/post.ts +3 -0
  174. package/src/data-plane/server/db/tables/quote.ts +15 -0
  175. package/src/data-plane/server/indexing/index.ts +7 -0
  176. package/src/data-plane/server/indexing/plugins/post-gate.ts +104 -0
  177. package/src/data-plane/server/indexing/plugins/post.ts +151 -16
  178. package/src/data-plane/server/indexing/plugins/thread-gate.ts +12 -0
  179. package/src/data-plane/server/routes/index.ts +2 -0
  180. package/src/data-plane/server/routes/interactions.ts +2 -1
  181. package/src/data-plane/server/routes/quotes.ts +32 -0
  182. package/src/data-plane/server/routes/records.ts +11 -1
  183. package/src/data-plane/server/util.ts +0 -8
  184. package/src/hydration/feed.ts +58 -12
  185. package/src/hydration/hydrator.ts +94 -22
  186. package/src/hydration/util.ts +0 -4
  187. package/src/lexicon/index.ts +12 -0
  188. package/src/lexicon/lexicons.ts +145 -0
  189. package/src/lexicon/types/app/bsky/embed/record.ts +19 -0
  190. package/src/lexicon/types/app/bsky/feed/defs.ts +2 -0
  191. package/src/lexicon/types/app/bsky/feed/getQuotes.ts +54 -0
  192. package/src/lexicon/types/app/bsky/feed/postgate.ts +47 -0
  193. package/src/lexicon/types/app/bsky/feed/threadgate.ts +2 -0
  194. package/src/proto/bsky_connect.ts +24 -0
  195. package/src/proto/bsky_pb.ts +289 -0
  196. package/src/util/uris.ts +31 -0
  197. package/src/views/index.ts +90 -35
  198. package/src/views/types.ts +1 -0
  199. package/src/views/util.ts +37 -7
  200. package/tests/__snapshots__/feed-generation.test.ts.snap +37 -0
  201. package/tests/data-plane/__snapshots__/indexing.test.ts.snap +18 -0
  202. package/tests/data-plane/indexing.test.ts +1 -0
  203. package/tests/postgates.test.ts +186 -0
  204. package/tests/seed/feed-hidden-replies.ts +62 -0
  205. package/tests/seed/postgates.ts +56 -0
  206. package/tests/views/__snapshots__/author-feed.test.ts.snap +56 -0
  207. package/tests/views/__snapshots__/block-lists.test.ts.snap +6 -0
  208. package/tests/views/__snapshots__/blocks.test.ts.snap +10 -0
  209. package/tests/views/__snapshots__/list-feed.test.ts.snap +22 -0
  210. package/tests/views/__snapshots__/mute-lists.test.ts.snap +8 -0
  211. package/tests/views/__snapshots__/mutes.test.ts.snap +6 -0
  212. package/tests/views/__snapshots__/posts.test.ts.snap +12 -0
  213. package/tests/views/__snapshots__/quotes.test.ts.snap +399 -0
  214. package/tests/views/__snapshots__/thread.test.ts.snap +50 -0
  215. package/tests/views/__snapshots__/timeline.test.ts.snap +170 -0
  216. package/tests/views/author-feed.test.ts +3 -9
  217. package/tests/views/feed-hidden-replies.test.ts +246 -0
  218. package/tests/views/feed-view-post.test.ts +501 -0
  219. package/tests/views/quotes.test.ts +105 -0
@@ -1,4 +1,4 @@
1
- import { AtpAgent, AtUri } from '@atproto/api'
1
+ import { AtpAgent } from '@atproto/api'
2
2
  import { TestNetwork, SeedClient, authorFeedSeed } from '@atproto/dev-env'
3
3
  import {
4
4
  forSnapshot,
@@ -10,6 +10,7 @@ import { ReplyRef, isRecord } from '../../src/lexicon/types/app/bsky/feed/post'
10
10
  import { isView as isEmbedRecordWithMedia } from '../../src/lexicon/types/app/bsky/embed/recordWithMedia'
11
11
  import { isView as isImageEmbed } from '../../src/lexicon/types/app/bsky/embed/images'
12
12
  import { isPostView } from '../../src/lexicon/types/app/bsky/feed/defs'
13
+ import { uriToDid } from '../../src/util/uris'
13
14
  import { ids } from '../../src/lexicon/lexicons'
14
15
 
15
16
  describe('pds author feed views', () => {
@@ -388,12 +389,5 @@ describe('pds author feed views', () => {
388
389
  })
389
390
 
390
391
  function isReplyTo(reply: ReplyRef, did: string) {
391
- return (
392
- getDidFromUri(reply.root.uri) === did &&
393
- getDidFromUri(reply.parent.uri) === did
394
- )
395
- }
396
-
397
- function getDidFromUri(uri: string) {
398
- return new AtUri(uri).hostname
392
+ return uriToDid(reply.root.uri) === did && uriToDid(reply.parent.uri) === did
399
393
  }
@@ -0,0 +1,246 @@
1
+ import { TestNetwork, SeedClient } from '@atproto/dev-env'
2
+ import AtpAgent from '@atproto/api'
3
+
4
+ import { ids } from '../../src/lexicon/lexicons'
5
+ import { feedHiddenRepliesSeed, Users } from '../seed/feed-hidden-replies'
6
+
7
+ describe('feed hidden replies', () => {
8
+ let network: TestNetwork
9
+ let agent: AtpAgent
10
+ let pdsAgent: AtpAgent
11
+ let sc: SeedClient
12
+ let users: Users
13
+
14
+ beforeAll(async () => {
15
+ network = await TestNetwork.create({
16
+ dbPostgresSchema: 'bsky_tests_feed_hidden_replies',
17
+ })
18
+ agent = network.bsky.getClient()
19
+ pdsAgent = network.pds.getClient()
20
+ sc = network.getSeedClient()
21
+
22
+ const result = await feedHiddenRepliesSeed(sc)
23
+ users = result.users
24
+
25
+ await network.processAll()
26
+ })
27
+
28
+ afterAll(async () => {
29
+ await network.close()
30
+ })
31
+
32
+ describe(`notifications`, () => {
33
+ it(`[A] -> [B] : B is hidden`, async () => {
34
+ const A = await sc.post(users.poster.did, `A`)
35
+
36
+ await network.processAll()
37
+
38
+ const B = await sc.reply(users.replier.did, A.ref, A.ref, `B`)
39
+ const C = await sc.reply(users.replier.did, A.ref, A.ref, `C`)
40
+
41
+ await pdsAgent.api.app.bsky.feed.threadgate.create(
42
+ {
43
+ repo: A.ref.uri.host,
44
+ rkey: A.ref.uri.rkey,
45
+ },
46
+ {
47
+ post: A.ref.uriStr,
48
+ createdAt: new Date().toISOString(),
49
+ hiddenReplies: [B.ref.uriStr],
50
+ },
51
+ sc.getHeaders(A.ref.uri.host),
52
+ )
53
+
54
+ await network.processAll()
55
+
56
+ const {
57
+ data: { notifications },
58
+ } = await agent.api.app.bsky.notification.listNotifications(
59
+ {},
60
+ {
61
+ headers: await network.serviceHeaders(
62
+ users.poster.did,
63
+ ids.AppBskyNotificationListNotifications,
64
+ ),
65
+ },
66
+ )
67
+
68
+ const notificationB = notifications.find((item) => {
69
+ return item.uri === B.ref.uriStr
70
+ })
71
+ const notificationC = notifications.find((item) => {
72
+ return item.uri === C.ref.uriStr
73
+ })
74
+
75
+ expect(notificationB).toBeUndefined()
76
+ expect(notificationC).toBeDefined()
77
+ })
78
+
79
+ it(`[A] -> [B] -> [C] : B is hidden, C results in no notification for A, notification for B`, async () => {
80
+ const A = await sc.post(users.poster.did, `A`)
81
+ await network.processAll()
82
+ const B = await sc.reply(users.replier.did, A.ref, A.ref, `B`)
83
+
84
+ await pdsAgent.api.app.bsky.feed.threadgate.create(
85
+ {
86
+ repo: A.ref.uri.host,
87
+ rkey: A.ref.uri.rkey,
88
+ },
89
+ {
90
+ post: A.ref.uriStr,
91
+ createdAt: new Date().toISOString(),
92
+ hiddenReplies: [B.ref.uriStr],
93
+ },
94
+ sc.getHeaders(A.ref.uri.host),
95
+ )
96
+
97
+ await network.processAll()
98
+
99
+ const C = await sc.reply(users.viewer.did, A.ref, B.ref, `C`)
100
+
101
+ await network.processAll()
102
+
103
+ const {
104
+ data: { notifications: posterNotifications },
105
+ } = await agent.api.app.bsky.notification.listNotifications(
106
+ {},
107
+ {
108
+ headers: await network.serviceHeaders(
109
+ users.poster.did,
110
+ ids.AppBskyNotificationListNotifications,
111
+ ),
112
+ },
113
+ )
114
+
115
+ const posterNotificationB = posterNotifications.find((item) => {
116
+ return item.uri === B.ref.uriStr
117
+ })
118
+ const posterNotificationC = posterNotifications.find((item) => {
119
+ return item.uri === C.ref.uriStr
120
+ })
121
+
122
+ expect(posterNotificationB).toBeUndefined()
123
+ expect(posterNotificationC).toBeUndefined()
124
+
125
+ const {
126
+ data: { notifications: replierNotifications },
127
+ } = await agent.api.app.bsky.notification.listNotifications(
128
+ {},
129
+ {
130
+ headers: await network.serviceHeaders(
131
+ users.replier.did,
132
+ ids.AppBskyNotificationListNotifications,
133
+ ),
134
+ },
135
+ )
136
+
137
+ const replierNotificationC = replierNotifications.find((item) => {
138
+ return item.uri === C.ref.uriStr
139
+ })
140
+
141
+ expect(replierNotificationC).toBeDefined()
142
+ })
143
+
144
+ it(`[A] -> [B] -> [C] -> [D] : C is hidden, D results in no notification for A or B, notification for C, C exists in B's notifications`, async () => {
145
+ const A = await sc.post(users.poster.did, `A`)
146
+ await network.processAll()
147
+ const B = await sc.reply(users.replier.did, A.ref, A.ref, `B`)
148
+ await network.processAll()
149
+ const C = await sc.reply(users.viewer.did, A.ref, B.ref, `C`)
150
+ await network.processAll()
151
+
152
+ const {
153
+ data: { notifications: posterNotificationsBefore },
154
+ } = await agent.api.app.bsky.notification.listNotifications(
155
+ {},
156
+ {
157
+ headers: await network.serviceHeaders(
158
+ users.poster.did,
159
+ ids.AppBskyNotificationListNotifications,
160
+ ),
161
+ },
162
+ )
163
+
164
+ const posterNotificationCBefore = posterNotificationsBefore.find(
165
+ (item) => {
166
+ return item.uri === C.ref.uriStr
167
+ },
168
+ )
169
+
170
+ expect(posterNotificationCBefore).toBeDefined()
171
+
172
+ await pdsAgent.api.app.bsky.feed.threadgate.create(
173
+ {
174
+ repo: A.ref.uri.host,
175
+ rkey: A.ref.uri.rkey,
176
+ },
177
+ {
178
+ post: A.ref.uriStr,
179
+ createdAt: new Date().toISOString(),
180
+ hiddenReplies: [C.ref.uriStr],
181
+ },
182
+ sc.getHeaders(A.ref.uri.host),
183
+ )
184
+ await network.processAll()
185
+ const D = await sc.reply(users.viewer.did, A.ref, C.ref, `D`)
186
+ await network.processAll()
187
+
188
+ const {
189
+ data: { notifications: posterNotifications },
190
+ } = await agent.api.app.bsky.notification.listNotifications(
191
+ {},
192
+ {
193
+ headers: await network.serviceHeaders(
194
+ users.poster.did,
195
+ ids.AppBskyNotificationListNotifications,
196
+ ),
197
+ },
198
+ )
199
+
200
+ const posterNotificationB = posterNotifications.find((item) => {
201
+ return item.uri === B.ref.uriStr
202
+ })
203
+ const posterNotificationC = posterNotifications.find((item) => {
204
+ return item.uri === C.ref.uriStr
205
+ })
206
+ const posterNotificationD = posterNotifications.find((item) => {
207
+ return item.uri === D.ref.uriStr
208
+ })
209
+
210
+ expect(posterNotificationB).toBeDefined()
211
+ expect(posterNotificationC).toBeUndefined() // hidden bc OP
212
+ expect(posterNotificationD).toBeUndefined() // hidden bc no propogation
213
+
214
+ const {
215
+ data: { notifications: replierNotifications },
216
+ } = await agent.api.app.bsky.notification.listNotifications(
217
+ {},
218
+ {
219
+ headers: await network.serviceHeaders(
220
+ users.replier.did,
221
+ ids.AppBskyNotificationListNotifications,
222
+ ),
223
+ },
224
+ )
225
+
226
+ const replierNotificationC = replierNotifications.find((item) => {
227
+ return item.uri === C.ref.uriStr
228
+ })
229
+ const replierNotificationD = replierNotifications.find((item) => {
230
+ return item.uri === D.ref.uriStr
231
+ })
232
+
233
+ expect(replierNotificationC).toBeDefined() // not hidden bc not OP
234
+ expect(replierNotificationD).toBeUndefined() // hidden bc no propogation
235
+
236
+ await pdsAgent.api.app.bsky.feed.threadgate.delete(
237
+ {
238
+ repo: A.ref.uri.host,
239
+ rkey: A.ref.uri.rkey,
240
+ },
241
+ sc.getHeaders(A.ref.uri.host),
242
+ )
243
+ await network.processAll()
244
+ })
245
+ })
246
+ })