@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
@@ -0,0 +1,136 @@
1
+ import { Transaction, Connection } from '@solana/web3.js';
2
+ import { parseError } from '../../utils/error-utils';
3
+ import { SolanaTransactionBuilder } from './solana-transaction-builder';
4
+ /**
5
+ * Service for handling Solana transaction operations
6
+ */
7
+ export class SolanaTransactionService {
8
+ networkRpcMap;
9
+ builder;
10
+ constructor(networkRpcMap = {}) {
11
+ this.networkRpcMap = networkRpcMap;
12
+ this.builder = new SolanaTransactionBuilder();
13
+ }
14
+ /**
15
+ * Send a transaction for Solana
16
+ */
17
+ async sendTransaction(request, adapter) {
18
+ try {
19
+ // Handle different types of Solana transactions
20
+ if ('tokenMint' in request) {
21
+ return await this.sendSplTokenTransaction(adapter, request);
22
+ }
23
+ else if ('from' in request) {
24
+ return await this.sendNativeTransaction(adapter, request);
25
+ }
26
+ else if ('instructions' in request) {
27
+ return await this.sendGenericTransferWithInstructions(adapter, request);
28
+ }
29
+ else {
30
+ throw new Error('Invalid transaction request type');
31
+ }
32
+ }
33
+ catch (error) {
34
+ parseError(error);
35
+ }
36
+ }
37
+ /**
38
+ * Send native SOL transfer
39
+ */
40
+ async sendNativeTransaction(adapter, request, networkId) {
41
+ try {
42
+ if (!adapter.publicKey) {
43
+ throw new Error('Wallet not connected');
44
+ }
45
+ // Verify the from address matches connected wallet
46
+ if (adapter.publicKey.toBase58() !== request.from) {
47
+ throw new Error('From address does not match connected wallet');
48
+ }
49
+ // Blockhash is required
50
+ if (!request.blockhash) {
51
+ throw new Error('Blockhash is required for Solana transactions');
52
+ }
53
+ // Create transaction
54
+ const transaction = new Transaction();
55
+ transaction.instructions =
56
+ await this.builder.buildTransferInstructions(request);
57
+ transaction.recentBlockhash = request.blockhash;
58
+ transaction.feePayer = adapter.publicKey;
59
+ // Get RPC URL from the network RPC map or fall back to public endpoint
60
+ const rpcUrl = networkId && this.networkRpcMap[networkId]
61
+ ? this.networkRpcMap[networkId]
62
+ : 'https://api.mainnet-beta.solana.com';
63
+ const connection = new Connection(rpcUrl);
64
+ const signature = await adapter.sendTransaction(transaction, connection);
65
+ return signature;
66
+ }
67
+ catch (error) {
68
+ parseError(error);
69
+ }
70
+ }
71
+ /**
72
+ * Send SPL token transfer
73
+ */
74
+ async sendSplTokenTransaction(adapter, request, networkId) {
75
+ try {
76
+ if (!adapter.publicKey) {
77
+ throw new Error('Wallet not connected');
78
+ }
79
+ // Verify the from address matches connected wallet
80
+ if (adapter.publicKey.toBase58() !== request.from) {
81
+ throw new Error('From address does not match connected wallet');
82
+ }
83
+ // Blockhash is required
84
+ if (!request.blockhash) {
85
+ throw new Error('Blockhash is required for Solana transactions');
86
+ }
87
+ // Create transaction
88
+ const transaction = new Transaction();
89
+ transaction.instructions =
90
+ await this.builder.buildTransferInstructions(request);
91
+ transaction.recentBlockhash = request.blockhash;
92
+ transaction.feePayer = adapter.publicKey;
93
+ // Get RPC URL from the network RPC map or fall back to public endpoint
94
+ const rpcUrl = networkId && this.networkRpcMap[networkId]
95
+ ? this.networkRpcMap[networkId]
96
+ : 'https://api.mainnet-beta.solana.com';
97
+ const connection = new Connection(rpcUrl);
98
+ const signature = await adapter.sendTransaction(transaction, connection);
99
+ return signature;
100
+ }
101
+ catch (error) {
102
+ parseError(error);
103
+ }
104
+ }
105
+ /**
106
+ * Send native SOL transfer
107
+ */
108
+ async sendGenericTransferWithInstructions(adapter, request, networkId) {
109
+ try {
110
+ if (!adapter.publicKey) {
111
+ throw new Error('Wallet not connected');
112
+ }
113
+ // Verify the from address matches connected wallet
114
+ if (adapter.publicKey.toBase58() !== request.feePayer) {
115
+ throw new Error('From address does not match connected wallet');
116
+ }
117
+ // Blockhash is required
118
+ if (!request.blockhash) {
119
+ throw new Error('Blockhash is required for Solana transactions');
120
+ }
121
+ // Create transaction
122
+ const transaction = await this.builder.getVersionedTransaction(adapter.publicKey, request);
123
+ // Get RPC URL from the network RPC map or fall back to public endpoint
124
+ const rpcUrl = networkId && this.networkRpcMap[networkId]
125
+ ? this.networkRpcMap[networkId]
126
+ : 'https://api.mainnet-beta.solana.com';
127
+ const connection = new Connection(rpcUrl);
128
+ const signature = await adapter.sendTransaction(transaction, connection);
129
+ return signature;
130
+ }
131
+ catch (error) {
132
+ parseError(error);
133
+ }
134
+ }
135
+ }
136
+ //# sourceMappingURL=solana-transaction-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana-transaction-service.js","sourceRoot":"","sources":["../../../src/services/solana/solana-transaction-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { AvailableAddress } from '@meshconnect/uwc-types';
2
+ import type { WalletAdapter } from '@solana/wallet-adapter-base';
3
+ import { type WalletStandardInfo } from '../../wallet-standard-discovery';
4
+ import { StorageService } from '../storage-service';
5
+ /**
6
+ * Service for managing Solana wallet connections
7
+ */
8
+ export declare class SolanaWalletService {
9
+ private detectedWallets;
10
+ private connectedAdapter;
11
+ private account;
12
+ private storageService;
13
+ constructor(storageService: StorageService);
14
+ /**
15
+ * Initialize wallet discovery
16
+ */
17
+ initializeDiscovery(): void;
18
+ /**
19
+ * Get detected wallets
20
+ */
21
+ getDetectedWallets(): WalletStandardInfo[];
22
+ /**
23
+ * Find wallet by UUID
24
+ */
25
+ findWalletByUuid(uuid: string): WalletStandardInfo | undefined;
26
+ /**
27
+ * Check if a Solana wallet is already connected
28
+ */
29
+ checkExistingConnection(adapter: WalletAdapter, walletUuid: string): Promise<string | null>;
30
+ /**
31
+ * Connect to wallet
32
+ */
33
+ connect(adapter: WalletAdapter, walletUuid: string): Promise<string>;
34
+ /**
35
+ * Build available addresses for all supported networks
36
+ */
37
+ buildAvailableAddresses(supportedNetworkIds: string[], address: string): AvailableAddress[];
38
+ /**
39
+ * Set connection state
40
+ */
41
+ setConnectionState(adapter: WalletAdapter | null, account: string | null, walletUuid?: string): void;
42
+ /**
43
+ * Get current account
44
+ */
45
+ getAccount(): string | null;
46
+ /**
47
+ * Get connected adapter
48
+ */
49
+ getConnectedAdapter(): WalletAdapter | null;
50
+ /**
51
+ * Disconnect (clear state only, don't actually disconnect from wallet)
52
+ */
53
+ disconnect(): void;
54
+ }
55
+ //# sourceMappingURL=solana-wallet-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana-wallet-service.d.ts","sourceRoot":"","sources":["../../../src/services/solana/solana-wallet-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,cAAc,CAAgB;gBAE1B,cAAc,EAAE,cAAc;IAI1C;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAI3B;;OAEG;IACH,kBAAkB,IAAI,kBAAkB,EAAE;IAI1C;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAI9D;;OAEG;IACG,uBAAuB,CAC3B,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAkCzB;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkB1E;;OAEG;IACH,uBAAuB,CACrB,mBAAmB,EAAE,MAAM,EAAE,EAC7B,OAAO,EAAE,MAAM,GACd,gBAAgB,EAAE;IAarB;;OAEG;IACH,kBAAkB,CAChB,OAAO,EAAE,aAAa,GAAG,IAAI,EAC7B,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI;IAUP;;OAEG;IACH,UAAU,IAAI,MAAM,GAAG,IAAI;IAI3B;;OAEG;IACH,mBAAmB,IAAI,aAAa,GAAG,IAAI;IAI3C;;OAEG;IACH,UAAU,IAAI,IAAI;CAInB"}
@@ -0,0 +1,129 @@
1
+ import { getSolanaWallets } from '../../wallet-standard-discovery';
2
+ import { StorageService } from '../storage-service';
3
+ /**
4
+ * Service for managing Solana wallet connections
5
+ */
6
+ export class SolanaWalletService {
7
+ detectedWallets = [];
8
+ connectedAdapter = null;
9
+ account = null;
10
+ storageService;
11
+ constructor(storageService) {
12
+ this.storageService = storageService;
13
+ }
14
+ /**
15
+ * Initialize wallet discovery
16
+ */
17
+ initializeDiscovery() {
18
+ this.detectedWallets = getSolanaWallets();
19
+ }
20
+ /**
21
+ * Get detected wallets
22
+ */
23
+ getDetectedWallets() {
24
+ return this.detectedWallets;
25
+ }
26
+ /**
27
+ * Find wallet by UUID
28
+ */
29
+ findWalletByUuid(uuid) {
30
+ return this.detectedWallets.find(w => w.uuid === uuid);
31
+ }
32
+ /**
33
+ * Check if a Solana wallet is already connected
34
+ */
35
+ async checkExistingConnection(adapter, walletUuid) {
36
+ try {
37
+ // Check if adapter has a publicKey (means it's connected)
38
+ if (adapter.publicKey) {
39
+ return adapter.publicKey.toBase58();
40
+ }
41
+ // If this wallet was previously connected, try to reconnect
42
+ // This should work without prompting for wallets that support it
43
+ if (this.storageService.wasSolanaWalletPreviouslyConnected(walletUuid)) {
44
+ if ('connecting' in adapter &&
45
+ !adapter.connecting &&
46
+ 'connect' in adapter) {
47
+ try {
48
+ // Type assertion needed because TypeScript can't narrow the type properly
49
+ await adapter.connect();
50
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
51
+ const publicKey = adapter.publicKey;
52
+ if (publicKey && 'toBase58' in publicKey) {
53
+ return publicKey.toBase58();
54
+ }
55
+ }
56
+ catch {
57
+ // Silent fail - wallet requires user interaction or doesn't support silent reconnect
58
+ }
59
+ }
60
+ }
61
+ return null;
62
+ }
63
+ catch {
64
+ return null;
65
+ }
66
+ }
67
+ /**
68
+ * Connect to wallet
69
+ */
70
+ async connect(adapter, walletUuid) {
71
+ // Connect to the Solana wallet
72
+ await adapter.connect();
73
+ if (!adapter.publicKey) {
74
+ throw new Error('No public key returned from wallet');
75
+ }
76
+ const address = adapter.publicKey.toBase58();
77
+ this.connectedAdapter = adapter;
78
+ this.account = address;
79
+ // Store this wallet as connected
80
+ this.storageService.storeSolanaWalletUUID(walletUuid);
81
+ return address;
82
+ }
83
+ /**
84
+ * Build available addresses for all supported networks
85
+ */
86
+ buildAvailableAddresses(supportedNetworkIds, address) {
87
+ const addresses = [];
88
+ supportedNetworkIds.forEach(networkId => {
89
+ if (networkId.startsWith('solana:')) {
90
+ addresses.push({
91
+ address,
92
+ networkId: networkId
93
+ });
94
+ }
95
+ });
96
+ return addresses;
97
+ }
98
+ /**
99
+ * Set connection state
100
+ */
101
+ setConnectionState(adapter, account, walletUuid) {
102
+ this.connectedAdapter = adapter;
103
+ this.account = account;
104
+ // Store wallet UUID if provided and connected
105
+ if (adapter && account && walletUuid) {
106
+ this.storageService.storeSolanaWalletUUID(walletUuid);
107
+ }
108
+ }
109
+ /**
110
+ * Get current account
111
+ */
112
+ getAccount() {
113
+ return this.account;
114
+ }
115
+ /**
116
+ * Get connected adapter
117
+ */
118
+ getConnectedAdapter() {
119
+ return this.connectedAdapter;
120
+ }
121
+ /**
122
+ * Disconnect (clear state only, don't actually disconnect from wallet)
123
+ */
124
+ disconnect() {
125
+ this.connectedAdapter = null;
126
+ this.account = null;
127
+ }
128
+ }
129
+ //# sourceMappingURL=solana-wallet-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana-wallet-service.js","sourceRoot":"","sources":["../../../src/services/solana/solana-wallet-service.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { EthereumProvider } from '../eip6963-discovery';
2
2
  import type { WalletAdapter } from '@solana/wallet-adapter-base';
