From 6df8e220c931b1e35462d0de94276b7e15ff4f46 Mon Sep 17 00:00:00 2001 From: Matt Venables Date: Fri, 4 Jul 2025 07:01:58 -0400 Subject: [PATCH 1/2] Update A2A demo to use official @a2a-js/sdk package The demo was using `a2a-js` which is a 3rd party package. This updates the demo to use the official `@a2a-js/sdk` package. --- demos/identity-a2a/package.json | 5 +- demos/identity-a2a/src/agent.ts | 62 ++--- demos/identity-a2a/src/bank-client-agent.ts | 82 +++++-- demos/identity-a2a/src/bank-teller-agent.ts | 135 +++++------ .../src/utils/response-parsers.ts | 39 +++ demos/identity-a2a/src/utils/server-utils.ts | 19 +- packages/ack-id/package.json | 7 +- packages/ack-id/src/a2a/schemas/valibot.ts | 26 +- packages/ack-id/src/a2a/sign-message.ts | 17 +- packages/ack-id/src/a2a/verify.ts | 13 +- packages/agentcommercekit/package.json | 6 +- pnpm-lock.yaml | 226 +++--------------- 12 files changed, 270 insertions(+), 367 deletions(-) create mode 100644 demos/identity-a2a/src/utils/response-parsers.ts diff --git a/demos/identity-a2a/package.json b/demos/identity-a2a/package.json index 64c88ed..df77767 100644 --- a/demos/identity-a2a/package.json +++ b/demos/identity-a2a/package.json @@ -24,9 +24,10 @@ "test": "vitest" }, "dependencies": { + "@a2a-js/sdk": "^0.2.2", "@repo/cli-tools": "workspace:*", - "a2a-js": "^0.2.0", "agentcommercekit": "workspace:*", + "express": "^4.21.2", "jose": "^6.0.11", "safe-stable-stringify": "^2.5.0", "uuid": "^11.1.0", @@ -35,7 +36,7 @@ "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "@types/express": "^5.0.3", + "@types/express": "5.0.3", "@types/node": "^22", "eslint": "^9.27.0", "tsx": "^4.19.4", diff --git a/demos/identity-a2a/src/agent.ts b/demos/identity-a2a/src/agent.ts index 121a334..2860892 100644 --- a/demos/identity-a2a/src/agent.ts +++ b/demos/identity-a2a/src/agent.ts @@ -10,7 +10,6 @@ */ import { colors } from "@repo/cli-tools" -import { Role } from "a2a-js" import { createDidDocumentFromKeypair, createDidWebUri, @@ -18,19 +17,15 @@ import { generateKeypair } from "agentcommercekit" import { createAgentCardServiceEndpoint } from "agentcommercekit/a2a" +import { v4 } from "uuid" import { issueCredential } from "./issuer" import type { AgentCard, AgentExecutor, - CancelTaskRequest, - CancelTaskResponse, + ExecutionEventBus, Message, - SendMessageRequest, - SendMessageResponse, - SendMessageStreamingRequest, - SendMessageStreamingResponse, - TaskResubscriptionRequest -} from "a2a-js" + RequestContext +} from "@a2a-js/sdk" import type { DidDocument, DidUri, @@ -98,37 +93,30 @@ export abstract class Agent implements AgentExecutor { return new this(agentCard, keypair, did, jwtSigner, didDocument, vc) } - async onMessageSend( - request: SendMessageRequest - ): Promise { - const response: Message = { - role: Role.Agent, - parts: [{ type: "text", text: "Message received and processed" }] + async execute( + requestContext: RequestContext, + eventBus: ExecutionEventBus + ): Promise { + const message: Message = { + kind: "message", + messageId: v4(), + role: "agent", + parts: [ + { + kind: "text", + text: `User message ${requestContext.userMessage.messageId} received and processed` + } + ] } - return { - jsonrpc: "2.0", - id: request.id, - result: response - } + eventBus.publish(message) } - async onCancel(request: CancelTaskRequest): Promise { - return { - jsonrpc: "2.0", - id: request.id, - error: { code: -32601, message: "Operation not supported" } - } - } - - onMessageStream( - _request: SendMessageStreamingRequest - ): AsyncGenerator { - throw new Error("Method not implemented.") - } - onResubscribe( - _request: TaskResubscriptionRequest - ): AsyncGenerator { - throw new Error("Method not implemented.") + async cancelTask( + _taskId: string, + _eventBus: ExecutionEventBus + ): Promise { + // Task canceled + return Promise.resolve() } } diff --git a/demos/identity-a2a/src/bank-client-agent.ts b/demos/identity-a2a/src/bank-client-agent.ts index acad7ea..52b7f28 100644 --- a/demos/identity-a2a/src/bank-client-agent.ts +++ b/demos/identity-a2a/src/bank-client-agent.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-unnecessary-condition */ +import { A2AClient } from "@a2a-js/sdk" import { colors, createLogger, waitForEnter } from "@repo/cli-tools" -import { A2AClient, Role } from "a2a-js" import { curveToJwtAlgorithm, getDidResolver, @@ -14,13 +14,18 @@ import { verifyA2AHandshakeMessage } from "agentcommercekit/a2a" import { messageSchema } from "agentcommercekit/a2a/schemas/valibot" -import { v4 as uuidV4 } from "uuid" +import { v4 } from "uuid" import * as v from "valibot" import { Agent } from "./agent" import { didResolverWithIssuer, issuerDid } from "./issuer" import { fetchUrlFromAgentCardUrl } from "./utils/fetch-agent-card" +import { + isFailedTaskResponse, + isMessageResponse, + isRpcErrorResponse +} from "./utils/response-parsers" import { startAgentServer } from "./utils/server-utils" -import type { AgentCard, Message } from "a2a-js" +import type { AgentCard, Message, TextPart } from "@a2a-js/sdk" import type { DidUri } from "agentcommercekit" import type { Server } from "node:http" @@ -95,8 +100,7 @@ export class BankClientAgent extends Agent { // Step 2: Create A2A client using the discovered service endpoint const client = new A2AClient(this.a2aServerUrl) - - logger.log("🏦 Bank Client: Hello, I need to access my banking services.") + await new Promise((resolve) => setTimeout(resolve, 1000)) console.log( colors.yellow( @@ -116,22 +120,31 @@ export class BankClientAgent extends Agent { // Try to access banking services without authentication first try { const unauthenticatedMessage: Message = { - role: Role.User, + kind: "message", + messageId: v4(), + role: "user", parts: [ { - type: "text", + kind: "text", text: "I would like to check my account balance please." } ] } const unauthenticatedParams = { - id: uuidV4(), + id: v4(), message: unauthenticatedMessage } logger.log("🚨 Sending unauthenticated request to bank...") - const unauthResponse = await client.sendTask(unauthenticatedParams) + const unauthResponse = await client.sendMessage(unauthenticatedParams) + + if ( + isRpcErrorResponse(unauthResponse) || + isFailedTaskResponse(unauthResponse) + ) { + throw new Error("Bank rejected unauthenticated request") + } // This should not happen, but just in case logger.log("⚠️ Unexpected success:", JSON.stringify(unauthResponse)) @@ -201,10 +214,12 @@ export class BankClientAgent extends Agent { // Step 4: Send signed message for banking services const { message } = await createSignedA2AMessage( { - role: Role.User, + kind: "message", + messageId: v4(), + role: "user", parts: [ { - type: "text", + kind: "text", text: "I would like to access my banking services. Please verify my identity." } ] @@ -217,13 +232,20 @@ export class BankClientAgent extends Agent { } ) - const response = await client.sendTask({ - id: uuidV4(), + const response = await client.sendMessage({ message }) + if (isRpcErrorResponse(response)) { + throw new Error("❌ Failed to send message") + } + + if (!isMessageResponse(response)) { + throw new Error("❌ Failed to send message") + } + // Validate response using Valibot - const parseResult = v.safeParse(messageSchema, response) + const parseResult = v.safeParse(messageSchema, response.result) if (!parseResult.success) { logger.log( "❌ Invalid bank response format:", @@ -234,9 +256,7 @@ export class BankClientAgent extends Agent { const { parts } = parseResult.output const bankResponse = parts - .filter( - (part): part is { type: "text"; text: string } => part.type === "text" - ) + .filter((part): part is TextPart => part.kind === "text") .map((part) => part.text) .join("") @@ -273,7 +293,6 @@ export class BankClientAgent extends Agent { // Cleanup server if (this.server) { this.server.close() - logger.log("🏦 Bank Client: Server stopped") } } } @@ -286,7 +305,7 @@ export class BankClientAgent extends Agent { logger.log("🔐 Starting identity verification with bank teller...") const { nonce, message } = await createA2AHandshakeMessage( - Role.User, + "user", { recipient: serverDid, vc: this.vc @@ -299,17 +318,27 @@ export class BankClientAgent extends Agent { } ) - const identityParams = { - id: uuidV4(), + logger.log( + "Sending identity verification challenge...\n", + colors.dim(JSON.stringify(message, null, 2)) + ) + const authResponse = await client.sendMessage({ message + }) + + if ("error" in authResponse) { + throw new Error("❌ Failed to send identity verification challenge") } - logger.log("🔐 Sending identity verification challenge...") - const authResponse = await client.sendTask(identityParams) + if (authResponse.result.kind !== "message") { + throw new Error( + "❌ Failed to send identity verification challenge: Did not receive message response" + ) + } // Step 3: Verify bank teller response const { nonce: bankNonce, vc: bankVc } = await verifyA2AHandshakeMessage( - authResponse, + authResponse.result, { // Validate that this is intended for our DID did: this.did, @@ -359,7 +388,10 @@ export class BankClientAgent extends Agent { logger.log("✅ Bank teller DID document resolved successfully") logger.log(" DID Document ID:", colors.dim(didDocument.id)) - logger.log(" Services:", didDocument.service?.length ?? 0) + logger.log( + " Services:", + colors.dim(JSON.stringify(didDocument.service, null, 2)) + ) // Look for AgentCard service in the DID document if (didDocument.service && didDocument.service.length > 0) { diff --git a/demos/identity-a2a/src/bank-teller-agent.ts b/demos/identity-a2a/src/bank-teller-agent.ts index c1b3d88..5c36f19 100644 --- a/demos/identity-a2a/src/bank-teller-agent.ts +++ b/demos/identity-a2a/src/bank-teller-agent.ts @@ -1,5 +1,5 @@ +import { A2AError } from "@a2a-js/sdk" import { colors, createLogger, waitForEnter } from "@repo/cli-tools" -import { Role } from "a2a-js" import { curveToJwtAlgorithm, isDidUri, @@ -10,80 +10,83 @@ import { verifyA2AHandshakeMessage, verifyA2ASignedMessage } from "agentcommercekit/a2a" +import { v4 } from "uuid" import { Agent } from "./agent" import { didResolverWithIssuer, issuerDid } from "./issuer" import { startAgentServer } from "./utils/server-utils" import type { AgentCard, + ExecutionEventBus, Message, - SendMessageRequest, - SendMessageResponse -} from "a2a-js" + RequestContext +} from "@a2a-js/sdk" const logger = createLogger("Bank Teller", colors.blue) class BankTellerAgent extends Agent { private authenticatedClients = new Set() - async onMessageSend( - request: SendMessageRequest - ): Promise { - try { - // Access message from request params - const requestMessage = request.params.message - - // Check if this is an authentication request - if (this.isAuthRequest(requestMessage)) { - return await this.handleAuthentication(request) - } + async execute( + requestContext: RequestContext, + eventBus: ExecutionEventBus + ): Promise { + // Access message from request params + const userMessage = requestContext.userMessage + const taskId = requestContext.taskId + // Check if this is an authentication request + if (this.isAuthRequest(userMessage)) { + logger.log("🔐 Received authentication request") + const message = await this.handleAuthentication(requestContext) + eventBus.publish(message) + return + } - const { issuer: clientDid } = await verifyA2ASignedMessage( - requestMessage, - { - did: this.did - } + try { + logger.log( + "🔐 Verifying authentication request\n", + colors.dim(JSON.stringify(userMessage, null, 2)) ) + const { issuer: clientDid } = await verifyA2ASignedMessage(userMessage, { + did: this.did + }) + if (!isDidUri(clientDid)) { throw new Error("Invalid issuer") } if (!this.authenticatedClients.has(clientDid)) { - return { - jsonrpc: "2.0", - id: request.id, - error: { code: -32001, message: "Authentication required" } - } + throw new A2AError(-32001, "Authentication required", {}, taskId) } // Proceed with banking service response - - const result = `Verified ${clientDid}. You can now access your account.` const message: Message = { - role: Role.Agent, - parts: [{ type: "text", text: result }] - } - return { - jsonrpc: "2.0", - id: request.id, - result: message + kind: "message", + messageId: v4(), + role: "agent", + parts: [ + { + kind: "text", + text: `Verified ${clientDid}. You can now access your account.` + } + ] } + + eventBus.publish(message) } catch (_error: unknown) { - return { - jsonrpc: "2.0", - id: request.id, - error: { code: -32603, message: "Internal error" } - } + throw new A2AError(-32001, "Authentication required", {}, taskId) } } private isAuthRequest(message: Message): boolean { - return message.parts.some((part) => "data" in part && "jwt" in part.data) + return message.parts.some( + (part) => part.kind === "data" && "jwt" in part.data + ) } private async handleAuthentication( - request: SendMessageRequest - ): Promise { + requestContext: RequestContext + ): Promise { try { console.log("") console.log( @@ -102,31 +105,11 @@ class BankTellerAgent extends Agent { logger.log("🔐 Processing customer identity verification request...") - console.log( - colors.yellow( - "🔍 VERIFICATION PROCESS: Resolving customer's DID document" - ) - ) - console.log( - colors.yellow( - " Bank extracts customer DID from JWT and resolves their public keys" - ) - ) - console.log( - colors.yellow( - " Cryptographically verifies JWT signature against customer's public key" - ) - ) - console.log("") - await waitForEnter( - "Press Enter to verify customer's cryptographic proof..." - ) - const { nonce: clientNonce, iss: clientDid, vc: clientVc - } = await verifyA2AHandshakeMessage(request.params.message, { + } = await verifyA2AHandshakeMessage(requestContext.userMessage, { did: this.did }) @@ -151,7 +134,7 @@ class BankTellerAgent extends Agent { logger.log("✅ Customer identity verified:", colors.dim(clientDid)) const { message } = await createA2AHandshakeMessage( - Role.Agent, + "agent", { recipient: clientDid, requestNonce: clientNonce, @@ -193,18 +176,17 @@ class BankTellerAgent extends Agent { colors.dim(clientDid) ) - return { - jsonrpc: "2.0", - id: request.id, - result: message - } + logger.log(colors.dim(JSON.stringify(message, null, 2))) + + return message } catch (error) { logger.log("❌ Identity verification error:", error as Error) - return { - jsonrpc: "2.0", - id: request.id, - error: { code: -32603, message: "Identity verification failed" } - } + throw new A2AError( + -32603, + "Identity verification failed", + {}, + requestContext.taskId + ) } } } @@ -231,10 +213,7 @@ const agentCard: AgentCard = { "access my account" ] } - ], - authentication: { - schemes: ["public"] - } + ] } export async function startTellerServer() { diff --git a/demos/identity-a2a/src/utils/response-parsers.ts b/demos/identity-a2a/src/utils/response-parsers.ts new file mode 100644 index 0000000..8b6ec9a --- /dev/null +++ b/demos/identity-a2a/src/utils/response-parsers.ts @@ -0,0 +1,39 @@ +import type { + JSONRPCErrorResponse, + SendMessageResponse, + SendMessageSuccessResponse +} from "@a2a-js/sdk" + +export function isRpcSuccessResponse( + resp: SendMessageResponse +): resp is SendMessageSuccessResponse { + return "result" in resp +} + +export function isRpcErrorResponse( + resp: SendMessageResponse +): resp is JSONRPCErrorResponse { + return "error" in resp +} + +export function isMessageResponse( + resp: SendMessageResponse +): resp is SendMessageSuccessResponse { + if (isRpcErrorResponse(resp)) { + return false + } + + return resp.result.kind === "message" +} + +export function isFailedTaskResponse(resp: SendMessageSuccessResponse) { + if (isRpcErrorResponse(resp)) { + return true + } + + if (resp.result.kind === "task") { + return resp.result.status.state == "failed" + } + + return true +} diff --git a/demos/identity-a2a/src/utils/server-utils.ts b/demos/identity-a2a/src/utils/server-utils.ts index e20c38d..6359db4 100644 --- a/demos/identity-a2a/src/utils/server-utils.ts +++ b/demos/identity-a2a/src/utils/server-utils.ts @@ -1,8 +1,12 @@ +import { + A2AExpressApp, + DefaultRequestHandler, + InMemoryTaskStore +} from "@a2a-js/sdk" import { colors, createLogger } from "@repo/cli-tools" -import { A2AServer, DefaultA2ARequestHandler } from "a2a-js" +import express from "express" import type { Agent } from "../agent" import type { Logger } from "@repo/cli-tools" -import type { Application } from "express" type Options = { logger?: Logger @@ -31,11 +35,16 @@ export function startAgentServer( // Create A2A server with the original AgentCard // The DID is now the top-level identifier, referenced in the DID document services - const requestHandler = new DefaultA2ARequestHandler(agent) - const server = new A2AServer(agent.agentCard, requestHandler) + const requestHandler = new DefaultRequestHandler( + agent.agentCard, + new InMemoryTaskStore(), + agent + ) + const appBuilder = new A2AExpressApp(requestHandler) // Get the Express app and store it to ensure we use the same instance - const app = server.app() as Application + const app = appBuilder.setupRoutes(express(), "") + // Add DID document endpoint for did:web resolution app.get("/.well-known/did.json", (req, res) => { logger.log("🔍 Request for DID document:", colors.dim(req.url.toString())) diff --git a/packages/ack-id/package.json b/packages/ack-id/package.json index 9a11654..119af4c 100644 --- a/packages/ack-id/package.json +++ b/packages/ack-id/package.json @@ -80,12 +80,13 @@ "@agentcommercekit/keys": "workspace:*", "@agentcommercekit/vc": "workspace:*", "safe-stable-stringify": "^2.5.0", + "uuid": "^11.1.0", "valibot": "^1.1.0" }, "devDependencies": { + "@a2a-js/sdk": "^0.2.2", "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "a2a-js": "^0.2.0", "eslint": "^9.27.0", "tsdown": "^0.11.12", "typescript": "^5", @@ -93,11 +94,11 @@ "zod": "^3.25.0" }, "peerDependencies": { - "a2a-js": "^0.2.0", + "@a2a-js/sdk": "^0.2.2", "zod": "^3.25.0" }, "peerDependenciesMeta": { - "a2a-js": { + "@a2a-js/sdk": { "optional": true }, "zod": { diff --git a/packages/ack-id/src/a2a/schemas/valibot.ts b/packages/ack-id/src/a2a/schemas/valibot.ts index 94dc211..86d71cb 100644 --- a/packages/ack-id/src/a2a/schemas/valibot.ts +++ b/packages/ack-id/src/a2a/schemas/valibot.ts @@ -12,34 +12,40 @@ const partBaseSchema = v.object({ // Text part schema export const textPartSchema = v.object({ ...partBaseSchema.entries, - type: v.literal("text"), + kind: v.literal("text"), text: v.string() }) // Data part schema export const dataPartSchema = v.object({ ...partBaseSchema.entries, - type: v.literal("data"), + kind: v.literal("data"), data: v.union([v.record(v.string(), v.unknown()), v.array(v.unknown())]) }) // File content schema -export const fileContentSchema = v.object({ +export const fileWithBytesSchema = v.object({ name: v.optional(v.nullable(v.string())), mimeType: v.optional(v.nullable(v.string())), bytes: v.optional(v.nullable(v.string())), uri: v.optional(v.nullable(v.string())) }) +export const fileWithUriSchema = v.object({ + name: v.optional(v.nullable(v.string())), + mimeType: v.optional(v.nullable(v.string())), + uri: v.optional(v.nullable(v.string())) +}) + // File part schema export const filePartSchema = v.object({ ...partBaseSchema.entries, - type: v.literal("file"), - file: fileContentSchema + kind: v.literal("file"), + file: v.union([fileWithBytesSchema, fileWithUriSchema]) }) // Union of all part types using variant syntax -export const partSchema = v.variant("type", [ +export const partSchema = v.variant("kind", [ textPartSchema, dataPartSchema, filePartSchema @@ -47,7 +53,13 @@ export const partSchema = v.variant("type", [ // Message schema export const messageSchema = v.looseObject({ + kind: v.literal("message"), + messageId: v.string(), role: roleSchema, parts: v.array(partSchema), - metadata: v.optional(metadataSchema) + metadata: v.optional(metadataSchema), + taskId: v.optional(v.string()), + contextId: v.optional(v.string()), + extensions: v.optional(v.array(v.string())), + referenceTaskIds: v.optional(v.array(v.string())) }) diff --git a/packages/ack-id/src/a2a/sign-message.ts b/packages/ack-id/src/a2a/sign-message.ts index ae0dc2f..31437e3 100644 --- a/packages/ack-id/src/a2a/sign-message.ts +++ b/packages/ack-id/src/a2a/sign-message.ts @@ -1,5 +1,7 @@ import { createJwt } from "@agentcommercekit/jwt" +import { v4 } from "uuid" import { generateRandomJti, generateRandomNonce } from "./random" +import type { Message } from "@a2a-js/sdk" import type { DidUri } from "@agentcommercekit/did" import type { JwtAlgorithm, @@ -8,7 +10,6 @@ import type { JwtString } from "@agentcommercekit/jwt" import type { W3CCredential } from "@agentcommercekit/vc" -import type { Message, Role } from "a2a-js" type SignMessageOptions = { did: DidUri @@ -88,14 +89,16 @@ export function createA2AHandshakePayload(params: A2AHandshakeParams) { } export function createA2AHandshakeMessageFromJwt( - role: Role, + role: "agent" | "user", jwt: string ): Message { return { + kind: "message" as const, + messageId: v4(), role, parts: [ { - type: "data" as const, + kind: "data" as const, data: { jwt } @@ -110,22 +113,24 @@ export function createA2AHandshakeMessageFromJwt( * @returns An object containing signed A2A handshake message, as well as the newly generated nonce */ export async function createA2AHandshakeMessage( - role: Role, + role: "agent" | "user", params: A2AHandshakeParams, signOptions: SignMessageOptions -): Promise { +) { const payload = createA2AHandshakePayload(params) const { jwt, jti } = await createMessageSignature(payload, signOptions) const message = createA2AHandshakeMessageFromJwt(role, jwt) - return { + const a2aHandshakeMessage: A2AHandshakeMessage = { sig: jwt, jti, nonce: payload.nonce, message } + + return a2aHandshakeMessage } async function createMessageSignature( diff --git a/packages/ack-id/src/a2a/verify.ts b/packages/ack-id/src/a2a/verify.ts index f0078f3..9c4b17e 100644 --- a/packages/ack-id/src/a2a/verify.ts +++ b/packages/ack-id/src/a2a/verify.ts @@ -5,9 +5,9 @@ import { credentialSchema } from "@agentcommercekit/vc/schemas/valibot" import { stringify } from "safe-stable-stringify" import * as v from "valibot" import { dataPartSchema, messageSchema } from "./schemas/valibot" +import type { Message } from "@a2a-js/sdk" import type { DidResolver, DidUri } from "@agentcommercekit/did" import type { JwtVerified } from "@agentcommercekit/jwt" -import type { Message, Task } from "a2a-js" const jwtDataPartSchema = v.object({ ...dataPartSchema.entries, @@ -41,7 +41,7 @@ type VerifyA2AHandshakeOptions = { } export async function verifyA2AHandshakeMessage( - message: Message | Task | null, + message: Message | null, { did, counterparty, resolver = getDidResolver() }: VerifyA2AHandshakeOptions ): Promise> { // Ensure the message is a valid A2A handshake message @@ -62,10 +62,11 @@ export async function verifyA2ASignedMessage( { did, counterparty, resolver = getDidResolver() }: VerifyA2AHandshakeOptions ): Promise { // Ensure the message is a valid A2A signed message - const { metadata, ...parsedMessage } = v.parse( - messageWithSignatureSchema, - message - ) + const { + metadata, + contextId: _contextId, + ...parsedMessage + } = v.parse(messageWithSignatureSchema, message) // Parse the signature from the message metadata, ensuring it is // signed by the counterparty and intended for the provided DID diff --git a/packages/agentcommercekit/package.json b/packages/agentcommercekit/package.json index d74f00c..4fa2f1c 100644 --- a/packages/agentcommercekit/package.json +++ b/packages/agentcommercekit/package.json @@ -83,9 +83,9 @@ "@agentcommercekit/vc": "workspace:*" }, "devDependencies": { + "@a2a-js/sdk": "^0.2.2", "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "a2a-js": "^0.2.0", "eslint": "^9.27.0", "tsdown": "^0.11.12", "typescript": "^5", @@ -94,12 +94,12 @@ "zod": "^3.25.0" }, "peerDependencies": { - "a2a-js": "^0.2.0", + "@a2a-js/sdk": "^0.2.2", "valibot": "^1.0.0", "zod": "^3.25.0" }, "peerDependenciesMeta": { - "a2a-js": { + "@a2a-js/sdk": { "optional": true }, "valibot": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7612d49..0937f59 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -127,15 +127,18 @@ importers: demos/identity-a2a: dependencies: + '@a2a-js/sdk': + specifier: ^0.2.2 + version: 0.2.2 '@repo/cli-tools': specifier: workspace:* version: link:../../tools/cli-tools - a2a-js: - specifier: ^0.2.0 - version: 0.2.0 agentcommercekit: specifier: workspace:* version: link:../../packages/agentcommercekit + express: + specifier: ^4.21.2 + version: 4.21.2 jose: specifier: ^6.0.11 version: 6.0.11 @@ -156,7 +159,7 @@ importers: specifier: workspace:* version: link:../../tools/typescript-config '@types/express': - specifier: ^5.0.3 + specifier: 5.0.3 version: 5.0.3 '@types/node': specifier: ^22 @@ -424,19 +427,22 @@ importers: safe-stable-stringify: specifier: ^2.5.0 version: 2.5.0 + uuid: + specifier: ^11.1.0 + version: 11.1.0 valibot: specifier: ^1.1.0 version: 1.1.0(typescript@5.8.3) devDependencies: + '@a2a-js/sdk': + specifier: ^0.2.2 + version: 0.2.2 '@repo/eslint-config': specifier: workspace:* version: link:../../tools/eslint-config '@repo/typescript-config': specifier: workspace:* version: link:../../tools/typescript-config - a2a-js: - specifier: ^0.2.0 - version: 0.2.0 eslint: specifier: ^9.27.0 version: 9.27.0(jiti@2.4.2) @@ -514,15 +520,15 @@ importers: specifier: workspace:* version: link:../vc devDependencies: + '@a2a-js/sdk': + specifier: ^0.2.2 + version: 0.2.2 '@repo/eslint-config': specifier: workspace:* version: link:../../tools/eslint-config '@repo/typescript-config': specifier: workspace:* version: link:../../tools/typescript-config - a2a-js: - specifier: ^0.2.0 - version: 0.2.0 eslint: specifier: ^9.27.0 version: 9.27.0(jiti@2.4.2) @@ -819,6 +825,10 @@ importers: packages: + '@a2a-js/sdk@0.2.2': + resolution: {integrity: sha512-T0iFXgU1Z7MQWmFKLALaAnfWCvwDm8TVuCXolYymOHBh7lEawM30b06wOLc/u4wOWujuGQyCEtdVVFFF80Azbw==} + engines: {node: '>=18'} + '@adraffy/ens-normalize@1.11.0': resolution: {integrity: sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg==} @@ -2548,10 +2558,6 @@ packages: '@vitest/utils@3.1.4': resolution: {integrity: sha512-yriMuO1cfFhmiGc8ataN51+9ooHRuURdfAZfwFd3usWynjzpLslZdYnRegTv32qdgtJTsj15FoeZe2g15fY1gg==} - a2a-js@0.2.0: - resolution: {integrity: sha512-JtCjTvbBVNP43mmuCqhSXk16XSKE5L4/4wbVFJsz6K2syfplNUnsZxHxnqJ0dQoe3Fy70V09uWI29uaXkNdjrg==} - engines: {node: '>=16.0.0'} - abitype@1.0.8: resolution: {integrity: sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg==} peerDependencies: @@ -2571,10 +2577,6 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} - accepts@2.0.0: - resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} - engines: {node: '>= 0.6'} - acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -3017,10 +3019,6 @@ packages: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} - content-disposition@1.0.0: - resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} - engines: {node: '>= 0.6'} - content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} @@ -3028,10 +3026,6 @@ packages: cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - cookie-signature@1.2.2: - resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} - engines: {node: '>=6.6.0'} - cookie@0.7.1: resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} engines: {node: '>= 0.6'} @@ -3640,14 +3634,6 @@ packages: eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - eventsource-parser@3.0.2: - resolution: {integrity: sha512-6RxOBZ/cYgd8usLwsEl+EC09Au/9BcmCKYF2/xbml6DNczf7nv0MQb+7BA2F+li6//I+28VNlQR37XfQtcAJuA==} - engines: {node: '>=18.0.0'} - - eventsource@3.0.7: - resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} - engines: {node: '>=18.0.0'} - expand-template@2.0.3: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} @@ -3660,10 +3646,6 @@ packages: resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} - express@5.1.0: - resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} - engines: {node: '>= 18'} - extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} @@ -3753,10 +3735,6 @@ packages: resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} - finalhandler@2.1.0: - resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} - engines: {node: '>= 0.8'} - find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -3805,10 +3783,6 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} - fresh@2.0.0: - resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} - engines: {node: '>= 0.8'} - fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} @@ -4265,9 +4239,6 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - is-promise@4.0.0: - resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -4406,9 +4377,6 @@ packages: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} - jsonschema@1.5.0: - resolution: {integrity: sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==} - katex@0.16.22: resolution: {integrity: sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==} hasBin: true @@ -4631,10 +4599,6 @@ packages: merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} - merge-descriptors@2.0.0: - resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} - engines: {node: '>=18'} - merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -4878,10 +4842,6 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} - negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} - engines: {node: '>= 0.6'} - neotraverse@0.6.18: resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} engines: {node: '>= 10'} @@ -5095,10 +5055,6 @@ packages: path-to-regexp@0.1.12: resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} - path-to-regexp@8.2.0: - resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} - engines: {node: '>=16'} - path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -5496,10 +5452,6 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - router@2.2.0: - resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} - engines: {node: '>= 18'} - run-async@3.0.0: resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} engines: {node: '>=0.12.0'} @@ -5562,10 +5514,6 @@ packages: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} - send@1.2.0: - resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} - engines: {node: '>= 18'} - serialize-error@12.0.0: resolution: {integrity: sha512-ZYkZLAvKTKQXWuh5XpBw7CdbSzagarX39WyZ2H07CDLC5/KfsRGlIXV8d4+tfqX1M7916mRqR1QfNHSij+c9Pw==} engines: {node: '>=18'} @@ -5574,10 +5522,6 @@ packages: resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} - serve-static@2.2.0: - resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} - engines: {node: '>= 18'} - set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -6427,6 +6371,17 @@ packages: snapshots: + '@a2a-js/sdk@0.2.2': + dependencies: + '@types/cors': 2.8.18 + '@types/express': 5.0.3 + body-parser: 2.2.0 + cors: 2.8.5 + express: 4.21.2 + uuid: 11.1.0 + transitivePeerDependencies: + - supports-color + '@adraffy/ens-normalize@1.11.0': {} '@ai-sdk/anthropic@1.2.11(zod@3.25.4)': @@ -8371,18 +8326,6 @@ snapshots: loupe: 3.1.3 tinyrainbow: 2.0.0 - a2a-js@0.2.0: - dependencies: - axios: 1.9.0 - cors: 2.8.5 - eventsource: 3.0.7 - express: 5.1.0 - jsonschema: 1.5.0 - uuid: 11.1.0 - transitivePeerDependencies: - - debug - - supports-color - abitype@1.0.8(typescript@5.8.3)(zod@3.25.4): optionalDependencies: typescript: 5.8.3 @@ -8397,11 +8340,6 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - accepts@2.0.0: - dependencies: - mime-types: 3.0.1 - negotiator: 1.0.0 - acorn-jsx@5.3.2(acorn@8.14.1): dependencies: acorn: 8.14.1 @@ -8841,16 +8779,10 @@ snapshots: dependencies: safe-buffer: 5.2.1 - content-disposition@1.0.0: - dependencies: - safe-buffer: 5.2.1 - content-type@1.0.5: {} cookie-signature@1.0.6: {} - cookie-signature@1.2.2: {} - cookie@0.7.1: {} cookie@0.7.2: {} @@ -9522,12 +9454,6 @@ snapshots: eventemitter3@5.0.1: {} - eventsource-parser@3.0.2: {} - - eventsource@3.0.7: - dependencies: - eventsource-parser: 3.0.2 - expand-template@2.0.3: {} expect-type@1.2.1: {} @@ -9568,38 +9494,6 @@ snapshots: transitivePeerDependencies: - supports-color - express@5.1.0: - dependencies: - accepts: 2.0.0 - body-parser: 2.2.0 - content-disposition: 1.0.0 - content-type: 1.0.5 - cookie: 0.7.2 - cookie-signature: 1.2.2 - debug: 4.4.1 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 2.1.0 - fresh: 2.0.0 - http-errors: 2.0.0 - merge-descriptors: 2.0.0 - mime-types: 3.0.1 - on-finished: 2.4.1 - once: 1.4.0 - parseurl: 1.3.3 - proxy-addr: 2.0.7 - qs: 6.14.0 - range-parser: 1.2.1 - router: 2.2.0 - send: 1.2.0 - serve-static: 2.2.0 - statuses: 2.0.1 - type-is: 2.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - extend-shallow@2.0.1: dependencies: is-extendable: 0.1.1 @@ -9694,17 +9588,6 @@ snapshots: transitivePeerDependencies: - supports-color - finalhandler@2.1.0: - dependencies: - debug: 4.4.1 - encodeurl: 2.0.0 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -9743,8 +9626,6 @@ snapshots: fresh@0.5.2: {} - fresh@2.0.0: {} - fs-constants@1.0.0: {} fs-extra@11.3.0: @@ -10334,8 +10215,6 @@ snapshots: is-plain-obj@4.1.0: {} - is-promise@4.0.0: {} - is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -10457,8 +10336,6 @@ snapshots: jsonpointer@5.0.1: {} - jsonschema@1.5.0: {} - katex@0.16.22: dependencies: commander: 8.3.0 @@ -10774,8 +10651,6 @@ snapshots: merge-descriptors@1.0.3: {} - merge-descriptors@2.0.0: {} - merge2@1.4.1: {} methods@1.1.2: {} @@ -11159,8 +11034,6 @@ snapshots: negotiator@0.6.3: {} - negotiator@1.0.0: {} - neotraverse@0.6.18: {} netmask@2.0.2: {} @@ -11404,8 +11277,6 @@ snapshots: path-to-regexp@0.1.12: {} - path-to-regexp@8.2.0: {} - path-type@4.0.0: {} pathe@2.0.3: {} @@ -11967,16 +11838,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.39.0 fsevents: 2.3.3 - router@2.2.0: - dependencies: - debug: 4.4.1 - depd: 2.0.0 - is-promise: 4.0.0 - parseurl: 1.3.3 - path-to-regexp: 8.2.0 - transitivePeerDependencies: - - supports-color - run-async@3.0.0: {} run-parallel@1.2.0: @@ -12049,22 +11910,6 @@ snapshots: transitivePeerDependencies: - supports-color - send@1.2.0: - dependencies: - debug: 4.4.1 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 2.0.0 - http-errors: 2.0.0 - mime-types: 3.0.1 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - serialize-error@12.0.0: dependencies: type-fest: 4.41.0 @@ -12078,15 +11923,6 @@ snapshots: transitivePeerDependencies: - supports-color - serve-static@2.2.0: - dependencies: - encodeurl: 2.0.0 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 1.2.0 - transitivePeerDependencies: - - supports-color - set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 From 28fb1deb9a6911b004faefe0ea6dc110cbbb63ae Mon Sep 17 00:00:00 2001 From: Matt Venables Date: Tue, 8 Jul 2025 13:46:37 -0400 Subject: [PATCH 2/2] Fix return value for a2a handshake message --- packages/ack-id/src/a2a/sign-message.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/ack-id/src/a2a/sign-message.ts b/packages/ack-id/src/a2a/sign-message.ts index 31437e3..1a2ebb9 100644 --- a/packages/ack-id/src/a2a/sign-message.ts +++ b/packages/ack-id/src/a2a/sign-message.ts @@ -123,14 +123,12 @@ export async function createA2AHandshakeMessage( const message = createA2AHandshakeMessageFromJwt(role, jwt) - const a2aHandshakeMessage: A2AHandshakeMessage = { + return { sig: jwt, jti, nonce: payload.nonce, message } - - return a2aHandshakeMessage } async function createMessageSignature(