@takosjp/yurucommu-core
v4.1.14
Published
Shared ActivityPub, API, DB, and runtime engine library for the yurucommu product family.
Readme
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 # prettierbackend エンジンの 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 packagebun 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 を参照してください。
ドキュメント
- Runtime lanes — raw Cloudflare binding と portable facade で binding の形が変わる点と、その宣言方法
- Deployment guide
- Getting started
- Help site
