import { Address, Hex } from 'viem';
import { RPCMethod, GenericRPCMessage, RPCChannelStatus, RPCChannelUpdate, RPCNetworkInfo, RPCBalance, RPCLedgerEntry, RPCAppSession, RPCHistoryEntry, RPCAsset, RPCTransaction, RPCChannelUpdateWithWallet, RPCChannelOperation, RPCChannel, RPCSessionKey } from '.';
export interface AuthChallengeResponse extends GenericRPCMessage {
    method: RPCMethod.AuthChallenge;
    params: {
        challengeMessage: string;
    };
}
export interface ErrorResponse extends GenericRPCMessage {
    method: RPCMethod.Error;
    params: {
        error: string;
    };
}
export interface GetConfigResponse extends GenericRPCMessage {
    method: RPCMethod.GetConfig;
    params: {
        brokerAddress: Address;
        networks: RPCNetworkInfo[];
    };
}
export interface GetLedgerBalancesResponse extends GenericRPCMessage {
    method: RPCMethod.GetLedgerBalances;
    params: {
        ledgerBalances: RPCBalance[];
    };
}
export interface GetLedgerEntriesResponse extends GenericRPCMessage {
    method: RPCMethod.GetLedgerEntries;
    params: {
        ledgerEntries: RPCLedgerEntry[];
    };
}
export interface GetLedgerTransactionsResponse extends GenericRPCMessage {
    method: RPCMethod.GetLedgerTransactions;
    params: {
        ledgerTransactions: RPCTransaction[];
    };
}
export interface GetUserTagResponse extends GenericRPCMessage {
    method: RPCMethod.GetUserTag;
    params: {
        tag: string;
    };
}
export interface GetSessionKeysResponse extends GenericRPCMessage {
    method: RPCMethod.GetSessionKeys;
    params: {
        sessionKeys: RPCSessionKey[];
    };
}
export interface RevokeSessionKeyResponse extends GenericRPCMessage {
    method: RPCMethod.RevokeSessionKey;
    params: {
        sessionKey: Address;
    };
}
export interface CreateAppSessionResponse extends GenericRPCMessage {
    method: RPCMethod.CreateAppSession;
    params: {
        appSessionId: Hex;
        version: number;
        status: RPCChannelStatus;
    };
}
export interface SubmitAppStateResponse extends GenericRPCMessage {
    method: RPCMethod.SubmitAppState;
    params: {
        appSessionId: Hex;
        version: number;
        status: RPCChannelStatus;
    };
}
export interface CloseAppSessionResponse extends GenericRPCMessage {
    method: RPCMethod.CloseAppSession;
    params: {
        appSessionId: Hex;
        version: number;
        status: RPCChannelStatus;
    };
}
export interface GetAppDefinitionResponse extends GenericRPCMessage {
    method: RPCMethod.GetAppDefinition;
    params: {
        protocol: string;
        participants: Address[];
        weights: number[];
        quorum: number;
        challenge: number;
        nonce: number;
    };
}
export interface GetAppSessionsResponse extends GenericRPCMessage {
    method: RPCMethod.GetAppSessions;
    params: {
        appSessions: RPCAppSession[];
    };
}
export interface CreateChannelResponse extends GenericRPCMessage {
    method: RPCMethod.CreateChannel;
    params: RPCChannelOperation & {
        channel: RPCChannel;
    };
}
export interface ResizeChannelResponse extends GenericRPCMessage {
    method: RPCMethod.ResizeChannel;
    params: RPCChannelOperation;
}
export interface CloseChannelResponse extends GenericRPCMessage {
    method: RPCMethod.CloseChannel;
    params: RPCChannelOperation;
}
export interface GetChannelsResponse extends GenericRPCMessage {
    method: RPCMethod.GetChannels;
    params: {
        channels: RPCChannelUpdateWithWallet[];
    };
}
export interface GetRPCHistoryResponse extends GenericRPCMessage {
    method: RPCMethod.GetRPCHistory;
    params: {
        rpcEntries: RPCHistoryEntry[];
    };
}
export interface GetAssetsResponse extends GenericRPCMessage {
    method: RPCMethod.GetAssets;
    params: {
        assets: RPCAsset[];
    };
}
export interface AssetsResponse extends GenericRPCMessage {
    method: RPCMethod.Assets;
    params: {
        assets: RPCAsset[];
    };
}
export interface AuthVerifyResponse extends GenericRPCMessage {
    method: RPCMethod.AuthVerify;
    params: {
        address: Address;
        sessionKey: Address;
        success: boolean;
        jwtToken?: string;
    };
}
export interface AuthRequestResponse extends GenericRPCMessage {
    method: RPCMethod.AuthRequest;
    params: {
        challengeMessage: string;
    };
}
export interface MessageResponse extends GenericRPCMessage {
    method: RPCMethod.Message;
    params: {};
}
export interface BalanceUpdateResponse extends GenericRPCMessage {
    method: RPCMethod.BalanceUpdate;
    params: {
        balanceUpdates: RPCBalance[];
    };
}
export interface ChannelsUpdateResponse extends GenericRPCMessage {
    method: RPCMethod.ChannelsUpdate;
    params: {
        channels: RPCChannelUpdate[];
    };
}
export interface ChannelUpdateResponse extends GenericRPCMessage {
    method: RPCMethod.ChannelUpdate;
    params: RPCChannelUpdate;
}
export interface PingResponse extends GenericRPCMessage {
    method: RPCMethod.Ping;
    params: {};
}
export interface PongResponse extends GenericRPCMessage {
    method: RPCMethod.Pong;
    params: {};
}
export interface TransferResponse extends GenericRPCMessage {
    method: RPCMethod.Transfer;
    params: {
        transactions: RPCTransaction[];
    };
}
export interface CleanupSessionKeyCacheResponse extends GenericRPCMessage {
    method: RPCMethod.CleanupSessionKeyCache;
    params: {};
}
export interface TransferNotificationResponse extends GenericRPCMessage {
    method: RPCMethod.TransferNotification;
    params: {
        transactions: RPCTransaction[];
    };
}
export type AuthChallengeResponseParams = AuthChallengeResponse['params'];
export type AuthVerifyResponseParams = AuthVerifyResponse['params'];
export type ErrorResponseParams = ErrorResponse['params'];
export type GetConfigResponseParams = GetConfigResponse['params'];
export type GetLedgerBalancesResponseParams = GetLedgerBalancesResponse['params'];
export type GetLedgerEntriesResponseParams = GetLedgerEntriesResponse['params'];
export type GetLedgerTransactionsResponseParams = GetLedgerTransactionsResponse['params'];
export type GetUserTagResponseParams = GetUserTagResponse['params'];
export type GetSessionKeysResponseParams = GetSessionKeysResponse['params'];
export type RevokeSessionKeyResponseParams = RevokeSessionKeyResponse['params'];
export type CreateAppSessionResponseParams = CreateAppSessionResponse['params'];
export type SubmitAppStateResponseParams = SubmitAppStateResponse['params'];
export type CloseAppSessionResponseParams = CloseAppSessionResponse['params'];
export type GetAppDefinitionResponseParams = GetAppDefinitionResponse['params'];
export type GetAppSessionsResponseParams = GetAppSessionsResponse['params'];
export type CreateChannelResponseParams = CreateChannelResponse['params'];
export type ResizeChannelResponseParams = ResizeChannelResponse['params'];
export type CloseChannelResponseParams = CloseChannelResponse['params'];
export type GetChannelsResponseParams = GetChannelsResponse['params'];
export type GetRPCHistoryResponseParams = GetRPCHistoryResponse['params'];
export type GetAssetsResponseParams = GetAssetsResponse['params'];
export type AssetsResponseParams = AssetsResponse['params'];
export type AuthRequestResponseParams = AuthRequestResponse['params'];
export type MessageResponseParams = MessageResponse['params'];
export type BalanceUpdateResponseParams = BalanceUpdateResponse['params'];
export type ChannelsUpdateResponseParams = ChannelsUpdateResponse['params'];
export type ChannelUpdateResponseParams = ChannelUpdateResponse['params'];
export type PingResponseParams = PingResponse['params'];
export type PongResponseParams = PongResponse['params'];
export type TransferResponseParams = TransferResponse['params'];
export type CleanupSessionKeyCacheResponseParams = CleanupSessionKeyCacheResponse['params'];
export type TransferNotificationResponseParams = TransferNotificationResponse['params'];
export type RPCResponse = AuthChallengeResponse | AuthVerifyResponse | AuthRequestResponse | ErrorResponse | GetConfigResponse | GetLedgerBalancesResponse | GetLedgerEntriesResponse | GetLedgerTransactionsResponse | GetUserTagResponse | GetSessionKeysResponse | RevokeSessionKeyResponse | CreateAppSessionResponse | SubmitAppStateResponse | CloseAppSessionResponse | GetAppDefinitionResponse | GetAppSessionsResponse | CreateChannelResponse | ResizeChannelResponse | CloseChannelResponse | GetChannelsResponse | GetRPCHistoryResponse | GetAssetsResponse | AssetsResponse | PingResponse | PongResponse | TransferResponse | CleanupSessionKeyCacheResponse | MessageResponse | BalanceUpdateResponse | ChannelsUpdateResponse | ChannelUpdateResponse | TransferNotificationResponse;
export type ExtractResponseByMethod<M extends RPCMethod> = Extract<RPCResponse, {
    method: M;
}>;
export type RPCResponseParams = ExtractResponseByMethod<RPCMethod>['params'];
export type RPCResponseParamsByMethod = {
    [M in RPCMethod]: ExtractResponseByMethod<M>['params'];
};
