import { Address, Hex } from 'viem';
import { RPCMethod, GenericRPCMessage, AppDefinition, RPCChannelStatus, TransferAllocation } from '.';
export interface AuthChallengeRequestParams {
    challenge_message: string;
}
export type AuthChallengeRPCRequestParams = AuthChallengeRequestParams;
export interface AuthChallengeRequest extends GenericRPCMessage {
    method: RPCMethod.AuthChallenge;
    params: AuthChallengeRequestParams[];
}
export type AuthVerifyRequestParams = {
    jwt: string;
} | {
    challenge: string;
};
export type AuthVerifyRPCRequestParams = AuthVerifyRequestParams;
export interface AuthVerifyRequest extends GenericRPCMessage {
    method: RPCMethod.AuthVerify;
    params: AuthVerifyRequestParams[];
}
export interface GetConfigRequest extends GenericRPCMessage {
    method: RPCMethod.GetConfig;
    params: [];
}
export interface GetLedgerBalancesRequestParams {
    participant: Address;
    account_id?: string;
}
export type GetLedgerBalancesRPCRequestParams = GetLedgerBalancesRequestParams;
export interface GetLedgerBalancesRequest extends GenericRPCMessage {
    method: RPCMethod.GetLedgerBalances;
    params: [GetLedgerBalancesRequestParams];
}
export interface GetLedgerEntriesRequestParams {
    account_id?: string;
    asset?: string;
    wallet?: Address;
}
export type GetLedgerEntriesRPCRequestParams = GetLedgerEntriesRequestParams;
export interface GetLedgerEntriesRequest extends GenericRPCMessage {
    method: RPCMethod.GetLedgerEntries;
    params: [GetLedgerEntriesRequestParams];
}
export declare enum TxType {
    Transfer = "transfer",
    Deposit = "deposit",
    Withdrawal = "withdrawal",
    AppDeposit = "app_deposit",
    AppWithdrawal = "app_withdrawal"
}
export interface GetLedgerTransactionsFilters {
    asset?: string;
    tx_type?: TxType;
    offset?: number;
    limit?: number;
    sort?: 'asc' | 'desc';
}
export interface GetLedgerTransactionsRequestParams extends GetLedgerTransactionsFilters {
    account_id: string;
}
export type GetLedgerTransactionsRPCRequestParams = GetLedgerTransactionsRequestParams;
export interface GetLedgerTransactionsRequest extends GenericRPCMessage {
    method: RPCMethod.GetLedgerTransactions;
    params: GetLedgerTransactionsRequestParams;
}
export interface GetUserTagRequestParams {
}
export type GetUserTagRPCRequestParams = GetUserTagRequestParams;
export interface GetUserTagRequest extends GenericRPCMessage {
    method: RPCMethod.GetUserTag;
    params: [];
}
export type AppSessionAllocation = {
    participant: Address;
    asset: string;
    amount: string;
};
export interface CreateAppSessionRequestParams {
    definition: AppDefinition;
    allocations: AppSessionAllocation[];
    session_data?: string;
}
export type CreateAppSessionRPCRequestParams = CreateAppSessionRequestParams;
export interface CreateAppSessionRequest extends GenericRPCMessage {
    method: RPCMethod.CreateAppSession;
    params: [CreateAppSessionRequestParams];
}
export interface SubmitAppStateRequestParams {
    app_session_id: Hex;
    allocations: AppSessionAllocation[];
    session_data?: string;
}
export type SubmitAppStateRPCRequestParams = SubmitAppStateRequestParams;
export interface SubmitAppStateRequest extends GenericRPCMessage {
    method: RPCMethod.SubmitAppState;
    params: [SubmitAppStateRequestParams];
}
export interface CloseAppSessionRequestParams {
    app_session_id: Hex;
    allocations: AppSessionAllocation[];
    session_data?: string;
}
export type CloseAppSessionRPCRequestParams = CloseAppSessionRequestParams;
export interface CloseAppSessionRequest extends GenericRPCMessage {
    method: RPCMethod.CloseAppSession;
    params: [CloseAppSessionRequestParams];
}
export interface GetAppDefinitionRequestParams {
    app_session_id: Hex;
}
export type GetAppDefinitionRPCRequestParams = GetAppDefinitionRequestParams;
export interface GetAppDefinitionRequest extends GenericRPCMessage {
    method: RPCMethod.GetAppDefinition;
    params: [GetAppDefinitionRequestParams];
}
export interface GetAppSessionsRequestParams {
    participant: Address;
    status: RPCChannelStatus;
}
export type GetAppSessionsRPCRequestParams = GetAppSessionsRequestParams;
export interface GetAppSessionsRequest extends GenericRPCMessage {
    method: RPCMethod.GetAppSessions;
    params: [GetAppSessionsRequestParams];
}
export type ResizeChannelRequestParams = {
    channel_id: Hex;
    resize_amount?: bigint;
    allocate_amount?: bigint;
    funds_destination: Address;
};
export type ResizeChannelRPCRequestParams = ResizeChannelRequestParams;
export interface ResizeChannelRequest extends GenericRPCMessage {
    method: RPCMethod.ResizeChannel;
    params: [ResizeChannelRequestParams];
}
export interface CloseChannelRequestParams {
    channel_id: Hex;
    funds_destination: Address;
}
export type CloseChannelRPCRequestParams = CloseChannelRequestParams;
export interface CloseChannelRequest extends GenericRPCMessage {
    method: RPCMethod.CloseChannel;
    params: [CloseChannelRequestParams];
}
export interface GetChannelsRequestParams {
    participant: Address;
    status: RPCChannelStatus;
}
export type GetChannelsRPCRequestParams = GetChannelsRequestParams;
export interface GetChannelsRequest extends GenericRPCMessage {
    method: RPCMethod.GetChannels;
    params: [GetChannelsRequestParams];
}
export interface GetRPCHistoryRequest extends GenericRPCMessage {
    method: RPCMethod.GetRPCHistory;
    params: [];
}
export interface GetAssetsRequestParams {
    chain_id?: number;
}
export type GetAssetsRPCRequestParams = GetAssetsRequestParams;
export interface GetAssetsRequest extends GenericRPCMessage {
    method: RPCMethod.GetAssets;
    params: [GetAssetsRequestParams];
}
export type Allowance = {
    asset: string;
    amount: string;
};
export interface AuthRequestParams {
    wallet: Address;
    participant: Address;
    app_name: string;
    allowances: Allowance[];
    expire: string;
    scope: string;
    application: Address;
}
export type AuthRequestRPCRequestParams = AuthRequestParams;
export interface AuthRequest extends GenericRPCMessage {
    method: RPCMethod.AuthRequest;
    params: AuthRequestParams[];
}
export interface MessageRequest extends GenericRPCMessage {
    method: RPCMethod.Message;
    params: any[];
}
export interface PingRequest extends GenericRPCMessage {
    method: RPCMethod.Ping;
    params: [];
}
export interface PongRequest extends GenericRPCMessage {
    method: RPCMethod.Pong;
    params: [];
}
export interface TransferRequestParams {
    destination?: Address;
    destination_user_tag?: string;
    allocations: TransferAllocation[];
}
export interface TransferRequest extends GenericRPCMessage {
    method: RPCMethod.Transfer;
    params: TransferRequestParams;
}
export type TransferRPCRequestParams = TransferRequestParams;
export type RPCRequest = AuthChallengeRequest | AuthVerifyRequest | AuthRequest | GetConfigRequest | GetLedgerBalancesRequest | GetLedgerEntriesRequest | GetLedgerTransactionsRequest | GetUserTagRequest | CreateAppSessionRequest | SubmitAppStateRequest | CloseAppSessionRequest | GetAppDefinitionRequest | GetAppSessionsRequest | ResizeChannelRequest | CloseChannelRequest | GetChannelsRequest | GetRPCHistoryRequest | GetAssetsRequest | PingRequest | PongRequest | MessageRequest | TransferRequest;
export type RPCRequestParamsByMethod = {
    [RPCMethod.AuthChallenge]: AuthChallengeRequestParams;
    [RPCMethod.AuthVerify]: AuthVerifyRequestParams;
    [RPCMethod.AuthRequest]: AuthRequestParams;
    [RPCMethod.GetConfig]: [];
    [RPCMethod.GetLedgerBalances]: GetLedgerBalancesRequestParams;
    [RPCMethod.GetLedgerEntries]: GetLedgerEntriesRequestParams;
    [RPCMethod.GetLedgerTransactions]: GetLedgerTransactionsRequestParams;
    [RPCMethod.GetUserTag]: [];
    [RPCMethod.CreateAppSession]: CreateAppSessionRequestParams;
    [RPCMethod.SubmitAppState]: SubmitAppStateRequestParams;
    [RPCMethod.CloseAppSession]: CloseAppSessionRequestParams;
    [RPCMethod.GetAppDefinition]: GetAppDefinitionRequestParams;
    [RPCMethod.GetAppSessions]: GetAppSessionsRequestParams;
    [RPCMethod.ResizeChannel]: ResizeChannelRequestParams;
    [RPCMethod.CloseChannel]: CloseChannelRequestParams;
    [RPCMethod.GetChannels]: GetChannelsRequestParams;
    [RPCMethod.GetRPCHistory]: [];
    [RPCMethod.GetAssets]: GetAssetsRequestParams;
    [RPCMethod.Ping]: [];
    [RPCMethod.Pong]: [];
    [RPCMethod.Message]: any[];
    [RPCMethod.Transfer]: TransferRequestParams;
};
