@meshconnect/uwc-types 0.12.1 → 0.13.0-snapshot.3776809

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.
@@ -85,16 +85,10 @@ export interface WalletConnectProvider {
85
85
  export interface TonConnectWalletProvider {
86
86
  supportedNetworkIds: NetworkId[];
87
87
  /**
88
- * Override for the app_name used to look up this wallet in the TonConnect
89
- * wallets-v2.json list. The SDK resolves bridgeUrl + universalLink from
90
- * this key at connect time.
91
- *
92
- * Defaults to jsBridgeKey (from extensionInjectedProvider.namespaceMetaData.tvm)
93
- * which works for most wallets (e.g. Tonkeeper: jsBridgeKey = app_name = 'tonkeeper').
94
- *
95
- * Only needed when the wallet list app_name differs from jsBridgeKey.
96
- * Example: OKX has jsBridgeKey 'okxTonWallet' (shared by both apps) but
97
- * two wallet list entries — 'okxWallet' (standalone) vs 'okxTonWallet' (trading app).
88
+ * app_name used to look up this wallet in the TonConnect wallets-v2.json list
89
+ * (the SDK resolves bridgeUrl + universalLink from it). Defaults to jsBridgeKey,
90
+ * which is correct for most wallets; set it only when the list's app_name
91
+ * differs — e.g. OKX (jsBridgeKey 'okxTonWallet', wallet-list entry 'okxWallet').
98
92
  */
99
93
  walletListAppName?: string;
100
94
  }
@@ -102,6 +96,13 @@ export interface TonConnectWalletProvider {
102
96
  export interface TonConnectConfig {
103
97
  manifestUrl: string | (() => string);
104
98
  walletsListSource?: string;
99
+ /**
100
+ * Fired once, synchronously, when a session is resumed from storage instead of
101
+ * a fresh handshake (just before connect() resolves its ConnectorResult).
102
+ * Intended for a single telemetry tag (e.g. restored: true). Optional —
103
+ * omitting it keeps restoration working, only the signal is dropped.
104
+ */
105
+ onSessionRestored?: () => void;
105
106
  }
106
107
  export interface WalletMetadata<T = Record<string, any>> {
107
108
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"UWC-state.d.ts","sourceRoot":"","sources":["../src/UWC-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,sBAAsB,EAAE,OAAO,CAAA;IAC/B,mCAAmC,EAAE,OAAO,CAAA;IAC5C,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,cAAc,CAAC,EAAE,yBAAyB,CAAA;CAC3C;AAED,MAAM,WAAW,cAAc;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,cAAc,CAAC,EAAE,wBAAwB,CAAA;CAC1C;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,cAAc,CAAC,EAAE,sBAAsB,CAAA;CACxC;AAED,MAAM,WAAW,WAAW;IAC1B,oGAAoG;IACpG,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,cAAc,CAAC,EAAE,qBAAqB,CAAA;CACvC;AAED,6FAA6F;AAC7F,UAAU,yBAAyB;IACjC,MAAM,EAAE,cAAc,CAAA;IACtB,MAAM,EAAE,cAAc,CAAA;IACtB,IAAI,EAAE,YAAY,CAAA;IAClB,GAAG,EAAE,WAAW,CAAA;CACjB;AAED,KAAK,oBAAoB,GAAG;KACzB,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,yBAAyB,GACxD,yBAAyB,CAAC,CAAC,CAAC,GAC5B,SAAS;CACd,CAAA;AAED,MAAM,WAAW,yBAAyB;IACxC,mBAAmB,EAAE,SAAS,EAAE,CAAA;IAChC,iBAAiB,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAChD,qCAAqC,CAAC,EAAE,OAAO,CAAA;CAChD;AAED,MAAM,WAAW,iCAAkC,SAAQ,yBAAyB;IAClF,yBAAyB,EAAE,MAAM,CAAA;CAClC;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAA;AAEjD,MAAM,WAAW,qBAAqB;IACpC,mBAAmB,EAAE,SAAS,EAAE,CAAA;IAChC,SAAS,EAAE;QACT,SAAS,EAAE,MAAM,CAAA;QACjB,MAAM,EAAE,MAAM,CAAA;QACd,iBAAiB,CAAC,EAAE,YAAY,CAAA;QAChC,gDAAgD;QAChD,wBAAwB,CAAC,EAAE,YAAY,CAAA;QACvC,gDAAgD;QAChD,oBAAoB,CAAC,EAAE,YAAY,CAAA;KACpC,CAAA;CACF;AAED,yEAAyE;AACzE,MAAM,WAAW,wBAAwB;IACvC,mBAAmB,EAAE,SAAS,EAAE,CAAA;IAChC;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAA;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAGD,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACrD,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,CAAC,CAAA;IACX,yBAAyB,CAAC,EAAE,yBAAyB,CAAA;IACrD,iCAAiC,CAAC,EAAE,iCAAiC,CAAA;IACrE,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;IAC7C,kBAAkB,CAAC,EAAE,wBAAwB,CAAA;CAC9C"}
1
+ {"version":3,"file":"UWC-state.d.ts","sourceRoot":"","sources":["../src/UWC-state.ts"],"names":[],"mappings":"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"}
@@ -76,5 +76,11 @@ export interface Connector {
76
76
  */
77
77
  sendTransaction?(request: TransactionRequest, provider?: ExtensionInjectedProvider | IntegratedBrowserInjectedProvider | WalletConnectProvider | TonConnectWalletProvider): Promise<TransactionResult>;
78
78
  getWalletCapabilities?(from: string, networks: Network[]): Promise<Record<string, EVMCapabilities>>;
79
+ /**
80
+ * Sign a Solana tx without broadcasting — raw bytes in/out (no @solana/web3.js
81
+ * for callers). Fee-payer relay flows: the wallet adds only the user's
82
+ * signature, the relay broadcasts. Optional; not all connectors support it.
83
+ */
84
+ signSolanaTransactionBytes?(serializedTx: Uint8Array): Promise<Uint8Array>;
79
85
  }
80
86
  //# sourceMappingURL=connector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../src/connector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,KAAK,EACV,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EACzB,iCAAiC,EACjC,qBAAqB,EACrB,wBAAwB,EACxB,cAAc,EACf,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,kBAAkB,EAAE,gBAAgB,EAAE,CAAA;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,CAAA;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;;;;OAKG;IAEH,OAAO,CACL,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EACL,yBAAyB,GACzB,iCAAiC,GACjC,qBAAqB,GACrB,wBAAwB,GAC3B,OAAO,CAAC,eAAe,CAAC,CAAA;IAE3B;;;;;;;OAOG;IACH,gBAAgB,CAAC,IAAI,MAAM,CAAA;IAE3B;;;;OAIG;IACH,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAE5B;;;;;OAKG;IAEH,aAAa,CACX,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EACL,yBAAyB,GACzB,iCAAiC,GACjC,qBAAqB,GACrB,wBAAwB,GAC3B,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAE/B;;;;;;OAMG;IACH,mBAAmB,CAAC,CAClB,SAAS,EAAE,SAAS,EACpB,eAAe,CAAC,EAAE,cAAc,EAAE,GACjC,OAAO,CACN,yBAAyB,EAAE,GAC3B,wBAAwB,EAAE,GAC1B,sBAAsB,EAAE,GACxB,qBAAqB,EAAE,CAC1B,CAAA;IAED;;;;;OAKG;IACH,WAAW,CAAC,CACV,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EACL,yBAAyB,GACzB,iCAAiC,GACjC,qBAAqB,GACrB,wBAAwB,GAC3B,OAAO,CAAC,aAAa,CAAC,CAAA;IAEzB;;;;;OAKG;IACH,eAAe,CAAC,CACd,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,CAAC,EACL,yBAAyB,GACzB,iCAAiC,GACjC,qBAAqB,GACrB,wBAAwB,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAE7B,qBAAqB,CAAC,CACpB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,EAAE,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAA;CAC5C"}
1
+ {"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../src/connector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,KAAK,EACV,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EACzB,iCAAiC,EACjC,qBAAqB,EACrB,wBAAwB,EACxB,cAAc,EACf,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,kBAAkB,EAAE,gBAAgB,EAAE,CAAA;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,CAAA;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;;;;OAKG;IAEH,OAAO,CACL,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EACL,yBAAyB,GACzB,iCAAiC,GACjC,qBAAqB,GACrB,wBAAwB,GAC3B,OAAO,CAAC,eAAe,CAAC,CAAA;IAE3B;;;;;;;OAOG;IACH,gBAAgB,CAAC,IAAI,MAAM,CAAA;IAE3B;;;;OAIG;IACH,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAE5B;;;;;OAKG;IAEH,aAAa,CACX,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EACL,yBAAyB,GACzB,iCAAiC,GACjC,qBAAqB,GACrB,wBAAwB,GAC3B,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAE/B;;;;;;OAMG;IACH,mBAAmB,CAAC,CAClB,SAAS,EAAE,SAAS,EACpB,eAAe,CAAC,EAAE,cAAc,EAAE,GACjC,OAAO,CACN,yBAAyB,EAAE,GAC3B,wBAAwB,EAAE,GAC1B,sBAAsB,EAAE,GACxB,qBAAqB,EAAE,CAC1B,CAAA;IAED;;;;;OAKG;IACH,WAAW,CAAC,CACV,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EACL,yBAAyB,GACzB,iCAAiC,GACjC,qBAAqB,GACrB,wBAAwB,GAC3B,OAAO,CAAC,aAAa,CAAC,CAAA;IAEzB;;;;;OAKG;IACH,eAAe,CAAC,CACd,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,CAAC,EACL,yBAAyB,GACzB,iCAAiC,GACjC,qBAAqB,GACrB,wBAAwB,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAE7B,qBAAqB,CAAC,CACpB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,EAAE,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAA;IAE3C;;;;OAIG;IACH,0BAA0B,CAAC,CAAC,YAAY,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;CAC3E"}
package/dist/index.d.ts CHANGED
@@ -10,4 +10,5 @@ export * from './react-hooks';
10
10
  export * from './signature';
11
11
  export * from './transactions';
12
12
  export * from './errors';
13
+ export * from './solana-message';
13
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA;AACxB,cAAc,kBAAkB,CAAA"}
package/dist/index.js CHANGED
@@ -10,4 +10,5 @@ export * from './react-hooks';
10
10
  export * from './signature';
11
11
  export * from './transactions';
12
12
  export * from './errors';
13
+ export * from './solana-message';
13
14
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA;AACxB,cAAc,kBAAkB,CAAA"}
@@ -230,6 +230,18 @@ export interface UseSignMessageReturn {
230
230
  */
231
231
  error: WalletError | undefined;
232
232
  }
233
+ /**
234
+ * Return type for useSignSolanaTransaction — sign-only Solana signing (bytes in,
235
+ * bytes out) for fee-payer relay flows where the relay, not the wallet, broadcasts.
236
+ * @example
237
+ * const signed = await signSolanaTransaction(unsignedBytes)
238
+ */
239
+ export interface UseSignSolanaTransactionReturn {
240
+ /** Sign serialized tx bytes without broadcasting. Throws if no wallet / signing fails. */
241
+ signSolanaTransaction: (serializedTx: Uint8Array) => Promise<Uint8Array>;
242
+ isLoading: boolean;
243
+ error: WalletError | undefined;
244
+ }
233
245
  /**
234
246
  * Return type for the useTransaction hook
235
247
  * Provides transaction sending functionality with loading state and result
@@ -1 +1 @@
1
- {"version":3,"file":"react-hooks.d.ts","sourceRoot":"","sources":["../src/react-hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"react-hooks.d.ts","sourceRoot":"","sources":["../src/react-hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Solana tx wire-format helpers (pure byte ops, no @solana/web3.js).
3
+ * Wire format: [shortvec sigCount] [sigCount × 64-byte sigs] [message bytes].
4
+ * Used to confirm a wallet only ADDED a signature and didn't change the message.
5
+ */
6
+ /** Offset where the message begins, or -1 if the tx bytes are malformed. */
7
+ export declare function solanaMessageOffset(serializedTx: Uint8Array): number;
8
+ /** V0 messages set the high bit (0x80) on the first message byte; legacy don't. */
9
+ export declare function isVersionedTransactionBytes(serializedTx: Uint8Array): boolean;
10
+ /**
11
+ * Throw unless `returned` keeps the byte-identical message of `sent` — signing
12
+ * may only add a signature. Compares the message region only (sigs differ).
13
+ */
14
+ export declare function assertSameMessage(sent: Uint8Array, returned: Uint8Array): void;
15
+ //# sourceMappingURL=solana-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana-message.d.ts","sourceRoot":"","sources":["../src/solana-message.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,UAAU,GAAG,MAAM,CAoBpE;AAED,mFAAmF;AACnF,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,UAAU,GAAG,OAAO,CAI7E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,UAAU,GACnB,IAAI,CAuBN"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Solana tx wire-format helpers (pure byte ops, no @solana/web3.js).
3
+ * Wire format: [shortvec sigCount] [sigCount × 64-byte sigs] [message bytes].
4
+ * Used to confirm a wallet only ADDED a signature and didn't change the message.
5
+ */
6
+ /** Offset where the message begins, or -1 if the tx bytes are malformed. */
7
+ export function solanaMessageOffset(serializedTx) {
8
+ let offset = 0;
9
+ let sigCount = 0;
10
+ let shift = 0;
11
+ let terminated = false;
12
+ // shortvec: little-endian base-128, continuation bit 0x80.
13
+ while (offset < serializedTx.length) {
14
+ const byte = serializedTx[offset];
15
+ sigCount |= (byte & 0x7f) << shift;
16
+ offset++;
17
+ if ((byte & 0x80) === 0) {
18
+ terminated = true;
19
+ break;
20
+ }
21
+ shift += 7;
22
+ if (shift >= 32)
23
+ return -1;
24
+ }
25
+ if (!terminated)
26
+ return -1;
27
+ const messageStart = offset + sigCount * 64;
28
+ return messageStart >= serializedTx.length ? -1 : messageStart;
29
+ }
30
+ /** V0 messages set the high bit (0x80) on the first message byte; legacy don't. */
31
+ export function isVersionedTransactionBytes(serializedTx) {
32
+ const messageStart = solanaMessageOffset(serializedTx);
33
+ if (messageStart < 0)
34
+ return false;
35
+ return (serializedTx[messageStart] & 0x80) !== 0;
36
+ }
37
+ /**
38
+ * Throw unless `returned` keeps the byte-identical message of `sent` — signing
39
+ * may only add a signature. Compares the message region only (sigs differ).
40
+ */
41
+ export function assertSameMessage(sent, returned) {
42
+ const sentStart = solanaMessageOffset(sent);
43
+ const returnedStart = solanaMessageOffset(returned);
44
+ if (sentStart < 0 || returnedStart < 0) {
45
+ throw new Error('Malformed Solana transaction: cannot locate message bytes');
46
+ }
47
+ // Signing fills a pre-allocated slot, so the sig count (hence the offset)
48
+ // can't change. A different offset = added/dropped signer → reject.
49
+ if (sentStart !== returnedStart) {
50
+ throw new Error('Signed transaction does not match the request — signature layout changed');
51
+ }
52
+ const sentMsg = sent.subarray(sentStart);
53
+ const returnedMsg = returned.subarray(returnedStart);
54
+ const tampered = sentMsg.length !== returnedMsg.length ||
55
+ sentMsg.some((byte, i) => byte !== returnedMsg[i]);
56
+ if (tampered) {
57
+ throw new Error('Signed transaction does not match the request — wallet returned a different transaction');
58
+ }
59
+ }
60
+ //# sourceMappingURL=solana-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana-message.js","sourceRoot":"","sources":["../src/solana-message.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,4EAA4E;AAC5E,MAAM,UAAU,mBAAmB,CAAC,YAAwB;IAC1D,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,UAAU,GAAG,KAAK,CAAA;IACtB,2DAA2D;IAC3D,OAAO,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAE,CAAA;QAClC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,CAAA;QAClC,MAAM,EAAE,CAAA;QACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,UAAU,GAAG,IAAI,CAAA;YACjB,MAAK;QACP,CAAC;QACD,KAAK,IAAI,CAAC,CAAA;QACV,IAAI,KAAK,IAAI,EAAE;YAAE,OAAO,CAAC,CAAC,CAAA;IAC5B,CAAC;IACD,IAAI,CAAC,UAAU;QAAE,OAAO,CAAC,CAAC,CAAA;IAC1B,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,EAAE,CAAA;IAC3C,OAAO,YAAY,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAA;AAChE,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,2BAA2B,CAAC,YAAwB;IAClE,MAAM,YAAY,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAA;IACtD,IAAI,YAAY,GAAG,CAAC;QAAE,OAAO,KAAK,CAAA;IAClC,OAAO,CAAC,YAAY,CAAC,YAAY,CAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAgB,EAChB,QAAoB;IAEpB,MAAM,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAA;IAC3C,MAAM,aAAa,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IACnD,IAAI,SAAS,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;IAC9E,CAAC;IACD,0EAA0E;IAC1E,oEAAoE;IACpE,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,0EAA0E,CAC3E,CAAA;IACH,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;IACxC,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA;IACpD,MAAM,QAAQ,GACZ,OAAO,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;IACpD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,yFAAyF,CAC1F,CAAA;IACH,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meshconnect/uwc-types",
3
- "version": "0.12.1",
3
+ "version": "0.13.0-snapshot.3776809",
4
4
  "description": "TypeScript types for Universal Wallet Connector",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
package/src/UWC-state.ts CHANGED
@@ -103,16 +103,10 @@ export interface WalletConnectProvider {
103
103
  export interface TonConnectWalletProvider {
104
104
  supportedNetworkIds: NetworkId[]
105
105
  /**
106
- * Override for the app_name used to look up this wallet in the TonConnect
107
- * wallets-v2.json list. The SDK resolves bridgeUrl + universalLink from
108
- * this key at connect time.
109
- *
110
- * Defaults to jsBridgeKey (from extensionInjectedProvider.namespaceMetaData.tvm)
111
- * which works for most wallets (e.g. Tonkeeper: jsBridgeKey = app_name = 'tonkeeper').
112
- *
113
- * Only needed when the wallet list app_name differs from jsBridgeKey.
114
- * Example: OKX has jsBridgeKey 'okxTonWallet' (shared by both apps) but
115
- * two wallet list entries — 'okxWallet' (standalone) vs 'okxTonWallet' (trading app).
106
+ * app_name used to look up this wallet in the TonConnect wallets-v2.json list
107
+ * (the SDK resolves bridgeUrl + universalLink from it). Defaults to jsBridgeKey,
108
+ * which is correct for most wallets; set it only when the list's app_name
109
+ * differs — e.g. OKX (jsBridgeKey 'okxTonWallet', wallet-list entry 'okxWallet').
116
110
  */
117
111
  walletListAppName?: string
118
112
  }
@@ -121,6 +115,13 @@ export interface TonConnectWalletProvider {
121
115
  export interface TonConnectConfig {
122
116
  manifestUrl: string | (() => string)
123
117
  walletsListSource?: string
118
+ /**
119
+ * Fired once, synchronously, when a session is resumed from storage instead of
120
+ * a fresh handshake (just before connect() resolves its ConnectorResult).
121
+ * Intended for a single telemetry tag (e.g. restored: true). Optional —
122
+ * omitting it keeps restoration working, only the signal is dropped.
123
+ */
124
+ onSessionRestored?: () => void
124
125
  }
125
126
 
126
127
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
package/src/connector.ts CHANGED
@@ -141,4 +141,11 @@ export interface Connector {
141
141
  from: string,
142
142
  networks: Network[]
143
143
  ): Promise<Record<string, EVMCapabilities>>
144
+
145
+ /**
146
+ * Sign a Solana tx without broadcasting — raw bytes in/out (no @solana/web3.js
147
+ * for callers). Fee-payer relay flows: the wallet adds only the user's
148
+ * signature, the relay broadcasts. Optional; not all connectors support it.
149
+ */
150
+ signSolanaTransactionBytes?(serializedTx: Uint8Array): Promise<Uint8Array>
144
151
  }
package/src/index.ts CHANGED
@@ -10,3 +10,4 @@ export * from './react-hooks'
10
10
  export * from './signature'
11
11
  export * from './transactions'
12
12
  export * from './errors'
13
+ export * from './solana-message'
@@ -258,6 +258,21 @@ export interface UseSignMessageReturn {
258
258
  error: WalletError | undefined
259
259
  }
260
260
 
261
+ // useSignSolanaTransaction hook types
262
+
263
+ /**
264
+ * Return type for useSignSolanaTransaction — sign-only Solana signing (bytes in,
265
+ * bytes out) for fee-payer relay flows where the relay, not the wallet, broadcasts.
266
+ * @example
267
+ * const signed = await signSolanaTransaction(unsignedBytes)
268
+ */
269
+ export interface UseSignSolanaTransactionReturn {
270
+ /** Sign serialized tx bytes without broadcasting. Throws if no wallet / signing fails. */
271
+ signSolanaTransaction: (serializedTx: Uint8Array) => Promise<Uint8Array>
272
+ isLoading: boolean
273
+ error: WalletError | undefined
274
+ }
275
+
261
276
  // useTransaction hook types
262
277
 
263
278
  /**
@@ -0,0 +1,111 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import {
3
+ solanaMessageOffset,
4
+ isVersionedTransactionBytes,
5
+ assertSameMessage
6
+ } from './solana-message'
7
+
8
+ /**
9
+ * Build a fake serialized tx: [sigCount (single shortvec byte, <128)]
10
+ * + sigCount × 64 signature bytes + message bytes.
11
+ */
12
+ function makeTx(
13
+ sigCount: number,
14
+ message: number[],
15
+ sigFill: (slot: number) => number[] = () => new Array(64).fill(0)
16
+ ): Uint8Array {
17
+ const sigs: number[] = []
18
+ for (let s = 0; s < sigCount; s++) sigs.push(...sigFill(s))
19
+ return Uint8Array.from([sigCount, ...sigs, ...message])
20
+ }
21
+
22
+ describe('solanaMessageOffset', () => {
23
+ it('points just past the signature array', () => {
24
+ expect(solanaMessageOffset(makeTx(1, [0x01, 0x02]))).toBe(1 + 64)
25
+ expect(solanaMessageOffset(makeTx(2, [0x01]))).toBe(1 + 128)
26
+ })
27
+
28
+ it('returns -1 when the shortvec never terminates', () => {
29
+ expect(solanaMessageOffset(Uint8Array.from([0x80, 0x80, 0x80]))).toBe(-1)
30
+ })
31
+
32
+ it('returns -1 when the signatures overrun the buffer', () => {
33
+ // Claims 2 sigs (128 bytes) but only 10 bytes follow.
34
+ expect(
35
+ solanaMessageOffset(Uint8Array.from([0x02, ...new Array(10).fill(0)]))
36
+ ).toBe(-1)
37
+ })
38
+
39
+ it('returns -1 when there is no message after the signatures', () => {
40
+ // 1 sig (64 bytes), nothing after → offset lands exactly at the end.
41
+ expect(
42
+ solanaMessageOffset(Uint8Array.from([0x01, ...new Array(64).fill(0)]))
43
+ ).toBe(-1)
44
+ })
45
+ })
46
+
47
+ describe('isVersionedTransactionBytes', () => {
48
+ it('true when the first message byte sets the version high bit', () => {
49
+ expect(isVersionedTransactionBytes(makeTx(1, [0x80, 0x00]))).toBe(true)
50
+ })
51
+
52
+ it('false for a legacy message', () => {
53
+ expect(isVersionedTransactionBytes(makeTx(1, [0x01, 0x00]))).toBe(false)
54
+ })
55
+
56
+ it('false for malformed bytes', () => {
57
+ expect(isVersionedTransactionBytes(Uint8Array.from([0x80, 0x80]))).toBe(
58
+ false
59
+ )
60
+ })
61
+ })
62
+
63
+ describe('assertSameMessage', () => {
64
+ const message = [0x09, 0x08, 0x07, 0x06]
65
+
66
+ it('passes when only the signature differs (freshly signed tx)', () => {
67
+ // Relay fee-payer in slot 0 (unchanged), user signs slot 1.
68
+ const sent = makeTx(2, message, () => new Array(64).fill(0))
69
+ const signed = makeTx(2, message, slot =>
70
+ new Array(64).fill(slot === 1 ? 0xff : 0)
71
+ )
72
+ expect(() => assertSameMessage(sent, signed)).not.toThrow()
73
+ })
74
+
75
+ it('throws when the signature count changes, even if message bytes match', () => {
76
+ // returned drops a signature slot (2 → 1) but keeps the same message bytes;
77
+ // the offset shifts, so a naive message-only compare would wrongly pass.
78
+ const sent = makeTx(2, message)
79
+ const returnedFewerSlots = makeTx(1, message)
80
+ expect(() => assertSameMessage(sent, returnedFewerSlots)).toThrow(
81
+ 'signature layout changed'
82
+ )
83
+ })
84
+
85
+ it('throws when message bytes change (tampered recipient/amount)', () => {
86
+ const sent = makeTx(1, message)
87
+ const tampered = makeTx(1, [0x09, 0x08, 0x07, 0x05]) // last byte flipped
88
+ expect(() => assertSameMessage(sent, tampered)).toThrow(
89
+ 'Signed transaction does not match the request'
90
+ )
91
+ })
92
+
93
+ it('throws when the message length changes', () => {
94
+ const sent = makeTx(1, message)
95
+ const longer = makeTx(1, [...message, 0x00])
96
+ expect(() => assertSameMessage(sent, longer)).toThrow(
97
+ 'Signed transaction does not match the request'
98
+ )
99
+ })
100
+
101
+ it('throws on malformed input (cannot locate message)', () => {
102
+ const sent = makeTx(1, message)
103
+ const malformed = Uint8Array.from([0x80, 0x80])
104
+ expect(() => assertSameMessage(sent, malformed)).toThrow(
105
+ 'Malformed Solana transaction'
106
+ )
107
+ expect(() => assertSameMessage(malformed, sent)).toThrow(
108
+ 'Malformed Solana transaction'
109
+ )
110
+ })
111
+ })
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Solana tx wire-format helpers (pure byte ops, no @solana/web3.js).
3
+ * Wire format: [shortvec sigCount] [sigCount × 64-byte sigs] [message bytes].
4
+ * Used to confirm a wallet only ADDED a signature and didn't change the message.
5
+ */
6
+
7
+ /** Offset where the message begins, or -1 if the tx bytes are malformed. */
8
+ export function solanaMessageOffset(serializedTx: Uint8Array): number {
9
+ let offset = 0
10
+ let sigCount = 0
11
+ let shift = 0
12
+ let terminated = false
13
+ // shortvec: little-endian base-128, continuation bit 0x80.
14
+ while (offset < serializedTx.length) {
15
+ const byte = serializedTx[offset]!
16
+ sigCount |= (byte & 0x7f) << shift
17
+ offset++
18
+ if ((byte & 0x80) === 0) {
19
+ terminated = true
20
+ break
21
+ }
22
+ shift += 7
23
+ if (shift >= 32) return -1
24
+ }
25
+ if (!terminated) return -1
26
+ const messageStart = offset + sigCount * 64
27
+ return messageStart >= serializedTx.length ? -1 : messageStart
28
+ }
29
+
30
+ /** V0 messages set the high bit (0x80) on the first message byte; legacy don't. */
31
+ export function isVersionedTransactionBytes(serializedTx: Uint8Array): boolean {
32
+ const messageStart = solanaMessageOffset(serializedTx)
33
+ if (messageStart < 0) return false
34
+ return (serializedTx[messageStart]! & 0x80) !== 0
35
+ }
36
+
37
+ /**
38
+ * Throw unless `returned` keeps the byte-identical message of `sent` — signing
39
+ * may only add a signature. Compares the message region only (sigs differ).
40
+ */
41
+ export function assertSameMessage(
42
+ sent: Uint8Array,
43
+ returned: Uint8Array
44
+ ): void {
45
+ const sentStart = solanaMessageOffset(sent)
46
+ const returnedStart = solanaMessageOffset(returned)
47
+ if (sentStart < 0 || returnedStart < 0) {
48
+ throw new Error('Malformed Solana transaction: cannot locate message bytes')
49
+ }
50
+ // Signing fills a pre-allocated slot, so the sig count (hence the offset)
51
+ // can't change. A different offset = added/dropped signer → reject.
52
+ if (sentStart !== returnedStart) {
53
+ throw new Error(
54
+ 'Signed transaction does not match the request — signature layout changed'
55
+ )
56
+ }
57
+ const sentMsg = sent.subarray(sentStart)
58
+ const returnedMsg = returned.subarray(returnedStart)
59
+ const tampered =
60
+ sentMsg.length !== returnedMsg.length ||
61
+ sentMsg.some((byte, i) => byte !== returnedMsg[i])
62
+ if (tampered) {
63
+ throw new Error(
64
+ 'Signed transaction does not match the request — wallet returned a different transaction'
65
+ )
66
+ }
67
+ }