3
- import type { TransactionRequest, TransactionResult, SolanaNativeTransferRequest, NetworkRpcMap } from '@meshconnect/uwc-types';
3
+ import type { TransactionRequest, TransactionResult, NetworkRpcMap } from '@meshconnect/uwc-types';
4
4
  /**
5
5
  * Service for handling transaction operations across different wallet types
6
6
  */
@@ -8,21 +8,9 @@ export declare class TransactionService {
8
8
  private ethereumService;
9
9
  private solanaService;
10
10
  constructor(networkRpcMap?: NetworkRpcMap);
11
- /**
12
- * Send a transaction for Ethereum
13
- */
14
- sendEthereumTransaction(request: TransactionRequest, provider: EthereumProvider): Promise<string>;
15
- /**
16
- * Send a transaction for Solana
17
- */
18
- sendSolanaTransaction(request: SolanaNativeTransferRequest, adapter: WalletAdapter): Promise<string>;
19
11
  /**
20
12
  * Send a transaction based on namespace
21
13
  */
22
14
  sendTransaction(request: TransactionRequest, namespace: 'eip155' | 'solana', provider: EthereumProvider | WalletAdapter): Promise<TransactionResult>;
23
- /**
24
- * Get EVM wallet capabilities
25
- */
26
- getEVMCapabilities(provider: EthereumProvider, from: string, chainId: string): Promise<import("@meshconnect/uwc-types").EVMCapabilities>;
27
15
  }
