diff --git a/CHANGELOG.md b/CHANGELOG.md index bc1e3044..b2b4903c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,8 @@ optional adaptor. - @cosmjs/tendermint-rpc: Add an optional adaptor argument to `Client.connect` which allows skipping the auto-detection. +- @cosmjs/tendermint-rpc: Remove export `v0_33` in favour of `adaptor33` and + `adaptor34`. Export the `Adaptor` type. ## 0.23.1 (2020-10-27) diff --git a/packages/tendermint-rpc/src/adaptorforversion.ts b/packages/tendermint-rpc/src/adaptorforversion.ts deleted file mode 100644 index d991c3cd..00000000 --- a/packages/tendermint-rpc/src/adaptorforversion.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* eslint-disable @typescript-eslint/naming-convention */ -// This module exposes translators for multiple tendermint versions -// Pick a version that matches the server to properly encode the data types -import { Adaptor } from "./adaptor"; -import { v0_33 } from "./v0-33"; - -const hashes = { - v0_34: [ - "ca2c9df", // v0.34.0-rc6 - "", // See https://github.com/cosmos/cosmos-sdk/issues/7963 - ], -}; - -/** - * Returns an Adaptor implementation for a given tendermint version. - * Throws when version is not supported. - * - * @param version full Tendermint version string, e.g. "0.20.1" - */ -export function adaptorForVersion(version: string): Adaptor { - if (version.startsWith("0.33.") || version.startsWith("0.34.") || hashes.v0_34.includes(version)) { - return v0_33; - } else { - throw new Error(`Unsupported tendermint version: ${version}`); - } -} diff --git a/packages/tendermint-rpc/src/adaptors/index.ts b/packages/tendermint-rpc/src/adaptors/index.ts new file mode 100644 index 00000000..eb74c9c6 --- /dev/null +++ b/packages/tendermint-rpc/src/adaptors/index.ts @@ -0,0 +1,50 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +import { Adaptor } from "../adaptor"; +import { v0_33 } from "./v0-33"; + +/** + * Adaptor for Tendermint 0.33. + * + * Use this to skip auto-detection: + * + * ``` + * import { adaptor33, Client as TendermintClient } from "@cosmjs/tendermint-rpc"; + * // ... + * const client = await TendermintClient.connect(url, adaptor33); + * ``` + */ +export const adaptor33 = v0_33; + +/** + * Adaptor for Tendermint 0.34. + * + * Use this to skip auto-detection: + * + * ``` + * import { adaptor34, Client as TendermintClient } from "@cosmjs/tendermint-rpc"; + * // ... + * const client = await TendermintClient.connect(url, adaptor34); + * ``` + */ +export const adaptor34 = v0_33; // With this alias we can swap out the implementation without affecting caller code. + +const hashes = { + v0_34: [ + "ca2c9df", // v0.34.0-rc6 + "", // See https://github.com/cosmos/cosmos-sdk/issues/7963 + ], +}; + +/** + * Returns an Adaptor implementation for a given tendermint version. + * Throws when version is not supported. + * + * @param version full Tendermint version string, e.g. "0.20.1" + */ +export function adaptorForVersion(version: string): Adaptor { + if (version.startsWith("0.33.") || version.startsWith("0.34.") || hashes.v0_34.includes(version)) { + return v0_33; + } else { + throw new Error(`Unsupported tendermint version: ${version}`); + } +} diff --git a/packages/tendermint-rpc/src/v0-33/hasher.spec.ts b/packages/tendermint-rpc/src/adaptors/v0-33/hasher.spec.ts similarity index 97% rename from packages/tendermint-rpc/src/v0-33/hasher.spec.ts rename to packages/tendermint-rpc/src/adaptors/v0-33/hasher.spec.ts index 96d9feb0..6793f8b3 100644 --- a/packages/tendermint-rpc/src/v0-33/hasher.spec.ts +++ b/packages/tendermint-rpc/src/adaptors/v0-33/hasher.spec.ts @@ -1,8 +1,8 @@ import { fromBase64, fromHex } from "@cosmjs/encoding"; import { ReadonlyDate } from "readonly-date"; -import { ReadonlyDateWithNanoseconds } from "../responses"; -import { TxBytes } from "../types"; +import { ReadonlyDateWithNanoseconds } from "../../responses"; +import { TxBytes } from "../../types"; import { hashBlock, hashTx } from "./hasher"; describe("Hasher", () => { diff --git a/packages/tendermint-rpc/src/v0-33/hasher.ts b/packages/tendermint-rpc/src/adaptors/v0-33/hasher.ts similarity index 90% rename from packages/tendermint-rpc/src/v0-33/hasher.ts rename to packages/tendermint-rpc/src/adaptors/v0-33/hasher.ts index 4401053b..3fc0c6ce 100644 --- a/packages/tendermint-rpc/src/v0-33/hasher.ts +++ b/packages/tendermint-rpc/src/adaptors/v0-33/hasher.ts @@ -1,8 +1,15 @@ import { Sha256 } from "@cosmjs/crypto"; -import { encodeBlockId, encodeBytes, encodeInt, encodeString, encodeTime, encodeVersion } from "../encodings"; -import { Header } from "../responses"; -import { BlockHash, TxBytes, TxHash } from "../types"; +import { + encodeBlockId, + encodeBytes, + encodeInt, + encodeString, + encodeTime, + encodeVersion, +} from "../../encodings"; +import { Header } from "../../responses"; +import { BlockHash, TxBytes, TxHash } from "../../types"; // hash is sha256 // https://github.com/tendermint/tendermint/blob/master/UPGRADING.md#v0260 diff --git a/packages/tendermint-rpc/src/v0-33/index.ts b/packages/tendermint-rpc/src/adaptors/v0-33/index.ts similarity index 88% rename from packages/tendermint-rpc/src/v0-33/index.ts rename to packages/tendermint-rpc/src/adaptors/v0-33/index.ts index af38b9cf..fb1e8a76 100644 --- a/packages/tendermint-rpc/src/v0-33/index.ts +++ b/packages/tendermint-rpc/src/adaptors/v0-33/index.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/naming-convention */ -import { Adaptor } from "../adaptor"; +import { Adaptor } from "../../adaptor"; import { hashBlock, hashTx } from "./hasher"; import { Params } from "./requests"; import { Responses } from "./responses"; diff --git a/packages/tendermint-rpc/src/v0-33/requests.ts b/packages/tendermint-rpc/src/adaptors/v0-33/requests.ts similarity index 95% rename from packages/tendermint-rpc/src/v0-33/requests.ts rename to packages/tendermint-rpc/src/adaptors/v0-33/requests.ts index 0e6b71c3..f9501bff 100644 --- a/packages/tendermint-rpc/src/v0-33/requests.ts +++ b/packages/tendermint-rpc/src/adaptors/v0-33/requests.ts @@ -2,9 +2,17 @@ import { toHex } from "@cosmjs/encoding"; import { JsonRpcRequest } from "@cosmjs/json-rpc"; -import { assertNotEmpty, Base64, Base64String, HexString, Integer, IntegerString, may } from "../encodings"; -import { createJsonRpcRequest } from "../jsonrpc"; -import * as requests from "../requests"; +import { + assertNotEmpty, + Base64, + Base64String, + HexString, + Integer, + IntegerString, + may, +} from "../../encodings"; +import { createJsonRpcRequest } from "../../jsonrpc"; +import * as requests from "../../requests"; interface HeightParam { readonly height?: number; diff --git a/packages/tendermint-rpc/src/v0-33/responses.ts b/packages/tendermint-rpc/src/adaptors/v0-33/responses.ts similarity index 99% rename from packages/tendermint-rpc/src/v0-33/responses.ts rename to packages/tendermint-rpc/src/adaptors/v0-33/responses.ts index d3dd6814..6bfe82dc 100644 --- a/packages/tendermint-rpc/src/v0-33/responses.ts +++ b/packages/tendermint-rpc/src/adaptors/v0-33/responses.ts @@ -20,10 +20,10 @@ import { IntegerString, may, optional, -} from "../encodings"; -import * as responses from "../responses"; -import { SubscriptionEvent } from "../rpcclients"; -import { IpPortString, TxBytes, TxHash, ValidatorPubkey, ValidatorSignature } from "../types"; +} from "../../encodings"; +import * as responses from "../../responses"; +import { SubscriptionEvent } from "../../rpcclients"; +import { IpPortString, TxBytes, TxHash, ValidatorPubkey, ValidatorSignature } from "../../types"; import { hashTx } from "./hasher"; interface AbciInfoResult { diff --git a/packages/tendermint-rpc/src/client.spec.ts b/packages/tendermint-rpc/src/client.spec.ts index 95d790a8..55ea3107 100644 --- a/packages/tendermint-rpc/src/client.spec.ts +++ b/packages/tendermint-rpc/src/client.spec.ts @@ -6,7 +6,7 @@ import { ReadonlyDate } from "readonly-date"; import { Stream } from "xstream"; import { Adaptor } from "./adaptor"; -import { adaptorForVersion } from "./adaptorforversion"; +import { adaptorForVersion } from "./adaptors"; import { Client } from "./client"; import { ExpectedValues, tendermintInstances } from "./config.spec"; import { buildQuery } from "./requests"; diff --git a/packages/tendermint-rpc/src/client.ts b/packages/tendermint-rpc/src/client.ts index c34b0d55..f666d800 100644 --- a/packages/tendermint-rpc/src/client.ts +++ b/packages/tendermint-rpc/src/client.ts @@ -1,7 +1,7 @@ import { Stream } from "xstream"; import { Adaptor, Decoder, Encoder, Params, Responses } from "./adaptor"; -import { adaptorForVersion } from "./adaptorforversion"; +import { adaptorForVersion } from "./adaptors"; import { createJsonRpcRequest } from "./jsonrpc"; import * as requests from "./requests"; import * as responses from "./responses"; diff --git a/packages/tendermint-rpc/src/index.ts b/packages/tendermint-rpc/src/index.ts index 011deb0c..eb72f812 100644 --- a/packages/tendermint-rpc/src/index.ts +++ b/packages/tendermint-rpc/src/index.ts @@ -1,7 +1,5 @@ -/* eslint-disable @typescript-eslint/naming-convention */ -// exported to access version-specific hashing -export { v0_33 } from "./v0-33"; - +export { Adaptor } from "./adaptor"; +export { adaptor33, adaptor34 } from "./adaptors"; export { Client } from "./client"; export { AbciInfoRequest, diff --git a/packages/tendermint-rpc/types/adaptorforversion.d.ts b/packages/tendermint-rpc/types/adaptorforversion.d.ts deleted file mode 100644 index caf42fd7..00000000 --- a/packages/tendermint-rpc/types/adaptorforversion.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Adaptor } from "./adaptor"; -/** - * Returns an Adaptor implementation for a given tendermint version. - * Throws when version is not supported. - * - * @param version full Tendermint version string, e.g. "0.20.1" - */ -export declare function adaptorForVersion(version: string): Adaptor; diff --git a/packages/tendermint-rpc/types/adaptors/index.d.ts b/packages/tendermint-rpc/types/adaptors/index.d.ts new file mode 100644 index 00000000..7cf00005 --- /dev/null +++ b/packages/tendermint-rpc/types/adaptors/index.d.ts @@ -0,0 +1,32 @@ +import { Adaptor } from "../adaptor"; +/** + * Adaptor for Tendermint 0.33. + * + * Use this to skip auto-detection: + * + * ``` + * import { adaptor33, Client as TendermintClient } from "@cosmjs/tendermint-rpc"; + * // ... + * const client = await TendermintClient.connect(url, adaptor33); + * ``` + */ +export declare const adaptor33: Adaptor; +/** + * Adaptor for Tendermint 0.34. + * + * Use this to skip auto-detection: + * + * ``` + * import { adaptor34, Client as TendermintClient } from "@cosmjs/tendermint-rpc"; + * // ... + * const client = await TendermintClient.connect(url, adaptor34); + * ``` + */ +export declare const adaptor34: Adaptor; +/** + * Returns an Adaptor implementation for a given tendermint version. + * Throws when version is not supported. + * + * @param version full Tendermint version string, e.g. "0.20.1" + */ +export declare function adaptorForVersion(version: string): Adaptor; diff --git a/packages/tendermint-rpc/types/v0-33/hasher.d.ts b/packages/tendermint-rpc/types/adaptors/v0-33/hasher.d.ts similarity index 53% rename from packages/tendermint-rpc/types/v0-33/hasher.d.ts rename to packages/tendermint-rpc/types/adaptors/v0-33/hasher.d.ts index de2e7e90..f89426d8 100644 --- a/packages/tendermint-rpc/types/v0-33/hasher.d.ts +++ b/packages/tendermint-rpc/types/adaptors/v0-33/hasher.d.ts @@ -1,4 +1,4 @@ -import { Header } from "../responses"; -import { BlockHash, TxBytes, TxHash } from "../types"; +import { Header } from "../../responses"; +import { BlockHash, TxBytes, TxHash } from "../../types"; export declare function hashTx(tx: TxBytes): TxHash; export declare function hashBlock(header: Header): BlockHash; diff --git a/packages/tendermint-rpc/types/adaptors/v0-33/hasher.spec.d.ts b/packages/tendermint-rpc/types/adaptors/v0-33/hasher.spec.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/packages/tendermint-rpc/types/adaptors/v0-33/hasher.spec.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/tendermint-rpc/types/adaptors/v0-33/index.d.ts b/packages/tendermint-rpc/types/adaptors/v0-33/index.d.ts new file mode 100644 index 00000000..d4c71fcd --- /dev/null +++ b/packages/tendermint-rpc/types/adaptors/v0-33/index.d.ts @@ -0,0 +1,2 @@ +import { Adaptor } from "../../adaptor"; +export declare const v0_33: Adaptor; diff --git a/packages/tendermint-rpc/types/v0-33/requests.d.ts b/packages/tendermint-rpc/types/adaptors/v0-33/requests.d.ts similarity index 96% rename from packages/tendermint-rpc/types/v0-33/requests.d.ts rename to packages/tendermint-rpc/types/adaptors/v0-33/requests.d.ts index bdfaa960..ad142450 100644 --- a/packages/tendermint-rpc/types/v0-33/requests.d.ts +++ b/packages/tendermint-rpc/types/adaptors/v0-33/requests.d.ts @@ -1,5 +1,5 @@ import { JsonRpcRequest } from "@cosmjs/json-rpc"; -import * as requests from "../requests"; +import * as requests from "../../requests"; export declare class Params { static encodeAbciInfo(req: requests.AbciInfoRequest): JsonRpcRequest; static encodeAbciQuery(req: requests.AbciQueryRequest): JsonRpcRequest; diff --git a/packages/tendermint-rpc/types/v0-33/responses.d.ts b/packages/tendermint-rpc/types/adaptors/v0-33/responses.d.ts similarity index 92% rename from packages/tendermint-rpc/types/v0-33/responses.d.ts rename to packages/tendermint-rpc/types/adaptors/v0-33/responses.d.ts index 5aee6a64..0024c2ce 100644 --- a/packages/tendermint-rpc/types/v0-33/responses.d.ts +++ b/packages/tendermint-rpc/types/adaptors/v0-33/responses.d.ts @@ -1,7 +1,7 @@ import { JsonRpcSuccessResponse } from "@cosmjs/json-rpc"; -import { Base64String } from "../encodings"; -import * as responses from "../responses"; -import { SubscriptionEvent } from "../rpcclients"; +import { Base64String } from "../../encodings"; +import * as responses from "../../responses"; +import { SubscriptionEvent } from "../../rpcclients"; export interface RpcProofOp { readonly type: string; readonly key: Base64String; diff --git a/packages/tendermint-rpc/types/index.d.ts b/packages/tendermint-rpc/types/index.d.ts index 08ed5bf3..6b0ca746 100644 --- a/packages/tendermint-rpc/types/index.d.ts +++ b/packages/tendermint-rpc/types/index.d.ts @@ -1,4 +1,5 @@ -export { v0_33 } from "./v0-33"; +export { Adaptor } from "./adaptor"; +export { adaptor33, adaptor34 } from "./adaptors"; export { Client } from "./client"; export { AbciInfoRequest, diff --git a/packages/tendermint-rpc/types/v0-33/index.d.ts b/packages/tendermint-rpc/types/v0-33/index.d.ts deleted file mode 100644 index f5b2b014..00000000 --- a/packages/tendermint-rpc/types/v0-33/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Adaptor } from "../adaptor"; -export declare const v0_33: Adaptor;