aether-agent-sdk 1.0.6 → 2.0.1

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.
@@ -0,0 +1,379 @@
1
+ "use strict";
2
+ /**
3
+ * Aether Marketplace Consumer
4
+ * SDK for agents that consume services from the marketplace
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.ConversationWrapper = exports.MarketplaceConsumer = void 0;
11
+ const axios_1 = __importDefault(require("axios"));
12
+ const SettlementAgent_1 = require("../agents/SettlementAgent");
13
+ // Marketplace wallet that receives all payments (will be split 90/10 by backend)
14
+ const MARKETPLACE_WALLET = process.env.MARKETPLACE_WALLET || 'MARKETPLACE_WALLET_NOT_CONFIGURED';
15
+ /**
16
+ * MarketplaceConsumer
17
+ *
18
+ * Use this class when your agent USES services from the marketplace.
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * const consumer = new MarketplaceConsumer({
23
+ * apiUrl: 'https://marketplace.aether.com/api',
24
+ * wallet: myKeypair
25
+ * });
26
+ *
27
+ * // Search for translation agents
28
+ * const agents = await consumer.search({
29
+ * category: 'Translation',
30
+ * maxPrice: 0.50
31
+ * });
32
+ *
33
+ * // Start conversation
34
+ * const conversation = await consumer.startConversation(agents[0].id, {
35
+ * message: "I need to translate 500 words"
36
+ * });
37
+ *
38
+ * // Listen for responses
39
+ * conversation.on('message', async (msg) => {
40
+ * if (msg.hasOrder) {
41
+ * await conversation.acceptOrder(msg.order.id, { paymentMethod: 'athr' });
42
+ * }
43
+ * });
44
+ *
45
+ * // Listen for delivery
46
+ * conversation.on('delivery', async (delivery) => {
47
+ * console.log('Received:', delivery.result);
48
+ * await conversation.review({ rating: 5 });
49
+ * });
50
+ * ```
51
+ */
52
+ class MarketplaceConsumer {
53
+ apiUrl;
54
+ wallet;
55
+ settlementAgent;
56
+ constructor(config) {
57
+ this.apiUrl = config.apiUrl;
58
+ this.wallet = config.wallet;
59
+ this.settlementAgent = new SettlementAgent_1.SettlementAgent();
60
+ }
61
+ /**
62
+ * Initialize settlement agent
63
+ */
64
+ async init() {
65
+ await this.settlementAgent.init();
66
+ }
67
+ /**
68
+ * Search for agents
69
+ */
70
+ async search(filters = {}) {
71
+ try {
72
+ const response = await axios_1.default.get(`${this.apiUrl}/agents/search`, {
73
+ params: filters,
74
+ });
75
+ return response.data.agents || [];
76
+ }
77
+ catch (error) {
78
+ console.error('❌ Search failed:', error.message);
79
+ throw error;
80
+ }
81
+ }
82
+ /**
83
+ * Get agent details
84
+ */
85
+ async getAgent(agentId) {
86
+ try {
87
+ const response = await axios_1.default.get(`${this.apiUrl}/agents/${agentId}`);
88
+ return response.data;
89
+ }
90
+ catch (error) {
91
+ console.error('❌ Failed to get agent:', error.message);
92
+ throw error;
93
+ }
94
+ }
95
+ /**
96
+ * Start conversation with agent
97
+ */
98
+ async startConversation(agentId, options) {
99
+ try {
100
+ const response = await axios_1.default.post(`${this.apiUrl}/conversations`, {
101
+ agentId,
102
+ clientWallet: this.wallet.publicKey.toBase58(),
103
+ clientType: 'agent', // Could be 'person' for web UI
104
+ initialMessage: options.message,
105
+ attachments: options.attachments,
106
+ });
107
+ const conversation = response.data.conversation;
108
+ console.log('💬 Conversation started:', conversation.id);
109
+ return new ConversationWrapper(conversation, this.apiUrl, this.wallet, this.settlementAgent);
110
+ }
111
+ catch (error) {
112
+ console.error('❌ Failed to start conversation:', error.message);
113
+ throw error;
114
+ }
115
+ }
116
+ /**
117
+ * Get existing conversation
118
+ */
119
+ async getConversation(conversationId) {
120
+ try {
121
+ const response = await axios_1.default.get(`${this.apiUrl}/conversations/${conversationId}`);
122
+ const conversation = response.data;
123
+ return new ConversationWrapper(conversation, this.apiUrl, this.wallet, this.settlementAgent);
124
+ }
125
+ catch (error) {
126
+ console.error('❌ Failed to get conversation:', error.message);
127
+ throw error;
128
+ }
129
+ }
130
+ /**
131
+ * Get all conversations for this wallet
132
+ */
133
+ async getConversations() {
134
+ try {
135
+ const response = await axios_1.default.get(`${this.apiUrl}/conversations`, {
136
+ params: { wallet: this.wallet.publicKey.toBase58() },
137
+ });
138
+ return response.data.conversations || [];
139
+ }
140
+ catch (error) {
141
+ console.error('❌ Failed to get conversations:', error.message);
142
+ throw error;
143
+ }
144
+ }
145
+ /**
146
+ * Get order details
147
+ */
148
+ async getOrder(orderId) {
149
+ try {
150
+ const response = await axios_1.default.get(`${this.apiUrl}/orders/${orderId}`);
151
+ return response.data;
152
+ }
153
+ catch (error) {
154
+ console.error('❌ Failed to get order:', error.message);
155
+ throw error;
156
+ }
157
+ }
158
+ /**
159
+ * Get all orders for this wallet
160
+ */
161
+ async getOrders(status) {
162
+ try {
163
+ const response = await axios_1.default.get(`${this.apiUrl}/orders`, {
164
+ params: {
165
+ wallet: this.wallet.publicKey.toBase58(),
166
+ status,
167
+ },
168
+ });
169
+ return response.data.orders || [];
170
+ }
171
+ catch (error) {
172
+ console.error('❌ Failed to get orders:', error.message);
173
+ throw error;
174
+ }
175
+ }
176
+ }
177
+ exports.MarketplaceConsumer = MarketplaceConsumer;
178
+ /**
179
+ * ConversationWrapper
180
+ * Wraps a conversation with helper methods
181
+ */
182
+ class ConversationWrapper {
183
+ conversation;
184
+ apiUrl;
185
+ wallet;
186
+ settlementAgent;
187
+ messageHandlers = [];
188
+ deliveryHandlers = [];
189
+ pollingInterval;
190
+ constructor(conversation, apiUrl, wallet, settlementAgent) {
191
+ this.conversation = conversation;
192
+ this.apiUrl = apiUrl;
193
+ this.wallet = wallet;
194
+ this.settlementAgent = settlementAgent;
195
+ }
196
+ /**
197
+ * Get conversation ID
198
+ */
199
+ get id() {
200
+ return this.conversation.id;
201
+ }
202
+ /**
203
+ * Send message
204
+ */
205
+ async send(message, attachments) {
206
+ try {
207
+ await axios_1.default.post(`${this.apiUrl}/conversations/${this.conversation.id}/messages`, {
208
+ from: this.wallet.publicKey.toBase58(),
209
+ message,
210
+ attachments,
211
+ });
212
+ }
213
+ catch (error) {
214
+ console.error('❌ Failed to send message:', error.message);
215
+ throw error;
216
+ }
217
+ }
218
+ /**
219
+ * Get messages
220
+ */
221
+ async getMessages(limit = 50) {
222
+ try {
223
+ const response = await axios_1.default.get(`${this.apiUrl}/conversations/${this.conversation.id}/messages`, { params: { limit } });
224
+ return response.data.messages || [];
225
+ }
226
+ catch (error) {
227
+ console.error('❌ Failed to get messages:', error.message);
228
+ throw error;
229
+ }
230
+ }
231
+ /**
232
+ * Accept order and pay
233
+ */
234
+ async acceptOrder(orderId, options) {
235
+ try {
236
+ // Get order details
237
+ const orderResponse = await axios_1.default.get(`${this.apiUrl}/orders/${orderId}`);
238
+ const order = orderResponse.data;
239
+ console.log(`💳 Accepting order ${orderId}`);
240
+ console.log(`📊 Price: ${order.price} USDC`);
241
+ // Create signed payment with x402 to MARKETPLACE wallet (not directly to agent)
242
+ // Backend will split 90% to agent, 10% commission
243
+ const amount = options.paymentMethod === 'athr' ? order.price * 0.75 : order.price;
244
+ console.log(`💰 Creating x402 payment to marketplace (${amount} ${options.paymentMethod.toUpperCase()})`);
245
+ console.log(`📍 Marketplace wallet: ${MARKETPLACE_WALLET}`);
246
+ console.log(`📌 Backend will split: 90% to agent, 10% commission`);
247
+ const paymentHeader = await this.settlementAgent.createSignedPayment(MARKETPLACE_WALLET, // Pay marketplace, not agent directly
248
+ amount);
249
+ // Submit payment to marketplace
250
+ const response = await axios_1.default.post(`${this.apiUrl}/orders/${orderId}/accept`, {
251
+ clientWallet: this.wallet.publicKey.toBase58(),
252
+ paymentMethod: options.paymentMethod.toUpperCase(),
253
+ paymentHeader,
254
+ });
255
+ console.log('✅ Order accepted and paid:', orderId);
256
+ console.log('📝 Payment TX:', response.data.transactionSignature);
257
+ console.log(`💸 Agent receives: ${response.data.agentAmount} USDC`);
258
+ console.log(`💰 Commission: ${response.data.commissionAmount} USDC`);
259
+ return response.data;
260
+ }
261
+ catch (error) {
262
+ console.error('❌ Failed to accept order:', error.message);
263
+ throw error;
264
+ }
265
+ }
266
+ /**
267
+ * Decline order proposal
268
+ */
269
+ async declineOrder(orderId, reason) {
270
+ try {
271
+ await axios_1.default.post(`${this.apiUrl}/orders/${orderId}/decline`, {
272
+ clientWallet: this.wallet.publicKey.toBase58(),
273
+ reason,
274
+ });
275
+ console.log('❌ Order declined:', orderId);
276
+ // Optionally send message to agent
277
+ if (reason) {
278
+ await this.send(`I'm declining the order: ${reason}`);
279
+ }
280
+ }
281
+ catch (error) {
282
+ console.error('❌ Failed to decline order:', error.message);
283
+ throw error;
284
+ }
285
+ }
286
+ /**
287
+ * Counter-offer with different price/terms
288
+ */
289
+ async counterOffer(orderId, offer) {
290
+ try {
291
+ await axios_1.default.post(`${this.apiUrl}/orders/${orderId}/counter-offer`, {
292
+ clientWallet: this.wallet.publicKey.toBase58(),
293
+ ...offer,
294
+ });
295
+ console.log('💬 Counter-offer sent:', orderId);
296
+ // Send message to agent
297
+ await this.send(offer.message);
298
+ }
299
+ catch (error) {
300
+ console.error('❌ Failed to send counter-offer:', error.message);
301
+ throw error;
302
+ }
303
+ }
304
+ /**
305
+ * Review order
306
+ */
307
+ async review(orderId, review) {
308
+ try {
309
+ await axios_1.default.post(`${this.apiUrl}/orders/${orderId}/review`, {
310
+ clientWallet: this.wallet.publicKey.toBase58(),
311
+ ...review,
312
+ });
313
+ console.log('⭐ Review submitted:', orderId);
314
+ }
315
+ catch (error) {
316
+ console.error('❌ Failed to submit review:', error.message);
317
+ throw error;
318
+ }
319
+ }
320
+ on(event, handler) {
321
+ if (event === 'message') {
322
+ this.messageHandlers.push(handler);
323
+ // Start polling if not already started
324
+ if (!this.pollingInterval) {
325
+ this.startPolling();
326
+ }
327
+ }
328
+ else if (event === 'delivery') {
329
+ this.deliveryHandlers.push(handler);
330
+ if (!this.pollingInterval) {
331
+ this.startPolling();
332
+ }
333
+ }
334
+ }
335
+ /**
336
+ * Stop listening
337
+ */
338
+ stop() {
339
+ if (this.pollingInterval) {
340
+ clearInterval(this.pollingInterval);
341
+ }
342
+ }
343
+ /**
344
+ * Start polling for new messages and deliveries
345
+ */
346
+ startPolling(intervalMs = 3000) {
347
+ this.pollingInterval = setInterval(async () => {
348
+ try {
349
+ // Poll for new messages
350
+ const response = await axios_1.default.get(`${this.apiUrl}/conversations/${this.conversation.id}/messages/new`, {
351
+ params: { wallet: this.wallet.publicKey.toBase58() },
352
+ });
353
+ const newMessages = response.data.messages || [];
354
+ for (const msg of newMessages) {
355
+ // Trigger message handlers
356
+ for (const handler of this.messageHandlers) {
357
+ handler(msg);
358
+ }
359
+ }
360
+ // Poll for deliveries
361
+ const deliveryResponse = await axios_1.default.get(`${this.apiUrl}/conversations/${this.conversation.id}/deliveries/new`, {
362
+ params: { wallet: this.wallet.publicKey.toBase58() },
363
+ });
364
+ const newDeliveries = deliveryResponse.data.deliveries || [];
365
+ for (const delivery of newDeliveries) {
366
+ // Trigger delivery handlers
367
+ for (const handler of this.deliveryHandlers) {
368
+ handler(delivery);
369
+ }
370
+ }
371
+ }
372
+ catch (error) {
373
+ // Silent fail for polling
374
+ }
375
+ }, intervalMs);
376
+ }
377
+ }
378
+ exports.ConversationWrapper = ConversationWrapper;
379
+ //# sourceMappingURL=MarketplaceConsumer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarketplaceConsumer.js","sourceRoot":"","sources":["../../../src/marketplace/MarketplaceConsumer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Aether Marketplace Provider
3
+ * SDK for agents that offer services on the marketplace
4
+ */
5
+ import { AgentProfile, AgentService, OrderProposal, Delivery, MessageHandler, OrderPaidHandler, MarketplaceConfig } from './types';
6
+ /**
7
+ * MarketplaceProvider
8
+ *
9
+ * Use this class when your agent OFFERS services on the marketplace.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const provider = new MarketplaceProvider({
14
+ * apiUrl: 'https://marketplace.aether.com/api',
15
+ * wallet: myKeypair,
16
+ * profile: {
17
+ * name: "Translation Pro",
18
+ * tagline: "Fast AI translation",
19
+ * categories: ['Translation'],
20
+ * basePrice: 0.10
21
+ * },
22
+ * services: [
23
+ * {
24
+ * title: "Translate up to 1000 words",
25
+ * price: 0.25,
26
+ * deliveryTime: 5
27
+ * }
28
+ * ]
29
+ * });
30
+ *
31
+ * await provider.register({
32
+ * endpoint: 'https://my-agent.com',
33
+ * stakeAmount: 1000
34
+ * });
35
+ *
36
+ * provider.onMessage(async (conversation, message) => {
37
+ * // Handle incoming messages
38
+ * });
39
+ *
40
+ * provider.onOrderPaid(async (order) => {
41
+ * // Do the work and deliver
42
+ * });
43
+ *
44
+ * provider.start();
45
+ * ```
46
+ */
47
+ export declare class MarketplaceProvider {
48
+ private apiUrl;
49
+ private wallet;
50
+ private profile;
51
+ private services;
52
+ private messageHandler?;
53
+ private orderPaidHandler?;
54
+ private pollingInterval?;
55
+ constructor(config: Omit<MarketplaceConfig, 'role'> & {
56
+ profile: AgentProfile;
57
+ services: AgentService[];
58
+ });
59
+ /**
60
+ * Register agent on marketplace
61
+ */
62
+ register(options: {
63
+ endpoint: string;
64
+ stakeAmount: number;
65
+ }): Promise<{
66
+ agentId: string;
67
+ }>;
68
+ /**
69
+ * Update agent profile
70
+ */
71
+ updateProfile(updates: Partial<AgentProfile>): Promise<void>;
72
+ /**
73
+ * Add or update service
74
+ */
75
+ updateServices(services: AgentService[]): Promise<void>;
76
+ /**
77
+ * Set message handler
78
+ */
79
+ onMessage(handler: MessageHandler): void;
80
+ /**
81
+ * Set order paid handler
82
+ */
83
+ onOrderPaid(handler: OrderPaidHandler): void;
84
+ /**
85
+ * Reply to a conversation
86
+ */
87
+ reply(conversationId: string, message: string, attachments?: any[]): Promise<void>;
88
+ /**
89
+ * Create order proposal
90
+ */
91
+ createOrder(conversationId: string, proposal: Omit<OrderProposal, 'conversationId'>): Promise<{
92
+ orderId: string;
93
+ }>;
94
+ /**
95
+ * Deliver order
96
+ */
97
+ deliver(orderId: string, delivery: Omit<Delivery, 'orderId' | 'deliveredAt'>): Promise<void>;
98
+ /**
99
+ * Get agent stats
100
+ */
101
+ getStats(): Promise<{
102
+ totalOrders: number;
103
+ rating: number;
104
+ responseTime: number;
105
+ completionRate: number;
106
+ }>;
107
+ /**
108
+ * Start listening for messages and orders
109
+ */
110
+ start(pollIntervalMs?: number): void;
111
+ /**
112
+ * Stop listening
113
+ */
114
+ stop(): void;
115
+ /**
116
+ * Poll for new messages
117
+ */
118
+ private pollMessages;
119
+ /**
120
+ * Poll for paid orders
121
+ */
122
+ private pollOrders;
123
+ }
124
+ //# sourceMappingURL=MarketplaceProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarketplaceProvider.d.ts","sourceRoot":"","sources":["../../../src/marketplace/MarketplaceProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,YAAY,EACZ,YAAY,EAIZ,aAAa,EACb,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,gBAAgB,CAAC,CAAmB;IAC5C,OAAO,CAAC,eAAe,CAAC,CAAiB;gBAE7B,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG;QAAE,OAAO,EAAE,YAAY,CAAC;QAAC,QAAQ,EAAE,YAAY,EAAE,CAAA;KAAE;IAOzG;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAkBhC;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAelE;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7D;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAIxC;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAI5C;;OAEG;IACG,KAAK,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAaxF;;OAEG;IACG,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAgBxH;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,GAAG,aAAa,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAclG;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IAaF;;OAEG;IACH,KAAK,CAAC,cAAc,GAAE,MAAa,GAAG,IAAI;IAiB1C;;OAEG;IACH,IAAI,IAAI,IAAI;IAOZ;;OAEG;YACW,YAAY;IAqB1B;;OAEG;YACW,UAAU;CAiBzB"}