pay-lobster 1.0.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 (120) hide show
  1. package/README.md +401 -0
  2. package/README.md.bak +401 -0
  3. package/dist/agent.d.ts +132 -0
  4. package/dist/agent.d.ts.map +1 -0
  5. package/dist/agent.js +224 -0
  6. package/dist/agent.js.map +1 -0
  7. package/dist/analytics.d.ts +120 -0
  8. package/dist/analytics.d.ts.map +1 -0
  9. package/dist/analytics.js +345 -0
  10. package/dist/analytics.js.map +1 -0
  11. package/dist/approvals.d.ts +168 -0
  12. package/dist/approvals.d.ts.map +1 -0
  13. package/dist/approvals.js +406 -0
  14. package/dist/approvals.js.map +1 -0
  15. package/dist/circle-client.d.ts +152 -0
  16. package/dist/circle-client.d.ts.map +1 -0
  17. package/dist/circle-client.js +266 -0
  18. package/dist/circle-client.js.map +1 -0
  19. package/dist/commission.d.ts +191 -0
  20. package/dist/commission.d.ts.map +1 -0
  21. package/dist/commission.js +475 -0
  22. package/dist/commission.js.map +1 -0
  23. package/dist/condition-builder.d.ts +98 -0
  24. package/dist/condition-builder.d.ts.map +1 -0
  25. package/dist/condition-builder.js +193 -0
  26. package/dist/condition-builder.js.map +1 -0
  27. package/dist/contacts.d.ts +179 -0
  28. package/dist/contacts.d.ts.map +1 -0
  29. package/dist/contacts.js +445 -0
  30. package/dist/contacts.js.map +1 -0
  31. package/dist/easy.d.ts +22 -0
  32. package/dist/easy.d.ts.map +1 -0
  33. package/dist/easy.js +40 -0
  34. package/dist/easy.js.map +1 -0
  35. package/dist/erc8004/constants.d.ts +152 -0
  36. package/dist/erc8004/constants.d.ts.map +1 -0
  37. package/dist/erc8004/constants.js +114 -0
  38. package/dist/erc8004/constants.js.map +1 -0
  39. package/dist/erc8004/discovery.d.ts +84 -0
  40. package/dist/erc8004/discovery.d.ts.map +1 -0
  41. package/dist/erc8004/discovery.js +217 -0
  42. package/dist/erc8004/discovery.js.map +1 -0
  43. package/dist/erc8004/identity.d.ts +91 -0
  44. package/dist/erc8004/identity.d.ts.map +1 -0
  45. package/dist/erc8004/identity.js +250 -0
  46. package/dist/erc8004/identity.js.map +1 -0
  47. package/dist/erc8004/index.d.ts +147 -0
  48. package/dist/erc8004/index.d.ts.map +1 -0
  49. package/dist/erc8004/index.js +225 -0
  50. package/dist/erc8004/index.js.map +1 -0
  51. package/dist/erc8004/reputation.d.ts +133 -0
  52. package/dist/erc8004/reputation.d.ts.map +1 -0
  53. package/dist/erc8004/reputation.js +277 -0
  54. package/dist/erc8004/reputation.js.map +1 -0
  55. package/dist/escrow-templates.d.ts +38 -0
  56. package/dist/escrow-templates.d.ts.map +1 -0
  57. package/dist/escrow-templates.js +419 -0
  58. package/dist/escrow-templates.js.map +1 -0
  59. package/dist/escrow.d.ts +320 -0
  60. package/dist/escrow.d.ts.map +1 -0
  61. package/dist/escrow.js +854 -0
  62. package/dist/escrow.js.map +1 -0
  63. package/dist/index.d.ts +11 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +33 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/invoices.d.ts +212 -0
  68. package/dist/invoices.d.ts.map +1 -0
  69. package/dist/invoices.js +393 -0
  70. package/dist/invoices.js.map +1 -0
  71. package/dist/notifications.d.ts +141 -0
  72. package/dist/notifications.d.ts.map +1 -0
  73. package/dist/notifications.js +350 -0
  74. package/dist/notifications.js.map +1 -0
  75. package/dist/tips.d.ts +171 -0
  76. package/dist/tips.d.ts.map +1 -0
  77. package/dist/tips.js +390 -0
  78. package/dist/tips.js.map +1 -0
  79. package/dist/types.d.ts +100 -0
  80. package/dist/types.d.ts.map +1 -0
  81. package/dist/types.js +6 -0
  82. package/dist/types.js.map +1 -0
  83. package/dist/x402-client.d.ts +127 -0
  84. package/dist/x402-client.d.ts.map +1 -0
  85. package/dist/x402-client.js +350 -0
  86. package/dist/x402-client.js.map +1 -0
  87. package/dist/x402-server.d.ts +133 -0
  88. package/dist/x402-server.d.ts.map +1 -0
  89. package/dist/x402-server.js +330 -0
  90. package/dist/x402-server.js.map +1 -0
  91. package/lib/agent.ts +273 -0
  92. package/lib/analytics.ts +474 -0
  93. package/lib/analytics.ts.bak +474 -0
  94. package/lib/approvals.ts +585 -0
  95. package/lib/approvals.ts.bak +585 -0
  96. package/lib/circle-client.ts +376 -0
  97. package/lib/circle-client.ts.bak +376 -0
  98. package/lib/commission.ts +680 -0
  99. package/lib/commission.ts.bak +680 -0
  100. package/lib/condition-builder.ts +223 -0
  101. package/lib/condition-builder.ts.bak +223 -0
  102. package/lib/contacts.ts +615 -0
  103. package/lib/contacts.ts.bak +615 -0
  104. package/lib/easy.ts +46 -0
  105. package/lib/easy.ts.bak +352 -0
  106. package/lib/erc8004/constants.ts +175 -0
  107. package/lib/erc8004/discovery.ts +299 -0
  108. package/lib/erc8004/identity.ts +327 -0
  109. package/lib/erc8004/index.ts +285 -0
  110. package/lib/erc8004/reputation.ts +368 -0
  111. package/lib/escrow-templates.ts +462 -0
  112. package/lib/escrow.ts +1216 -0
  113. package/lib/index.ts +13 -0
  114. package/lib/invoices.ts +588 -0
  115. package/lib/notifications.ts +484 -0
  116. package/lib/tips.ts +570 -0
  117. package/lib/types.ts +108 -0
  118. package/lib/x402-client.ts +471 -0
  119. package/lib/x402-server.ts +462 -0
  120. package/package.json +58 -0
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ /**
3
+ * ERC-8004 Trustless Agents - Main Export
4
+ *
5
+ * Complete integration for agent identity, reputation, and discovery.
6
+ * Designed for seamless integration with USDC payments and x402 protocol.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
20
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.ERC8004Client = void 0;
24
+ exports.createTrustedX402Payment = createTrustedX402Payment;
25
+ exports.createERC8004Client = createERC8004Client;
26
+ __exportStar(require("./constants"), exports);
27
+ __exportStar(require("./identity"), exports);
28
+ __exportStar(require("./reputation"), exports);
29
+ __exportStar(require("./discovery"), exports);
30
+ const constants_1 = require("./constants");
31
+ const identity_1 = require("./identity");
32
+ const reputation_1 = require("./reputation");
33
+ const discovery_1 = require("./discovery");
34
+ /**
35
+ * Unified ERC-8004 Client
36
+ *
37
+ * Provides high-level API for agent registration, discovery, and trust management.
38
+ */
39
+ class ERC8004Client {
40
+ constructor(config) {
41
+ this.chain = config.chain;
42
+ this.config = config;
43
+ this.identity = new identity_1.IdentityClient({
44
+ chain: config.chain,
45
+ privateKey: config.privateKey,
46
+ });
47
+ this.reputation = new reputation_1.ReputationClient({
48
+ chain: config.chain,
49
+ privateKey: config.privateKey,
50
+ });
51
+ this.discovery = new discovery_1.DiscoveryService({
52
+ chain: config.chain,
53
+ privateKey: config.privateKey,
54
+ });
55
+ }
56
+ /**
57
+ * Register this agent with the ERC-8004 Identity Registry
58
+ */
59
+ async registerAgent(options) {
60
+ const registration = (0, identity_1.createLobsterAgentRegistration)({
61
+ name: options.name,
62
+ description: options.description,
63
+ image: options.image,
64
+ chain: this.chain,
65
+ capabilities: options.capabilities,
66
+ paymentAddress: this.config.paymentAddress,
67
+ x402Endpoint: this.config.x402Endpoint,
68
+ escrowSupport: true,
69
+ mcpEndpoint: options.mcpEndpoint,
70
+ a2aEndpoint: options.a2aEndpoint,
71
+ });
72
+ this.myAgentId = await this.identity.register(registration);
73
+ return this.myAgentId;
74
+ }
75
+ /**
76
+ * Get my agent ID (if registered)
77
+ */
78
+ getMyAgentId() {
79
+ return this.myAgentId;
80
+ }
81
+ /**
82
+ * Set agent ID (if already registered)
83
+ */
84
+ setMyAgentId(agentId) {
85
+ this.myAgentId = agentId;
86
+ }
87
+ /**
88
+ * Verify an agent before transacting
89
+ */
90
+ async verifyAgent(agentId) {
91
+ return this.discovery.verifyAgent(agentId);
92
+ }
93
+ /**
94
+ * Check if payment is safe for an agent
95
+ */
96
+ async isPaymentSafe(agentId, amountUsdc) {
97
+ return this.discovery.checkPaymentSafety(agentId, amountUsdc);
98
+ }
99
+ /**
100
+ * Post feedback after a transaction
101
+ */
102
+ async postFeedback(options) {
103
+ return this.reputation.postFeedback({
104
+ agentId: options.agentId,
105
+ score: options.score,
106
+ context: options.context,
107
+ taskHash: options.txHash,
108
+ });
109
+ }
110
+ /**
111
+ * Post positive feedback after successful payment
112
+ */
113
+ async postPaymentSuccess(agentId, txHash, amount) {
114
+ const { score, context } = reputation_1.FeedbackTemplates.paymentSuccessful(txHash, amount);
115
+ return this.postFeedback({ agentId, score, context, txHash });
116
+ }
117
+ /**
118
+ * Post negative feedback after failed payment
119
+ */
120
+ async postPaymentFailure(agentId, reason) {
121
+ const { score, context } = reputation_1.FeedbackTemplates.paymentFailed(reason);
122
+ return this.postFeedback({ agentId, score, context });
123
+ }
124
+ /**
125
+ * Post feedback after escrow completion
126
+ */
127
+ async postEscrowFeedback(agentId, escrowId, outcome, reason) {
128
+ if (outcome === 'disputed') {
129
+ const { score, context } = reputation_1.FeedbackTemplates.escrowDisputed(escrowId, reason || 'Unknown');
130
+ return this.postFeedback({ agentId, score, context });
131
+ }
132
+ const { score, context } = reputation_1.FeedbackTemplates.escrowCompleted(escrowId, outcome);
133
+ return this.postFeedback({ agentId, score, context });
134
+ }
135
+ /**
136
+ * Find agents for payment
137
+ */
138
+ async findPaymentAgents(minTrustScore) {
139
+ return this.discovery.findPaymentAgents({ minTrustScore });
140
+ }
141
+ /**
142
+ * Find agents with escrow capability
143
+ */
144
+ async findEscrowAgents(minTrustLevel) {
145
+ return this.discovery.findEscrowAgents({ minTrustLevel });
146
+ }
147
+ /**
148
+ * Get my reputation summary
149
+ */
150
+ async getMyReputation() {
151
+ if (!this.myAgentId)
152
+ return null;
153
+ return this.reputation.getReputationSummary(this.myAgentId);
154
+ }
155
+ /**
156
+ * Get contract addresses for this chain
157
+ */
158
+ getContractAddresses() {
159
+ return constants_1.CHAIN_CONFIG[this.chain].contracts;
160
+ }
161
+ /**
162
+ * Get the agent registry identifier
163
+ */
164
+ getAgentRegistry() {
165
+ return this.identity.getAgentRegistry();
166
+ }
167
+ }
168
+ exports.ERC8004Client = ERC8004Client;
169
+ /**
170
+ * Integration helper: Wrap x402 payment with trust verification
171
+ */
172
+ async function createTrustedX402Payment(options) {
173
+ // Verify agent first
174
+ const verification = await options.erc8004.verifyAgent(options.targetAgentId);
175
+ if (!verification.verified) {
176
+ return {
177
+ success: false,
178
+ trustScore: verification.trustScore,
179
+ feedbackPosted: false,
180
+ error: `Agent verification failed: ${verification.reasons.join(', ')}`,
181
+ };
182
+ }
183
+ // Check payment safety
184
+ const safety = await options.erc8004.isPaymentSafe(options.targetAgentId, options.amountUsdc);
185
+ if (!safety.safe) {
186
+ console.warn(`Payment exceeds recommended limit: ${safety.reason}`);
187
+ // Continue anyway, but warn
188
+ }
189
+ // Execute payment
190
+ const result = await options.paymentFn();
191
+ // Post feedback
192
+ let feedbackPosted = false;
193
+ try {
194
+ if (result.success && result.txHash) {
195
+ await options.erc8004.postPaymentSuccess(options.targetAgentId, result.txHash, options.amountUsdc.toString());
196
+ feedbackPosted = true;
197
+ }
198
+ else if (!result.success) {
199
+ await options.erc8004.postPaymentFailure(options.targetAgentId, result.error || 'Unknown error');
200
+ feedbackPosted = true;
201
+ }
202
+ }
203
+ catch (e) {
204
+ console.warn('Failed to post feedback:', e);
205
+ }
206
+ return {
207
+ success: result.success,
208
+ txHash: result.txHash,
209
+ trustScore: verification.trustScore,
210
+ feedbackPosted,
211
+ error: result.error,
212
+ };
213
+ }
214
+ /**
215
+ * Quick setup helper
216
+ */
217
+ function createERC8004Client(chain, privateKey, options) {
218
+ return new ERC8004Client({
219
+ chain,
220
+ privateKey,
221
+ paymentAddress: options?.paymentAddress,
222
+ x402Endpoint: options?.x402Endpoint,
223
+ });
224
+ }
225
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/erc8004/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * ERC-8004 Reputation Registry Client
3
+ *
4
+ * Post feedback, query reputation, and manage trust levels.
5
+ */
6
+ import { ethers } from 'ethers';
7
+ import { SupportedChain, Feedback, ReputationSummary } from './constants';
8
+ export interface ReputationClientConfig {
9
+ chain: SupportedChain;
10
+ privateKey?: string;
11
+ provider?: ethers.Provider;
12
+ }
13
+ export interface FeedbackInput {
14
+ agentId: number;
15
+ score: number;
16
+ context: string;
17
+ taskHash?: string;
18
+ }
19
+ export declare class ReputationClient {
20
+ private chain;
21
+ private provider;
22
+ private signer?;
23
+ private contract;
24
+ private readOnlyContract;
25
+ constructor(config: ReputationClientConfig);
26
+ /**
27
+ * Post feedback for an agent
28
+ *
29
+ * @param feedback Feedback to post
30
+ * @returns The feedbackId
31
+ */
32
+ postFeedback(feedback: FeedbackInput): Promise<number>;
33
+ /**
34
+ * Post feedback after a successful x402 payment
35
+ *
36
+ * Links the feedback to the payment transaction for verification
37
+ */
38
+ postPaymentFeedback(options: {
39
+ agentId: number;
40
+ score: number;
41
+ context: string;
42
+ paymentTxHash: string;
43
+ paymentAmount: string;
44
+ serviceUsed: string;
45
+ }): Promise<number>;
46
+ /**
47
+ * Get a specific feedback entry
48
+ */
49
+ getFeedback(feedbackId: number): Promise<Feedback | null>;
50
+ /**
51
+ * Get feedback count for an agent
52
+ */
53
+ getFeedbackCount(agentId: number): Promise<number>;
54
+ /**
55
+ * Get recent feedback for an agent
56
+ */
57
+ getRecentFeedback(agentId: number, limit?: number): Promise<Feedback[]>;
58
+ /**
59
+ * Get average score for an agent
60
+ */
61
+ getAverageScore(agentId: number): Promise<{
62
+ average: number;
63
+ count: number;
64
+ }>;
65
+ /**
66
+ * Get comprehensive reputation summary for an agent
67
+ */
68
+ getReputationSummary(agentId: number): Promise<ReputationSummary>;
69
+ /**
70
+ * Authorize an address to post feedback for your agent
71
+ */
72
+ authorizeFeedbackAuthor(agentId: number, author: string): Promise<void>;
73
+ /**
74
+ * Revoke feedback authorization
75
+ */
76
+ revokeFeedbackAuthorization(agentId: number, author: string): Promise<void>;
77
+ /**
78
+ * Check if an address is authorized to post feedback
79
+ */
80
+ isAuthorizedFeedbackAuthor(agentId: number, author: string): Promise<boolean>;
81
+ /**
82
+ * Check if an agent meets minimum trust requirements
83
+ */
84
+ meetsMinimumTrust(agentId: number, minLevel: ReputationSummary['trustLevel']): Promise<boolean>;
85
+ /**
86
+ * Calculate trust score for payment decisions
87
+ *
88
+ * Returns a 0-100 score combining reputation and feedback volume
89
+ */
90
+ calculateTrustScore(agentId: number): Promise<number>;
91
+ }
92
+ /**
93
+ * Standard feedback templates for common scenarios
94
+ */
95
+ export declare const FeedbackTemplates: {
96
+ excellentService: (details?: string) => {
97
+ score: number;
98
+ context: string;
99
+ };
100
+ goodService: (details?: string) => {
101
+ score: number;
102
+ context: string;
103
+ };
104
+ satisfactory: (details?: string) => {
105
+ score: number;
106
+ context: string;
107
+ };
108
+ poorService: (details?: string) => {
109
+ score: number;
110
+ context: string;
111
+ };
112
+ failed: (details?: string) => {
113
+ score: number;
114
+ context: string;
115
+ };
116
+ paymentSuccessful: (txHash: string, amount: string) => {
117
+ score: number;
118
+ context: string;
119
+ };
120
+ paymentFailed: (reason: string) => {
121
+ score: number;
122
+ context: string;
123
+ };
124
+ escrowCompleted: (escrowId: string, outcome: "released" | "refunded") => {
125
+ score: number;
126
+ context: string;
127
+ };
128
+ escrowDisputed: (escrowId: string, reason: string) => {
129
+ score: number;
130
+ context: string;
131
+ };
132
+ };
133
+ //# sourceMappingURL=reputation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reputation.d.ts","sourceRoot":"","sources":["../../lib/erc8004/reputation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAGL,cAAc,EACd,QAAQ,EACR,iBAAiB,EAElB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,cAAc,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,MAAM,CAAC,CAAgB;IAC/B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,gBAAgB,CAAkB;gBAE9B,MAAM,EAAE,sBAAsB;IAsB1C;;;;;OAKG;IACG,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IA+C5D;;;;OAIG;IACG,mBAAmB,CAAC,OAAO,EAAE;QACjC,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBnB;;OAEG;IACG,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAkB/D;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKxD;;OAEG;IACG,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAcjF;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAQnF;;OAEG;IACG,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA8BvE;;OAEG;IACG,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW7E;;OAEG;IACG,2BAA2B,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWjF;;OAEG;IACG,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAInF;;OAEG;IACG,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAUrG;;;;OAIG;IACG,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAS5D;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB;iCAEC,MAAM;;;;4BAKX,MAAM;;;;6BAKL,MAAM;;;;4BAMP,MAAM;;;;uBAKX,MAAM;;;;gCAMG,MAAM,UAAU,MAAM;;;;4BAU1B,MAAM;;;;gCAUF,MAAM,WAAW,UAAU,GAAG,UAAU;;;;+BASzC,MAAM,UAAU,MAAM;;;;CASlD,CAAC"}
@@ -0,0 +1,277 @@
1
+ "use strict";
2
+ /**
3
+ * ERC-8004 Reputation Registry Client
4
+ *
5
+ * Post feedback, query reputation, and manage trust levels.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.FeedbackTemplates = exports.ReputationClient = void 0;
9
+ const ethers_1 = require("ethers");
10
+ const constants_1 = require("./constants");
11
+ class ReputationClient {
12
+ constructor(config) {
13
+ this.chain = config.chain;
14
+ const chainConfig = constants_1.CHAIN_CONFIG[config.chain];
15
+ this.provider = config.provider || new ethers_1.ethers.JsonRpcProvider(chainConfig.rpcUrl);
16
+ if (config.privateKey) {
17
+ this.signer = new ethers_1.ethers.Wallet(config.privateKey, this.provider);
18
+ this.contract = new ethers_1.ethers.Contract(chainConfig.contracts.reputationRegistry, constants_1.REPUTATION_REGISTRY_ABI, this.signer);
19
+ }
20
+ this.readOnlyContract = new ethers_1.ethers.Contract(chainConfig.contracts.reputationRegistry, constants_1.REPUTATION_REGISTRY_ABI, this.provider);
21
+ }
22
+ /**
23
+ * Post feedback for an agent
24
+ *
25
+ * @param feedback Feedback to post
26
+ * @returns The feedbackId
27
+ */
28
+ async postFeedback(feedback) {
29
+ if (!this.contract || !this.signer) {
30
+ throw new Error('Signer required to post feedback');
31
+ }
32
+ // Validate score range
33
+ if (feedback.score < -100 || feedback.score > 100) {
34
+ throw new Error('Score must be between -100 and 100');
35
+ }
36
+ // Create task hash if not provided
37
+ const taskHash = feedback.taskHash
38
+ ? ethers_1.ethers.id(feedback.taskHash)
39
+ : ethers_1.ethers.id(`feedback-${Date.now()}-${Math.random()}`);
40
+ console.log(`Posting feedback for agent ${feedback.agentId}: score=${feedback.score}`);
41
+ const tx = await this.contract.postFeedback(feedback.agentId, feedback.score, feedback.context, taskHash);
42
+ const receipt = await tx.wait();
43
+ // Extract feedbackId from event
44
+ const event = receipt.logs.find((log) => {
45
+ try {
46
+ const parsed = this.contract.interface.parseLog(log);
47
+ return parsed?.name === 'FeedbackPosted';
48
+ }
49
+ catch {
50
+ return false;
51
+ }
52
+ });
53
+ if (!event) {
54
+ throw new Error('FeedbackPosted event not found');
55
+ }
56
+ const parsed = this.contract.interface.parseLog(event);
57
+ const feedbackId = Number(parsed?.args?.feedbackId);
58
+ console.log(`Feedback posted with ID: ${feedbackId}`);
59
+ return feedbackId;
60
+ }
61
+ /**
62
+ * Post feedback after a successful x402 payment
63
+ *
64
+ * Links the feedback to the payment transaction for verification
65
+ */
66
+ async postPaymentFeedback(options) {
67
+ const enrichedContext = JSON.stringify({
68
+ type: 'x402-payment-feedback',
69
+ context: options.context,
70
+ payment: {
71
+ txHash: options.paymentTxHash,
72
+ amount: options.paymentAmount,
73
+ service: options.serviceUsed,
74
+ },
75
+ timestamp: new Date().toISOString(),
76
+ });
77
+ return this.postFeedback({
78
+ agentId: options.agentId,
79
+ score: options.score,
80
+ context: enrichedContext,
81
+ taskHash: options.paymentTxHash,
82
+ });
83
+ }
84
+ /**
85
+ * Get a specific feedback entry
86
+ */
87
+ async getFeedback(feedbackId) {
88
+ try {
89
+ const result = await this.readOnlyContract.getFeedback(feedbackId);
90
+ return {
91
+ feedbackId,
92
+ agentId: Number(result.agentId),
93
+ author: result.author,
94
+ score: Number(result.score),
95
+ context: result.context,
96
+ taskHash: result.taskHash,
97
+ timestamp: Number(result.timestamp),
98
+ };
99
+ }
100
+ catch {
101
+ return null;
102
+ }
103
+ }
104
+ /**
105
+ * Get feedback count for an agent
106
+ */
107
+ async getFeedbackCount(agentId) {
108
+ const count = await this.readOnlyContract.getFeedbackCount(agentId);
109
+ return Number(count);
110
+ }
111
+ /**
112
+ * Get recent feedback for an agent
113
+ */
114
+ async getRecentFeedback(agentId, limit = 10) {
115
+ const feedbackIds = await this.readOnlyContract.getFeedbackByAgent(agentId, 0, limit);
116
+ const feedbacks = await Promise.all(feedbackIds.map(id => this.getFeedback(Number(id))));
117
+ return feedbacks.filter((f) => f !== null);
118
+ }
119
+ /**
120
+ * Get average score for an agent
121
+ */
122
+ async getAverageScore(agentId) {
123
+ const [average, count] = await this.readOnlyContract.getAverageScore(agentId);
124
+ return {
125
+ average: Number(average),
126
+ count: Number(count),
127
+ };
128
+ }
129
+ /**
130
+ * Get comprehensive reputation summary for an agent
131
+ */
132
+ async getReputationSummary(agentId) {
133
+ const [{ average, count }, recentFeedback] = await Promise.all([
134
+ this.getAverageScore(agentId),
135
+ this.getRecentFeedback(agentId, 5),
136
+ ]);
137
+ // Determine trust level based on score and feedback count
138
+ let trustLevel = 'untrusted';
139
+ if (count >= constants_1.TRUST_LEVELS.verified.minFeedback && average >= constants_1.TRUST_LEVELS.verified.minScore) {
140
+ trustLevel = 'verified';
141
+ }
142
+ else if (count >= constants_1.TRUST_LEVELS.trusted.minFeedback && average >= constants_1.TRUST_LEVELS.trusted.minScore) {
143
+ trustLevel = 'trusted';
144
+ }
145
+ else if (count >= constants_1.TRUST_LEVELS.established.minFeedback && average >= constants_1.TRUST_LEVELS.established.minScore) {
146
+ trustLevel = 'established';
147
+ }
148
+ else if (count >= constants_1.TRUST_LEVELS.emerging.minFeedback && average >= constants_1.TRUST_LEVELS.emerging.minScore) {
149
+ trustLevel = 'emerging';
150
+ }
151
+ else if (count >= constants_1.TRUST_LEVELS.new.minFeedback && average >= constants_1.TRUST_LEVELS.new.minScore) {
152
+ trustLevel = 'new';
153
+ }
154
+ return {
155
+ agentId,
156
+ averageScore: average,
157
+ totalFeedback: count,
158
+ recentFeedback,
159
+ trustLevel,
160
+ };
161
+ }
162
+ /**
163
+ * Authorize an address to post feedback for your agent
164
+ */
165
+ async authorizeFeedbackAuthor(agentId, author) {
166
+ if (!this.contract) {
167
+ throw new Error('Signer required');
168
+ }
169
+ const tx = await this.contract.authorizeFeedback(agentId, author);
170
+ await tx.wait();
171
+ console.log(`Authorized ${author} to post feedback for agent ${agentId}`);
172
+ }
173
+ /**
174
+ * Revoke feedback authorization
175
+ */
176
+ async revokeFeedbackAuthorization(agentId, author) {
177
+ if (!this.contract) {
178
+ throw new Error('Signer required');
179
+ }
180
+ const tx = await this.contract.revokeFeedbackAuthorization(agentId, author);
181
+ await tx.wait();
182
+ console.log(`Revoked feedback authorization for ${author} on agent ${agentId}`);
183
+ }
184
+ /**
185
+ * Check if an address is authorized to post feedback
186
+ */
187
+ async isAuthorizedFeedbackAuthor(agentId, author) {
188
+ return this.readOnlyContract.isAuthorizedFeedbackAuthor(agentId, author);
189
+ }
190
+ /**
191
+ * Check if an agent meets minimum trust requirements
192
+ */
193
+ async meetsMinimumTrust(agentId, minLevel) {
194
+ const summary = await this.getReputationSummary(agentId);
195
+ const levelOrder = [
196
+ 'untrusted', 'new', 'emerging', 'established', 'trusted', 'verified'
197
+ ];
198
+ return levelOrder.indexOf(summary.trustLevel) >= levelOrder.indexOf(minLevel);
199
+ }
200
+ /**
201
+ * Calculate trust score for payment decisions
202
+ *
203
+ * Returns a 0-100 score combining reputation and feedback volume
204
+ */
205
+ async calculateTrustScore(agentId) {
206
+ const summary = await this.getReputationSummary(agentId);
207
+ // Weight: 70% average score, 30% volume bonus
208
+ const scoreComponent = Math.max(0, (summary.averageScore + 100) / 2); // Normalize -100..100 to 0..100
209
+ const volumeBonus = Math.min(30, summary.totalFeedback * 0.3); // Max 30 points from volume
210
+ return Math.round(scoreComponent * 0.7 + volumeBonus);
211
+ }
212
+ }
213
+ exports.ReputationClient = ReputationClient;
214
+ /**
215
+ * Standard feedback templates for common scenarios
216
+ */
217
+ exports.FeedbackTemplates = {
218
+ // Positive feedback
219
+ excellentService: (details) => ({
220
+ score: 95,
221
+ context: `Excellent service. ${details || 'Highly recommended.'}`,
222
+ }),
223
+ goodService: (details) => ({
224
+ score: 75,
225
+ context: `Good service. ${details || 'Would use again.'}`,
226
+ }),
227
+ satisfactory: (details) => ({
228
+ score: 50,
229
+ context: `Satisfactory service. ${details || 'Met expectations.'}`,
230
+ }),
231
+ // Negative feedback
232
+ poorService: (details) => ({
233
+ score: -50,
234
+ context: `Poor service. ${details || 'Did not meet expectations.'}`,
235
+ }),
236
+ failed: (details) => ({
237
+ score: -90,
238
+ context: `Service failed. ${details || 'Would not recommend.'}`,
239
+ }),
240
+ // Payment-specific
241
+ paymentSuccessful: (txHash, amount) => ({
242
+ score: 80,
243
+ context: JSON.stringify({
244
+ type: 'payment-feedback',
245
+ result: 'success',
246
+ txHash,
247
+ amount,
248
+ }),
249
+ }),
250
+ paymentFailed: (reason) => ({
251
+ score: -70,
252
+ context: JSON.stringify({
253
+ type: 'payment-feedback',
254
+ result: 'failed',
255
+ reason,
256
+ }),
257
+ }),
258
+ // Escrow-specific
259
+ escrowCompleted: (escrowId, outcome) => ({
260
+ score: outcome === 'released' ? 85 : 40,
261
+ context: JSON.stringify({
262
+ type: 'escrow-feedback',
263
+ escrowId,
264
+ outcome,
265
+ }),
266
+ }),
267
+ escrowDisputed: (escrowId, reason) => ({
268
+ score: -30,
269
+ context: JSON.stringify({
270
+ type: 'escrow-feedback',
271
+ escrowId,
272
+ outcome: 'disputed',
273
+ reason,
274
+ }),
275
+ }),
276
+ };
277
+ //# sourceMappingURL=reputation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reputation.js","sourceRoot":"","sources":["../../lib/erc8004/reputation.ts"],"names":[],"mappings":"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"}