forked from coracle/flotilla
* Pin sharp via pnpm override, add wallet receive * Revert toast success styling * Route receive through wallet connect * Simplify receive invoice validation * Polish receive modal layout * Clarify NWC client config * Adjust wallet action layout on mobile
This commit is contained in:
@@ -425,6 +425,22 @@ export const publishLeaveRequest = (params: LeaveRequestParams) =>
|
||||
|
||||
export const getWebLn = () => (window as any).webln
|
||||
|
||||
export const getNwcClient = () => {
|
||||
const $session = session.get()
|
||||
|
||||
if (!$session?.wallet || $session.wallet.type !== "nwc") {
|
||||
throw new Error("No NWC wallet is connected")
|
||||
}
|
||||
|
||||
const {info} = $session.wallet
|
||||
|
||||
if (info.nostrWalletConnectUrl) {
|
||||
return new nwc.NWCClient({nostrWalletConnectUrl: info.nostrWalletConnectUrl})
|
||||
}
|
||||
|
||||
return new nwc.NWCClient(info)
|
||||
}
|
||||
|
||||
export const payInvoice = async (invoice: string, msats?: number) => {
|
||||
const $session = session.get()
|
||||
|
||||
@@ -435,7 +451,7 @@ export const payInvoice = async (invoice: string, msats?: number) => {
|
||||
if ($session.wallet.type === "nwc") {
|
||||
const params: {invoice: string; amount?: number} = {invoice}
|
||||
if (msats) params.amount = msats
|
||||
return new nwc.NWCClient($session.wallet.info).payInvoice(params)
|
||||
return getNwcClient().payInvoice(params)
|
||||
} else if ($session.wallet.type === "webln") {
|
||||
if (msats) throw new Error("Unable to pay zero invoices with webln")
|
||||
return getWebLn()
|
||||
@@ -444,6 +460,67 @@ export const payInvoice = async (invoice: string, msats?: number) => {
|
||||
}
|
||||
}
|
||||
|
||||
export type CreateInvoiceParams = {
|
||||
sats: number
|
||||
description?: string
|
||||
}
|
||||
|
||||
export const createInvoice = async ({
|
||||
sats,
|
||||
description = "Receive via lightning",
|
||||
}: CreateInvoiceParams) => {
|
||||
const $session = session.get()
|
||||
|
||||
if (!$session?.wallet) {
|
||||
throw new Error("No wallet is connected")
|
||||
}
|
||||
|
||||
const satAmount = Math.floor(sats)
|
||||
|
||||
if (!Number.isFinite(satAmount) || satAmount <= 0) {
|
||||
throw new Error("Invalid satoshi amount")
|
||||
}
|
||||
|
||||
if ($session.wallet.type === "nwc") {
|
||||
const createdInvoice = await getNwcClient().makeInvoice({
|
||||
amount: satAmount * 1000,
|
||||
description,
|
||||
})
|
||||
|
||||
if (!createdInvoice.invoice) {
|
||||
throw new Error("NWC wallet failed to return an invoice")
|
||||
}
|
||||
|
||||
return createdInvoice.invoice
|
||||
}
|
||||
|
||||
if ($session.wallet.type === "webln") {
|
||||
const webLn = getWebLn()
|
||||
|
||||
if (!webLn) {
|
||||
throw new Error("WebLN not available")
|
||||
}
|
||||
|
||||
await webLn.enable()
|
||||
|
||||
const response = await webLn.makeInvoice({
|
||||
amount: satAmount,
|
||||
defaultMemo: description,
|
||||
})
|
||||
|
||||
const paymentRequest =
|
||||
typeof response === "string" ? response : response?.paymentRequest || response?.pr || ""
|
||||
|
||||
if (!paymentRequest) {
|
||||
throw new Error("Invalid payment request returned from WebLN")
|
||||
}
|
||||
|
||||
return paymentRequest
|
||||
}
|
||||
|
||||
throw new Error("Unsupported wallet type")
|
||||
}
|
||||
|
||||
// File upload
|
||||
|
||||
export const normalizeBlossomUrl = (url: string) => normalizeUrl(url.replace(/^ws/, "http"))
|
||||
|
||||
Reference in New Issue
Block a user