28
16
  //# sourceMappingURL=transaction-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transaction-service.d.ts","sourceRoot":"","sources":["../../src/services/transaction-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EAIjB,2BAA2B,EAC3B,aAAa,EACd,MAAM,wBAAwB,CAAA;AAK/B;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,eAAe,CAA4B;IACnD,OAAO,CAAC,aAAa,CAA0B;gBAEnC,aAAa,GAAE,aAAkB;IAK7C;;OAEG;IACG,uBAAuB,CAC3B,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,MAAM,CAAC;IA6BlB;;OAEG;IACG,qBAAqB,CACzB,OAAO,EAAE,2BAA2B,EACpC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC;IAIlB;;OAEG;IACG,eAAe,CACnB,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,QAAQ,GAAG,QAAQ,EAC9B,QAAQ,EAAE,gBAAgB,GAAG,aAAa,GACzC,OAAO,CAAC,iBAAiB,CAAC;IAgB7B;;OAEG;IACG,kBAAkB,CACtB,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM;CAIlB"}
1
+ {"version":3,"file":"transaction-service.d.ts","sourceRoot":"","sources":["../../src/services/transaction-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EAGd,MAAM,wBAAwB,CAAA;AAK/B;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,eAAe,CAA4B;IACnD,OAAO,CAAC,aAAa,CAA0B;gBAEnC,aAAa,GAAE,aAAkB;IAK7C;;OAEG;IACG,eAAe,CACnB,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,QAAQ,GAAG,QAAQ,EAC9B,QAAQ,EAAE,gBAAgB,GAAG,aAAa,GACzC,OAAO,CAAC,iBAAiB,CAAC;CAe9B"}
@@ -1,5 +1,5 @@
1
- import { EthereumTransactionService } from './ethereum-transaction-service';
2
- import { SolanaTransactionService } from './solana-transaction-service';
1
+ import { EthereumTransactionService } from './ethereum/ethereum-transaction-service';
2
+ import { SolanaTransactionService } from './solana/solana-transaction-service';
3
3
  import { parseError } from '../utils/error-utils';
4
4
  /**
5
5
  * Service for handling transaction operations across different wallet types
@@ -11,57 +11,19 @@ export class TransactionService {
11
11
  this.ethereumService = new EthereumTransactionService();
12
12
  this.solanaService = new SolanaTransactionService(networkRpcMap);
13
13
  }
14
- /**
15
- * Send a transaction for Ethereum
16
- */
17
- async sendEthereumTransaction(request, provider) {
18
- try {
19
- // Handle different types of EVM transactions
20
- if ('contractAddress' in request && 'abi' in request) {
21
- // Contract call
22
- return await this.ethereumService.sendContractCall(provider, request);
23
- }
24
- else if ('calls' in request) {
25
- // Batch transaction
26
- return await this.ethereumService.sendBatch(provider, request);
27
- }
28
- else if ('amount' in request && typeof request.amount === 'bigint') {
29
- // Native transfer
30
- return await this.ethereumService.sendNativeTransfer(provider, request);
31
- }
32
- else {
33
- throw new Error('Invalid transaction request type');
34
- }
35
- }
36
- catch (error) {
37
- parseError(error);
38
- }
39
- }
40
- /**
41
- * Send a transaction for Solana
42
- */
43
- async sendSolanaTransaction(request, adapter) {
44
- return await this.solanaService.sendNativeTransfer(adapter, request);
45
- }
46
14
  /**
47
15
  * Send a transaction based on namespace
48
16
  */
49
17
  async sendTransaction(request, namespace, provider) {
50
18
  if (namespace === 'eip155') {
51
- return await this.sendEthereumTransaction(request, provider);
19
+ return await this.ethereumService.sendTransaction(request, provider);
52
20
  }
53
21
  else if (namespace === 'solana') {
54
- return await this.sendSolanaTransaction(request, provider);
22
+ return await this.solanaService.sendTransaction(request, provider);
55
23
  }
56
24
  else {
57
25
  throw parseError(new Error(`Unsupported namespace: ${namespace}`));
58
26
  }
59
27
  }
60
- /**
61
- * Get EVM wallet capabilities
62
- */
63
- async getEVMCapabilities(provider, from, chainId) {
64
- return await this.ethereumService.getCapabilities(provider, from, chainId);
65
- }
66
28
  }
