From 6e41a2c7bbd749d53c47b7c60ffe613afe7978e1 Mon Sep 17 00:00:00 2001 From: KutluhanETH Date: Mon, 7 Sep 2026 00:46:45 +0000 Subject: [PATCH 1/2] fix(ack-id): return reply nonce for response handshakes --- .changeset/a2a-response-reply-nonce.md | 5 +++++ packages/ack-id/src/a2a/sign-message.test.ts | 17 +++++++++++++++++ packages/ack-id/src/a2a/sign-message.ts | 2 +- 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 .changeset/a2a-response-reply-nonce.md diff --git a/.changeset/a2a-response-reply-nonce.md b/.changeset/a2a-response-reply-nonce.md new file mode 100644 index 00000000..8b171879 --- /dev/null +++ b/.changeset/a2a-response-reply-nonce.md @@ -0,0 +1,5 @@ +--- +"@agentcommercekit/ack-id": patch +--- + +Return the fresh reply nonce from A2A response handshakes. diff --git a/packages/ack-id/src/a2a/sign-message.test.ts b/packages/ack-id/src/a2a/sign-message.test.ts index fed6068d..5a606df2 100644 --- a/packages/ack-id/src/a2a/sign-message.test.ts +++ b/packages/ack-id/src/a2a/sign-message.test.ts @@ -9,6 +9,7 @@ import { createA2AHandshakePayload, createSignedA2AMessage, } from "./sign-message" +import { generateRandomNonce } from "./random" import { agentDid, makeTextMessage, @@ -138,6 +139,22 @@ describe("createA2AHandshakeMessage", () => { expect(result.message.role).toBe("agent") }) + it("returns the fresh reply nonce when responding to a handshake", async () => { + vi.mocked(generateRandomNonce).mockReturnValueOnce("fresh-reply-nonce") + + const result = await createA2AHandshakeMessage( + "agent", + { + recipient: userDid, + vc: testCredential, + requestNonce: "initiator-nonce", + }, + { did: agentDid, jwtSigner }, + ) + + expect(result.nonce).toBe("fresh-reply-nonce") + }) + it("returns the signed JWT in the message data part", async () => { const result = await createA2AHandshakeMessage( "agent", diff --git a/packages/ack-id/src/a2a/sign-message.ts b/packages/ack-id/src/a2a/sign-message.ts index a4a041bc..f3e26ba4 100644 --- a/packages/ack-id/src/a2a/sign-message.ts +++ b/packages/ack-id/src/a2a/sign-message.ts @@ -122,7 +122,7 @@ export async function createA2AHandshakeMessage( return { sig: jwt, jti, - nonce: payload.nonce, + nonce: payload.replyNonce ?? payload.nonce, message, } } From bc3fa5ddab579267044fe83bc7af1e3b4460109b Mon Sep 17 00:00:00 2001 From: KutluhanETH Date: Mon, 7 Sep 2026 00:47:12 +0000 Subject: [PATCH 2/2] style(ack-id): order nonce test imports --- packages/ack-id/src/a2a/sign-message.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ack-id/src/a2a/sign-message.test.ts b/packages/ack-id/src/a2a/sign-message.test.ts index 5a606df2..15045c8d 100644 --- a/packages/ack-id/src/a2a/sign-message.test.ts +++ b/packages/ack-id/src/a2a/sign-message.test.ts @@ -3,13 +3,13 @@ import { createJwtSigner } from "@agentcommercekit/jwt" import { generateKeypair } from "@agentcommercekit/keys" import { beforeEach, describe, expect, it, vi } from "vitest" +import { generateRandomNonce } from "./random" import { createA2AHandshakeMessage, createA2AHandshakeMessageFromJwt, createA2AHandshakePayload, createSignedA2AMessage, } from "./sign-message" -import { generateRandomNonce } from "./random" import { agentDid, makeTextMessage,