@atproto/ozone 0.1.14 → 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 +7 -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 +898 -0
- package/dist/lexicon/lexicons.d.ts.map +1 -1
- package/dist/lexicon/lexicons.js +924 -0
- package/dist/lexicon/lexicons.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 +926 -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
|
@@ -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
|
package/src/lexicon/index.ts
CHANGED
|
@@ -129,6 +129,23 @@ import * as AppBskyUnspeccedGetSuggestionsSkeleton from './types/app/bsky/unspec
|
|
|
129
129
|
import * as AppBskyUnspeccedGetTaggedSuggestions from './types/app/bsky/unspecced/getTaggedSuggestions'
|
|
130
130
|
import * as AppBskyUnspeccedSearchActorsSkeleton from './types/app/bsky/unspecced/searchActorsSkeleton'
|
|
131
131
|
import * as AppBskyUnspeccedSearchPostsSkeleton from './types/app/bsky/unspecced/searchPostsSkeleton'
|
|
132
|
+
import * as ChatBskyActorDeleteAccount from './types/chat/bsky/actor/deleteAccount'
|
|
133
|
+
import * as ChatBskyActorExportAccountData from './types/chat/bsky/actor/exportAccountData'
|
|
134
|
+
import * as ChatBskyConvoDeleteMessageForSelf from './types/chat/bsky/convo/deleteMessageForSelf'
|
|
135
|
+
import * as ChatBskyConvoGetConvo from './types/chat/bsky/convo/getConvo'
|
|
136
|
+
import * as ChatBskyConvoGetConvoForMembers from './types/chat/bsky/convo/getConvoForMembers'
|
|
137
|
+
import * as ChatBskyConvoGetLog from './types/chat/bsky/convo/getLog'
|
|
138
|
+
import * as ChatBskyConvoGetMessages from './types/chat/bsky/convo/getMessages'
|
|
139
|
+
import * as ChatBskyConvoLeaveConvo from './types/chat/bsky/convo/leaveConvo'
|
|
140
|
+
import * as ChatBskyConvoListConvos from './types/chat/bsky/convo/listConvos'
|
|
141
|
+
import * as ChatBskyConvoMuteConvo from './types/chat/bsky/convo/muteConvo'
|
|
142
|
+
import * as ChatBskyConvoSendMessage from './types/chat/bsky/convo/sendMessage'
|
|
143
|
+
import * as ChatBskyConvoSendMessageBatch from './types/chat/bsky/convo/sendMessageBatch'
|
|
144
|
+
import * as ChatBskyConvoUnmuteConvo from './types/chat/bsky/convo/unmuteConvo'
|
|
145
|
+
import * as ChatBskyConvoUpdateRead from './types/chat/bsky/convo/updateRead'
|
|
146
|
+
import * as ChatBskyModerationGetActorMetadata from './types/chat/bsky/moderation/getActorMetadata'
|
|
147
|
+
import * as ChatBskyModerationGetMessageContext from './types/chat/bsky/moderation/getMessageContext'
|
|
148
|
+
import * as ChatBskyModerationUpdateActorAccess from './types/chat/bsky/moderation/updateActorAccess'
|
|
132
149
|
import * as ToolsOzoneCommunicationCreateTemplate from './types/tools/ozone/communication/createTemplate'
|
|
133
150
|
import * as ToolsOzoneCommunicationDeleteTemplate from './types/tools/ozone/communication/deleteTemplate'
|
|
134
151
|
import * as ToolsOzoneCommunicationListTemplates from './types/tools/ozone/communication/listTemplates'
|
|
@@ -183,12 +200,14 @@ export class Server {
|
|
|
183
200
|
xrpc: XrpcServer
|
|
184
201
|
com: ComNS
|
|
185
202
|
app: AppNS
|
|
203
|
+
chat: ChatNS
|
|
186
204
|
tools: ToolsNS
|
|
187
205
|
|
|
188
206
|
constructor(options?: XrpcOptions) {
|
|
189
207
|
this.xrpc = createXrpcServer(schemas, options)
|
|
190
208
|
this.com = new ComNS(this)
|
|
191
209
|
this.app = new AppNS(this)
|
|
210
|
+
this.chat = new ChatNS(this)
|
|
192
211
|
this.tools = new ToolsNS(this)
|
|
193
212
|
}
|
|
194
213
|
}
|
|
@@ -1713,6 +1732,241 @@ export class AppBskyUnspeccedNS {
|
|
|
1713
1732
|
}
|
|
1714
1733
|
}
|
|
1715
1734
|
|
|
1735
|
+
export class ChatNS {
|
|
1736
|
+
_server: Server
|
|
1737
|
+
bsky: ChatBskyNS
|
|
1738
|
+
|
|
1739
|
+
constructor(server: Server) {
|
|
1740
|
+
this._server = server
|
|
1741
|
+
this.bsky = new ChatBskyNS(server)
|
|
1742
|
+
}
|
|
1743
|
+
}
|
|
1744
|
+
|
|
1745
|
+
export class ChatBskyNS {
|
|
1746
|
+
_server: Server
|
|
1747
|
+
actor: ChatBskyActorNS
|
|
1748
|
+
convo: ChatBskyConvoNS
|
|
1749
|
+
moderation: ChatBskyModerationNS
|
|
1750
|
+
|
|
1751
|
+
constructor(server: Server) {
|
|
1752
|
+
this._server = server
|
|
1753
|
+
this.actor = new ChatBskyActorNS(server)
|
|
1754
|
+
this.convo = new ChatBskyConvoNS(server)
|
|
1755
|
+
this.moderation = new ChatBskyModerationNS(server)
|
|
1756
|
+
}
|
|
1757
|
+
}
|
|
1758
|
+
|
|
1759
|
+
export class ChatBskyActorNS {
|
|
1760
|
+
_server: Server
|
|
1761
|
+
|
|
1762
|
+
constructor(server: Server) {
|
|
1763
|
+
this._server = server
|
|
1764
|
+
}
|
|
1765
|
+
|
|
1766
|
+
deleteAccount<AV extends AuthVerifier>(
|
|
1767
|
+
cfg: ConfigOf<
|
|
1768
|
+
AV,
|
|
1769
|
+
ChatBskyActorDeleteAccount.Handler<ExtractAuth<AV>>,
|
|
1770
|
+
ChatBskyActorDeleteAccount.HandlerReqCtx<ExtractAuth<AV>>
|
|
1771
|
+
>,
|
|
1772
|
+
) {
|
|
1773
|
+
const nsid = 'chat.bsky.actor.deleteAccount' // @ts-ignore
|
|
1774
|
+
return this._server.xrpc.method(nsid, cfg)
|
|
1775
|
+
}
|
|
1776
|
+
|
|
1777
|
+
exportAccountData<AV extends AuthVerifier>(
|
|
1778
|
+
cfg: ConfigOf<
|
|
1779
|
+
AV,
|
|
1780
|
+
ChatBskyActorExportAccountData.Handler<ExtractAuth<AV>>,
|
|
1781
|
+
ChatBskyActorExportAccountData.HandlerReqCtx<ExtractAuth<AV>>
|
|
1782
|
+
>,
|
|
1783
|
+
) {
|
|
1784
|
+
const nsid = 'chat.bsky.actor.exportAccountData' // @ts-ignore
|
|
1785
|
+
return this._server.xrpc.method(nsid, cfg)
|
|
1786
|
+
}
|
|
1787
|
+
}
|
|
1788
|
+
|
|
1789
|
+
export class ChatBskyConvoNS {
|
|
1790
|
+
_server: Server
|
|
1791
|
+
|
|
1792
|
+
constructor(server: Server) {
|
|
1793
|
+
this._server = server
|
|
1794
|
+
}
|
|
1795
|
+
|
|
1796
|
+
deleteMessageForSelf<AV extends AuthVerifier>(
|
|
1797
|
+
cfg: ConfigOf<
|
|
1798
|
+
AV,
|
|
1799
|
+
ChatBskyConvoDeleteMessageForSelf.Handler<ExtractAuth<AV>>,
|
|
1800
|
+
ChatBskyConvoDeleteMessageForSelf.HandlerReqCtx<ExtractAuth<AV>>
|
|
1801
|
+
>,
|
|
1802
|
+
) {
|
|
1803
|
+
const nsid = 'chat.bsky.convo.deleteMessageForSelf' // @ts-ignore
|
|
1804
|
+
return this._server.xrpc.method(nsid, cfg)
|
|
1805
|
+
}
|
|
1806
|
+
|
|
1807
|
+
getConvo<AV extends AuthVerifier>(
|
|
1808
|
+
cfg: ConfigOf<
|
|
1809
|
+
AV,
|
|
1810
|
+
ChatBskyConvoGetConvo.Handler<ExtractAuth<AV>>,
|
|
1811
|
+
ChatBskyConvoGetConvo.HandlerReqCtx<ExtractAuth<AV>>
|
|
1812
|
+
>,
|
|
1813
|
+
) {
|
|
1814
|
+
const nsid = 'chat.bsky.convo.getConvo' // @ts-ignore
|
|
1815
|
+
return this._server.xrpc.method(nsid, cfg)
|
|
1816
|
+
}
|
|
1817
|
+
|
|
1818
|
+
getConvoForMembers<AV extends AuthVerifier>(
|
|
1819
|
+
cfg: ConfigOf<
|
|
1820
|
+
AV,
|
|
1821
|
+
ChatBskyConvoGetConvoForMembers.Handler<ExtractAuth<AV>>,
|
|
1822
|
+
ChatBskyConvoGetConvoForMembers.HandlerReqCtx<ExtractAuth<AV>>
|
|
1823
|
+
>,
|
|
1824
|
+
) {
|
|
1825
|
+
const nsid = 'chat.bsky.convo.getConvoForMembers' // @ts-ignore
|
|
1826
|
+
return this._server.xrpc.method(nsid, cfg)
|
|
1827
|
+
}
|
|
1828
|
+
|
|
1829
|
+
getLog<AV extends AuthVerifier>(
|
|
1830
|
+
cfg: ConfigOf<
|
|
1831
|
+
AV,
|
|
1832
|
+
ChatBskyConvoGetLog.Handler<ExtractAuth<AV>>,
|
|
1833
|
+
ChatBskyConvoGetLog.HandlerReqCtx<ExtractAuth<AV>>
|
|
1834
|
+
>,
|
|
1835
|
+
) {
|
|
1836
|
+
const nsid = 'chat.bsky.convo.getLog' // @ts-ignore
|
|
1837
|
+
return this._server.xrpc.method(nsid, cfg)
|
|
1838
|
+
}
|
|
1839
|
+
|
|
1840
|
+
getMessages<AV extends AuthVerifier>(
|
|
1841
|
+
cfg: ConfigOf<
|
|
1842
|
+
AV,
|
|
1843
|
+
ChatBskyConvoGetMessages.Handler<ExtractAuth<AV>>,
|
|
1844
|
+
ChatBskyConvoGetMessages.HandlerReqCtx<ExtractAuth<AV>>
|
|
1845
|
+
>,
|
|
1846
|
+
) {
|
|
1847
|
+
const nsid = 'chat.bsky.convo.getMessages' // @ts-ignore
|
|
1848
|
+
return this._server.xrpc.method(nsid, cfg)
|
|
1849
|
+
}
|
|
1850
|
+
|
|
1851
|
+
leaveConvo<AV extends AuthVerifier>(
|
|
1852
|
+
cfg: ConfigOf<
|
|
1853
|
+
AV,
|
|
1854
|
+
ChatBskyConvoLeaveConvo.Handler<ExtractAuth<AV>>,
|
|
1855
|
+
ChatBskyConvoLeaveConvo.HandlerReqCtx<ExtractAuth<AV>>
|
|
1856
|
+
>,
|
|
1857
|
+
) {
|
|
1858
|
+
const nsid = 'chat.bsky.convo.leaveConvo' // @ts-ignore
|
|
1859
|
+
return this._server.xrpc.method(nsid, cfg)
|
|
1860
|
+
}
|
|
1861
|
+
|
|
1862
|
+
listConvos<AV extends AuthVerifier>(
|
|
1863
|
+
cfg: ConfigOf<
|
|
1864
|
+
AV,
|
|
1865
|
+
ChatBskyConvoListConvos.Handler<ExtractAuth<AV>>,
|
|
1866
|
+
ChatBskyConvoListConvos.HandlerReqCtx<ExtractAuth<AV>>
|
|
1867
|
+
>,
|
|
1868
|
+
) {
|
|
1869
|
+
const nsid = 'chat.bsky.convo.listConvos' // @ts-ignore
|
|
1870
|
+
return this._server.xrpc.method(nsid, cfg)
|
|
1871
|
+
}
|
|
1872
|
+
|
|
1873
|
+
muteConvo<AV extends AuthVerifier>(
|
|
1874
|
+
cfg: ConfigOf<
|
|
1875
|
+
AV,
|
|
1876
|
+
ChatBskyConvoMuteConvo.Handler<ExtractAuth<AV>>,
|
|
1877
|
+
ChatBskyConvoMuteConvo.HandlerReqCtx<ExtractAuth<AV>>
|
|
1878
|
+
>,
|
|
1879
|
+
) {
|
|
1880
|
+
const nsid = 'chat.bsky.convo.muteConvo' // @ts-ignore
|
|
1881
|
+
return this._server.xrpc.method(nsid, cfg)
|
|
1882
|
+
}
|
|
1883
|
+
|
|
1884
|
+
sendMessage<AV extends AuthVerifier>(
|
|
1885
|
+
cfg: ConfigOf<
|
|
1886
|
+
AV,
|
|
1887
|
+
ChatBskyConvoSendMessage.Handler<ExtractAuth<AV>>,
|
|
1888
|
+
ChatBskyConvoSendMessage.HandlerReqCtx<ExtractAuth<AV>>
|
|
1889
|
+
>,
|
|
1890
|
+
) {
|
|
1891
|
+
const nsid = 'chat.bsky.convo.sendMessage' // @ts-ignore
|
|
1892
|
+
return this._server.xrpc.method(nsid, cfg)
|
|
1893
|
+
}
|
|
1894
|
+
|
|
1895
|
+
sendMessageBatch<AV extends AuthVerifier>(
|
|
1896
|
+
cfg: ConfigOf<
|
|
1897
|
+
AV,
|
|
1898
|
+
ChatBskyConvoSendMessageBatch.Handler<ExtractAuth<AV>>,
|
|
1899
|
+
ChatBskyConvoSendMessageBatch.HandlerReqCtx<ExtractAuth<AV>>
|
|
1900
|
+
>,
|
|
1901
|
+
) {
|
|
1902
|
+
const nsid = 'chat.bsky.convo.sendMessageBatch' // @ts-ignore
|
|
1903
|
+
return this._server.xrpc.method(nsid, cfg)
|
|
1904
|
+
}
|
|
1905
|
+
|
|
1906
|
+
unmuteConvo<AV extends AuthVerifier>(
|
|
1907
|
+
cfg: ConfigOf<
|
|
1908
|
+
AV,
|
|
1909
|
+
ChatBskyConvoUnmuteConvo.Handler<ExtractAuth<AV>>,
|
|
1910
|
+
ChatBskyConvoUnmuteConvo.HandlerReqCtx<ExtractAuth<AV>>
|
|
1911
|
+
>,
|
|
1912
|
+
) {
|
|
1913
|
+
const nsid = 'chat.bsky.convo.unmuteConvo' // @ts-ignore
|
|
1914
|
+
return this._server.xrpc.method(nsid, cfg)
|
|
1915
|
+
}
|
|
1916
|
+
|
|
1917
|
+
updateRead<AV extends AuthVerifier>(
|
|
1918
|
+
cfg: ConfigOf<
|
|
1919
|
+
AV,
|
|
1920
|
+
ChatBskyConvoUpdateRead.Handler<ExtractAuth<AV>>,
|
|
1921
|
+
ChatBskyConvoUpdateRead.HandlerReqCtx<ExtractAuth<AV>>
|
|
1922
|
+
>,
|
|
1923
|
+
) {
|
|
1924
|
+
const nsid = 'chat.bsky.convo.updateRead' // @ts-ignore
|
|
1925
|
+
return this._server.xrpc.method(nsid, cfg)
|
|
1926
|
+
}
|
|
1927
|
+
}
|
|
1928
|
+
|
|
1929
|
+
export class ChatBskyModerationNS {
|
|
1930
|
+
_server: Server
|
|
1931
|
+
|
|
1932
|
+
constructor(server: Server) {
|
|
1933
|
+
this._server = server
|
|
1934
|
+
}
|
|
1935
|
+
|
|
1936
|
+
getActorMetadata<AV extends AuthVerifier>(
|
|
1937
|
+
cfg: ConfigOf<
|
|
1938
|
+
AV,
|
|
1939
|
+
ChatBskyModerationGetActorMetadata.Handler<ExtractAuth<AV>>,
|
|
1940
|
+
ChatBskyModerationGetActorMetadata.HandlerReqCtx<ExtractAuth<AV>>
|
|
1941
|
+
>,
|
|
1942
|
+
) {
|
|
1943
|
+
const nsid = 'chat.bsky.moderation.getActorMetadata' // @ts-ignore
|
|
1944
|
+
return this._server.xrpc.method(nsid, cfg)
|
|
1945
|
+
}
|
|
1946
|
+
|
|
1947
|
+
getMessageContext<AV extends AuthVerifier>(
|
|
1948
|
+
cfg: ConfigOf<
|
|
1949
|
+
AV,
|
|
1950
|
+
ChatBskyModerationGetMessageContext.Handler<ExtractAuth<AV>>,
|
|
1951
|
+
ChatBskyModerationGetMessageContext.HandlerReqCtx<ExtractAuth<AV>>
|
|
1952
|
+
>,
|
|
1953
|
+
) {
|
|
1954
|
+
const nsid = 'chat.bsky.moderation.getMessageContext' // @ts-ignore
|
|
1955
|
+
return this._server.xrpc.method(nsid, cfg)
|
|
1956
|
+
}
|
|
1957
|
+
|
|
1958
|
+
updateActorAccess<AV extends AuthVerifier>(
|
|
1959
|
+
cfg: ConfigOf<
|
|
1960
|
+
AV,
|
|
1961
|
+
ChatBskyModerationUpdateActorAccess.Handler<ExtractAuth<AV>>,
|
|
1962
|
+
ChatBskyModerationUpdateActorAccess.HandlerReqCtx<ExtractAuth<AV>>
|
|
1963
|
+
>,
|
|
1964
|
+
) {
|
|
1965
|
+
const nsid = 'chat.bsky.moderation.updateActorAccess' // @ts-ignore
|
|
1966
|
+
return this._server.xrpc.method(nsid, cfg)
|
|
1967
|
+
}
|
|
1968
|
+
}
|
|
1969
|
+
|
|
1716
1970
|
export class ToolsNS {
|
|
1717
1971
|
_server: Server
|
|
1718
1972
|
ozone: ToolsOzoneNS
|