View Code? Open in Web Editor
NEW
Simple ActivityPub server for personal use, built with Next.js (App Router), Prisma, and Tailwind CSS.
Home Page: https://beta.unsocial.dev
License: MIT License
Shell 1.12%
TypeScript 96.97%
JavaScript 1.29%
CSS 0.41%
Dockerfile 0.21%
unsocial's Introduction
Click on Deploy on Railway
Click "Deploy Now"
Configure and save config
Click "Deploy"
Wait for the deployment to finish
Access https://${automatically_generated_subdomain}.up.railway.app
Simple Deployment
Login with a single account on the server
Display Fediverse accounts
Federate posts (replies), likes, reposts, and follows
Registering relay servers
Fewer features, lightweight, and low cost
Supported ActivityPub Servers
unsocial's People
Watchers
unsocial's Issues
There is an error with this repository's Renovate configuration that needs to be fixed. As a precaution, Renovate will stop PRs until it is resolved.
Location: None
Error type: An existing branch is blocking Renovate
Message: Renovate needs to create the branch "renovate/pin-dependencies" but is blocked from doing so because of an existing branch called "renovate". Please remove it so that Renovate can proceed.
swrの時はやってた
ServerActionに変えてからやめたけど、swrと違ってむしろやりやすそう
next/linkのバグ対策にもなるかも #512
URLを扱う時は基本new URLするようにしてたけど、
毎回new URLがエラーになることを考慮しないといけない(new URLに渡す文字列がURLじゃないのは相当な例外)
actorUrlなどurlで終わるフィールドでもDBから取ると文字列、変数ではURLインスタンスだったりしてどっちかわからない
テストのアサーションで文字列比較の方がはっきり比較できる
hostを取る時などパースしたいときだけ使う
どう見てもいらないデータが入っている
index.tsから複数を再exportするとjest.mockするときに他のも巻き込まれる
importするときに関数を直接importするか".."みたいな分かりにくいパスからimportしないといけない
対処法
個別に判断、ディレクトリを切ってimportしやすくする(例えば型も一緒にexportしたい場合)か、ただのオブジェクトとしてexportする
findOrFetchUserが失敗する(fetchが失敗するなど)
user.lastFetchedAtが更新されない
ページをリロードするたびにshouldRefetchが真になりfetchが呼ばれる
ということが起きる
対策1 ... fetch(GET)を一定時間内で連続で呼んだ場合はキャッシュから返すようにする
対策2 ... findOrFetchUserの最初にlastFetchedAtを更新する(失敗しても更新されるようにする)
note.tsなど1ファイルにメソッドを入れ過ぎているので
userIdという変数に@ xxxxとDBのid値どっちが入ってるか分からないので
用語の整理
概念
名前
変数名
変数の例
誰かの投稿を再投稿すること
リポスト
repost
リポストボタンのハンドラ
再投稿そのもの
コメントなし引用ノート
noteWithQuote
prismaの返り値
再投稿の元の投稿
引用されたノート
note.quote または quotedNote
prismaの返り値
ActivityPubにおいては@[email protected] で完全にユーザーを区別でき名前の変更もないため、名前の変更を考慮した/@[preferredUsername]@[host] と /users/[userId] の二つパスがあるのは特に意味がない
userKeyとして扱ってパースするなど処理に複雑さが出てきているのでやめる
note.url と user.actorUrl と統一できてないので
例えばNoteなら
ServerNoteCard ... RSC(server-onlyあり)。サーバーサイド処理やserver actionsをimportする
NoteCard ... RSCかつRCC(use clientなし)。ServerNoteCardの値をバケツリレーする
LikeButton ... RCC(use clientあり)。server actionsを登録、値を受け取って表示
NoteCard, LikeButtonをStorybookでテストする
ServerNoteCardは単体テストがあるserviceロジックをimportして実行するだけにする