@meshconnect/uwc-bridge-parent 1.3.1 → 1.4.0-snapshot.10d2a10

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.
@@ -9,10 +9,11 @@ export interface EthereumProvider {
9
9
  removeListener?: (event: string, handler: (...args: any[]) => void) => void;
10
10
  }
11
11
  interface ExtendedStandardWalletAdapter extends StandardWalletAdapter {
12
- customFunctions: ('sendSerializedTransaction' | 'signSerializedTransaction' | 'signAllSerializedTransactions')[];
12
+ customFunctions: ('sendSerializedTransaction' | 'signSerializedTransaction' | 'signAllSerializedTransactions' | 'signSolanaTransactionBytes')[];
13
13
  sendSerializedTransaction: (transaction: ArrayBufferLike, rpcUrl: string) => Promise<string>;
14
14
  signSerializedTransaction: (transaction: ArrayBufferLike) => Promise<Error | Transaction>;
15
15
  signAllSerializedTransactions: (transactions: ArrayBufferLike[]) => Promise<Error | Transaction[]>;
16
+ signSolanaTransactionBytes: (transaction: ArrayBufferLike, connectedAddress?: string) => Promise<Uint8Array>;
16
17
  }
17
18
  export interface WalletStandardInfo {
18
19
  uuid: string;
@@ -1 +1 @@
1
- {"version":3,"file":"BridgeParent.d.ts","sourceRoot":"","sources":["../src/BridgeParent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BridgeParent.d.ts","sourceRoot":"","sources":["../src/BridgeParent.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { isWalletAdapterCompatibleStandardWallet, WalletReadyState } from '@sola
4
4
  import { Connection, Transaction, VersionedTransaction } from '@solana/web3.js';
5
5
  import { StandardWalletAdapter } from '@solana/wallet-standard-wallet-adapter-base';
6
6
  import { BaseWalletAdapter } from './BaseWalletAdapter';
7
+ import { signSolanaBytes } from './signSolanaBytes';
7
8
  export class BridgeParent {
8
9
  iframe;
9
10
  parentAPI = null;
@@ -20,12 +21,17 @@ export class BridgeParent {
20
21
  if (!this.iframe || !this.iframe.contentWindow) {
21
22
  return;
22
23
  }
23
- // For eip6963 and solana wallets we can start discovery as soon as the iframe loads, but for tron we need to look for specific IDs that we get from the child iframe
24
- const eip6963Wallets = await this.discovereip6963Wallets();
24
+ // Expose the parentAPI to the child as soon as possible. EIP-6963
25
+ // discovery takes ~100ms (it waits for announcements), but we don't want
26
+ // to block the child from calling discoverTronWallets / discoverTonWallets
27
+ // while that's in flight — those paths are independent. The readiness
28
+ // flags gate the child from reading a still-empty array.
29
+ const eip6963Promise = this.discovereip6963Wallets();
30
+ // Solana is synchronous, so run it inline (no benefit to a microtask hop)
25
31
  const walletStandardWallets = this.getSolanaWallets();
26
32
  this.parentAPI = {
27
- eip6963Wallets: eip6963Wallets,
28
- eip6963WalletsReady: true,
33
+ eip6963Wallets: [],
34
+ eip6963WalletsReady: false,
29
35
  walletStandardWallets: walletStandardWallets,
30
36
  walletStandardWalletsReady: true,
31
37
  tronWallets: [],
@@ -53,6 +59,14 @@ export class BridgeParent {
53
59
  const iframeOrigin = new URL(this.iframe.src, window.location.href).origin;
54
60
  this.endpoint = Comlink.windowEndpoint(this.iframe.contentWindow, window, iframeOrigin);
55
61
  Comlink.expose(this.parentAPI, this.endpoint);
62
+ // Populate EIP-6963 results in the background. The child polls the
63
+ // ready flag; it will see them on the next read after we flip it.
64
+ eip6963Promise.then(eip6963Wallets => {
65
+ if (!this.parentAPI)
66
+ return;
67
+ this.parentAPI.eip6963Wallets = eip6963Wallets;
68
+ this.parentAPI.eip6963WalletsReady = true;
69
+ });
56
70
  }
57
71
  async discovereip6963Wallets() {
58
72
  return new Promise(resolve => {
@@ -165,8 +179,16 @@ export class BridgeParent {
165
179
  customFunctions: [
166
180
  'sendSerializedTransaction',
167
181
  'signAllSerializedTransactions',
168
- 'signSerializedTransaction'
182
+ 'signSerializedTransaction',
183
+ 'signSolanaTransactionBytes'
169
184
  ],
185
+ // Sign on the parent (where the wallet is) so only bytes cross
186
+ // Comlink — a Transaction object loses its prototype via
187
+ // structured clone. connectedAddress (from the child) wins over
188
+ // the parent publicKey, which may have drifted.
189
+ signSolanaTransactionBytes: async (transaction, connectedAddress) => {
190
+ return signSolanaBytes(adapter, new Uint8Array(transaction), connectedAddress);
191
+ },
170
192
  sendSerializedTransaction: async (transaction, rpcUrl) => {
171
193
  const connection = new Connection(rpcUrl);
172
194
  const uint8Array = new Uint8Array(transaction);
@@ -308,8 +330,15 @@ export class BridgeParent {
308
330
  customFunctions: [
309
331
  'sendSerializedTransaction',
310
332
  'signAllSerializedTransactions',
311
- 'signSerializedTransaction'
333
+ 'signSerializedTransaction',
334
+ 'signSolanaTransactionBytes'
312
335
  ],
336
+ // Legacy base adapter (no Wallet Standard feature) — signSolanaBytes
337
+ // falls back to deserialize → sign → reserialize. See Standard
338
+ // wrapper above for the connectedAddress rationale.
339
+ signSolanaTransactionBytes: async (transaction, connectedAddress) => {
340
+ return signSolanaBytes(baseAdapter, new Uint8Array(transaction), connectedAddress);
341
+ },
313
342
  sendSerializedTransaction: async (transaction, rpcUrl) => {
314
343
  const connection = new Connection(rpcUrl);
315
344
  const uint8Array = new Uint8Array(transaction);
@@ -1 +1 @@
1
- {"version":3,"file":"BridgeParent.js","sourceRoot":"","sources":["../src/BridgeParent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BridgeParent.js","sourceRoot":"","sources":["../src/BridgeParent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { Transaction, VersionedTransaction } from '@solana/web3.js';
2
+ export interface SignableSolanaAdapter {
3
+ publicKey?: {
4
+ toBase58(): string;
5
+ } | null;
6
+ signTransaction?: ((tx: Transaction | VersionedTransaction) => Promise<Transaction | VersionedTransaction>) | undefined;
7
+ wallet?: {
8
+ accounts: ReadonlyArray<{
9
+ address: string;
10
+ }>;
11
+ features: Record<string, unknown>;
12
+ } | undefined;
13
+ }
14
+ /**
15
+ * Sign raw Solana tx bytes → raw signed bytes. Sign-only (the relay broadcasts).
16
+ * Prefers the Wallet Standard feature (no Transaction object → avoids the
17
+ * serialize() crash on some mobile WebViews); falls back to the adapter signer
18
+ * for legacy wallets. `connectedAddress` (from the iframe child) wins over the
19
+ * adapter publicKey, which can drift. The caller verifies the message wasn't
20
+ * altered (see InjectedConnector Path 1).
21
+ */
22
+ export declare function signSolanaBytes(adapter: SignableSolanaAdapter, serializedTx: Uint8Array, connectedAddress?: string): Promise<Uint8Array>;
23
+ //# sourceMappingURL=signSolanaBytes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signSolanaBytes.d.ts","sourceRoot":"","sources":["../src/signSolanaBytes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAanE,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACzC,eAAe,CAAC,EACZ,CAAC,CACC,EAAE,EAAE,WAAW,GAAG,oBAAoB,KACnC,OAAO,CAAC,WAAW,GAAG,oBAAoB,CAAC,CAAC,GACjD,SAAS,CAAA;IACb,MAAM,CAAC,EACH;QACE,QAAQ,EAAE,aAAa,CAAC;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;QAC5C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAClC,GACD,SAAS,CAAA;CACd;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,qBAAqB,EAC9B,YAAY,EAAE,UAAU,EACxB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,UAAU,CAAC,CAuCrB"}
@@ -0,0 +1,74 @@
1
+ import { Transaction, VersionedTransaction } from '@solana/web3.js';
2
+ const SOLANA_SIGN_FEATURE = 'solana:signTransaction';
3
+ /**
4
+ * Sign raw Solana tx bytes → raw signed bytes. Sign-only (the relay broadcasts).
5
+ * Prefers the Wallet Standard feature (no Transaction object → avoids the
6
+ * serialize() crash on some mobile WebViews); falls back to the adapter signer
7
+ * for legacy wallets. `connectedAddress` (from the iframe child) wins over the
8
+ * adapter publicKey, which can drift. The caller verifies the message wasn't
9
+ * altered (see InjectedConnector Path 1).
10
+ */
11
+ export async function signSolanaBytes(adapter, serializedTx, connectedAddress) {
12
+ const wallet = adapter.wallet;
13
+ if (wallet &&
14
+ SOLANA_SIGN_FEATURE in wallet.features &&
15
+ wallet.accounts.length > 0) {
16
+ const account = resolveSigningAccount(wallet.accounts, connectedAddress ?? adapter.publicKey?.toBase58());
17
+ const feature = wallet.features[SOLANA_SIGN_FEATURE];
18
+ const [output] = await feature.signTransaction({
19
+ account,
20
+ transaction: serializedTx
21
+ });
22
+ if (!output?.signedTransaction) {
23
+ throw new Error('Wallet returned no signed transaction');
24
+ }
25
+ // Caller (InjectedConnector Path 1) verifies the message — keeps this
26
+ // package @meshconnect-free.
27
+ return output.signedTransaction;
28
+ }
29
+ // Legacy fallback: build a Transaction and use the adapter's signer.
30
+ if (adapter.signTransaction === undefined) {
31
+ throw new Error('Adapter does not support signTransaction');
32
+ }
33
+ const tx = deserialize(serializedTx);
34
+ const signed = await adapter.signTransaction(tx);
35
+ // Serialize without the fee-payer's signature — the relay fills that slot.
36
+ return signed instanceof VersionedTransaction
37
+ ? signed.serialize()
38
+ : new Uint8Array(signed.serialize({
39
+ requireAllSignatures: false,
40
+ verifySignatures: false
41
+ }));
42
+ }
43
+ /**
44
+ * Pick which account signs. We must sign with the account the user connected —
45
+ * never guess. A wrong signer produces a useless signature for a payment, so we
46
+ * throw instead of silently falling back to the first account.
47
+ */
48
+ function resolveSigningAccount(accounts, connectedAddress) {
49
+ if (connectedAddress) {
50
+ const match = accounts.find(a => a.address === connectedAddress);
51
+ if (!match) {
52
+ throw new Error('Connected Solana account not found in the wallet — refusing to sign with a different account');
53
+ }
54
+ return match;
55
+ }
56
+ // No explicit selection is only safe when the wallet has exactly one account.
57
+ if (accounts.length === 1)
58
+ return accounts[0];
59
+ throw new Error('Cannot determine which Solana account to sign with — multiple accounts and none selected');
60
+ }
61
+ function deserialize(bytes) {
62
+ try {
63
+ return VersionedTransaction.deserialize(bytes);
64
+ }
65
+ catch {
66
+ try {
67
+ return Transaction.from(bytes);
68
+ }
69
+ catch {
70
+ throw new Error('Failed to deserialize transaction as either versioned or legacy format');
71
+ }
72
+ }
73
+ }
74
+ //# sourceMappingURL=signSolanaBytes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signSolanaBytes.js","sourceRoot":"","sources":["../src/signSolanaBytes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAEnE,MAAM,mBAAmB,GAAG,wBAAwB,CAAA;AA0BpD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAA8B,EAC9B,YAAwB,EACxB,gBAAyB;IAEzB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IAC7B,IACE,MAAM;QACN,mBAAmB,IAAI,MAAM,CAAC,QAAQ;QACtC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAC1B,CAAC;QACD,MAAM,OAAO,GAAG,qBAAqB,CACnC,MAAM,CAAC,QAAQ,EACf,gBAAgB,IAAI,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,CAClD,CAAA;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAsB,CAAA;QACzE,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC;YAC7C,OAAO;YACP,WAAW,EAAE,YAAY;SAC1B,CAAC,CAAA;QACF,IAAI,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;QAC1D,CAAC;QACD,sEAAsE;QACtE,6BAA6B;QAC7B,OAAO,MAAM,CAAC,iBAAiB,CAAA;IACjC,CAAC;IAED,qEAAqE;IACrE,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;IAC7D,CAAC;IACD,MAAM,EAAE,GAAG,WAAW,CAAC,YAAY,CAAC,CAAA;IACpC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;IAChD,2EAA2E;IAC3E,OAAO,MAAM,YAAY,oBAAoB;QAC3C,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE;QACpB,CAAC,CAAC,IAAI,UAAU,CACZ,MAAM,CAAC,SAAS,CAAC;YACf,oBAAoB,EAAE,KAAK;YAC3B,gBAAgB,EAAE,KAAK;SACxB,CAAC,CACH,CAAA;AACP,CAAC;AAED;;;;GAIG;AACH,SAAS,qBAAqB,CAC5B,QAA0B,EAC1B,gBAAoC;IAEpC,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,gBAAgB,CAAC,CAAA;QAChE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,8FAA8F,CAC/F,CAAA;QACH,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,8EAA8E;IAC9E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAE,CAAA;IAC9C,MAAM,IAAI,KAAK,CACb,0FAA0F,CAC3F,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAiB;IACpC,IAAI,CAAC;QACH,OAAO,oBAAoB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAA;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=signSolanaBytes.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signSolanaBytes.test.d.ts","sourceRoot":"","sources":["../src/signSolanaBytes.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,194 @@
1
+ // @vitest-environment node
2
+ //
3
+ // Node env (not jsdom): @solana/web3.js's VersionedTransaction.deserialize relies
4
+ // on a Uint8Array prototype check that fails under jsdom's polyfilled Buffer.
5
+ // Same reason as injected-connector/src/signSolanaTransactionBytes.test.ts.
6
+ import { describe, it, expect, vi } from 'vitest';
7
+ import { Keypair, SystemProgram, TransactionMessage, VersionedTransaction } from '@solana/web3.js';
8
+ import { signSolanaBytes } from './signSolanaBytes';
9
+ const payer = Keypair.generate();
10
+ const recipient = Keypair.generate().publicKey;
11
+ function buildSerializedV0Tx() {
12
+ const msg = new TransactionMessage({
13
+ payerKey: payer.publicKey,
14
+ recentBlockhash: '11111111111111111111111111111111',
15
+ instructions: [
16
+ SystemProgram.transfer({
17
+ fromPubkey: payer.publicKey,
18
+ toPubkey: recipient,
19
+ lamports: 1
20
+ })
21
+ ]
22
+ }).compileToV0Message();
23
+ return new VersionedTransaction(msg).serialize();
24
+ }
25
+ function buildSignedV0Bytes() {
26
+ const msg = new TransactionMessage({
27
+ payerKey: payer.publicKey,
28
+ recentBlockhash: '11111111111111111111111111111111',
29
+ instructions: [
30
+ SystemProgram.transfer({
31
+ fromPubkey: payer.publicKey,
32
+ toPubkey: recipient,
33
+ lamports: 1
34
+ })
35
+ ]
36
+ }).compileToV0Message();
37
+ const tx = new VersionedTransaction(msg);
38
+ tx.sign([payer]);
39
+ return tx.serialize();
40
+ }
41
+ describe('signSolanaBytes (uwc-bridge-parent)', () => {
42
+ // ── Preferred path: raw Wallet Standard feature ───────────────────────────
43
+ it('signs via the solana:signTransaction feature with raw bytes (no Transaction object built)', async () => {
44
+ const signedBytes = buildSignedV0Bytes();
45
+ const featureSignTx = vi
46
+ .fn()
47
+ .mockResolvedValue([{ signedTransaction: signedBytes }]);
48
+ const account = { address: payer.publicKey.toBase58() };
49
+ const adapter = {
50
+ publicKey: { toBase58: () => payer.publicKey.toBase58() },
51
+ // adapter.signTransaction is present but must NOT be used on this path.
52
+ signTransaction: vi.fn(),
53
+ wallet: {
54
+ accounts: [account],
55
+ features: {
56
+ 'solana:signTransaction': { signTransaction: featureSignTx }
57
+ }
58
+ }
59
+ };
60
+ const serialized = buildSerializedV0Tx();
61
+ const result = await signSolanaBytes(adapter, serialized);
62
+ expect(result).toBe(signedBytes);
63
+ // Raw bytes in — the exact same reference, never a deserialized object.
64
+ expect(featureSignTx).toHaveBeenCalledWith({
65
+ account,
66
+ transaction: serialized
67
+ });
68
+ expect(adapter.signTransaction).not.toHaveBeenCalled();
69
+ });
70
+ it('signs with the connected account, not blindly the first one', async () => {
71
+ const signedBytes = buildSignedV0Bytes();
72
+ const featureSignTx = vi
73
+ .fn()
74
+ .mockResolvedValue([{ signedTransaction: signedBytes }]);
75
+ const accountAAA = { address: 'AAA' };
76
+ const accountBBB = { address: 'BBB' };
77
+ const adapter = {
78
+ publicKey: { toBase58: () => 'BBB' },
79
+ wallet: {
80
+ accounts: [accountAAA, accountBBB],
81
+ features: {
82
+ 'solana:signTransaction': { signTransaction: featureSignTx }
83
+ }
84
+ }
85
+ };
86
+ await signSolanaBytes(adapter, buildSerializedV0Tx());
87
+ expect(featureSignTx.mock.calls[0]?.[0]?.account).toBe(accountBBB);
88
+ });
89
+ it('prefers the explicit connectedAddress over the adapter publicKey', async () => {
90
+ // The parent's publicKey may have drifted; the caller-supplied address wins.
91
+ const signedBytes = buildSignedV0Bytes();
92
+ const featureSignTx = vi
93
+ .fn()
94
+ .mockResolvedValue([{ signedTransaction: signedBytes }]);
95
+ const accountAAA = { address: 'AAA' };
96
+ const accountBBB = { address: 'BBB' };
97
+ const adapter = {
98
+ publicKey: { toBase58: () => 'AAA' }, // parent's current account
99
+ wallet: {
100
+ accounts: [accountAAA, accountBBB],
101
+ features: {
102
+ 'solana:signTransaction': { signTransaction: featureSignTx }
103
+ }
104
+ }
105
+ };
106
+ await signSolanaBytes(adapter, buildSerializedV0Tx(), 'BBB');
107
+ expect(featureSignTx.mock.calls[0]?.[0]?.account).toBe(accountBBB);
108
+ });
109
+ it('throws when the explicit connectedAddress is not in the wallet, even if publicKey is', async () => {
110
+ const featureSignTx = vi.fn();
111
+ const adapter = {
112
+ publicKey: { toBase58: () => 'AAA' }, // in the wallet, but not what we asked for
113
+ wallet: {
114
+ accounts: [{ address: 'AAA' }, { address: 'BBB' }],
115
+ features: {
116
+ 'solana:signTransaction': { signTransaction: featureSignTx }
117
+ }
118
+ }
119
+ };
120
+ await expect(signSolanaBytes(adapter, buildSerializedV0Tx(), 'NOT_IN_WALLET')).rejects.toThrow('Connected Solana account not found in the wallet');
121
+ expect(featureSignTx).not.toHaveBeenCalled();
122
+ });
123
+ it('throws when the connected account is not in the wallet (never signs with a different account)', async () => {
124
+ const featureSignTx = vi.fn();
125
+ const adapter = {
126
+ publicKey: { toBase58: () => 'NOT_IN_WALLET' },
127
+ wallet: {
128
+ accounts: [{ address: 'AAA' }, { address: 'BBB' }],
129
+ features: {
130
+ 'solana:signTransaction': { signTransaction: featureSignTx }
131
+ }
132
+ }
133
+ };
134
+ await expect(signSolanaBytes(adapter, buildSerializedV0Tx())).rejects.toThrow('Connected Solana account not found in the wallet');
135
+ expect(featureSignTx).not.toHaveBeenCalled();
136
+ });
137
+ it('throws when no account is selected and several exist', async () => {
138
+ const featureSignTx = vi.fn();
139
+ const adapter = {
140
+ publicKey: null, // toBase58 yields undefined → no selection
141
+ wallet: {
142
+ accounts: [{ address: 'AAA' }, { address: 'BBB' }],
143
+ features: {
144
+ 'solana:signTransaction': { signTransaction: featureSignTx }
145
+ }
146
+ }
147
+ };
148
+ await expect(signSolanaBytes(adapter, buildSerializedV0Tx())).rejects.toThrow('Cannot determine which Solana account to sign with');
149
+ });
150
+ // ── Legacy fallback: deserialize → adapter.signTransaction → reserialize ───
151
+ it('falls back to adapter.signTransaction when the wallet has no Standard feature', async () => {
152
+ const adapterSignTx = vi
153
+ .fn()
154
+ .mockResolvedValue(VersionedTransaction.deserialize(buildSignedV0Bytes()));
155
+ const adapter = {
156
+ // No `wallet` → legacy base adapter shape.
157
+ signTransaction: adapterSignTx
158
+ };
159
+ const result = await signSolanaBytes(adapter, buildSerializedV0Tx());
160
+ expect(adapterSignTx).toHaveBeenCalledOnce();
161
+ // The adapter receives a deserialized Transaction object, not raw bytes.
162
+ expect(adapterSignTx.mock.calls[0]?.[0]).toBeInstanceOf(VersionedTransaction);
163
+ expect(result).toBeInstanceOf(Uint8Array);
164
+ expect(result.length).toBeGreaterThan(0);
165
+ });
166
+ it('throws when a legacy adapter cannot sign at all', async () => {
167
+ const adapter = {}; // no feature, no signTransaction
168
+ await expect(signSolanaBytes(adapter, buildSerializedV0Tx())).rejects.toThrow('Adapter does not support signTransaction');
169
+ });
170
+ // ── Invariant: sign-only, never broadcasts ────────────────────────────────
171
+ it('INVARIANT: never invokes any send/broadcast method', async () => {
172
+ const signAndSend = vi.fn();
173
+ const sendTransaction = vi.fn();
174
+ const featureSignTx = vi
175
+ .fn()
176
+ .mockResolvedValue([{ signedTransaction: buildSignedV0Bytes() }]);
177
+ const adapter = {
178
+ publicKey: { toBase58: () => payer.publicKey.toBase58() },
179
+ signTransaction: vi.fn(),
180
+ sendTransaction,
181
+ signAndSendTransaction: signAndSend,
182
+ wallet: {
183
+ accounts: [{ address: payer.publicKey.toBase58() }],
184
+ features: {
185
+ 'solana:signTransaction': { signTransaction: featureSignTx }
186
+ }
187
+ }
188
+ };
189
+ await signSolanaBytes(adapter, buildSerializedV0Tx());
190
+ expect(signAndSend).not.toHaveBeenCalled();
191
+ expect(sendTransaction).not.toHaveBeenCalled();
192
+ });
193
+ });
194
+ //# sourceMappingURL=signSolanaBytes.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signSolanaBytes.test.js","sourceRoot":"","sources":["../src/signSolanaBytes.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meshconnect/uwc-bridge-parent",
3
- "version": "1.3.1",
3
+ "version": "1.4.0-snapshot.10d2a10",
4
4
  "description": "Parent window bridge for Universal Wallet Connector",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -8,6 +8,7 @@ import {
8
8
  import { Connection, Transaction, VersionedTransaction } from '@solana/web3.js'
9
9
  import { StandardWalletAdapter } from '@solana/wallet-standard-wallet-adapter-base'
10
10
  import { BaseWalletAdapter } from './BaseWalletAdapter'
11
+ import { signSolanaBytes } from './signSolanaBytes'
11
12
 
12
13
  export interface EthereumProvider {
13
14
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -23,6 +24,7 @@ interface ExtendedStandardWalletAdapter extends StandardWalletAdapter {
23
24
  | 'sendSerializedTransaction'
24
25
  | 'signSerializedTransaction'
25
26
  | 'signAllSerializedTransactions'
27
+ | 'signSolanaTransactionBytes'
26
28
  )[]
27
29
  sendSerializedTransaction: (
28
30
  transaction: ArrayBufferLike,
@@ -34,6 +36,10 @@ interface ExtendedStandardWalletAdapter extends StandardWalletAdapter {
34
36
  signAllSerializedTransactions: (
35
37
  transactions: ArrayBufferLike[]
36
38
  ) => Promise<Error | Transaction[]>
39
+ signSolanaTransactionBytes: (
40
+ transaction: ArrayBufferLike,
41
+ connectedAddress?: string
42
+ ) => Promise<Uint8Array>
37
43
  }
38
44
 
39
45
  export interface WalletStandardInfo {
@@ -125,13 +131,18 @@ export class BridgeParent {
125
131
  return
126
132
  }
127
133
 
128
- // For eip6963 and solana wallets we can start discovery as soon as the iframe loads, but for tron we need to look for specific IDs that we get from the child iframe
129
- const eip6963Wallets = await this.discovereip6963Wallets()
134
+ // Expose the parentAPI to the child as soon as possible. EIP-6963
135
+ // discovery takes ~100ms (it waits for announcements), but we don't want
136
+ // to block the child from calling discoverTronWallets / discoverTonWallets
137
+ // while that's in flight — those paths are independent. The readiness
138
+ // flags gate the child from reading a still-empty array.
139
+ const eip6963Promise = this.discovereip6963Wallets()
140
+ // Solana is synchronous, so run it inline (no benefit to a microtask hop)
130
141
  const walletStandardWallets = this.getSolanaWallets()
131
142
 
132
143
  this.parentAPI = {
133
- eip6963Wallets: eip6963Wallets,
134
- eip6963WalletsReady: true,
144
+ eip6963Wallets: [],
145
+ eip6963WalletsReady: false,
135
146
  walletStandardWallets: walletStandardWallets,
136
147
  walletStandardWalletsReady: true,
137
148
  tronWallets: [],
@@ -169,6 +180,14 @@ export class BridgeParent {
169
180
  )
170
181
 
171
182
  Comlink.expose(this.parentAPI, this.endpoint)
183
+
184
+ // Populate EIP-6963 results in the background. The child polls the
185
+ // ready flag; it will see them on the next read after we flip it.
186
+ eip6963Promise.then(eip6963Wallets => {
187
+ if (!this.parentAPI) return
188
+ this.parentAPI.eip6963Wallets = eip6963Wallets
189
+ this.parentAPI.eip6963WalletsReady = true
190
+ })
172
191
  }
173
192
 
174
193
  private async discovereip6963Wallets(): Promise<DetectedWallet[]> {
@@ -304,8 +323,23 @@ export class BridgeParent {
304
323
  customFunctions: [
305
324
  'sendSerializedTransaction',
306
325
  'signAllSerializedTransactions',
307
- 'signSerializedTransaction'
326
+ 'signSerializedTransaction',
327
+ 'signSolanaTransactionBytes'
308
328
  ],
329
+ // Sign on the parent (where the wallet is) so only bytes cross
330
+ // Comlink — a Transaction object loses its prototype via
331
+ // structured clone. connectedAddress (from the child) wins over
332
+ // the parent publicKey, which may have drifted.
333
+ signSolanaTransactionBytes: async (
334
+ transaction: ArrayBufferLike,
335
+ connectedAddress?: string
336
+ ): Promise<Uint8Array> => {
337
+ return signSolanaBytes(
338
+ adapter,
339
+ new Uint8Array(transaction),
340
+ connectedAddress
341
+ )
342
+ },
309
343
  sendSerializedTransaction: async (
310
344
  transaction: ArrayBufferLike,
311
345
  rpcUrl: string
@@ -481,8 +515,22 @@ export class BridgeParent {
481
515
  customFunctions: [
482
516
  'sendSerializedTransaction',
483
517
  'signAllSerializedTransactions',
484
- 'signSerializedTransaction'
518
+ 'signSerializedTransaction',
519
+ 'signSolanaTransactionBytes'
485
520
  ],
521
+ // Legacy base adapter (no Wallet Standard feature) — signSolanaBytes
522
+ // falls back to deserialize → sign → reserialize. See Standard
523
+ // wrapper above for the connectedAddress rationale.
524
+ signSolanaTransactionBytes: async (
525
+ transaction: ArrayBufferLike,
526
+ connectedAddress?: string
527
+ ): Promise<Uint8Array> => {
528
+ return signSolanaBytes(
529
+ baseAdapter,
530
+ new Uint8Array(transaction),
531
+ connectedAddress
532
+ )
533
+ },
486
534
  sendSerializedTransaction: async (
487
535
  transaction: ArrayBufferLike,
488
536
  rpcUrl: string
@@ -0,0 +1,237 @@
1
+ // @vitest-environment node
2
+ //
3
+ // Node env (not jsdom): @solana/web3.js's VersionedTransaction.deserialize relies
4
+ // on a Uint8Array prototype check that fails under jsdom's polyfilled Buffer.
5
+ // Same reason as injected-connector/src/signSolanaTransactionBytes.test.ts.
6
+ import { describe, it, expect, vi } from 'vitest'
7
+ import {
8
+ Keypair,
9
+ SystemProgram,
10
+ TransactionMessage,
11
+ VersionedTransaction
12
+ } from '@solana/web3.js'
13
+ import { signSolanaBytes, type SignableSolanaAdapter } from './signSolanaBytes'
14
+
15
+ const payer = Keypair.generate()
16
+ const recipient = Keypair.generate().publicKey
17
+
18
+ function buildSerializedV0Tx(): Uint8Array {
19
+ const msg = new TransactionMessage({
20
+ payerKey: payer.publicKey,
21
+ recentBlockhash: '11111111111111111111111111111111',
22
+ instructions: [
23
+ SystemProgram.transfer({
24
+ fromPubkey: payer.publicKey,
25
+ toPubkey: recipient,
26
+ lamports: 1
27
+ })
28
+ ]
29
+ }).compileToV0Message()
30
+ return new VersionedTransaction(msg).serialize()
31
+ }
32
+
33
+ function buildSignedV0Bytes(): Uint8Array {
34
+ const msg = new TransactionMessage({
35
+ payerKey: payer.publicKey,
36
+ recentBlockhash: '11111111111111111111111111111111',
37
+ instructions: [
38
+ SystemProgram.transfer({
39
+ fromPubkey: payer.publicKey,
40
+ toPubkey: recipient,
41
+ lamports: 1
42
+ })
43
+ ]
44
+ }).compileToV0Message()
45
+ const tx = new VersionedTransaction(msg)
46
+ tx.sign([payer])
47
+ return tx.serialize()
48
+ }
49
+
50
+ describe('signSolanaBytes (uwc-bridge-parent)', () => {
51
+ // ── Preferred path: raw Wallet Standard feature ───────────────────────────
52
+
53
+ it('signs via the solana:signTransaction feature with raw bytes (no Transaction object built)', async () => {
54
+ const signedBytes = buildSignedV0Bytes()
55
+ const featureSignTx = vi
56
+ .fn()
57
+ .mockResolvedValue([{ signedTransaction: signedBytes }])
58
+ const account = { address: payer.publicKey.toBase58() }
59
+ const adapter: SignableSolanaAdapter = {
60
+ publicKey: { toBase58: () => payer.publicKey.toBase58() },
61
+ // adapter.signTransaction is present but must NOT be used on this path.
62
+ signTransaction: vi.fn(),
63
+ wallet: {
64
+ accounts: [account],
65
+ features: {
66
+ 'solana:signTransaction': { signTransaction: featureSignTx }
67
+ }
68
+ }
69
+ }
70
+
71
+ const serialized = buildSerializedV0Tx()
72
+ const result = await signSolanaBytes(adapter, serialized)
73
+
74
+ expect(result).toBe(signedBytes)
75
+ // Raw bytes in — the exact same reference, never a deserialized object.
76
+ expect(featureSignTx).toHaveBeenCalledWith({
77
+ account,
78
+ transaction: serialized
79
+ })
80
+ expect(adapter.signTransaction).not.toHaveBeenCalled()
81
+ })
82
+
83
+ it('signs with the connected account, not blindly the first one', async () => {
84
+ const signedBytes = buildSignedV0Bytes()
85
+ const featureSignTx = vi
86
+ .fn()
87
+ .mockResolvedValue([{ signedTransaction: signedBytes }])
88
+ const accountAAA = { address: 'AAA' }
89
+ const accountBBB = { address: 'BBB' }
90
+ const adapter: SignableSolanaAdapter = {
91
+ publicKey: { toBase58: () => 'BBB' },
92
+ wallet: {
93
+ accounts: [accountAAA, accountBBB],
94
+ features: {
95
+ 'solana:signTransaction': { signTransaction: featureSignTx }
96
+ }
97
+ }
98
+ }
99
+
100
+ await signSolanaBytes(adapter, buildSerializedV0Tx())
101
+
102
+ expect(featureSignTx.mock.calls[0]?.[0]?.account).toBe(accountBBB)
103
+ })
104
+
105
+ it('prefers the explicit connectedAddress over the adapter publicKey', async () => {
106
+ // The parent's publicKey may have drifted; the caller-supplied address wins.
107
+ const signedBytes = buildSignedV0Bytes()
108
+ const featureSignTx = vi
109
+ .fn()
110
+ .mockResolvedValue([{ signedTransaction: signedBytes }])
111
+ const accountAAA = { address: 'AAA' }
112
+ const accountBBB = { address: 'BBB' }
113
+ const adapter: SignableSolanaAdapter = {
114
+ publicKey: { toBase58: () => 'AAA' }, // parent's current account
115
+ wallet: {
116
+ accounts: [accountAAA, accountBBB],
117
+ features: {
118
+ 'solana:signTransaction': { signTransaction: featureSignTx }
119
+ }
120
+ }
121
+ }
122
+
123
+ await signSolanaBytes(adapter, buildSerializedV0Tx(), 'BBB')
124
+
125
+ expect(featureSignTx.mock.calls[0]?.[0]?.account).toBe(accountBBB)
126
+ })
127
+
128
+ it('throws when the explicit connectedAddress is not in the wallet, even if publicKey is', async () => {
129
+ const featureSignTx = vi.fn()
130
+ const adapter: SignableSolanaAdapter = {
131
+ publicKey: { toBase58: () => 'AAA' }, // in the wallet, but not what we asked for
132
+ wallet: {
133
+ accounts: [{ address: 'AAA' }, { address: 'BBB' }],
134
+ features: {
135
+ 'solana:signTransaction': { signTransaction: featureSignTx }
136
+ }
137
+ }
138
+ }
139
+
140
+ await expect(
141
+ signSolanaBytes(adapter, buildSerializedV0Tx(), 'NOT_IN_WALLET')
142
+ ).rejects.toThrow('Connected Solana account not found in the wallet')
143
+ expect(featureSignTx).not.toHaveBeenCalled()
144
+ })
145
+
146
+ it('throws when the connected account is not in the wallet (never signs with a different account)', async () => {
147
+ const featureSignTx = vi.fn()
148
+ const adapter: SignableSolanaAdapter = {
149
+ publicKey: { toBase58: () => 'NOT_IN_WALLET' },
150
+ wallet: {
151
+ accounts: [{ address: 'AAA' }, { address: 'BBB' }],
152
+ features: {
153
+ 'solana:signTransaction': { signTransaction: featureSignTx }
154
+ }
155
+ }
156
+ }
157
+
158
+ await expect(
159
+ signSolanaBytes(adapter, buildSerializedV0Tx())
160
+ ).rejects.toThrow('Connected Solana account not found in the wallet')
161
+ expect(featureSignTx).not.toHaveBeenCalled()
162
+ })
163
+
164
+ it('throws when no account is selected and several exist', async () => {
165
+ const featureSignTx = vi.fn()
166
+ const adapter: SignableSolanaAdapter = {
167
+ publicKey: null, // toBase58 yields undefined → no selection
168
+ wallet: {
169
+ accounts: [{ address: 'AAA' }, { address: 'BBB' }],
170
+ features: {
171
+ 'solana:signTransaction': { signTransaction: featureSignTx }
172
+ }
173
+ }
174
+ }
175
+
176
+ await expect(
177
+ signSolanaBytes(adapter, buildSerializedV0Tx())
178
+ ).rejects.toThrow('Cannot determine which Solana account to sign with')
179
+ })
180
+
181
+ // ── Legacy fallback: deserialize → adapter.signTransaction → reserialize ───
182
+
183
+ it('falls back to adapter.signTransaction when the wallet has no Standard feature', async () => {
184
+ const adapterSignTx = vi
185
+ .fn()
186
+ .mockResolvedValue(VersionedTransaction.deserialize(buildSignedV0Bytes()))
187
+ const adapter: SignableSolanaAdapter = {
188
+ // No `wallet` → legacy base adapter shape.
189
+ signTransaction: adapterSignTx
190
+ }
191
+
192
+ const result = await signSolanaBytes(adapter, buildSerializedV0Tx())
193
+
194
+ expect(adapterSignTx).toHaveBeenCalledOnce()
195
+ // The adapter receives a deserialized Transaction object, not raw bytes.
196
+ expect(adapterSignTx.mock.calls[0]?.[0]).toBeInstanceOf(
197
+ VersionedTransaction
198
+ )
199
+ expect(result).toBeInstanceOf(Uint8Array)
200
+ expect(result.length).toBeGreaterThan(0)
201
+ })
202
+
203
+ it('throws when a legacy adapter cannot sign at all', async () => {
204
+ const adapter: SignableSolanaAdapter = {} // no feature, no signTransaction
205
+
206
+ await expect(
207
+ signSolanaBytes(adapter, buildSerializedV0Tx())
208
+ ).rejects.toThrow('Adapter does not support signTransaction')
209
+ })
210
+
211
+ // ── Invariant: sign-only, never broadcasts ────────────────────────────────
212
+
213
+ it('INVARIANT: never invokes any send/broadcast method', async () => {
214
+ const signAndSend = vi.fn()
215
+ const sendTransaction = vi.fn()
216
+ const featureSignTx = vi
217
+ .fn()
218
+ .mockResolvedValue([{ signedTransaction: buildSignedV0Bytes() }])
219
+ const adapter = {
220
+ publicKey: { toBase58: () => payer.publicKey.toBase58() },
221
+ signTransaction: vi.fn(),
222
+ sendTransaction,
223
+ signAndSendTransaction: signAndSend,
224
+ wallet: {
225
+ accounts: [{ address: payer.publicKey.toBase58() }],
226
+ features: {
227
+ 'solana:signTransaction': { signTransaction: featureSignTx }
228
+ }
229
+ }
230
+ } as unknown as SignableSolanaAdapter
231
+
232
+ await signSolanaBytes(adapter, buildSerializedV0Tx())
233
+
234
+ expect(signAndSend).not.toHaveBeenCalled()
235
+ expect(sendTransaction).not.toHaveBeenCalled()
236
+ })
237
+ })
@@ -0,0 +1,119 @@
1
+ import { Transaction, VersionedTransaction } from '@solana/web3.js'
2
+
3
+ const SOLANA_SIGN_FEATURE = 'solana:signTransaction'
4
+
5
+ // Wallet Standard `solana:signTransaction` feature: raw bytes in, raw bytes out.
6
+ interface SolanaSignFeature {
7
+ signTransaction: (input: {
8
+ account: { address: string }
9
+ transaction: Uint8Array
10
+ }) => Promise<Array<{ signedTransaction: Uint8Array }>>
11
+ }
12
+
13
+ // Minimal Solana adapter shape. `wallet` exists only on Wallet Standard adapters.
14
+ export interface SignableSolanaAdapter {
15
+ publicKey?: { toBase58(): string } | null
16
+ signTransaction?:
17
+ | ((
18
+ tx: Transaction | VersionedTransaction
19
+ ) => Promise<Transaction | VersionedTransaction>)
20
+ | undefined
21
+ wallet?:
22
+ | {
23
+ accounts: ReadonlyArray<{ address: string }>
24
+ features: Record<string, unknown>
25
+ }
26
+ | undefined
27
+ }
28
+
29
+ /**
30
+ * Sign raw Solana tx bytes → raw signed bytes. Sign-only (the relay broadcasts).
31
+ * Prefers the Wallet Standard feature (no Transaction object → avoids the
32
+ * serialize() crash on some mobile WebViews); falls back to the adapter signer
33
+ * for legacy wallets. `connectedAddress` (from the iframe child) wins over the
34
+ * adapter publicKey, which can drift. The caller verifies the message wasn't
35
+ * altered (see InjectedConnector Path 1).
36
+ */
37
+ export async function signSolanaBytes(
38
+ adapter: SignableSolanaAdapter,
39
+ serializedTx: Uint8Array,
40
+ connectedAddress?: string
41
+ ): Promise<Uint8Array> {
42
+ const wallet = adapter.wallet
43
+ if (
44
+ wallet &&
45
+ SOLANA_SIGN_FEATURE in wallet.features &&
46
+ wallet.accounts.length > 0
47
+ ) {
48
+ const account = resolveSigningAccount(
49
+ wallet.accounts,
50
+ connectedAddress ?? adapter.publicKey?.toBase58()
51
+ )
52
+ const feature = wallet.features[SOLANA_SIGN_FEATURE] as SolanaSignFeature
53
+ const [output] = await feature.signTransaction({
54
+ account,
55
+ transaction: serializedTx
56
+ })
57
+ if (!output?.signedTransaction) {
58
+ throw new Error('Wallet returned no signed transaction')
59
+ }
60
+ // Caller (InjectedConnector Path 1) verifies the message — keeps this
61
+ // package @meshconnect-free.
62
+ return output.signedTransaction
63
+ }
64
+
65
+ // Legacy fallback: build a Transaction and use the adapter's signer.
66
+ if (adapter.signTransaction === undefined) {
67
+ throw new Error('Adapter does not support signTransaction')
68
+ }
69
+ const tx = deserialize(serializedTx)
70
+ const signed = await adapter.signTransaction(tx)
71
+ // Serialize without the fee-payer's signature — the relay fills that slot.
72
+ return signed instanceof VersionedTransaction
73
+ ? signed.serialize()
74
+ : new Uint8Array(
75
+ signed.serialize({
76
+ requireAllSignatures: false,
77
+ verifySignatures: false
78
+ })
79
+ )
80
+ }
81
+
82
+ /**
83
+ * Pick which account signs. We must sign with the account the user connected —
84
+ * never guess. A wrong signer produces a useless signature for a payment, so we
85
+ * throw instead of silently falling back to the first account.
86
+ */
87
+ function resolveSigningAccount<T extends { address: string }>(
88
+ accounts: ReadonlyArray<T>,
89
+ connectedAddress: string | undefined
90
+ ): T {
91
+ if (connectedAddress) {
92
+ const match = accounts.find(a => a.address === connectedAddress)
93
+ if (!match) {
94
+ throw new Error(
95
+ 'Connected Solana account not found in the wallet — refusing to sign with a different account'
96
+ )
97
+ }
98
+ return match
99
+ }
100
+ // No explicit selection is only safe when the wallet has exactly one account.
101
+ if (accounts.length === 1) return accounts[0]!
102
+ throw new Error(
103
+ 'Cannot determine which Solana account to sign with — multiple accounts and none selected'
104
+ )
105
+ }
106
+
107
+ function deserialize(bytes: Uint8Array): Transaction | VersionedTransaction {
108
+ try {
109
+ return VersionedTransaction.deserialize(bytes)
110
+ } catch {
111
+ try {
112
+ return Transaction.from(bytes)
113
+ } catch {
114
+ throw new Error(
115
+ 'Failed to deserialize transaction as either versioned or legacy format'
116
+ )
117
+ }
118
+ }
119
+ }