@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.
- package/dist/connector.d.ts +29 -34
- package/dist/connector.d.ts.map +1 -1
- package/dist/observability.d.ts +0 -75
- package/dist/observability.d.ts.map +1 -1
- package/dist/react-hooks.d.ts +9 -7
- package/dist/react-hooks.d.ts.map +1 -1
- package/dist/session.d.ts +0 -9
- package/dist/session.d.ts.map +1 -1
- package/dist/wallet-connect-connector.d.ts +0 -61
- package/dist/wallet-connect-connector.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/connector.ts +34 -37
- package/src/observability.ts +0 -92
- package/src/react-hooks.ts +9 -6
- package/src/session.ts +0 -9
- package/src/wallet-connect-connector.ts +0 -65
package/dist/connector.d.ts
CHANGED
|
@@ -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 {
|
|
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
|
|
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
|
|
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<
|
|
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
|
package/dist/connector.d.ts.map
CHANGED
|
@@ -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,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,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,
|
|
1
|
+
{"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../src/connector.ts"],"names":[],"mappings":"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"}
|
package/dist/observability.d.ts
CHANGED
|
@@ -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
|
|
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"}
|
package/dist/react-hooks.d.ts
CHANGED
|
@@ -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
|
|
207
|
-
* console.log('Signature:',
|
|
208
|
-
* // The signature state
|
|
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
|
|
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<
|
|
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":"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,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
|
|
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
|
package/dist/session.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
|
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
package/src/connector.ts
CHANGED
|
@@ -17,7 +17,7 @@ import type {
|
|
|
17
17
|
TransactionRequest,
|
|
18
18
|
TransactionResult
|
|
19
19
|
} from './transactions'
|
|
20
|
-
import type {
|
|
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
|
|
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<
|
|
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
|
}
|
package/src/observability.ts
CHANGED
|
@@ -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
|
package/src/react-hooks.ts
CHANGED
|
@@ -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
|
|
235
|
-
* console.log('Signature:',
|
|
236
|
-
* // The signature state
|
|
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
|
|
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<
|
|
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
|
}
|