@meshconnect/uwc-injected-connector 0.2.7 → 0.2.8
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.js +2 -2
- package/dist/injected-connector.js.map +1 -1
- package/dist/injected-connector.old.d.ts +44 -0
- package/dist/injected-connector.old.d.ts.map +1 -0
- package/dist/injected-connector.old.js +491 -0
- package/dist/injected-connector.old.js.map +1 -0
- package/dist/providers/evm-provider.d.ts +18 -0
- package/dist/providers/evm-provider.d.ts.map +1 -0
- package/dist/providers/evm-provider.js +86 -0
- package/dist/providers/evm-provider.js.map +1 -0
- package/dist/providers/solana-provider.d.ts +22 -0
- package/dist/providers/solana-provider.d.ts.map +1 -0
- package/dist/providers/solana-provider.js +137 -0
- package/dist/providers/solana-provider.js.map +1 -0
- package/dist/services/signature-service.d.ts +2 -2
- package/dist/services/signature-service.d.ts.map +1 -1
- package/dist/services/signature-service.js +3 -10
- package/dist/services/signature-service.js.map +1 -1
- package/dist/services/solana/solana-transaction-service.d.ts +14 -2
- package/dist/services/solana/solana-transaction-service.d.ts.map +1 -1
- package/dist/services/solana/solana-transaction-service.js +87 -47
- package/dist/services/solana/solana-transaction-service.js.map +1 -1
- package/dist/services/solana/solana-wallet-service.d.ts +6 -7
- package/dist/services/solana/solana-wallet-service.d.ts.map +1 -1
- package/dist/services/solana/solana-wallet-service.js +13 -15
- package/dist/services/solana/solana-wallet-service.js.map +1 -1
- package/dist/services/transaction-service.d.ts +2 -2
- package/dist/services/transaction-service.d.ts.map +1 -1
- package/dist/services/transaction-service.js.map +1 -1
- package/dist/wallet-standard-discovery.d.ts +11 -9
- package/dist/wallet-standard-discovery.d.ts.map +1 -1
- package/dist/wallet-standard-discovery.js +47 -23
- package/dist/wallet-standard-discovery.js.map +1 -1
- package/package.json +1 -1
- package/src/injected-connector.ts +2 -2
- package/src/services/signature-service.ts +5 -17
- package/src/services/solana/solana-transaction-service.ts +121 -60
- package/src/services/solana/solana-wallet-service.ts +21 -23
- package/src/services/transaction-service.ts +3 -3
- package/src/wallet-standard-discovery.ts +77 -32
|
@@ -0,0 +1,86 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evm-provider.js","sourceRoot":"","sources":["../../src/providers/evm-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana-provider.js","sourceRoot":"","sources":["../../src/providers/solana-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { EthereumProvider } from '../eip6963-discovery';
|
|
2
|
-
import type {
|
|
2
|
+
import type { SolanaAdapter } from '../wallet-standard-discovery';
|
|
3
3
|
/**
|
|
4
4
|
* Service for handling message signing operations for injected wallets
|
|
5
5
|
*/
|
|
@@ -11,6 +11,6 @@ export declare class SignatureService {
|
|
|
11
11
|
/**
|
|
12
12
|
* Sign a message with a Solana wallet
|
|
13
13
|
*/
|
|
14
|
-
signSolanaMessage(message: string, adapter:
|
|
14
|
+
signSolanaMessage(message: string, adapter: SolanaAdapter): Promise<string>;
|
|
15
15
|
}
|
|
16
16
|
//# sourceMappingURL=signature-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signature-service.d.ts","sourceRoot":"","sources":["../../src/services/signature-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"signature-service.d.ts","sourceRoot":"","sources":["../../src/services/signature-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAG5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAEjE;;GAEG;AACH,qBAAa,gBAAgB;IAC3B;;OAEG;IACG,mBAAmB,CACvB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,MAAM,CAAC;IA0BlB;;OAEG;IACG,iBAAiB,CACrB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC;CAuBnB"}
|
|
@@ -33,23 +33,16 @@ export class SignatureService {
|
|
|
33
33
|
* Sign a message with a Solana wallet
|
|
34
34
|
*/
|
|
35
35
|
async signSolanaMessage(message, adapter) {
|
|
36
|
-
if (!adapter) {
|
|
37
|
-
throw new Error('Adapter is required for Solana message signing');
|
|
38
|
-
}
|
|
39
36
|
if (!message) {
|
|
40
37
|
throw new Error('Message is required for signing');
|
|
41
38
|
}
|
|
42
|
-
// Check if adapter supports signMessage
|
|
43
|
-
const signingAdapter = adapter;
|
|
44
|
-
if (!signingAdapter.signMessage) {
|
|
45
|
-
throw new Error('Solana adapter does not support message signing');
|
|
46
|
-
}
|
|
47
39
|
try {
|
|
48
40
|
// Convert message to Uint8Array for Solana
|
|
49
41
|
const encoder = new TextEncoder();
|
|
50
42
|
const messageBytes = encoder.encode(message);
|
|
51
|
-
//
|
|
52
|
-
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
44
|
+
// @ts-ignore
|
|
45
|
+
const signedMessage = await adapter.signMessage(messageBytes);
|
|
53
46
|
// Encode signature using base58 for Solana (standard encoding for Solana)
|
|
54
47
|
// The signature is returned as a Uint8Array, encode it to base58 string
|
|
55
48
|
const signatureBase58 = bs58.encode(signedMessage);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signature-service.js","sourceRoot":"","sources":["../../src/services/signature-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"signature-service.js","sourceRoot":"","sources":["../../src/services/signature-service.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAGjD;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAC3B;;OAEG;IACH,KAAK,CAAC,mBAAmB,CACvB,OAAe,EACf,OAAe,EACf,QAA0B;QAE1B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;QACtE,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;QACpD,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;QACpD,CAAC;QAED,IAAI,CAAC;YACH,iCAAiC;YACjC,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;gBACvC,MAAM,EAAE,eAAe;gBACvB,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;aAC3B,CAAC,CAAA;YAEF,OAAO,SAAS,CAAA;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CACrB,OAAe,EACf,OAAsB;QAEtB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;QACpD,CAAC;QAED,IAAI,CAAC;YACH,2CAA2C;YAC3C,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;YACjC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YAE5C,6DAA6D;YAC7D,aAAa;YACb,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;YAE7D,0EAA0E;YAC1E,wEAAwE;YACxE,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;YAElD,OAAO,eAAe,CAAA;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { WalletAdapter } from '@solana/wallet-adapter-base';
|
|
2
1
|
import type { NetworkRpcMap, SolanaTransactionRequest } from '@meshconnect/uwc-types';
|
|
2
|
+
import type { SolanaAdapter } from '../../wallet-standard-discovery';
|
|
3
3
|
/**
|
|
4
4
|
* Service for handling Solana transaction operations
|
|
5
5
|
*/
|
|
@@ -10,7 +10,19 @@ export declare class SolanaTransactionService {
|
|
|
10
10
|
/**
|
|
11
11
|
* Send a transaction for Solana
|
|
12
12
|
*/
|
|
13
|
-
sendTransaction(request: SolanaTransactionRequest, adapter:
|
|
13
|
+
sendTransaction(request: SolanaTransactionRequest, adapter: SolanaAdapter): Promise<string>;
|
|
14
|
+
/**
|
|
15
|
+
* Helper: Validate wallet address matches
|
|
16
|
+
*/
|
|
17
|
+
private validateWalletMatch;
|
|
18
|
+
/**
|
|
19
|
+
* Helper: Get RPC URL with fallback
|
|
20
|
+
*/
|
|
21
|
+
private getRpcUrl;
|
|
22
|
+
/**
|
|
23
|
+
* Helper: Execute transaction with sendSerializedTransaction fallback
|
|
24
|
+
*/
|
|
25
|
+
private executeTransaction;
|
|
14
26
|
/**
|
|
15
27
|
* Send native SOL transfer
|
|
16
28
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solana-transaction-service.d.ts","sourceRoot":"","sources":["../../../src/services/solana/solana-transaction-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"solana-transaction-service.d.ts","sourceRoot":"","sources":["../../../src/services/solana/solana-transaction-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,aAAa,EAIb,wBAAwB,EACzB,MAAM,wBAAwB,CAAA;AAG/B,OAAO,KAAK,EAEV,aAAa,EACd,MAAM,iCAAiC,CAAA;AAExC;;GAEG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,OAAO,CAA0B;gBAE7B,aAAa,GAAE,aAAkB;IAK7C;;OAEG;IACG,eAAe,CACnB,OAAO,EAAE,wBAAwB,EACjC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC;IA0BlB;;OAEG;YACW,mBAAmB;IAWjC;;OAEG;IACH,OAAO,CAAC,SAAS;IAMjB;;OAEG;YACW,kBAAkB;IAuChC;;OAEG;YACW,qBAAqB;IA8BnC;;OAEG;YACW,uBAAuB;IA8BrC;;OAEG;YACW,mCAAmC;CAwDlD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Transaction, Connection } from '@solana/web3.js';
|
|
1
|
+
import { Transaction, Connection, PublicKey } from '@solana/web3.js';
|
|
2
2
|
import { parseError } from '../../utils/error-utils';
|
|
3
3
|
import { SolanaTransactionBuilder } from './solana-transaction-builder';
|
|
4
4
|
/**
|
|
@@ -34,18 +34,60 @@ export class SolanaTransactionService {
|
|
|
34
34
|
parseError(error);
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Helper: Validate wallet address matches
|
|
39
|
+
*/
|
|
40
|
+
async validateWalletMatch(adapter, expectedAddress) {
|
|
41
|
+
const base58PublicKey = await adapter.publicKey?.toBase58();
|
|
42
|
+
if (base58PublicKey !== expectedAddress) {
|
|
43
|
+
throw new Error('From address does not match connected wallet');
|
|
44
|
+
}
|
|
45
|
+
return base58PublicKey;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Helper: Get RPC URL with fallback
|
|
49
|
+
*/
|
|
50
|
+
getRpcUrl(networkId) {
|
|
51
|
+
return networkId && this.networkRpcMap[networkId]
|
|
52
|
+
? this.networkRpcMap[networkId]
|
|
53
|
+
: 'https://api.mainnet-beta.solana.com';
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Helper: Execute transaction with sendSerializedTransaction fallback
|
|
57
|
+
*/
|
|
58
|
+
async executeTransaction(adapter, transaction, rpcUrl) {
|
|
59
|
+
let transactionSignature;
|
|
60
|
+
// Try to use sendSerializedTransaction if available
|
|
61
|
+
try {
|
|
62
|
+
const extendedAdapter = adapter;
|
|
63
|
+
const serializedTx = transaction.serialize({
|
|
64
|
+
requireAllSignatures: false,
|
|
65
|
+
verifySignatures: false
|
|
66
|
+
});
|
|
67
|
+
if (extendedAdapter.sendSerializedTransaction) {
|
|
68
|
+
transactionSignature = await extendedAdapter.sendSerializedTransaction(serializedTx, rpcUrl);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// Fallback to regular sendTransaction
|
|
73
|
+
}
|
|
74
|
+
// If sendSerializedTransaction didn't work or wasn't available
|
|
75
|
+
if (!transactionSignature) {
|
|
76
|
+
const connection = new Connection(rpcUrl);
|
|
77
|
+
transactionSignature = await adapter.sendTransaction(transaction, connection);
|
|
78
|
+
}
|
|
79
|
+
if (transactionSignature === undefined) {
|
|
80
|
+
throw new Error(`Couldn't get the transaction signature`);
|
|
81
|
+
}
|
|
82
|
+
return transactionSignature;
|
|
83
|
+
}
|
|
37
84
|
/**
|
|
38
85
|
* Send native SOL transfer
|
|
39
86
|
*/
|
|
40
87
|
async sendNativeTransaction(adapter, request, networkId) {
|
|
41
88
|
try {
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
}
|
|
89
|
+
// Validate wallet
|
|
90
|
+
await this.validateWalletMatch(adapter, request.from);
|
|
49
91
|
// Blockhash is required
|
|
50
92
|
if (!request.blockhash) {
|
|
51
93
|
throw new Error('Blockhash is required for Solana transactions');
|
|
@@ -55,14 +97,10 @@ export class SolanaTransactionService {
|
|
|
55
97
|
transaction.instructions =
|
|
56
98
|
await this.builder.buildTransferInstructions(request);
|
|
57
99
|
transaction.recentBlockhash = request.blockhash;
|
|
58
|
-
transaction.feePayer =
|
|
59
|
-
//
|
|
60
|
-
const rpcUrl =
|
|
61
|
-
|
|
62
|
-
: 'https://api.mainnet-beta.solana.com';
|
|
63
|
-
const connection = new Connection(rpcUrl);
|
|
64
|
-
const signature = await adapter.sendTransaction(transaction, connection);
|
|
65
|
-
return signature;
|
|
100
|
+
transaction.feePayer = new PublicKey(request.from);
|
|
101
|
+
// Execute with helpers
|
|
102
|
+
const rpcUrl = this.getRpcUrl(networkId);
|
|
103
|
+
return await this.executeTransaction(adapter, transaction, rpcUrl);
|
|
66
104
|
}
|
|
67
105
|
catch (error) {
|
|
68
106
|
parseError(error);
|
|
@@ -73,13 +111,8 @@ export class SolanaTransactionService {
|
|
|
73
111
|
*/
|
|
74
112
|
async sendSplTokenTransaction(adapter, request, networkId) {
|
|
75
113
|
try {
|
|
76
|
-
|
|
77
|
-
|
|
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
|
-
}
|
|
114
|
+
// Validate wallet
|
|
115
|
+
await this.validateWalletMatch(adapter, request.from);
|
|
83
116
|
// Blockhash is required
|
|
84
117
|
if (!request.blockhash) {
|
|
85
118
|
throw new Error('Blockhash is required for Solana transactions');
|
|
@@ -89,14 +122,10 @@ export class SolanaTransactionService {
|
|
|
89
122
|
transaction.instructions =
|
|
90
123
|
await this.builder.buildTransferInstructions(request);
|
|
91
124
|
transaction.recentBlockhash = request.blockhash;
|
|
92
|
-
transaction.feePayer =
|
|
93
|
-
//
|
|
94
|
-
const rpcUrl =
|
|
95
|
-
|
|
96
|
-
: 'https://api.mainnet-beta.solana.com';
|
|
97
|
-
const connection = new Connection(rpcUrl);
|
|
98
|
-
const signature = await adapter.sendTransaction(transaction, connection);
|
|
99
|
-
return signature;
|
|
125
|
+
transaction.feePayer = new PublicKey(request.from);
|
|
126
|
+
// Execute with helpers
|
|
127
|
+
const rpcUrl = this.getRpcUrl(networkId);
|
|
128
|
+
return await this.executeTransaction(adapter, transaction, rpcUrl);
|
|
100
129
|
}
|
|
101
130
|
catch (error) {
|
|
102
131
|
parseError(error);
|
|
@@ -107,26 +136,37 @@ export class SolanaTransactionService {
|
|
|
107
136
|
*/
|
|
108
137
|
async sendGenericTransferWithInstructions(adapter, request, networkId) {
|
|
109
138
|
try {
|
|
110
|
-
|
|
111
|
-
|
|
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
|
-
}
|
|
139
|
+
// Validate wallet
|
|
140
|
+
await this.validateWalletMatch(adapter, request.feePayer);
|
|
117
141
|
// Blockhash is required
|
|
118
142
|
if (!request.blockhash) {
|
|
119
143
|
throw new Error('Blockhash is required for Solana transactions');
|
|
120
144
|
}
|
|
121
|
-
// Create transaction
|
|
122
|
-
const transaction = await this.builder.getVersionedTransaction(
|
|
123
|
-
// Get RPC URL
|
|
124
|
-
const rpcUrl =
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
145
|
+
// Create versioned transaction
|
|
146
|
+
const transaction = await this.builder.getVersionedTransaction(new PublicKey(request.feePayer), request);
|
|
147
|
+
// Get RPC URL
|
|
148
|
+
const rpcUrl = this.getRpcUrl(networkId);
|
|
149
|
+
// VersionedTransaction can't use our helper method, handle directly
|
|
150
|
+
let transactionSignature;
|
|
151
|
+
try {
|
|
152
|
+
const extendedAdapter = adapter;
|
|
153
|
+
const serializedTx = transaction.serialize();
|
|
154
|
+
if (extendedAdapter.sendSerializedTransaction) {
|
|
155
|
+
transactionSignature =
|
|
156
|
+
await extendedAdapter.sendSerializedTransaction(serializedTx, rpcUrl);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
// Fallback to regular sendTransaction
|
|
161
|
+
}
|
|
162
|
+
if (!transactionSignature) {
|
|
163
|
+
const connection = new Connection(rpcUrl);
|
|
164
|
+
transactionSignature = await adapter.sendTransaction(transaction, connection);
|
|
165
|
+
}
|
|
166
|
+
if (transactionSignature === undefined) {
|
|
167
|
+
throw new Error(`Couldn't get the transaction signature`);
|
|
168
|
+
}
|
|
169
|
+
return transactionSignature;
|
|
130
170
|
}
|
|
131
171
|
catch (error) {
|
|
132
172
|
parseError(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solana-transaction-service.js","sourceRoot":"","sources":["../../../src/services/solana/solana-transaction-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"solana-transaction-service.js","sourceRoot":"","sources":["../../../src/services/solana/solana-transaction-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { AvailableAddress } from '@meshconnect/uwc-types';
|
|
2
|
-
import type
|
|
3
|
-
import { type WalletStandardInfo } from '../../wallet-standard-discovery';
|
|
2
|
+
import { type SolanaAdapter, type WalletStandardInfo } from '../../wallet-standard-discovery';
|
|
4
3
|
import { StorageService } from '../storage-service';
|
|
5
4
|
/**
|
|
6
5
|
* Service for managing Solana wallet connections
|
|
@@ -14,7 +13,7 @@ export declare class SolanaWalletService {
|
|
|
14
13
|
/**
|
|
15
14
|
* Initialize wallet discovery
|
|
16
15
|
*/
|
|
17
|
-
initializeDiscovery(): void
|
|
16
|
+
initializeDiscovery(): Promise<void>;
|
|
18
17
|
/**
|
|
19
18
|
* Get detected wallets
|
|
20
19
|
*/
|
|
@@ -26,11 +25,11 @@ export declare class SolanaWalletService {
|
|
|
26
25
|
/**
|
|
27
26
|
* Check if a Solana wallet is already connected
|
|
28
27
|
*/
|
|
29
|
-
checkExistingConnection(adapter:
|
|
28
|
+
checkExistingConnection(adapter: SolanaAdapter, walletUuid: string): Promise<string | null>;
|
|
30
29
|
/**
|
|
31
30
|
* Connect to wallet
|
|
32
31
|
*/
|
|
33
|
-
connect(adapter:
|
|
32
|
+
connect(adapter: SolanaAdapter, walletUuid: string): Promise<string>;
|
|
34
33
|
/**
|
|
35
34
|
* Build available addresses for all supported networks
|
|
36
35
|
*/
|
|
@@ -38,7 +37,7 @@ export declare class SolanaWalletService {
|
|
|
38
37
|
/**
|
|
39
38
|
* Set connection state
|
|
40
39
|
*/
|
|
41
|
-
setConnectionState(adapter:
|
|
40
|
+
setConnectionState(adapter: SolanaAdapter | null, account: string | null, walletUuid?: string): void;
|
|
42
41
|
/**
|
|
43
42
|
* Get current account
|
|
44
43
|
*/
|
|
@@ -46,7 +45,7 @@ export declare class SolanaWalletService {
|
|
|
46
45
|
/**
|
|
47
46
|
* Get connected adapter
|
|
48
47
|
*/
|
|
49
|
-
getConnectedAdapter():
|
|
48
|
+
getConnectedAdapter(): SolanaAdapter | null;
|
|
50
49
|
/**
|
|
51
50
|
* Disconnect (clear state only, don't actually disconnect from wallet)
|
|
52
51
|
*/
|
|
@@ -1 +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,
|
|
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,EAEL,KAAK,aAAa,EAClB,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;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI1C;;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;IA+BzB;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB1E;;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"}
|