agentgate-examples / tree / langchain/js/src/agentgateTools.ts ยท raw (this view has old GitHub links rewritten for the mirror; raw is byte-exact)
// LangChain.js tools for the five AgentGate x402 tools. Each call pays per request in USDC on Base via @x402/fetch.
//   import { agentgateTools } from './agentgateTools.js';
//   const tools = agentgateTools(privateKeyToAccount(process.env.BUYER_KEY as `0x${string}`));
//   const agent = createAgent({ model, tools });   // or llm.bindTools(tools)
import { tool } from '@langchain/core/tools';
import { wrapFetchWithPaymentFromConfig } from '@x402/fetch';
import { ExactEvmScheme } from '@x402/evm';
import { decodePaymentRequiredHeader } from '@x402/core/http';
import type { LocalAccount } from 'viem';
import { z } from 'zod';

const API = 'https://api.youraitools.co';

export function agentgateTools(account: LocalAccount) {
  const pay = wrapFetchWithPaymentFromConfig(fetch, { schemes: [{ network: 'eip155:8453', client: new ExactEvmScheme(account) }] });
  const get = async (url: string) => {
    const res = await pay(url);
    if (res.status === 402) {
      const h = res.headers.get('PAYMENT-REQUIRED');
      return JSON.stringify({ error: 'payment_not_accepted', reason: h ? decodePaymentRequiredHeader(h).error : 'unknown' });
    }
    return JSON.stringify(await res.json());
  };
  return [
    tool(async ({ id, network }) => get(`${API}/agentgate/v1/check-agent?id=${encodeURIComponent(id)}&network=${network}`), {
      name: 'agentgate_check_agent',
      description: 'Checks whether an AI agent is registered, Active and Verified in the Concordium Agent Registry (CIS-8004). $0.005 USDC.',
      schema: z.object({ id: z.string().describe('Badge (CIS-2 token address) or Concordium account'), network: z.enum(['mainnet', 'testnet']).default('mainnet') }),
    }),
    tool(async ({ url }) => get(`${API}/webread/v1/read?url=${encodeURIComponent(url)}`), {
      name: 'webread_read_url',
      description: 'Returns a public web page as clean Markdown with title and links. $0.002 USDC, charged only on success.',
      schema: z.object({ url: z.string().describe('Absolute http(s) URL') }),
    }),
    tool(async ({ text }) => get(`${API}/injectscan/v1/scan?text=${encodeURIComponent(text)}`), {
      name: 'injectscan_scan_text',
      description: 'Scores untrusted text for prompt injection: 0-100 risk, verdict, categories and spans. $0.003 USDC.',
      schema: z.object({ text: z.string().describe('Text the agent is about to read') }),
    }),
    tool(async ({ domain }) => get(`${API}/domaincheck/v1/domain?domain=${encodeURIComponent(domain)}`), {
      name: 'domaincheck_check_domain',
      description: 'Domain trust report: DNS, SPF/DMARC, RDAP registration age, parking and disposable detection, 0-100 score. $0.002 USDC.',
      schema: z.object({ domain: z.string().describe('Domain, URL or email address') }),
    }),
    tool(async ({ address }) => get(`${API}/payguard/v1/address?address=${encodeURIComponent(address)}`), {
      name: 'payguard_screen_address',
      description: 'Screens a crypto address against the US Treasury OFAC SDN list (sanctioned true/false, entity, programs). $0.001 USDC. Informational, not legal advice.',
      schema: z.object({ address: z.string().describe('Crypto address') }),
    }),
  ];
}

agentgate-source: code mirror on Cloudflare Pages. All repos