@swapper-finance/sdk
Version:
JavaScript SDK form Swapper
56 lines (51 loc) • 1.51 kB
text/typescript
import { Chain } from "@src/models";
import { isServer } from "@src/utils";
import { Transport } from "viem";
import * as WagmiChains from "viem/chains";
import { mainnet } from "viem/chains";
import { Config, createConfig, createStorage, http } from "wagmi";
import { injected, metaMask, safe, walletConnect } from "wagmi/connectors";
const storage = createStorage({
key: "swappersdk.wagmi.store",
storage: !isServer ? localStorage : undefined,
});
export const getWagmiConfig = (supportedChains: Chain[]): Config => {
const chains = mapChains(supportedChains);
const transports = mapTransports(chains);
return createConfig({
chains,
transports,
connectors: [
injected(),
metaMask(),
safe(),
walletConnect({
projectId: "c392898b45ac587a280b5eb33e92aeb0",
showQrModal: false,
}),
],
storage,
});
};
const mapChains = (
supportedChains: Chain[],
): [WagmiChains.Chain, ...WagmiChains.Chain[]] => {
const result: [WagmiChains.Chain, ...WagmiChains.Chain[]] = [mainnet];
result.push(
...Object.values(WagmiChains).filter(
(chain) =>
chain.id !== mainnet.id &&
supportedChains.some(({ chainId }) => chainId === chain.id.toString()),
),
);
return result;
};
const mapTransports = (
chains: WagmiChains.Chain[],
): Record<number, Transport> => {
const transports: Record<number, Transport> = {};
chains.forEach((chain) => {
transports[chain.id] = http();
});
return transports;
};