@atproto/ozone
Version:
Backend service for moderating the Bluesky network.
41 lines (34 loc) • 1.19 kB
text/typescript
import { AtUri } from '@atproto/syntax'
import { InvalidRequestError } from '@atproto/xrpc-server'
import { AppContext } from '../../context'
import { Server } from '../../lexicon'
import { addAccountInfoToRepoView, getPdsAccountInfos } from '../util'
export default function (server: Server, ctx: AppContext) {
server.tools.ozone.moderation.getRecord({
auth: ctx.authVerifier.modOrAdminToken,
handler: async ({ params, auth, req }) => {
const db = ctx.db
const labelers = ctx.reqLabelers(req)
const [records, accountInfos] = await Promise.all([
ctx.modService(db).views.recordDetails([params], labelers),
getPdsAccountInfos(ctx, [new AtUri(params.uri).hostname]),
])
const record = records.get(params.uri)
if (!record) {
throw new InvalidRequestError(
`Could not locate record: ${params.uri}`,
'RecordNotFound',
)
}
record.repo = addAccountInfoToRepoView(
record.repo,
accountInfos.get(record.repo.did) || null,
auth.credentials.isModerator,
)
return {
encoding: 'application/json',
body: record,
}
},
})
}