WIP! A BB-style forum, on the ATmosphere!
We're still working... we'll be back soon when we have something to show off!
node
typescript
hono
htmx
atproto
1meta {
2 name: Unban User
3 type: http
4 seq: 2
5}
6
7delete {
8 url: {{appview_url}}/api/mod/ban/did:plc:example
9}
10
11headers {
12 Content-Type: application/json
13}
14
15body:json {
16 {
17 "reason": "Ban appeal approved"
18 }
19}
20
21assert {
22 res.status: eq 200
23 res.body.success: eq true
24 res.body.action: eq space.atbb.modAction.unban
25}
26
27docs {
28 Unbans a previously banned user (reversal moderation action).
29
30 Requires authentication via session cookie and `space.atbb.permission.banUsers` permission.
31
32 Path parameters:
33 - did: string (required) - DID of the user to unban (in URL path)
34
35 Body parameters:
36 - reason: string (required) - Reason for unbanning (1-3000 characters, cannot be empty)
37
38 Returns:
39 {
40 "success": true,
41 "action": "space.atbb.modAction.unban",
42 "targetDid": "did:plc:example",
43 "uri": "at://forum-did/space.atbb.modAction/rkey",
44 "cid": "bafyrei...",
45 "alreadyActive": false
46 }
47
48 If user is already unbanned, returns 200 with `alreadyActive: true` (idempotent).
49
50 Writes a modAction record to the Forum DID's PDS with:
51 - action: "space.atbb.modAction.unban"
52 - subject: { did: targetDid }
53 - reason: provided reason
54 - createdBy: moderator's DID
55
56 Error codes:
57 - 400: Invalid input (invalid did format, missing/empty reason, malformed JSON)
58 - 401: Unauthorized (not authenticated)
59 - 403: Forbidden (lacks banUsers permission)
60 - 404: Target user not found (not a forum member)
61 - 500: ForumAgent not available (server configuration issue)
62 - 503: ForumAgent not authenticated or unable to reach Forum PDS (retry later)
63
64 Notes:
65 - Unban writes a distinct "unban" action type (different from ban)
66 - Read-path logic determines current ban state by checking most recent action chronologically
67 - Additive reversal model: unban writes new record, doesn't delete ban record
68}