@meshconnect/uwc-injected-connector 0.10.3 → 0.10.4
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 +3 -1
- package/dist/injected-connector.d.ts.map +1 -1
- package/dist/injected-connector.js +8 -1
- package/dist/injected-connector.js.map +1 -1
- package/dist/services/solana/solana-transaction-service.d.ts +3 -1
- package/dist/services/solana/solana-transaction-service.d.ts.map +1 -1
- package/dist/services/solana/solana-transaction-service.js +27 -49
- package/dist/services/solana/solana-transaction-service.js.map +1 -1
- package/package.json +1 -1
- package/src/injected-connector.test.ts +65 -1
- package/src/injected-connector.ts +8 -1
- package/src/services/solana/solana-transaction-service.test.ts +214 -0
- package/src/services/solana/solana-transaction-service.ts +51 -63
|
@@ -36,7 +36,9 @@ export declare class InjectedConnector implements Connector {
|
|
|
36
36
|
*/
|
|
37
37
|
sendTransaction(request: TransactionRequest, provider: ExtensionInjectedProvider | IntegratedBrowserInjectedProvider): Promise<TransactionResult>;
|
|
38
38
|
/**
|
|
39
|
-
* Get EVM wallet capabilities
|
|
39
|
+
* Get EVM wallet capabilities (EIP-5792).
|
|
40
|
+
* Only valid for eip155 connections — non-EVM wallets don't support
|
|
41
|
+
* wallet_getCapabilities and the hex address format it requires.
|
|
40
42
|
*/
|
|
41
43
|
getWalletCapabilities(from: string, networks: Network[]): Promise<Record<string, EVMCapabilities>>;
|
|
42
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injected-connector.d.ts","sourceRoot":"","sources":["../src/injected-connector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EAEP,yBAAyB,EACzB,iCAAiC,EACjC,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,SAAS,EACT,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EAEjB,aAAa,EACb,eAAe,EACf,aAAa,EACb,cAAc,EACd,gBAAgB,EACjB,MAAM,wBAAwB,CAAA;AAY/B,qBAAa,iBAAkB,YAAW,SAAS;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,iBAAiB,CAAmB;IAC5C,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,kBAAkB,CAAoB;IAC9C,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,qBAAqB,CAAqC;gBAGhE,aAAa,GAAE,aAAkB,EACjC,eAAe,GAAE,cAAc,EAAO,EACtC,gBAAgB,CAAC,EAAE,gBAAgB;IA2BrC;;OAEG;IACG,mBAAmB,CACvB,SAAS,EAAE,SAAS,EACpB,eAAe,GAAE,cAAc,EAAO,GACrC,OAAO,CACN,yBAAyB,EAAE,GAC3B,wBAAwB,EAAE,GAC1B,sBAAsB,EAAE,GACxB,qBAAqB,EAAE,CAC1B;IAwDD;;OAEG;IACG,OAAO,CACX,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,eAAe,CAAC;IAyC3B;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,mBAAmB,CAAC;IAI/B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;OAEG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,aAAa,CAAC;IAiFzB;;OAEG;IACG,eAAe,CACnB,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,iBAAiB,CAAC;IA+D7B
|
|
1
|
+
{"version":3,"file":"injected-connector.d.ts","sourceRoot":"","sources":["../src/injected-connector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EAEP,yBAAyB,EACzB,iCAAiC,EACjC,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,SAAS,EACT,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EAEjB,aAAa,EACb,eAAe,EACf,aAAa,EACb,cAAc,EACd,gBAAgB,EACjB,MAAM,wBAAwB,CAAA;AAY/B,qBAAa,iBAAkB,YAAW,SAAS;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,iBAAiB,CAAmB;IAC5C,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,kBAAkB,CAAoB;IAC9C,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,qBAAqB,CAAqC;gBAGhE,aAAa,GAAE,aAAkB,EACjC,eAAe,GAAE,cAAc,EAAO,EACtC,gBAAgB,CAAC,EAAE,gBAAgB;IA2BrC;;OAEG;IACG,mBAAmB,CACvB,SAAS,EAAE,SAAS,EACpB,eAAe,GAAE,cAAc,EAAO,GACrC,OAAO,CACN,yBAAyB,EAAE,GAC3B,wBAAwB,EAAE,GAC1B,sBAAsB,EAAE,GACxB,qBAAqB,EAAE,CAC1B;IAwDD;;OAEG;IACG,OAAO,CACX,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,eAAe,CAAC;IAyC3B;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,mBAAmB,CAAC;IAI/B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;OAEG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,aAAa,CAAC;IAiFzB;;OAEG;IACG,eAAe,CACnB,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,iBAAiB,CAAC;IA+D7B;;;;OAIG;IACG,qBAAqB,CACzB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,EAAE,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAQ5C"}
|
|
@@ -234,9 +234,16 @@ export class InjectedConnector {
|
|
|
234
234
|
}
|
|
235
235
|
}
|
|
236
236
|
/**
|
|
237
|
-
* Get EVM wallet capabilities
|
|
237
|
+
* Get EVM wallet capabilities (EIP-5792).
|
|
238
|
+
* Only valid for eip155 connections — non-EVM wallets don't support
|
|
239
|
+
* wallet_getCapabilities and the hex address format it requires.
|
|
238
240
|
*/
|
|
239
241
|
async getWalletCapabilities(from, networks) {
|
|
242
|
+
const currentNetworkId = this.connectionManager.getCurrentNetworkId();
|
|
243
|
+
const namespace = currentNetworkId?.split(':')[0];
|
|
244
|
+
if (namespace !== 'eip155') {
|
|
245
|
+
return {};
|
|
246
|
+
}
|
|
240
247
|
return await this.ethereumService.getCapabilities(from, networks);
|
|
241
248
|
}
|
|
242
249
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injected-connector.js","sourceRoot":"","sources":["../src/injected-connector.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"injected-connector.js","sourceRoot":"","sources":["../src/injected-connector.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,9 @@ export declare class SolanaTransactionService {
|
|
|
20
20
|
*/
|
|
21
21
|
private getRpcUrl;
|
|
22
22
|
/**
|
|
23
|
-
*
|
|
23
|
+
* Two mutually exclusive paths:
|
|
24
|
+
* 1. sendSerializedTransaction(Uint8Array, string) — Comlink bridge safe.
|
|
25
|
+
* 2. sendTransaction(tx, Connection) — direct adapters only.
|
|
24
26
|
*/
|
|
25
27
|
private executeTransaction;
|
|
26
28
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solana-transaction-service.d.ts","sourceRoot":"","sources":["../../../src/services/solana/solana-transaction-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"solana-transaction-service.d.ts","sourceRoot":"","sources":["../../../src/services/solana/solana-transaction-service.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,aAAa,EACb,SAAS,EAGT,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,EACtB,SAAS,CAAC,EAAE,SAAS,GACpB,OAAO,CAAC,MAAM,CAAC;IA6BlB;;OAEG;YACW,mBAAmB;IAWjC;;OAEG;IACH,OAAO,CAAC,SAAS;IAMjB;;;;OAIG;YACW,kBAAkB;IA2BhC;;OAEG;YACW,qBAAqB;IAuCnC;;OAEG;YACW,uBAAuB;IAuCrC;;OAEG;YACW,mCAAmC;CAiClD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Transaction, Connection, PublicKey } from '@solana/web3.js';
|
|
1
|
+
import { Transaction, VersionedTransaction, Connection, PublicKey } from '@solana/web3.js';
|
|
2
2
|
import { parseError } from '../../utils/error-utils';
|
|
3
3
|
import { SolanaTransactionBuilder } from './solana-transaction-builder';
|
|
4
4
|
/**
|
|
@@ -53,33 +53,25 @@ export class SolanaTransactionService {
|
|
|
53
53
|
: 'https://api.mainnet-beta.solana.com';
|
|
54
54
|
}
|
|
55
55
|
/**
|
|
56
|
-
*
|
|
56
|
+
* Two mutually exclusive paths:
|
|
57
|
+
* 1. sendSerializedTransaction(Uint8Array, string) — Comlink bridge safe.
|
|
58
|
+
* 2. sendTransaction(tx, Connection) — direct adapters only.
|
|
57
59
|
*/
|
|
58
|
-
async executeTransaction(adapter, transaction, rpcUrl) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
requireAllSignatures: false,
|
|
65
|
-
verifySignatures: false
|
|
66
|
-
});
|
|
67
|
-
if (extendedAdapter.sendSerializedTransaction) {
|
|
68
|
-
transactionSignature = await extendedAdapter.sendSerializedTransaction(serializedTx, rpcUrl);
|
|
60
|
+
async executeTransaction(adapter, serializedTx, transaction, rpcUrl) {
|
|
61
|
+
const extendedAdapter = adapter;
|
|
62
|
+
if (extendedAdapter.sendSerializedTransaction) {
|
|
63
|
+
const signature = await extendedAdapter.sendSerializedTransaction(serializedTx, rpcUrl);
|
|
64
|
+
if (signature === undefined) {
|
|
65
|
+
throw new Error(`Couldn't get the transaction signature`);
|
|
69
66
|
}
|
|
67
|
+
return signature;
|
|
70
68
|
}
|
|
71
|
-
|
|
72
|
-
|
|
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) {
|
|
69
|
+
const connection = new Connection(rpcUrl);
|
|
70
|
+
const signature = await adapter.sendTransaction(transaction, connection);
|
|
71
|
+
if (signature === undefined) {
|
|
80
72
|
throw new Error(`Couldn't get the transaction signature`);
|
|
81
73
|
}
|
|
82
|
-
return
|
|
74
|
+
return signature;
|
|
83
75
|
}
|
|
84
76
|
/**
|
|
85
77
|
* Send native SOL transfer
|
|
@@ -98,9 +90,12 @@ export class SolanaTransactionService {
|
|
|
98
90
|
await this.builder.buildTransferInstructions(request);
|
|
99
91
|
transaction.recentBlockhash = request.blockhash;
|
|
100
92
|
transaction.feePayer = new PublicKey(request.from);
|
|
101
|
-
// Execute with helpers
|
|
102
93
|
const rpcUrl = this.getRpcUrl(networkId);
|
|
103
|
-
|
|
94
|
+
const serializedTx = transaction.serialize({
|
|
95
|
+
requireAllSignatures: false,
|
|
96
|
+
verifySignatures: false
|
|
97
|
+
});
|
|
98
|
+
return await this.executeTransaction(adapter, serializedTx, transaction, rpcUrl);
|
|
104
99
|
}
|
|
105
100
|
catch (error) {
|
|
106
101
|
parseError(error);
|
|
@@ -123,9 +118,12 @@ export class SolanaTransactionService {
|
|
|
123
118
|
await this.builder.buildTransferInstructions(request);
|
|
124
119
|
transaction.recentBlockhash = request.blockhash;
|
|
125
120
|
transaction.feePayer = new PublicKey(request.from);
|
|
126
|
-
// Execute with helpers
|
|
127
121
|
const rpcUrl = this.getRpcUrl(networkId);
|
|
128
|
-
|
|
122
|
+
const serializedTx = transaction.serialize({
|
|
123
|
+
requireAllSignatures: false,
|
|
124
|
+
verifySignatures: false
|
|
125
|
+
});
|
|
126
|
+
return await this.executeTransaction(adapter, serializedTx, transaction, rpcUrl);
|
|
129
127
|
}
|
|
130
128
|
catch (error) {
|
|
131
129
|
parseError(error);
|
|
@@ -144,29 +142,9 @@ export class SolanaTransactionService {
|
|
|
144
142
|
}
|
|
145
143
|
// Create versioned transaction
|
|
146
144
|
const transaction = await this.builder.getVersionedTransaction(new PublicKey(request.feePayer), request);
|
|
147
|
-
// Get RPC URL
|
|
148
145
|
const rpcUrl = this.getRpcUrl(networkId);
|
|
149
|
-
|
|
150
|
-
|
|
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;
|
|
146
|
+
const serializedTx = transaction.serialize();
|
|
147
|
+
return await this.executeTransaction(adapter, serializedTx, transaction, rpcUrl);
|
|
170
148
|
}
|
|
171
149
|
catch (error) {
|
|
172
150
|
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,
|
|
1
|
+
{"version":3,"file":"solana-transaction-service.js","sourceRoot":"","sources":["../../../src/services/solana/solana-transaction-service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -689,7 +689,10 @@ describe('InjectedConnector', () => {
|
|
|
689
689
|
})
|
|
690
690
|
|
|
691
691
|
describe('getWalletCapabilities', () => {
|
|
692
|
-
it('should delegate to ethereum service', async () => {
|
|
692
|
+
it('should delegate to ethereum service for eip155 namespace', async () => {
|
|
693
|
+
const { ConnectionManager } =
|
|
694
|
+
await import('./services/connection-manager')
|
|
695
|
+
const mockConnManager = vi.mocked(ConnectionManager).mock.results[0].value
|
|
693
696
|
const { EthereumWalletService } =
|
|
694
697
|
await import('./services/ethereum/ethereum-wallet-service')
|
|
695
698
|
const mockEthService = vi.mocked(EthereumWalletService).mock.results[0]
|
|
@@ -701,6 +704,7 @@ describe('InjectedConnector', () => {
|
|
|
701
704
|
}
|
|
702
705
|
}
|
|
703
706
|
mockEthService.getCapabilities.mockResolvedValue(mockCapabilities)
|
|
707
|
+
mockConnManager.getCurrentNetworkId.mockReturnValue('eip155:1')
|
|
704
708
|
|
|
705
709
|
const networks = [mockNetwork]
|
|
706
710
|
const result = await connector.getWalletCapabilities(
|
|
@@ -714,5 +718,65 @@ describe('InjectedConnector', () => {
|
|
|
714
718
|
)
|
|
715
719
|
expect(result).toEqual(mockCapabilities)
|
|
716
720
|
})
|
|
721
|
+
|
|
722
|
+
it('should NOT call ethereum service for solana namespace', async () => {
|
|
723
|
+
const { ConnectionManager } =
|
|
724
|
+
await import('./services/connection-manager')
|
|
725
|
+
const mockConnManager = vi.mocked(ConnectionManager).mock.results[0].value
|
|
726
|
+
const { EthereumWalletService } =
|
|
727
|
+
await import('./services/ethereum/ethereum-wallet-service')
|
|
728
|
+
const mockEthService = vi.mocked(EthereumWalletService).mock.results[0]
|
|
729
|
+
.value
|
|
730
|
+
|
|
731
|
+
mockConnManager.getCurrentNetworkId.mockReturnValue(
|
|
732
|
+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp'
|
|
733
|
+
)
|
|
734
|
+
|
|
735
|
+
const result = await connector.getWalletCapabilities(
|
|
736
|
+
'5SDmgvJWAeu8Pcp1WRV9uyeiRRrFC654n3vGPSuLEdhm',
|
|
737
|
+
[mockNetwork]
|
|
738
|
+
)
|
|
739
|
+
|
|
740
|
+
expect(mockEthService.getCapabilities).not.toHaveBeenCalled()
|
|
741
|
+
expect(result).toEqual({})
|
|
742
|
+
})
|
|
743
|
+
|
|
744
|
+
it('should NOT call ethereum service for tron namespace', async () => {
|
|
745
|
+
const { ConnectionManager } =
|
|
746
|
+
await import('./services/connection-manager')
|
|
747
|
+
const mockConnManager = vi.mocked(ConnectionManager).mock.results[0].value
|
|
748
|
+
const { EthereumWalletService } =
|
|
749
|
+
await import('./services/ethereum/ethereum-wallet-service')
|
|
750
|
+
const mockEthService = vi.mocked(EthereumWalletService).mock.results[0]
|
|
751
|
+
.value
|
|
752
|
+
|
|
753
|
+
mockConnManager.getCurrentNetworkId.mockReturnValue('tron:0x2b6653dc')
|
|
754
|
+
|
|
755
|
+
const result = await connector.getWalletCapabilities('TRonAddress123', [
|
|
756
|
+
mockNetwork
|
|
757
|
+
])
|
|
758
|
+
|
|
759
|
+
expect(mockEthService.getCapabilities).not.toHaveBeenCalled()
|
|
760
|
+
expect(result).toEqual({})
|
|
761
|
+
})
|
|
762
|
+
|
|
763
|
+
it('should return empty when no active network', async () => {
|
|
764
|
+
const { ConnectionManager } =
|
|
765
|
+
await import('./services/connection-manager')
|
|
766
|
+
const mockConnManager = vi.mocked(ConnectionManager).mock.results[0].value
|
|
767
|
+
const { EthereumWalletService } =
|
|
768
|
+
await import('./services/ethereum/ethereum-wallet-service')
|
|
769
|
+
const mockEthService = vi.mocked(EthereumWalletService).mock.results[0]
|
|
770
|
+
.value
|
|
771
|
+
|
|
772
|
+
mockConnManager.getCurrentNetworkId.mockReturnValue(null)
|
|
773
|
+
|
|
774
|
+
const result = await connector.getWalletCapabilities('0xaddress', [
|
|
775
|
+
mockNetwork
|
|
776
|
+
])
|
|
777
|
+
|
|
778
|
+
expect(mockEthService.getCapabilities).not.toHaveBeenCalled()
|
|
779
|
+
expect(result).toEqual({})
|
|
780
|
+
})
|
|
717
781
|
})
|
|
718
782
|
})
|
|
@@ -361,12 +361,19 @@ export class InjectedConnector implements Connector {
|
|
|
361
361
|
}
|
|
362
362
|
|
|
363
363
|
/**
|
|
364
|
-
* Get EVM wallet capabilities
|
|
364
|
+
* Get EVM wallet capabilities (EIP-5792).
|
|
365
|
+
* Only valid for eip155 connections — non-EVM wallets don't support
|
|
366
|
+
* wallet_getCapabilities and the hex address format it requires.
|
|
365
367
|
*/
|
|
366
368
|
async getWalletCapabilities(
|
|
367
369
|
from: string,
|
|
368
370
|
networks: Network[]
|
|
369
371
|
): Promise<Record<string, EVMCapabilities>> {
|
|
372
|
+
const currentNetworkId = this.connectionManager.getCurrentNetworkId()
|
|
373
|
+
const namespace = currentNetworkId?.split(':')[0]
|
|
374
|
+
if (namespace !== 'eip155') {
|
|
375
|
+
return {}
|
|
376
|
+
}
|
|
370
377
|
return await this.ethereumService.getCapabilities(from, networks)
|
|
371
378
|
}
|
|
372
379
|
}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, vi } from 'vitest'
|
|
2
|
+
import { SolanaTransactionService } from './solana-transaction-service'
|
|
3
|
+
import type { SolanaNativeTransferRequest } from '@meshconnect/uwc-types'
|
|
4
|
+
import type { ExtendedStandardWalletAdapter } from '../../wallet-standard-discovery'
|
|
5
|
+
|
|
6
|
+
vi.mock('@solana/web3.js', () => {
|
|
7
|
+
class PublicKey {
|
|
8
|
+
private key: string
|
|
9
|
+
constructor(key: string) {
|
|
10
|
+
this.key = key
|
|
11
|
+
}
|
|
12
|
+
toBase58() {
|
|
13
|
+
return this.key
|
|
14
|
+
}
|
|
15
|
+
toBuffer() {
|
|
16
|
+
return new Uint8Array(32)
|
|
17
|
+
}
|
|
18
|
+
toString() {
|
|
19
|
+
return this.key
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
class Transaction {
|
|
23
|
+
instructions: unknown[] = []
|
|
24
|
+
recentBlockhash: string | null = null
|
|
25
|
+
feePayer: unknown = null
|
|
26
|
+
serialize() {
|
|
27
|
+
return new Uint8Array([1, 2, 3])
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
class Connection {
|
|
31
|
+
constructor(_rpcUrl: string) {}
|
|
32
|
+
}
|
|
33
|
+
return { PublicKey, Transaction, Connection }
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
const mockGetVersionedTransaction = vi.fn()
|
|
37
|
+
|
|
38
|
+
vi.mock('./solana-transaction-builder', () => {
|
|
39
|
+
return {
|
|
40
|
+
SolanaTransactionBuilder: class {
|
|
41
|
+
buildTransferInstructions = vi.fn().mockResolvedValue([])
|
|
42
|
+
getVersionedTransaction = mockGetVersionedTransaction
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
describe('SolanaTransactionService', () => {
|
|
48
|
+
let service: SolanaTransactionService
|
|
49
|
+
|
|
50
|
+
beforeEach(() => {
|
|
51
|
+
vi.clearAllMocks()
|
|
52
|
+
service = new SolanaTransactionService({})
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
describe('executeTransaction — bridge adapter (has sendSerializedTransaction)', () => {
|
|
56
|
+
const nativeRequest: SolanaNativeTransferRequest = {
|
|
57
|
+
from: '5SDmgvJWAeu8Pcp1WRV9uyeiRRrFC654n3vGPSuLEdhm',
|
|
58
|
+
to: '2cXWFBHqJamsAsgZjZgLrDDCvszrRVdMMaaCp9gQTsWL',
|
|
59
|
+
amount: BigInt(100000),
|
|
60
|
+
blockhash: '3PQ5dzi2ZCTfnu5aoncPBW1LBkqGGA54xpakg4JlNF1X'
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
it('should use sendSerializedTransaction when available', async () => {
|
|
64
|
+
const mockAdapter = {
|
|
65
|
+
publicKey: { toBase58: vi.fn().mockResolvedValue(nativeRequest.from) },
|
|
66
|
+
sendSerializedTransaction: vi
|
|
67
|
+
.fn()
|
|
68
|
+
.mockResolvedValue('tx-signature-123'),
|
|
69
|
+
sendTransaction: vi.fn()
|
|
70
|
+
} as unknown as ExtendedStandardWalletAdapter
|
|
71
|
+
|
|
72
|
+
const result = await service.sendTransaction(
|
|
73
|
+
nativeRequest,
|
|
74
|
+
mockAdapter,
|
|
75
|
+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp'
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
expect(result).toBe('tx-signature-123')
|
|
79
|
+
expect(mockAdapter.sendSerializedTransaction).toHaveBeenCalled()
|
|
80
|
+
expect(mockAdapter.sendTransaction).not.toHaveBeenCalled()
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
it('should propagate sendSerializedTransaction errors instead of falling back to sendTransaction', async () => {
|
|
84
|
+
const walletError = new Error('Snap wallet_invokeMethod failed')
|
|
85
|
+
const mockAdapter = {
|
|
86
|
+
publicKey: { toBase58: vi.fn().mockResolvedValue(nativeRequest.from) },
|
|
87
|
+
sendSerializedTransaction: vi.fn().mockRejectedValue(walletError),
|
|
88
|
+
sendTransaction: vi.fn()
|
|
89
|
+
} as unknown as ExtendedStandardWalletAdapter
|
|
90
|
+
|
|
91
|
+
await expect(
|
|
92
|
+
service.sendTransaction(
|
|
93
|
+
nativeRequest,
|
|
94
|
+
mockAdapter,
|
|
95
|
+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp'
|
|
96
|
+
)
|
|
97
|
+
).rejects.toThrow()
|
|
98
|
+
|
|
99
|
+
// The critical assertion: sendTransaction (non-bridge-safe path) must
|
|
100
|
+
// NOT be called. Through a Comlink bridge proxy, passing Transaction
|
|
101
|
+
// and Connection objects via postMessage causes DataCloneError because
|
|
102
|
+
// they contain functions that can't be structured-cloned.
|
|
103
|
+
expect(mockAdapter.sendTransaction).not.toHaveBeenCalled()
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
it('should preserve the original wallet error message, not mask it with DataCloneError', async () => {
|
|
107
|
+
const walletError = new Error('Unserializable return value')
|
|
108
|
+
const mockAdapter = {
|
|
109
|
+
publicKey: { toBase58: vi.fn().mockResolvedValue(nativeRequest.from) },
|
|
110
|
+
sendSerializedTransaction: vi.fn().mockRejectedValue(walletError),
|
|
111
|
+
sendTransaction: vi.fn()
|
|
112
|
+
} as unknown as ExtendedStandardWalletAdapter
|
|
113
|
+
|
|
114
|
+
try {
|
|
115
|
+
await service.sendTransaction(
|
|
116
|
+
nativeRequest,
|
|
117
|
+
mockAdapter,
|
|
118
|
+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp'
|
|
119
|
+
)
|
|
120
|
+
expect.unreachable('should have thrown')
|
|
121
|
+
} catch (error: unknown) {
|
|
122
|
+
const err = error as { message: string }
|
|
123
|
+
expect(err.message).toContain('Unserializable return value')
|
|
124
|
+
}
|
|
125
|
+
})
|
|
126
|
+
})
|
|
127
|
+
|
|
128
|
+
describe('executeTransaction — direct adapter (no sendSerializedTransaction)', () => {
|
|
129
|
+
const nativeRequest: SolanaNativeTransferRequest = {
|
|
130
|
+
from: '5SDmgvJWAeu8Pcp1WRV9uyeiRRrFC654n3vGPSuLEdhm',
|
|
131
|
+
to: '2cXWFBHqJamsAsgZjZgLrDDCvszrRVdMMaaCp9gQTsWL',
|
|
132
|
+
amount: BigInt(100000),
|
|
133
|
+
blockhash: '3PQ5dzi2ZCTfnu5aoncPBW1LBkqGGA54xpakg4JlNF1X'
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
it('should use sendTransaction directly when sendSerializedTransaction is not available', async () => {
|
|
137
|
+
const mockAdapter = {
|
|
138
|
+
publicKey: { toBase58: vi.fn().mockResolvedValue(nativeRequest.from) },
|
|
139
|
+
sendTransaction: vi.fn().mockResolvedValue('tx-direct-456')
|
|
140
|
+
} as any
|
|
141
|
+
|
|
142
|
+
const result = await service.sendTransaction(
|
|
143
|
+
nativeRequest,
|
|
144
|
+
mockAdapter,
|
|
145
|
+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp'
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
expect(result).toBe('tx-direct-456')
|
|
149
|
+
expect(mockAdapter.sendTransaction).toHaveBeenCalled()
|
|
150
|
+
})
|
|
151
|
+
})
|
|
152
|
+
|
|
153
|
+
describe('sendGenericTransferWithInstructions — versioned transactions', () => {
|
|
154
|
+
const genericRequest = {
|
|
155
|
+
feePayer: '5SDmgvJWAeu8Pcp1WRV9uyeiRRrFC654n3vGPSuLEdhm',
|
|
156
|
+
blockhash: '3PQ5dzi2ZCTfnu5aoncPBW1LBkqGGA54xpakg4JlNF1X',
|
|
157
|
+
instructions: [{ programId: 'abc', keys: [], data: new Uint8Array() }]
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
it('should use sendSerializedTransaction for versioned transactions through bridge', async () => {
|
|
161
|
+
const mockVersionedTx = {
|
|
162
|
+
serialize: vi.fn().mockReturnValue(new Uint8Array([4, 5, 6]))
|
|
163
|
+
}
|
|
164
|
+
mockGetVersionedTransaction.mockResolvedValue(mockVersionedTx)
|
|
165
|
+
|
|
166
|
+
const mockAdapter = {
|
|
167
|
+
publicKey: {
|
|
168
|
+
toBase58: vi.fn().mockResolvedValue(genericRequest.feePayer)
|
|
169
|
+
},
|
|
170
|
+
sendSerializedTransaction: vi
|
|
171
|
+
.fn()
|
|
172
|
+
.mockResolvedValue('versioned-tx-sig'),
|
|
173
|
+
sendTransaction: vi.fn()
|
|
174
|
+
} as unknown as ExtendedStandardWalletAdapter
|
|
175
|
+
|
|
176
|
+
const result = await service.sendTransaction(
|
|
177
|
+
genericRequest as any,
|
|
178
|
+
mockAdapter,
|
|
179
|
+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp'
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
expect(result).toBe('versioned-tx-sig')
|
|
183
|
+
expect(mockAdapter.sendSerializedTransaction).toHaveBeenCalled()
|
|
184
|
+
expect(mockAdapter.sendTransaction).not.toHaveBeenCalled()
|
|
185
|
+
})
|
|
186
|
+
|
|
187
|
+
it('should propagate errors from versioned transaction path without fallback', async () => {
|
|
188
|
+
const mockVersionedTx = {
|
|
189
|
+
serialize: vi.fn().mockReturnValue(new Uint8Array([4, 5, 6]))
|
|
190
|
+
}
|
|
191
|
+
mockGetVersionedTransaction.mockResolvedValue(mockVersionedTx)
|
|
192
|
+
|
|
193
|
+
const mockAdapter = {
|
|
194
|
+
publicKey: {
|
|
195
|
+
toBase58: vi.fn().mockResolvedValue(genericRequest.feePayer)
|
|
196
|
+
},
|
|
197
|
+
sendSerializedTransaction: vi
|
|
198
|
+
.fn()
|
|
199
|
+
.mockRejectedValue(new Error('Snap failed')),
|
|
200
|
+
sendTransaction: vi.fn()
|
|
201
|
+
} as unknown as ExtendedStandardWalletAdapter
|
|
202
|
+
|
|
203
|
+
await expect(
|
|
204
|
+
service.sendTransaction(
|
|
205
|
+
genericRequest as any,
|
|
206
|
+
mockAdapter,
|
|
207
|
+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp'
|
|
208
|
+
)
|
|
209
|
+
).rejects.toThrow()
|
|
210
|
+
|
|
211
|
+
expect(mockAdapter.sendTransaction).not.toHaveBeenCalled()
|
|
212
|
+
})
|
|
213
|
+
})
|
|
214
|
+
})
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
Transaction,
|
|
3
|
+
VersionedTransaction,
|
|
4
|
+
Connection,
|
|
5
|
+
PublicKey
|
|
6
|
+
} from '@solana/web3.js'
|
|
2
7
|
import type {
|
|
3
8
|
SolanaNativeTransferRequest,
|
|
4
9
|
NetworkRpcMap,
|
|
@@ -86,45 +91,35 @@ export class SolanaTransactionService {
|
|
|
86
91
|
}
|
|
87
92
|
|
|
88
93
|
/**
|
|
89
|
-
*
|
|
94
|
+
* Two mutually exclusive paths:
|
|
95
|
+
* 1. sendSerializedTransaction(Uint8Array, string) — Comlink bridge safe.
|
|
96
|
+
* 2. sendTransaction(tx, Connection) — direct adapters only.
|
|
90
97
|
*/
|
|
91
98
|
private async executeTransaction(
|
|
92
99
|
adapter: SolanaAdapter,
|
|
93
|
-
|
|
100
|
+
serializedTx: Uint8Array,
|
|
101
|
+
transaction: Transaction | VersionedTransaction,
|
|
94
102
|
rpcUrl: string
|
|
95
103
|
): Promise<string> {
|
|
96
|
-
|
|
104
|
+
const extendedAdapter = adapter as ExtendedStandardWalletAdapter
|
|
97
105
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
requireAllSignatures: false,
|
|
103
|
-
verifySignatures: false
|
|
104
|
-
})
|
|
105
|
-
if (extendedAdapter.sendSerializedTransaction) {
|
|
106
|
-
transactionSignature = await extendedAdapter.sendSerializedTransaction(
|
|
107
|
-
serializedTx,
|
|
108
|
-
rpcUrl
|
|
109
|
-
)
|
|
110
|
-
}
|
|
111
|
-
} catch {
|
|
112
|
-
// Fallback to regular sendTransaction
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
// If sendSerializedTransaction didn't work or wasn't available
|
|
116
|
-
if (!transactionSignature) {
|
|
117
|
-
const connection = new Connection(rpcUrl)
|
|
118
|
-
transactionSignature = await adapter.sendTransaction(
|
|
119
|
-
transaction,
|
|
120
|
-
connection
|
|
106
|
+
if (extendedAdapter.sendSerializedTransaction) {
|
|
107
|
+
const signature = await extendedAdapter.sendSerializedTransaction(
|
|
108
|
+
serializedTx,
|
|
109
|
+
rpcUrl
|
|
121
110
|
)
|
|
111
|
+
if (signature === undefined) {
|
|
112
|
+
throw new Error(`Couldn't get the transaction signature`)
|
|
113
|
+
}
|
|
114
|
+
return signature
|
|
122
115
|
}
|
|
123
116
|
|
|
124
|
-
|
|
117
|
+
const connection = new Connection(rpcUrl)
|
|
118
|
+
const signature = await adapter.sendTransaction(transaction, connection)
|
|
119
|
+
if (signature === undefined) {
|
|
125
120
|
throw new Error(`Couldn't get the transaction signature`)
|
|
126
121
|
}
|
|
127
|
-
return
|
|
122
|
+
return signature
|
|
128
123
|
}
|
|
129
124
|
|
|
130
125
|
/**
|
|
@@ -152,10 +147,18 @@ export class SolanaTransactionService {
|
|
|
152
147
|
transaction.recentBlockhash = request.blockhash
|
|
153
148
|
transaction.feePayer = new PublicKey(request.from)
|
|
154
149
|
|
|
155
|
-
// Execute with helpers
|
|
156
150
|
const rpcUrl = this.getRpcUrl(networkId)
|
|
151
|
+
const serializedTx = transaction.serialize({
|
|
152
|
+
requireAllSignatures: false,
|
|
153
|
+
verifySignatures: false
|
|
154
|
+
})
|
|
157
155
|
|
|
158
|
-
return await this.executeTransaction(
|
|
156
|
+
return await this.executeTransaction(
|
|
157
|
+
adapter,
|
|
158
|
+
serializedTx,
|
|
159
|
+
transaction,
|
|
160
|
+
rpcUrl
|
|
161
|
+
)
|
|
159
162
|
} catch (error) {
|
|
160
163
|
parseError(error)
|
|
161
164
|
}
|
|
@@ -186,10 +189,18 @@ export class SolanaTransactionService {
|
|
|
186
189
|
transaction.recentBlockhash = request.blockhash
|
|
187
190
|
transaction.feePayer = new PublicKey(request.from)
|
|
188
191
|
|
|
189
|
-
// Execute with helpers
|
|
190
192
|
const rpcUrl = this.getRpcUrl(networkId)
|
|
193
|
+
const serializedTx = transaction.serialize({
|
|
194
|
+
requireAllSignatures: false,
|
|
195
|
+
verifySignatures: false
|
|
196
|
+
})
|
|
191
197
|
|
|
192
|
-
return await this.executeTransaction(
|
|
198
|
+
return await this.executeTransaction(
|
|
199
|
+
adapter,
|
|
200
|
+
serializedTx,
|
|
201
|
+
transaction,
|
|
202
|
+
rpcUrl
|
|
203
|
+
)
|
|
193
204
|
} catch (error) {
|
|
194
205
|
parseError(error)
|
|
195
206
|
}
|
|
@@ -218,38 +229,15 @@ export class SolanaTransactionService {
|
|
|
218
229
|
request
|
|
219
230
|
)
|
|
220
231
|
|
|
221
|
-
// Get RPC URL
|
|
222
232
|
const rpcUrl = this.getRpcUrl(networkId)
|
|
233
|
+
const serializedTx = transaction.serialize()
|
|
223
234
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
if (extendedAdapter.sendSerializedTransaction) {
|
|
231
|
-
transactionSignature =
|
|
232
|
-
await extendedAdapter.sendSerializedTransaction(
|
|
233
|
-
serializedTx,
|
|
234
|
-
rpcUrl
|
|
235
|
-
)
|
|
236
|
-
}
|
|
237
|
-
} catch {
|
|
238
|
-
// Fallback to regular sendTransaction
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
if (!transactionSignature) {
|
|
242
|
-
const connection = new Connection(rpcUrl)
|
|
243
|
-
transactionSignature = await adapter.sendTransaction(
|
|
244
|
-
transaction,
|
|
245
|
-
connection
|
|
246
|
-
)
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
if (transactionSignature === undefined) {
|
|
250
|
-
throw new Error(`Couldn't get the transaction signature`)
|
|
251
|
-
}
|
|
252
|
-
return transactionSignature
|
|
235
|
+
return await this.executeTransaction(
|
|
236
|
+
adapter,
|
|
237
|
+
serializedTx,
|
|
238
|
+
transaction,
|
|
239
|
+
rpcUrl
|
|
240
|
+
)
|
|
253
241
|
} catch (error) {
|
|
254
242
|
parseError(error)
|
|
255
243
|
}
|