From d173817f910fc0604d211f72aaa1017049bfb2d3 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 9 Jul 2020 09:33:30 +0200 Subject: [PATCH] Add bank extension --- packages/sdk38/src/index.ts | 3 ++ packages/sdk38/src/lcdapi/bank.spec.ts | 45 ++++++++++++++++++++++++++ packages/sdk38/src/lcdapi/bank.ts | 24 ++++++++++++++ packages/sdk38/src/lcdapi/index.ts | 1 + packages/sdk38/types/index.d.ts | 3 ++ packages/sdk38/types/lcdapi/bank.d.ts | 12 +++++++ packages/sdk38/types/lcdapi/index.d.ts | 1 + 7 files changed, 89 insertions(+) create mode 100644 packages/sdk38/src/lcdapi/bank.spec.ts create mode 100644 packages/sdk38/src/lcdapi/bank.ts create mode 100644 packages/sdk38/types/lcdapi/bank.d.ts diff --git a/packages/sdk38/src/index.ts b/packages/sdk38/src/index.ts index 7c7d6b96..e7c7636f 100644 --- a/packages/sdk38/src/index.ts +++ b/packages/sdk38/src/index.ts @@ -23,6 +23,8 @@ export { makeSignBytes } from "./encoding"; export { AuthAccountsResponse, AuthExtension, + BankBalancesResponse, + BankExtension, BlockResponse, BroadcastMode, EncodeTxResponse, @@ -33,6 +35,7 @@ export { PostTxsResponse, SearchTxsResponse, setupAuthExtension, + setupBankExtension, setupSupplyExtension, SupplyExtension, TxsResponse, diff --git a/packages/sdk38/src/lcdapi/bank.spec.ts b/packages/sdk38/src/lcdapi/bank.spec.ts new file mode 100644 index 00000000..b440b589 --- /dev/null +++ b/packages/sdk38/src/lcdapi/bank.spec.ts @@ -0,0 +1,45 @@ +import { + makeRandomAddress, + nonNegativeIntegerMatcher, + pendingWithoutWasmd, + unused, + wasmd, +} from "../testutils.spec"; +import { BankExtension, setupBankExtension } from "./bank"; +import { LcdClient } from "./lcdclient"; + +function makeBankClient(apiUrl: string): LcdClient & BankExtension { + return LcdClient.withExtensions({ apiUrl }, setupBankExtension); +} + +describe("BankExtension", () => { + it("returns correct values for the unused account", async () => { + pendingWithoutWasmd(); + const client = makeBankClient(wasmd.endpoint); + const balances = await client.bank.balances(unused.address); + expect(balances).toEqual({ + height: jasmine.stringMatching(nonNegativeIntegerMatcher), + result: [ + { + denom: "ucosm", + amount: "1000000000", + }, + { + denom: "ustake", + amount: "1000000000", + }, + ], + }); + }); + + it("returns an empty result for a non-existent account", async () => { + pendingWithoutWasmd(); + const client = makeBankClient(wasmd.endpoint); + const nonExistentAddress = makeRandomAddress(); + const balances = await client.bank.balances(nonExistentAddress); + expect(balances).toEqual({ + height: jasmine.stringMatching(nonNegativeIntegerMatcher), + result: [], + }); + }); +}); diff --git a/packages/sdk38/src/lcdapi/bank.ts b/packages/sdk38/src/lcdapi/bank.ts new file mode 100644 index 00000000..f8b7d14e --- /dev/null +++ b/packages/sdk38/src/lcdapi/bank.ts @@ -0,0 +1,24 @@ +import { Coin } from "../coins"; +import { LcdClient } from "./lcdclient"; + +export interface BankBalancesResponse { + readonly height: string; + readonly result: readonly Coin[]; +} + +export interface BankExtension { + readonly bank: { + readonly balances: (address: string) => Promise; + }; +} + +export function setupBankExtension(base: LcdClient): BankExtension { + return { + bank: { + balances: async (address: string) => { + const path = `/bank/balances/${address}`; + return base.get(path); + }, + }, + }; +} diff --git a/packages/sdk38/src/lcdapi/index.ts b/packages/sdk38/src/lcdapi/index.ts index b2a25ab0..d94b7aac 100644 --- a/packages/sdk38/src/lcdapi/index.ts +++ b/packages/sdk38/src/lcdapi/index.ts @@ -3,6 +3,7 @@ // export { AuthExtension, AuthAccountsResponse, setupAuthExtension } from "./auth"; +export { BankBalancesResponse, BankExtension, setupBankExtension } from "./bank"; export { setupSupplyExtension, SupplyExtension, TotalSupplyAllResponse, TotalSupplyResponse } from "./supply"; // diff --git a/packages/sdk38/types/index.d.ts b/packages/sdk38/types/index.d.ts index ea017984..ab573f75 100644 --- a/packages/sdk38/types/index.d.ts +++ b/packages/sdk38/types/index.d.ts @@ -21,6 +21,8 @@ export { makeSignBytes } from "./encoding"; export { AuthAccountsResponse, AuthExtension, + BankBalancesResponse, + BankExtension, BlockResponse, BroadcastMode, EncodeTxResponse, @@ -31,6 +33,7 @@ export { PostTxsResponse, SearchTxsResponse, setupAuthExtension, + setupBankExtension, setupSupplyExtension, SupplyExtension, TxsResponse, diff --git a/packages/sdk38/types/lcdapi/bank.d.ts b/packages/sdk38/types/lcdapi/bank.d.ts new file mode 100644 index 00000000..f992569a --- /dev/null +++ b/packages/sdk38/types/lcdapi/bank.d.ts @@ -0,0 +1,12 @@ +import { Coin } from "../coins"; +import { LcdClient } from "./lcdclient"; +export interface BankBalancesResponse { + readonly height: string; + readonly result: readonly Coin[]; +} +export interface BankExtension { + readonly bank: { + readonly balances: (address: string) => Promise; + }; +} +export declare function setupBankExtension(base: LcdClient): BankExtension; diff --git a/packages/sdk38/types/lcdapi/index.d.ts b/packages/sdk38/types/lcdapi/index.d.ts index ca9ac056..1e885a99 100644 --- a/packages/sdk38/types/lcdapi/index.d.ts +++ b/packages/sdk38/types/lcdapi/index.d.ts @@ -1,4 +1,5 @@ export { AuthExtension, AuthAccountsResponse, setupAuthExtension } from "./auth"; +export { BankBalancesResponse, BankExtension, setupBankExtension } from "./bank"; export { setupSupplyExtension, SupplyExtension, TotalSupplyAllResponse, TotalSupplyResponse } from "./supply"; export { BlockResponse,