67
29
  //# sourceMappingURL=transaction-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transaction-service.js","sourceRoot":"","sources":["../../src/services/transaction-service.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAA;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAA;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD;;GAEG;AACH,MAAM,OAAO,kBAAkB;IACrB,eAAe,CAA4B;IAC3C,aAAa,CAA0B;IAE/C,YAAY,gBAA+B,EAAE;QAC3C,IAAI,CAAC,eAAe,GAAG,IAAI,0BAA0B,EAAE,CAAA;QACvD,IAAI,CAAC,aAAa,GAAG,IAAI,wBAAwB,CAAC,aAAa,CAAC,CAAA;IAClE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,uBAAuB,CAC3B,OAA2B,EAC3B,QAA0B;QAE1B,IAAI,CAAC;YACH,6CAA6C;YAC7C,IAAI,iBAAiB,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;gBACrD,gBAAgB;gBAChB,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAChD,QAAQ,EACR,OAAiC,CAClC,CAAA;YACH,CAAC;iBAAM,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;gBAC9B,oBAAoB;gBACpB,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CACzC,QAAQ,EACR,OAAqC,CACtC,CAAA;YACH,CAAC;iBAAM,IAAI,QAAQ,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACrE,kBAAkB;gBAClB,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAClD,QAAQ,EACR,OAAmC,CACpC,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;YACrD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CACzB,OAAoC,EACpC,OAAsB;QAEtB,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACtE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CACnB,OAA2B,EAC3B,SAA8B,EAC9B,QAA0C;QAE1C,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC3B,OAAO,MAAM,IAAI,CAAC,uBAAuB,CACvC,OAAO,EACP,QAA4B,CAC7B,CAAA;QACH,CAAC;aAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,MAAM,IAAI,CAAC,qBAAqB,CACrC,OAAsC,EACtC,QAAyB,CAC1B,CAAA;QACH,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,CAAC,IAAI,KAAK,CAAC,0BAA0B,SAAS,EAAE,CAAC,CAAC,CAAA;QACpE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CACtB,QAA0B,EAC1B,IAAY,EACZ,OAAe;QAEf,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;IAC5E,CAAC;CACF"}
