From 6b4a5bd0476fa276df8c4909e1de68d88a2272b7 Mon Sep 17 00:00:00 2001 From: Kieran Date: Fri, 19 May 2023 15:21:37 +0100 Subject: [PATCH] revert: webln package --- packages/app/package.json | 1 - packages/app/src/Wallet/WebLN.ts | 73 ++++++++++++++++++++++++++------ packages/app/src/Wallet/index.ts | 2 +- yarn.lock | 26 ------------ 4 files changed, 60 insertions(+), 42 deletions(-) diff --git a/packages/app/package.json b/packages/app/package.json index c05e3459..305768eb 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -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", diff --git a/packages/app/src/Wallet/WebLN.ts b/packages/app/src/Wallet/WebLN.ts index a9770cca..41f1c325 100644 --- a/packages/app/src/Wallet/WebLN.ts +++ b/packages/app/src/Wallet/WebLN.ts @@ -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; + enable(): Promise; + makeInvoice(args: RequestInvoiceArgs): Promise; + signMessage(message: string): Promise; + verifyMessage(signature: string, message: string): Promise; + sendPayment: (pr: string) => Promise; +} + +declare global { + interface Window { + webln?: WebLN; + } +} + const WebLNQueue: Array = []; 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 { 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 { - 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; diff --git a/packages/app/src/Wallet/index.ts b/packages/app/src/Wallet/index.ts index f3078715..19f826c7 100644 --- a/packages/app/src/Wallet/index.ts +++ b/packages/app/src/Wallet/index.ts @@ -141,8 +141,8 @@ export class WalletStore { configs: [], }); this.load(false); - this.snapshotState(); setupWebLNWalletConfig(this); + this.snapshotState(); } hook(fn: WalletStateHook) { diff --git a/yarn.lock b/yarn.lock index 665c731d..f1287aa0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2119,13 +2119,6 @@ resolved "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz" integrity sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw== -"@types/chrome@^0.0.74": - version "0.0.74" - resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.74.tgz#f69827c48fcf7fecc90c96089807661749a5a5e3" - integrity sha512-hzosS5CkQcIKCgxcsV2AzbJ36KNxG/Db2YEN/erEu7Boprg+KpMDLBQqKFmSo+JkQMGqRcicUyqCowJpuT+C6A== - dependencies: - "@types/filesystem" "*" - "@types/connect-history-api-fallback@^1.3.5": version "1.3.5" resolved "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz" @@ -2213,18 +2206,6 @@ "@types/qs" "*" "@types/serve-static" "*" -"@types/filesystem@*": - version "0.0.32" - resolved "https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.32.tgz#307df7cc084a2293c3c1a31151b178063e0a8edf" - integrity sha512-Yuf4jR5YYMR2DVgwuCiP11s0xuVRyPKmz8vo6HBY3CGdeMj8af93CFZX+T82+VD1+UqHOxTq31lO7MI7lepBtQ== - dependencies: - "@types/filewriter" "*" - -"@types/filewriter@*": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/filewriter/-/filewriter-0.0.29.tgz#a48795ecadf957f6c0d10e0c34af86c098fa5bee" - integrity sha512-BsPXH/irW0ht0Ji6iw/jJaK8Lj3FJemon2gvEqHKpCdDCeemHa+rI3WBGq5z7cDMZgoLjY40oninGxqk+8NzNQ== - "@types/hoist-non-react-statics@^3.3.1": version "3.3.1" resolved "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz" @@ -9172,13 +9153,6 @@ webidl-conversions@^4.0.2: resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webln@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/webln/-/webln-0.3.2.tgz#bbadf52916666b6059e3661ef5ab73a76b7cd0f4" - integrity sha512-YYT83aOCLup2AmqvJdKtdeBTaZpjC6/JDMe8o6x1kbTYWwiwrtWHyO//PAsPixF3jwFsAkj5DmiceB6w/QSe7Q== - dependencies: - "@types/chrome" "^0.0.74" - webpack-bundle-analyzer@^4.8.0: version "4.8.0" resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz#951b8aaf491f665d2ae325d8b84da229157b1d04"