diff --git a/eslint.config.mjs b/eslint.config.mjs index 484d418ca5..f54d6b205e 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -145,7 +145,6 @@ export default [ "@typescript-eslint/no-shadow": "warn", "@typescript-eslint/no-unsafe-argument": "off", "@typescript-eslint/no-unsafe-assignment": "off", - "@typescript-eslint/no-unsafe-call": "off", "@typescript-eslint/no-unsafe-member-access": "off", "@typescript-eslint/no-unsafe-return": "off", diff --git a/packages/cosmwasm-stargate/src/cosmwasmclient.ts b/packages/cosmwasm-stargate/src/cosmwasmclient.ts index 06ac6f9fdc..6d0010600c 100644 --- a/packages/cosmwasm-stargate/src/cosmwasmclient.ts +++ b/packages/cosmwasm-stargate/src/cosmwasmclient.ts @@ -167,7 +167,7 @@ export class CosmWasmClient { const account = await this.forceGetQueryClient().auth.account(searchAddress); return account ? accountFromAny(account) : null; } catch (error: any) { - if (/rpc error: code = NotFound/i.test(error.toString())) { + if (/rpc error: code = NotFound/i.test(String(error))) { return null; } throw error; diff --git a/packages/json-rpc/src/workers/dummyservice.worker.ts b/packages/json-rpc/src/workers/dummyservice.worker.ts index 2c7bc9bca4..f6fce572f6 100644 --- a/packages/json-rpc/src/workers/dummyservice.worker.ts +++ b/packages/json-rpc/src/workers/dummyservice.worker.ts @@ -23,7 +23,7 @@ function handleRequest(event: MessageEvent): JsonRpcResponse { id: requestId, error: { code: jsonRpcCode.invalidRequest, - message: error.toString(), + message: String(error), }, }; return errorResponse; diff --git a/packages/ledger-amino/src/demo/web.ts b/packages/ledger-amino/src/demo/web.ts index 6178f692b4..9add6d0128 100644 --- a/packages/ledger-amino/src/demo/web.ts +++ b/packages/ledger-amino/src/demo/web.ts @@ -8,8 +8,11 @@ import TransportWebUSB from "@ledgerhq/hw-transport-webusb"; import { LedgerSigner } from "../ledgersigner"; -declare const window: any; -declare const document: any; +const getElement = (id: string): HTMLInputElement => { + const e = document.getElementById(id); + assert(e instanceof HTMLInputElement, "got the wrong element!"); + return e; +}; const accountNumbers = [0, 1, 2, 10]; const paths = accountNumbers.map(makeCosmoshubPath); @@ -45,7 +48,7 @@ function createSignDoc(accountNumber: number, address: string): string { return JSON.stringify(signDoc, null, 2); } -window.updateMessage = (accountNumberInput: unknown) => { +const updateMessage = (accountNumberInput: unknown): void => { assert(typeof accountNumberInput === "string"); const accountNumber = Uint53.fromString(accountNumberInput).toNumber(); const account = accounts[accountNumber]; @@ -54,23 +57,23 @@ window.updateMessage = (accountNumberInput: unknown) => { } const address = accounts[accountNumber].address; - const addressInput = document.getElementById("address"); + const addressInput = getElement("address"); addressInput.value = address; - const signDocTextArea = document.getElementById("sign-doc"); + const signDocTextArea = getElement("sign-doc"); signDocTextArea.textContent = createSignDoc(accountNumber, address); }; -window.setPath = (accountNumberInput: unknown) => { +const setPath = (accountNumberInput: unknown): void => { assert(typeof accountNumberInput === "string"); const accountNumber = Uint53.fromString(accountNumberInput).toNumber(); const path = pathToString(paths[accountNumber]); - const pathInput = document.getElementById("path"); + const pathInput = getElement("path"); pathInput.value = path; }; // This must be called by the user an cannot be done on load (see "TransportWebUSBGestureRequired"). -window.createSigner = async function createSigner(): Promise { +const createSigner = async function createSigner(): Promise { const interactiveTimeout = 120_000; const ledgerTransport = await TransportWebUSB.create(interactiveTimeout, interactiveTimeout); return new LedgerSigner(ledgerTransport, { @@ -79,16 +82,16 @@ window.createSigner = async function createSigner(): Promise { }); }; -window.getAccounts = async function getAccounts(signer: LedgerSigner | undefined): Promise { +const getAccounts = async function getAccounts(signer: LedgerSigner | undefined): Promise { if (signer === undefined) { console.error("Please wait for transport to connect"); return; } - const accountNumberInput1 = document.getElementById("account-number1"); - const accountNumberInput2 = document.getElementById("account-number2"); - const addressInput = document.getElementById("address"); - const accountsDiv = document.getElementById("accounts"); - const signDocTextArea = document.getElementById("sign-doc"); + const accountNumberInput1 = getElement("account-number1"); + const accountNumberInput2 = getElement("account-number2"); + const addressInput = getElement("address"); + const accountsDiv = getElement("accounts"); + const signDocTextArea = getElement("sign-doc"); accountsDiv.textContent = "Loading..."; try { @@ -101,46 +104,48 @@ window.getAccounts = async function getAccounts(signer: LedgerSigner | undefined const accountNumber = 0; // Show address block - accountNumberInput1.max = accounts.length - 1; - accountNumberInput1.value = accountNumber; - window.setPath(accountNumber.toString()); + accountNumberInput1.max = String(accounts.length - 1); + accountNumberInput1.value = String(accountNumber); + setPath(accountNumber.toString()); // Sign block - accountNumberInput2.max = accounts.length - 1; - accountNumberInput2.value = accountNumber; + accountNumberInput2.max = String(accounts.length - 1); + accountNumberInput2.value = String(accountNumber); const address = accounts[0].address; addressInput.value = address; signDocTextArea.textContent = createSignDoc(accountNumber, address); } catch (error) { console.error(error); - accountsDiv.textContent = error; + accountsDiv.textContent = String(error); } }; -window.showAddress = async function showAddress(signer: LedgerSigner | undefined): Promise { +const showAddress = async function showAddress(signer: LedgerSigner | undefined): Promise { if (signer === undefined) { console.error("Please wait for transport to connect"); return; } - const path = stringToPath(document.getElementById("path").value); + const path = stringToPath(getElement("path").value); await signer.showAddress(path); }; -window.sign = async function sign(signer: LedgerSigner | undefined): Promise { +const sign = async function sign(signer: LedgerSigner | undefined): Promise { if (signer === undefined) { console.error("Please wait for transport to connect"); return; } - const signatureDiv = document.getElementById("signature"); + const signatureDiv = getElement("signature"); signatureDiv.textContent = "Loading..."; try { - const address = document.getElementById("address").value; - const signDocJson = document.getElementById("sign-doc").textContent; + const address = getElement("address").value; + const signDocJson = getElement("sign-doc").textContent; const signDoc: StdSignDoc = JSON.parse(signDocJson); const signature = await signer.signAmino(address, signDoc); signatureDiv.textContent = JSON.stringify(signature, null, "\t"); } catch (error) { - signatureDiv.textContent = error; + signatureDiv.textContent = String(error); } }; + +Object.assign(window, { updateMessage, setPath, createSigner, getAccounts, showAddress, sign }); diff --git a/packages/ledger-amino/src/ledgersigner.spec.ts b/packages/ledger-amino/src/ledgersigner.spec.ts index 8d2ac311ca..2b266b3d34 100644 --- a/packages/ledger-amino/src/ledgersigner.spec.ts +++ b/packages/ledger-amino/src/ledgersigner.spec.ts @@ -31,10 +31,11 @@ async function createTransport(): Promise { } // HACK: Use a variable to get webpack to ignore this const nodeJsTransportPackageName = "@ledgerhq/hw-transport-node-hid"; - const { default: TransportClass } = + const TransportClass: typeof Transport = ( platform === "node" ? await import(nodeJsTransportPackageName) - : await import("@ledgerhq/hw-transport-webusb"); + : await import("@ledgerhq/hw-transport-webusb") + ).default; return TransportClass.create(interactiveTimeout, interactiveTimeout); } diff --git a/packages/stargate/src/logs.ts b/packages/stargate/src/logs.ts index 1e97d56031..34fabf7940 100644 --- a/packages/stargate/src/logs.ts +++ b/packages/stargate/src/logs.ts @@ -58,7 +58,12 @@ export function parseRawLog(input: string | undefined): readonly Log[] { // Cosmos SDK >= 0.50 gives us an empty string here. This should be handled like undefined. if (!input) return []; - const logsToParse = JSON.parse(input).map(({ events }: { events: readonly unknown[] }, i: number) => ({ + const parsedInput = JSON.parse(input); + if (!Array.isArray(parsedInput)) { + throw new Error("rawLog must be an array"); + } + + const logsToParse = parsedInput.map(({ events }: { events: readonly unknown[] }, i: number) => ({ msg_index: i, events, log: "", diff --git a/packages/stargate/src/multisignature.ts b/packages/stargate/src/multisignature.ts index 05a1dd8a07..0d02c679b3 100644 --- a/packages/stargate/src/multisignature.ts +++ b/packages/stargate/src/multisignature.ts @@ -36,11 +36,12 @@ export function makeMultisignedTx( ): TxRaw { const addresses = Array.from(signatures.keys()); const prefix = fromBech32(addresses[0]).prefix; + const pubkeys = multisigPubkey.value.pubkeys; - const signers: boolean[] = Array(multisigPubkey.value.pubkeys.length).fill(false); + const signers = new Array(pubkeys.length).fill(false); const signaturesList = new Array(); - for (let i = 0; i < multisigPubkey.value.pubkeys.length; i++) { - const signerAddress = pubkeyToAddress(multisigPubkey.value.pubkeys[i], prefix); + for (let i = 0; i < pubkeys.length; i++) { + const signerAddress = pubkeyToAddress(pubkeys[i], prefix); const signature = signatures.get(signerAddress); if (signature) { signers[i] = true;