From 89b4b74917fcb92dfda8e89999ef1d16df97fa81 Mon Sep 17 00:00:00 2001 From: abefernan <44572727+abefernan@users.noreply.github.com> Date: Thu, 27 Jun 2024 11:35:58 +0200 Subject: [PATCH] Add api endpoint helpers --- lib/api.ts | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 lib/api.ts diff --git a/lib/api.ts b/lib/api.ts new file mode 100644 index 0000000..7c05928 --- /dev/null +++ b/lib/api.ts @@ -0,0 +1,114 @@ +import { ChainInfo } from "@/context/ChainsContext/types"; +import { + DbMultisig, + DbMultisigDraft, + DbSignatureObjDraft, + DbTransaction, + DbTransactionParsedDataJson, +} from "@/graphql"; +import { StdSignature } from "@cosmjs/amino"; +import { requestJson } from "./request"; + +export const getDbMultisig = async (multisigAddress: string, chainId: string) => { + const multisig: DbMultisig = await requestJson( + `/api/chain/${chainId}/multisig/${multisigAddress}`, + ); + + return multisig; +}; + +export type GetDbUserMultisigsBody = { + readonly signature: StdSignature; + readonly chain: ChainInfo; +}; +export type FetchedMultisigs = { + readonly created: readonly DbMultisig[]; + readonly belonged: readonly DbMultisig[]; +}; +export const getDbUserMultisigs = async (signature: StdSignature, chain: ChainInfo) => { + const body: GetDbUserMultisigsBody = { signature, chain }; + + const multisigs: FetchedMultisigs = await requestJson( + `/api/chain/${chain.chainId}/multisig/list`, + { body }, + ); + + return multisigs; +}; + +export type CreateDbMultisigBody = DbMultisigDraft; +export const createDbMultisig = async (multisig: DbMultisigDraft, chainId: string) => { + const body: CreateDbMultisigBody = multisig; + + const { dbMultisigAddress }: { dbMultisigAddress: string } = await requestJson( + `/api/chain/${chainId}/multisig`, + { body }, + ); + + return dbMultisigAddress; +}; + +export type GetDbMultisigTxsBody = { + readonly signature: StdSignature; + readonly chain: ChainInfo; + readonly multisigAddress: string; +}; +export const getDbMultisigTxs = async ( + multisigAddress: string, + chain: ChainInfo, + signature: StdSignature, +) => { + const body: GetDbMultisigTxsBody = { signature, chain, multisigAddress }; + const txs: readonly DbTransaction[] = await requestJson(`/api/transaction/list`, { body }); + + return txs; +}; + +export type CreateDbTxBody = { + readonly dataJSON: DbTransactionParsedDataJson; + readonly creator: string; + readonly chainId: string; +}; +export const createDbTx = async ( + creatorAddress: string, + chainId: string, + dataJSON: DbTransactionParsedDataJson, +) => { + const body: CreateDbTxBody = { dataJSON, creator: creatorAddress, chainId }; + const { txId }: { txId: string } = await requestJson("/api/transaction", { body }); + + return txId; +}; + +export type UpdateDbTxHashBody = { + readonly txHash: string; +}; +export const updateDbTxHash = async (txId: string, txHash: string) => { + const body: UpdateDbTxHashBody = { txHash }; + + const { dbTxHash }: { dbTxHash: string } = await requestJson(`/api/transaction/${txId}`, { + body, + }); + + return dbTxHash; +}; + +export type CreateDbSignatureBody = Omit; +export const createDbSignature = async ( + txId: string, + signatureObj: Omit, +) => { + const body: CreateDbSignatureBody = signatureObj; + + const { signature }: { signature: string } = await requestJson( + `/api/transaction/${txId}/signature`, + { body }, + ); + + return signature; +}; + +export const getDbNonce = async (address: string, chainId: string) => { + const { nonce }: { nonce: number } = await requestJson(`/api/chain/${chainId}/nonce/${address}`); + return nonce; +};