@wangjinbao/wallet-connect 0.1.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.
Files changed (85) hide show
  1. package/README.md +187 -0
  2. package/dist/cjs/index.js +11 -0
  3. package/dist/cjs/index.js.map +1 -0
  4. package/dist/cjs/styles.css +3 -0
  5. package/dist/cjs/types/components/AccountModal.d.ts +6 -0
  6. package/dist/cjs/types/components/AccountModal.d.ts.map +1 -0
  7. package/dist/cjs/types/components/ChainSwitcher.d.ts +6 -0
  8. package/dist/cjs/types/components/ChainSwitcher.d.ts.map +1 -0
  9. package/dist/cjs/types/components/ConnectButton.d.ts +2 -0
  10. package/dist/cjs/types/components/ConnectButton.d.ts.map +1 -0
  11. package/dist/cjs/types/components/WalletModal.d.ts +6 -0
  12. package/dist/cjs/types/components/WalletModal.d.ts.map +1 -0
  13. package/dist/cjs/types/components/WalletProvider.d.ts +13 -0
  14. package/dist/cjs/types/components/WalletProvider.d.ts.map +1 -0
  15. package/dist/cjs/types/context/WalletContext.d.ts +7 -0
  16. package/dist/cjs/types/context/WalletContext.d.ts.map +1 -0
  17. package/dist/cjs/types/hooks/useWallet.d.ts +6 -0
  18. package/dist/cjs/types/hooks/useWallet.d.ts.map +1 -0
  19. package/dist/cjs/types/index.d.ts +9 -0
  20. package/dist/cjs/types/index.d.ts.map +1 -0
  21. package/dist/cjs/types/types/index.d.ts +2 -0
  22. package/dist/cjs/types/types/index.d.ts.map +1 -0
  23. package/dist/cjs/types/types/wallet.d.ts +89 -0
  24. package/dist/cjs/types/types/wallet.d.ts.map +1 -0
  25. package/dist/cjs/types/utils/chains.d.ts +26 -0
  26. package/dist/cjs/types/utils/chains.d.ts.map +1 -0
  27. package/dist/cjs/types/utils/errors.d.ts +30 -0
  28. package/dist/cjs/types/utils/errors.d.ts.map +1 -0
  29. package/dist/cjs/types/utils/format.d.ts +9 -0
  30. package/dist/cjs/types/utils/format.d.ts.map +1 -0
  31. package/dist/cjs/types/wallets/BaseWallet.d.ts +86 -0
  32. package/dist/cjs/types/wallets/BaseWallet.d.ts.map +1 -0
  33. package/dist/cjs/types/wallets/CoinbaseWallet.d.ts +16 -0
  34. package/dist/cjs/types/wallets/CoinbaseWallet.d.ts.map +1 -0
  35. package/dist/cjs/types/wallets/MetaMaskWallet.d.ts +16 -0
  36. package/dist/cjs/types/wallets/MetaMaskWallet.d.ts.map +1 -0
  37. package/dist/cjs/types/wallets/OKXWallet.d.ts +16 -0
  38. package/dist/cjs/types/wallets/OKXWallet.d.ts.map +1 -0
  39. package/dist/cjs/types/wallets/PhantomWallet.d.ts +20 -0
  40. package/dist/cjs/types/wallets/PhantomWallet.d.ts.map +1 -0
  41. package/dist/cjs/types/wallets/index.d.ts +15 -0
  42. package/dist/cjs/types/wallets/index.d.ts.map +1 -0
  43. package/dist/esm/index.js +11 -0
  44. package/dist/esm/index.js.map +1 -0
  45. package/dist/esm/styles.css +3 -0
  46. package/dist/esm/types/components/AccountModal.d.ts +6 -0
  47. package/dist/esm/types/components/AccountModal.d.ts.map +1 -0
  48. package/dist/esm/types/components/ChainSwitcher.d.ts +6 -0
  49. package/dist/esm/types/components/ChainSwitcher.d.ts.map +1 -0
  50. package/dist/esm/types/components/ConnectButton.d.ts +2 -0
  51. package/dist/esm/types/components/ConnectButton.d.ts.map +1 -0
  52. package/dist/esm/types/components/WalletModal.d.ts +6 -0
  53. package/dist/esm/types/components/WalletModal.d.ts.map +1 -0
  54. package/dist/esm/types/components/WalletProvider.d.ts +13 -0
  55. package/dist/esm/types/components/WalletProvider.d.ts.map +1 -0
  56. package/dist/esm/types/context/WalletContext.d.ts +7 -0
  57. package/dist/esm/types/context/WalletContext.d.ts.map +1 -0
  58. package/dist/esm/types/hooks/useWallet.d.ts +6 -0
  59. package/dist/esm/types/hooks/useWallet.d.ts.map +1 -0
  60. package/dist/esm/types/index.d.ts +9 -0
  61. package/dist/esm/types/index.d.ts.map +1 -0
  62. package/dist/esm/types/types/index.d.ts +2 -0
  63. package/dist/esm/types/types/index.d.ts.map +1 -0
  64. package/dist/esm/types/types/wallet.d.ts +89 -0
  65. package/dist/esm/types/types/wallet.d.ts.map +1 -0
  66. package/dist/esm/types/utils/chains.d.ts +26 -0
  67. package/dist/esm/types/utils/chains.d.ts.map +1 -0
  68. package/dist/esm/types/utils/errors.d.ts +30 -0
  69. package/dist/esm/types/utils/errors.d.ts.map +1 -0
  70. package/dist/esm/types/utils/format.d.ts +9 -0
  71. package/dist/esm/types/utils/format.d.ts.map +1 -0
  72. package/dist/esm/types/wallets/BaseWallet.d.ts +86 -0
  73. package/dist/esm/types/wallets/BaseWallet.d.ts.map +1 -0
  74. package/dist/esm/types/wallets/CoinbaseWallet.d.ts +16 -0
  75. package/dist/esm/types/wallets/CoinbaseWallet.d.ts.map +1 -0
  76. package/dist/esm/types/wallets/MetaMaskWallet.d.ts +16 -0
  77. package/dist/esm/types/wallets/MetaMaskWallet.d.ts.map +1 -0
  78. package/dist/esm/types/wallets/OKXWallet.d.ts +16 -0
  79. package/dist/esm/types/wallets/OKXWallet.d.ts.map +1 -0
  80. package/dist/esm/types/wallets/PhantomWallet.d.ts +20 -0
  81. package/dist/esm/types/wallets/PhantomWallet.d.ts.map +1 -0
  82. package/dist/esm/types/wallets/index.d.ts +15 -0
  83. package/dist/esm/types/wallets/index.d.ts.map +1 -0
  84. package/dist/types/index.d.ts +273 -0
  85. package/package.json +72 -0
