@atproto/bsky 0.0.76 → 0.0.78

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 (226) hide show
  1. package/CHANGELOG.md +20 -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/getListFeed.d.ts.map +1 -1
  7. package/dist/api/app/bsky/feed/getListFeed.js +19 -3
  8. package/dist/api/app/bsky/feed/getListFeed.js.map +1 -1
  9. package/dist/api/app/bsky/feed/getPosts.js +4 -4
  10. package/dist/api/app/bsky/feed/getPosts.js.map +1 -1
  11. package/dist/api/app/bsky/feed/getQuotes.d.ts +4 -0
  12. package/dist/api/app/bsky/feed/getQuotes.d.ts.map +1 -0
  13. package/dist/api/app/bsky/feed/getQuotes.js +67 -0
  14. package/dist/api/app/bsky/feed/getQuotes.js.map +1 -0
  15. package/dist/api/app/bsky/feed/getRepostedBy.js +6 -6
  16. package/dist/api/app/bsky/feed/getRepostedBy.js.map +1 -1
  17. package/dist/api/app/bsky/feed/searchPosts.js +4 -4
  18. package/dist/api/app/bsky/feed/searchPosts.js.map +1 -1
  19. package/dist/api/app/bsky/graph/getFollowers.js +8 -8
  20. package/dist/api/app/bsky/graph/getFollowers.js.map +1 -1
  21. package/dist/api/app/bsky/graph/getList.js +7 -7
  22. package/dist/api/app/bsky/graph/getList.js.map +1 -1
  23. package/dist/api/app/bsky/notification/listNotifications.d.ts.map +1 -1
  24. package/dist/api/app/bsky/notification/listNotifications.js +29 -8
  25. package/dist/api/app/bsky/notification/listNotifications.js.map +1 -1
  26. package/dist/api/index.d.ts.map +1 -1
  27. package/dist/api/index.js +2 -0
  28. package/dist/api/index.js.map +1 -1
  29. package/dist/data-plane/server/db/database-schema.d.ts +4 -2
  30. package/dist/data-plane/server/db/database-schema.d.ts.map +1 -1
  31. package/dist/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.d.ts +4 -0
  32. package/dist/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.d.ts.map +1 -0
  33. package/dist/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.js +15 -0
  34. package/dist/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.js.map +1 -0
  35. package/dist/data-plane/server/db/migrations/20240723T220703655Z-quotes.d.ts +4 -0
  36. package/dist/data-plane/server/db/migrations/20240723T220703655Z-quotes.d.ts.map +1 -0
  37. package/dist/data-plane/server/db/migrations/20240723T220703655Z-quotes.js +30 -0
  38. package/dist/data-plane/server/db/migrations/20240723T220703655Z-quotes.js.map +1 -0
  39. package/dist/data-plane/server/db/migrations/20240801T193939827Z-post-gate.d.ts +4 -0
  40. package/dist/data-plane/server/db/migrations/20240801T193939827Z-post-gate.d.ts.map +1 -0
  41. package/dist/data-plane/server/db/migrations/20240801T193939827Z-post-gate.js +20 -0
  42. package/dist/data-plane/server/db/migrations/20240801T193939827Z-post-gate.js.map +1 -0
  43. package/dist/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.d.ts +4 -0
  44. package/dist/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.d.ts.map +1 -0
  45. package/dist/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.js +28 -0
  46. package/dist/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.js.map +1 -0
  47. package/dist/data-plane/server/db/migrations/index.d.ts +4 -0
  48. package/dist/data-plane/server/db/migrations/index.d.ts.map +1 -1
  49. package/dist/data-plane/server/db/migrations/index.js +5 -1
  50. package/dist/data-plane/server/db/migrations/index.js.map +1 -1
  51. package/dist/data-plane/server/db/tables/post-agg.d.ts +1 -0
  52. package/dist/data-plane/server/db/tables/post-agg.d.ts.map +1 -1
  53. package/dist/data-plane/server/db/tables/post-gate.d.ts +14 -0
  54. package/dist/data-plane/server/db/tables/post-gate.d.ts.map +1 -0
  55. package/dist/data-plane/server/db/tables/post-gate.js +4 -0
  56. package/dist/data-plane/server/db/tables/post-gate.js.map +1 -0
  57. package/dist/data-plane/server/db/tables/post.d.ts +3 -0
  58. package/dist/data-plane/server/db/tables/post.d.ts.map +1 -1
  59. package/dist/data-plane/server/db/tables/quote.d.ts +16 -0
  60. package/dist/data-plane/server/db/tables/quote.d.ts.map +1 -0
  61. package/dist/data-plane/server/db/tables/quote.js +4 -0
  62. package/dist/data-plane/server/db/tables/quote.js.map +1 -0
  63. package/dist/data-plane/server/indexing/index.d.ts +2 -0
  64. package/dist/data-plane/server/indexing/index.d.ts.map +1 -1
  65. package/dist/data-plane/server/indexing/index.js +6 -0
  66. package/dist/data-plane/server/indexing/index.js.map +1 -1
  67. package/dist/data-plane/server/indexing/plugins/post-gate.d.ts +10 -0
  68. package/dist/data-plane/server/indexing/plugins/post-gate.d.ts.map +1 -0
  69. package/dist/data-plane/server/indexing/plugins/post-gate.js +101 -0
  70. package/dist/data-plane/server/indexing/plugins/post-gate.js.map +1 -0
  71. package/dist/data-plane/server/indexing/plugins/post.d.ts +2 -0
  72. package/dist/data-plane/server/indexing/plugins/post.d.ts.map +1 -1
  73. package/dist/data-plane/server/indexing/plugins/post.js +122 -15
  74. package/dist/data-plane/server/indexing/plugins/post.js.map +1 -1
  75. package/dist/data-plane/server/indexing/plugins/thread-gate.d.ts.map +1 -1
  76. package/dist/data-plane/server/indexing/plugins/thread-gate.js +12 -0
  77. package/dist/data-plane/server/indexing/plugins/thread-gate.js.map +1 -1
  78. package/dist/data-plane/server/routes/index.d.ts.map +1 -1
  79. package/dist/data-plane/server/routes/index.js +2 -0
  80. package/dist/data-plane/server/routes/index.js.map +1 -1
  81. package/dist/data-plane/server/routes/interactions.d.ts.map +1 -1
  82. package/dist/data-plane/server/routes/interactions.js +2 -1
  83. package/dist/data-plane/server/routes/interactions.js.map +1 -1
  84. package/dist/data-plane/server/routes/quotes.d.ts +6 -0
  85. package/dist/data-plane/server/routes/quotes.d.ts.map +1 -0
  86. package/dist/data-plane/server/routes/quotes.js +27 -0
  87. package/dist/data-plane/server/routes/quotes.js.map +1 -0
  88. package/dist/data-plane/server/routes/records.d.ts.map +1 -1
  89. package/dist/data-plane/server/routes/records.js +11 -1
  90. package/dist/data-plane/server/routes/records.js.map +1 -1
  91. package/dist/data-plane/server/util.d.ts +6 -7
  92. package/dist/data-plane/server/util.d.ts.map +1 -1
  93. package/dist/data-plane/server/util.js +1 -9
  94. package/dist/data-plane/server/util.js.map +1 -1
  95. package/dist/hydration/feed.d.ts +10 -0
  96. package/dist/hydration/feed.d.ts.map +1 -1
  97. package/dist/hydration/feed.js +31 -7
  98. package/dist/hydration/feed.js.map +1 -1
  99. package/dist/hydration/hydrator.d.ts +4 -2
  100. package/dist/hydration/hydrator.d.ts.map +1 -1
  101. package/dist/hydration/hydrator.js +89 -34
  102. package/dist/hydration/hydrator.js.map +1 -1
  103. package/dist/hydration/util.d.ts +0 -1
  104. package/dist/hydration/util.d.ts.map +1 -1
  105. package/dist/hydration/util.js +1 -5
  106. package/dist/hydration/util.js.map +1 -1
  107. package/dist/lexicon/index.d.ts +2 -0
  108. package/dist/lexicon/index.d.ts.map +1 -1
  109. package/dist/lexicon/index.js +4 -0
  110. package/dist/lexicon/index.js.map +1 -1
  111. package/dist/lexicon/lexicons.d.ts +144 -0
  112. package/dist/lexicon/lexicons.d.ts.map +1 -1
  113. package/dist/lexicon/lexicons.js +146 -1
  114. package/dist/lexicon/lexicons.js.map +1 -1
  115. package/dist/lexicon/types/app/bsky/embed/record.d.ts +9 -1
  116. package/dist/lexicon/types/app/bsky/embed/record.d.ts.map +1 -1
  117. package/dist/lexicon/types/app/bsky/embed/record.js +11 -1
  118. package/dist/lexicon/types/app/bsky/embed/record.js.map +1 -1
  119. package/dist/lexicon/types/app/bsky/feed/defs.d.ts +2 -0
  120. package/dist/lexicon/types/app/bsky/feed/defs.d.ts.map +1 -1
  121. package/dist/lexicon/types/app/bsky/feed/defs.js.map +1 -1
  122. package/dist/lexicon/types/app/bsky/feed/getQuotes.d.ts +44 -0
  123. package/dist/lexicon/types/app/bsky/feed/getQuotes.d.ts.map +1 -0
  124. package/dist/lexicon/types/app/bsky/feed/getQuotes.js +3 -0
  125. package/dist/lexicon/types/app/bsky/feed/getQuotes.js.map +1 -0
  126. package/dist/lexicon/types/app/bsky/feed/postgate.d.ts +25 -0
  127. package/dist/lexicon/types/app/bsky/feed/postgate.d.ts.map +1 -0
  128. package/dist/lexicon/types/app/bsky/feed/postgate.js +27 -0
  129. package/dist/lexicon/types/app/bsky/feed/postgate.js.map +1 -0
  130. package/dist/lexicon/types/app/bsky/feed/threadgate.d.ts +2 -0
  131. package/dist/lexicon/types/app/bsky/feed/threadgate.d.ts.map +1 -1
  132. package/dist/lexicon/types/app/bsky/feed/threadgate.js.map +1 -1
  133. package/dist/proto/bsky_connect.d.ts +30 -1
  134. package/dist/proto/bsky_connect.d.ts.map +1 -1
  135. package/dist/proto/bsky_connect.js +29 -0
  136. package/dist/proto/bsky_connect.js.map +1 -1
  137. package/dist/proto/bsky_pb.d.ts +135 -1
  138. package/dist/proto/bsky_pb.d.ts.map +1 -1
  139. package/dist/proto/bsky_pb.js +425 -5
  140. package/dist/proto/bsky_pb.js.map +1 -1
  141. package/dist/util/uris.d.ts +12 -0
  142. package/dist/util/uris.d.ts.map +1 -0
  143. package/dist/util/uris.js +34 -0
  144. package/dist/util/uris.js.map +1 -0
  145. package/dist/views/index.d.ts +8 -2
  146. package/dist/views/index.d.ts.map +1 -1
  147. package/dist/views/index.js +84 -39
  148. package/dist/views/index.js.map +1 -1
  149. package/dist/views/types.d.ts +1 -1
  150. package/dist/views/types.d.ts.map +1 -1
  151. package/dist/views/types.js.map +1 -1
  152. package/dist/views/util.d.ts +11 -1
  153. package/dist/views/util.d.ts.map +1 -1
  154. package/dist/views/util.js +19 -8
  155. package/dist/views/util.js.map +1 -1
  156. package/package.json +4 -4
  157. package/proto/bsky.proto +42 -2
  158. package/src/api/app/bsky/feed/getActorLikes.ts +1 -1
  159. package/src/api/app/bsky/feed/getLikes.ts +1 -1
  160. package/src/api/app/bsky/feed/getListFeed.ts +30 -3
  161. package/src/api/app/bsky/feed/getPosts.ts +1 -1
  162. package/src/api/app/bsky/feed/getQuotes.ts +108 -0
  163. package/src/api/app/bsky/feed/getRepostedBy.ts +1 -1
  164. package/src/api/app/bsky/feed/searchPosts.ts +1 -1
  165. package/src/api/app/bsky/graph/getFollowers.ts +1 -1
  166. package/src/api/app/bsky/graph/getList.ts +5 -5
  167. package/src/api/app/bsky/notification/listNotifications.ts +32 -6
  168. package/src/api/index.ts +2 -0
  169. package/src/data-plane/server/db/database-schema.ts +7 -3
  170. package/src/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.ts +12 -0
  171. package/src/data-plane/server/db/migrations/20240723T220703655Z-quotes.ts +28 -0
  172. package/src/data-plane/server/db/migrations/20240801T193939827Z-post-gate.ts +17 -0
  173. package/src/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.ts +25 -0
  174. package/src/data-plane/server/db/migrations/index.ts +4 -0
  175. package/src/data-plane/server/db/tables/post-agg.ts +1 -0
  176. package/src/data-plane/server/db/tables/post-gate.ts +12 -0
  177. package/src/data-plane/server/db/tables/post.ts +3 -0
  178. package/src/data-plane/server/db/tables/quote.ts +15 -0
  179. package/src/data-plane/server/indexing/index.ts +7 -0
  180. package/src/data-plane/server/indexing/plugins/post-gate.ts +104 -0
  181. package/src/data-plane/server/indexing/plugins/post.ts +151 -16
  182. package/src/data-plane/server/indexing/plugins/thread-gate.ts +12 -0
  183. package/src/data-plane/server/routes/index.ts +2 -0
  184. package/src/data-plane/server/routes/interactions.ts +2 -1
  185. package/src/data-plane/server/routes/quotes.ts +32 -0
  186. package/src/data-plane/server/routes/records.ts +11 -1
  187. package/src/data-plane/server/util.ts +0 -8
  188. package/src/hydration/feed.ts +58 -12
  189. package/src/hydration/hydrator.ts +94 -22
  190. package/src/hydration/util.ts +0 -4
  191. package/src/lexicon/index.ts +12 -0
  192. package/src/lexicon/lexicons.ts +149 -1
  193. package/src/lexicon/types/app/bsky/embed/record.ts +20 -0
  194. package/src/lexicon/types/app/bsky/feed/defs.ts +2 -0
  195. package/src/lexicon/types/app/bsky/feed/getQuotes.ts +54 -0
  196. package/src/lexicon/types/app/bsky/feed/postgate.ts +47 -0
  197. package/src/lexicon/types/app/bsky/feed/threadgate.ts +2 -0
  198. package/src/proto/bsky_connect.ts +35 -0
  199. package/src/proto/bsky_pb.ts +424 -1
  200. package/src/util/uris.ts +31 -0
  201. package/src/views/index.ts +91 -35
  202. package/src/views/types.ts +1 -0
  203. package/src/views/util.ts +37 -7
  204. package/tests/__snapshots__/feed-generation.test.ts.snap +42 -0
  205. package/tests/data-plane/__snapshots__/indexing.test.ts.snap +20 -0
  206. package/tests/data-plane/indexing.test.ts +1 -0
  207. package/tests/postgates.test.ts +186 -0
  208. package/tests/seed/feed-hidden-replies.ts +62 -0
  209. package/tests/seed/postgates.ts +56 -0
  210. package/tests/views/__snapshots__/author-feed.test.ts.snap +65 -0
  211. package/tests/views/__snapshots__/block-lists.test.ts.snap +7 -0
  212. package/tests/views/__snapshots__/blocks.test.ts.snap +11 -0
  213. package/tests/views/__snapshots__/list-feed.test.ts.snap +24 -0
  214. package/tests/views/__snapshots__/lists.test.ts.snap +185 -1
  215. package/tests/views/__snapshots__/mute-lists.test.ts.snap +8 -0
  216. package/tests/views/__snapshots__/mutes.test.ts.snap +6 -0
  217. package/tests/views/__snapshots__/posts.test.ts.snap +15 -0
  218. package/tests/views/__snapshots__/quotes.test.ts.snap +402 -0
  219. package/tests/views/__snapshots__/thread.test.ts.snap +50 -0
  220. package/tests/views/__snapshots__/timeline.test.ts.snap +191 -0
  221. package/tests/views/author-feed.test.ts +3 -9
  222. package/tests/views/feed-hidden-replies.test.ts +246 -0
  223. package/tests/views/feed-view-post.test.ts +501 -0
  224. package/tests/views/list-feed.test.ts +12 -0
  225. package/tests/views/lists.test.ts +83 -18
  226. package/tests/views/quotes.test.ts +105 -0
