bridge: connect 0.2.1, and Cardano is one of the seven

The dependency was pinned "^0.1.0", which under semver can never reach
0.2.x. So the bridge — a surface listed as a working consumer of the
shared connector — was carrying the bug 0.2.0 fixed.

Measured in the installed tree: 0.1.0's dist/connectors.js opens with
SEVEN STATIC IMPORTS, so every page load eagerly pulled sats-connect,
@tonconnect/sdk, @crossmarkio/sdk and @polkadot/util-crypto whether or
not anyone touched those chains. That is the eager-import shape that
blanked the exchange SPA. 0.2.1's connectors.js has zero: a chain's
wallet library arrives when that chain is asked for.

getConnector became async across that boundary, so resolveConnector is
async and its one caller awaits. Both call sites were already inside
async functions, which is why this is three lines rather than a refactor.

Cardano now maps to a connector instead of null. The comment beside it
said connect was unavailable — true when written, and 0.2.1 ships
./cardano/connect (CIP-30) with ./cardano/verify (CIP-8 COSE_Sign1).
Same day as the ADA custody address, from the other side: the register
can now name a Cardano deposit address, and a holder can now sign in
with the wallet that holds it.

EVM and Lux still return null and go through wagmi deliberately.
@luxwallet/connect has no transaction surface at all — no
sendTransaction, no chain switching, verified by grep — so it is a
connect-and-identity package, not a wagmi replacement. The comments say
that now instead of implying a gap.
This commit is contained in:
2026-08-29 12:22:46 -07:00
parent a6c33e86bd
commit 049190a9ec
4 changed files with 58 additions and 41 deletions
+1 -1
View File
@@ -97,7 +97,7 @@
"@tonconnect/sdk": "^4.0.0",
"sats-connect": "^4.2.1",
"@luxwallet/chains": "^0.1.0",
"@luxwallet/connect": "^0.1.0"
"@luxwallet/connect": "^0.2.1"
},
"peerDependencies": {
"@hanzogui/avatar": "^7.0.0",
+10 -5
View File
@@ -43,7 +43,8 @@ export interface LuxWalletState {
connecting: boolean
/**
* Connect a wallet for the given non-EVM family. Throws if the family has
* no @luxwallet/connect connector (EVM/Lux/Cardano) or the user rejects.
* no @luxwallet/connect connector (EVM and Lux, which use wagmi) or the
* user rejects.
*/
connect: (family: ChainFamily) => Promise<string>
/** Disconnect the active non-EVM wallet. */
@@ -75,22 +76,26 @@ export function useLuxWallet(opts: UseLuxWalletOptions = {}): LuxWalletState {
const connectorOptions = opts.connectorOptions
const resolveConnector = useCallback(
(fam: ChainFamily): WalletConnector => {
async (fam: ChainFamily): Promise<WalletConnector> => {
const chain = familyToLuxChain(fam)
if (!chain) {
throw new Error(
`useLuxWallet: no wallet connector for family "${fam}" ` +
'(EVM/Lux use wagmi; Cardano connect is unavailable)',
'(EVM and Lux go through wagmi)',
)
}
return getConnector(chain, connectorOptions)
// Awaited: 0.2.x loads a chain's wallet SDK only when that chain is
// asked for. Statically importing all seven pulled sats-connect,
// @tonconnect/sdk, @crossmarkio/sdk and @polkadot/util-crypto into
// every page load — the eager-import shape that blanked the exchange.
return await getConnector(chain, connectorOptions)
},
[connectorOptions],
)
const connect = useCallback(
async (fam: ChainFamily): Promise<string> => {
const connector = resolveConnector(fam)
const connector = await resolveConnector(fam)
setConnecting(true)
try {
const account = await connector.connect()
+4 -3
View File
@@ -39,8 +39,8 @@ export function isEvmFamily(family: ChainFamily): boolean {
* - `evm` / `lux` → handled by wagmi, NOT routed here (returns null so a
* caller that asks "which luxwallet connector?" gets an honest "none").
* - `cardano` → no connector in @luxwallet/connect today (the SDK has
* no Cardano chain); returns null. The bridge still accepts a pasted
* Cardano destination address — connect is simply unavailable.
* EVM and Lux return null and go through wagmi, which owns chain
* switching and transaction sending — @luxwallet/connect has neither.
*
* Every other non-EVM family maps to a real, MIT/Apache-licensed connector.
*/
@@ -56,9 +56,10 @@ export function familyToLuxChain(family: ChainFamily): LuxChain | null {
return 'xrp'
case 'substrate':
return 'polkadot'
case 'cardano':
return 'cardano'
case 'evm':
case 'lux':
case 'cardano':
return null
}
}
+43 -32
View File
@@ -316,9 +316,15 @@ importers:
'@noble/ed25519':
specifier: ^3.1.0
version: 3.1.0
'@noble/hashes':
specifier: ^2.4.0
version: 2.4.0
'@prisma/client':
specifier: ^6.19.3
version: 6.19.3([email protected]([email protected]))([email protected])
'@scure/base':
specifier: ^2.4.0
version: 2.4.0
'@solana/addresses':
specifier: 6.9.0
version: 6.9.0([email protected])([email protected])
@@ -421,7 +427,7 @@ importers:
version: 6.0.3
vitest:
specifier: ^4.1.7
version: 4.1.7(@types/[email protected])([email protected]([email protected])([email protected]))([email protected](@noble/hashes@2.2.0))([email protected](@types/[email protected])([email protected])([email protected])([email protected]))
version: 4.1.7(@types/[email protected])([email protected]([email protected])([email protected]))([email protected](@noble/hashes@2.4.0))([email protected](@types/[email protected])([email protected])([email protected])([email protected]))
e2e:
devDependencies:
@@ -540,8 +546,8 @@ importers:
specifier: ^0.1.0
version: 0.1.0
'@luxwallet/connect':
specifier: ^0.1.0
version: 0.1.0(@crossmarkio/[email protected]([email protected])([email protected]))(@polkadot/[email protected](@polkadot/[email protected]))(@polkadot/[email protected])(@tonconnect/[email protected])([email protected]([email protected]))([email protected]([email protected])([email protected])([email protected])([email protected]))
specifier: ^0.2.1
version: 0.2.1(@crossmarkio/[email protected]([email protected])([email protected]))(@polkadot/[email protected](@polkadot/[email protected]))(@polkadot/[email protected])(@tonconnect/[email protected])([email protected]([email protected]))([email protected]([email protected])([email protected])([email protected])([email protected]))
'@polkadot/util':
specifier: ^14.0.3
version: 14.0.3
@@ -584,13 +590,13 @@ importers:
version: 20.9.0([email protected])([email protected])
jsdom:
specifier: ^29.1.1
version: 29.1.1(@noble/hashes@2.2.0)
version: 29.1.1(@noble/hashes@2.4.0)
typescript:
specifier: 'catalog:'
version: 5.7.2
vitest:
specifier: ^4.1.7
version: 4.1.7(@types/[email protected])([email protected]([email protected])([email protected]))([email protected](@noble/hashes@2.2.0))([email protected](@types/[email protected])([email protected])([email protected])([email protected]))
version: 4.1.7(@types/[email protected])([email protected]([email protected])([email protected]))([email protected](@noble/hashes@2.4.0))([email protected](@types/[email protected])([email protected])([email protected])([email protected]))
pkg/core:
devDependencies:
@@ -618,7 +624,7 @@ importers:
version: 6.0.3
vitest:
specifier: ^4.1.7
version: 4.1.7(@types/[email protected])([email protected]([email protected])([email protected]))([email protected](@noble/hashes@2.2.0))([email protected](@types/[email protected])([email protected])([email protected])([email protected]))
version: 4.1.7(@types/[email protected])([email protected]([email protected])([email protected]))([email protected](@noble/hashes@2.4.0))([email protected](@types/[email protected])([email protected])([email protected])([email protected]))
pkg/ui:
dependencies:
@@ -1662,7 +1668,7 @@ packages:
'@hanzo/[email protected]':
resolution: {integrity: sha512-z/P3CUdzkyjKupeSCSUmMpLKj0IBgXSrsjJQLn3O/3SJrZ2MSlSu8jfKO7qO/IVfyUtnqWgLQM8sxEofY2RJlA==}
deprecated: → @hanzo/ui-shadcn; @hanzo/ui@8 is the @hanzo/gui unified lib
deprecated: moved to @hanzo/ui-shadcn; @hanzo/ui@8+ is the @hanzo/gui-based unified library
peerDependencies:
'@hookform/resolvers': ^3.3.2
embla-carousel: ^8.1.6
@@ -3062,8 +3068,8 @@ packages:
'@luxwallet/[email protected]':
resolution: {integrity: sha512-DoWF6j7f+PuKfWPbHVsnUve8ZECoBNtzpDOLlYu1bVt7w3UA0KpgIJe2MbHJaopQ09H1v1Vu9g3vBJ9cC/UGFg==}
'@luxwallet/connect@0.1.0':
resolution: {integrity: sha512-teLWEOqM7XIUeEo9NPmsPV/1wlzwBmRXT56W5SOxkWk1o+6UqiaTRJZFn5AKAXXEdRMkaGqzCuTNkVVAA997Bg==}
'@luxwallet/connect@0.2.1':
resolution: {integrity: sha512-glIpsB2KLr1DYTjiHbrHZw22Ag5NKYiEWIK0niCIYiX0pv2Gus0zx013p1vwtEfmrRlTWseBB8VCX2AYT7Oipw==}
peerDependencies:
'@crossmarkio/sdk': ^0.4.0
'@polkadot/util': ^14.0.0
@@ -3316,8 +3322,8 @@ packages:
resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
engines: {node: ^14.21.3 || >=16}
'@noble/hashes@2.2.0':
resolution: {integrity: sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==}
'@noble/hashes@2.4.0':
resolution: {integrity: sha512-X5XaVWZIBCT7HHZGm5I7ZQXDwLG+bGXuSrMQAW+7Zvl87h1kmc1ZB1VSRJcpUfoUrGQp4Fkoxm5kZ+Ms+aW+eA==}
engines: {node: '>= 20.19.0'}
'@noble/[email protected]':
@@ -4719,6 +4725,9 @@ packages:
'@scure/[email protected]':
resolution: {integrity: sha512-b8XEupJibegiXV+tDUseI8oLQc8ei3d/4Jkb2RpbHh3MfE054ov3uIz2dhFkB3FI8iwYkEh0gGCApkrYggkPNg==}
'@scure/[email protected]':
resolution: {integrity: sha512-thZ1TuJwFwBblOhgsjDKvvGirBxNp+wSvY/DR6tJBJOTDhdAAcHJ8Vbr2eFnqaxeca4+t0i9KBf+uHYGWwZORg==}
'@scure/[email protected]':
resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==}
@@ -12318,9 +12327,9 @@ snapshots:
'@ethersproject/[email protected]': {}
'@exodus/[email protected](@noble/hashes@2.2.0)':
'@exodus/[email protected](@noble/hashes@2.4.0)':
optionalDependencies:
'@noble/hashes': 2.2.0
'@noble/hashes': 2.4.0
'@floating-ui/[email protected]':
dependencies:
@@ -12512,7 +12521,7 @@ snapshots:
markdown-to-jsx: 7.7.17([email protected])
mobx: 6.15.3
next: 14.2.16(@babel/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected])
next-themes: 0.2.1([email protected](@babel/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])
next-themes: 0.2.1([email protected](@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])
postcss-selector-parser: 6.1.2
react: 18.3.1
react-day-picker: 8.10.2([email protected])([email protected])
@@ -16342,7 +16351,7 @@ snapshots:
lucide-react: 1.16.0([email protected])
markdown-to-jsx: 7.7.17([email protected])
next: 14.2.16(@babel/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected])
next-themes: 0.2.1([email protected](@babel/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])
next-themes: 0.2.1([email protected](@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])
postcss-selector-parser: 6.1.2
react: 18.3.1
react-day-picker: 8.10.2([email protected])([email protected])
@@ -16383,7 +16392,7 @@ snapshots:
'@luxwallet/[email protected]': {}
'@luxwallet/connect@0.1.0(@crossmarkio/[email protected]([email protected])([email protected]))(@polkadot/[email protected](@polkadot/[email protected]))(@polkadot/[email protected])(@tonconnect/[email protected])([email protected]([email protected]))([email protected]([email protected])([email protected])([email protected])([email protected]))':
'@luxwallet/connect@0.2.1(@crossmarkio/[email protected]([email protected])([email protected]))(@polkadot/[email protected](@polkadot/[email protected]))(@polkadot/[email protected])(@tonconnect/[email protected])([email protected]([email protected]))([email protected]([email protected])([email protected])([email protected])([email protected]))':
dependencies:
'@noble/curves': 1.9.7
'@noble/hashes': 1.8.0
@@ -16710,7 +16719,7 @@ snapshots:
'@noble/[email protected]': {}
'@noble/hashes@2.2.0': {}
'@noble/hashes@2.4.0': {}
'@noble/[email protected]': {}
@@ -18704,6 +18713,8 @@ snapshots:
'@scure/[email protected]': {}
'@scure/[email protected]': {}
'@scure/[email protected]':
dependencies:
'@noble/curves': 1.4.2
@@ -20217,7 +20228,7 @@ snapshots:
'@xrplf/[email protected]([email protected])([email protected])':
dependencies:
'@noble/hashes': 2.2.0
'@noble/hashes': 2.4.0
eventemitter3: 5.0.1
ws: 8.20.1([email protected])([email protected])
transitivePeerDependencies:
@@ -21039,10 +21050,10 @@ snapshots:
[email protected]: {}
[email protected](@noble/hashes@2.2.0):
[email protected](@noble/hashes@2.4.0):
dependencies:
whatwg-mimetype: 5.0.0
whatwg-url: 16.0.1(@noble/hashes@2.2.0)
whatwg-url: 16.0.1(@noble/hashes@2.4.0)
transitivePeerDependencies:
- '@noble/hashes'
@@ -22324,9 +22335,9 @@ snapshots:
dependencies:
lru-cache: 7.18.3
[email protected](@noble/hashes@2.2.0):
[email protected](@noble/hashes@2.4.0):
dependencies:
'@exodus/bytes': 1.15.1(@noble/hashes@2.2.0)
'@exodus/bytes': 1.15.1(@noble/hashes@2.4.0)
transitivePeerDependencies:
- '@noble/hashes'
@@ -22965,17 +22976,17 @@ snapshots:
[email protected]: {}
[email protected](@noble/hashes@2.2.0):
[email protected](@noble/hashes@2.4.0):
dependencies:
'@asamuzakjp/css-color': 5.1.11
'@asamuzakjp/dom-selector': 7.1.1
'@bramus/specificity': 2.4.2
'@csstools/css-syntax-patches-for-csstree': 1.1.4([email protected])
'@exodus/bytes': 1.15.1(@noble/hashes@2.2.0)
'@exodus/bytes': 1.15.1(@noble/hashes@2.4.0)
css-tree: 3.2.1
data-urls: 7.0.0(@noble/hashes@2.2.0)
data-urls: 7.0.0(@noble/hashes@2.4.0)
decimal.js: 10.6.0
html-encoding-sniffer: 6.0.0(@noble/hashes@2.2.0)
html-encoding-sniffer: 6.0.0(@noble/hashes@2.4.0)
is-potential-custom-element-name: 1.0.1
lru-cache: 11.5.0
parse5: 8.0.1
@@ -22986,7 +22997,7 @@ snapshots:
w3c-xmlserializer: 5.0.0
webidl-conversions: 8.0.1
whatwg-mimetype: 5.0.0
whatwg-url: 16.0.1(@noble/hashes@2.2.0)
whatwg-url: 16.0.1(@noble/hashes@2.4.0)
xml-name-validator: 5.0.0
transitivePeerDependencies:
- '@noble/hashes'
@@ -24301,7 +24312,7 @@ snapshots:
[email protected]: {}
[email protected]([email protected](@babel/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected]):
[email protected]([email protected](@playwright/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected]):
dependencies:
next: 14.2.16(@babel/[email protected])(@playwright/[email protected])([email protected]([email protected]))([email protected])
react: 18.3.1
@@ -26759,7 +26770,7 @@ snapshots:
terser: 5.48.0
yaml: 2.9.0
[email protected](@types/[email protected])([email protected]([email protected])([email protected]))([email protected](@noble/hashes@2.2.0))([email protected](@types/[email protected])([email protected])([email protected])([email protected])):
[email protected](@types/[email protected])([email protected]([email protected])([email protected]))([email protected](@noble/hashes@2.4.0))([email protected](@types/[email protected])([email protected])([email protected])([email protected])):
dependencies:
'@vitest/expect': 4.1.7
'@vitest/mocker': 4.1.7([email protected](@types/[email protected])([email protected])([email protected])([email protected]))
@@ -26784,7 +26795,7 @@ snapshots:
optionalDependencies:
'@types/node': 25.9.1
happy-dom: 20.9.0([email protected])([email protected])
jsdom: 29.1.1(@noble/hashes@2.2.0)
jsdom: 29.1.1(@noble/hashes@2.4.0)
transitivePeerDependencies:
- msw
@@ -27109,9 +27120,9 @@ snapshots:
[email protected]: {}
[email protected](@noble/hashes@2.2.0):
[email protected](@noble/hashes@2.4.0):
dependencies:
'@exodus/bytes': 1.15.1(@noble/hashes@2.2.0)
'@exodus/bytes': 1.15.1(@noble/hashes@2.4.0)
tr46: 6.0.0
webidl-conversions: 8.0.1
transitivePeerDependencies: