@b3dotfun/anyspend-sdk
Version:
React Hooks and UI Components for AnySpend by B3
64 lines (60 loc) • 1.96 kB
text/typescript
import { Nft, OrderType, Token, Tournament } from "@b3dotfun/anyspend-sdk/types";
import { normalizeAddress } from "@b3dotfun/anyspend-sdk/utils/address";
export type OrderParams = {
orderType: OrderType;
srcToken: Token;
dstToken: Token;
expectedDstAmount?: string;
nft?: Nft & { price: string };
tournament?: Tournament & { contractAddress: string; entryPriceOrFundAmount: string };
payload?: any;
};
export const buildPayload = (orderType: OrderType, params: OrderParams) => {
const { nft, tournament, payload, expectedDstAmount } = params;
switch (orderType) {
case OrderType.Swap:
return {
expectedDstAmount,
actualDstAmount: null
};
case OrderType.MintNFT:
return {
contractAddress: nft ? normalizeAddress(nft.contractAddress) : "",
nftPrice: nft?.price || ""
};
case OrderType.JoinTournament:
return {
contractAddress: tournament?.contractAddress,
entryPrice: tournament?.entryPriceOrFundAmount
};
case OrderType.FundTournament:
return {
contractAddress: tournament?.contractAddress,
fundAmount: tournament?.entryPriceOrFundAmount
};
case OrderType.Custom:
return { ...payload };
default:
throw new Error(`Invalid order type: ${orderType}`);
}
};
export const buildMetadata = (orderType: OrderType, params: OrderParams) => {
const { srcToken, dstToken, nft, tournament, payload } = params;
const baseMetadata = {
srcToken,
dstToken
};
switch (orderType) {
case OrderType.Swap:
return { ...baseMetadata };
case OrderType.MintNFT:
return { ...baseMetadata, nft };
case OrderType.JoinTournament:
case OrderType.FundTournament:
return { ...baseMetadata, tournament };
case OrderType.Custom:
return { ...baseMetadata, action: payload.action };
default:
throw new Error(`Invalid order type: ${orderType}`);
}
};