hollo 館・2F

受付(Mastodon API)

ja· en· ko
はじめての人へ手持ちのMastodonアプリがそのまま使えるようにする、互換の窓口です。

手持ちの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, {
src/api/v1/statuses.ts L601-L618— 投稿ハンドラの中から、そのまま外交(配達)が始まる

間取り

src/api/index.ts
Mastodon API の根。compress+CORS、v1/v2をマウント
src/api/v1/statuses.ts
投稿のCRUDとブースト/ふぁぼ。配達もここから
src/api/v2/index.ts
v2 search。fedifyのlookupObjectで外まで探す
src/oauth/middleware.ts
tokenRequired/scopeRequiredなど、全書き込みが通る廊下

となりの部屋

そとへのリンク