export interface ResourceParams {
  "treasury.account": { chainId: "1" | "8453" | "42161"; safe: string };
  "treasury.lending": { chainId: "1" | "8453"; safe: string };
  "transactions.status": { network: "ethereum" | "base" | "arbitrum" | "optimism" | "polygon" | "bnb" | "avalanche"; hash: string };
  "hyperliquid.markets": { kind?: "perp" | "spot"; dex?: string };
  "hyperliquid.book": { kind?: "perp" | "spot"; dex?: string; market: string };
  "hyperliquid.chart": { kind?: "perp" | "spot"; dex?: string; market: string; interval?: "5m" | "15m" | "1h" | "4h" | "1d" };
  "hyperliquid.account": { wallet: string; user?: string; dex?: string };
  "pendle.markets": { network: "ethereum" | "base" | "arbitrum" | "optimism" | "polygon" | "bnb" | "avalanche"; cursor?: string; expired?: "0" | "1" };
  "pendle.market": { network: "ethereum" | "base" | "arbitrum" | "optimism" | "polygon" | "bnb" | "avalanche"; market: string; wallet?: string };
  "morpho.markets": { network: "ethereum" | "base" | "arbitrum" | "optimism" | "polygon" | "bnb" | "avalanche"; cursor?: string };
  "morpho.market": { network: "ethereum" | "base" | "arbitrum" | "optimism" | "polygon" | "bnb" | "avalanche"; marketId: string; wallet?: string };
  "morpho.positions": { network: "ethereum" | "base" | "arbitrum" | "optimism" | "polygon" | "bnb" | "avalanche"; wallet: string; skip?: string };
  "liquidity.position": { network: "ethereum" | "base" | "arbitrum" | "optimism" | "polygon" | "bnb" | "avalanche"; protocol?: "uniswap-v3" | "pancakeswap-v3" | "aerodrome" | "camelot" | "quickswap"; wallet: string; tokenId: string };
  "liquidity.positions": { network: "ethereum" | "base" | "arbitrum" | "optimism" | "polygon" | "bnb" | "avalanche"; protocol?: "uniswap-v3" | "pancakeswap-v3" | "aerodrome" | "camelot" | "quickswap"; wallet: string; cursor?: string };
  "solana-liquidity.pool": { provider: "orca" | "meteora" | "raydium"; address: string };
  "solana-liquidity.position": { provider: "orca" | "meteora" | "raydium"; pool: string; position: string; wallet: string };
  "solana-liquidity.positions": { provider: "orca" | "meteora" | "raydium"; pool: string; wallet: string; fresh?: "0" | "1" };
  "boros.markets": { cursor?: string; matured?: "0" | "1" };
  "boros.market": { marketId: string };
  "boros.portfolio": { wallet: string };
  "gmx.markets": {  };
  "gmx.account": { wallet: string };
}
export type Resource = keyof ResourceParams;
export interface RequestOptions { signal?: AbortSignal; }
export interface ReadResult<T = Record<string, unknown>> { requestId:string; resource:string; state:'available'|'partial'|'stale'; servedAt:number; observedAt:number|null; freshness:'observed'|'unknown'|'stale'; durationMs:number; pagination:{next:string|number|null;requestParameter:'cursor'|'skip'}|null; data:T; }
export type BatchRequest = { [K in Resource]: {id:string;resource:K;params:ResourceParams[K]} }[Resource];
export type BatchItem = (ReadResult & {id:string;status:200}) | {id:string;resource:string;status:number;error:string;code:string;retryable:boolean};
export interface WorkflowInput { network:'solana'|'ethereum'|'base';source:'wallet'|'jupiter'|'aave'|'morpho';destination:'wallet'|'jupiter'|'aave'|'morpho'|'perps';amount:string;subAccountId?:number; }
export interface WorkflowDraft {version:1;requestId:string;intent:WorkflowInput;steps:Array<{action:string;product:string;asset:string;amount:string|null}>;reviewUrl:string;state:'draft';atomic:false;quote:null;costs:{status:'not-quoted';networkGas:null;accountRent:null;swapFees:null;providerFees:null};requirements:string[];execution:string;}
export interface TreasuryInput {chainId:1|8453;safe:string;owner:string;action:'lending-supply'|'lending-withdraw'|'lending-repay'|'lending-repay-supply';amount:string;repayAll?:boolean;}
export interface TreasuryPreparation {at:number;expiresAt:number;mode:'unsigned-proposal';proposal:{version:1;intent:Record<string,unknown>;nonce:string;hash:string};calls:Array<{to:string;data:string;value:string;operation:0}>;account:Record<string,unknown>;ownerApproval:Record<string,unknown>;reviewUrl:string;simulation:{operation:'passed-at-read-block'|'requires-owner-threshold';execution:'required-before-signing'};requirements:string[];costs:{networkGas:null;protocolFees:null;status:'not-quoted'};submitted:false;}
export interface SwapInput {network:'ethereum'|'base'|'arbitrum'|'optimism'|'polygon'|'bnb'|'avalanche';from:string;to:string;amount:string;wallet:string;slippageBps:number;}
export class BitpontApiError extends Error {status:number;code:string;requestId:string|null;retryable:boolean;}
export class BitpontClient {
 constructor(options:{apiKey:string;baseUrl?:string;timeoutMs?:number;retries?:0|1|2;fetchImpl?:typeof fetch});
 capabilities(options?:RequestOptions):Promise<Record<string,unknown>>;
 resources(options?:RequestOptions):Promise<Record<string,unknown>>;
 usage(options?:RequestOptions):Promise<Record<string,unknown>>;
 read<K extends Resource>(resource:K,params:ResourceParams[K],options?:RequestOptions):Promise<ReadResult>;
 batch(requests:BatchRequest[],options?:RequestOptions):Promise<{requestId:string;complete:boolean;results:BatchItem[]}>;
 quoteSwap(input:SwapInput,options?:RequestOptions):Promise<ReadResult>;
 prepareTreasury(input:TreasuryInput,options?:RequestOptions):Promise<ReadResult<TreasuryPreparation>>;
 prepareWorkflow(input:WorkflowInput,options?:RequestOptions):Promise<WorkflowDraft>;
 pages<K extends Resource>(resource:K,params:ResourceParams[K],options?:RequestOptions & {maxPages?:number}):AsyncGenerator<ReadResult>;
}
