// @vitest-environment node // Reason: @solana/web3.js fails `instanceof Uint8Array` checks under jsdom (see // solana-transaction-service.test.ts); building the Solana transaction needs node. import { describe, it, expect, vi } from 'vitest' import { Keypair } from '@solana/web3.js' import bs58 from 'bs58' import type { SolanaNativeTransferRequest, WalletConnectConfig } from '@meshconnect/uwc-types' import { WalletConnectConnector } from './wallet-connect-connector' describe('WalletConnectConnector.sendTransaction — Solana signAndSend result', () => { const SOL_CHAIN_ID = 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' const fromAddress = Keypair.generate().publicKey.toBase58() const signature = bs58.encode(new Uint8Array(64).fill(9)) // Drives the public connector API through TransactionService's namespace routing into the // Solana service, with a SignClient whose wallet approved signAndSend (Ledger Live's session). function connectedToLedger(walletResponse: unknown) { const request = vi.fn().mockResolvedValue(walletResponse) const connector = new WalletConnectConnector({ projectId: 'test' } as WalletConnectConfig) const internals = connector as unknown as { walletConnectClient: { getClient: () => Promise } connectionService: { setSession: (s: unknown) => void setActiveNetwork: (n: unknown) => void setActiveAddress: (a: string) => void } } internals.walletConnectClient.getClient = async () => ({ request }) internals.connectionService.setSession({ topic: 'ledger-topic', namespaces: { solana: { accounts: [`${SOL_CHAIN_ID}:${fromAddress}`], methods: ['solana_signTransaction', 'solana_signAndSendTransaction'], events: [] } } }) internals.connectionService.setActiveNetwork({ id: SOL_CHAIN_ID }) internals.connectionService.setActiveAddress(fromAddress) return { connector, request } } it('resolves the signature string, not the { signature } response object (ONC-1964)', async () => { const { connector, request } = connectedToLedger({ signature }) const result = await connector.sendTransaction({ from: fromAddress, to: Keypair.generate().publicKey.toBase58(), amount: 1n, blockhash: '11111111111111111111111111111111' } as SolanaNativeTransferRequest) expect(result).toBe(signature) expect(request).toHaveBeenCalledTimes(1) expect(request.mock.calls[0]?.[0]).toMatchObject({ topic: 'ledger-topic', chainId: SOL_CHAIN_ID, request: { method: 'solana_signAndSendTransaction' } }) }) })