hollo와 같은 일을, Deno에서도 할 수 있어요. 외교의 배치를 공유 설계도(builder)로 만들어 두면, 여러 동에서 같은 배선을 돌려쓸 수 있어요 — 커지는 앱의, 연합을 어디에 둘지 보여주는 본보기예요.
inbox/mod.ts는, 동사의 노선도로 읽을 수 있어요. Accept, Follow, Undo…… 뜻이 여럿인 동사는 속을 보고 갈라 보내요. 도착하는 편지의 종류를, 한 장으로 훑어볼 수 있어요.
볼거리
- 공유 inbox는 /ap/inbox, 개별은 /ap/actors/{identifier}/inbox예요. identifier는 계정의 UUID이거나, 인스턴스 그 자체의 hostname이에요
- 인스턴스 actor는 "Hackers' Pub"라는 Application이에요. 삭제된 주민은 null이 아니라 KeyedTombstone(묘비)이 돼요 — 링크가 가리키는 끝에, 부재의 모양이 남는 거죠
- 핸들러는 onPostCreated, onFollowed, onQuoteRequested처럼 이름 붙은 함수로 나뉘고, 저마다 테스트가 딸려 있어요
경문 한 구절
builder
.setInboxListeners("/ap/actors/{identifier}/inbox", "/ap/inbox")
.setSharedKeyDispatcher((ctx) => ({
identifier: new URL(ctx.canonicalOrigin).hostname,
}))
.onUnverifiedActivity(onUnverifiedActivity)
.on(Accept, async (fedCtx, accept) => {
if (await onQuoteRequestAccepted(fedCtx, accept)) return;
if (await onRelayFollowAccepted(fedCtx, accept)) return;
await onFollowAccepted(fedCtx, accept);
})