@azeth/sdk 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +139 -0
  3. package/dist/account/balance.d.ts +41 -0
  4. package/dist/account/balance.d.ts.map +1 -0
  5. package/dist/account/balance.js +264 -0
  6. package/dist/account/balance.js.map +1 -0
  7. package/dist/account/create.d.ts +27 -0
  8. package/dist/account/create.d.ts.map +1 -0
  9. package/dist/account/create.js +116 -0
  10. package/dist/account/create.js.map +1 -0
  11. package/dist/account/deposit.d.ts +34 -0
  12. package/dist/account/deposit.d.ts.map +1 -0
  13. package/dist/account/deposit.js +88 -0
  14. package/dist/account/deposit.js.map +1 -0
  15. package/dist/account/guardian-approval.d.ts +111 -0
  16. package/dist/account/guardian-approval.d.ts.map +1 -0
  17. package/dist/account/guardian-approval.js +223 -0
  18. package/dist/account/guardian-approval.js.map +1 -0
  19. package/dist/account/guardian.d.ts +27 -0
  20. package/dist/account/guardian.d.ts.map +1 -0
  21. package/dist/account/guardian.js +67 -0
  22. package/dist/account/guardian.js.map +1 -0
  23. package/dist/account/history.d.ts +22 -0
  24. package/dist/account/history.d.ts.map +1 -0
  25. package/dist/account/history.js +144 -0
  26. package/dist/account/history.js.map +1 -0
  27. package/dist/account/transfer.d.ts +28 -0
  28. package/dist/account/transfer.d.ts.map +1 -0
  29. package/dist/account/transfer.js +137 -0
  30. package/dist/account/transfer.js.map +1 -0
  31. package/dist/auth/erc8128.d.ts +14 -0
  32. package/dist/auth/erc8128.d.ts.map +1 -0
  33. package/dist/auth/erc8128.js +92 -0
  34. package/dist/auth/erc8128.js.map +1 -0
  35. package/dist/client.d.ts +394 -0
  36. package/dist/client.d.ts.map +1 -0
  37. package/dist/client.js +970 -0
  38. package/dist/client.js.map +1 -0
  39. package/dist/events/emitter.d.ts +96 -0
  40. package/dist/events/emitter.d.ts.map +1 -0
  41. package/dist/events/emitter.js +90 -0
  42. package/dist/events/emitter.js.map +1 -0
  43. package/dist/index.d.ts +29 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +33 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/messaging/message-router.d.ts +69 -0
  48. package/dist/messaging/message-router.d.ts.map +1 -0
  49. package/dist/messaging/message-router.js +307 -0
  50. package/dist/messaging/message-router.js.map +1 -0
  51. package/dist/messaging/rate-limiter.d.ts +31 -0
  52. package/dist/messaging/rate-limiter.d.ts.map +1 -0
  53. package/dist/messaging/rate-limiter.js +74 -0
  54. package/dist/messaging/rate-limiter.js.map +1 -0
  55. package/dist/messaging/xmtp.d.ts +144 -0
  56. package/dist/messaging/xmtp.d.ts.map +1 -0
  57. package/dist/messaging/xmtp.js +473 -0
  58. package/dist/messaging/xmtp.js.map +1 -0
  59. package/dist/payments/agreements.d.ts +87 -0
  60. package/dist/payments/agreements.d.ts.map +1 -0
  61. package/dist/payments/agreements.js +337 -0
  62. package/dist/payments/agreements.js.map +1 -0
  63. package/dist/payments/budget.d.ts +118 -0
  64. package/dist/payments/budget.d.ts.map +1 -0
  65. package/dist/payments/budget.js +176 -0
  66. package/dist/payments/budget.js.map +1 -0
  67. package/dist/payments/smart-fetch.d.ts +65 -0
  68. package/dist/payments/smart-fetch.d.ts.map +1 -0
  69. package/dist/payments/smart-fetch.js +115 -0
  70. package/dist/payments/smart-fetch.js.map +1 -0
  71. package/dist/payments/x402.d.ts +89 -0
  72. package/dist/payments/x402.d.ts.map +1 -0
  73. package/dist/payments/x402.js +620 -0
  74. package/dist/payments/x402.js.map +1 -0
  75. package/dist/registry/discover.d.ts +43 -0
  76. package/dist/registry/discover.d.ts.map +1 -0
  77. package/dist/registry/discover.js +272 -0
  78. package/dist/registry/discover.js.map +1 -0
  79. package/dist/registry/register.d.ts +44 -0
  80. package/dist/registry/register.d.ts.map +1 -0
  81. package/dist/registry/register.js +126 -0
  82. package/dist/registry/register.js.map +1 -0
  83. package/dist/reputation/opinion.d.ts +52 -0
  84. package/dist/reputation/opinion.d.ts.map +1 -0
  85. package/dist/reputation/opinion.js +198 -0
  86. package/dist/reputation/opinion.js.map +1 -0
  87. package/dist/utils/addresses.d.ts +6 -0
  88. package/dist/utils/addresses.d.ts.map +1 -0
  89. package/dist/utils/addresses.js +53 -0
  90. package/dist/utils/addresses.js.map +1 -0
  91. package/dist/utils/errors.d.ts +23 -0
  92. package/dist/utils/errors.d.ts.map +1 -0
  93. package/dist/utils/errors.js +188 -0
  94. package/dist/utils/errors.js.map +1 -0
  95. package/dist/utils/execution.d.ts +20 -0
  96. package/dist/utils/execution.d.ts.map +1 -0
  97. package/dist/utils/execution.js +28 -0
  98. package/dist/utils/execution.js.map +1 -0
  99. package/dist/utils/paymaster.d.ts +35 -0
  100. package/dist/utils/paymaster.d.ts.map +1 -0
  101. package/dist/utils/paymaster.js +115 -0
  102. package/dist/utils/paymaster.js.map +1 -0
  103. package/dist/utils/retry.d.ts +19 -0
  104. package/dist/utils/retry.d.ts.map +1 -0
  105. package/dist/utils/retry.js +68 -0
  106. package/dist/utils/retry.js.map +1 -0
  107. package/dist/utils/userop.d.ts +55 -0
  108. package/dist/utils/userop.d.ts.map +1 -0
  109. package/dist/utils/userop.js +201 -0
  110. package/dist/utils/userop.js.map +1 -0
  111. package/dist/utils/validation.d.ts +8 -0
  112. package/dist/utils/validation.d.ts.map +1 -0
  113. package/dist/utils/validation.js +35 -0
  114. package/dist/utils/validation.js.map +1 -0
  115. package/package.json +63 -0
