@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.
- package/dist/injected-connector.d.ts +5 -1
- package/dist/injected-connector.d.ts.map +1 -1
- package/dist/injected-connector.js +8 -2
- package/dist/injected-connector.js.map +1 -1
- package/dist/services/connection-manager.d.ts +2 -2
- package/dist/services/connection-manager.d.ts.map +1 -1
- package/dist/services/connection-manager.js +2 -2
- package/dist/services/connection-manager.js.map +1 -1
- package/dist/services/ethereum/ethereum-transaction-builder.d.ts +14 -0
- package/dist/services/ethereum/ethereum-transaction-builder.d.ts.map +1 -0
- package/dist/services/ethereum/ethereum-transaction-builder.js +60 -0
- package/dist/services/ethereum/ethereum-transaction-builder.js.map +1 -0
- package/dist/services/ethereum/ethereum-transaction-service.d.ts +26 -0
- package/dist/services/ethereum/ethereum-transaction-service.d.ts.map +1 -0
- package/dist/services/ethereum/ethereum-transaction-service.js +145 -0
- package/dist/services/ethereum/ethereum-transaction-service.js.map +1 -0
- package/dist/services/ethereum/ethereum-wallet-service.d.ts +59 -0
- package/dist/services/ethereum/ethereum-wallet-service.d.ts.map +1 -0
- package/dist/services/ethereum/ethereum-wallet-service.js +173 -0
- package/dist/services/ethereum/ethereum-wallet-service.js.map +1 -0
- package/dist/services/ethereum-transaction-service.d.ts +3 -0
- package/dist/services/ethereum-transaction-service.d.ts.map +1 -1
- package/dist/services/ethereum-transaction-service.js +83 -34
- package/dist/services/ethereum-transaction-service.js.map +1 -1
- package/dist/services/index.d.ts +3 -3
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +3 -3
- package/dist/services/index.js.map +1 -1
- package/dist/services/solana/solana-transaction-builder.d.ts +20 -0
- package/dist/services/solana/solana-transaction-builder.d.ts.map +1 -0
- package/dist/services/solana/solana-transaction-builder.js +112 -0
- package/dist/services/solana/solana-transaction-builder.js.map +1 -0
- package/dist/services/solana/solana-transaction-service.d.ts +27 -0
- package/dist/services/solana/solana-transaction-service.d.ts.map +1 -0
- package/dist/services/solana/solana-transaction-service.js +136 -0
- package/dist/services/solana/solana-transaction-service.js.map +1 -0
- package/dist/services/solana/solana-wallet-service.d.ts +55 -0
- package/dist/services/solana/solana-wallet-service.d.ts.map +1 -0
- package/dist/services/solana/solana-wallet-service.js +129 -0
- package/dist/services/solana/solana-wallet-service.js.map +1 -0
- package/dist/services/transaction-service.d.ts +1 -13
- package/dist/services/transaction-service.d.ts.map +1 -1
- package/dist/services/transaction-service.js +4 -42
- package/dist/services/transaction-service.js.map +1 -1
- package/package.json +4 -2
- package/src/injected-connector.ts +13 -3
- package/src/services/connection-manager.ts +2 -2
- package/src/services/ethereum/ethereum-transaction-builder.ts +82 -0
- package/src/services/ethereum/ethereum-transaction-service.ts +192 -0
- package/src/services/{ethereum-wallet-service.ts → ethereum/ethereum-wallet-service.ts} +56 -3
- package/src/services/index.ts +3 -3
- package/src/services/solana/solana-transaction-builder.ts +214 -0
- package/src/services/solana/solana-transaction-service.ts +190 -0
- package/src/services/{solana-wallet-service.ts → solana/solana-wallet-service.ts} +2 -2
- package/src/services/transaction-service.ts +9 -67
- package/dist/injected-connector.old.d.ts +0 -44
- package/dist/injected-connector.old.d.ts.map +0 -1
- package/dist/injected-connector.old.js +0 -491
- package/dist/injected-connector.old.js.map +0 -1
- package/dist/providers/evm-provider.d.ts +0 -18
- package/dist/providers/evm-provider.d.ts.map +0 -1
- package/dist/providers/evm-provider.js +0 -86
- package/dist/providers/evm-provider.js.map +0 -1
- package/dist/providers/solana-provider.d.ts +0 -22
- package/dist/providers/solana-provider.d.ts.map +0 -1
- package/dist/providers/solana-provider.js +0 -137
- package/dist/providers/solana-provider.js.map +0 -1
- package/src/services/ethereum-transaction-service.ts +0 -196
- 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":"AAEA,OAAO,EACL,gBAAgB,EAEjB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD;;GAEG;AACH,MAAM,OAAO,mBAAmB;IACtB,eAAe,GAAyB,EAAE,CAAA;IAC1C,gBAAgB,GAAyB,IAAI,CAAA;IAC7C,OAAO,GAAkB,IAAI,CAAA;IAC7B,cAAc,CAAgB;IAEtC,YAAY,cAA8B;QACxC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;IACtC,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,IAAI,CAAC,eAAe,GAAG,gBAAgB,EAAE,CAAA;IAC3C,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,OAAO,IAAI,CAAC,eAAe,CAAA;IAC7B,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,IAAY;QAC3B,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;IACxD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,uBAAuB,CAC3B,OAAsB,EACtB,UAAkB;QAElB,IAAI,CAAC;YACH,0DAA0D;YAC1D,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACtB,OAAO,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAA;YACrC,CAAC;YAED,4DAA4D;YAC5D,iEAAiE;YACjE,IAAI,IAAI,CAAC,cAAc,CAAC,kCAAkC,CAAC,UAAU,CAAC,EAAE,CAAC;gBACvE,IACE,YAAY,IAAI,OAAO;oBACvB,CAAC,OAAO,CAAC,UAAU;oBACnB,SAAS,IAAI,OAAO,EACpB,CAAC;oBACD,IAAI,CAAC;wBACH,0EAA0E;wBAC1E,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;wBACvB,8DAA8D;wBAC9D,MAAM,SAAS,GAAI,OAAe,CAAC,SAAS,CAAA;wBAC5C,IAAI,SAAS,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC;4BACzC,OAAO,SAAS,CAAC,QAAQ,EAAE,CAAA;wBAC7B,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,qFAAqF;oBACvF,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,OAAsB,EAAE,UAAkB;QACtD,+BAA+B;QAC/B,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;QAEvB,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;QACvD,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAA;QAC5C,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAA;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QAEtB,iCAAiC;QACjC,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAA;QAErD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;OAEG;IACH,uBAAuB,CACrB,mBAA6B,EAC7B,OAAe;QAEf,MAAM,SAAS,GAAuB,EAAE,CAAA;QACxC,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YACtC,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACpC,SAAS,CAAC,IAAI,CAAC;oBACb,OAAO;oBACP,SAAS,EAAE,SAAsB;iBAClC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,CAAC,CAAA;QACF,OAAO,SAAS,CAAA;IAClB,CAAC;IAED;;OAEG;IACH,kBAAkB,CAChB,OAA6B,EAC7B,OAAsB,EACtB,UAAmB;QAEnB,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAA;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QAEtB,8CAA8C;QAC9C,IAAI,OAAO,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;YACrC,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAA;QACvD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAA;IAC9B,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;IACrB,CAAC;CACF"}
|
|
@@ -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,
|
|
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,
|
|
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.
|
|
19
|
+
return await this.ethereumService.sendTransaction(request, provider);
|
|
52
20
|
}
|
|
53
21
|
else if (namespace === 'solana') {
|
|
54
|
-
return await this.
|
|
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":"
|
|
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.
|
|
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.
|
|
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
|
+
}
|