74 lines
1.7 KiB
JavaScript
74 lines
1.7 KiB
JavaScript
import Nostr from '@/lib/nostr'
|
|
import { NDKNWCWallet } from '@nostr-dev-kit/ndk-wallet'
|
|
import { nwcUrlValidator, parseNwcUrl } from '@/wallets/lib/validate'
|
|
|
|
// Nostr Wallet Connect (NIP-47)
|
|
// https://github.com/nostr-protocol/nips/blob/master/47.md
|
|
|
|
export default [
|
|
{
|
|
name: 'NWC',
|
|
send: true,
|
|
displayName: 'Nostr Wallet Connect',
|
|
fields: [
|
|
{
|
|
name: 'url',
|
|
label: 'url',
|
|
placeholder: 'nostr+walletconnect://',
|
|
type: 'password',
|
|
required: true,
|
|
validate: nwcUrlValidator(),
|
|
encrypt: true
|
|
}
|
|
],
|
|
relationName: 'walletSendNWC'
|
|
},
|
|
{
|
|
name: 'NWC',
|
|
send: false,
|
|
displayName: 'Nostr Wallet Connect',
|
|
fields: [
|
|
{
|
|
name: 'url',
|
|
label: 'url',
|
|
placeholder: 'nostr+walletconnect://',
|
|
type: 'text',
|
|
required: true,
|
|
validate: nwcUrlValidator()
|
|
}
|
|
],
|
|
relationName: 'walletRecvNWC'
|
|
}
|
|
]
|
|
|
|
export async function nwcTryRun (fun, { url }, { signal }) {
|
|
const nostr = new Nostr()
|
|
try {
|
|
const nwc = await getNwc(nostr, url, { signal })
|
|
const res = await fun(nwc)
|
|
if (res.error) throw new Error(res.error)
|
|
return res
|
|
} catch (e) {
|
|
if (e.error) throw new Error(e.error.message || e.error.code)
|
|
throw e
|
|
} finally {
|
|
nostr.close()
|
|
}
|
|
}
|
|
|
|
export async function getNwc (nostr, url, { signal }) {
|
|
const ndk = nostr.ndk
|
|
const { walletPubkey, secret, relayUrls } = parseNwcUrl(url)
|
|
const nwc = new NDKNWCWallet(ndk, {
|
|
pubkey: walletPubkey,
|
|
relayUrls,
|
|
secret
|
|
})
|
|
return nwc
|
|
}
|
|
|
|
export async function supportedMethods (url, { signal }) {
|
|
const result = await nwcTryRun(nwc => nwc.getInfo(), { url }, { signal })
|
|
return result.methods
|
|
}
|