@meshconnect/uwc-injected-connector 0.2.0 → 0.2.1

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 (69) hide show
  1. package/dist/injected-connector.d.ts +5 -1
  2. package/dist/injected-connector.d.ts.map +1 -1
  3. package/dist/injected-connector.js +8 -2
  4. package/dist/injected-connector.js.map +1 -1
  5. package/dist/services/connection-manager.d.ts +2 -2
  6. package/dist/services/connection-manager.d.ts.map +1 -1
  7. package/dist/services/connection-manager.js +2 -2
  8. package/dist/services/connection-manager.js.map +1 -1
  9. package/dist/services/ethereum/ethereum-transaction-builder.d.ts +14 -0
  10. package/dist/services/ethereum/ethereum-transaction-builder.d.ts.map +1 -0
  11. package/dist/services/ethereum/ethereum-transaction-builder.js +60 -0
  12. package/dist/services/ethereum/ethereum-transaction-builder.js.map +1 -0
  13. package/dist/services/ethereum/ethereum-transaction-service.d.ts +26 -0
  14. package/dist/services/ethereum/ethereum-transaction-service.d.ts.map +1 -0
  15. package/dist/services/ethereum/ethereum-transaction-service.js +145 -0
  16. package/dist/services/ethereum/ethereum-transaction-service.js.map +1 -0
  17. package/dist/services/ethereum/ethereum-wallet-service.d.ts +59 -0
  18. package/dist/services/ethereum/ethereum-wallet-service.d.ts.map +1 -0
  19. package/dist/services/ethereum/ethereum-wallet-service.js +173 -0
  20. package/dist/services/ethereum/ethereum-wallet-service.js.map +1 -0
  21. package/dist/services/ethereum-transaction-service.d.ts +3 -0
  22. package/dist/services/ethereum-transaction-service.d.ts.map +1 -1
  23. package/dist/services/ethereum-transaction-service.js +83 -34
  24. package/dist/services/ethereum-transaction-service.js.map +1 -1
  25. package/dist/services/index.d.ts +3 -3
  26. package/dist/services/index.d.ts.map +1 -1
  27. package/dist/services/index.js +3 -3
  28. package/dist/services/index.js.map +1 -1
  29. package/dist/services/solana/solana-transaction-builder.d.ts +20 -0
  30. package/dist/services/solana/solana-transaction-builder.d.ts.map +1 -0
  31. package/dist/services/solana/solana-transaction-builder.js +112 -0
  32. package/dist/services/solana/solana-transaction-builder.js.map +1 -0
  33. package/dist/services/solana/solana-transaction-service.d.ts +27 -0
  34. package/dist/services/solana/solana-transaction-service.d.ts.map +1 -0
  35. package/dist/services/solana/solana-transaction-service.js +136 -0
  36. package/dist/services/solana/solana-transaction-service.js.map +1 -0
  37. package/dist/services/solana/solana-wallet-service.d.ts +55 -0
  38. package/dist/services/solana/solana-wallet-service.d.ts.map +1 -0
  39. package/dist/services/solana/solana-wallet-service.js +129 -0
  40. package/dist/services/solana/solana-wallet-service.js.map +1 -0
  41. package/dist/services/transaction-service.d.ts +1 -13
  42. package/dist/services/transaction-service.d.ts.map +1 -1
  43. package/dist/services/transaction-service.js +4 -42
  44. package/dist/services/transaction-service.js.map +1 -1
  45. package/package.json +4 -2
  46. package/src/injected-connector.ts +13 -3
  47. package/src/services/connection-manager.ts +2 -2
  48. package/src/services/ethereum/ethereum-transaction-builder.ts +82 -0
  49. package/src/services/ethereum/ethereum-transaction-service.ts +192 -0
  50. package/src/services/{ethereum-wallet-service.ts → ethereum/ethereum-wallet-service.ts} +56 -3
  51. package/src/services/index.ts +3 -3
  52. package/src/services/solana/solana-transaction-builder.ts +214 -0
  53. package/src/services/solana/solana-transaction-service.ts +190 -0
  54. package/src/services/{solana-wallet-service.ts → solana/solana-wallet-service.ts} +2 -2
  55. package/src/services/transaction-service.ts +9 -67
  56. package/dist/injected-connector.old.d.ts +0 -44
  57. package/dist/injected-connector.old.d.ts.map +0 -1
  58. package/dist/injected-connector.old.js +0 -491
  59. package/dist/injected-connector.old.js.map +0 -1
  60. package/dist/providers/evm-provider.d.ts +0 -18
  61. package/dist/providers/evm-provider.d.ts.map +0 -1
  62. package/dist/providers/evm-provider.js +0 -86
  63. package/dist/providers/evm-provider.js.map +0 -1
  64. package/dist/providers/solana-provider.d.ts +0 -22
  65. package/dist/providers/solana-provider.d.ts.map +0 -1
  66. package/dist/providers/solana-provider.js +0 -137
  67. package/dist/providers/solana-provider.js.map +0 -1
  68. package/src/services/ethereum-transaction-service.ts +0 -196
  69. package/src/services/solana-transaction-service.ts +0 -68
