@atproto/bsky 0.0.61 → 0.0.63

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 (118) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/api/app/bsky/graph/muteThread.d.ts +4 -0
  3. package/dist/api/app/bsky/graph/muteThread.d.ts.map +1 -0
  4. package/dist/api/app/bsky/graph/muteThread.js +19 -0
  5. package/dist/api/app/bsky/graph/muteThread.js.map +1 -0
  6. package/dist/api/app/bsky/graph/unmuteThread.d.ts +4 -0
  7. package/dist/api/app/bsky/graph/unmuteThread.d.ts.map +1 -0
  8. package/dist/api/app/bsky/graph/unmuteThread.js +19 -0
  9. package/dist/api/app/bsky/graph/unmuteThread.js.map +1 -0
  10. package/dist/api/index.d.ts.map +1 -1
  11. package/dist/api/index.js +4 -0
  12. package/dist/api/index.js.map +1 -1
  13. package/dist/data-plane/bsync/index.d.ts.map +1 -1
  14. package/dist/data-plane/bsync/index.js +41 -15
  15. package/dist/data-plane/bsync/index.js.map +1 -1
  16. package/dist/data-plane/server/db/database-schema.d.ts +2 -1
  17. package/dist/data-plane/server/db/database-schema.d.ts.map +1 -1
  18. package/dist/data-plane/server/db/migrations/20240606T171229898Z-thread-mutes.d.ts +4 -0
  19. package/dist/data-plane/server/db/migrations/20240606T171229898Z-thread-mutes.d.ts.map +1 -0
  20. package/dist/data-plane/server/db/migrations/20240606T171229898Z-thread-mutes.js +18 -0
  21. package/dist/data-plane/server/db/migrations/20240606T171229898Z-thread-mutes.js.map +1 -0
  22. package/dist/data-plane/server/db/migrations/index.d.ts +1 -0
  23. package/dist/data-plane/server/db/migrations/index.d.ts.map +1 -1
  24. package/dist/data-plane/server/db/migrations/index.js +2 -1
  25. package/dist/data-plane/server/db/migrations/index.js.map +1 -1
  26. package/dist/data-plane/server/db/tables/thread-mute.d.ts +10 -0
  27. package/dist/data-plane/server/db/tables/thread-mute.d.ts.map +1 -0
  28. package/dist/data-plane/server/db/tables/thread-mute.js +5 -0
  29. package/dist/data-plane/server/db/tables/thread-mute.js.map +1 -0
  30. package/dist/data-plane/server/indexing/processor.d.ts +2 -0
  31. package/dist/data-plane/server/indexing/processor.d.ts.map +1 -1
  32. package/dist/data-plane/server/indexing/processor.js +28 -1
  33. package/dist/data-plane/server/indexing/processor.js.map +1 -1
  34. package/dist/data-plane/server/routes/mutes.d.ts.map +1 -1
  35. package/dist/data-plane/server/routes/mutes.js +16 -0
  36. package/dist/data-plane/server/routes/mutes.js.map +1 -1
  37. package/dist/data-plane/server/util.d.ts +6 -6
  38. package/dist/hydration/feed.d.ts +6 -1
  39. package/dist/hydration/feed.d.ts.map +1 -1
  40. package/dist/hydration/feed.js +16 -2
  41. package/dist/hydration/feed.js.map +1 -1
  42. package/dist/hydration/hydrator.d.ts.map +1 -1
  43. package/dist/hydration/hydrator.js +13 -6
  44. package/dist/hydration/hydrator.js.map +1 -1
  45. package/dist/hydration/util.d.ts +1 -1
  46. package/dist/hydration/util.d.ts.map +1 -1
  47. package/dist/hydration/util.js.map +1 -1
  48. package/dist/lexicon/index.d.ts +4 -0
  49. package/dist/lexicon/index.d.ts.map +1 -1
  50. package/dist/lexicon/index.js +8 -0
  51. package/dist/lexicon/index.js.map +1 -1
  52. package/dist/lexicon/lexicons.d.ts +51 -0
  53. package/dist/lexicon/lexicons.d.ts.map +1 -1
  54. package/dist/lexicon/lexicons.js +51 -0
  55. package/dist/lexicon/lexicons.js.map +1 -1
  56. package/dist/lexicon/types/app/bsky/feed/defs.d.ts +1 -0
  57. package/dist/lexicon/types/app/bsky/feed/defs.d.ts.map +1 -1
  58. package/dist/lexicon/types/app/bsky/feed/defs.js.map +1 -1
  59. package/dist/lexicon/types/app/bsky/graph/muteThread.d.ts +29 -0
  60. package/dist/lexicon/types/app/bsky/graph/muteThread.d.ts.map +1 -0
  61. package/dist/lexicon/types/app/bsky/graph/muteThread.js +3 -0
  62. package/dist/lexicon/types/app/bsky/graph/muteThread.js.map +1 -0
  63. package/dist/lexicon/types/app/bsky/graph/unmuteThread.d.ts +29 -0
  64. package/dist/lexicon/types/app/bsky/graph/unmuteThread.d.ts.map +1 -0
  65. package/dist/lexicon/types/app/bsky/graph/unmuteThread.js +3 -0
  66. package/dist/lexicon/types/app/bsky/graph/unmuteThread.js.map +1 -0
  67. package/dist/logger.d.ts +2 -1
  68. package/dist/logger.d.ts.map +1 -1
  69. package/dist/logger.js +77 -63
  70. package/dist/logger.js.map +1 -1
  71. package/dist/proto/bsky_connect.d.ts +39 -1
  72. package/dist/proto/bsky_connect.d.ts.map +1 -1
  73. package/dist/proto/bsky_connect.js +38 -0
  74. package/dist/proto/bsky_connect.js.map +1 -1
  75. package/dist/proto/bsky_pb.d.ts +136 -0
  76. package/dist/proto/bsky_pb.d.ts.map +1 -1
  77. package/dist/proto/bsky_pb.js +430 -3
  78. package/dist/proto/bsky_pb.js.map +1 -1
  79. package/dist/views/index.d.ts.map +1 -1
  80. package/dist/views/index.js +1 -0
  81. package/dist/views/index.js.map +1 -1
  82. package/package.json +5 -5
  83. package/proto/bsky.proto +41 -0
  84. package/src/api/app/bsky/graph/muteThread.ts +18 -0
  85. package/src/api/app/bsky/graph/unmuteThread.ts +18 -0
  86. package/src/api/index.ts +4 -0
  87. package/src/data-plane/bsync/index.ts +39 -15
  88. package/src/data-plane/server/db/database-schema.ts +2 -0
  89. package/src/data-plane/server/db/migrations/20240606T171229898Z-thread-mutes.ts +15 -0
  90. package/src/data-plane/server/db/migrations/index.ts +1 -0
  91. package/src/data-plane/server/db/tables/thread-mute.ts +9 -0
  92. package/src/data-plane/server/indexing/processor.ts +29 -1
  93. package/src/data-plane/server/routes/mutes.ts +17 -0
  94. package/src/hydration/feed.ts +23 -3
  95. package/src/hydration/hydrator.ts +14 -6
  96. package/src/hydration/util.ts +1 -3
  97. package/src/lexicon/index.ts +24 -0
  98. package/src/lexicon/lexicons.ts +52 -0
  99. package/src/lexicon/types/app/bsky/feed/defs.ts +1 -0
  100. package/src/lexicon/types/app/bsky/graph/muteThread.ts +38 -0
  101. package/src/lexicon/types/app/bsky/graph/unmuteThread.ts +38 -0
  102. package/src/logger.ts +81 -38
  103. package/src/proto/bsky_connect.ts +46 -0
  104. package/src/proto/bsky_pb.ts +465 -0
  105. package/src/views/index.ts +1 -0
  106. package/tests/__snapshots__/feed-generation.test.ts.snap +38 -12
  107. package/tests/data-plane/__snapshots__/indexing.test.ts.snap +27 -9
  108. package/tests/data-plane/thread-mutes.test.ts +140 -0
  109. package/tests/views/__snapshots__/author-feed.test.ts.snap +62 -17
  110. package/tests/views/__snapshots__/block-lists.test.ts.snap +7 -2
  111. package/tests/views/__snapshots__/blocks.test.ts.snap +13 -4
  112. package/tests/views/__snapshots__/list-feed.test.ts.snap +23 -6
  113. package/tests/views/__snapshots__/mute-lists.test.ts.snap +10 -3
  114. package/tests/views/__snapshots__/mutes.test.ts.snap +9 -3
  115. package/tests/views/__snapshots__/posts.test.ts.snap +16 -5
  116. package/tests/views/__snapshots__/thread.test.ts.snap +53 -14
  117. package/tests/views/__snapshots__/timeline.test.ts.snap +213 -64
  118. package/tests/views/threadgating.test.ts +19 -19