@@ -0,0 +1,43 @@
1
+ import type { PublicClient, Transport, Chain } from 'viem';
2
+ import { type RegistryEntry, type DiscoveryParams, type SupportedChainName } from '@azeth/common';
3
+ /** Discover services from the Azeth server's trust registry index.
4
+ *
5
+ * MEDIUM-8 (Audit): Results are fetched from the server's in-memory index, NOT verified
6
+ * on-chain. The server could return stale, incomplete, or manipulated entries. For security-
7
+ * critical decisions (e.g., routing payments or trusting a service endpoint), callers SHOULD
8
+ * verify the returned entries against the on-chain ERC-8004 Identity Registry before trusting
9
+ * them. Use the contract's `ownerOf(tokenId)` and metadata to confirm authenticity.
10
+ */
11
+ export declare function discoverServices(serverUrl: string, params: DiscoveryParams): Promise<RegistryEntry[]>;
12
+ /** Get a specific registry entry by token ID */
13
+ export declare function getRegistryEntry(serverUrl: string, tokenId: bigint): Promise<RegistryEntry | null>;
14
+ /** Result from discovery with fallback — includes source indicator */
15
+ export interface DiscoveryWithFallbackResult {
16
+ entries: RegistryEntry[];
17
+ /** 'server' if results came from the API, 'on-chain' if from direct contract reads */
18
+ source: 'server' | 'on-chain';
19
+ /** True when minReputation was requested but ignored in on-chain mode */
20
+ minReputationIgnored?: boolean;
21
+ }
22
+ /** Options for discoverServicesWithFallback */
23
+ export interface DiscoveryFallbackOptions {
24
+ /** Cache query results in-memory for 60s (default: false) */
25
+ cacheResults?: boolean;
26
+ }
27
+ /** Discover services with automatic on-chain fallback when the server is unavailable.
28
+ *
29
+ * First tries the Azeth server API (fast, indexed, supports reputation sorting).
30
+ * If the server is unreachable (`SERVER_UNAVAILABLE`), retries once after 2s delay,
31
+ * then falls back to reading the ERC-8004 Identity Registry via the AzethOracle's
32
+ * `discoverRegistry()` view function.
33
+ *
34
+ * On-chain fallback limitations:
35
+ * - Does NOT support minReputation or sortByReputation (requires the server's index)
36
+ * - Filters by capability and entityType are applied client-side
37
+ * - Reads up to 1000 entries per RPC call via the AzethOracle batch view function
38
+ * - Oracle uses early termination after 5 consecutive non-existent token IDs
39
+ *
40
+ * @param options.cacheResults - Cache results in-memory for 60s (default: false)
41
+ */
42
+ export declare function discoverServicesWithFallback(serverUrl: string, params: DiscoveryParams, publicClient: PublicClient<Transport, Chain>, chainName: SupportedChainName, options?: DiscoveryFallbackOptions): Promise<DiscoveryWithFallbackResult>;
43
+ //# sourceMappingURL=discover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/registry/discover.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC3D,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,eAAe,EAEpB,KAAK,kBAAkB,EACxB,MAAM,eAAe,CAAC;AAIvB;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,aAAa,EAAE,CAAC,CAiC1B;AAED,gDAAgD;AAChD,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAuB/B;AAuCD,sEAAsE;AACtE,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,sFAAsF;IACtF,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC9B,yEAAyE;IACzE,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,+CAA+C;AAC/C,MAAM,WAAW,wBAAwB;IACvC,6DAA6D;IAC7D,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AA8CD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,4BAA4B,CAChD,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,eAAe,EACvB,YAAY,EAAE,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,EAC5C,SAAS,EAAE,kBAAkB,EAC7B,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,2BAA2B,CAAC,CAyBtC"}
@@ -0,0 +1,272 @@
1
+ import { AzethError, AZETH_CONTRACTS, ERC8004_REGISTRY, } from '@azeth/common';
2
+ import { AzethOracleAbi } from '@azeth/common/abis';
3
+ import { withRetry } from '../utils/retry.js';
4
+ /** Discover services from the Azeth server's trust registry index.
5
+ *
6
+ * MEDIUM-8 (Audit): Results are fetched from the server's in-memory index, NOT verified
7
+ * on-chain. The server could return stale, incomplete, or manipulated entries. For security-
8
+ * critical decisions (e.g., routing payments or trusting a service endpoint), callers SHOULD
9
+ * verify the returned entries against the on-chain ERC-8004 Identity Registry before trusting
10
+ * them. Use the contract's `ownerOf(tokenId)` and metadata to confirm authenticity.
11
+ */
12
+ export async function discoverServices(serverUrl, params) {
13
+ // H-7 fix: Default limit 20, max 100 to prevent unbounded API reads
14
+ const limit = Math.min(params.limit ?? 20, 100);
15
+ const queryParams = new URLSearchParams();
16
+ if (params.capability)
17
+ queryParams.set('capability', params.capability);
18
+ if (params.entityType)
19
+ queryParams.set('entityType', params.entityType);
20
+ if (params.minReputation !== undefined)
21
+ queryParams.set('minReputation', params.minReputation.toString());
22
+ if (params.sortByReputation)
23
+ queryParams.set('sortByReputation', 'true');
24
+ queryParams.set('limit', limit.toString());
25
+ if (params.offset !== undefined)
26
+ queryParams.set('offset', params.offset.toString());
27
+ let response;
28
+ try {
29
+ response = await withRetry(() => fetch(`${serverUrl}/api/v1/registry/discover?${queryParams}`));
30
+ }
31
+ catch (err) {
32
+ if (err instanceof AzethError)
33
+ throw err;
34
+ throw new AzethError(err instanceof Error ? err.message : 'Failed to discover services', 'SERVER_UNAVAILABLE', { originalError: err instanceof Error ? err.name : undefined });
35
+ }
36
+ if (!response.ok) {
37
+ throw new AzethError(`Discovery API error: ${response.status}`, response.status === 404 ? 'SERVICE_NOT_FOUND' : 'REGISTRY_ERROR', { status: response.status });
38
+ }
39
+ const body = await response.json();
40
+ return body.data ?? [];
41
+ }
42
+ /** Get a specific registry entry by token ID */
43
+ export async function getRegistryEntry(serverUrl, tokenId) {
44
+ let response;
45
+ try {
46
+ response = await withRetry(() => fetch(`${serverUrl}/api/v1/registry/${tokenId}`));
47
+ }
48
+ catch (err) {
49
+ if (err instanceof AzethError)
50
+ throw err;
51
+ throw new AzethError(err instanceof Error ? err.message : 'Failed to get registry entry', 'SERVER_UNAVAILABLE', { originalError: err instanceof Error ? err.name : undefined });
52
+ }
53
+ if (response.status === 404)
54
+ return null;
55
+ if (!response.ok) {
56
+ throw new AzethError(`Registry API error: ${response.status}`, 'REGISTRY_ERROR', { status: response.status, tokenId: tokenId.toString() });
57
+ }
58
+ const body = await response.json();
59
+ return body.data ?? null;
60
+ }
61
+ // ── On-chain fallback via AzethOracle ────────────────────────────────────────
62
+ /** Batch size for oracle discovery — entries per RPC call (oracle caps at 1000) */
63
+ const ORACLE_BATCH_SIZE = 1000;
64
+ /** Parse a data:application/json, URI into metadata fields */
65
+ function parseDataURI(uri) {
66
+ try {
67
+ if (!uri.startsWith('data:application/json,'))
68
+ return null;
69
+ const jsonStr = decodeURIComponent(uri.slice('data:application/json,'.length));
70
+ const meta = JSON.parse(jsonStr);
71
+ const name = typeof meta.name === 'string' ? meta.name : '';
72
+ const description = typeof meta.description === 'string' ? meta.description : '';
73
+ const entityType = typeof meta.entityType === 'string' && ['agent', 'service', 'infrastructure'].includes(meta.entityType)
74
+ ? meta.entityType
75
+ : 'agent';
76
+ const capabilities = Array.isArray(meta.capabilities)
77
+ ? meta.capabilities.filter((c) => typeof c === 'string')
78
+ : [];
79
+ const endpoint = typeof meta.endpoint === 'string' ? meta.endpoint : undefined;
80
+ return { name, description, entityType, capabilities, endpoint };
81
+ }
82
+ catch {
83
+ return null;
84
+ }
85
+ }
86
+ // ── SDK-side discovery cache ─────────────────────────────────────────────────
87
+ const SDK_CACHE_TTL_MS = 60_000;
88
+ const SDK_CACHE_MAX = 100;
89
+ const sdkDiscoveryCache = new Map();
90
+ /** Serialize params into a stable cache key */
91
+ function makeCacheKey(serverUrl, params, chainName) {
92
+ return JSON.stringify({
93
+ u: serverUrl,
94
+ p: {
95
+ c: params.capability,
96
+ e: params.entityType,
97
+ n: params.name,
98
+ mr: params.minReputation,
99
+ sr: params.sortByReputation,
100
+ l: params.limit,
101
+ o: params.offset,
102
+ },
103
+ ch: chainName,
104
+ });
105
+ }
106
+ /** Evict the least-recently-accessed entry from the SDK cache */
107
+ function evictLRU() {
108
+ if (sdkDiscoveryCache.size < SDK_CACHE_MAX)
109
+ return;
110
+ let lruKey;
111
+ let lruTime = Infinity;
112
+ for (const [k, v] of sdkDiscoveryCache) {
113
+ if (v.lastAccessed < lruTime) {
114
+ lruTime = v.lastAccessed;
115
+ lruKey = k;
116
+ }
117
+ }
118
+ if (lruKey !== undefined)
119
+ sdkDiscoveryCache.delete(lruKey);
120
+ }
121
+ /** Discover services with automatic on-chain fallback when the server is unavailable.
122
+ *
123
+ * First tries the Azeth server API (fast, indexed, supports reputation sorting).
124
+ * If the server is unreachable (`SERVER_UNAVAILABLE`), retries once after 2s delay,
125
+ * then falls back to reading the ERC-8004 Identity Registry via the AzethOracle's
126
+ * `discoverRegistry()` view function.
127
+ *
128
+ * On-chain fallback limitations:
129
+ * - Does NOT support minReputation or sortByReputation (requires the server's index)
130
+ * - Filters by capability and entityType are applied client-side
131
+ * - Reads up to 1000 entries per RPC call via the AzethOracle batch view function
132
+ * - Oracle uses early termination after 5 consecutive non-existent token IDs
133
+ *
134
+ * @param options.cacheResults - Cache results in-memory for 60s (default: false)
135
+ */
136
+ export async function discoverServicesWithFallback(serverUrl, params, publicClient, chainName, options) {
137
+ // Check SDK-side cache if enabled
138
+ if (options?.cacheResults) {
139
+ const cacheKey = makeCacheKey(serverUrl, params, chainName);
140
+ const cached = sdkDiscoveryCache.get(cacheKey);
141
+ if (cached && Date.now() - cached.timestamp < SDK_CACHE_TTL_MS) {
142
+ cached.lastAccessed = Date.now();
143
+ return cached.result;
144
+ }
145
+ }
146
+ const result = await discoverServicesWithFallbackInner(serverUrl, params, publicClient, chainName);
147
+ // Store in SDK cache if enabled
148
+ if (options?.cacheResults) {
149
+ const cacheKey = makeCacheKey(serverUrl, params, chainName);
150
+ evictLRU();
151
+ sdkDiscoveryCache.set(cacheKey, {
152
+ result,
153
+ timestamp: Date.now(),
154
+ lastAccessed: Date.now(),
155
+ });
156
+ }
157
+ return result;
158
+ }
159
+ /** Internal implementation — performs server attempt with retry then on-chain fallback */
160
+ async function discoverServicesWithFallbackInner(serverUrl, params, publicClient, chainName) {
161
+ // Try the server first
162
+ try {
163
+ const entries = await discoverServices(serverUrl, params);
164
+ // Fall back to on-chain when server returns empty results — the server index may be
165
+ // stale or incomplete, but the on-chain registry is the source of truth.
166
+ if (entries.length > 0) {
167
+ return { entries, source: 'server' };
168
+ }
169
+ }
170
+ catch (err) {
171
+ // Fall back to on-chain for server connectivity issues AND 404/registry errors
172
+ const fallbackCodes = new Set(['SERVER_UNAVAILABLE', 'SERVICE_NOT_FOUND', 'REGISTRY_ERROR']);
173
+ if (!(err instanceof AzethError) || !fallbackCodes.has(err.code)) {
174
+ throw err;
175
+ }
176
+ // Retry once with 2s delay before falling back to on-chain
177
+ try {
178
+ await new Promise((resolve) => setTimeout(resolve, 2000));
179
+ const entries = await discoverServices(serverUrl, params);
180
+ if (entries.length > 0) {
181
+ return { entries, source: 'server' };
182
+ }
183
+ }
184
+ catch (retryErr) {
185
+ if (!(retryErr instanceof AzethError) || !fallbackCodes.has(retryErr.code)) {
186
+ throw retryErr;
187
+ }
188
+ // Fall through to on-chain
189
+ }
190
+ }
191
+ // On-chain fallback via AzethOracle.discoverRegistry()
192
+ const registryAddress = ERC8004_REGISTRY[chainName];
193
+ if (!registryAddress) {
194
+ throw new AzethError(`No ERC-8004 Identity Registry configured for ${chainName}`, 'REGISTRY_ERROR');
195
+ }
196
+ const oracleAddress = AZETH_CONTRACTS[chainName]?.priceOracle;
197
+ if (!oracleAddress) {
198
+ throw new AzethError(`No AzethOracle configured for ${chainName}`, 'REGISTRY_ERROR');
199
+ }
200
+ const limit = Math.min(params.limit ?? 20, 100);
201
+ const offset = params.offset ?? 0;
202
+ const collectTarget = offset + limit; // collect enough to slice for offset
203
+ const entries = [];
204
+ let startId = 0;
205
+ let reachedEnd = false;
206
+ while (!reachedEnd && entries.length < collectTarget) {
207
+ let snapshots;
208
+ let scannedCount;
209
+ try {
210
+ [snapshots, scannedCount] = await publicClient.readContract({
211
+ address: oracleAddress,
212
+ abi: AzethOracleAbi,
213
+ functionName: 'discoverRegistry',
214
+ args: [registryAddress, BigInt(startId), BigInt(ORACLE_BATCH_SIZE)],
215
+ });
216
+ }
217
+ catch {
218
+ throw new AzethError('Failed to query AzethOracle discoverRegistry', 'NETWORK_ERROR');
219
+ }
220
+ for (const snap of snapshots) {
221
+ if (entries.length >= collectTarget)
222
+ break;
223
+ if (!snap.exists)
224
+ continue;
225
+ const meta = parseDataURI(snap.uri);
226
+ if (!meta)
227
+ continue;
228
+ // Apply filters client-side
229
+ if (params.capability && !meta.capabilities.some((c) => c.toLowerCase() === params.capability.toLowerCase())) {
230
+ continue;
231
+ }
232
+ if (params.entityType && meta.entityType !== params.entityType) {
233
+ continue;
234
+ }
235
+ if (params.name && meta.name.trim().toLowerCase() !== params.name.trim().toLowerCase()) {
236
+ continue;
237
+ }
238
+ entries.push({
239
+ tokenId: snap.tokenId,
240
+ owner: snap.owner,
241
+ entityType: meta.entityType,
242
+ name: meta.name,
243
+ description: meta.description,
244
+ capabilities: meta.capabilities,
245
+ endpoint: meta.endpoint,
246
+ active: true,
247
+ });
248
+ }
249
+ // If scannedCount < ORACLE_BATCH_SIZE, oracle hit early termination (end of registry)
250
+ if (scannedCount < BigInt(ORACLE_BATCH_SIZE)) {
251
+ reachedEnd = true;
252
+ }
253
+ else {
254
+ startId += ORACLE_BATCH_SIZE;
255
+ }
256
+ }
257
+ // Sort: entries with endpoints first, then newest tokenId (most likely to be live)
258
+ entries.sort((a, b) => {
259
+ const aHas = a.endpoint ? 1 : 0;
260
+ const bHas = b.endpoint ? 1 : 0;
261
+ if (aHas !== bHas)
262
+ return bHas - aHas;
263
+ return Number(b.tokenId - a.tokenId);
264
+ });
265
+ return {
266
+ entries: entries.slice(offset, offset + limit),
267
+ source: 'on-chain',
268
+ // minReputation is not supported in on-chain mode (requires server index)
269
+ ...(params.minReputation !== undefined ? { minReputationIgnored: true } : {}),
270
+ };
271
+ }
272
+ //# sourceMappingURL=discover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/registry/discover.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { type PublicClient, type Chain, type Transport } from 'viem';
2
+ import { type AzethContractAddresses, type CatalogEntry } from '@azeth/common';
3
+ import type { AzethSmartAccountClient } from '../utils/userop.js';
4
+ export interface RegisterParams {
5
+ name: string;
6
+ description: string;
7
+ entityType: 'agent' | 'service' | 'infrastructure';
8
+ capabilities: string[];
9
+ endpoint?: string;
10
+ pricing?: string;
11
+ catalog?: CatalogEntry[];
12
+ }
13
+ export interface RegisterResult {
14
+ tokenId: bigint;
15
+ txHash: `0x${string}`;
16
+ }
17
+ /** Build a data: URI from registration parameters */
18
+ export declare function buildAgentURI(params: RegisterParams): string;
19
+ /** Register on the ERC-8004 trust registry via the TrustRegistryModule.
20
+ *
21
+ * Routes the call through the smart account so msg.sender = smart account address.
22
+ * The TrustRegistryModule checks _initialized[msg.sender], which is only true for
23
+ * the smart account — NOT the EOA. Using the smart account client ensures the
24
+ * module recognizes the caller.
25
+ */
26
+ export declare function registerOnRegistry(publicClient: PublicClient<Transport, Chain>, smartAccountClient: AzethSmartAccountClient, addresses: AzethContractAddresses, account: `0x${string}`, params: RegisterParams): Promise<RegisterResult>;
27
+ /** Update metadata for a registered account.
28
+ *
29
+ * Routes the call through the smart account so msg.sender = smart account address.
30
+ * The contract expects `value` as bytes. This function accepts a string
31
+ * for convenience and encodes it as hex-encoded UTF-8 bytes.
32
+ */
33
+ export declare function updateMetadata(publicClient: PublicClient<Transport, Chain>, smartAccountClient: AzethSmartAccountClient, addresses: AzethContractAddresses, account: `0x${string}`, key: string, value: string): Promise<`0x${string}`>;
34
+ export interface MetadataUpdate {
35
+ key: string;
36
+ value: string;
37
+ }
38
+ /** Update multiple metadata fields in a single batch transaction.
39
+ *
40
+ * Encodes each key-value pair as a separate updateMetadata() call and sends them
41
+ * as a batch UserOp via the smart account's execute() with CALLTYPE_BATCH.
42
+ */
43
+ export declare function updateMetadataBatch(publicClient: PublicClient<Transport, Chain>, smartAccountClient: AzethSmartAccountClient, addresses: AzethContractAddresses, account: `0x${string}`, updates: MetadataUpdate[]): Promise<`0x${string}`>;
44
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/registry/register.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,KAAK,EACV,KAAK,SAAS,EAMf,MAAM,MAAM,CAAC;AAEd,OAAO,EAAc,KAAK,sBAAsB,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAG3F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAElE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,GAAG,SAAS,GAAG,gBAAgB,CAAC;IACnD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC;CACvB;AAED,qDAAqD;AACrD,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAY5D;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,EAC5C,kBAAkB,EAAE,uBAAuB,EAC3C,SAAS,EAAE,sBAAsB,EACjC,OAAO,EAAE,KAAK,MAAM,EAAE,EACtB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,cAAc,CAAC,CAyCzB;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,YAAY,EAAE,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,EAC5C,kBAAkB,EAAE,uBAAuB,EAC3C,SAAS,EAAE,sBAAsB,EACjC,OAAO,EAAE,KAAK,MAAM,EAAE,EACtB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CAqBxB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,EAC5C,kBAAkB,EAAE,uBAAuB,EAC3C,SAAS,EAAE,sBAAsB,EACjC,OAAO,EAAE,KAAK,MAAM,EAAE,EACtB,OAAO,EAAE,cAAc,EAAE,GACxB,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CAiCxB"}
@@ -0,0 +1,126 @@
1
+ import { stringToHex, keccak256, toBytes, encodeFunctionData, } from 'viem';
2
+ import { TrustRegistryModuleAbi } from '@azeth/common/abis';
3
+ import { AzethError } from '@azeth/common';
4
+ import { requireAddress } from '../utils/addresses.js';
5
+ import { wrapContractError } from '../utils/errors.js';
6
+ /** Build a data: URI from registration parameters */
7
+ export function buildAgentURI(params) {
8
+ const metadata = {
9
+ name: params.name,
10
+ description: params.description,
11
+ entityType: params.entityType,
12
+ capabilities: params.capabilities,
13
+ endpoint: params.endpoint ?? '',
14
+ ...(params.pricing ? { pricing: params.pricing } : {}),
15
+ ...(params.catalog?.length ? { catalog: params.catalog } : {}),
16
+ version: '0.1.0',
17
+ };
18
+ return `data:application/json,${encodeURIComponent(JSON.stringify(metadata))}`;
19
+ }
20
+ /** Register on the ERC-8004 trust registry via the TrustRegistryModule.
21
+ *
22
+ * Routes the call through the smart account so msg.sender = smart account address.
23
+ * The TrustRegistryModule checks _initialized[msg.sender], which is only true for
24
+ * the smart account — NOT the EOA. Using the smart account client ensures the
25
+ * module recognizes the caller.
26
+ */
27
+ export async function registerOnRegistry(publicClient, smartAccountClient, addresses, account, params) {
28
+ const moduleAddress = requireAddress(addresses, 'trustRegistryModule');
29
+ const agentURI = buildAgentURI(params);
30
+ let txHash;
31
+ try {
32
+ const data = encodeFunctionData({
33
+ abi: TrustRegistryModuleAbi,
34
+ functionName: 'registerOnRegistry',
35
+ args: [agentURI],
36
+ });
37
+ txHash = await smartAccountClient.sendTransaction({
38
+ to: moduleAddress,
39
+ value: 0n,
40
+ data,
41
+ });
42
+ }
43
+ catch (err) {
44
+ throw wrapContractError(err, 'REGISTRY_ERROR');
45
+ }
46
+ const receipt = await publicClient.waitForTransactionReceipt({ hash: txHash, timeout: 120_000 });
47
+ // M-4: Parse the Registered event log for tokenId with proper validation.
48
+ // Check event signature and contract address to avoid matching unrelated logs.
49
+ // Event: Registered(address indexed account, uint256 indexed tokenId, string agentURI)
50
+ const REGISTERED_EVENT_TOPIC = keccak256(toBytes('Registered(address,uint256,string)'));
51
+ let tokenId = 0n;
52
+ for (const log of receipt.logs) {
53
+ if (log.address.toLowerCase() === moduleAddress.toLowerCase()
54
+ && log.topics[0] === REGISTERED_EVENT_TOPIC
55
+ && log.topics.length >= 3) {
56
+ // tokenId is the second indexed topic
57
+ tokenId = BigInt(log.topics[2] ?? '0x0');
58
+ break;
59
+ }
60
+ }
61
+ return { tokenId, txHash };
62
+ }
63
+ /** Update metadata for a registered account.
64
+ *
65
+ * Routes the call through the smart account so msg.sender = smart account address.
66
+ * The contract expects `value` as bytes. This function accepts a string
67
+ * for convenience and encodes it as hex-encoded UTF-8 bytes.
68
+ */
69
+ export async function updateMetadata(publicClient, smartAccountClient, addresses, account, key, value) {
70
+ const moduleAddress = requireAddress(addresses, 'trustRegistryModule');
71
+ let txHash;
72
+ try {
73
+ const data = encodeFunctionData({
74
+ abi: TrustRegistryModuleAbi,
75
+ functionName: 'updateMetadata',
76
+ args: [key, stringToHex(value)],
77
+ });
78
+ txHash = await smartAccountClient.sendTransaction({
79
+ to: moduleAddress,
80
+ value: 0n,
81
+ data,
82
+ });
83
+ }
84
+ catch (err) {
85
+ throw wrapContractError(err, 'REGISTRY_ERROR');
86
+ }
87
+ await publicClient.waitForTransactionReceipt({ hash: txHash, timeout: 120_000 });
88
+ return txHash;
89
+ }
90
+ /** Update multiple metadata fields in a single batch transaction.
91
+ *
92
+ * Encodes each key-value pair as a separate updateMetadata() call and sends them
93
+ * as a batch UserOp via the smart account's execute() with CALLTYPE_BATCH.
94
+ */
95
+ export async function updateMetadataBatch(publicClient, smartAccountClient, addresses, account, updates) {
96
+ if (updates.length === 0) {
97
+ throw new AzethError('At least one metadata update is required', 'INVALID_INPUT');
98
+ }
99
+ if (updates.length === 1) {
100
+ // Optimize: single update uses the simpler single-call path
101
+ return updateMetadata(publicClient, smartAccountClient, addresses, account, updates[0].key, updates[0].value);
102
+ }
103
+ const moduleAddress = requireAddress(addresses, 'trustRegistryModule');
104
+ // Encode each updateMetadata call as a separate transaction in the batch
105
+ const calls = updates.map(({ key, value }) => ({
106
+ to: moduleAddress,
107
+ value: 0n,
108
+ data: encodeFunctionData({
109
+ abi: TrustRegistryModuleAbi,
110
+ functionName: 'updateMetadata',
111
+ args: [key, stringToHex(value)],
112
+ }),
113
+ }));
114
+ let txHash;
115
+ try {
116
+ txHash = await smartAccountClient.sendTransaction({
117
+ calls,
118
+ });
119
+ }
120
+ catch (err) {
121
+ throw wrapContractError(err, 'REGISTRY_ERROR');
122
+ }
123
+ await publicClient.waitForTransactionReceipt({ hash: txHash, timeout: 120_000 });
124
+ return txHash;
125
+ }
126
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/registry/register.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { type PublicClient, type Chain, type Transport } from 'viem';
2
+ import { type SupportedChainName, type AzethContractAddresses, type OnChainOpinion, type OpinionEntry, type WeightedReputation, type ActiveOpinion } from '@azeth/common';
3
+ import type { AzethSmartAccountClient } from '../utils/userop.js';
4
+ /** Submit an opinion for an agent on the ERC-8004 Reputation Registry via the ReputationModule.
5
+ *
6
+ * Routes the call through the smart account via ERC-4337 UserOperation so that
7
+ * msg.sender in the ReputationModule context is the smart account (not the EOA).
8
+ *
9
+ * The contract requires a positive net USD payment from the caller to the target agent
10
+ * (aggregated on-chain via Chainlink). Value is int128 with configurable decimal precision.
11
+ * If an opinion already exists for this rater→agent pair, it is updated (old entry revoked, new one created).
12
+ */
13
+ export declare function submitOpinion(publicClient: PublicClient<Transport, Chain>, smartAccountClient: AzethSmartAccountClient, addresses: AzethContractAddresses, _account: `0x${string}`, opinion: OnChainOpinion): Promise<`0x${string}`>;
14
+ /** Get payment-weighted reputation for an agent from the ReputationModule.
15
+ *
16
+ * Calls ReputationModule.getWeightedReputation(agentId, raters[]).
17
+ * Only raters with positive net USD payment to the agent contribute
18
+ * to the weighted average.
19
+ */
20
+ export declare function getWeightedReputation(publicClient: PublicClient<Transport, Chain>, addresses: AzethContractAddresses, agentId: bigint, raters: `0x${string}`[]): Promise<WeightedReputation>;
21
+ /** Get payment-weighted reputation for an agent across ALL raters.
22
+ *
23
+ * WARNING: This calls the unbounded getWeightedReputationAll() on-chain function.
24
+ * Gas cost grows linearly with the number of raters. Use getWeightedReputation()
25
+ * with an explicit rater list for production workloads.
26
+ */
27
+ export declare function getWeightedReputationAll(publicClient: PublicClient<Transport, Chain>, addresses: AzethContractAddresses, agentId: bigint): Promise<WeightedReputation>;
28
+ /** Get the net payment delta between two accounts for a specific token.
29
+ *
30
+ * Returns a signed int256: positive means `from` has paid `to` more than `to` has paid `from`.
31
+ * Negative means `to` has paid `from` more.
32
+ */
33
+ export declare function getNetPaid(publicClient: PublicClient<Transport, Chain>, addresses: AzethContractAddresses, from: `0x${string}`, to: `0x${string}`, token: `0x${string}`): Promise<bigint>;
34
+ /** Get the total net payment from `from` to `to` across all supported tokens, in 18-decimal USD.
35
+ *
36
+ * Aggregates positive net deltas across all tokens tracked by the oracle (ETH, USDC, etc.)
37
+ * and converts to a single USD value. Always returns >= 0 (only sums directions where
38
+ * `from` has paid `to` more).
39
+ *
40
+ * This is the same value the contract uses to gate opinion submissions ($1 minimum).
41
+ */
42
+ export declare function getTotalNetPaidUSD(publicClient: PublicClient<Transport, Chain>, addresses: AzethContractAddresses, from: `0x${string}`, to: `0x${string}`): Promise<bigint>;
43
+ /** Get active opinion state for a rater→agent relationship.
44
+ *
45
+ * Returns the current opinion index and whether an active opinion exists.
46
+ */
47
+ export declare function getActiveOpinion(publicClient: PublicClient<Transport, Chain>, addresses: AzethContractAddresses, account: `0x${string}`, agentId: bigint): Promise<ActiveOpinion>;
48
+ /** Read a single opinion entry from the ERC-8004 Reputation Registry. */
49
+ export declare function readOpinion(publicClient: PublicClient<Transport, Chain>, chainName: SupportedChainName, agentId: bigint, clientAddress: `0x${string}`, opinionIndex: bigint): Promise<OpinionEntry>;
50
+ /** Get the Azeth ReputationModule address for a chain */
51
+ export declare function getReputationModuleAddress(chainName: SupportedChainName): `0x${string}`;
52
+ //# sourceMappingURL=opinion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opinion.d.ts","sourceRoot":"","sources":["../../src/reputation/opinion.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,KAAK,EACV,KAAK,SAAS,EAEf,MAAM,MAAM,CAAC;AAEd,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAElE;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,YAAY,EAAE,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,EAC5C,kBAAkB,EAAE,uBAAuB,EAC3C,SAAS,EAAE,sBAAsB,EACjC,QAAQ,EAAE,KAAK,MAAM,EAAE,EACvB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CAsDxB;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,EAC5C,SAAS,EAAE,sBAAsB,EACjC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,KAAK,MAAM,EAAE,EAAE,GACtB,OAAO,CAAC,kBAAkB,CAAC,CAgB7B;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,YAAY,EAAE,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,EAC5C,SAAS,EAAE,sBAAsB,EACjC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,CAAC,CAgB7B;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,YAAY,EAAE,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,EAC5C,SAAS,EAAE,sBAAsB,EACjC,IAAI,EAAE,KAAK,MAAM,EAAE,EACnB,EAAE,EAAE,KAAK,MAAM,EAAE,EACjB,KAAK,EAAE,KAAK,MAAM,EAAE,GACnB,OAAO,CAAC,MAAM,CAAC,CAejB;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,EAC5C,SAAS,EAAE,sBAAsB,EACjC,IAAI,EAAE,KAAK,MAAM,EAAE,EACnB,EAAE,EAAE,KAAK,MAAM,EAAE,GAChB,OAAO,CAAC,MAAM,CAAC,CAejB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,EAC5C,SAAS,EAAE,sBAAsB,EACjC,OAAO,EAAE,KAAK,MAAM,EAAE,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,CAAC,CAgBxB;AAED,yEAAyE;AACzE,wBAAsB,WAAW,CAC/B,YAAY,EAAE,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,EAC5C,SAAS,EAAE,kBAAkB,EAC7B,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,KAAK,MAAM,EAAE,EAC5B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,YAAY,CAAC,CAsBvB;AAED,yDAAyD;AACzD,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,kBAAkB,GAAG,KAAK,MAAM,EAAE,CAUvF"}