@@ -59,6 +59,7 @@ Array [
59
59
  "indexedAt": "1970-01-01T00:00:00.000Z",
60
60
  "labels": Array [],
61
61
  "likeCount": 0,
62
+ "quoteCount": 0,
62
63
  "record": Object {
63
64
  "$type": "app.bsky.feed.post",
64
65
  "createdAt": "1970-01-01T00:00:00.000Z",
@@ -68,6 +69,7 @@ Array [
68
69
  "repostCount": 0,
69
70
  "uri": "record(2)",
70
71
  "viewer": Object {
72
+ "embeddingDisabled": false,
71
73
  "threadMuted": false,
72
74
  },
73
75
  },
@@ -87,6 +89,7 @@ Array [
87
89
  "indexedAt": "1970-01-01T00:00:00.000Z",
88
90
  "labels": Array [],
89
91
  "likeCount": 0,
92
+ "quoteCount": 0,
90
93
  "record": Object {
91
94
  "$type": "app.bsky.feed.post",
92
95
  "createdAt": "1970-01-01T00:00:00.000Z",
@@ -106,6 +109,7 @@ Array [
106
109
  "repostCount": 1,
107
110
  "uri": "record(3)",
108
111
  "viewer": Object {
112
+ "embeddingDisabled": false,
109
113
  "threadMuted": false,
110
114
  },
111
115
  },
@@ -164,6 +168,7 @@ Array [
164
168
  },
165
169
  ],
166
170
  "likeCount": 0,
171
+ "quoteCount": 0,
167
172
  "record": Object {
168
173
  "$type": "app.bsky.feed.post",
169
174
  "createdAt": "1970-01-01T00:00:00.000Z",
@@ -199,6 +204,7 @@ Array [
199
204
  "repostCount": 0,
200
205
  "uri": "record(5)",
201
206
  "viewer": Object {
207
+ "embeddingDisabled": false,
202
208
  "threadMuted": false,
203
209
  },
204
210
  },
@@ -217,6 +223,7 @@ Array [
217
223
  "indexedAt": "1970-01-01T00:00:00.000Z",
218
224
  "labels": Array [],
219
225
  "likeCount": 3,
226
+ "quoteCount": 0,
220
227
  "record": Object {
221
228
  "$type": "app.bsky.feed.post",
222
229
  "createdAt": "1970-01-01T00:00:00.000000Z",
@@ -226,6 +233,7 @@ Array [
226
233
  "repostCount": 1,
227
234
  "uri": "record(4)",
228
235
  "viewer": Object {
236
+ "embeddingDisabled": false,
229
237
  "threadMuted": false,
230
238
  },
231
239
  },
@@ -282,6 +290,7 @@ Array [
282
290
  "indexedAt": "1970-01-01T00:00:00.000Z",
283
291
  "labels": Array [],
284
292
  "likeCount": 2,
293
+ "quoteCount": 1,
285
294
  "replyCount": 0,
286
295
  "repostCount": 0,
287
296
  "uri": "record(9)",
@@ -332,6 +341,7 @@ Array [
332
341
  "indexedAt": "1970-01-01T00:00:00.000Z",
333
342
  "labels": Array [],
334
343
  "likeCount": 0,
344
+ "quoteCount": 1,
335
345
  "replyCount": 0,
336
346
  "repostCount": 1,
337
347
  "uri": "record(7)",
@@ -374,6 +384,7 @@ Array [
374
384
  },
375
385
  ],
376
386
  "likeCount": 2,
387
+ "quoteCount": 0,
377
388
  "record": Object {
378
389
  "$type": "app.bsky.feed.post",
379
390
  "createdAt": "1970-01-01T00:00:00.000Z",
@@ -390,6 +401,7 @@ Array [
390
401
  "repostCount": 0,
391
402
  "uri": "record(6)",
392
403
  "viewer": Object {
404
+ "embeddingDisabled": false,
393
405
  "threadMuted": false,
394
406
  },
395
407
  },
@@ -409,6 +421,7 @@ Array [
409
421
  "indexedAt": "1970-01-01T00:00:00.000Z",
410
422
  "labels": Array [],
411
423
  "likeCount": 3,
424
+ "quoteCount": 0,
412
425
  "record": Object {
413
426
  "$type": "app.bsky.feed.post",
414
427
  "createdAt": "1970-01-01T00:00:00.000000Z",
@@ -418,6 +431,7 @@ Array [
418
431
  "repostCount": 1,
419
432
  "uri": "record(4)",
420
433
  "viewer": Object {
434
+ "embeddingDisabled": false,
421
435
  "threadMuted": false,
422
436
  },
423
437
  },
@@ -445,6 +459,7 @@ Array [
445
459
  },
446
460
  ],
447
461
  "likeCount": 0,
462
+ "quoteCount": 0,
448
463
  "record": Object {
449
464
  "$type": "app.bsky.feed.post",
450
465
  "createdAt": "1970-01-01T00:00:00.000Z",
@@ -462,6 +477,7 @@ Array [
462
477
  "repostCount": 0,
463
478
  "uri": "record(12)",
464
479
  "viewer": Object {
480
+ "embeddingDisabled": false,
465
481
  "threadMuted": false,
466
482
  },
467
483
  },
@@ -554,6 +570,7 @@ Object {
554
570
  "indexedAt": "1970-01-01T00:00:00.000Z",
555
571
  "labels": Array [],
556
572
  "likeCount": 0,
573
+ "quoteCount": 0,
557
574
  "record": Object {
558
575
  "$type": "app.bsky.feed.post",
559
576
  "createdAt": "1970-01-01T00:00:00.000Z",
@@ -577,6 +594,7 @@ Object {
577
594
  "repostCount": 0,
578
595
  "uri": "record(0)",
579
596
  "viewer": Object {
597
+ "embeddingDisabled": false,
580
598
  "threadMuted": false,
581
599
  },
582
600
  },
@@ -621,6 +639,7 @@ Object {
621
639
  "indexedAt": "1970-01-01T00:00:00.000Z",
622
640
  "labels": Array [],
623
641
  "likeCount": 0,
642
+ "quoteCount": 0,
624
643
  "record": Object {
625
644
  "$type": "app.bsky.feed.post",
626
645
  "createdAt": "1970-01-01T00:00:00.000Z",
@@ -644,6 +663,7 @@ Object {
644
663
  "repostCount": 0,
645
664
  "uri": "record(0)",
646
665
  "viewer": Object {
666
+ "embeddingDisabled": false,
647
667
  "threadMuted": false,
648
668
  },
649
669
  },
@@ -277,6 +277,7 @@ describe('indexing', () => {
277
277
  replyCount: 1,
278
278
  repostCount: 1,
279
279
  likeCount: 1,
280
+ quoteCount: 0,
280
281
  })
281
282
  // Cleanup
282
283
  const del = (uri: AtUri) => {
@@ -0,0 +1,186 @@
1
+ import { TestNetwork, SeedClient, RecordRef } from '@atproto/dev-env'
2
+ import AtpAgent, { AppBskyEmbedRecord } from '@atproto/api'
3
+
4
+ import { ids } from '../src/lexicon/lexicons'
5
+ import { postgatesSeed, Users } from './seed/postgates'
6
+
7
+ describe('postgates', () => {
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_postgates',
17
+ })
18
+ agent = network.bsky.getClient()
19
+ pdsAgent = network.pds.getClient()
20
+ sc = network.getSeedClient()
21
+
22
+ const result = await postgatesSeed(sc)
23
+ users = result.users
24
+
25
+ await network.processAll()
26
+ })
27
+
28
+ afterAll(async () => {
29
+ await network.close()
30
+ })
31
+
32
+ describe(`quotee <-> quoter`, () => {
33
+ it(`quotee detaches own post from quoter`, async () => {
34
+ const quoteePost = await sc.post(users.quotee.did, `post`)
35
+ const quoterPost = await sc.post(
36
+ users.quoter.did,
37
+ `quote post`,
38
+ undefined,
39
+ undefined,
40
+ quoteePost.ref,
41
+ )
42
+ await pdsAgent.api.app.bsky.feed.postgate.create(
43
+ {
44
+ repo: users.quotee.did,
45
+ rkey: quoteePost.ref.uri.rkey,
46
+ },
47
+ {
48
+ post: quoteePost.ref.uriStr,
49
+ createdAt: new Date().toISOString(),
50
+ detachedEmbeddingUris: [quoterPost.ref.uriStr],
51
+ },
52
+ sc.getHeaders(users.quotee.did),
53
+ )
54
+ await network.processAll()
55
+
56
+ const root = await agent.api.app.bsky.feed.getPostThread(
57
+ { uri: quoterPost.ref.uriStr },
58
+ {
59
+ headers: await network.serviceHeaders(
60
+ users.viewer.did,
61
+ ids.AppBskyFeedGetPostThread,
62
+ ),
63
+ },
64
+ )
65
+
66
+ expect(
67
+ // @ts-ignore I know more than you
68
+ AppBskyEmbedRecord.isViewDetached(root.data.thread.post.embed.record),
69
+ ).toBe(true)
70
+ })
71
+
72
+ it(`postgate made by bystander has no effect`, async () => {
73
+ const quoteePost = await sc.post(users.quotee.did, `post`)
74
+ const quoterPost = await sc.post(
75
+ users.quoter.did,
76
+ `quote post`,
77
+ undefined,
78
+ undefined,
79
+ quoteePost.ref,
80
+ )
81
+ await pdsAgent.api.app.bsky.feed.postgate.create(
82
+ {
83
+ repo: users.viewer.did,
84
+ rkey: quoteePost.ref.uri.rkey,
85
+ },
86
+ {
87
+ post: quoteePost.ref.uriStr,
88
+ createdAt: new Date().toISOString(),
89
+ detachedEmbeddingUris: [quoterPost.ref.uriStr],
90
+ },
91
+ sc.getHeaders(users.viewer.did),
92
+ )
93
+ await network.processAll()
94
+
95
+ const root = await agent.api.app.bsky.feed.getPostThread(
96
+ { uri: quoterPost.ref.uriStr },
97
+ {
98
+ headers: await network.serviceHeaders(
99
+ users.viewer.did,
100
+ ids.AppBskyFeedGetPostThread,
101
+ ),
102
+ },
103
+ )
104
+
105
+ expect(
106
+ // @ts-ignore I know more than you
107
+ AppBskyEmbedRecord.isViewDetached(root.data.thread.post.embed.record),
108
+ ).toBe(false)
109
+ })
110
+ })
111
+
112
+ describe(`embeddingRules`, () => {
113
+ it(`disables quoteposts`, async () => {
114
+ const quoteePost = await sc.post(users.quotee.did, `post`)
115
+ await pdsAgent.api.app.bsky.feed.postgate.create(
116
+ {
117
+ repo: users.quotee.did,
118
+ rkey: quoteePost.ref.uri.rkey,
119
+ },
120
+ {
121
+ post: quoteePost.ref.uriStr,
122
+ createdAt: new Date().toISOString(),
123
+ embeddingRules: [{ $type: 'app.bsky.feed.postgate#disableRule' }],
124
+ },
125
+ sc.getHeaders(users.quotee.did),
126
+ )
127
+ await network.processAll()
128
+
129
+ const root = await agent.api.app.bsky.feed.getPostThread(
130
+ { uri: quoteePost.ref.uriStr },
131
+ {
132
+ headers: await network.serviceHeaders(
133
+ users.viewer.did,
134
+ ids.AppBskyFeedGetPostThread,
135
+ ),
136
+ },
137
+ )
138
+
139
+ expect(
140
+ // @ts-ignore I know more than you
141
+ root.data.thread.post.viewer.embeddingDisabled,
142
+ ).toBe(true)
143
+ })
144
+
145
+ it(`quotepost created after quotes disabled hides embed`, async () => {
146
+ const quoteePost = await sc.post(users.quotee.did, `post`)
147
+ await pdsAgent.api.app.bsky.feed.postgate.create(
148
+ {
149
+ repo: users.quotee.did,
150
+ rkey: quoteePost.ref.uri.rkey,
151
+ },
152
+ {
153
+ post: quoteePost.ref.uriStr,
154
+ createdAt: new Date().toISOString(),
155
+ embeddingRules: [{ $type: 'app.bsky.feed.postgate#disableRule' }],
156
+ },
157
+ sc.getHeaders(users.quotee.did),
158
+ )
159
+ await network.processAll()
160
+
161
+ const quoterPost = await sc.post(
162
+ users.quoter.did,
163
+ `quote post`,
164
+ undefined,
165
+ undefined,
166
+ quoteePost.ref,
167
+ )
168
+ await network.processAll()
169
+
170
+ const root = await agent.api.app.bsky.feed.getPostThread(
171
+ { uri: quoterPost.ref.uriStr },
172
+ {
173
+ headers: await network.serviceHeaders(
174
+ users.viewer.did,
175
+ ids.AppBskyFeedGetPostThread,
176
+ ),
177
+ },
178
+ )
179
+
180
+ expect(
181
+ // @ts-ignore I know more than you
182
+ AppBskyEmbedRecord.isViewDetached(root.data.thread.post.embed.record),
183
+ ).toBe(true)
184
+ })
185
+ })
186
+ })
@@ -0,0 +1,62 @@
1
+ import { TestNetwork, SeedClient, TestNetworkNoAppView } from '@atproto/dev-env'
2
+
3
+ export type User = {
4
+ id: string
5
+ did: string
6
+ email: string
7
+ handle: string
8
+ password: string
9
+ displayName: string
10
+ description: string
11
+ selfLabels: undefined
12
+ }
13
+
14
+ function createUser(name: string): User {
15
+ return {
16
+ id: name,
17
+ // @ts-ignore overwritten below
18
+ did: undefined,
19
+ email: `${name}@test.com`,
20
+ handle: `${name}.test`,
21
+ password: `${name}-pass`,
22
+ displayName: name,
23
+ description: `hi im ${name} label_me`,
24
+ selfLabels: undefined,
25
+ }
26
+ }
27
+
28
+ const users = {
29
+ viewer: createUser('viewer'),
30
+
31
+ poster: createUser('poster'),
32
+ replier: createUser('replier'),
33
+ reposter: createUser('reposter'),
34
+ }
35
+
36
+ export type Users = typeof users
37
+
38
+ export async function feedHiddenRepliesSeed(
39
+ sc: SeedClient<TestNetwork | TestNetworkNoAppView>,
40
+ ) {
41
+ const u = structuredClone(users)
42
+
43
+ await sc.createAccount('poster', u.poster)
44
+ await sc.createAccount('replier', u.replier)
45
+ await sc.createAccount('viewer', u.viewer)
46
+ await sc.createAccount('reposter', u.reposter)
47
+
48
+ Object.values(u).forEach((user) => {
49
+ u[user.id].did = sc.dids[user.id]
50
+ })
51
+
52
+ await sc.follow(u.viewer.did, u.poster.did)
53
+ await sc.follow(u.viewer.did, u.replier.did)
54
+ await sc.follow(u.viewer.did, u.reposter.did)
55
+
56
+ await sc.network.processAll()
57
+
58
+ return {
59
+ users: u,
60
+ seedClient: sc,
61
+ }
62
+ }
@@ -0,0 +1,56 @@
1
+ import { TestNetwork, SeedClient, TestNetworkNoAppView } from '@atproto/dev-env'
2
+
3
+ export type User = {
4
+ id: string
5
+ did: string
6
+ email: string
7
+ handle: string
8
+ password: string
9
+ displayName: string
10
+ description: string
11
+ selfLabels: undefined
12
+ }
13
+
14
+ function createUser(name: string): User {
15
+ return {
16
+ id: name,
17
+ // @ts-ignore overwritten below
18
+ did: undefined,
19
+ email: `${name}@test.com`,
20
+ handle: `${name}.test`,
21
+ password: `${name}-pass`,
22
+ displayName: name,
23
+ description: `hi im ${name} label_me`,
24
+ selfLabels: undefined,
25
+ }
26
+ }
27
+
28
+ const users = {
29
+ viewer: createUser('viewer'),
30
+
31
+ quotee: createUser('quotee'),
32
+ quoter: createUser('quoter'),
33
+ }
34
+
35
+ export type Users = typeof users
36
+
37
+ export async function postgatesSeed(
38
+ sc: SeedClient<TestNetwork | TestNetworkNoAppView>,
39
+ ) {
40
+ const u = structuredClone(users)
41
+
42
+ await sc.createAccount('quotee', u.quotee)
43
+ await sc.createAccount('quoter', u.quoter)
44
+ await sc.createAccount('viewer', u.viewer)
45
+
46
+ Object.values(u).forEach((user) => {
47
+ u[user.id].did = sc.dids[user.id]
48
+ })
49
+
50
+ await sc.network.processAll()
51
+
52
+ return {
53
+ users: u,
54
+ seedClient: sc,
55
+ }
56
+ }