1
+ {"version":3,"file":"transaction-service.js","sourceRoot":"","sources":["../../src/services/transaction-service.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAA;AACpF,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAA;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD;;GAEG;AACH,MAAM,OAAO,kBAAkB;IACrB,eAAe,CAA4B;IAC3C,aAAa,CAA0B;IAE/C,YAAY,gBAA+B,EAAE;QAC3C,IAAI,CAAC,eAAe,GAAG,IAAI,0BAA0B,EAAE,CAAA;QACvD,IAAI,CAAC,aAAa,GAAG,IAAI,wBAAwB,CAAC,aAAa,CAAC,CAAA;IAClE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CACnB,OAA2B,EAC3B,SAA8B,EAC9B,QAA0C;QAE1C,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC3B,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,eAAe,CAC/C,OAAqC,EACrC,QAA4B,CAC7B,CAAA;QACH,CAAC;aAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,CAC7C,OAAmC,EACnC,QAAyB,CAC1B,CAAA;QACH,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,CAAC,IAAI,KAAK,CAAC,0BAA0B,SAAS,EAAE,CAAC,CAAC,CAAA;QACpE,CAAC;IACH,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meshconnect/uwc-injected-connector",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Injected connector for Universal Wallet Connector",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -16,6 +16,7 @@
16
16
  "src"
17
17
  ],
18
18
  "dependencies": {
19
+ "@solana/spl-token": "^0.4.13",
19
20
  "@solana/wallet-adapter-base": "^0.9.23",
20
21
  "@solana/wallet-adapter-wallets": "^0.19.37",
21
22
  "@solana/wallet-standard-wallet-adapter-base": "^1.1.2",
@@ -23,8 +24,9 @@
23
24
  "@wallet-standard/app": "^1.1.0",
24
25
  "@wallet-standard/base": "^1.1.0",
25
26
  "bs58": "^6.0.0",
27
+ "buffer": "^6.0.3",
26
28
  "ethers": "^6.15.0",
27
- "@meshconnect/uwc-types": "0.2.0"
29
+ "@meshconnect/uwc-types": "0.2.1"
28
30
  },
29
31
  "devDependencies": {
30
32
  "typescript": "^5.9.2"
@@ -10,11 +10,12 @@ import type {
10
10
  DetectedSolanaWalletInfo,
11
11
  TransactionRequest,
12
12
  TransactionResult,
13
- NetworkRpcMap
13
+ NetworkRpcMap,
14
+ EVMCapabilities
14
15
  } from '@meshconnect/uwc-types'
15
16
 
16
- import { EthereumWalletService } from './services/ethereum-wallet-service'
17
- import { SolanaWalletService } from './services/solana-wallet-service'
17
+ import { EthereumWalletService } from './services/ethereum/ethereum-wallet-service'
18
+ import { SolanaWalletService } from './services/solana/solana-wallet-service'
18
19
  import { StorageService } from './services/storage-service'
19
20
  import { ConnectionManager } from './services/connection-manager'
20
21
  import { SignatureService } from './services/signature-service'
@@ -262,4 +263,13 @@ export class InjectedConnector implements Connector {
262
263
  throw new Error(`Transactions not supported for namespace: ${namespace}`)
263
264
  }
264
265
  }
266
+
267
+ /**
268
+ * Get EVM wallet capabilities
269
+ */
270
+ async getWalletCapabilities(
271
+ from: string
272
+ ): Promise<Record<string, EVMCapabilities>> {
273
+ return await this.ethereumService.getCapabilities(from)
274
+ }
265
275
  }