@@ -59,7 +59,7 @@ describe('views with thread gating', () => {
59
59
  )
60
60
  assert(isThreadViewPost(thread))
61
61
  expect(forSnapshot(thread.post.threadgate)).toMatchSnapshot()
62
- expect(thread.post.viewer).toEqual({ replyDisabled: true })
62
+ expect(thread.post.viewer?.replyDisabled).toBe(true)
63
63
  expect(thread.replies?.length).toEqual(0)
64
64
  await checkReplyDisabled(post.ref.uriStr, sc.dids.alice, true)
65
65
  })
@@ -140,7 +140,7 @@ describe('views with thread gating', () => {
140
140
  { headers: await network.serviceHeaders(sc.dids.alice) },
141
141
  )
142
142
  assert(isThreadViewPost(aliceThread))
143
- expect(aliceThread.post.viewer).toEqual({ replyDisabled: true })
143
+ expect(aliceThread.post.viewer?.replyDisabled).toBe(true)
144
144
  await checkReplyDisabled(post.ref.uriStr, sc.dids.alice, true)
145
145
  const {
146
146
  data: { thread: danThread },
@@ -150,7 +150,7 @@ describe('views with thread gating', () => {
150
150
  )
151
151
  assert(isThreadViewPost(danThread))
152
152
  expect(forSnapshot(danThread.post.threadgate)).toMatchSnapshot()
153
- expect(danThread.post.viewer).toEqual({ replyDisabled: false })
153
+ expect(danThread.post.viewer?.replyDisabled).toBe(false)
154
154
  await checkReplyDisabled(post.ref.uriStr, sc.dids.dan, false)
155
155
  const [reply, ...otherReplies] = danThread.replies ?? []
156
156
  assert(isThreadViewPost(reply))
@@ -191,7 +191,7 @@ describe('views with thread gating', () => {
191
191
  { headers: await network.serviceHeaders(sc.dids.dan) },
192
192
  )
193
193
  assert(isThreadViewPost(danThread))
194
- expect(danThread.post.viewer).toEqual({ replyDisabled: true })
194
+ expect(danThread.post.viewer?.replyDisabled).toBe(true)
195
195
  await checkReplyDisabled(post.ref.uriStr, sc.dids.dan, true)
196
196
  const {
197
197
  data: { thread: aliceThread },
@@ -201,7 +201,7 @@ describe('views with thread gating', () => {
201
201
  )
202
202
  assert(isThreadViewPost(aliceThread))
203
203
  expect(forSnapshot(aliceThread.post.threadgate)).toMatchSnapshot()
204
- expect(aliceThread.post.viewer).toEqual({ replyDisabled: false })
204
+ expect(aliceThread.post.viewer?.replyDisabled).toBe(false)
205
205
  await checkReplyDisabled(post.ref.uriStr, sc.dids.alice, false)
206
206
  const [reply, ...otherReplies] = aliceThread.replies ?? []
207
207
  assert(isThreadViewPost(reply))
@@ -283,7 +283,7 @@ describe('views with thread gating', () => {
283
283
  { headers: await network.serviceHeaders(sc.dids.bob) },
284
284
  )
285
285
  assert(isThreadViewPost(bobThread))
286
- expect(bobThread.post.viewer).toEqual({ replyDisabled: true })
286
+ expect(bobThread.post.viewer?.replyDisabled).toBe(true)
287
287
  await checkReplyDisabled(post.ref.uriStr, sc.dids.bob, true)
288
288
  const {
289
289
  data: { thread: aliceThread },
@@ -292,7 +292,7 @@ describe('views with thread gating', () => {
292
292
  { headers: await network.serviceHeaders(sc.dids.alice) },
293
293
  )
294
294
  assert(isThreadViewPost(aliceThread))
295
- expect(aliceThread.post.viewer).toEqual({ replyDisabled: false })
295
+ expect(aliceThread.post.viewer?.replyDisabled).toBe(false)
296
296
  await checkReplyDisabled(post.ref.uriStr, sc.dids.alice, false)
297
297
  const {
298
298
  data: { thread: danThread },
@@ -302,7 +302,7 @@ describe('views with thread gating', () => {
302
302
  )
303
303
  assert(isThreadViewPost(danThread))
304
304
  expect(forSnapshot(danThread.post.threadgate)).toMatchSnapshot()
305
- expect(danThread.post.viewer).toEqual({ replyDisabled: false })
305
+ expect(danThread.post.viewer?.replyDisabled).toBe(false)
306
306
  await checkReplyDisabled(post.ref.uriStr, sc.dids.dan, false)
307
307
  const [reply1, reply2, ...otherReplies] = aliceThread.replies ?? []
308
308
  assert(isThreadViewPost(reply1))
@@ -345,7 +345,7 @@ describe('views with thread gating', () => {
345
345
  )
346
346
  assert(isThreadViewPost(thread))
347
347
  expect(forSnapshot(thread.post.threadgate)).toMatchSnapshot()
348
- expect(thread.post.viewer).toEqual({ replyDisabled: true })
348
+ expect(thread.post.viewer?.replyDisabled).toBe(true)
349
349
  expect(thread.replies?.length).toEqual(0)
350
350
  await checkReplyDisabled(post.ref.uriStr, sc.dids.alice, true)
351
351
  })
@@ -394,7 +394,7 @@ describe('views with thread gating', () => {
394
394
  { headers: await network.serviceHeaders(sc.dids.bob) },
395
395
  )
396
396
  assert(isThreadViewPost(bobThread))
397
- expect(bobThread.post.viewer).toEqual({ replyDisabled: true })
397
+ expect(bobThread.post.viewer?.replyDisabled).toBe(true)
398
398
  await checkReplyDisabled(post.ref.uriStr, sc.dids.bob, true)
399
399
  const {
400
400
  data: { thread: aliceThread },
@@ -403,7 +403,7 @@ describe('views with thread gating', () => {
403
403
  { headers: await network.serviceHeaders(sc.dids.alice) },
404
404
  )
405
405
  assert(isThreadViewPost(aliceThread))
406
- expect(aliceThread.post.viewer).toEqual({ replyDisabled: false })
406
+ expect(aliceThread.post.viewer?.replyDisabled).toBe(false)
407
407
  await checkReplyDisabled(post.ref.uriStr, sc.dids.alice, false)
408
408
  const {
409
409
  data: { thread: danThread },
@@ -413,7 +413,7 @@ describe('views with thread gating', () => {
413
413
  )
414
414
  assert(isThreadViewPost(danThread))
415
415
  expect(forSnapshot(danThread.post.threadgate)).toMatchSnapshot()
416
- expect(danThread.post.viewer).toEqual({ replyDisabled: false })
416
+ expect(danThread.post.viewer?.replyDisabled).toBe(false)
417
417
  await checkReplyDisabled(post.ref.uriStr, sc.dids.dan, false)
418
418
  const [reply1, reply2, ...otherReplies] = aliceThread.replies ?? []
419
419
  assert(isThreadViewPost(reply1))
@@ -447,7 +447,7 @@ describe('views with thread gating', () => {
447
447
  )
448
448
  assert(isThreadViewPost(thread))
449
449
  expect(forSnapshot(thread.post.threadgate)).toMatchSnapshot()
450
- expect(thread.post.viewer).toEqual({ replyDisabled: false })
450
+ expect(thread.post.viewer?.replyDisabled).toBe(false)
451
451
  await checkReplyDisabled(post.ref.uriStr, sc.dids.alice, false)
452
452
  const [reply, ...otherReplies] = thread.replies ?? []
453
453
  assert(isThreadViewPost(reply))
@@ -500,7 +500,7 @@ describe('views with thread gating', () => {
500
500
  { headers: await network.serviceHeaders(sc.dids.dan) },
501
501
  )
502
502
  assert(isThreadViewPost(danThread))
503
- expect(danThread.post.viewer).toEqual({ replyDisabled: true })
503
+ expect(danThread.post.viewer?.replyDisabled).toBe(true)
504
504
  await checkReplyDisabled(orphanedReply.ref.uriStr, sc.dids.dan, true)
505
505
  const {
506
506
  data: { thread: aliceThread },
@@ -514,7 +514,7 @@ describe('views with thread gating', () => {
514
514
  aliceThread.parent.uri === post.ref.uriStr,
515
515
  )
516
516
  expect(aliceThread.post.threadgate).toMatchSnapshot()
517
- expect(aliceThread.post.viewer).toEqual({ replyDisabled: false })
517
+ expect(aliceThread.post.viewer?.replyDisabled).toBe(false)
518
518
  await checkReplyDisabled(orphanedReply.ref.uriStr, sc.dids.alice, false)
519
519
  const [reply, ...otherReplies] = aliceThread.replies ?? []
520
520
  assert(isThreadViewPost(reply))
@@ -545,7 +545,7 @@ describe('views with thread gating', () => {
545
545
  )
546
546
  assert(isThreadViewPost(thread))
547
547
  expect(forSnapshot(thread.post.threadgate)).toMatchSnapshot()
548
- expect(thread.post.viewer).toEqual({ replyDisabled: false })
548
+ expect(thread.post.viewer?.replyDisabled).toBe(false)
549
549
  await checkReplyDisabled(post.ref.uriStr, sc.dids.carol, false)
550
550
  const [reply, ...otherReplies] = thread.replies ?? []
551
551
  assert(isThreadViewPost(reply))
@@ -583,7 +583,7 @@ describe('views with thread gating', () => {
583
583
  { headers: await network.serviceHeaders(sc.dids.alice) },
584
584
  )
585
585
  assert(isThreadViewPost(thread))
586
- expect(thread.post.viewer).toEqual({ replyDisabled: true }) // nobody can reply to this, not even alice.
586
+ expect(thread.post.viewer?.replyDisabled).toBe(true) // nobody can reply to this, not even alice.
587
587
  expect(thread.replies).toBeUndefined()
588
588
  expect(thread.parent).toBeUndefined()
589
589
  expect(thread.post.threadgate).toBeUndefined()
@@ -621,7 +621,7 @@ describe('views with thread gating', () => {
621
621
  )
622
622
  assert(isThreadViewPost(threadA))
623
623
  expect(threadA.post.threadgate).toBeUndefined()
624
- expect(threadA.post.viewer).toEqual({})
624
+ expect(threadA.post.viewer?.replyDisabled).toBeUndefined()
625
625
  expect(threadA.replies?.length).toEqual(1)
626
626
  await checkReplyDisabled(postA.ref.uriStr, sc.dids.alice, undefined)
627
627
  const {
@@ -632,7 +632,7 @@ describe('views with thread gating', () => {
632
632
  )
633
633
  assert(isThreadViewPost(threadB))
634
634
  expect(threadB.post.threadgate).toBeUndefined()
635
- expect(threadB.post.viewer).toEqual({})
635
+ expect(threadB.post.viewer?.replyDisabled).toBe(undefined)
636
636
  await checkReplyDisabled(postB.ref.uriStr, sc.dids.alice, undefined)
637
637
  expect(threadB.replies?.length).toEqual(1)
638
638
  })