@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
JavaScript
// 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
};