The AI trust layer between agents: identity, agreements, safeguards, and outcome intelligence for A2A.

Viewing files at commit 989559e001cdCommit detailsView latest

api/agent-delivery.ts 29 lines · 1011 B · typescript
1
import { handleCallback } from '@vercel/queue';
2
import { z } from 'zod';
3
import { HostedRepository } from '../packages/persistence/src/hosted.js';
4
5
const repository = process.env.DATABASE_URL
6
  ? new HostedRepository(process.env.DATABASE_URL)
7
  : undefined;
8
const QueueMessageSchema = z.object({ messageId: z.string().uuid() });
9
10
export const POST = handleCallback<{ messageId: string }>(
11
  async (message, metadata) => {
12
    if (!repository) throw new Error('Hosted persistence is not configured');
13
    const value = QueueMessageSchema.parse(message);
14
    if (metadata.deliveryCount > 10) {
15
      await repository.abandonGatewayDelivery(
16
        value.messageId,
17
        `Automatic delivery abandoned after ${metadata.deliveryCount} attempts`,
18
      );
19
      return;
20
    }
21
    await repository.deliverGatewayMessage(value.messageId);
22
  },
23
  {
24
    visibilityTimeoutSeconds: 30,
25
    retry: (_error, metadata) => ({
26
      afterSeconds: Math.min(300, 2 ** Math.min(metadata.deliveryCount, 6) * 5),
27
    }),
28
  },
29
);