@@ -6,8 +6,8 @@ import type {
6
6
  SwitchNetworkResult,
7
7
  AvailableAddress
8
8
  } from '@meshconnect/uwc-types'
9
- import { EthereumWalletService } from './ethereum-wallet-service'
10
- import { SolanaWalletService } from './solana-wallet-service'
9
+ import { EthereumWalletService } from './ethereum/ethereum-wallet-service'
10
+ import { SolanaWalletService } from './solana/solana-wallet-service'
11
11
  import { parseError } from '../utils/error-utils'
12
12
 
13
13
  /**
@@ -0,0 +1,82 @@
1
+ import { ethers } from 'ethers'
2
+ import type {
3
+ EVMGasConfig,
4
+ EVMNativeTransferRequest,
5
+ EVMContractCallRequest
6
+ } from '@meshconnect/uwc-types'
7
+ import { parseError } from '../../utils/error-utils'
8
+ import type { TransactionRequest } from 'ethers'
9
+
10
+ /**
11
+ * Service for handling Ethereum/EVM transaction operations
12
+ */
13
+ export class EthereumTransactionBuilder {
14
+ async getContractTransaction(
15
+ request: EVMContractCallRequest
16
+ ): Promise<TransactionRequest> {
17
+ try {
18
+ // Build transaction options
19
+ const txOptions: ethers.Overrides = {
20
+ ...this.formatGasConfig(request.gasConfig)
21
+ }
22
+
23
+ // Add value for payable functions
24
+ if (request.value) {
25
+ txOptions.value = request.value
26
+ }
27
+
28
+ const iface = new ethers.Interface(request.abi)
29
+
30
+ const data = iface.encodeFunctionData(
31
+ request.functionName,
32
+ request.args || []
33
+ )
34
+
35
+ const txRequest: TransactionRequest = {
36
+ to: request.contractAddress,
37
+ data,
38
+ value: request.value ?? 0n,
39
+ ...txOptions
40
+ }
41
+
42
+ return txRequest
43
+ } catch (error) {
44
+ parseError(error)
45
+ }
46
+ }
47
+
48
+ async getNativeTransaction(
49
+ request: EVMNativeTransferRequest
50
+ ): Promise<TransactionRequest> {
51
+ try {
52
+ return {
53
+ to: request.to,
54
+ value: request.amount,
55
+ ...this.formatGasConfig(request.gasConfig)
56
+ }
57
+ } catch (error) {
58
+ parseError(error)
59
+ }
60
+ }
61
+
62
+ /**
63
+ * Helper to format gas configuration for ethers
64
+ */
65
+ private formatGasConfig(gasConfig?: EVMGasConfig): ethers.Overrides {
66
+ const txOptions: ethers.Overrides = {}
67
+
68
+ if (gasConfig?.gasLimit) {
69
+ txOptions.gasLimit = BigInt(Math.floor(gasConfig.gasLimit))
70
+ }
71
+ if (gasConfig?.maxFeePerGas) {
72
+ txOptions.maxFeePerGas = BigInt(Math.floor(gasConfig.maxFeePerGas))
73
+ }
74
+ if (gasConfig?.maxPriorityFeePerGas) {
75
+ txOptions.maxPriorityFeePerGas = BigInt(
76
+ Math.floor(gasConfig.maxPriorityFeePerGas)
77
+ )
78
+ }
79
+
80
+ return txOptions
81
+ }
82
+ }