UNPKG

@robertprp/intents-sdk

Version:

Shogun Network Intent-based cross-chain swaps SDK

82 lines (72 loc) 2.21 kB
import type { TupleToUnion } from './utils/type-utils.js'; /** * Represents the blockchain platform type * Used to distinguish between different blockchain ecosystems */ export enum ChainType { EVM = 'EVM', Solana = 'Solana', Sui = 'Sui', } /** * Enum of chain IDs for supported blockchains * EVM chains use their standard chain IDs * Non-EVM chains use custom assigned IDs */ export enum ChainID { Arbitrum = 42161, Optimism = 10, Base = 8453, Hyperliquid = 999, Solana = 7565164, Sui = 101, } /** * Array of chain IDs that are supported by the SDK * Used as a source of truth for type generation */ export const SupportedChains = [ ChainID.Arbitrum, ChainID.Base, ChainID.Optimism, ChainID.Hyperliquid, ChainID.Solana, ChainID.Sui, ] as const; /** * Type utility to identify chains not in the SupportedChains array * @internal */ type UnsupportedChain = Exclude<ChainID, TupleToUnion<typeof SupportedChains>>; /** * Type representing chains that are supported by the SDK * Derived from the SupportedChains array */ export type SupportedChain = Exclude<ChainID, UnsupportedChain>; export type SupportedSolanaChain = 7565164; export type SupportedSuiChain = 101; export type SupportedEvmChain = Exclude<ChainID, SupportedSolanaChain | SupportedSuiChain>; export function isEvmChain(chainId: ChainID): chainId is SupportedEvmChain { return chainId !== 7565164 && chainId !== 101; } /** * Type guard that checks if a chain ID is among the supported chains * @param chain - The chain ID to check * @returns Boolean indicating if the chain is supported */ export const isSupportedChain = (chain: unknown): chain is SupportedChain => { if (typeof chain !== 'number') return false; return (SupportedChains as readonly number[]).includes(chain); }; /** * Maps chain IDs to their corresponding chain types * Used to determine which SDK implementation to use for a given chain */ export const chainIdToChainTypeMap = { [ChainID.Arbitrum]: ChainType.EVM, [ChainID.Base]: ChainType.EVM, [ChainID.Optimism]: ChainType.EVM, [ChainID.Hyperliquid]: ChainType.EVM, [ChainID.Solana]: ChainType.Solana, [ChainID.Sui]: ChainType.Sui, } as const;