@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
@@ -67,9 +67,7 @@ export const parseRecordBytes = <T>(
67
67
  return parseJsonBytes(bytes) as T
68
68
  }
69
69
 
70
- export const parseJsonBytes = (
71
- bytes: Uint8Array | undefined,
72
- ): JSON | undefined => {
70
+ export const parseJsonBytes = (bytes: Uint8Array | undefined): unknown => {
73
71
  if (!bytes || bytes.byteLength === 0) return
74
72
  const parsed = JSON.parse(ui8.toString(bytes, 'utf8'))
75
73
  return parsed ?? undefined
@@ -120,8 +120,10 @@ import * as AppBskyGraphGetRelationships from './types/app/bsky/graph/getRelatio
120
120
  import * as AppBskyGraphGetSuggestedFollowsByActor from './types/app/bsky/graph/getSuggestedFollowsByActor'
121
121
  import * as AppBskyGraphMuteActor from './types/app/bsky/graph/muteActor'
122
122
  import * as AppBskyGraphMuteActorList from './types/app/bsky/graph/muteActorList'
123
+ import * as AppBskyGraphMuteThread from './types/app/bsky/graph/muteThread'
123
124
  import * as AppBskyGraphUnmuteActor from './types/app/bsky/graph/unmuteActor'
124
125
  import * as AppBskyGraphUnmuteActorList from './types/app/bsky/graph/unmuteActorList'
126
+ import * as AppBskyGraphUnmuteThread from './types/app/bsky/graph/unmuteThread'
125
127
  import * as AppBskyLabelerGetServices from './types/app/bsky/labeler/getServices'
126
128
  import * as AppBskyNotificationGetUnreadCount from './types/app/bsky/notification/getUnreadCount'
127
129
  import * as AppBskyNotificationListNotifications from './types/app/bsky/notification/listNotifications'
@@ -1584,6 +1586,17 @@ export class AppBskyGraphNS {
1584
1586
  return this._server.xrpc.method(nsid, cfg)
1585
1587
  }
1586
1588
 
1589
+ muteThread<AV extends AuthVerifier>(
1590
+ cfg: ConfigOf<
1591
+ AV,
1592
+ AppBskyGraphMuteThread.Handler<ExtractAuth<AV>>,
1593
+ AppBskyGraphMuteThread.HandlerReqCtx<ExtractAuth<AV>>
1594
+ >,
1595
+ ) {
1596
+ const nsid = 'app.bsky.graph.muteThread' // @ts-ignore
1597
+ return this._server.xrpc.method(nsid, cfg)
1598
+ }
1599
+
1587
1600
  unmuteActor<AV extends AuthVerifier>(
1588
1601
  cfg: ConfigOf<
1589
1602
  AV,
@@ -1605,6 +1618,17 @@ export class AppBskyGraphNS {
1605
1618
  const nsid = 'app.bsky.graph.unmuteActorList' // @ts-ignore
1606
1619
  return this._server.xrpc.method(nsid, cfg)
1607
1620
  }
1621
+
1622
+ unmuteThread<AV extends AuthVerifier>(
1623
+ cfg: ConfigOf<
1624
+ AV,
1625
+ AppBskyGraphUnmuteThread.Handler<ExtractAuth<AV>>,
1626
+ AppBskyGraphUnmuteThread.HandlerReqCtx<ExtractAuth<AV>>
1627
+ >,
1628
+ ) {
1629
+ const nsid = 'app.bsky.graph.unmuteThread' // @ts-ignore
1630
+ return this._server.xrpc.method(nsid, cfg)
1631
+ }
1608
1632
  }
1609
1633
 
1610
1634
  export class AppBskyLabelerNS {
@@ -5102,6 +5102,9 @@ export const schemaDict = {
5102
5102
  type: 'string',
5103
5103
  format: 'at-uri',
5104
5104
  },
5105
+ threadMuted: {
5106
+ type: 'boolean',
5107
+ },
5105
5108
  replyDisabled: {
5106
5109
  type: 'boolean',
5107
5110
  },
@@ -7675,6 +7678,30 @@ export const schemaDict = {
7675
7678
  },
7676
7679
  },
7677
7680
  },
7681
+ AppBskyGraphMuteThread: {
7682
+ lexicon: 1,
7683
+ id: 'app.bsky.graph.muteThread',
7684
+ defs: {
7685
+ main: {
7686
+ type: 'procedure',
7687
+ description:
7688
+ 'Mutes a thread preventing notifications from the thread and any of its children. Mutes are private in Bluesky. Requires auth.',
7689
+ input: {
7690
+ encoding: 'application/json',
7691
+ schema: {
7692
+ type: 'object',
7693
+ required: ['root'],
7694
+ properties: {
7695
+ root: {
7696
+ type: 'string',
7697
+ format: 'at-uri',
7698
+ },
7699
+ },
7700
+ },
7701
+ },
7702
+ },
7703
+ },
7704
+ },
7678
7705
  AppBskyGraphUnmuteActor: {
7679
7706
  lexicon: 1,
7680
7707
  id: 'app.bsky.graph.unmuteActor',
@@ -7721,6 +7748,29 @@ export const schemaDict = {
7721
7748
  },
7722
7749
  },
7723
7750
  },
