Coverage for node / src / stigmem_node / routes / wellknown.py: 100%
28 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-06-18 05:34 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-06-18 05:34 +0000
1"""Node metadata endpoint — Spec-03-HTTP-API /.well-known/stigmem."""
3from __future__ import annotations
5from typing import Any
7from fastapi import APIRouter, HTTPException
9from ..db import get_node_entity_uri, get_or_create_node_id
10from ..settings import settings as settings
12router = APIRouter(tags=["discovery"])
14_NAMESPACES = [
15 "stigmem:",
16 "rel:",
17 "memory:",
18 "intent:",
19 "roadmap:",
20 "preference:",
21 "garden:",
22]
25@router.get("/.well-known/stigmem")
26def node_metadata() -> dict[str, object]:
27 """Return node identity, auth mode, and federation capability advertisement.
29 Covered by Spec-03-HTTP-API.
30 """
31 node_id = get_or_create_node_id()
32 result: dict[str, object] = {
33 "version": "1.0",
34 "node_id": node_id,
35 "node_url": settings.node_url,
36 "auth": "required" if settings.auth_required else "none",
37 "federation": "enabled" if settings.federation_enabled else "disabled",
38 "source_attestation": settings.source_attestation_mode,
39 "namespaces": _NAMESPACES,
40 "spec": "https://github.com/eidetic-labs/stigmem/blob/main/spec/stigmem-spec-v1.0.md",
41 "cors": {
42 "dev_localhost": settings.cors_dev_localhost,
43 "configured": bool(
44 settings.cors_allowed_origins
45 or settings.cors_allowed_origin_regex
46 or settings.cors_dev_localhost
47 ),
48 },
49 }
51 if settings.federation_enabled:
52 from ..federation.peer_token import get_local_pubkey
54 result["federation_pubkey"] = get_local_pubkey()
55 from ..db import get_node_entity_uri
57 result["entity_uri"] = get_node_entity_uri()
58 result["federation_version"] = "2.1"
59 result["federation_endpoints"] = {
60 "peers": "/v1/federation/peers",
61 "facts": "/v1/federation/facts",
62 "push": "/v1/federation/facts/push" if settings.federation_push_enabled else None,
63 }
65 return result
68@router.get("/.well-known/stigmem-manifest.json")
69def node_manifest() -> dict[str, Any]:
70 """Serve this node's own published OrgManifest (Phase 2a).
72 A federation peer fetches this path at approval time (see
73 ``_check_tl_inclusion_for_peer``) to retrieve, verify, and store the peer's
74 manifest — the step that binds ``peers.entity_uri``. Returns the manifest keyed
75 on this node's own ``entity_uri`` (``get_node_entity_uri()``), serialized via
76 ``manifest_to_dict`` so it round-trips with ``manifest_from_dict``. HTTP 404 if
77 the node has not yet published its manifest (PUT /v1/federation/manifest).
78 """
79 from ..identity.manifest import manifest_to_dict
80 from ..identity.trust_store import get_peer_manifest
82 entity_uri = get_node_entity_uri()
83 manifest = get_peer_manifest(
84 entity_uri, refresh_if_expired=True, trust_mode=settings.trust_mode
85 )
86 if manifest is None:
87 raise HTTPException(status_code=404, detail="node manifest not published")
88 return manifest_to_dict(manifest)