(2022-11-25)
RustでMastodonやMisskeyのサーバーと通信することをとりあえずの目標に
(2022-11-25)
用語
ActivityPub (2022-11-25)
仕様
ActivityPub
w3c.github.io
ActivityPub
argrath.github.io
mastodonの仕様
ActivityPub - Mastodon documentation
A decentralized social networking protocol based upon the ActivityStreams 2.0 data format and JSON-LD.
docs.joinmastodon.org
WebFinger (2022-11-25)
RFC 7033: WebFinger
www.rfc-editor.org
WebFinger - Mastodon documentation
Translate `user@domain` mentions to actor profile URIs.
docs.joinmastodon.org
Activity Streams / Activity Vocabulary (2022-11-25)
Activity Streams 2.0
www.w3.org
Activity Vocabulary
www.w3.org
ActivityPubはActivityStreamのデータ形式を使用していてそのデータ型がActivity Vocabularyってことだと思う
json-ld (2022-11-25)
JSON-LD 1.1
www.asahi-net.or.jp
JSON-LD 1.1
www.w3.org
最初JSON-LDってJSON Schemaと何が違うのと思ったけどそれは表面的なもの。
JSON SchemaはJSONのバリデーションをするがJSON-LDは要素にそれが何であるかの情報を与える。
JSON SchemaはJSONのバリデーションをするがJSON-LDは要素にそれが何であるかの情報を与える。
それと
json-ldで表されたデータの一種がacitivity streamってことでいいのかな?
W3C wikiによると「 What is the exact relation between JSON-LD and Activity Streams ? ("compatible" is not precise enough)」らしい。
application/ld+json
とapplication/activity+json
の違いがよくわからないjson-ldで表されたデータの一種がacitivity streamってことでいいのかな?
W3C wikiによると「 What is the exact relation between JSON-LD and Activity Streams ? ("compatible" is not precise enough)」らしい。
(2022-11-25)
参考文献
(2022-11-25)
Mastodonにアカウントとして認識されるActivityPubを実装してみる - Qiita
Mastodonの検索エリアにURLを突っ込んだ際にアカウント化(?)させるにはどういう実装が必要なのか、気になって調べて実装してみた。結局ActivityPub対応WebFinger対応H…
qiita.com
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9TWFzdG9kb24lRTMlODElQUIlRTMlODIlQTIlRTMlODIlQUIlRTMlODIlQTYlRTMlODMlQjMlRTMlODMlODglRTMlODElQTglRTMlODElOTclRTMlODElQTYlRTglQUElOEQlRTglQUQlOTglRTMlODElOTUlRTMlODIlOEMlRTMlODIlOEJBY3Rpdml0eVB1YiVFMyU4MiU5MiVFNSVBRSU5RiVFOCVBMyU4NSVFMyU4MSU5NyVFMyU4MSVBNiVFMyU4MSVCRiVFMyU4MiU4QiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9OWViYzNjYzkxMDBjY2QxNWIzNDcyZjE3MzQ5N2ExZmM&mark-x=142&mark-y=57&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDB3YWtpbiZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9YjA5YmFlZDc0ZTA5MWNjYzEzMTM0ZWRjN2NmNjRlZTM&blend-x=142&blend-y=436&blend-mode=normal&txt64=aW4g5qCq5byP5Lya56S-44Oe44Kk44K544K_44O844O744Ku44Or44OJ&txt-width=770&txt-clip=end%2Cellipsis&txt-color=%231E2121&txt-font=Hiragino%20Sans%20W6&txt-size=36&txt-x=156&txt-y=536&s=3d972a711adf258e9fc94d8a505f4677)
とりあえずアカウントを認識させるところまで (2022-11-25)
色々つっこみ所が多いがまあとりあえず
ハマったところ (2022-11-25)
webfingerとは?
これは
このときresouceには
WebFinger仕様にはacctスキーマについて
[email protected]
という一意のindetityについて関連するURLを取りにいくもののようでmastodonやmisskeyでは/.well-known/webfinger?resource=
に取りにくる。このときresouceには
acct:[email protected]
というリクエストが来る。WebFinger仕様にはacctスキーマについて
とある。
webfingerで決まっているわけではないがこの形式の一意のIDを扱うときはacctスキームを付けるのが普通みたい?
webfingerで決まっているわけではないがこの形式の一意のIDを扱うときはacctスキームを付けるのが普通みたい?
エンドポイントのURLは?
mastodonだとURL(example.com/users/xxx)をつっこんでも取りにきてくれなかった。
misskeyだとこれを入れるとこのURLにactivitystreamを取りにきた。そりゃそうか。
misskeyだとこれを入れるとこのURLにactivitystreamを取りにきた。そりゃそうか。
(2022-11-25)
というかよく考えたらjson-ldにちゃんと対応させるとめちゃくちゃ大変では
serde用のパーサはあるけど静的に型を付けるのとすごく相性が悪いような・・・
このクレートだとattribute macroでいろいろ頑張ってくれてるみたいだけどそれでもキツそう
serde用のパーサはあるけど静的に型を付けるのとすごく相性が悪いような・・・
このクレートだとattribute macroでいろいろ頑張ってくれてるみたいだけどそれでもキツそう
(2022-11-25)
と思ったけどどうやらjson-ldに対応している必要は一応ないみたい
ただスキーマを詠み込めるといろいろいいことがある感じかな
ただスキーマを詠み込めるといろいろいいことがある感じかな
(2022-11-25)
あと思ったのがフロントを分離しづらいということ
フロントはNext.jsでVercelとかにデプロイして別にバックエンドサーバーを作るつもりだったけど
フロントが
まあWorkersとかでリダイレクトさせればいいのかもしれないけどフロントにそれを意識させたくないのでstaticなファイルもaxumから配信するしかない
フロントはNext.jsでVercelとかにデプロイして別にバックエンドサーバーを作るつもりだったけど
フロントが
example.com
、APIサーバーがapi.example.com
にあったとしてインスタンスとして認識されるのはexample.com
だからそっちにFederationの情報を取りにくるまあWorkersとかでリダイレクトさせればいいのかもしれないけどフロントにそれを意識させたくないのでstaticなファイルもaxumから配信するしかない
(2023-02-14)
そういえば鍵垢ってどうやって実現してるんだろうか
ActivityPub
argrath.github.io
この内容からすると認証なしでリクエストが来た場合にはパブリックな投稿のみを返すという仕様だと思われる
そもそも鍵垢というのはどういうことかというとフォローを自由にできないというだけであって投稿の公開範囲には関係がないはずだ