Skip to content

About

yurucommu ActivityPub server, API SDK

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

55 stars

Watchers

1 watching

Forks

Repository files navigation

Yurucommu Core

English: README.en.md

Yurucommu Core は、yurucommu family の製品 (yurucommu / yurumeet など) が共通で使う ActivityPub / API / DB / runtime エンジンのライブラリ です。分散 SNS の連合・サーバー API・ データベース層を 1 か所に実装しておくことで、各製品は UI に集中できます。

これはインストールできる製品の repo ではなく、OpenTofu Capsule (Git URL から取り込む 1 つのアプリ/インフラ単位) も持ちません。deploy できる製品は別の repo にあります。

  • yurucommu — フィード / ストーリー / プロフィールの fullstack product。yurucommu.com・ Worker artifact・OpenTofu Capsule を持ちます
  • yurumeet — トーク中心の fullstack product。yurume は discovery と push 登録で使う 短い client id / 略称です

できること

  • ActivityPub 連合 — フォロー・投稿・ブースト・いいね・返信をサーバーをまたいで行い、 コミュニティとつながりを結びます。HTTP-signature の検証、SSRF 対策済みの fetch、 actor / ドメインのブロックリストを備えます
  • サーバー API — actor・投稿・ストーリー・DM・コミュニティ・メディア・通知・ モバイル push の route を提供します
  • クライアント契約 — yurucommu・yurumeet・モバイル・代替クライアント向けの型付き SDK と discovery の型を提供します
  • 検索・通知・レコメンド — 人とコンテンツを見つけられます
  • 認証 — パスワード、Google / X OAuth、Takosumi Accounts の OIDC クライアントに対応します
  • 二言語 UI — 日本語 / 英語に対応します

使い方の境界

この repo を Capsule としてインストールしないでください。代わりに yurucommu または yurumeet をインストールします。これらの製品 repo が、自分の UI とこのサーバーエンジンを束ね、 自分の Worker artifact を公開し、自分の plain OpenTofu module を持ちます。

クライアント実装は @takosjp/yurucommu-api を使ってください。製品の Worker artifact は @takosjp/yurucommu-core/server で Hono backend を作成し、 @takosjp/yurucommu-core/migrations で D1 migration を有効化します。この checkout の 未公開 source path を import してはいけません。

開発者向け

cd yurucommu-core
bun install
bun run check   # complete portable gate
bun run test    # portable suites and packaged-consumer checks
bun run lint    # alias of the complete portable gate
bun run fmt     # prettier

backend エンジンの source は src/backend (Hono routes、ActivityPub 連合、配送 pipeline)、 共有 npm API package は packages/api、データベースの schema と migration は src/db/schema と migrations/ にあります。

bun run check は format check、TypeScript / static analysis、portable tests、 API build、Worker / browser bundle、packaged consumer を含む完全な portable gate です。通常の CI が green なら、この portable gate の証拠になります。

Linux procfs の native 検証

実 kernel の sibling PID namespace owner と hidepid=2 を調べる2件は、 test-native/ の独立した検証です。必要な能力を持つ Linux host で別 cadence として 実行します。

bun run check:native:linux-procfs

入口は Linux と unshare / mount / setpriv を要求し、各10秒の時間制限付きで PID namespace、 procfs mount、hidepid=2 と異なる UID での実行能力を先に確認します。ツール不足や namespace / mount 権限の拒否は、生の診断を表示して非ゼロで終了します。 prerequisite が通ると、現在の Bun で2件を無条件に実行し、テストの失敗 status を返します。 native suite 全体の上限は60秒です。時間切れは診断と status 124 を返し、 入口が作った suite の process group だけを終了します。通常終了時にも残った子を掃除します。 ツールの自動 install や権限の追加は行いません。portable CI の green は、 この Linux native 検証の成功を意味しません。

API package のコマンド:

bun run build:api  # build @takosjp/yurucommu-api
bun run pack:api   # npm pack --dry-run for the API package

bun run check は両 package を実際に pack し、一時 consumer から manifest に宣言された public export をすべて import します。Core の client-api と独立した API package の browser bundle、Core の Worker bundle も検査します。依存はインストール済みのローカル module を 使うため registry への接続は不要です。公開後の registry readback は deploy の別検証です。

Actor GET の閲覧者別Follow状態は outgoing Follow契約を参照してください。 未公開sourceの契約と、registry公開済みpackageのconsumer利用は別に検証します。

core → product の release 順序

新しい API 契約 (例: ブラウザ通知の public API と 0019_notification_push_delivery.sql、core / API 3.1.0 から) は、まずこの repo で両 package を同じ tag から npm に公開し、packaged consumer gate が通ることを確認します。 その公開が registry から取得できるようになった後にだけ、yurucommu / yurumeet の dependency range と bun.lock を registry package から更新し、各 repo の bun run check:core-release を通してから製品版 Worker を release します。file: / workspace: / Git dependency で未公開 source を代用してはいけません。

Yurumeet とモバイルクライアントは別 repo にあります。これらは @takosjp/yurucommu-api に依存し、 Capsule の output または /.well-known/social-server でサーバーを見つけ、自分の静的/runtime artifact を Takosumi・Cloudflare・self-host の実行環境で deploy します。デバッグ用に clients/ の下へローカル checkout を置けますが、このディレクトリは意図的に git 管理外に してあり、サーバー repo を小さく保ちます。

クライアントが別 origin で動く場合、yurucommu サーバー側の CORS / CSRF の許可リストに その origin を含める必要があります。

製品としての境界

Yurucommu は ActivityPub 連合・コンテンツ配送・ユーザー identity をすべてアプリ層で自前実装して います。Takos core のサービスにも、プラットフォーム層の連合の仕組みにも依存しません。Takosumi 経由で インストールされた場合もユーザーが削除できる通常の Capsule であり、Takos core に取り込まれることは ありません。詳しい境界は AGENTS.md を参照してください。

ドキュメント

About

yurucommu ActivityPub server, API SDK

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

55 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages