From a1cd93e2ce673b3c3f7f85f75daa351dd96ba37b Mon Sep 17 00:00:00 2001 From: George Lambert Date: Sun, 20 Sep 2026 11:09:22 -0400 Subject: [PATCH] feat: send digest and honor existing CID on global stamp --- .../global_client.py | 22 +++++++++++++++++-- tests/test_global_client.py | 5 ++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/verae_mcp_timestamping_server/global_client.py b/src/verae_mcp_timestamping_server/global_client.py index 448ee30..30a4230 100644 --- a/src/verae_mcp_timestamping_server/global_client.py +++ b/src/verae_mcp_timestamping_server/global_client.py @@ -126,12 +126,30 @@ class GlobalClient: res = self.http.request( "POST", url, - payload={"data": digest, "hashAlg": "SHA256"}, + payload={ + "data": digest, + "digest": digest, + "hashAlg": "SHA256", + "restamp": False, + }, headers=self._headers(), ) + parsed = res.json() if hasattr(res, "json") else {} + if res.status_code == 200 and isinstance(parsed, dict): + cid = str(parsed.get("certificate") or parsed.get("jobId") or "") + if cid: + return Receipt( + receipt_id=cid, + hash=digest, + scope="global", + cube_id=cube_id, + created_at=str(parsed.get("timestamp") or ""), + merkle=str(parsed.get("blockHash") or ""), + ) if res.status_code >= 300: raise ValueError(f"global timestamp HTTP {res.status_code}: {res.text}") - parsed = res.json() + if not isinstance(parsed, dict): + parsed = {} job_id = parsed.get("jobId") or parsed.get("blockHash") or "" if not job_id: raise ValueError("global timestamp response missing jobId") diff --git a/tests/test_global_client.py b/tests/test_global_client.py index 23239e2..4eae1db 100644 --- a/tests/test_global_client.py +++ b/tests/test_global_client.py @@ -60,7 +60,10 @@ async def test_global_stamp_posts_hash_sync_and_maps_receipt(): method, url, payload, headers = http.calls[0] assert method == "POST" assert url == "https://api.veraetime.net/api/timestamp" - assert payload == {"data": SHA256_EMPTY, "hashAlg": "SHA256"} + assert payload["data"] == SHA256_EMPTY + assert payload["digest"] == SHA256_EMPTY + assert payload["hashAlg"] == "SHA256" + assert payload["restamp"] is False assert headers["Authorization"] == "Bearer secret" assert rec.scope == "global" assert rec.receipt_id == "job-1"