kohin-js
Version:
The Kohin JS is a comprehensive developer toolkit designed to integrate Kohin's decentralized insurance system seamlessly into your applications. It enables efficient interaction with Kohin smart contracts and backend APIs, facilitating management and ana
127 lines (126 loc) • 4.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ContractType = exports.convertToBigInt = exports.formattedTotalOdds = exports.parseString = exports.formatNumber = void 0;
exports.getPublicClient = getPublicClient;
exports.publicClientRead = publicClientRead;
exports.publicClientReadIns = publicClientReadIns;
exports.publicEstimateGasIns = publicEstimateGasIns;
exports.getContractDetails = getContractDetails;
const viem_1 = require("viem");
const serverConstants_1 = require("./serverConstants");
const abis_1 = require("../abis");
const errorHandlerUtils_1 = require("./errorHandlerUtils");
const configStore_1 = require("./configStore");
const constantVariables_1 = require("./constantVariables");
function getPublicClient() {
const rpcUrl = configStore_1.configStore.getRpcUrl();
const envMode = configStore_1.configStore.getEnvMode();
const POLYGON_CHAIN = serverConstants_1.CONSTANTS[envMode].POLYGON_CHAIN;
return (0, viem_1.createPublicClient)({
chain: POLYGON_CHAIN,
transport: rpcUrl?.length > 0 ? (0, viem_1.http)(rpcUrl) : (0, viem_1.http)(),
});
}
async function publicClientRead({ args, contractType, functionName, }) {
try {
const { abi, address } = getContractDetails(contractType);
const publicClient = getPublicClient();
const response = await publicClient.readContract({
address: address,
abi: abi,
functionName: functionName,
args: args,
});
return response;
}
catch (error) {
throw {
success: false,
error: error,
};
}
}
async function publicClientReadIns({ args, functionName, }) {
try {
const publicClient = getPublicClient();
const response = await publicClient.readContract({
address: (0, serverConstants_1.getEnvConstant)("INSURANCE_POOL_ADDRESS"),
abi: abis_1.ABIs.InsurancePoolAbi,
functionName: functionName,
args: args || [],
});
return response;
}
catch (error) {
throw {
success: false,
error: error,
};
}
}
async function publicEstimateGasIns({ args, functionName, walletClient, }) {
try {
const publicClient = getPublicClient();
const gasEstimate = await publicClient.estimateContractGas({
address: (0, serverConstants_1.getEnvConstant)("INSURANCE_POOL_ADDRESS"),
abi: abis_1.ABIs.InsurancePoolAbi,
functionName: functionName,
args: args || [],
account: walletClient.account,
});
return {
success: true,
gas: BigInt(gasEstimate.toString()),
};
}
catch (gasError) {
return (0, errorHandlerUtils_1.handleError)(gasError, functionName);
}
}
const formatNumber = (response, decimals) => {
return Number((0, viem_1.formatUnits)(response, decimals));
};
exports.formatNumber = formatNumber;
const parseString = (val) => {
const result = val?.replace(/"/g, "");
return result;
};
exports.parseString = parseString;
const formattedTotalOdds = (totalOdds) => {
return BigInt(Math.round(totalOdds * 1e12));
};
exports.formattedTotalOdds = formattedTotalOdds;
const convertToBigInt = (amount) => {
const MULTIPLIER = 10 ** constantVariables_1.USDT_DECIMAL;
return BigInt(amount * MULTIPLIER);
};
exports.convertToBigInt = convertToBigInt;
var ContractType;
(function (ContractType) {
ContractType["Policy"] = "Policy";
ContractType["Single"] = "Single";
ContractType["Combo"] = "Combo";
ContractType["Token"] = "Token";
ContractType["InsurancePool"] = "InsurancePool";
})(ContractType || (exports.ContractType = ContractType = {}));
function getContractDetails(contractType) {
const envAddresses = {
[ContractType.Policy]: (0, serverConstants_1.getEnvConstant)("POLICY_MANAGER_ADDRESS"),
[ContractType.Combo]: (0, serverConstants_1.getEnvConstant)("COMBO_PREMIUM_CALCULATOR_ADDRESS"),
[ContractType.Single]: (0, serverConstants_1.getEnvConstant)("SINGLE_PREMIUM_CALCULATOR_ADDRESS"),
[ContractType.Token]: (0, serverConstants_1.getEnvConstant)("TOKEN_ADDRESS"),
[ContractType.InsurancePool]: (0, serverConstants_1.getEnvConstant)("INSURANCE_POOL_ADDRESS"),
};
const address = envAddresses[contractType];
if (typeof address !== "string") {
throw new Error(`${contractType} address must be a string`);
}
const abis = {
[ContractType.Policy]: abis_1.ABIs.PolicyManagerAbi,
[ContractType.Combo]: abis_1.ABIs.ComboPremiumCalculatorAbi,
[ContractType.Single]: abis_1.ABIs.SinglePremiumCalculatorAbi,
[ContractType.Token]: abis_1.ABIs.TokenAbi,
[ContractType.InsurancePool]: abis_1.ABIs.InsurancePoolAbi,
};
return { abi: abis[contractType], address };
}