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

Viewing files at commit 578449aaa53eCommit detailsView latest

packages/persistence/src/provider-connection.ts 61 lines · 1.8 KB · typescript
1
import { createHash, randomBytes, randomUUID } from 'node:crypto';
2
3
export type ProviderConnectionStatus = 'pending' | 'connected' | 'expired';
4
5
export type ProviderConnection = {
6
  connectionId: string;
7
  operatorId: string;
8
  provider: 'botpress';
9
  agentName: string;
10
  codeHash: string;
11
  status: ProviderConnectionStatus;
12
  agentId?: string;
13
  runtimeEndpoint?: string;
14
  credentialPublicKey?: string;
15
  credentialCiphertext?: string;
16
  createdAt: string;
17
  expiresAt: string;
18
  connectedAt?: string;
19
};
20
21
export type PublicProviderConnection = Omit<
22
  ProviderConnection,
23
  'operatorId' | 'codeHash' | 'credentialPublicKey' | 'credentialCiphertext'
24
>;
25
26
export function createProviderConnectionInput(
27
  operatorId: string,
28
  provider: ProviderConnection['provider'],
29
  agentName: string,
30
  lifetimeMinutes = 15,
31
) {
32
  const name = agentName.trim();
33
  if (!name) throw new Error('Agent name is required');
34
  const code = `oc_bp_${randomBytes(24).toString('base64url')}`;
35
  const createdAt = new Date();
36
  const minutes = Math.max(5, Math.min(30, lifetimeMinutes));
37
  const connection: ProviderConnection = {
38
    connectionId: randomUUID(),
39
    operatorId,
40
    provider,
41
    agentName: name,
42
    codeHash: hashProviderConnectionCode(code),
43
    status: 'pending',
44
    createdAt: createdAt.toISOString(),
45
    expiresAt: new Date(createdAt.getTime() + minutes * 60_000).toISOString(),
46
  };
47
  return { connection, code };
48
}
49
50
export function hashProviderConnectionCode(code: string) {
51
  return createHash('sha256').update(code).digest('base64url');
52
}
53
54
export function publicProviderConnection(connection: ProviderConnection): PublicProviderConnection {
55
  const safe = { ...connection } as Partial<ProviderConnection>;
56
  delete safe.operatorId;
57
  delete safe.codeHash;
58
  delete safe.credentialPublicKey;
59
  delete safe.credentialCiphertext;
60
  return safe as PublicProviderConnection;
61
}