import { providers } from "ethers"; import { AppRegistry, DefaultApp, AppInstanceJson } from "./app"; import { Address, Bytes32, DecString, PublicIdentifier } from "./basic"; import { ChannelProviderConfig, IChannelProvider } from "./channelProvider"; import { IChannelSigner } from "./crypto"; import { EventName, EventPayload } from "./events"; import { ILogger, ILoggerService } from "./logger"; import { IMessagingService } from "./messaging"; import { NodeResponses } from "./node"; import { MethodResults, MethodParams } from "./methods"; import { IStoreService } from "./store"; import { PublicParams, PublicResults } from "./public"; import { AppAction } from "."; ///////////////////////////////// // channelProvider / signer are both optional but one of them needs to be provided export interface ClientOptions { channelProvider?: IChannelProvider; ethProviderUrl: string; chainId?: number; signer?: string | IChannelSigner; store?: IStoreService; logger?: ILogger; loggerService?: ILoggerService; logLevel?: number; messaging?: IMessagingService; nodeUrl?: string; // node's HTTP endpoint messagingUrl?: string; // optional override for messaging endpoint skipSync?: boolean; skipInitStore?: boolean; } export interface IConnextClient { //////////////////////////////////////// // Properties appRegistry: AppRegistry; config: NodeResponses.GetConfig; channelProvider: IChannelProvider; ethProvider: providers.JsonRpcProvider; chainId: number; signerAddress: Address; multisigAddress: Address; nodeIdentifier: PublicIdentifier; nodeSignerAddress: Address; publicIdentifier: PublicIdentifier; // publicIdentifier? // Expose some internal machineary for easier debugging messaging: IMessagingService; store: IStoreService; //////////////////////////////////////// // Methods restart(): Promise; /////////////////////////////////// // LISTENER METHODS on( event: T, callback: (payload: EventPayload[T]) => void | Promise, filter?: (payload: EventPayload[T]) => boolean, ): void; once( event: T, callback: (payload: EventPayload[T]) => void | Promise, filter?: (payload: EventPayload[T]) => boolean, ): void; waitFor( event: T, timeout: number, filter?: (payload: EventPayload[T]) => boolean, ): Promise; emit(event: T, payload: EventPayload[T]): boolean; off(): void; /////////////////////////////////// // CORE CHANNEL METHODS channelProviderConfig(): Promise; checkDepositRights( params: PublicParams.CheckDepositRights, ): Promise; conditionalTransfer( params: PublicParams.ConditionalTransfer, ): Promise; deposit(params: PublicParams.Deposit): Promise; requestDepositRights( params: PublicParams.RequestDepositRights, ): Promise; rescindDepositRights( params: PublicParams.RescindDepositRights, ): Promise; resolveCondition(params: PublicParams.ResolveCondition): Promise; restoreState(): Promise; swap(params: PublicParams.Swap): Promise; transfer(params: PublicParams.Transfer): Promise; withdraw(params: PublicParams.Withdraw): Promise; /////////////////////////////////// // NODE EASY ACCESS METHODS // TODO: do we really need to expose all of these? isAvailable(): Promise; getChannel(): Promise; getLinkedTransfer(paymentId: Bytes32): Promise; getHashLockTransfer( lockHash: Bytes32, assetId?: Address, ): Promise; getSignedTransfer(paymentId: Bytes32): Promise; getGraphTransfer(paymentId: Bytes32): Promise; getAppRegistry( appDetails?: | { name: string; // AppNames? chainId: number; } | { appDefinitionAddress: Address }, ): Promise; createChannel(): Promise; subscribeToSwapRates(from: Address, to: Address, callback: any): Promise; getLatestSwapRate(from: Address, to: Address): Promise; unsubscribeToSwapRates(from: Address, to: Address): Promise; requestCollateral(tokenAddress: Address): Promise; getRebalanceProfile(assetId?: Address): Promise; getTransferHistory(): Promise; reclaimPendingAsyncTransfers(): Promise; /////////////////////////////////// // CF MODULE EASY ACCESS METHODS deployMultisig(): Promise; getStateChannel(): Promise; getFreeBalance(assetId?: Address): Promise; getAppInstances(): Promise; getAppInstance( appIdentityHash: Bytes32, ): Promise; getProposedAppInstances( multisigAddress?: Address, ): Promise; getProposedAppInstance( appIdentityHash: Bytes32, ): Promise; proposeInstallApp(params: MethodParams.ProposeInstall): Promise; installApp(appIdentityHash: Bytes32): Promise; rejectInstallApp(appIdentityHash: Bytes32, reason?: string): Promise; takeAction(appIdentityHash: Bytes32, action: any): Promise; uninstallApp(appIdentityHash: Bytes32, action?: AppAction): Promise; }