@@ -0,0 +1,89 @@
1
+ /**
2
+ * 基于 EIP-1193 的以太坊提供者接口
3
+ */
4
+ export interface EthereumProvider {
5
+ request(args: RequestArguments): Promise<unknown>;
6
+ on(event: string, listener: (...args: unknown[]) => void): void;
7
+ removeListener(event: string, listener: (...args: unknown[]) => void): void;
8
+ isMetaMask?: boolean;
9
+ isOkxWallet?: boolean;
10
+ isCoinbaseWallet?: boolean;
11
+ isPhantom?: boolean;
12
+ }
13
+ /**
14
+ * JSON-RPC 调用请求参数
15
+ */
16
+ export interface RequestArguments {
17
+ method: string;
18
+ params?: unknown[] | Record<string, unknown>;
19
+ }
20
+ /**
21
+ * 链配置
22
+ */
23
+ export interface Chain {
24
+ chainId: string;
25
+ chainName: string;
26
+ nativeCurrency: {
27
+ name: string;
28
+ symbol: string;
29
+ decimals: number;
30
+ };
31
+ rpcUrls: string[];
32
+ blockExplorerUrls?: string[];
33
+ iconUrls?: string[];
34
+ }
35
+ /**
36
+ * 钱包信息
37
+ */
38
+ export interface WalletInfo {
39
+ id: string;
40
+ name: string;
41
+ icon?: string;
42
+ downloadUrl?: string;
43
+ }
44
+ /**
45
+ * 钱包连接状态
46
+ */
47
+ export interface WalletState {
48
+ isConnected: boolean;
49
+ account: string | null;
50
+ chainId: string | null;
51
+ balance: string | null;
52
+ wallet: WalletInfo | null;
53
+ }
54
+ /**
55
+ * 钱包事件类型
56
+ */
57
+ export type WalletEventType = "accountsChanged" | "chainChanged" | "connect" | "disconnect";
58
+ /**
59
+ * 事件监听器类型
60
+ */
61
+ export type WalletEventListener = (data: unknown) => void;
62
+ /**
63
+ * 钱包错误类型
64
+ */
65
+ export declare class WalletError extends Error {
66
+ code: number;
67
+ data?: unknown;
68
+ constructor(message: string, code: number, data?: unknown);
69
+ }
70
+ /**
71
+ * 钱包提供者上下文值
72
+ */
73
+ export interface WalletContextValue {
74
+ state: WalletState;
75
+ connect: (walletId: string) => Promise<void>;
76
+ disconnect: () => Promise<void>;
77
+ switchChain: (chainId: string) => Promise<void>;
78
+ availableWallets: WalletInfo[];
79
+ supportedChains: Chain[];
80
+ }
81
+ /**
82
+ * 钱包提供者配置
83
+ */
84
+ export interface WalletProviderConfig {
85
+ chains: Chain[];
86
+ autoConnect?: boolean;
87
+ appName?: string;
88
+ }
89
+ //# sourceMappingURL=wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/types/wallet.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IAChE,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IAC5E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,iBAAiB,GACjB,cAAc,GACd,SAAS,GACT,YAAY,CAAC;AAEjB;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;AAE1D;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;gBAEH,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO;CAM1D;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,gBAAgB,EAAE,UAAU,EAAE,CAAC;IAC/B,eAAe,EAAE,KAAK,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -0,0 +1,26 @@
1
+ import { Chain } from "../types";
2
+ /**
3
+ * 以太坊主网
4
+ */
5
+ export declare const mainnet: Chain;
6
+ /**
7
+ * Sepolia 测试网
8
+ */
9
+ export declare const sepolia: Chain;
10
+ /**
11
+ * 默认链列表
12
+ */
13
+ export declare const defaultChains: Chain[];
14
+ /**
15
+ * 根据 chainId 获取链配置
16
+ */
17
+ export declare function getChainById(chainId: string, chains: Chain[]): Chain | undefined;
18
+ /**
19
+ * 将 chainId 格式化为十六进制字符串
20
+ */
21
+ export declare function formatChainId(chainId: number | string): string;
22
+ /**
23
+ * 将 chainId 解析为数字
24
+ */
25
+ export declare function parseChainId(chainId: string): number;
26
+ //# sourceMappingURL=chains.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chains.d.ts","sourceRoot":"","sources":["../../../src/utils/chains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,KAAK,EAAuB,CAAC;AAEzD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,KAAK,EAAE,GACd,KAAK,GAAG,SAAS,CAInB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAQ9D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKpD"}
@@ -0,0 +1,30 @@
1
+ import { WalletError } from "../types";
2
+ /**
3
+ * 基于 EIP-1193 的错误代码
4
+ */
5
+ export declare const ErrorCode: {
6
+ readonly USER_REJECTED: 4001;
7
+ readonly UNAUTHORIZED: 4100;
8
+ readonly UNSUPPORTED_METHOD: 4200;
9
+ readonly DISCONNECTED: 4900;
10
+ readonly CHAIN_DISCONNECTED: 4901;
11
+ readonly UNRECOGNIZED_CHAIN: 4902;
12
+ readonly INVALID_PARAMS: -32602;
13
+ readonly INTERNAL_ERROR: -32603;
14
+ readonly PROVIDER_NOT_FOUND: -32000;
15
+ readonly WALLET_NOT_INSTALLED: -32001;
16
+ readonly ALREADY_CONNECTED: -32002;
17
+ };
18
+ /**
19
+ * 创建钱包错误
20
+ */
21
+ export declare function createWalletError(message: string, code: number, data?: unknown): WalletError;
22
+ /**
23
+ * 检查错误是否为用户拒绝
24
+ */
25
+ export declare function isUserRejectedError(error: unknown): boolean;
26
+ /**
27
+ * 解析提供者错误
28
+ */
29
+ export declare function parseProviderError(error: unknown): WalletError;
30
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;CAYZ,CAAC;AAEX;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,GACb,WAAW,CAEb;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAQ3D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAwB9D"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Format balance from hex/wei to formatted string
3
+ */
4
+ export declare function formatBalance(rawBalance: string | undefined): string;
5
+ /**
6
+ * Format address to short form 0x...1234
7
+ */
8
+ export declare function formatAddress(address: string | null | undefined): string;
9
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/utils/format.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAwBpE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAGxE"}
@@ -0,0 +1,86 @@
1
+ import { EthereumProvider, RequestArguments, Chain, WalletInfo, WalletEventListener } from "../types";
2
+ /**
3
+ * 钱包基类(抽象类)
4
+ * 所有钱包实现都应继承此类
5
+ */
6
+ export declare abstract class BaseWallet {
7
+ protected provider: EthereumProvider | null;
8
+ protected eventListeners: Map<string, Set<WalletEventListener>>;
9
+ /**
10
+ * 获取钱包信息
11
+ */
12
+ abstract getInfo(): WalletInfo;
13
+ /**
14
+ * 检查钱包是否安装
15
+ */
16
+ abstract isInstalled(): boolean;
17
+ /**
18
+ * 获取提供者实例
19
+ */
20
+ abstract getProvider(): EthereumProvider | null;
21
+ /**
22
+ * 连接钱包
23
+ */
24
+ connect(): Promise<string[]>;
25
+ /**
26
+ * 断开钱包连接
27
+ */
28
+ disconnect(): Promise<void>;
29
+ /**
30
+ * 获取当前账户
31
+ */
32
+ getAccounts(): Promise<string[]>;
33
+ /**
34
+ * 获取当前账户余额
35
+ */
36
+ getBalance(address: string): Promise<string>;
37
+ /**
38
+ * 获取当前链 ID
39
+ */
40
+ getChainId(): Promise<string>;
41
+ /**
42
+ * 切换到指定链
43
+ */
44
+ switchChain(chain: Chain): Promise<void>;
45
+ /**
46
+ * 添加事件监听器
47
+ */
48
+ on(event: string, listener: WalletEventListener): void;
49
+ /**
50
+ * 移除事件监听器
51
+ */
52
+ off(event: string, listener: WalletEventListener): void;
53
+ /**
54
+ * 发起 JSON-RPC 请求
55
+ */
56
+ protected request<T = unknown>(args: RequestArguments): Promise<T>;
57
+ /**
58
+ * 设置提供者事件监听
59
+ */
60
+ protected setupEventListeners(): void;
61
+ /**
62
+ * 清理资源和监听器
63
+ */
64
+ protected cleanup(): void;
65
+ /**
66
+ * 处理账户变更事件
67
+ */
68
+ protected handleAccountsChanged: (accounts: unknown) => void;
69
+ /**
70
+ * 处理链变更事件
71
+ */
72
+ protected handleChainChanged: (chainId: unknown) => void;
73
+ /**
74
+ * 处理断开连接事件
75
+ */
76
+ protected handleDisconnect: () => void;
77
+ /**
78
+ * 向所有监听器触发事件
79
+ */
80
+ protected emit(event: string, data: unknown): void;
81
+ /**
82
+ * 检查错误是否为未知链错误
83
+ */
84
+ protected isUnrecognizedChainError(error: unknown): boolean;
85
+ }
86
+ //# sourceMappingURL=BaseWallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseWallet.d.ts","sourceRoot":"","sources":["../../../src/wallets/BaseWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,EACL,UAAU,EACV,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAOlB;;;GAGG;AACH,8BAAsB,UAAU;IAC9B,SAAS,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IACnD,SAAS,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAa;IAE5E;;OAEG;IACH,QAAQ,CAAC,OAAO,IAAI,UAAU;IAE9B;;OAEG;IACH,QAAQ,CAAC,WAAW,IAAI,OAAO;IAE/B;;OAEG;IACH,QAAQ,CAAC,WAAW,IAAI,gBAAgB,GAAG,IAAI;IAE/C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAgClC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAgBtC;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBlD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAenC;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC9C;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAOtD;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAOvD;;OAEG;cACa,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC;IAaxE;;OAEG;IACH,SAAS,CAAC,mBAAmB,IAAI,IAAI;IAQrC;;OAEG;IACH,SAAS,CAAC,OAAO,IAAI,IAAI;IAazB;;OAEG;IACH,SAAS,CAAC,qBAAqB,aAAc,OAAO,KAAG,IAAI,CAEzD;IAEF;;OAEG;IACH,SAAS,CAAC,kBAAkB,YAAa,OAAO,KAAG,IAAI,CAErD;IAEF;;OAEG;IACH,SAAS,CAAC,gBAAgB,QAAO,IAAI,CAGnC;IAEF;;OAEG;IACH,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAalD;;OAEG;IACH,SAAS,CAAC,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;CAM5D"}
@@ -0,0 +1,16 @@
1
+ import { BaseWallet } from "./BaseWallet";
2
+ import { EthereumProvider, WalletInfo } from "../types";
3
+ declare global {
4
+ interface Window {
5
+ coinbaseWalletExtension?: EthereumProvider;
6
+ }
7
+ }
8
+ /**
9
+ * Coinbase 钱包实现
10
+ */
11
+ export declare class CoinbaseWallet extends BaseWallet {
12
+ getInfo(): WalletInfo;
13
+ isInstalled(): boolean;
14
+ getProvider(): EthereumProvider | null;
15
+ }
16
+ //# sourceMappingURL=CoinbaseWallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoinbaseWallet.d.ts","sourceRoot":"","sources":["../../../src/wallets/CoinbaseWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAExD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,uBAAuB,CAAC,EAAE,gBAAgB,CAAC;KAC5C;CACF;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,UAAU;IAC5C,OAAO,IAAI,UAAU;IAQrB,WAAW,IAAI,OAAO;IAKtB,WAAW,IAAI,gBAAgB,GAAG,IAAI;CAIvC"}
@@ -0,0 +1,16 @@
1
+ import { BaseWallet } from "./BaseWallet";
2
+ import { EthereumProvider, WalletInfo } from "../types";
3
+ declare global {
4
+ interface Window {
5
+ ethereum?: EthereumProvider;
6
+ }
7
+ }
8
+ /**
9
+ * MetaMask 钱包实现
10
+ */
11
+ export declare class MetaMaskWallet extends BaseWallet {
12
+ getInfo(): WalletInfo;
13
+ isInstalled(): boolean;
14
+ getProvider(): EthereumProvider | null;
15
+ }
16
+ //# sourceMappingURL=MetaMaskWallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetaMaskWallet.d.ts","sourceRoot":"","sources":["../../../src/wallets/MetaMaskWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAExD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,QAAQ,CAAC,EAAE,gBAAgB,CAAC;KAC7B;CACF;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,UAAU;IAC5C,OAAO,IAAI,UAAU;IAQrB,WAAW,IAAI,OAAO;IAKtB,WAAW,IAAI,gBAAgB,GAAG,IAAI;CAWvC"}
@@ -0,0 +1,16 @@
1
+ import { BaseWallet } from "./BaseWallet";
2
+ import { EthereumProvider, WalletInfo } from "../types";
3
+ declare global {
4
+ interface Window {
5
+ okxwallet?: EthereumProvider;
6
+ }
7
+ }
8
+ /**
9
+ * OKX 钱包实现
10
+ */
11
+ export declare class OKXWallet extends BaseWallet {
12
+ getInfo(): WalletInfo;
13
+ isInstalled(): boolean;
14
+ getProvider(): EthereumProvider | null;
15
+ }
16
+ //# sourceMappingURL=OKXWallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OKXWallet.d.ts","sourceRoot":"","sources":["../../../src/wallets/OKXWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAExD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,SAAS,CAAC,EAAE,gBAAgB,CAAC;KAC9B;CACF;AAED;;GAEG;AACH,qBAAa,SAAU,SAAQ,UAAU;IACvC,OAAO,IAAI,UAAU;IAQrB,WAAW,IAAI,OAAO;IAKtB,WAAW,IAAI,gBAAgB,GAAG,IAAI;CAIvC"}
@@ -0,0 +1,20 @@
1
+ import { BaseWallet } from "./BaseWallet";
2
+ import { EthereumProvider, WalletInfo } from "../types";
3
+ declare global {
4
+ interface Window {
5
+ phantom?: {
6
+ ethereum?: EthereumProvider;
7
+ };
8
+ }
9
+ }
10
+ /**
11
+ * Phantom 钱包实现
12
+ * Phantom 支持 Solana 和 Ethereum
13
+ * 我们使用 ethereum 属性以兼容 EVM
14
+ */
15
+ export declare class PhantomWallet extends BaseWallet {
16
+ getInfo(): WalletInfo;
17
+ isInstalled(): boolean;
18
+ getProvider(): EthereumProvider | null;
19
+ }
20
+ //# sourceMappingURL=PhantomWallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PhantomWallet.d.ts","sourceRoot":"","sources":["../../../src/wallets/PhantomWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAExD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,OAAO,CAAC,EAAE;YACR,QAAQ,CAAC,EAAE,gBAAgB,CAAC;SAC7B,CAAC;KACH;CACF;AAED;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,UAAU;IAC3C,OAAO,IAAI,UAAU;IAQrB,WAAW,IAAI,OAAO;IAKtB,WAAW,IAAI,gBAAgB,GAAG,IAAI;CAIvC"}
@@ -0,0 +1,15 @@
1
+ export { BaseWallet } from "./BaseWallet";
2
+ export { MetaMaskWallet } from "./MetaMaskWallet";
3
+ export { OKXWallet } from "./OKXWallet";
4
+ export { PhantomWallet } from "./PhantomWallet";
5
+ export { CoinbaseWallet } from "./CoinbaseWallet";
6
+ import { BaseWallet } from "./BaseWallet";
7
+ /**
8
+ * 所有可用钱包的注册表
9
+ */
10
+ export declare const walletRegistry: BaseWallet[];
11
+ /**
12
+ * 根据 ID 获取钱包
13
+ */
14
+ export declare function getWalletById(id: string): BaseWallet | undefined;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/wallets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMlD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,UAAU,EAKtC,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAEhE"}
@@ -0,0 +1,273 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import React from 'react';
3
+
4
+ /**
5
+ * 基于 EIP-1193 的以太坊提供者接口
6
+ */
7
+ interface EthereumProvider {
8
+ request(args: RequestArguments): Promise<unknown>;
9
+ on(event: string, listener: (...args: unknown[]) => void): void;
10
+ removeListener(event: string, listener: (...args: unknown[]) => void): void;
11
+ isMetaMask?: boolean;
12
+ isOkxWallet?: boolean;
13
+ isCoinbaseWallet?: boolean;
14
+ isPhantom?: boolean;
15
+ }
16
+ /**
17
+ * JSON-RPC 调用请求参数
18
+ */
19
+ interface RequestArguments {
20
+ method: string;
21
+ params?: unknown[] | Record<string, unknown>;
22
+ }
23
+ /**
24
+ * 链配置
25
+ */
26
+ interface Chain {
27
+ chainId: string;
28
+ chainName: string;
29
+ nativeCurrency: {
30
+ name: string;
31
+ symbol: string;
32
+ decimals: number;
33
+ };
34
+ rpcUrls: string[];
35
+ blockExplorerUrls?: string[];
36
+ iconUrls?: string[];
37
+ }
38
+ /**
39
+ * 钱包信息
40
+ */
41
+ interface WalletInfo {
42
+ id: string;
43
+ name: string;
44
+ icon?: string;
45
+ downloadUrl?: string;
46
+ }
47
+ /**
48
+ * 钱包连接状态
49
+ */
50
+ interface WalletState {
51
+ isConnected: boolean;
52
+ account: string | null;
53
+ chainId: string | null;
54
+ balance: string | null;
55
+ wallet: WalletInfo | null;
56
+ }
57
+ /**
58
+ * 事件监听器类型
59
+ */
60
+ type WalletEventListener = (data: unknown) => void;
61
+ /**
62
+ * 钱包提供者上下文值
63
+ */
64
+ interface WalletContextValue {
65
+ state: WalletState;
66
+ connect: (walletId: string) => Promise<void>;
67
+ disconnect: () => Promise<void>;
68
+ switchChain: (chainId: string) => Promise<void>;
69
+ availableWallets: WalletInfo[];
70
+ supportedChains: Chain[];
71
+ }
72
+ /**
73
+ * 钱包提供者配置
74
+ */
75
+ interface WalletProviderConfig {
76
+ chains: Chain[];
77
+ autoConnect?: boolean;
78
+ appName?: string;
79
+ }
80
+
81
+ interface WalletProviderProps {
82
+ children: React.ReactNode;
83
+ config: WalletProviderConfig;
84
+ }
85
+ /**
86
+ * 钱包提供者组件
87
+ * 管理钱包连接状态并向子组件提供钱包上下文
88
+ */
89
+ declare function WalletProvider({ children, config }: WalletProviderProps): react_jsx_runtime.JSX.Element;
90
+
91
+ declare function ConnectButton(): react_jsx_runtime.JSX.Element;
92
+
93
+ /**
94
+ * 访问钱包上下文的 Hook
95
+ */
96
+ declare function useWallet(): WalletContextValue;
97
+
98
+ /**
99
+ * 钱包基类(抽象类)
100
+ * 所有钱包实现都应继承此类
101
+ */
102
+ declare abstract class BaseWallet {
103
+ protected provider: EthereumProvider | null;
104
+ protected eventListeners: Map<string, Set<WalletEventListener>>;
105
+ /**
106
+ * 获取钱包信息
107
+ */
108
+ abstract getInfo(): WalletInfo;
109
+ /**
110
+ * 检查钱包是否安装
111
+ */
112
+ abstract isInstalled(): boolean;
113
+ /**
114
+ * 获取提供者实例
115
+ */
116
+ abstract getProvider(): EthereumProvider | null;
117
+ /**
118
+ * 连接钱包
119
+ */
120
+ connect(): Promise<string[]>;
121
+ /**
122
+ * 断开钱包连接
123
+ */
124
+ disconnect(): Promise<void>;
125
+ /**
126
+ * 获取当前账户
127
+ */
128
+ getAccounts(): Promise<string[]>;
129
+ /**
130
+ * 获取当前账户余额
131
+ */
132
+ getBalance(address: string): Promise<string>;
133
+ /**
134
+ * 获取当前链 ID
135
+ */
136
+ getChainId(): Promise<string>;
137
+ /**
138
+ * 切换到指定链
139
+ */
140
+ switchChain(chain: Chain): Promise<void>;
141
+ /**
142
+ * 添加事件监听器
143
+ */
144
+ on(event: string, listener: WalletEventListener): void;
145
+ /**
146
+ * 移除事件监听器
147
+ */
148
+ off(event: string, listener: WalletEventListener): void;
149
+ /**
150
+ * 发起 JSON-RPC 请求
151
+ */
152
+ protected request<T = unknown>(args: RequestArguments): Promise<T>;
153
+ /**
154
+ * 设置提供者事件监听
155
+ */
156
+ protected setupEventListeners(): void;
157
+ /**
158
+ * 清理资源和监听器
159
+ */
160
+ protected cleanup(): void;
161
+ /**
162
+ * 处理账户变更事件
163
+ */
164
+ protected handleAccountsChanged: (accounts: unknown) => void;
165
+ /**
166
+ * 处理链变更事件
167
+ */
168
+ protected handleChainChanged: (chainId: unknown) => void;
169
+ /**
170
+ * 处理断开连接事件
171
+ */
172
+ protected handleDisconnect: () => void;
173
+ /**
174
+ * 向所有监听器触发事件
175
+ */
176
+ protected emit(event: string, data: unknown): void;
177
+ /**
178
+ * 检查错误是否为未知链错误
179
+ */
180
+ protected isUnrecognizedChainError(error: unknown): boolean;
181
+ }
182
+
183
+ declare global {
184
+ interface Window {
185
+ ethereum?: EthereumProvider;
186
+ }
187
+ }
188
+ /**
189
+ * MetaMask 钱包实现
190
+ */
191
+ declare class MetaMaskWallet extends BaseWallet {
192
+ getInfo(): WalletInfo;
193
+ isInstalled(): boolean;
194
+ getProvider(): EthereumProvider | null;
195
+ }
196
+
197
+ declare global {
198
+ interface Window {
199
+ okxwallet?: EthereumProvider;
200
+ }
201
+ }
202
+ /**
203
+ * OKX 钱包实现
204
+ */
205
+ declare class OKXWallet extends BaseWallet {
206
+ getInfo(): WalletInfo;
207
+ isInstalled(): boolean;
208
+ getProvider(): EthereumProvider | null;
209
+ }
210
+
211
+ declare global {
212
+ interface Window {
213
+ phantom?: {
214
+ ethereum?: EthereumProvider;
215
+ };
216
+ }
217
+ }
218
+ /**
219
+ * Phantom 钱包实现
220
+ * Phantom 支持 Solana 和 Ethereum
221
+ * 我们使用 ethereum 属性以兼容 EVM
222
+ */
223
+ declare class PhantomWallet extends BaseWallet {
224
+ getInfo(): WalletInfo;
225
+ isInstalled(): boolean;
226
+ getProvider(): EthereumProvider | null;
227
+ }
228
+
229
+ declare global {
230
+ interface Window {
231
+ coinbaseWalletExtension?: EthereumProvider;
232
+ }
233
+ }
234
+ /**
235
+ * Coinbase 钱包实现
236
+ */
237
+ declare class CoinbaseWallet extends BaseWallet {
238
+ getInfo(): WalletInfo;
239
+ isInstalled(): boolean;
240
+ getProvider(): EthereumProvider | null;
241
+ }
242
+
243
+ /**
244
+ * 以太坊主网
245
+ */
246
+ declare const mainnet: Chain;
247
+ /**
248
+ * Sepolia 测试网
249
+ */
250
+ declare const sepolia: Chain;
251
+ /**
252
+ * 默认链列表
253
+ */
254
+ declare const defaultChains: Chain[];
255
+
256
+ /**
257
+ * 基于 EIP-1193 的错误代码
258
+ */
259
+ declare const ErrorCode: {
260
+ readonly USER_REJECTED: 4001;
261
+ readonly UNAUTHORIZED: 4100;
262
+ readonly UNSUPPORTED_METHOD: 4200;
263
+ readonly DISCONNECTED: 4900;
264
+ readonly CHAIN_DISCONNECTED: 4901;
265
+ readonly UNRECOGNIZED_CHAIN: 4902;
266
+ readonly INVALID_PARAMS: -32602;
267
+ readonly INTERNAL_ERROR: -32603;
268
+ readonly PROVIDER_NOT_FOUND: -32000;
269
+ readonly WALLET_NOT_INSTALLED: -32001;
270
+ readonly ALREADY_CONNECTED: -32002;
271
+ };
272
+
273
+ export { BaseWallet, type Chain, CoinbaseWallet, ConnectButton, ErrorCode, type EthereumProvider, MetaMaskWallet, OKXWallet, PhantomWallet, type WalletContextValue, type WalletInfo, WalletProvider, type WalletProviderConfig, type WalletState, defaultChains, mainnet, sepolia, useWallet };