@atproto/api 0.4.4 → 0.5.0
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.
- package/README.md +81 -0
- package/definitions/labels.json +212 -0
- package/definitions/locale/en/label-groups.json +38 -0
- package/definitions/locale/en/labels.json +366 -0
- package/definitions/locale/en/proposed-label-groups.json +38 -0
- package/definitions/locale/en/proposed-labels.json +632 -0
- package/definitions/moderation-behaviors.d.ts +48 -0
- package/definitions/post-moderation-behaviors.json +879 -0
- package/definitions/profile-moderation-behaviors.json +447 -0
- package/definitions/proposed-labels.json +326 -0
- package/dist/client/index.d.ts +3 -0
- package/dist/client/lexicons.d.ts +27 -1
- package/dist/client/types/app/bsky/actor/updateProfile.d.ts +3 -10
- package/dist/client/types/app/bsky/{feed/getBookmarkedFeeds.d.ts → graph/getListBlocks.d.ts} +2 -2
- package/dist/client/types/app/bsky/graph/listblock.d.ts +8 -0
- package/dist/client/types/app/bsky/{feed/unbookmarkFeed.d.ts → graph/subscribeMuteList.d.ts} +1 -1
- package/dist/client/types/app/bsky/{feed/bookmarkFeed.d.ts → graph/unsubscribeMuteList.d.ts} +1 -1
- package/dist/{src/client/types/app/bsky/notification/updateSeen.d.ts → client/types/app/bsky/unspecced/applyLabels.d.ts} +2 -1
- package/dist/helpers/bsky.d.ts +20 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +1401 -12
- package/dist/index.js.map +4 -4
- package/dist/mixins/bsky.d.ts +23 -0
- package/dist/moderation/accumulator.d.ts +14 -0
- package/dist/moderation/const/label-groups.d.ts +2 -0
- package/dist/moderation/const/labels.d.ts +2 -0
- package/dist/moderation/index.d.ts +44 -0
- package/dist/moderation/subjects/account.d.ts +3 -0
- package/dist/moderation/subjects/feed-generator.d.ts +2 -0
- package/dist/moderation/subjects/post.d.ts +2 -0
- package/dist/moderation/subjects/profile.d.ts +3 -0
- package/dist/moderation/subjects/quoted-post.d.ts +6 -0
- package/dist/moderation/subjects/user-list.d.ts +2 -0
- package/dist/moderation/types.d.ts +97 -0
- package/dist/moderation/util.d.ts +12 -0
- package/dist/rich-text/sanitize.d.ts +4 -0
- package/docs/labels.md +522 -0
- package/docs/moderation-behaviors/posts.md +1919 -0
- package/docs/moderation-behaviors/profiles.md +907 -0
- package/docs/moderation.md +144 -0
- package/package.json +6 -4
- package/scripts/code/label-groups.mjs +68 -0
- package/scripts/code/labels.mjs +68 -0
- package/scripts/docs/labels.mjs +164 -0
- package/scripts/docs/post-moderation-behaviors.mjs +122 -0
- package/scripts/docs/profile-moderation-behaviors.mjs +122 -0
- package/scripts/generate-code.mjs +4 -0
- package/scripts/generate-docs.mjs +5 -0
- package/src/client/index.ts +13 -0
- package/src/client/lexicons.ts +29 -3
- package/src/client/types/app/bsky/unspecced/applyLabels.ts +33 -0
- package/src/client/types/com/atproto/admin/enableAccountInvites.ts +1 -1
- package/src/client/types/com/atproto/moderation/defs.ts +1 -1
- package/src/index.ts +4 -0
- package/src/moderation/accumulator.ts +181 -0
- package/src/moderation/const/label-groups.ts +143 -0
- package/src/moderation/const/labels.ts +798 -0
- package/src/moderation/index.ts +343 -0
- package/src/moderation/subjects/account.ts +40 -0
- package/src/moderation/subjects/feed-generator.ts +13 -0
- package/src/moderation/subjects/post.ts +23 -0
- package/src/moderation/subjects/profile.ts +31 -0
- package/src/moderation/subjects/quoted-post.ts +62 -0
- package/src/moderation/subjects/user-list.ts +13 -0
- package/src/moderation/types.ts +141 -0
- package/src/moderation/util.ts +98 -0
- package/tests/post-moderation.test.ts +46 -0
- package/tests/profile-moderation.test.ts +46 -0
- package/tests/util/index.ts +176 -0
- package/tests/util/moderation-behavior.ts +180 -0
- package/dist/client/types/app/bsky/actor/searchActor.d.ts +0 -22
- package/dist/client/types/app/bsky/actor/searchActorTypeahead.d.ts +0 -20
- package/dist/client/types/com/atproto/admin/getInviteCodeUsage.d.ts +0 -29
- package/dist/client/types/com/atproto/repo/importRepo.d.ts +0 -19
- package/dist/client/types/com/atproto/repo/uploadRepo.d.ts +0 -19
- package/dist/client/types/com/atproto/server/getUserInviteCodes.d.ts +0 -31
- package/dist/src/client/index.d.ts +0 -462
- package/dist/src/client/lexicons.d.ts +0 -2910
- package/dist/src/client/schemas.d.ts +0 -17
- package/dist/src/client/types/app/bsky/actor/createScene.d.ts +0 -32
- package/dist/src/client/types/app/bsky/actor/getProfile.d.ts +0 -36
- package/dist/src/client/types/app/bsky/actor/getSuggestions.d.ts +0 -36
- package/dist/src/client/types/app/bsky/actor/profile.d.ts +0 -15
- package/dist/src/client/types/app/bsky/actor/ref.d.ts +0 -14
- package/dist/src/client/types/app/bsky/actor/search.d.ts +0 -32
- package/dist/src/client/types/app/bsky/actor/searchTypeahead.d.ts +0 -28
- package/dist/src/client/types/app/bsky/actor/updateProfile.d.ts +0 -48
- package/dist/src/client/types/app/bsky/badge.d.ts +0 -22
- package/dist/src/client/types/app/bsky/badgeAccept.d.ts +0 -11
- package/dist/src/client/types/app/bsky/badgeOffer.d.ts +0 -11
- package/dist/src/client/types/app/bsky/declaration.d.ts +0 -6
- package/dist/src/client/types/app/bsky/embed/external.d.ts +0 -26
- package/dist/src/client/types/app/bsky/embed/images.d.ts +0 -23
- package/dist/src/client/types/app/bsky/feed/embed.d.ts +0 -36
- package/dist/src/client/types/app/bsky/feed/feedViewPost.d.ts +0 -26
- package/dist/src/client/types/app/bsky/feed/getAuthorFeed.d.ts +0 -22
- package/dist/src/client/types/app/bsky/feed/getPostThread.d.ts +0 -43
- package/dist/src/client/types/app/bsky/feed/getRepostedBy.d.ts +0 -35
- package/dist/src/client/types/app/bsky/feed/getTimeline.d.ts +0 -22
- package/dist/src/client/types/app/bsky/feed/getVotes.d.ts +0 -33
- package/dist/src/client/types/app/bsky/feed/mediaEmbed.d.ts +0 -18
- package/dist/src/client/types/app/bsky/feed/post.d.ts +0 -54
- package/dist/src/client/types/app/bsky/feed/repost.d.ts +0 -6
- package/dist/src/client/types/app/bsky/feed/setVote.d.ts +0 -25
- package/dist/src/client/types/app/bsky/feed/trend.d.ts +0 -6
- package/dist/src/client/types/app/bsky/feed/vote.d.ts +0 -7
- package/dist/src/client/types/app/bsky/follow.d.ts +0 -9
- package/dist/src/client/types/app/bsky/getAuthorFeed.d.ts +0 -56
- package/dist/src/client/types/app/bsky/getBadgeMembers.d.ts +0 -29
- package/dist/src/client/types/app/bsky/getHomeFeed.d.ts +0 -56
- package/dist/src/client/types/app/bsky/getLikedBy.d.ts +0 -29
- package/dist/src/client/types/app/bsky/getNotificationCount.d.ts +0 -16
- package/dist/src/client/types/app/bsky/getNotifications.d.ts +0 -33
- package/dist/src/client/types/app/bsky/getPostThread.d.ts +0 -55
- package/dist/src/client/types/app/bsky/getProfile.d.ts +0 -26
- package/dist/src/client/types/app/bsky/getRepostedBy.d.ts +0 -29
- package/dist/src/client/types/app/bsky/getTimeline.d.ts +0 -56
- package/dist/src/client/types/app/bsky/getUserFollowers.d.ts +0 -31
- package/dist/src/client/types/app/bsky/getUserFollows.d.ts +0 -31
- package/dist/src/client/types/app/bsky/getUsersSearch.d.ts +0 -26
- package/dist/src/client/types/app/bsky/getUsersTypeahead.d.ts +0 -22
- package/dist/src/client/types/app/bsky/graph/assertCreator.d.ts +0 -1
- package/dist/src/client/types/app/bsky/graph/assertMember.d.ts +0 -1
- package/dist/src/client/types/app/bsky/graph/assertion.d.ts +0 -7
- package/dist/src/client/types/app/bsky/graph/confirmation.d.ts +0 -8
- package/dist/src/client/types/app/bsky/graph/follow.d.ts +0 -6
- package/dist/src/client/types/app/bsky/graph/getAssertions.d.ts +0 -43
- package/dist/src/client/types/app/bsky/graph/getFollowers.d.ts +0 -34
- package/dist/src/client/types/app/bsky/graph/getFollows.d.ts +0 -33
- package/dist/src/client/types/app/bsky/graph/getMembers.d.ts +0 -33
- package/dist/src/client/types/app/bsky/graph/getMemberships.d.ts +0 -33
- package/dist/src/client/types/app/bsky/invite.d.ts +0 -10
- package/dist/src/client/types/app/bsky/inviteAccept.d.ts +0 -14
- package/dist/src/client/types/app/bsky/like.d.ts +0 -10
- package/dist/src/client/types/app/bsky/mediaEmbed.d.ts +0 -15
- package/dist/src/client/types/app/bsky/notification/getCount.d.ts +0 -17
- package/dist/src/client/types/app/bsky/notification/list.d.ts +0 -32
- package/dist/src/client/types/app/bsky/post.d.ts +0 -23
- package/dist/src/client/types/app/bsky/postNotificationsSeen.d.ts +0 -20
- package/dist/src/client/types/app/bsky/profile.d.ts +0 -5
- package/dist/src/client/types/app/bsky/repost.d.ts +0 -10
- package/dist/src/client/types/app/bsky/system/actorScene.d.ts +0 -1
- package/dist/src/client/types/app/bsky/system/actorUser.d.ts +0 -1
- package/dist/src/client/types/app/bsky/system/declRef.d.ts +0 -5
- package/dist/src/client/types/app/bsky/system/declaration.d.ts +0 -4
- package/dist/src/client/types/app/bsky/updateProfile.d.ts +0 -23
- package/dist/src/client/types/com/atproto/account/create.d.ts +0 -41
- package/dist/src/client/types/com/atproto/account/createInviteCode.d.ts +0 -22
- package/dist/src/client/types/com/atproto/account/delete.d.ts +0 -13
- package/dist/src/client/types/com/atproto/account/get.d.ts +0 -12
- package/dist/src/client/types/com/atproto/account/requestPasswordReset.d.ts +0 -17
- package/dist/src/client/types/com/atproto/account/resetPassword.d.ts +0 -24
- package/dist/src/client/types/com/atproto/blob/upload.d.ts +0 -19
- package/dist/src/client/types/com/atproto/createAccount.d.ts +0 -40
- package/dist/src/client/types/com/atproto/createInviteCode.d.ts +0 -20
- package/dist/src/client/types/com/atproto/createSession.d.ts +0 -24
- package/dist/src/client/types/com/atproto/data/uploadFile.d.ts +0 -19
- package/dist/src/client/types/com/atproto/deleteAccount.d.ts +0 -20
- package/dist/src/client/types/com/atproto/deleteSession.d.ts +0 -17
- package/dist/src/client/types/com/atproto/getAccount.d.ts +0 -16
- package/dist/src/client/types/com/atproto/getAccountsConfig.d.ts +0 -17
- package/dist/src/client/types/com/atproto/getSession.d.ts +0 -17
- package/dist/src/client/types/com/atproto/handle/resolve.d.ts +0 -18
- package/dist/src/client/types/com/atproto/refreshSession.d.ts +0 -20
- package/dist/src/client/types/com/atproto/repo/batchWrite.d.ts +0 -39
- package/dist/src/client/types/com/atproto/repo/createRecord.d.ts +0 -26
- package/dist/src/client/types/com/atproto/repo/deleteRecord.d.ts +0 -19
- package/dist/src/client/types/com/atproto/repo/describe.d.ts +0 -22
- package/dist/src/client/types/com/atproto/repo/getRecord.d.ts +0 -23
- package/dist/src/client/types/com/atproto/repo/listRecords.d.ts +0 -30
- package/dist/src/client/types/com/atproto/repo/putRecord.d.ts +0 -27
- package/dist/src/client/types/com/atproto/repo/strongRef.d.ts +0 -5
- package/dist/src/client/types/com/atproto/repoBatchWrite.d.ts +0 -36
- package/dist/src/client/types/com/atproto/repoCreateRecord.d.ts +0 -24
- package/dist/src/client/types/com/atproto/repoDeleteRecord.d.ts +0 -18
- package/dist/src/client/types/com/atproto/repoDescribe.d.ts +0 -21
- package/dist/src/client/types/com/atproto/repoGetRecord.d.ts +0 -22
- package/dist/src/client/types/com/atproto/repoListRecords.d.ts +0 -27
- package/dist/src/client/types/com/atproto/repoPutRecord.d.ts +0 -25
- package/dist/src/client/types/com/atproto/requestAccountPasswordReset.d.ts +0 -19
- package/dist/src/client/types/com/atproto/resetAccountPassword.d.ts +0 -26
- package/dist/src/client/types/com/atproto/resolveHandle.d.ts +0 -17
- package/dist/src/client/types/com/atproto/resolveName.d.ts +0 -17
- package/dist/src/client/types/com/atproto/server/getAccountsConfig.d.ts +0 -24
- package/dist/src/client/types/com/atproto/session/create.d.ts +0 -26
- package/dist/src/client/types/com/atproto/session/delete.d.ts +0 -13
- package/dist/src/client/types/com/atproto/session/get.d.ts +0 -18
- package/dist/src/client/types/com/atproto/session/refresh.d.ts +0 -21
- package/dist/src/client/types/com/atproto/sync/getRepo.d.ts +0 -15
- package/dist/src/client/types/com/atproto/sync/getRoot.d.ts +0 -18
- package/dist/src/client/types/com/atproto/sync/updateRepo.d.ts +0 -15
- package/dist/src/client/types/com/atproto/syncGetRepo.d.ts +0 -15
- package/dist/src/client/types/com/atproto/syncGetRoot.d.ts +0 -17
- package/dist/src/client/types/com/atproto/syncUpdateRepo.d.ts +0 -15
- package/dist/src/index.d.ts +0 -4
- package/dist/src/schemas.d.ts +0 -19
- package/dist/src/session.d.ts +0 -42
- package/dist/src/types/app/bsky/acceptedBadge.d.ts +0 -10
- package/dist/src/types/app/bsky/badge.d.ts +0 -22
- package/dist/src/types/app/bsky/badgeAccept.d.ts +0 -11
- package/dist/src/types/app/bsky/badgeOffer.d.ts +0 -11
- package/dist/src/types/app/bsky/declaration.d.ts +0 -6
- package/dist/src/types/app/bsky/follow.d.ts +0 -9
- package/dist/src/types/app/bsky/getAuthorFeed.d.ts +0 -56
- package/dist/src/types/app/bsky/getBadgeMembers.d.ts +0 -29
- package/dist/src/types/app/bsky/getHomeFeed.d.ts +0 -56
- package/dist/src/types/app/bsky/getLikedBy.d.ts +0 -29
- package/dist/src/types/app/bsky/getNotificationCount.d.ts +0 -16
- package/dist/src/types/app/bsky/getNotifications.d.ts +0 -33
- package/dist/src/types/app/bsky/getPostThread.d.ts +0 -55
- package/dist/src/types/app/bsky/getProfile.d.ts +0 -42
- package/dist/src/types/app/bsky/getRepostedBy.d.ts +0 -29
- package/dist/src/types/app/bsky/getUserFollowers.d.ts +0 -31
- package/dist/src/types/app/bsky/getUserFollows.d.ts +0 -31
- package/dist/src/types/app/bsky/getUsersSearch.d.ts +0 -26
- package/dist/src/types/app/bsky/getUsersTypeahead.d.ts +0 -22
- package/dist/src/types/app/bsky/invite.d.ts +0 -10
- package/dist/src/types/app/bsky/inviteAccept.d.ts +0 -14
- package/dist/src/types/app/bsky/like.d.ts +0 -10
- package/dist/src/types/app/bsky/mediaEmbed.d.ts +0 -15
- package/dist/src/types/app/bsky/post.d.ts +0 -23
- package/dist/src/types/app/bsky/postNotificationsSeen.d.ts +0 -19
- package/dist/src/types/app/bsky/profile.d.ts +0 -11
- package/dist/src/types/app/bsky/repost.d.ts +0 -10
- package/dist/src/types/app/bsky/updateProfile.d.ts +0 -27
- package/dist/src/types/com/atproto/createAccount.d.ts +0 -39
- package/dist/src/types/com/atproto/createInviteCode.d.ts +0 -19
- package/dist/src/types/com/atproto/createSession.d.ts +0 -23
- package/dist/src/types/com/atproto/deleteAccount.d.ts +0 -19
- package/dist/src/types/com/atproto/deleteSession.d.ts +0 -16
- package/dist/src/types/com/atproto/getAccount.d.ts +0 -19
- package/dist/src/types/com/atproto/getAccountsConfig.d.ts +0 -17
- package/dist/src/types/com/atproto/getSession.d.ts +0 -17
- package/dist/src/types/com/atproto/refreshSession.d.ts +0 -19
- package/dist/src/types/com/atproto/repoBatchWrite.d.ts +0 -35
- package/dist/src/types/com/atproto/repoCreateRecord.d.ts +0 -23
- package/dist/src/types/com/atproto/repoDeleteRecord.d.ts +0 -15
- package/dist/src/types/com/atproto/repoDescribe.d.ts +0 -21
- package/dist/src/types/com/atproto/repoGetRecord.d.ts +0 -22
- package/dist/src/types/com/atproto/repoListRecords.d.ts +0 -27
- package/dist/src/types/com/atproto/repoPutRecord.d.ts +0 -24
- package/dist/src/types/com/atproto/requestAccountPasswordReset.d.ts +0 -18
- package/dist/src/types/com/atproto/resetAccountPassword.d.ts +0 -25
- package/dist/src/types/com/atproto/resolveName.d.ts +0 -17
- package/dist/src/types/com/atproto/syncGetRepo.d.ts +0 -15
- package/dist/src/types/com/atproto/syncGetRoot.d.ts +0 -17
- package/dist/src/types/com/atproto/syncUpdateRepo.d.ts +0 -14
- package/dist/src/types/todo/adx/createAccount.d.ts +0 -36
- package/dist/src/types/todo/adx/createInviteCode.d.ts +0 -19
- package/dist/src/types/todo/adx/createSession.d.ts +0 -22
- package/dist/src/types/todo/adx/deleteAccount.d.ts +0 -19
- package/dist/src/types/todo/adx/deleteSession.d.ts +0 -19
- package/dist/src/types/todo/adx/getAccount.d.ts +0 -19
- package/dist/src/types/todo/adx/getAccountsConfig.d.ts +0 -17
- package/dist/src/types/todo/adx/getSession.d.ts +0 -17
- package/dist/src/types/todo/adx/repoBatchWrite.d.ts +0 -34
- package/dist/src/types/todo/adx/repoCreateRecord.d.ts +0 -22
- package/dist/src/types/todo/adx/repoDeleteRecord.d.ts +0 -15
- package/dist/src/types/todo/adx/repoDescribe.d.ts +0 -21
- package/dist/src/types/todo/adx/repoGetRecord.d.ts +0 -20
- package/dist/src/types/todo/adx/repoListRecords.d.ts +0 -25
- package/dist/src/types/todo/adx/repoPutRecord.d.ts +0 -23
- package/dist/src/types/todo/adx/requestAccountPasswordReset.d.ts +0 -18
- package/dist/src/types/todo/adx/resetAccountPassword.d.ts +0 -25
- package/dist/src/types/todo/adx/resolveName.d.ts +0 -17
- package/dist/src/types/todo/adx/syncGetRepo.d.ts +0 -15
- package/dist/src/types/todo/adx/syncGetRoot.d.ts +0 -17
- package/dist/src/types/todo/adx/syncUpdateRepo.d.ts +0 -14
- package/dist/src/types/todo/social/badge.d.ts +0 -23
- package/dist/src/types/todo/social/follow.d.ts +0 -5
- package/dist/src/types/todo/social/getAuthorFeed.d.ts +0 -55
- package/dist/src/types/todo/social/getFeed.d.ts +0 -55
- package/dist/src/types/todo/social/getHomeFeed.d.ts +0 -55
- package/dist/src/types/todo/social/getLikedBy.d.ts +0 -26
- package/dist/src/types/todo/social/getNotificationCount.d.ts +0 -16
- package/dist/src/types/todo/social/getNotifications.d.ts +0 -31
- package/dist/src/types/todo/social/getPostThread.d.ts +0 -54
- package/dist/src/types/todo/social/getProfile.d.ts +0 -40
- package/dist/src/types/todo/social/getRepostedBy.d.ts +0 -26
- package/dist/src/types/todo/social/getUserFollowers.d.ts +0 -30
- package/dist/src/types/todo/social/getUserFollows.d.ts +0 -30
- package/dist/src/types/todo/social/like.d.ts +0 -5
- package/dist/src/types/todo/social/mediaEmbed.d.ts +0 -15
- package/dist/src/types/todo/social/post.d.ts +0 -18
- package/dist/src/types/todo/social/postNotificationsSeen.d.ts +0 -19
- package/dist/src/types/todo/social/profile.d.ts +0 -10
- package/dist/src/types/todo/social/repost.d.ts +0 -5
- package/dist/tsconfig.build.tsbuildinfo +0 -1
- package/tests/_util.ts +0 -26
- package/tsconfig.build.tsbuildinfo +0 -1
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import * as url from 'url'
|
|
2
|
+
import { readFileSync, writeFileSync } from 'fs'
|
|
3
|
+
import { join } from 'path'
|
|
4
|
+
import { stripIndents } from 'common-tags'
|
|
5
|
+
|
|
6
|
+
const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
|
|
7
|
+
|
|
8
|
+
const profileModerationBehaviorsDef = JSON.parse(
|
|
9
|
+
readFileSync(
|
|
10
|
+
join(
|
|
11
|
+
__dirname,
|
|
12
|
+
'..',
|
|
13
|
+
'..',
|
|
14
|
+
'definitions',
|
|
15
|
+
'profile-moderation-behaviors.json',
|
|
16
|
+
),
|
|
17
|
+
'utf8',
|
|
18
|
+
),
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
writeFileSync(
|
|
22
|
+
join(__dirname, '..', '..', 'docs', 'moderation-behaviors', 'profiles.md'),
|
|
23
|
+
profiles(),
|
|
24
|
+
'utf8',
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
function profiles() {
|
|
28
|
+
let lastTitle = 'NULL'
|
|
29
|
+
return stripIndents`
|
|
30
|
+
<!-- this doc is generated by ./scripts/docs/profile-moderation-behaviors.mjs -->
|
|
31
|
+
|
|
32
|
+
# Profile moderation behaviors
|
|
33
|
+
|
|
34
|
+
This document is a reference for the expected behaviors for a profile in the application based on some given scenarios. The <code>moderateProfile()</code> command condense down to the following yes or no decisions:
|
|
35
|
+
|
|
36
|
+
- <code>res.account.filter</code> Do not show the account in feeds.
|
|
37
|
+
- <code>res.account.blur</code> Put the account (in listings, when viewing) behind a warning cover.
|
|
38
|
+
- <code>res.account.noOverride</code> Do not allow the account's blur cover to be lifted.
|
|
39
|
+
- <code>res.account.alert</code> Add a warning to the account but do not cover it.
|
|
40
|
+
- <code>res.profile.blur</code> Put the profile details (handle, display name, bio) behind a warning cover.
|
|
41
|
+
- <code>res.profile.noOverride</code> Do not allow the profile's blur cover to be lifted.
|
|
42
|
+
- <code>res.profile.alert</code> Add a warning to the profile but do not cover it.
|
|
43
|
+
- <code>res.avatar.blur</code> Put the avatar behind a cover.
|
|
44
|
+
- <code>res.avatar.noOverride</code> Do not allow the avatars's blur cover to be lifted.
|
|
45
|
+
- <code>res.avatar.alert</code> Put a warning icon on the avatar.
|
|
46
|
+
|
|
47
|
+
Key:
|
|
48
|
+
|
|
49
|
+
- ❌ = Filter Content
|
|
50
|
+
- 🚫 = Blur (no-override)
|
|
51
|
+
- ✋ = Blur
|
|
52
|
+
- 🪧 = Alert
|
|
53
|
+
|
|
54
|
+
## Scenarios
|
|
55
|
+
|
|
56
|
+
<table>
|
|
57
|
+
${Array.from(Object.entries(profileModerationBehaviorsDef.scenarios))
|
|
58
|
+
.map(([title, scenario], i) => {
|
|
59
|
+
const str = `
|
|
60
|
+
${title.indexOf(lastTitle) === -1 ? postTableHead() : ''}
|
|
61
|
+
${scenarioSection(title, scenario)}
|
|
62
|
+
`
|
|
63
|
+
lastTitle = title.slice(0, 10)
|
|
64
|
+
return str
|
|
65
|
+
})
|
|
66
|
+
.join('\n\n')}
|
|
67
|
+
</table>
|
|
68
|
+
`
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function postTableHead() {
|
|
72
|
+
return `<tr><th>Scenario</th><th>Filter</th><th>Account</th><th>Profile</td><th>Avatar</th></tr>`
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function scenarioSection(title, scenario) {
|
|
76
|
+
return stripIndents`
|
|
77
|
+
<tr>
|
|
78
|
+
<td><strong>${title}</strong></td>
|
|
79
|
+
<td>
|
|
80
|
+
${filter(scenario.behaviors.account?.filter)}
|
|
81
|
+
</td>
|
|
82
|
+
<td>
|
|
83
|
+
${blur(
|
|
84
|
+
scenario.behaviors.account?.blur,
|
|
85
|
+
scenario.behaviors.account?.noOverride,
|
|
86
|
+
)}
|
|
87
|
+
${alert(scenario.behaviors.account?.alert)}
|
|
88
|
+
</td>
|
|
89
|
+
<td>
|
|
90
|
+
${blur(
|
|
91
|
+
scenario.behaviors.profile?.blur,
|
|
92
|
+
scenario.behaviors.profile?.noOverride,
|
|
93
|
+
)}
|
|
94
|
+
${alert(scenario.behaviors.profile?.alert)}
|
|
95
|
+
</td>
|
|
96
|
+
<td>
|
|
97
|
+
${blur(
|
|
98
|
+
scenario.behaviors.avatar?.blur,
|
|
99
|
+
scenario.behaviors.avatar?.noOverride,
|
|
100
|
+
)}
|
|
101
|
+
${alert(scenario.behaviors.avatar?.alert)}
|
|
102
|
+
</td>
|
|
103
|
+
</tr>
|
|
104
|
+
`
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function filter(val) {
|
|
108
|
+
return val ? '❌' : ''
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function blur(val, noOverride) {
|
|
112
|
+
if (val) {
|
|
113
|
+
return noOverride ? '🚫' : '✋'
|
|
114
|
+
}
|
|
115
|
+
return ''
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function alert(val) {
|
|
119
|
+
return val ? '🪧' : ''
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export {}
|
package/src/client/index.ts
CHANGED
|
@@ -122,6 +122,7 @@ import * as AppBskyNotificationGetUnreadCount from './types/app/bsky/notificatio
|
|
|
122
122
|
import * as AppBskyNotificationListNotifications from './types/app/bsky/notification/listNotifications'
|
|
123
123
|
import * as AppBskyNotificationUpdateSeen from './types/app/bsky/notification/updateSeen'
|
|
124
124
|
import * as AppBskyRichtextFacet from './types/app/bsky/richtext/facet'
|
|
125
|
+
import * as AppBskyUnspeccedApplyLabels from './types/app/bsky/unspecced/applyLabels'
|
|
125
126
|
import * as AppBskyUnspeccedGetPopular from './types/app/bsky/unspecced/getPopular'
|
|
126
127
|
import * as AppBskyUnspeccedGetPopularFeedGenerators from './types/app/bsky/unspecced/getPopularFeedGenerators'
|
|
127
128
|
import * as AppBskyUnspeccedGetTimelineSkeleton from './types/app/bsky/unspecced/getTimelineSkeleton'
|
|
@@ -241,6 +242,7 @@ export * as AppBskyNotificationGetUnreadCount from './types/app/bsky/notificatio
|
|
|
241
242
|
export * as AppBskyNotificationListNotifications from './types/app/bsky/notification/listNotifications'
|
|
242
243
|
export * as AppBskyNotificationUpdateSeen from './types/app/bsky/notification/updateSeen'
|
|
243
244
|
export * as AppBskyRichtextFacet from './types/app/bsky/richtext/facet'
|
|
245
|
+
export * as AppBskyUnspeccedApplyLabels from './types/app/bsky/unspecced/applyLabels'
|
|
244
246
|
export * as AppBskyUnspeccedGetPopular from './types/app/bsky/unspecced/getPopular'
|
|
245
247
|
export * as AppBskyUnspeccedGetPopularFeedGenerators from './types/app/bsky/unspecced/getPopularFeedGenerators'
|
|
246
248
|
export * as AppBskyUnspeccedGetTimelineSkeleton from './types/app/bsky/unspecced/getTimelineSkeleton'
|
|
@@ -2036,6 +2038,17 @@ export class UnspeccedNS {
|
|
|
2036
2038
|
this._service = service
|
|
2037
2039
|
}
|
|
2038
2040
|
|
|
2041
|
+
applyLabels(
|
|
2042
|
+
data?: AppBskyUnspeccedApplyLabels.InputSchema,
|
|
2043
|
+
opts?: AppBskyUnspeccedApplyLabels.CallOptions,
|
|
2044
|
+
): Promise<AppBskyUnspeccedApplyLabels.Response> {
|
|
2045
|
+
return this._service.xrpc
|
|
2046
|
+
.call('app.bsky.unspecced.applyLabels', opts?.qp, data, opts)
|
|
2047
|
+
.catch((e) => {
|
|
2048
|
+
throw AppBskyUnspeccedApplyLabels.toKnownErr(e)
|
|
2049
|
+
})
|
|
2050
|
+
}
|
|
2051
|
+
|
|
2039
2052
|
getPopular(
|
|
2040
2053
|
params?: AppBskyUnspeccedGetPopular.QueryParams,
|
|
2041
2054
|
opts?: AppBskyUnspeccedGetPopular.CallOptions,
|
package/src/client/lexicons.ts
CHANGED
|
@@ -536,7 +536,6 @@ export const schemaDict = {
|
|
|
536
536
|
},
|
|
537
537
|
moderation: {
|
|
538
538
|
type: 'object',
|
|
539
|
-
required: [],
|
|
540
539
|
properties: {
|
|
541
540
|
currentAction: {
|
|
542
541
|
type: 'ref',
|
|
@@ -708,7 +707,7 @@ export const schemaDict = {
|
|
|
708
707
|
note: {
|
|
709
708
|
type: 'string',
|
|
710
709
|
description:
|
|
711
|
-
'Additionally add a note describing why the invites were
|
|
710
|
+
'Additionally add a note describing why the invites were enabled',
|
|
712
711
|
},
|
|
713
712
|
},
|
|
714
713
|
},
|
|
@@ -1668,7 +1667,7 @@ export const schemaDict = {
|
|
|
1668
1667
|
},
|
|
1669
1668
|
reasonSexual: {
|
|
1670
1669
|
type: 'token',
|
|
1671
|
-
description: 'Unwanted or
|
|
1670
|
+
description: 'Unwanted or mislabeled sexual content',
|
|
1672
1671
|
},
|
|
1673
1672
|
reasonRude: {
|
|
1674
1673
|
type: 'token',
|
|
@@ -6294,6 +6293,32 @@ export const schemaDict = {
|
|
|
6294
6293
|
},
|
|
6295
6294
|
},
|
|
6296
6295
|
},
|
|
6296
|
+
AppBskyUnspeccedApplyLabels: {
|
|
6297
|
+
lexicon: 1,
|
|
6298
|
+
id: 'app.bsky.unspecced.applyLabels',
|
|
6299
|
+
defs: {
|
|
6300
|
+
main: {
|
|
6301
|
+
type: 'procedure',
|
|
6302
|
+
description: 'Allow a labeler to apply labels directly.',
|
|
6303
|
+
input: {
|
|
6304
|
+
encoding: 'application/json',
|
|
6305
|
+
schema: {
|
|
6306
|
+
type: 'object',
|
|
6307
|
+
required: ['labels'],
|
|
6308
|
+
properties: {
|
|
6309
|
+
labels: {
|
|
6310
|
+
type: 'array',
|
|
6311
|
+
items: {
|
|
6312
|
+
type: 'ref',
|
|
6313
|
+
ref: 'lex:com.atproto.label.defs#label',
|
|
6314
|
+
},
|
|
6315
|
+
},
|
|
6316
|
+
},
|
|
6317
|
+
},
|
|
6318
|
+
},
|
|
6319
|
+
},
|
|
6320
|
+
},
|
|
6321
|
+
},
|
|
6297
6322
|
AppBskyUnspeccedGetPopular: {
|
|
6298
6323
|
lexicon: 1,
|
|
6299
6324
|
id: 'app.bsky.unspecced.getPopular',
|
|
@@ -6561,6 +6586,7 @@ export const ids = {
|
|
|
6561
6586
|
'app.bsky.notification.listNotifications',
|
|
6562
6587
|
AppBskyNotificationUpdateSeen: 'app.bsky.notification.updateSeen',
|
|
6563
6588
|
AppBskyRichtextFacet: 'app.bsky.richtext.facet',
|
|
6589
|
+
AppBskyUnspeccedApplyLabels: 'app.bsky.unspecced.applyLabels',
|
|
6564
6590
|
AppBskyUnspeccedGetPopular: 'app.bsky.unspecced.getPopular',
|
|
6565
6591
|
AppBskyUnspeccedGetPopularFeedGenerators:
|
|
6566
6592
|
'app.bsky.unspecced.getPopularFeedGenerators',
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GENERATED CODE - DO NOT MODIFY
|
|
3
|
+
*/
|
|
4
|
+
import { Headers, XRPCError } from '@atproto/xrpc'
|
|
5
|
+
import { ValidationResult, BlobRef } from '@atproto/lexicon'
|
|
6
|
+
import { isObj, hasProp } from '../../../../util'
|
|
7
|
+
import { lexicons } from '../../../../lexicons'
|
|
8
|
+
import { CID } from 'multiformats/cid'
|
|
9
|
+
import * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs'
|
|
10
|
+
|
|
11
|
+
export interface QueryParams {}
|
|
12
|
+
|
|
13
|
+
export interface InputSchema {
|
|
14
|
+
labels: ComAtprotoLabelDefs.Label[]
|
|
15
|
+
[k: string]: unknown
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface CallOptions {
|
|
19
|
+
headers?: Headers
|
|
20
|
+
qp?: QueryParams
|
|
21
|
+
encoding: 'application/json'
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface Response {
|
|
25
|
+
success: boolean
|
|
26
|
+
headers: Headers
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function toKnownErr(e: any) {
|
|
30
|
+
if (e instanceof XRPCError) {
|
|
31
|
+
}
|
|
32
|
+
return e
|
|
33
|
+
}
|
|
@@ -11,7 +11,7 @@ export interface QueryParams {}
|
|
|
11
11
|
|
|
12
12
|
export interface InputSchema {
|
|
13
13
|
account: string
|
|
14
|
-
/** Additionally add a note describing why the invites were
|
|
14
|
+
/** Additionally add a note describing why the invites were enabled */
|
|
15
15
|
note?: string
|
|
16
16
|
[k: string]: unknown
|
|
17
17
|
}
|
|
@@ -21,7 +21,7 @@ export const REASONSPAM = 'com.atproto.moderation.defs#reasonSpam'
|
|
|
21
21
|
export const REASONVIOLATION = 'com.atproto.moderation.defs#reasonViolation'
|
|
22
22
|
/** Misleading identity, affiliation, or content */
|
|
23
23
|
export const REASONMISLEADING = 'com.atproto.moderation.defs#reasonMisleading'
|
|
24
|
-
/** Unwanted or
|
|
24
|
+
/** Unwanted or mislabeled sexual content */
|
|
25
25
|
export const REASONSEXUAL = 'com.atproto.moderation.defs#reasonSexual'
|
|
26
26
|
/** Rude, harassing, explicit, or otherwise unwelcoming behavior */
|
|
27
27
|
export const REASONRUDE = 'com.atproto.moderation.defs#reasonRude'
|
package/src/index.ts
CHANGED
|
@@ -13,5 +13,9 @@ export * from './agent'
|
|
|
13
13
|
export * from './rich-text/rich-text'
|
|
14
14
|
export * from './rich-text/sanitization'
|
|
15
15
|
export * from './rich-text/unicode'
|
|
16
|
+
export * from './moderation'
|
|
17
|
+
export * from './moderation/types'
|
|
18
|
+
export { LABELS } from './moderation/const/labels'
|
|
19
|
+
export { LABEL_GROUPS } from './moderation/const/label-groups'
|
|
16
20
|
export { BskyAgent } from './bsky-agent'
|
|
17
21
|
export { AtpAgent as default } from './agent'
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { AppBskyGraphDefs } from '../client/index'
|
|
2
|
+
import {
|
|
3
|
+
Label,
|
|
4
|
+
LabelPreference,
|
|
5
|
+
ModerationCause,
|
|
6
|
+
ModerationOpts,
|
|
7
|
+
ModerationDecision,
|
|
8
|
+
} from './types'
|
|
9
|
+
import { LABELS } from './const/labels'
|
|
10
|
+
|
|
11
|
+
export class ModerationCauseAccumulator {
|
|
12
|
+
did = ''
|
|
13
|
+
causes: ModerationCause[] = []
|
|
14
|
+
|
|
15
|
+
constructor() {}
|
|
16
|
+
|
|
17
|
+
setDid(did: string) {
|
|
18
|
+
this.did = did
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
addBlocking(blocking: string | undefined) {
|
|
22
|
+
if (blocking) {
|
|
23
|
+
this.causes.push({
|
|
24
|
+
type: 'blocking',
|
|
25
|
+
source: { type: 'user' },
|
|
26
|
+
priority: 3,
|
|
27
|
+
})
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
addBlockedBy(blockedBy: boolean | undefined) {
|
|
32
|
+
if (blockedBy) {
|
|
33
|
+
this.causes.push({
|
|
34
|
+
type: 'blocked-by',
|
|
35
|
+
source: { type: 'user' },
|
|
36
|
+
priority: 4,
|
|
37
|
+
})
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
addLabel(label: Label, opts: ModerationOpts) {
|
|
42
|
+
// look up the label definition
|
|
43
|
+
const labelDef = LABELS[label.val]
|
|
44
|
+
if (!labelDef) {
|
|
45
|
+
// ignore labels we don't understand
|
|
46
|
+
return
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// look up the label preference
|
|
50
|
+
// TODO use the find() when 3P labelers support lands
|
|
51
|
+
// const labelerSettings = opts.labelerSettings.find(
|
|
52
|
+
// (s) => s.labeler.did === label.src,
|
|
53
|
+
// )
|
|
54
|
+
const labelerSettings = opts.labelerSettings[0]
|
|
55
|
+
if (!labelerSettings) {
|
|
56
|
+
// ignore labels from labelers we don't use
|
|
57
|
+
return
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// establish the label preference for interpretation
|
|
61
|
+
let labelPref: LabelPreference = 'ignore'
|
|
62
|
+
if (!labelDef.configurable) {
|
|
63
|
+
labelPref = labelDef.preferences[0]
|
|
64
|
+
} else if (labelDef.flags.includes('adult') && !opts.adultContentEnabled) {
|
|
65
|
+
labelPref = 'hide'
|
|
66
|
+
} else if (labelerSettings.settings[label.val]) {
|
|
67
|
+
labelPref = labelerSettings.settings[label.val]
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// ignore labels the user has asked to ignore
|
|
71
|
+
if (labelPref === 'ignore') {
|
|
72
|
+
return
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// establish the priority of the label
|
|
76
|
+
let priority: 1 | 2 | 5 | 7 | 8
|
|
77
|
+
if (labelDef.flags.includes('no-override')) {
|
|
78
|
+
priority = 1
|
|
79
|
+
} else if (labelPref === 'hide') {
|
|
80
|
+
priority = 2
|
|
81
|
+
} else if (labelDef.onwarn === 'blur') {
|
|
82
|
+
priority = 5
|
|
83
|
+
} else if (labelDef.onwarn === 'blur-media') {
|
|
84
|
+
priority = 7
|
|
85
|
+
} else {
|
|
86
|
+
priority = 8
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
this.causes.push({
|
|
90
|
+
type: 'label',
|
|
91
|
+
label,
|
|
92
|
+
labelDef,
|
|
93
|
+
labeler: labelerSettings.labeler,
|
|
94
|
+
setting: labelPref,
|
|
95
|
+
priority,
|
|
96
|
+
})
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
addMuted(muted: boolean | undefined) {
|
|
100
|
+
if (muted) {
|
|
101
|
+
this.causes.push({
|
|
102
|
+
type: 'muted',
|
|
103
|
+
source: { type: 'user' },
|
|
104
|
+
priority: 6,
|
|
105
|
+
})
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
addMutedByList(mutedByList: AppBskyGraphDefs.ListViewBasic | undefined) {
|
|
110
|
+
if (mutedByList) {
|
|
111
|
+
this.causes.push({
|
|
112
|
+
type: 'muted',
|
|
113
|
+
source: { type: 'list', list: mutedByList },
|
|
114
|
+
priority: 6,
|
|
115
|
+
})
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
finalizeDecision(opts: ModerationOpts): ModerationDecision {
|
|
120
|
+
const mod = new ModerationDecision()
|
|
121
|
+
mod.did = this.did
|
|
122
|
+
if (!this.causes.length) {
|
|
123
|
+
return mod
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// sort the causes by priority and then choose the top one
|
|
127
|
+
this.causes.sort((a, b) => a.priority - b.priority)
|
|
128
|
+
mod.cause = this.causes[0]
|
|
129
|
+
mod.additionalCauses = this.causes.slice(1)
|
|
130
|
+
|
|
131
|
+
// blocked user
|
|
132
|
+
if (mod.cause.type === 'blocking' || mod.cause.type === 'blocked-by') {
|
|
133
|
+
// filter and blur, dont allow override
|
|
134
|
+
mod.filter = true
|
|
135
|
+
mod.blur = true
|
|
136
|
+
mod.noOverride = true
|
|
137
|
+
}
|
|
138
|
+
// muted user
|
|
139
|
+
else if (mod.cause.type === 'muted') {
|
|
140
|
+
// filter and blur
|
|
141
|
+
mod.filter = true
|
|
142
|
+
mod.blur = true
|
|
143
|
+
}
|
|
144
|
+
// labeled subject
|
|
145
|
+
else if (mod.cause.type === 'label') {
|
|
146
|
+
// 'hide' setting
|
|
147
|
+
if (mod.cause.setting === 'hide') {
|
|
148
|
+
// filter
|
|
149
|
+
mod.filter = true
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// 'hide' and 'warn' setting, apply onwarn
|
|
153
|
+
switch (mod.cause.labelDef.onwarn) {
|
|
154
|
+
case 'alert':
|
|
155
|
+
mod.alert = true
|
|
156
|
+
break
|
|
157
|
+
case 'blur':
|
|
158
|
+
mod.blur = true
|
|
159
|
+
break
|
|
160
|
+
case 'blur-media':
|
|
161
|
+
mod.blurMedia = true
|
|
162
|
+
break
|
|
163
|
+
case null:
|
|
164
|
+
// do nothing
|
|
165
|
+
break
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// apply noOverride as needed
|
|
169
|
+
if (mod.cause.labelDef.flags.includes('no-override')) {
|
|
170
|
+
mod.noOverride = true
|
|
171
|
+
} else if (
|
|
172
|
+
mod.cause.labelDef.flags.includes('adult') &&
|
|
173
|
+
!opts.adultContentEnabled
|
|
174
|
+
) {
|
|
175
|
+
mod.noOverride = true
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
return mod
|
|
180
|
+
}
|
|
181
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/** this doc is generated by ./scripts/code/labels.mjs **/
|
|
2
|
+
import { LabelGroupDefinitionMap } from '../types'
|
|
3
|
+
import { LABELS } from './labels'
|
|
4
|
+
|
|
5
|
+
export const LABEL_GROUPS: LabelGroupDefinitionMap = {
|
|
6
|
+
system: {
|
|
7
|
+
id: 'system',
|
|
8
|
+
configurable: false,
|
|
9
|
+
labels: [LABELS['!hide'], LABELS['!no-promote'], LABELS['!warn']],
|
|
10
|
+
strings: {
|
|
11
|
+
settings: {
|
|
12
|
+
en: {
|
|
13
|
+
name: 'System',
|
|
14
|
+
description: 'Moderator overrides for special cases.',
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
legal: {
|
|
20
|
+
id: 'legal',
|
|
21
|
+
configurable: false,
|
|
22
|
+
labels: [LABELS['dmca-violation'], LABELS['doxxing']],
|
|
23
|
+
strings: {
|
|
24
|
+
settings: {
|
|
25
|
+
en: {
|
|
26
|
+
name: 'Legal',
|
|
27
|
+
description: 'Content removed for legal reasons.',
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
sexual: {
|
|
33
|
+
id: 'sexual',
|
|
34
|
+
configurable: true,
|
|
35
|
+
labels: [LABELS['porn'], LABELS['sexual'], LABELS['nudity']],
|
|
36
|
+
strings: {
|
|
37
|
+
settings: {
|
|
38
|
+
en: {
|
|
39
|
+
name: 'Adult Content',
|
|
40
|
+
description: 'Content which is sexual in nature.',
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
violence: {
|
|
46
|
+
id: 'violence',
|
|
47
|
+
configurable: true,
|
|
48
|
+
labels: [
|
|
49
|
+
LABELS['nsfl'],
|
|
50
|
+
LABELS['corpse'],
|
|
51
|
+
LABELS['gore'],
|
|
52
|
+
LABELS['torture'],
|
|
53
|
+
LABELS['self-harm'],
|
|
54
|
+
],
|
|
55
|
+
strings: {
|
|
56
|
+
settings: {
|
|
57
|
+
en: {
|
|
58
|
+
name: 'Violence',
|
|
59
|
+
description: 'Content which is violent or deeply disturbing.',
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
intolerance: {
|
|
65
|
+
id: 'intolerance',
|
|
66
|
+
configurable: true,
|
|
67
|
+
labels: [
|
|
68
|
+
LABELS['intolerant-race'],
|
|
69
|
+
LABELS['intolerant-gender'],
|
|
70
|
+
LABELS['intolerant-sexual-orientation'],
|
|
71
|
+
LABELS['intolerant-religion'],
|
|
72
|
+
LABELS['intolerant'],
|
|
73
|
+
LABELS['icon-intolerant'],
|
|
74
|
+
],
|
|
75
|
+
strings: {
|
|
76
|
+
settings: {
|
|
77
|
+
en: {
|
|
78
|
+
name: 'Intolerance',
|
|
79
|
+
description:
|
|
80
|
+
'Content or behavior which is hateful or intolerant toward a group of people.',
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
rude: {
|
|
86
|
+
id: 'rude',
|
|
87
|
+
configurable: true,
|
|
88
|
+
labels: [LABELS['threat']],
|
|
89
|
+
strings: {
|
|
90
|
+
settings: {
|
|
91
|
+
en: {
|
|
92
|
+
name: 'Rude',
|
|
93
|
+
description: 'Behavior which is rude toward other users.',
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
curation: {
|
|
99
|
+
id: 'curation',
|
|
100
|
+
configurable: true,
|
|
101
|
+
labels: [LABELS['spoiler']],
|
|
102
|
+
strings: {
|
|
103
|
+
settings: {
|
|
104
|
+
en: {
|
|
105
|
+
name: 'Curational',
|
|
106
|
+
description:
|
|
107
|
+
'Subjective moderation geared towards curating a more positive environment.',
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
spam: {
|
|
113
|
+
id: 'spam',
|
|
114
|
+
configurable: true,
|
|
115
|
+
labels: [LABELS['spam']],
|
|
116
|
+
strings: {
|
|
117
|
+
settings: {
|
|
118
|
+
en: {
|
|
119
|
+
name: 'Spam',
|
|
120
|
+
description: "Content which doesn't add to the conversation.",
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
misinfo: {
|
|
126
|
+
id: 'misinfo',
|
|
127
|
+
configurable: true,
|
|
128
|
+
labels: [
|
|
129
|
+
LABELS['account-security'],
|
|
130
|
+
LABELS['net-abuse'],
|
|
131
|
+
LABELS['impersonation'],
|
|
132
|
+
LABELS['scam'],
|
|
133
|
+
],
|
|
134
|
+
strings: {
|
|
135
|
+
settings: {
|
|
136
|
+
en: {
|
|
137
|
+
name: 'Misinformation',
|
|
138
|
+
description: 'Content which misleads or defrauds users.',
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
}
|