revert: webln package

This commit is contained in:
2023-05-19 15:21:37 +01:00
parent c82a0faf28
commit 6b4a5bd047
4 changed files with 60 additions and 42 deletions

View File

@ -31,7 +31,6 @@
"react-textarea-autosize": "^8.4.0",
"react-twitter-embed": "^4.0.4",
"use-long-press": "^2.0.3",
"webln": "^0.3.2",
"workbox-background-sync": "^6.4.2",
"workbox-broadcast-update": "^6.4.2",
"workbox-cacheable-response": "^6.4.2",

View File

@ -1,4 +1,3 @@
import { requestProvider, WebLNProvider } from "webln";
import {
InvoiceRequest,
LNWallet,
@ -13,19 +12,67 @@ import {
WalletKind,
WalletStore,
} from "Wallet";
import { unwrap } from "Util";
import { barrierQueue, processWorkQueue, WorkQueueItem } from "WorkQueue";
interface SendPaymentResponse {
paymentHash?: string;
preimage: string;
route?: {
total_amt: number;
total_fees: number;
};
}
interface RequestInvoiceArgs {
amount?: string | number;
defaultAmount?: string | number;
minimumAmount?: string | number;
maximumAmount?: string | number;
defaultMemo?: string;
}
interface RequestInvoiceResponse {
paymentRequest: string;
}
interface GetInfoResponse {
node: {
alias: string;
pubkey: string;
color?: string;
};
}
interface SignMessageResponse {
message: string;
signature: string;
}
interface WebLN {
enabled: boolean;
getInfo(): Promise<GetInfoResponse>;
enable(): Promise<void>;
makeInvoice(args: RequestInvoiceArgs): Promise<RequestInvoiceResponse>;
signMessage(message: string): Promise<SignMessageResponse>;
verifyMessage(signature: string, message: string): Promise<void>;
sendPayment: (pr: string) => Promise<SendPaymentResponse>;
}
declare global {
interface Window {
webln?: WebLN;
}
}
const WebLNQueue: Array<WorkQueueItem> = [];
processWorkQueue(WebLNQueue);
/**
* Adds a wallet config for WebLN if detected
*/
export async function setupWebLNWalletConfig(store: WalletStore) {
export function setupWebLNWalletConfig(store: WalletStore) {
const wallets = store.list();
const provider = await requestProvider();
if (provider && !wallets.some(a => a.kind === WalletKind.WebLN)) {
if (window.webln && !wallets.some(a => a.kind === WalletKind.WebLN)) {
const newConfig = {
id: "webln",
kind: WalletKind.WebLN,
@ -39,10 +86,8 @@ export async function setupWebLNWalletConfig(store: WalletStore) {
}
export class WebLNWallet implements LNWallet {
#provider?: WebLNProvider;
isReady(): boolean {
return this.#provider !== undefined;
return window.webln !== undefined && window.webln !== null;
}
canAutoLogin(): boolean {
@ -51,8 +96,8 @@ export class WebLNWallet implements LNWallet {
async getInfo(): Promise<WalletInfo> {
await this.login();
if (this.isReady() && this.#provider) {
const rsp = await barrierQueue(WebLNQueue, async () => await unwrap(this.#provider).getInfo());
if (this.isReady()) {
const rsp = await barrierQueue(WebLNQueue, async () => await window.webln?.getInfo());
if (rsp) {
return {
nodePubKey: rsp.node.pubkey,
@ -66,8 +111,8 @@ export class WebLNWallet implements LNWallet {
}
async login(): Promise<boolean> {
if (this.#provider === undefined) {
this.#provider = await requestProvider();
if (window.webln && !window.webln.enabled) {
await window.webln.enable();
}
return true;
}
@ -86,7 +131,7 @@ export class WebLNWallet implements LNWallet {
const rsp = await barrierQueue(
WebLNQueue,
async () =>
await unwrap(this.#provider).makeInvoice({
await window.webln?.makeInvoice({
amount: req.amount,
defaultMemo: req.memo,
})
@ -109,7 +154,7 @@ export class WebLNWallet implements LNWallet {
if (!invoice) {
throw new WalletError(WalletErrorCode.InvalidInvoice, "Could not parse invoice");
}
const rsp = await barrierQueue(WebLNQueue, async () => await unwrap(this.#provider).sendPayment(pr));
const rsp = await barrierQueue(WebLNQueue, async () => await window.webln?.sendPayment(pr));
if (rsp) {
invoice.state = WalletInvoiceState.Paid;
invoice.preimage = rsp.preimage;

View File

@ -141,8 +141,8 @@ export class WalletStore {
configs: [],
});
this.load(false);
this.snapshotState();
setupWebLNWalletConfig(this);
this.snapshotState();
}
hook(fn: WalletStateHook) {