OverviewFilesCommitsIssuesDocsReleasesPeers

P2P-Hiverelay / test / fixtures / relaykernel-profile / relaykernel-http-route-matrix-v1-blindspark-compat.json

144 lines · json ref:
{
  "name": "relaykernel-http-route-matrix-v1-blindspark-compat",
  "kind": "http-route-matrix-conformance",
  "profile": "relaykernel",
  "compatibility": "blindspark-http-gateway",
  "surfaces": [
    "/.well-known/hiverelay.json",
    "/catalog.json",
    "/v1/hyper/:driveKey/*path"
  ],
  "matrix": [
    {
      "surface": "/.well-known/hiverelay.json",
      "purpose": "signed relay capability metadata for clients before they speak Hypercore",
      "methods": [
        "GET"
      ],
      "handlers": [
        {
          "runtime": "node-api",
          "file": "packages/core/core/relay-node/api.js",
          "requiredTerms": [
            "const capabilityRoute = resolveCapabilityRoute(req.method, path)",
            "capabilityRoute && capabilityRoute.kind === 'capability-doc'",
            "buildCapabilityRoutePayload({",
            "runtime: 'node'",
            "result.headers"
          ]
        },
        {
          "runtime": "bare-http",
          "file": "packages/core/core/relay-node/bare-http-server.js",
          "requiredTerms": [
            "path === '/.well-known/hiverelay.json' || path === '/api/capabilities'",
            "buildCapabilityDoc({",
            "runtime: 'bare'",
            "Cache-Control"
          ]
        }
      ]
    },
    {
      "surface": "/catalog.json",
      "purpose": "bounded public app/content catalog for browser and mobile bootstrap",
      "methods": [
        "GET"
      ],
      "handlers": [
        {
          "runtime": "node-api",
          "file": "packages/core/core/relay-node/api.js",
          "requiredTerms": [
            "const catalogReadRoute = resolveCatalogReadRoute(req.method, path)",
            "catalogReadRoute && catalogReadRoute.kind === 'catalog'",
            "buildCatalogReadRoutePayload({",
            "route: catalogReadRoute"
          ]
        },
        {
          "runtime": "node-api-catalog-helper",
          "file": "packages/core/core/relay-node/api-catalog-read.js",
          "requiredTerms": [
            "export function buildCatalogReadRoutePayload",
            "route.kind === 'catalog'",
            "return buildRelayCatalogPayload({ node, url, relayKey, maxPageSize })",
            "export function buildRelayCatalogPayload"
          ]
        },
        {
          "runtime": "data-plane-gateway",
          "file": "packages/core/core/relay-node/gateway-server.js",
          "requiredTerms": [
            "req.method === 'GET' && path === '/catalog.json'",
            "this._serveCatalog(req, res)"
          ]
        },
        {
          "runtime": "bare-http",
          "file": "packages/core/core/relay-node/bare-http-server.js",
          "requiredTerms": [
            "path === '/catalog.json'",
            "this._catalog(url)"
          ]
        }
      ]
    },
    {
      "surface": "/v1/hyper/:driveKey/*path",
      "purpose": "Hyperdrive content gateway retained for PearBrowser while RelayKernel extracts",
      "methods": [
        "GET",
        "HEAD"
      ],
      "capabilities": [
        "Range"
      ],
      "handlers": [
        {
          "runtime": "node-api",
          "file": "packages/core/core/relay-node/api.js",
          "requiredTerms": [
            "isHyperGatewayRoute(path)",
            "from './api-route-mounts.js'",
            "this._gateway.handle(req, res)"
          ]
        },
        {
          "runtime": "node-api-route-table",
          "file": "packages/core/core/relay-node/api-route-mounts.js",
          "requiredTerms": [
            "export const HYPER_GATEWAY_ROUTE_PREFIX = '/v1/hyper/'",
            "export function isHyperGatewayRoute",
            "path.startsWith(HYPER_GATEWAY_ROUTE_PREFIX)"
          ]
        },
        {
          "runtime": "hyper-gateway-core",
          "file": "packages/core/gateway/hyper-gateway.js",
          "requiredTerms": [
            "req.method !== 'GET' && req.method !== 'HEAD'",
            "res.setHeader('Allow', 'GET, HEAD')",
            "const isHead = req.method === 'HEAD'",
            "res.setHeader('Accept-Ranges', 'bytes')",
            "const rangeHeader = req.headers && req.headers.range",
            "res.setHeader('Content-Range'",
            "if (isHead) {"
          ]
        },
        {
          "runtime": "data-plane-gateway",
          "file": "packages/core/core/relay-node/gateway-server.js",
          "requiredTerms": [
            "path.startsWith('/v1/hyper/')",
            "this._gateway.handle(req, res)"
          ]
        }
      ],
      "notes": [
        "Bare relays participate in the P2P mesh and expose catalog/capability HTTP; browser content gateway serving stays on Node/API or the dedicated data-plane gateway."
      ]
    }
  ]
}