diff --git a/components/dataViews/ListMultisigTxs.tsx b/components/dataViews/ListMultisigTxs.tsx index a3397d9..74bf8b6 100644 --- a/components/dataViews/ListMultisigTxs.tsx +++ b/components/dataViews/ListMultisigTxs.tsx @@ -1,11 +1,11 @@ import { useChains } from "@/context/ChainsContext"; +import { DbTransaction } from "@/graphql"; +import { getDbMultisigTxs, getDbNonce } from "@/lib/api"; import { ellideMiddle } from "@/lib/displayHelpers"; import { getConnectError } from "@/lib/errorHelpers"; import { getKeplrKey, getKeplrVerifySignature, useKeplrReconnect } from "@/lib/keplr"; -import { requestJson } from "@/lib/request"; import { msgTypeCountsFromJson } from "@/lib/txMsgHelpers"; import { cn, toastError } from "@/lib/utils"; -import { DbNonce, DbTransaction } from "@/types/db"; import { WalletInfo } from "@/types/signing"; import { toBase64 } from "@cosmjs/encoding"; import { StargateClient } from "@cosmjs/stargate"; @@ -47,9 +47,7 @@ export default function ListMultisigTxs({ throw new Error(`Account not found on chain for ${address}`); } - const { nonce }: DbNonce = await requestJson( - `/api/chain/${chain.chainId}/nonce/${accountOnChain.address}`, - ); + const nonce = await getDbNonce(accountOnChain.address, chain.chainId); const signature = await getKeplrVerifySignature(accountOnChain.address, chain, nonce); return signature; @@ -61,14 +59,7 @@ export default function ListMultisigTxs({ async (address: string) => { try { const signature = await getSignature(address); - - const fetchedTransactions: readonly DbTransaction[] = await requestJson( - `/api/transaction/list`, - { - body: { signature, chain, multisigAddress }, - }, - ); - + const fetchedTransactions = await getDbMultisigTxs(multisigAddress, chain, signature); setTransactions(fetchedTransactions); } catch (e: unknown) { console.error("Failed to fetch transactions:", e); @@ -136,81 +127,79 @@ export default function ListMultisigTxs({
Loading transactions
) : null} + {walletInfo && transactions ? ( +signatures: {tx.signatures.length}
+threshold: {multisigThreshold}
+{hasSigned ? "Signed by you" : "Not signed by you"}
++ {tx.txHash + ? `Broadcasted with hash: ${ellideMiddle(tx.txHash, 12)}` + : "Not broadcasted"} +
+signatures: {tx.signatures.length}
-threshold: {multisigThreshold}
-{hasSigned ? "Signed by you" : "Not signed by you"}
-- {tx.txHash - ? `Broadcasted with hash: ${ellideMiddle(tx.txHash, 12)}` - : "Not broadcasted"} -
-{tx.id}
-{tx.id}
+{ const { chain } = useChains(); @@ -79,8 +73,8 @@ const TransactionPage = ({ const router = useRouter(); const multisigAddress = router.query.address?.toString(); - const addSignature = (signature: DbSignature) => { - setCurrentSignatures((prevState: DbSignature[]) => [...prevState, signature]); + const addSignature = (signature: DbSignatureObj) => { + setCurrentSignatures((prevState: DbSignatureObj[]) => [...prevState, signature]); }; useEffect(() => { @@ -133,10 +127,7 @@ const TransactionPage = ({ const broadcaster = await StargateClient.connect(chain.nodeAddress); const result = await broadcaster.broadcastTx(signedTxBytes); - console.log(result); - await requestJson(`/api/transaction/${transactionID}`, { - body: { txHash: result.transactionHash }, - }); + await updateDbTxHash(transactionID, result.transactionHash); toastSuccess("Transaction broadcasted with hash", result.transactionHash); setTransactionHash(result.transactionHash); } catch (e) { diff --git a/pages/api/chain/[chainId]/multisig/[multisigAddress]/index.ts b/pages/api/chain/[chainId]/multisig/[multisigAddress]/index.ts index 0c782b7..a2d9d7a 100644 --- a/pages/api/chain/[chainId]/multisig/[multisigAddress]/index.ts +++ b/pages/api/chain/[chainId]/multisig/[multisigAddress]/index.ts @@ -1,29 +1,35 @@ +import { getMultisig } from "@/graphql/multisig"; import type { NextApiRequest, NextApiResponse } from "next"; -import { getMultisig } from "../../../../../../lib/graphqlHelpers"; -export default async function multisigAddressApi(req: NextApiRequest, res: NextApiResponse) { - switch (req.method) { - case "GET": - try { - const multisigAddress = req.query.multisigAddress?.toString() || ""; - const chainId = req.query.chainId?.toString() || ""; - console.log("Function `getMultisig` invoked", multisigAddress, chainId); - const multisig = await getMultisig(multisigAddress, chainId); - if (!multisig) { - res.status(404).send("Multisig not found"); - return; - } - console.log("success", multisig); - res.status(200).send(multisig); - return; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } catch (err: any) { - console.log(err); - res.status(400).send(err.message); - return; - } +const endpointErrMsg = "Failed to get multisig"; + +export default async function apiGetMultisig(req: NextApiRequest, res: NextApiResponse) { + const chainId = req.query.chainId; + const multisigAddress = req.query.multisigAddress; + + if ( + req.method !== "GET" || + typeof chainId !== "string" || + !chainId || + typeof multisigAddress !== "string" || + !multisigAddress + ) { + res.status(405).end(); + return; + } + + try { + const multisig = await getMultisig(chainId, multisigAddress); + if (!multisig) { + throw new Error(`multisig not found with address ${multisigAddress} on chain ${chainId}`); + } + + res.status(200).send(multisig); + console.log("Get multisig success", JSON.stringify(multisig, null, 2)); + } catch (err: unknown) { + console.error(err); + res + .status(400) + .send(err instanceof Error ? `${endpointErrMsg}: ${err.message}` : endpointErrMsg); } - // no route matched - res.status(405).end(); - return; } diff --git a/pages/api/chain/[chainId]/multisig/index.ts b/pages/api/chain/[chainId]/multisig/index.ts index a18f63f..73c25ac 100644 --- a/pages/api/chain/[chainId]/multisig/index.ts +++ b/pages/api/chain/[chainId]/multisig/index.ts @@ -1,24 +1,33 @@ -import { createMultisig } from "@/lib/graphqlHelpers"; +import { createMultisig } from "@/graphql/multisig"; +import { CreateDbMultisigBody } from "@/lib/api"; import type { NextApiRequest, NextApiResponse } from "next"; -export default async function multisigApi(req: NextApiRequest, res: NextApiResponse) { - switch (req.method) { - case "POST": - try { - const data = req.body; - console.log("Function `createMultisig` invoked", data); - const saveRes = await createMultisig(data); - console.log("success", saveRes); - res.status(200).send(saveRes.data.addMultisig.multisig[0]); - return; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } catch (err: any) { - console.log(err); - res.status(400).send(err.message); - return; - } +const endpointErrMsg = "Failed to create multisig"; + +export default async function apiCreateMultisig(req: NextApiRequest, res: NextApiResponse) { + const chainId = req.query.chainId; + + if (req.method !== "POST" || typeof chainId !== "string" || !chainId) { + res.status(405).end(); + return; + } + + const multisigDraft: CreateDbMultisigBody = req.body; + + try { + if (chainId !== multisigDraft.chainId) { + throw new Error( + `tried to create multisig on chain ${chainId} with data for chain ${multisigDraft.chainId}`, + ); + } + + const dbMultisigAddress = await createMultisig(multisigDraft); + res.status(200).send({ dbMultisigAddress }); + console.log("Create multisig success", JSON.stringify({ dbMultisigAddress }, null, 2)); + } catch (err: unknown) { + console.error(err); + res + .status(400) + .send(err instanceof Error ? `${endpointErrMsg}: ${err.message}` : endpointErrMsg); } - // no route matched - res.status(405).end(); - return; } diff --git a/pages/api/chain/[chainId]/multisig/list/index.ts b/pages/api/chain/[chainId]/multisig/list/index.ts index b69e433..f2209c9 100644 --- a/pages/api/chain/[chainId]/multisig/list/index.ts +++ b/pages/api/chain/[chainId]/multisig/list/index.ts @@ -1,68 +1,63 @@ -import { ChainInfo } from "@/context/ChainsContext/types"; -import { - getBelongedMultisigs, - getCreatedMultisigs, - getNonce, - updateNonce, -} from "@/lib/graphqlHelpers"; +import { getBelongedMultisigs, getCreatedMultisigs } from "@/graphql/multisig"; +import { getNonce, incrementNonce } from "@/graphql/nonce"; +import { GetDbMultisigTxsBody } from "@/lib/api"; import { verifyKeplrSignature } from "@/lib/keplr"; import { decodeSignature, pubkeyToAddress } from "@cosmjs/amino"; import { toBase64 } from "@cosmjs/encoding"; import { StargateClient } from "@cosmjs/stargate"; -import { StdSignature } from "@keplr-wallet/types"; import type { NextApiRequest, NextApiResponse } from "next"; -export default async function multisigsApi(req: NextApiRequest, res: NextApiResponse) { - switch (req.method) { - case "POST": - try { - const { signature, chain }: { signature: StdSignature; chain: ChainInfo } = req.body; +const endpointErrMsg = "Failed to list multisigs"; - const chainId = typeof req.query.chainId === "string" ? req.query.chainId : ""; - if (chainId !== chain.chainId) { - throw new Error(`Tried connecting to ${chainId} with data from ${chain.chainId}`); - } +export default async function apiListMultisigs(req: NextApiRequest, res: NextApiResponse) { + const chainId = req.query.chainId; - const address = pubkeyToAddress(signature.pub_key, chain.addressPrefix); - - const client = await StargateClient.connect(chain.nodeAddress); - const accountOnChain = await client.getAccount(address); - - if (!accountOnChain) { - throw new Error("Account not found on chain for: " + address); - } - - const dbNonce = await getNonce(chainId, address); - - if (!dbNonce) { - throw new Error(`Nonce not found on ${chainId} for ${address}`); - } - - await updateNonce(chainId, address, dbNonce.nonce + 1); - const verified = verifyKeplrSignature(signature, chain, dbNonce.nonce); - - if (verified) { - console.log("Function `getMultisigs` invoked", chainId, address); - - const created = await getCreatedMultisigs(chainId, address); - - const { pubkey: decodedPubKey } = decodeSignature(signature); - const belonged = await getBelongedMultisigs(chainId, toBase64(decodedPubKey)); - - console.log("success", { created, belonged }); - res.status(200).send({ created, belonged }); - return; - } - - throw new Error("Signature failed for querying multisigs"); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } catch (err: any) { - console.log(err); - res.status(400).send(err.message); - return; - } + if (req.method !== "POST" || typeof chainId !== "string" || !chainId) { + res.status(405).end(); + return; + } + + const body: GetDbMultisigTxsBody = req.body; + + try { + if (chainId !== body.chain.chainId) { + throw new Error( + `tried listing multisigs from ${chainId} with data from ${body.chain.chainId}`, + ); + } + + const address = pubkeyToAddress(body.signature.pub_key, body.chain.addressPrefix); + + const client = await StargateClient.connect(body.chain.nodeAddress); + const accountOnChain = await client.getAccount(address); + + if (!accountOnChain) { + throw new Error(`account with address ${address} not found on chain ${chainId}`); + } + + const dbNonce = await getNonce(chainId, address); + const incrementedNonce = await incrementNonce(chainId, address); + + if (incrementedNonce !== dbNonce + 1) { + throw new Error("nonce increment failed"); + } + + const verified = verifyKeplrSignature(body.signature, body.chain, dbNonce); + + if (verified) { + const created = await getCreatedMultisigs(chainId, address); + const { pubkey: decodedPubKey } = decodeSignature(body.signature); + const belonged = await getBelongedMultisigs(chainId, toBase64(decodedPubKey)); + + res.status(200).send({ created, belonged }); + console.log("List multisigs success", JSON.stringify({ created, belonged }, null, 2)); + } else { + throw new Error("signature verification failed"); + } + } catch (err: unknown) { + console.error(err); + res + .status(400) + .send(err instanceof Error ? `${endpointErrMsg}: ${err.message}` : endpointErrMsg); } - // no route matched - res.status(405).end(); - return; } diff --git a/pages/api/chain/[chainId]/nonce/[address]/index.tsx b/pages/api/chain/[chainId]/nonce/[address]/index.tsx index 56696e2..7f54a34 100644 --- a/pages/api/chain/[chainId]/nonce/[address]/index.tsx +++ b/pages/api/chain/[chainId]/nonce/[address]/index.tsx @@ -1,37 +1,31 @@ -import { createNonce, getNonce } from "@/lib/graphqlHelpers"; +import { getNonce } from "@/graphql/nonce"; import type { NextApiRequest, NextApiResponse } from "next"; -export default async function nonceApi(req: NextApiRequest, res: NextApiResponse) { - switch (req.method) { - case "GET": - try { - const chainId = req.query.chainId?.toString() || ""; - const address = req.query.address?.toString() || ""; +const endpointErrMsg = "Failed to get nonce"; - console.log("Function `getNonce` invoked", chainId, address); - let nonce = await getNonce(chainId, address); - if (nonce) { - console.log("success", nonce); - res.status(200).send(nonce); - return; - } +export default async function apiGetNonce(req: NextApiRequest, res: NextApiResponse) { + const chainId = req.query.chainId; + const address = req.query.address; - nonce = await createNonce(chainId, address); - if (!nonce) { - throw new Error(`Nonce could not be created on ${chainId} for ${address}`); - } + if ( + req.method !== "GET" || + typeof chainId !== "string" || + !chainId || + typeof address !== "string" || + !address + ) { + res.status(405).end(); + return; + } - console.log("success", nonce); - res.status(200).send(nonce); - return; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } catch (err: any) { - console.log(err); - res.status(400).send(err.message); - return; - } + try { + const nonce = await getNonce(chainId, address); + res.status(200).send({ nonce }); + console.log("Get nonce success", JSON.stringify({ nonce }, null, 2)); + } catch (err: unknown) { + console.error(err); + res + .status(400) + .send(err instanceof Error ? `${endpointErrMsg}: ${err.message}` : endpointErrMsg); } - // no route matched - res.status(405).end(); - return; } diff --git a/pages/api/transaction/[transactionID]/index.ts b/pages/api/transaction/[transactionID]/index.ts index 44470d0..8c6d219 100644 --- a/pages/api/transaction/[transactionID]/index.ts +++ b/pages/api/transaction/[transactionID]/index.ts @@ -1,25 +1,27 @@ +import { updateTxHash } from "@/graphql/transaction"; +import { UpdateDbTxHashBody } from "@/lib/api"; import type { NextApiRequest, NextApiResponse } from "next"; -import { updateTxHash } from "../../../../lib/graphqlHelpers"; -export default async function transactionIDApi(req: NextApiRequest, res: NextApiResponse) { - switch (req.method) { - case "POST": - try { - const transactionID = req.query.transactionID?.toString() || ""; - const { txHash } = req.body; - console.log("Function `updateTransaction` invoked", txHash); - const saveRes = await updateTxHash(transactionID, txHash); - console.log("success", saveRes.data); - res.status(200).send(saveRes.data.updateTransaction.transaction[0]); - return; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } catch (err: any) { - console.log(err); - res.status(400).send(err.message); - return; - } +const endpointErrMsg = "Failed to update txHash"; + +export default async function apiUpdateTxHash(req: NextApiRequest, res: NextApiResponse) { + const txId = req.query.transactionID; + + if (req.method !== "POST" || typeof txId !== "string" || !txId) { + res.status(405).end(); + return; + } + + const body: UpdateDbTxHashBody = req.body; + + try { + const dbTxHash = await updateTxHash(txId, body.txHash); + res.status(200).send({ dbTxHash }); + console.log("Update txHash success", JSON.stringify({ dbTxHash }, null, 2)); + } catch (err: unknown) { + console.error(err); + res + .status(400) + .send(err instanceof Error ? `${endpointErrMsg}: ${err.message}` : endpointErrMsg); } - // no route matched - res.status(405).end(); - return; } diff --git a/pages/api/transaction/[transactionID]/signature.ts b/pages/api/transaction/[transactionID]/signature.ts index e5678db..93b8548 100644 --- a/pages/api/transaction/[transactionID]/signature.ts +++ b/pages/api/transaction/[transactionID]/signature.ts @@ -1,25 +1,28 @@ +import { DbSignatureObjDraft, createSignature } from "@/graphql/signature"; +import { CreateDbSignatureBody } from "@/lib/api"; import type { NextApiRequest, NextApiResponse } from "next"; -import { createSignature } from "../../../../lib/graphqlHelpers"; -export default async function transactionIDApi(req: NextApiRequest, res: NextApiResponse) { - switch (req.method) { - case "POST": - try { - const transactionID = req.query.transactionID?.toString() || ""; - const data = req.body; - console.log("Function `createSignature` invoked", data); - const saveRes = await createSignature(data, transactionID); - console.log("success", saveRes.data); - res.status(200).send(saveRes.data.addSignature.signature[0]); - return; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } catch (err: any) { - console.log(err); - res.status(400).send(err.message); - return; - } +const endpointErrMsg = "Failed to create signature"; + +export default async function apiCreateSignature(req: NextApiRequest, res: NextApiResponse) { + const txId = req.query.transactionID; + + if (req.method !== "POST" || typeof txId !== "string" || !txId) { + res.status(405).end(); + return; + } + + const body: CreateDbSignatureBody = req.body; + + try { + const signatureObjDraft: DbSignatureObjDraft = { ...body, transaction: { id: txId } }; + const signature = await createSignature(signatureObjDraft); + res.status(200).send({ signature }); + console.log("Create signature success", JSON.stringify({ signature }, null, 2)); + } catch (err: unknown) { + console.error(err); + res + .status(400) + .send(err instanceof Error ? `${endpointErrMsg}: ${err.message}` : endpointErrMsg); } - // no route matched - res.status(405).end(); - return; } diff --git a/pages/api/transaction/index.ts b/pages/api/transaction/index.ts index 4501082..048cb0c 100644 --- a/pages/api/transaction/index.ts +++ b/pages/api/transaction/index.ts @@ -1,32 +1,35 @@ +import { getMultisig } from "@/graphql/multisig"; +import { createTransaction } from "@/graphql/transaction"; +import { CreateDbTxBody } from "@/lib/api"; import type { NextApiRequest, NextApiResponse } from "next"; -import { createTransaction, getMultisigId } from "../../../lib/graphqlHelpers"; -export default async function transactionApi(req: NextApiRequest, res: NextApiResponse) { - switch (req.method) { - case "POST": - try { - const data = req.body; - console.log("Function `createTransaction` invoked", data); +const endpointErrMsg = "Failed to create transaction"; - const multisigId = await getMultisigId(data.creator, data.chainId); - if (!multisigId) { - throw new Error("Multisig not found"); - } +export default async function apiCreateTransaction(req: NextApiRequest, res: NextApiResponse) { + if (req.method !== "POST") { + res.status(405).end(); + return; + } - const createTransactionResult = await createTransaction(data.dataJSON, multisigId); - console.log("createTransactionResult:", createTransactionResult); - res - .status(200) - .send({ transactionID: createTransactionResult.data.addTransaction.transaction[0].id }); - return; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } catch (err: any) { - console.log(err); - res.status(400).send(err.message); - return; - } + const body: CreateDbTxBody = req.body; + + try { + const multisig = await getMultisig(body.chainId, body.creator); + if (!multisig) { + throw new Error(`multisig not found with address ${body.creator} on chain ${body.chainId}`); + } + + const txId = await createTransaction({ + dataJSON: JSON.stringify(body.dataJSON), + creator: { id: multisig.id }, + }); + + res.status(200).send({ txId }); + console.log("Create transaction success", JSON.stringify({ txId }, null, 2)); + } catch (err: unknown) { + console.error(err); + res + .status(400) + .send(err instanceof Error ? `${endpointErrMsg}: ${err.message}` : endpointErrMsg); } - // no route matched - res.status(405).end(); - return; } diff --git a/pages/api/transaction/list/index.ts b/pages/api/transaction/list/index.ts index f989101..6ad5f7c 100644 --- a/pages/api/transaction/list/index.ts +++ b/pages/api/transaction/list/index.ts @@ -1,78 +1,66 @@ -import { ChainInfo } from "@/context/ChainsContext/types"; -import { - getMultisig, - getMultisigId, - getNonce, - getTransactions, - updateNonce, -} from "@/lib/graphqlHelpers"; +import { getMultisig } from "@/graphql/multisig"; +import { getNonce, incrementNonce } from "@/graphql/nonce"; +import { getTransactions } from "@/graphql/transaction"; +import { GetDbMultisigTxsBody } from "@/lib/api"; import { verifyKeplrSignature } from "@/lib/keplr"; import { decodeSignature, pubkeyToAddress } from "@cosmjs/amino"; import { toBase64 } from "@cosmjs/encoding"; import { StargateClient } from "@cosmjs/stargate"; -import { StdSignature } from "@keplr-wallet/types"; import type { NextApiRequest, NextApiResponse } from "next"; -export default async function transactionsApi(req: NextApiRequest, res: NextApiResponse) { - switch (req.method) { - case "POST": - try { - const { - signature, - chain, - multisigAddress, - }: { signature: StdSignature; chain: ChainInfo; multisigAddress: string } = req.body; +const endpointErrMsg = "Failed to list transactions"; - const multisig = await getMultisig(multisigAddress, chain.chainId); - if (!multisig) { - throw new Error("Multisig not found"); - } - - const { pubkey: decodedPubKey } = decodeSignature(signature); - - if (!multisig.pubkeyJSON.includes(toBase64(decodedPubKey))) { - throw new Error("You don't belong to the multisig"); - } - - const address = pubkeyToAddress(signature.pub_key, chain.addressPrefix); - - const client = await StargateClient.connect(chain.nodeAddress); - const accountOnChain = await client.getAccount(address); - - if (!accountOnChain) { - throw new Error("Account not found on chain for: " + address); - } - - const dbNonce = await getNonce(chain.chainId, address); - - if (!dbNonce) { - throw new Error(`Nonce not found on ${chain.chainId} for ${address}`); - } - - await updateNonce(chain.chainId, address, dbNonce.nonce + 1); - const verified = verifyKeplrSignature(signature, chain, dbNonce.nonce); - - if (verified) { - const multisigId = await getMultisigId(multisigAddress, chain.chainId); - if (!multisigId) { - throw new Error("Multisig not found"); - } - console.log("Function `getTransactions` invoked", chain.chainId, address); - const transactions = await getTransactions(multisigId); - console.log("success", transactions); - res.status(200).send(transactions); - return; - } - - throw new Error("Signature failed for querying multisigs"); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } catch (err: any) { - console.log(err); - res.status(400).send(err.message); - return; - } +export default async function apiListTransactions(req: NextApiRequest, res: NextApiResponse) { + if (req.method !== "POST") { + res.status(405).end(); + return; + } + + const body: GetDbMultisigTxsBody = req.body; + + try { + const multisig = await getMultisig(body.chain.chainId, body.multisigAddress); + if (!multisig) { + throw new Error( + `multisig not found with address ${body.multisigAddress} on chain ${body.chain.chainId}`, + ); + } + + const { pubkey: decodedPubKey } = decodeSignature(body.signature); + + if (!multisig.pubkeyJSON.includes(toBase64(decodedPubKey))) { + throw new Error("your account does not belong to the multisig"); + } + + const address = pubkeyToAddress(body.signature.pub_key, body.chain.addressPrefix); + + const client = await StargateClient.connect(body.chain.nodeAddress); + const accountOnChain = await client.getAccount(address); + + if (!accountOnChain) { + throw new Error(`account with address ${address} not found on chain ${body.chain.chainId}`); + } + + const dbNonce = await getNonce(body.chain.chainId, address); + const incrementedNonce = await incrementNonce(body.chain.chainId, address); + + if (incrementedNonce !== dbNonce + 1) { + throw new Error("nonce increment failed"); + } + + const verified = verifyKeplrSignature(body.signature, body.chain, dbNonce); + + if (verified) { + const transactions = await getTransactions(multisig.id); + res.status(200).send(transactions); + console.log("List transactions success", JSON.stringify(transactions, null, 2)); + } else { + throw new Error("signature verification failed"); + } + } catch (err: unknown) { + console.error(err); + res + .status(400) + .send(err instanceof Error ? `${endpointErrMsg}: ${err.message}` : endpointErrMsg); } - // no route matched - res.status(405).end(); - return; } diff --git a/types/db.ts b/types/db.ts deleted file mode 100644 index 64cfd39..0000000 --- a/types/db.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { StdFee } from "@cosmjs/amino"; -import { EncodeObject } from "@cosmjs/proto-signing"; - -export interface DbSignature { - bodyBytes: string; - signature: string; - address: string; -} - -export interface DbTransaction { - id: string; - txHash: string; - dataJSON: string; - signatures: DbSignature[]; -} - -export interface DbTransactionJsonObj { - accountNumber: number; - sequence: number; - chainId: string; - msgs: EncodeObject[]; - fee: StdFee; - memo: string; -} - -export interface DbMultisig { - chainId: string; - address: string; - creator: string; - pubkeyJSON: string; -} - -export type DbNonce = { - readonly chainId: string; - readonly address: string; - readonly nonce: number; -};