use crate::atproto::{ChainState, Pool};
use crate::nginx::conf::Block;
use super::{empty, map, reroute};
pub(crate) const SINCE_TID_SHAPE: &str =
"~^[234567abcdefghij][234567abcdefghijklmnopqrstuvwxyz]{12}$";
pub(crate) fn seal(pool: &mut Pool, state: &ChainState) -> anyhow::Result<()> {
pool.put(&format!("{}/repo.car", state.commit), &state.car)
}
pub(crate) fn since_map() -> Block {
map(
"$arg_since",
"$ks_atp_since",
vec![
(String::new(), "1".into()),
(SINCE_TID_SHAPE.into(), "1".into()),
],
)
}
pub(crate) fn location() -> Block {
reroute(
Block::exact("/xrpc/com.atproto.sync.getRepo")
.block(empty("$arg_did", "invalid_request"))
.block(empty("$ks_atp_since", "invalid_request"))
.block(empty("$ks_atp_did", "atp_repo_not_found")),
"/_ks_atproto/$ks_atp_did/repo.car",
)
}