@@ -1,18 +0,0 @@
1
- /**
2
- * EVM provider management
3
- */
4
- import type { Network } from '@meshconnect/uwc-types';
5
- export interface EVMProviderManager {
6
- getProvider(eip155Name: string, injectedId?: string): any;
7
- switchNetwork(provider: any, network: Network): Promise<void>;
8
- }
9
- export declare class EVMProvider implements EVMProviderManager {
10
- private detectedEIP6963Wallets;
11
- initialize(): Promise<void>;
12
- getProvider(eip155Name: string, injectedId?: string): any;
13
- switchNetwork(provider: any, network: Network): Promise<void>;
14
- requestAccounts(provider: any): Promise<string[]>;
15
- getAccounts(provider: any): Promise<string[]>;
16
- getDetectedWallets(): any[];
17
- }
18
- //# sourceMappingURL=evm-provider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"evm-provider.d.ts","sourceRoot":"","sources":["../../src/providers/evm-provider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAGrD,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;IACzD,aAAa,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC9D;AAED,qBAAa,WAAY,YAAW,kBAAkB;IACpD,OAAO,CAAC,sBAAsB,CAAY;IAEpC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,GAAG;IAuBnD,aAAa,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA6C7D,eAAe,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAOjD,WAAW,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAOnD,kBAAkB,IAAI,GAAG,EAAE;CAG5B"}
@@ -1,86 +0,0 @@
1
- /**
2
- * EVM provider management
3
- */
4
- import { getAvailableWallets as getEIP6963Wallets } from '../eip6963-discovery';
5
- export class EVMProvider {
6
- detectedEIP6963Wallets = [];
7
- async initialize() {
8
- this.detectedEIP6963Wallets = await getEIP6963Wallets();
9
- }
10
- getProvider(eip155Name, injectedId) {
11
- // First, try to find the provider from EIP-6963 discovered wallets
12
- const detectedWallet = this.detectedEIP6963Wallets.find(wallet => wallet.name.toLowerCase() === eip155Name.toLowerCase());
13
- if (detectedWallet && detectedWallet.provider) {
14
- return detectedWallet.provider;
15
- }
16
- // Fall back to window.ethereum if no EIP-6963 provider found
17
- const ethereum = window.ethereum;
18
- if (ethereum) {
19
- // Check if the specific wallet is available via injectedId
20
- if (injectedId && !ethereum[injectedId]) {
21
- throw new Error(`Wallet ${eip155Name} is not available`);
22
- }
23
- return ethereum;
24
- }
25
- throw new Error(`No provider found for ${eip155Name}`);
26
- }
27
- async switchNetwork(provider, network) {
28
- // Get the current chain ID
29
- const currentChainId = await provider.request({
30
- method: 'eth_chainId'
31
- });
32
- // Parse the expected chain ID from the network ID (format: "eip155:1")
33
- const expectedChainId = network.id.split(':')[1];
34
- if (!expectedChainId) {
35
- throw new Error('Invalid network ID format');
36
- }
37
- const expectedChainIdHex = '0x' + parseInt(expectedChainId).toString(16);
38
- // Switch to the correct network if needed
39
- if (currentChainId !== expectedChainIdHex) {
40
- try {
41
- await provider.request({
42
- method: 'wallet_switchEthereumChain',
43
- params: [{ chainId: expectedChainIdHex }]
44
- });
45
- }
46
- catch (switchError) {
47
- // This error code indicates that the chain has not been added
48
- if (switchError.code === 4902) {
49
- // Try to add the network
50
- const networkParams = {
51
- chainId: expectedChainIdHex,
52
- chainName: network.name,
53
- nativeCurrency: network.nativeCurrency,
54
- rpcUrls: network.rpcUrls?.default.http || [],
55
- blockExplorerUrls: network.blockExplorers
56
- ? [network.blockExplorers.default.url]
57
- : []
58
- };
59
- await provider.request({
60
- method: 'wallet_addEthereumChain',
61
- params: [networkParams]
62
- });
63
- }
64
- else {
65
- throw switchError;
66
- }
67
- }
68
- }
69
- }
70
- async requestAccounts(provider) {
71
- const accounts = await provider.request({
72
- method: 'eth_requestAccounts'
73
- });
74
- return accounts || [];
75
- }
76
- async getAccounts(provider) {
77
- const accounts = await provider.request({
78
- method: 'eth_accounts'
79
- });
80
- return accounts || [];
81
- }
82
- getDetectedWallets() {
83
- return this.detectedEIP6963Wallets;
84
- }
85
- }
86
- //# sourceMappingURL=evm-provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"evm-provider.js","sourceRoot":"","sources":["../../src/providers/evm-provider.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- /**
2
- * Solana provider management
3
- */
4
- import type { SolanaMetadata } from '@meshconnect/uwc-types';
5
- export interface DetectedSolanaWallet {
6
- name: string;
7
- provider: any;
8
- injectedId?: string;
9
- }
10
- export interface SolanaProviderManager {
11
- getProvider(metadata?: SolanaMetadata): any;
12
- detectWallets(): DetectedSolanaWallet[];
13
- }
14
- export declare class SolanaProvider implements SolanaProviderManager {
15
- private detectedWallets;
16
- initialize(): void;
17
- getProvider(metadata?: SolanaMetadata): any;
18
- detectWallets(): DetectedSolanaWallet[];
19
- connect(provider: any): Promise<any>;
20
- getDetectedWallets(): DetectedSolanaWallet[];
21
- }
22
- //# sourceMappingURL=solana-provider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"solana-provider.d.ts","sourceRoot":"","sources":["../../src/providers/solana-provider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,GAAG,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,QAAQ,CAAC,EAAE,cAAc,GAAG,GAAG,CAAA;IAC3C,aAAa,IAAI,oBAAoB,EAAE,CAAA;CACxC;AAED,qBAAa,cAAe,YAAW,qBAAqB;IAC1D,OAAO,CAAC,eAAe,CAA6B;IAEpD,UAAU,IAAI,IAAI;IAIlB,WAAW,CAAC,QAAQ,CAAC,EAAE,cAAc,GAAG,GAAG;IAsE3C,aAAa,IAAI,oBAAoB,EAAE;IAuEjC,OAAO,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAW1C,kBAAkB,IAAI,oBAAoB,EAAE;CAG7C"}
@@ -1,137 +0,0 @@
1
- /**
2
- * Solana provider management
3
- */
4
- export class SolanaProvider {
5
- detectedWallets = [];
6
- initialize() {
7
- this.detectedWallets = this.detectWallets();
8
- }
9
- getProvider(metadata) {
10
- if (!metadata || !metadata.injectedId) {
11
- // Fallback to checking common Solana provider locations
12
- if (window.solana)
13
- return window.solana;
14
- if (window.phantom?.solana)
15
- return window.phantom.solana;
16
- if (window.solflare?.solana)
17
- return window.solflare.solana;
18
- return null;
19
- }
20
- const { injectedId, ignoredInjectedIds } = metadata;
21
- // Helper function to validate provider
22
- const isValidProvider = (provider) => {
23
- if (!provider)
24
- return false;
25
- // Check if provider has ignored IDs (meaning it's the wrong wallet)
26
- if (ignoredInjectedIds && ignoredInjectedIds.length > 0) {
27
- for (const ignoredId of ignoredInjectedIds) {
28
- if (provider[ignoredId] === true) {
29
- return false;
30
- }
31
- }
32
- }
33
- // Check if provider has the required injectedId property
34
- // For example, if injectedId is 'isPhantom', check provider.isPhantom === true
35
- if (injectedId.startsWith('is')) {
36
- return provider[injectedId] === true;
37
- }
38
- // For non-boolean identifiers, just check existence
39
- return !!provider[injectedId];
40
- };
41
- // Strategy 1: Check window[walletName].solana (e.g., window.phantom.solana)
42
- const walletName = injectedId.replace(/^is/, '').toLowerCase();
43
- const nestedProvider = window[walletName]?.solana;
44
- if (nestedProvider && isValidProvider(nestedProvider)) {
45
- return nestedProvider;
46
- }
47
- // Strategy 2: Check window[walletName] directly (e.g., window.solflare)
48
- const directProvider = window[walletName];
49
- if (directProvider && isValidProvider(directProvider)) {
50
- return directProvider;
51
- }
52
- // Strategy 3: Check window.solana with validation
53
- if (window.solana && isValidProvider(window.solana)) {
54
- return window.solana;
55
- }
56
- // Strategy 4: For wallets that might inject differently (e.g., window.trustwallet.solana)
57
- // Check various common patterns
58
- const commonPatterns = [
59
- window[`${walletName}wallet`]?.solana,
60
- window[`${walletName}Wallet`]?.solana,
61
- window[walletName.replace('wallet', '')]?.solana
62
- ];
63
- for (const provider of commonPatterns) {
64
- if (provider && isValidProvider(provider)) {
65
- return provider;
66
- }
67
- }
68
- return null;
69
- }
70
- detectWallets() {
71
- const wallets = [];
72
- // Check common Solana wallet locations and identify them
73
- const checkProvider = (provider, name, injectedId) => {
74
- if (provider && typeof provider.connect === 'function') {
75
- if (injectedId) {
76
- wallets.push({ name, provider, injectedId });
77
- }
78
- else {
79
- wallets.push({ name, provider });
80
- }
81
- }
82
- };
83
- // Check window.solana and identify the wallet type
84
- if (window.solana) {
85
- const provider = window.solana;
86
- let name = 'Solana Wallet';
87
- let injectedId;
88
- if (provider.isPhantom) {
89
- name = 'Phantom';
90
- injectedId = 'isPhantom';
91
- }
92
- else if (provider.isSolflare) {
93
- name = 'Solflare';
94
- injectedId = 'isSolflare';
95
- }
96
- else if (provider.isTrust || provider.isTrustWallet) {
97
- name = 'Trust Wallet';
98
- injectedId = provider.isTrust ? 'isTrust' : 'isTrustWallet';
99
- }
100
- else if (provider.isExodus) {
101
- name = 'Exodus';
102
- injectedId = 'isExodus';
103
- }
104
- checkProvider(provider, name, injectedId);
105
- }
106
- // Check nested providers
107
- if (window.phantom?.solana) {
108
- checkProvider(window.phantom.solana, 'Phantom', 'isPhantom');
109
- }
110
- if (window.solflare) {
111
- checkProvider(window.solflare, 'Solflare', 'isSolflare');
112
- }
113
- if (window.trustwallet?.solana) {
114
- checkProvider(window.trustwallet.solana, 'Trust Wallet', 'isTrust');
115
- }
116
- if (window.exodus?.solana) {
117
- checkProvider(window.exodus.solana, 'Exodus', 'isExodus');
118
- }
119
- // Remove duplicates based on provider reference
120
- const uniqueWallets = wallets.filter((wallet, index, self) => index === self.findIndex(w => w.provider === wallet.provider));
121
- return uniqueWallets;
122
- }
123
- async connect(provider) {
124
- if (!provider.isConnected) {
125
- const response = await provider.connect();
126
- if (!response || !response.publicKey) {
127
- throw new Error('Failed to connect to Solana wallet');
128
- }
129
- return response;
130
- }
131
- return { publicKey: provider.publicKey };
132
- }
133
- getDetectedWallets() {
134
- return this.detectedWallets;
135
- }
136
- }
137
- //# sourceMappingURL=solana-provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"solana-provider.js","sourceRoot":"","sources":["../../src/providers/solana-provider.ts"],"names":[],"mappings":"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"}
@@ -1,196 +0,0 @@
1
- import { ethers } from 'ethers'
2
- import type { EthereumProvider } from '../eip6963-discovery'
3
- import type {
4
- EVMGasConfig,
5
- EVMNativeTransferRequest,
6
- EVMContractCallRequest,
7
- EVMBatchTransactionRequest,
8
- EVMCapabilities,
9
- BatchTransactionResult
10
- } from '@meshconnect/uwc-types'
11
- import { parseError } from '../utils/error-utils'
12
-
13
- /**
14
- * Service for handling Ethereum/EVM transaction operations
15
- */
16
- export class EthereumTransactionService {
17
- /**
18
- * Send native token transfer (ETH, BNB, MATIC, etc.)
19
- */
20
- async sendNativeTransfer(
21
- provider: EthereumProvider,
22
- request: EVMNativeTransferRequest
23
- ): Promise<string> {
24
- try {
25
- // Get current chain ID
26
- const chainIdHex = await provider.request({
27
- method: 'eth_chainId'
28
- })
29
- const chainId = parseInt(chainIdHex, 16)
30
-
31
- // Create ethers provider and signer
32
- const ethersProvider = new ethers.BrowserProvider(provider)
33
- const signer = await ethersProvider.getSigner(request.from)
34
-
35
- // Verify network hasn't changed
36
- const network = await ethersProvider.getNetwork()
37
- if (Number(network.chainId) !== chainId) {
38
- throw new Error('Network changed during transaction setup')
39
- }
40
-
41
- // Build transaction
42
- const tx = await signer.sendTransaction({
43
- to: request.to,
44
- value: request.amount,
45
- ...this.formatGasConfig(request.gasConfig)
46
- })
47
-
48
- // Wait for confirmation
49
- const receipt = await tx.wait()
50
- return receipt ? receipt.hash : ''
51
- } catch (error) {
52
- parseError(error)
53
- }
54
- }
55
-
56
- /**
57
- * Send smart contract transaction (including ERC-20 transfers)
58
- */
59
- async sendContractCall(
60
- provider: EthereumProvider,
61
- request: EVMContractCallRequest
62
- ): Promise<string> {
63
- try {
64
- // Get current chain ID
65
- const chainIdHex = await provider.request({
66
- method: 'eth_chainId'
67
- })
68
- const chainId = parseInt(chainIdHex, 16)
69
-
70
- // Create ethers provider and signer
71
- const ethersProvider = new ethers.BrowserProvider(provider)
72
- const signer = await ethersProvider.getSigner(request.from)
73
-
74
- // Verify network hasn't changed
75
- const network = await ethersProvider.getNetwork()
76
- if (Number(network.chainId) !== chainId) {
77
- throw new Error('Network changed during transaction setup')
78
- }
79
-
80
- // Create contract instance
81
- const contract = new ethers.Contract(
82
- request.contractAddress,
83
- request.abi,
84
- signer
85
- )
86
-
87
- // Build transaction options
88
- const txOptions: ethers.Overrides = {
89
- ...this.formatGasConfig(request.gasConfig)
90
- }
91
-
92
- // Add value for payable functions
93
- if (request.value) {
94
- txOptions.value = request.value
95
- }
96
-
97
- // Call the contract function
98
- const contractFunction = contract[request.functionName]
99
- if (!contractFunction) {
100
- throw new Error(
101
- `Function ${request.functionName} not found in contract`
102
- )
103
- }
104
- const tx = await contractFunction(...request.args, txOptions)
105
-
106
- // Wait for confirmation
107
- const receipt = await tx.wait()
108
- return receipt ? receipt.hash : ''
109
- } catch (error) {
110
- parseError(error)
111
- }
112
- }
113
-
114
- /**
115
- * Send batch of transactions (EIP-5792)
116
- */
117
- async sendBatch(
118
- provider: EthereumProvider,
119
- request: EVMBatchTransactionRequest
120
- ): Promise<string> {
121
- try {
122
- const ethersProvider = new ethers.BrowserProvider(provider)
123
-
124
- // Send batch transaction
125
- const response: { id: string } = await ethersProvider.send(
126
- 'wallet_sendCalls',
127
- [request]
128
- )
129
-
130
- // Poll for completion
131
- let result: BatchTransactionResult
132
- do {
133
- result = await ethersProvider.send('wallet_getCallsStatus', [
134
- response.id
135
- ])
136
-
137
- // Wait 1 second if still pending
138
- if (result.status === 100) {
139
- await new Promise(resolve => setTimeout(resolve, 1000))
140
- }
141
- } while (result.status === 100)
142
-
143
- // Check if successful
144
- if (result.status !== 200) {
145
- throw new Error('Batch transaction failed')
146
- }
147
-
148
- // Return first transaction hash
149
- const firstReceipt = result.receipts.find(r => r)
150
- if (!firstReceipt) {
151
- throw new Error('No transaction receipt found')
152
- }
153
-
154
- return firstReceipt.transactionHash
155
- } catch (error) {
156
- parseError(error)
157
- }
158
- }
159
-
160
- /**
161
- * Get wallet capabilities (EIP-5792 support)
162
- */
163
- async getCapabilities(
164
- provider: EthereumProvider,
165
- from: string,
166
- chainId: string
167
- ): Promise<EVMCapabilities> {
168
- const ethersProvider = new ethers.BrowserProvider(provider)
169
- const capabilities = await ethersProvider.send('wallet_getCapabilities', [
170
- from,
171
- [chainId]
172
- ])
173
- return capabilities[chainId] || {}
174
- }
175
-
176
- /**
177
- * Helper to format gas configuration for ethers
178
- */
179
- private formatGasConfig(gasConfig?: EVMGasConfig): ethers.Overrides {
180
- const txOptions: ethers.Overrides = {}
181
-
182
- if (gasConfig?.gasLimit) {
183
- txOptions.gasLimit = BigInt(Math.floor(gasConfig.gasLimit))
184
- }
185
- if (gasConfig?.maxFeePerGas) {
186
- txOptions.maxFeePerGas = BigInt(Math.floor(gasConfig.maxFeePerGas))
187
- }
188
- if (gasConfig?.maxPriorityFeePerGas) {
189
- txOptions.maxPriorityFeePerGas = BigInt(
190
- Math.floor(gasConfig.maxPriorityFeePerGas)
191
- )
192
- }
193
-
194
- return txOptions
195
- }
196
- }
@@ -1,68 +0,0 @@
1
- import {
2
- PublicKey,
3
- SystemProgram,
4
- Transaction,
5
- Connection
6
- } from '@solana/web3.js'
7
- import type { WalletAdapter } from '@solana/wallet-adapter-base'
8
- import type { SolanaNativeTransferRequest, NetworkRpcMap, NetworkId } from '@meshconnect/uwc-types'
9
- import { parseError } from '../utils/error-utils'
10
-
11
- /**
12
- * Service for handling Solana transaction operations
13
- */
14
- export class SolanaTransactionService {
15
- private networkRpcMap: NetworkRpcMap
16
-
17
- constructor(networkRpcMap: NetworkRpcMap = {}) {
18
- this.networkRpcMap = networkRpcMap
19
- }
20
-
21
- /**
22
- * Send native SOL transfer
23
- */
24
- async sendNativeTransfer(
25
- adapter: WalletAdapter,
26
- request: SolanaNativeTransferRequest,
27
- networkId?: NetworkId
28
- ): Promise<string> {
29
- try {
30
- if (!adapter.publicKey) {
31
- throw new Error('Wallet not connected')
32
- }
33
-
34
- // Verify the from address matches connected wallet
35
- if (adapter.publicKey.toBase58() !== request.from) {
36
- throw new Error('From address does not match connected wallet')
37
- }
38
-
39
- // Blockhash is required
40
- if (!request.blockhash) {
41
- throw new Error('Blockhash is required for Solana transactions')
42
- }
43
-
44
- // Create transaction
45
- const transaction = new Transaction().add(
46
- SystemProgram.transfer({
47
- fromPubkey: new PublicKey(request.from),
48
- toPubkey: new PublicKey(request.to),
49
- lamports: Number(request.amount)
50
- })
51
- )
52
-
53
- transaction.recentBlockhash = request.blockhash
54
- transaction.feePayer = adapter.publicKey
55
-
56
- // Get RPC URL from the network RPC map or fall back to public endpoint
57
- const rpcUrl = networkId && this.networkRpcMap[networkId]
58
- ? this.networkRpcMap[networkId]
59
- : 'https://api.mainnet-beta.solana.com'
60
- const connection = new Connection(rpcUrl)
61
-
62
- const signature = await adapter.sendTransaction(transaction, connection)
63
- return signature
64
- } catch (error) {
65
- parseError(error)
66
- }
67
- }
68
- }