@sign-global/tokentable-wallets 1.6.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -968,21 +968,26 @@ var CosmosProvider = ({ children, chainName = "cosmoshub" }) => {
968
968
  };
969
969
 
970
970
  // src/providers/sui/index.tsx
971
- import "@mysten/dapp-kit/dist/index.css";
972
971
  import EventEmitter5 from "events";
973
972
  import { useEffect as useEffect5, useState } from "react";
974
- import {
975
- createNetworkConfig,
976
- SuiClientProvider,
977
- WalletProvider as WalletProvider2,
978
- ConnectModal,
979
- useCurrentAccount,
980
- useCurrentWallet
981
- } from "@mysten/dapp-kit";
982
- import { getFullnodeUrl } from "@mysten/sui/client";
973
+ import { createDAppKit, DAppKitProvider, useWalletConnection } from "@mysten/dapp-kit-react";
974
+ import { ConnectModal } from "@mysten/dapp-kit-react/ui";
975
+ import { SuiGrpcClient } from "@mysten/sui/grpc";
976
+ import { getWallets } from "@mysten/wallet-standard";
983
977
  import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
978
+ var createSuiDAppKit = () => createDAppKit({
979
+ networks: ["mainnet", "testnet"],
980
+ createClient: (network) => new SuiGrpcClient({ network, baseUrl: `https://fullnode.${network}.sui.io:443` })
981
+ });
982
+ var dAppKitInstance;
983
+ var getDAppKit = () => {
984
+ if (!dAppKitInstance) {
985
+ dAppKitInstance = createSuiDAppKit();
986
+ }
987
+ return dAppKitInstance;
988
+ };
984
989
  var suiStore = {
985
- connectModal: null,
990
+ openConnectModal: null,
986
991
  account: null,
987
992
  wallet: null,
988
993
  counter: 0
@@ -997,19 +1002,17 @@ var SuiWallet = class extends WalletBase {
997
1002
  return suiStore;
998
1003
  }
999
1004
  get isConnected() {
1000
- return !!this.getStore().wallet?.isConnected;
1005
+ return getDAppKit().stores.$connection.get().isConnected;
1001
1006
  }
1002
1007
  connect() {
1003
- suiStore.connectModal?.setOpen(true);
1008
+ suiStore.openConnectModal?.();
1004
1009
  }
1005
1010
  disconnect() {
1006
- suiStore.wallet?.currentWallet?.features["standard:disconnect"]?.disconnect();
1011
+ getDAppKit().disconnectWallet();
1007
1012
  }
1008
1013
  async sign(message) {
1009
- const signPersonalFeature = suiStore.wallet?.currentWallet?.features["sui:signPersonalMessage"];
1010
- const res = await signPersonalFeature?.signPersonalMessage({
1011
- message: new Uint8Array(Buffer.from(message)),
1012
- account: suiStore.account
1014
+ const res = await getDAppKit().signPersonalMessage({
1015
+ message: new Uint8Array(Buffer.from(message))
1013
1016
  });
1014
1017
  return {
1015
1018
  message,
@@ -1020,7 +1023,7 @@ var SuiWallet = class extends WalletBase {
1020
1023
  return new Promise((resolve) => {
1021
1024
  const signCallback = (data) => {
1022
1025
  this.publicKey = Buffer.from(data.publicKey).toString("hex");
1023
- this.address = data?.address;
1026
+ this.address = data.address;
1024
1027
  this.chainId = 1;
1025
1028
  let fullMessage = statement;
1026
1029
  if (prepare) {
@@ -1044,35 +1047,50 @@ var SuiWallet = class extends WalletBase {
1044
1047
  });
1045
1048
  }
1046
1049
  };
1050
+ var dappKitThemeReset = Object.fromEntries(
1051
+ [
1052
+ "background",
1053
+ "foreground",
1054
+ "primary",
1055
+ "primary-foreground",
1056
+ "secondary",
1057
+ "secondary-foreground",
1058
+ "border",
1059
+ "accent",
1060
+ "accent-foreground",
1061
+ "muted",
1062
+ "muted-foreground",
1063
+ "popover",
1064
+ "popover-foreground",
1065
+ "destructive",
1066
+ "positive",
1067
+ "ring",
1068
+ "input"
1069
+ ].map((name) => [`--${name}`, "initial"])
1070
+ );
1047
1071
  var SuiConnector = () => {
1048
- const [showModal, setShowModal] = useState(false);
1049
- const account = useCurrentAccount();
1050
- const wallet = useCurrentWallet();
1072
+ const [modalKey, setModalKey] = useState(0);
1073
+ const { wallet, account, isConnected } = useWalletConnection({ dAppKit: getDAppKit() });
1051
1074
  useEffect5(() => {
1052
- if (wallet) {
1053
- if (wallet.isConnected && account) {
1054
- const eventKey = getEventKey5();
1055
- eventBus5.emit(eventKey, account);
1056
- }
1075
+ if (isConnected && account) {
1076
+ const eventKey = getEventKey5();
1077
+ eventBus5.emit(eventKey, account);
1057
1078
  }
1058
- }, [wallet, account]);
1059
- suiStore.connectModal = {
1060
- open: showModal,
1061
- setOpen: setShowModal
1062
- };
1079
+ }, [isConnected, account]);
1080
+ suiStore.openConnectModal = () => setModalKey((key) => key + 1);
1063
1081
  suiStore.account = account;
1064
- suiStore.wallet = wallet;
1065
- return /* @__PURE__ */ jsx5(ConnectModal, { open: showModal, onOpenChange: (open) => setShowModal(open), trigger: /* @__PURE__ */ jsx5("div", {}) });
1082
+ suiStore.wallet = wallet ? getWallets().get().find((w) => w.name === wallet.name) ?? null : null;
1083
+ return modalKey > 0 ? /* @__PURE__ */ jsx5("div", { style: dappKitThemeReset, children: /* @__PURE__ */ jsx5(ConnectModal, { open: true }, modalKey) }) : null;
1066
1084
  };
1067
1085
  var SuiProvider = ({ children, network }) => {
1068
- const { networkConfig } = createNetworkConfig({
1069
- testnet: { url: getFullnodeUrl("testnet") },
1070
- mainnet: { url: getFullnodeUrl("mainnet") }
1071
- });
1072
- return /* @__PURE__ */ jsx5(SuiClientProvider, { networks: networkConfig, network, children: /* @__PURE__ */ jsxs5(WalletProvider2, { autoConnect: true, children: [
1086
+ const dAppKit = getDAppKit();
1087
+ useEffect5(() => {
1088
+ dAppKit.switchNetwork(network);
1089
+ }, [dAppKit, network]);
1090
+ return /* @__PURE__ */ jsxs5(DAppKitProvider, { dAppKit, children: [
1073
1091
  /* @__PURE__ */ jsx5(SuiConnector, {}),
1074
1092
  children
1075
- ] }) });
1093
+ ] });
1076
1094
  };
1077
1095
 
1078
1096
  // src/WalletFactory.tsx
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/providers/evm/index.tsx","../src/utils/index.ts","../src/WalletBase.ts","../src/providers/evm/EvmWallet.ts","../src/providers/ton/index.tsx","../src/providers/ton/TonWallet.ts","../src/providers/solana/index.tsx","../src/utils/ledger/adapter.ts","../src/utils/ledger/polyfills/Buffer.ts","../src/utils/ledger/util.ts","../src/providers/cosmos/index.tsx","../src/providers/sui/index.tsx","../src/WalletFactory.tsx"],"sourcesContent":["import '@rainbow-me/rainbowkit/styles.css';\nimport { RainbowKitProvider, darkTheme, useConnectModal } from '@rainbow-me/rainbowkit';\nimport { ResolvedRegister, WagmiProvider, useAccount, useWalletClient } from 'wagmi';\nimport { ReactNode, useEffect } from 'react';\n\nimport { evmStore, getEventKey, eventBus } from './EvmWallet';\n\nexport { EvmWallet } from './EvmWallet';\n\nexport const EVMConnector = () => {\n const connectModal = useConnectModal();\n const walletClient = useWalletClient();\n const account = useAccount();\n\n evmStore.connectModal = connectModal;\n evmStore.walletClient = walletClient;\n evmStore.account = account;\n\n useEffect(() => {\n if (account.isConnected) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, account);\n }\n }, [account]);\n\n return null;\n};\n\nexport const EvmProvider = ({\n children,\n config,\n theme\n}: {\n children: ReactNode;\n config: ResolvedRegister['config'];\n theme?: any;\n}) => {\n evmStore.config = config;\n return (\n <WagmiProvider config={config}>\n <RainbowKitProvider\n locale=\"en-US\"\n theme={\n theme ||\n darkTheme({\n accentColor: 'var(--t-primary)',\n accentColorForeground: 'var(--t-button-primary-foreground)'\n })\n }\n >\n {children}\n <EVMConnector />\n </RainbowKitProvider>\n </WagmiProvider>\n );\n};\n","import { getCustomNaNoId } from '@sign-global/tokentable-core';\nimport { ISignInMessage } from '../types';\n\nexport function prepareSignMessage({\n chainId,\n address,\n statement\n}: {\n address: string;\n chainId: number | string;\n statement?: string;\n}): ISignInMessage {\n return {\n statement: statement || 'Welcome to EthSign',\n chainId: chainId,\n address: address,\n issuedAt: new Date().toISOString(),\n domain: window.location.host,\n uri: window.location.origin,\n version: '1',\n nonce: getCustomNaNoId()\n };\n}\n\nexport const get4361Message = ({\n domain,\n version,\n nonce,\n issuedAt,\n statement,\n chainId,\n uri,\n address\n}: ISignInMessage): string => {\n const header = `${domain} wants you to sign in with your Ethereum account:`;\n const uriField = `URI: ${uri}`;\n let prefix = [header, address].join('\\n');\n const versionField = `Version: ${version}`;\n\n // const addressField = `Address: ` + address;\n\n const chainField = `Chain ID: ` + chainId || '1';\n\n const nonceField = `Nonce: ${nonce}`;\n\n const suffixArray = [uriField, versionField, chainField, nonceField];\n\n suffixArray.push(`Issued At: ${issuedAt}`);\n\n const suffix = suffixArray.join('\\n');\n prefix = [prefix, statement].join('\\n\\n');\n if (statement) {\n prefix += '\\n';\n }\n return [prefix, suffix].join('\\n');\n};\n","import { ISignResult } from './types';\nimport { prepareSignMessage } from './utils';\n\nexport abstract class WalletBase<S> {\n type: string;\n provider: any;\n address?: string;\n publicKey?: string;\n chainId?: number | string;\n protocolTag?: string;\n authType: string;\n userAddress?: string;\n network?: string;\n\n constructor(type: string, userAddress?: string) {\n this.type = type;\n this.provider = null;\n this.address = '';\n this.chainId = 1;\n this.authType = '';\n this.userAddress = userAddress || '';\n // this.init();\n }\n\n // abstract init(): void;\n\n // abstract init(): void;\n protected get isConnected(): boolean {\n throw new Error('Not implemented');\n }\n\n abstract connect(_?: string): void;\n\n // common sign\n abstract sign(_: string, _1?: string): Promise<ISignResult>;\n\n // checkAddressValidity(): boolean {\n // console.log(this.userAddress, this.address);\n // if (!this.address) {\n // // 兼容ton的情况,ton只有sign之后才有地址\n // return true;\n // }\n // if (this.userAddress && this.address !== this.userAddress) {\n // console.error('Wallet address and user address do not match.');\n // globalVm.toggleAccountChangedModal(true);\n // return false;\n // }\n // return true;\n // }\n\n async safeSign(_: string, _1?: string): Promise<ISignResult> {\n // if (!this.checkAddressValidity()) {\n // throw new Error('Wallet address and user address do not match.');\n // }\n return this.sign(_, _1);\n }\n\n async signin(statement?: string): Promise<ISignResult> {\n const msgRes = prepareSignMessage({ statement, chainId: this.chainId!, address: this.address! });\n return this.sign(JSON.stringify(msgRes, null, ' '));\n }\n\n // for metamask sign of EIP-712\n signByEIP712(_: string): Promise<ISignResult> {\n throw new Error(`received message:${_},Method not implemented.`);\n }\n\n getSignEIP712Message(_: { chainId: number | string; info: string; hash: string }): string {\n throw new Error(`received message:${JSON.stringify(_)},Method not implemented.`);\n }\n\n getWallet(): {\n address?: string;\n isConnected: boolean;\n publicKey: string | undefined;\n type: string;\n network: string | undefined;\n } {\n // 获取钱包信息\n return {\n type: this.type,\n isConnected: this.isConnected,\n address: this.address,\n publicKey: this.publicKey,\n network: this.network\n };\n }\n\n abstract getStore(): S;\n\n // abstract decrypt(message: string, address: string): Promise<string>;\n}\n","import { useConnectModal } from '@rainbow-me/rainbowkit';\nimport { ResolvedRegister, useAccount, useWalletClient } from 'wagmi';\nimport { WalletBase } from '../../WalletBase';\nimport { disconnect, getAccount, signMessage } from 'wagmi/actions';\nimport { EventEmitter } from 'events';\nimport { ISignResult } from '../../types';\nimport { get4361Message, prepareSignMessage } from '../../utils';\n\nexport const eventBus = new EventEmitter();\n\nconst EVM_EVENT_KEY = 'evm_signin';\n\nexport interface EVMStoreType {\n account: ReturnType<typeof useAccount> | null;\n connectModal: ReturnType<typeof useConnectModal> | undefined;\n walletClient: ReturnType<typeof useWalletClient> | undefined;\n config: ResolvedRegister['config'] | undefined;\n counter: number;\n}\n\nexport const evmStore: EVMStoreType = {\n account: null,\n connectModal: undefined,\n walletClient: undefined,\n config: undefined,\n counter: 0\n};\n\nexport const getEventKey = () => {\n return `${EVM_EVENT_KEY}_${evmStore.counter}`;\n};\n\nexport class EvmWallet extends WalletBase<EVMStoreType> {\n get isConnected() {\n return !!(evmStore.account?.address && evmStore.account?.isConnected);\n }\n\n connect() {\n evmStore?.connectModal?.openConnectModal?.();\n }\n\n async disconnect() {\n await disconnect(evmStore.config!);\n }\n\n async sign(_message: string) {\n try {\n const sign = await signMessage(evmStore.config!, {\n message: _message\n });\n return {\n message: _message,\n signature: sign\n };\n } catch (error) {\n throw error;\n }\n }\n\n override async signin(statement: string, prepare = true): Promise<ISignResult> {\n return new Promise((resolve, reject) => {\n const signCallback = async (data: ReturnType<typeof useAccount>) => {\n try {\n this.address = data.address;\n this.chainId = data.chainId;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: data.chainId!, address: data.address! });\n fullMessage = get4361Message(msg);\n }\n\n const res = await this.sign(fullMessage);\n\n resolve(res);\n } catch (error) {\n reject(error);\n }\n };\n\n const account = getAccount(evmStore.config!);\n this.provider = evmStore.walletClient;\n\n if (this.isConnected) {\n signCallback(account);\n return;\n }\n\n evmStore.counter++;\n this.connect();\n const eventKey = getEventKey();\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n signCallback(data);\n });\n });\n }\n\n getStore(): EVMStoreType {\n return evmStore;\n }\n}\n","import { ReactNode, useEffect } from 'react';\nimport {\n TonConnectUIProvider,\n useTonConnectUI,\n useTonWallet,\n useTonConnectModal,\n TonConnectUIProviderProps\n} from '@tonconnect/ui-react';\n\nimport { tonStore, eventBus, getEventKey, TonWallet } from './TonWallet';\n\nexport { TonWallet };\n\nexport const TonConnector = () => {\n const wallet = useTonWallet();\n const [tonConnectUI] = useTonConnectUI();\n const connectModal = useTonConnectModal();\n\n tonStore.connectModal = connectModal;\n tonStore.walletClient = tonConnectUI;\n tonStore.account = wallet;\n\n useEffect(() => {\n if (wallet) {\n eventBus.emit(getEventKey(), wallet);\n }\n }, [wallet]);\n\n return null;\n};\n\nexport const TonProvider = ({ children, config }: { children: ReactNode; config: TonConnectUIProviderProps }) => {\n tonStore.config = config;\n\n return (\n <TonConnectUIProvider {...config}>\n {children}\n <TonConnector />\n </TonConnectUIProvider>\n );\n};\n","import {\n useTonConnectUI,\n useTonWallet,\n useTonConnectModal,\n WalletInfoRemote,\n TonConnectUIProviderProps\n} from '@tonconnect/ui-react';\nimport { WalletBase } from '../../WalletBase';\nimport { ISignResult } from '../../types';\nimport { getCustomNaNoId } from '@sign-global/tokentable-core';\nimport { hashSha256 } from '@ethsign/utils-web';\nimport { CHAIN, TonProofItemReplySuccess, toUserFriendlyAddress, Wallet } from '@tonconnect/ui';\nimport { EventEmitter } from 'events';\nimport { Cell } from 'ton-core';\n\nexport interface TonStoreType {\n account: ReturnType<typeof useTonWallet> | null;\n connectModal: ReturnType<typeof useTonConnectModal> | undefined;\n walletClient: ReturnType<typeof useTonConnectUI>[0] | undefined;\n config: TonConnectUIProviderProps | undefined;\n counter: number;\n}\n\nexport const tonStore: TonStoreType = {\n account: null,\n connectModal: undefined,\n walletClient: undefined,\n config: undefined,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nexport const getEventKey = () => {\n return `ton_sign_${tonStore.counter}`;\n};\n\nexport class TonWallet extends WalletBase<TonStoreType> {\n get isConnected() {\n return !!tonStore.account?.account;\n }\n\n connect() {\n tonStore?.connectModal?.open?.();\n }\n\n async disconnect() {\n await tonStore.walletClient?.disconnect();\n }\n\n private getPublicKey(stateInit: string): string {\n const state_init = Cell.fromBase64(stateInit);\n const bits = state_init.refs[1].bits;\n const pubKey = bits.toString().substring(16, 80).toLowerCase();\n return pubKey;\n }\n\n async sign(originMsg: string): Promise<ISignResult> {\n const message = await hashSha256(originMsg);\n const tonConnectUI = tonStore.walletClient as any;\n // const walletInfo = tonConnectUI?.wallet;\n const authType = '';\n // if (walletInfo?.jsBridgeKey && walletInfo?.openMethod !== 'qrcode') {\n // authType = walletInfo.jsBridgeKey;\n // }\n\n console.log(this.isConnected, tonConnectUI, 'connected');\n if (this.isConnected) {\n await tonConnectUI.disconnect();\n }\n tonStore.counter++;\n if (authType) {\n const wallets = await tonConnectUI.getWallets();\n\n const currentWallet = wallets.find((wallet: any) =>\n [wallet.name, wallet.appName].includes(authType)\n ) as WalletInfoRemote;\n\n const link = tonConnectUI.connector.connect(\n {\n bridgeUrl: currentWallet.bridgeUrl,\n universalLink: currentWallet.universalLink\n },\n {\n tonProof: message\n }\n );\n\n // tonspace在tg内部打开\n window.open(link);\n } else {\n console.log('first time, call setConnectRequestParameters');\n tonConnectUI.setConnectRequestParameters({\n state: 'ready',\n value: {\n tonProof: message // 不能有空格,特殊字符\n }\n });\n this.connect();\n }\n\n const connectedWallet: Wallet = await new Promise((resolve) => {\n const eventKey = getEventKey();\n console.log('start listen event key, key = %s', eventKey);\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n resolve(data);\n });\n });\n\n this.provider = tonStore.walletClient;\n const proof = (connectedWallet.connectItems?.tonProof as TonProofItemReplySuccess)?.proof;\n this.publicKey = connectedWallet.account.publicKey || this.getPublicKey(connectedWallet.account.walletStateInit); //使用walletStateInit,publicKey由后端计算\n this.address = toUserFriendlyAddress(connectedWallet.account.address);\n this.chainId = connectedWallet.account.chain;\n this.network = this.chainId === CHAIN.MAINNET ? 'TON_MAINNET' : 'TON_TESTNET';\n const fullMessage = JSON.stringify({\n timestamp: proof.timestamp,\n payload: proof.payload,\n domain: proof.domain\n });\n const signature = proof.signature;\n\n return {\n message: JSON.stringify({\n fullMessage,\n message: originMsg\n }),\n signature,\n tonProof: message\n };\n }\n\n override async signin(statement: string, prepare = true): Promise<ISignResult> {\n const fullMessage = prepare\n ? JSON.stringify(\n {\n statement: statement || 'Welcome to EthSign',\n issuedAt: new Date().toISOString(),\n nonce: getCustomNaNoId()\n },\n null,\n ' '\n )\n : statement;\n const signRes = await this.sign(fullMessage);\n return signRes;\n }\n\n getStore(): TonStoreType {\n return tonStore;\n }\n}\n","import { ReactNode, useCallback, useEffect, useMemo } from 'react';\nimport { WalletBase } from '../../WalletBase';\nimport { useWalletModal, WalletModalProvider } from '@solana/wallet-adapter-react-ui';\nimport '@solana/wallet-adapter-react-ui/styles.css';\nimport { ISignResult } from '../../types';\nimport { ConnectionProvider, useWallet, WalletProvider } from '@solana/wallet-adapter-react';\nimport { PhantomWalletAdapter, TrustWalletAdapter } from '@solana/wallet-adapter-wallets';\nimport { type Adapter } from '@solana/wallet-adapter-base';\n\nimport { Cluster } from '@solana/web3.js';\nimport bs58 from 'bs58';\nimport { get4361Message, prepareSignMessage } from '../../utils';\nimport EventEmitter from 'events';\nimport { clusterApiUrl } from '@sign-global/tokentable-core';\nimport { getDerivationPath, LedgerWalletAdapter } from '../../utils/ledger';\n\ninterface SolStoreType {\n connectModal: ReturnType<typeof useWalletModal> | null;\n account: ReturnType<typeof useWallet> | null;\n counter: number;\n}\n\nconst solStore: SolStoreType = {\n connectModal: null,\n account: null,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nconst SOL_EVENT_KEY = 'sol_signin';\n\nexport const getEventKey = () => {\n return `${SOL_EVENT_KEY}_${solStore.counter}`;\n};\n\nexport class SolWallet extends WalletBase<SolStoreType> {\n getStore(): SolStoreType {\n return solStore;\n }\n get isConnected() {\n return !!solStore.account?.connected;\n }\n connect(): void {\n solStore.connectModal?.setVisible(true);\n }\n\n disconnect() {\n solStore.account?.disconnect();\n }\n\n async sign(message: string): Promise<ISignResult> {\n try {\n const provider = solStore.account!;\n const encodedMessage = new TextEncoder().encode(message);\n const result = await provider.signMessage?.(encodedMessage);\n\n const { signature, signedMessage } =\n result instanceof Uint8Array ? { signature: result, signedMessage: '' } : (result as any);\n return {\n message,\n signature: bs58.encode(signature),\n signedMessage: signedMessage instanceof Uint8Array ? bs58.encode(signedMessage) : ''\n };\n } catch (error) {\n console.error(error);\n throw error;\n }\n }\n\n signin(statement: string, prepare = true): Promise<ISignResult> {\n return new Promise((resolve, reject) => {\n try {\n const signCallback = async (data: ReturnType<typeof useWallet>) => {\n try {\n this.publicKey = data.publicKey?.toString();\n this.address = this.publicKey;\n this.chainId = 1;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: '1', address: this.address! });\n fullMessage = get4361Message(msg);\n }\n\n const res = await this.sign(fullMessage);\n\n resolve(res);\n } catch (error) {\n console.error('Error in signCallback:', error);\n reject(error);\n }\n };\n\n if (this.isConnected) {\n signCallback(solStore.account!);\n return;\n }\n solStore.counter++;\n this.connect();\n const eventKey = getEventKey();\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n signCallback(data);\n });\n } catch (error) {\n console.error('Error in signin:', error);\n reject(error);\n }\n });\n }\n}\n\n//Solana connection process: Open the modal first, then manually call wallet connect\nexport const SolConnector = () => {\n const walletModal = useWalletModal();\n const wallet = useWallet();\n\n useEffect(() => {\n if (wallet.wallet) {\n if (wallet.connected) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, wallet);\n }\n }\n }, [wallet]);\n\n solStore.connectModal = walletModal;\n solStore.account = wallet;\n return null;\n};\n\nexport const SolanaProvider = ({\n children,\n cluster,\n wallets\n}: {\n children: ReactNode;\n cluster?: Cluster;\n wallets?: Adapter[];\n}) => {\n const endpoint = clusterApiUrl(cluster ? cluster : 'mainnet-beta');\n\n const defaultWallets = useMemo(\n () => [\n new PhantomWalletAdapter(),\n new TrustWalletAdapter(),\n new LedgerWalletAdapter({\n derivationPath: getDerivationPath(0)\n })\n ],\n []\n );\n\n const onError = useCallback((error: any) => {\n console.error(error);\n }, []);\n return (\n <ConnectionProvider endpoint={endpoint}>\n <WalletProvider wallets={wallets ? wallets : defaultWallets} onError={onError} autoConnect>\n <WalletModalProvider>\n <SolConnector />\n {children}\n </WalletModalProvider>\n </WalletProvider>\n </ConnectionProvider>\n );\n};\n","import type { default as Transport } from '@ledgerhq/hw-transport';\nimport type { default as TransportWebHID } from '@ledgerhq/hw-transport-webhid';\nimport {\n BaseSignerWalletAdapter,\n WalletConnectionError,\n WalletDisconnectedError,\n WalletDisconnectionError,\n WalletLoadError,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSignMessageError,\n WalletSignTransactionError,\n type WalletName\n} from '@solana/wallet-adapter-base';\nimport type { PublicKey, Transaction, TransactionVersion, VersionedTransaction } from '@solana/web3.js';\nimport './polyfills/index.js';\nimport {\n getAppConfiguration,\n getDerivationPath,\n getPublicKey,\n OffchainMessage,\n signMessage,\n signTransaction\n} from './util.js';\n\nexport interface SignMessageOutput {\n /**\n * Message bytes that were signed.\n * The wallet may prefix or otherwise modify the message before signing it.\n */\n readonly signedMessage: Uint8Array;\n\n /**\n * Message signature produced.\n * If the signature type is provided, the signature must be Ed25519.\n */\n readonly signature: Uint8Array;\n\n /**\n * Optional type of the message signature produced.\n * If not provided, the signature must be Ed25519.\n */\n readonly signatureType?: 'ed25519';\n}\n\nexport interface LedgerWalletAdapterConfig {\n derivationPath?: Buffer;\n}\n\nexport const LedgerWalletName = 'Ledger' as WalletName<'Ledger'>;\n\nexport class LedgerWalletAdapter extends BaseSignerWalletAdapter {\n name = LedgerWalletName;\n url = 'https://ledger.com';\n icon =\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzUgMzUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iI2ZmZiI+PHBhdGggZD0ibTIzLjU4OCAwaC0xNnYyMS41ODNoMjEuNnYtMTZhNS41ODUgNS41ODUgMCAwIDAgLTUuNi01LjU4M3oiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUuNzM5KSIvPjxwYXRoIGQ9Im04LjM0MiAwaC0yLjc1N2E1LjU4NSA1LjU4NSAwIDAgMCAtNS41ODUgNS41ODV2Mi43NTdoOC4zNDJ6Ii8+PHBhdGggZD0ibTAgNy41OWg4LjM0MnY4LjM0MmgtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDUuNzM5KSIvPjxwYXRoIGQ9Im0xNS4xOCAyMy40NTFoMi43NTdhNS41ODUgNS41ODUgMCAwIDAgNS41ODUtNS42di0yLjY3MWgtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMS40NzggMTEuNDc4KSIvPjxwYXRoIGQ9Im03LjU5IDE1LjE4aDguMzQydjguMzQyaC04LjM0MnoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUuNzM5IDExLjQ3OCkiLz48cGF0aCBkPSJtMCAxNS4xOHYyLjc1N2E1LjU4NSA1LjU4NSAwIDAgMCA1LjU4NSA1LjU4NWgyLjc1N3YtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDExLjQ3OCkiLz48L2c+PC9zdmc+';\n supportedTransactionVersions: ReadonlySet<TransactionVersion> = new Set(['legacy', 0]);\n\n private _derivationPath: Buffer;\n private _connecting: boolean;\n private _transport: Transport | null;\n private _publicKey: PublicKey | null;\n private _readyState: WalletReadyState =\n typeof window === 'undefined' ||\n typeof document === 'undefined' ||\n typeof navigator === 'undefined' ||\n !(navigator as any).hid\n ? WalletReadyState.Unsupported\n : WalletReadyState.Loadable;\n\n constructor(config: LedgerWalletAdapterConfig = {}) {\n super();\n this._derivationPath = config.derivationPath || getDerivationPath(0, 0);\n this._connecting = false;\n this._transport = null;\n this._publicKey = null;\n }\n\n get publicKey() {\n return this._publicKey;\n }\n\n get connecting() {\n return this._connecting;\n }\n\n get readyState() {\n return this._readyState;\n }\n\n async connect(): Promise<void> {\n try {\n if (this.connected || this.connecting) return;\n if (this._readyState !== WalletReadyState.Loadable) throw new WalletNotReadyError();\n\n this._connecting = true;\n\n let TransportWebHIDClass: typeof TransportWebHID;\n try {\n TransportWebHIDClass = (await import('@ledgerhq/hw-transport-webhid')).default;\n } catch (error: any) {\n throw new WalletLoadError(error?.message, error);\n }\n\n let transport: Transport;\n try {\n transport = await TransportWebHIDClass.create();\n } catch (error: any) {\n throw new WalletConnectionError(error?.message, error);\n }\n\n let publicKey: PublicKey;\n try {\n publicKey = await getPublicKey(transport, this._derivationPath);\n } catch (error: any) {\n throw new WalletPublicKeyError(error?.message, error);\n }\n\n transport.on('disconnect', this._disconnected);\n\n this._transport = transport;\n this._publicKey = publicKey;\n\n this.emit('connect', publicKey);\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n } finally {\n this._connecting = false;\n }\n }\n\n async disconnect(): Promise<void> {\n const transport = this._transport;\n if (transport) {\n transport.off('disconnect', this._disconnected);\n\n this._transport = null;\n this._publicKey = null;\n\n try {\n await transport.close();\n } catch (error: any) {\n this.emit('error', new WalletDisconnectionError(error?.message, error));\n }\n }\n\n this.emit('disconnect');\n }\n\n async signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T> {\n try {\n const transport = this._transport;\n const publicKey = this._publicKey;\n if (!transport || !publicKey) throw new WalletNotConnectedError();\n\n try {\n const signature = await signTransaction(transport, transaction, this._derivationPath);\n transaction.addSignature(publicKey, signature);\n } catch (error: any) {\n throw new WalletSignTransactionError(error?.message, error);\n }\n\n return transaction;\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n }\n }\n\n async signMessage(message: Uint8Array): Promise<SignMessageOutput> {\n try {\n try {\n const transport = this._transport;\n const publicKey = this._publicKey;\n if (!transport || !publicKey) throw new WalletNotConnectedError();\n\n const appConfig = await getAppConfiguration(transport);\n const [major, minor] = appConfig.version.split('.').map(Number);\n if (major < 1 || (major === 1 && minor < 8)) {\n throw new WalletSignMessageError('Signing off-chain messages requires Solana Ledger App 1.8.0 or later');\n }\n\n const offchainMessage = new OffchainMessage({\n message: Buffer.from(message.buffer),\n signerAddress: publicKey\n });\n if (!offchainMessage.isLedgerSupported(appConfig.blindSigningEnabled)) {\n if (!offchainMessage.isValid()) {\n throw new WalletSignMessageError('Message is not valid for signing.');\n } else if (offchainMessage.messageFormat === 1 && !appConfig.blindSigningEnabled) {\n throw new WalletSignMessageError(\n 'Message contains non-ASCII characters and requires blind signing to be enabled on your Ledger device.'\n );\n } else if (offchainMessage.messageFormat === 2) {\n throw new WalletSignMessageError('Message is too long to be signed on Ledger device.');\n } else {\n throw new WalletSignMessageError('Message format is not supported by Ledger device.');\n }\n }\n\n const signature = await signMessage(transport, offchainMessage.serialize(), this._derivationPath);\n return { signature: new Uint8Array(signature), signedMessage: offchainMessage.serialize() };\n } catch (error: any) {\n throw new WalletSignMessageError(error?.message, error);\n }\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n }\n }\n\n private _disconnected = () => {\n const transport = this._transport;\n if (transport) {\n transport.off('disconnect', this._disconnected);\n\n this._transport = null;\n this._publicKey = null;\n\n this.emit('error', new WalletDisconnectedError());\n this.emit('disconnect');\n }\n };\n}\n","import { Buffer } from 'buffer';\n\nif (typeof window !== 'undefined' && window.Buffer === undefined) {\n (window as any).Buffer = Buffer;\n}\n\nexport {};\n","import { StatusCodes, TransportStatusError, type default as Transport } from '@ledgerhq/hw-transport';\nimport { isVersionedTransaction } from '@solana/wallet-adapter-base';\nimport { PublicKey, type Transaction, type VersionedTransaction } from '@solana/web3.js';\nimport './polyfills/index.js';\n\nexport function getDerivationPath(account?: number, change?: number): Buffer {\n const length = account !== undefined ? (change === undefined ? 3 : 4) : 2;\n const derivationPath = Buffer.alloc(1 + length * 4);\n\n let offset = derivationPath.writeUInt8(length, 0);\n offset = derivationPath.writeUInt32BE(harden(44), offset); // Using BIP44\n offset = derivationPath.writeUInt32BE(harden(501), offset); // Solana's BIP44 path\n\n if (account !== undefined) {\n offset = derivationPath.writeUInt32BE(harden(account), offset);\n if (change !== undefined) {\n derivationPath.writeUInt32BE(harden(change), offset);\n }\n }\n\n return derivationPath;\n}\n\nconst BIP32_HARDENED_BIT = (1 << 31) >>> 0;\n\nfunction harden(n: number): number {\n return (n | BIP32_HARDENED_BIT) >>> 0;\n}\n\nconst INS_GET_VERSION = 0x04;\nconst INS_GET_PUBKEY = 0x05;\nconst INS_SIGN_MESSAGE = 0x06;\nconst INS_SIGN_MESSAGE_OFFCHAIN = 0x07;\n\nconst P1_NON_CONFIRM = 0x00;\nconst P1_CONFIRM = 0x01;\n\nconst P2_EXTEND = 0x01;\nconst P2_MORE = 0x02;\n\nconst MAX_PAYLOAD = 255;\n\nconst LEDGER_CLA = 0xe0;\n\n// Max off-chain message length supported by Ledger\nconst OFFCM_MAX_LEDGER_LEN = 1212;\n// Max length of version 0 off-chain message\nconst OFFCM_MAX_V0_LEN = 65515;\n\nexport class OffchainMessage {\n version: number;\n messageFormat: number | undefined;\n message: Buffer | undefined;\n signerAddress: PublicKey;\n\n /**\n * Constructs a new OffchainMessage\n * @param {version: number, messageFormat: number, message: string | Buffer} opts - Constructor parameters\n */\n constructor(opts: { version?: number; messageFormat?: number; message: Buffer; signerAddress: PublicKey }) {\n this.version = 0;\n this.messageFormat = undefined;\n this.message = undefined;\n this.signerAddress = opts.signerAddress;\n\n if (!opts) {\n return;\n }\n if (opts.version) {\n this.version = opts.version;\n }\n if (opts.messageFormat) {\n this.messageFormat = opts.messageFormat;\n }\n if (opts.message) {\n this.message = Buffer.from(opts.message);\n if (this.version === 0) {\n if (!this.messageFormat) {\n this.messageFormat = OffchainMessage.guessMessageFormat(this.message);\n }\n }\n }\n }\n\n static guessMessageFormat(message: Buffer) {\n if (Object.prototype.toString.call(message) !== '[object Uint8Array]') {\n return undefined;\n }\n if (message.length <= OFFCM_MAX_LEDGER_LEN) {\n if (OffchainMessage.isPrintableASCII(message)) {\n return 0;\n } else if (OffchainMessage.isUTF8(message)) {\n return 1;\n }\n } else if (message.length <= OFFCM_MAX_V0_LEN) {\n if (OffchainMessage.isUTF8(message)) {\n return 2;\n }\n }\n return undefined;\n }\n\n static isPrintableASCII(buffer: Buffer) {\n return (\n buffer &&\n buffer.every((element) => {\n return element == 0xa || (element >= 0x20 && element <= 0x7e);\n })\n );\n }\n\n static isUTF8(buffer: Buffer) {\n try {\n new TextDecoder('utf8', { fatal: true }).decode(buffer);\n return true;\n } catch {\n return false;\n }\n }\n\n isValid() {\n if (this.version !== 0) {\n return false;\n }\n if (!this.message) {\n return false;\n }\n const format = OffchainMessage.guessMessageFormat(this.message);\n return format != null && format === this.messageFormat;\n }\n\n isLedgerSupported(allowBlindSigning: boolean) {\n return this.isValid() && (this.messageFormat === 0 || (this.messageFormat === 1 && allowBlindSigning));\n }\n\n serialize() {\n if (!this.isValid()) {\n throw new Error(`Invalid OffchainMessage: ${JSON.stringify(this)}`);\n }\n const signingDomain = Buffer.concat([Buffer.from([255]), Buffer.from('solana offchain')]);\n const headerVersion = Buffer.alloc(1);\n const applicationDomain = Buffer.alloc(32);\n const messageFormat = Buffer.alloc(1);\n const signerCount = Buffer.alloc(1);\n signerCount.writeUInt8(1);\n\n const messageLength = Buffer.alloc(2);\n\n // isValid() checks message\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const messageBuffer = Buffer.from(this.message!);\n\n // isValid() checks messageFormat\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n messageFormat.writeUInt8(this.messageFormat!);\n\n const signers = this.signerAddress.toBuffer();\n messageLength.writeUInt16LE(messageBuffer.length);\n\n return Buffer.concat([\n signingDomain,\n headerVersion,\n applicationDomain,\n messageFormat,\n signerCount,\n signers,\n messageLength,\n messageBuffer\n ]);\n }\n}\n\n/** @internal */\nexport async function getPublicKey(transport: Transport, derivationPath: Buffer): Promise<PublicKey> {\n const bytes = await send(transport, INS_GET_PUBKEY, P1_NON_CONFIRM, derivationPath);\n return new PublicKey(bytes);\n}\n\n/** @internal */\nexport async function signTransaction(\n transport: Transport,\n transaction: Transaction | VersionedTransaction,\n derivationPath: Buffer\n): Promise<Buffer> {\n const paths = Buffer.alloc(1);\n paths.writeUInt8(1, 0);\n\n const message = isVersionedTransaction(transaction)\n ? transaction.message.serialize()\n : transaction.serializeMessage();\n const data = Buffer.concat([paths, derivationPath, message]);\n\n return await send(transport, INS_SIGN_MESSAGE, P1_CONFIRM, data);\n}\n\n/** @internal */\nexport async function signMessage(transport: Transport, message: Buffer, derivationPath: Buffer): Promise<Buffer> {\n const paths = Buffer.alloc(1);\n paths.writeUInt8(1, 0);\n\n const data = Buffer.concat([paths, derivationPath, message]);\n\n return await send(transport, INS_SIGN_MESSAGE_OFFCHAIN, P1_CONFIRM, data);\n}\n\n/** @internal */\nexport async function getAppConfiguration(transport: Transport): Promise<AppConfig> {\n const [blindSigningEnabled, pubKeyDisplayMode, major, minor, patch] = await send(\n transport,\n INS_GET_VERSION,\n P1_NON_CONFIRM,\n Buffer.alloc(0)\n );\n return {\n blindSigningEnabled: Boolean(blindSigningEnabled),\n pubKeyDisplayMode,\n version: `${major}.${minor}.${patch}`\n };\n}\n\nenum PubKeyDisplayMode {\n LONG,\n SHORT\n}\n\ntype AppConfig = {\n blindSigningEnabled: boolean;\n pubKeyDisplayMode: PubKeyDisplayMode;\n version: string;\n};\n\nasync function send(transport: Transport, instruction: number, p1: number, data: Buffer): Promise<Buffer> {\n let p2 = 0;\n let offset = 0;\n\n if (data.length > MAX_PAYLOAD) {\n while (data.length - offset > MAX_PAYLOAD) {\n const buffer = data.slice(offset, offset + MAX_PAYLOAD);\n const response = await transport.send(LEDGER_CLA, instruction, p1, p2 | P2_MORE, buffer);\n\n if (response.length !== 2) throw new TransportStatusError(StatusCodes.INCORRECT_DATA);\n\n p2 |= P2_EXTEND;\n offset += MAX_PAYLOAD;\n }\n }\n\n const buffer = data.slice(offset);\n const response = await transport.send(LEDGER_CLA, instruction, p1, p2, buffer);\n\n return response.slice(0, response.length - 2);\n}\n","import { ReactNode, useEffect } from 'react';\nimport { ChainProvider, useChain } from '@cosmos-kit/react';\nimport { chains, assets } from 'chain-registry';\nimport { wallets } from '@cosmos-kit/keplr';\nimport { wallets as okxWallets } from '@cosmos-kit/okxwallet-extension';\nimport { wallets as compassWallets } from '@cosmos-kit/compass-extension';\nimport '@interchain-ui/react/styles';\nimport EventEmitter from 'events';\nimport { WalletBase } from '../../WalletBase';\nimport { ISignResult } from '../../types';\nimport { get4361Message, prepareSignMessage } from '../../utils';\n\ninterface CosmosStoreType {\n chainContext: ReturnType<typeof useChain> | null;\n counter: number;\n}\n\nconst cosmosStore: CosmosStoreType = {\n chainContext: null,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nconst COSMOS_EVENT_KEY = 'cosmos_signin';\n\nexport const getEventKey = () => {\n return `${COSMOS_EVENT_KEY}_${cosmosStore.counter}`;\n};\n\nexport class CosmosWallet extends WalletBase<CosmosStoreType> {\n getStore(): CosmosStoreType {\n return cosmosStore;\n }\n get isConnected() {\n return !!cosmosStore.chainContext?.isWalletConnected;\n }\n connect(): void {\n cosmosStore.chainContext?.connect();\n }\n\n disconnect() {\n cosmosStore.chainContext?.disconnect();\n }\n\n async sign(message: string): Promise<ISignResult> {\n try {\n const provider = cosmosStore.chainContext!;\n if (!provider.address) {\n throw new Error('Cosmos wallet not connected');\n }\n const result = await provider.signArbitrary?.(provider.address, message);\n\n this.publicKey = result?.pub_key?.value;\n\n return {\n message,\n signature: result?.signature\n };\n } catch (error) {\n console.error(error);\n throw error;\n }\n }\n\n signin(statement: string, prepare = true): Promise<ISignResult> {\n return new Promise((resolve, reject) => {\n try {\n const signCallback = async (data: ReturnType<typeof useChain>) => {\n try {\n this.address = data.address;\n this.chainId = 1;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: data.chain.chain_id, address: this.address! });\n fullMessage = get4361Message(msg);\n }\n\n const res = await this.sign(fullMessage);\n\n resolve(res);\n } catch (error) {\n console.error('Error in signCallback:', error);\n reject(error);\n }\n };\n\n if (this.isConnected) {\n signCallback(cosmosStore.chainContext!);\n return;\n }\n cosmosStore.counter++;\n this.connect();\n const eventKey = getEventKey();\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n signCallback(data);\n });\n } catch (error) {\n console.error('Error in signin:', error);\n reject(error);\n }\n });\n }\n}\n\nexport const CosmosConnector = ({ chainName = 'cosmoshub' }: { chainName?: string }) => {\n const chainContext = useChain(chainName);\n\n useEffect(() => {\n if (chainContext.address) {\n if (chainContext.isWalletConnected) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, chainContext);\n }\n }\n }, [chainContext]);\n\n cosmosStore.chainContext = chainContext;\n return null;\n};\n\nexport const CosmosProvider = ({ children, chainName = 'cosmoshub' }: { children: ReactNode; chainName?: string }) => {\n const assetList = assets.find(({ chain_name }) => chain_name === chainName);\n return (\n <ChainProvider\n chains={chains} // supported chains\n assetLists={assetList ? [assetList] : undefined} // supported asset lists\n wallets={[...wallets, ...compassWallets, ...okxWallets]}\n signerOptions={{}}\n endpointOptions={{ endpoints: {} }}\n throwErrors={true}\n >\n <CosmosConnector chainName={chainName} />\n {children}\n </ChainProvider>\n );\n};\n","import '@mysten/dapp-kit/dist/index.css';\nimport EventEmitter from 'events';\nimport { ReactNode, useEffect, useState } from 'react';\nimport { WalletBase } from '../../WalletBase';\nimport { ISignResult } from '../../types';\nimport { get4361Message, prepareSignMessage } from '../../utils';\nimport {\n createNetworkConfig,\n SuiClientProvider,\n WalletProvider,\n ConnectModal,\n useCurrentAccount,\n useCurrentWallet\n} from '@mysten/dapp-kit';\nimport { getFullnodeUrl } from '@mysten/sui/client';\n\ninterface SuiStoreType {\n connectModal: {\n open: boolean;\n setOpen: (open: boolean) => void;\n } | null;\n account: ReturnType<typeof useCurrentAccount> | null;\n wallet: ReturnType<typeof useCurrentWallet> | null;\n counter: number;\n}\n\nconst suiStore: SuiStoreType = {\n connectModal: null,\n account: null,\n wallet: null,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nconst Sui_EVENT_KEY = 'sui_signin';\n\nexport const getEventKey = () => {\n return `${Sui_EVENT_KEY}_${suiStore.counter}`;\n};\n\nexport class SuiWallet extends WalletBase<SuiStoreType> {\n getStore(): SuiStoreType {\n return suiStore;\n }\n get isConnected(): boolean {\n return !!this.getStore().wallet?.isConnected;\n }\n\n connect() {\n suiStore.connectModal?.setOpen(true);\n }\n\n disconnect() {\n suiStore.wallet?.currentWallet?.features['standard:disconnect']?.disconnect();\n }\n async sign(message: string): Promise<ISignResult> {\n const signPersonalFeature = suiStore.wallet?.currentWallet?.features['sui:signPersonalMessage'];\n const res = await signPersonalFeature?.signPersonalMessage({\n message: new Uint8Array(Buffer.from(message)),\n account: suiStore.account!\n });\n\n return {\n message: message,\n signature: res!.signature\n };\n }\n\n signin(statement: string, prepare = true): Promise<ISignResult> {\n return new Promise((resolve) => {\n const signCallback = (data: ReturnType<typeof useCurrentAccount>) => {\n this.publicKey = Buffer.from(data!.publicKey).toString('hex');\n this.address = data?.address;\n this.chainId = 1;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: this.chainId, address: this.address! });\n fullMessage = get4361Message(msg);\n }\n\n const res = this.sign(JSON.stringify(fullMessage, null, ' '));\n\n resolve(res);\n };\n\n if (this.isConnected && suiStore.account) {\n signCallback(suiStore.account!);\n return;\n }\n suiStore.counter++;\n this.connect();\n const eventKey = getEventKey();\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n signCallback(data);\n });\n });\n }\n}\n\nexport const SuiConnector = () => {\n const [showModal, setShowModal] = useState(false);\n const account = useCurrentAccount();\n const wallet = useCurrentWallet();\n\n useEffect(() => {\n if (wallet) {\n if (wallet.isConnected && account) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, account);\n }\n }\n }, [wallet, account]);\n\n suiStore.connectModal = {\n open: showModal,\n setOpen: setShowModal\n };\n suiStore.account = account;\n suiStore.wallet = wallet;\n\n return <ConnectModal open={showModal} onOpenChange={(open) => setShowModal(open)} trigger={<div></div>} />;\n};\n\nexport const SuiProvider = ({ children, network }: { children: ReactNode; network: 'testnet' | 'mainnet' }) => {\n const { networkConfig } = createNetworkConfig({\n testnet: { url: getFullnodeUrl('testnet') },\n mainnet: { url: getFullnodeUrl('mainnet') }\n });\n return (\n <SuiClientProvider networks={networkConfig} network={network}>\n <WalletProvider autoConnect>\n <SuiConnector />\n {children}\n </WalletProvider>\n </SuiClientProvider>\n );\n};\n","import { EvmWallet } from './providers/evm';\nimport { TonWallet } from './providers/ton';\nimport { SolWallet } from './providers/solana';\nimport { CosmosWallet } from './providers/cosmos';\nimport { SuiWallet } from './providers/sui';\n\nimport { ChainType } from '@sign-global/tokentable-core';\n\nexport abstract class WalletFactory {\n private static instances: Record<string, EvmWallet | TonWallet | SolWallet | CosmosWallet | SuiWallet> = {};\n static getWallet(\n type: ChainType,\n userAddress?: string\n ): EvmWallet | TonWallet | SolWallet | CosmosWallet | SuiWallet {\n if (!this.instances[type]) {\n let WalletClass;\n switch (type) {\n case ChainType.Evm:\n WalletClass = EvmWallet;\n break;\n case ChainType.Ton:\n WalletClass = TonWallet;\n break;\n case ChainType.Sui:\n WalletClass = SuiWallet;\n break;\n // case ChainType.Starknet:\n // WalletClass = StarknetWallet;\n // break;\n case ChainType.Solana:\n WalletClass = SolWallet;\n break;\n\n case ChainType.Cosmos:\n WalletClass = CosmosWallet;\n break;\n default:\n throw new Error('Unsupported wallet type');\n }\n\n if (!WalletClass) {\n throw new Error('Unsupported wallet type');\n }\n this.instances[type] = new WalletClass(type, userAddress);\n }\n return this.instances[type];\n }\n}\n"],"mappings":";AAAA,OAAO;AACP,SAAS,oBAAoB,WAAW,uBAAuB;AAC/D,SAA2B,eAAe,YAAY,uBAAuB;AAC7E,SAAoB,iBAAiB;;;ACHrC,SAAS,uBAAuB;AAGzB,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF,GAImB;AACjB,SAAO;AAAA,IACL,WAAW,aAAa;AAAA,IACxB;AAAA,IACA;AAAA,IACA,WAAU,oBAAI,KAAK,GAAE,YAAY;AAAA,IACjC,QAAQ,OAAO,SAAS;AAAA,IACxB,KAAK,OAAO,SAAS;AAAA,IACrB,SAAS;AAAA,IACT,OAAO,gBAAgB;AAAA,EACzB;AACF;AAEO,IAAM,iBAAiB,CAAC;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA8B;AAC5B,QAAM,SAAS,GAAG,MAAM;AACxB,QAAM,WAAW,QAAQ,GAAG;AAC5B,MAAI,SAAS,CAAC,QAAQ,OAAO,EAAE,KAAK,IAAI;AACxC,QAAM,eAAe,YAAY,OAAO;AAIxC,QAAM,aAAa,eAAe,WAAW;AAE7C,QAAM,aAAa,UAAU,KAAK;AAElC,QAAM,cAAc,CAAC,UAAU,cAAc,YAAY,UAAU;AAEnE,cAAY,KAAK,cAAc,QAAQ,EAAE;AAEzC,QAAM,SAAS,YAAY,KAAK,IAAI;AACpC,WAAS,CAAC,QAAQ,SAAS,EAAE,KAAK,MAAM;AACxC,MAAI,WAAW;AACb,cAAU;AAAA,EACZ;AACA,SAAO,CAAC,QAAQ,MAAM,EAAE,KAAK,IAAI;AACnC;;;ACpDO,IAAe,aAAf,MAA6B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,MAAc,aAAsB;AAC9C,SAAK,OAAO;AACZ,SAAK,WAAW;AAChB,SAAK,UAAU;AACf,SAAK,UAAU;AACf,SAAK,WAAW;AAChB,SAAK,cAAc,eAAe;AAAA,EAEpC;AAAA;AAAA;AAAA,EAKA,IAAc,cAAuB;AACnC,UAAM,IAAI,MAAM,iBAAiB;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAM,SAAS,GAAW,IAAmC;AAI3D,WAAO,KAAK,KAAK,GAAG,EAAE;AAAA,EACxB;AAAA,EAEA,MAAM,OAAO,WAA0C;AACrD,UAAM,SAAS,mBAAmB,EAAE,WAAW,SAAS,KAAK,SAAU,SAAS,KAAK,QAAS,CAAC;AAC/F,WAAO,KAAK,KAAK,KAAK,UAAU,QAAQ,MAAM,IAAI,CAAC;AAAA,EACrD;AAAA;AAAA,EAGA,aAAa,GAAiC;AAC5C,UAAM,IAAI,MAAM,oBAAoB,CAAC,0BAA0B;AAAA,EACjE;AAAA,EAEA,qBAAqB,GAAqE;AACxF,UAAM,IAAI,MAAM,oBAAoB,KAAK,UAAU,CAAC,CAAC,0BAA0B;AAAA,EACjF;AAAA,EAEA,YAME;AAEA,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,SAAS,KAAK;AAAA,MACd,WAAW,KAAK;AAAA,MAChB,SAAS,KAAK;AAAA,IAChB;AAAA,EACF;AAAA;AAKF;;;ACxFA,SAAS,YAAY,YAAY,mBAAmB;AACpD,SAAS,oBAAoB;AAItB,IAAM,WAAW,IAAI,aAAa;AAEzC,IAAM,gBAAgB;AAUf,IAAM,WAAyB;AAAA,EACpC,SAAS;AAAA,EACT,cAAc;AAAA,EACd,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,SAAS;AACX;AAEO,IAAM,cAAc,MAAM;AAC/B,SAAO,GAAG,aAAa,IAAI,SAAS,OAAO;AAC7C;AAEO,IAAM,YAAN,cAAwB,WAAyB;AAAA,EACtD,IAAI,cAAc;AAChB,WAAO,CAAC,EAAE,SAAS,SAAS,WAAW,SAAS,SAAS;AAAA,EAC3D;AAAA,EAEA,UAAU;AACR,cAAU,cAAc,mBAAmB;AAAA,EAC7C;AAAA,EAEA,MAAM,aAAa;AACjB,UAAM,WAAW,SAAS,MAAO;AAAA,EACnC;AAAA,EAEA,MAAM,KAAK,UAAkB;AAC3B,QAAI;AACF,YAAM,OAAO,MAAM,YAAY,SAAS,QAAS;AAAA,QAC/C,SAAS;AAAA,MACX,CAAC;AACD,aAAO;AAAA,QACL,SAAS;AAAA,QACT,WAAW;AAAA,MACb;AAAA,IACF,SAAS,OAAO;AACd,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAe,OAAO,WAAmB,UAAU,MAA4B;AAC7E,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,eAAe,OAAO,SAAwC;AAClE,YAAI;AACF,eAAK,UAAU,KAAK;AACpB,eAAK,UAAU,KAAK;AACpB,cAAI,cAAc;AAClB,cAAI,SAAS;AACX,kBAAM,MAAM,mBAAmB,EAAE,WAAW,SAAS,KAAK,SAAU,SAAS,KAAK,QAAS,CAAC;AAC5F,0BAAc,eAAe,GAAG;AAAA,UAClC;AAEA,gBAAM,MAAM,MAAM,KAAK,KAAK,WAAW;AAEvC,kBAAQ,GAAG;AAAA,QACb,SAAS,OAAO;AACd,iBAAO,KAAK;AAAA,QACd;AAAA,MACF;AAEA,YAAM,UAAU,WAAW,SAAS,MAAO;AAC3C,WAAK,WAAW,SAAS;AAEzB,UAAI,KAAK,aAAa;AACpB,qBAAa,OAAO;AACpB;AAAA,MACF;AAEA,eAAS;AACT,WAAK,QAAQ;AACb,YAAM,WAAW,YAAY;AAC7B,eAAS,KAAK,UAAU,CAAC,SAAS;AAChC,gBAAQ,IAAI,uDAAuD,UAAU,IAAI;AACjF,qBAAa,IAAI;AAAA,MACnB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,WAAyB;AACvB,WAAO;AAAA,EACT;AACF;;;AH5DM,SAWE,KAXF;AA/BC,IAAM,eAAe,MAAM;AAChC,QAAM,eAAe,gBAAgB;AACrC,QAAM,eAAe,gBAAgB;AACrC,QAAM,UAAU,WAAW;AAE3B,WAAS,eAAe;AACxB,WAAS,eAAe;AACxB,WAAS,UAAU;AAEnB,YAAU,MAAM;AACd,QAAI,QAAQ,aAAa;AACvB,YAAM,WAAW,YAAY;AAC7B,eAAS,KAAK,UAAU,OAAO;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAEZ,SAAO;AACT;AAEO,IAAM,cAAc,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF,MAIM;AACJ,WAAS,SAAS;AAClB,SACE,oBAAC,iBAAc,QACb;AAAA,IAAC;AAAA;AAAA,MACC,QAAO;AAAA,MACP,OACE,SACA,UAAU;AAAA,QACR,aAAa;AAAA,QACb,uBAAuB;AAAA,MACzB,CAAC;AAAA,MAGF;AAAA;AAAA,QACD,oBAAC,gBAAa;AAAA;AAAA;AAAA,EAChB,GACF;AAEJ;;;AIvDA,SAAoB,aAAAA,kBAAiB;AACrC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;;;ACEP,SAAS,mBAAAC,wBAAuB;AAChC,SAAS,kBAAkB;AAC3B,SAAS,OAAiC,6BAAqC;AAC/E,SAAS,gBAAAC,qBAAoB;AAC7B,SAAS,YAAY;AAUd,IAAM,WAAyB;AAAA,EACpC,SAAS;AAAA,EACT,cAAc;AAAA,EACd,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,SAAS;AACX;AAEO,IAAMC,YAAW,IAAID,cAAa;AAElC,IAAME,eAAc,MAAM;AAC/B,SAAO,YAAY,SAAS,OAAO;AACrC;AAEO,IAAM,YAAN,cAAwB,WAAyB;AAAA,EACtD,IAAI,cAAc;AAChB,WAAO,CAAC,CAAC,SAAS,SAAS;AAAA,EAC7B;AAAA,EAEA,UAAU;AACR,cAAU,cAAc,OAAO;AAAA,EACjC;AAAA,EAEA,MAAM,aAAa;AACjB,UAAM,SAAS,cAAc,WAAW;AAAA,EAC1C;AAAA,EAEQ,aAAa,WAA2B;AAC9C,UAAM,aAAa,KAAK,WAAW,SAAS;AAC5C,UAAM,OAAO,WAAW,KAAK,CAAC,EAAE;AAChC,UAAM,SAAS,KAAK,SAAS,EAAE,UAAU,IAAI,EAAE,EAAE,YAAY;AAC7D,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,KAAK,WAAyC;AAClD,UAAM,UAAU,MAAM,WAAW,SAAS;AAC1C,UAAM,eAAe,SAAS;AAE9B,UAAM,WAAW;AAKjB,YAAQ,IAAI,KAAK,aAAa,cAAc,WAAW;AACvD,QAAI,KAAK,aAAa;AACpB,YAAM,aAAa,WAAW;AAAA,IAChC;AACA,aAAS;AACT,QAAI,UAAU;AACZ,YAAMC,WAAU,MAAM,aAAa,WAAW;AAE9C,YAAM,gBAAgBA,SAAQ;AAAA,QAAK,CAAC,WAClC,CAAC,OAAO,MAAM,OAAO,OAAO,EAAE,SAAS,QAAQ;AAAA,MACjD;AAEA,YAAM,OAAO,aAAa,UAAU;AAAA,QAClC;AAAA,UACE,WAAW,cAAc;AAAA,UACzB,eAAe,cAAc;AAAA,QAC/B;AAAA,QACA;AAAA,UACE,UAAU;AAAA,QACZ;AAAA,MACF;AAGA,aAAO,KAAK,IAAI;AAAA,IAClB,OAAO;AACL,cAAQ,IAAI,8CAA8C;AAC1D,mBAAa,4BAA4B;AAAA,QACvC,OAAO;AAAA,QACP,OAAO;AAAA,UACL,UAAU;AAAA;AAAA,QACZ;AAAA,MACF,CAAC;AACD,WAAK,QAAQ;AAAA,IACf;AAEA,UAAM,kBAA0B,MAAM,IAAI,QAAQ,CAAC,YAAY;AAC7D,YAAM,WAAWD,aAAY;AAC7B,cAAQ,IAAI,oCAAoC,QAAQ;AACxD,MAAAD,UAAS,KAAK,UAAU,CAAC,SAAS;AAChC,gBAAQ,IAAI,uDAAuD,UAAU,IAAI;AACjF,gBAAQ,IAAI;AAAA,MACd,CAAC;AAAA,IACH,CAAC;AAED,SAAK,WAAW,SAAS;AACzB,UAAM,QAAS,gBAAgB,cAAc,UAAuC;AACpF,SAAK,YAAY,gBAAgB,QAAQ,aAAa,KAAK,aAAa,gBAAgB,QAAQ,eAAe;AAC/G,SAAK,UAAU,sBAAsB,gBAAgB,QAAQ,OAAO;AACpE,SAAK,UAAU,gBAAgB,QAAQ;AACvC,SAAK,UAAU,KAAK,YAAY,MAAM,UAAU,gBAAgB;AAChE,UAAM,cAAc,KAAK,UAAU;AAAA,MACjC,WAAW,MAAM;AAAA,MACjB,SAAS,MAAM;AAAA,MACf,QAAQ,MAAM;AAAA,IAChB,CAAC;AACD,UAAM,YAAY,MAAM;AAExB,WAAO;AAAA,MACL,SAAS,KAAK,UAAU;AAAA,QACtB;AAAA,QACA,SAAS;AAAA,MACX,CAAC;AAAA,MACD;AAAA,MACA,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EAEA,MAAe,OAAO,WAAmB,UAAU,MAA4B;AAC7E,UAAM,cAAc,UAChB,KAAK;AAAA,MACH;AAAA,QACE,WAAW,aAAa;AAAA,QACxB,WAAU,oBAAI,KAAK,GAAE,YAAY;AAAA,QACjC,OAAOF,iBAAgB;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,IACF,IACA;AACJ,UAAM,UAAU,MAAM,KAAK,KAAK,WAAW;AAC3C,WAAO;AAAA,EACT;AAAA,EAEA,WAAyB;AACvB,WAAO;AAAA,EACT;AACF;;;ADrHI,SAEE,OAAAK,MAFF,QAAAC,aAAA;AAtBG,IAAM,eAAe,MAAM;AAChC,QAAM,SAAS,aAAa;AAC5B,QAAM,CAAC,YAAY,IAAI,gBAAgB;AACvC,QAAM,eAAe,mBAAmB;AAExC,WAAS,eAAe;AACxB,WAAS,eAAe;AACxB,WAAS,UAAU;AAEnB,EAAAC,WAAU,MAAM;AACd,QAAI,QAAQ;AACV,MAAAC,UAAS,KAAKC,aAAY,GAAG,MAAM;AAAA,IACrC;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,SAAO;AACT;AAEO,IAAM,cAAc,CAAC,EAAE,UAAU,OAAO,MAAkE;AAC/G,WAAS,SAAS;AAElB,SACE,gBAAAC,MAAC,wBAAsB,GAAG,QACvB;AAAA;AAAA,IACD,gBAAAC,KAAC,gBAAa;AAAA,KAChB;AAEJ;;;AExCA,SAAoB,aAAa,aAAAC,YAAW,eAAe;AAE3D,SAAS,gBAAgB,2BAA2B;AACpD,OAAO;AAEP,SAAS,oBAAoB,WAAW,sBAAsB;AAC9D,SAAS,sBAAsB,0BAA0B;AAIzD,OAAO,UAAU;AAEjB,OAAOC,mBAAkB;AACzB,SAAS,qBAAqB;;;ACX9B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;;;ACfP,SAAS,UAAAC,eAAc;AAEvB,IAAI,OAAO,WAAW,eAAe,OAAO,WAAW,QAAW;AAC9D,EAAC,OAAe,SAASA;AAC7B;;;ACJA,SAAS,aAAa,4BAAuD;AAC7E,SAAS,8BAA8B;AACvC,SAAS,iBAA8D;AAGhE,SAAS,kBAAkB,SAAkB,QAAyB;AAC3E,QAAM,SAAS,YAAY,SAAa,WAAW,SAAY,IAAI,IAAK;AACxE,QAAM,iBAAiB,OAAO,MAAM,IAAI,SAAS,CAAC;AAElD,MAAI,SAAS,eAAe,WAAW,QAAQ,CAAC;AAChD,WAAS,eAAe,cAAc,OAAO,EAAE,GAAG,MAAM;AACxD,WAAS,eAAe,cAAc,OAAO,GAAG,GAAG,MAAM;AAEzD,MAAI,YAAY,QAAW;AACzB,aAAS,eAAe,cAAc,OAAO,OAAO,GAAG,MAAM;AAC7D,QAAI,WAAW,QAAW;AACxB,qBAAe,cAAc,OAAO,MAAM,GAAG,MAAM;AAAA,IACrD;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAM,qBAAsB,KAAK,OAAQ;AAEzC,SAAS,OAAO,GAAmB;AACjC,UAAQ,IAAI,wBAAwB;AACtC;AAEA,IAAM,kBAAkB;AACxB,IAAM,iBAAiB;AACvB,IAAM,mBAAmB;AACzB,IAAM,4BAA4B;AAElC,IAAM,iBAAiB;AACvB,IAAM,aAAa;AAEnB,IAAM,YAAY;AAClB,IAAM,UAAU;AAEhB,IAAM,cAAc;AAEpB,IAAM,aAAa;AAGnB,IAAM,uBAAuB;AAE7B,IAAM,mBAAmB;AAElB,IAAM,kBAAN,MAAM,iBAAgB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,MAA+F;AACzG,SAAK,UAAU;AACf,SAAK,gBAAgB;AACrB,SAAK,UAAU;AACf,SAAK,gBAAgB,KAAK;AAE1B,QAAI,CAAC,MAAM;AACT;AAAA,IACF;AACA,QAAI,KAAK,SAAS;AAChB,WAAK,UAAU,KAAK;AAAA,IACtB;AACA,QAAI,KAAK,eAAe;AACtB,WAAK,gBAAgB,KAAK;AAAA,IAC5B;AACA,QAAI,KAAK,SAAS;AAChB,WAAK,UAAU,OAAO,KAAK,KAAK,OAAO;AACvC,UAAI,KAAK,YAAY,GAAG;AACtB,YAAI,CAAC,KAAK,eAAe;AACvB,eAAK,gBAAgB,iBAAgB,mBAAmB,KAAK,OAAO;AAAA,QACtE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,mBAAmB,SAAiB;AACzC,QAAI,OAAO,UAAU,SAAS,KAAK,OAAO,MAAM,uBAAuB;AACrE,aAAO;AAAA,IACT;AACA,QAAI,QAAQ,UAAU,sBAAsB;AAC1C,UAAI,iBAAgB,iBAAiB,OAAO,GAAG;AAC7C,eAAO;AAAA,MACT,WAAW,iBAAgB,OAAO,OAAO,GAAG;AAC1C,eAAO;AAAA,MACT;AAAA,IACF,WAAW,QAAQ,UAAU,kBAAkB;AAC7C,UAAI,iBAAgB,OAAO,OAAO,GAAG;AACnC,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,iBAAiB,QAAgB;AACtC,WACE,UACA,OAAO,MAAM,CAAC,YAAY;AACxB,aAAO,WAAW,MAAQ,WAAW,MAAQ,WAAW;AAAA,IAC1D,CAAC;AAAA,EAEL;AAAA,EAEA,OAAO,OAAO,QAAgB;AAC5B,QAAI;AACF,UAAI,YAAY,QAAQ,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,MAAM;AACtD,aAAO;AAAA,IACT,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,UAAU;AACR,QAAI,KAAK,YAAY,GAAG;AACtB,aAAO;AAAA,IACT;AACA,QAAI,CAAC,KAAK,SAAS;AACjB,aAAO;AAAA,IACT;AACA,UAAM,SAAS,iBAAgB,mBAAmB,KAAK,OAAO;AAC9D,WAAO,UAAU,QAAQ,WAAW,KAAK;AAAA,EAC3C;AAAA,EAEA,kBAAkB,mBAA4B;AAC5C,WAAO,KAAK,QAAQ,MAAM,KAAK,kBAAkB,KAAM,KAAK,kBAAkB,KAAK;AAAA,EACrF;AAAA,EAEA,YAAY;AACV,QAAI,CAAC,KAAK,QAAQ,GAAG;AACnB,YAAM,IAAI,MAAM,4BAA4B,KAAK,UAAU,IAAI,CAAC,EAAE;AAAA,IACpE;AACA,UAAM,gBAAgB,OAAO,OAAO,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,KAAK,iBAAiB,CAAC,CAAC;AACxF,UAAM,gBAAgB,OAAO,MAAM,CAAC;AACpC,UAAM,oBAAoB,OAAO,MAAM,EAAE;AACzC,UAAM,gBAAgB,OAAO,MAAM,CAAC;AACpC,UAAM,cAAc,OAAO,MAAM,CAAC;AAClC,gBAAY,WAAW,CAAC;AAExB,UAAM,gBAAgB,OAAO,MAAM,CAAC;AAIpC,UAAM,gBAAgB,OAAO,KAAK,KAAK,OAAQ;AAI/C,kBAAc,WAAW,KAAK,aAAc;AAE5C,UAAM,UAAU,KAAK,cAAc,SAAS;AAC5C,kBAAc,cAAc,cAAc,MAAM;AAEhD,WAAO,OAAO,OAAO;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAGA,eAAsB,aAAa,WAAsB,gBAA4C;AACnG,QAAM,QAAQ,MAAM,KAAK,WAAW,gBAAgB,gBAAgB,cAAc;AAClF,SAAO,IAAI,UAAU,KAAK;AAC5B;AAGA,eAAsB,gBACpB,WACA,aACA,gBACiB;AACjB,QAAM,QAAQ,OAAO,MAAM,CAAC;AAC5B,QAAM,WAAW,GAAG,CAAC;AAErB,QAAM,UAAU,uBAAuB,WAAW,IAC9C,YAAY,QAAQ,UAAU,IAC9B,YAAY,iBAAiB;AACjC,QAAM,OAAO,OAAO,OAAO,CAAC,OAAO,gBAAgB,OAAO,CAAC;AAE3D,SAAO,MAAM,KAAK,WAAW,kBAAkB,YAAY,IAAI;AACjE;AAGA,eAAsBC,aAAY,WAAsB,SAAiB,gBAAyC;AAChH,QAAM,QAAQ,OAAO,MAAM,CAAC;AAC5B,QAAM,WAAW,GAAG,CAAC;AAErB,QAAM,OAAO,OAAO,OAAO,CAAC,OAAO,gBAAgB,OAAO,CAAC;AAE3D,SAAO,MAAM,KAAK,WAAW,2BAA2B,YAAY,IAAI;AAC1E;AAGA,eAAsB,oBAAoB,WAA0C;AAClF,QAAM,CAAC,qBAAqB,mBAAmB,OAAO,OAAO,KAAK,IAAI,MAAM;AAAA,IAC1E;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,MAAM,CAAC;AAAA,EAChB;AACA,SAAO;AAAA,IACL,qBAAqB,QAAQ,mBAAmB;AAAA,IAChD;AAAA,IACA,SAAS,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK;AAAA,EACrC;AACF;AAaA,eAAe,KAAK,WAAsB,aAAqB,IAAY,MAA+B;AACxG,MAAI,KAAK;AACT,MAAI,SAAS;AAEb,MAAI,KAAK,SAAS,aAAa;AAC7B,WAAO,KAAK,SAAS,SAAS,aAAa;AACzC,YAAMC,UAAS,KAAK,MAAM,QAAQ,SAAS,WAAW;AACtD,YAAMC,YAAW,MAAM,UAAU,KAAK,YAAY,aAAa,IAAI,KAAK,SAASD,OAAM;AAEvF,UAAIC,UAAS,WAAW,EAAG,OAAM,IAAI,qBAAqB,YAAY,cAAc;AAEpF,YAAM;AACN,gBAAU;AAAA,IACZ;AAAA,EACF;AAEA,QAAM,SAAS,KAAK,MAAM,MAAM;AAChC,QAAM,WAAW,MAAM,UAAU,KAAK,YAAY,aAAa,IAAI,IAAI,MAAM;AAE7E,SAAO,SAAS,MAAM,GAAG,SAAS,SAAS,CAAC;AAC9C;;;AFxMO,IAAM,mBAAmB;AAEzB,IAAM,sBAAN,cAAkC,wBAAwB;AAAA,EAC/D,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OACE;AAAA,EACF,+BAAgE,oBAAI,IAAI,CAAC,UAAU,CAAC,CAAC;AAAA,EAE7E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cACN,OAAO,WAAW,eAClB,OAAO,aAAa,eACpB,OAAO,cAAc,eACrB,CAAE,UAAkB,MAChB,iBAAiB,cACjB,iBAAiB;AAAA,EAEvB,YAAY,SAAoC,CAAC,GAAG;AAClD,UAAM;AACN,SAAK,kBAAkB,OAAO,kBAAkB,kBAAkB,GAAG,CAAC;AACtE,SAAK,cAAc;AACnB,SAAK,aAAa;AAClB,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,IAAI,YAAY;AACd,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,aAAa;AACf,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,aAAa;AACf,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,UAAyB;AAC7B,QAAI;AACF,UAAI,KAAK,aAAa,KAAK,WAAY;AACvC,UAAI,KAAK,gBAAgB,iBAAiB,SAAU,OAAM,IAAI,oBAAoB;AAElF,WAAK,cAAc;AAEnB,UAAI;AACJ,UAAI;AACF,gCAAwB,MAAM,OAAO,+BAA+B,GAAG;AAAA,MACzE,SAAS,OAAY;AACnB,cAAM,IAAI,gBAAgB,OAAO,SAAS,KAAK;AAAA,MACjD;AAEA,UAAI;AACJ,UAAI;AACF,oBAAY,MAAM,qBAAqB,OAAO;AAAA,MAChD,SAAS,OAAY;AACnB,cAAM,IAAI,sBAAsB,OAAO,SAAS,KAAK;AAAA,MACvD;AAEA,UAAI;AACJ,UAAI;AACF,oBAAY,MAAM,aAAa,WAAW,KAAK,eAAe;AAAA,MAChE,SAAS,OAAY;AACnB,cAAM,IAAI,qBAAqB,OAAO,SAAS,KAAK;AAAA,MACtD;AAEA,gBAAU,GAAG,cAAc,KAAK,aAAa;AAE7C,WAAK,aAAa;AAClB,WAAK,aAAa;AAElB,WAAK,KAAK,WAAW,SAAS;AAAA,IAChC,SAAS,OAAY;AACnB,WAAK,KAAK,SAAS,KAAK;AACxB,YAAM;AAAA,IACR,UAAE;AACA,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,MAAM,aAA4B;AAChC,UAAM,YAAY,KAAK;AACvB,QAAI,WAAW;AACb,gBAAU,IAAI,cAAc,KAAK,aAAa;AAE9C,WAAK,aAAa;AAClB,WAAK,aAAa;AAElB,UAAI;AACF,cAAM,UAAU,MAAM;AAAA,MACxB,SAAS,OAAY;AACnB,aAAK,KAAK,SAAS,IAAI,yBAAyB,OAAO,SAAS,KAAK,CAAC;AAAA,MACxE;AAAA,IACF;AAEA,SAAK,KAAK,YAAY;AAAA,EACxB;AAAA,EAEA,MAAM,gBAA8D,aAA4B;AAC9F,QAAI;AACF,YAAM,YAAY,KAAK;AACvB,YAAM,YAAY,KAAK;AACvB,UAAI,CAAC,aAAa,CAAC,UAAW,OAAM,IAAI,wBAAwB;AAEhE,UAAI;AACF,cAAM,YAAY,MAAM,gBAAgB,WAAW,aAAa,KAAK,eAAe;AACpF,oBAAY,aAAa,WAAW,SAAS;AAAA,MAC/C,SAAS,OAAY;AACnB,cAAM,IAAI,2BAA2B,OAAO,SAAS,KAAK;AAAA,MAC5D;AAEA,aAAO;AAAA,IACT,SAAS,OAAY;AACnB,WAAK,KAAK,SAAS,KAAK;AACxB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,SAAiD;AACjE,QAAI;AACF,UAAI;AACF,cAAM,YAAY,KAAK;AACvB,cAAM,YAAY,KAAK;AACvB,YAAI,CAAC,aAAa,CAAC,UAAW,OAAM,IAAI,wBAAwB;AAEhE,cAAM,YAAY,MAAM,oBAAoB,SAAS;AACrD,cAAM,CAAC,OAAO,KAAK,IAAI,UAAU,QAAQ,MAAM,GAAG,EAAE,IAAI,MAAM;AAC9D,YAAI,QAAQ,KAAM,UAAU,KAAK,QAAQ,GAAI;AAC3C,gBAAM,IAAI,uBAAuB,sEAAsE;AAAA,QACzG;AAEA,cAAM,kBAAkB,IAAI,gBAAgB;AAAA,UAC1C,SAAS,OAAO,KAAK,QAAQ,MAAM;AAAA,UACnC,eAAe;AAAA,QACjB,CAAC;AACD,YAAI,CAAC,gBAAgB,kBAAkB,UAAU,mBAAmB,GAAG;AACrE,cAAI,CAAC,gBAAgB,QAAQ,GAAG;AAC9B,kBAAM,IAAI,uBAAuB,mCAAmC;AAAA,UACtE,WAAW,gBAAgB,kBAAkB,KAAK,CAAC,UAAU,qBAAqB;AAChF,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AAAA,UACF,WAAW,gBAAgB,kBAAkB,GAAG;AAC9C,kBAAM,IAAI,uBAAuB,oDAAoD;AAAA,UACvF,OAAO;AACL,kBAAM,IAAI,uBAAuB,mDAAmD;AAAA,UACtF;AAAA,QACF;AAEA,cAAM,YAAY,MAAMC,aAAY,WAAW,gBAAgB,UAAU,GAAG,KAAK,eAAe;AAChG,eAAO,EAAE,WAAW,IAAI,WAAW,SAAS,GAAG,eAAe,gBAAgB,UAAU,EAAE;AAAA,MAC5F,SAAS,OAAY;AACnB,cAAM,IAAI,uBAAuB,OAAO,SAAS,KAAK;AAAA,MACxD;AAAA,IACF,SAAS,OAAY;AACnB,WAAK,KAAK,SAAS,KAAK;AACxB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,gBAAgB,MAAM;AAC5B,UAAM,YAAY,KAAK;AACvB,QAAI,WAAW;AACb,gBAAU,IAAI,cAAc,KAAK,aAAa;AAE9C,WAAK,aAAa;AAClB,WAAK,aAAa;AAElB,WAAK,KAAK,SAAS,IAAI,wBAAwB,CAAC;AAChD,WAAK,KAAK,YAAY;AAAA,IACxB;AAAA,EACF;AACF;;;ADnEQ,SACE,OAAAC,MADF,QAAAC,aAAA;AAzIR,IAAM,WAAyB;AAAA,EAC7B,cAAc;AAAA,EACd,SAAS;AAAA,EACT,SAAS;AACX;AAEO,IAAMC,YAAW,IAAIC,cAAa;AAEzC,IAAM,gBAAgB;AAEf,IAAMC,eAAc,MAAM;AAC/B,SAAO,GAAG,aAAa,IAAI,SAAS,OAAO;AAC7C;AAEO,IAAM,YAAN,cAAwB,WAAyB;AAAA,EACtD,WAAyB;AACvB,WAAO;AAAA,EACT;AAAA,EACA,IAAI,cAAc;AAChB,WAAO,CAAC,CAAC,SAAS,SAAS;AAAA,EAC7B;AAAA,EACA,UAAgB;AACd,aAAS,cAAc,WAAW,IAAI;AAAA,EACxC;AAAA,EAEA,aAAa;AACX,aAAS,SAAS,WAAW;AAAA,EAC/B;AAAA,EAEA,MAAM,KAAK,SAAuC;AAChD,QAAI;AACF,YAAM,WAAW,SAAS;AAC1B,YAAM,iBAAiB,IAAI,YAAY,EAAE,OAAO,OAAO;AACvD,YAAM,SAAS,MAAM,SAAS,cAAc,cAAc;AAE1D,YAAM,EAAE,WAAW,cAAc,IAC/B,kBAAkB,aAAa,EAAE,WAAW,QAAQ,eAAe,GAAG,IAAK;AAC7E,aAAO;AAAA,QACL;AAAA,QACA,WAAW,KAAK,OAAO,SAAS;AAAA,QAChC,eAAe,yBAAyB,aAAa,KAAK,OAAO,aAAa,IAAI;AAAA,MACpF;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,KAAK;AACnB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,OAAO,WAAmB,UAAU,MAA4B;AAC9D,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAI;AACF,cAAM,eAAe,OAAO,SAAuC;AACjE,cAAI;AACF,iBAAK,YAAY,KAAK,WAAW,SAAS;AAC1C,iBAAK,UAAU,KAAK;AACpB,iBAAK,UAAU;AACf,gBAAI,cAAc;AAClB,gBAAI,SAAS;AACX,oBAAM,MAAM,mBAAmB,EAAE,WAAW,SAAS,KAAK,SAAS,KAAK,QAAS,CAAC;AAClF,4BAAc,eAAe,GAAG;AAAA,YAClC;AAEA,kBAAM,MAAM,MAAM,KAAK,KAAK,WAAW;AAEvC,oBAAQ,GAAG;AAAA,UACb,SAAS,OAAO;AACd,oBAAQ,MAAM,0BAA0B,KAAK;AAC7C,mBAAO,KAAK;AAAA,UACd;AAAA,QACF;AAEA,YAAI,KAAK,aAAa;AACpB,uBAAa,SAAS,OAAQ;AAC9B;AAAA,QACF;AACA,iBAAS;AACT,aAAK,QAAQ;AACb,cAAM,WAAWA,aAAY;AAC7B,QAAAF,UAAS,KAAK,UAAU,CAAC,SAAS;AAChC,kBAAQ,IAAI,uDAAuD,UAAU,IAAI;AACjF,uBAAa,IAAI;AAAA,QACnB,CAAC;AAAA,MACH,SAAS,OAAO;AACd,gBAAQ,MAAM,oBAAoB,KAAK;AACvC,eAAO,KAAK;AAAA,MACd;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAGO,IAAM,eAAe,MAAM;AAChC,QAAM,cAAc,eAAe;AACnC,QAAM,SAAS,UAAU;AAEzB,EAAAG,WAAU,MAAM;AACd,QAAI,OAAO,QAAQ;AACjB,UAAI,OAAO,WAAW;AACpB,cAAM,WAAWD,aAAY;AAC7B,QAAAF,UAAS,KAAK,UAAU,MAAM;AAAA,MAChC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,WAAS,eAAe;AACxB,WAAS,UAAU;AACnB,SAAO;AACT;AAEO,IAAM,iBAAiB,CAAC;AAAA,EAC7B;AAAA,EACA;AAAA,EACA,SAAAI;AACF,MAIM;AACJ,QAAM,WAAW,cAAc,UAAU,UAAU,cAAc;AAEjE,QAAM,iBAAiB;AAAA,IACrB,MAAM;AAAA,MACJ,IAAI,qBAAqB;AAAA,MACzB,IAAI,mBAAmB;AAAA,MACvB,IAAI,oBAAoB;AAAA,QACtB,gBAAgB,kBAAkB,CAAC;AAAA,MACrC,CAAC;AAAA,IACH;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,UAAU,YAAY,CAAC,UAAe;AAC1C,YAAQ,MAAM,KAAK;AAAA,EACrB,GAAG,CAAC,CAAC;AACL,SACE,gBAAAN,KAAC,sBAAmB,UAClB,0BAAAA,KAAC,kBAAe,SAASM,WAAUA,WAAU,gBAAgB,SAAkB,aAAW,MACxF,0BAAAL,MAAC,uBACC;AAAA,oBAAAD,KAAC,gBAAa;AAAA,IACb;AAAA,KACH,GACF,GACF;AAEJ;;;AItKA,SAAoB,aAAAO,kBAAiB;AACrC,SAAS,eAAe,gBAAgB;AACxC,SAAS,QAAQ,cAAc;AAC/B,SAAS,eAAe;AACxB,SAAS,WAAW,kBAAkB;AACtC,SAAS,WAAW,sBAAsB;AAC1C,OAAO;AACP,OAAOC,mBAAkB;AAsHrB,SAQE,OAAAC,MARF,QAAAC,aAAA;AA5GJ,IAAM,cAA+B;AAAA,EACnC,cAAc;AAAA,EACd,SAAS;AACX;AAEO,IAAMC,YAAW,IAAIC,cAAa;AAEzC,IAAM,mBAAmB;AAElB,IAAMC,eAAc,MAAM;AAC/B,SAAO,GAAG,gBAAgB,IAAI,YAAY,OAAO;AACnD;AAEO,IAAM,eAAN,cAA2B,WAA4B;AAAA,EAC5D,WAA4B;AAC1B,WAAO;AAAA,EACT;AAAA,EACA,IAAI,cAAc;AAChB,WAAO,CAAC,CAAC,YAAY,cAAc;AAAA,EACrC;AAAA,EACA,UAAgB;AACd,gBAAY,cAAc,QAAQ;AAAA,EACpC;AAAA,EAEA,aAAa;AACX,gBAAY,cAAc,WAAW;AAAA,EACvC;AAAA,EAEA,MAAM,KAAK,SAAuC;AAChD,QAAI;AACF,YAAM,WAAW,YAAY;AAC7B,UAAI,CAAC,SAAS,SAAS;AACrB,cAAM,IAAI,MAAM,6BAA6B;AAAA,MAC/C;AACA,YAAM,SAAS,MAAM,SAAS,gBAAgB,SAAS,SAAS,OAAO;AAEvE,WAAK,YAAY,QAAQ,SAAS;AAElC,aAAO;AAAA,QACL;AAAA,QACA,WAAW,QAAQ;AAAA,MACrB;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,KAAK;AACnB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,OAAO,WAAmB,UAAU,MAA4B;AAC9D,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAI;AACF,cAAM,eAAe,OAAO,SAAsC;AAChE,cAAI;AACF,iBAAK,UAAU,KAAK;AACpB,iBAAK,UAAU;AACf,gBAAI,cAAc;AAClB,gBAAI,SAAS;AACX,oBAAM,MAAM,mBAAmB,EAAE,WAAW,SAAS,KAAK,MAAM,UAAU,SAAS,KAAK,QAAS,CAAC;AAClG,4BAAc,eAAe,GAAG;AAAA,YAClC;AAEA,kBAAM,MAAM,MAAM,KAAK,KAAK,WAAW;AAEvC,oBAAQ,GAAG;AAAA,UACb,SAAS,OAAO;AACd,oBAAQ,MAAM,0BAA0B,KAAK;AAC7C,mBAAO,KAAK;AAAA,UACd;AAAA,QACF;AAEA,YAAI,KAAK,aAAa;AACpB,uBAAa,YAAY,YAAa;AACtC;AAAA,QACF;AACA,oBAAY;AACZ,aAAK,QAAQ;AACb,cAAM,WAAWA,aAAY;AAC7B,QAAAF,UAAS,KAAK,UAAU,CAAC,SAAS;AAChC,kBAAQ,IAAI,uDAAuD,UAAU,IAAI;AACjF,uBAAa,IAAI;AAAA,QACnB,CAAC;AAAA,MACH,SAAS,OAAO;AACd,gBAAQ,MAAM,oBAAoB,KAAK;AACvC,eAAO,KAAK;AAAA,MACd;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEO,IAAM,kBAAkB,CAAC,EAAE,YAAY,YAAY,MAA8B;AACtF,QAAM,eAAe,SAAS,SAAS;AAEvC,EAAAG,WAAU,MAAM;AACd,QAAI,aAAa,SAAS;AACxB,UAAI,aAAa,mBAAmB;AAClC,cAAM,WAAWD,aAAY;AAC7B,QAAAF,UAAS,KAAK,UAAU,YAAY;AAAA,MACtC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAEjB,cAAY,eAAe;AAC3B,SAAO;AACT;AAEO,IAAM,iBAAiB,CAAC,EAAE,UAAU,YAAY,YAAY,MAAmD;AACpH,QAAM,YAAY,OAAO,KAAK,CAAC,EAAE,WAAW,MAAM,eAAe,SAAS;AAC1E,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,YAAY,YAAY,CAAC,SAAS,IAAI;AAAA,MACtC,SAAS,CAAC,GAAG,SAAS,GAAG,gBAAgB,GAAG,UAAU;AAAA,MACtD,eAAe,CAAC;AAAA,MAChB,iBAAiB,EAAE,WAAW,CAAC,EAAE;AAAA,MACjC,aAAa;AAAA,MAEb;AAAA,wBAAAD,KAAC,mBAAgB,WAAsB;AAAA,QACtC;AAAA;AAAA;AAAA,EACH;AAEJ;;;ACzIA,OAAO;AACP,OAAOM,mBAAkB;AACzB,SAAoB,aAAAC,YAAW,gBAAgB;AAI/C;AAAA,EACE;AAAA,EACA;AAAA,EACA,kBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,sBAAsB;AA4G8D,gBAAAC,MAUvF,QAAAC,aAVuF;AAhG7F,IAAM,WAAyB;AAAA,EAC7B,cAAc;AAAA,EACd,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AACX;AAEO,IAAMC,YAAW,IAAIC,cAAa;AAEzC,IAAM,gBAAgB;AAEf,IAAMC,eAAc,MAAM;AAC/B,SAAO,GAAG,aAAa,IAAI,SAAS,OAAO;AAC7C;AAEO,IAAM,YAAN,cAAwB,WAAyB;AAAA,EACtD,WAAyB;AACvB,WAAO;AAAA,EACT;AAAA,EACA,IAAI,cAAuB;AACzB,WAAO,CAAC,CAAC,KAAK,SAAS,EAAE,QAAQ;AAAA,EACnC;AAAA,EAEA,UAAU;AACR,aAAS,cAAc,QAAQ,IAAI;AAAA,EACrC;AAAA,EAEA,aAAa;AACX,aAAS,QAAQ,eAAe,SAAS,qBAAqB,GAAG,WAAW;AAAA,EAC9E;AAAA,EACA,MAAM,KAAK,SAAuC;AAChD,UAAM,sBAAsB,SAAS,QAAQ,eAAe,SAAS,yBAAyB;AAC9F,UAAM,MAAM,MAAM,qBAAqB,oBAAoB;AAAA,MACzD,SAAS,IAAI,WAAW,OAAO,KAAK,OAAO,CAAC;AAAA,MAC5C,SAAS,SAAS;AAAA,IACpB,CAAC;AAED,WAAO;AAAA,MACL;AAAA,MACA,WAAW,IAAK;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,OAAO,WAAmB,UAAU,MAA4B;AAC9D,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,YAAM,eAAe,CAAC,SAA+C;AACnE,aAAK,YAAY,OAAO,KAAK,KAAM,SAAS,EAAE,SAAS,KAAK;AAC5D,aAAK,UAAU,MAAM;AACrB,aAAK,UAAU;AACf,YAAI,cAAc;AAClB,YAAI,SAAS;AACX,gBAAM,MAAM,mBAAmB,EAAE,WAAW,SAAS,KAAK,SAAS,SAAS,KAAK,QAAS,CAAC;AAC3F,wBAAc,eAAe,GAAG;AAAA,QAClC;AAEA,cAAM,MAAM,KAAK,KAAK,KAAK,UAAU,aAAa,MAAM,IAAI,CAAC;AAE7D,gBAAQ,GAAG;AAAA,MACb;AAEA,UAAI,KAAK,eAAe,SAAS,SAAS;AACxC,qBAAa,SAAS,OAAQ;AAC9B;AAAA,MACF;AACA,eAAS;AACT,WAAK,QAAQ;AACb,YAAM,WAAWA,aAAY;AAC7B,MAAAF,UAAS,KAAK,UAAU,CAAC,SAAS;AAChC,gBAAQ,IAAI,uDAAuD,UAAU,IAAI;AACjF,qBAAa,IAAI;AAAA,MACnB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;AAEO,IAAM,eAAe,MAAM;AAChC,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,UAAU,kBAAkB;AAClC,QAAM,SAAS,iBAAiB;AAEhC,EAAAG,WAAU,MAAM;AACd,QAAI,QAAQ;AACV,UAAI,OAAO,eAAe,SAAS;AACjC,cAAM,WAAWD,aAAY;AAC7B,QAAAF,UAAS,KAAK,UAAU,OAAO;AAAA,MACjC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,QAAQ,OAAO,CAAC;AAEpB,WAAS,eAAe;AAAA,IACtB,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACA,WAAS,UAAU;AACnB,WAAS,SAAS;AAElB,SAAO,gBAAAF,KAAC,gBAAa,MAAM,WAAW,cAAc,CAAC,SAAS,aAAa,IAAI,GAAG,SAAS,gBAAAA,KAAC,SAAI,GAAQ;AAC1G;AAEO,IAAM,cAAc,CAAC,EAAE,UAAU,QAAQ,MAA+D;AAC7G,QAAM,EAAE,cAAc,IAAI,oBAAoB;AAAA,IAC5C,SAAS,EAAE,KAAK,eAAe,SAAS,EAAE;AAAA,IAC1C,SAAS,EAAE,KAAK,eAAe,SAAS,EAAE;AAAA,EAC5C,CAAC;AACD,SACE,gBAAAA,KAAC,qBAAkB,UAAU,eAAe,SAC1C,0BAAAC,MAACF,iBAAA,EAAe,aAAW,MACzB;AAAA,oBAAAC,KAAC,gBAAa;AAAA,IACb;AAAA,KACH,GACF;AAEJ;;;ACpIA,SAAS,iBAAiB;AAEnB,IAAe,gBAAf,MAA6B;AAAA,EAClC,OAAe,YAA0F,CAAC;AAAA,EAC1G,OAAO,UACL,MACA,aAC8D;AAC9D,QAAI,CAAC,KAAK,UAAU,IAAI,GAAG;AACzB,UAAI;AACJ,cAAQ,MAAM;AAAA,QACZ,KAAK,UAAU;AACb,wBAAc;AACd;AAAA,QACF,KAAK,UAAU;AACb,wBAAc;AACd;AAAA,QACF,KAAK,UAAU;AACb,wBAAc;AACd;AAAA;AAAA;AAAA;AAAA,QAIF,KAAK,UAAU;AACb,wBAAc;AACd;AAAA,QAEF,KAAK,UAAU;AACb,wBAAc;AACd;AAAA,QACF;AACE,gBAAM,IAAI,MAAM,yBAAyB;AAAA,MAC7C;AAEA,UAAI,CAAC,aAAa;AAChB,cAAM,IAAI,MAAM,yBAAyB;AAAA,MAC3C;AACA,WAAK,UAAU,IAAI,IAAI,IAAI,YAAY,MAAM,WAAW;AAAA,IAC1D;AACA,WAAO,KAAK,UAAU,IAAI;AAAA,EAC5B;AACF;","names":["useEffect","getCustomNaNoId","EventEmitter","eventBus","getEventKey","wallets","jsx","jsxs","useEffect","eventBus","getEventKey","jsxs","jsx","useEffect","EventEmitter","Buffer","signMessage","buffer","response","signMessage","jsx","jsxs","eventBus","EventEmitter","getEventKey","useEffect","wallets","useEffect","EventEmitter","jsx","jsxs","eventBus","EventEmitter","getEventKey","useEffect","EventEmitter","useEffect","WalletProvider","jsx","jsxs","eventBus","EventEmitter","getEventKey","useEffect"]}
1
+ {"version":3,"sources":["../src/providers/evm/index.tsx","../src/utils/index.ts","../src/WalletBase.ts","../src/providers/evm/EvmWallet.ts","../src/providers/ton/index.tsx","../src/providers/ton/TonWallet.ts","../src/providers/solana/index.tsx","../src/utils/ledger/adapter.ts","../src/utils/ledger/polyfills/Buffer.ts","../src/utils/ledger/util.ts","../src/providers/cosmos/index.tsx","../src/providers/sui/index.tsx","../src/WalletFactory.tsx"],"sourcesContent":["import '@rainbow-me/rainbowkit/styles.css';\nimport { RainbowKitProvider, darkTheme, useConnectModal } from '@rainbow-me/rainbowkit';\nimport { ResolvedRegister, WagmiProvider, useAccount, useWalletClient } from 'wagmi';\nimport { ReactNode, useEffect } from 'react';\n\nimport { evmStore, getEventKey, eventBus } from './EvmWallet';\n\nexport { EvmWallet } from './EvmWallet';\n\nexport const EVMConnector = () => {\n const connectModal = useConnectModal();\n const walletClient = useWalletClient();\n const account = useAccount();\n\n evmStore.connectModal = connectModal;\n evmStore.walletClient = walletClient;\n evmStore.account = account;\n\n useEffect(() => {\n if (account.isConnected) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, account);\n }\n }, [account]);\n\n return null;\n};\n\nexport const EvmProvider = ({\n children,\n config,\n theme\n}: {\n children: ReactNode;\n config: ResolvedRegister['config'];\n theme?: any;\n}) => {\n evmStore.config = config;\n return (\n <WagmiProvider config={config}>\n <RainbowKitProvider\n locale=\"en-US\"\n theme={\n theme ||\n darkTheme({\n accentColor: 'var(--t-primary)',\n accentColorForeground: 'var(--t-button-primary-foreground)'\n })\n }\n >\n {children}\n <EVMConnector />\n </RainbowKitProvider>\n </WagmiProvider>\n );\n};\n","import { getCustomNaNoId } from '@sign-global/tokentable-core';\nimport { ISignInMessage } from '../types';\n\nexport function prepareSignMessage({\n chainId,\n address,\n statement\n}: {\n address: string;\n chainId: number | string;\n statement?: string;\n}): ISignInMessage {\n return {\n statement: statement || 'Welcome to EthSign',\n chainId: chainId,\n address: address,\n issuedAt: new Date().toISOString(),\n domain: window.location.host,\n uri: window.location.origin,\n version: '1',\n nonce: getCustomNaNoId()\n };\n}\n\nexport const get4361Message = ({\n domain,\n version,\n nonce,\n issuedAt,\n statement,\n chainId,\n uri,\n address\n}: ISignInMessage): string => {\n const header = `${domain} wants you to sign in with your Ethereum account:`;\n const uriField = `URI: ${uri}`;\n let prefix = [header, address].join('\\n');\n const versionField = `Version: ${version}`;\n\n // const addressField = `Address: ` + address;\n\n const chainField = `Chain ID: ` + chainId || '1';\n\n const nonceField = `Nonce: ${nonce}`;\n\n const suffixArray = [uriField, versionField, chainField, nonceField];\n\n suffixArray.push(`Issued At: ${issuedAt}`);\n\n const suffix = suffixArray.join('\\n');\n prefix = [prefix, statement].join('\\n\\n');\n if (statement) {\n prefix += '\\n';\n }\n return [prefix, suffix].join('\\n');\n};\n","import { ISignResult } from './types';\nimport { prepareSignMessage } from './utils';\n\nexport abstract class WalletBase<S> {\n type: string;\n provider: any;\n address?: string;\n publicKey?: string;\n chainId?: number | string;\n protocolTag?: string;\n authType: string;\n userAddress?: string;\n network?: string;\n\n constructor(type: string, userAddress?: string) {\n this.type = type;\n this.provider = null;\n this.address = '';\n this.chainId = 1;\n this.authType = '';\n this.userAddress = userAddress || '';\n // this.init();\n }\n\n // abstract init(): void;\n\n // abstract init(): void;\n protected get isConnected(): boolean {\n throw new Error('Not implemented');\n }\n\n abstract connect(_?: string): void;\n\n // common sign\n abstract sign(_: string, _1?: string): Promise<ISignResult>;\n\n // checkAddressValidity(): boolean {\n // console.log(this.userAddress, this.address);\n // if (!this.address) {\n // // 兼容ton的情况,ton只有sign之后才有地址\n // return true;\n // }\n // if (this.userAddress && this.address !== this.userAddress) {\n // console.error('Wallet address and user address do not match.');\n // globalVm.toggleAccountChangedModal(true);\n // return false;\n // }\n // return true;\n // }\n\n async safeSign(_: string, _1?: string): Promise<ISignResult> {\n // if (!this.checkAddressValidity()) {\n // throw new Error('Wallet address and user address do not match.');\n // }\n return this.sign(_, _1);\n }\n\n async signin(statement?: string): Promise<ISignResult> {\n const msgRes = prepareSignMessage({ statement, chainId: this.chainId!, address: this.address! });\n return this.sign(JSON.stringify(msgRes, null, ' '));\n }\n\n // for metamask sign of EIP-712\n signByEIP712(_: string): Promise<ISignResult> {\n throw new Error(`received message:${_},Method not implemented.`);\n }\n\n getSignEIP712Message(_: { chainId: number | string; info: string; hash: string }): string {\n throw new Error(`received message:${JSON.stringify(_)},Method not implemented.`);\n }\n\n getWallet(): {\n address?: string;\n isConnected: boolean;\n publicKey: string | undefined;\n type: string;\n network: string | undefined;\n } {\n // 获取钱包信息\n return {\n type: this.type,\n isConnected: this.isConnected,\n address: this.address,\n publicKey: this.publicKey,\n network: this.network\n };\n }\n\n abstract getStore(): S;\n\n // abstract decrypt(message: string, address: string): Promise<string>;\n}\n","import { useConnectModal } from '@rainbow-me/rainbowkit';\nimport { ResolvedRegister, useAccount, useWalletClient } from 'wagmi';\nimport { WalletBase } from '../../WalletBase';\nimport { disconnect, getAccount, signMessage } from 'wagmi/actions';\nimport { EventEmitter } from 'events';\nimport { ISignResult } from '../../types';\nimport { get4361Message, prepareSignMessage } from '../../utils';\n\nexport const eventBus = new EventEmitter();\n\nconst EVM_EVENT_KEY = 'evm_signin';\n\nexport interface EVMStoreType {\n account: ReturnType<typeof useAccount> | null;\n connectModal: ReturnType<typeof useConnectModal> | undefined;\n walletClient: ReturnType<typeof useWalletClient> | undefined;\n config: ResolvedRegister['config'] | undefined;\n counter: number;\n}\n\nexport const evmStore: EVMStoreType = {\n account: null,\n connectModal: undefined,\n walletClient: undefined,\n config: undefined,\n counter: 0\n};\n\nexport const getEventKey = () => {\n return `${EVM_EVENT_KEY}_${evmStore.counter}`;\n};\n\nexport class EvmWallet extends WalletBase<EVMStoreType> {\n get isConnected() {\n return !!(evmStore.account?.address && evmStore.account?.isConnected);\n }\n\n connect() {\n evmStore?.connectModal?.openConnectModal?.();\n }\n\n async disconnect() {\n await disconnect(evmStore.config!);\n }\n\n async sign(_message: string) {\n try {\n const sign = await signMessage(evmStore.config!, {\n message: _message\n });\n return {\n message: _message,\n signature: sign\n };\n } catch (error) {\n throw error;\n }\n }\n\n override async signin(statement: string, prepare = true): Promise<ISignResult> {\n return new Promise((resolve, reject) => {\n const signCallback = async (data: ReturnType<typeof useAccount>) => {\n try {\n this.address = data.address;\n this.chainId = data.chainId;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: data.chainId!, address: data.address! });\n fullMessage = get4361Message(msg);\n }\n\n const res = await this.sign(fullMessage);\n\n resolve(res);\n } catch (error) {\n reject(error);\n }\n };\n\n const account = getAccount(evmStore.config!);\n this.provider = evmStore.walletClient;\n\n if (this.isConnected) {\n signCallback(account);\n return;\n }\n\n evmStore.counter++;\n this.connect();\n const eventKey = getEventKey();\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n signCallback(data);\n });\n });\n }\n\n getStore(): EVMStoreType {\n return evmStore;\n }\n}\n","import { ReactNode, useEffect } from 'react';\nimport {\n TonConnectUIProvider,\n useTonConnectUI,\n useTonWallet,\n useTonConnectModal,\n TonConnectUIProviderProps\n} from '@tonconnect/ui-react';\n\nimport { tonStore, eventBus, getEventKey, TonWallet } from './TonWallet';\n\nexport { TonWallet };\n\nexport const TonConnector = () => {\n const wallet = useTonWallet();\n const [tonConnectUI] = useTonConnectUI();\n const connectModal = useTonConnectModal();\n\n tonStore.connectModal = connectModal;\n tonStore.walletClient = tonConnectUI;\n tonStore.account = wallet;\n\n useEffect(() => {\n if (wallet) {\n eventBus.emit(getEventKey(), wallet);\n }\n }, [wallet]);\n\n return null;\n};\n\nexport const TonProvider = ({ children, config }: { children: ReactNode; config: TonConnectUIProviderProps }) => {\n tonStore.config = config;\n\n return (\n <TonConnectUIProvider {...config}>\n {children}\n <TonConnector />\n </TonConnectUIProvider>\n );\n};\n","import {\n useTonConnectUI,\n useTonWallet,\n useTonConnectModal,\n WalletInfoRemote,\n TonConnectUIProviderProps\n} from '@tonconnect/ui-react';\nimport { WalletBase } from '../../WalletBase';\nimport { ISignResult } from '../../types';\nimport { getCustomNaNoId } from '@sign-global/tokentable-core';\nimport { hashSha256 } from '@ethsign/utils-web';\nimport { CHAIN, TonProofItemReplySuccess, toUserFriendlyAddress, Wallet } from '@tonconnect/ui';\nimport { EventEmitter } from 'events';\nimport { Cell } from 'ton-core';\n\nexport interface TonStoreType {\n account: ReturnType<typeof useTonWallet> | null;\n connectModal: ReturnType<typeof useTonConnectModal> | undefined;\n walletClient: ReturnType<typeof useTonConnectUI>[0] | undefined;\n config: TonConnectUIProviderProps | undefined;\n counter: number;\n}\n\nexport const tonStore: TonStoreType = {\n account: null,\n connectModal: undefined,\n walletClient: undefined,\n config: undefined,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nexport const getEventKey = () => {\n return `ton_sign_${tonStore.counter}`;\n};\n\nexport class TonWallet extends WalletBase<TonStoreType> {\n get isConnected() {\n return !!tonStore.account?.account;\n }\n\n connect() {\n tonStore?.connectModal?.open?.();\n }\n\n async disconnect() {\n await tonStore.walletClient?.disconnect();\n }\n\n private getPublicKey(stateInit: string): string {\n const state_init = Cell.fromBase64(stateInit);\n const bits = state_init.refs[1].bits;\n const pubKey = bits.toString().substring(16, 80).toLowerCase();\n return pubKey;\n }\n\n async sign(originMsg: string): Promise<ISignResult> {\n const message = await hashSha256(originMsg);\n const tonConnectUI = tonStore.walletClient as any;\n // const walletInfo = tonConnectUI?.wallet;\n const authType = '';\n // if (walletInfo?.jsBridgeKey && walletInfo?.openMethod !== 'qrcode') {\n // authType = walletInfo.jsBridgeKey;\n // }\n\n console.log(this.isConnected, tonConnectUI, 'connected');\n if (this.isConnected) {\n await tonConnectUI.disconnect();\n }\n tonStore.counter++;\n if (authType) {\n const wallets = await tonConnectUI.getWallets();\n\n const currentWallet = wallets.find((wallet: any) =>\n [wallet.name, wallet.appName].includes(authType)\n ) as WalletInfoRemote;\n\n const link = tonConnectUI.connector.connect(\n {\n bridgeUrl: currentWallet.bridgeUrl,\n universalLink: currentWallet.universalLink\n },\n {\n tonProof: message\n }\n );\n\n // tonspace在tg内部打开\n window.open(link);\n } else {\n console.log('first time, call setConnectRequestParameters');\n tonConnectUI.setConnectRequestParameters({\n state: 'ready',\n value: {\n tonProof: message // 不能有空格,特殊字符\n }\n });\n this.connect();\n }\n\n const connectedWallet: Wallet = await new Promise((resolve) => {\n const eventKey = getEventKey();\n console.log('start listen event key, key = %s', eventKey);\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n resolve(data);\n });\n });\n\n this.provider = tonStore.walletClient;\n const proof = (connectedWallet.connectItems?.tonProof as TonProofItemReplySuccess)?.proof;\n this.publicKey = connectedWallet.account.publicKey || this.getPublicKey(connectedWallet.account.walletStateInit); //使用walletStateInit,publicKey由后端计算\n this.address = toUserFriendlyAddress(connectedWallet.account.address);\n this.chainId = connectedWallet.account.chain;\n this.network = this.chainId === CHAIN.MAINNET ? 'TON_MAINNET' : 'TON_TESTNET';\n const fullMessage = JSON.stringify({\n timestamp: proof.timestamp,\n payload: proof.payload,\n domain: proof.domain\n });\n const signature = proof.signature;\n\n return {\n message: JSON.stringify({\n fullMessage,\n message: originMsg\n }),\n signature,\n tonProof: message\n };\n }\n\n override async signin(statement: string, prepare = true): Promise<ISignResult> {\n const fullMessage = prepare\n ? JSON.stringify(\n {\n statement: statement || 'Welcome to EthSign',\n issuedAt: new Date().toISOString(),\n nonce: getCustomNaNoId()\n },\n null,\n ' '\n )\n : statement;\n const signRes = await this.sign(fullMessage);\n return signRes;\n }\n\n getStore(): TonStoreType {\n return tonStore;\n }\n}\n","import { ReactNode, useCallback, useEffect, useMemo } from 'react';\nimport { WalletBase } from '../../WalletBase';\nimport { useWalletModal, WalletModalProvider } from '@solana/wallet-adapter-react-ui';\nimport '@solana/wallet-adapter-react-ui/styles.css';\nimport { ISignResult } from '../../types';\nimport { ConnectionProvider, useWallet, WalletProvider } from '@solana/wallet-adapter-react';\nimport { PhantomWalletAdapter, TrustWalletAdapter } from '@solana/wallet-adapter-wallets';\nimport { type Adapter } from '@solana/wallet-adapter-base';\n\nimport { Cluster } from '@solana/web3.js';\nimport bs58 from 'bs58';\nimport { get4361Message, prepareSignMessage } from '../../utils';\nimport EventEmitter from 'events';\nimport { clusterApiUrl } from '@sign-global/tokentable-core';\nimport { getDerivationPath, LedgerWalletAdapter } from '../../utils/ledger';\n\ninterface SolStoreType {\n connectModal: ReturnType<typeof useWalletModal> | null;\n account: ReturnType<typeof useWallet> | null;\n counter: number;\n}\n\nconst solStore: SolStoreType = {\n connectModal: null,\n account: null,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nconst SOL_EVENT_KEY = 'sol_signin';\n\nexport const getEventKey = () => {\n return `${SOL_EVENT_KEY}_${solStore.counter}`;\n};\n\nexport class SolWallet extends WalletBase<SolStoreType> {\n getStore(): SolStoreType {\n return solStore;\n }\n get isConnected() {\n return !!solStore.account?.connected;\n }\n connect(): void {\n solStore.connectModal?.setVisible(true);\n }\n\n disconnect() {\n solStore.account?.disconnect();\n }\n\n async sign(message: string): Promise<ISignResult> {\n try {\n const provider = solStore.account!;\n const encodedMessage = new TextEncoder().encode(message);\n const result = await provider.signMessage?.(encodedMessage);\n\n const { signature, signedMessage } =\n result instanceof Uint8Array ? { signature: result, signedMessage: '' } : (result as any);\n return {\n message,\n signature: bs58.encode(signature),\n signedMessage: signedMessage instanceof Uint8Array ? bs58.encode(signedMessage) : ''\n };\n } catch (error) {\n console.error(error);\n throw error;\n }\n }\n\n signin(statement: string, prepare = true): Promise<ISignResult> {\n return new Promise((resolve, reject) => {\n try {\n const signCallback = async (data: ReturnType<typeof useWallet>) => {\n try {\n this.publicKey = data.publicKey?.toString();\n this.address = this.publicKey;\n this.chainId = 1;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: '1', address: this.address! });\n fullMessage = get4361Message(msg);\n }\n\n const res = await this.sign(fullMessage);\n\n resolve(res);\n } catch (error) {\n console.error('Error in signCallback:', error);\n reject(error);\n }\n };\n\n if (this.isConnected) {\n signCallback(solStore.account!);\n return;\n }\n solStore.counter++;\n this.connect();\n const eventKey = getEventKey();\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n signCallback(data);\n });\n } catch (error) {\n console.error('Error in signin:', error);\n reject(error);\n }\n });\n }\n}\n\n//Solana connection process: Open the modal first, then manually call wallet connect\nexport const SolConnector = () => {\n const walletModal = useWalletModal();\n const wallet = useWallet();\n\n useEffect(() => {\n if (wallet.wallet) {\n if (wallet.connected) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, wallet);\n }\n }\n }, [wallet]);\n\n solStore.connectModal = walletModal;\n solStore.account = wallet;\n return null;\n};\n\nexport const SolanaProvider = ({\n children,\n cluster,\n wallets\n}: {\n children: ReactNode;\n cluster?: Cluster;\n wallets?: Adapter[];\n}) => {\n const endpoint = clusterApiUrl(cluster ? cluster : 'mainnet-beta');\n\n const defaultWallets = useMemo(\n () => [\n new PhantomWalletAdapter(),\n new TrustWalletAdapter(),\n new LedgerWalletAdapter({\n derivationPath: getDerivationPath(0)\n })\n ],\n []\n );\n\n const onError = useCallback((error: any) => {\n console.error(error);\n }, []);\n return (\n <ConnectionProvider endpoint={endpoint}>\n <WalletProvider wallets={wallets ? wallets : defaultWallets} onError={onError} autoConnect>\n <WalletModalProvider>\n <SolConnector />\n {children}\n </WalletModalProvider>\n </WalletProvider>\n </ConnectionProvider>\n );\n};\n","import type { default as Transport } from '@ledgerhq/hw-transport';\nimport type { default as TransportWebHID } from '@ledgerhq/hw-transport-webhid';\nimport {\n BaseSignerWalletAdapter,\n WalletConnectionError,\n WalletDisconnectedError,\n WalletDisconnectionError,\n WalletLoadError,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSignMessageError,\n WalletSignTransactionError,\n type WalletName\n} from '@solana/wallet-adapter-base';\nimport type { PublicKey, Transaction, TransactionVersion, VersionedTransaction } from '@solana/web3.js';\nimport './polyfills/index.js';\nimport {\n getAppConfiguration,\n getDerivationPath,\n getPublicKey,\n OffchainMessage,\n signMessage,\n signTransaction\n} from './util.js';\n\nexport interface SignMessageOutput {\n /**\n * Message bytes that were signed.\n * The wallet may prefix or otherwise modify the message before signing it.\n */\n readonly signedMessage: Uint8Array;\n\n /**\n * Message signature produced.\n * If the signature type is provided, the signature must be Ed25519.\n */\n readonly signature: Uint8Array;\n\n /**\n * Optional type of the message signature produced.\n * If not provided, the signature must be Ed25519.\n */\n readonly signatureType?: 'ed25519';\n}\n\nexport interface LedgerWalletAdapterConfig {\n derivationPath?: Buffer;\n}\n\nexport const LedgerWalletName = 'Ledger' as WalletName<'Ledger'>;\n\nexport class LedgerWalletAdapter extends BaseSignerWalletAdapter {\n name = LedgerWalletName;\n url = 'https://ledger.com';\n icon =\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzUgMzUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iI2ZmZiI+PHBhdGggZD0ibTIzLjU4OCAwaC0xNnYyMS41ODNoMjEuNnYtMTZhNS41ODUgNS41ODUgMCAwIDAgLTUuNi01LjU4M3oiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUuNzM5KSIvPjxwYXRoIGQ9Im04LjM0MiAwaC0yLjc1N2E1LjU4NSA1LjU4NSAwIDAgMCAtNS41ODUgNS41ODV2Mi43NTdoOC4zNDJ6Ii8+PHBhdGggZD0ibTAgNy41OWg4LjM0MnY4LjM0MmgtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDUuNzM5KSIvPjxwYXRoIGQ9Im0xNS4xOCAyMy40NTFoMi43NTdhNS41ODUgNS41ODUgMCAwIDAgNS41ODUtNS42di0yLjY3MWgtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMS40NzggMTEuNDc4KSIvPjxwYXRoIGQ9Im03LjU5IDE1LjE4aDguMzQydjguMzQyaC04LjM0MnoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUuNzM5IDExLjQ3OCkiLz48cGF0aCBkPSJtMCAxNS4xOHYyLjc1N2E1LjU4NSA1LjU4NSAwIDAgMCA1LjU4NSA1LjU4NWgyLjc1N3YtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDExLjQ3OCkiLz48L2c+PC9zdmc+';\n supportedTransactionVersions: ReadonlySet<TransactionVersion> = new Set(['legacy', 0]);\n\n private _derivationPath: Buffer;\n private _connecting: boolean;\n private _transport: Transport | null;\n private _publicKey: PublicKey | null;\n private _readyState: WalletReadyState =\n typeof window === 'undefined' ||\n typeof document === 'undefined' ||\n typeof navigator === 'undefined' ||\n !(navigator as any).hid\n ? WalletReadyState.Unsupported\n : WalletReadyState.Loadable;\n\n constructor(config: LedgerWalletAdapterConfig = {}) {\n super();\n this._derivationPath = config.derivationPath || getDerivationPath(0, 0);\n this._connecting = false;\n this._transport = null;\n this._publicKey = null;\n }\n\n get publicKey() {\n return this._publicKey;\n }\n\n get connecting() {\n return this._connecting;\n }\n\n get readyState() {\n return this._readyState;\n }\n\n async connect(): Promise<void> {\n try {\n if (this.connected || this.connecting) return;\n if (this._readyState !== WalletReadyState.Loadable) throw new WalletNotReadyError();\n\n this._connecting = true;\n\n let TransportWebHIDClass: typeof TransportWebHID;\n try {\n TransportWebHIDClass = (await import('@ledgerhq/hw-transport-webhid')).default;\n } catch (error: any) {\n throw new WalletLoadError(error?.message, error);\n }\n\n let transport: Transport;\n try {\n transport = await TransportWebHIDClass.create();\n } catch (error: any) {\n throw new WalletConnectionError(error?.message, error);\n }\n\n let publicKey: PublicKey;\n try {\n publicKey = await getPublicKey(transport, this._derivationPath);\n } catch (error: any) {\n throw new WalletPublicKeyError(error?.message, error);\n }\n\n transport.on('disconnect', this._disconnected);\n\n this._transport = transport;\n this._publicKey = publicKey;\n\n this.emit('connect', publicKey);\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n } finally {\n this._connecting = false;\n }\n }\n\n async disconnect(): Promise<void> {\n const transport = this._transport;\n if (transport) {\n transport.off('disconnect', this._disconnected);\n\n this._transport = null;\n this._publicKey = null;\n\n try {\n await transport.close();\n } catch (error: any) {\n this.emit('error', new WalletDisconnectionError(error?.message, error));\n }\n }\n\n this.emit('disconnect');\n }\n\n async signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T> {\n try {\n const transport = this._transport;\n const publicKey = this._publicKey;\n if (!transport || !publicKey) throw new WalletNotConnectedError();\n\n try {\n const signature = await signTransaction(transport, transaction, this._derivationPath);\n transaction.addSignature(publicKey, signature);\n } catch (error: any) {\n throw new WalletSignTransactionError(error?.message, error);\n }\n\n return transaction;\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n }\n }\n\n async signMessage(message: Uint8Array): Promise<SignMessageOutput> {\n try {\n try {\n const transport = this._transport;\n const publicKey = this._publicKey;\n if (!transport || !publicKey) throw new WalletNotConnectedError();\n\n const appConfig = await getAppConfiguration(transport);\n const [major, minor] = appConfig.version.split('.').map(Number);\n if (major < 1 || (major === 1 && minor < 8)) {\n throw new WalletSignMessageError('Signing off-chain messages requires Solana Ledger App 1.8.0 or later');\n }\n\n const offchainMessage = new OffchainMessage({\n message: Buffer.from(message.buffer),\n signerAddress: publicKey\n });\n if (!offchainMessage.isLedgerSupported(appConfig.blindSigningEnabled)) {\n if (!offchainMessage.isValid()) {\n throw new WalletSignMessageError('Message is not valid for signing.');\n } else if (offchainMessage.messageFormat === 1 && !appConfig.blindSigningEnabled) {\n throw new WalletSignMessageError(\n 'Message contains non-ASCII characters and requires blind signing to be enabled on your Ledger device.'\n );\n } else if (offchainMessage.messageFormat === 2) {\n throw new WalletSignMessageError('Message is too long to be signed on Ledger device.');\n } else {\n throw new WalletSignMessageError('Message format is not supported by Ledger device.');\n }\n }\n\n const signature = await signMessage(transport, offchainMessage.serialize(), this._derivationPath);\n return { signature: new Uint8Array(signature), signedMessage: offchainMessage.serialize() };\n } catch (error: any) {\n throw new WalletSignMessageError(error?.message, error);\n }\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n }\n }\n\n private _disconnected = () => {\n const transport = this._transport;\n if (transport) {\n transport.off('disconnect', this._disconnected);\n\n this._transport = null;\n this._publicKey = null;\n\n this.emit('error', new WalletDisconnectedError());\n this.emit('disconnect');\n }\n };\n}\n","import { Buffer } from 'buffer';\n\nif (typeof window !== 'undefined' && window.Buffer === undefined) {\n (window as any).Buffer = Buffer;\n}\n\nexport {};\n","import { StatusCodes, TransportStatusError, type default as Transport } from '@ledgerhq/hw-transport';\nimport { isVersionedTransaction } from '@solana/wallet-adapter-base';\nimport { PublicKey, type Transaction, type VersionedTransaction } from '@solana/web3.js';\nimport './polyfills/index.js';\n\nexport function getDerivationPath(account?: number, change?: number): Buffer {\n const length = account !== undefined ? (change === undefined ? 3 : 4) : 2;\n const derivationPath = Buffer.alloc(1 + length * 4);\n\n let offset = derivationPath.writeUInt8(length, 0);\n offset = derivationPath.writeUInt32BE(harden(44), offset); // Using BIP44\n offset = derivationPath.writeUInt32BE(harden(501), offset); // Solana's BIP44 path\n\n if (account !== undefined) {\n offset = derivationPath.writeUInt32BE(harden(account), offset);\n if (change !== undefined) {\n derivationPath.writeUInt32BE(harden(change), offset);\n }\n }\n\n return derivationPath;\n}\n\nconst BIP32_HARDENED_BIT = (1 << 31) >>> 0;\n\nfunction harden(n: number): number {\n return (n | BIP32_HARDENED_BIT) >>> 0;\n}\n\nconst INS_GET_VERSION = 0x04;\nconst INS_GET_PUBKEY = 0x05;\nconst INS_SIGN_MESSAGE = 0x06;\nconst INS_SIGN_MESSAGE_OFFCHAIN = 0x07;\n\nconst P1_NON_CONFIRM = 0x00;\nconst P1_CONFIRM = 0x01;\n\nconst P2_EXTEND = 0x01;\nconst P2_MORE = 0x02;\n\nconst MAX_PAYLOAD = 255;\n\nconst LEDGER_CLA = 0xe0;\n\n// Max off-chain message length supported by Ledger\nconst OFFCM_MAX_LEDGER_LEN = 1212;\n// Max length of version 0 off-chain message\nconst OFFCM_MAX_V0_LEN = 65515;\n\nexport class OffchainMessage {\n version: number;\n messageFormat: number | undefined;\n message: Buffer | undefined;\n signerAddress: PublicKey;\n\n /**\n * Constructs a new OffchainMessage\n * @param {version: number, messageFormat: number, message: string | Buffer} opts - Constructor parameters\n */\n constructor(opts: { version?: number; messageFormat?: number; message: Buffer; signerAddress: PublicKey }) {\n this.version = 0;\n this.messageFormat = undefined;\n this.message = undefined;\n this.signerAddress = opts.signerAddress;\n\n if (!opts) {\n return;\n }\n if (opts.version) {\n this.version = opts.version;\n }\n if (opts.messageFormat) {\n this.messageFormat = opts.messageFormat;\n }\n if (opts.message) {\n this.message = Buffer.from(opts.message);\n if (this.version === 0) {\n if (!this.messageFormat) {\n this.messageFormat = OffchainMessage.guessMessageFormat(this.message);\n }\n }\n }\n }\n\n static guessMessageFormat(message: Buffer) {\n if (Object.prototype.toString.call(message) !== '[object Uint8Array]') {\n return undefined;\n }\n if (message.length <= OFFCM_MAX_LEDGER_LEN) {\n if (OffchainMessage.isPrintableASCII(message)) {\n return 0;\n } else if (OffchainMessage.isUTF8(message)) {\n return 1;\n }\n } else if (message.length <= OFFCM_MAX_V0_LEN) {\n if (OffchainMessage.isUTF8(message)) {\n return 2;\n }\n }\n return undefined;\n }\n\n static isPrintableASCII(buffer: Buffer) {\n return (\n buffer &&\n buffer.every((element) => {\n return element == 0xa || (element >= 0x20 && element <= 0x7e);\n })\n );\n }\n\n static isUTF8(buffer: Buffer) {\n try {\n new TextDecoder('utf8', { fatal: true }).decode(buffer);\n return true;\n } catch {\n return false;\n }\n }\n\n isValid() {\n if (this.version !== 0) {\n return false;\n }\n if (!this.message) {\n return false;\n }\n const format = OffchainMessage.guessMessageFormat(this.message);\n return format != null && format === this.messageFormat;\n }\n\n isLedgerSupported(allowBlindSigning: boolean) {\n return this.isValid() && (this.messageFormat === 0 || (this.messageFormat === 1 && allowBlindSigning));\n }\n\n serialize() {\n if (!this.isValid()) {\n throw new Error(`Invalid OffchainMessage: ${JSON.stringify(this)}`);\n }\n const signingDomain = Buffer.concat([Buffer.from([255]), Buffer.from('solana offchain')]);\n const headerVersion = Buffer.alloc(1);\n const applicationDomain = Buffer.alloc(32);\n const messageFormat = Buffer.alloc(1);\n const signerCount = Buffer.alloc(1);\n signerCount.writeUInt8(1);\n\n const messageLength = Buffer.alloc(2);\n\n // isValid() checks message\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const messageBuffer = Buffer.from(this.message!);\n\n // isValid() checks messageFormat\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n messageFormat.writeUInt8(this.messageFormat!);\n\n const signers = this.signerAddress.toBuffer();\n messageLength.writeUInt16LE(messageBuffer.length);\n\n return Buffer.concat([\n signingDomain,\n headerVersion,\n applicationDomain,\n messageFormat,\n signerCount,\n signers,\n messageLength,\n messageBuffer\n ]);\n }\n}\n\n/** @internal */\nexport async function getPublicKey(transport: Transport, derivationPath: Buffer): Promise<PublicKey> {\n const bytes = await send(transport, INS_GET_PUBKEY, P1_NON_CONFIRM, derivationPath);\n return new PublicKey(bytes);\n}\n\n/** @internal */\nexport async function signTransaction(\n transport: Transport,\n transaction: Transaction | VersionedTransaction,\n derivationPath: Buffer\n): Promise<Buffer> {\n const paths = Buffer.alloc(1);\n paths.writeUInt8(1, 0);\n\n const message = isVersionedTransaction(transaction)\n ? transaction.message.serialize()\n : transaction.serializeMessage();\n const data = Buffer.concat([paths, derivationPath, message]);\n\n return await send(transport, INS_SIGN_MESSAGE, P1_CONFIRM, data);\n}\n\n/** @internal */\nexport async function signMessage(transport: Transport, message: Buffer, derivationPath: Buffer): Promise<Buffer> {\n const paths = Buffer.alloc(1);\n paths.writeUInt8(1, 0);\n\n const data = Buffer.concat([paths, derivationPath, message]);\n\n return await send(transport, INS_SIGN_MESSAGE_OFFCHAIN, P1_CONFIRM, data);\n}\n\n/** @internal */\nexport async function getAppConfiguration(transport: Transport): Promise<AppConfig> {\n const [blindSigningEnabled, pubKeyDisplayMode, major, minor, patch] = await send(\n transport,\n INS_GET_VERSION,\n P1_NON_CONFIRM,\n Buffer.alloc(0)\n );\n return {\n blindSigningEnabled: Boolean(blindSigningEnabled),\n pubKeyDisplayMode,\n version: `${major}.${minor}.${patch}`\n };\n}\n\nenum PubKeyDisplayMode {\n LONG,\n SHORT\n}\n\ntype AppConfig = {\n blindSigningEnabled: boolean;\n pubKeyDisplayMode: PubKeyDisplayMode;\n version: string;\n};\n\nasync function send(transport: Transport, instruction: number, p1: number, data: Buffer): Promise<Buffer> {\n let p2 = 0;\n let offset = 0;\n\n if (data.length > MAX_PAYLOAD) {\n while (data.length - offset > MAX_PAYLOAD) {\n const buffer = data.slice(offset, offset + MAX_PAYLOAD);\n const response = await transport.send(LEDGER_CLA, instruction, p1, p2 | P2_MORE, buffer);\n\n if (response.length !== 2) throw new TransportStatusError(StatusCodes.INCORRECT_DATA);\n\n p2 |= P2_EXTEND;\n offset += MAX_PAYLOAD;\n }\n }\n\n const buffer = data.slice(offset);\n const response = await transport.send(LEDGER_CLA, instruction, p1, p2, buffer);\n\n return response.slice(0, response.length - 2);\n}\n","import { ReactNode, useEffect } from 'react';\nimport { ChainProvider, useChain } from '@cosmos-kit/react';\nimport { chains, assets } from 'chain-registry';\nimport { wallets } from '@cosmos-kit/keplr';\nimport { wallets as okxWallets } from '@cosmos-kit/okxwallet-extension';\nimport { wallets as compassWallets } from '@cosmos-kit/compass-extension';\nimport '@interchain-ui/react/styles';\nimport EventEmitter from 'events';\nimport { WalletBase } from '../../WalletBase';\nimport { ISignResult } from '../../types';\nimport { get4361Message, prepareSignMessage } from '../../utils';\n\ninterface CosmosStoreType {\n chainContext: ReturnType<typeof useChain> | null;\n counter: number;\n}\n\nconst cosmosStore: CosmosStoreType = {\n chainContext: null,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nconst COSMOS_EVENT_KEY = 'cosmos_signin';\n\nexport const getEventKey = () => {\n return `${COSMOS_EVENT_KEY}_${cosmosStore.counter}`;\n};\n\nexport class CosmosWallet extends WalletBase<CosmosStoreType> {\n getStore(): CosmosStoreType {\n return cosmosStore;\n }\n get isConnected() {\n return !!cosmosStore.chainContext?.isWalletConnected;\n }\n connect(): void {\n cosmosStore.chainContext?.connect();\n }\n\n disconnect() {\n cosmosStore.chainContext?.disconnect();\n }\n\n async sign(message: string): Promise<ISignResult> {\n try {\n const provider = cosmosStore.chainContext!;\n if (!provider.address) {\n throw new Error('Cosmos wallet not connected');\n }\n const result = await provider.signArbitrary?.(provider.address, message);\n\n this.publicKey = result?.pub_key?.value;\n\n return {\n message,\n signature: result?.signature\n };\n } catch (error) {\n console.error(error);\n throw error;\n }\n }\n\n signin(statement: string, prepare = true): Promise<ISignResult> {\n return new Promise((resolve, reject) => {\n try {\n const signCallback = async (data: ReturnType<typeof useChain>) => {\n try {\n this.address = data.address;\n this.chainId = 1;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: data.chain.chain_id, address: this.address! });\n fullMessage = get4361Message(msg);\n }\n\n const res = await this.sign(fullMessage);\n\n resolve(res);\n } catch (error) {\n console.error('Error in signCallback:', error);\n reject(error);\n }\n };\n\n if (this.isConnected) {\n signCallback(cosmosStore.chainContext!);\n return;\n }\n cosmosStore.counter++;\n this.connect();\n const eventKey = getEventKey();\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n signCallback(data);\n });\n } catch (error) {\n console.error('Error in signin:', error);\n reject(error);\n }\n });\n }\n}\n\nexport const CosmosConnector = ({ chainName = 'cosmoshub' }: { chainName?: string }) => {\n const chainContext = useChain(chainName);\n\n useEffect(() => {\n if (chainContext.address) {\n if (chainContext.isWalletConnected) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, chainContext);\n }\n }\n }, [chainContext]);\n\n cosmosStore.chainContext = chainContext;\n return null;\n};\n\nexport const CosmosProvider = ({ children, chainName = 'cosmoshub' }: { children: ReactNode; chainName?: string }) => {\n const assetList = assets.find(({ chain_name }) => chain_name === chainName);\n return (\n <ChainProvider\n chains={chains} // supported chains\n assetLists={assetList ? [assetList] : undefined} // supported asset lists\n wallets={[...wallets, ...compassWallets, ...okxWallets]}\n signerOptions={{}}\n endpointOptions={{ endpoints: {} }}\n throwErrors={true}\n >\n <CosmosConnector chainName={chainName} />\n {children}\n </ChainProvider>\n );\n};\n","import EventEmitter from 'events';\nimport { CSSProperties, ReactNode, useEffect, useState } from 'react';\nimport { WalletBase } from '../../WalletBase';\nimport { ISignResult } from '../../types';\nimport { get4361Message, prepareSignMessage } from '../../utils';\nimport { createDAppKit, DAppKitProvider, useWalletConnection, UiWalletAccount } from '@mysten/dapp-kit-react';\nimport { ConnectModal } from '@mysten/dapp-kit-react/ui';\nimport { SuiGrpcClient } from '@mysten/sui/grpc';\nimport { getWallets, Wallet } from '@mysten/wallet-standard';\n\ntype SuiNetwork = 'testnet' | 'mainnet';\n\nconst createSuiDAppKit = () =>\n createDAppKit({\n networks: ['mainnet', 'testnet'] as SuiNetwork[],\n createClient: (network) => new SuiGrpcClient({ network, baseUrl: `https://fullnode.${network}.sui.io:443` })\n });\n\nlet dAppKitInstance: ReturnType<typeof createSuiDAppKit> | undefined;\n\n// 延迟创建:createDAppKit 会触发钱包发现与自动连接,只能在浏览器端执行\nconst getDAppKit = () => {\n if (!dAppKitInstance) {\n dAppKitInstance = createSuiDAppKit();\n }\n return dAppKitInstance;\n};\n\ninterface SuiStoreType {\n openConnectModal: (() => void) | null;\n account: UiWalletAccount | null;\n wallet: Wallet | null;\n counter: number;\n}\n\nconst suiStore: SuiStoreType = {\n openConnectModal: null,\n account: null,\n wallet: null,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nconst Sui_EVENT_KEY = 'sui_signin';\n\nexport const getEventKey = () => {\n return `${Sui_EVENT_KEY}_${suiStore.counter}`;\n};\n\nexport class SuiWallet extends WalletBase<SuiStoreType> {\n getStore(): SuiStoreType {\n return suiStore;\n }\n get isConnected(): boolean {\n return getDAppKit().stores.$connection.get().isConnected;\n }\n\n connect() {\n suiStore.openConnectModal?.();\n }\n\n disconnect() {\n getDAppKit().disconnectWallet();\n }\n async sign(message: string): Promise<ISignResult> {\n const res = await getDAppKit().signPersonalMessage({\n message: new Uint8Array(Buffer.from(message))\n });\n\n return {\n message: message,\n signature: res.signature\n };\n }\n\n signin(statement: string, prepare = true): Promise<ISignResult> {\n return new Promise((resolve) => {\n const signCallback = (data: UiWalletAccount) => {\n this.publicKey = Buffer.from(data.publicKey).toString('hex');\n this.address = data.address;\n this.chainId = 1;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: this.chainId, address: this.address! });\n fullMessage = get4361Message(msg);\n }\n\n const res = this.sign(JSON.stringify(fullMessage, null, ' '));\n\n resolve(res);\n };\n\n if (this.isConnected && suiStore.account) {\n signCallback(suiStore.account!);\n return;\n }\n suiStore.counter++;\n this.connect();\n const eventKey = getEventKey();\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n signCallback(data);\n });\n });\n }\n}\n\n// dapp-kit 组件把宿主的 --background 等同名变量当完整颜色读取,shadcn 主题存的是 HSL 通道值会让弹窗变透明,这里重置为组件默认主题\nconst dappKitThemeReset = Object.fromEntries(\n [\n 'background',\n 'foreground',\n 'primary',\n 'primary-foreground',\n 'secondary',\n 'secondary-foreground',\n 'border',\n 'accent',\n 'accent-foreground',\n 'muted',\n 'muted-foreground',\n 'popover',\n 'popover-foreground',\n 'destructive',\n 'positive',\n 'ring',\n 'input'\n ].map((name) => [`--${name}`, 'initial'])\n) as CSSProperties;\n\nexport const SuiConnector = () => {\n // ConnectModal 的 React 封装不转发 ref,用 key 重挂载来重新打开被用户关闭的弹窗\n const [modalKey, setModalKey] = useState(0);\n const { wallet, account, isConnected } = useWalletConnection({ dAppKit: getDAppKit() });\n\n useEffect(() => {\n if (isConnected && account) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, account);\n }\n }, [isConnected, account]);\n\n suiStore.openConnectModal = () => setModalKey((key) => key + 1);\n suiStore.account = account;\n // 还原 wallet-standard 的 Wallet 对象,供 core 的 walletClient 使用\n suiStore.wallet = wallet\n ? (getWallets()\n .get()\n .find((w) => w.name === wallet.name) ?? null)\n : null;\n\n return modalKey > 0 ? (\n <div style={dappKitThemeReset}>\n <ConnectModal key={modalKey} open />\n </div>\n ) : null;\n};\n\nexport const SuiProvider = ({ children, network }: { children: ReactNode; network: SuiNetwork }) => {\n const dAppKit = getDAppKit();\n\n useEffect(() => {\n dAppKit.switchNetwork(network);\n }, [dAppKit, network]);\n\n return (\n <DAppKitProvider dAppKit={dAppKit}>\n <SuiConnector />\n {children}\n </DAppKitProvider>\n );\n};\n","import { EvmWallet } from './providers/evm';\nimport { TonWallet } from './providers/ton';\nimport { SolWallet } from './providers/solana';\nimport { CosmosWallet } from './providers/cosmos';\nimport { SuiWallet } from './providers/sui';\n\nimport { ChainType } from '@sign-global/tokentable-core';\n\nexport abstract class WalletFactory {\n private static instances: Record<string, EvmWallet | TonWallet | SolWallet | CosmosWallet | SuiWallet> = {};\n static getWallet(\n type: ChainType,\n userAddress?: string\n ): EvmWallet | TonWallet | SolWallet | CosmosWallet | SuiWallet {\n if (!this.instances[type]) {\n let WalletClass;\n switch (type) {\n case ChainType.Evm:\n WalletClass = EvmWallet;\n break;\n case ChainType.Ton:\n WalletClass = TonWallet;\n break;\n case ChainType.Sui:\n WalletClass = SuiWallet;\n break;\n // case ChainType.Starknet:\n // WalletClass = StarknetWallet;\n // break;\n case ChainType.Solana:\n WalletClass = SolWallet;\n break;\n\n case ChainType.Cosmos:\n WalletClass = CosmosWallet;\n break;\n default:\n throw new Error('Unsupported wallet type');\n }\n\n if (!WalletClass) {\n throw new Error('Unsupported wallet type');\n }\n this.instances[type] = new WalletClass(type, userAddress);\n }\n return this.instances[type];\n }\n}\n"],"mappings":"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","names":["useEffect","getCustomNaNoId","EventEmitter","eventBus","getEventKey","wallets","jsx","jsxs","useEffect","eventBus","getEventKey","jsxs","jsx","useEffect","EventEmitter","Buffer","signMessage","buffer","response","signMessage","jsx","jsxs","eventBus","EventEmitter","getEventKey","useEffect","wallets","useEffect","EventEmitter","jsx","jsxs","eventBus","EventEmitter","getEventKey","useEffect","EventEmitter","useEffect","jsx","jsxs","eventBus","EventEmitter","getEventKey","useEffect"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sign-global/tokentable-wallets",
3
- "version": "1.6.2",
3
+ "version": "2.0.0",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.mjs",
6
6
  "types": "dist/index.d.ts",
@@ -12,7 +12,7 @@
12
12
  }
13
13
  },
14
14
  "dependencies": {
15
- "@sign-global/tokentable-core": "1.14.1"
15
+ "@sign-global/tokentable-core": "2.0.0"
16
16
  },
17
17
  "peerDependencies": {
18
18
  "@rainbow-me/rainbowkit": "^2.2.3",
@@ -28,8 +28,9 @@
28
28
  "@cosmjs/crypto": "^0.36.0",
29
29
  "chain-registry": "^1.69.340",
30
30
  "@interchain-ui/react": "^1.26.3",
31
- "@mysten/dapp-kit": "^0.16.3",
32
- "@mysten/sui": "^1.29.1",
31
+ "@mysten/dapp-kit-react": "^2.1.24",
32
+ "@mysten/sui": "^2.28.0",
33
+ "@mysten/wallet-standard": "^0.21.21",
33
34
  "react": "^18.2.0",
34
35
  "viem": "^2.39.3",
35
36
  "wagmi": "^2.13.0",