import { Address, Hex } from 'viem';
import { RPCMethod, GenericRPCMessage, RPCAppDefinition, RPCChannelStatus, RPCTransferAllocation, RPCAppSessionAllocation, RPCAllowance, GetLedgerTransactionsFilters, RPCAppStateIntent, RPCProtocolVersion } from '.';
export interface AuthChallengeRequest extends GenericRPCMessage {
    method: RPCMethod.AuthChallenge;
    params: {
        challenge_message: string;
    };
}
export interface AuthVerifyRequest extends GenericRPCMessage {
    method: RPCMethod.AuthVerify;
    params: {
        jwt: string;
    } | {
        challenge: string;
    };
}
export interface GetConfigRequest extends GenericRPCMessage {
    method: RPCMethod.GetConfig;
    params: {};
}
export interface GetLedgerBalancesRequest extends GenericRPCMessage {
    method: RPCMethod.GetLedgerBalances;
    params: {
        account_id?: string;
    };
}
export interface GetLedgerEntriesRequest extends GenericRPCMessage {
    method: RPCMethod.GetLedgerEntries;
    params: {
        account_id?: string;
        asset?: string;
        wallet?: Address;
    };
}
export interface GetLedgerTransactionsRequest extends GenericRPCMessage {
    method: RPCMethod.GetLedgerTransactions;
    params: GetLedgerTransactionsFilters & {
        account_id: string;
    };
}
export interface GetUserTagRequest extends GenericRPCMessage {
    method: RPCMethod.GetUserTag;
    params: {};
}
export interface GetSessionKeysRequest extends GenericRPCMessage {
    method: RPCMethod.GetSessionKeys;
    params: {};
}
export interface RevokeSessionKeyRequest extends GenericRPCMessage {
    method: RPCMethod.RevokeSessionKey;
    params: {
        session_key: Address;
    };
}
export interface CreateAppSessionRequest extends GenericRPCMessage {
    method: RPCMethod.CreateAppSession;
    params: {
        definition: RPCAppDefinition;
        allocations: RPCAppSessionAllocation[];
        session_data?: string;
    };
}
export interface SubmitAppStateRequest extends GenericRPCMessage {
    method: RPCMethod.SubmitAppState;
    params: SubmitAppStateRequestParamsV02 | SubmitAppStateRequestParamsV04;
}
export interface CloseAppSessionRequest extends GenericRPCMessage {
    method: RPCMethod.CloseAppSession;
    params: {
        app_session_id: Hex;
        allocations: RPCAppSessionAllocation[];
        session_data?: string;
    };
}
export interface GetAppDefinitionRequest extends GenericRPCMessage {
    method: RPCMethod.GetAppDefinition;
    params: {
        app_session_id: Hex;
    };
}
export interface GetAppSessionsRequest extends GenericRPCMessage {
    method: RPCMethod.GetAppSessions;
    params: {
        participant?: Address;
        status?: RPCChannelStatus;
    };
}
export interface CreateChannelRequest extends GenericRPCMessage {
    method: RPCMethod.CreateChannel;
    params: {
        chain_id: number;
        token: Address;
    };
}
export interface ResizeChannelRequest extends GenericRPCMessage {
    method: RPCMethod.ResizeChannel;
    params: {
        channel_id: Hex;
        resize_amount?: bigint;
        allocate_amount?: bigint;
        funds_destination: Address;
    };
}
export interface CloseChannelRequest extends GenericRPCMessage {
    method: RPCMethod.CloseChannel;
    params: {
        channel_id: Hex;
        funds_destination: Address;
    };
}
export interface GetChannelsRequest extends GenericRPCMessage {
    method: RPCMethod.GetChannels;
    params: {
        participant?: Address;
        status?: RPCChannelStatus;
    };
}
export interface GetRPCHistoryRequest extends GenericRPCMessage {
    method: RPCMethod.GetRPCHistory;
    params: {};
}
export interface GetAssetsRequest extends GenericRPCMessage {
    method: RPCMethod.GetAssets;
    params: {
        chain_id?: number;
    };
}
export interface AuthRequest extends GenericRPCMessage {
    method: RPCMethod.AuthRequest;
    params: {
        address: Address;
        session_key: Address;
        application: string;
        allowances: RPCAllowance[];
        expires_at: bigint;
        scope: string;
    };
}
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 TransferRequest extends GenericRPCMessage {
    method: RPCMethod.Transfer;
    params: {
        destination?: Address;
        destination_user_tag?: string;
        allocations: RPCTransferAllocation[];
    };
}
export interface CleanupSessionKeyCacheRequest extends GenericRPCMessage {
    method: RPCMethod.CleanupSessionKeyCache;
    params: {};
}
export type AuthChallengeRequestParams = AuthChallengeRequest['params'];
export type AuthVerifyRequestParams = AuthVerifyRequest['params'];
export type GetConfigRequestParams = GetConfigRequest['params'];
export type GetLedgerBalancesRequestParams = GetLedgerBalancesRequest['params'];
export type GetLedgerEntriesRequestParams = GetLedgerEntriesRequest['params'];
export type GetLedgerTransactionsRequestParams = GetLedgerTransactionsRequest['params'];
export type GetUserTagRequestParams = GetUserTagRequest['params'];
export type GetSessionKeysRequestParams = GetSessionKeysRequest['params'];
export type CreateAppSessionRequestParams = CreateAppSessionRequest['params'];
export type SubmitAppStateRequestParamsV02 = {
    app_session_id: Hex;
    allocations: RPCAppSessionAllocation[];
    session_data?: string;
};
export type SubmitAppStateRequestParamsV04 = {
    app_session_id: Hex;
    intent: RPCAppStateIntent;
    version: number;
    allocations: RPCAppSessionAllocation[];
    session_data?: string;
};
export type SubmitAppStateParamsPerProtocol = {
    [RPCProtocolVersion.NitroRPC_0_2]: SubmitAppStateRequestParamsV02;
    [RPCProtocolVersion.NitroRPC_0_4]: SubmitAppStateRequestParamsV04;
};
export type SubmitAppStateRequestParams = SubmitAppStateRequestParamsV02 | SubmitAppStateRequestParamsV04;
export type CloseAppSessionRequestParams = CloseAppSessionRequest['params'];
export type GetAppDefinitionRequestParams = GetAppDefinitionRequest['params'];
export type GetAppSessionsRequestParams = GetAppSessionsRequest['params'];
export type CreateChannelRequestParams = CreateChannelRequest['params'];
export type ResizeChannelRequestParams = ResizeChannelRequest['params'];
export type CloseChannelRequestParams = CloseChannelRequest['params'];
export type GetChannelsRequestParams = GetChannelsRequest['params'];
export type GetRPCHistoryParams = GetRPCHistoryRequest['params'];
export type GetAssetsRequestParams = GetAssetsRequest['params'];
export type AuthRequestParams = AuthRequest['params'];
export type MessageRequestParams = MessageRequest['params'];
export type PingRequestParams = PingRequest['params'];
export type PongRequestParams = PongRequest['params'];
export type TransferRequestParams = TransferRequest['params'];
export type CleanupSessionKeyCacheRequestParams = CleanupSessionKeyCacheRequest['params'];
export type RPCRequest = AuthChallengeRequest | AuthVerifyRequest | AuthRequest | GetConfigRequest | GetLedgerBalancesRequest | GetLedgerEntriesRequest | GetLedgerTransactionsRequest | GetUserTagRequest | GetSessionKeysRequest | RevokeSessionKeyRequest | CreateAppSessionRequest | SubmitAppStateRequest | CloseAppSessionRequest | GetAppDefinitionRequest | GetAppSessionsRequest | CreateChannelRequest | ResizeChannelRequest | CloseChannelRequest | GetChannelsRequest | GetRPCHistoryRequest | GetAssetsRequest | PingRequest | PongRequest | MessageRequest | TransferRequest | CleanupSessionKeyCacheRequest;
export type RPCRequestParamsByMethod = {
    [RPCMethod.AuthChallenge]: AuthChallengeRequestParams;
    [RPCMethod.AuthVerify]: AuthVerifyRequestParams;
    [RPCMethod.AuthRequest]: AuthRequestParams;
    [RPCMethod.GetConfig]: GetConfigRequestParams;
    [RPCMethod.GetLedgerBalances]: GetLedgerBalancesRequestParams;
    [RPCMethod.GetLedgerEntries]: GetLedgerEntriesRequestParams;
    [RPCMethod.GetLedgerTransactions]: GetLedgerTransactionsRequestParams;
    [RPCMethod.GetUserTag]: GetUserTagRequestParams;
    [RPCMethod.GetSessionKeys]: GetSessionKeysRequestParams;
    [RPCMethod.CreateAppSession]: CreateAppSessionRequestParams;
    [RPCMethod.SubmitAppState]: SubmitAppStateRequestParams;
    [RPCMethod.CloseAppSession]: CloseAppSessionRequestParams;
    [RPCMethod.GetAppDefinition]: GetAppDefinitionRequestParams;
    [RPCMethod.GetAppSessions]: GetAppSessionsRequestParams;
    [RPCMethod.CreateChannel]: CreateChannelRequestParams;
    [RPCMethod.ResizeChannel]: ResizeChannelRequestParams;
    [RPCMethod.CloseChannel]: CloseChannelRequestParams;
    [RPCMethod.GetChannels]: GetChannelsRequestParams;
    [RPCMethod.GetRPCHistory]: GetRPCHistoryParams;
    [RPCMethod.GetAssets]: GetAssetsRequestParams;
    [RPCMethod.Ping]: PingRequestParams;
    [RPCMethod.Pong]: PongRequestParams;
    [RPCMethod.Message]: any;
    [RPCMethod.Transfer]: TransferRequestParams;
    [RPCMethod.CleanupSessionKeyCache]: CleanupSessionKeyCacheRequestParams;
};
