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

Viewing files at commit b506ef3834f7Commit detailsView latest

api/agent-delivery.ts 30 lines · 1.0 KB · typescript
1
import { QueueClient } 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
const queue = new QueueClient();
10
11
export default queue.handleNodeCallback<{ messageId: string }>(
12
  async (message, metadata) => {
13
    if (!repository) throw new Error('Hosted persistence is not configured');
14
    const value = QueueMessageSchema.parse(message);
15
    if (metadata.deliveryCount > 10) {
16
      await repository.abandonGatewayDelivery(
17
        value.messageId,
18
        `Automatic delivery abandoned after ${metadata.deliveryCount} attempts`,
19
      );
20
      return;
21
    }
22
    await repository.deliverGatewayMessage(value.messageId);
23
  },
24
  {
25
    visibilityTimeoutSeconds: 30,
26
    retry: (_error, metadata) => ({
27
      afterSeconds: Math.min(300, 2 ** Math.min(metadata.deliveryCount, 6) * 5),
28
    }),
29
  },
30
);