sequenceDiagram title Indexer — Pair A publie, Pair B publie (handleNodePublish → DHT) participant NodeA as Node A participant NodeB as Node B participant Indexer as IndexerService (partagé) participant DHT as DHT Kademlia Note over NodeA: Après claimInfo ou refresh TTL par Pair A publie son PeerRecord NodeA->>Indexer: TempStream /opencloud/record/publish/1.0 NodeA->>Indexer: json.Encode(PeerRecord A {DID_A, PeerID_A, PubKey_A, Expiry, Sig_A}) Indexer->>Indexer: Verify sig_A (reconstruit rec minimal, pubKey_A.Verify) Indexer->>Indexer: Check StreamRecords[Heartbeat][PeerID_A] existe alt Heartbeat actif pour A Indexer->>Indexer: StreamRecord A → DID_A, Record=PeerRecord A, LastSeen=now Indexer->>DHT: PutValue("/node/"+DID_A, PeerRecord A JSON) DHT-->>Indexer: ok else Pas de heartbeat Indexer->>NodeA: (erreur "no heartbeat", stream close) end and Pair B publie son PeerRecord NodeB->>Indexer: TempStream /opencloud/record/publish/1.0 NodeB->>Indexer: json.Encode(PeerRecord B {DID_B, PeerID_B, PubKey_B, Expiry, Sig_B}) Indexer->>Indexer: Verify sig_B Indexer->>Indexer: Check StreamRecords[Heartbeat][PeerID_B] existe alt Heartbeat actif pour B Indexer->>Indexer: StreamRecord B → DID_B, Record=PeerRecord B, LastSeen=now Indexer->>DHT: PutValue("/node/"+DID_B, PeerRecord B JSON) DHT-->>Indexer: ok else Pas de heartbeat Indexer->>NodeB: (erreur "no heartbeat", stream close) end end Note over DHT: DHT contient maintenant
"/node/DID_A" et "/node/DID_B"