@atproto/api 0.4.4 → 0.5.1
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/unspecced/applyLabels.d.ts +18 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +1401 -12
- package/dist/index.js.map +4 -4
- 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/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 +5 -3
- 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/tsconfig.build.tsbuildinfo +1 -1
- package/tests/_util.ts +0 -26
package/README.md
CHANGED
|
@@ -160,6 +160,87 @@ console.log(rt3.length) // => 25
|
|
|
160
160
|
console.log(rt3.graphemeLength) // => 1
|
|
161
161
|
```
|
|
162
162
|
|
|
163
|
+
### Moderation
|
|
164
|
+
|
|
165
|
+
Applying the moderation system is a challenging task, but we've done our best to simplify it for you. The Moderation API helps handle a wide range of tasks, including:
|
|
166
|
+
|
|
167
|
+
- User muting (including mutelists)
|
|
168
|
+
- User blocking
|
|
169
|
+
- Moderator labeling
|
|
170
|
+
|
|
171
|
+
For more information, see the [Moderation Documentation](./docs/moderation.md) or the associated [Labels Reference](./docs/labels.md).
|
|
172
|
+
|
|
173
|
+
```typescript
|
|
174
|
+
import {moderatePost, moderateProfile} from '@atproto/api'
|
|
175
|
+
|
|
176
|
+
// We call the appropriate moderation function for the content
|
|
177
|
+
// =
|
|
178
|
+
|
|
179
|
+
const postMod = moderatePost(postView, getOpts())
|
|
180
|
+
const profileMod = moderateProfile(profileView, getOpts())
|
|
181
|
+
|
|
182
|
+
// We then use the output to decide how to affect rendering
|
|
183
|
+
// =
|
|
184
|
+
|
|
185
|
+
if (postMod.content.filter) {
|
|
186
|
+
// dont render in feeds or similar
|
|
187
|
+
// in contexts where this is disruptive (eg threads) you should ignore this and instead check blur
|
|
188
|
+
}
|
|
189
|
+
if (postMod.content.blur) {
|
|
190
|
+
// render the whole object behind a cover (use postMod.content.cause to explain)
|
|
191
|
+
if (postMod.content.noOverride) {
|
|
192
|
+
// do not allow the cover the be removed
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (postMod.content.alert) {
|
|
196
|
+
// render a warning on the content (use postMod.content.cause to explain)
|
|
197
|
+
}
|
|
198
|
+
if (postMod.embed.blur) {
|
|
199
|
+
// render the embedded media behind a cover (use postMod.embed.cause to explain)
|
|
200
|
+
if (postMod.embed.noOverride) {
|
|
201
|
+
// do not allow the cover the be removed
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
if (postMod.embed.alert) {
|
|
205
|
+
// render a warning on the embedded media (use postMod.embed.cause to explain)
|
|
206
|
+
}
|
|
207
|
+
if (postMod.avatar.blur) {
|
|
208
|
+
// render the avatar behind a cover
|
|
209
|
+
}
|
|
210
|
+
if (postMod.avatar.alert) {
|
|
211
|
+
// render an alert on the avatar
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// The options passed into `apply()` supply the user's preferences
|
|
215
|
+
// =
|
|
216
|
+
|
|
217
|
+
function getOpts() {
|
|
218
|
+
return {
|
|
219
|
+
// the logged-in user's DID
|
|
220
|
+
userDid: 'did:plc:1234...',
|
|
221
|
+
|
|
222
|
+
// is adult content allowed?
|
|
223
|
+
adultContentEnabled: true,
|
|
224
|
+
|
|
225
|
+
// the user's labeler settings
|
|
226
|
+
labelerSettings: [
|
|
227
|
+
{
|
|
228
|
+
labeler: {
|
|
229
|
+
did: '...',
|
|
230
|
+
displayName: 'My mod service'
|
|
231
|
+
},
|
|
232
|
+
settings: {
|
|
233
|
+
porn: 'hide',
|
|
234
|
+
sexual: 'warn',
|
|
235
|
+
nudity: 'ignore',
|
|
236
|
+
// ...
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
]
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
163
244
|
## Advanced
|
|
164
245
|
|
|
165
246
|
### Advanced API calls
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "system",
|
|
4
|
+
"configurable": false,
|
|
5
|
+
"labels": [
|
|
6
|
+
{
|
|
7
|
+
"id": "!hide",
|
|
8
|
+
"preferences": ["hide"],
|
|
9
|
+
"flags": ["no-override"],
|
|
10
|
+
"onwarn": "blur"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": "!no-promote",
|
|
14
|
+
"preferences": ["hide"],
|
|
15
|
+
"flags": [],
|
|
16
|
+
"onwarn": null
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": "!warn",
|
|
20
|
+
"preferences": ["warn"],
|
|
21
|
+
"flags": [],
|
|
22
|
+
"onwarn": "blur"
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": "legal",
|
|
28
|
+
"configurable": false,
|
|
29
|
+
"labels": [
|
|
30
|
+
{
|
|
31
|
+
"id": "dmca-violation",
|
|
32
|
+
"preferences": ["hide"],
|
|
33
|
+
"flags": ["no-override"],
|
|
34
|
+
"onwarn": "blur"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"id": "doxxing",
|
|
38
|
+
"preferences": ["hide"],
|
|
39
|
+
"flags": ["no-override"],
|
|
40
|
+
"onwarn": "blur"
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": "sexual",
|
|
46
|
+
"configurable": true,
|
|
47
|
+
"labels": [
|
|
48
|
+
{
|
|
49
|
+
"id": "porn",
|
|
50
|
+
"preferences": ["ignore", "warn", "hide"],
|
|
51
|
+
"flags": ["adult"],
|
|
52
|
+
"onwarn": "blur-media"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"id": "sexual",
|
|
56
|
+
"preferences": ["ignore", "warn", "hide"],
|
|
57
|
+
"flags": ["adult"],
|
|
58
|
+
"onwarn": "blur-media"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"id": "nudity",
|
|
62
|
+
"preferences": ["ignore", "warn", "hide"],
|
|
63
|
+
"flags": ["adult"],
|
|
64
|
+
"onwarn": "blur-media"
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"id": "violence",
|
|
70
|
+
"configurable": true,
|
|
71
|
+
"labels": [
|
|
72
|
+
{
|
|
73
|
+
"id": "nsfl",
|
|
74
|
+
"preferences": ["ignore", "warn", "hide"],
|
|
75
|
+
"flags": ["adult"],
|
|
76
|
+
"onwarn": "blur-media"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"id": "corpse",
|
|
80
|
+
"preferences": ["ignore", "warn", "hide"],
|
|
81
|
+
"flags": ["adult"],
|
|
82
|
+
"onwarn": "blur-media"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"id": "gore",
|
|
86
|
+
"preferences": ["ignore", "warn", "hide"],
|
|
87
|
+
"flags": ["adult"],
|
|
88
|
+
"onwarn": "blur-media"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"id": "torture",
|
|
92
|
+
"preferences": ["ignore", "warn", "hide"],
|
|
93
|
+
"flags": ["adult"],
|
|
94
|
+
"onwarn": "blur"
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"id": "self-harm",
|
|
98
|
+
"preferences": ["ignore", "warn", "hide"],
|
|
99
|
+
"flags": ["adult"],
|
|
100
|
+
"onwarn": "blur-media"
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"id": "intolerance",
|
|
106
|
+
"configurable": true,
|
|
107
|
+
"labels": [
|
|
108
|
+
{
|
|
109
|
+
"id": "intolerant-race",
|
|
110
|
+
"preferences": ["ignore", "warn", "hide"],
|
|
111
|
+
"flags": [],
|
|
112
|
+
"onwarn": "blur"
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"id": "intolerant-gender",
|
|
116
|
+
"preferences": ["ignore", "warn", "hide"],
|
|
117
|
+
"flags": [],
|
|
118
|
+
"onwarn": "blur"
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"id": "intolerant-sexual-orientation",
|
|
122
|
+
"preferences": ["ignore", "warn", "hide"],
|
|
123
|
+
"flags": [],
|
|
124
|
+
"onwarn": "blur"
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"id": "intolerant-religion",
|
|
128
|
+
"preferences": ["ignore", "warn", "hide"],
|
|
129
|
+
"flags": [],
|
|
130
|
+
"onwarn": "blur"
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"id": "intolerant",
|
|
134
|
+
"preferences": ["ignore", "warn", "hide"],
|
|
135
|
+
"flags": [],
|
|
136
|
+
"onwarn": "blur"
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"id": "icon-intolerant",
|
|
140
|
+
"preferences": ["ignore", "warn", "hide"],
|
|
141
|
+
"flags": [],
|
|
142
|
+
"onwarn": "blur-media"
|
|
143
|
+
}
|
|
144
|
+
]
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"id": "rude",
|
|
148
|
+
"configurable": true,
|
|
149
|
+
"labels": [
|
|
150
|
+
{
|
|
151
|
+
"id": "threat",
|
|
152
|
+
"preferences": ["ignore", "warn", "hide"],
|
|
153
|
+
"flags": [],
|
|
154
|
+
"onwarn": "blur"
|
|
155
|
+
}
|
|
156
|
+
]
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"id": "curation",
|
|
160
|
+
"configurable": true,
|
|
161
|
+
"labels": [
|
|
162
|
+
{
|
|
163
|
+
"id": "spoiler",
|
|
164
|
+
"preferences": ["ignore", "warn", "hide"],
|
|
165
|
+
"flags": [],
|
|
166
|
+
"onwarn": "blur"
|
|
167
|
+
}
|
|
168
|
+
]
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"id": "spam",
|
|
172
|
+
"configurable": true,
|
|
173
|
+
"labels": [
|
|
174
|
+
{
|
|
175
|
+
"id": "spam",
|
|
176
|
+
"preferences": ["ignore", "warn", "hide"],
|
|
177
|
+
"flags": [],
|
|
178
|
+
"onwarn": "blur"
|
|
179
|
+
}
|
|
180
|
+
]
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"id": "misinfo",
|
|
184
|
+
"configurable": true,
|
|
185
|
+
"labels": [
|
|
186
|
+
{
|
|
187
|
+
"id": "account-security",
|
|
188
|
+
"preferences": ["ignore", "warn", "hide"],
|
|
189
|
+
"flags": [],
|
|
190
|
+
"onwarn": "blur"
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"id": "net-abuse",
|
|
194
|
+
"preferences": ["ignore", "warn", "hide"],
|
|
195
|
+
"flags": [],
|
|
196
|
+
"onwarn": "blur"
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"id": "impersonation",
|
|
200
|
+
"preferences": ["ignore", "warn", "hide"],
|
|
201
|
+
"flags": [],
|
|
202
|
+
"onwarn": "alert"
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"id": "scam",
|
|
206
|
+
"preferences": ["ignore", "warn", "hide"],
|
|
207
|
+
"flags": [],
|
|
208
|
+
"onwarn": "alert"
|
|
209
|
+
}
|
|
210
|
+
]
|
|
211
|
+
}
|
|
212
|
+
]
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"system": {
|
|
3
|
+
"name": "System",
|
|
4
|
+
"description": "Moderator overrides for special cases."
|
|
5
|
+
},
|
|
6
|
+
"legal": {
|
|
7
|
+
"name": "Legal",
|
|
8
|
+
"description": "Content removed for legal reasons."
|
|
9
|
+
},
|
|
10
|
+
"sexual": {
|
|
11
|
+
"name": "Adult Content",
|
|
12
|
+
"description": "Content which is sexual in nature."
|
|
13
|
+
},
|
|
14
|
+
"violence": {
|
|
15
|
+
"name": "Violence",
|
|
16
|
+
"description": "Content which is violent or deeply disturbing."
|
|
17
|
+
},
|
|
18
|
+
"intolerance": {
|
|
19
|
+
"name": "Intolerance",
|
|
20
|
+
"description": "Content or behavior which is hateful or intolerant toward a group of people."
|
|
21
|
+
},
|
|
22
|
+
"rude": {
|
|
23
|
+
"name": "Rude",
|
|
24
|
+
"description": "Behavior which is rude toward other users."
|
|
25
|
+
},
|
|
26
|
+
"curation": {
|
|
27
|
+
"name": "Curational",
|
|
28
|
+
"description": "Subjective moderation geared towards curating a more positive environment."
|
|
29
|
+
},
|
|
30
|
+
"spam": {
|
|
31
|
+
"name": "Spam",
|
|
32
|
+
"description": "Content which doesn't add to the conversation."
|
|
33
|
+
},
|
|
34
|
+
"misinfo": {
|
|
35
|
+
"name": "Misinformation",
|
|
36
|
+
"description": "Content which misleads or defrauds users."
|
|
37
|
+
}
|
|
38
|
+
}
|