この間があるから、「連合するアプリ」が数行で建ちます。inboxの受付、outboxの発送、actorの台帳、失敗した配達のやり直し——連合のいとなみを丸ごと任せて、あなたはアプリの中身(何を投稿できて、どう見せるか)だけを考えられる。holloもhackers.pubも、そうやって建ちました。
いちばん好きな一角は、KvSpecDeterminerという小さな帳面です。相手の島ごとに「どの封蝋の作法が通じたか」を覚えておく。連合は儀典の過渡期で、全員が同じ作法を読めるわけではない——そういう現実との付き合い方まで、任せられます。
見どころ
- builder.ts(1460行)は「あとから建てる」工法。hackers.pubはこのFederationBuilderで棟を分けて建てている
- 信頼性の間仕切りが同居: circuit-breaker.ts(不調の相手とは少し距離を置く)、idempotency.ts(同じ文書の二度読み防止)、retry.ts、keycache.ts
- negotiation.ts が、同じURLでHTMLとJSON-LDを出し分けるcontent negotiationの座布団
経文の一節
async determineSpec(
origin: string,
): Promise<HttpMessageSignaturesSpec> {
return await this.kv.get<HttpMessageSignaturesSpec>([
...this.prefix,
origin,
]) ?? this.defaultSpec;
}
async rememberSpec(
origin: string,
spec: HttpMessageSignaturesSpec,
): Promise<void> {
await this.kv.set([...this.prefix, origin], spec);
}