@meshconnect/uwc-types 0.24.0 → 0.26.0
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/UWC-state.d.ts +14 -0
- package/dist/UWC-state.d.ts.map +1 -1
- package/dist/bitcoin.d.ts +65 -0
- package/dist/bitcoin.d.ts.map +1 -0
- package/dist/bitcoin.js +2 -0
- package/dist/bitcoin.js.map +1 -0
- package/dist/connector.d.ts +28 -3
- package/dist/connector.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/observability.d.ts +57 -0
- 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/transactions.d.ts +55 -3
- package/dist/transactions.d.ts.map +1 -1
- package/dist/transactions.js +38 -1
- package/dist/transactions.js.map +1 -1
- package/package.json +1 -1
- package/src/UWC-state.ts +16 -0
- package/src/bitcoin.ts +70 -0
- package/src/connector.ts +33 -3
- package/src/index.ts +1 -0
- package/src/observability.ts +62 -0
- package/src/react-hooks.ts +9 -6
- package/src/transactions.test.ts +53 -0
- package/src/transactions.ts +100 -2
package/dist/UWC-state.d.ts
CHANGED
|
@@ -39,6 +39,12 @@ export interface DetectedTonWalletInfo {
|
|
|
39
39
|
icon: string;
|
|
40
40
|
jsBridgeKey: string;
|
|
41
41
|
}
|
|
42
|
+
export interface DetectedBitcoinWalletInfo {
|
|
43
|
+
uuid: string;
|
|
44
|
+
name: string;
|
|
45
|
+
/** Wallet Standard `bitcoin:*` feature names the wallet advertises. */
|
|
46
|
+
features: string[];
|
|
47
|
+
}
|
|
42
48
|
export interface Eip155Metadata {
|
|
43
49
|
eip155Name: string;
|
|
44
50
|
injectedId: string;
|
|
@@ -65,12 +71,20 @@ export interface TonMetadata {
|
|
|
65
71
|
installed?: boolean;
|
|
66
72
|
detectedWallet?: DetectedTonWalletInfo;
|
|
67
73
|
}
|
|
74
|
+
export interface BitcoinMetadata {
|
|
75
|
+
/** Wallet Standard wallet name used to match the `bitcoin:*` registry entry. */
|
|
76
|
+
walletStandardName?: string;
|
|
77
|
+
injectedId?: string;
|
|
78
|
+
installed?: boolean;
|
|
79
|
+
detectedWallet?: DetectedBitcoinWalletInfo;
|
|
80
|
+
}
|
|
68
81
|
/** Keys are CAIP-2 namespace identifiers. Types use brand names (e.g. tvm → TonMetadata). */
|
|
69
82
|
interface NamespaceMetaDataRegistry {
|
|
70
83
|
eip155: Eip155Metadata;
|
|
71
84
|
solana: SolanaMetadata;
|
|
72
85
|
tron: TronMetadata;
|
|
73
86
|
tvm: TonMetadata;
|
|
87
|
+
bip122: BitcoinMetadata;
|
|
74
88
|
}
|
|
75
89
|
type NamespaceMetaDataMap = {
|
|
76
90
|
[K in Namespace]?: K extends keyof NamespaceMetaDataRegistry ? NamespaceMetaDataRegistry[K] : undefined;
|
package/dist/UWC-state.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UWC-state.d.ts","sourceRoot":"","sources":["../src/UWC-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,sBAAsB,EAAE,OAAO,CAAA;IAC/B,mCAAmC,EAAE,OAAO,CAAA;IAC5C,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,cAAc,CAAC,EAAE,yBAAyB,CAAA;CAC3C;AAED,MAAM,WAAW,cAAc;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,cAAc,CAAC,EAAE,wBAAwB,CAAA;CAC1C;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,cAAc,CAAC,EAAE,sBAAsB,CAAA;CACxC;AAED,MAAM,WAAW,WAAW;IAC1B,oGAAoG;IACpG,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,cAAc,CAAC,EAAE,qBAAqB,CAAA;CACvC;AAED,6FAA6F;AAC7F,UAAU,yBAAyB;IACjC,MAAM,EAAE,cAAc,CAAA;IACtB,MAAM,EAAE,cAAc,CAAA;IACtB,IAAI,EAAE,YAAY,CAAA;IAClB,GAAG,EAAE,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"UWC-state.d.ts","sourceRoot":"","sources":["../src/UWC-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-wallet feature-flag key for `enabledWallets`. Open `string` because the
|
|
3
|
+
* Bitcoin namespace is metadata-driven — the wallet set comes from the passed-in
|
|
4
|
+
* metadata, not a compiled union — so any backend-configured wallet can be gated
|
|
5
|
+
* without a UWC release. Mirrors `TronWalletId`.
|
|
6
|
+
*/
|
|
7
|
+
export type BitcoinWalletId = string;
|
|
8
|
+
/**
|
|
9
|
+
* A bip122 account as surfaced by the wallet (Wallet Standard `bitcoin:*`).
|
|
10
|
+
*
|
|
11
|
+
* Shapes match the Wallet Standard bitcoin account: an `address`, its
|
|
12
|
+
* `publicKey` (needed per-input for PSBT signing), and an optional `purpose`
|
|
13
|
+
* distinguishing payment vs. ordinals addresses on wallets that separate them.
|
|
14
|
+
* `publicKey` is hex here (JSON/transport-safe) — adapters convert to/from the
|
|
15
|
+
* wallet's native `Uint8Array` at the boundary.
|
|
16
|
+
*/
|
|
17
|
+
export interface BitcoinAccount {
|
|
18
|
+
address: string;
|
|
19
|
+
/** Compressed public key, hex-encoded (no `0x`). */
|
|
20
|
+
publicKey: string;
|
|
21
|
+
/** Address purpose, when the wallet distinguishes them (e.g. Phantom-style). */
|
|
22
|
+
purpose?: 'payment' | 'ordinals';
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Params to sign a message (Wallet Standard `bitcoin:signMessage`).
|
|
26
|
+
* `message` is the UTF-8 string; the adapter encodes it to bytes.
|
|
27
|
+
*/
|
|
28
|
+
export interface BitcoinSignMessageParams {
|
|
29
|
+
account: BitcoinAccount;
|
|
30
|
+
message: string;
|
|
31
|
+
/** Signing protocol; wallets default to `ecdsa` when omitted. */
|
|
32
|
+
protocol?: 'ecdsa' | 'bip322';
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Public configuration for the Bitcoin namespace module. Lives in `uwc-types`
|
|
36
|
+
* (like `TronConnectorConfig` / `TonConnectConfig`) so it can thread through
|
|
37
|
+
* `UniversalWalletConnector` once the core wiring lands.
|
|
38
|
+
*
|
|
39
|
+
* The `enabledWallets` set is an OPTIONAL per-wallet feature-flag surface. When
|
|
40
|
+
* omitted, every wallet whose metadata declares a `namespaceMetaData.bip122`
|
|
41
|
+
* entry is enabled (catalog-driven). An empty set/array enables nothing.
|
|
42
|
+
*
|
|
43
|
+
* Broadcast configuration (mempool.space endpoints) is intentionally NOT here
|
|
44
|
+
* yet — it arrives in Phase 3 alongside the broadcast implementation, together
|
|
45
|
+
* with the bip122 testnet network id it needs to be keyed by.
|
|
46
|
+
*/
|
|
47
|
+
export interface BitcoinConfig {
|
|
48
|
+
/**
|
|
49
|
+
* Optional allow-list of wallets to enable, matched against each wallet's
|
|
50
|
+
* `WalletMetadata.id` or its `namespaceMetaData.bip122.injectedId`
|
|
51
|
+
* (case-insensitive). Omit to enable every bip122-capable wallet the metadata
|
|
52
|
+
* declares; an empty set/array enables nothing.
|
|
53
|
+
*/
|
|
54
|
+
enabledWallets?: ReadonlySet<BitcoinWalletId> | readonly BitcoinWalletId[];
|
|
55
|
+
/** Timeout (ms) for the per-wallet injection probe during connect. Default: 3000. */
|
|
56
|
+
readyStateTimeoutMs?: number;
|
|
57
|
+
/**
|
|
58
|
+
* Timeout (ms) for the injection probe during discovery. Deliberately short
|
|
59
|
+
* (default: 300) because absent wallets always wait out the full timeout.
|
|
60
|
+
*/
|
|
61
|
+
discoveryTimeoutMs?: number;
|
|
62
|
+
/** Poll cadence (ms) for the injection probe. Default: 50. */
|
|
63
|
+
readyStatePollIntervalMs?: number;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=bitcoin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bitcoin.d.ts","sourceRoot":"","sources":["../src/bitcoin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAA;AAEpC;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAA;IACjB,gFAAgF;IAChF,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;CACjC;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,cAAc,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAA;CAC9B;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,WAAW,CAAC,eAAe,CAAC,GAAG,SAAS,eAAe,EAAE,CAAA;IAE1E,qFAAqF;IACrF,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAE5B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAE3B,8DAA8D;IAC9D,wBAAwB,CAAC,EAAE,MAAM,CAAA;CAClC"}
|
package/dist/bitcoin.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bitcoin.js","sourceRoot":"","sources":["../src/bitcoin.ts"],"names":[],"mappings":""}
|
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
|
*
|
|
@@ -110,9 +110,12 @@ export interface Connector {
|
|
|
110
110
|
* Sign a message with the connected wallet
|
|
111
111
|
* @param message The message to sign
|
|
112
112
|
* @param provider The wallet provider (required for injected connector)
|
|
113
|
-
* @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.
|
|
114
117
|
*/
|
|
115
|
-
signMessage?(message: string, provider?: ExtensionInjectedProvider | IntegratedBrowserInjectedProvider | WalletConnectProvider | TonConnectWalletProvider): Promise<
|
|
118
|
+
signMessage?(message: string, provider?: ExtensionInjectedProvider | IntegratedBrowserInjectedProvider | WalletConnectProvider | TonConnectWalletProvider): Promise<SignatureResult>;
|
|
116
119
|
/**
|
|
117
120
|
* Sign EIP-712 typed structured data (eth_signTypedData_v4).
|
|
118
121
|
* Required for ERC-3009 (Transfer With Authorization) and EIP-2612 (Permit) relay flows.
|
|
@@ -149,5 +152,27 @@ export interface Connector {
|
|
|
149
152
|
* observes lifecycle leaves it undefined entirely.
|
|
150
153
|
*/
|
|
151
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>;
|
|
152
177
|
}
|
|
153
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/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export * from './connector';
|
|
|
7
7
|
export * from './providers';
|
|
8
8
|
export * from './wallet-connect-connector';
|
|
9
9
|
export * from './tron-connector';
|
|
10
|
+
export * from './bitcoin';
|
|
10
11
|
export * from './react-hooks';
|
|
11
12
|
export * from './signature';
|
|
12
13
|
export * from './transactions';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA;AACxB,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,kBAAkB,CAAA;AAChC,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA;AACxB,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,7 @@ export * from './connector';
|
|
|
7
7
|
export * from './providers';
|
|
8
8
|
export * from './wallet-connect-connector';
|
|
9
9
|
export * from './tron-connector';
|
|
10
|
+
export * from './bitcoin';
|
|
10
11
|
export * from './react-hooks';
|
|
11
12
|
export * from './signature';
|
|
12
13
|
export * from './transactions';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA;AACxB,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,kBAAkB,CAAA;AAChC,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,UAAU,CAAA;AACxB,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA"}
|
package/dist/observability.d.ts
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* UWC ships NO third-party telemetry SDK. The consumer implements the sinks and
|
|
11
11
|
* wires them to whatever backend they run (Datadog, Amplitude, Segment, …).
|
|
12
12
|
*/
|
|
13
|
+
import type { Namespace } from './networks';
|
|
13
14
|
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
14
15
|
/**
|
|
15
16
|
* Pluggable logger. The default implementation (`createLogger`) is console-backed
|
|
@@ -85,4 +86,60 @@ export type LifecycleUnavailableReason =
|
|
|
85
86
|
* tripped (a storming provider). Emitted once at the moment of the trip.
|
|
86
87
|
*/
|
|
87
88
|
| 'emission_cap';
|
|
89
|
+
/**
|
|
90
|
+
* A named phase INSIDE a wallet operation, below the `awaitingWallet` →
|
|
91
|
+
* terminal pair. The handoff funnel answers "did the wallet answer?"; these
|
|
92
|
+
* answer "which part took the time / gave up?" — the gap that made a hung
|
|
93
|
+
* MetaMask connect indistinguishable from a slow one (ONC-183).
|
|
94
|
+
*
|
|
95
|
+
* Deliberately coarse and stable (dashboard-facing, low-cardinality). Only
|
|
96
|
+
* steps with a distinct failure mode get a name; internal bookkeeping does not.
|
|
97
|
+
*/
|
|
98
|
+
export type WalletStepName =
|
|
99
|
+
/** Discovering the injected provider for the target namespace (EIP-6963 / bridge poll). */
|
|
100
|
+
'providerDetection'
|
|
101
|
+
/** Passive `eth_accounts`-style read for an already-authorized provider (no prompt). */
|
|
102
|
+
| 'existingConnectionCheck'
|
|
103
|
+
/** The authorizing wallet call for the TARGET namespace (e.g. `eth_requestAccounts`). */
|
|
104
|
+
| 'primaryConnect'
|
|
105
|
+
/** Post-authorization chain read (`eth_chainId`) confirming the provider is live. */
|
|
106
|
+
| 'chainIdRead'
|
|
107
|
+
/**
|
|
108
|
+
* Best-effort address gather for a NON-target namespace (MetaMask's Solana
|
|
109
|
+
* Snap, a multi-namespace wallet's Tron leg). Unbounded before ONC-183 and
|
|
110
|
+
* the dominant source of connects that hang AFTER the user already approved.
|
|
111
|
+
*/
|
|
112
|
+
| 'secondaryGather';
|
|
113
|
+
/** How a {@link WalletStepName} phase ended. */
|
|
114
|
+
export type WalletStepOutcome = 'ok'
|
|
115
|
+
/** Threw. For a best-effort step this is still a degraded-but-continuing connect. */
|
|
116
|
+
| 'failed'
|
|
117
|
+
/** Hit its deadline and was abandoned; the underlying promise may still be pending. */
|
|
118
|
+
| 'timedOut'
|
|
119
|
+
/**
|
|
120
|
+
* RESERVED — not yet emitted. Deliberately not run because a gate suppressed
|
|
121
|
+
* it, which is distinct from `ok` with no result. Declared now so consumer
|
|
122
|
+
* switch statements are exhaustive ahead of it (same convention as
|
|
123
|
+
* {@link LifecycleUnavailableReason}'s `old_bridge_parent`). The natural first
|
|
124
|
+
* emit site is the injected connector's legacy-`injectedId` / framed gates on
|
|
125
|
+
* the secondary Solana gather, which today report only through their own
|
|
126
|
+
* dedicated `secondarySolanaConnectSkipped` sink — so a suppressed leg is
|
|
127
|
+
* currently ABSENT from the step timeline rather than present-and-skipped.
|
|
128
|
+
*/
|
|
129
|
+
| 'skipped';
|
|
130
|
+
/**
|
|
131
|
+
* Payload for the injected connector's step sink. Routing facets only — the
|
|
132
|
+
* same non-PII contract as the handoff events (no address, no payload). Core
|
|
133
|
+
* stamps `handoffId` on the way out so a step joins its own attempt's terminal.
|
|
134
|
+
*/
|
|
135
|
+
export interface WalletStepInfo {
|
|
136
|
+
step: WalletStepName;
|
|
137
|
+
outcome: WalletStepOutcome;
|
|
138
|
+
/** Wall-clock ms for this step alone. */
|
|
139
|
+
durationMs: number;
|
|
140
|
+
/** The namespace the step acted on — the gather leg for `secondaryGather`. */
|
|
141
|
+
namespace?: Namespace | undefined;
|
|
142
|
+
/** The deadline that elapsed; set only when `outcome` is `timedOut`. */
|
|
143
|
+
timeoutMs?: number | undefined;
|
|
144
|
+
}
|
|
88
145
|
//# sourceMappingURL=observability.d.ts.map
|
|
@@ -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;;;;;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,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C,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;AAElB;;;;;;;;GAQG;AACH,MAAM,MAAM,cAAc;AACxB,2FAA2F;AACzF,mBAAmB;AACrB,wFAAwF;GACtF,yBAAyB;AAC3B,yFAAyF;GACvF,gBAAgB;AAClB,qFAAqF;GACnF,aAAa;AACf;;;;GAIG;GACD,iBAAiB,CAAA;AAErB,gDAAgD;AAChD,MAAM,MAAM,iBAAiB,GACzB,IAAI;AACN,qFAAqF;GACnF,QAAQ;AACV,uFAAuF;GACrF,UAAU;AACZ;;;;;;;;;GASG;GACD,SAAS,CAAA;AAEb;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,cAAc,CAAA;IACpB,OAAO,EAAE,iBAAiB,CAAA;IAC1B,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAA;IAClB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;IACjC,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC/B"}
|
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":"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"}
|
package/dist/transactions.d.ts
CHANGED
|
@@ -39,7 +39,12 @@ export interface EVMContractCallRequest {
|
|
|
39
39
|
functionName: string;
|
|
40
40
|
args: unknown[];
|
|
41
41
|
from: string;
|
|
42
|
-
|
|
42
|
+
/**
|
|
43
|
+
* Native currency to attach to a payable call, in wei (unsigned). A bigint, or a
|
|
44
|
+
* decimal or `0x`-hex string — `1000000000000000000n`, `'1000000000000000000'`,
|
|
45
|
+
* and `'0xde0b6b3a7640000'` are all 1 ETH. Omitted → 0.
|
|
46
|
+
*/
|
|
47
|
+
value?: bigint | string;
|
|
43
48
|
gasConfig?: EVMGasConfig;
|
|
44
49
|
}
|
|
45
50
|
/**
|
|
@@ -49,7 +54,12 @@ export interface EVMDataTransferRequest {
|
|
|
49
54
|
from: string;
|
|
50
55
|
to: string;
|
|
51
56
|
data: string;
|
|
52
|
-
|
|
57
|
+
/**
|
|
58
|
+
* Native currency to attach to the call, in wei (unsigned). A bigint, or a
|
|
59
|
+
* decimal or `0x`-hex string — `1000000000000000000n`, `'1000000000000000000'`,
|
|
60
|
+
* and `'0xde0b6b3a7640000'` are all 1 ETH. Omitted → 0.
|
|
61
|
+
*/
|
|
62
|
+
value?: bigint | string;
|
|
53
63
|
chainId: string;
|
|
54
64
|
gasConfig?: EVMGasConfig;
|
|
55
65
|
}
|
|
@@ -181,6 +191,39 @@ export interface TronContractCallRequest {
|
|
|
181
191
|
data: string;
|
|
182
192
|
}
|
|
183
193
|
export type TronTransactionRequest = TronNativeTransferRequest | TronTRC20TransferRequest | TronContractCallRequest;
|
|
194
|
+
/**
|
|
195
|
+
* Bitcoin (bip122) Transaction Types
|
|
196
|
+
*/
|
|
197
|
+
/** SIGHASH flag for a PSBT input (Wallet Standard bitcoin values). */
|
|
198
|
+
export type BitcoinSigHash = 'ALL' | 'NONE' | 'SINGLE' | 'ALL|ANYONECANPAY' | 'NONE|ANYONECANPAY' | 'SINGLE|ANYONECANPAY';
|
|
199
|
+
/** Which inputs of a PSBT a given address should sign. */
|
|
200
|
+
export interface BitcoinPsbtInputToSign {
|
|
201
|
+
address: string;
|
|
202
|
+
signingIndexes: number[];
|
|
203
|
+
sigHash?: BitcoinSigHash;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Path B — sign a backend-constructed PSBT (Wallet Standard `signTransaction`).
|
|
207
|
+
* The wallet signs the requested inputs and returns the signed PSBT; the
|
|
208
|
+
* connector finalizes and broadcasts (to mempool.space). Not a wallet broadcast.
|
|
209
|
+
*/
|
|
210
|
+
export interface BitcoinPsbtSignRequest {
|
|
211
|
+
from: string;
|
|
212
|
+
/** Base64-encoded PSBT (BIP-174). */
|
|
213
|
+
psbt: string;
|
|
214
|
+
/** Inputs to sign; when omitted the wallet signs all it can. */
|
|
215
|
+
inputsToSign?: BitcoinPsbtInputToSign[];
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Path A — high-level transfer (Trust Wallet WalletConnect `sendTransfer`). The
|
|
219
|
+
* wallet does coin selection, fee estimation, signing, and broadcast.
|
|
220
|
+
*/
|
|
221
|
+
export interface BitcoinSendTransferRequest {
|
|
222
|
+
from: string;
|
|
223
|
+
to: string;
|
|
224
|
+
amount: number | bigint;
|
|
225
|
+
}
|
|
226
|
+
export type BitcoinTransactionRequest = BitcoinPsbtSignRequest | BitcoinSendTransferRequest;
|
|
184
227
|
/**
|
|
185
228
|
* Common Transaction Types
|
|
186
229
|
*/
|
|
@@ -248,7 +291,16 @@ export interface BatchTransactionResult {
|
|
|
248
291
|
/**
|
|
249
292
|
* Generic transaction request that can be either EVM or Solana
|
|
250
293
|
*/
|
|
251
|
-
export type TransactionRequest = EthereumTransactionRequest | SolanaTransactionRequest | TronTransactionRequest | TonNativeTransferRequest;
|
|
294
|
+
export type TransactionRequest = EthereumTransactionRequest | SolanaTransactionRequest | TronTransactionRequest | TonNativeTransferRequest | BitcoinTransactionRequest;
|
|
252
295
|
export type EthereumTransactionRequest = EVMNativeTransferRequest | EVMContractCallRequest | EVMBatchTransactionRequest | EVMDataTransferRequest;
|
|
253
296
|
export type SolanaTransactionRequest = SolanaNativeTransferRequest | SolanaTokenTransferRequest | SolanaGenericTransferRequest;
|
|
297
|
+
/**
|
|
298
|
+
* Normalize an EVM `value` (in wei) to a bigint for viem.
|
|
299
|
+
*
|
|
300
|
+
* Accepts a bigint or a decimal / `0x`-hex string. Missing/nullish → 0n. Anything
|
|
301
|
+
* else throws with context rather than silently coercing to 0 on a money path:
|
|
302
|
+
* empty/whitespace, non-numeric, binary/octal (`0b`/`0o`), negative, or a
|
|
303
|
+
* non-string/non-bigint value (e.g. a number arriving from untyped JSON).
|
|
304
|
+
*/
|
|
305
|
+
export declare function toEvmValueBigInt(value?: bigint | string | null): bigint;
|
|
254
306
|
//# sourceMappingURL=transactions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../src/transactions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,YAAY,CAAA;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,MAAM,CAAA;IAEvB,GAAG,EAAE,GAAG,EAAE,CAAA;IACV,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,OAAO,EAAE,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../src/transactions.ts"],"names":[],"mappings":"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"}
|
package/dist/transactions.js
CHANGED
|
@@ -1,5 +1,42 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* EVM Transaction Types
|
|
3
3
|
*/
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Normalize an EVM `value` (in wei) to a bigint for viem.
|
|
6
|
+
*
|
|
7
|
+
* Accepts a bigint or a decimal / `0x`-hex string. Missing/nullish → 0n. Anything
|
|
8
|
+
* else throws with context rather than silently coercing to 0 on a money path:
|
|
9
|
+
* empty/whitespace, non-numeric, binary/octal (`0b`/`0o`), negative, or a
|
|
10
|
+
* non-string/non-bigint value (e.g. a number arriving from untyped JSON).
|
|
11
|
+
*/
|
|
12
|
+
export function toEvmValueBigInt(value) {
|
|
13
|
+
if (value == null)
|
|
14
|
+
return 0n;
|
|
15
|
+
if (typeof value === 'bigint') {
|
|
16
|
+
if (value < 0n)
|
|
17
|
+
throw new Error(`Invalid EVM value: "${value}"`);
|
|
18
|
+
return value;
|
|
19
|
+
}
|
|
20
|
+
if (typeof value !== 'string') {
|
|
21
|
+
throw new Error(`Invalid EVM value: expected bigint or string, got ${typeof value}`);
|
|
22
|
+
}
|
|
23
|
+
const trimmed = value.trim();
|
|
24
|
+
if (trimmed === '') {
|
|
25
|
+
throw new Error('Invalid EVM value: empty string');
|
|
26
|
+
}
|
|
27
|
+
// BigInt() accepts 0b/0o prefixes; reject so only decimal and 0x-hex wei parse.
|
|
28
|
+
if (/^[+-]?0[bo]/i.test(trimmed)) {
|
|
29
|
+
throw new Error(`Invalid EVM value: "${value}"`);
|
|
30
|
+
}
|
|
31
|
+
let result;
|
|
32
|
+
try {
|
|
33
|
+
result = BigInt(trimmed);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
throw new Error(`Invalid EVM value: "${value}"`);
|
|
37
|
+
}
|
|
38
|
+
if (result < 0n)
|
|
39
|
+
throw new Error(`Invalid EVM value: "${value}"`);
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
5
42
|
//# sourceMappingURL=transactions.js.map
|
package/dist/transactions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactions.js","sourceRoot":"","sources":["../src/transactions.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
1
|
+
{"version":3,"file":"transactions.js","sourceRoot":"","sources":["../src/transactions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoXH;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAA8B;IAC7D,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,EAAE,CAAA;IAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,GAAG,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,GAAG,CAAC,CAAA;QAChE,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,qDAAqD,OAAO,KAAK,EAAE,CACpE,CAAA;IACH,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC5B,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;IACpD,CAAC;IACD,gFAAgF;IAChF,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,GAAG,CAAC,CAAA;IAClD,CAAC;IACD,IAAI,MAAc,CAAA;IAClB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,GAAG,CAAC,CAAA;IAClD,CAAC;IACD,IAAI,MAAM,GAAG,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,GAAG,CAAC,CAAA;IACjE,OAAO,MAAM,CAAA;AACf,CAAC"}
|
package/package.json
CHANGED
package/src/UWC-state.ts
CHANGED
|
@@ -45,6 +45,13 @@ export interface DetectedTonWalletInfo {
|
|
|
45
45
|
jsBridgeKey: string
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
export interface DetectedBitcoinWalletInfo {
|
|
49
|
+
uuid: string
|
|
50
|
+
name: string
|
|
51
|
+
/** Wallet Standard `bitcoin:*` feature names the wallet advertises. */
|
|
52
|
+
features: string[]
|
|
53
|
+
}
|
|
54
|
+
|
|
48
55
|
export interface Eip155Metadata {
|
|
49
56
|
eip155Name: string
|
|
50
57
|
injectedId: string
|
|
@@ -75,12 +82,21 @@ export interface TonMetadata {
|
|
|
75
82
|
detectedWallet?: DetectedTonWalletInfo
|
|
76
83
|
}
|
|
77
84
|
|
|
85
|
+
export interface BitcoinMetadata {
|
|
86
|
+
/** Wallet Standard wallet name used to match the `bitcoin:*` registry entry. */
|
|
87
|
+
walletStandardName?: string
|
|
88
|
+
injectedId?: string
|
|
89
|
+
installed?: boolean
|
|
90
|
+
detectedWallet?: DetectedBitcoinWalletInfo
|
|
91
|
+
}
|
|
92
|
+
|
|
78
93
|
/** Keys are CAIP-2 namespace identifiers. Types use brand names (e.g. tvm → TonMetadata). */
|
|
79
94
|
interface NamespaceMetaDataRegistry {
|
|
80
95
|
eip155: Eip155Metadata
|
|
81
96
|
solana: SolanaMetadata
|
|
82
97
|
tron: TronMetadata
|
|
83
98
|
tvm: TonMetadata
|
|
99
|
+
bip122: BitcoinMetadata
|
|
84
100
|
}
|
|
85
101
|
|
|
86
102
|
type NamespaceMetaDataMap = {
|
package/src/bitcoin.ts
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-wallet feature-flag key for `enabledWallets`. Open `string` because the
|
|
3
|
+
* Bitcoin namespace is metadata-driven — the wallet set comes from the passed-in
|
|
4
|
+
* metadata, not a compiled union — so any backend-configured wallet can be gated
|
|
5
|
+
* without a UWC release. Mirrors `TronWalletId`.
|
|
6
|
+
*/
|
|
7
|
+
export type BitcoinWalletId = string
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* A bip122 account as surfaced by the wallet (Wallet Standard `bitcoin:*`).
|
|
11
|
+
*
|
|
12
|
+
* Shapes match the Wallet Standard bitcoin account: an `address`, its
|
|
13
|
+
* `publicKey` (needed per-input for PSBT signing), and an optional `purpose`
|
|
14
|
+
* distinguishing payment vs. ordinals addresses on wallets that separate them.
|
|
15
|
+
* `publicKey` is hex here (JSON/transport-safe) — adapters convert to/from the
|
|
16
|
+
* wallet's native `Uint8Array` at the boundary.
|
|
17
|
+
*/
|
|
18
|
+
export interface BitcoinAccount {
|
|
19
|
+
address: string
|
|
20
|
+
/** Compressed public key, hex-encoded (no `0x`). */
|
|
21
|
+
publicKey: string
|
|
22
|
+
/** Address purpose, when the wallet distinguishes them (e.g. Phantom-style). */
|
|
23
|
+
purpose?: 'payment' | 'ordinals'
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Params to sign a message (Wallet Standard `bitcoin:signMessage`).
|
|
28
|
+
* `message` is the UTF-8 string; the adapter encodes it to bytes.
|
|
29
|
+
*/
|
|
30
|
+
export interface BitcoinSignMessageParams {
|
|
31
|
+
account: BitcoinAccount
|
|
32
|
+
message: string
|
|
33
|
+
/** Signing protocol; wallets default to `ecdsa` when omitted. */
|
|
34
|
+
protocol?: 'ecdsa' | 'bip322'
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Public configuration for the Bitcoin namespace module. Lives in `uwc-types`
|
|
39
|
+
* (like `TronConnectorConfig` / `TonConnectConfig`) so it can thread through
|
|
40
|
+
* `UniversalWalletConnector` once the core wiring lands.
|
|
41
|
+
*
|
|
42
|
+
* The `enabledWallets` set is an OPTIONAL per-wallet feature-flag surface. When
|
|
43
|
+
* omitted, every wallet whose metadata declares a `namespaceMetaData.bip122`
|
|
44
|
+
* entry is enabled (catalog-driven). An empty set/array enables nothing.
|
|
45
|
+
*
|
|
46
|
+
* Broadcast configuration (mempool.space endpoints) is intentionally NOT here
|
|
47
|
+
* yet — it arrives in Phase 3 alongside the broadcast implementation, together
|
|
48
|
+
* with the bip122 testnet network id it needs to be keyed by.
|
|
49
|
+
*/
|
|
50
|
+
export interface BitcoinConfig {
|
|
51
|
+
/**
|
|
52
|
+
* Optional allow-list of wallets to enable, matched against each wallet's
|
|
53
|
+
* `WalletMetadata.id` or its `namespaceMetaData.bip122.injectedId`
|
|
54
|
+
* (case-insensitive). Omit to enable every bip122-capable wallet the metadata
|
|
55
|
+
* declares; an empty set/array enables nothing.
|
|
56
|
+
*/
|
|
57
|
+
enabledWallets?: ReadonlySet<BitcoinWalletId> | readonly BitcoinWalletId[]
|
|
58
|
+
|
|
59
|
+
/** Timeout (ms) for the per-wallet injection probe during connect. Default: 3000. */
|
|
60
|
+
readyStateTimeoutMs?: number
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Timeout (ms) for the injection probe during discovery. Deliberately short
|
|
64
|
+
* (default: 300) because absent wallets always wait out the full timeout.
|
|
65
|
+
*/
|
|
66
|
+
discoveryTimeoutMs?: number
|
|
67
|
+
|
|
68
|
+
/** Poll cadence (ms) for the injection probe. Default: 50. */
|
|
69
|
+
readyStatePollIntervalMs?: number
|
|
70
|
+
}
|
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.
|
|
@@ -156,7 +156,10 @@ export interface Connector {
|
|
|
156
156
|
* Sign a message with the connected wallet
|
|
157
157
|
* @param message The message to sign
|
|
158
158
|
* @param provider The wallet provider (required for injected connector)
|
|
159
|
-
* @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.
|
|
160
163
|
*/
|
|
161
164
|
signMessage?(
|
|
162
165
|
message: string,
|
|
@@ -165,7 +168,7 @@ export interface Connector {
|
|
|
165
168
|
| IntegratedBrowserInjectedProvider
|
|
166
169
|
| WalletConnectProvider
|
|
167
170
|
| TonConnectWalletProvider
|
|
168
|
-
): Promise<
|
|
171
|
+
): Promise<SignatureResult>
|
|
169
172
|
|
|
170
173
|
/**
|
|
171
174
|
* Sign EIP-712 typed structured data (eth_signTypedData_v4).
|
|
@@ -226,4 +229,31 @@ export interface Connector {
|
|
|
226
229
|
listener: (event: WalletLifecycleEvent) => void,
|
|
227
230
|
context: WalletLifecycleContext
|
|
228
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>
|
|
229
259
|
}
|
package/src/index.ts
CHANGED
package/src/observability.ts
CHANGED
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
* wires them to whatever backend they run (Datadog, Amplitude, Segment, …).
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
+
import type { Namespace } from './networks'
|
|
15
|
+
|
|
14
16
|
export type LogLevel = 'debug' | 'info' | 'warn' | 'error'
|
|
15
17
|
|
|
16
18
|
/**
|
|
@@ -114,3 +116,63 @@ export type LifecycleUnavailableReason =
|
|
|
114
116
|
* tripped (a storming provider). Emitted once at the moment of the trip.
|
|
115
117
|
*/
|
|
116
118
|
| 'emission_cap'
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* A named phase INSIDE a wallet operation, below the `awaitingWallet` →
|
|
122
|
+
* terminal pair. The handoff funnel answers "did the wallet answer?"; these
|
|
123
|
+
* answer "which part took the time / gave up?" — the gap that made a hung
|
|
124
|
+
* MetaMask connect indistinguishable from a slow one (ONC-183).
|
|
125
|
+
*
|
|
126
|
+
* Deliberately coarse and stable (dashboard-facing, low-cardinality). Only
|
|
127
|
+
* steps with a distinct failure mode get a name; internal bookkeeping does not.
|
|
128
|
+
*/
|
|
129
|
+
export type WalletStepName =
|
|
130
|
+
/** Discovering the injected provider for the target namespace (EIP-6963 / bridge poll). */
|
|
131
|
+
| 'providerDetection'
|
|
132
|
+
/** Passive `eth_accounts`-style read for an already-authorized provider (no prompt). */
|
|
133
|
+
| 'existingConnectionCheck'
|
|
134
|
+
/** The authorizing wallet call for the TARGET namespace (e.g. `eth_requestAccounts`). */
|
|
135
|
+
| 'primaryConnect'
|
|
136
|
+
/** Post-authorization chain read (`eth_chainId`) confirming the provider is live. */
|
|
137
|
+
| 'chainIdRead'
|
|
138
|
+
/**
|
|
139
|
+
* Best-effort address gather for a NON-target namespace (MetaMask's Solana
|
|
140
|
+
* Snap, a multi-namespace wallet's Tron leg). Unbounded before ONC-183 and
|
|
141
|
+
* the dominant source of connects that hang AFTER the user already approved.
|
|
142
|
+
*/
|
|
143
|
+
| 'secondaryGather'
|
|
144
|
+
|
|
145
|
+
/** How a {@link WalletStepName} phase ended. */
|
|
146
|
+
export type WalletStepOutcome =
|
|
147
|
+
| 'ok'
|
|
148
|
+
/** Threw. For a best-effort step this is still a degraded-but-continuing connect. */
|
|
149
|
+
| 'failed'
|
|
150
|
+
/** Hit its deadline and was abandoned; the underlying promise may still be pending. */
|
|
151
|
+
| 'timedOut'
|
|
152
|
+
/**
|
|
153
|
+
* RESERVED — not yet emitted. Deliberately not run because a gate suppressed
|
|
154
|
+
* it, which is distinct from `ok` with no result. Declared now so consumer
|
|
155
|
+
* switch statements are exhaustive ahead of it (same convention as
|
|
156
|
+
* {@link LifecycleUnavailableReason}'s `old_bridge_parent`). The natural first
|
|
157
|
+
* emit site is the injected connector's legacy-`injectedId` / framed gates on
|
|
158
|
+
* the secondary Solana gather, which today report only through their own
|
|
159
|
+
* dedicated `secondarySolanaConnectSkipped` sink — so a suppressed leg is
|
|
160
|
+
* currently ABSENT from the step timeline rather than present-and-skipped.
|
|
161
|
+
*/
|
|
162
|
+
| 'skipped'
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Payload for the injected connector's step sink. Routing facets only — the
|
|
166
|
+
* same non-PII contract as the handoff events (no address, no payload). Core
|
|
167
|
+
* stamps `handoffId` on the way out so a step joins its own attempt's terminal.
|
|
168
|
+
*/
|
|
169
|
+
export interface WalletStepInfo {
|
|
170
|
+
step: WalletStepName
|
|
171
|
+
outcome: WalletStepOutcome
|
|
172
|
+
/** Wall-clock ms for this step alone. */
|
|
173
|
+
durationMs: number
|
|
174
|
+
/** The namespace the step acted on — the gather leg for `secondaryGather`. */
|
|
175
|
+
namespace?: Namespace | undefined
|
|
176
|
+
/** The deadline that elapsed; set only when `outcome` is `timedOut`. */
|
|
177
|
+
timeoutMs?: number | undefined
|
|
178
|
+
}
|
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
|
*/
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest'
|
|
2
|
+
import { toEvmValueBigInt } from './transactions'
|
|
3
|
+
|
|
4
|
+
describe('toEvmValueBigInt', () => {
|
|
5
|
+
const oneEth = 1000000000000000000n
|
|
6
|
+
|
|
7
|
+
it('returns 0n for undefined or null', () => {
|
|
8
|
+
expect(toEvmValueBigInt(undefined)).toBe(0n)
|
|
9
|
+
expect(toEvmValueBigInt(null as unknown as undefined)).toBe(0n)
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
it('passes a bigint through unchanged', () => {
|
|
13
|
+
expect(toEvmValueBigInt(oneEth)).toBe(oneEth)
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
it.each([
|
|
17
|
+
['decimal string', '1000000000000000000'],
|
|
18
|
+
['hex string', '0xde0b6b3a7640000'],
|
|
19
|
+
['whitespace-padded', ' 1000000000000000000 ']
|
|
20
|
+
])('parses %s to the same bigint', (_l, value) => {
|
|
21
|
+
expect(toEvmValueBigInt(value)).toBe(oneEth)
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
it.each(['', ' '])('throws on empty/whitespace value %j', value => {
|
|
25
|
+
expect(() => toEvmValueBigInt(value)).toThrow(
|
|
26
|
+
'Invalid EVM value: empty string'
|
|
27
|
+
)
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
it.each(['abc', '1.5', '1e18', '0x'])(
|
|
31
|
+
'throws with context on malformed value %j',
|
|
32
|
+
value => {
|
|
33
|
+
expect(() => toEvmValueBigInt(value)).toThrow(/Invalid EVM value/)
|
|
34
|
+
}
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
it.each(['-1', '0b1010', '0o17'])(
|
|
38
|
+
'rejects negative and binary/octal value %j',
|
|
39
|
+
value => {
|
|
40
|
+
expect(() => toEvmValueBigInt(value)).toThrow(/Invalid EVM value/)
|
|
41
|
+
}
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
it('rejects a negative bigint', () => {
|
|
45
|
+
expect(() => toEvmValueBigInt(-1n)).toThrow(/Invalid EVM value/)
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
it('rejects a non-string/non-bigint value with a clear error', () => {
|
|
49
|
+
expect(() => toEvmValueBigInt(100 as unknown as string)).toThrow(
|
|
50
|
+
/expected bigint or string, got number/
|
|
51
|
+
)
|
|
52
|
+
})
|
|
53
|
+
})
|
package/src/transactions.ts
CHANGED
|
@@ -44,7 +44,12 @@ export interface EVMContractCallRequest {
|
|
|
44
44
|
functionName: string
|
|
45
45
|
args: unknown[]
|
|
46
46
|
from: string
|
|
47
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Native currency to attach to a payable call, in wei (unsigned). A bigint, or a
|
|
49
|
+
* decimal or `0x`-hex string — `1000000000000000000n`, `'1000000000000000000'`,
|
|
50
|
+
* and `'0xde0b6b3a7640000'` are all 1 ETH. Omitted → 0.
|
|
51
|
+
*/
|
|
52
|
+
value?: bigint | string
|
|
48
53
|
gasConfig?: EVMGasConfig
|
|
49
54
|
}
|
|
50
55
|
|
|
@@ -55,7 +60,12 @@ export interface EVMDataTransferRequest {
|
|
|
55
60
|
from: string
|
|
56
61
|
to: string
|
|
57
62
|
data: string
|
|
58
|
-
|
|
63
|
+
/**
|
|
64
|
+
* Native currency to attach to the call, in wei (unsigned). A bigint, or a
|
|
65
|
+
* decimal or `0x`-hex string — `1000000000000000000n`, `'1000000000000000000'`,
|
|
66
|
+
* and `'0xde0b6b3a7640000'` are all 1 ETH. Omitted → 0.
|
|
67
|
+
*/
|
|
68
|
+
value?: bigint | string
|
|
59
69
|
chainId: string
|
|
60
70
|
gasConfig?: EVMGasConfig
|
|
61
71
|
}
|
|
@@ -222,6 +232,56 @@ export type TronTransactionRequest =
|
|
|
222
232
|
| TronTRC20TransferRequest
|
|
223
233
|
| TronContractCallRequest
|
|
224
234
|
|
|
235
|
+
/**
|
|
236
|
+
* Bitcoin (bip122) Transaction Types
|
|
237
|
+
*/
|
|
238
|
+
|
|
239
|
+
/** SIGHASH flag for a PSBT input (Wallet Standard bitcoin values). */
|
|
240
|
+
export type BitcoinSigHash =
|
|
241
|
+
| 'ALL'
|
|
242
|
+
| 'NONE'
|
|
243
|
+
| 'SINGLE'
|
|
244
|
+
| 'ALL|ANYONECANPAY'
|
|
245
|
+
| 'NONE|ANYONECANPAY'
|
|
246
|
+
| 'SINGLE|ANYONECANPAY'
|
|
247
|
+
|
|
248
|
+
/** Which inputs of a PSBT a given address should sign. */
|
|
249
|
+
export interface BitcoinPsbtInputToSign {
|
|
250
|
+
address: string
|
|
251
|
+
signingIndexes: number[]
|
|
252
|
+
sigHash?: BitcoinSigHash
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Path B — sign a backend-constructed PSBT (Wallet Standard `signTransaction`).
|
|
257
|
+
* The wallet signs the requested inputs and returns the signed PSBT; the
|
|
258
|
+
* connector finalizes and broadcasts (to mempool.space). Not a wallet broadcast.
|
|
259
|
+
*/
|
|
260
|
+
export interface BitcoinPsbtSignRequest {
|
|
261
|
+
from: string
|
|
262
|
+
/** Base64-encoded PSBT (BIP-174). */
|
|
263
|
+
psbt: string
|
|
264
|
+
/** Inputs to sign; when omitted the wallet signs all it can. */
|
|
265
|
+
inputsToSign?: BitcoinPsbtInputToSign[]
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Path A — high-level transfer (Trust Wallet WalletConnect `sendTransfer`). The
|
|
270
|
+
* wallet does coin selection, fee estimation, signing, and broadcast.
|
|
271
|
+
*/
|
|
272
|
+
export interface BitcoinSendTransferRequest {
|
|
273
|
+
from: string
|
|
274
|
+
to: string
|
|
275
|
+
// amount in satoshis. `bigint` avoids float-precision loss; sats are
|
|
276
|
+
// serialized to a JSON number over WalletConnect, so values must stay within
|
|
277
|
+
// the safe-integer range (BTC's 2.1e15-sat cap does).
|
|
278
|
+
amount: number | bigint
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
export type BitcoinTransactionRequest =
|
|
282
|
+
| BitcoinPsbtSignRequest
|
|
283
|
+
| BitcoinSendTransferRequest
|
|
284
|
+
|
|
225
285
|
/**
|
|
226
286
|
* Common Transaction Types
|
|
227
287
|
*/
|
|
@@ -299,6 +359,7 @@ export type TransactionRequest =
|
|
|
299
359
|
| SolanaTransactionRequest
|
|
300
360
|
| TronTransactionRequest
|
|
301
361
|
| TonNativeTransferRequest
|
|
362
|
+
| BitcoinTransactionRequest
|
|
302
363
|
|
|
303
364
|
export type EthereumTransactionRequest =
|
|
304
365
|
| EVMNativeTransferRequest
|
|
@@ -310,3 +371,40 @@ export type SolanaTransactionRequest =
|
|
|
310
371
|
| SolanaNativeTransferRequest
|
|
311
372
|
| SolanaTokenTransferRequest
|
|
312
373
|
| SolanaGenericTransferRequest
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* Normalize an EVM `value` (in wei) to a bigint for viem.
|
|
377
|
+
*
|
|
378
|
+
* Accepts a bigint or a decimal / `0x`-hex string. Missing/nullish → 0n. Anything
|
|
379
|
+
* else throws with context rather than silently coercing to 0 on a money path:
|
|
380
|
+
* empty/whitespace, non-numeric, binary/octal (`0b`/`0o`), negative, or a
|
|
381
|
+
* non-string/non-bigint value (e.g. a number arriving from untyped JSON).
|
|
382
|
+
*/
|
|
383
|
+
export function toEvmValueBigInt(value?: bigint | string | null): bigint {
|
|
384
|
+
if (value == null) return 0n
|
|
385
|
+
if (typeof value === 'bigint') {
|
|
386
|
+
if (value < 0n) throw new Error(`Invalid EVM value: "${value}"`)
|
|
387
|
+
return value
|
|
388
|
+
}
|
|
389
|
+
if (typeof value !== 'string') {
|
|
390
|
+
throw new Error(
|
|
391
|
+
`Invalid EVM value: expected bigint or string, got ${typeof value}`
|
|
392
|
+
)
|
|
393
|
+
}
|
|
394
|
+
const trimmed = value.trim()
|
|
395
|
+
if (trimmed === '') {
|
|
396
|
+
throw new Error('Invalid EVM value: empty string')
|
|
397
|
+
}
|
|
398
|
+
// BigInt() accepts 0b/0o prefixes; reject so only decimal and 0x-hex wei parse.
|
|
399
|
+
if (/^[+-]?0[bo]/i.test(trimmed)) {
|
|
400
|
+
throw new Error(`Invalid EVM value: "${value}"`)
|
|
401
|
+
}
|
|
402
|
+
let result: bigint
|
|
403
|
+
try {
|
|
404
|
+
result = BigInt(trimmed)
|
|
405
|
+
} catch {
|
|
406
|
+
throw new Error(`Invalid EVM value: "${value}"`)
|
|
407
|
+
}
|
|
408
|
+
if (result < 0n) throw new Error(`Invalid EVM value: "${value}"`)
|
|
409
|
+
return result
|
|
410
|
+
}
|