AT Protocolの理解
まだあまり分かっていないので試したことを中心に書く
atprotoにおいてやり取りされるデータの定義にはLexiconが使われる
LexiconはActivityPubにおけるActivityのようなもの?
どちらかというとrecordの方か
recordの作成にはagent.post()やagent.com.atproto.repo.createRecord()が使える
このとき、recordにはどんなデータも入れられるしPDSにそのまま保存される
$typeがapp.bsky.feed.postのrecord(つまりBlueskyのポスト)にfoo: 'bar'という関係ないデータが入っている
これを利用して一部のクライアントは固定ポスト機能を実装している
createRecordのオプションにvalidate: falseを指定するとレコードの内容の検証をスキップでき、自由な形式のレコードを保存できる
以下はセルフホストしたPDSにdev.unsocial.pds.testという$typeのrecordを置いてみたもの(レコードタイプは適当)
つまり実態としてはレコードの内容は完全に自由(PDSの裁量で検証する?もしくはAppViewが使用するときに検証する?)で、おおむね同じデータであることを表すタグのようなものとしてレコードタイプ($typeやcollection)があると理解した
Lexiconを使ってレコードを作成するとリレーがそれを拾ってAppViewに流してくれる
というかこの流れを拾うアプリケーションをAppViewと呼んでいる?
AppViewが流れを披露にはFirehoseに接続する必要がある
接続部分のみ抜き出したコードが以下
tsx src/lib/subscription.tsで動く
handleメソッドを上書きするといい感じに試せる
ここにはBlueskyのrecordだけでなく独自形式のものも流れてくる
WhiteWindのレコードなど
rkeyにはTIDが使われている
TIDは@atproto/commonまたは@atproto/common-webのTID.next().strで生成できる