Files
backspace/packages/server/src/routes/federation.ts
T
TheZwiss 94fe73522d refactor(server): split federation routes into cohesive modules (#9)
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.
2026-07-10 02:08:03 +02:00

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);
}