import { RB2B_HEM_RESULT_OUTPUT_PROPERTIES, type Rb2bIpToHemParams, type Rb2bIpToHemResponse, } from '@/tools/rb2b/types' import { RB2B_API_BASE, rb2bHeaders } from '@/tools/rb2b/utils' import type { ToolConfig } from '@/tools/types' export const rb2bIpToHemTool: ToolConfig = { id: 'rb2b_ip_to_hem', name: 'RB2B IP to HEM', description: 'Convert an IP address (and optional user agent) into hashed email addresses (HEM) with accuracy scores.', version: '1.0.0', params: { apiKey: { type: 'string', required: true, visibility: 'user-only', description: 'RB2B API key', }, ip_address: { type: 'string', required: true, visibility: 'user-or-llm', description: 'The IP address to resolve (IPv4 or IPv6)', }, user_agent: { type: 'string', required: false, visibility: 'user-or-llm', description: 'Optional user agent string to improve match accuracy', }, include_sha256: { type: 'boolean', required: false, visibility: 'user-or-llm', description: 'Whether to include SHA-256 hashes in addition to MD5 hashes', }, }, request: { method: 'POST', url: `${RB2B_API_BASE}/ip_to_hem`, headers: (params) => rb2bHeaders(params.apiKey), body: (params) => { const body: Record = { ip_address: params.ip_address } if (params.user_agent) body.user_agent = params.user_agent if (typeof params.include_sha256 === 'boolean') body.include_sha256 = params.include_sha256 return body }, }, transformResponse: async (response: Response) => { const data = await response.json() return { success: true, output: { results: data.results ?? [], }, } }, outputs: { results: { type: 'array', description: 'Up to 3 hashed email matches for the IP address', items: { type: 'object', properties: RB2B_HEM_RESULT_OUTPUT_PROPERTIES }, }, }, }