{"version":3,"file":"bankr-types.mjs","names":[],"sources":["../../../src/services/bankr-types.ts"],"sourcesContent":["/**\n * Bankr Agent API — TypeScript interfaces\n *\n * Covers all request/response shapes for api.bankr.bot endpoints:\n *   - User info (GET /agent/me)\n *   - Balances (GET /agent/balances)\n *   - Prompt + job polling (POST /agent/prompt, GET /agent/job/{id})\n *   - Sign (POST /agent/sign)\n *   - Submit (POST /agent/submit)\n *   - Token deploy (POST /token-launches/deploy)\n */\n\n// ─── Chains ──────────────────────────────────────────────────────────────\n\nexport type BankrChain = 'base' | 'mainnet' | 'polygon' | 'unichain' | 'solana';\n\n/** Map from our chain names to Bankr chain names */\nexport const CHAIN_MAP: Record<string, BankrChain> = {\n  base: 'base',\n  ethereum: 'mainnet',\n  mainnet: 'mainnet',\n  eth: 'mainnet',\n  polygon: 'polygon',\n  unichain: 'unichain',\n  solana: 'solana',\n  sol: 'solana',\n};\n\n// ─── User Info ───────────────────────────────────────────────────────────\n\nexport interface BankrWallet {\n  chain: 'evm' | 'solana';\n  address: string;\n}\n\nexport interface BankrSocialAccount {\n  platform: string;\n  username: string;\n}\n\nexport interface BankrUserInfo {\n  wallets: BankrWallet[];\n  bankrClub: { active: boolean } | boolean;\n  socialAccounts: BankrSocialAccount[];\n  refCode?: string;\n}\n\n/** Normalize bankrClub to a boolean regardless of API shape */\nexport function isBankrClubActive(info: BankrUserInfo): boolean {\n  if (typeof info.bankrClub === 'boolean') return info.bankrClub;\n  return info.bankrClub?.active ?? false;\n}\n\n// ─── Balances ────────────────────────────────────────────────────────────\n\n/** Raw token entry from Bankr API tokenBalances array */\nexport interface BankrRawTokenEntry {\n  address: string;\n  network: string;\n  token: {\n    balance: number;\n    balanceUSD: number;\n    baseToken: {\n      name: string;\n      address: string;\n      symbol: string;\n      imgUrl: string;\n      price: number;\n      decimals: number;\n    };\n  };\n}\n\n/** Raw per-chain balance from Bankr API */\nexport interface BankrRawChainBalance {\n  nativeBalance: string;\n  nativeUsd: string;\n  tokenBalances: BankrRawTokenEntry[];\n  total: string;\n}\n\n/** Raw balances response from GET /agent/balances */\nexport interface BankrRawBalancesResponse {\n  success: boolean;\n  evmAddress: string;\n  solAddress: string;\n  balances: Record<string, BankrRawChainBalance>;\n}\n\n/** Normalized token balance for our tools */\nexport interface BankrTokenBalance {\n  symbol: string;\n  name: string;\n  address: string;\n  balance: number;\n  balanceUsd: number;\n  price: number;\n  decimals: number;\n}\n\n/** Normalized per-chain balance for our tools */\nexport interface BankrChainBalance {\n  chain: string;\n  nativeBalance: string;\n  nativeBalanceUsd: number;\n  tokens: BankrTokenBalance[];\n  totalUsd: number;\n}\n\n/** Normalized balances response for our tools */\nexport interface BankrBalancesResponse {\n  chains: BankrChainBalance[];\n  totalUsd: number;\n}\n\n// ─── Prompt / Job ────────────────────────────────────────────────────────\n\nexport interface BankrPromptRequest {\n  prompt: string;\n  threadId?: string;\n}\n\nexport interface BankrPromptResponse {\n  jobId: string;\n  threadId: string;\n  status: 'pending';\n}\n\nexport type BankrJobStatus = 'pending' | 'processing' | 'completed' | 'failed' | 'cancelled';\n\nexport interface BankrTransaction {\n  type: string; // 'swap', 'transfer', 'deploy', etc.\n  hash?: string;\n  chain?: string;\n  metadata?: Record<string, unknown>;\n}\n\nexport interface BankrRichData {\n  tokenInfo?: Record<string, unknown>;\n  chartUrl?: string;\n  [key: string]: unknown;\n}\n\nexport interface BankrJobResult {\n  jobId: string;\n  status: BankrJobStatus;\n  response?: string;\n  richData?: BankrRichData;\n  transactions?: BankrTransaction[];\n  error?: string;\n}\n\n// ─── Sign ────────────────────────────────────────────────────────────────\n\nexport type BankrSignatureType = 'personal_sign' | 'eth_signTypedData_v4' | 'eth_signTransaction';\n\nexport interface BankrSignRequest {\n  signatureType: BankrSignatureType;\n  message?: string;          // for personal_sign\n  typedData?: unknown;       // for eth_signTypedData_v4\n  transaction?: unknown;     // for eth_signTransaction\n  chainId?: number;\n}\n\nexport interface BankrSignResponse {\n  signature: string;\n  signer: string;\n}\n\n// ─── Submit ──────────────────────────────────────────────────────────────\n\nexport interface BankrSubmitRequest {\n  signedTransaction: string;\n  chainId: number;\n  waitForConfirmation?: boolean;\n}\n\nexport interface BankrSubmitResponse {\n  hash: string;\n  status: 'submitted' | 'confirmed';\n  blockNumber?: number;\n}\n\n// ─── Token Deploy ────────────────────────────────────────────────────────\n\nexport interface BankrDeployRequest {\n  name: string;\n  symbol?: string;\n  description?: string;\n  imageUrl?: string;\n  chain?: 'base' | 'solana';\n  feeRecipient?: string;     // address, ENS, X handle, or Farcaster handle\n  tweetUrl?: string;\n  websiteUrl?: string;\n  simulateOnly?: boolean;\n  vault?: {\n    percentage: number;       // 1-90\n    lockDays: number;\n  };\n  vesting?: {\n    cliffDays: number;\n    vestingDays: number;\n  };\n}\n\nexport interface BankrFeeDistribution {\n  creator: number;\n  bankr: number;\n  protocol: number;\n  ecosystem?: number;\n}\n\nexport interface BankrDeployResponse {\n  tokenAddress: string;\n  poolId?: string;\n  txHash: string;\n  chain: string;\n  feeDistribution: BankrFeeDistribution;\n  simulateOnly?: boolean;\n}\n\n// ─── Errors ──────────────────────────────────────────────────────────────\n\nexport class BankrAuthError extends Error {\n  constructor(message = 'Invalid or expired BANKR_API_KEY') {\n    super(message);\n    this.name = 'BankrAuthError';\n  }\n}\n\nexport class BankrCreditsError extends Error {\n  constructor(message = 'LLM credits exhausted') {\n    super(message);\n    this.name = 'BankrCreditsError';\n  }\n}\n\nexport class BankrAccessError extends Error {\n  constructor(message = 'Agent API not enabled on this key. Enable at bankr.bot/api') {\n    super(message);\n    this.name = 'BankrAccessError';\n  }\n}\n\nexport class BankrReadOnlyError extends Error {\n  constructor(message = 'Key is read-only — cannot sign or submit transactions') {\n    super(message);\n    this.name = 'BankrReadOnlyError';\n  }\n}\n\nexport class BankrRateLimitError extends Error {\n  resetAt: number;\n  limit: number;\n  used: number;\n\n  constructor(resetAt: number, limit: number, used: number) {\n    super(`Rate limited. Resets at ${new Date(resetAt).toISOString()}. Used ${used}/${limit}.`);\n    this.name = 'BankrRateLimitError';\n    this.resetAt = resetAt;\n    this.limit = limit;\n    this.used = used;\n  }\n}\n\nexport class BankrServerError extends Error {\n  statusCode: number;\n\n  constructor(statusCode: number, message = 'Bankr API server error') {\n    super(`${message} (${statusCode}). Try again in a moment.`);\n    this.name = 'BankrServerError';\n    this.statusCode = statusCode;\n  }\n}\n"],"mappings":";;AAiBA,MAAa,YAAwC;CACnD,MAAM;CACN,UAAU;CACV,SAAS;CACT,KAAK;CACL,SAAS;CACT,UAAU;CACV,QAAQ;CACR,KAAK;CACN;;AAsBD,SAAgB,kBAAkB,MAA8B;AAC9D,KAAI,OAAO,KAAK,cAAc,UAAW,QAAO,KAAK;AACrD,QAAO,KAAK,WAAW,UAAU;;AA6KnC,IAAa,iBAAb,cAAoC,MAAM;CACxC,YAAY,UAAU,oCAAoC;AACxD,QAAM,QAAQ;AACd,OAAK,OAAO;;;AAIhB,IAAa,oBAAb,cAAuC,MAAM;CAC3C,YAAY,UAAU,yBAAyB;AAC7C,QAAM,QAAQ;AACd,OAAK,OAAO;;;AAIhB,IAAa,mBAAb,cAAsC,MAAM;CAC1C,YAAY,UAAU,8DAA8D;AAClF,QAAM,QAAQ;AACd,OAAK,OAAO;;;AAIhB,IAAa,qBAAb,cAAwC,MAAM;CAC5C,YAAY,UAAU,yDAAyD;AAC7E,QAAM,QAAQ;AACd,OAAK,OAAO;;;AAIhB,IAAa,sBAAb,cAAyC,MAAM;CAC7C;CACA;CACA;CAEA,YAAY,SAAiB,OAAe,MAAc;AACxD,QAAM,2BAA2B,IAAI,KAAK,QAAQ,CAAC,aAAa,CAAC,SAAS,KAAK,GAAG,MAAM,GAAG;AAC3F,OAAK,OAAO;AACZ,OAAK,UAAU;AACf,OAAK,QAAQ;AACb,OAAK,OAAO;;;AAIhB,IAAa,mBAAb,cAAsC,MAAM;CAC1C;CAEA,YAAY,YAAoB,UAAU,0BAA0B;AAClE,QAAM,GAAG,QAAQ,IAAI,WAAW,2BAA2B;AAC3D,OAAK,OAAO;AACZ,OAAK,aAAa"}