@meshconnect/uwc-types 0.20.0-snapshot.27c59bd → 0.20.0-snapshot.2829779

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.
@@ -3,7 +3,7 @@ import type { ConnectionMode } from './connection-mode';
3
3
  import type { AvailableAddress } from './session';
4
4
  import type { DetectedEIP6963WalletInfo, DetectedSolanaWalletInfo, DetectedTronWalletInfo, DetectedTonWalletInfo, ExtensionInjectedProvider, IntegratedBrowserInjectedProvider, WalletConnectProvider, TonConnectWalletProvider, WalletMetadata } from './UWC-state';
5
5
  import type { EVMCapabilities, TransactionRequest, TransactionResult } from './transactions';
6
- import type { SignatureType, EIP712TypedData } from './signature';
6
+ import type { SignatureResult, EIP712TypedData } from './signature';
7
7
  /**
8
8
  * A post-connect wallet lifecycle change observed from the live provider.
9
9
  *
@@ -44,12 +44,6 @@ export interface ConnectorResult {
44
44
  address: string;
45
45
  availableAddresses: AvailableAddress[];
46
46
  publicKey?: string;
47
- /**
48
- * True when the connector satisfied this connect() by adopting a live stored
49
- * session instead of a fresh pairing (WalletConnect session reuse, MFS-642).
50
- * Propagated onto the Session for observability. Absent = fresh connect.
51
- */
52
- reused?: boolean;
53
47
  }
54
48
  /**
55
49
  * Result interface for network switch operations
@@ -59,21 +53,6 @@ export interface SwitchNetworkResult {
59
53
  address: string;
60
54
  availableAddresses?: AvailableAddress[];
61
55
  }
62
- /**
63
- * Optional per-call hints for connect(). Additive and connector-agnostic —
64
- * connectors that do not use a field simply ignore it.
65
- */
66
- export interface ConnectOptions {
67
- /**
68
- * Display name of the wallet the user selected (from the catalog). The
69
- * WalletConnect connector keys its session-reuse record on this trusted name:
70
- * it only ever re-adopts a session it previously recorded for the same selected
71
- * wallet, never one established by another (possibly rogue) peer. Ignored by
72
- * connectors without session reuse; absence disables reuse (fresh pairing is
73
- * always safe).
74
- */
75
- walletName?: string;
76
- }
77
56
  /**
78
57
  * Common interface for all wallet connectors
79
58
  */
@@ -84,7 +63,7 @@ export interface Connector {
84
63
  * @param args Additional arguments specific to the connector type
85
64
  * @returns A promise that resolves to a ConnectorResult containing the network ID, wallet address, and available addresses
86
65
  */
87
- connect(network: Network, provider?: ExtensionInjectedProvider | IntegratedBrowserInjectedProvider | WalletConnectProvider | TonConnectWalletProvider, options?: ConnectOptions): Promise<ConnectorResult>;
66
+ connect(network: Network, provider?: ExtensionInjectedProvider | IntegratedBrowserInjectedProvider | WalletConnectProvider | TonConnectWalletProvider): Promise<ConnectorResult>;
88
67
  /**
89
68
  * Get the connection URI for the wallet, if applicable
90
69
  * This is typically used for WalletConnect or similar protocols
@@ -112,15 +91,6 @@ export interface Connector {
112
91
  * @returns A promise that resolves when the disconnection is complete
113
92
  */
114
93
  disconnect?(): Promise<void>;
115
- /**
116
- * Release any long-lived listeners/resources the connector attached at init
117
- * (distinct from `disconnect()`, which tears down the wallet SESSION). Called on
118
- * full connector teardown (`UniversalWalletConnector.dispose()`), e.g. logout or
119
- * a connector swap, so listeners don't leak across lifecycles. Optional +
120
- * synchronous + idempotent — only connectors that attach init-time listeners
121
- * (WalletConnect) implement it.
122
- */
123
- dispose?(): void;
124
94
  /**
125
95
  * Switch to a different network
126
96
  * @param network The network to switch to
@@ -140,9 +110,12 @@ export interface Connector {
140
110
  * Sign a message with the connected wallet
141
111
  * @param message The message to sign
142
112
  * @param provider The wallet provider (required for injected connector)
143
- * @returns A promise that resolves to the signature
113
+ * @returns A promise that resolves to a {@link SignatureResult} carrying both
114
+ * the signature and the EXACT address it was signed with. Consumers verifying
115
+ * ownership MUST claim `result.address` (the live signer) rather than a
116
+ * possibly-stale session address, which can diverge after an account switch.
144
117
  */
145
- signMessage?(message: string, provider?: ExtensionInjectedProvider | IntegratedBrowserInjectedProvider | WalletConnectProvider | TonConnectWalletProvider): Promise<SignatureType>;
118
+ signMessage?(message: string, provider?: ExtensionInjectedProvider | IntegratedBrowserInjectedProvider | WalletConnectProvider | TonConnectWalletProvider): Promise<SignatureResult>;
146
119
  /**
147
120
  * Sign EIP-712 typed structured data (eth_signTypedData_v4).
148
121
  * Required for ERC-3009 (Transfer With Authorization) and EIP-2612 (Permit) relay flows.
@@ -179,5 +152,27 @@ export interface Connector {
179
152
  * observes lifecycle leaves it undefined entirely.
180
153
  */
181
154
  onLifecycleEvent?(listener: (event: WalletLifecycleEvent) => void, context: WalletLifecycleContext): (() => void) | undefined;
155
+ /**
156
+ * Subscribe to the live provider's REAL account list for the active
157
+ * session — used only to keep UWC's own session state (activeAddress /
158
+ * availableAddresses) in sync with the wallet. This is a distinct concern
159
+ * from `onLifecycleEvent`: that stream is PII-safe telemetry and must
160
+ * never carry an address; this one exists specifically to carry it.
161
+ *
162
+ * An empty array signals the wallet-side logout/lock condition — the
163
+ * caller (core) treats it as a full disconnect. Returns an unsubscribe
164
+ * function, or `undefined` when this connector/session can't be observed
165
+ * (no live `.on`, unsupported namespace). Optional: a connector that
166
+ * never observes real account changes leaves it undefined entirely.
167
+ */
168
+ onAccountsChanged?(listener: (accounts: string[]) => void, context: WalletLifecycleContext): (() => void) | undefined;
169
+ /**
170
+ * Read the wallet's LIVE current address for a given namespace, re-read at
171
+ * call time (not the connect-time cache), so it reflects an in-wallet account
172
+ * switch. Optional: only connectors backed by a live provider/adapter per
173
+ * namespace implement it (injected, tron). Returns null when the namespace
174
+ * isn't connected or no address is available. Must never throw.
175
+ */
176
+ getLiveAccount?(namespace: Namespace): Promise<string | null>;
182
177
  }
