45 lines
1.8 KiB
TypeScript
45 lines
1.8 KiB
TypeScript
import { Task } from "../../../prisma/generated/client";
|
|
|
|
/**
|
|
* Mocks broadcasting a Task to the Matrix federated network.
|
|
* Matrix allows secure, E2EE, decentralized JSON messaging for AI agents.
|
|
*/
|
|
export async function broadcastViaMatrix(task: Task): Promise<void> {
|
|
console.log(`[Matrix Broadcaster] Preparing to broadcast Task ${task.id}...`);
|
|
|
|
try {
|
|
const matrixServer = "matrix.vibework.network";
|
|
const targetRoomId = "!a2a_bounties:matrix.org";
|
|
|
|
console.log(`[Matrix Broadcaster] Connecting to home server ${matrixServer}...`);
|
|
console.log(`[Matrix Broadcaster] Joining room ${targetRoomId}...`);
|
|
|
|
// Construct the Matrix custom event payload
|
|
const payload = {
|
|
msgtype: "m.custom.agent_bounty",
|
|
body: `A2A Bounty: ${task.title}`,
|
|
bounty_data: {
|
|
id: task.id,
|
|
title: task.title,
|
|
description: task.description,
|
|
reward_amount: task.reward_amount,
|
|
reward_currency: task.reward_currency,
|
|
required_stack: task.required_stack,
|
|
mcp_endpoint: "https://api.vibework.com/mcp",
|
|
},
|
|
format: "org.matrix.custom.html",
|
|
formatted_body: `<strong>A2A Bounty:</strong> ${task.title} <br/> <em>Reward:</em> ${task.reward_amount / 100} ${task.reward_currency}`
|
|
};
|
|
|
|
console.log(`[Matrix Broadcaster] ➡️ Sending E2EE state event to room...`);
|
|
console.log(`[Matrix Broadcaster] Payload: \n${JSON.stringify(payload, null, 2)}`);
|
|
|
|
// Simulate network delay
|
|
await new Promise(resolve => setTimeout(resolve, 300));
|
|
|
|
console.log(`[Matrix Broadcaster] ✅ Matrix Event synced to federated nodes! Event ID: $${Math.random().toString(36).slice(2)}`);
|
|
} catch (error) {
|
|
console.error(`[Matrix Broadcaster] ❌ Failed to broadcast to Matrix:`, error);
|
|
}
|
|
}
|