@meshconnect/uwc-injected-connector 0.2.1 → 0.2.3
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/eip6963-discovery.d.ts.map +1 -1
- package/dist/eip6963-discovery.js +39 -0
- package/dist/eip6963-discovery.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/injected-connector.d.ts +2 -2
- package/dist/injected-connector.d.ts.map +1 -1
- package/dist/injected-connector.js +10 -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/ethereum-transaction-service.d.ts.map +1 -1
- package/dist/services/ethereum-transaction-service.js +20 -11
- package/dist/services/ethereum-transaction-service.js.map +1 -1
- package/package.json +2 -2
- package/src/eip6963-discovery.ts +44 -0
- package/src/index.ts +1 -2
- package/src/injected-connector.ts +13 -4
|
@@ -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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ethereum-transaction-service.d.ts","sourceRoot":"","sources":["../../src/services/ethereum-transaction-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAEV,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,eAAe,EAEhB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAA;AAEhD;;GAEG;AACH,qBAAa,0BAA0B;IAC/B,iBAAiB,CACrB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"ethereum-transaction-service.d.ts","sourceRoot":"","sources":["../../src/services/ethereum-transaction-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAEV,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,eAAe,EAEhB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAA;AAEhD;;GAEG;AACH,qBAAa,0BAA0B;IAC/B,iBAAiB,CACrB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,kBAAkB,CAAC;IA+CxB,mBAAmB,CACvB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC;IA2B9B;;OAEG;IACG,kBAAkB,CACtB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,MAAM,CAAC;IAoBlB;;OAEG;IACG,gBAAgB,CACpB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC;IAoBlB;;OAEG;IACG,SAAS,CACb,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,MAAM,CAAC;IA+ElB;;OAEG;IACG,eAAe,CACnB,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,CAAC;IAS3B;;OAEG;IACH,OAAO,CAAC,eAAe;CAiBxB"}
|
|
@@ -13,14 +13,11 @@ export class EthereumTransactionService {
|
|
|
13
13
|
const chainId = parseInt(chainIdHex, 16);
|
|
14
14
|
// Create ethers provider and signer
|
|
15
15
|
const ethersProvider = new ethers.BrowserProvider(provider);
|
|
16
|
-
const signer = await ethersProvider.getSigner(request.from);
|
|
17
16
|
// Verify network hasn't changed
|
|
18
17
|
const network = await ethersProvider.getNetwork();
|
|
19
18
|
if (Number(network.chainId) !== chainId) {
|
|
20
19
|
throw new Error('Network changed during transaction setup');
|
|
21
20
|
}
|
|
22
|
-
// Create contract instance
|
|
23
|
-
const contract = new ethers.Contract(request.contractAddress, request.abi, signer);
|
|
24
21
|
// Build transaction options
|
|
25
22
|
const txOptions = {
|
|
26
23
|
...this.formatGasConfig(request.gasConfig)
|
|
@@ -29,12 +26,15 @@ export class EthereumTransactionService {
|
|
|
29
26
|
if (request.value) {
|
|
30
27
|
txOptions.value = request.value;
|
|
31
28
|
}
|
|
32
|
-
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
29
|
+
const iface = new ethers.Interface(request.abi);
|
|
30
|
+
const data = iface.encodeFunctionData(request.functionName, request.args || []);
|
|
31
|
+
const txRequest = {
|
|
32
|
+
to: request.contractAddress,
|
|
33
|
+
data,
|
|
34
|
+
value: request.value ?? 0n,
|
|
35
|
+
...txOptions
|
|
36
|
+
};
|
|
37
|
+
return txRequest;
|
|
38
38
|
}
|
|
39
39
|
catch (error) {
|
|
40
40
|
parseError(error);
|
|
@@ -113,11 +113,20 @@ export class EthereumTransactionService {
|
|
|
113
113
|
const calls = await Promise.all(request.calls.map(async (tx) => {
|
|
114
114
|
if ('contractAddress' in tx && 'abi' in tx) {
|
|
115
115
|
// Contract call
|
|
116
|
-
|
|
116
|
+
const result = await this.buildContractCall(provider, tx);
|
|
117
|
+
return {
|
|
118
|
+
to: result.to ?? '',
|
|
119
|
+
value: '0x' + (result.value ?? 0n).toString(16),
|
|
120
|
+
data: result.data
|
|
121
|
+
};
|
|
117
122
|
}
|
|
118
123
|
else if ('amount' in tx && typeof tx.amount === 'bigint') {
|
|
119
124
|
// Native transfer
|
|
120
|
-
|
|
125
|
+
const result = await this.buildNativeTransfer(provider, tx);
|
|
126
|
+
return {
|
|
127
|
+
to: result.to ?? '',
|
|
128
|
+
value: '0x' + (result.value ?? 0n).toString(16)
|
|
129
|
+
};
|
|
121
130
|
}
|
|
122
131
|
else {
|
|
123
132
|
throw new Error('Invalid transaction request type');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ethereum-transaction-service.js","sourceRoot":"","sources":["../../src/services/ethereum-transaction-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAU/B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAGjD;;GAEG;AACH,MAAM,OAAO,0BAA0B;IACrC,KAAK,CAAC,iBAAiB,CACrB,QAA0B,EAC1B,OAA+B;QAE/B,IAAI,CAAC;YACH,uBAAuB;YACvB,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;gBACxC,MAAM,EAAE,aAAa;aACtB,CAAC,CAAA;YACF,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;YAExC,oCAAoC;YACpC,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"ethereum-transaction-service.js","sourceRoot":"","sources":["../../src/services/ethereum-transaction-service.ts"],"names":[],"mappings":"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"}
|
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.3",
|
|
4
4
|
"description": "Injected connector for Universal Wallet Connector",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"bs58": "^6.0.0",
|
|
27
27
|
"buffer": "^6.0.3",
|
|
28
28
|
"ethers": "^6.15.0",
|
|
29
|
-
"@meshconnect/uwc-types": "0.2.
|
|
29
|
+
"@meshconnect/uwc-types": "0.2.3"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"typescript": "^5.9.2"
|
package/src/eip6963-discovery.ts
CHANGED
|
@@ -41,6 +41,43 @@ export interface DetectedWallet {
|
|
|
41
41
|
provider: EthereumProvider
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Polls for bridge wallets when UWCBridgeInitialized is true
|
|
46
|
+
* @returns Promise that resolves to an array of detected wallets from the bridge
|
|
47
|
+
*/
|
|
48
|
+
async function pollForBridgeWallets(): Promise<DetectedWallet[]> {
|
|
49
|
+
const pollInterval = 100 // Poll every 100ms
|
|
50
|
+
const maxPollTime = 3000 // Poll for maximum 3 seconds
|
|
51
|
+
const startTime = Date.now()
|
|
52
|
+
|
|
53
|
+
return new Promise(resolve => {
|
|
54
|
+
const poll = () => {
|
|
55
|
+
// Check if we've exceeded the max poll time
|
|
56
|
+
if (Date.now() - startTime > maxPollTime) {
|
|
57
|
+
resolve([])
|
|
58
|
+
return
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Check if window.eip6963Wallets is available
|
|
62
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
63
|
+
// @ts-ignore - window.eip6963Wallets is set by the bridge
|
|
64
|
+
if (window.eip6963Wallets && Array.isArray(window.eip6963Wallets)) {
|
|
65
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
66
|
+
// @ts-ignore
|
|
67
|
+
const bridgeWallets = window.eip6963Wallets as DetectedWallet[]
|
|
68
|
+
resolve(bridgeWallets)
|
|
69
|
+
return
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Continue polling
|
|
73
|
+
setTimeout(poll, pollInterval)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Start polling
|
|
77
|
+
poll()
|
|
78
|
+
})
|
|
79
|
+
}
|
|
80
|
+
|
|
44
81
|
/**
|
|
45
82
|
* Discovers wallets using EIP-6963 protocol
|
|
46
83
|
* @returns Promise that resolves to an array of detected wallets
|
|
@@ -50,7 +87,14 @@ export async function discoverWallets(): Promise<DetectedWallet[]> {
|
|
|
50
87
|
if (typeof window === 'undefined') {
|
|
51
88
|
return []
|
|
52
89
|
}
|
|
90
|
+
// Check if UWCBridgeInitialized is true
|
|
91
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
92
|
+
// @ts-ignore - window.UWCBridgeInitialized is set by the bridge
|
|
93
|
+
if (window.UWCBridgeInitialized === true) {
|
|
94
|
+
return pollForBridgeWallets()
|
|
95
|
+
}
|
|
53
96
|
|
|
97
|
+
// Original EIP-6963 discovery
|
|
54
98
|
return new Promise(resolve => {
|
|
55
99
|
const detectedWallets: DetectedWallet[] = []
|
|
56
100
|
const timeout = 1000 // Wait up to 1 second for wallets to announce
|
package/src/index.ts
CHANGED
|
@@ -2,6 +2,5 @@ export * from './injected-connector'
|
|
|
2
2
|
export { getAvailableWallets, type DetectedWallet } from './eip6963-discovery'
|
|
3
3
|
export {
|
|
4
4
|
getSolanaWallets,
|
|
5
|
-
type WalletStandardInfo
|
|
6
|
-
type SolanaWalletWithAdapter
|
|
5
|
+
type WalletStandardInfo
|
|
7
6
|
} from './wallet-standard-discovery'
|
|
@@ -11,7 +11,8 @@ import type {
|
|
|
11
11
|
TransactionRequest,
|
|
12
12
|
TransactionResult,
|
|
13
13
|
NetworkRpcMap,
|
|
14
|
-
EVMCapabilities
|
|
14
|
+
EVMCapabilities,
|
|
15
|
+
SignatureType
|
|
15
16
|
} from '@meshconnect/uwc-types'
|
|
16
17
|
|
|
17
18
|
import { EthereumWalletService } from './services/ethereum/ethereum-wallet-service'
|
|
@@ -162,7 +163,7 @@ export class InjectedConnector implements Connector {
|
|
|
162
163
|
async signMessage(
|
|
163
164
|
message: string,
|
|
164
165
|
provider: ExtensionInjectedProvider | IntegratedBrowserInjectedProvider
|
|
165
|
-
): Promise<
|
|
166
|
+
): Promise<SignatureType> {
|
|
166
167
|
if (!provider) {
|
|
167
168
|
throw new Error('Provider is required for message signing')
|
|
168
169
|
}
|
|
@@ -194,11 +195,15 @@ export class InjectedConnector implements Connector {
|
|
|
194
195
|
throw new Error('No connected Ethereum provider')
|
|
195
196
|
}
|
|
196
197
|
|
|
197
|
-
|
|
198
|
+
const signature = await this.signatureService.signEthereumMessage(
|
|
198
199
|
message,
|
|
199
200
|
currentAddress,
|
|
200
201
|
ethProvider
|
|
201
202
|
)
|
|
203
|
+
return {
|
|
204
|
+
type: 'standard',
|
|
205
|
+
signature: signature
|
|
206
|
+
}
|
|
202
207
|
} else if (namespace === 'solana') {
|
|
203
208
|
// Get the actual Solana adapter
|
|
204
209
|
const solanaAdapter = this.solanaService.getConnectedAdapter()
|
|
@@ -206,10 +211,14 @@ export class InjectedConnector implements Connector {
|
|
|
206
211
|
throw new Error('No connected Solana adapter')
|
|
207
212
|
}
|
|
208
213
|
|
|
209
|
-
|
|
214
|
+
const signature = await this.signatureService.signSolanaMessage(
|
|
210
215
|
message,
|
|
211
216
|
solanaAdapter
|
|
212
217
|
)
|
|
218
|
+
return {
|
|
219
|
+
type: 'standard',
|
|
220
|
+
signature: signature
|
|
221
|
+
}
|
|
213
222
|
} else {
|
|
214
223
|
throw new Error(`Signing not supported for namespace: ${namespace}`)
|
|
215
224
|
}
|