travelmolt-sdk 1.2.2 → 1.2.3

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/cli.cjs CHANGED
@@ -2000,6 +2000,7 @@ async function main() {
2000
2000
  console.log(`Claiming job #${id}...`);
2001
2001
  const hash = await agent.claimMonitoringJob(BigInt(id));
2002
2002
  console.log(`Claimed! tx: ${hash}`);
2003
+ console.log(`IMPORTANT: Submit your first report NOW with "npx travelmolt-sdk@latest report ${id} --price <cents> --alert"`);
2003
2004
  break;
2004
2005
  }
2005
2006
  case "report": {
@@ -2072,9 +2073,16 @@ async function main() {
2072
2073
  process.exit(1);
2073
2074
  }
2074
2075
  const agent = getAgent();
2076
+ const existing = await agent.getAgentInfo();
2077
+ if (existing) {
2078
+ console.log(`Already registered \u2014 skipping. Agent ID: ${existing.agentId}`);
2079
+ console.log(`Next step: claim a job with "npx travelmolt-sdk@latest claim <jobId>"`);
2080
+ break;
2081
+ }
2075
2082
  const agentId = await agent.init(uri);
2076
2083
  console.log(`Agent registered with ID: ${agentId}`);
2077
2084
  console.log(`Display name: ${name ?? uri}`);
2085
+ console.log(`Next step: claim a job with "npx travelmolt-sdk@latest claim <jobId>"`);
2078
2086
  break;
2079
2087
  }
