@paylobster/mcp-server 1.0.2 → 1.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.
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +99 -0
- package/dist/resources/index.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +475 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/bridge.d.ts +142 -0
- package/dist/tools/bridge.d.ts.map +1 -0
- package/dist/tools/bridge.js +121 -0
- package/dist/tools/bridge.js.map +1 -0
- package/dist/tools/cascade.d.ts +59 -0
- package/dist/tools/cascade.d.ts.map +1 -0
- package/dist/tools/cascade.js +119 -0
- package/dist/tools/cascade.js.map +1 -0
- package/dist/tools/compliance.d.ts +36 -0
- package/dist/tools/compliance.d.ts.map +1 -0
- package/dist/tools/compliance.js +57 -0
- package/dist/tools/compliance.js.map +1 -0
- package/dist/tools/credit.d.ts +46 -0
- package/dist/tools/credit.d.ts.map +1 -0
- package/dist/tools/credit.js +102 -0
- package/dist/tools/credit.js.map +1 -0
- package/dist/tools/disputes.d.ts +71 -0
- package/dist/tools/disputes.d.ts.map +1 -0
- package/dist/tools/disputes.js +121 -0
- package/dist/tools/disputes.js.map +1 -0
- package/dist/tools/intent.d.ts +78 -0
- package/dist/tools/intent.d.ts.map +1 -0
- package/dist/tools/intent.js +192 -0
- package/dist/tools/intent.js.map +1 -0
- package/dist/tools/portfolio.d.ts +44 -0
- package/dist/tools/portfolio.d.ts.map +1 -0
- package/dist/tools/portfolio.js +166 -0
- package/dist/tools/portfolio.js.map +1 -0
- package/dist/tools/revenue.d.ts +42 -0
- package/dist/tools/revenue.d.ts.map +1 -0
- package/dist/tools/revenue.js +67 -0
- package/dist/tools/revenue.js.map +1 -0
- package/dist/tools/streaming.d.ts +60 -0
- package/dist/tools/streaming.d.ts.map +1 -0
- package/dist/tools/streaming.js +163 -0
- package/dist/tools/streaming.js.map +1 -0
- package/dist/tools/swap.d.ts +93 -0
- package/dist/tools/swap.d.ts.map +1 -0
- package/dist/tools/swap.js +150 -0
- package/dist/tools/swap.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/contracts.d.ts +316 -0
- package/dist/utils/contracts.d.ts.map +1 -1
- package/dist/utils/contracts.js +205 -5
- package/dist/utils/contracts.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Address } from 'viem';
|
|
3
|
+
import { ContractClient } from '../utils/contracts';
|
|
4
|
+
export declare const getCreditScoreSchema: z.ZodObject<{
|
|
5
|
+
address: z.ZodString;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
address: string;
|
|
8
|
+
}, {
|
|
9
|
+
address: string;
|
|
10
|
+
}>;
|
|
11
|
+
export declare const requestCreditLineSchema: z.ZodObject<{
|
|
12
|
+
amount: z.ZodString;
|
|
13
|
+
duration: z.ZodString;
|
|
14
|
+
collateral: z.ZodOptional<z.ZodString>;
|
|
15
|
+
}, "strip", z.ZodTypeAny, {
|
|
16
|
+
amount: string;
|
|
17
|
+
duration: string;
|
|
18
|
+
collateral?: string | undefined;
|
|
19
|
+
}, {
|
|
20
|
+
amount: string;
|
|
21
|
+
duration: string;
|
|
22
|
+
collateral?: string | undefined;
|
|
23
|
+
}>;
|
|
24
|
+
export declare function getCreditScore(params: z.infer<typeof getCreditScoreSchema>, client: ContractClient): Promise<{
|
|
25
|
+
address: Address;
|
|
26
|
+
score: number;
|
|
27
|
+
limit: string;
|
|
28
|
+
available: string;
|
|
29
|
+
inUse: string;
|
|
30
|
+
paymentHistory: {
|
|
31
|
+
onTime: number;
|
|
32
|
+
late: number;
|
|
33
|
+
defaulted: number;
|
|
34
|
+
};
|
|
35
|
+
utilization: number;
|
|
36
|
+
age: number;
|
|
37
|
+
}>;
|
|
38
|
+
export declare function requestCreditLine(params: z.infer<typeof requestCreditLineSchema>, client: ContractClient): Promise<{
|
|
39
|
+
transactionHash: string;
|
|
40
|
+
requestId: string;
|
|
41
|
+
amount: string;
|
|
42
|
+
duration: number;
|
|
43
|
+
collateral: string;
|
|
44
|
+
status: string;
|
|
45
|
+
}>;
|
|
46
|
+
//# sourceMappingURL=credit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credit.d.ts","sourceRoot":"","sources":["../../src/tools/credit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAc,MAAM,oBAAoB,CAAC;AAEhE,eAAO,MAAM,oBAAoB;;;;;;EAE/B,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;EAIlC,CAAC;AAEH,wBAAsB,cAAc,CAClC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,EAC5C,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE;QACd,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC,CAqCD;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,EAC/C,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC;IACT,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CA4CD"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.requestCreditLineSchema = exports.getCreditScoreSchema = void 0;
|
|
4
|
+
exports.getCreditScore = getCreditScore;
|
|
5
|
+
exports.requestCreditLine = requestCreditLine;
|
|
6
|
+
const zod_1 = require("zod");
|
|
7
|
+
const contracts_1 = require("../utils/contracts");
|
|
8
|
+
exports.getCreditScoreSchema = zod_1.z.object({
|
|
9
|
+
address: zod_1.z.string().describe('Agent address'),
|
|
10
|
+
});
|
|
11
|
+
exports.requestCreditLineSchema = zod_1.z.object({
|
|
12
|
+
amount: zod_1.z.string().describe('Requested credit line amount in USDC'),
|
|
13
|
+
duration: zod_1.z.string().describe('ISO 8601 duration (e.g., P30D for 30 days)'),
|
|
14
|
+
collateral: zod_1.z.string().optional().describe('Collateral amount in USDC'),
|
|
15
|
+
});
|
|
16
|
+
async function getCreditScore(params, client) {
|
|
17
|
+
const publicClient = client.getPublicClient();
|
|
18
|
+
const contracts = client.getContracts();
|
|
19
|
+
try {
|
|
20
|
+
const address = params.address;
|
|
21
|
+
// Get credit score and history
|
|
22
|
+
const [score, creditLimit, available, inUse, onTime, late, defaulted, accountAge] = await publicClient.readContract({
|
|
23
|
+
address: contracts.credit,
|
|
24
|
+
abi: contracts_1.CREDIT_ABI,
|
|
25
|
+
functionName: 'getCreditScore',
|
|
26
|
+
args: [address],
|
|
27
|
+
});
|
|
28
|
+
const utilization = creditLimit > BigInt(0)
|
|
29
|
+
? Number(inUse) / Number(creditLimit) * 100
|
|
30
|
+
: 0;
|
|
31
|
+
return {
|
|
32
|
+
address,
|
|
33
|
+
score: Number(score),
|
|
34
|
+
limit: client.formatUSDC(creditLimit),
|
|
35
|
+
available: client.formatUSDC(available),
|
|
36
|
+
inUse: client.formatUSDC(inUse),
|
|
37
|
+
paymentHistory: {
|
|
38
|
+
onTime: Number(onTime),
|
|
39
|
+
late: Number(late),
|
|
40
|
+
defaulted: Number(defaulted),
|
|
41
|
+
},
|
|
42
|
+
utilization,
|
|
43
|
+
age: Number(accountAge),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
throw new Error(`Failed to fetch credit score: ${error.message}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async function requestCreditLine(params, client) {
|
|
51
|
+
const account = client.getAccount();
|
|
52
|
+
const walletClient = client.getWalletClient();
|
|
53
|
+
const publicClient = client.getPublicClient();
|
|
54
|
+
const contracts = client.getContracts();
|
|
55
|
+
try {
|
|
56
|
+
const amount = client.parseUSDC(params.amount);
|
|
57
|
+
const durationMs = parseDuration(params.duration);
|
|
58
|
+
const durationDays = Math.floor(durationMs / (24 * 60 * 60 * 1000));
|
|
59
|
+
const collateral = params.collateral ? client.parseUSDC(params.collateral) : BigInt(0);
|
|
60
|
+
const hash = await walletClient.writeContract({
|
|
61
|
+
address: contracts.credit,
|
|
62
|
+
abi: contracts_1.CREDIT_ABI,
|
|
63
|
+
functionName: 'requestCreditLine',
|
|
64
|
+
args: [amount, BigInt(durationDays), collateral],
|
|
65
|
+
account,
|
|
66
|
+
});
|
|
67
|
+
const receipt = await publicClient.waitForTransactionReceipt({ hash });
|
|
68
|
+
// Parse request ID from event logs
|
|
69
|
+
let requestId = '0';
|
|
70
|
+
if (receipt.logs && receipt.logs.length > 0) {
|
|
71
|
+
const requestLog = receipt.logs.find((log) => log.topics && log.topics.length > 1);
|
|
72
|
+
if (requestLog && requestLog.topics) {
|
|
73
|
+
requestId = BigInt(requestLog.topics[1]).toString();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
transactionHash: hash,
|
|
78
|
+
requestId,
|
|
79
|
+
amount: params.amount,
|
|
80
|
+
duration: durationDays,
|
|
81
|
+
collateral: params.collateral || '0',
|
|
82
|
+
status: 'pending',
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
throw new Error(`Failed to request credit line: ${error.message}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function parseDuration(duration) {
|
|
90
|
+
const days = duration.match(/P(\d+)D/);
|
|
91
|
+
const hours = duration.match(/PT?(\d+)H/);
|
|
92
|
+
const minutes = duration.match(/PT?(\d+)M/);
|
|
93
|
+
let ms = 0;
|
|
94
|
+
if (days)
|
|
95
|
+
ms += parseInt(days[1]) * 24 * 60 * 60 * 1000;
|
|
96
|
+
if (hours)
|
|
97
|
+
ms += parseInt(hours[1]) * 60 * 60 * 1000;
|
|
98
|
+
if (minutes)
|
|
99
|
+
ms += parseInt(minutes[1]) * 60 * 1000;
|
|
100
|
+
return ms || 30 * 24 * 60 * 60 * 1000; // Default 30 days
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=credit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credit.js","sourceRoot":"","sources":["../../src/tools/credit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Address } from 'viem';
|
|
3
|
+
import { ContractClient } from '../utils/contracts';
|
|
4
|
+
export declare const openDisputeSchema: z.ZodObject<{
|
|
5
|
+
escrowId: z.ZodString;
|
|
6
|
+
reason: z.ZodString;
|
|
7
|
+
evidence: z.ZodOptional<z.ZodString>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
reason: string;
|
|
10
|
+
escrowId: string;
|
|
11
|
+
evidence?: string | undefined;
|
|
12
|
+
}, {
|
|
13
|
+
reason: string;
|
|
14
|
+
escrowId: string;
|
|
15
|
+
evidence?: string | undefined;
|
|
16
|
+
}>;
|
|
17
|
+
export declare const submitEvidenceSchema: z.ZodObject<{
|
|
18
|
+
disputeId: z.ZodString;
|
|
19
|
+
evidence: z.ZodString;
|
|
20
|
+
description: z.ZodString;
|
|
21
|
+
}, "strip", z.ZodTypeAny, {
|
|
22
|
+
description: string;
|
|
23
|
+
evidence: string;
|
|
24
|
+
disputeId: string;
|
|
25
|
+
}, {
|
|
26
|
+
description: string;
|
|
27
|
+
evidence: string;
|
|
28
|
+
disputeId: string;
|
|
29
|
+
}>;
|
|
30
|
+
export declare const getDisputeSchema: z.ZodObject<{
|
|
31
|
+
disputeId: z.ZodString;
|
|
32
|
+
}, "strip", z.ZodTypeAny, {
|
|
33
|
+
disputeId: string;
|
|
34
|
+
}, {
|
|
35
|
+
disputeId: string;
|
|
36
|
+
}>;
|
|
37
|
+
export declare function openDispute(params: z.infer<typeof openDisputeSchema>, client: ContractClient): Promise<{
|
|
38
|
+
disputeId: string;
|
|
39
|
+
transactionHash: string;
|
|
40
|
+
escrowId: string;
|
|
41
|
+
reason: string;
|
|
42
|
+
status: string;
|
|
43
|
+
createdAt: number;
|
|
44
|
+
}>;
|
|
45
|
+
export declare function submitEvidence(params: z.infer<typeof submitEvidenceSchema>, client: ContractClient): Promise<{
|
|
46
|
+
transactionHash: string;
|
|
47
|
+
disputeId: string;
|
|
48
|
+
evidence: string;
|
|
49
|
+
submittedBy: Address;
|
|
50
|
+
timestamp: number;
|
|
51
|
+
}>;
|
|
52
|
+
export declare function getDispute(params: z.infer<typeof getDisputeSchema>, client: ContractClient): Promise<{
|
|
53
|
+
disputeId: string;
|
|
54
|
+
escrowId: string;
|
|
55
|
+
plaintiff: Address;
|
|
56
|
+
defendant: Address;
|
|
57
|
+
reason: string;
|
|
58
|
+
status: 'open' | 'reviewing' | 'resolved-plaintiff' | 'resolved-defendant' | 'canceled';
|
|
59
|
+
evidence: Array<{
|
|
60
|
+
submitter: Address;
|
|
61
|
+
hash: string;
|
|
62
|
+
description: string;
|
|
63
|
+
timestamp: number;
|
|
64
|
+
}>;
|
|
65
|
+
resolution?: {
|
|
66
|
+
winner: Address;
|
|
67
|
+
resolvedAt: number;
|
|
68
|
+
resolver: Address;
|
|
69
|
+
};
|
|
70
|
+
}>;
|
|
71
|
+
//# sourceMappingURL=disputes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disputes.d.ts","sourceRoot":"","sources":["../../src/tools/disputes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAe,MAAM,oBAAoB,CAAC;AAEjE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;EAI5B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;EAI/B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;EAE3B,CAAC;AAEH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,EACzC,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CA0CD;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,EAC5C,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC;IACT,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CA6BD;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,EACxC,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,oBAAoB,GAAG,oBAAoB,GAAG,UAAU,CAAC;IACxF,QAAQ,EAAE,KAAK,CAAC;QACd,SAAS,EAAE,OAAO,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,UAAU,CAAC,EAAE;QACX,MAAM,EAAE,OAAO,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;CACH,CAAC,CA2CD"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDisputeSchema = exports.submitEvidenceSchema = exports.openDisputeSchema = void 0;
|
|
4
|
+
exports.openDispute = openDispute;
|
|
5
|
+
exports.submitEvidence = submitEvidence;
|
|
6
|
+
exports.getDispute = getDispute;
|
|
7
|
+
const zod_1 = require("zod");
|
|
8
|
+
const contracts_1 = require("../utils/contracts");
|
|
9
|
+
exports.openDisputeSchema = zod_1.z.object({
|
|
10
|
+
escrowId: zod_1.z.string().describe('Escrow ID to dispute'),
|
|
11
|
+
reason: zod_1.z.string().describe('Reason for dispute'),
|
|
12
|
+
evidence: zod_1.z.string().optional().describe('Initial evidence (IPFS hash or URL)'),
|
|
13
|
+
});
|
|
14
|
+
exports.submitEvidenceSchema = zod_1.z.object({
|
|
15
|
+
disputeId: zod_1.z.string().describe('Dispute ID'),
|
|
16
|
+
evidence: zod_1.z.string().describe('Evidence (IPFS hash or URL)'),
|
|
17
|
+
description: zod_1.z.string().describe('Description of evidence'),
|
|
18
|
+
});
|
|
19
|
+
exports.getDisputeSchema = zod_1.z.object({
|
|
20
|
+
disputeId: zod_1.z.string().describe('Dispute ID'),
|
|
21
|
+
});
|
|
22
|
+
async function openDispute(params, client) {
|
|
23
|
+
const account = client.getAccount();
|
|
24
|
+
const walletClient = client.getWalletClient();
|
|
25
|
+
const publicClient = client.getPublicClient();
|
|
26
|
+
const contracts = client.getContracts();
|
|
27
|
+
try {
|
|
28
|
+
const escrowId = BigInt(params.escrowId);
|
|
29
|
+
const evidenceHash = params.evidence || '';
|
|
30
|
+
const hash = await walletClient.writeContract({
|
|
31
|
+
address: contracts.dispute,
|
|
32
|
+
abi: contracts_1.DISPUTE_ABI,
|
|
33
|
+
functionName: 'openDispute',
|
|
34
|
+
args: [escrowId, params.reason, evidenceHash],
|
|
35
|
+
account,
|
|
36
|
+
});
|
|
37
|
+
const receipt = await publicClient.waitForTransactionReceipt({ hash });
|
|
38
|
+
// Parse dispute ID from event logs
|
|
39
|
+
let disputeId = '0';
|
|
40
|
+
if (receipt.logs && receipt.logs.length > 0) {
|
|
41
|
+
const disputeOpenedLog = receipt.logs.find((log) => log.topics && log.topics.length > 1);
|
|
42
|
+
if (disputeOpenedLog && disputeOpenedLog.topics) {
|
|
43
|
+
disputeId = BigInt(disputeOpenedLog.topics[1]).toString();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
disputeId,
|
|
48
|
+
transactionHash: hash,
|
|
49
|
+
escrowId: params.escrowId,
|
|
50
|
+
reason: params.reason,
|
|
51
|
+
status: 'open',
|
|
52
|
+
createdAt: Date.now(),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
throw new Error(`Failed to open dispute: ${error.message}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async function submitEvidence(params, client) {
|
|
60
|
+
const account = client.getAccount();
|
|
61
|
+
const walletClient = client.getWalletClient();
|
|
62
|
+
const publicClient = client.getPublicClient();
|
|
63
|
+
const contracts = client.getContracts();
|
|
64
|
+
try {
|
|
65
|
+
const disputeId = BigInt(params.disputeId);
|
|
66
|
+
const hash = await walletClient.writeContract({
|
|
67
|
+
address: contracts.dispute,
|
|
68
|
+
abi: contracts_1.DISPUTE_ABI,
|
|
69
|
+
functionName: 'submitEvidence',
|
|
70
|
+
args: [disputeId, params.evidence, params.description],
|
|
71
|
+
account,
|
|
72
|
+
});
|
|
73
|
+
await publicClient.waitForTransactionReceipt({ hash });
|
|
74
|
+
return {
|
|
75
|
+
transactionHash: hash,
|
|
76
|
+
disputeId: params.disputeId,
|
|
77
|
+
evidence: params.evidence,
|
|
78
|
+
submittedBy: account.address,
|
|
79
|
+
timestamp: Date.now(),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
throw new Error(`Failed to submit evidence: ${error.message}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
async function getDispute(params, client) {
|
|
87
|
+
const publicClient = client.getPublicClient();
|
|
88
|
+
const contracts = client.getContracts();
|
|
89
|
+
try {
|
|
90
|
+
const disputeId = BigInt(params.disputeId);
|
|
91
|
+
const [escrowId, plaintiff, defendant, reason, status, createdAt] = await publicClient.readContract({
|
|
92
|
+
address: contracts.dispute,
|
|
93
|
+
abi: contracts_1.DISPUTE_ABI,
|
|
94
|
+
functionName: 'getDispute',
|
|
95
|
+
args: [disputeId],
|
|
96
|
+
});
|
|
97
|
+
// Map status codes
|
|
98
|
+
const statusMap = {
|
|
99
|
+
0: 'open',
|
|
100
|
+
1: 'reviewing',
|
|
101
|
+
2: 'resolved-plaintiff',
|
|
102
|
+
3: 'resolved-defendant',
|
|
103
|
+
4: 'canceled',
|
|
104
|
+
};
|
|
105
|
+
// Fetch evidence (would query events in real implementation)
|
|
106
|
+
const evidence = [];
|
|
107
|
+
return {
|
|
108
|
+
disputeId: params.disputeId,
|
|
109
|
+
escrowId: escrowId.toString(),
|
|
110
|
+
plaintiff: plaintiff,
|
|
111
|
+
defendant: defendant,
|
|
112
|
+
reason: reason,
|
|
113
|
+
status: statusMap[status],
|
|
114
|
+
evidence,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
throw new Error(`Failed to fetch dispute: ${error.message}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=disputes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disputes.js","sourceRoot":"","sources":["../../src/tools/disputes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Address } from 'viem';
|
|
3
|
+
import { ContractClient } from '../utils/contracts';
|
|
4
|
+
export declare const postIntentSchema: z.ZodObject<{
|
|
5
|
+
description: z.ZodString;
|
|
6
|
+
tags: z.ZodArray<z.ZodString, "many">;
|
|
7
|
+
budget: z.ZodString;
|
|
8
|
+
deadline: z.ZodString;
|
|
9
|
+
requirements: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
description: string;
|
|
12
|
+
tags: string[];
|
|
13
|
+
budget: string;
|
|
14
|
+
deadline: string;
|
|
15
|
+
requirements?: Record<string, any> | undefined;
|
|
16
|
+
}, {
|
|
17
|
+
description: string;
|
|
18
|
+
tags: string[];
|
|
19
|
+
budget: string;
|
|
20
|
+
deadline: string;
|
|
21
|
+
requirements?: Record<string, any> | undefined;
|
|
22
|
+
}>;
|
|
23
|
+
export declare const searchIntentsSchema: z.ZodObject<{
|
|
24
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
25
|
+
minBudget: z.ZodOptional<z.ZodString>;
|
|
26
|
+
maxBudget: z.ZodOptional<z.ZodString>;
|
|
27
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
28
|
+
}, "strip", z.ZodTypeAny, {
|
|
29
|
+
limit: number;
|
|
30
|
+
tags?: string[] | undefined;
|
|
31
|
+
minBudget?: string | undefined;
|
|
32
|
+
maxBudget?: string | undefined;
|
|
33
|
+
}, {
|
|
34
|
+
limit?: number | undefined;
|
|
35
|
+
tags?: string[] | undefined;
|
|
36
|
+
minBudget?: string | undefined;
|
|
37
|
+
maxBudget?: string | undefined;
|
|
38
|
+
}>;
|
|
39
|
+
export declare const acceptOfferSchema: z.ZodObject<{
|
|
40
|
+
intentId: z.ZodString;
|
|
41
|
+
offerId: z.ZodString;
|
|
42
|
+
}, "strip", z.ZodTypeAny, {
|
|
43
|
+
intentId: string;
|
|
44
|
+
offerId: string;
|
|
45
|
+
}, {
|
|
46
|
+
intentId: string;
|
|
47
|
+
offerId: string;
|
|
48
|
+
}>;
|
|
49
|
+
export declare function postIntent(params: z.infer<typeof postIntentSchema>, client: ContractClient): Promise<{
|
|
50
|
+
intentId: string;
|
|
51
|
+
transactionHash: string;
|
|
52
|
+
description: string;
|
|
53
|
+
tags: string[];
|
|
54
|
+
budget: string;
|
|
55
|
+
deadline: number;
|
|
56
|
+
status: string;
|
|
57
|
+
}>;
|
|
58
|
+
export declare function searchIntents(params: z.infer<typeof searchIntentsSchema>, client: ContractClient): Promise<{
|
|
59
|
+
intents: Array<{
|
|
60
|
+
intentId: string;
|
|
61
|
+
poster: Address;
|
|
62
|
+
description: string;
|
|
63
|
+
tags: string[];
|
|
64
|
+
budget: string;
|
|
65
|
+
deadline: number;
|
|
66
|
+
offers: number;
|
|
67
|
+
status: string;
|
|
68
|
+
}>;
|
|
69
|
+
total: number;
|
|
70
|
+
}>;
|
|
71
|
+
export declare function acceptOffer(params: z.infer<typeof acceptOfferSchema>, client: ContractClient): Promise<{
|
|
72
|
+
transactionHash: string;
|
|
73
|
+
intentId: string;
|
|
74
|
+
offerId: string;
|
|
75
|
+
provider: Address;
|
|
76
|
+
escrowId: string;
|
|
77
|
+
}>;
|
|
78
|
+
//# sourceMappingURL=intent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../src/tools/intent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAc,MAAM,oBAAoB,CAAC;AAEhE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;EAM3B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;EAK9B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;EAG5B,CAAC;AAEH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,EACxC,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CA+CD;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,EAC3C,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC;IACT,OAAO,EAAE,KAAK,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,OAAO,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAuFD;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,EACzC,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC;IACT,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CA2CD"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.acceptOfferSchema = exports.searchIntentsSchema = exports.postIntentSchema = void 0;
|
|
4
|
+
exports.postIntent = postIntent;
|
|
5
|
+
exports.searchIntents = searchIntents;
|
|
6
|
+
exports.acceptOffer = acceptOffer;
|
|
7
|
+
const zod_1 = require("zod");
|
|
8
|
+
const contracts_1 = require("../utils/contracts");
|
|
9
|
+
exports.postIntentSchema = zod_1.z.object({
|
|
10
|
+
description: zod_1.z.string().describe('Service intent description'),
|
|
11
|
+
tags: zod_1.z.array(zod_1.z.string()).describe('Service tags for discovery'),
|
|
12
|
+
budget: zod_1.z.string().describe('Maximum budget in USDC'),
|
|
13
|
+
deadline: zod_1.z.string().describe('ISO 8601 duration or timestamp'),
|
|
14
|
+
requirements: zod_1.z.record(zod_1.z.any()).optional(),
|
|
15
|
+
});
|
|
16
|
+
exports.searchIntentsSchema = zod_1.z.object({
|
|
17
|
+
tags: zod_1.z.array(zod_1.z.string()).optional().describe('Filter by tags'),
|
|
18
|
+
minBudget: zod_1.z.string().optional().describe('Minimum budget in USDC'),
|
|
19
|
+
maxBudget: zod_1.z.string().optional().describe('Maximum budget in USDC'),
|
|
20
|
+
limit: zod_1.z.number().default(20),
|
|
21
|
+
});
|
|
22
|
+
exports.acceptOfferSchema = zod_1.z.object({
|
|
23
|
+
intentId: zod_1.z.string().describe('Intent ID'),
|
|
24
|
+
offerId: zod_1.z.string().describe('Offer ID to accept'),
|
|
25
|
+
});
|
|
26
|
+
async function postIntent(params, client) {
|
|
27
|
+
const account = client.getAccount();
|
|
28
|
+
const walletClient = client.getWalletClient();
|
|
29
|
+
const publicClient = client.getPublicClient();
|
|
30
|
+
const contracts = client.getContracts();
|
|
31
|
+
try {
|
|
32
|
+
const budget = client.parseUSDC(params.budget);
|
|
33
|
+
const deadlineMs = parseDeadline(params.deadline);
|
|
34
|
+
const deadlineSeconds = Math.floor(deadlineMs / 1000);
|
|
35
|
+
const metadata = JSON.stringify({
|
|
36
|
+
requirements: params.requirements || {},
|
|
37
|
+
});
|
|
38
|
+
const hash = await walletClient.writeContract({
|
|
39
|
+
address: contracts.intent,
|
|
40
|
+
abi: contracts_1.INTENT_ABI,
|
|
41
|
+
functionName: 'postIntent',
|
|
42
|
+
args: [params.description, params.tags, budget, BigInt(deadlineSeconds), metadata],
|
|
43
|
+
account,
|
|
44
|
+
});
|
|
45
|
+
const receipt = await publicClient.waitForTransactionReceipt({ hash });
|
|
46
|
+
// Parse intent ID from event logs
|
|
47
|
+
let intentId = '0';
|
|
48
|
+
if (receipt.logs && receipt.logs.length > 0) {
|
|
49
|
+
const intentPostedLog = receipt.logs.find((log) => log.topics && log.topics.length > 1);
|
|
50
|
+
if (intentPostedLog && intentPostedLog.topics) {
|
|
51
|
+
intentId = BigInt(intentPostedLog.topics[1]).toString();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
intentId,
|
|
56
|
+
transactionHash: hash,
|
|
57
|
+
description: params.description,
|
|
58
|
+
tags: params.tags,
|
|
59
|
+
budget: params.budget,
|
|
60
|
+
deadline: deadlineMs,
|
|
61
|
+
status: 'open',
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
throw new Error(`Failed to post intent: ${error.message}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
async function searchIntents(params, client) {
|
|
69
|
+
const publicClient = client.getPublicClient();
|
|
70
|
+
const contracts = client.getContracts();
|
|
71
|
+
try {
|
|
72
|
+
// Get IntentPosted events
|
|
73
|
+
const latestBlock = await publicClient.getBlockNumber();
|
|
74
|
+
const fromBlock = latestBlock - BigInt(10000); // Last ~10k blocks
|
|
75
|
+
const logs = await publicClient.getLogs({
|
|
76
|
+
address: contracts.intent,
|
|
77
|
+
event: contracts_1.INTENT_ABI.find(e => e.type === 'event' && e.name === 'IntentPosted'),
|
|
78
|
+
fromBlock,
|
|
79
|
+
toBlock: 'latest',
|
|
80
|
+
});
|
|
81
|
+
const intents = [];
|
|
82
|
+
for (const log of logs) {
|
|
83
|
+
const { intentId, poster } = log.args;
|
|
84
|
+
try {
|
|
85
|
+
const [description, tags, budget, deadline, status, offerCount] = await publicClient.readContract({
|
|
86
|
+
address: contracts.intent,
|
|
87
|
+
abi: contracts_1.INTENT_ABI,
|
|
88
|
+
functionName: 'getIntent',
|
|
89
|
+
args: [intentId],
|
|
90
|
+
});
|
|
91
|
+
const budgetFormatted = client.formatUSDC(budget);
|
|
92
|
+
// Apply filters
|
|
93
|
+
if (params.tags && params.tags.length > 0) {
|
|
94
|
+
const intentTags = tags;
|
|
95
|
+
const hasMatchingTag = params.tags.some(tag => intentTags.includes(tag));
|
|
96
|
+
if (!hasMatchingTag)
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
if (params.minBudget && parseFloat(budgetFormatted) < parseFloat(params.minBudget)) {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (params.maxBudget && parseFloat(budgetFormatted) > parseFloat(params.maxBudget)) {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
const statusMap = {
|
|
106
|
+
0: 'open',
|
|
107
|
+
1: 'accepted',
|
|
108
|
+
2: 'completed',
|
|
109
|
+
3: 'canceled',
|
|
110
|
+
};
|
|
111
|
+
intents.push({
|
|
112
|
+
intentId: intentId.toString(),
|
|
113
|
+
poster: poster,
|
|
114
|
+
description: description,
|
|
115
|
+
tags: tags,
|
|
116
|
+
budget: budgetFormatted,
|
|
117
|
+
deadline: Number(deadline) * 1000,
|
|
118
|
+
offers: Number(offerCount),
|
|
119
|
+
status: statusMap[Number(status)],
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const limitedIntents = intents.slice(0, params.limit);
|
|
127
|
+
return {
|
|
128
|
+
intents: limitedIntents,
|
|
129
|
+
total: limitedIntents.length,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
throw new Error(`Failed to search intents: ${error.message}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
async function acceptOffer(params, client) {
|
|
137
|
+
const account = client.getAccount();
|
|
138
|
+
const walletClient = client.getWalletClient();
|
|
139
|
+
const publicClient = client.getPublicClient();
|
|
140
|
+
const contracts = client.getContracts();
|
|
141
|
+
try {
|
|
142
|
+
const intentId = BigInt(params.intentId);
|
|
143
|
+
const offerId = BigInt(params.offerId);
|
|
144
|
+
const hash = await walletClient.writeContract({
|
|
145
|
+
address: contracts.intent,
|
|
146
|
+
abi: contracts_1.INTENT_ABI,
|
|
147
|
+
functionName: 'acceptOffer',
|
|
148
|
+
args: [intentId, offerId],
|
|
149
|
+
account,
|
|
150
|
+
});
|
|
151
|
+
const receipt = await publicClient.waitForTransactionReceipt({ hash });
|
|
152
|
+
// Parse offer details and escrow ID from events
|
|
153
|
+
let escrowId = '0';
|
|
154
|
+
let provider = '0x0000000000000000000000000000000000000000';
|
|
155
|
+
if (receipt.logs && receipt.logs.length > 0) {
|
|
156
|
+
const offerAcceptedLog = receipt.logs.find((log) => log.topics && log.topics.length > 2);
|
|
157
|
+
if (offerAcceptedLog && offerAcceptedLog.topics) {
|
|
158
|
+
escrowId = BigInt(offerAcceptedLog.topics[2]).toString();
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
transactionHash: hash,
|
|
163
|
+
intentId: params.intentId,
|
|
164
|
+
offerId: params.offerId,
|
|
165
|
+
provider,
|
|
166
|
+
escrowId,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
throw new Error(`Failed to accept offer: ${error.message}`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
function parseDeadline(deadline) {
|
|
174
|
+
// Try parsing as ISO date first
|
|
175
|
+
const date = new Date(deadline);
|
|
176
|
+
if (!isNaN(date.getTime())) {
|
|
177
|
+
return date.getTime();
|
|
178
|
+
}
|
|
179
|
+
// Otherwise parse as duration from now
|
|
180
|
+
const days = deadline.match(/P(\d+)D/);
|
|
181
|
+
const hours = deadline.match(/PT?(\d+)H/);
|
|
182
|
+
const minutes = deadline.match(/PT?(\d+)M/);
|
|
183
|
+
let ms = Date.now();
|
|
184
|
+
if (days)
|
|
185
|
+
ms += parseInt(days[1]) * 24 * 60 * 60 * 1000;
|
|
186
|
+
if (hours)
|
|
187
|
+
ms += parseInt(hours[1]) * 60 * 60 * 1000;
|
|
188
|
+
if (minutes)
|
|
189
|
+
ms += parseInt(minutes[1]) * 60 * 1000;
|
|
190
|
+
return ms;
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=intent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent.js","sourceRoot":"","sources":["../../src/tools/intent.ts"],"names":[],"mappings":"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"}
|