@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,101 +0,0 @@
1
- import { NotEmptyArray } from '@atproto/common'
2
- import { InvalidRequestError } from '@atproto/xrpc-server'
3
- import { QueryParams as SkeletonParams } from '../lexicon/types/app/bsky/feed/getFeedSkeleton'
4
- import { AlgoHandler, AlgoResponse } from './types'
5
- import { GenericKeyset, paginate } from '../db/pagination'
6
- import AppContext from '../context'
7
- import { valuesList } from '../db/util'
8
- import { sql } from 'kysely'
9
- import { FeedItemType } from '../services/feed/types'
10
-
11
- const NO_WHATS_HOT_LABELS: NotEmptyArray<string> = [
12
- '!no-promote',
13
- 'corpse',
14
- 'self-harm',
15
- 'porn',
16
- 'sexual',
17
- 'nudity',
18
- 'underwear',
19
- ]
20
-
21
- const handler: AlgoHandler = async (
22
- ctx: AppContext,
23
- params: SkeletonParams,
24
- _viewer: string,
25
- ): Promise<AlgoResponse> => {
26
- const { limit, cursor } = params
27
- const db = ctx.db.getReplica('feed')
28
-
29
- const { ref } = db.db.dynamic
30
-
31
- // candidates are ranked within a materialized view by like count, depreciated over time.
32
-
33
- let builder = db.db
34
- .selectFrom('algo_whats_hot_view as candidate')
35
- .innerJoin('post', 'post.uri', 'candidate.uri')
36
- .leftJoin('post_embed_record', 'post_embed_record.postUri', 'candidate.uri')
37
- .whereNotExists((qb) =>
38
- qb
39
- .selectFrom('label')
40
- .selectAll()
41
- .whereRef('val', 'in', valuesList(NO_WHATS_HOT_LABELS))
42
- .where('neg', '=', false)
43
- .where((clause) =>
44
- clause
45
- .whereRef('label.uri', '=', ref('post.creator'))
46
- .orWhereRef('label.uri', '=', ref('post.uri'))
47
- .orWhereRef('label.uri', '=', ref('post_embed_record.embedUri')),
48
- ),
49
- )
50
- .select([
51
- sql<FeedItemType>`${'post'}`.as('type'),
52
- 'post.uri as uri',
53
- 'post.uri as postUri',
54
- 'post.creator as originatorDid',
55
- 'post.creator as postAuthorDid',
56
- 'post.replyParent as replyParent',
57
- 'post.replyRoot as replyRoot',
58
- 'post.indexedAt as sortAt',
59
- 'candidate.score',
60
- 'candidate.cid',
61
- ])
62
-
63
- const keyset = new ScoreKeyset(ref('candidate.score'), ref('candidate.cid'))
64
- builder = paginate(builder, { limit, cursor, keyset })
65
-
66
- const feedItems = await builder.execute()
67
-
68
- return {
69
- feedItems,
70
- cursor: keyset.packFromResult(feedItems),
71
- }
72
- }
73
-
74
- export default handler
75
-
76
- type Result = { score: number; cid: string }
77
- type LabeledResult = { primary: number; secondary: string }
78
- export class ScoreKeyset extends GenericKeyset<Result, LabeledResult> {
79
- labelResult(result: Result) {
80
- return {
81
- primary: result.score,
82
- secondary: result.cid,
83
- }
84
- }
85
- labeledResultToCursor(labeled: LabeledResult) {
86
- return {
87
- primary: Math.round(labeled.primary).toString(),
88
- secondary: labeled.secondary,
89
- }
90
- }
91
- cursorToLabeledResult(cursor: { primary: string; secondary: string }) {
92
- const score = parseInt(cursor.primary, 10)
93
- if (isNaN(score)) {
94
- throw new InvalidRequestError('Malformed cursor')
95
- }
96
- return {
97
- primary: score,
98
- secondary: cursor.secondary,
99
- }
100
- }
101
- }
@@ -1,39 +0,0 @@
1
- import AppContext from '../context'
2
- import { QueryParams as SkeletonParams } from '../lexicon/types/app/bsky/feed/getFeedSkeleton'
3
- import { paginate } from '../db/pagination'
4
- import { AlgoHandler, AlgoResponse } from './types'
5
- import { FeedKeyset, getFeedDateThreshold } from '../api/app/bsky/util/feed'
6
-
7
- const handler: AlgoHandler = async (
8
- ctx: AppContext,
9
- params: SkeletonParams,
10
- requester: string,
11
- ): Promise<AlgoResponse> => {
12
- const { cursor, limit = 50 } = params
13
- const db = ctx.db.getReplica('feed')
14
- const feedService = ctx.services.feed(db)
15
-
16
- const { ref } = db.db.dynamic
17
-
18
- const keyset = new FeedKeyset(ref('post.sortAt'), ref('post.cid'))
19
- const sortFrom = keyset.unpack(cursor)?.primary
20
-
21
- let postsQb = feedService
22
- .selectPostQb()
23
- .innerJoin('follow', 'follow.subjectDid', 'post.creator')
24
- .innerJoin('post_agg', 'post_agg.uri', 'post.uri')
25
- .where('post_agg.likeCount', '>=', 5)
26
- .where('follow.creator', '=', requester)
27
- .where('post.sortAt', '>', getFeedDateThreshold(sortFrom))
28
-
29
- postsQb = paginate(postsQb, { limit, cursor, keyset, tryIndex: true })
30
-
31
- const feedItems = await postsQb.execute()
32
-
33
- return {
34
- feedItems,
35
- cursor: keyset.packFromResult(feedItems),
36
- }
37
- }
38
-
39
- export default handler
@@ -1,90 +0,0 @@
1
- import { wait } from '@atproto/common'
2
- import { PrimaryDatabase } from './db'
3
- import { Label } from './db/tables/label'
4
- import { labelerLogger as log } from './logger'
5
-
6
- export class LabelCache {
7
- bySubject: Record<string, Label[]> = {}
8
- latestLabel = ''
9
- refreshes = 0
10
-
11
- destroyed = false
12
-
13
- constructor(public db: PrimaryDatabase) {}
14
-
15
- start() {
16
- this.poll()
17
- }
18
-
19
- async fullRefresh() {
20
- const allLabels = await this.db.db.selectFrom('label').selectAll().execute()
21
- this.wipeCache()
22
- this.processLabels(allLabels)
23
- }
24
-
25
- async partialRefresh() {
26
- const labels = await this.db.db
27
- .selectFrom('label')
28
- .selectAll()
29
- .where('cts', '>', this.latestLabel)
30
- .execute()
31
- this.processLabels(labels)
32
- }
33
-
34
- async poll() {
35
- try {
36
- if (this.destroyed) return
37
- if (this.refreshes >= 120) {
38
- await this.fullRefresh()
39
- this.refreshes = 0
40
- } else {
41
- await this.partialRefresh()
42
- this.refreshes++
43
- }
44
- } catch (err) {
45
- log.error(
46
- { err, latestLabel: this.latestLabel, refreshes: this.refreshes },
47
- 'label cache failed to refresh',
48
- )
49
- }
50
- await wait(500)
51
- this.poll()
52
- }
53
-
54
- processLabels(labels: Label[]) {
55
- for (const label of labels) {
56
- if (label.cts > this.latestLabel) {
57
- this.latestLabel = label.cts
58
- }
59
- this.bySubject[label.uri] ??= []
60
- this.bySubject[label.uri].push(label)
61
- }
62
- }
63
-
64
- wipeCache() {
65
- this.bySubject = {}
66
- }
67
-
68
- stop() {
69
- this.destroyed = true
70
- }
71
-
72
- forSubject(subject: string, includeNeg = false): Label[] {
73
- const labels = this.bySubject[subject] ?? []
74
- return includeNeg ? labels : labels.filter((l) => l.neg === false)
75
- }
76
-
77
- forSubjects(subjects: string[], includeNeg?: boolean): Label[] {
78
- let labels: Label[] = []
79
- const alreadyAdded = new Set<string>()
80
- for (const subject of subjects) {
81
- if (alreadyAdded.has(subject)) {
82
- continue
83
- }
84
- const subLabels = this.forSubject(subject, includeNeg)
85
- labels = [...labels, ...subLabels]
86
- alreadyAdded.add(subject)
87
- }
88
- return labels
89
- }
90
- }
@@ -1,172 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`admin get moderation action view gets moderation action for a record. 1`] = `
4
- Object {
5
- "action": "com.atproto.admin.defs#takedown",
6
- "createdAt": "1970-01-01T00:00:00.000Z",
7
- "createdBy": "did:example:admin",
8
- "id": 2,
9
- "reason": "X",
10
- "resolvedReports": Array [
11
- Object {
12
- "createdAt": "1970-01-01T00:00:00.000Z",
13
- "id": 2,
14
- "reason": "defamation",
15
- "reasonType": "com.atproto.moderation.defs#reasonOther",
16
- "reportedBy": "user(1)",
17
- "resolvedByActionIds": Array [
18
- 2,
19
- 1,
20
- ],
21
- "subject": Object {
22
- "$type": "com.atproto.repo.strongRef",
23
- "cid": "cids(0)",
24
- "uri": "record(0)",
25
- },
26
- },
27
- ],
28
- "subject": Object {
29
- "$type": "com.atproto.admin.defs#recordView",
30
- "blobCids": Array [],
31
- "cid": "cids(0)",
32
- "indexedAt": "1970-01-01T00:00:00.000Z",
33
- "moderation": Object {
34
- "currentAction": Object {
35
- "action": "com.atproto.admin.defs#takedown",
36
- "id": 2,
37
- },
38
- },
39
- "repo": Object {
40
- "did": "user(0)",
41
- "email": "alice@test.com",
42
- "handle": "alice.test",
43
- "indexedAt": "1970-01-01T00:00:00.000Z",
44
- "invitesDisabled": false,
45
- "moderation": Object {},
46
- "relatedRecords": Array [
47
- Object {
48
- "$type": "app.bsky.actor.profile",
49
- "avatar": Object {
50
- "$type": "blob",
51
- "mimeType": "image/jpeg",
52
- "ref": Object {
53
- "$link": "cids(1)",
54
- },
55
- "size": 3976,
56
- },
57
- "description": "its me!",
58
- "displayName": "ali",
59
- "labels": Object {
60
- "$type": "com.atproto.label.defs#selfLabels",
61
- "values": Array [
62
- Object {
63
- "val": "self-label-a",
64
- },
65
- Object {
66
- "val": "self-label-b",
67
- },
68
- ],
69
- },
70
- },
71
- ],
72
- },
73
- "uri": "record(0)",
74
- "value": Object {
75
- "$type": "app.bsky.feed.post",
76
- "createdAt": "1970-01-01T00:00:00.000Z",
77
- "labels": Object {
78
- "$type": "com.atproto.label.defs#selfLabels",
79
- "values": Array [
80
- Object {
81
- "val": "self-label",
82
- },
83
- ],
84
- },
85
- "text": "hey there",
86
- },
87
- },
88
- "subjectBlobs": Array [],
89
- }
90
- `;
91
-
92
- exports[`admin get moderation action view gets moderation action for a repo. 1`] = `
93
- Object {
94
- "action": "com.atproto.admin.defs#flag",
95
- "createdAt": "1970-01-01T00:00:00.000Z",
96
- "createdBy": "did:example:admin",
97
- "id": 1,
98
- "reason": "X",
99
- "resolvedReports": Array [
100
- Object {
101
- "createdAt": "1970-01-01T00:00:00.000Z",
102
- "id": 2,
103
- "reason": "defamation",
104
- "reasonType": "com.atproto.moderation.defs#reasonOther",
105
- "reportedBy": "user(1)",
106
- "resolvedByActionIds": Array [
107
- 2,
108
- 1,
109
- ],
110
- "subject": Object {
111
- "$type": "com.atproto.repo.strongRef",
112
- "cid": "cids(1)",
113
- "uri": "record(0)",
114
- },
115
- },
116
- Object {
117
- "createdAt": "1970-01-01T00:00:00.000Z",
118
- "id": 1,
119
- "reasonType": "com.atproto.moderation.defs#reasonSpam",
120
- "reportedBy": "user(2)",
121
- "resolvedByActionIds": Array [
122
- 1,
123
- ],
124
- "subject": Object {
125
- "$type": "com.atproto.admin.defs#repoRef",
126
- "did": "user(0)",
127
- },
128
- },
129
- ],
130
- "reversal": Object {
131
- "createdAt": "1970-01-01T00:00:00.000Z",
132
- "createdBy": "did:example:admin",
133
- "reason": "X",
134
- },
135
- "subject": Object {
136
- "$type": "com.atproto.admin.defs#repoView",
137
- "did": "user(0)",
138
- "email": "alice@test.com",
139
- "handle": "alice.test",
140
- "indexedAt": "1970-01-01T00:00:00.000Z",
141
- "invitesDisabled": false,
142
- "moderation": Object {},
143
- "relatedRecords": Array [
144
- Object {
145
- "$type": "app.bsky.actor.profile",
146
- "avatar": Object {
147
- "$type": "blob",
148
- "mimeType": "image/jpeg",
149
- "ref": Object {
150
- "$link": "cids(0)",
151
- },
152
- "size": 3976,
153
- },
154
- "description": "its me!",
155
- "displayName": "ali",
156
- "labels": Object {
157
- "$type": "com.atproto.label.defs#selfLabels",
158
- "values": Array [
159
- Object {
160
- "val": "self-label-a",
161
- },
162
- Object {
163
- "val": "self-label-b",
164
- },
165
- ],
166
- },
167
- },
168
- ],
169
- },
170
- "subjectBlobs": Array [],
171
- }
172
- `;
@@ -1,178 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`admin get moderation actions view gets all moderation actions for a record. 1`] = `
4
- Array [
5
- Object {
6
- "action": "com.atproto.admin.defs#flag",
7
- "createdAt": "1970-01-01T00:00:00.000Z",
8
- "createdBy": "did:example:admin",
9
- "id": 1,
10
- "reason": "X",
11
- "resolvedReportIds": Array [
12
- 1,
13
- ],
14
- "reversal": Object {
15
- "createdAt": "1970-01-01T00:00:00.000Z",
16
- "createdBy": "did:example:admin",
17
- "reason": "X",
18
- },
19
- "subject": Object {
20
- "$type": "com.atproto.repo.strongRef",
21
- "cid": "cids(0)",
22
- "uri": "record(0)",
23
- },
24
- "subjectBlobCids": Array [],
25
- },
26
- ]
27
- `;
28
-
29
- exports[`admin get moderation actions view gets all moderation actions for a repo. 1`] = `
30
- Array [
31
- Object {
32
- "action": "com.atproto.admin.defs#flag",
33
- "createdAt": "1970-01-01T00:00:00.000Z",
34
- "createdBy": "did:example:admin",
35
- "id": 5,
36
- "reason": "X",
37
- "resolvedReportIds": Array [
38
- 3,
39
- ],
40
- "subject": Object {
41
- "$type": "com.atproto.admin.defs#repoRef",
42
- "did": "user(0)",
43
- },
44
- "subjectBlobCids": Array [],
45
- },
46
- Object {
47
- "action": "com.atproto.admin.defs#acknowledge",
48
- "createdAt": "1970-01-01T00:00:00.000Z",
49
- "createdBy": "did:example:admin",
50
- "id": 2,
51
- "reason": "X",
52
- "resolvedReportIds": Array [],
53
- "subject": Object {
54
- "$type": "com.atproto.repo.strongRef",
55
- "cid": "cids(0)",
56
- "uri": "record(0)",
57
- },
58
- "subjectBlobCids": Array [],
59
- },
60
- Object {
61
- "action": "com.atproto.admin.defs#flag",
62
- "createdAt": "1970-01-01T00:00:00.000Z",
63
- "createdBy": "did:example:admin",
64
- "id": 1,
65
- "reason": "X",
66
- "resolvedReportIds": Array [
67
- 1,
68
- ],
69
- "reversal": Object {
70
- "createdAt": "1970-01-01T00:00:00.000Z",
71
- "createdBy": "did:example:admin",
72
- "reason": "X",
73
- },
74
- "subject": Object {
75
- "$type": "com.atproto.repo.strongRef",
76
- "cid": "cids(1)",
77
- "uri": "record(1)",
78
- },
79
- "subjectBlobCids": Array [],
80
- },
81
- ]
82
- `;
83
-
84
- exports[`admin get moderation actions view gets all moderation actions. 1`] = `
85
- Array [
86
- Object {
87
- "action": "com.atproto.admin.defs#acknowledge",
88
- "createdAt": "1970-01-01T00:00:00.000Z",
89
- "createdBy": "did:example:admin",
90
- "id": 6,
91
- "reason": "X",
92
- "resolvedReportIds": Array [],
93
- "subject": Object {
94
- "$type": "com.atproto.admin.defs#repoRef",
95
- "did": "user(0)",
96
- },
97
- "subjectBlobCids": Array [],
98
- },
99
- Object {
100
- "action": "com.atproto.admin.defs#flag",
101
- "createdAt": "1970-01-01T00:00:00.000Z",
102
- "createdBy": "did:example:admin",
103
- "id": 5,
104
- "reason": "X",
105
- "resolvedReportIds": Array [
106
- 3,
107
- ],
108
- "subject": Object {
109
- "$type": "com.atproto.admin.defs#repoRef",
110
- "did": "user(1)",
111
- },
112
- "subjectBlobCids": Array [],
113
- },
114
- Object {
115
- "action": "com.atproto.admin.defs#flag",
116
- "createdAt": "1970-01-01T00:00:00.000Z",
117
- "createdBy": "did:example:admin",
118
- "id": 4,
119
- "reason": "X",
120
- "resolvedReportIds": Array [],
121
- "subject": Object {
122
- "$type": "com.atproto.repo.strongRef",
123
- "cid": "cids(0)",
124
- "uri": "record(0)",
125
- },
126
- "subjectBlobCids": Array [],
127
- },
128
- Object {
129
- "action": "com.atproto.admin.defs#takedown",
130
- "createdAt": "1970-01-01T00:00:00.000Z",
131
- "createdBy": "did:example:admin",
132
- "id": 3,
133
- "reason": "X",
134
- "resolvedReportIds": Array [],
135
- "subject": Object {
136
- "$type": "com.atproto.repo.strongRef",
137
- "cid": "cids(1)",
138
- "uri": "record(1)",
139
- },
140
- "subjectBlobCids": Array [],
141
- },
142
- Object {
143
- "action": "com.atproto.admin.defs#acknowledge",
144
- "createdAt": "1970-01-01T00:00:00.000Z",
145
- "createdBy": "did:example:admin",
146
- "id": 2,
147
- "reason": "X",
148
- "resolvedReportIds": Array [],
149
- "subject": Object {
150
- "$type": "com.atproto.repo.strongRef",
151
- "cid": "cids(2)",
152
- "uri": "record(2)",
153
- },
154
- "subjectBlobCids": Array [],
155
- },
156
- Object {
157
- "action": "com.atproto.admin.defs#flag",
158
- "createdAt": "1970-01-01T00:00:00.000Z",
159
- "createdBy": "did:example:admin",
160
- "id": 1,
161
- "reason": "X",
162
- "resolvedReportIds": Array [
163
- 1,
164
- ],
165
- "reversal": Object {
166
- "createdAt": "1970-01-01T00:00:00.000Z",
167
- "createdBy": "did:example:admin",
168
- "reason": "X",
169
- },
170
- "subject": Object {
171
- "$type": "com.atproto.repo.strongRef",
172
- "cid": "cids(3)",
173
- "uri": "record(3)",
174
- },
175
- "subjectBlobCids": Array [],
176
- },
177
- ]
178
- `;