routes/federation.ts had grown to 7.6k lines, spanning HTTP route registration, federated identity resolution, ~30 inbound relay event processors, DM reconciliation, and rate-limiting internals — too large to review or hold in context, and awkward to change safely. Split the implementation into 18 focused modules under routes/federation/ (helpers, events/, handlers/) and keep routes/federation.ts as a thin barrel that re-exports the public API and composes the HTTP registrars into federationRoutes(). No import paths change anywhere else. Pure move, no behavior change: - 61/61 named functions byte-identical; only deltas are 2 dynamic-import paths adjusted for the new directory depth - public export surface unchanged (barrel re-exports all 22 symbols) - all 30 endpoints preserved (identical verb+path set) - typecheck, build, and full server suite (790 tests) green Docs: update federation.md source-file map; add split design doc.
41 lines
2.3 KiB
TypeScript
41 lines
2.3 KiB
TypeScript
// Barrel for the federation route subsystem.
|
|
//
|
|
// The implementation was split out of a single 7.6k-line file into cohesive
|
|
// modules under ./federation/. This barrel preserves the original public import
|
|
// surface (every `from '.../routes/federation.js'` import resolves unchanged) and
|
|
// composes the HTTP route registrars into `federationRoutes()`.
|
|
//
|
|
// See docs/systems/federation.md and
|
|
// docs/superpowers/specs/2026-07-10-federation-ts-split-design.md.
|
|
|
|
import type { FastifyInstance } from 'fastify';
|
|
import { registerPeerHandshakeRoutes } from './federation/handlers/peerHandshake.js';
|
|
import { registerPeerAdminRoutes } from './federation/handlers/peerAdmin.js';
|
|
import { registerApprovalRoutes } from './federation/handlers/approvals.js';
|
|
import { registerRelayRoutes } from './federation/handlers/relay.js';
|
|
import { registerLookupRoutes } from './federation/handlers/lookup.js';
|
|
import { registerAttachRoutes } from './federation/handlers/attach.js';
|
|
|
|
export { processRelayEvents } from './federation/events/dispatch.js';
|
|
export { processPresenceUpdateEvent } from './federation/events/dmState.js';
|
|
export { processGroupMetadataUpdateEvent, processMemberAddEvent, processMemberRemoveEvent, processOwnershipTransferEvent } from './federation/events/membership.js';
|
|
export { extractDomain, findFederatedUser, getOurIdentityDomain, resolveLocalUser, resolveOrCreateReplicatedUser, verifyAttribution } from './federation/identity.js';
|
|
export { validateOrigin } from './federation/origin.js';
|
|
export { backfillReplicatedProfileAssets, hydrateReplicatedUserProfile, processProfileUpdateEvent } from './federation/profile.js';
|
|
export { _resetLookupRateBuckets } from './federation/rateLimits.js';
|
|
export { reconcileDmChannelFederatedId, reconcileDriftedDmFederatedIds, sweepDeadIncarnationArtifacts } from './federation/reconciliation.js';
|
|
export type { DmReconcileResult } from './federation/reconciliation.js';
|
|
|
|
/**
|
|
* Register every federation HTTP endpoint on the Fastify instance.
|
|
* Delegates to per-concern registrars; see ./federation/handlers/*.
|
|
*/
|
|
export async function federationRoutes(app: FastifyInstance): Promise<void> {
|
|
registerPeerHandshakeRoutes(app);
|
|
registerPeerAdminRoutes(app);
|
|
registerApprovalRoutes(app);
|
|
registerRelayRoutes(app);
|
|
registerLookupRoutes(app);
|
|
registerAttachRoutes(app);
|
|
}
|