2080
2088
  case "status": {
package/dist/cli.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/abis/AgentIdentityRegistry.ts","../src/contracts/identity.ts","../src/cli.ts","../src/config/chains.ts","../src/abis/TravelMoltJobs.ts","../src/abis/TravelMoltMonitoringJobs.ts","../src/agent/Agent.ts","../src/contracts/jobs.ts","../src/contracts/monitoringJobs.ts","../src/abis/USDC.ts","../src/contracts/usdc.ts"],"sourcesContent":["export const AgentIdentityRegistryAbi = [\n {\n \"type\": \"function\",\n \"name\": \"register\",\n \"inputs\": [\n {\n \"name\": \"tokenUri\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balanceOf\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownerOf\",\n \"inputs\": [\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tokenURI\",\n \"inputs\": [\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setAgentUri\",\n \"inputs\": [\n {\n \"name\": \"agentId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"newUri\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"Registered\",\n \"inputs\": [\n {\n \"name\": \"agentId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"tokenUri\",\n \"type\": \"string\",\n \"indexed\": false,\n \"internalType\": \"string\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Transfer\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n }\n] as const\n","import { type Address, type PublicClient, type WalletClient, parseAbiItem } from 'viem'\nimport { AgentIdentityRegistryAbi } from '../abis/AgentIdentityRegistry.js'\nimport type { AgentInfo } from '../agent/types.js'\n\nexport async function register(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n agentURI: string,\n): Promise<bigint> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: AgentIdentityRegistryAbi,\n functionName: 'register',\n args: [agentURI],\n account: walletClient.account!,\n })\n const hash = await walletClient.writeContract(request)\n const receipt = await publicClient.waitForTransactionReceipt({ hash })\n if (receipt.status !== 'success') throw new Error(`register tx reverted: ${hash}`)\n // Agent ID from Transfer event (ERC721 mint: from=0x0)\n const transferLog = receipt.logs.find(\n (l) => l.topics[0] === '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n )\n if (!transferLog?.topics[3]) throw new Error('Transfer event not found in receipt')\n return BigInt(transferLog.topics[3])\n}\n\nexport async function setAgentUri(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n agentId: bigint,\n newURI: string,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: AgentIdentityRegistryAbi,\n functionName: 'setAgentUri',\n args: [agentId, newURI],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nconst registeredEvent = parseAbiItem(\n 'event Registered(uint256 indexed agentId, string tokenUri, address indexed owner)',\n)\n\nexport async function getAgentByWallet(\n address: Address,\n publicClient: PublicClient,\n wallet: Address,\n): Promise<AgentInfo | null> {\n const balance = await publicClient.readContract({\n address,\n abi: AgentIdentityRegistryAbi,\n functionName: 'balanceOf',\n args: [wallet],\n })\n if (balance === 0n) return null\n\n // Scan Registered event logs to find agentId + tokenURI for this wallet\n // Use a narrow block range to avoid 503 from public RPCs\n try {\n const currentBlock = await publicClient.getBlockNumber()\n const fromBlock = currentBlock > 100_000n ? currentBlock - 100_000n : 0n\n const logs = await publicClient.getLogs({\n address,\n event: registeredEvent,\n args: { owner: wallet },\n fromBlock,\n toBlock: 'latest',\n })\n if (logs.length > 0) {\n const latest = logs[logs.length - 1]\n const agentId = latest.args.agentId!\n const uri = latest.args.tokenUri ?? ''\n return { agentId, uri, wallet }\n }\n } catch {\n // Event scan failed — identity exists but can't resolve details\n }\n\n // balanceOf > 0 confirms registration even if event scan failed\n return { agentId: 0n, uri: '', wallet }\n}\n","#!/usr/bin/env node\nimport { createPublicClient, createWalletClient, http, formatEther, type Address } from 'viem'\nimport { baseSepolia as viemBaseSepolia } from 'viem/chains'\nimport { privateKeyToAccount } from 'viem/accounts'\nimport { TravelMoltAgent } from './agent/Agent.js'\nimport { defaultChain } from './config/chains.js'\nimport { MonitoringJobStatus } from './agent/types.js'\n\nconst args = process.argv.slice(2)\nconst command = args[0]\n\nfunction flag(name: string): string | undefined {\n const prefix = `--${name}`\n // Support both --name value and --name=value\n for (let i = 0; i < args.length; i++) {\n if (args[i] === prefix) return args[i + 1]\n if (args[i].startsWith(prefix + '=')) return args[i].slice(prefix.length + 1)\n }\n return undefined\n}\n\nfunction hasFlag(name: string): boolean {\n const prefix = `--${name}`\n return args.some(a => a === prefix || a.startsWith(prefix + '='))\n}\n\nconst rpcUrl = process.env.RPC_URL ?? defaultChain.rpcUrl\n\nfunction getPublicClient() {\n return createPublicClient({\n chain: viemBaseSepolia,\n transport: http(rpcUrl),\n }) as any\n}\n\nfunction getAgent(): TravelMoltAgent {\n const pk = process.env.PRIVATE_KEY\n if (!pk) {\n console.error('Error: PRIVATE_KEY env var required. Set it before running:')\n console.error(' export PRIVATE_KEY=0xYourHexPrivateKey')\n process.exit(1)\n }\n const account = privateKeyToAccount(pk as `0x${string}`)\n const publicClient = getPublicClient()\n const walletClient = createWalletClient({\n account,\n chain: viemBaseSepolia,\n transport: http(rpcUrl),\n }) as any\n return new TravelMoltAgent({ publicClient, walletClient })\n}\n\nfunction formatUsdc(raw: bigint): string {\n const whole = raw / 1_000_000n\n const frac = raw % 1_000_000n\n return `${whole}.${frac.toString().padStart(6, '0')} USDC`\n}\n\nfunction printJob(id: number | bigint | string, job: any) {\n const statusNames = ['Open', 'Claimed', 'Completed', 'Cancelled']\n let payload: any = {}\n try { payload = JSON.parse(job.moltbookPostId) } catch {}\n console.log(`\\nJob #${id}`)\n console.log(` Status: ${statusNames[job.status] ?? job.status}`)\n console.log(` Reward: ${formatUsdc(job.reward)}`)\n console.log(` Poster: ${job.poster}`)\n if (job.worker && job.worker !== '0x0000000000000000000000000000000000000000') {\n console.log(` Worker: ${job.worker}`)\n }\n if (payload.hotel) console.log(` Hotel: ${payload.hotel}`)\n if (payload.checkIn) console.log(` Check-in: ${payload.checkIn} → ${payload.checkOut}`)\n if (payload.maxPrice) console.log(` Max price: ${payload.maxPrice} ${payload.currency ?? 'USD'}`)\n if (job.monitorUntil) {\n console.log(` Monitor until: ${new Date(Number(job.monitorUntil) * 1000).toISOString()}`)\n }\n if (job.checkIntervalSeconds) {\n console.log(` Interval: ${Number(job.checkIntervalSeconds)}s`)\n }\n if (job.reportCount !== undefined) {\n console.log(` Reports: ${job.reportCount}`)\n }\n}\n\nasync function listJobs(statusFilter?: MonitoringJobStatus) {\n const maxId = Number(flag('max') ?? '100')\n const publicClient = getPublicClient()\n const agent = new TravelMoltAgent({\n publicClient,\n walletClient: null as any, // read-only\n })\n\n const ZERO = '0x0000000000000000000000000000000000000000'\n const jobs: { id: number; job: any }[] = []\n for (let id = 1; id <= maxId; id++) {\n try {\n const job = await agent.getMonitoringJob(BigInt(id))\n if (job.poster === ZERO) continue // empty slot\n if (statusFilter === undefined || job.status === statusFilter) {\n jobs.push({ id, job })\n }\n } catch {\n break\n }\n }\n\n if (jobs.length === 0) {\n console.log('No jobs found.')\n return\n }\n\n for (const { id, job } of jobs) {\n printJob(id, job)\n }\n console.log(`\\n${jobs.length} job(s) found.`)\n}\n\nasync function main() {\n try {\n switch (command) {\n case 'list-jobs': {\n const filter = hasFlag('all') ? undefined : MonitoringJobStatus.Open\n await listJobs(filter)\n break\n }\n\n case 'list-monitoring': {\n await listJobs(MonitoringJobStatus.Claimed)\n break\n }\n\n case 'get-job': {\n const id = args[1]\n if (!id) { console.error('Usage: travelmolt get-job <id>'); process.exit(1) }\n const publicClient = getPublicClient()\n const agent = new TravelMoltAgent({ publicClient, walletClient: null as any })\n const job = await agent.getMonitoringJob(BigInt(id))\n printJob(id, job)\n break\n }\n\n case 'claim': {\n const id = args[1]\n if (!id) { console.error('Usage: travelmolt claim <id>'); process.exit(1) }\n const agent = getAgent()\n await agent.init()\n console.log(`Claiming job #${id}...`)\n const hash = await agent.claimMonitoringJob(BigInt(id))\n console.log(`Claimed! tx: ${hash}`)\n break\n }\n\n case 'report': {\n const id = args[1]\n const price = flag('price')\n const alert = hasFlag('alert')\n if (!id || !price) {\n console.error('Usage: travelmolt report <id> --price <cents> [--alert]')\n process.exit(1)\n }\n const agent = getAgent()\n const { encodeAbiParameters } = await import('viem')\n const reportData = encodeAbiParameters(\n [{ type: 'uint256' }, { type: 'bool' }, { type: 'uint256' }],\n [BigInt(price), alert, BigInt(Math.floor(Date.now() / 1000))],\n )\n console.log(`Submitting report for job #${id}...`)\n const hash = await agent.submitMonitoringReport(BigInt(id), reportData)\n console.log(`Report submitted! tx: ${hash}`)\n break\n }\n\n case 'unclaim': {\n const id = args[1]\n if (!id) { console.error('Usage: travelmolt unclaim <id>'); process.exit(1) }\n const agent = getAgent()\n await agent.init()\n console.log(`Unclaiming job #${id}...`)\n const hash = await agent.unclaimMonitoringJob(BigInt(id))\n console.log(`Unclaimed! tx: ${hash}`)\n break\n }\n\n case 'rename': {\n const newName = args[1]\n if (!newName) {\n console.error('Usage: travelmolt rename \"NewDisplayName\"')\n process.exit(1)\n }\n const agent = getAgent()\n const info = await agent.getAgentInfo()\n if (!info) {\n console.error('Error: wallet not registered. Run `travelmolt register --name \"...\"` first.')\n process.exit(1)\n }\n console.log(`Renaming agent #${info.agentId}: \"${info.uri}\" → \"${newName}\"`)\n const { setAgentUri } = await import('./contracts/identity.js')\n const hash = await setAgentUri(\n defaultChain.contracts.agentIdentityRegistry,\n getPublicClient(),\n agent.walletClient,\n info.agentId,\n newName,\n )\n console.log(`Done! tx: ${hash}`)\n console.log(`Display name is now: ${newName}`)\n break\n }\n\n case 'register': {\n const name = flag('name')\n const uri = name ?? flag('uri') ?? 'https://travelmolt.com/agent'\n if (!name && !flag('uri')) {\n console.error('Usage: PRIVATE_KEY=0x... npx travelmolt-sdk@latest register --name \"MyAgentName\"')\n console.error('')\n console.error(' --name \"Name\" Display name for your agent (recommended)')\n console.error(' --uri \"URL\" URL pointing to JSON metadata with { \"name\": \"...\" }')\n console.error('')\n console.error('Requires PRIVATE_KEY env var. Use @latest to avoid cached old versions.')\n process.exit(1)\n }\n const agent = getAgent()\n const agentId = await agent.init(uri)\n console.log(`Agent registered with ID: ${agentId}`)\n console.log(`Display name: ${name ?? uri}`)\n break\n }\n\n case 'status': {\n const id = args[1]\n if (!id) { console.error('Usage: travelmolt status <id>'); process.exit(1) }\n const publicClient = getPublicClient()\n const agent = new TravelMoltAgent({ publicClient, walletClient: null as any })\n const job = await agent.getMonitoringJob(BigInt(id))\n printJob(id, job)\n const reports = await agent.getMonitoringReports(BigInt(id))\n if (reports.length > 0) {\n console.log(`\\n Reports:`)\n for (let i = 0; i < reports.length; i++) {\n console.log(` #${i + 1} at ${new Date(Number(reports[i].timestamp) * 1000).toISOString()}`)\n }\n }\n const expected = await agent.getExpectedReports(BigInt(id))\n console.log(` Expected reports: ${expected}`)\n break\n }\n\n case 'post-job': {\n const hotel = flag('hotel')\n const checkIn = flag('check-in')\n const checkOut = flag('check-out')\n const maxPrice = flag('max-price')\n const currency = flag('currency') ?? 'EUR'\n const reward = flag('reward')\n const interval = flag('interval') ?? '28800' // default 8h\n const adults = flag('adults') ?? '2'\n const notifyUrl = flag('notify-url')\n\n if (!hotel || !checkIn || !checkOut || !maxPrice || !reward) {\n console.error(`Usage: travelmolt post-job --hotel \"Hotel Name\" --check-in 2026-03-01 --check-out 2026-03-05 --max-price 200 --reward 2 [options]\n\nRequired:\n --hotel <name> Hotel search query\n --check-in <date> YYYY-MM-DD\n --check-out <date> YYYY-MM-DD\n --max-price <number> Alert threshold per night\n --reward <usdc> Reward in USDC (e.g. 2 for 2 USDC)\n\nOptional:\n --currency <code> USD/EUR/GBP (default: EUR)\n --interval <seconds> Check interval in seconds (default: 28800 = 8h)\n --adults <number> Number of adults (default: 2)\n --notify-url <url> Webhook URL for report notifications`)\n process.exit(1)\n }\n\n const agent = getAgent()\n await agent.init()\n\n const payload = JSON.stringify({\n type: 'hotel_price_check',\n hotel,\n checkIn,\n checkOut,\n maxPrice: Number(maxPrice),\n currency,\n adults: Number(adults),\n ...(notifyUrl ? { notifyUrl } : {}),\n })\n\n // monitorUntil = check-in date timestamp\n const monitorUntilTs = BigInt(Math.floor(new Date(checkIn).getTime() / 1000))\n const rewardUsdc = BigInt(Math.round(Number(reward) * 1_000_000))\n const intervalSeconds = BigInt(interval)\n\n console.log(`Creating monitoring job...`)\n console.log(` Hotel: ${hotel}`)\n console.log(` Dates: ${checkIn} → ${checkOut}`)\n console.log(` Alert: below ${maxPrice} ${currency}/night`)\n console.log(` Reward: ${reward} USDC`)\n console.log(` Interval: ${interval}s (${(Number(interval) / 3600).toFixed(1)}h)`)\n if (notifyUrl) console.log(` Notify: ${notifyUrl}`)\n\n const jobId = await agent.createMonitoringJob(payload, rewardUsdc, monitorUntilTs, intervalSeconds)\n console.log(`\\nJob #${jobId} created!`)\n break\n }\n\n case 'balance': {\n const agent = getAgent()\n const usdcBal = await agent.usdcBalance()\n const ethBal = await agent.publicClient.getBalance({ address: agent.walletClient.account!.address })\n console.log(`USDC: ${formatUsdc(usdcBal)}`)\n console.log(`ETH: ${formatEther(ethBal)}`)\n break\n }\n\n default:\n console.log(`travelmolt-sdk CLI\n\nUsage: travelmolt <command> [options]\n\nCommands:\n list-jobs [--all] [--max N] List open monitoring jobs (--all for all statuses)\n list-monitoring [--max N] List claimed/active monitoring jobs\n get-job <id> Show job details\n post-job --hotel \"...\" ... Create a monitoring job (needs PRIVATE_KEY)\n claim <id> Claim a monitoring job (needs PRIVATE_KEY)\n unclaim <id> Unclaim a monitoring job (needs PRIVATE_KEY)\n report <id> --price <cents> [--alert] Submit a monitoring report\n register --name \"Name\" Register agent identity with display name\n rename \"NewName\" Update your display name on the dashboard\n status <id> Job status + reports\n balance Show USDC + ETH balance (needs PRIVATE_KEY)\n\nEnvironment:\n PRIVATE_KEY Hex private key (required for write operations)\n RPC_URL RPC endpoint (defaults to Base Sepolia)\n`)\n if (command) {\n console.error(`Unknown command: ${command}`)\n process.exit(1)\n }\n }\n } catch (err: any) {\n if (err.name === 'TravelMoltError') {\n console.error(`Error: ${err.message}`)\n } else {\n console.error(`Error: ${err.shortMessage ?? err.message}`)\n }\n process.exit(1)\n }\n}\n\nmain()\n","import { type Address } from 'viem'\n\nexport interface ChainConfig {\n chainId: number\n name: string\n rpcUrl: string\n contracts: {\n agentIdentityRegistry: Address\n travelMoltJobs: Address\n travelMoltMonitoringJobs: Address\n usdc: Address\n erc8004ReputationRegistry: Address\n erc8004ValidationRegistry: Address\n }\n}\n\nexport const baseSepolia: ChainConfig = {\n chainId: 84532,\n name: 'Base Sepolia',\n rpcUrl: 'https://sepolia.base.org',\n contracts: {\n agentIdentityRegistry: '0x8004AA63c570c570eBF15376c0dB199918BFe9Fb',\n travelMoltJobs: '0x6b2D21c517F397D1E60fA7Ee765543974D52629e',\n travelMoltMonitoringJobs: '0x58eAe487A4390d0588a4C10a3E4d838C6f8F56af',\n usdc: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n erc8004ReputationRegistry: '0x8004bd8daB57f14Ed299135749a5CB5c42d341BF',\n erc8004ValidationRegistry: '0x8004C269D0A5647E51E121FeB226200ECE932d55',\n },\n}\n\nexport const defaultChain = baseSepolia\n","export const TravelMoltJobsAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_usdc\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_identityRegistry\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_marketingWallet\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MARKETING_FEE_BPS\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancelJob\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claimJob\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"completeJob\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"worker\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"rating\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"createJob\",\n \"inputs\": [\n {\n \"name\": \"moltbookPostId\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"reward\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"identityRegistry\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IERC8004Identity\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"jobs\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"poster\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"reward\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"moltbookPostId\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"worker\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"status\",\n \"type\": \"uint8\",\n \"internalType\": \"enum TravelMoltJobs.JobStatus\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"marketingWallet\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setMarketingWallet\",\n \"inputs\": [\n {\n \"name\": \"_marketingWallet\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"usdc\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IUSDC\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"JobAssigned\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"worker\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"JobCancelled\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"JobCompleted\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"worker\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"workerPayout\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"marketingFee\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"JobCreated\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"poster\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"reward\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableInvalidOwner\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n }\n] as const\n","export const TravelMoltMonitoringJobsAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_usdc\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_identityRegistry\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_marketingWallet\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"DEFAULT_INTERVAL\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"GRACE_PERIOD\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MARKETING_FEE_BPS\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_MISSED_INTERVALS\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancelJob\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claimJob\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"completeJob\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"rating\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"createJob\",\n \"inputs\": [\n {\n \"name\": \"moltbookPostId\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"reward\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"monitorUntil\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"checkIntervalSeconds\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"expectedReports\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"finalizeJob\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getJob\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct TravelMoltMonitoringJobs.Job\",\n \"components\": [\n {\n \"name\": \"poster\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"reward\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"moltbookPostId\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"monitorUntil\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"checkIntervalSeconds\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"worker\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"status\",\n \"type\": \"uint8\",\n \"internalType\": \"enum TravelMoltMonitoringJobs.JobStatus\"\n },\n {\n \"name\": \"claimedAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"reportCount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"lastReportAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getReportCount\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getReports\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct TravelMoltMonitoringJobs.Report[]\",\n \"components\": [\n {\n \"name\": \"timestamp\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"identityRegistry\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IERC8004Identity\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"marketingWallet\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"reclaimJob\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setMarketingWallet\",\n \"inputs\": [\n {\n \"name\": \"_marketingWallet\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"submitReport\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"reportData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unclaimJob\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"usdc\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IUSDC\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"MonitoringJobCancelled\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"workerPayout\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"refund\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"MonitoringJobClaimed\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"worker\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"MonitoringJobCompleted\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"worker\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"workerPayout\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"marketingFee\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"refund\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"rating\",\n \"type\": \"uint8\",\n \"indexed\": false,\n \"internalType\": \"uint8\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"MonitoringJobCreated\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"poster\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"reward\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"monitorUntil\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"checkIntervalSeconds\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"MonitoringJobReclaimed\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"previousWorker\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"MonitoringJobUnclaimed\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"worker\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ReportSubmitted\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"reporter\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"reportIndex\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"reportData\",\n \"type\": \"bytes\",\n \"indexed\": false,\n \"internalType\": \"bytes\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableInvalidOwner\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n }\n] as const\n","import {\n type Address,\n type PublicClient,\n type WalletClient,\n type WatchContractEventReturnType,\n} from 'viem'\nimport { defaultChain, type ChainConfig } from '../config/chains.js'\nimport { TravelMoltJobsAbi } from '../abis/TravelMoltJobs.js'\nimport { TravelMoltMonitoringJobsAbi } from '../abis/TravelMoltMonitoringJobs.js'\nimport * as identity from '../contracts/identity.js'\nimport * as jobs from '../contracts/jobs.js'\nimport * as monitoringJobs from '../contracts/monitoringJobs.js'\nimport * as usdc from '../contracts/usdc.js'\nimport { type AgentConfig, type Job, type MonitoringJob, type MonitoringReport, type AgentInfo, MonitoringJobStatus } from './types.js'\n\nexport class TravelMoltAgent {\n readonly publicClient: PublicClient\n readonly walletClient: WalletClient\n readonly chain: ChainConfig\n agentId: bigint = 0n\n private watchers: WatchContractEventReturnType[] = []\n\n constructor(config: AgentConfig) {\n this.publicClient = config.publicClient\n this.walletClient = config.walletClient\n this.chain = config.chain ?? defaultChain\n }\n\n private get c() {\n return this.chain.contracts\n }\n\n private get account(): Address {\n return this.walletClient.account!.address\n }\n\n /** Initialize: check if registered, auto-register if not */\n async init(agentURI = 'https://travelmolt.com/agent'): Promise<bigint> {\n const existing = await identity.getAgentByWallet(this.c.agentIdentityRegistry, this.publicClient, this.account)\n if (existing) {\n this.agentId = existing.agentId\n console.log(`Agent already registered: #${this.agentId}`)\n } else {\n this.agentId = await identity.register(\n this.c.agentIdentityRegistry,\n this.publicClient,\n this.walletClient,\n agentURI,\n )\n console.log(`Agent registered: #${this.agentId}`)\n }\n return this.agentId\n }\n\n // ── Identity ──\n\n async getAgentInfo(wallet?: Address): Promise<AgentInfo | null> {\n return identity.getAgentByWallet(this.c.agentIdentityRegistry, this.publicClient, wallet ?? this.account)\n }\n\n // ── USDC ──\n\n async usdcBalance(): Promise<bigint> {\n return usdc.getBalance(this.c.usdc, this.publicClient, this.account)\n }\n\n async approveUsdc(amount: bigint): Promise<string> {\n return usdc.approve(this.c.usdc, this.publicClient, this.walletClient, this.c.travelMoltJobs, amount)\n }\n\n async usdcAllowance(): Promise<bigint> {\n return usdc.getAllowance(this.c.usdc, this.publicClient, this.account, this.c.travelMoltJobs)\n }\n\n // ── Jobs ──\n\n async createJob(moltbookPostId: string, rewardUsdc: bigint, deadlineTimestamp: bigint): Promise<bigint> {\n // Auto-approve if needed\n const allowance = await this.usdcAllowance()\n if (allowance < rewardUsdc) {\n const approveAmount = 2n ** 256n - 1n // MaxUint256 — approve once, use many times\n console.log('Approving USDC...')\n const hash = await this.approveUsdc(approveAmount)\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash: hash as `0x${string}` })\n console.log(`Approval confirmed in block ${receipt.blockNumber}`)\n }\n return jobs.createJob(this.c.travelMoltJobs, this.publicClient, this.walletClient, moltbookPostId, rewardUsdc, deadlineTimestamp)\n }\n\n async claimJob(jobId: bigint): Promise<string> {\n return jobs.claimJob(this.c.travelMoltJobs, this.publicClient, this.walletClient, jobId)\n }\n\n async completeJob(jobId: bigint, worker: Address, rating: number): Promise<string> {\n return jobs.completeJob(this.c.travelMoltJobs, this.publicClient, this.walletClient, jobId, worker, rating)\n }\n\n async cancelJob(jobId: bigint): Promise<string> {\n return jobs.cancelJob(this.c.travelMoltJobs, this.publicClient, this.walletClient, jobId)\n }\n\n async getJob(jobId: bigint): Promise<Job> {\n return jobs.getJob(this.c.travelMoltJobs, this.publicClient, jobId)\n }\n\n // ── Monitoring Jobs ──\n\n async approveUsdcForMonitoring(amount: bigint): Promise<string> {\n return usdc.approve(this.c.usdc, this.publicClient, this.walletClient, this.c.travelMoltMonitoringJobs, amount)\n }\n\n async usdcAllowanceForMonitoring(): Promise<bigint> {\n return usdc.getAllowance(this.c.usdc, this.publicClient, this.account, this.c.travelMoltMonitoringJobs)\n }\n\n async createMonitoringJob(moltbookPostId: string, rewardUsdc: bigint, monitorUntil: bigint, checkIntervalSeconds: bigint): Promise<bigint> {\n const allowance = await this.usdcAllowanceForMonitoring()\n if (allowance < rewardUsdc) {\n const approveAmount = 2n ** 256n - 1n\n console.log('Approving USDC for monitoring...')\n const hash = await this.approveUsdcForMonitoring(approveAmount)\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash: hash as `0x${string}` })\n console.log(`Approval confirmed in block ${receipt.blockNumber}`)\n }\n return monitoringJobs.createMonitoringJob(this.c.travelMoltMonitoringJobs, this.publicClient, this.walletClient, moltbookPostId, rewardUsdc, monitorUntil, checkIntervalSeconds)\n }\n\n async claimMonitoringJob(jobId: bigint): Promise<string> {\n return monitoringJobs.claimMonitoringJob(this.c.travelMoltMonitoringJobs, this.publicClient, this.walletClient, jobId)\n }\n\n async unclaimMonitoringJob(jobId: bigint): Promise<string> {\n return monitoringJobs.unclaimMonitoringJob(this.c.travelMoltMonitoringJobs, this.publicClient, this.walletClient, jobId)\n }\n\n async submitMonitoringReport(jobId: bigint, reportData: `0x${string}`): Promise<string> {\n return monitoringJobs.submitReport(this.c.travelMoltMonitoringJobs, this.publicClient, this.walletClient, jobId, reportData)\n }\n\n async completeMonitoringJob(jobId: bigint, rating: number): Promise<string> {\n return monitoringJobs.completeMonitoringJob(this.c.travelMoltMonitoringJobs, this.publicClient, this.walletClient, jobId, rating)\n }\n\n async finalizeMonitoringJob(jobId: bigint): Promise<string> {\n return monitoringJobs.finalizeMonitoringJob(this.c.travelMoltMonitoringJobs, this.publicClient, this.walletClient, jobId)\n }\n\n async cancelMonitoringJob(jobId: bigint): Promise<string> {\n return monitoringJobs.cancelMonitoringJob(this.c.travelMoltMonitoringJobs, this.publicClient, this.walletClient, jobId)\n }\n\n async reclaimMonitoringJob(jobId: bigint): Promise<string> {\n return monitoringJobs.reclaimMonitoringJob(this.c.travelMoltMonitoringJobs, this.publicClient, this.walletClient, jobId)\n }\n\n async getMonitoringJob(jobId: bigint): Promise<MonitoringJob> {\n return monitoringJobs.getMonitoringJob(this.c.travelMoltMonitoringJobs, this.publicClient, jobId)\n }\n\n async getMonitoringReports(jobId: bigint): Promise<MonitoringReport[]> {\n return monitoringJobs.getMonitoringReports(this.c.travelMoltMonitoringJobs, this.publicClient, jobId)\n }\n\n async getExpectedReports(jobId: bigint): Promise<bigint> {\n return monitoringJobs.getExpectedReports(this.c.travelMoltMonitoringJobs, this.publicClient, jobId)\n }\n\n // ── Events ──\n\n onJobCreated(callback: (jobId: bigint, poster: Address, reward: bigint, deadline: bigint) => void) {\n const unwatch = this.publicClient.watchContractEvent({\n address: this.c.travelMoltJobs,\n abi: TravelMoltJobsAbi,\n eventName: 'JobCreated',\n onLogs: (logs) => {\n for (const log of logs) {\n const { jobId, poster, reward, deadline } = log.args as any\n callback(jobId, poster, reward, deadline)\n }\n },\n })\n this.watchers.push(unwatch)\n return unwatch\n }\n\n onJobAssigned(callback: (jobId: bigint, worker: Address) => void) {\n const unwatch = this.publicClient.watchContractEvent({\n address: this.c.travelMoltJobs,\n abi: TravelMoltJobsAbi,\n eventName: 'JobAssigned',\n onLogs: (logs) => {\n for (const log of logs) {\n const { jobId, worker } = log.args as any\n callback(jobId, worker)\n }\n },\n })\n this.watchers.push(unwatch)\n return unwatch\n }\n\n onJobCompleted(callback: (jobId: bigint, worker: Address, workerPayout: bigint, marketingFee: bigint) => void) {\n const unwatch = this.publicClient.watchContractEvent({\n address: this.c.travelMoltJobs,\n abi: TravelMoltJobsAbi,\n eventName: 'JobCompleted',\n onLogs: (logs) => {\n for (const log of logs) {\n const { jobId, worker, workerPayout, marketingFee } = log.args as any\n callback(jobId, worker, workerPayout, marketingFee)\n }\n },\n })\n this.watchers.push(unwatch)\n return unwatch\n }\n\n onMonitoringJobCreated(callback: (jobId: bigint, poster: Address, reward: bigint, monitorUntil: bigint, checkIntervalSeconds: bigint) => void) {\n const unwatch = this.publicClient.watchContractEvent({\n address: this.c.travelMoltMonitoringJobs,\n abi: TravelMoltMonitoringJobsAbi,\n eventName: 'MonitoringJobCreated',\n onLogs: (logs) => {\n for (const log of logs) {\n const { jobId, poster, reward, monitorUntil, checkIntervalSeconds } = log.args as any\n callback(jobId, poster, reward, monitorUntil, checkIntervalSeconds)\n }\n },\n })\n this.watchers.push(unwatch)\n return unwatch\n }\n\n onMonitoringJobClaimed(callback: (jobId: bigint, worker: Address) => void) {\n const unwatch = this.publicClient.watchContractEvent({\n address: this.c.travelMoltMonitoringJobs,\n abi: TravelMoltMonitoringJobsAbi,\n eventName: 'MonitoringJobClaimed',\n onLogs: (logs) => {\n for (const log of logs) {\n const { jobId, worker } = log.args as any\n callback(jobId, worker)\n }\n },\n })\n this.watchers.push(unwatch)\n return unwatch\n }\n\n onReportSubmitted(callback: (jobId: bigint, reporter: Address, reportIndex: bigint, reportData: `0x${string}`) => void) {\n const unwatch = this.publicClient.watchContractEvent({\n address: this.c.travelMoltMonitoringJobs,\n abi: TravelMoltMonitoringJobsAbi,\n eventName: 'ReportSubmitted',\n onLogs: (logs) => {\n for (const log of logs) {\n const { jobId, reporter, reportIndex, reportData } = log.args as any\n callback(jobId, reporter, reportIndex, reportData)\n }\n },\n })\n this.watchers.push(unwatch)\n return unwatch\n }\n\n onMonitoringJobReclaimed(callback: (jobId: bigint, previousWorker: Address) => void) {\n const unwatch = this.publicClient.watchContractEvent({\n address: this.c.travelMoltMonitoringJobs,\n abi: TravelMoltMonitoringJobsAbi,\n eventName: 'MonitoringJobReclaimed',\n onLogs: (logs) => {\n for (const log of logs) {\n const { jobId, previousWorker } = log.args as any\n callback(jobId, previousWorker)\n }\n },\n })\n this.watchers.push(unwatch)\n return unwatch\n }\n\n onMonitoringJobUnclaimed(callback: (jobId: bigint, worker: Address) => void) {\n const unwatch = this.publicClient.watchContractEvent({\n address: this.c.travelMoltMonitoringJobs,\n abi: TravelMoltMonitoringJobsAbi,\n eventName: 'MonitoringJobUnclaimed',\n onLogs: (logs) => {\n for (const log of logs) {\n const { jobId, worker } = log.args as any\n callback(jobId, worker)\n }\n },\n })\n this.watchers.push(unwatch)\n return unwatch\n }\n\n onMonitoringJobCompleted(callback: (jobId: bigint, worker: Address, workerPayout: bigint, marketingFee: bigint, refund: bigint) => void) {\n const unwatch = this.publicClient.watchContractEvent({\n address: this.c.travelMoltMonitoringJobs,\n abi: TravelMoltMonitoringJobsAbi,\n eventName: 'MonitoringJobCompleted',\n onLogs: (logs) => {\n for (const log of logs) {\n const { jobId, worker, workerPayout, marketingFee, refund } = log.args as any\n callback(jobId, worker, workerPayout, marketingFee, refund)\n }\n },\n })\n this.watchers.push(unwatch)\n return unwatch\n }\n\n // ── List helpers ──\n\n private static readonly ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'\n\n async listOpenJobs(maxId = 100): Promise<{ id: bigint; job: MonitoringJob }[]> {\n const results: { id: bigint; job: MonitoringJob }[] = []\n for (let i = 1; i <= maxId; i++) {\n try {\n const job = await this.getMonitoringJob(BigInt(i))\n if (job.poster === TravelMoltAgent.ZERO_ADDRESS) continue\n if (job.status === MonitoringJobStatus.Open) results.push({ id: BigInt(i), job })\n } catch { break }\n }\n return results\n }\n\n async listMonitoringJobs(maxId = 100): Promise<{ id: bigint; job: MonitoringJob }[]> {\n const results: { id: bigint; job: MonitoringJob }[] = []\n for (let i = 1; i <= maxId; i++) {\n try {\n const job = await this.getMonitoringJob(BigInt(i))\n if (job.poster === TravelMoltAgent.ZERO_ADDRESS) continue\n if (job.status === MonitoringJobStatus.Claimed) results.push({ id: BigInt(i), job })\n } catch { break }\n }\n return results\n }\n\n /** Stop all event watchers */\n destroy() {\n for (const unwatch of this.watchers) unwatch()\n this.watchers = []\n }\n}\n","import { type Address, type PublicClient, type WalletClient } from 'viem'\nimport { TravelMoltJobsAbi } from '../abis/TravelMoltJobs.js'\nimport { type Job, JobStatus } from '../agent/types.js'\n\nexport async function createJob(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n moltbookPostId: string,\n reward: bigint,\n deadline: bigint,\n): Promise<bigint> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltJobsAbi,\n functionName: 'createJob',\n args: [moltbookPostId, reward, deadline],\n account: walletClient.account!,\n })\n const hash = await walletClient.writeContract(request)\n const receipt = await publicClient.waitForTransactionReceipt({ hash })\n if (receipt.status !== 'success') throw new Error(`createJob tx reverted: ${hash}`)\n const createdLog = receipt.logs.find(\n (l) => l.topics[0] === '0x5aa8f193b1e3d39219f576507abb963f6683db57234d0de20d38af671e7e1b54',\n )\n if (!createdLog?.topics[1]) throw new Error('JobCreated event not found in receipt')\n return BigInt(createdLog.topics[1])\n}\n\nexport async function claimJob(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n jobId: bigint,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltJobsAbi,\n functionName: 'claimJob',\n args: [jobId],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nexport async function completeJob(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n jobId: bigint,\n worker: Address,\n rating: number,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltJobsAbi,\n functionName: 'completeJob',\n args: [jobId, worker, rating],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nexport async function cancelJob(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n jobId: bigint,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltJobsAbi,\n functionName: 'cancelJob',\n args: [jobId],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nexport async function getJob(\n address: Address,\n publicClient: PublicClient,\n jobId: bigint,\n): Promise<Job> {\n const result = await publicClient.readContract({\n address,\n abi: TravelMoltJobsAbi,\n functionName: 'jobs',\n args: [jobId],\n })\n return {\n poster: result[0],\n reward: result[1],\n moltbookPostId: result[2],\n deadline: result[3],\n worker: result[4],\n status: result[5] as JobStatus,\n }\n}\n","import { type Address, type PublicClient, type WalletClient, decodeEventLog } from 'viem'\nimport { TravelMoltMonitoringJobsAbi } from '../abis/TravelMoltMonitoringJobs.js'\nimport { type MonitoringJob, type MonitoringReport, MonitoringJobStatus } from '../agent/types.js'\n\nexport async function createMonitoringJob(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n moltbookPostId: string,\n reward: bigint,\n monitorUntil: bigint,\n checkIntervalSeconds: bigint,\n): Promise<bigint> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltMonitoringJobsAbi,\n functionName: 'createJob',\n args: [moltbookPostId, reward, monitorUntil, checkIntervalSeconds],\n account: walletClient.account!,\n })\n const hash = await walletClient.writeContract(request)\n const receipt = await publicClient.waitForTransactionReceipt({ hash })\n if (receipt.status !== 'success') throw new Error(`createMonitoringJob tx reverted: ${hash}`)\n // Find MonitoringJobCreated event\n for (const log of receipt.logs) {\n try {\n const decoded = decodeEventLog({ abi: TravelMoltMonitoringJobsAbi, data: log.data, topics: log.topics })\n if (decoded.eventName === 'MonitoringJobCreated') {\n return (decoded.args as any).jobId\n }\n } catch {}\n }\n throw new Error('MonitoringJobCreated event not found in receipt')\n}\n\nexport async function claimMonitoringJob(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n jobId: bigint,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltMonitoringJobsAbi,\n functionName: 'claimJob',\n args: [jobId],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nexport async function submitReport(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n jobId: bigint,\n reportData: `0x${string}`,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltMonitoringJobsAbi,\n functionName: 'submitReport',\n args: [jobId, reportData],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nexport async function completeMonitoringJob(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n jobId: bigint,\n rating: number,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltMonitoringJobsAbi,\n functionName: 'completeJob',\n args: [jobId, rating],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nexport async function finalizeMonitoringJob(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n jobId: bigint,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltMonitoringJobsAbi,\n functionName: 'finalizeJob',\n args: [jobId],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nexport async function cancelMonitoringJob(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n jobId: bigint,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltMonitoringJobsAbi,\n functionName: 'cancelJob',\n args: [jobId],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nexport async function unclaimMonitoringJob(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n jobId: bigint,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltMonitoringJobsAbi,\n functionName: 'unclaimJob',\n args: [jobId],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nexport async function reclaimMonitoringJob(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n jobId: bigint,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltMonitoringJobsAbi,\n functionName: 'reclaimJob',\n args: [jobId],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nexport async function getMonitoringJob(\n address: Address,\n publicClient: PublicClient,\n jobId: bigint,\n): Promise<MonitoringJob> {\n const result = await publicClient.readContract({\n address,\n abi: TravelMoltMonitoringJobsAbi,\n functionName: 'getJob',\n args: [jobId],\n }) as any\n return {\n poster: result.poster,\n reward: result.reward,\n moltbookPostId: result.moltbookPostId,\n monitorUntil: result.monitorUntil,\n checkIntervalSeconds: result.checkIntervalSeconds,\n worker: result.worker,\n status: result.status as MonitoringJobStatus,\n claimedAt: result.claimedAt,\n reportCount: result.reportCount,\n lastReportAt: result.lastReportAt,\n }\n}\n\nexport async function getMonitoringReports(\n address: Address,\n publicClient: PublicClient,\n jobId: bigint,\n): Promise<MonitoringReport[]> {\n const result = await publicClient.readContract({\n address,\n abi: TravelMoltMonitoringJobsAbi,\n functionName: 'getReports',\n args: [jobId],\n }) as any[]\n return result.map((r: any) => ({\n timestamp: r.timestamp,\n data: r.data,\n }))\n}\n\nexport async function getExpectedReports(\n address: Address,\n publicClient: PublicClient,\n jobId: bigint,\n): Promise<bigint> {\n return publicClient.readContract({\n address,\n abi: TravelMoltMonitoringJobsAbi,\n functionName: 'expectedReports',\n args: [jobId],\n }) as Promise<bigint>\n}\n","export const UsdcAbi = [\n { type: 'function', name: 'balanceOf', inputs: [{ name: 'account', type: 'address' }], outputs: [{ name: '', type: 'uint256' }], stateMutability: 'view' },\n { type: 'function', name: 'approve', inputs: [{ name: 'spender', type: 'address' }, { name: 'value', type: 'uint256' }], outputs: [{ name: '', type: 'bool' }], stateMutability: 'nonpayable' },\n { type: 'function', name: 'allowance', inputs: [{ name: 'owner', type: 'address' }, { name: 'spender', type: 'address' }], outputs: [{ name: '', type: 'uint256' }], stateMutability: 'view' },\n { type: 'function', name: 'transfer', inputs: [{ name: 'to', type: 'address' }, { name: 'value', type: 'uint256' }], outputs: [{ name: '', type: 'bool' }], stateMutability: 'nonpayable' },\n { type: 'function', name: 'decimals', inputs: [], outputs: [{ name: '', type: 'uint8' }], stateMutability: 'view' },\n { type: 'function', name: 'symbol', inputs: [], outputs: [{ name: '', type: 'string' }], stateMutability: 'view' },\n] as const\n","import { type Address, type PublicClient, type WalletClient } from 'viem'\nimport { UsdcAbi } from '../abis/USDC.js'\n\nexport async function getBalance(\n address: Address,\n publicClient: PublicClient,\n account: Address,\n): Promise<bigint> {\n return publicClient.readContract({\n address,\n abi: UsdcAbi,\n functionName: 'balanceOf',\n args: [account],\n })\n}\n\nexport async function approve(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n spender: Address,\n amount: bigint,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: UsdcAbi,\n functionName: 'approve',\n args: [spender, amount],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nexport async function getAllowance(\n address: Address,\n publicClient: PublicClient,\n owner: Address,\n spender: Address,\n): Promise<bigint> {\n return publicClient.readContract({\n address,\n abi: UsdcAbi,\n functionName: 'allowance',\n args: [owner, spender],\n })\n}\n"],"mappings":"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","names":["import_viem","import_chains","import_viem","viemBaseSepolia","setAgentUri"]}
1
+ {"version":3,"sources":["../src/abis/AgentIdentityRegistry.ts","../src/contracts/identity.ts","../src/cli.ts","../src/config/chains.ts","../src/abis/TravelMoltJobs.ts","../src/abis/TravelMoltMonitoringJobs.ts","../src/agent/Agent.ts","../src/contracts/jobs.ts","../src/contracts/monitoringJobs.ts","../src/abis/USDC.ts","../src/contracts/usdc.ts"],"sourcesContent":["export const AgentIdentityRegistryAbi = [\n {\n \"type\": \"function\",\n \"name\": \"register\",\n \"inputs\": [\n {\n \"name\": \"tokenUri\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"balanceOf\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownerOf\",\n \"inputs\": [\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tokenURI\",\n \"inputs\": [\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setAgentUri\",\n \"inputs\": [\n {\n \"name\": \"agentId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"newUri\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"Registered\",\n \"inputs\": [\n {\n \"name\": \"agentId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"tokenUri\",\n \"type\": \"string\",\n \"indexed\": false,\n \"internalType\": \"string\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Transfer\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n }\n] as const\n","import { type Address, type PublicClient, type WalletClient, parseAbiItem } from 'viem'\nimport { AgentIdentityRegistryAbi } from '../abis/AgentIdentityRegistry.js'\nimport type { AgentInfo } from '../agent/types.js'\n\nexport async function register(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n agentURI: string,\n): Promise<bigint> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: AgentIdentityRegistryAbi,\n functionName: 'register',\n args: [agentURI],\n account: walletClient.account!,\n })\n const hash = await walletClient.writeContract(request)\n const receipt = await publicClient.waitForTransactionReceipt({ hash })\n if (receipt.status !== 'success') throw new Error(`register tx reverted: ${hash}`)\n // Agent ID from Transfer event (ERC721 mint: from=0x0)\n const transferLog = receipt.logs.find(\n (l) => l.topics[0] === '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n )\n if (!transferLog?.topics[3]) throw new Error('Transfer event not found in receipt')\n return BigInt(transferLog.topics[3])\n}\n\nexport async function setAgentUri(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n agentId: bigint,\n newURI: string,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: AgentIdentityRegistryAbi,\n functionName: 'setAgentUri',\n args: [agentId, newURI],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nconst registeredEvent = parseAbiItem(\n 'event Registered(uint256 indexed agentId, string tokenUri, address indexed owner)',\n)\n\nexport async function getAgentByWallet(\n address: Address,\n publicClient: PublicClient,\n wallet: Address,\n): Promise<AgentInfo | null> {\n const balance = await publicClient.readContract({\n address,\n abi: AgentIdentityRegistryAbi,\n functionName: 'balanceOf',\n args: [wallet],\n })\n if (balance === 0n) return null\n\n // Scan Registered event logs to find agentId + tokenURI for this wallet\n // Use a narrow block range to avoid 503 from public RPCs\n try {\n const currentBlock = await publicClient.getBlockNumber()\n const fromBlock = currentBlock > 100_000n ? currentBlock - 100_000n : 0n\n const logs = await publicClient.getLogs({\n address,\n event: registeredEvent,\n args: { owner: wallet },\n fromBlock,\n toBlock: 'latest',\n })\n if (logs.length > 0) {\n const latest = logs[logs.length - 1]\n const agentId = latest.args.agentId!\n const uri = latest.args.tokenUri ?? ''\n return { agentId, uri, wallet }\n }\n } catch {\n // Event scan failed — identity exists but can't resolve details\n }\n\n // balanceOf > 0 confirms registration even if event scan failed\n return { agentId: 0n, uri: '', wallet }\n}\n","#!/usr/bin/env node\nimport { createPublicClient, createWalletClient, http, formatEther, type Address } from 'viem'\nimport { baseSepolia as viemBaseSepolia } from 'viem/chains'\nimport { privateKeyToAccount } from 'viem/accounts'\nimport { TravelMoltAgent } from './agent/Agent.js'\nimport { defaultChain } from './config/chains.js'\nimport { MonitoringJobStatus } from './agent/types.js'\n\nconst args = process.argv.slice(2)\nconst command = args[0]\n\nfunction flag(name: string): string | undefined {\n const prefix = `--${name}`\n // Support both --name value and --name=value\n for (let i = 0; i < args.length; i++) {\n if (args[i] === prefix) return args[i + 1]\n if (args[i].startsWith(prefix + '=')) return args[i].slice(prefix.length + 1)\n }\n return undefined\n}\n\nfunction hasFlag(name: string): boolean {\n const prefix = `--${name}`\n return args.some(a => a === prefix || a.startsWith(prefix + '='))\n}\n\nconst rpcUrl = process.env.RPC_URL ?? defaultChain.rpcUrl\n\nfunction getPublicClient() {\n return createPublicClient({\n chain: viemBaseSepolia,\n transport: http(rpcUrl),\n }) as any\n}\n\nfunction getAgent(): TravelMoltAgent {\n const pk = process.env.PRIVATE_KEY\n if (!pk) {\n console.error('Error: PRIVATE_KEY env var required. Set it before running:')\n console.error(' export PRIVATE_KEY=0xYourHexPrivateKey')\n process.exit(1)\n }\n const account = privateKeyToAccount(pk as `0x${string}`)\n const publicClient = getPublicClient()\n const walletClient = createWalletClient({\n account,\n chain: viemBaseSepolia,\n transport: http(rpcUrl),\n }) as any\n return new TravelMoltAgent({ publicClient, walletClient })\n}\n\nfunction formatUsdc(raw: bigint): string {\n const whole = raw / 1_000_000n\n const frac = raw % 1_000_000n\n return `${whole}.${frac.toString().padStart(6, '0')} USDC`\n}\n\nfunction printJob(id: number | bigint | string, job: any) {\n const statusNames = ['Open', 'Claimed', 'Completed', 'Cancelled']\n let payload: any = {}\n try { payload = JSON.parse(job.moltbookPostId) } catch {}\n console.log(`\\nJob #${id}`)\n console.log(` Status: ${statusNames[job.status] ?? job.status}`)\n console.log(` Reward: ${formatUsdc(job.reward)}`)\n console.log(` Poster: ${job.poster}`)\n if (job.worker && job.worker !== '0x0000000000000000000000000000000000000000') {\n console.log(` Worker: ${job.worker}`)\n }\n if (payload.hotel) console.log(` Hotel: ${payload.hotel}`)\n if (payload.checkIn) console.log(` Check-in: ${payload.checkIn} → ${payload.checkOut}`)\n if (payload.maxPrice) console.log(` Max price: ${payload.maxPrice} ${payload.currency ?? 'USD'}`)\n if (job.monitorUntil) {\n console.log(` Monitor until: ${new Date(Number(job.monitorUntil) * 1000).toISOString()}`)\n }\n if (job.checkIntervalSeconds) {\n console.log(` Interval: ${Number(job.checkIntervalSeconds)}s`)\n }\n if (job.reportCount !== undefined) {\n console.log(` Reports: ${job.reportCount}`)\n }\n}\n\nasync function listJobs(statusFilter?: MonitoringJobStatus) {\n const maxId = Number(flag('max') ?? '100')\n const publicClient = getPublicClient()\n const agent = new TravelMoltAgent({\n publicClient,\n walletClient: null as any, // read-only\n })\n\n const ZERO = '0x0000000000000000000000000000000000000000'\n const jobs: { id: number; job: any }[] = []\n for (let id = 1; id <= maxId; id++) {\n try {\n const job = await agent.getMonitoringJob(BigInt(id))\n if (job.poster === ZERO) continue // empty slot\n if (statusFilter === undefined || job.status === statusFilter) {\n jobs.push({ id, job })\n }\n } catch {\n break\n }\n }\n\n if (jobs.length === 0) {\n console.log('No jobs found.')\n return\n }\n\n for (const { id, job } of jobs) {\n printJob(id, job)\n }\n console.log(`\\n${jobs.length} job(s) found.`)\n}\n\nasync function main() {\n try {\n switch (command) {\n case 'list-jobs': {\n const filter = hasFlag('all') ? undefined : MonitoringJobStatus.Open\n await listJobs(filter)\n break\n }\n\n case 'list-monitoring': {\n await listJobs(MonitoringJobStatus.Claimed)\n break\n }\n\n case 'get-job': {\n const id = args[1]\n if (!id) { console.error('Usage: travelmolt get-job <id>'); process.exit(1) }\n const publicClient = getPublicClient()\n const agent = new TravelMoltAgent({ publicClient, walletClient: null as any })\n const job = await agent.getMonitoringJob(BigInt(id))\n printJob(id, job)\n break\n }\n\n case 'claim': {\n const id = args[1]\n if (!id) { console.error('Usage: travelmolt claim <id>'); process.exit(1) }\n const agent = getAgent()\n await agent.init()\n console.log(`Claiming job #${id}...`)\n const hash = await agent.claimMonitoringJob(BigInt(id))\n console.log(`Claimed! tx: ${hash}`)\n console.log(`IMPORTANT: Submit your first report NOW with \"npx travelmolt-sdk@latest report ${id} --price <cents> --alert\"`)\n break\n }\n\n case 'report': {\n const id = args[1]\n const price = flag('price')\n const alert = hasFlag('alert')\n if (!id || !price) {\n console.error('Usage: travelmolt report <id> --price <cents> [--alert]')\n process.exit(1)\n }\n const agent = getAgent()\n const { encodeAbiParameters } = await import('viem')\n const reportData = encodeAbiParameters(\n [{ type: 'uint256' }, { type: 'bool' }, { type: 'uint256' }],\n [BigInt(price), alert, BigInt(Math.floor(Date.now() / 1000))],\n )\n console.log(`Submitting report for job #${id}...`)\n const hash = await agent.submitMonitoringReport(BigInt(id), reportData)\n console.log(`Report submitted! tx: ${hash}`)\n break\n }\n\n case 'unclaim': {\n const id = args[1]\n if (!id) { console.error('Usage: travelmolt unclaim <id>'); process.exit(1) }\n const agent = getAgent()\n await agent.init()\n console.log(`Unclaiming job #${id}...`)\n const hash = await agent.unclaimMonitoringJob(BigInt(id))\n console.log(`Unclaimed! tx: ${hash}`)\n break\n }\n\n case 'rename': {\n const newName = args[1]\n if (!newName) {\n console.error('Usage: travelmolt rename \"NewDisplayName\"')\n process.exit(1)\n }\n const agent = getAgent()\n const info = await agent.getAgentInfo()\n if (!info) {\n console.error('Error: wallet not registered. Run `travelmolt register --name \"...\"` first.')\n process.exit(1)\n }\n console.log(`Renaming agent #${info.agentId}: \"${info.uri}\" → \"${newName}\"`)\n const { setAgentUri } = await import('./contracts/identity.js')\n const hash = await setAgentUri(\n defaultChain.contracts.agentIdentityRegistry,\n getPublicClient(),\n agent.walletClient,\n info.agentId,\n newName,\n )\n console.log(`Done! tx: ${hash}`)\n console.log(`Display name is now: ${newName}`)\n break\n }\n\n case 'register': {\n const name = flag('name')\n const uri = name ?? flag('uri') ?? 'https://travelmolt.com/agent'\n if (!name && !flag('uri')) {\n console.error('Usage: PRIVATE_KEY=0x... npx travelmolt-sdk@latest register --name \"MyAgentName\"')\n console.error('')\n console.error(' --name \"Name\" Display name for your agent (recommended)')\n console.error(' --uri \"URL\" URL pointing to JSON metadata with { \"name\": \"...\" }')\n console.error('')\n console.error('Requires PRIVATE_KEY env var. Use @latest to avoid cached old versions.')\n process.exit(1)\n }\n const agent = getAgent()\n // Pre-check: skip if already registered (avoids duplicate mints)\n const existing = await agent.getAgentInfo()\n if (existing) {\n console.log(`Already registered — skipping. Agent ID: ${existing.agentId}`)\n console.log(`Next step: claim a job with \"npx travelmolt-sdk@latest claim <jobId>\"`)\n break\n }\n const agentId = await agent.init(uri)\n console.log(`Agent registered with ID: ${agentId}`)\n console.log(`Display name: ${name ?? uri}`)\n console.log(`Next step: claim a job with \"npx travelmolt-sdk@latest claim <jobId>\"`)\n break\n }\n\n case 'status': {\n const id = args[1]\n if (!id) { console.error('Usage: travelmolt status <id>'); process.exit(1) }\n const publicClient = getPublicClient()\n const agent = new TravelMoltAgent({ publicClient, walletClient: null as any })\n const job = await agent.getMonitoringJob(BigInt(id))\n printJob(id, job)\n const reports = await agent.getMonitoringReports(BigInt(id))\n if (reports.length > 0) {\n console.log(`\\n Reports:`)\n for (let i = 0; i < reports.length; i++) {\n console.log(` #${i + 1} at ${new Date(Number(reports[i].timestamp) * 1000).toISOString()}`)\n }\n }\n const expected = await agent.getExpectedReports(BigInt(id))\n console.log(` Expected reports: ${expected}`)\n break\n }\n\n case 'post-job': {\n const hotel = flag('hotel')\n const checkIn = flag('check-in')\n const checkOut = flag('check-out')\n const maxPrice = flag('max-price')\n const currency = flag('currency') ?? 'EUR'\n const reward = flag('reward')\n const interval = flag('interval') ?? '28800' // default 8h\n const adults = flag('adults') ?? '2'\n const notifyUrl = flag('notify-url')\n\n if (!hotel || !checkIn || !checkOut || !maxPrice || !reward) {\n console.error(`Usage: travelmolt post-job --hotel \"Hotel Name\" --check-in 2026-03-01 --check-out 2026-03-05 --max-price 200 --reward 2 [options]\n\nRequired:\n --hotel <name> Hotel search query\n --check-in <date> YYYY-MM-DD\n --check-out <date> YYYY-MM-DD\n --max-price <number> Alert threshold per night\n --reward <usdc> Reward in USDC (e.g. 2 for 2 USDC)\n\nOptional:\n --currency <code> USD/EUR/GBP (default: EUR)\n --interval <seconds> Check interval in seconds (default: 28800 = 8h)\n --adults <number> Number of adults (default: 2)\n --notify-url <url> Webhook URL for report notifications`)\n process.exit(1)\n }\n\n const agent = getAgent()\n await agent.init()\n\n const payload = JSON.stringify({\n type: 'hotel_price_check',\n hotel,\n checkIn,\n checkOut,\n maxPrice: Number(maxPrice),\n currency,\n adults: Number(adults),\n ...(notifyUrl ? { notifyUrl } : {}),\n })\n\n // monitorUntil = check-in date timestamp\n const monitorUntilTs = BigInt(Math.floor(new Date(checkIn).getTime() / 1000))\n const rewardUsdc = BigInt(Math.round(Number(reward) * 1_000_000))\n const intervalSeconds = BigInt(interval)\n\n console.log(`Creating monitoring job...`)\n console.log(` Hotel: ${hotel}`)\n console.log(` Dates: ${checkIn} → ${checkOut}`)\n console.log(` Alert: below ${maxPrice} ${currency}/night`)\n console.log(` Reward: ${reward} USDC`)\n console.log(` Interval: ${interval}s (${(Number(interval) / 3600).toFixed(1)}h)`)\n if (notifyUrl) console.log(` Notify: ${notifyUrl}`)\n\n const jobId = await agent.createMonitoringJob(payload, rewardUsdc, monitorUntilTs, intervalSeconds)\n console.log(`\\nJob #${jobId} created!`)\n break\n }\n\n case 'balance': {\n const agent = getAgent()\n const usdcBal = await agent.usdcBalance()\n const ethBal = await agent.publicClient.getBalance({ address: agent.walletClient.account!.address })\n console.log(`USDC: ${formatUsdc(usdcBal)}`)\n console.log(`ETH: ${formatEther(ethBal)}`)\n break\n }\n\n default:\n console.log(`travelmolt-sdk CLI\n\nUsage: travelmolt <command> [options]\n\nCommands:\n list-jobs [--all] [--max N] List open monitoring jobs (--all for all statuses)\n list-monitoring [--max N] List claimed/active monitoring jobs\n get-job <id> Show job details\n post-job --hotel \"...\" ... Create a monitoring job (needs PRIVATE_KEY)\n claim <id> Claim a monitoring job (needs PRIVATE_KEY)\n unclaim <id> Unclaim a monitoring job (needs PRIVATE_KEY)\n report <id> --price <cents> [--alert] Submit a monitoring report\n register --name \"Name\" Register agent identity with display name\n rename \"NewName\" Update your display name on the dashboard\n status <id> Job status + reports\n balance Show USDC + ETH balance (needs PRIVATE_KEY)\n\nEnvironment:\n PRIVATE_KEY Hex private key (required for write operations)\n RPC_URL RPC endpoint (defaults to Base Sepolia)\n`)\n if (command) {\n console.error(`Unknown command: ${command}`)\n process.exit(1)\n }\n }\n } catch (err: any) {\n if (err.name === 'TravelMoltError') {\n console.error(`Error: ${err.message}`)\n } else {\n console.error(`Error: ${err.shortMessage ?? err.message}`)\n }\n process.exit(1)\n }\n}\n\nmain()\n","import { type Address } from 'viem'\n\nexport interface ChainConfig {\n chainId: number\n name: string\n rpcUrl: string\n contracts: {\n agentIdentityRegistry: Address\n travelMoltJobs: Address\n travelMoltMonitoringJobs: Address\n usdc: Address\n erc8004ReputationRegistry: Address\n erc8004ValidationRegistry: Address\n }\n}\n\nexport const baseSepolia: ChainConfig = {\n chainId: 84532,\n name: 'Base Sepolia',\n rpcUrl: 'https://sepolia.base.org',\n contracts: {\n agentIdentityRegistry: '0x8004AA63c570c570eBF15376c0dB199918BFe9Fb',\n travelMoltJobs: '0x6b2D21c517F397D1E60fA7Ee765543974D52629e',\n travelMoltMonitoringJobs: '0x58eAe487A4390d0588a4C10a3E4d838C6f8F56af',\n usdc: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n erc8004ReputationRegistry: '0x8004bd8daB57f14Ed299135749a5CB5c42d341BF',\n erc8004ValidationRegistry: '0x8004C269D0A5647E51E121FeB226200ECE932d55',\n },\n}\n\nexport const defaultChain = baseSepolia\n","export const TravelMoltJobsAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_usdc\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_identityRegistry\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_marketingWallet\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MARKETING_FEE_BPS\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancelJob\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claimJob\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"completeJob\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"worker\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"rating\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"createJob\",\n \"inputs\": [\n {\n \"name\": \"moltbookPostId\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"reward\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"identityRegistry\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IERC8004Identity\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"jobs\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"poster\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"reward\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"moltbookPostId\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"worker\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"status\",\n \"type\": \"uint8\",\n \"internalType\": \"enum TravelMoltJobs.JobStatus\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"marketingWallet\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setMarketingWallet\",\n \"inputs\": [\n {\n \"name\": \"_marketingWallet\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"usdc\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IUSDC\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"JobAssigned\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"worker\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"JobCancelled\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"JobCompleted\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"worker\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"workerPayout\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"marketingFee\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"JobCreated\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"poster\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"reward\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableInvalidOwner\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n }\n] as const\n","export const TravelMoltMonitoringJobsAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_usdc\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_identityRegistry\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_marketingWallet\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"DEFAULT_INTERVAL\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"GRACE_PERIOD\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MARKETING_FEE_BPS\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_MISSED_INTERVALS\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancelJob\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claimJob\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"completeJob\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"rating\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"createJob\",\n \"inputs\": [\n {\n \"name\": \"moltbookPostId\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"reward\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"monitorUntil\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"checkIntervalSeconds\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"expectedReports\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"finalizeJob\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getJob\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct TravelMoltMonitoringJobs.Job\",\n \"components\": [\n {\n \"name\": \"poster\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"reward\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"moltbookPostId\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"monitorUntil\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"checkIntervalSeconds\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"worker\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"status\",\n \"type\": \"uint8\",\n \"internalType\": \"enum TravelMoltMonitoringJobs.JobStatus\"\n },\n {\n \"name\": \"claimedAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"reportCount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"lastReportAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getReportCount\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getReports\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct TravelMoltMonitoringJobs.Report[]\",\n \"components\": [\n {\n \"name\": \"timestamp\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"data\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"identityRegistry\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IERC8004Identity\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"marketingWallet\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"reclaimJob\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setMarketingWallet\",\n \"inputs\": [\n {\n \"name\": \"_marketingWallet\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"submitReport\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"reportData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unclaimJob\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"usdc\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"contract IUSDC\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"MonitoringJobCancelled\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"workerPayout\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"refund\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"MonitoringJobClaimed\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"worker\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"MonitoringJobCompleted\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"worker\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"workerPayout\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"marketingFee\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"refund\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"rating\",\n \"type\": \"uint8\",\n \"indexed\": false,\n \"internalType\": \"uint8\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"MonitoringJobCreated\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"poster\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"reward\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"monitorUntil\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"checkIntervalSeconds\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"MonitoringJobReclaimed\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"previousWorker\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"MonitoringJobUnclaimed\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"worker\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ReportSubmitted\",\n \"inputs\": [\n {\n \"name\": \"jobId\",\n \"type\": \"uint256\",\n \"indexed\": true,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"reporter\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"reportIndex\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"reportData\",\n \"type\": \"bytes\",\n \"indexed\": false,\n \"internalType\": \"bytes\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableInvalidOwner\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n }\n] as const\n","import {\n type Address,\n type PublicClient,\n type WalletClient,\n type WatchContractEventReturnType,\n} from 'viem'\nimport { defaultChain, type ChainConfig } from '../config/chains.js'\nimport { TravelMoltJobsAbi } from '../abis/TravelMoltJobs.js'\nimport { TravelMoltMonitoringJobsAbi } from '../abis/TravelMoltMonitoringJobs.js'\nimport * as identity from '../contracts/identity.js'\nimport * as jobs from '../contracts/jobs.js'\nimport * as monitoringJobs from '../contracts/monitoringJobs.js'\nimport * as usdc from '../contracts/usdc.js'\nimport { type AgentConfig, type Job, type MonitoringJob, type MonitoringReport, type AgentInfo, MonitoringJobStatus } from './types.js'\n\nexport class TravelMoltAgent {\n readonly publicClient: PublicClient\n readonly walletClient: WalletClient\n readonly chain: ChainConfig\n agentId: bigint = 0n\n private watchers: WatchContractEventReturnType[] = []\n\n constructor(config: AgentConfig) {\n this.publicClient = config.publicClient\n this.walletClient = config.walletClient\n this.chain = config.chain ?? defaultChain\n }\n\n private get c() {\n return this.chain.contracts\n }\n\n private get account(): Address {\n return this.walletClient.account!.address\n }\n\n /** Initialize: check if registered, auto-register if not */\n async init(agentURI = 'https://travelmolt.com/agent'): Promise<bigint> {\n const existing = await identity.getAgentByWallet(this.c.agentIdentityRegistry, this.publicClient, this.account)\n if (existing) {\n this.agentId = existing.agentId\n console.log(`Agent already registered: #${this.agentId}`)\n } else {\n this.agentId = await identity.register(\n this.c.agentIdentityRegistry,\n this.publicClient,\n this.walletClient,\n agentURI,\n )\n console.log(`Agent registered: #${this.agentId}`)\n }\n return this.agentId\n }\n\n // ── Identity ──\n\n async getAgentInfo(wallet?: Address): Promise<AgentInfo | null> {\n return identity.getAgentByWallet(this.c.agentIdentityRegistry, this.publicClient, wallet ?? this.account)\n }\n\n // ── USDC ──\n\n async usdcBalance(): Promise<bigint> {\n return usdc.getBalance(this.c.usdc, this.publicClient, this.account)\n }\n\n async approveUsdc(amount: bigint): Promise<string> {\n return usdc.approve(this.c.usdc, this.publicClient, this.walletClient, this.c.travelMoltJobs, amount)\n }\n\n async usdcAllowance(): Promise<bigint> {\n return usdc.getAllowance(this.c.usdc, this.publicClient, this.account, this.c.travelMoltJobs)\n }\n\n // ── Jobs ──\n\n async createJob(moltbookPostId: string, rewardUsdc: bigint, deadlineTimestamp: bigint): Promise<bigint> {\n // Auto-approve if needed\n const allowance = await this.usdcAllowance()\n if (allowance < rewardUsdc) {\n const approveAmount = 2n ** 256n - 1n // MaxUint256 — approve once, use many times\n console.log('Approving USDC...')\n const hash = await this.approveUsdc(approveAmount)\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash: hash as `0x${string}` })\n console.log(`Approval confirmed in block ${receipt.blockNumber}`)\n }\n return jobs.createJob(this.c.travelMoltJobs, this.publicClient, this.walletClient, moltbookPostId, rewardUsdc, deadlineTimestamp)\n }\n\n async claimJob(jobId: bigint): Promise<string> {\n return jobs.claimJob(this.c.travelMoltJobs, this.publicClient, this.walletClient, jobId)\n }\n\n async completeJob(jobId: bigint, worker: Address, rating: number): Promise<string> {\n return jobs.completeJob(this.c.travelMoltJobs, this.publicClient, this.walletClient, jobId, worker, rating)\n }\n\n async cancelJob(jobId: bigint): Promise<string> {\n return jobs.cancelJob(this.c.travelMoltJobs, this.publicClient, this.walletClient, jobId)\n }\n\n async getJob(jobId: bigint): Promise<Job> {\n return jobs.getJob(this.c.travelMoltJobs, this.publicClient, jobId)\n }\n\n // ── Monitoring Jobs ──\n\n async approveUsdcForMonitoring(amount: bigint): Promise<string> {\n return usdc.approve(this.c.usdc, this.publicClient, this.walletClient, this.c.travelMoltMonitoringJobs, amount)\n }\n\n async usdcAllowanceForMonitoring(): Promise<bigint> {\n return usdc.getAllowance(this.c.usdc, this.publicClient, this.account, this.c.travelMoltMonitoringJobs)\n }\n\n async createMonitoringJob(moltbookPostId: string, rewardUsdc: bigint, monitorUntil: bigint, checkIntervalSeconds: bigint): Promise<bigint> {\n const allowance = await this.usdcAllowanceForMonitoring()\n if (allowance < rewardUsdc) {\n const approveAmount = 2n ** 256n - 1n\n console.log('Approving USDC for monitoring...')\n const hash = await this.approveUsdcForMonitoring(approveAmount)\n const receipt = await this.publicClient.waitForTransactionReceipt({ hash: hash as `0x${string}` })\n console.log(`Approval confirmed in block ${receipt.blockNumber}`)\n }\n return monitoringJobs.createMonitoringJob(this.c.travelMoltMonitoringJobs, this.publicClient, this.walletClient, moltbookPostId, rewardUsdc, monitorUntil, checkIntervalSeconds)\n }\n\n async claimMonitoringJob(jobId: bigint): Promise<string> {\n return monitoringJobs.claimMonitoringJob(this.c.travelMoltMonitoringJobs, this.publicClient, this.walletClient, jobId)\n }\n\n async unclaimMonitoringJob(jobId: bigint): Promise<string> {\n return monitoringJobs.unclaimMonitoringJob(this.c.travelMoltMonitoringJobs, this.publicClient, this.walletClient, jobId)\n }\n\n async submitMonitoringReport(jobId: bigint, reportData: `0x${string}`): Promise<string> {\n return monitoringJobs.submitReport(this.c.travelMoltMonitoringJobs, this.publicClient, this.walletClient, jobId, reportData)\n }\n\n async completeMonitoringJob(jobId: bigint, rating: number): Promise<string> {\n return monitoringJobs.completeMonitoringJob(this.c.travelMoltMonitoringJobs, this.publicClient, this.walletClient, jobId, rating)\n }\n\n async finalizeMonitoringJob(jobId: bigint): Promise<string> {\n return monitoringJobs.finalizeMonitoringJob(this.c.travelMoltMonitoringJobs, this.publicClient, this.walletClient, jobId)\n }\n\n async cancelMonitoringJob(jobId: bigint): Promise<string> {\n return monitoringJobs.cancelMonitoringJob(this.c.travelMoltMonitoringJobs, this.publicClient, this.walletClient, jobId)\n }\n\n async reclaimMonitoringJob(jobId: bigint): Promise<string> {\n return monitoringJobs.reclaimMonitoringJob(this.c.travelMoltMonitoringJobs, this.publicClient, this.walletClient, jobId)\n }\n\n async getMonitoringJob(jobId: bigint): Promise<MonitoringJob> {\n return monitoringJobs.getMonitoringJob(this.c.travelMoltMonitoringJobs, this.publicClient, jobId)\n }\n\n async getMonitoringReports(jobId: bigint): Promise<MonitoringReport[]> {\n return monitoringJobs.getMonitoringReports(this.c.travelMoltMonitoringJobs, this.publicClient, jobId)\n }\n\n async getExpectedReports(jobId: bigint): Promise<bigint> {\n return monitoringJobs.getExpectedReports(this.c.travelMoltMonitoringJobs, this.publicClient, jobId)\n }\n\n // ── Events ──\n\n onJobCreated(callback: (jobId: bigint, poster: Address, reward: bigint, deadline: bigint) => void) {\n const unwatch = this.publicClient.watchContractEvent({\n address: this.c.travelMoltJobs,\n abi: TravelMoltJobsAbi,\n eventName: 'JobCreated',\n onLogs: (logs) => {\n for (const log of logs) {\n const { jobId, poster, reward, deadline } = log.args as any\n callback(jobId, poster, reward, deadline)\n }\n },\n })\n this.watchers.push(unwatch)\n return unwatch\n }\n\n onJobAssigned(callback: (jobId: bigint, worker: Address) => void) {\n const unwatch = this.publicClient.watchContractEvent({\n address: this.c.travelMoltJobs,\n abi: TravelMoltJobsAbi,\n eventName: 'JobAssigned',\n onLogs: (logs) => {\n for (const log of logs) {\n const { jobId, worker } = log.args as any\n callback(jobId, worker)\n }\n },\n })\n this.watchers.push(unwatch)\n return unwatch\n }\n\n onJobCompleted(callback: (jobId: bigint, worker: Address, workerPayout: bigint, marketingFee: bigint) => void) {\n const unwatch = this.publicClient.watchContractEvent({\n address: this.c.travelMoltJobs,\n abi: TravelMoltJobsAbi,\n eventName: 'JobCompleted',\n onLogs: (logs) => {\n for (const log of logs) {\n const { jobId, worker, workerPayout, marketingFee } = log.args as any\n callback(jobId, worker, workerPayout, marketingFee)\n }\n },\n })\n this.watchers.push(unwatch)\n return unwatch\n }\n\n onMonitoringJobCreated(callback: (jobId: bigint, poster: Address, reward: bigint, monitorUntil: bigint, checkIntervalSeconds: bigint) => void) {\n const unwatch = this.publicClient.watchContractEvent({\n address: this.c.travelMoltMonitoringJobs,\n abi: TravelMoltMonitoringJobsAbi,\n eventName: 'MonitoringJobCreated',\n onLogs: (logs) => {\n for (const log of logs) {\n const { jobId, poster, reward, monitorUntil, checkIntervalSeconds } = log.args as any\n callback(jobId, poster, reward, monitorUntil, checkIntervalSeconds)\n }\n },\n })\n this.watchers.push(unwatch)\n return unwatch\n }\n\n onMonitoringJobClaimed(callback: (jobId: bigint, worker: Address) => void) {\n const unwatch = this.publicClient.watchContractEvent({\n address: this.c.travelMoltMonitoringJobs,\n abi: TravelMoltMonitoringJobsAbi,\n eventName: 'MonitoringJobClaimed',\n onLogs: (logs) => {\n for (const log of logs) {\n const { jobId, worker } = log.args as any\n callback(jobId, worker)\n }\n },\n })\n this.watchers.push(unwatch)\n return unwatch\n }\n\n onReportSubmitted(callback: (jobId: bigint, reporter: Address, reportIndex: bigint, reportData: `0x${string}`) => void) {\n const unwatch = this.publicClient.watchContractEvent({\n address: this.c.travelMoltMonitoringJobs,\n abi: TravelMoltMonitoringJobsAbi,\n eventName: 'ReportSubmitted',\n onLogs: (logs) => {\n for (const log of logs) {\n const { jobId, reporter, reportIndex, reportData } = log.args as any\n callback(jobId, reporter, reportIndex, reportData)\n }\n },\n })\n this.watchers.push(unwatch)\n return unwatch\n }\n\n onMonitoringJobReclaimed(callback: (jobId: bigint, previousWorker: Address) => void) {\n const unwatch = this.publicClient.watchContractEvent({\n address: this.c.travelMoltMonitoringJobs,\n abi: TravelMoltMonitoringJobsAbi,\n eventName: 'MonitoringJobReclaimed',\n onLogs: (logs) => {\n for (const log of logs) {\n const { jobId, previousWorker } = log.args as any\n callback(jobId, previousWorker)\n }\n },\n })\n this.watchers.push(unwatch)\n return unwatch\n }\n\n onMonitoringJobUnclaimed(callback: (jobId: bigint, worker: Address) => void) {\n const unwatch = this.publicClient.watchContractEvent({\n address: this.c.travelMoltMonitoringJobs,\n abi: TravelMoltMonitoringJobsAbi,\n eventName: 'MonitoringJobUnclaimed',\n onLogs: (logs) => {\n for (const log of logs) {\n const { jobId, worker } = log.args as any\n callback(jobId, worker)\n }\n },\n })\n this.watchers.push(unwatch)\n return unwatch\n }\n\n onMonitoringJobCompleted(callback: (jobId: bigint, worker: Address, workerPayout: bigint, marketingFee: bigint, refund: bigint) => void) {\n const unwatch = this.publicClient.watchContractEvent({\n address: this.c.travelMoltMonitoringJobs,\n abi: TravelMoltMonitoringJobsAbi,\n eventName: 'MonitoringJobCompleted',\n onLogs: (logs) => {\n for (const log of logs) {\n const { jobId, worker, workerPayout, marketingFee, refund } = log.args as any\n callback(jobId, worker, workerPayout, marketingFee, refund)\n }\n },\n })\n this.watchers.push(unwatch)\n return unwatch\n }\n\n // ── List helpers ──\n\n private static readonly ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'\n\n async listOpenJobs(maxId = 100): Promise<{ id: bigint; job: MonitoringJob }[]> {\n const results: { id: bigint; job: MonitoringJob }[] = []\n for (let i = 1; i <= maxId; i++) {\n try {\n const job = await this.getMonitoringJob(BigInt(i))\n if (job.poster === TravelMoltAgent.ZERO_ADDRESS) continue\n if (job.status === MonitoringJobStatus.Open) results.push({ id: BigInt(i), job })\n } catch { break }\n }\n return results\n }\n\n async listMonitoringJobs(maxId = 100): Promise<{ id: bigint; job: MonitoringJob }[]> {\n const results: { id: bigint; job: MonitoringJob }[] = []\n for (let i = 1; i <= maxId; i++) {\n try {\n const job = await this.getMonitoringJob(BigInt(i))\n if (job.poster === TravelMoltAgent.ZERO_ADDRESS) continue\n if (job.status === MonitoringJobStatus.Claimed) results.push({ id: BigInt(i), job })\n } catch { break }\n }\n return results\n }\n\n /** Stop all event watchers */\n destroy() {\n for (const unwatch of this.watchers) unwatch()\n this.watchers = []\n }\n}\n","import { type Address, type PublicClient, type WalletClient } from 'viem'\nimport { TravelMoltJobsAbi } from '../abis/TravelMoltJobs.js'\nimport { type Job, JobStatus } from '../agent/types.js'\n\nexport async function createJob(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n moltbookPostId: string,\n reward: bigint,\n deadline: bigint,\n): Promise<bigint> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltJobsAbi,\n functionName: 'createJob',\n args: [moltbookPostId, reward, deadline],\n account: walletClient.account!,\n })\n const hash = await walletClient.writeContract(request)\n const receipt = await publicClient.waitForTransactionReceipt({ hash })\n if (receipt.status !== 'success') throw new Error(`createJob tx reverted: ${hash}`)\n const createdLog = receipt.logs.find(\n (l) => l.topics[0] === '0x5aa8f193b1e3d39219f576507abb963f6683db57234d0de20d38af671e7e1b54',\n )\n if (!createdLog?.topics[1]) throw new Error('JobCreated event not found in receipt')\n return BigInt(createdLog.topics[1])\n}\n\nexport async function claimJob(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n jobId: bigint,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltJobsAbi,\n functionName: 'claimJob',\n args: [jobId],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nexport async function completeJob(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n jobId: bigint,\n worker: Address,\n rating: number,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltJobsAbi,\n functionName: 'completeJob',\n args: [jobId, worker, rating],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nexport async function cancelJob(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n jobId: bigint,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltJobsAbi,\n functionName: 'cancelJob',\n args: [jobId],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nexport async function getJob(\n address: Address,\n publicClient: PublicClient,\n jobId: bigint,\n): Promise<Job> {\n const result = await publicClient.readContract({\n address,\n abi: TravelMoltJobsAbi,\n functionName: 'jobs',\n args: [jobId],\n })\n return {\n poster: result[0],\n reward: result[1],\n moltbookPostId: result[2],\n deadline: result[3],\n worker: result[4],\n status: result[5] as JobStatus,\n }\n}\n","import { type Address, type PublicClient, type WalletClient, decodeEventLog } from 'viem'\nimport { TravelMoltMonitoringJobsAbi } from '../abis/TravelMoltMonitoringJobs.js'\nimport { type MonitoringJob, type MonitoringReport, MonitoringJobStatus } from '../agent/types.js'\n\nexport async function createMonitoringJob(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n moltbookPostId: string,\n reward: bigint,\n monitorUntil: bigint,\n checkIntervalSeconds: bigint,\n): Promise<bigint> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltMonitoringJobsAbi,\n functionName: 'createJob',\n args: [moltbookPostId, reward, monitorUntil, checkIntervalSeconds],\n account: walletClient.account!,\n })\n const hash = await walletClient.writeContract(request)\n const receipt = await publicClient.waitForTransactionReceipt({ hash })\n if (receipt.status !== 'success') throw new Error(`createMonitoringJob tx reverted: ${hash}`)\n // Find MonitoringJobCreated event\n for (const log of receipt.logs) {\n try {\n const decoded = decodeEventLog({ abi: TravelMoltMonitoringJobsAbi, data: log.data, topics: log.topics })\n if (decoded.eventName === 'MonitoringJobCreated') {\n return (decoded.args as any).jobId\n }\n } catch {}\n }\n throw new Error('MonitoringJobCreated event not found in receipt')\n}\n\nexport async function claimMonitoringJob(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n jobId: bigint,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltMonitoringJobsAbi,\n functionName: 'claimJob',\n args: [jobId],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nexport async function submitReport(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n jobId: bigint,\n reportData: `0x${string}`,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltMonitoringJobsAbi,\n functionName: 'submitReport',\n args: [jobId, reportData],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nexport async function completeMonitoringJob(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n jobId: bigint,\n rating: number,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltMonitoringJobsAbi,\n functionName: 'completeJob',\n args: [jobId, rating],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nexport async function finalizeMonitoringJob(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n jobId: bigint,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltMonitoringJobsAbi,\n functionName: 'finalizeJob',\n args: [jobId],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nexport async function cancelMonitoringJob(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n jobId: bigint,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltMonitoringJobsAbi,\n functionName: 'cancelJob',\n args: [jobId],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nexport async function unclaimMonitoringJob(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n jobId: bigint,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltMonitoringJobsAbi,\n functionName: 'unclaimJob',\n args: [jobId],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nexport async function reclaimMonitoringJob(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n jobId: bigint,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: TravelMoltMonitoringJobsAbi,\n functionName: 'reclaimJob',\n args: [jobId],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nexport async function getMonitoringJob(\n address: Address,\n publicClient: PublicClient,\n jobId: bigint,\n): Promise<MonitoringJob> {\n const result = await publicClient.readContract({\n address,\n abi: TravelMoltMonitoringJobsAbi,\n functionName: 'getJob',\n args: [jobId],\n }) as any\n return {\n poster: result.poster,\n reward: result.reward,\n moltbookPostId: result.moltbookPostId,\n monitorUntil: result.monitorUntil,\n checkIntervalSeconds: result.checkIntervalSeconds,\n worker: result.worker,\n status: result.status as MonitoringJobStatus,\n claimedAt: result.claimedAt,\n reportCount: result.reportCount,\n lastReportAt: result.lastReportAt,\n }\n}\n\nexport async function getMonitoringReports(\n address: Address,\n publicClient: PublicClient,\n jobId: bigint,\n): Promise<MonitoringReport[]> {\n const result = await publicClient.readContract({\n address,\n abi: TravelMoltMonitoringJobsAbi,\n functionName: 'getReports',\n args: [jobId],\n }) as any[]\n return result.map((r: any) => ({\n timestamp: r.timestamp,\n data: r.data,\n }))\n}\n\nexport async function getExpectedReports(\n address: Address,\n publicClient: PublicClient,\n jobId: bigint,\n): Promise<bigint> {\n return publicClient.readContract({\n address,\n abi: TravelMoltMonitoringJobsAbi,\n functionName: 'expectedReports',\n args: [jobId],\n }) as Promise<bigint>\n}\n","export const UsdcAbi = [\n { type: 'function', name: 'balanceOf', inputs: [{ name: 'account', type: 'address' }], outputs: [{ name: '', type: 'uint256' }], stateMutability: 'view' },\n { type: 'function', name: 'approve', inputs: [{ name: 'spender', type: 'address' }, { name: 'value', type: 'uint256' }], outputs: [{ name: '', type: 'bool' }], stateMutability: 'nonpayable' },\n { type: 'function', name: 'allowance', inputs: [{ name: 'owner', type: 'address' }, { name: 'spender', type: 'address' }], outputs: [{ name: '', type: 'uint256' }], stateMutability: 'view' },\n { type: 'function', name: 'transfer', inputs: [{ name: 'to', type: 'address' }, { name: 'value', type: 'uint256' }], outputs: [{ name: '', type: 'bool' }], stateMutability: 'nonpayable' },\n { type: 'function', name: 'decimals', inputs: [], outputs: [{ name: '', type: 'uint8' }], stateMutability: 'view' },\n { type: 'function', name: 'symbol', inputs: [], outputs: [{ name: '', type: 'string' }], stateMutability: 'view' },\n] as const\n","import { type Address, type PublicClient, type WalletClient } from 'viem'\nimport { UsdcAbi } from '../abis/USDC.js'\n\nexport async function getBalance(\n address: Address,\n publicClient: PublicClient,\n account: Address,\n): Promise<bigint> {\n return publicClient.readContract({\n address,\n abi: UsdcAbi,\n functionName: 'balanceOf',\n args: [account],\n })\n}\n\nexport async function approve(\n address: Address,\n publicClient: PublicClient,\n walletClient: WalletClient,\n spender: Address,\n amount: bigint,\n): Promise<string> {\n const { request } = await publicClient.simulateContract({\n address,\n abi: UsdcAbi,\n functionName: 'approve',\n args: [spender, amount],\n account: walletClient.account!,\n })\n return walletClient.writeContract(request)\n}\n\nexport async function getAllowance(\n address: Address,\n publicClient: PublicClient,\n owner: Address,\n spender: Address,\n): Promise<bigint> {\n return publicClient.readContract({\n address,\n abi: UsdcAbi,\n functionName: 'allowance',\n args: [owner, spender],\n })\n}\n"],"mappings":"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","names":["import_viem","import_chains","import_viem","viemBaseSepolia","setAgentUri"]}