# mock_relay.nu
# A closure that handles HTTP requests
{|req|
# check path
if ($req.path | str starts-with "/xrpc/com.atproto.sync.listRepos") {
let cursor = ($req.query | get --optional cursor)
# define some mock repos
let all_repos = [
{ did: "did:web:mock1.com", head: "bafyreidf747c4x3lps3k4n357l3a3r57k3k465743k573k465743k5", rev: "3j6s746574657" },
{ did: "did:web:mock2.com", head: "bafyreidf747c4x3lps3k4n357l3a3r57k3k465743k573k465743k5", rev: "3j6s746574657" },
{ did: "did:web:mock3.com", head: "bafyreidf747c4x3lps3k4n357l3a3r57k3k465743k573k465743k5", rev: "3j6s746574657" },
{ did: "did:web:mock4.com", head: "bafyreidf747c4x3lps3k4n357l3a3r57k3k465743k573k465743k5", rev: "3j6s746574657" },
{ did: "did:web:mock5.com", head: "bafyreidf747c4x3lps3k4n357l3a3r57k3k465743k573k465743k5", rev: "3j6s746574657" },
{ did: "did:web:inactive.example", head: "bafyreidf747c4x3lps3k4n357l3a3r57k3k465743k573k465743k5", rev: "3j6s746574657", active: false, status: "deactivated" }
]
let repos = if ($cursor == "50") {
[
{ did: "did:web:mock6.com", head: "bafyreidf747c4x3lps3k4n357l3a3r57k3k465743k573k465743k5", rev: "3j6s746574657" }
]
} else if ($cursor == "100") {
[]
} else {
$all_repos
}
let next_cursor = if ($cursor == "50") {
"100"
} else if ($cursor == "100") {
null
} else {
"50"
}
{
cursor: $next_cursor,
repos: $repos
}
| to json
| metadata set { merge {
http.response: {
headers: {
"Content-Type": "application/json"
}
}
} }
} else {
# 404
"not found"
| metadata set { merge {
http.response: {
status: 404
}
} }
}
}