@virtuals-protocol/acp-node 0.1.0-beta.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.
- package/README.md +207 -0
- package/buyer.ts +47 -0
- package/docs/imgs/acp-banner.jpeg +0 -0
- package/examples/acp_base/README.md +94 -0
- package/examples/acp_base/docs/imgs/agent-wallet-page.png +0 -0
- package/examples/acp_base/docs/imgs/session-entity-id-location.png +0 -0
- package/examples/acp_base/docs/imgs/whitelist-wallet-info.png +0 -0
- package/examples/acp_base/docs/imgs/whitelist-wallet.png +0 -0
- package/examples/acp_base/external_evaluation/.env.example +5 -0
- package/examples/acp_base/external_evaluation/buyer.ts +52 -0
- package/examples/acp_base/external_evaluation/env.ts +22 -0
- package/examples/acp_base/external_evaluation/evaluator.ts +29 -0
- package/examples/acp_base/external_evaluation/seller.ts +46 -0
- package/examples/acp_base/self_evaluation/.env.example +4 -0
- package/examples/acp_base/self_evaluation/buyer.ts +54 -0
- package/examples/acp_base/self_evaluation/env.ts +21 -0
- package/examples/acp_base/self_evaluation/seller.ts +46 -0
- package/helpers/.env.example +3 -0
- package/helpers/acpHelperFunctions.ts +69 -0
- package/interfaces.ts +24 -0
- package/package.json +26 -0
- package/seller.ts +46 -0
- package/src/acpAbi.ts +680 -0
- package/src/acpClient.ts +458 -0
- package/src/acpContractClient.ts +269 -0
- package/src/acpJob.ts +91 -0
- package/src/acpJobOffering.ts +43 -0
- package/src/acpMemo.ts +32 -0
- package/src/configs.ts +28 -0
- package/src/index.ts +18 -0
- package/src/interfaces.ts +55 -0
- package/test.ts +26 -0
- package/tsconfig.json +113 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import AcpClient from "../src/acpClient";
|
|
2
|
+
import AcpContractClient from "../src/acpContractClient";
|
|
3
|
+
import { baseSepoliaAcpConfig } from "../src/configs";
|
|
4
|
+
import * as dotenv from "dotenv";
|
|
5
|
+
import { Address } from "viem";
|
|
6
|
+
|
|
7
|
+
// Load environment variables
|
|
8
|
+
dotenv.config({ override: true });
|
|
9
|
+
|
|
10
|
+
async function testHelperFunctions() {
|
|
11
|
+
console.log("Testing ACP helper functions...");
|
|
12
|
+
|
|
13
|
+
// Initialize AcpClient
|
|
14
|
+
const acpClient = new AcpClient({
|
|
15
|
+
acpContractClient: await AcpContractClient.build(
|
|
16
|
+
process.env.WHITELISTED_WALLET_PRIVATE_KEY as `0x${string}`,
|
|
17
|
+
Number(process.env.WHITELISTED_WALLET_ENTITY_ID),
|
|
18
|
+
process.env.BUYER_AGENT_WALLET_ADDRESS as Address,
|
|
19
|
+
baseSepoliaAcpConfig
|
|
20
|
+
)
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
// Get active jobs
|
|
24
|
+
const activeJobs = await acpClient.getActiveJobs(1, 10);
|
|
25
|
+
console.log("\n🔵 Active Jobs:");
|
|
26
|
+
console.log(activeJobs.length > 0 ? activeJobs : "No active jobs found.");
|
|
27
|
+
|
|
28
|
+
// Get completed jobs
|
|
29
|
+
const completedJobs = await acpClient.getCompletedJobs(1, 10);
|
|
30
|
+
console.log("\n✅ Completed Jobs:");
|
|
31
|
+
console.log(completedJobs.length > 0 ? completedJobs : "No completed jobs found.");
|
|
32
|
+
|
|
33
|
+
// Get cancelled jobs
|
|
34
|
+
const cancelledJobs = await acpClient.getCancelledJobs(1, 10);
|
|
35
|
+
console.log("\n❌ Cancelled Jobs:");
|
|
36
|
+
console.log(cancelledJobs.length > 0 ? cancelledJobs : "No cancelled jobs found.");
|
|
37
|
+
|
|
38
|
+
if (completedJobs.length > 0) {
|
|
39
|
+
const onChainJobId = completedJobs[0].id;
|
|
40
|
+
if (onChainJobId) {
|
|
41
|
+
const job = await acpClient.getJobById(onChainJobId);
|
|
42
|
+
console.log(`\n📄 Job Details (Job ID: ${onChainJobId}):`);
|
|
43
|
+
console.log(job);
|
|
44
|
+
|
|
45
|
+
const memos = completedJobs[0].memos;
|
|
46
|
+
if (memos && memos.length > 0) {
|
|
47
|
+
const memoId = memos[0].id;
|
|
48
|
+
const memo = await acpClient.getMemoById(onChainJobId, memoId);
|
|
49
|
+
console.log(`\n📝 Memo Details (Job ID: ${onChainJobId}, Memo ID: ${memoId}):`);
|
|
50
|
+
console.log(memo);
|
|
51
|
+
} else {
|
|
52
|
+
console.log("\n⚠️ No memos found for the completed job.");
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
} else {
|
|
56
|
+
console.log("\n⚠️ No completed jobs available for detailed inspection.");
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Run the test
|
|
61
|
+
testHelperFunctions()
|
|
62
|
+
.then(() => {
|
|
63
|
+
console.log("\n✨ Test completed successfully");
|
|
64
|
+
process.exit(0);
|
|
65
|
+
})
|
|
66
|
+
.catch(error => {
|
|
67
|
+
console.error("Error in helper functions test:", error);
|
|
68
|
+
process.exit(1);
|
|
69
|
+
});
|
package/interfaces.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Address } from "viem";
|
|
2
|
+
|
|
3
|
+
export type AcpAgent = {
|
|
4
|
+
id: number;
|
|
5
|
+
documentId: string;
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
walletAddress: Address;
|
|
9
|
+
isVirtualAgent: boolean;
|
|
10
|
+
profilePic: string;
|
|
11
|
+
category: string;
|
|
12
|
+
tokenAddress: string | null;
|
|
13
|
+
ownerAddress: string;
|
|
14
|
+
cluster: string | null;
|
|
15
|
+
twitterHandle: string;
|
|
16
|
+
offerings: {
|
|
17
|
+
name: string;
|
|
18
|
+
price: number;
|
|
19
|
+
requirementSchema?: Object;
|
|
20
|
+
deliverableSchema?: Object;
|
|
21
|
+
}[];
|
|
22
|
+
symbol: string | null;
|
|
23
|
+
virtualAgentId: string | null;
|
|
24
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@virtuals-protocol/acp-node",
|
|
3
|
+
"version": "0.1.0-beta.1",
|
|
4
|
+
"main": "./dist/index.js",
|
|
5
|
+
"module": "./dist/index.mjs",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
9
|
+
"tsup": "tsup src/index.ts --dts --format cjs,esm --out-dir dist"
|
|
10
|
+
},
|
|
11
|
+
"author": "",
|
|
12
|
+
"license": "ISC",
|
|
13
|
+
"description": "",
|
|
14
|
+
"devDependencies": {
|
|
15
|
+
"typescript": "^5.8.3"
|
|
16
|
+
},
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"@aa-sdk/core": "^4.30.0",
|
|
19
|
+
"@account-kit/infra": "^4.30.0",
|
|
20
|
+
"@account-kit/smart-contracts": "^4.30.0",
|
|
21
|
+
"ajv": "^8.17.1",
|
|
22
|
+
"socket.io-client": "^4.8.1",
|
|
23
|
+
"tsup": "^8.5.0",
|
|
24
|
+
"viem": "^2.28.2"
|
|
25
|
+
}
|
|
26
|
+
}
|
package/seller.ts
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import AcpClient, {
|
|
2
|
+
AcpContractClient,
|
|
3
|
+
AcpJob,
|
|
4
|
+
AcpJobPhases,
|
|
5
|
+
baseSepoliaAcpConfig,
|
|
6
|
+
} from "./dist/index.mjs";
|
|
7
|
+
|
|
8
|
+
async function seller() {
|
|
9
|
+
const config = baseSepoliaAcpConfig;
|
|
10
|
+
config.acpUrl = "https://acpx.virtuals.gg";
|
|
11
|
+
|
|
12
|
+
new AcpClient({
|
|
13
|
+
acpContractClient: await AcpContractClient.build(
|
|
14
|
+
"0x28d641a2851134ace8673ae320ffed9f77826a52fadc813c55dd22c2870acf3b",
|
|
15
|
+
1,
|
|
16
|
+
"0x88Be2314fd1d9f3BFE07Af252fbf96aF636FD68E",
|
|
17
|
+
config
|
|
18
|
+
),
|
|
19
|
+
onNewTask: async (job: AcpJob) => {
|
|
20
|
+
console.log(job);
|
|
21
|
+
|
|
22
|
+
if (
|
|
23
|
+
job.phase === AcpJobPhases.REQUEST &&
|
|
24
|
+
job.memos.find((m) => m.nextPhase === AcpJobPhases.NEGOTIATION)
|
|
25
|
+
) {
|
|
26
|
+
console.log("Responding to job", job);
|
|
27
|
+
await job.respond(true);
|
|
28
|
+
console.log(`Job ${job.id} responded`);
|
|
29
|
+
} else if (
|
|
30
|
+
job.phase === AcpJobPhases.TRANSACTION &&
|
|
31
|
+
job.memos.find((m) => m.nextPhase === AcpJobPhases.EVALUATION)
|
|
32
|
+
) {
|
|
33
|
+
console.log("Delivering job", job);
|
|
34
|
+
await job.deliver(
|
|
35
|
+
JSON.stringify({
|
|
36
|
+
type: "url",
|
|
37
|
+
value: "https://example.com",
|
|
38
|
+
})
|
|
39
|
+
);
|
|
40
|
+
console.log(`Job ${job.id} delivered`);
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
seller();
|