* Model mod actions for actor takedowns * Add administration lex schemas for moderation actions * Initial implementation of takedown mod action and reversal * Refactor admin actions into a service * Check for account takedown when creating new session or refreshing session * Sweep usage of getUser() and getUserByEmail() for takedowns * Begin sweep for account takedowns * Tidy takedown checks * Handle post author takedowns * Fix tests and migrations for mod takedown * Fix xrpc-server delayed read of blob payloads * Test takedown mod action, misc fixes * Remodel lex schemas for admin moderation actions * Remove delcaration cid from actor takedowns, lex schema tidy * Add notes * Move moderation methods to com.atproto, based around repo rather than actor * Moderation reports of repos and records * Implement moderation report resolution method * Tidy * Place moderation-init migration after mute-init * Allow services to reference each other * Model record takedowns in db * Lex schemas for record takedowns * Service/methods for record takedowns, fix report view subject * Apply record takedown to posts in feeds * Test record takedown effects, fix reversal * Support server moderation flag and acknowledge actions, fix action/report resolution for records * Track repo takedowns on repo_root rather than did_handle * Move repo/record reporting under com.atproto.report * Colocate all moderation functionality into moderation service, combine from admin and repo services * Tidy * Tidy * Unify mod report and action methods with new repo/record ref schemas
XRPC Server API
Usage
import * as xrpc from '@atproto/xrpc-server'
import express from 'express'
// create xrpc server
const server = xrpc.createServer([{
lexicon: 1,
id: 'io.example.ping',
defs: {
main: {
type: 'query',
parameters: {
type: 'params',
properties: { message: { type: 'string' } },
},
output: {
encoding: 'application/json',
},
},
},
}
])
function ping(ctx: {auth: xrpc.HandlerAuth | undefined, params: xrpc.Params, input: xrpc.HandlerInput | undefined, req: express.Request, res: express.Response}) {
return { encoding: 'application/json', body: {message: ctx.params.message }}
}
server.method('io.example.ping', ping)
// mount in express
const app = express()
app.use(server.router)
app.listen(8080)
License
MIT