183
178
  //# sourceMappingURL=connector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../src/connector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../src/connector.ts"],"names":[],"mappings":"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"}
@@ -11,81 +11,6 @@
11
11
  * wires them to whatever backend they run (Datadog, Amplitude, Segment, …).
12
12
  */
13
13
  export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
14
- /**
15
- * Why an opt-in WalletConnect session-reuse attempt fell back to a fresh pairing
16
- * instead of adopting a stored session (MFS-642). Small, stable enum so it can
17
- * drive a reuse-outcome dashboard without high cardinality. Emitted via
18
- * `WalletConnectConfig.onSessionReuseSkipped`.
19
- *
20
- * - `unscoped` — reuse is on but no `sessionReuseScopeId` was supplied (e.g. the
21
- * link token carries no end-user id), so reuse is disabled by
22
- * the user-binding rule. Split from `no_record` so the funnel
23
- * separates "first connect" from "this consumer/user can never
24
- * reuse" — the latter sizes the traffic where the integration
25
- * (not the user) blocks adoption.
26
- * - `no_record` — no topic recorded for the selected wallet (e.g. first connect),
27
- * or the recorded session is no longer in storage.
28
- * - `expired` — the recorded session exists but is past its expiry, or expires
29
- * too soon to survive the signing flow (min-remaining-TTL guard).
30
- * - `no_address` — the session carries no account for the requested network.
31
- * - `ping_timeout`— the liveness ping got NO ack within the bounded window (peer
32
- * slow/suspended or the relay socket is dead — CARE-263). Split
33
- * from `ping_error` so a slow-but-alive mobile wallet (which
34
- * would defeat reuse if the window is too tight) is measurable
35
- * separately from a hard failure.
36
- * - `ping_error` — the ping REJECTED (offline / relay / protocol error), i.e. an
37
- * unknown liveness state rather than a confirmed no-ack.
38
- * - `superseded` — a disconnect()/newer connect() invalidated the attempt mid-ping.
39
- */
40
- export type WalletConnectSessionReuseSkipReason = 'unscoped' | 'no_record' | 'expired' | 'no_address' | 'ping_timeout' | 'ping_error' | 'superseded' | 'subscribe_failed' | 'session_gone';
41
- /**
42
- * Payload for `WalletConnectConfig.onSessionReuseSkipped`. Carries the coarse
43
- * reason plus, for the two ping outcomes, the ping round-trip in ms — so a
44
- * consumer can chart the ping-latency distribution and decide whether the bound
45
- * is clipping live-but-slow wallets. (The healthy-ping latency is separately
46
- * observable as the reused connect's own handoff duration.)
47
- */
48
- export interface WalletConnectSessionReuseSkip {
49
- reason: WalletConnectSessionReuseSkipReason;
50
- /**
51
- * Relay round-trip in ms. Present for `ping_timeout` / `ping_error` (the
52
- * liveness ping) and for `subscribe_failed` (the adopt-time subscribe), so the
53
- * bound of whichever probe fired is chartable.
54
- */
55
- pingMs?: number;
56
- }
57
- /**
58
- * Payload for `WalletConnectConfig.onSessionRestored` — context about the
59
- * adopted session, for triaging reused-session failures per wallet (e.g. "does
60
- * wallet X only fail when the session is close to expiry / was adopted stale?").
61
- * Telemetry-only; adoption itself is decided before this fires.
62
- */
63
- export interface WalletConnectSessionRestored {
64
- /**
65
- * Seconds until the adopted session's WC expiry. WC v2 extends expiry on
66
- * activity, so LOW values mean the session sat unused — the stale-session
67
- * facet to correlate with a subsequent sign timeout on the same session.
68
- */
69
- expiresInSeconds: number;
70
- /**
71
- * The peer's self-reported wallet name (`session.peer.metadata.name`).
72
- * UNAUTHENTICATED — never a trust input (adoption is keyed by the app-recorded
73
- * topic, see the connector's reuse trust anchor); carried only so telemetry can
74
- * facet reused-session outcomes by what the wallet claims to be, e.g. to isolate
75
- * a wallet-specific reuse quirk (Rainbow, CARE-263).
76
- */
77
- peerName?: string;
78
- /**
79
- * Whether the session's relay topic was ALREADY subscribed when we adopted it
80
- * (MFS-642 subscribe-on-adopt). `false` means we had to (re)subscribe — the
81
- * stored session had fallen out of the relayer's subscription cache and would
82
- * have been deaf without the fix. Correlate with sign outcomes to see how often
83
- * reuse depended on the re-subscribe (genuine cache loss vs. probe race).
84
- */
85
- alreadySubscribed?: boolean;
86
- /** Round-trip in ms of the adopt-time relay (re)subscribe. */
87
- subscribeLatencyMs?: number;
88
- }
89
14
  /**
90
15
  * Pluggable logger. The default implementation (`createLogger`) is console-backed
91
16
  * and level-gated; inject your own to redirect UWC's internal logging into your
@@ -1 +1 @@
1
- {"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../src/observability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,MAAM,mCAAmC,GAC3C,UAAU,GACV,WAAW,GACX,SAAS,GACT,YAAY,GACZ,cAAc,GACd,YAAY,GACZ,YAAY,GAIZ,kBAAkB,GAGlB,cAAc,CAAA;AAElB;;;;;;GAMG;AACH,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE,mCAAmC,CAAA;IAC3C;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;;GAKG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,CAAA;IACxB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,8DAA8D;IAC9D,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED;;;;;GAKG;AACH,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAChD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC/C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC/C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;CACjD;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,cAAc,GACtB,wBAAwB,GACxB,+BAA+B,GAC/B,wBAAwB,GACxB,qBAAqB,GACrB,cAAc,GACd,qBAAqB,GACrB,4BAA4B,GAC5B,wBAAwB,GACxB,SAAS,CAAA;AAEb;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAA;AAEnE;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GACnB,eAAe,GACf,gBAAgB,GAChB,cAAc,GACd,eAAe;AACjB,iFAAiF;GAC/E,mBAAmB,GACnB,oBAAoB,GACpB,gBAAgB,GAChB,SAAS;AACX,gFAAgF;GAC9E,oBAAoB,GACpB,SAAS,CAAA;AAEb;;;;GAIG;AACH,MAAM,MAAM,WAAW,GACnB,UAAU,GACV,WAAW,GACX,QAAQ,GACR,KAAK,GACL,SAAS,CAAA;AAEb;;;;GAIG;AACH,MAAM,MAAM,0BAA0B;AACpC,gGAAgG;AAC9F,mCAAmC;AACrC,uFAAuF;GACrF,iCAAiC;AACnC,oEAAoE;GAClE,uBAAuB;AACzB;;;;GAIG;GACD,mBAAmB;AACrB;;;GAGG;GACD,cAAc,CAAA"}
1
+ {"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../src/observability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAE1D;;;;;GAKG;AACH,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAChD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC/C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC/C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;CACjD;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,cAAc,GACtB,wBAAwB,GACxB,+BAA+B,GAC/B,wBAAwB,GACxB,qBAAqB,GACrB,cAAc,GACd,qBAAqB,GACrB,4BAA4B,GAC5B,wBAAwB,GACxB,SAAS,CAAA;AAEb;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAA;AAEnE;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GACnB,eAAe,GACf,gBAAgB,GAChB,cAAc,GACd,eAAe;AACjB,iFAAiF;GAC/E,mBAAmB,GACnB,oBAAoB,GACpB,gBAAgB,GAChB,SAAS;AACX,gFAAgF;GAC9E,oBAAoB,GACpB,SAAS,CAAA;AAEb;;;;GAIG;AACH,MAAM,MAAM,WAAW,GACnB,UAAU,GACV,WAAW,GACX,QAAQ,GACR,KAAK,GACL,SAAS,CAAA;AAEb;;;;GAIG;AACH,MAAM,MAAM,0BAA0B;AACpC,gGAAgG;AAC9F,mCAAmC;AACrC,uFAAuF;GACrF,iCAAiC;AACnC,oEAAoE;GAClE,uBAAuB;AACzB;;;;GAIG;GACD,mBAAmB;AACrB;;;GAGG;GACD,cAAc,CAAA"}
@@ -1,4 +1,4 @@
1
- import type { NetworkId, Network, ConnectionMode, Session, AvailableAddress, TransactionRequest, TransactionResult, WalletError, EVMCapabilities, SignatureType, EIP712TypedData, WalletMetadata } from './index';
1
+ import type { NetworkId, Network, ConnectionMode, Session, AvailableAddress, TransactionRequest, TransactionResult, WalletError, EVMCapabilities, SignatureType, SignatureResult, EIP712TypedData, WalletMetadata } from './index';
2
2
  /**
3
3
  * WalletConnect connection interface for the useConnection hook
4
4
  */
