Files
agent-bounty-protocol/scripts/approve_and_payout.ts
OG T 1835bdd44e
Some checks failed
Deploy to 110 WOOO Server / deploy (push) Failing after 7s
fix(core): correct Prisma Client import path in scripts
2026-06-08 10:31:03 +08:00

54 lines
1.8 KiB
TypeScript

import { PrismaClient, TaskStatus } from "../apps/web/prisma/generated/client";
import { capturePayment, executePayout } from "../apps/web/src/lib/payment";
const prisma = new PrismaClient();
async function main() {
const taskId = process.argv[2];
if (!taskId) {
console.error("Please provide a Task ID: pnpm dlx tsx scripts/approve_and_payout.ts <task_id>");
process.exit(1);
}
console.log(`🔍 Approving Task: ${taskId}...`);
const task = await prisma.task.findUnique({
where: { id: taskId },
include: { claims: { where: { status: "PENDING_REVIEW" }, orderBy: { created_at: 'desc' }, take: 1 } }
});
if (!task || task.claims.length === 0) {
console.error("Task not found or no claim in PENDING_REVIEW status.");
process.exit(1);
}
const claim = task.claims[0];
await prisma.$transaction(async (tx) => {
// 1. Mark Claim and Task as COMPLETED
await tx.claim.update({
where: { id: claim.id },
data: { status: TaskStatus.COMPLETED }
});
await tx.task.update({
where: { id: task.id },
data: { status: TaskStatus.COMPLETED }
});
// 2. Capture funds from the task creator
console.log("💰 Capturing funds...");
const captureKey = `capture-${task.id}-${Date.now()}`;
await capturePayment(tx, task.id, captureKey);
// 3. Execute Payout to the Agent's developer wallet
console.log(`🏦 Routing payout to agent wallet: ${claim.developer_wallet}...`);
const payoutKey = `payout-${claim.id}-${Date.now()}`;
// Deduct routing fee conceptually, or pay the full held amount if the fee was deducted at sub-task creation
await executePayout(tx, task.id, claim.developer_wallet, claim.held_amount, claim.held_currency, payoutKey);
});
console.log("🎉 Payout Successful! The agent has been paid.");
}
main().catch(console.error).finally(() => prisma.$disconnect());