手持ちのMastodonアプリで、そのまま暮らせます。IceCubesでもToot!でも、接続先をholloに変えるだけ。サーバを乗り換えても、指が覚えたアプリはそのまま——それがこの受付の約束です。
そして受付は翻訳係でもあります。アプリが「投稿して」と言えば、そのまま外の宇宙への配達まで済ませてしまう。受付と外交室が、廊下続きになっています。
見どころ
src/api/index.tsはhono/compressとCORS(Linkヘッダ公開)を先に立ててから、v1/v2をマウント- バリデーションは@hono/zod-validator+インラインのzod。v2 searchはlimitを1〜40にclampする
- 配達には投稿IRI由来のorderingKeyを添え、excludeBaseUrisで自分の島への誤配を防ぐ
- v2 searchはresolve=trueだとlookupObject()で外の宇宙まで探しに行き、見つけたらpersistAccount/persistPostで台帳に写してから答える
経文の一節
const activity = toCreate(post, fedCtx);
const orderingKey = getPostOrderingKey(post.iri);
await fedCtx.sendActivity(
{ username: handle },
getRecipients(post),
activity,
{
orderingKey,
excludeBaseUris: [new URL(c.req.url)],
},
);
if (post.visibility !== "direct") {
await fedCtx.sendActivity({ username: handle }, "followers", activity, {