OverviewFilesCommitsIssuesDocsReleasesPeers

pear-git / lib / routes / register-all.js

91 lines · javascript ref:
import { registerHomeRoutes } from './home.js'
import { registerIdentityRoutes } from './identity.js'
import { registerAdminRoutes } from './admin.js'
import { registerAdminApiRoutes } from './admin-api.js'
import { registerRepoRoutes } from './repos.js'
import { registerRepoViewerRoutes } from './repo-viewer.js'
import { registerSearchRoutes } from './search.js'
import { registerAccountMergeRoutes } from './account-merge.js'
import { registerIssueRoutes } from './issues.js'
import { registerGitRoutes } from './git.js'
import { registerInviteRoutes } from './invites-api.js'
import { registerDeployRoutes } from './deploy.js'
import { registerLinkingRoutes } from './linking.js'
import { registerNamespaceRoutes } from './namespaces.js'
import { registerRegistryRoutes } from './registry.js'
import { registerFederationRoutes } from './federation.js'
import { registerPeerRoutes } from './peer.js'
import { registerNpmRegistryRoutes } from './npm-registry.js'
import { registerAccessRoutes } from './access.js'
import { registerArchiveRoutes } from './archive.js'
import { registerBootstrapRoutes } from './bootstrap.js'

/**
 * Register all routes on the given router.
 *
 * Order matters — more specific routes must come before generic ones.
 * See inline comments for ordering rationale.
 */
export function registerAllRoutes (router, opts = {}) {
  const { headless = false, gitReposPath } = opts

  // Web UI routes (skip in headless mode)
  if (!headless) {
    registerHomeRoutes(router)    // /, /profile
    registerAdminRoutes(router)   // /admin/* pages
  }

  // Bootstrap script (always available, even headless)
  registerBootstrapRoutes(router)

  // Auth API routes
  registerIdentityRoutes(router)
  registerAccountMergeRoutes(router)

  // Admin API routes
  registerAdminApiRoutes(router)

  // Invite API routes (P2P peer access)
  registerInviteRoutes(router)

  // Deploy routes (Pear app deployment)
  registerDeployRoutes(router)

  // Peer routes (unified server peering — must come before federation)
  registerPeerRoutes(router)

  // Federation routes (server-to-server linking — legacy, kept for compat)
  registerFederationRoutes(router)

  // Access routes (grant/invite management)
  registerAccessRoutes(router)

  // P2P Registry routes (must come before namespace routes)
  registerRegistryRoutes(router)

  // Namespace routes (groups, /groups pages)
  registerNamespaceRoutes(router)

  // Linking routes (Autobase collaboration)
  registerLinkingRoutes(router)

  // Private npm registry (serves @holepunchto packages from holepunchto-deps repo)
  registerNpmRegistryRoutes(router, { gitReposPath })

  // Issue routes (must come before repo routes due to pattern overlap)
  registerIssueRoutes(router)

  // Archive routes (release downloads — must come before git routes)
  registerArchiveRoutes(router)

  // Git protocol routes (must come before repo routes)
  registerGitRoutes(router)

  // Search routes
  registerSearchRoutes(router)

  // Repo routes (most generic patterns — must be last)
  registerRepoRoutes(router)
  registerRepoViewerRoutes(router)
}