UNPKG

@trustless-work/escrow

Version:

<p align="center"> <img src="https://github.com/user-attachments/assets/5b182044-dceb-41f5-acf0-da22dea7c98a" alt="CLR-S (2)"> </p>

381 lines (365 loc) 12.1 kB
// src/hooks/useInitializeEscrow.ts import { useMutation, useQueryClient } from "@tanstack/react-query"; // src/provider.tsx import React, { useContext, useState, useEffect } from "react"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; // src/client.ts import axios from "axios"; var TrustlessWorkClient = class { constructor(baseURL, apiKey) { this.axios = axios.create({ baseURL }); if (apiKey) this.setApiKey(apiKey); } /** * Set the API key for the client * @param apiKey - The API key to set */ setApiKey(apiKey) { this.axios.interceptors.request.clear(); this.axios.interceptors.request.use((config) => { config.headers = config.headers ?? {}; config.headers["Authorization"] = `Bearer ${apiKey}`; return config; }); } /** * Send a transaction * @param data - The data (SendTransactionPayload) to send * @returns The response from the API */ sendTransaction(data) { return this.axios.post("/helper/send-transaction", data).then((r) => r.data); } /** * Initialize an escrow * @param data - The data (InitializeEscrowPayload) to initialize * @returns The response from the API */ initializeEscrow(data) { return this.axios.post("/deployer/invoke-deployer-contract", data).then((r) => r.data); } /** * Change the status of a milestone * @param data - The data (ChangeMilestoneStatusPayload) to change * @returns The response from the API */ changeMilestoneStatus(data) { return this.axios.post("/escrow/change-milestone-status", data).then((r) => r.data); } /** * Change the approved flag of a milestone * @param data - The data (ChangeMilestoneApprovedFlagPayload) to change * @returns The response from the API */ changeMilestoneApprovedFlag(data) { return this.axios.post( "/escrow/change-milestone-approved-flag", data ).then((r) => r.data); } /** * Fund an escrow * @param data - The data (FundEscrowPayload) to fund * @returns The response from the API */ fundEscrow(data) { return this.axios.post("/escrow/fund-escrow", data).then((r) => r.data); } /** * Release funds from an escrow * @param data - The data (ReleaseFundsPayload) to release * @returns The response from the API */ releaseFunds(data) { return this.axios.post("/escrow/release-funds", data).then((r) => r.data); } /** * Resolve a dispute * @param data - The data (ResolveDisputePayload) to resolve * @returns The response from the API */ resolveDispute(data) { return this.axios.post("/escrow/resolving-disputes", data).then((r) => r.data); } /** * Start a dispute * @param data - The data (StartDisputePayload) to start * @returns The response from the API */ startDispute(data) { return this.axios.post("/escrow/change-dispute-flag", data).then((r) => r.data); } /** * Update an escrow * @param data - The data (UpdateEscrowPayload) to update * @returns The response from the API */ updateEscrow(data) { return this.axios.put("/escrow/update-escrow-by-contract-id", data).then((r) => r.data); } /** * Get an escrow * @param data - The data (GetEscrowParams) to get * @returns The response from the API */ getEscrow(data) { return this.axios.get("/escrow/get-escrow-by-contract-id", { params: data }).then((r) => r.data); } /** * Get multiple balances * @param data - The data (GetBalanceParams) to get * @returns The response from the API */ getMultipleEscrowBalances(data) { return this.axios.get("/helper/get-multiple-escrow-balance", { params: data }).then((r) => r.data); } }; // src/provider.tsx var TrustlessWorkContext = React.createContext({ client: null }); var TrustlessWorkConfig = ({ baseURL, apiKey, children }) => { const [client, setClient] = useState(null); const [queryClient] = useState(() => new QueryClient()); useEffect(() => { const newClient = new TrustlessWorkClient(baseURL, apiKey); setClient(newClient); }, [baseURL, apiKey]); return /* @__PURE__ */ React.createElement(TrustlessWorkContext.Provider, { value: { client } }, /* @__PURE__ */ React.createElement(QueryClientProvider, { client: queryClient }, children)); }; function useTrustlessWorkClient() { const ctx = useContext(TrustlessWorkContext); if (!ctx.client) { throw new Error( "useTrustlessWorkClient must be inside TrustlessWorkConfig" ); } return ctx.client; } // src/hooks/useInitializeEscrow.ts function useInitializeEscrow() { const client = useTrustlessWorkClient(); const queryClient = useQueryClient(); const mutation = useMutation({ mutationFn: (payload) => client.initializeEscrow(payload), onSuccess: (data) => { queryClient.invalidateQueries({ queryKey: ["escrows"] }); } }); return { deployEscrow: mutation.mutateAsync, isPending: mutation.isPending, isError: mutation.isError, isSuccess: mutation.isSuccess, unsignedTransaction: mutation.data?.unsignedTransaction }; } // src/hooks/useSendTransaction.ts import { useMutation as useMutation2, useQueryClient as useQueryClient2 } from "@tanstack/react-query"; function useSendTransaction() { const client = useTrustlessWorkClient(); const queryClient = useQueryClient2(); const mutation = useMutation2({ mutationFn: (payload) => client.sendTransaction(payload), onSuccess: (data) => { queryClient.invalidateQueries({ queryKey: ["sendTransaction"] }); } }); return { sendTransaction: mutation.mutateAsync, isPending: mutation.isPending, isError: mutation.isError, isSuccess: mutation.isSuccess }; } // src/hooks/useGetEscrow.ts import { useMutation as useMutation3, useQueryClient as useQueryClient3 } from "@tanstack/react-query"; function useGetEscrow() { const client = useTrustlessWorkClient(); const queryClient = useQueryClient3(); const mutation = useMutation3({ mutationFn: (payload) => client.getEscrow(payload), onSuccess: (data) => { queryClient.invalidateQueries({ queryKey: ["escrows"] }); } }); return { getEscrow: mutation.mutateAsync, isPending: mutation.isPending, isError: mutation.isError, isSuccess: mutation.isSuccess, escrow: mutation.data }; } // src/hooks/useUpdateEscrow.ts import { useMutation as useMutation4, useQueryClient as useQueryClient4 } from "@tanstack/react-query"; function useUpdateEscrow() { const client = useTrustlessWorkClient(); const queryClient = useQueryClient4(); const mutation = useMutation4({ mutationFn: (payload) => client.updateEscrow(payload), onSuccess: (data) => { queryClient.invalidateQueries({ queryKey: ["escrows"] }); } }); return { updateEscrow: mutation.mutateAsync, isPending: mutation.isPending, isError: mutation.isError, isSuccess: mutation.isSuccess, unsignedTransaction: mutation.data?.unsignedTransaction }; } // src/hooks/useStartDispute.ts import { useMutation as useMutation5, useQueryClient as useQueryClient5 } from "@tanstack/react-query"; function useStartDispute() { const client = useTrustlessWorkClient(); const queryClient = useQueryClient5(); const mutation = useMutation5({ mutationFn: (payload) => client.startDispute(payload), onSuccess: (data) => { queryClient.invalidateQueries({ queryKey: ["escrows"] }); } }); return { startDispute: mutation.mutateAsync, isPending: mutation.isPending, isError: mutation.isError, isSuccess: mutation.isSuccess, unsignedTransaction: mutation.data?.unsignedTransaction }; } // src/hooks/useResolveDispute.ts import { useMutation as useMutation6, useQueryClient as useQueryClient6 } from "@tanstack/react-query"; function useResolveDispute() { const client = useTrustlessWorkClient(); const queryClient = useQueryClient6(); const mutation = useMutation6({ mutationFn: (payload) => client.resolveDispute(payload), onSuccess: (data) => { queryClient.invalidateQueries({ queryKey: ["escrows"] }); } }); return { resolveDispute: mutation.mutateAsync, isPending: mutation.isPending, isError: mutation.isError, isSuccess: mutation.isSuccess, unsignedTransaction: mutation.data?.unsignedTransaction }; } // src/hooks/useGetMultipleEscrowBalances.ts import { useMutation as useMutation7, useQueryClient as useQueryClient7 } from "@tanstack/react-query"; function useGetMultipleEscrowBalances() { const client = useTrustlessWorkClient(); const queryClient = useQueryClient7(); const mutation = useMutation7({ mutationFn: (payload) => client.getMultipleEscrowBalances(payload), onSuccess: (data) => { queryClient.invalidateQueries({ queryKey: ["escrows"] }); } }); return { getMultipleBalances: mutation.mutateAsync, isPending: mutation.isPending, isError: mutation.isError, isSuccess: mutation.isSuccess, balances: mutation.data }; } // src/hooks/useReleaseFunds.ts import { useMutation as useMutation8, useQueryClient as useQueryClient8 } from "@tanstack/react-query"; function useReleaseFunds() { const client = useTrustlessWorkClient(); const queryClient = useQueryClient8(); const mutation = useMutation8({ mutationFn: (payload) => client.releaseFunds(payload), onSuccess: (data) => { queryClient.invalidateQueries({ queryKey: ["escrows"] }); } }); return { releaseFunds: mutation.mutateAsync, isPending: mutation.isPending, isError: mutation.isError, isSuccess: mutation.isSuccess, unsignedTransaction: mutation.data?.unsignedTransaction }; } // src/hooks/useFundEscrow.ts import { useMutation as useMutation9, useQueryClient as useQueryClient9 } from "@tanstack/react-query"; function useFundEscrow() { const client = useTrustlessWorkClient(); const queryClient = useQueryClient9(); const mutation = useMutation9({ mutationFn: (payload) => client.fundEscrow(payload), onSuccess: (data) => { queryClient.invalidateQueries({ queryKey: ["escrows"] }); } }); return { fundEscrow: mutation.mutateAsync, isPending: mutation.isPending, isError: mutation.isError, isSuccess: mutation.isSuccess, unsignedTransaction: mutation.data?.unsignedTransaction }; } // src/hooks/useChangeMilestoneStatus.ts import { useMutation as useMutation10, useQueryClient as useQueryClient10 } from "@tanstack/react-query"; function useChangeMilestoneStatus() { const client = useTrustlessWorkClient(); const queryClient = useQueryClient10(); const mutation = useMutation10({ mutationFn: (payload) => client.changeMilestoneStatus(payload), onSuccess: (data) => { queryClient.invalidateQueries({ queryKey: ["escrows"] }); } }); return { changeMilestoneStatus: mutation.mutateAsync, isPending: mutation.isPending, isError: mutation.isError, isSuccess: mutation.isSuccess, unsignedTransaction: mutation.data?.unsignedTransaction }; } // src/hooks/useChangeMilestoneApprovedFlag.ts import { useMutation as useMutation11, useQueryClient as useQueryClient11 } from "@tanstack/react-query"; function useChangeMilestoneApprovedFlag() { const client = useTrustlessWorkClient(); const queryClient = useQueryClient11(); const mutation = useMutation11({ mutationFn: (payload) => client.changeMilestoneApprovedFlag(payload), onSuccess: (data) => { queryClient.invalidateQueries({ queryKey: ["escrows"] }); } }); return { changeMilestoneApprovedFlag: mutation.mutateAsync, isPending: mutation.isPending, isError: mutation.isError, isSuccess: mutation.isSuccess, unsignedTransaction: mutation.data?.unsignedTransaction }; } export { TrustlessWorkConfig, useInitializeEscrow, useSendTransaction, useGetEscrow, useUpdateEscrow, useStartDispute, useResolveDispute, useGetMultipleEscrowBalances, useReleaseFunds, useFundEscrow, useChangeMilestoneStatus, useChangeMilestoneApprovedFlag };