1
0
forked from Kieran/snort

revert: webln package

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

View File

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

View File

@ -1,4 +1,3 @@
import { requestProvider, WebLNProvider } from "webln";
import { import {
InvoiceRequest, InvoiceRequest,
LNWallet, LNWallet,
@ -13,19 +12,67 @@ import {
WalletKind, WalletKind,
WalletStore, WalletStore,
} from "Wallet"; } from "Wallet";
import { unwrap } from "Util";
import { barrierQueue, processWorkQueue, WorkQueueItem } from "WorkQueue"; 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> = []; const WebLNQueue: Array<WorkQueueItem> = [];
processWorkQueue(WebLNQueue); processWorkQueue(WebLNQueue);
/** /**
* Adds a wallet config for WebLN if detected * Adds a wallet config for WebLN if detected
*/ */
export async function setupWebLNWalletConfig(store: WalletStore) { export function setupWebLNWalletConfig(store: WalletStore) {
const wallets = store.list(); const wallets = store.list();
const provider = await requestProvider(); if (window.webln && !wallets.some(a => a.kind === WalletKind.WebLN)) {
if (provider && !wallets.some(a => a.kind === WalletKind.WebLN)) {
const newConfig = { const newConfig = {
id: "webln", id: "webln",
kind: WalletKind.WebLN, kind: WalletKind.WebLN,
@ -39,10 +86,8 @@ export async function setupWebLNWalletConfig(store: WalletStore) {
} }
export class WebLNWallet implements LNWallet { export class WebLNWallet implements LNWallet {
#provider?: WebLNProvider;
isReady(): boolean { isReady(): boolean {
return this.#provider !== undefined; return window.webln !== undefined && window.webln !== null;
} }
canAutoLogin(): boolean { canAutoLogin(): boolean {
@ -51,8 +96,8 @@ export class WebLNWallet implements LNWallet {
async getInfo(): Promise<WalletInfo> { async getInfo(): Promise<WalletInfo> {
await this.login(); await this.login();
if (this.isReady() && this.#provider) { if (this.isReady()) {
const rsp = await barrierQueue(WebLNQueue, async () => await unwrap(this.#provider).getInfo()); const rsp = await barrierQueue(WebLNQueue, async () => await window.webln?.getInfo());
if (rsp) { if (rsp) {
return { return {
nodePubKey: rsp.node.pubkey, nodePubKey: rsp.node.pubkey,
@ -66,8 +111,8 @@ export class WebLNWallet implements LNWallet {
} }
async login(): Promise<boolean> { async login(): Promise<boolean> {
if (this.#provider === undefined) { if (window.webln && !window.webln.enabled) {
this.#provider = await requestProvider(); await window.webln.enable();
} }
return true; return true;
} }
@ -86,7 +131,7 @@ export class WebLNWallet implements LNWallet {
const rsp = await barrierQueue( const rsp = await barrierQueue(
WebLNQueue, WebLNQueue,
async () => async () =>
await unwrap(this.#provider).makeInvoice({ await window.webln?.makeInvoice({
amount: req.amount, amount: req.amount,
defaultMemo: req.memo, defaultMemo: req.memo,
}) })
@ -109,7 +154,7 @@ export class WebLNWallet implements LNWallet {
if (!invoice) { if (!invoice) {
throw new WalletError(WalletErrorCode.InvalidInvoice, "Could not parse 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) { if (rsp) {
invoice.state = WalletInvoiceState.Paid; invoice.state = WalletInvoiceState.Paid;
invoice.preimage = rsp.preimage; invoice.preimage = rsp.preimage;

View File

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

View File

@ -2119,13 +2119,6 @@
resolved "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz" resolved "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz"
integrity sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw== 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": "@types/connect-history-api-fallback@^1.3.5":
version "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" 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/qs" "*"
"@types/serve-static" "*" "@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": "@types/hoist-non-react-statics@^3.3.1":
version "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" 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" resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz"
integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== 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: webpack-bundle-analyzer@^4.8.0:
version "4.8.0" version "4.8.0"
resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz#951b8aaf491f665d2ae325d8b84da229157b1d04" resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz#951b8aaf491f665d2ae325d8b84da229157b1d04"