@kaspacom/swap-sdk 1.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.
@@ -0,0 +1,169 @@
1
+ import { BrowserProvider, JsonRpcProvider } from 'ethers';
2
+ export class WalletService {
3
+ constructor(config, injectedProvider) {
4
+ this.signer = null;
5
+ this.address = null;
6
+ this.config = config;
7
+ this.networkProvider = new JsonRpcProvider(config.rpcUrl, {
8
+ name: config.name,
9
+ chainId: config.chainId,
10
+ }, config.additionalJsonRpcApiProviderOptionsOptions);
11
+ this.injectedProvider = injectedProvider;
12
+ this.walletProvider = new BrowserProvider(this.injectedProvider);
13
+ // Auto-connect if wallet provider is provided
14
+ if (this.injectedProvider) {
15
+ this.connect(this.injectedProvider);
16
+ }
17
+ }
18
+ async connect(injectedProvider) {
19
+ if (injectedProvider) {
20
+ this.injectedProvider = injectedProvider;
21
+ this.walletProvider = new BrowserProvider(this.injectedProvider);
22
+ }
23
+ if (!this.injectedProvider) {
24
+ throw new Error('No Ethereum wallet detected. Please install MetaMask or another Ethereum wallet.');
25
+ }
26
+ try {
27
+ // Request account access
28
+ const accounts = await this.injectedProvider.request({
29
+ method: 'eth_requestAccounts'
30
+ });
31
+ if (accounts.length === 0) {
32
+ throw new Error('No accounts found');
33
+ }
34
+ this.address = accounts[0];
35
+ // Check if we're on the correct network
36
+ const chainId = await this.injectedProvider.request({
37
+ method: 'eth_chainId'
38
+ });
39
+ const currentChainId = parseInt(chainId, 16);
40
+ if (currentChainId !== this.config.chainId) {
41
+ // Try to switch to the correct network
42
+ try {
43
+ await this.injectedProvider.request({
44
+ method: 'wallet_switchEthereumChain',
45
+ params: [{ chainId: `0x${this.config.chainId.toString(16)}` }]
46
+ });
47
+ }
48
+ catch (switchError) {
49
+ // If the network doesn't exist, try to add it
50
+ if (switchError.code === 4902) {
51
+ await this.injectedProvider.request({
52
+ method: 'wallet_addEthereumChain',
53
+ params: [{
54
+ chainId: `0x${this.config.chainId.toString(16)}`,
55
+ chainName: this.config.name,
56
+ nativeCurrency: {
57
+ name: 'ETH',
58
+ symbol: 'ETH',
59
+ decimals: 18
60
+ },
61
+ rpcUrls: [this.config.rpcUrl],
62
+ blockExplorerUrls: this.config.blockExplorerUrl ? [this.config.blockExplorerUrl] : []
63
+ }]
64
+ });
65
+ }
66
+ else {
67
+ throw new Error(`Please switch to ${this.config.name} network`);
68
+ }
69
+ }
70
+ }
71
+ // Update injectedProvider and signer
72
+ this.signer = await this.walletProvider.getSigner();
73
+ // Emit the wallet address if callback is provided
74
+ if (this.onConnectWalletCallback) {
75
+ this.onConnectWalletCallback(this.address);
76
+ }
77
+ return this.address;
78
+ }
79
+ catch (error) {
80
+ if (error.code === 4001) {
81
+ throw new Error('User rejected wallet connection');
82
+ }
83
+ throw new Error(`Failed to connect wallet: ${error.message}`);
84
+ }
85
+ }
86
+ disconnect() {
87
+ this.address = null;
88
+ this.signer = null;
89
+ // networkProvider remains for read-only operations
90
+ if (this.onDisconnectWalletCallback) {
91
+ this.onDisconnectWalletCallback();
92
+ }
93
+ }
94
+ isConnected() {
95
+ return !!this.address && !!this.signer;
96
+ }
97
+ getAddress() {
98
+ return this.address;
99
+ }
100
+ getProvider() {
101
+ return this.walletProvider || this.networkProvider;
102
+ }
103
+ getSigner() {
104
+ return this.signer;
105
+ }
106
+ // Helper method to get current chain ID
107
+ async getCurrentChainId() {
108
+ if (!this.injectedProvider) {
109
+ throw new Error('No Ethereum wallet detected');
110
+ }
111
+ const chainId = await this.injectedProvider.request({
112
+ method: 'eth_chainId'
113
+ });
114
+ return parseInt(chainId, 16);
115
+ }
116
+ // Register a callback for wallet connected
117
+ onConnectWallet(cb) {
118
+ this.onConnectWalletCallback = cb;
119
+ }
120
+ // Register a callback for wallet disconnected
121
+ onDisconnectWallet(cb) {
122
+ this.onDisconnectWalletCallback = cb;
123
+ }
124
+ // Call the connect callback
125
+ emitConnectWallet(address) {
126
+ if (this.onConnectWalletCallback) {
127
+ this.onConnectWalletCallback(address);
128
+ }
129
+ }
130
+ // Call the disconnect callback
131
+ emitDisconnectWallet() {
132
+ if (this.onDisconnectWalletCallback) {
133
+ this.onDisconnectWalletCallback();
134
+ }
135
+ }
136
+ // Connect wallet and emit event with address
137
+ async connectWallet() {
138
+ if (this.injectedProvider) {
139
+ try {
140
+ const accounts = await this.injectedProvider.request({
141
+ method: 'eth_requestAccounts'
142
+ });
143
+ if (accounts.length > 0 && typeof accounts[0] === 'string') {
144
+ const address = accounts[0];
145
+ this.address = address;
146
+ this.emitConnectWallet(address);
147
+ return address;
148
+ }
149
+ else {
150
+ throw new Error('No accounts found');
151
+ }
152
+ }
153
+ catch (error) {
154
+ console.error('Failed to connect wallet:', error);
155
+ throw error;
156
+ }
157
+ }
158
+ else {
159
+ throw new Error('No Ethereum wallet detected. Please connect a wallet provider.');
160
+ }
161
+ }
162
+ // Disconnect wallet and emit event
163
+ disconnectWallet() {
164
+ this.address = null;
165
+ this.signer = null;
166
+ this.emitDisconnectWallet();
167
+ }
168
+ }
169
+ //# sourceMappingURL=wallet.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.service.js","sourceRoot":"","sources":["../../src/services/wallet.service.ts"],"names":[],"mappings":"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"}