diff --git a/packages/sdk38/src/lcdclient.ts b/packages/sdk38/src/lcdclient.ts index c7a7e9b2..fac9d6fa 100644 --- a/packages/sdk38/src/lcdclient.ts +++ b/packages/sdk38/src/lcdclient.ts @@ -21,9 +21,9 @@ export function normalizeArray(backend: LcdApiArray): ReadonlyArray { return backend || []; } -type LcdClientModule = Record any>; +type LcdModule = Record any>; -type LcdClientModuleRegisterer = (base: LcdClient) => M; +type LcdModuleSetup = (base: LcdClient) => M; // We want to get message data from 500 errors // https://stackoverflow.com/questions/56577124/how-to-handle-500-error-message-with-axios @@ -52,31 +52,156 @@ export class LcdClient { public static withModules(apiUrl: string, broadcastMode: BroadcastMode): LcdClient; /** Constructs an LCD client with 1 modules */ - public static withModules( + public static withModules( apiUrl: string, broadcastMode: BroadcastMode, - moduleA: LcdClientModuleRegisterer, + setupModuleA: LcdModuleSetup, ): LcdClient & A; /** Constructs an LCD client with 2 modules */ - public static withModules( + public static withModules( apiUrl: string, broadcastMode: BroadcastMode, - moduleA: LcdClientModuleRegisterer, - moduleB: LcdClientModuleRegisterer, + setupModuleA: LcdModuleSetup, + setupModuleB: LcdModuleSetup, ): LcdClient & A & B; - public static withModules( + /** Constructs an LCD client with 3 modules */ + public static withModules( apiUrl: string, broadcastMode: BroadcastMode, - moduleA?: LcdClientModuleRegisterer, - moduleB?: LcdClientModuleRegisterer, + setupModuleA: LcdModuleSetup, + setupModuleB: LcdModuleSetup, + setupModuleC: LcdModuleSetup, + ): LcdClient & A & B & C; + + /** Constructs an LCD client with 4 modules */ + public static withModules< + A extends LcdModule, + B extends LcdModule, + C extends LcdModule, + D extends LcdModule + >( + apiUrl: string, + broadcastMode: BroadcastMode, + setupModuleA: LcdModuleSetup, + setupModuleB: LcdModuleSetup, + setupModuleC: LcdModuleSetup, + setupModuleD: LcdModuleSetup, + ): LcdClient & A & B & C & D; + + /** Constructs an LCD client with 5 modules */ + public static withModules< + A extends LcdModule, + B extends LcdModule, + C extends LcdModule, + D extends LcdModule, + E extends LcdModule + >( + apiUrl: string, + broadcastMode: BroadcastMode, + setupModuleA: LcdModuleSetup, + setupModuleB: LcdModuleSetup, + setupModuleC: LcdModuleSetup, + setupModuleD: LcdModuleSetup, + setupModuleE: LcdModuleSetup, + ): LcdClient & A & B & C & D & E; + + /** Constructs an LCD client with 6 modules */ + public static withModules< + A extends LcdModule, + B extends LcdModule, + C extends LcdModule, + D extends LcdModule, + E extends LcdModule, + F extends LcdModule + >( + apiUrl: string, + broadcastMode: BroadcastMode, + setupModuleA: LcdModuleSetup, + setupModuleB: LcdModuleSetup, + setupModuleC: LcdModuleSetup, + setupModuleD: LcdModuleSetup, + setupModuleE: LcdModuleSetup, + setupModuleF: LcdModuleSetup, + ): LcdClient & A & B & C & D & E & F; + + /** Constructs an LCD client with 7 modules */ + public static withModules< + A extends LcdModule, + B extends LcdModule, + C extends LcdModule, + D extends LcdModule, + E extends LcdModule, + F extends LcdModule, + G extends LcdModule + >( + apiUrl: string, + broadcastMode: BroadcastMode, + setupModuleA: LcdModuleSetup, + setupModuleB: LcdModuleSetup, + setupModuleC: LcdModuleSetup, + setupModuleD: LcdModuleSetup, + setupModuleE: LcdModuleSetup, + setupModuleF: LcdModuleSetup, + setupModuleG: LcdModuleSetup, + ): LcdClient & A & B & C & D & E & F & G; + + /** Constructs an LCD client with 8 modules */ + public static withModules< + A extends LcdModule, + B extends LcdModule, + C extends LcdModule, + D extends LcdModule, + E extends LcdModule, + F extends LcdModule, + G extends LcdModule, + H extends LcdModule + >( + apiUrl: string, + broadcastMode: BroadcastMode, + setupModuleA: LcdModuleSetup, + setupModuleB: LcdModuleSetup, + setupModuleC: LcdModuleSetup, + setupModuleD: LcdModuleSetup, + setupModuleE: LcdModuleSetup, + setupModuleF: LcdModuleSetup, + setupModuleG: LcdModuleSetup, + setupModuleH: LcdModuleSetup, + ): LcdClient & A & B & C & D & E & F & G & H; + + public static withModules< + A extends LcdModule, + B extends LcdModule, + C extends LcdModule, + D extends LcdModule, + E extends LcdModule, + F extends LcdModule, + G extends LcdModule, + H extends LcdModule + >( + apiUrl: string, + broadcastMode: BroadcastMode, + setupModuleA?: LcdModuleSetup, + setupModuleB?: LcdModuleSetup, + setupModuleC?: LcdModuleSetup, + setupModuleD?: LcdModuleSetup, + setupModuleE?: LcdModuleSetup, + setupModuleF?: LcdModuleSetup, + setupModuleG?: LcdModuleSetup, + setupModuleH?: LcdModuleSetup, ): any { const client = new LcdClient(apiUrl, broadcastMode); - const modules = new Array(); - if (moduleA) modules.push(moduleA(client)); - if (moduleB) modules.push(moduleB(client)); + const modules = new Array(); + if (setupModuleA) modules.push(setupModuleA(client)); + if (setupModuleB) modules.push(setupModuleB(client)); + if (setupModuleC) modules.push(setupModuleC(client)); + if (setupModuleD) modules.push(setupModuleD(client)); + if (setupModuleE) modules.push(setupModuleE(client)); + if (setupModuleF) modules.push(setupModuleF(client)); + if (setupModuleG) modules.push(setupModuleG(client)); + if (setupModuleH) modules.push(setupModuleH(client)); for (const module of modules) { assert(isNonNullObject(module), `Module must be a non-null object`); for (const key in module) { diff --git a/packages/sdk38/types/lcdclient.d.ts b/packages/sdk38/types/lcdclient.d.ts index 92459f03..8f15abb2 100644 --- a/packages/sdk38/types/lcdclient.d.ts +++ b/packages/sdk38/types/lcdclient.d.ts @@ -12,24 +12,117 @@ import { CosmosSdkTx, StdTx } from "./types"; /** Unfortunately, Cosmos SDK encodes empty arrays as null */ export declare type LcdApiArray = ReadonlyArray | null; export declare function normalizeArray(backend: LcdApiArray): ReadonlyArray; -declare type LcdClientModule = Record any>; -declare type LcdClientModuleRegisterer = (base: LcdClient) => M; +declare type LcdModule = Record any>; +declare type LcdModuleSetup = (base: LcdClient) => M; export declare class LcdClient { /** Constructs an LCD client with 0 modules */ static withModules(apiUrl: string, broadcastMode: BroadcastMode): LcdClient; /** Constructs an LCD client with 1 modules */ - static withModules( + static withModules( apiUrl: string, broadcastMode: BroadcastMode, - moduleA: LcdClientModuleRegisterer, + setupModuleA: LcdModuleSetup, ): LcdClient & A; /** Constructs an LCD client with 2 modules */ - static withModules( + static withModules( apiUrl: string, broadcastMode: BroadcastMode, - moduleA: LcdClientModuleRegisterer, - moduleB: LcdClientModuleRegisterer, + setupModuleA: LcdModuleSetup, + setupModuleB: LcdModuleSetup, ): LcdClient & A & B; + /** Constructs an LCD client with 3 modules */ + static withModules( + apiUrl: string, + broadcastMode: BroadcastMode, + setupModuleA: LcdModuleSetup, + setupModuleB: LcdModuleSetup, + setupModuleC: LcdModuleSetup, + ): LcdClient & A & B & C; + /** Constructs an LCD client with 4 modules */ + static withModules( + apiUrl: string, + broadcastMode: BroadcastMode, + setupModuleA: LcdModuleSetup, + setupModuleB: LcdModuleSetup, + setupModuleC: LcdModuleSetup, + setupModuleD: LcdModuleSetup, + ): LcdClient & A & B & C & D; + /** Constructs an LCD client with 5 modules */ + static withModules< + A extends LcdModule, + B extends LcdModule, + C extends LcdModule, + D extends LcdModule, + E extends LcdModule + >( + apiUrl: string, + broadcastMode: BroadcastMode, + setupModuleA: LcdModuleSetup, + setupModuleB: LcdModuleSetup, + setupModuleC: LcdModuleSetup, + setupModuleD: LcdModuleSetup, + setupModuleE: LcdModuleSetup, + ): LcdClient & A & B & C & D & E; + /** Constructs an LCD client with 6 modules */ + static withModules< + A extends LcdModule, + B extends LcdModule, + C extends LcdModule, + D extends LcdModule, + E extends LcdModule, + F extends LcdModule + >( + apiUrl: string, + broadcastMode: BroadcastMode, + setupModuleA: LcdModuleSetup, + setupModuleB: LcdModuleSetup, + setupModuleC: LcdModuleSetup, + setupModuleD: LcdModuleSetup, + setupModuleE: LcdModuleSetup, + setupModuleF: LcdModuleSetup, + ): LcdClient & A & B & C & D & E & F; + /** Constructs an LCD client with 7 modules */ + static withModules< + A extends LcdModule, + B extends LcdModule, + C extends LcdModule, + D extends LcdModule, + E extends LcdModule, + F extends LcdModule, + G extends LcdModule + >( + apiUrl: string, + broadcastMode: BroadcastMode, + setupModuleA: LcdModuleSetup, + setupModuleB: LcdModuleSetup, + setupModuleC: LcdModuleSetup, + setupModuleD: LcdModuleSetup, + setupModuleE: LcdModuleSetup, + setupModuleF: LcdModuleSetup, + setupModuleG: LcdModuleSetup, + ): LcdClient & A & B & C & D & E & F & G; + /** Constructs an LCD client with 8 modules */ + static withModules< + A extends LcdModule, + B extends LcdModule, + C extends LcdModule, + D extends LcdModule, + E extends LcdModule, + F extends LcdModule, + G extends LcdModule, + H extends LcdModule + >( + apiUrl: string, + broadcastMode: BroadcastMode, + setupModuleA: LcdModuleSetup, + setupModuleB: LcdModuleSetup, + setupModuleC: LcdModuleSetup, + setupModuleD: LcdModuleSetup, + setupModuleE: LcdModuleSetup, + setupModuleF: LcdModuleSetup, + setupModuleG: LcdModuleSetup, + setupModuleH: LcdModuleSetup, + ): LcdClient & A & B & C & D & E & F & G & H; private readonly client; private readonly broadcastMode; /**