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,