@@ -203,20 +203,22 @@ export interface UseSwitchNetworkReturn {
203
203
  * const { signMessage, isLoading, signature } = useSignMessage()
204
204
  *
205
205
  * const handleSign = async () => {
206
- * const sig = await signMessage('Hello World')
207
- * console.log('Signature:', sig)
208
- * // The signature state will also contain the result
206
+ * const { signature, address } = await signMessage('Hello World')
207
+ * console.log('Signature:', signature, 'signed by', address)
208
+ * // The `signature` state also holds the last result.signature.
209
209
  * }
210
210
  * ```
211
211
  */
212
212
  export interface UseSignMessageReturn {
213
213
  /**
214
- * Signs a message with the connected wallet
214
+ * Signs a message with the connected wallet.
215
215
  * @param message - The message to sign
216
- * @returns Promise that resolves to the signature string
216
+ * @returns Promise resolving to a {@link SignatureResult} with both the
217
+ * signature and the EXACT address it was signed with. Claim
218
+ * `result.address` when verifying ownership — never a stale session address.
217
219
  * @throws Error if no wallet is connected or signing fails
218
220
  */
219
- signMessage: (message: string) => Promise<SignatureType>;
221
+ signMessage: (message: string) => Promise<SignatureResult>;
220
222
  /**
221
223
  * Indicates if a message signing operation is currently in progress
222
224
  */
@@ -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":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,OAAO,EACP,cAAc,EACd,OAAO,EACP,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,aAAa,EACb,eAAe,EACf,eAAe,EACf,cAAc,EACf,MAAM,SAAS,CAAA;AAIhB;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjD;;;OAGG;IACH,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC;;OAEG;IACH,SAAS,EAAE,OAAO,CAAA;IAClB;;OAEG;IACH,KAAK,EAAE,WAAW,GAAG,SAAS,CAAA;IAC9B;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjD;;OAEG;IACH,SAAS,EAAE,OAAO,CAAA;IAClB;;OAEG;IACH,KAAK,EAAE,WAAW,GAAG,SAAS,CAAA;IAC9B;;OAEG;IACH,SAAS,EAAE,OAAO,CAAA;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjD;;;OAGG;IACH,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,WAAW,GAAG,SAAS,CAAA;IAC9B,uDAAuD;IACvD,SAAS,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,aAAa,EAAE,uBAAuB,CAAA;IACtC;;OAEG;IACH,QAAQ,EAAE,kBAAkB,CAAA;IAC5B;;OAEG;IACH,UAAU,EAAE,oBAAoB,CAAA;IAChC;;OAEG;IACH,OAAO,EAAE,OAAO,CAAA;CACjB;AAID;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,OAAO,EAAE,OAAO,CAAA;IAChB;;OAEG;IACH,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B;;OAEG;IACH,aAAa,EAAE,OAAO,GAAG,IAAI,CAAA;IAC7B;;OAEG;IACH,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,IAAI,CAAA;IAChE;;OAEG;IACH,+BAA+B,EAAE,eAAe,GAAG,IAAI,CAAA;IACvD;;OAEG;IACH,iBAAiB,EAAE,OAAO,EAAE,CAAA;IAC5B;;OAEG;IACH,eAAe,EAAE,cAAc,GAAG,IAAI,CAAA;IACtC;;OAEG;IACH,kBAAkB,EAAE,gBAAgB,EAAE,CAAA;IACtC;;;OAGG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAID;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,aAAa,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtD;;OAEG;IACH,SAAS,EAAE,OAAO,CAAA;IAClB;;;OAGG;IACH,wBAAwB,EAAE,OAAO,CAAA;IACjC;;OAEG;IACH,KAAK,EAAE,WAAW,GAAG,SAAS,CAAA;CAC/B;AAID;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;;;OAOG;IACH,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAA;IAC1D;;OAEG;IACH,SAAS,EAAE,OAAO,CAAA;IAClB;;OAEG;IACH,SAAS,EAAE,aAAa,GAAG,SAAS,CAAA;IACpC;;OAEG;IACH,KAAK,EAAE,WAAW,GAAG,SAAS,CAAA;CAC/B;AAID;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,aAAa,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAC9D;;OAEG;IACH,SAAS,EAAE,OAAO,CAAA;IAClB;;OAEG;IACH,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B;;OAEG;IACH,KAAK,EAAE,WAAW,GAAG,SAAS,CAAA;CAC/B;AAID;;;;;GAKG;AACH,MAAM,WAAW,8BAA8B;IAC7C,0FAA0F;IAC1F,qBAAqB,EAAE,CAAC,YAAY,EAAE,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;IACxE,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,WAAW,GAAG,SAAS,CAAA;CAC/B;AAID;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,eAAe,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAC5E;;OAEG;IACH,SAAS,EAAE,OAAO,CAAA;IAClB;;OAEG;IACH,iBAAiB,EAAE,iBAAiB,GAAG,SAAS,CAAA;IAChD;;OAEG;IACH,KAAK,EAAE,WAAW,GAAG,SAAS,CAAA;CAC/B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB;;OAEG;IACH,KAAK,CAAC,EAAE,WAAW,CAAA;CACpB;AAID;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,2BAA2B;IAC1C,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC;;OAEG;IACH,SAAS,EAAE,OAAO,CAAA;IAClB;;OAEG;IACH,KAAK,EAAE,WAAW,GAAG,SAAS,CAAA;CAC/B;AAID;;;;;;;;;GASG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,eAAe,EAAE,cAAc,EAAE,CAAA;IACjC;;OAEG;IACH,OAAO,EAAE,OAAO,CAAA;CACjB"}
package/dist/session.d.ts CHANGED
@@ -16,14 +16,5 @@ export interface Session {
16
16
  availableNetworks: Network[];
17
17
  activeWallet: WalletMetadata | null;
18
18
  availableAddresses: AvailableAddress[];
19
- /**
20
- * Connection provenance: true when this session was adopted from a live stored
21
- * WalletConnect session (MFS-642 reuse) rather than established by a fresh
22
- * pairing handshake. Drives observability — it rides the `connected` telemetry
23
- * and every subsequent operation handoff so success/error/timeout of reused
24
- * sessions can be evaluated and triaged separately from fresh ones. Absent/false
25
- * for fresh pairings and all non-WalletConnect connections.
26
- */
27
- reused?: boolean;
28
19
  }
29
20
  //# sourceMappingURL=session.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,SAAS,CAAA;CACrB;AAED,MAAM,WAAW,OAAO;IACtB,cAAc,EAAE,cAAc,GAAG,IAAI,CAAA;IACrC,aAAa,EAAE,OAAO,GAAG,IAAI,CAAA;IAC7B,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,IAAI,CAAA;IAChE,+BAA+B,EAAE,eAAe,GAAG,IAAI,CAAA;IACvD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,iBAAiB,EAAE,OAAO,EAAE,CAAA;IAC5B,YAAY,EAAE,cAAc,GAAG,IAAI,CAAA;IACnC,kBAAkB,EAAE,gBAAgB,EAAE,CAAA;IACtC;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,SAAS,CAAA;CACrB;AAED,MAAM,WAAW,OAAO;IACtB,cAAc,EAAE,cAAc,GAAG,IAAI,CAAA;IACrC,aAAa,EAAE,OAAO,GAAG,IAAI,CAAA;IAC7B,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,IAAI,CAAA;IAChE,+BAA+B,EAAE,eAAe,GAAG,IAAI,CAAA;IACvD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,iBAAiB,EAAE,OAAO,EAAE,CAAA;IAC5B,YAAY,EAAE,cAAc,GAAG,IAAI,CAAA;IACnC,kBAAkB,EAAE,gBAAgB,EAAE,CAAA;CACvC"}
@@ -1,4 +1,3 @@
1
- import type { WalletConnectSessionRestored, WalletConnectSessionReuseSkip } from './observability';
2
1
  /**
3
2
  * Configuration for WalletConnect connector
4
3
  */
@@ -10,65 +9,5 @@ export interface WalletConnectConfig {
10
9
  url: string;
11
10
  icons: string[];
12
11
  };
13
- /**
14
- * Opt-in: reuse a live WalletConnect session persisted in storage instead of
15
- * forcing a fresh pairing approval on every connect(). WC v2 keeps approved
16
- * sessions in the SignClient's storage (IndexedDB) for their full ~7-day TTL;
17
- * with this off (the default) UWC ignores them and always re-pairs — the
18
- * historical behaviour (MFS-642). When on, connect() first looks for a stored
19
- * session whose namespaces cover the requested network and reuses it, skipping
20
- * the QR/deep-link round-trip; it falls back to a fresh pairing when none is
21
- * usable. Default false so existing consumers are byte-for-byte unaffected and
22
- * the blast radius is opt-in per consumer.
23
- *
24
- * The SignClient (and its storage) lives in the SAME context that runs this
25
- * connector — for Mesh Link that is the web.meshconnect.com iframe, whose
26
- * per-origin IndexedDB survives the iframe being torn down and re-created — so
27
- * reuse works in the production iframe without any bridge round-trip.
28
- */
29
- enableSessionReuse?: boolean;
30
- /**
31
- * Fired once when connect() resolves from a reused stored session instead of a
32
- * fresh pairing handshake, with context about the adopted session — time to WC
33
- * expiry and the peer's (unauthenticated) self-reported name — so reused-session
34
- * failures can be triaged per wallet and correlated with session staleness.
35
- * Optional — omitting it keeps reuse working, only the signal is dropped.
36
- * No-op unless enableSessionReuse is on. Mirrors TonConnectConfig.onSessionRestored.
37
- */
38
- onSessionRestored?: (restored: WalletConnectSessionRestored) => void;
39
- /**
40
- * Fired when reuse was attempted (enableSessionReuse on + wallet known) but fell
41
- * back to a fresh pairing. Carries the coarse `reason` plus, for the ping
42
- * outcomes, the ping round-trip (`pingMs`). The counterpart to onSessionRestored:
43
- * together they give a reuse-outcome funnel (reused vs the reason it wasn't) for
44
- * monitoring. Telemetry-only; never affects behaviour. No-op unless
45
- * enableSessionReuse is on.
46
- */
47
- onSessionReuseSkipped?: (skip: WalletConnectSessionReuseSkip) => void;
48
- /**
49
- * SECURITY-CRITICAL user binding for session reuse. The Mesh Link iframe shares
50
- * one origin across every client and end-user, so a stored session must be
51
- * bound to the authenticated Link user — otherwise a later user on the same
52
- * device could silently adopt an earlier user's live session without a fresh
53
- * approval. Pass a stable per-user id (the Link user id). Reuse is DISABLED when
54
- * this is empty/absent, regardless of `enableSessionReuse` (skips report as
55
- * `unscoped`) — origin persistence alone is never sufficient. The id is hashed
56
- * before it is persisted, so a PII-bearing id (merchants sometimes use emails as
57
- * user ids) never lands in storage verbatim. No-op unless enableSessionReuse is on.
58
- */
59
- sessionReuseScopeId?: string;
60
- /**
61
- * Opt-in liveness-ping window (ms) for session reuse. Reuse is OPTIMISTIC by
62
- * default: when this is unset (or ≤ 0) connect() adopts a stored session with no
63
- * blocking probe — matching WC's own restore and every mainstream dApp connector
64
- * — and a dead peer surfaces at the first sign (bounded by the app's signing
65
- * escape hatch), not by making every relaunch wait. Set a positive number only if
66
- * you would rather pay an up-front ping and re-pair immediately than risk a late
67
- * failure; a too-tight bound will discard live-but-slow mobile peers (they often
68
- * need > 4s to ack over the relay), so calibrate against the `pingMs` carried by
69
- * onSessionReuseSkipped. Exposed as config so this bound can be tuned per consumer
70
- * without a new UWC release. No-op unless enableSessionReuse is on.
71
- */
72
- sessionReusePingTimeoutMs?: number;
73
12
  }
74
13
  //# sourceMappingURL=wallet-connect-connector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wallet-connect-connector.d.ts","sourceRoot":"","sources":["../src/wallet-connect-connector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,4BAA4B,EAC5B,6BAA6B,EAC9B,MAAM,iBAAiB,CAAA;AAExB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,MAAM,CAAA;QACnB,GAAG,EAAE,MAAM,CAAA;QACX,KAAK,EAAE,MAAM,EAAE,CAAA;KAChB,CAAA;IACD;;;;;;;;;;;;;;;OAeG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,4BAA4B,KAAK,IAAI,CAAA;IACpE;;;;;;;OAOG;IACH,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,6BAA6B,KAAK,IAAI,CAAA;IACrE;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B;;;;;;;;;;;OAWG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAA;CACnC"}
1
+ {"version":3,"file":"wallet-connect-connector.d.ts","sourceRoot":"","sources":["../src/wallet-connect-connector.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,MAAM,CAAA;QACnB,GAAG,EAAE,MAAM,CAAA;QACX,KAAK,EAAE,MAAM,EAAE,CAAA;KAChB,CAAA;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meshconnect/uwc-types",
3
- "version": "0.20.0-snapshot.27c59bd",
3
+ "version": "0.20.0-snapshot.2829779",
4
4
  "description": "TypeScript types for Universal Wallet Connector",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
package/src/connector.ts CHANGED
@@ -17,7 +17,7 @@ import type {
17
17
  TransactionRequest,
18
18
  TransactionResult
19
19
  } from './transactions'
20
- import type { SignatureType, EIP712TypedData } from './signature'
20
+ import type { SignatureResult, EIP712TypedData } from './signature'
21
21
 
22
22
  /**
23
23
  * A post-connect wallet lifecycle change observed from the live provider.
@@ -56,12 +56,6 @@ export interface ConnectorResult {
56
56
  address: string
57
57
  availableAddresses: AvailableAddress[]
58
58
  publicKey?: string
59
- /**
60
- * True when the connector satisfied this connect() by adopting a live stored
61
- * session instead of a fresh pairing (WalletConnect session reuse, MFS-642).
62
- * Propagated onto the Session for observability. Absent = fresh connect.
63
- */
64
- reused?: boolean
65
59
  }
66
60
 
67
61
  /**
@@ -73,22 +67,6 @@ export interface SwitchNetworkResult {
73
67
  availableAddresses?: AvailableAddress[]
74
68
  }
75
69
 
76
- /**
77
- * Optional per-call hints for connect(). Additive and connector-agnostic —
78
- * connectors that do not use a field simply ignore it.
79
- */
80
- export interface ConnectOptions {
81
- /**
82
- * Display name of the wallet the user selected (from the catalog). The
83
- * WalletConnect connector keys its session-reuse record on this trusted name:
84
- * it only ever re-adopts a session it previously recorded for the same selected
85
- * wallet, never one established by another (possibly rogue) peer. Ignored by
86
- * connectors without session reuse; absence disables reuse (fresh pairing is
87
- * always safe).
88
- */
89
- walletName?: string
90
- }
91
-
92
70
  /**
93
71
  * Common interface for all wallet connectors
94
72
  */
@@ -106,8 +84,7 @@ export interface Connector {
106
84
  | ExtensionInjectedProvider
107
85
  | IntegratedBrowserInjectedProvider
108
86
  | WalletConnectProvider
109
- | TonConnectWalletProvider,
110
- options?: ConnectOptions
87
+ | TonConnectWalletProvider
111
88
  ): Promise<ConnectorResult>
112
89
 
113
90
  /**
@@ -142,16 +119,6 @@ export interface Connector {
142
119
  */
143
120
  disconnect?(): Promise<void>
144
121
 
145
- /**
146
- * Release any long-lived listeners/resources the connector attached at init
147
- * (distinct from `disconnect()`, which tears down the wallet SESSION). Called on
148
- * full connector teardown (`UniversalWalletConnector.dispose()`), e.g. logout or
149
- * a connector swap, so listeners don't leak across lifecycles. Optional +
150
- * synchronous + idempotent — only connectors that attach init-time listeners
151
- * (WalletConnect) implement it.
152
- */
153
- dispose?(): void
154
-
155
122
  /**
156
123
  * Switch to a different network
157
124
  * @param network The network to switch to
@@ -189,7 +156,10 @@ export interface Connector {
189
156
  * Sign a message with the connected wallet
190
157
  * @param message The message to sign
191
158
  * @param provider The wallet provider (required for injected connector)
192
- * @returns A promise that resolves to the signature
159
+ * @returns A promise that resolves to a {@link SignatureResult} carrying both
160
+ * the signature and the EXACT address it was signed with. Consumers verifying
161
+ * ownership MUST claim `result.address` (the live signer) rather than a
162
+ * possibly-stale session address, which can diverge after an account switch.
193
163
  */
194
164
  signMessage?(
195
165
  message: string,
@@ -198,7 +168,7 @@ export interface Connector {
198
168
  | IntegratedBrowserInjectedProvider
199
169
  | WalletConnectProvider
200
170
  | TonConnectWalletProvider
201
- ): Promise<SignatureType>
171
+ ): Promise<SignatureResult>
202
172
 
203
173
  /**
204
174
  * Sign EIP-712 typed structured data (eth_signTypedData_v4).
@@ -259,4 +229,31 @@ export interface Connector {
259
229
  listener: (event: WalletLifecycleEvent) => void,
260
230
  context: WalletLifecycleContext
261
231
  ): (() => void) | undefined
232
+
233
+ /**
234
+ * Subscribe to the live provider's REAL account list for the active
235
+ * session — used only to keep UWC's own session state (activeAddress /
236
+ * availableAddresses) in sync with the wallet. This is a distinct concern
237
+ * from `onLifecycleEvent`: that stream is PII-safe telemetry and must
238
+ * never carry an address; this one exists specifically to carry it.
239
+ *
240
+ * An empty array signals the wallet-side logout/lock condition — the
241
+ * caller (core) treats it as a full disconnect. Returns an unsubscribe
242
+ * function, or `undefined` when this connector/session can't be observed
243
+ * (no live `.on`, unsupported namespace). Optional: a connector that
244
+ * never observes real account changes leaves it undefined entirely.
245
+ */
246
+ onAccountsChanged?(
247
+ listener: (accounts: string[]) => void,
248
+ context: WalletLifecycleContext
249
+ ): (() => void) | undefined
250
+
251
+ /**
252
+ * Read the wallet's LIVE current address for a given namespace, re-read at
253
+ * call time (not the connect-time cache), so it reflects an in-wallet account
254
+ * switch. Optional: only connectors backed by a live provider/adapter per
255
+ * namespace implement it (injected, tron). Returns null when the namespace
256
+ * isn't connected or no address is available. Must never throw.
257
+ */
258
+ getLiveAccount?(namespace: Namespace): Promise<string | null>
262
259
  }
@@ -13,98 +13,6 @@
13
13
 
14
14
  export type LogLevel = 'debug' | 'info' | 'warn' | 'error'
15
15
 
16
- /**
17
- * Why an opt-in WalletConnect session-reuse attempt fell back to a fresh pairing
18
- * instead of adopting a stored session (MFS-642). Small, stable enum so it can
19
- * drive a reuse-outcome dashboard without high cardinality. Emitted via
20
- * `WalletConnectConfig.onSessionReuseSkipped`.
21
- *
22
- * - `unscoped` — reuse is on but no `sessionReuseScopeId` was supplied (e.g. the
23
- * link token carries no end-user id), so reuse is disabled by
24
- * the user-binding rule. Split from `no_record` so the funnel
25
- * separates "first connect" from "this consumer/user can never
26
- * reuse" — the latter sizes the traffic where the integration
27
- * (not the user) blocks adoption.
28
- * - `no_record` — no topic recorded for the selected wallet (e.g. first connect),
29
- * or the recorded session is no longer in storage.
30
- * - `expired` — the recorded session exists but is past its expiry, or expires
31
- * too soon to survive the signing flow (min-remaining-TTL guard).
32
- * - `no_address` — the session carries no account for the requested network.
33
- * - `ping_timeout`— the liveness ping got NO ack within the bounded window (peer
34
- * slow/suspended or the relay socket is dead — CARE-263). Split
35
- * from `ping_error` so a slow-but-alive mobile wallet (which
36
- * would defeat reuse if the window is too tight) is measurable
37
- * separately from a hard failure.
38
- * - `ping_error` — the ping REJECTED (offline / relay / protocol error), i.e. an
39
- * unknown liveness state rather than a confirmed no-ack.
40
- * - `superseded` — a disconnect()/newer connect() invalidated the attempt mid-ping.
41
- */
42
- export type WalletConnectSessionReuseSkipReason =
43
- | 'unscoped'
44
- | 'no_record'
45
- | 'expired'
46
- | 'no_address'
47
- | 'ping_timeout'
48
- | 'ping_error'
49
- | 'superseded'
50
- // The adopt-time relay (re)subscribe did not succeed within its bound, so the
51
- // session is provably unhearable (no sign response, no session_delete) — we
52
- // re-pair rather than adopt a deaf session (MFS-642 subscribe-on-adopt).
53
- | 'subscribe_failed'
54
- // After subscribing, a relay-queued `session_delete` flushed and WC dropped the
55
- // session — the wallet had disconnected Mesh while we were offline. Re-pair.
56
- | 'session_gone'
57
-
58
- /**
59
- * Payload for `WalletConnectConfig.onSessionReuseSkipped`. Carries the coarse
60
- * reason plus, for the two ping outcomes, the ping round-trip in ms — so a
61
- * consumer can chart the ping-latency distribution and decide whether the bound
62
- * is clipping live-but-slow wallets. (The healthy-ping latency is separately
63
- * observable as the reused connect's own handoff duration.)
64
- */
65
- export interface WalletConnectSessionReuseSkip {
66
- reason: WalletConnectSessionReuseSkipReason
67
- /**
68
- * Relay round-trip in ms. Present for `ping_timeout` / `ping_error` (the
69
- * liveness ping) and for `subscribe_failed` (the adopt-time subscribe), so the
70
- * bound of whichever probe fired is chartable.
71
- */
72
- pingMs?: number
73
- }
74
-
75
- /**
76
- * Payload for `WalletConnectConfig.onSessionRestored` — context about the
77
- * adopted session, for triaging reused-session failures per wallet (e.g. "does
78
- * wallet X only fail when the session is close to expiry / was adopted stale?").
79
- * Telemetry-only; adoption itself is decided before this fires.
80
- */
81
- export interface WalletConnectSessionRestored {
82
- /**
83
- * Seconds until the adopted session's WC expiry. WC v2 extends expiry on
84
- * activity, so LOW values mean the session sat unused — the stale-session
85
- * facet to correlate with a subsequent sign timeout on the same session.
86
- */
87
- expiresInSeconds: number
88
- /**
89
- * The peer's self-reported wallet name (`session.peer.metadata.name`).
90
- * UNAUTHENTICATED — never a trust input (adoption is keyed by the app-recorded
91
- * topic, see the connector's reuse trust anchor); carried only so telemetry can
92
- * facet reused-session outcomes by what the wallet claims to be, e.g. to isolate
93
- * a wallet-specific reuse quirk (Rainbow, CARE-263).
94
- */
95
- peerName?: string
96
- /**
97
- * Whether the session's relay topic was ALREADY subscribed when we adopted it
98
- * (MFS-642 subscribe-on-adopt). `false` means we had to (re)subscribe — the
99
- * stored session had fallen out of the relayer's subscription cache and would
100
- * have been deaf without the fix. Correlate with sign outcomes to see how often
101
- * reuse depended on the re-subscribe (genuine cache loss vs. probe race).
102
- */
103
- alreadySubscribed?: boolean
104
- /** Round-trip in ms of the adopt-time relay (re)subscribe. */
105
- subscribeLatencyMs?: number
106
- }
107
-
108
16
  /**
109
17
  * Pluggable logger. The default implementation (`createLogger`) is console-backed
110
18
  * and level-gated; inject your own to redirect UWC's internal logging into your
@@ -9,6 +9,7 @@ import type {
9
9
  WalletError,
10
10
  EVMCapabilities,
11
11
  SignatureType,
12
+ SignatureResult,
12
13
  EIP712TypedData,
13
14
  WalletMetadata
14
15
  } from './index'
@@ -231,20 +232,22 @@ export interface UseSwitchNetworkReturn {
231
232
  * const { signMessage, isLoading, signature } = useSignMessage()
232
233
  *
233
234
  * const handleSign = async () => {
234
- * const sig = await signMessage('Hello World')
235
- * console.log('Signature:', sig)
236
- * // The signature state will also contain the result
235
+ * const { signature, address } = await signMessage('Hello World')
236
+ * console.log('Signature:', signature, 'signed by', address)
237
+ * // The `signature` state also holds the last result.signature.
237
238
  * }
238
239
  * ```
239
240
  */
240
241
  export interface UseSignMessageReturn {
241
242
  /**
242
- * Signs a message with the connected wallet
243
+ * Signs a message with the connected wallet.
243
244
  * @param message - The message to sign
244
- * @returns Promise that resolves to the signature string
245
+ * @returns Promise resolving to a {@link SignatureResult} with both the
246
+ * signature and the EXACT address it was signed with. Claim
247
+ * `result.address` when verifying ownership — never a stale session address.
245
248
  * @throws Error if no wallet is connected or signing fails
246
249
  */
247
- signMessage: (message: string) => Promise<SignatureType>
250
+ signMessage: (message: string) => Promise<SignatureResult>
248
251
  /**
249
252
  * Indicates if a message signing operation is currently in progress
250
253
  */
package/src/session.ts CHANGED
@@ -18,13 +18,4 @@ export interface Session {
18
18
  availableNetworks: Network[]
19
19
  activeWallet: WalletMetadata | null
20
20
  availableAddresses: AvailableAddress[]
21
- /**
22
- * Connection provenance: true when this session was adopted from a live stored
23
- * WalletConnect session (MFS-642 reuse) rather than established by a fresh
24
- * pairing handshake. Drives observability — it rides the `connected` telemetry
25
- * and every subsequent operation handoff so success/error/timeout of reused
26
- * sessions can be evaluated and triaged separately from fresh ones. Absent/false
27
- * for fresh pairings and all non-WalletConnect connections.
28
- */
29
- reused?: boolean
30
21
  }
@@ -1,8 +1,3 @@
1
- import type {
2
- WalletConnectSessionRestored,
3
- WalletConnectSessionReuseSkip
4
- } from './observability'
5
-
6
1
  /**
7
2
  * Configuration for WalletConnect connector
8
3
  */
@@ -14,64 +9,4 @@ export interface WalletConnectConfig {
14
9
  url: string
15
10
  icons: string[]
16
11
  }
17
- /**
18
- * Opt-in: reuse a live WalletConnect session persisted in storage instead of
19
- * forcing a fresh pairing approval on every connect(). WC v2 keeps approved
20
- * sessions in the SignClient's storage (IndexedDB) for their full ~7-day TTL;
21
- * with this off (the default) UWC ignores them and always re-pairs — the
22
- * historical behaviour (MFS-642). When on, connect() first looks for a stored
23
- * session whose namespaces cover the requested network and reuses it, skipping
24
- * the QR/deep-link round-trip; it falls back to a fresh pairing when none is
25
- * usable. Default false so existing consumers are byte-for-byte unaffected and
26
- * the blast radius is opt-in per consumer.
27
- *
28
- * The SignClient (and its storage) lives in the SAME context that runs this
29
- * connector — for Mesh Link that is the web.meshconnect.com iframe, whose
30
- * per-origin IndexedDB survives the iframe being torn down and re-created — so
31
- * reuse works in the production iframe without any bridge round-trip.
32
- */
33
- enableSessionReuse?: boolean
34
- /**
35
- * Fired once when connect() resolves from a reused stored session instead of a
36
- * fresh pairing handshake, with context about the adopted session — time to WC
37
- * expiry and the peer's (unauthenticated) self-reported name — so reused-session
38
- * failures can be triaged per wallet and correlated with session staleness.
39
- * Optional — omitting it keeps reuse working, only the signal is dropped.
40
- * No-op unless enableSessionReuse is on. Mirrors TonConnectConfig.onSessionRestored.
41
- */
42
- onSessionRestored?: (restored: WalletConnectSessionRestored) => void
43
- /**
44
- * Fired when reuse was attempted (enableSessionReuse on + wallet known) but fell
45
- * back to a fresh pairing. Carries the coarse `reason` plus, for the ping
46
- * outcomes, the ping round-trip (`pingMs`). The counterpart to onSessionRestored:
47
- * together they give a reuse-outcome funnel (reused vs the reason it wasn't) for
48
- * monitoring. Telemetry-only; never affects behaviour. No-op unless
49
- * enableSessionReuse is on.
50
- */
51
- onSessionReuseSkipped?: (skip: WalletConnectSessionReuseSkip) => void
52
- /**
53
- * SECURITY-CRITICAL user binding for session reuse. The Mesh Link iframe shares
54
- * one origin across every client and end-user, so a stored session must be
55
- * bound to the authenticated Link user — otherwise a later user on the same
56
- * device could silently adopt an earlier user's live session without a fresh
57
- * approval. Pass a stable per-user id (the Link user id). Reuse is DISABLED when
58
- * this is empty/absent, regardless of `enableSessionReuse` (skips report as
59
- * `unscoped`) — origin persistence alone is never sufficient. The id is hashed
60
- * before it is persisted, so a PII-bearing id (merchants sometimes use emails as
61
- * user ids) never lands in storage verbatim. No-op unless enableSessionReuse is on.
62
- */
63
- sessionReuseScopeId?: string
64
- /**
65
- * Opt-in liveness-ping window (ms) for session reuse. Reuse is OPTIMISTIC by
66
- * default: when this is unset (or ≤ 0) connect() adopts a stored session with no
67
- * blocking probe — matching WC's own restore and every mainstream dApp connector
68
- * — and a dead peer surfaces at the first sign (bounded by the app's signing
69
- * escape hatch), not by making every relaunch wait. Set a positive number only if
70
- * you would rather pay an up-front ping and re-pair immediately than risk a late
71
- * failure; a too-tight bound will discard live-but-slow mobile peers (they often
72
- * need > 4s to ack over the relay), so calibrate against the `pingMs` carried by
73
- * onSessionReuseSkipped. Exposed as config so this bound can be tuned per consumer
74
- * without a new UWC release. No-op unless enableSessionReuse is on.
75
- */
76
- sessionReusePingTimeoutMs?: number
77
12
  }