diff --git a/packages/faucet-client/src/faucetclient.ts b/packages/faucet-client/src/faucetclient.ts new file mode 100644 index 00000000..03cc13fc --- /dev/null +++ b/packages/faucet-client/src/faucetclient.ts @@ -0,0 +1,33 @@ +import axios from "axios"; + +export class FaucetClient { + private readonly baseUrl: string; + + public constructor(baseUrl: string) { + if (!baseUrl.match(/^https?:\/\//)) { + throw new Error("Expected base url to start with http:// or https://"); + } + + // Strip trailing / + const strippedBaseUrl = baseUrl.replace(/(\/)+$/, ""); + this.baseUrl = strippedBaseUrl; + } + + public async credit(address: string, denom: string): Promise { + const body = { + address: address, + denom: denom, + }; + + try { + await axios.post(this.baseUrl + "/credit", body); + } catch (error) { + if (error.response) { + // append response body to error message + throw new Error(`${error}; response body: ${JSON.stringify(error.response.data)}`); + } else { + throw error; + } + } + } +} diff --git a/packages/faucet-client/src/index.ts b/packages/faucet-client/src/index.ts new file mode 100644 index 00000000..7a2633a5 --- /dev/null +++ b/packages/faucet-client/src/index.ts @@ -0,0 +1 @@ +export { FaucetClient } from "./faucetclient"; diff --git a/packages/faucet-client/types/faucetclient.d.ts b/packages/faucet-client/types/faucetclient.d.ts new file mode 100644 index 00000000..3f7c74da --- /dev/null +++ b/packages/faucet-client/types/faucetclient.d.ts @@ -0,0 +1,5 @@ +export declare class FaucetClient { + private readonly baseUrl; + constructor(baseUrl: string); + credit(address: string, denom: string): Promise; +} diff --git a/packages/faucet-client/types/index.d.ts b/packages/faucet-client/types/index.d.ts new file mode 100644 index 00000000..7a2633a5 --- /dev/null +++ b/packages/faucet-client/types/index.d.ts @@ -0,0 +1 @@ +export { FaucetClient } from "./faucetclient";