aether-agent-sdk 3.1.0 → 3.1.2
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.
- package/dist/src/agents/SettlementAgent.d.ts +5 -7
- package/dist/src/agents/SettlementAgent.d.ts.map +1 -1
- package/dist/src/agents/SettlementAgent.js +25 -36
- package/dist/src/agents/SettlementAgent.js.map +1 -1
- package/dist/src/agents/index.d.ts +1 -0
- package/dist/src/agents/index.d.ts.map +1 -1
- package/dist/src/marketplace/MarketplaceConsumer.d.ts +28 -23
- package/dist/src/marketplace/MarketplaceConsumer.d.ts.map +1 -1
- package/dist/src/marketplace/MarketplaceConsumer.js +182 -116
- package/dist/src/marketplace/MarketplaceConsumer.js.map +1 -1
- package/dist/src/marketplace/MarketplaceProvider.d.ts +16 -17
- package/dist/src/marketplace/MarketplaceProvider.d.ts.map +1 -1
- package/dist/src/marketplace/MarketplaceProvider.js +124 -102
- package/dist/src/marketplace/MarketplaceProvider.js.map +1 -1
- package/dist/src/marketplace/graphql.d.ts +39 -0
- package/dist/src/marketplace/graphql.d.ts.map +1 -0
- package/dist/src/marketplace/graphql.js +410 -0
- package/dist/src/marketplace/graphql.js.map +1 -0
- package/dist/src/marketplace/index.d.ts +3 -0
- package/dist/src/marketplace/index.d.ts.map +1 -1
- package/dist/src/marketplace/index.js +5 -1
- package/dist/src/marketplace/index.js.map +1 -1
- package/dist/src/utils/index.d.ts +2 -0
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/index.js +10 -1
- package/dist/src/utils/index.js.map +1 -1
- package/dist/src/utils/tokens.d.ts +16 -0
- package/dist/src/utils/tokens.d.ts.map +1 -0
- package/dist/src/utils/tokens.js +31 -0
- package/dist/src/utils/tokens.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { Keypair } from '@solana/web3.js';
|
|
2
|
+
import { PaymentToken } from '../utils/tokens';
|
|
3
|
+
export interface PaymentOptions {
|
|
4
|
+
token?: PaymentToken;
|
|
5
|
+
}
|
|
2
6
|
export declare class SettlementAgent {
|
|
3
7
|
private connection;
|
|
4
8
|
private agentWallet?;
|
|
@@ -10,16 +14,10 @@ export declare class SettlementAgent {
|
|
|
10
14
|
constructor(merchantWallet?: string);
|
|
11
15
|
triggerSettlement(verification: any): Promise<void>;
|
|
12
16
|
init(wallet?: Keypair): Promise<void>;
|
|
13
|
-
/**
|
|
14
|
-
* Set merchant wallet dynamically (for marketplace consumer)
|
|
15
|
-
*/
|
|
16
17
|
setMerchantWallet(merchantWallet: string): void;
|
|
17
18
|
private createPaymentRequirements;
|
|
18
19
|
private executeSettlement;
|
|
19
20
|
private createPaymentPayload;
|
|
20
|
-
|
|
21
|
-
* Creates a signed x402 payment
|
|
22
|
-
*/
|
|
23
|
-
createSignedPayment(recipientAddress: string, amountUsdc: number): Promise<string>;
|
|
21
|
+
createSignedPayment(recipientAddress: string, amount: number, options?: PaymentOptions): Promise<string>;
|
|
24
22
|
}
|
|
25
23
|
//# sourceMappingURL=SettlementAgent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettlementAgent.d.ts","sourceRoot":"","sources":["../../../src/agents/SettlementAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,OAAO,EAAe,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"SettlementAgent.d.ts","sourceRoot":"","sources":["../../../src/agents/SettlementAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,OAAO,EAAe,MAAM,iBAAiB,CAAA;AAM7E,OAAO,EAAE,YAAY,EAAwC,MAAM,iBAAiB,CAAA;AAKpF,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,YAAY,CAAA;CACrB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,cAAc,CAAC,CAAQ;IAC/B,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,MAAM,CAAkC;gBAEpC,cAAc,CAAC,EAAE,MAAM;IAyB7B,iBAAiB,CAAC,YAAY,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnD,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB3C,iBAAiB,CAAC,cAAc,EAAE,MAAM;IAIxC,OAAO,CAAC,yBAAyB;YAsBnB,iBAAiB;IAsC/B,OAAO,CAAC,oBAAoB;IAwBtB,mBAAmB,CACvB,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC;CAyFnB"}
|
|
@@ -10,6 +10,7 @@ const X402FacilitatorServer_1 = require("../facilitator/X402FacilitatorServer");
|
|
|
10
10
|
const solana_1 = require("../utils/solana");
|
|
11
11
|
const wallet_1 = require("../utils/wallet");
|
|
12
12
|
const logger_1 = require("../utils/logger");
|
|
13
|
+
const tokens_1 = require("../utils/tokens");
|
|
13
14
|
const dotenv_1 = __importDefault(require("dotenv"));
|
|
14
15
|
dotenv_1.default.config();
|
|
15
16
|
class SettlementAgent {
|
|
@@ -24,7 +25,6 @@ class SettlementAgent {
|
|
|
24
25
|
const { network, rpcUrl, networkId } = (0, solana_1.resolveSolanaNetwork)();
|
|
25
26
|
this.network = network;
|
|
26
27
|
this.networkId = networkId;
|
|
27
|
-
// Allow merchant wallet from parameter or env variable
|
|
28
28
|
if (merchantWallet) {
|
|
29
29
|
this.merchantWallet = merchantWallet;
|
|
30
30
|
}
|
|
@@ -50,7 +50,6 @@ class SettlementAgent {
|
|
|
50
50
|
}
|
|
51
51
|
async init(wallet) {
|
|
52
52
|
try {
|
|
53
|
-
// If a wallet is provided, use it instead of loading from env
|
|
54
53
|
if (wallet) {
|
|
55
54
|
this.agentWallet = wallet;
|
|
56
55
|
this.logger.info(`Settlement Agent initialized with provided wallet ${wallet.publicKey.toBase58()}`);
|
|
@@ -70,34 +69,32 @@ class SettlementAgent {
|
|
|
70
69
|
throw error;
|
|
71
70
|
}
|
|
72
71
|
}
|
|
73
|
-
/**
|
|
74
|
-
* Set merchant wallet dynamically (for marketplace consumer)
|
|
75
|
-
*/
|
|
76
72
|
setMerchantWallet(merchantWallet) {
|
|
77
73
|
this.merchantWallet = merchantWallet;
|
|
78
74
|
}
|
|
79
|
-
createPaymentRequirements() {
|
|
75
|
+
createPaymentRequirements(token = 'usdc') {
|
|
80
76
|
if (!this.merchantWallet) {
|
|
81
77
|
throw new Error('Merchant wallet not set. Call setMerchantWallet() first.');
|
|
82
78
|
}
|
|
83
79
|
const paymentAmount = parseFloat(process.env.DEFAULT_PAYMENT_AMOUNT_USDC || '1.0');
|
|
84
|
-
const
|
|
80
|
+
const amountInMicro = (0, tokens_1.tokenToAmount)(paymentAmount);
|
|
81
|
+
const mint = (0, tokens_1.getTokenMintPublicKey)(token, (0, solana_1.isMainnet)(this.network));
|
|
85
82
|
return {
|
|
86
83
|
scheme: 'exact',
|
|
87
84
|
network: this.networkId,
|
|
88
|
-
asset:
|
|
85
|
+
asset: mint.toBase58(),
|
|
89
86
|
payTo: this.merchantWallet,
|
|
90
|
-
maxAmountRequired:
|
|
87
|
+
maxAmountRequired: amountInMicro.toString(),
|
|
91
88
|
resource: '/agent-settlement',
|
|
92
|
-
description:
|
|
89
|
+
description: `A2A agent settlement via x402 on Solana (${token.toUpperCase()})`,
|
|
93
90
|
mimeType: 'application/json',
|
|
94
91
|
maxTimeoutSeconds: 120
|
|
95
92
|
};
|
|
96
93
|
}
|
|
97
|
-
async executeSettlement(verification) {
|
|
94
|
+
async executeSettlement(verification, token = 'usdc') {
|
|
98
95
|
try {
|
|
99
96
|
this.logger.info('Initiating settlement flow on Solana');
|
|
100
|
-
const requirements = this.createPaymentRequirements();
|
|
97
|
+
const requirements = this.createPaymentRequirements(token);
|
|
101
98
|
this.logger.info('Step 1: Creating payment authorization');
|
|
102
99
|
const paymentPayload = this.createPaymentPayload(requirements);
|
|
103
100
|
const paymentHeader = Buffer.from(JSON.stringify(paymentPayload)).toString('base64');
|
|
@@ -108,7 +105,7 @@ class SettlementAgent {
|
|
|
108
105
|
throw new Error(`Payment verification failed: ${verificationResult.invalidReason}`);
|
|
109
106
|
}
|
|
110
107
|
this.logger.info('Payment verification successful');
|
|
111
|
-
this.logger.info(
|
|
108
|
+
this.logger.info(`Step 3: Settling payment and executing ${token.toUpperCase()} transfer`);
|
|
112
109
|
const settlementResult = await this.facilitator.settle(paymentHeader, requirements);
|
|
113
110
|
if (!settlementResult.success) {
|
|
114
111
|
throw new Error(`Payment settlement failed: ${settlementResult.error}`);
|
|
@@ -144,41 +141,34 @@ class SettlementAgent {
|
|
|
144
141
|
}
|
|
145
142
|
};
|
|
146
143
|
}
|
|
147
|
-
|
|
148
|
-
* Creates a signed x402 payment
|
|
149
|
-
*/
|
|
150
|
-
async createSignedPayment(recipientAddress, amountUsdc) {
|
|
144
|
+
async createSignedPayment(recipientAddress, amount, options = {}) {
|
|
151
145
|
try {
|
|
152
146
|
if (!this.agentWallet) {
|
|
153
147
|
throw new Error('Agent wallet not initialized');
|
|
154
148
|
}
|
|
149
|
+
const token = options.token || 'usdc';
|
|
150
|
+
const tokenSymbol = token.toUpperCase();
|
|
155
151
|
this.logger.info('Creating signed x402 payment');
|
|
156
|
-
this.logger.info(`Amount: ${
|
|
152
|
+
this.logger.info(`Amount: ${amount} ${tokenSymbol}`);
|
|
157
153
|
this.logger.info(`Recipient: ${recipientAddress}`);
|
|
158
|
-
const
|
|
154
|
+
const amountInMicro = (0, tokens_1.tokenToAmount)(amount);
|
|
159
155
|
const recipientPubkey = new web3_js_1.PublicKey(recipientAddress);
|
|
160
|
-
const
|
|
161
|
-
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
const fromTokenAccount = await token.getOrCreateAssociatedAccountInfo(this.agentWallet.publicKey);
|
|
165
|
-
const toTokenAccount = await token.getOrCreateAssociatedAccountInfo(recipientPubkey);
|
|
156
|
+
const mint = (0, tokens_1.getTokenMintPublicKey)(token, (0, solana_1.isMainnet)(this.network));
|
|
157
|
+
const tokenInstance = new spl_token_1.Token(this.connection, mint, spl_token_1.TOKEN_PROGRAM_ID, this.agentWallet);
|
|
158
|
+
const fromTokenAccount = await tokenInstance.getOrCreateAssociatedAccountInfo(this.agentWallet.publicKey);
|
|
159
|
+
const toTokenAccount = await tokenInstance.getOrCreateAssociatedAccountInfo(recipientPubkey);
|
|
166
160
|
this.logger.debug(`From: ${this.agentWallet.publicKey.toBase58()}`);
|
|
167
161
|
this.logger.debug(`To: ${recipientAddress}`);
|
|
168
|
-
|
|
169
|
-
const transferInstruction = spl_token_1.Token.createTransferInstruction(spl_token_1.TOKEN_PROGRAM_ID, fromTokenAccount.address, toTokenAccount.address, this.agentWallet.publicKey, [],
|
|
170
|
-
// Create transaction
|
|
162
|
+
this.logger.debug(`Mint: ${mint.toBase58()}`);
|
|
163
|
+
const transferInstruction = spl_token_1.Token.createTransferInstruction(spl_token_1.TOKEN_PROGRAM_ID, fromTokenAccount.address, toTokenAccount.address, this.agentWallet.publicKey, [], amountInMicro);
|
|
171
164
|
const transaction = new web3_js_1.Transaction().add(transferInstruction);
|
|
172
|
-
// Get recent blockhash
|
|
173
165
|
const { blockhash, lastValidBlockHeight } = await this.connection.getLatestBlockhash('confirmed');
|
|
174
166
|
transaction.recentBlockhash = blockhash;
|
|
175
167
|
transaction.lastValidBlockHeight = lastValidBlockHeight;
|
|
176
168
|
transaction.feePayer = this.agentWallet.publicKey;
|
|
177
|
-
// Sign transaction
|
|
178
169
|
transaction.sign(this.agentWallet);
|
|
179
170
|
this.logger.info('Transaction signed');
|
|
180
|
-
|
|
181
|
-
const validBefore = Math.floor(Date.now() / 1000) + 300; // 5 minutes
|
|
171
|
+
const validBefore = Math.floor(Date.now() / 1000) + 300;
|
|
182
172
|
const paymentPayload = {
|
|
183
173
|
x402Version: 1,
|
|
184
174
|
scheme: 'exact',
|
|
@@ -187,8 +177,8 @@ class SettlementAgent {
|
|
|
187
177
|
authorization: {
|
|
188
178
|
from: this.agentWallet.publicKey.toBase58(),
|
|
189
179
|
to: recipientAddress,
|
|
190
|
-
value:
|
|
191
|
-
asset:
|
|
180
|
+
value: amountInMicro.toString(),
|
|
181
|
+
asset: mint.toBase58(),
|
|
192
182
|
validBefore: validBefore,
|
|
193
183
|
nonce: (0, solana_1.createNonce)()
|
|
194
184
|
},
|
|
@@ -199,9 +189,8 @@ class SettlementAgent {
|
|
|
199
189
|
}
|
|
200
190
|
}
|
|
201
191
|
};
|
|
202
|
-
// Encode to base64
|
|
203
192
|
const paymentHeader = Buffer.from(JSON.stringify(paymentPayload)).toString('base64');
|
|
204
|
-
this.logger.info(
|
|
193
|
+
this.logger.info(`x402 payment created (${tokenSymbol}, signed transaction included)`);
|
|
205
194
|
return paymentHeader;
|
|
206
195
|
}
|
|
207
196
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettlementAgent.js","sourceRoot":"","sources":["../../../src/agents/SettlementAgent.ts"],"names":[],"mappings":";;;;;;AAAA,6CAA6E;AAC7E,iDAA2D;AAC3D,gFAA4E;AAC5E,
|
|
1
|
+
{"version":3,"file":"SettlementAgent.js","sourceRoot":"","sources":["../../../src/agents/SettlementAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Aether Marketplace Consumer
|
|
3
3
|
* SDK for agents that consume services from the marketplace
|
|
4
|
+
*
|
|
5
|
+
* Uses GraphQL API at https://api.getaether.xyz/graphql
|
|
4
6
|
*/
|
|
5
7
|
import { SettlementAgent } from '../agents/SettlementAgent';
|
|
8
|
+
import { GraphQLClient } from './graphql';
|
|
6
9
|
import { MarketplaceSearchFilters, AgentSearchResult, Conversation, ConversationMessage, Order, Delivery, Review, MarketplaceConfig } from './types';
|
|
7
10
|
/**
|
|
8
11
|
* MarketplaceConsumer
|
|
@@ -12,9 +15,11 @@ import { MarketplaceSearchFilters, AgentSearchResult, Conversation, Conversation
|
|
|
12
15
|
* @example
|
|
13
16
|
* ```typescript
|
|
14
17
|
* const consumer = new MarketplaceConsumer({
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
* apiUrl: 'https://api.getaether.xyz/graphql',
|
|
19
|
+
* wallet: myKeypair
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* await consumer.init();
|
|
18
23
|
*
|
|
19
24
|
* // Search for translation agents
|
|
20
25
|
* const agents = await consumer.search({
|
|
@@ -30,19 +35,18 @@ import { MarketplaceSearchFilters, AgentSearchResult, Conversation, Conversation
|
|
|
30
35
|
* // Listen for responses
|
|
31
36
|
* conversation.on('message', async (msg) => {
|
|
32
37
|
* if (msg.hasOrder) {
|
|
33
|
-
* await conversation.acceptOrder(msg.order.id, { paymentMethod: '
|
|
38
|
+
* await conversation.acceptOrder(msg.order.id, { paymentMethod: 'usdc' });
|
|
34
39
|
* }
|
|
35
40
|
* });
|
|
36
41
|
*
|
|
37
42
|
* // Listen for delivery
|
|
38
43
|
* conversation.on('delivery', async (delivery) => {
|
|
39
|
-
*
|
|
40
|
-
* await conversation.review({ rating: 5 });
|
|
44
|
+
* await conversation.review(delivery.orderId, { rating: 5 });
|
|
41
45
|
* });
|
|
42
46
|
* ```
|
|
43
47
|
*/
|
|
44
48
|
export declare class MarketplaceConsumer {
|
|
45
|
-
private
|
|
49
|
+
private graphql;
|
|
46
50
|
private wallet;
|
|
47
51
|
private settlementAgent;
|
|
48
52
|
private marketplaceWallet?;
|
|
@@ -53,34 +57,34 @@ export declare class MarketplaceConsumer {
|
|
|
53
57
|
*/
|
|
54
58
|
init(): Promise<void>;
|
|
55
59
|
/**
|
|
56
|
-
* Search for agents
|
|
60
|
+
* Search for agents via GraphQL
|
|
57
61
|
*/
|
|
58
62
|
search(filters?: MarketplaceSearchFilters): Promise<AgentSearchResult[]>;
|
|
59
63
|
/**
|
|
60
|
-
* Get agent details
|
|
64
|
+
* Get agent details via GraphQL
|
|
61
65
|
*/
|
|
62
66
|
getAgent(agentId: string): Promise<any>;
|
|
63
67
|
/**
|
|
64
|
-
* Start conversation with agent
|
|
68
|
+
* Start conversation with agent via GraphQL
|
|
65
69
|
*/
|
|
66
70
|
startConversation(agentId: string, options: {
|
|
67
71
|
message: string;
|
|
68
72
|
attachments?: any[];
|
|
69
73
|
}): Promise<ConversationWrapper>;
|
|
70
74
|
/**
|
|
71
|
-
* Get existing conversation
|
|
75
|
+
* Get existing conversation via GraphQL
|
|
72
76
|
*/
|
|
73
77
|
getConversation(conversationId: string): Promise<ConversationWrapper>;
|
|
74
78
|
/**
|
|
75
|
-
* Get all conversations for this wallet
|
|
79
|
+
* Get all conversations for this wallet via GraphQL
|
|
76
80
|
*/
|
|
77
81
|
getConversations(): Promise<Conversation[]>;
|
|
78
82
|
/**
|
|
79
|
-
* Get order details
|
|
83
|
+
* Get order details via GraphQL
|
|
80
84
|
*/
|
|
81
85
|
getOrder(orderId: string): Promise<Order>;
|
|
82
86
|
/**
|
|
83
|
-
* Get all orders for this wallet
|
|
87
|
+
* Get all orders for this wallet via GraphQL
|
|
84
88
|
*/
|
|
85
89
|
getOrders(status?: string): Promise<Order[]>;
|
|
86
90
|
}
|
|
@@ -90,7 +94,7 @@ export declare class MarketplaceConsumer {
|
|
|
90
94
|
*/
|
|
91
95
|
export declare class ConversationWrapper {
|
|
92
96
|
private conversation;
|
|
93
|
-
private
|
|
97
|
+
private graphql;
|
|
94
98
|
private wallet;
|
|
95
99
|
private settlementAgent;
|
|
96
100
|
private marketplaceWallet;
|
|
@@ -98,21 +102,21 @@ export declare class ConversationWrapper {
|
|
|
98
102
|
private deliveryHandlers;
|
|
99
103
|
private pollingInterval?;
|
|
100
104
|
private logger;
|
|
101
|
-
constructor(conversation: Conversation,
|
|
105
|
+
constructor(conversation: Conversation, graphql: GraphQLClient, wallet: any, settlementAgent: SettlementAgent, marketplaceWallet: string);
|
|
102
106
|
/**
|
|
103
107
|
* Get conversation ID
|
|
104
108
|
*/
|
|
105
109
|
get id(): string;
|
|
106
110
|
/**
|
|
107
|
-
* Send message
|
|
111
|
+
* Send message via GraphQL
|
|
108
112
|
*/
|
|
109
113
|
send(message: string, attachments?: any[]): Promise<void>;
|
|
110
114
|
/**
|
|
111
|
-
* Get messages
|
|
115
|
+
* Get messages via GraphQL
|
|
112
116
|
*/
|
|
113
117
|
getMessages(limit?: number): Promise<ConversationMessage[]>;
|
|
114
118
|
/**
|
|
115
|
-
* Accept order and pay
|
|
119
|
+
* Accept order and pay via GraphQL
|
|
116
120
|
*/
|
|
117
121
|
acceptOrder(orderId: string, options: {
|
|
118
122
|
paymentMethod: 'usdc' | 'athr';
|
|
@@ -120,19 +124,20 @@ export declare class ConversationWrapper {
|
|
|
120
124
|
transactionSignature: string;
|
|
121
125
|
}>;
|
|
122
126
|
/**
|
|
123
|
-
* Decline order proposal
|
|
127
|
+
* Decline order proposal via GraphQL
|
|
124
128
|
*/
|
|
125
129
|
declineOrder(orderId: string, reason?: string): Promise<void>;
|
|
126
130
|
/**
|
|
127
|
-
* Counter-offer with different price/terms
|
|
131
|
+
* Counter-offer with different price/terms via GraphQL
|
|
128
132
|
*/
|
|
129
133
|
counterOffer(orderId: string, offer: {
|
|
130
134
|
price?: number;
|
|
135
|
+
priceAthr?: number;
|
|
131
136
|
deliveryTime?: number;
|
|
132
137
|
message: string;
|
|
133
138
|
}): Promise<void>;
|
|
134
139
|
/**
|
|
135
|
-
* Review order
|
|
140
|
+
* Review order via GraphQL
|
|
136
141
|
*/
|
|
137
142
|
review(orderId: string, review: Omit<Review, 'orderId' | 'agentId' | 'createdAt'>): Promise<void>;
|
|
138
143
|
/**
|
|
@@ -145,7 +150,7 @@ export declare class ConversationWrapper {
|
|
|
145
150
|
*/
|
|
146
151
|
stop(): void;
|
|
147
152
|
/**
|
|
148
|
-
* Start polling for new messages and deliveries
|
|
153
|
+
* Start polling for new messages and deliveries via GraphQL
|
|
149
154
|
*/
|
|
150
155
|
private startPolling;
|
|
151
156
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarketplaceConsumer.d.ts","sourceRoot":"","sources":["../../../src/marketplace/MarketplaceConsumer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"MarketplaceConsumer.d.ts","sourceRoot":"","sources":["../../../src/marketplace/MarketplaceConsumer.ts"],"names":[],"mappings":"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"}
|