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

1"""Node metadata endpoint — Spec-03-HTTP-API /.well-known/stigmem.""" 

2 

3from __future__ import annotations 

4 

5from typing import Any 

6 

7from fastapi import APIRouter, HTTPException 

8 

9from ..db import get_node_entity_uri, get_or_create_node_id 

10from ..settings import settings as settings 

11 

12router = APIRouter(tags=["discovery"]) 

13 

14_NAMESPACES = [ 

15 "stigmem:", 

16 "rel:", 

17 "memory:", 

18 "intent:", 

19 "roadmap:", 

20 "preference:", 

21 "garden:", 

22] 

23 

24 

25@router.get("/.well-known/stigmem") 

26def node_metadata() -> dict[str, object]: 

27 """Return node identity, auth mode, and federation capability advertisement. 

28 

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 } 

50 

51 if settings.federation_enabled: 

52 from ..federation.peer_token import get_local_pubkey 

53 

54 result["federation_pubkey"] = get_local_pubkey() 

55 from ..db import get_node_entity_uri 

56 

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 } 

64 

65 return result 

66 

67 

68@router.get("/.well-known/stigmem-manifest.json") 

69def node_manifest() -> dict[str, Any]: 

70 """Serve this node's own published OrgManifest (Phase 2a). 

71 

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 

81 

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)