@atproto/ozone 0.1.13 → 0.1.15
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/CHANGELOG.md +14 -0
- package/dist/api/chat/getActorMetadata.d.ts +4 -0
- package/dist/api/chat/getActorMetadata.d.ts.map +1 -0
- package/dist/api/chat/getActorMetadata.js +20 -0
- package/dist/api/chat/getActorMetadata.js.map +1 -0
- package/dist/api/chat/getMessageContext.d.ts +4 -0
- package/dist/api/chat/getMessageContext.d.ts.map +1 -0
- package/dist/api/chat/getMessageContext.js +34 -0
- package/dist/api/chat/getMessageContext.js.map +1 -0
- package/dist/api/chat/index.d.ts +4 -0
- package/dist/api/chat/index.d.ts.map +1 -0
- package/dist/api/chat/index.js +14 -0
- package/dist/api/chat/index.js.map +1 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +2 -0
- package/dist/api/index.js.map +1 -1
- package/dist/api/moderation/emitEvent.d.ts.map +1 -1
- package/dist/api/moderation/emitEvent.js +22 -0
- package/dist/api/moderation/emitEvent.js.map +1 -1
- package/dist/api/util.js +1 -0
- package/dist/api/util.js.map +1 -1
- package/dist/config/config.d.ts +5 -0
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +9 -0
- package/dist/config/config.js.map +1 -1
- package/dist/config/env.d.ts +2 -0
- package/dist/config/env.d.ts.map +1 -1
- package/dist/config/env.js +2 -0
- package/dist/config/env.js.map +1 -1
- package/dist/context.d.ts +7 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +13 -0
- package/dist/context.js.map +1 -1
- package/dist/db/migrations/20240506T225055595Z-message-subject.d.ts +4 -0
- package/dist/db/migrations/20240506T225055595Z-message-subject.d.ts.map +1 -0
- package/dist/db/migrations/20240506T225055595Z-message-subject.js +24 -0
- package/dist/db/migrations/20240506T225055595Z-message-subject.js.map +1 -0
- package/dist/db/migrations/index.d.ts +1 -0
- package/dist/db/migrations/index.d.ts.map +1 -1
- package/dist/db/migrations/index.js +2 -1
- package/dist/db/migrations/index.js.map +1 -1
- package/dist/db/schema/moderation_event.d.ts +2 -1
- package/dist/db/schema/moderation_event.d.ts.map +1 -1
- package/dist/lexicon/index.d.ts +59 -0
- package/dist/lexicon/index.d.ts.map +1 -1
- package/dist/lexicon/index.js +164 -1
- package/dist/lexicon/index.js.map +1 -1
- package/dist/lexicon/lexicons.d.ts +912 -0
- package/dist/lexicon/lexicons.d.ts.map +1 -1
- package/dist/lexicon/lexicons.js +938 -0
- package/dist/lexicon/lexicons.js.map +1 -1
- package/dist/lexicon/types/app/bsky/actor/defs.d.ts +7 -0
- package/dist/lexicon/types/app/bsky/actor/defs.d.ts.map +1 -1
- package/dist/lexicon/types/app/bsky/actor/defs.js +11 -1
- package/dist/lexicon/types/app/bsky/actor/defs.js.map +1 -1
- package/dist/lexicon/types/chat/bsky/actor/declaration.d.ts +11 -0
- package/dist/lexicon/types/chat/bsky/actor/declaration.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/actor/declaration.js +17 -0
- package/dist/lexicon/types/chat/bsky/actor/declaration.js.map +1 -0
- package/dist/lexicon/types/chat/bsky/actor/defs.d.ts +21 -0
- package/dist/lexicon/types/chat/bsky/actor/defs.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/actor/defs.js +16 -0
- package/dist/lexicon/types/chat/bsky/actor/defs.js.map +1 -0
- package/dist/lexicon/types/chat/bsky/actor/deleteAccount.d.ts +33 -0
- package/dist/lexicon/types/chat/bsky/actor/deleteAccount.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/actor/deleteAccount.js +3 -0
- package/dist/lexicon/types/chat/bsky/actor/deleteAccount.js.map +1 -0
- package/dist/lexicon/types/chat/bsky/actor/exportAccountData.d.ts +32 -0
- package/dist/lexicon/types/chat/bsky/actor/exportAccountData.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/actor/exportAccountData.js +3 -0
- package/dist/lexicon/types/chat/bsky/actor/exportAccountData.js.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/defs.d.ts +109 -0
- package/dist/lexicon/types/chat/bsky/convo/defs.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/defs.js +106 -0
- package/dist/lexicon/types/chat/bsky/convo/defs.js.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/deleteMessageForSelf.d.ts +39 -0
- package/dist/lexicon/types/chat/bsky/convo/deleteMessageForSelf.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/deleteMessageForSelf.js +3 -0
- package/dist/lexicon/types/chat/bsky/convo/deleteMessageForSelf.js.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/getConvo.d.ts +36 -0
- package/dist/lexicon/types/chat/bsky/convo/getConvo.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/getConvo.js +3 -0
- package/dist/lexicon/types/chat/bsky/convo/getConvo.js.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/getConvoForMembers.d.ts +36 -0
- package/dist/lexicon/types/chat/bsky/convo/getConvoForMembers.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/getConvoForMembers.js +3 -0
- package/dist/lexicon/types/chat/bsky/convo/getConvoForMembers.js.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/getLog.d.ts +40 -0
- package/dist/lexicon/types/chat/bsky/convo/getLog.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/getLog.js +3 -0
- package/dist/lexicon/types/chat/bsky/convo/getLog.js.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/getMessages.d.ts +42 -0
- package/dist/lexicon/types/chat/bsky/convo/getMessages.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/getMessages.js +3 -0
- package/dist/lexicon/types/chat/bsky/convo/getMessages.js.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/leaveConvo.d.ts +41 -0
- package/dist/lexicon/types/chat/bsky/convo/leaveConvo.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/leaveConvo.js +3 -0
- package/dist/lexicon/types/chat/bsky/convo/leaveConvo.js.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/listConvos.d.ts +38 -0
- package/dist/lexicon/types/chat/bsky/convo/listConvos.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/listConvos.js +3 -0
- package/dist/lexicon/types/chat/bsky/convo/listConvos.js.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/muteConvo.d.ts +41 -0
- package/dist/lexicon/types/chat/bsky/convo/muteConvo.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/muteConvo.js +3 -0
- package/dist/lexicon/types/chat/bsky/convo/muteConvo.js.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/sendMessage.d.ts +39 -0
- package/dist/lexicon/types/chat/bsky/convo/sendMessage.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/sendMessage.js +3 -0
- package/dist/lexicon/types/chat/bsky/convo/sendMessage.js.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/sendMessageBatch.d.ts +49 -0
- package/dist/lexicon/types/chat/bsky/convo/sendMessageBatch.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/sendMessageBatch.js +16 -0
- package/dist/lexicon/types/chat/bsky/convo/sendMessageBatch.js.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/unmuteConvo.d.ts +41 -0
- package/dist/lexicon/types/chat/bsky/convo/unmuteConvo.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/unmuteConvo.js +3 -0
- package/dist/lexicon/types/chat/bsky/convo/unmuteConvo.js.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/updateRead.d.ts +42 -0
- package/dist/lexicon/types/chat/bsky/convo/updateRead.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/updateRead.js +3 -0
- package/dist/lexicon/types/chat/bsky/convo/updateRead.js.map +1 -0
- package/dist/lexicon/types/chat/bsky/moderation/getActorMetadata.d.ts +47 -0
- package/dist/lexicon/types/chat/bsky/moderation/getActorMetadata.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/moderation/getActorMetadata.js +16 -0
- package/dist/lexicon/types/chat/bsky/moderation/getActorMetadata.js.map +1 -0
- package/dist/lexicon/types/chat/bsky/moderation/getMessageContext.d.ts +43 -0
- package/dist/lexicon/types/chat/bsky/moderation/getMessageContext.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/moderation/getMessageContext.js +3 -0
- package/dist/lexicon/types/chat/bsky/moderation/getMessageContext.js.map +1 -0
- package/dist/lexicon/types/chat/bsky/moderation/updateActorAccess.d.ts +31 -0
- package/dist/lexicon/types/chat/bsky/moderation/updateActorAccess.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/moderation/updateActorAccess.js +3 -0
- package/dist/lexicon/types/chat/bsky/moderation/updateActorAccess.js.map +1 -0
- package/dist/lexicon/types/tools/ozone/moderation/defs.d.ts +2 -1
- package/dist/lexicon/types/tools/ozone/moderation/defs.d.ts.map +1 -1
- package/dist/lexicon/types/tools/ozone/moderation/defs.js.map +1 -1
- package/dist/mod-service/index.d.ts +2 -1
- package/dist/mod-service/index.d.ts.map +1 -1
- package/dist/mod-service/index.js +2 -1
- package/dist/mod-service/index.js.map +1 -1
- package/dist/mod-service/subject.d.ts +35 -2
- package/dist/mod-service/subject.d.ts.map +1 -1
- package/dist/mod-service/subject.js +85 -1
- package/dist/mod-service/subject.js.map +1 -1
- package/package.json +4 -4
- package/src/api/chat/getActorMetadata.ts +22 -0
- package/src/api/chat/getMessageContext.ts +39 -0
- package/src/api/chat/index.ts +10 -0
- package/src/api/index.ts +2 -0
- package/src/api/moderation/emitEvent.ts +31 -0
- package/src/api/util.ts +1 -0
- package/src/config/config.ts +16 -0
- package/src/config/env.ts +4 -0
- package/src/context.ts +16 -0
- package/src/db/migrations/20240506T225055595Z-message-subject.ts +21 -0
- package/src/db/migrations/index.ts +1 -0
- package/src/db/schema/moderation_event.ts +5 -1
- package/src/lexicon/index.ts +254 -0
- package/src/lexicon/lexicons.ts +940 -0
- package/src/lexicon/types/app/bsky/actor/defs.ts +20 -0
- package/src/lexicon/types/chat/bsky/actor/declaration.ts +25 -0
- package/src/lexicon/types/chat/bsky/actor/defs.ts +34 -0
- package/src/lexicon/types/chat/bsky/actor/deleteAccount.ts +42 -0
- package/src/lexicon/types/chat/bsky/actor/exportAccountData.ts +38 -0
- package/src/lexicon/types/chat/bsky/convo/defs.ts +215 -0
- package/src/lexicon/types/chat/bsky/convo/deleteMessageForSelf.ts +48 -0
- package/src/lexicon/types/chat/bsky/convo/getConvo.ts +46 -0
- package/src/lexicon/types/chat/bsky/convo/getConvoForMembers.ts +46 -0
- package/src/lexicon/types/chat/bsky/convo/getLog.ts +53 -0
- package/src/lexicon/types/chat/bsky/convo/getMessages.ts +53 -0
- package/src/lexicon/types/chat/bsky/convo/leaveConvo.ts +50 -0
- package/src/lexicon/types/chat/bsky/convo/listConvos.ts +48 -0
- package/src/lexicon/types/chat/bsky/convo/muteConvo.ts +50 -0
- package/src/lexicon/types/chat/bsky/convo/sendMessage.ts +48 -0
- package/src/lexicon/types/chat/bsky/convo/sendMessageBatch.ts +68 -0
- package/src/lexicon/types/chat/bsky/convo/unmuteConvo.ts +50 -0
- package/src/lexicon/types/chat/bsky/convo/updateRead.ts +51 -0
- package/src/lexicon/types/chat/bsky/moderation/getActorMetadata.ts +67 -0
- package/src/lexicon/types/chat/bsky/moderation/getMessageContext.ts +54 -0
- package/src/lexicon/types/chat/bsky/moderation/updateActorAccess.ts +40 -0
- package/src/lexicon/types/tools/ozone/moderation/defs.ts +2 -0
- package/src/mod-service/index.ts +2 -2
- package/src/mod-service/subject.ts +73 -2
- package/tests/__snapshots__/moderation.test.ts.snap +30 -0
- package/tests/moderation.test.ts +39 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RecordSubject = exports.RepoSubject = exports.subjectFromStatusRow = exports.subjectFromEventRow = exports.subjectFromInput = void 0;
|
|
3
|
+
exports.MessageSubject = exports.RecordSubject = exports.RepoSubject = exports.subjectFromStatusRow = exports.subjectFromEventRow = exports.subjectFromInput = void 0;
|
|
4
4
|
const syntax_1 = require("@atproto/syntax");
|
|
5
5
|
const xrpc_server_1 = require("@atproto/xrpc-server");
|
|
6
6
|
const subjectFromInput = (subject, blobs) => {
|
|
@@ -16,6 +16,12 @@ const subjectFromInput = (subject, blobs) => {
|
|
|
16
16
|
typeof subject.cid === 'string') {
|
|
17
17
|
return new RecordSubject(subject.uri, subject.cid, blobs);
|
|
18
18
|
}
|
|
19
|
+
if (subject.$type === 'chat.bsky.convo.defs#messageRef' &&
|
|
20
|
+
typeof subject.did === 'string' &&
|
|
21
|
+
typeof subject.convoId === 'string' &&
|
|
22
|
+
typeof subject.messageId === 'string') {
|
|
23
|
+
return new MessageSubject(subject.did, subject.convoId, subject.messageId);
|
|
24
|
+
}
|
|
19
25
|
throw new xrpc_server_1.InvalidRequestError('Invalid subject');
|
|
20
26
|
};
|
|
21
27
|
exports.subjectFromInput = subjectFromInput;
|
|
@@ -25,6 +31,11 @@ const subjectFromEventRow = (row) => {
|
|
|
25
31
|
row.subjectCid) {
|
|
26
32
|
return new RecordSubject(row.subjectUri, row.subjectCid, row.subjectBlobCids ?? []);
|
|
27
33
|
}
|
|
34
|
+
else if (row.subjectType === 'chat.bsky.convo.defs#messageRef' &&
|
|
35
|
+
row.subjectMessageId) {
|
|
36
|
+
const convoId = typeof row.meta?.['convoId'] === 'string' ? row.meta['convoId'] : '';
|
|
37
|
+
return new MessageSubject(row.subjectDid, convoId, row.subjectMessageId);
|
|
38
|
+
}
|
|
28
39
|
else {
|
|
29
40
|
return new RepoSubject(row.subjectDid);
|
|
30
41
|
}
|
|
@@ -69,6 +80,9 @@ class RepoSubject {
|
|
|
69
80
|
isRecord() {
|
|
70
81
|
return false;
|
|
71
82
|
}
|
|
83
|
+
isMessage() {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
72
86
|
info() {
|
|
73
87
|
return {
|
|
74
88
|
subjectType: 'com.atproto.admin.defs#repoRef',
|
|
@@ -76,6 +90,8 @@ class RepoSubject {
|
|
|
76
90
|
subjectUri: null,
|
|
77
91
|
subjectCid: null,
|
|
78
92
|
subjectBlobCids: null,
|
|
93
|
+
subjectMessageId: null,
|
|
94
|
+
meta: null,
|
|
79
95
|
};
|
|
80
96
|
}
|
|
81
97
|
lex() {
|
|
@@ -134,6 +150,9 @@ class RecordSubject {
|
|
|
134
150
|
isRecord() {
|
|
135
151
|
return true;
|
|
136
152
|
}
|
|
153
|
+
isMessage() {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
137
156
|
info() {
|
|
138
157
|
return {
|
|
139
158
|
subjectType: 'com.atproto.repo.strongRef',
|
|
@@ -141,6 +160,8 @@ class RecordSubject {
|
|
|
141
160
|
subjectUri: this.uri,
|
|
142
161
|
subjectCid: this.cid,
|
|
143
162
|
subjectBlobCids: this.blobCids ?? [],
|
|
163
|
+
subjectMessageId: null,
|
|
164
|
+
meta: null,
|
|
144
165
|
};
|
|
145
166
|
}
|
|
146
167
|
lex() {
|
|
@@ -152,4 +173,67 @@ class RecordSubject {
|
|
|
152
173
|
}
|
|
153
174
|
}
|
|
154
175
|
exports.RecordSubject = RecordSubject;
|
|
176
|
+
class MessageSubject {
|
|
177
|
+
constructor(did, convoId, messageId) {
|
|
178
|
+
Object.defineProperty(this, "did", {
|
|
179
|
+
enumerable: true,
|
|
180
|
+
configurable: true,
|
|
181
|
+
writable: true,
|
|
182
|
+
value: did
|
|
183
|
+
});
|
|
184
|
+
Object.defineProperty(this, "convoId", {
|
|
185
|
+
enumerable: true,
|
|
186
|
+
configurable: true,
|
|
187
|
+
writable: true,
|
|
188
|
+
value: convoId
|
|
189
|
+
});
|
|
190
|
+
Object.defineProperty(this, "messageId", {
|
|
191
|
+
enumerable: true,
|
|
192
|
+
configurable: true,
|
|
193
|
+
writable: true,
|
|
194
|
+
value: messageId
|
|
195
|
+
});
|
|
196
|
+
Object.defineProperty(this, "blobCids", {
|
|
197
|
+
enumerable: true,
|
|
198
|
+
configurable: true,
|
|
199
|
+
writable: true,
|
|
200
|
+
value: undefined
|
|
201
|
+
});
|
|
202
|
+
Object.defineProperty(this, "recordPath", {
|
|
203
|
+
enumerable: true,
|
|
204
|
+
configurable: true,
|
|
205
|
+
writable: true,
|
|
206
|
+
value: undefined
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
isRepo() {
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
isRecord() {
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
isMessage() {
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
info() {
|
|
219
|
+
return {
|
|
220
|
+
subjectType: 'chat.bsky.convo.defs#messageRef',
|
|
221
|
+
subjectDid: this.did,
|
|
222
|
+
subjectUri: null,
|
|
223
|
+
subjectCid: null,
|
|
224
|
+
subjectBlobCids: null,
|
|
225
|
+
subjectMessageId: this.messageId,
|
|
226
|
+
meta: { convoId: this.convoId },
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
lex() {
|
|
230
|
+
return {
|
|
231
|
+
$type: 'chat.bsky.convo.defs#messageRef',
|
|
232
|
+
did: this.did,
|
|
233
|
+
convoId: this.convoId,
|
|
234
|
+
messageId: this.messageId,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
exports.MessageSubject = MessageSubject;
|
|
155
239
|
//# sourceMappingURL=subject.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subject.js","sourceRoot":"","sources":["../../src/mod-service/subject.ts"],"names":[],"mappings":";;;AAAA,4CAAuC;AAGvC,sDAA0D;
|
|
1
|
+
{"version":3,"file":"subject.js","sourceRoot":"","sources":["../../src/mod-service/subject.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atproto/ozone",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.15",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Backend service for moderating the Bluesky network.",
|
|
6
6
|
"keywords": [
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"pino-http": "^8.2.1",
|
|
32
32
|
"typed-emitter": "^2.1.0",
|
|
33
33
|
"uint8arrays": "3.0.0",
|
|
34
|
-
"@atproto/api": "^0.12.
|
|
34
|
+
"@atproto/api": "^0.12.11",
|
|
35
35
|
"@atproto/common": "^0.4.0",
|
|
36
36
|
"@atproto/crypto": "^0.4.0",
|
|
37
37
|
"@atproto/identity": "^0.4.0",
|
|
@@ -51,10 +51,10 @@
|
|
|
51
51
|
"jest": "^28.1.2",
|
|
52
52
|
"ts-node": "^10.8.2",
|
|
53
53
|
"@atproto/lex-cli": "^0.4.0",
|
|
54
|
-
"@atproto/pds": "^0.4.
|
|
54
|
+
"@atproto/pds": "^0.4.23"
|
|
55
55
|
},
|
|
56
56
|
"scripts": {
|
|
57
|
-
"codegen": "lex gen-server ./src/lexicon ../../lexicons/com/atproto/*/* ../../lexicons/app/bsky/*/* ../../lexicons/tools/ozone/*/*",
|
|
57
|
+
"codegen": "lex gen-server ./src/lexicon ../../lexicons/com/atproto/*/* ../../lexicons/app/bsky/*/* ../../lexicons/chat/bsky/*/* ../../lexicons/tools/ozone/*/*",
|
|
58
58
|
"build": "tsc --build tsconfig.build.json",
|
|
59
59
|
"start": "node --enable-source-maps dist/bin.js",
|
|
60
60
|
"test": "../dev-infra/with-test-redis-and-db.sh jest",
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Server } from '../../lexicon'
|
|
2
|
+
import AppContext from '../../context'
|
|
3
|
+
import { InvalidRequestError } from '@atproto/xrpc-server'
|
|
4
|
+
|
|
5
|
+
export default function (server: Server, ctx: AppContext) {
|
|
6
|
+
server.chat.bsky.moderation.getActorMetadata({
|
|
7
|
+
auth: ctx.authVerifier.modOrAdminToken,
|
|
8
|
+
handler: async ({ params }) => {
|
|
9
|
+
if (!ctx.chatAgent) {
|
|
10
|
+
throw new InvalidRequestError('No chat agent configured')
|
|
11
|
+
}
|
|
12
|
+
const res = await ctx.chatAgent.api.chat.bsky.moderation.getActorMetadata(
|
|
13
|
+
params,
|
|
14
|
+
await ctx.chatAuth(),
|
|
15
|
+
)
|
|
16
|
+
return {
|
|
17
|
+
encoding: 'application/json',
|
|
18
|
+
body: res.data,
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
})
|
|
22
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Server } from '../../lexicon'
|
|
2
|
+
import AppContext from '../../context'
|
|
3
|
+
import { InvalidRequestError } from '@atproto/xrpc-server'
|
|
4
|
+
|
|
5
|
+
export default function (server: Server, ctx: AppContext) {
|
|
6
|
+
server.chat.bsky.moderation.getMessageContext({
|
|
7
|
+
auth: ctx.authVerifier.modOrAdminToken,
|
|
8
|
+
handler: async ({ params, auth }) => {
|
|
9
|
+
if (!ctx.chatAgent) {
|
|
10
|
+
throw new InvalidRequestError('No chat agent configured')
|
|
11
|
+
}
|
|
12
|
+
const maxWindowSize = auth.credentials.isModerator ? 5 : 0
|
|
13
|
+
const before = Math.min(maxWindowSize, params.before)
|
|
14
|
+
const after = Math.min(maxWindowSize, params.after)
|
|
15
|
+
|
|
16
|
+
// Ensure that the requested message was actually reported to prevent arbitrary lookups
|
|
17
|
+
const found = await ctx.db.db
|
|
18
|
+
.selectFrom('moderation_event')
|
|
19
|
+
.select('id')
|
|
20
|
+
.where('subjectMessageId', '=', params.messageId)
|
|
21
|
+
.where('action', '=', 'tools.ozone.moderation.defs#modEventReport')
|
|
22
|
+
.limit(1)
|
|
23
|
+
.executeTakeFirst()
|
|
24
|
+
if (!found) {
|
|
25
|
+
throw new InvalidRequestError('No report for requested message')
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const res =
|
|
29
|
+
await ctx.chatAgent.api.chat.bsky.moderation.getMessageContext(
|
|
30
|
+
{ ...params, before, after },
|
|
31
|
+
await ctx.chatAuth(),
|
|
32
|
+
)
|
|
33
|
+
return {
|
|
34
|
+
encoding: 'application/json',
|
|
35
|
+
body: res.data,
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
})
|
|
39
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Server } from '../../lexicon'
|
|
2
|
+
import AppContext from '../../context'
|
|
3
|
+
import getActorMetadata from './getActorMetadata'
|
|
4
|
+
import getMessageContext from './getMessageContext'
|
|
5
|
+
|
|
6
|
+
export default function (server: Server, ctx: AppContext) {
|
|
7
|
+
getActorMetadata(server, ctx)
|
|
8
|
+
getMessageContext(server, ctx)
|
|
9
|
+
return server
|
|
10
|
+
}
|
package/src/api/index.ts
CHANGED
|
@@ -15,6 +15,7 @@ import createTemplate from './communication/createTemplate'
|
|
|
15
15
|
import updateTemplate from './communication/updateTemplate'
|
|
16
16
|
import deleteTemplate from './communication/deleteTemplate'
|
|
17
17
|
import listTemplates from './communication/listTemplates'
|
|
18
|
+
import chat from './chat'
|
|
18
19
|
import proxied from './proxied'
|
|
19
20
|
|
|
20
21
|
export * as health from './health'
|
|
@@ -37,6 +38,7 @@ export default function (server: Server, ctx: AppContext) {
|
|
|
37
38
|
createTemplate(server, ctx)
|
|
38
39
|
updateTemplate(server, ctx)
|
|
39
40
|
deleteTemplate(server, ctx)
|
|
41
|
+
chat(server, ctx)
|
|
40
42
|
proxied(server, ctx)
|
|
41
43
|
return server
|
|
42
44
|
}
|
|
@@ -7,8 +7,10 @@ import {
|
|
|
7
7
|
isModEventLabel,
|
|
8
8
|
isModEventMuteReporter,
|
|
9
9
|
isModEventReverseTakedown,
|
|
10
|
+
isModEventTag,
|
|
10
11
|
isModEventTakedown,
|
|
11
12
|
isModEventUnmuteReporter,
|
|
13
|
+
ModEventTag,
|
|
12
14
|
} from '../../lexicon/types/tools/ozone/moderation/defs'
|
|
13
15
|
import { HandlerInput } from '../../lexicon/types/tools/ozone/moderation/emitEvent'
|
|
14
16
|
import { subjectFromInput } from '../../mod-service/subject'
|
|
@@ -122,6 +124,10 @@ const handleModerationEvent = async ({
|
|
|
122
124
|
throw new InvalidRequestError('Subject must be a repo when muting reporter')
|
|
123
125
|
}
|
|
124
126
|
|
|
127
|
+
if (isModEventTag(event)) {
|
|
128
|
+
assertTagAuth(event, auth)
|
|
129
|
+
}
|
|
130
|
+
|
|
125
131
|
const moderationEvent = await db.transaction(async (dbTxn) => {
|
|
126
132
|
const moderationTxn = ctx.modService(dbTxn)
|
|
127
133
|
|
|
@@ -214,6 +220,31 @@ export default function (server: Server, ctx: AppContext) {
|
|
|
214
220
|
})
|
|
215
221
|
}
|
|
216
222
|
|
|
223
|
+
const TAG_AUTH: Record<string, 'triage' | 'moderator' | 'admin'> = {
|
|
224
|
+
'chat-disabled': 'moderator',
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
const assertTagAuth = (
|
|
228
|
+
event: ModEventTag,
|
|
229
|
+
auth: ModeratorOutput | AdminTokenOutput,
|
|
230
|
+
) => {
|
|
231
|
+
// admins can add/remove any tag
|
|
232
|
+
if (auth.credentials.isAdmin) return
|
|
233
|
+
|
|
234
|
+
for (const tag of Object.keys(TAG_AUTH)) {
|
|
235
|
+
if (event.add.includes(tag) || event.remove.includes(tag)) {
|
|
236
|
+
if (TAG_AUTH[tag] === 'admin' && !auth.credentials.isAdmin) {
|
|
237
|
+
throw new Error(`Must be an admin to add tag: ${tag}`)
|
|
238
|
+
} else if (
|
|
239
|
+
TAG_AUTH[tag] === 'moderator' &&
|
|
240
|
+
!auth.credentials.isModerator
|
|
241
|
+
) {
|
|
242
|
+
throw new Error(`Must be a full moderator to add tag: ${tag}`)
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
217
248
|
const validateLabels = (labels: string[]) => {
|
|
218
249
|
for (const label of labels) {
|
|
219
250
|
for (const char of badChars) {
|
package/src/api/util.ts
CHANGED
package/src/config/config.ts
CHANGED
|
@@ -41,6 +41,15 @@ export const envToCfg = (env: OzoneEnvironment): OzoneConfig => {
|
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
+
let chatCfg: OzoneConfig['chat'] = null
|
|
45
|
+
if (env.chatUrl || env.chatDid) {
|
|
46
|
+
assert(env.chatUrl && env.chatDid)
|
|
47
|
+
chatCfg = {
|
|
48
|
+
url: env.chatUrl,
|
|
49
|
+
did: env.chatDid,
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
44
53
|
const cdnCfg: OzoneConfig['cdn'] = {
|
|
45
54
|
paths: env.cdnPaths,
|
|
46
55
|
}
|
|
@@ -68,6 +77,7 @@ export const envToCfg = (env: OzoneEnvironment): OzoneConfig => {
|
|
|
68
77
|
db: dbCfg,
|
|
69
78
|
appview: appviewCfg,
|
|
70
79
|
pds: pdsCfg,
|
|
80
|
+
chat: chatCfg,
|
|
71
81
|
cdn: cdnCfg,
|
|
72
82
|
identity: identityCfg,
|
|
73
83
|
blobDivert: blobDivertServiceCfg,
|
|
@@ -80,6 +90,7 @@ export type OzoneConfig = {
|
|
|
80
90
|
db: DatabaseConfig
|
|
81
91
|
appview: AppviewConfig
|
|
82
92
|
pds: PdsConfig | null
|
|
93
|
+
chat: ChatConfig | null
|
|
83
94
|
cdn: CdnConfig
|
|
84
95
|
identity: IdentityConfig
|
|
85
96
|
blobDivert: BlobDivertConfig | null
|
|
@@ -118,6 +129,11 @@ export type PdsConfig = {
|
|
|
118
129
|
did: string
|
|
119
130
|
}
|
|
120
131
|
|
|
132
|
+
export type ChatConfig = {
|
|
133
|
+
url: string
|
|
134
|
+
did: string
|
|
135
|
+
}
|
|
136
|
+
|
|
121
137
|
export type CdnConfig = {
|
|
122
138
|
paths?: string[]
|
|
123
139
|
}
|
package/src/config/env.ts
CHANGED
|
@@ -13,6 +13,8 @@ export const readEnv = (): OzoneEnvironment => {
|
|
|
13
13
|
appviewPushEvents: envBool('OZONE_APPVIEW_PUSH_EVENTS'),
|
|
14
14
|
pdsUrl: envStr('OZONE_PDS_URL'),
|
|
15
15
|
pdsDid: envStr('OZONE_PDS_DID'),
|
|
16
|
+
chatUrl: envStr('OZONE_CHAT_URL'),
|
|
17
|
+
chatDid: envStr('OZONE_CHAT_DID'),
|
|
16
18
|
dbPostgresUrl: envStr('OZONE_DB_POSTGRES_URL'),
|
|
17
19
|
dbPostgresSchema: envStr('OZONE_DB_POSTGRES_SCHEMA'),
|
|
18
20
|
dbPoolSize: envInt('OZONE_DB_POOL_SIZE'),
|
|
@@ -42,6 +44,8 @@ export type OzoneEnvironment = {
|
|
|
42
44
|
appviewPushEvents?: boolean
|
|
43
45
|
pdsUrl?: string
|
|
44
46
|
pdsDid?: string
|
|
47
|
+
chatUrl?: string
|
|
48
|
+
chatDid?: string
|
|
45
49
|
dbPostgresUrl?: string
|
|
46
50
|
dbPostgresSchema?: string
|
|
47
51
|
dbPoolSize?: number
|
package/src/context.ts
CHANGED
|
@@ -26,6 +26,7 @@ export type AppContextOptions = {
|
|
|
26
26
|
communicationTemplateService: CommunicationTemplateServiceCreator
|
|
27
27
|
appviewAgent: AtpAgent
|
|
28
28
|
pdsAgent: AtpAgent | undefined
|
|
29
|
+
chatAgent: AtpAgent | undefined
|
|
29
30
|
blobDiverter?: BlobDiverter
|
|
30
31
|
signingKey: Keypair
|
|
31
32
|
signingKeyId: number
|
|
@@ -60,6 +61,9 @@ export class AppContext {
|
|
|
60
61
|
const pdsAgent = cfg.pds
|
|
61
62
|
? new AtpAgent({ service: cfg.pds.url })
|
|
62
63
|
: undefined
|
|
64
|
+
const chatAgent = cfg.chat
|
|
65
|
+
? new AtpAgent({ service: cfg.chat.url })
|
|
66
|
+
: undefined
|
|
63
67
|
|
|
64
68
|
const idResolver = new IdResolver({
|
|
65
69
|
plcUrl: cfg.identity.plcUrl,
|
|
@@ -115,6 +119,7 @@ export class AppContext {
|
|
|
115
119
|
communicationTemplateService,
|
|
116
120
|
appviewAgent,
|
|
117
121
|
pdsAgent,
|
|
122
|
+
chatAgent,
|
|
118
123
|
signingKey,
|
|
119
124
|
signingKeyId,
|
|
120
125
|
idResolver,
|
|
@@ -164,6 +169,10 @@ export class AppContext {
|
|
|
164
169
|
return this.opts.pdsAgent
|
|
165
170
|
}
|
|
166
171
|
|
|
172
|
+
get chatAgent(): AtpAgent | undefined {
|
|
173
|
+
return this.opts.chatAgent
|
|
174
|
+
}
|
|
175
|
+
|
|
167
176
|
get signingKey(): Keypair {
|
|
168
177
|
return this.opts.signingKey
|
|
169
178
|
}
|
|
@@ -212,6 +221,13 @@ export class AppContext {
|
|
|
212
221
|
return this.serviceAuthHeaders(this.cfg.appview.did)
|
|
213
222
|
}
|
|
214
223
|
|
|
224
|
+
async chatAuth() {
|
|
225
|
+
if (!this.cfg.chat) {
|
|
226
|
+
throw new Error('No chat service configured')
|
|
227
|
+
}
|
|
228
|
+
return this.serviceAuthHeaders(this.cfg.chat.did)
|
|
229
|
+
}
|
|
230
|
+
|
|
215
231
|
devOverride(overrides: Partial<AppContextOptions>) {
|
|
216
232
|
this.opts = {
|
|
217
233
|
...this.opts,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Kysely } from 'kysely'
|
|
2
|
+
|
|
3
|
+
export async function up(db: Kysely<unknown>): Promise<void> {
|
|
4
|
+
await db.schema
|
|
5
|
+
.alterTable('moderation_event')
|
|
6
|
+
.addColumn('subjectMessageId', 'varchar')
|
|
7
|
+
.execute()
|
|
8
|
+
// support lookup for chat.bsky.moderation.getMessageContext
|
|
9
|
+
await db.schema
|
|
10
|
+
.createIndex('moderation_event_message_id_index')
|
|
11
|
+
.on('moderation_event')
|
|
12
|
+
.column('subjectMessageId')
|
|
13
|
+
.execute()
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export async function down(db: Kysely<unknown>): Promise<void> {
|
|
17
|
+
await db.schema
|
|
18
|
+
.alterTable('moderation_event')
|
|
19
|
+
.dropColumn('subjectMessageId')
|
|
20
|
+
.execute()
|
|
21
|
+
}
|
|
@@ -8,3 +8,4 @@ export * as _20240201T051104136Z from './20240201T051104136Z-mod-event-blobs'
|
|
|
8
8
|
export * as _20240208T213404429Z from './20240208T213404429Z-add-tags-column-to-moderation-subject'
|
|
9
9
|
export * as _20240228T003647759Z from './20240228T003647759Z-add-label-sigs'
|
|
10
10
|
export * as _20240408T192432676Z from './20240408T192432676Z-mute-reporting'
|
|
11
|
+
export * as _20240506T225055595Z from './20240506T225055595Z-message-subject'
|
|
@@ -19,11 +19,15 @@ export interface ModerationEvent {
|
|
|
19
19
|
| 'tools.ozone.moderation.defs#modEventEmail'
|
|
20
20
|
| 'tools.ozone.moderation.defs#modEventResolveAppeal'
|
|
21
21
|
| 'tools.ozone.moderation.defs#modEventTag'
|
|
22
|
-
subjectType:
|
|
22
|
+
subjectType:
|
|
23
|
+
| 'com.atproto.admin.defs#repoRef'
|
|
24
|
+
| 'com.atproto.repo.strongRef'
|
|
25
|
+
| 'chat.bsky.convo.defs#messageRef'
|
|
23
26
|
subjectDid: string
|
|
24
27
|
subjectUri: string | null
|
|
25
28
|
subjectCid: string | null
|
|
26
29
|
subjectBlobCids: string[] | null
|
|
30
|
+
subjectMessageId: string | null
|
|
27
31
|
createLabelVals: string | null
|
|
28
32
|
negateLabelVals: string | null
|
|
29
33
|
comment: string | null
|