@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.
- package/dist/BridgeParent.d.ts +2 -1
- package/dist/BridgeParent.d.ts.map +1 -1
- package/dist/BridgeParent.js +35 -6
- package/dist/BridgeParent.js.map +1 -1
- package/dist/signSolanaBytes.d.ts +23 -0
- package/dist/signSolanaBytes.d.ts.map +1 -0
- package/dist/signSolanaBytes.js +74 -0
- package/dist/signSolanaBytes.js.map +1 -0
- package/dist/signSolanaBytes.test.d.ts +2 -0
- package/dist/signSolanaBytes.test.d.ts.map +1 -0
- package/dist/signSolanaBytes.test.js +194 -0
- package/dist/signSolanaBytes.test.js.map +1 -0
- package/package.json +1 -1
- package/src/BridgeParent.ts +54 -6
- package/src/signSolanaBytes.test.ts +237 -0
- package/src/signSolanaBytes.ts +119 -0
package/dist/BridgeParent.d.ts
CHANGED
|
@@ -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":"AAOA,OAAO,EAAc,WAAW,EAAwB,MAAM,iBAAiB,CAAA;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAA;
|
|
1
|
+
{"version":3,"file":"BridgeParent.d.ts","sourceRoot":"","sources":["../src/BridgeParent.ts"],"names":[],"mappings":"AAOA,OAAO,EAAc,WAAW,EAAwB,MAAM,iBAAiB,CAAA;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAA;AAInF,MAAM,WAAW,gBAAgB;IAE/B,OAAO,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAEvE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAA;IAE/D,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAA;CAC5E;AAED,UAAU,6BAA8B,SAAQ,qBAAqB;IACnE,eAAe,EAAE,CACb,2BAA2B,GAC3B,2BAA2B,GAC3B,+BAA+B,GAC/B,4BAA4B,CAC/B,EAAE,CAAA;IACH,yBAAyB,EAAE,CACzB,WAAW,EAAE,eAAe,EAC5B,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,MAAM,CAAC,CAAA;IACpB,yBAAyB,EAAE,CACzB,WAAW,EAAE,eAAe,KACzB,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,CAAA;IACjC,6BAA6B,EAAE,CAC7B,YAAY,EAAE,eAAe,EAAE,KAC5B,OAAO,CAAC,KAAK,GAAG,WAAW,EAAE,CAAC,CAAA;IACnC,0BAA0B,EAAE,CAC1B,WAAW,EAAE,eAAe,EAC5B,gBAAgB,CAAC,EAAE,MAAM,KACtB,OAAO,CAAC,UAAU,CAAC,CAAA;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,EAAE,6BAA6B,GAAG,SAAS,CAAA;CACnD;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,mBAAmB,CAAA;IACzB,QAAQ,EAAE,gBAAgB,CAAA;CAC3B;AAED,MAAM,WAAW,4BAA6B,SAAQ,WAAW;IAC/D,IAAI,EAAE,0BAA0B,CAAA;IAChC,MAAM,EAAE,qBAAqB,CAAA;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,gBAAgB,CAAA;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAElB,QAAQ,EAAE,GAAG,CAAA;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IAEnB,QAAQ,EAAE,GAAG,CAAA;CACd;AAED,MAAM,WAAW,SAAS;IACxB,cAAc,EAAE,cAAc,EAAE,CAAA;IAChC,mBAAmB,EAAE,OAAO,CAAA;IAE5B,qBAAqB,EAAE,kBAAkB,EAAE,CAAA;IAC3C,0BAA0B,EAAE,OAAO,CAAA;IAEnC,WAAW,EAAE,cAAc,EAAE,CAAA;IAC7B,gBAAgB,EAAE,OAAO,CAAA;IAEzB,UAAU,EAAE,aAAa,EAAE,CAAA;IAC3B,eAAe,EAAE,OAAO,CAAA;IAExB,YAAY,EAAE,MAAM,CAAA;IAEpB,mBAAmB,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IACpD,kBAAkB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;CACrD;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,QAAQ,CAAgC;gBAEpC,MAAM,EAAE,iBAAiB;YASvB,oBAAoB;YAiEpB,sBAAsB;IA2CpC,OAAO,CAAC,gBAAgB;IAqYxB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,cAAc;IAsFtB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,aAAa;IAmDd,OAAO,IAAI,IAAI;CAYvB"}
|
package/dist/BridgeParent.js
CHANGED
|
@@ -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
|
-
//
|
|
24
|
-
|
|
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:
|
|
28
|
-
eip6963WalletsReady:
|
|
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);
|
package/dist/BridgeParent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BridgeParent.js","sourceRoot":"","sources":["../src/BridgeParent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAElC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EACL,uCAAuC,EACvC,gBAAgB,EACjB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAA;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAkGvD,MAAM,OAAO,YAAY;IACf,MAAM,CAA0B;IAChC,SAAS,GAAqB,IAAI,CAAA;IAClC,QAAQ,GAA4B,IAAI,CAAA;IAEhD,YAAY,MAAyB;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;QAC5D,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,oBAAoB,EAAE,CAAA;IAC7B,CAAC;IAEO,KAAK,CAAC,oBAAoB;QAChC,8BAA8B;QAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC/C,OAAM;QACR,CAAC;QAED,qKAAqK;QACrK,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAC1D,MAAM,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAErD,IAAI,CAAC,SAAS,GAAG;YACf,cAAc,EAAE,cAAc;YAC9B,mBAAmB,EAAE,IAAI;YACzB,qBAAqB,EAAE,qBAAqB;YAC5C,0BAA0B,EAAE,IAAI;YAChC,WAAW,EAAE,EAAE;YACf,gBAAgB,EAAE,KAAK;YAEvB,UAAU,EAAE,EAAE;YACd,eAAe,EAAE,KAAK;YAEtB,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;YAEpC,0EAA0E;YAC1E,mBAAmB,EAAE,CAAC,WAAqB,EAAE,EAAE;gBAC7C,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACnB,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;oBAC7D,IAAI,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAA;gBACxC,CAAC;YACH,CAAC;YAED,0EAA0E;YAC1E,kBAAkB,EAAE,CAAC,YAAsB,EAAE,EAAE;gBAC7C,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACnB,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;oBAC5D,IAAI,CAAC,SAAS,CAAC,eAAe,GAAG,IAAI,CAAA;gBACvC,CAAC;YACH,CAAC;SACF,CAAA;QAED,gEAAgE;QAChE,2FAA2F;QAC3F,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;QAC1E,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,cAAc,CACpC,IAAI,CAAC,MAAM,CAAC,aAAa,EACzB,MAAM,EACN,YAAY,CACb,CAAA;QAED,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC/C,CAAC;IAEO,KAAK,CAAC,sBAAsB;QAClC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YAC3B,MAAM,eAAe,GAAqB,EAAE,CAAA;YAC5C,MAAM,OAAO,GAAG,GAAG,CAAA,CAAC,qCAAqC;YAEzD,2CAA2C;YAC3C,MAAM,kBAAkB,GAAG,CAAC,KAAY,EAAE,EAAE;gBAC1C,MAAM,iBAAiB,GAAG,KAAqC,CAAA;gBAC/D,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAA;gBAEnD,gDAAgD;gBAChD,MAAM,aAAa,GAAG,eAAe,CAAC,SAAS,CAC7C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAC1B,CAAA;gBAED,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;oBACzB,eAAe,CAAC,IAAI,CAAC;wBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,QAAQ,EAAE,QAAQ;qBACnB,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC,CAAA;YAED,kCAAkC;YAClC,MAAM,CAAC,gBAAgB,CAAC,0BAA0B,EAAE,kBAAkB,CAAC,CAAA;YAEvE,yCAAyC;YACzC,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAA;YAE1D,qCAAqC;YACrC,UAAU,CAAC,GAAG,EAAE;gBACd,MAAM,CAAC,mBAAmB,CACxB,0BAA0B,EAC1B,kBAAkB,CACnB,CAAA;gBACD,OAAO,CAAC,eAAe,CAAC,CAAA;YAC1B,CAAC,EAAE,OAAO,CAAC,CAAA;QACb,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,gBAAgB;QACtB,MAAM,EAAE,GAAG,EAAE,GAAG,UAAU,EAAE,CAAA;QAC5B,MAAM,OAAO,GAAG,GAAG,EAAE,CAAA;QAErB,MAAM,aAAa,GAAyB,EAAE,CAAA;QAC9C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAA;QAErC,0CAA0C;QAC1C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,mCAAmC;YACnC,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChC,IAAI,OAA0C,CAAA;gBAE9C,IAAI,uCAAuC,CAAC,MAAM,CAAC,EAAE,CAAC;oBACpD,OAAO,GAAG,IAAI,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;gBACjD,CAAC;gBAED,aAAa,CAAC,IAAI,CAAC;oBACjB,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;oBACnC,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAa;oBACzC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;oBACtC,mEAAmE;oBACnE,6DAA6D;oBAC7D,aAAa;oBACb,OAAO,EAAE,OAAO;wBACd,CAAC,CAAC;4BACE,IAAI,EAAE,OAAO,CAAC,IAAI;4BAClB,GAAG,EAAE,OAAO,CAAC,GAAG;4BAChB,IAAI,EAAE,OAAO,CAAC,IAAI;4BAClB,UAAU,EAAE,OAAO,CAAC,UAAU;4BAC9B,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC;gCACvB,IAAI,KAAK;oCACP,OAAO,OAAO,CAAC,SAAS,CAAA;gCAC1B,CAAC;gCACD,QAAQ,EAAE,KAAK,IAAI,EAAE;oCACnB,OAAO,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAA;gCACtC,CAAC;gCACD,MAAM,EAAE,KAAK,IAAI,EAAE;oCACjB,OAAO,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,CAAA;gCACpC,CAAC;gCACD,OAAO,EAAE,KAAK,IAAI,EAAE;oCAClB,OAAO,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,CAAA;gCACrC,CAAC;gCACD,QAAQ,EAAE,KAAK,IAAI,EAAE;oCACnB,OAAO,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAA;gCACtC,CAAC;gCACD,QAAQ,EAAE,KAAK,IAAI,EAAE;oCACnB,OAAO,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAA;gCACtC,CAAC;6BACF,CAAC;4BACF,UAAU,EAAE,OAAO,CAAC,UAAU;4BAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;4BAC5B,4BAA4B,EAC1B,OAAO,CAAC,4BAA4B;4BACtC,MAAM,EAAE,OAAO,CAAC,MAAM;4BACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;4BAC1B,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE;4BAC5C,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,OAAO,CAAC,WAAW,EAAE;4BACpD,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE;4BAC5C,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,OAAO,CAAC,UAAU,EAAE;4BAClD,eAAe,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,CAC1D,MAAM,OAAO,CAAC,eAAe,CAC3B,WAAW,EACX,UAAU,EACV,OAAO,CACR;4BACH,eAAe,EAAE,KAAK,EAAC,WAAW,EAAC,EAAE;gCACnC,OAAO,OAAO,CAAC,eAAe,KAAK,SAAS;oCAC1C,CAAC,CAAC,MAAM,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC;oCAC5C,CAAC,CAAC,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;4BAC3D,CAAC;4BACD,mBAAmB,EAAE,KAAK,EAAC,YAAY,EAAC,EAAE;gCACxC,OAAO,OAAO,CAAC,mBAAmB,KAAK,SAAS;oCAC9C,CAAC,CAAC,MAAM,OAAO,CAAC,mBAAmB,CAAC,YAAY,CAAC;oCACjD,CAAC,CAAC,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;4BAC/D,CAAC;4BACD,WAAW,EAAE,KAAK,EAAC,OAAO,EAAC,EAAE;gCAC3B,OAAO,OAAO,CAAC,WAAW,KAAK,SAAS;oCACtC,CAAC,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;oCACpC,CAAC,CAAC,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;4BACvD,CAAC;4BACD,MAAM,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE;gCACpB,OAAO,OAAO,CAAC,MAAM,KAAK,SAAS;oCACjC,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;oCAC7B,CAAC,CAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;4BAClD,CAAC;4BACD,eAAe,EAAE;gCACf,2BAA2B;gCAC3B,+BAA+B;gCAC/B,2BAA2B;6BAC5B;4BACD,yBAAyB,EAAE,KAAK,EAC9B,WAA4B,EAC5B,MAAc,EACd,EAAE;gCACF,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;gCACzC,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAA;gCAE9C,mDAAmD;gCACnD,IAAI,cAAkD,CAAA;gCACtD,IAAI,CAAC;oCACH,cAAc;wCACZ,oBAAoB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;gCAChD,CAAC;gCAAC,MAAM,CAAC;oCACP,2CAA2C;oCAC3C,IAAI,CAAC;wCACH,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;oCAC/C,CAAC;oCAAC,MAAM,CAAC;wCACP,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAA;oCACH,CAAC;gCACH,CAAC;gCAED,OAAO,MAAM,OAAO,CAAC,eAAe,CAClC,cAAc,EACd,UAAU,CACX,CAAA;4BACH,CAAC;4BACD,yBAAyB,EAAE,KAAK,EAC9B,WAA4B,EAC5B,EAAE;gCACF,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;oCAC1C,OAAO,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;gCAC9D,CAAC;gCAED,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAA;gCAE9C,mDAAmD;gCACnD,IAAI,cAAkD,CAAA;gCACtD,IAAI,CAAC;oCACH,cAAc;wCACZ,oBAAoB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;gCAChD,CAAC;gCAAC,MAAM,CAAC;oCACP,2CAA2C;oCAC3C,IAAI,CAAC;wCACH,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;oCAC/C,CAAC;oCAAC,MAAM,CAAC;wCACP,OAAO,IAAI,KAAK,CACd,wEAAwE,CACzE,CAAA;oCACH,CAAC;gCACH,CAAC;gCAED,OAAO,MAAM,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAA;4BACtD,CAAC;4BACD,6BAA6B,EAAE,KAAK,EAClC,YAA+B,EAC/B,EAAE;gCACF,IAAI,OAAO,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;oCAC9C,OAAO,IAAI,KAAK,CACd,8CAA8C,CAC/C,CAAA;gCACH,CAAC;gCAED,MAAM,wBAAwB,GAGxB,EAAE,CAAA;gCAER,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;oCACvC,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAA;oCAE9C,mDAAmD;oCACnD,IAAI,cAAkD,CAAA;oCACtD,IAAI,CAAC;wCACH,cAAc;4CACZ,oBAAoB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;oCAChD,CAAC;oCAAC,MAAM,CAAC;wCACP,2CAA2C;wCAC3C,IAAI,CAAC;4CACH,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;wCAC/C,CAAC;wCAAC,MAAM,CAAC;4CACP,OAAO,IAAI,KAAK,CACd,gDAAgD,CACjD,CAAA;wCACH,CAAC;oCACH,CAAC;oCAED,wBAAwB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;gCAC/C,CAAC;gCAED,OAAO,MAAM,OAAO,CAAC,mBAAmB,CACtC,wBAAwB,CACzB,CAAA;4BACH,CAAC;yBACF;wBACH,CAAC,CAAC,SAAS;iBACd,CAAC,CAAA;gBACF,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC;QAED,0EAA0E;QAC1E,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAA;YAC3C,MAAM,UAAU,GACd,WAAW,CAAC,UAAU,KAAK,gBAAgB,CAAC,SAAS;gBACrD,WAAW,CAAC,UAAU,KAAK,gBAAgB,CAAC,QAAQ,CAAA;YAEtD,IAAI,UAAU,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrD,aAAa,CAAC,IAAI,CAAC;oBACjB,IAAI,EAAE,GAAG,WAAW,CAAC,IAAI,cAAc;yBACpC,WAAW,EAAE;yBACb,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;oBACvB,IAAI,EAAE,WAAW,CAAC,IAAI;oBACtB,MAAM,EAAE,CAAC,gBAAgB,CAAC;oBAC1B,QAAQ,EAAE,CAAC,qBAAqB,CAAC;oBACjC,6DAA6D;oBAC7D,aAAa;oBACb,OAAO,EAAE;wBACP,IAAI,EAAE,WAAW,CAAC,IAAI;wBACtB,GAAG,EAAE,WAAW,CAAC,GAAG;wBACpB,oEAAoE;wBACpE,IAAI,EAAE,WAAW,CAAC,IAAI;wBACtB,UAAU,EAAE,WAAW,CAAC,UAAU;wBAClC,sEAAsE;wBACtE,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC;4BACvB,IAAI,KAAK;gCACP,OAAO,WAAW,CAAC,SAAS,CAAA;4BAC9B,CAAC;4BACD,QAAQ,EAAE,KAAK,IAAI,EAAE;gCACnB,OAAO,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAA;4BAC1C,CAAC;4BACD,MAAM,EAAE,KAAK,IAAI,EAAE;gCACjB,OAAO,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,CAAA;4BACxC,CAAC;4BACD,OAAO,EAAE,KAAK,IAAI,EAAE;gCAClB,OAAO,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,CAAA;4BACzC,CAAC;4BACD,QAAQ,EAAE,KAAK,IAAI,EAAE;gCACnB,OAAO,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAA;4BAC1C,CAAC;4BACD,QAAQ,EAAE,KAAK,IAAI,EAAE;gCACnB,OAAO,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAA;4BAC1C,CAAC;yBACF,CAAC;wBACF,UAAU,EAAE,WAAW,CAAC,UAAU;wBAClC,SAAS,EAAE,WAAW,CAAC,SAAS;wBAChC,4BAA4B,EAC1B,WAAW,CAAC,4BAA4B;wBAC1C,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,WAAW,CAAC,OAAO,EAAE;wBAChD,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,WAAW,CAAC,UAAU,EAAE;wBACtD,eAAe,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE;4BAC1D,IAAI,CAAC;gCACH,OAAO,MAAM,WAAW,CAAC,eAAe,CACtC,WAAW,EACX,UAAU,EACV,OAAO,CACR,CAAA;4BACH,CAAC;4BAAC,MAAM,CAAC;gCACP,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;4BAC/C,CAAC;wBACH,CAAC;wBACD,eAAe,EAAE,KAAK,EAAC,WAAW,EAAC,EAAE;4BACnC,OAAO,MAAM,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC,CAAA;wBACvD,CAAC;wBACD,mBAAmB,EAAE,KAAK,EAAC,YAAY,EAAC,EAAE;4BACxC,OAAO,MAAM,WAAW,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAA;wBAC5D,CAAC;wBACD,WAAW,EAAE,KAAK,EAAC,OAAO,EAAC,EAAE;4BAC3B,OAAO,MAAM,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;wBAC/C,CAAC;wBACD,eAAe,EAAE;4BACf,2BAA2B;4BAC3B,+BAA+B;4BAC/B,2BAA2B;yBAC5B;wBACD,yBAAyB,EAAE,KAAK,EAC9B,WAA4B,EAC5B,MAAc,EACd,EAAE;4BACF,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;4BACzC,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAA;4BAE9C,IAAI,cAAkD,CAAA;4BACtD,IAAI,CAAC;gCACH,cAAc,GAAG,oBAAoB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;4BAC/D,CAAC;4BAAC,MAAM,CAAC;gCACP,IAAI,CAAC;oCACH,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;gCAC/C,CAAC;gCAAC,MAAM,CAAC;oCACP,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAA;gCACH,CAAC;4BACH,CAAC;4BACD,IAAI,CAAC;gCACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,eAAe,CAC9C,cAAc,EACd,UAAU,CACX,CAAA;gCACD,OAAO,MAAM,CAAA;4BACf,CAAC;4BAAC,MAAM,CAAC;gCACP,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;4BAC1D,CAAC;wBACH,CAAC;wBACD,6DAA6D;wBAC7D,yBAAyB,EAAE,KAAK,EAAE,WAA4B,EAAE,EAAE;4BAChE,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAA;4BAE9C,IAAI,cAAkD,CAAA;4BACtD,IAAI,CAAC;gCACH,cAAc,GAAG,oBAAoB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;4BAC/D,CAAC;4BAAC,MAAM,CAAC;gCACP,IAAI,CAAC;oCACH,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;gCAC/C,CAAC;gCAAC,MAAM,CAAC;oCACP,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAA;gCACH,CAAC;4BACH,CAAC;4BAED,OAAO,MAAM,WAAW,CAAC,eAAe,CAAC,cAAc,CAAC,CAAA;wBAC1D,CAAC;wBACD,6DAA6D;wBAC7D,6BAA6B,EAAE,KAAK,EAClC,YAA+B,EAC/B,EAAE;4BACF,MAAM,wBAAwB,GAGxB,EAAE,CAAA;4BAER,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;gCACvC,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAA;gCAE9C,IAAI,cAAkD,CAAA;gCACtD,IAAI,CAAC;oCACH,cAAc,GAAG,oBAAoB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;gCAC/D,CAAC;gCAAC,MAAM,CAAC;oCACP,IAAI,CAAC;wCACH,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;oCAC/C,CAAC;oCAAC,MAAM,CAAC;wCACP,MAAM,IAAI,KAAK,CACb,gDAAgD,CACjD,CAAA;oCACH,CAAC;gCACH,CAAC;gCAED,wBAAwB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;4BAC/C,CAAC;4BAED,OAAO,MAAM,WAAW,CAAC,mBAAmB,CAC1C,wBAAwB,CACzB,CAAA;wBACH,CAAC;qBACF;iBACF,CAAC,CAAA;gBACF,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;YACnC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,6DAA6D;QAC/D,CAAC;QAED,OAAO,aAAa,CAAA;IACtB,CAAC;IAEO,cAAc,CAAC,MAAc;QACnC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAA;QAClC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAA;QAExE,OAAO,cAAc,CAAA;IACvB,CAAC;IAEO,gBAAgB,CAAC,MAAc;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAA;QAC7C,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACrE,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,KAAc;QACnC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAA;QACrD,MAAM,QAAQ,GAAG,KAAgC,CAAA;QACjD,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,SAAS,IAAI,QAAQ,CAAA;IAC7D,CAAC;IAEO,cAAc,CAAC,WAAqB;QAC1C,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9D,OAAO,EAAE,CAAA;QACX,CAAC;QAED,MAAM,OAAO,GAAqB,EAAE,CAAA;QACpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;QAE9B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,kFAAkF;YAClF,8DAA8D;YAC9D,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAC3C,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;YAC1B,8DAA8D;YAC9D,MAAa,CACd,CAAA;YAED,0DAA0D;YAC1D,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3D,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;gBAEpB,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAA;gBACnD,MAAM,IAAI,GAAG,QAAQ,UAAU,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;gBAEnE,mDAAmD;gBACnD,8DAA8D;gBAC9D,MAAM,cAAc,GAAG,QAAe,CAAA;gBACtC,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC;oBACpC,KAAK,EAAE,cAAc,CAAC,KAAK,IAAI,KAAK;oBACpC,OAAO,EAAE,cAAc,CAAC,OAAO;wBAC7B,CAAC,CAAC,KAAK,EAAE,MAA4C,EAAE,EAAE,CACrD,MAAM,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;wBACxC,CAAC,CAAC,SAAS;oBACb,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC;wBACrB,iBAAiB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;4BAC9B,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,IAAI,KAAK;4BAC9D,GAAG,EAAE,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,KAAK;yBACzD,CAAC;wBACF,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC;4BACjB,IAAI,EAAE,KAAK,EAAE,WAAoB,EAAE,EAAE,CACnC,MAAM,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;4BACpD,aAAa,EAAE,KAAK,EAAE,OAAe,EAAE,EAAE,CACvC,MAAM,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC;4BACzD,kBAAkB,EAAE,KAAK,EAAE,iBAA0B,EAAE,EAAE,CACvD,MAAM,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CACjD,iBAAiB,CAClB;yBACJ,CAAC;wBACF,kBAAkB,EAAE,OAAO,CAAC,KAAK,CAAC;4BAChC,OAAO,EAAE,KAAK,EAAE,EAAU,EAAE,MAAc,EAAE,IAAY,EAAE,EAAE,CAC1D,MAAM,cAAc,CAAC,OAAO,CAAC,kBAAkB,CAAC,OAAO,CACrD,EAAE,EACF,MAAM,EACN,IAAI,CACL;4BACH,oBAAoB,EAAE,KAAK,EACzB,eAAuB,EACvB,gBAAwB,EACxB,OAAgC;4BAChC,8DAA8D;4BAC9D,SAA8C,EAC9C,aAAqB,EACrB,EAAE,CACF,MAAM,cAAc,CAAC,OAAO,CAAC,kBAAkB,CAAC,oBAAoB,CAClE,eAAe,EACf,gBAAgB,EAChB,OAAO,EACP,SAAS,EACT,aAAa,CACd;yBACJ,CAAC;wBACF,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;qBAClE,CAAC;iBACH,CAAC,CAAA;gBAEF,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI;oBACJ,IAAI;oBACJ,UAAU;oBACV,QAAQ,EAAE,eAAe;iBAC1B,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAEO,kBAAkB,CAAC,KAAc;QACvC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAA;QACrD,MAAM,MAAM,GAAG,KAAgC,CAAA;QAC/C,OAAO,CACL,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,UAAU;YACvC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,UAAU;YACpC,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,UAAU,CACvC,CAAA;IACH,CAAC;IAEO,aAAa,CAAC,YAAsB;QAC1C,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/D,OAAO,EAAE,CAAA;QACX,CAAC;QAED,MAAM,OAAO,GAAoB,EAAE,CAAA;QACnC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;QAE9B,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAQ;YAE3B,8DAA8D;YAC9D,MAAM,IAAI,GAAI,MAAc,CAAC,GAAG,CAAC,CAAA;YACjC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,SAAQ;YAE/C,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAA;YACjC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;gBAAE,SAAQ;YAE9C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAEb,oEAAoE;YACpE,8DAA8D;YAC9D,MAAM,YAAY,GAAG,MAAa,CAAA;YAClC,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,OAAO,GAAG,EAAE,CAAC,WAAW,EAAE;gBAChC,IAAI,EAAE,YAAY,CAAC,UAAU,EAAE,OAAO,IAAI,GAAG;gBAC7C,IAAI,EAAE,EAAE;gBACR,WAAW,EAAE,GAAG;gBAChB,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC;oBACtB,UAAU,EAAE,YAAY,CAAC,UAAU;oBACnC,UAAU,EAAE,YAAY,CAAC,UAAU;oBACnC,eAAe,EAAE,YAAY,CAAC,eAAe,IAAI,CAAC;oBAClD,eAAe,EAAE,YAAY,CAAC,eAAe,IAAI,KAAK;oBACtD,OAAO,EAAE,KAAK,EAAE,eAAuB,EAAE,OAAe,EAAE,EAAE,CAC1D,MAAM,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC;oBACtD,iBAAiB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,YAAY,CAAC,iBAAiB,EAAE;oBACrE,IAAI,EAAE,KAAK,EAAE,OAAe,EAAE,EAAE,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;oBACjE,MAAM,EAAE,CAAC,QAAiC,EAAE,EAAE;wBAC5C,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;wBAC3C,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;oBAC7B,CAAC;oBACD,UAAU,EAAE,YAAY,CAAC,UAAU;wBACjC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,YAAY,CAAC,UAAU,EAAE;wBAC7C,CAAC,CAAC,SAAS;iBACd,CAAC;aACH,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IAEM,OAAO;QACZ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC,cAAc,GAAG,EAAE,CAAA;YAClC,IAAI,CAAC,SAAS,CAAC,qBAAqB,GAAG,EAAE,CAAA;YACzC,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,EAAE,CAAA;YAC/B,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,EAAE,CAAA;YAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QACvB,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QAEpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;IACpB,CAAC;CACF"}
|
|
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 @@
|
|
|
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
package/src/BridgeParent.ts
CHANGED
|
@@ -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
|
-
//
|
|
129
|
-
|
|
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:
|
|
134
|
-
eip6963WalletsReady:
|
|
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
|
+
}
|