Files
app.zeusln.zeus/backends/NostrWalletConnect.ts
T

132 lines
4.5 KiB
TypeScript

import bolt11 from 'bolt11';
import { webln } from '@getalby/sdk';
import { settingsStore } from '../stores/Stores';
import Base64Utils from '../utils/Base64Utils';
export default class NostrWalletConnect {
nwc: any;
initNWC = async () => {
const { nostrWalletConnectUrl } = settingsStore;
this.nwc = new webln.NostrWebLNProvider({
nostrWalletConnectUrl
});
return this.nwc;
};
connect = async () => await this.nwc.enable();
getLightningBalance = async () => await this.nwc.getBalance();
getInvoices = async (data: any) => {
const { transactions } = await this.nwc.listTransactions({
...(data?.limit && {
limit: data.limit
})
});
const invoices = transactions.filter(
(payment: any) => payment.type === 'incoming'
);
return { invoices };
};
createInvoice = async (data: any) =>
await this.nwc.makeInvoice({
defaultMemo: data.memo,
amount: Number(data.value)
});
getPayments = async (
params: {
maxPayments?: number;
} = {
maxPayments: 500
}
) => {
const { transactions } = await this.nwc.listTransactions({
...(params?.maxPayments && {
limit: params.maxPayments
})
});
const payments = transactions.filter(
(payment: any) => payment.type === 'outgoing'
);
return { payments };
};
payLightningInvoice = async (data: any) =>
await this.nwc.sendPayment(data.payment_request);
decodePaymentRequest = (urlParams?: Array<string>) =>
Promise.resolve().then(() => {
const decoded: any = bolt11.decode(
(urlParams && urlParams[0]) || ''
);
for (let i = 0; i < decoded.tags.length; i++) {
const tag = decoded.tags[i];
switch (tag.tagName) {
case 'purpose_commit_hash':
decoded.description_hash = tag.data;
break;
case 'payment_hash':
decoded.payment_hash = tag.data;
break;
case 'expire_time':
decoded.expiry = tag.data;
break;
case 'description':
decoded.description = tag.data;
break;
}
}
return decoded;
});
lookupInvoice = async (data: any) =>
await this.nwc.lookupInvoice({
payment_hash: Base64Utils.hexToBase64(data.r_hash)
});
supportsPeers = () => false;
supportsMessageSigning = () => false;
supportsLnurlAuth = () => false;
supportsOnchainBalance = () => false;
supportsOnchainSends = () => false;
supportsOnchainReceiving = () => false;
supportsLightningSends = () => true;
supportsKeysend = () => false;
supportsChannelManagement = () => false;
supportsPendingChannels = () => false;
supportsClosedChannels = () => false;
supportsMPP = () => false;
supportsAMP = () => false;
supportsCoinControl = () => false;
supportsChannelCoinControl = () => false;
supportsHopPicking = () => false;
supportsAccounts = () => false;
supportsRouting = () => false;
supportsNodeInfo = () => false;
supportsWithdrawalRequests = () => false;
singleFeesEarnedTotal = () => false;
supportsAddressTypeSelection = () => false;
supportsNestedSegWit = () => false;
supportsTaproot = () => false;
supportsBumpFee = () => false;
supportsFlowLSP = () => false;
supportsNetworkInfo = () => false;
supportsSimpleTaprootChannels = () => false;
supportsCustomPreimages = () => false;
supportsSweep = () => false;
supportsOnchainSendMax = () => false;
supportsOnchainBatching = () => false;
supportsChannelBatching = () => false;
supportsChannelFundMax = () => false;
supportsLSPS1customMessage = () => false;
supportsLSPS1rest = () => false;
supportsOffers = () => false;
supportsBolt11BlindedRoutes = () => false;
supportsAddressesWithDerivationPaths = () => false;
isLNDBased = () => false;
supportsForwardingHistory = () => false;
supportInboundFees = () => false;
supportsCashuWallet = () => false;
supportsSettingInvoiceExpiration = () => false;
supportsNostrWalletConnectService = () => false;
}