84 lines
2.4 KiB
TypeScript
84 lines
2.4 KiB
TypeScript
import { ProposalTypes } from "@walletconnect/types";
|
|
import {
|
|
DEFAULT_COSMOS_EVENTS,
|
|
DEFAULT_COSMOS_METHODS,
|
|
DEFAULT_EIP155_METHODS,
|
|
DEFAULT_EIP_155_EVENTS,
|
|
DEFAULT_SOLANA_EVENTS,
|
|
DEFAULT_SOLANA_METHODS,
|
|
DEFAULT_POLKADOT_EVENTS,
|
|
DEFAULT_POLKADOT_METHODS,
|
|
DEFAULT_NEAR_METHODS,
|
|
DEFAULT_NEAR_EVENTS,
|
|
DEFAULT_ELROND_EVENTS,
|
|
DEFAULT_ELROND_METHODS,
|
|
} from "../constants";
|
|
|
|
export const getNamespacesFromChains = (chains: string[]) => {
|
|
const supportedNamespaces: string[] = [];
|
|
chains.forEach((chainId) => {
|
|
const [namespace] = chainId.split(":");
|
|
if (!supportedNamespaces.includes(namespace)) {
|
|
supportedNamespaces.push(namespace);
|
|
}
|
|
});
|
|
|
|
return supportedNamespaces;
|
|
};
|
|
|
|
export const getSupportedMethodsByNamespace = (namespace: string) => {
|
|
switch (namespace) {
|
|
case "eip155":
|
|
return Object.values(DEFAULT_EIP155_METHODS);
|
|
case "cosmos":
|
|
return Object.values(DEFAULT_COSMOS_METHODS);
|
|
case "solana":
|
|
return Object.values(DEFAULT_SOLANA_METHODS);
|
|
case "polkadot":
|
|
return Object.values(DEFAULT_POLKADOT_METHODS);
|
|
case "near":
|
|
return Object.values(DEFAULT_NEAR_METHODS);
|
|
case "elrond":
|
|
return Object.values(DEFAULT_ELROND_METHODS);
|
|
default:
|
|
throw new Error(`No default methods for namespace: ${namespace}`);
|
|
}
|
|
};
|
|
|
|
export const getSupportedEventsByNamespace = (namespace: string) => {
|
|
switch (namespace) {
|
|
case "eip155":
|
|
return Object.values(DEFAULT_EIP_155_EVENTS);
|
|
case "cosmos":
|
|
return Object.values(DEFAULT_COSMOS_EVENTS);
|
|
case "solana":
|
|
return Object.values(DEFAULT_SOLANA_EVENTS);
|
|
case "polkadot":
|
|
return Object.values(DEFAULT_POLKADOT_EVENTS);
|
|
case "near":
|
|
return Object.values(DEFAULT_NEAR_EVENTS);
|
|
case "elrond":
|
|
return Object.values(DEFAULT_ELROND_EVENTS);
|
|
default:
|
|
throw new Error(`No default events for namespace: ${namespace}`);
|
|
}
|
|
};
|
|
|
|
export const getRequiredNamespaces = (
|
|
chains: string[]
|
|
): ProposalTypes.RequiredNamespaces => {
|
|
const selectedNamespaces = getNamespacesFromChains(chains);
|
|
console.log("selected namespaces:", selectedNamespaces);
|
|
|
|
return Object.fromEntries(
|
|
selectedNamespaces.map((namespace) => [
|
|
namespace,
|
|
{
|
|
methods: getSupportedMethodsByNamespace(namespace),
|
|
chains: chains.filter((chain) => chain.startsWith(namespace)),
|
|
events: getSupportedEventsByNamespace(namespace) as any[],
|
|
},
|
|
])
|
|
);
|
|
};
|