Map lnAddr to correct wallet on save via prompt (#2456)

This commit is contained in:
ekzyis 2025-08-29 20:25:57 +02:00 committed by GitHub
parent 2d3d3ac6c9
commit 6f67aaaef9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 23 additions and 9 deletions

View File

@ -74,7 +74,7 @@ function LnAddrForm ({ onAttach }) {
const initial = { address: '' } const initial = { address: '' }
const onSubmit = useCallback(async ({ address }) => { const onSubmit = useCallback(async ({ address }) => {
await upsert({ address }) await upsert(address)
onAttach() onAttach()
}, [upsert, onAttach]) }, [upsert, onAttach])

View File

@ -31,14 +31,15 @@ import { gql, useApolloClient, useMutation, useQuery } from '@apollo/client'
import { useDecryption, useEncryption, useSetKey, useWalletLoggerFactory, useWalletsUpdatedAt, WalletStatus } from '@/wallets/client/hooks' import { useDecryption, useEncryption, useSetKey, useWalletLoggerFactory, useWalletsUpdatedAt, WalletStatus } from '@/wallets/client/hooks'
import { useCallback, useEffect, useMemo, useRef, useState } from 'react' import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
import { import {
isEncryptedField, isTemplate, isWallet, protocolAvailable, protocolClientSchema, protocolLogName, reverseProtocolRelationName isEncryptedField, isTemplate, isWallet, protocolAvailable, protocolClientSchema, protocolLogName, reverseProtocolRelationName,
walletLud16Domain
} from '@/wallets/lib/util' } from '@/wallets/lib/util'
import { protocolTestSendPayment } from '@/wallets/client/protocols' import { protocolTestSendPayment } from '@/wallets/client/protocols'
import { timeoutSignal } from '@/lib/time' import { timeoutSignal } from '@/lib/time'
import { WALLET_SEND_PAYMENT_TIMEOUT_MS } from '@/lib/constants' import { WALLET_SEND_PAYMENT_TIMEOUT_MS } from '@/lib/constants'
import { useToast } from '@/components/toast' import { useToast } from '@/components/toast'
import { useMe } from '@/components/me' import { useMe } from '@/components/me'
import { useWallets, useWalletsLoading } from '@/wallets/client/context' import { useTemplates, useWallets, useWalletsLoading } from '@/wallets/client/context'
import { requestPersistentStorage } from '@/components/use-indexeddb' import { requestPersistentStorage } from '@/components/use-indexeddb'
export function useWalletsQuery () { export function useWalletsQuery () {
@ -184,16 +185,29 @@ export function useWalletProtocolUpsert () {
} }
export function useLightningAddressUpsert () { export function useLightningAddressUpsert () {
const wallet = useMemo(() => ({ name: 'LN_ADDR', __typename: 'WalletTemplate' }), [])
const protocol = useMemo(() => ({ name: 'LN_ADDR', send: false, __typename: 'WalletProtocolTemplate' }), []) const protocol = useMemo(() => ({ name: 'LN_ADDR', send: false, __typename: 'WalletProtocolTemplate' }), [])
const upsert = useWalletProtocolUpsert() const upsert = useWalletProtocolUpsert()
const testCreateInvoice = useTestCreateInvoice(protocol) const testCreateInvoice = useTestCreateInvoice(protocol)
const mapper = useLightningAddressToWalletMapper()
return useCallback(async (values) => { return useCallback(async (address) => {
// TODO(wallet-v2): parse domain from address input to use correct wallet template await testCreateInvoice({ address })
await testCreateInvoice(values) const wallet = mapper(address)
return await upsert(wallet, protocol, { ...values, enabled: true }) return await upsert(wallet, protocol, { address, enabled: true })
}, [testCreateInvoice, upsert, wallet, protocol]) }, [testCreateInvoice, mapper, upsert, protocol])
}
function useLightningAddressToWalletMapper () {
const templates = useTemplates()
return useCallback((address) => {
return templates
.filter(t => t.protocols.some(p => p.name === 'LN_ADDR'))
.find(t => {
const domain = walletLud16Domain(t.name)
// the LN_ADDR wallet supports lightning addresses but does not have a domain because it's a generic wallet for any LN address
return domain && address.endsWith(domain)
}) ?? { name: 'LN_ADDR', __typename: 'WalletTemplate' }
}, [templates])
} }
export function useWalletEncryptionUpdate () { export function useWalletEncryptionUpdate () {