7751
+ AppBskyGraphUnmuteThread: {
7752
+ lexicon: 1,
7753
+ id: 'app.bsky.graph.unmuteThread',
7754
+ defs: {
7755
+ main: {
7756
+ type: 'procedure',
7757
+ description: 'Unmutes the specified thread. Requires auth.',
7758
+ input: {
7759
+ encoding: 'application/json',
7760
+ schema: {
7761
+ type: 'object',
7762
+ required: ['root'],
7763
+ properties: {
7764
+ root: {
7765
+ type: 'string',
7766
+ format: 'at-uri',
7767
+ },
7768
+ },
7769
+ },
7770
+ },
7771
+ },
7772
+ },
7773
+ },
7724
7774
  AppBskyLabelerDefs: {
7725
7775
  lexicon: 1,
7726
7776
  id: 'app.bsky.labeler.defs',
@@ -9613,8 +9663,10 @@ export const ids = {
9613
9663
  AppBskyGraphListitem: 'app.bsky.graph.listitem',
9614
9664
  AppBskyGraphMuteActor: 'app.bsky.graph.muteActor',
9615
9665
  AppBskyGraphMuteActorList: 'app.bsky.graph.muteActorList',
9666
+ AppBskyGraphMuteThread: 'app.bsky.graph.muteThread',
9616
9667
  AppBskyGraphUnmuteActor: 'app.bsky.graph.unmuteActor',
9617
9668
  AppBskyGraphUnmuteActorList: 'app.bsky.graph.unmuteActorList',
9669
+ AppBskyGraphUnmuteThread: 'app.bsky.graph.unmuteThread',
9618
9670
  AppBskyLabelerDefs: 'app.bsky.labeler.defs',
9619
9671
  AppBskyLabelerGetServices: 'app.bsky.labeler.getServices',
9620
9672
  AppBskyLabelerService: 'app.bsky.labeler.service',
@@ -49,6 +49,7 @@ export function validatePostView(v: unknown): ValidationResult {
49
49
  export interface ViewerState {
50
50
  repost?: string
51
51
  like?: string
52
+ threadMuted?: boolean
52
53
  replyDisabled?: boolean
53
54
  [k: string]: unknown
54
55
  }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * GENERATED CODE - DO NOT MODIFY
3
+ */
4
+ import express from 'express'
5
+ import { ValidationResult, BlobRef } from '@atproto/lexicon'
6
+ import { lexicons } from '../../../../lexicons'
7
+ import { isObj, hasProp } from '../../../../util'
8
+ import { CID } from 'multiformats/cid'
9
+ import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server'
10
+
11
+ export interface QueryParams {}
12
+
13
+ export interface InputSchema {
14
+ root: string
15
+ [k: string]: unknown
16
+ }
17
+
18
+ export interface HandlerInput {
19
+ encoding: 'application/json'
20
+ body: InputSchema
21
+ }
22
+
23
+ export interface HandlerError {
24
+ status: number
25
+ message?: string
26
+ }
27
+
28
+ export type HandlerOutput = HandlerError | void
29
+ export type HandlerReqCtx<HA extends HandlerAuth = never> = {
30
+ auth: HA
31
+ params: QueryParams
32
+ input: HandlerInput
33
+ req: express.Request
34
+ res: express.Response
35
+ }
36
+ export type Handler<HA extends HandlerAuth = never> = (
37
+ ctx: HandlerReqCtx<HA>,
38
+ ) => Promise<HandlerOutput> | HandlerOutput
@@ -0,0 +1,38 @@
1
+ /**
2
+ * GENERATED CODE - DO NOT MODIFY
3
+ */
4
+ import express from 'express'
5
+ import { ValidationResult, BlobRef } from '@atproto/lexicon'
6
+ import { lexicons } from '../../../../lexicons'
7
+ import { isObj, hasProp } from '../../../../util'
8
+ import { CID } from 'multiformats/cid'
9
+ import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server'
10
+
11
+ export interface QueryParams {}
12
+
13
+ export interface InputSchema {
14
+ root: string
15
+ [k: string]: unknown
16
+ }
17
+
18
+ export interface HandlerInput {
19
+ encoding: 'application/json'
20
+ body: InputSchema
21
+ }
22
+
23
+ export interface HandlerError {
24
+ status: number
25
+ message?: string
26
+ }
27
+
28
+ export type HandlerOutput = HandlerError | void
29
+ export type HandlerReqCtx<HA extends HandlerAuth = never> = {
30
+ auth: HA
31
+ params: QueryParams
32
+ input: HandlerInput
33
+ req: express.Request
34
+ res: express.Response
35
+ }
36
+ export type Handler<HA extends HandlerAuth = never> = (
37
+ ctx: HandlerReqCtx<HA>,
38
+ ) => Promise<HandlerOutput> | HandlerOutput
package/src/logger.ts CHANGED
@@ -1,8 +1,6 @@
1
- import pino from 'pino'
1
+ import { stdSerializers } from 'pino'
2
2
  import pinoHttp from 'pino-http'
3
- import * as jose from 'jose'
4
3
  import { subsystemLogger } from '@atproto/common'
5
- import { parseBasicAuth } from './auth-verifier'
6
4
 
7
5
  export const dbLogger: ReturnType<typeof subsystemLogger> =
8
6
  subsystemLogger('bsky:db')
@@ -20,40 +18,85 @@ export const httpLogger: ReturnType<typeof subsystemLogger> =
20
18
  export const loggerMiddleware = pinoHttp({
21
19
  logger: httpLogger,
22
20
  serializers: {
23
- err: (err) => {
24
- return {
25
- code: err?.code,
26
- message: err?.message,
27
- }
28
- },
29
- req: (req) => {
30
- const serialized = pino.stdSerializers.req(req)
31
- const authHeader = serialized.headers.authorization || ''
32
- let auth: string | undefined = undefined
33
- if (authHeader.startsWith('Bearer ')) {
34
- const token = authHeader.slice('Bearer '.length)
35
- const { iss } = jose.decodeJwt(token)
36
- if (iss) {
37
- auth = 'Bearer ' + iss
38
- } else {
39
- auth = 'Bearer Invalid'
40
- }
41
- }
42
- if (authHeader.startsWith('Basic ')) {
43
- const parsed = parseBasicAuth(authHeader)
44
- if (!parsed) {
45
- auth = 'Basic Invalid'
46
- } else {
47
- auth = 'Basic ' + parsed.username
48
- }
49
- }
50
- return {
51
- ...serialized,
52
- headers: {
53
- ...serialized.headers,
54
- authorization: auth,
55
- },
56
- }
57
- },
21
+ err: errSerializer,
22
+ req: reqSerializer,
58
23
  },
59
24
  })
25
+
26
+ function errSerializer(err: any) {
27
+ return {
28
+ code: err?.code,
29
+ message: err?.message,
30
+ }
31
+ }
32
+
33
+ function reqSerializer(req: any) {
34
+ const serialized = stdSerializers.req(req)
35
+ serialized.headers = obfuscateHeaders(serialized.headers)
36
+ return serialized
37
+ }
38
+
39
+ function obfuscateHeaders(headers: Record<string, string>) {
40
+ const obfuscatedHeaders: Record<string, string> = {}
41
+ for (const key in headers) {
42
+ if (key.toLowerCase() === 'authorization') {
43
+ obfuscatedHeaders[key] = obfuscateAuthHeader(headers[key])
44
+ } else if (key.toLowerCase() === 'dpop') {
45
+ obfuscatedHeaders[key] = obfuscateJws(headers[key]) || 'Invalid'
46
+ } else {
47
+ obfuscatedHeaders[key] = headers[key]
48
+ }
49
+ }
50
+ return obfuscatedHeaders
51
+ }
52
+
53
+ function obfuscateAuthHeader(authHeader: string): string {
54
+ // This is a hot path (runs on every request). Avoid using split() or regex.
55
+
56
+ const spaceIdx = authHeader.indexOf(' ')
57
+ if (spaceIdx === -1) return 'Invalid'
58
+
59
+ const type = authHeader.slice(0, spaceIdx)
60
+ switch (type.toLowerCase()) {
61
+ case 'bearer':
62
+ return `${type} ${obfuscateBearer(authHeader.slice(spaceIdx + 1))}`
63
+ case 'dpop':
64
+ return `${type} ${obfuscateJws(authHeader.slice(spaceIdx + 1)) || 'Invalid'}`
65
+ case 'basic':
66
+ return `${type} ${obfuscateBasic(authHeader.slice(spaceIdx + 1)) || 'Invalid'}`
67
+ default:
68
+ return `Invalid`
69
+ }
70
+ }
71
+
72
+ function obfuscateBasic(token: string): null | string {
73
+ if (!token) return null
74
+ const buffer = Buffer.from(token, 'base64')
75
+ if (!buffer.length) return null // Buffer.from will silently ignore invalid base64 chars
76
+ const authHeader = buffer.toString('utf8')
77
+ const colIdx = authHeader.indexOf(':')
78
+ if (colIdx === -1) return null
79
+ const username = authHeader.slice(0, colIdx)
80
+ return `${username}:***`
81
+ }
82
+
83
+ function obfuscateBearer(token: string): string {
84
+ return obfuscateJws(token) || obfuscateToken(token)
85
+ }
86
+
87
+ function obfuscateToken(token: string): string {
88
+ return token ? '***' : ''
89
+ }
90
+
91
+ function obfuscateJws(token: string): null | string {
92
+ const firstDot = token.indexOf('.')
93
+ if (firstDot === -1) return null
94
+
95
+ const secondDot = token.indexOf('.', firstDot + 1)
96
+ if (secondDot === -1) return null
97
+
98
+ if (token.indexOf('.', secondDot + 1) !== -1) return null
99
+
100
+ // Strip the signature
101
+ return token.slice(0, secondDot) + '.obfuscated'
102
+ }
@@ -8,14 +8,20 @@ import {
8
8
  ClearActorMutelistSubscriptionsResponse,
9
9
  ClearActorMutesRequest,
10
10
  ClearActorMutesResponse,
11
+ ClearThreadMutesRequest,
12
+ ClearThreadMutesResponse,
11
13
  CreateActorMutelistSubscriptionRequest,
12
14
  CreateActorMutelistSubscriptionResponse,
13
15
  CreateActorMuteRequest,
14
16
  CreateActorMuteResponse,
17
+ CreateThreadMuteRequest,
18
+ CreateThreadMuteResponse,
15
19
  DeleteActorMutelistSubscriptionRequest,
16
20
  DeleteActorMutelistSubscriptionResponse,
17
21
  DeleteActorMuteRequest,
18
22
  DeleteActorMuteResponse,
23
+ DeleteThreadMuteRequest,
24
+ DeleteThreadMuteResponse,
19
25
  GetActorChatDeclarationRecordsRequest,
20
26
  GetActorChatDeclarationRecordsResponse,
21
27
  GetActorFeedsRequest,
@@ -140,6 +146,8 @@ import {
140
146
  GetSuggestedFeedsResponse,
141
147
  GetThreadGateRecordsRequest,
142
148
  GetThreadGateRecordsResponse,
149
+ GetThreadMutesOnSubjectsRequest,
150
+ GetThreadMutesOnSubjectsResponse,
143
151
  GetThreadRequest,
144
152
  GetThreadResponse,
145
153
  GetTimelineRequest,
@@ -545,6 +553,17 @@ export const Service = {
545
553
  O: GetMutelistSubscriptionsResponse,
546
554
  kind: MethodKind.Unary,
547
555
  },
556
+ /**
557
+ * Thread Mutes
558
+ *
559
+ * @generated from rpc bsky.Service.GetThreadMutesOnSubjects
560
+ */
561
+ getThreadMutesOnSubjects: {
562
+ name: 'GetThreadMutesOnSubjects',
563
+ I: GetThreadMutesOnSubjectsRequest,
564
+ O: GetThreadMutesOnSubjectsResponse,
565
+ kind: MethodKind.Unary,
566
+ },
548
567
  /**
549
568
  * Blocks
550
569
  *
@@ -984,5 +1003,32 @@ export const Service = {
984
1003
  O: ClearActorMutelistSubscriptionsResponse,
985
1004
  kind: MethodKind.Unary,
986
1005
  },
1006
+ /**
1007
+ * @generated from rpc bsky.Service.CreateThreadMute
1008
+ */
1009
+ createThreadMute: {
1010
+ name: 'CreateThreadMute',
1011
+ I: CreateThreadMuteRequest,
1012
+ O: CreateThreadMuteResponse,
1013
+ kind: MethodKind.Unary,
1014
+ },
1015
+ /**
1016
+ * @generated from rpc bsky.Service.DeleteThreadMute
1017
+ */
1018
+ deleteThreadMute: {
1019
+ name: 'DeleteThreadMute',
1020
+ I: DeleteThreadMuteRequest,
1021
+ O: DeleteThreadMuteResponse,
1022
+ kind: MethodKind.Unary,
1023
+ },
1024
+ /**
1025
+ * @generated from rpc bsky.Service.ClearThreadMutes
1026
+ */
1027
+ clearThreadMutes: {
1028
+ name: 'ClearThreadMutes',
1029
+ I: ClearThreadMutesRequest,
1030
+ O: ClearThreadMutesResponse,
1031
+ kind: MethodKind.Unary,
1032
+ },
987
1033
  },
988
1034
  } as const