From 4e928702cf275c96d5ad51744494ef26816be6b6 Mon Sep 17 00:00:00 2001 From: Kody Low <74332828+Kodylow@users.noreply.github.com> Date: Thu, 30 Nov 2023 09:25:49 -0800 Subject: [PATCH 01/27] feat: add nix flake (#584) * feat: add nix flake * fix: local_data dir for dev * fix: remove fedimint nix flake parts --- .gitignore | 5 +- flake.lock | 500 +++++++++++++++++++++++++++++++++++++++++++++++++++++ flake.nix | 19 ++ 3 files changed, 523 insertions(+), 1 deletion(-) create mode 100644 flake.lock create mode 100644 flake.nix diff --git a/.gitignore b/.gitignore index d152059a..03b17961 100644 --- a/.gitignore +++ b/.gitignore @@ -43,4 +43,7 @@ lerna-debug.log* !.elasticbeanstalk/*.global.yml # config files -config.yaml \ No newline at end of file +config.yaml + +# For Dev +local_data diff --git a/flake.lock b/flake.lock new file mode 100644 index 00000000..c4f8c2bc --- /dev/null +++ b/flake.lock @@ -0,0 +1,500 @@ +{ + "nodes": { + "advisory-db": { + "flake": false, + "locked": { + "lastModified": 1681141676, + "narHash": "sha256-U/lhe5kPY6JcitdPiPxt6O7n6rxH+zw/Ghl1w8C9dB8=", + "owner": "rustsec", + "repo": "advisory-db", + "rev": "c358dc290a6f3ccb7f889b53f4f26c0b5d18d2ff", + "type": "github" + }, + "original": { + "owner": "rustsec", + "repo": "advisory-db", + "type": "github" + } + }, + "android-nixpkgs": { + "inputs": { + "devshell": "devshell", + "flake-utils": "flake-utils_2", + "nixpkgs": [ + "fedimint", + "flakebox", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1695500413, + "narHash": "sha256-yinrAWIc4XZbWQoXOYkUO0lCNQ5z/vMyl+QCYuIwdPc=", + "owner": "dpc", + "repo": "android-nixpkgs", + "rev": "2e42268a196375ce9b010a10ec5250d2f91a09b4", + "type": "github" + }, + "original": { + "owner": "dpc", + "repo": "android-nixpkgs", + "rev": "2e42268a196375ce9b010a10ec5250d2f91a09b4", + "type": "github" + } + }, + "crane": { + "inputs": { + "flake-compat": "flake-compat", + "flake-utils": "flake-utils_3", + "nixpkgs": [ + "fedimint", + "flakebox", + "nixpkgs" + ], + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1697596235, + "narHash": "sha256-4VTrrTdoA1u1wyf15krZCFl3c29YLesSNioYEgfb2FY=", + "owner": "dpc", + "repo": "crane", + "rev": "c97a0c0d83bfdf01c29113c5592a3defc27cb315", + "type": "github" + }, + "original": { + "owner": "dpc", + "repo": "crane", + "rev": "c97a0c0d83bfdf01c29113c5592a3defc27cb315", + "type": "github" + } + }, + "devshell": { + "inputs": { + "nixpkgs": [ + "fedimint", + "flakebox", + "android-nixpkgs", + "nixpkgs" + ], + "systems": "systems" + }, + "locked": { + "lastModified": 1695195896, + "narHash": "sha256-pq9q7YsGXnQzJFkR5284TmxrLNFc0wo4NQ/a5E93CQU=", + "owner": "numtide", + "repo": "devshell", + "rev": "05d40d17bf3459606316e3e9ec683b784ff28f16", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "fedimint": { + "inputs": { + "advisory-db": "advisory-db", + "flake-utils": "flake-utils", + "flakebox": "flakebox", + "nixpkgs": "nixpkgs_2", + "nixpkgs-kitman": "nixpkgs-kitman", + "nixpkgs-unstable": "nixpkgs-unstable_2" + }, + "locked": { + "lastModified": 1699573846, + "narHash": "sha256-4xKNhUE7e3GjjMbNib35B7eJWjuDIbYtwoHBOWYtqFA=", + "owner": "fedimint", + "repo": "fedimint", + "rev": "f58f1913e62b6529a2ff36ec5c89a3852aba7ca7", + "type": "github" + }, + "original": { + "owner": "fedimint", + "repo": "fedimint", + "rev": "f58f1913e62b6529a2ff36ec5c89a3852aba7ca7", + "type": "github" + } + }, + "fenix": { + "inputs": { + "nixpkgs": [ + "fedimint", + "flakebox", + "nixpkgs" + ], + "rust-analyzer-src": "rust-analyzer-src" + }, + "locked": { + "lastModified": 1696918968, + "narHash": "sha256-18rAHsM9YsGp7aKKemO4gKIeWfrSyDsdJZ/mk4dQ3JI=", + "owner": "nix-community", + "repo": "fenix", + "rev": "638fc95a2a3d01b372c76f71cbb6d73c63909d6e", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1673956053, + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1676283394, + "narHash": "sha256-XX2f9c3iySLCw54rJ/CZs+ZK6IQy7GXNY4nSOyu2QG4=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3db36a8b464d0c4532ba1c7dda728f4576d6d073", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1694529238, + "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_3": { + "inputs": { + "systems": "systems_3" + }, + "locked": { + "lastModified": 1694529238, + "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_4": { + "inputs": { + "systems": [ + "fedimint", + "flakebox", + "systems" + ] + }, + "locked": { + "lastModified": 1694529238, + "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_5": { + "inputs": { + "systems": "systems_5" + }, + "locked": { + "lastModified": 1694529238, + "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flakebox": { + "inputs": { + "android-nixpkgs": "android-nixpkgs", + "crane": "crane", + "fenix": "fenix", + "flake-utils": "flake-utils_4", + "nixpkgs": "nixpkgs", + "nixpkgs-unstable": "nixpkgs-unstable", + "systems": "systems_4" + }, + "locked": { + "lastModified": 1697820035, + "narHash": "sha256-l+rxi/P5qt+Ud+qQCyOiKB001P/A3J0Hsh7PNg7FyWM=", + "owner": "rustshop", + "repo": "flakebox", + "rev": "0d866b57cd09e30e8385150e846885236ea33bdb", + "type": "github" + }, + "original": { + "owner": "rustshop", + "repo": "flakebox", + "rev": "0d866b57cd09e30e8385150e846885236ea33bdb", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1696697597, + "narHash": "sha256-q26Qv4DQ+h6IeozF2o1secyQG0jt2VUT3V0K58jr3pg=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "5a237aecb57296f67276ac9ab296a41c23981f56", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-kitman": { + "locked": { + "lastModified": 1677533122, + "narHash": "sha256-nYSQfuPruk5oAF0J7Pp3/Si3tS/H1lg4Rwi7QIbgDJ8=", + "owner": "jkitman", + "repo": "nixpkgs", + "rev": "61ccef8bc0a010a21ccdeb10a92220a47d8149ac", + "type": "github" + }, + "original": { + "owner": "jkitman", + "ref": "add-esplora-pkg", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-unstable": { + "locked": { + "lastModified": 1697456312, + "narHash": "sha256-roiSnrqb5r+ehnKCauPLugoU8S36KgmWraHgRqVYndo=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "ca012a02bf8327be9e488546faecae5e05d7d749", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-unstable_2": { + "locked": { + "lastModified": 1697059129, + "narHash": "sha256-9NJcFF9CEYPvHJ5ckE8kvINvI84SZZ87PvqMbH6pro0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "5e4c2ada4fcd54b99d56d7bd62f384511a7e2593", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "5e4c2ada4fcd54b99d56d7bd62f384511a7e2593", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1697226376, + "narHash": "sha256-cumLLb1QOUtWieUnLGqo+ylNt3+fU8Lcv5Zl+tYbRUE=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "898cb2064b6e98b8c5499f37e81adbdf2925f7c5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1700097215, + "narHash": "sha256-ODQ3gBTv1iHd7lG21H+ErVISB5wVeOhd/dEogOqHs/I=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "9fb122519e9cd465d532f736a98c1e1eb541ef6f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "fedimint": "fedimint", + "flake-utils": "flake-utils_5", + "nixpkgs": "nixpkgs_3" + } + }, + "rust-analyzer-src": { + "flake": false, + "locked": { + "lastModified": 1696840854, + "narHash": "sha256-wphOvjDSDsUN5DMe3MOhdargANIab7YE3hkh3Qv7qso=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "aaa1e8e1b82d742b876d164a30dda02f318ce809", + "type": "github" + }, + "original": { + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" + } + }, + "rust-overlay": { + "inputs": { + "flake-utils": [ + "fedimint", + "flakebox", + "crane", + "flake-utils" + ], + "nixpkgs": [ + "fedimint", + "flakebox", + "crane", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1695003086, + "narHash": "sha256-d1/ZKuBRpxifmUf7FaedCqhy0lyVbqj44Oc2s+P5bdA=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "b87a14abea512d956f0b89d0d8a1e9b41f3e20ff", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_3": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_4": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_5": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 00000000..b9a59cd0 --- /dev/null +++ b/flake.nix @@ -0,0 +1,19 @@ +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.05"; + flake-utils.url = "github:numtide/flake-utils"; + }; + outputs = { self, nixpkgs, flake-utils, fedimint }: + flake-utils.lib.eachDefaultSystem (system: + let pkgs = import nixpkgs { inherit system; }; + in { + devShells = fmLib.devShells // { + default = fmLib.devShells.default.overrideAttrs (prev: { + nativeBuildInputs = [ pkgs.nodejs ] ++ prev.nativeBuildInputs; + shellHook = '' + npm install + ''; + }); + }; + }); +} From 2b1bf30029fa1cf85ffea99cc7163ed0e5a27e83 Mon Sep 17 00:00:00 2001 From: Anthony Potdevin Date: Thu, 30 Nov 2023 18:51:18 +0100 Subject: [PATCH 02/27] chore: bump deps --- package-lock.json | 2589 +++++++++++++++++++++++++++------------------ package.json | 104 +- 2 files changed, 1584 insertions(+), 1109 deletions(-) diff --git a/package-lock.json b/package-lock.json index fadc0e4e..899a32b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,23 +9,23 @@ "version": "0.13.24", "license": "MIT", "dependencies": { - "@apollo/client": "^3.8.7", + "@apollo/client": "^3.8.8", "@fullerstack/nax-ipware": "^0.10.0", - "@nestjs/apollo": "^12.0.9", - "@nestjs/common": "^10.2.8", + "@nestjs/apollo": "^12.0.11", + "@nestjs/common": "^10.2.10", "@nestjs/config": "^3.1.1", - "@nestjs/core": "^10.2.8", - "@nestjs/graphql": "^12.0.9", - "@nestjs/jwt": "^10.1.1", + "@nestjs/core": "^10.2.10", + "@nestjs/graphql": "^12.0.11", + "@nestjs/jwt": "^10.2.0", "@nestjs/passport": "^10.0.2", - "@nestjs/platform-express": "^10.2.8", - "@nestjs/platform-socket.io": "^10.2.8", + "@nestjs/platform-express": "^10.2.10", + "@nestjs/platform-socket.io": "^10.2.10", "@nestjs/schedule": "^4.0.0", "@nestjs/throttler": "^5.0.1", - "@nestjs/websockets": "^10.2.8", + "@nestjs/websockets": "^10.2.10", "@tanstack/react-table": "^8.10.7", - "apollo-server-express": "^3.12.1", - "balanceofsatoshis": "^17.3.0", + "apollo-server-express": "^3.13.0", + "balanceofsatoshis": "^17.5.2", "bcryptjs": "^2.4.3", "bech32": "^2.0.0", "big.js": "^6.2.1", @@ -33,7 +33,7 @@ "bip39": "^3.1.0", "bitcoinjs-lib": "^6.1.5", "boltz-core": "^1.0.4", - "cookie": "^0.5.0", + "cookie": "^0.6.0", "cross-env": "^7.0.3", "crypto-js": "^4.1.1", "d3-array": "^3.2.4", @@ -49,10 +49,10 @@ "js-cookie": "^3.0.5", "js-yaml": "^4.1.0", "jsonwebtoken": "^9.0.2", - "lightning": "^10.1.1", + "lightning": "^10.1.3", "lodash": "^4.17.21", "nest-winston": "^1.9.4", - "next": "^14.0.1", + "next": "^14.0.3", "node-fetch": "^3.3.2", "numeral": "^2.0.6", "otplib": "^12.0.1", @@ -64,13 +64,13 @@ "react-copy-to-clipboard": "^5.1.0", "react-dom": "^18.2.0", "react-feather": "^2.0.10", - "react-grid-layout": "^1.4.2", + "react-grid-layout": "^1.4.4", "react-is": "^18.2.0", - "react-select": "^5.7.7", + "react-select": "^5.8.0", "react-slider": "^2.0.6", "react-spinners": "^0.13.8", "react-toastify": "^9.1.3", - "react-tooltip": "^5.22.0", + "react-tooltip": "^5.24.0", "reflect-metadata": "^0.1.13", "rimraf": "^5.0.5", "rxjs": "^7.5.6", @@ -95,53 +95,53 @@ "@graphql-codegen/typescript-resolvers": "^4.0.1", "@nestjs/cli": "^10.2.1", "@nestjs/schematics": "^10.0.3", - "@types/bcryptjs": "^2.4.5", - "@types/big.js": "^6.2.1", - "@types/cookie": "^0.5.3", + "@types/bcryptjs": "^2.4.6", + "@types/big.js": "^6.2.2", + "@types/cookie": "^0.6.0", "@types/cron": "^2.4.0", - "@types/crypto-js": "^4.1.3", - "@types/d3-array": "^3.2.0", - "@types/d3-time-format": "^4.0.2", - "@types/express": "^4.17.20", - "@types/jest": "^29.5.7", - "@types/js-cookie": "^3.0.5", - "@types/js-yaml": "^4.0.8", - "@types/jsonwebtoken": "^9.0.4", - "@types/lodash": "^4.14.200", - "@types/node": "^20.5.8", - "@types/numeral": "^2.0.4", - "@types/qrcode.react": "^1.0.4", - "@types/react": "^18.2.35", - "@types/react-copy-to-clipboard": "^5.0.6", - "@types/react-grid-layout": "^1.3.4", - "@types/react-qr-reader": "^2.1.6", - "@types/react-slider": "^1.3.3", - "@types/secp256k1": "^4.0.5", - "@types/styled-components": "^5.1.29", - "@types/styled-react-modal": "^1.2.4", - "@types/styled-theming": "^2.2.7", - "@types/supertest": "^2.0.15", - "@types/uuid": "^9.0.6", - "@typescript-eslint/eslint-plugin": "^6.9.1", - "@typescript-eslint/parser": "^6.9.1", - "apollo-server": "^3.12.1", + "@types/crypto-js": "^4.2.1", + "@types/d3-array": "^3.2.1", + "@types/d3-time-format": "^4.0.3", + "@types/express": "^4.17.21", + "@types/jest": "^29.5.10", + "@types/js-cookie": "^3.0.6", + "@types/js-yaml": "^4.0.9", + "@types/jsonwebtoken": "^9.0.5", + "@types/lodash": "^4.14.202", + "@types/node": "^20.10.1", + "@types/numeral": "^2.0.5", + "@types/qrcode.react": "^1.0.5", + "@types/react": "^18.2.39", + "@types/react-copy-to-clipboard": "^5.0.7", + "@types/react-grid-layout": "^1.3.5", + "@types/react-qr-reader": "^2.1.7", + "@types/react-slider": "^1.3.5", + "@types/secp256k1": "^4.0.6", + "@types/styled-components": "^5.1.32", + "@types/styled-react-modal": "^1.2.5", + "@types/styled-theming": "^2.2.8", + "@types/supertest": "^2.0.16", + "@types/uuid": "^9.0.7", + "@typescript-eslint/eslint-plugin": "^6.13.1", + "@typescript-eslint/parser": "^6.13.1", + "apollo-server": "^3.13.0", "babel-plugin-styled-components": "^2.1.4", - "eslint": "^8.53.0", - "eslint-config-next": "^14.0.1", + "eslint": "^8.54.0", + "eslint-config-next": "^14.0.3", "eslint-config-prettier": "^9.0.0", "eslint-plugin-prettier": "^5.0.1", "husky": "^8.0.3", "jest": "^29.7.0", - "lint-staged": "^15.0.2", - "prettier": "^3.0.3", + "lint-staged": "^15.1.0", + "prettier": "^3.1.0", "source-map-support": "^0.5.21", "standard-version": "^9.5.0", "supertest": "^6.3.3", "ts-jest": "^29.1.1", - "ts-loader": "^9.5.0", + "ts-loader": "^9.5.1", "ts-node": "^10.9.1", "tsconfig-paths": "^4.2.0", - "typescript": "^5.2.2", + "typescript": "^5.3.2", "ws": "^8.14.2" } }, @@ -404,17 +404,16 @@ } }, "node_modules/@apollo/client": { - "version": "3.8.7", - "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.8.7.tgz", - "integrity": "sha512-DnQtFkQrCyxHTSa9gR84YRLmU/al6HeXcLZazVe+VxKBmx/Hj4rV8xWtzfWYX5ijartsqDR7SJgV037MATEecA==", + "version": "3.8.8", + "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.8.8.tgz", + "integrity": "sha512-omjd9ryGDkadZrKW6l5ktUAdS4SNaFOccYQ4ZST0HLW83y8kQaSZOCTNlpkoBUK8cv6qP8+AxOKwLm2ho8qQ+Q==", "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", - "@wry/context": "^0.7.3", "@wry/equality": "^0.5.6", - "@wry/trie": "^0.4.3", + "@wry/trie": "^0.5.0", "graphql-tag": "^2.12.6", "hoist-non-react-statics": "^3.3.2", - "optimism": "^0.17.5", + "optimism": "^0.18.0", "prop-types": "^15.7.2", "response-iterator": "^0.2.6", "symbol-observable": "^4.0.0", @@ -2490,9 +2489,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz", - "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz", + "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4838,9 +4837,9 @@ } }, "node_modules/@grpc/grpc-js": { - "version": "1.9.9", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.9.tgz", - "integrity": "sha512-vQ1qwi/Kiyprt+uhb1+rHMpyk4CVRMTGNUGGPRGS7pLNfWkdCHrGEnT6T3/JyC2VZgoOX/X1KwdoU0WYQAeYcQ==", + "version": "1.9.11", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.11.tgz", + "integrity": "sha512-QDhMfbTROOXUhLHMroow8f3EHiCKUOh6UwxMP5S3EuXMnWMNSVIhatGZRwkpg9OUTYdZPsDUVH3cOAkWhGFUJw==", "dependencies": { "@grpc/proto-loader": "^0.7.8", "@types/node": ">=12.12.47" @@ -5531,9 +5530,9 @@ } }, "node_modules/@json2csv/formatters": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@json2csv/formatters/-/formatters-7.0.3.tgz", - "integrity": "sha512-QLTpBNmNxGDAQNALkWwPdnyJ7IdXHQ0Motzog4fZOKK2ozpxckl6vwhWNBxbQs/25Zhp7bLS4J6ILu/hh0en6w==" + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@json2csv/formatters/-/formatters-7.0.4.tgz", + "integrity": "sha512-qdlLx0Pk/+BQnu6zreLgGrdLyUzLNVdsyCUU/+2aduHg4zemVo/e0iWjPk1sy/QZXXh+1RXBe+IiP9eDyj95qg==" }, "node_modules/@json2csv/plainjs": { "version": "7.0.1", @@ -5581,9 +5580,9 @@ } }, "node_modules/@nestjs/apollo": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@nestjs/apollo/-/apollo-12.0.9.tgz", - "integrity": "sha512-aAo+FzmLNQdAZVYkJu4Jnhx4QWp3RalfuFe9vH644ap/ao79FhWR/YKA0N+Zr1RTLKjtl7/PUm4N6z2a8G2LbQ==", + "version": "12.0.11", + "resolved": "https://registry.npmjs.org/@nestjs/apollo/-/apollo-12.0.11.tgz", + "integrity": "sha512-E8kBOyGBZ8Zx4qMLnK3+ECZgmLKqNHyYbtkOi0fXWr8ackosLMkRqGgtDVffXRlVA3eo6G3RgnL0Qyu3VvfD5A==", "dependencies": { "@apollo/server-plugin-landing-page-graphql-playground": "4.0.0", "iterall": "1.3.0", @@ -5798,6 +5797,19 @@ "node": ">=8" } }, + "node_modules/@nestjs/cli/node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/@nestjs/cli/node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -5813,9 +5825,9 @@ } }, "node_modules/@nestjs/common": { - "version": "10.2.8", - "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.2.8.tgz", - "integrity": "sha512-rmpwcdvq2IWMmsUVP8rsdKub6uDWk7dwCYo0aif50JTwcvcxzaP3iKVFKoSgvp0RKYu8h15+/AEOfaInmPpl0Q==", + "version": "10.2.10", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.2.10.tgz", + "integrity": "sha512-fwAk931rjW8CNH2Mgwawq/7HWHH1dxkOLdcgs7U52ddLk8CtHXjejm1cbNahewlSbNhvlOl7y1STLHutE6sUqw==", "dependencies": { "iterare": "1.2.1", "tslib": "2.6.2", @@ -5869,9 +5881,9 @@ } }, "node_modules/@nestjs/core": { - "version": "10.2.8", - "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.2.8.tgz", - "integrity": "sha512-9+MZ2s8ixfY9Bl/M9ofChiyYymcwdK9ZWNH4GDMF7Am7XRAQ1oqde6MYGG05rhQwiVXuTwaYLlXciJKfsrg5qg==", + "version": "10.2.10", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.2.10.tgz", + "integrity": "sha512-+ckOI6BPi2ZMHikT9MCG4ctHDc4OnjhoIytrn7f2AYMMXI4bnutJhqyQKc30VDka5x3Wq6QAD57pgSP7y+JjJg==", "hasInstallScript": true, "dependencies": { "@nuxtjs/opencollective": "0.3.2", @@ -5911,24 +5923,24 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@nestjs/graphql": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@nestjs/graphql/-/graphql-12.0.9.tgz", - "integrity": "sha512-A5oRD5GMwzaNZum06KSxKtqhC7LvS4p7v0hLGzvNWPuLrBjAjAnm/2NV8IV8lYiJXpPHNtSnnekZH9uvy/hZlw==", + "version": "12.0.11", + "resolved": "https://registry.npmjs.org/@nestjs/graphql/-/graphql-12.0.11.tgz", + "integrity": "sha512-iCyVs9+utCQt9ehMhUjQcEdjRN/MrcTBINd7P44O1fzGENuWMbt1Z8RCoZbeGi5iVPBY63HgYik+BnnICqmxZw==", "dependencies": { "@graphql-tools/merge": "9.0.0", "@graphql-tools/schema": "10.0.0", - "@graphql-tools/utils": "10.0.6", + "@graphql-tools/utils": "10.0.8", "@nestjs/mapped-types": "2.0.2", "chokidar": "3.5.3", - "fast-glob": "3.3.1", + "fast-glob": "3.3.2", "graphql-tag": "2.12.6", - "graphql-ws": "5.14.0", + "graphql-ws": "5.14.2", "lodash": "4.17.21", "normalize-path": "3.0.0", "subscriptions-transport-ws": "0.11.0", "tslib": "2.6.2", - "uuid": "9.0.0", - "ws": "8.13.0" + "uuid": "9.0.1", + "ws": "8.14.2" }, "peerDependencies": { "@apollo/subgraph": "^2.0.0", @@ -5938,7 +5950,7 @@ "class-validator": "*", "graphql": "^16.6.0", "reflect-metadata": "^0.1.13", - "ts-morph": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + "ts-morph": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0" }, "peerDependenciesMeta": { "@apollo/subgraph": { @@ -5988,11 +6000,12 @@ } }, "node_modules/@nestjs/graphql/node_modules/@graphql-tools/utils": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.0.6.tgz", - "integrity": "sha512-hZMjl/BbX10iagovakgf3IiqArx8TPsotq5pwBld37uIX1JiZoSbgbCIFol7u55bh32o6cfDEiiJgfAD5fbeyQ==", + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.0.8.tgz", + "integrity": "sha512-yjyA8ycSa1WRlJqyX/aLqXeE5DvF/H02+zXMUFnCzIDrj0UvLMUrxhmVFnMK0Q2n3bh4uuTeY3621m5za9ovXw==", "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", + "cross-inspect": "1.0.0", "dset": "^3.1.2", "tslib": "^2.4.0" }, @@ -6004,9 +6017,9 @@ } }, "node_modules/@nestjs/graphql/node_modules/graphql-ws": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.14.0.tgz", - "integrity": "sha512-itrUTQZP/TgswR4GSSYuwWUzrE/w5GhbwM2GX3ic2U7aw33jgEsayfIlvaj7/GcIvZgNMzsPTrE5hqPuFUiE5g==", + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.14.2.tgz", + "integrity": "sha512-LycmCwhZ+Op2GlHz4BZDsUYHKRiiUz+3r9wbhBATMETNlORQJAaFlAgTFoeRh6xQoQegwYwIylVD1Qns9/DA3w==", "engines": { "node": ">=10" }, @@ -6019,14 +6032,6 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, - "node_modules/@nestjs/graphql/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@nestjs/graphql/node_modules/value-or-promise": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", @@ -6035,61 +6040,18 @@ "node": ">=12" } }, - "node_modules/@nestjs/graphql/node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/@nestjs/jwt": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-10.1.1.tgz", - "integrity": "sha512-sISYylg8y1Mb7saxPx5Zh11i7v9JOh70CEC/rN6g43MrbFlJ57c1eYFrffxip1YAx3DmV4K67yXob3syKZMOew==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-10.2.0.tgz", + "integrity": "sha512-x8cG90SURkEiLOehNaN2aRlotxT0KZESUliOPKKnjWiyJOcWurkF3w345WOX0P4MgFzUjGoZ1Sy0aZnxeihT0g==", "dependencies": { - "@types/jsonwebtoken": "9.0.2", - "jsonwebtoken": "9.0.0" + "@types/jsonwebtoken": "9.0.5", + "jsonwebtoken": "9.0.2" }, "peerDependencies": { "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0" } }, - "node_modules/@nestjs/jwt/node_modules/@types/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@nestjs/jwt/node_modules/jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", - "dependencies": { - "jws": "^3.2.2", - "lodash": "^4.17.21", - "ms": "^2.1.1", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, "node_modules/@nestjs/mapped-types": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.0.2.tgz", @@ -6119,9 +6081,9 @@ } }, "node_modules/@nestjs/platform-express": { - "version": "10.2.8", - "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.2.8.tgz", - "integrity": "sha512-WoSSVtwIRc5AdGMHWVzWZK4JZLT0f4o2xW8P9gQvcX+omL8W1kXCfY8GQYXNBG84XmBNYH8r0FtC8oMe/lH5NQ==", + "version": "10.2.10", + "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.2.10.tgz", + "integrity": "sha512-U4KDgtMjH8TqEvt0RzC/POP8ABvL9bYoCScvlGtFSKgVGaMLBKkZ4+jHtbQx6qItYSlBBRUuz/dveMZCObfrkQ==", "dependencies": { "body-parser": "1.20.2", "cors": "2.8.5", @@ -6194,9 +6156,9 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@nestjs/platform-socket.io": { - "version": "10.2.8", - "resolved": "https://registry.npmjs.org/@nestjs/platform-socket.io/-/platform-socket.io-10.2.8.tgz", - "integrity": "sha512-P/Olw9alAaKD7Q1vS/ol7K81x1l7Bmi+AXthBNUPGMmG/W8kxO1krerW4rEhtF3BKJ0qJIa5bhDlb80p4lZcNA==", + "version": "10.2.10", + "resolved": "https://registry.npmjs.org/@nestjs/platform-socket.io/-/platform-socket.io-10.2.10.tgz", + "integrity": "sha512-JBuemeIBp2mpp+z7D12oa22k83TnDTxyQDMKZpO/B2/QnBVR+2C4EZ07/XOct14LQXO6vIjmT0iYYCZbNvczjw==", "dependencies": { "socket.io": "4.7.2", "tslib": "2.6.2" @@ -6260,9 +6222,9 @@ } }, "node_modules/@nestjs/websockets": { - "version": "10.2.8", - "resolved": "https://registry.npmjs.org/@nestjs/websockets/-/websockets-10.2.8.tgz", - "integrity": "sha512-oZN1VJFApN7d2eftr65a36QrV0IJNGba4znqyjFnyGvtDWTDcQwzDcnEfvJBTTYhOSBNS7KDfVhne0ythkl6tg==", + "version": "10.2.10", + "resolved": "https://registry.npmjs.org/@nestjs/websockets/-/websockets-10.2.10.tgz", + "integrity": "sha512-L1AkxwLUj/ntk26jO1SXYl3GRElQE6Fikzfy/3MPFURk0GDs7tHUzLcb8BC8q8u5ZpUjBAC2wFVQzrY5R0MHNw==", "dependencies": { "iterare": "1.2.1", "object-hash": "3.0.0", @@ -6287,14 +6249,14 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/@next/env": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.1.tgz", - "integrity": "sha512-Ms8ZswqY65/YfcjrlcIwMPD7Rg/dVjdLapMcSHG26W6O67EJDF435ShW4H4LXi1xKO1oRc97tLXUpx8jpLe86A==" + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.3.tgz", + "integrity": "sha512-7xRqh9nMvP5xrW4/+L0jgRRX+HoNRGnfJpD+5Wq6/13j3dsdzxO3BCXn7D3hMqsDb+vjZnJq+vI7+EtgrYZTeA==" }, "node_modules/@next/eslint-plugin-next": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.1.tgz", - "integrity": "sha512-bLjJMwXdzvhnQOnxvHoTTUh/+PYk6FF/DCgHi4BXwXCINer+o1ZYfL9aVeezj/oI7wqGJOqwGIXrlBvPbAId3w==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.3.tgz", + "integrity": "sha512-j4K0n+DcmQYCVnSAM+UByTVfIHnYQy2ODozfQP+4RdwtRDfobrIvKq1K4Exb2koJ79HSSa7s6B2SA8T/1YR3RA==", "dev": true, "dependencies": { "glob": "7.1.7" @@ -6333,9 +6295,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.1.tgz", - "integrity": "sha512-JyxnGCS4qT67hdOKQ0CkgFTp+PXub5W1wsGvIq98TNbF3YEIN7iDekYhYsZzc8Ov0pWEsghQt+tANdidITCLaw==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.3.tgz", + "integrity": "sha512-64JbSvi3nbbcEtyitNn2LEDS/hcleAFpHdykpcnrstITFlzFgB/bW0ER5/SJJwUPj+ZPY+z3e+1jAfcczRLVGw==", "cpu": [ "arm64" ], @@ -6348,9 +6310,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.1.tgz", - "integrity": "sha512-625Z7bb5AyIzswF9hvfZWa+HTwFZw+Jn3lOBNZB87lUS0iuCYDHqk3ujuHCkiyPtSC0xFBtYDLcrZ11mF/ap3w==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.3.tgz", + "integrity": "sha512-RkTf+KbAD0SgYdVn1XzqE/+sIxYGB7NLMZRn9I4Z24afrhUpVJx6L8hsRnIwxz3ERE2NFURNliPjJ2QNfnWicQ==", "cpu": [ "x64" ], @@ -6363,9 +6325,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.1.tgz", - "integrity": "sha512-iVpn3KG3DprFXzVHM09kvb//4CNNXBQ9NB/pTm8LO+vnnnaObnzFdS5KM+w1okwa32xH0g8EvZIhoB3fI3mS1g==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.3.tgz", + "integrity": "sha512-3tBWGgz7M9RKLO6sPWC6c4pAw4geujSwQ7q7Si4d6bo0l6cLs4tmO+lnSwFp1Tm3lxwfMk0SgkJT7EdwYSJvcg==", "cpu": [ "arm64" ], @@ -6378,9 +6340,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.1.tgz", - "integrity": "sha512-mVsGyMxTLWZXyD5sen6kGOTYVOO67lZjLApIj/JsTEEohDDt1im2nkspzfV5MvhfS7diDw6Rp/xvAQaWZTv1Ww==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.3.tgz", + "integrity": "sha512-v0v8Kb8j8T23jvVUWZeA2D8+izWspeyeDGNaT2/mTHWp7+37fiNfL8bmBWiOmeumXkacM/AB0XOUQvEbncSnHA==", "cpu": [ "arm64" ], @@ -6393,9 +6355,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.1.tgz", - "integrity": "sha512-wMqf90uDWN001NqCM/auRl3+qVVeKfjJdT9XW+RMIOf+rhUzadmYJu++tp2y+hUbb6GTRhT+VjQzcgg/QTD9NQ==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.3.tgz", + "integrity": "sha512-VM1aE1tJKLBwMGtyBR21yy+STfl0MapMQnNrXkxeyLs0GFv/kZqXS5Jw/TQ3TSUnbv0QPDf/X8sDXuMtSgG6eg==", "cpu": [ "x64" ], @@ -6408,9 +6370,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.1.tgz", - "integrity": "sha512-ol1X1e24w4j4QwdeNjfX0f+Nza25n+ymY0T2frTyalVczUmzkVD7QGgPTZMHfR1aLrO69hBs0G3QBYaj22J5GQ==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.3.tgz", + "integrity": "sha512-64EnmKy18MYFL5CzLaSuUn561hbO1Gk16jM/KHznYP3iCIfF9e3yULtHaMy0D8zbHfxset9LTOv6cuYKJgcOxg==", "cpu": [ "x64" ], @@ -6423,9 +6385,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.1.tgz", - "integrity": "sha512-WEmTEeWs6yRUEnUlahTgvZteh5RJc4sEjCQIodJlZZ5/VJwVP8p2L7l6VhzQhT4h7KvLx/Ed4UViBdne6zpIsw==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.3.tgz", + "integrity": "sha512-WRDp8QrmsL1bbGtsh5GqQ/KWulmrnMBgbnb+59qNTW1kVi1nG/2ndZLkcbs2GX7NpFLlToLRMWSQXmPzQm4tog==", "cpu": [ "arm64" ], @@ -6438,9 +6400,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.1.tgz", - "integrity": "sha512-oFpHphN4ygAgZUKjzga7SoH2VGbEJXZa/KL8bHCAwCjDWle6R1SpiGOdUdA8EJ9YsG1TYWpzY6FTbUA+iAJeww==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.3.tgz", + "integrity": "sha512-EKffQeqCrj+t6qFFhIFTRoqb2QwX1mU7iTOvMyLbYw3QtqTw9sMwjykyiMlZlrfm2a4fA84+/aeW+PMg1MjuTg==", "cpu": [ "ia32" ], @@ -6453,9 +6415,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.1.tgz", - "integrity": "sha512-FFp3nOJ/5qSpeWT0BZQ+YE1pSMk4IMpkME/1DwKBwhg4mJLB9L+6EXuJi4JEwaJdl5iN+UUlmUD3IsR1kx5fAg==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.3.tgz", + "integrity": "sha512-ERhKPSJ1vQrPiwrs15Pjz/rvDHZmkmvbf/BjPN/UCOI++ODftT0GtasDPi0j+y6PPJi5HsXw+dpRaXUaw4vjuQ==", "cpu": [ "x64" ], @@ -6921,15 +6883,15 @@ } }, "node_modules/@types/bcryptjs": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-2.4.5.tgz", - "integrity": "sha512-tOF6TivOIvq+TWQm78335CMdyVJhpBG3NUdWQDAp95ax4E2rSKbws/ELHLk5EBoucwx/tHt3/hhLOHwWJgVrSw==", + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-2.4.6.tgz", + "integrity": "sha512-9xlo6R2qDs5uixm0bcIqCeMCE6HiQsIyel9KQySStiyqNl2tnj2mP3DX1Nf56MD6KMenNNlBBsy3LJ7gUEQPXQ==", "dev": true }, "node_modules/@types/big.js": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@types/big.js/-/big.js-6.2.1.tgz", - "integrity": "sha512-dKzZVT10m3ELZgYIShPJ+3Os/E1s3aDQS+wr1ne7VCLU/8hc/R+z/+gkm9WabxSkV9E8wJhTl5wC+0fD9nitsw==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/@types/big.js/-/big.js-6.2.2.tgz", + "integrity": "sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==", "dev": true }, "node_modules/@types/body-parser": { @@ -6955,9 +6917,9 @@ } }, "node_modules/@types/cookie": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.3.tgz", - "integrity": "sha512-SLg07AS9z1Ab2LU+QxzU8RCmzsja80ywjf/t5oqw+4NSH20gIGlhLOrBDm1L3PBWzPa4+wkgFQVZAjE6Ioj2ug==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", "dev": true }, "node_modules/@types/cookiejar": { @@ -6982,21 +6944,21 @@ } }, "node_modules/@types/crypto-js": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.1.3.tgz", - "integrity": "sha512-YP1sYYayLe7Eg5oXyLLvOLfxBfZ5Fgpz6sVWkpB18wDMywCLPWmqzRz+9gyuOoLF0fzDTTFwlyNbx7koONUwqA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.1.tgz", + "integrity": "sha512-FSPGd9+OcSok3RsM0UZ/9fcvMOXJ1ENE/ZbLfOPlBWj7BgXtEAM8VYfTtT760GiLbQIMoVozwVuisjvsVwqYWw==", "dev": true }, "node_modules/@types/d3-array": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.0.tgz", - "integrity": "sha512-tjU8juPSfhMnu6mJZPOCVVGba4rZoE0tjHDPb81PYwA8CzbaFscGjgkUM7juUJu6iWA1cCVWNEVwxZ5HN9Jj8Q==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", "dev": true }, "node_modules/@types/d3-time-format": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.2.tgz", - "integrity": "sha512-wr08C1Gh77qaN8JIkrn5Rz/bdt5M9bdEqFmEOcYhUSq2t2sHvLTBfb4XAtGB3D4hm0ubj50NXWWXoXyp5tPXDg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", + "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==", "dev": true }, "node_modules/@types/eslint": { @@ -7026,9 +6988,9 @@ "dev": true }, "node_modules/@types/express": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.20.tgz", - "integrity": "sha512-rOaqlkgEvOW495xErXMsmyX3WKBInbhG5eqojXYi3cGUaLoRDlXa5d52fkfWZT963AZ3v2eZ4MbKE6WpDAGVsw==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -7101,9 +7063,9 @@ } }, "node_modules/@types/jest": { - "version": "29.5.7", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.7.tgz", - "integrity": "sha512-HLyetab6KVPSiF+7pFcUyMeLsx25LDNDemw9mGsJBkai/oouwrjTycocSDYopMEwFhN2Y4s9oPyOCZNofgSt2g==", + "version": "29.5.10", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.10.tgz", + "integrity": "sha512-tE4yxKEphEyxj9s4inideLHktW/x6DwesIwWZ9NN1FKf9zbJYsnhBoA9vrHA/IuIOKwPa5PcFBNV4lpMIOEzyQ==", "dev": true, "dependencies": { "expect": "^29.0.0", @@ -7111,15 +7073,15 @@ } }, "node_modules/@types/js-cookie": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.5.tgz", - "integrity": "sha512-dtLshqoiGRDHbHueIT9sjkd2F4tW1qPSX2xKAQK8p1e6pM+Z913GM1shv7dOqqasEMYbC5zEaClJomQe8OtQLA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.6.tgz", + "integrity": "sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==", "dev": true }, "node_modules/@types/js-yaml": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.8.tgz", - "integrity": "sha512-m6jnPk1VhlYRiLFm3f8X9Uep761f+CK8mHyS65LutH2OhmBF0BeMEjHgg05usH8PLZMWWc/BUR9RPmkvpWnyRA==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", "dev": true }, "node_modules/@types/json-schema": { @@ -7141,18 +7103,17 @@ "dev": true }, "node_modules/@types/jsonwebtoken": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.4.tgz", - "integrity": "sha512-8UYapdmR0QlxgvJmyE8lP7guxD0UGVMfknsdtCFZh4ovShdBl3iOI4zdvqBHrB/IS+xUj3PSx73Qkey1fhWz+g==", - "dev": true, + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.5.tgz", + "integrity": "sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/lodash": { - "version": "4.14.200", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.200.tgz", - "integrity": "sha512-YI/M/4HRImtNf3pJgbF+W6FrXovqj+T+/HpENLTooK9PnkacBsDpeP3IpHab40CClUfhNmdM2WTNP2sa2dni5Q==", + "version": "4.14.202", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", + "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==", "dev": true }, "node_modules/@types/long": { @@ -7177,9 +7138,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.8.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz", - "integrity": "sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==", + "version": "20.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.1.tgz", + "integrity": "sha512-T2qwhjWwGH81vUEx4EXmBKsTJRXFXNZTL4v0gi01+zyBmCwzE6TyHszqX01m+QHTEq+EZNo13NeJIdEqf+Myrg==", "dependencies": { "undici-types": "~5.26.4" } @@ -7215,9 +7176,9 @@ "dev": true }, "node_modules/@types/numeral": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/numeral/-/numeral-2.0.4.tgz", - "integrity": "sha512-lIsqeNjP4xtPplUyVrfYR08aZtkdMQyyet+8zd9xD8HVgNGcLdKhtb6A1qDQ15n+AgAMZQwimlaaNOktLQpb2A==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/numeral/-/numeral-2.0.5.tgz", + "integrity": "sha512-kH8I7OSSwQu9DS9JYdFWbuvhVzvFRoCPCkGxNwoGgaPeDfEPJlcxNvEOypZhQ3XXHsGbfIuYcxcJxKUfJHnRfw==", "dev": true }, "node_modules/@types/parse-json": { @@ -7231,9 +7192,9 @@ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/qrcode.react": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/qrcode.react/-/qrcode.react-1.0.4.tgz", - "integrity": "sha512-O35T9AJk0wg7ffkgpSQ4Zr7I7eEfEsTCD5u7V2dsvYnZLfUpQz2rLg5ZG2FM/zLmOF4sEE0FY6mxT9WleUDb3Q==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/qrcode.react/-/qrcode.react-1.0.5.tgz", + "integrity": "sha512-BghPtnlwvrvq8QkGa1H25YnN+5OIgCKFuQruncGWLGJYOzeSKiix/4+B9BtfKF2wf5ja8yfyWYA3OXju995G8w==", "dev": true, "dependencies": { "@types/react": "*" @@ -7259,9 +7220,9 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "node_modules/@types/react": { - "version": "18.2.35", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.35.tgz", - "integrity": "sha512-LG3xpFZ++rTndV+/XFyX5vUP7NI9yxyk+MQvBDq+CVs8I9DLSc3Ymwb1Vmw5YDoeNeHN4PDZa3HylMKJYT9PNQ==", + "version": "18.2.39", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.39.tgz", + "integrity": "sha512-Oiw+ppED6IremMInLV4HXGbfbG6GyziY3kqAwJYOR0PNbkYDmLWQA3a95EhdSmamsvbkJN96ZNN+YD+fGjzSBA==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -7269,36 +7230,36 @@ } }, "node_modules/@types/react-copy-to-clipboard": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.6.tgz", - "integrity": "sha512-x347Gy+ZG2dCMiWEHRwiIJ4uMlTmxW7yheRMSQbNf0mFkmXhnYE5nvRdt6SbnT6Z2dp7KPIr3CSvBgSiTIr9zw==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@types/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.7.tgz", + "integrity": "sha512-Gft19D+as4M+9Whq1oglhmK49vqPhcLzk8WfvfLvaYMIPYanyfLy0+CwFucMJfdKoSFyySPmkkWn8/E6voQXjQ==", "dev": true, "dependencies": { "@types/react": "*" } }, "node_modules/@types/react-grid-layout": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@types/react-grid-layout/-/react-grid-layout-1.3.4.tgz", - "integrity": "sha512-ZQqOhkizXv8t8AWyH2OcdWxeDr08gJPp/hg4mLCOz1xz6McqQc6HLBEXDIc/r0YsMeIWKOD31Br8i4DA/gilbQ==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/react-grid-layout/-/react-grid-layout-1.3.5.tgz", + "integrity": "sha512-WH/po1gcEcoR6y857yAnPGug+ZhkF4PaTUxgAbwfeSH/QOgVSakKHBXoPGad/sEznmkiaK3pqHk+etdWisoeBQ==", "dev": true, "dependencies": { "@types/react": "*" } }, "node_modules/@types/react-qr-reader": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@types/react-qr-reader/-/react-qr-reader-2.1.6.tgz", - "integrity": "sha512-KF3WXsCUczlVasxLTiXNy0bO3043g/qWyYdklFK2xyZuqVyQZyzAY5Cg0+55DZ1WFmyQoL5eIqWndnlMk6RyWg==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/react-qr-reader/-/react-qr-reader-2.1.7.tgz", + "integrity": "sha512-6K6DQeqP7c2oohcfvBpExlOawVsB2/C+7ZZL/fkCkNzYYAKDJnNHnuP3F5ChMl0mpoYEdqkqkllxqfM0VslEiw==", "dev": true, "dependencies": { "@types/react": "*" } }, "node_modules/@types/react-slider": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/react-slider/-/react-slider-1.3.3.tgz", - "integrity": "sha512-UMzMsqZh3wzHM4h/3yy3xQKTa3DfjF+S4WLuryDCmOcufgX2m+bNjSQV/xWsKAMfV5DXucQBsFlIu9dcvS+e1A==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/react-slider/-/react-slider-1.3.5.tgz", + "integrity": "sha512-Hhp+YTvc1bALrow07DkpahC4KqlCwKem2/5MsP6AXoPBHBzfRB6OIv+Kr4DFqeP1onmUfdrN04DbyI9/QU6X1A==", "dev": true, "dependencies": { "@types/react": "*" @@ -7329,18 +7290,18 @@ "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, "node_modules/@types/secp256k1": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.5.tgz", - "integrity": "sha512-aIonTBMErtE3T9MxDvTZRzcrT/mCqpEZBw3CCY/i+oG9n57N/+7obBkhFgavUAIrX21bU0LHg1XRgtaLdelBhA==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", + "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==", + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", "dev": true }, "node_modules/@types/send": { @@ -7368,9 +7329,9 @@ "dev": true }, "node_modules/@types/styled-components": { - "version": "5.1.29", - "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.29.tgz", - "integrity": "sha512-5h/ah9PAblggQ6Laa4peplT4iY5ddA8qM1LMD4HzwToUWs3hftfy0fayeRgbtH1JZUdw5CCaowmz7Lnb8SjIxQ==", + "version": "5.1.32", + "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.32.tgz", + "integrity": "sha512-DqVpl8R0vbhVSop4120UHtGrFmHuPeoDwF4hDT0kPJTY8ty0SI38RV3VhCMsWigMUXG+kCXu7vMRqMFNy6eQgA==", "dev": true, "dependencies": { "@types/hoist-non-react-statics": "*", @@ -7379,9 +7340,9 @@ } }, "node_modules/@types/styled-react-modal": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/styled-react-modal/-/styled-react-modal-1.2.4.tgz", - "integrity": "sha512-wDuLJybrrkdN6JvJAc+wuCfi8hi5Fx4dOFO4I/Edc+joEakY4uwIVWmT7Ax4s5pWICFzAOHbN8pEsBSxSoO06A==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/styled-react-modal/-/styled-react-modal-1.2.5.tgz", + "integrity": "sha512-Uzrn62S7FP7gkOF4HlYUT3RXJpOcSUnZQRMw9RQUyd5qoVGdBj81UMqZrI1q3x1fhV7J7XQY2jQaVS1Mp2VzIA==", "dev": true, "dependencies": { "@types/react": "*", @@ -7389,9 +7350,9 @@ } }, "node_modules/@types/styled-theming": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/@types/styled-theming/-/styled-theming-2.2.7.tgz", - "integrity": "sha512-l7v5L5NtuI0fvWsnFO2v+D/BNs8JuooSWHBcPQf3S9kXK6j29pwpQTdeSBA8tIZOIJ0sGogFQNvLXSuayhl1Iw==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@types/styled-theming/-/styled-theming-2.2.8.tgz", + "integrity": "sha512-7X+Av6dDGR24WlEiTchEJ4wqnhT5LG+W/k1S/CkXWcewgwKsLW/uhU5RoNYpdnhWzB2WlV/qoOnQdVVi6NEd/w==", "dev": true, "dependencies": { "@types/styled-components": "*", @@ -7409,9 +7370,9 @@ } }, "node_modules/@types/supertest": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.15.tgz", - "integrity": "sha512-jUCZZ/TMcpGzoSaed9Gjr8HCf3HehExdibyw3OHHEL1als1KmyzcOZZH4MjbObI8TkWsEr7bc7gsW0WTDni+qQ==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.16.tgz", + "integrity": "sha512-6c2ogktZ06tr2ENoZivgm7YnprnhYE4ZoXGMY+oA7IuAf17M8FWvujXZGmxLv8y0PTyts4x5A+erSwVUFA8XSg==", "dev": true, "dependencies": { "@types/superagent": "*" @@ -7423,15 +7384,15 @@ "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==" }, "node_modules/@types/uuid": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.6.tgz", - "integrity": "sha512-BT2Krtx4xaO6iwzwMFUYvWBWkV2pr37zD68Vmp1CDV196MzczBRxuEpD6Pr395HAgebC/co7hOphs53r8V7jew==", + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.7.tgz", + "integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==", "dev": true }, "node_modules/@types/ws": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.8.tgz", - "integrity": "sha512-flUksGIQCnJd6sZ1l5dqCEG/ksaoAg/eUwiLAGTJQcfgvZJKF++Ta4bJA6A5aPSJmsr+xlseHn4KLgVlNnvPTg==", + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.9.tgz", + "integrity": "sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg==", "dependencies": { "@types/node": "*" } @@ -7452,16 +7413,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.9.1.tgz", - "integrity": "sha512-w0tiiRc9I4S5XSXXrMHOWgHgxbrBn1Ro+PmiYhSg2ZVdxrAJtQgzU5o2m1BfP6UOn7Vxcc6152vFjQfmZR4xEg==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.13.1.tgz", + "integrity": "sha512-5bQDGkXaxD46bPvQt08BUz9YSaO4S0fB1LB5JHQuXTfkGPI3+UUeS387C/e9jRie5GqT8u5kFTrMvAjtX4O5kA==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.9.1", - "@typescript-eslint/type-utils": "6.9.1", - "@typescript-eslint/utils": "6.9.1", - "@typescript-eslint/visitor-keys": "6.9.1", + "@typescript-eslint/scope-manager": "6.13.1", + "@typescript-eslint/type-utils": "6.13.1", + "@typescript-eslint/utils": "6.13.1", + "@typescript-eslint/visitor-keys": "6.13.1", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -7487,15 +7448,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.9.1.tgz", - "integrity": "sha512-C7AK2wn43GSaCUZ9do6Ksgi2g3mwFkMO3Cis96kzmgudoVaKyt62yNzJOktP0HDLb/iO2O0n2lBOzJgr6Q/cyg==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.13.1.tgz", + "integrity": "sha512-fs2XOhWCzRhqMmQf0eicLa/CWSaYss2feXsy7xBD/pLyWke/jCIVc2s1ikEAtSW7ina1HNhv7kONoEfVNEcdDQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.9.1", - "@typescript-eslint/types": "6.9.1", - "@typescript-eslint/typescript-estree": "6.9.1", - "@typescript-eslint/visitor-keys": "6.9.1", + "@typescript-eslint/scope-manager": "6.13.1", + "@typescript-eslint/types": "6.13.1", + "@typescript-eslint/typescript-estree": "6.13.1", + "@typescript-eslint/visitor-keys": "6.13.1", "debug": "^4.3.4" }, "engines": { @@ -7515,13 +7476,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.9.1.tgz", - "integrity": "sha512-38IxvKB6NAne3g/+MyXMs2Cda/Sz+CEpmm+KLGEM8hx/CvnSRuw51i8ukfwB/B/sESdeTGet1NH1Wj7I0YXswg==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.13.1.tgz", + "integrity": "sha512-BW0kJ7ceiKi56GbT2KKzZzN+nDxzQK2DS6x0PiSMPjciPgd/JRQGMibyaN2cPt2cAvuoH0oNvn2fwonHI+4QUQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.9.1", - "@typescript-eslint/visitor-keys": "6.9.1" + "@typescript-eslint/types": "6.13.1", + "@typescript-eslint/visitor-keys": "6.13.1" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -7532,13 +7493,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.9.1.tgz", - "integrity": "sha512-eh2oHaUKCK58qIeYp19F5V5TbpM52680sB4zNSz29VBQPTWIlE/hCj5P5B1AChxECe/fmZlspAWFuRniep1Skg==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.13.1.tgz", + "integrity": "sha512-A2qPlgpxx2v//3meMqQyB1qqTg1h1dJvzca7TugM3Yc2USDY+fsRBiojAEo92HO7f5hW5mjAUF6qobOPzlBCBQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.9.1", - "@typescript-eslint/utils": "6.9.1", + "@typescript-eslint/typescript-estree": "6.13.1", + "@typescript-eslint/utils": "6.13.1", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -7559,9 +7520,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.9.1.tgz", - "integrity": "sha512-BUGslGOb14zUHOUmDB2FfT6SI1CcZEJYfF3qFwBeUrU6srJfzANonwRYHDpLBuzbq3HaoF2XL2hcr01c8f8OaQ==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.13.1.tgz", + "integrity": "sha512-gjeEskSmiEKKFIbnhDXUyiqVma1gRCQNbVZ1C8q7Zjcxh3WZMbzWVfGE9rHfWd1msQtPS0BVD9Jz9jded44eKg==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -7572,13 +7533,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.1.tgz", - "integrity": "sha512-U+mUylTHfcqeO7mLWVQ5W/tMLXqVpRv61wm9ZtfE5egz7gtnmqVIw9ryh0mgIlkKk9rZLY3UHygsBSdB9/ftyw==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.13.1.tgz", + "integrity": "sha512-sBLQsvOC0Q7LGcUHO5qpG1HxRgePbT6wwqOiGLpR8uOJvPJbfs0mW3jPA3ujsDvfiVwVlWUDESNXv44KtINkUQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.9.1", - "@typescript-eslint/visitor-keys": "6.9.1", + "@typescript-eslint/types": "6.13.1", + "@typescript-eslint/visitor-keys": "6.13.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -7599,17 +7560,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.9.1.tgz", - "integrity": "sha512-L1T0A5nFdQrMVunpZgzqPL6y2wVreSyHhKGZryS6jrEN7bD9NplVAyMryUhXsQ4TWLnZmxc2ekar/lSGIlprCA==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.13.1.tgz", + "integrity": "sha512-ouPn/zVoan92JgAegesTXDB/oUp6BP1v8WpfYcqh649ejNc9Qv+B4FF2Ff626kO1xg0wWwwG48lAJ4JuesgdOw==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.9.1", - "@typescript-eslint/types": "6.9.1", - "@typescript-eslint/typescript-estree": "6.9.1", + "@typescript-eslint/scope-manager": "6.13.1", + "@typescript-eslint/types": "6.13.1", + "@typescript-eslint/typescript-estree": "6.13.1", "semver": "^7.5.4" }, "engines": { @@ -7624,12 +7585,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.1.tgz", - "integrity": "sha512-MUaPUe/QRLEffARsmNfmpghuQkW436DvESW+h+M52w0coICHRfD6Np9/K6PdACwnrq1HmuLl+cSPZaJmeVPkSw==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.13.1.tgz", + "integrity": "sha512-NDhQUy2tg6XGNBGDRm1XybOHSia8mcXmlbKWoQP+nm1BIIMxa55shyJfZkHpEBN62KNPLrocSM2PdPcaLgDKMQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.9.1", + "@typescript-eslint/types": "6.13.1", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -7843,10 +7804,21 @@ "tslib": "^2.3.1" } }, + "node_modules/@wry/caches": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@wry/caches/-/caches-1.0.1.tgz", + "integrity": "sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@wry/context": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.7.3.tgz", - "integrity": "sha512-Nl8WTesHp89RF803Se9X3IiHjdmLBrIvPMaJkl+rKVJAYyPsz1TEUbu89943HpvujtSJgDUx9W4vZw3K1Mr3sA==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.7.4.tgz", + "integrity": "sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -7866,9 +7838,9 @@ } }, "node_modules/@wry/trie": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.4.3.tgz", - "integrity": "sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.5.0.tgz", + "integrity": "sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA==", "dependencies": { "tslib": "^2.3.0" }, @@ -8137,15 +8109,14 @@ } }, "node_modules/apollo-server": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-3.12.1.tgz", - "integrity": "sha512-wgxx+J8KPTkhepi4qI9qY1xNoYzJfmvRKVUdFmFCZ3lyPO2j/+oOnAnyEVruAIQU5gquK10B0jdwVyvese9J/g==", - "deprecated": "The `apollo-server` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-3.13.0.tgz", + "integrity": "sha512-hgT/MswNB5G1r+oBhggVX4Fjw53CFLqG15yB5sN+OrYkCVWF5YwPbJWHfSWa7699JMEXJGaoVfFzcvLZK0UlDg==", "dev": true, "dependencies": { "@types/express": "4.17.14", - "apollo-server-core": "^3.12.1", - "apollo-server-express": "^3.12.1", + "apollo-server-core": "^3.13.0", + "apollo-server-express": "^3.13.0", "express": "^4.17.1" }, "peerDependencies": { @@ -8153,10 +8124,9 @@ } }, "node_modules/apollo-server-core": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.12.1.tgz", - "integrity": "sha512-9SF5WAkkV0FZQ2HVUWI9Jada1U0jg7e8NCN9EklbtvaCeUlOLyXyM+KCWuZ7+dqHxjshbtcwylPHutt3uzoNkw==", - "deprecated": "The `apollo-server-core` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.13.0.tgz", + "integrity": "sha512-v/g6DR6KuHn9DYSdtQijz8dLOkP78I5JSVJzPkARhDbhpH74QNwrQ2PP2URAPPEDJ2EeZNQDX8PvbYkAKqg+kg==", "dependencies": { "@apollo/utils.keyvaluecache": "^1.0.1", "@apollo/utils.logger": "^1.0.0", @@ -8231,10 +8201,9 @@ } }, "node_modules/apollo-server-express": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.12.1.tgz", - "integrity": "sha512-5A9efrhEXqDx08BnORWf0zPYCABENqur47VZZW8osQpSSnMINqzJiV5RMrzz8wIznecRRhEcz+BqLdiexqZdgg==", - "deprecated": "The `apollo-server-express` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.13.0.tgz", + "integrity": "sha512-iSxICNbDUyebOuM8EKb3xOrpIwOQgKxGbR2diSr4HP3IW8T3njKFOoMce50vr+moOCe1ev8BnLcw9SNbuUtf7g==", "dependencies": { "@types/accepts": "^1.3.5", "@types/body-parser": "1.19.2", @@ -8242,7 +8211,7 @@ "@types/express": "4.17.14", "@types/express-serve-static-core": "4.17.31", "accepts": "^1.3.5", - "apollo-server-core": "^3.12.1", + "apollo-server-core": "^3.13.0", "apollo-server-types": "^3.8.0", "body-parser": "^1.19.0", "cors": "^2.8.5", @@ -8840,9 +8809,9 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/balanceofsatoshis": { - "version": "17.3.0", - "resolved": "https://registry.npmjs.org/balanceofsatoshis/-/balanceofsatoshis-17.3.0.tgz", - "integrity": "sha512-QwZIsPr1P0uqpLCo9B4JPXAF7EsTrhKrlArQ4S/Xkwy5DF3lihdEj9a7Q5EdNUBeIcBeYpD0QX+YwXETFa/yXg==", + "version": "17.5.2", + "resolved": "https://registry.npmjs.org/balanceofsatoshis/-/balanceofsatoshis-17.5.2.tgz", + "integrity": "sha512-qE6RJW8/UwSg0gh/7lWO8bpgD60rgvZZP/kv7imh1qlIUXSj5z1ndrKTwLqbqfWZGrDawgupIajk0P+OR5azUQ==", "dependencies": { "@alexbosworth/blockchain": "1.7.0", "@alexbosworth/caporal": "1.4.4", @@ -8869,11 +8838,11 @@ "hot-formula-parser": "4.0.0", "import-lazy": "4.0.0", "ini": "4.1.1", - "inquirer": "9.2.11", + "inquirer": "9.2.12", "ln-accounting": "7.0.2", - "ln-service": "57.1.0", + "ln-service": "57.1.2", "ln-sync": "6.0.0", - "ln-telegram": "6.0.0", + "ln-telegram": "6.1.1", "moment": "2.29.4", "paid-services": "5.0.5", "probing": "4.0.0", @@ -9172,11 +9141,11 @@ } }, "node_modules/balanceofsatoshis/node_modules/inquirer": { - "version": "9.2.11", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.11.tgz", - "integrity": "sha512-B2LafrnnhbRzCWfAdOXisUzL89Kg8cVJlYmhqoi3flSiV/TveO+nsXwgKr9h9PIo+J1hz7nBSk6gegRIMBBf7g==", + "version": "9.2.12", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.12.tgz", + "integrity": "sha512-mg3Fh9g2zfuVWJn6lhST0O7x4n03k7G8Tx5nvikJkbq8/CK47WDVm+UznF0G6s5Zi0KcyUisr6DU8T67N5U+1Q==", "dependencies": { - "@ljharb/through": "^2.3.9", + "@ljharb/through": "^2.3.11", "ansi-escapes": "^4.3.2", "chalk": "^5.3.0", "cli-cursor": "^3.1.0", @@ -10883,9 +10852,9 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "engines": { "node": ">= 0.6" } @@ -11062,7 +11031,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/cross-inspect/-/cross-inspect-1.0.0.tgz", "integrity": "sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ==", - "dev": true, "dependencies": { "tslib": "^2.4.0" }, @@ -11984,15 +11952,15 @@ } }, "node_modules/eslint": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz", - "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz", + "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.3", - "@eslint/js": "8.53.0", + "@eslint/js": "8.54.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -12039,12 +12007,12 @@ } }, "node_modules/eslint-config-next": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.0.1.tgz", - "integrity": "sha512-QfIFK2WD39H4WOespjgf6PLv9Bpsd7KGGelCtmq4l67nGvnlsGpuvj0hIT+aIy6p5gKH+lAChYILsyDlxP52yg==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.0.3.tgz", + "integrity": "sha512-IKPhpLdpSUyKofmsXUfrvBC49JMUTdeaD8ZIH4v9Vk0sC1X6URTuTJCLtA0Vwuj7V/CQh0oISuSTvNn5//Buew==", "dev": true, "dependencies": { - "@next/eslint-plugin-next": "14.0.1", + "@next/eslint-plugin-next": "14.0.3", "@rushstack/eslint-patch": "^1.3.3", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", "eslint-import-resolver-node": "^0.3.6", @@ -12819,6 +12787,14 @@ "node": ">= 0.10.0" } }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -12890,9 +12866,9 @@ "integrity": "sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg==" }, "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -13760,9 +13736,9 @@ } }, "node_modules/goldengate/node_modules/@types/express-serve-static-core": { - "version": "4.17.39", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz", - "integrity": "sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ==", + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -16377,16 +16353,16 @@ } }, "node_modules/lightning": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/lightning/-/lightning-10.1.1.tgz", - "integrity": "sha512-1dNs3Kecpdld5JbHbJ7lyRtvVxndraqHOeN2I2ACXAY0lD2gjBZRMyCSZI+50OK09V1BRcn6iZYVH/Ej8Qg7gw==", + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/lightning/-/lightning-10.1.3.tgz", + "integrity": "sha512-Vuo30bZeW4rtvnG52kkIP8u+cAWkrLT6KIejPUvhbiYCAamKCfGC+vhQ8euaI8z8BynXToJCIlbRk6/YDHLCZw==", "dependencies": { - "@grpc/grpc-js": "1.9.9", + "@grpc/grpc-js": "1.9.11", "@grpc/proto-loader": "0.7.10", - "@types/node": "20.8.10", - "@types/request": "2.48.11", - "@types/ws": "8.5.8", - "async": "3.2.4", + "@types/node": "20.9.2", + "@types/request": "2.48.12", + "@types/ws": "8.5.9", + "async": "3.2.5", "asyncjs-util": "1.2.12", "bitcoinjs-lib": "6.1.5", "bn.js": "5.2.1", @@ -16396,16 +16372,24 @@ "invoices": "3.0.0", "psbt": "3.0.0", "tiny-secp256k1": "2.2.3", - "type-fest": "4.6.0" + "type-fest": "4.8.1" }, "engines": { "node": ">=18" } }, + "node_modules/lightning/node_modules/@types/node": { + "version": "20.9.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.2.tgz", + "integrity": "sha512-WHZXKFCEyIUJzAwh3NyyTHYSR35SevJ6mZ1nWwJafKtiQbqRTIKSRcw3Ma3acqgsent3RRDqeVwpHntMk+9irg==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/lightning/node_modules/@types/request": { - "version": "2.48.11", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.11.tgz", - "integrity": "sha512-HuihY1+Vss5RS9ZHzRyTGIzwPTdrJBkCm/mAeLRYrOQu/MGqyezKXWOK1VhCnR+SDbp9G2mRUP+OVEqCrzpcfA==", + "version": "2.48.12", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz", + "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==", "dependencies": { "@types/caseless": "*", "@types/node": "*", @@ -16413,6 +16397,11 @@ "form-data": "^2.5.0" } }, + "node_modules/lightning/node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + }, "node_modules/lightning/node_modules/base-x": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", @@ -16535,9 +16524,9 @@ } }, "node_modules/lightning/node_modules/type-fest": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.6.0.tgz", - "integrity": "sha512-rLjWJzQFOq4xw7MgJrCZ6T1jIOvvYElXT12r+y0CC6u67hegDHaxcPqb2fZHOGlqxugGQPNB1EnTezjBetkwkw==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.8.1.tgz", + "integrity": "sha512-ShaaYnjf+0etG8W/FumARKMjjIToy/haCaTjN2dvcewOSoNqCQzdgG7m2JVOlM5qndGTHjkvsrWZs+k/2Z7E0Q==", "engines": { "node": ">=16" }, @@ -16560,9 +16549,9 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/lint-staged": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.0.2.tgz", - "integrity": "sha512-vnEy7pFTHyVuDmCAIFKR5QDO8XLVlPFQQyujQ/STOxe40ICWqJ6knS2wSJ/ffX/Lw0rz83luRDh+ET7toN+rOw==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.1.0.tgz", + "integrity": "sha512-ZPKXWHVlL7uwVpy8OZ7YQjYDAuO5X4kMh0XgZvPNxLcCCngd0PO5jKQyy3+s4TL2EnHoIXIzP1422f/l3nZKMw==", "dev": true, "dependencies": { "chalk": "5.3.0", @@ -16574,7 +16563,7 @@ "micromatch": "4.0.5", "pidtree": "0.6.0", "string-argv": "0.3.2", - "yaml": "2.3.3" + "yaml": "2.3.4" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -16945,9 +16934,9 @@ } }, "node_modules/lint-staged/node_modules/yaml": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz", - "integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", "dev": true, "engines": { "node": ">= 14" @@ -17102,9 +17091,9 @@ } }, "node_modules/ln-accounting/node_modules/@types/express-serve-static-core": { - "version": "4.17.39", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz", - "integrity": "sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ==", + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -17363,20 +17352,141 @@ } }, "node_modules/ln-service": { - "version": "57.1.0", - "resolved": "https://registry.npmjs.org/ln-service/-/ln-service-57.1.0.tgz", - "integrity": "sha512-7vKg0PfiadjBh3K9//1+Vod9OAzZ65kRkWG+1TVVQZKMP+WDLHOgdMDVaITmIAIyVuJjr3g47xK7lNGijM2wAQ==", + "version": "57.1.2", + "resolved": "https://registry.npmjs.org/ln-service/-/ln-service-57.1.2.tgz", + "integrity": "sha512-RBLhyicjP6+LYHIWm7g55xdRykHND5hOngDa989RlfWRAXkJjPYilCqnvgtt1jse4vH1u/er34gqct28D7O3WQ==", "dependencies": { "bolt07": "1.8.4", "invoices": "3.0.0", - "lightning": "10.1.0", + "lightning": "10.1.3", "macaroon": "3.0.4" }, "engines": { "node": ">=18" } }, - "node_modules/ln-service/node_modules/@types/request": { + "node_modules/ln-service/node_modules/base-x": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", + "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" + }, + "node_modules/ln-service/node_modules/bitcoinjs-lib": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.3.tgz", + "integrity": "sha512-TYXs/Qf+GNk2nnsB9HrXWqzFuEgCg0Gx+v3UW3B8VuceFHXVvhT+7hRnTSvwkX0i8rz2rtujeU6gFaDcFqYFDw==", + "dependencies": { + "@noble/hashes": "^1.2.0", + "bech32": "^2.0.0", + "bip174": "^2.1.0", + "bs58check": "^3.0.1", + "typeforce": "^1.11.3", + "varuint-bitcoin": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ln-service/node_modules/bolt07": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/bolt07/-/bolt07-1.8.4.tgz", + "integrity": "sha512-UyZRSYmVE8K++Jg1BiJrUkxQak03aS/s7ESKDsBdBPzaTlk2E09Y0JYa9HhWN7MRn48Y2K1doOzkb1Hn6XixZw==", + "dependencies": { + "bn.js": "5.2.1" + } + }, + "node_modules/ln-service/node_modules/bolt09": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bolt09/-/bolt09-1.0.0.tgz", + "integrity": "sha512-J8wh6mRTNnYJuC43iSJRvM2Te0RtO4+Cn0JCgF6q2xWXKWjZjdPV5AGamD8R8C39/Ei6L0I780aFvIZu+bATWw==", + "engines": { + "node": ">=16" + } + }, + "node_modules/ln-service/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/ln-service/node_modules/bs58check": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-3.0.1.tgz", + "integrity": "sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==", + "dependencies": { + "@noble/hashes": "^1.2.0", + "bs58": "^5.0.0" + } + }, + "node_modules/ln-service/node_modules/invoices": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/invoices/-/invoices-3.0.0.tgz", + "integrity": "sha512-/WDTkfU2RMelQpQ54BwZssqGXYNWbPnWkZ/9QV57vAvD3RLdCDbhDuucOGti8CK3sgk8nmhRV6V0WfMrxojMmA==", + "dependencies": { + "bech32": "2.0.0", + "bitcoinjs-lib": "6.1.3", + "bn.js": "5.2.1", + "bolt07": "1.8.4", + "bolt09": "1.0.0", + "tiny-secp256k1": "2.2.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/ln-service/node_modules/tiny-secp256k1": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-2.2.2.tgz", + "integrity": "sha512-KP3eqslmiUH9jxhyQuLY+GqI4wt1EiHWNHHqKVUxCZV41+MT+esucaK4mb6Ji0vKWVKBffJ6tlxU83Pq5TIUwg==", + "dependencies": { + "uint8array-tools": "0.0.7" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ln-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ln-sync/-/ln-sync-6.0.0.tgz", + "integrity": "sha512-bbM0hSHDD96jbagTicXQ0PF9utg+6dN7l9OmHMaCpLU7kyyUdwJzyM7Il6boBd4TaTCpz7Ct7znURH0mkwqiFg==", + "dependencies": { + "async": "3.2.5", + "asyncjs-util": "1.2.12", + "bech32": "2.0.0", + "bitcoinjs-lib": "6.1.5", + "bolt07": "1.8.4", + "colorette": "2.0.20", + "ecpair": "2.1.0", + "ln-service": "57.1.0", + "psbt": "3.0.0", + "tiny-secp256k1": "2.2.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/ln-sync/node_modules/@grpc/grpc-js": { + "version": "1.9.9", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.9.tgz", + "integrity": "sha512-vQ1qwi/Kiyprt+uhb1+rHMpyk4CVRMTGNUGGPRGS7pLNfWkdCHrGEnT6T3/JyC2VZgoOX/X1KwdoU0WYQAeYcQ==", + "dependencies": { + "@grpc/proto-loader": "^0.7.8", + "@types/node": ">=12.12.47" + }, + "engines": { + "node": "^8.13.0 || >=10.10.0" + } + }, + "node_modules/ln-sync/node_modules/@types/node": { + "version": "20.8.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz", + "integrity": "sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/ln-sync/node_modules/@types/request": { "version": "2.48.11", "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.11.tgz", "integrity": "sha512-HuihY1+Vss5RS9ZHzRyTGIzwPTdrJBkCm/mAeLRYrOQu/MGqyezKXWOK1VhCnR+SDbp9G2mRUP+OVEqCrzpcfA==", @@ -17387,12 +17497,25 @@ "form-data": "^2.5.0" } }, - "node_modules/ln-service/node_modules/base-x": { + "node_modules/ln-sync/node_modules/@types/ws": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.8.tgz", + "integrity": "sha512-flUksGIQCnJd6sZ1l5dqCEG/ksaoAg/eUwiLAGTJQcfgvZJKF++Ta4bJA6A5aPSJmsr+xlseHn4KLgVlNnvPTg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ln-sync/node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + }, + "node_modules/ln-sync/node_modules/base-x": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" }, - "node_modules/ln-service/node_modules/bolt07": { + "node_modules/ln-sync/node_modules/bolt07": { "version": "1.8.4", "resolved": "https://registry.npmjs.org/bolt07/-/bolt07-1.8.4.tgz", "integrity": "sha512-UyZRSYmVE8K++Jg1BiJrUkxQak03aS/s7ESKDsBdBPzaTlk2E09Y0JYa9HhWN7MRn48Y2K1doOzkb1Hn6XixZw==", @@ -17400,7 +17523,7 @@ "bn.js": "5.2.1" } }, - "node_modules/ln-service/node_modules/bolt09": { + "node_modules/ln-sync/node_modules/bolt09": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/bolt09/-/bolt09-1.0.0.tgz", "integrity": "sha512-J8wh6mRTNnYJuC43iSJRvM2Te0RtO4+Cn0JCgF6q2xWXKWjZjdPV5AGamD8R8C39/Ei6L0I780aFvIZu+bATWw==", @@ -17408,7 +17531,7 @@ "node": ">=16" } }, - "node_modules/ln-service/node_modules/bs58": { + "node_modules/ln-sync/node_modules/bs58": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", @@ -17416,7 +17539,7 @@ "base-x": "^4.0.0" } }, - "node_modules/ln-service/node_modules/bs58check": { + "node_modules/ln-sync/node_modules/bs58check": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-3.0.1.tgz", "integrity": "sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==", @@ -17425,7 +17548,7 @@ "bs58": "^5.0.0" } }, - "node_modules/ln-service/node_modules/invoices": { + "node_modules/ln-sync/node_modules/invoices": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/invoices/-/invoices-3.0.0.tgz", "integrity": "sha512-/WDTkfU2RMelQpQ54BwZssqGXYNWbPnWkZ/9QV57vAvD3RLdCDbhDuucOGti8CK3sgk8nmhRV6V0WfMrxojMmA==", @@ -17441,7 +17564,7 @@ "node": ">=16" } }, - "node_modules/ln-service/node_modules/invoices/node_modules/bitcoinjs-lib": { + "node_modules/ln-sync/node_modules/invoices/node_modules/bitcoinjs-lib": { "version": "6.1.3", "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.3.tgz", "integrity": "sha512-TYXs/Qf+GNk2nnsB9HrXWqzFuEgCg0Gx+v3UW3B8VuceFHXVvhT+7hRnTSvwkX0i8rz2rtujeU6gFaDcFqYFDw==", @@ -17457,7 +17580,7 @@ "node": ">=8.0.0" } }, - "node_modules/ln-service/node_modules/invoices/node_modules/tiny-secp256k1": { + "node_modules/ln-sync/node_modules/invoices/node_modules/tiny-secp256k1": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-2.2.2.tgz", "integrity": "sha512-KP3eqslmiUH9jxhyQuLY+GqI4wt1EiHWNHHqKVUxCZV41+MT+esucaK4mb6Ji0vKWVKBffJ6tlxU83Pq5TIUwg==", @@ -17468,7 +17591,7 @@ "node": ">=14.0.0" } }, - "node_modules/ln-service/node_modules/lightning": { + "node_modules/ln-sync/node_modules/lightning": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/lightning/-/lightning-10.1.0.tgz", "integrity": "sha512-lOLCeZf2nRym16BdaD5UfhZBSV1eo6DWjdhXWBat7dQN6WLFSxQeg5WKmQQbIRH659rC697aNIbmGVDqxc1JPw==", @@ -17494,7 +17617,12 @@ "node": ">=18" } }, - "node_modules/ln-service/node_modules/lightning/node_modules/bolt09": { + "node_modules/ln-sync/node_modules/lightning/node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "node_modules/ln-sync/node_modules/lightning/node_modules/bolt09": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/bolt09/-/bolt09-2.0.0.tgz", "integrity": "sha512-QtQiDx/nLMMwj+eaJ2tl2UoMa/8K2d8TfRVznHL0DP3cE/bYl4dPueQvSjqej9FVj+iMtrkpkIE5InuodpHmpg==", @@ -17502,7 +17630,21 @@ "node": ">=18" } }, - "node_modules/ln-service/node_modules/psbt": { + "node_modules/ln-sync/node_modules/ln-service": { + "version": "57.1.0", + "resolved": "https://registry.npmjs.org/ln-service/-/ln-service-57.1.0.tgz", + "integrity": "sha512-7vKg0PfiadjBh3K9//1+Vod9OAzZ65kRkWG+1TVVQZKMP+WDLHOgdMDVaITmIAIyVuJjr3g47xK7lNGijM2wAQ==", + "dependencies": { + "bolt07": "1.8.4", + "invoices": "3.0.0", + "lightning": "10.1.0", + "macaroon": "3.0.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/ln-sync/node_modules/psbt": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/psbt/-/psbt-3.0.0.tgz", "integrity": "sha512-Gg35WfXAdbVqION9AJ4cO7cdgqR2iL1Dyq00AmvKCosTbm7EQrrMmHGjkWACb7ue9+aaHjMi/UdDG1SZwqA6bg==", @@ -17518,7 +17660,7 @@ "node": ">=16" } }, - "node_modules/ln-service/node_modules/psbt/node_modules/bitcoinjs-lib": { + "node_modules/ln-sync/node_modules/psbt/node_modules/bitcoinjs-lib": { "version": "6.1.3", "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.3.tgz", "integrity": "sha512-TYXs/Qf+GNk2nnsB9HrXWqzFuEgCg0Gx+v3UW3B8VuceFHXVvhT+7hRnTSvwkX0i8rz2rtujeU6gFaDcFqYFDw==", @@ -17534,7 +17676,7 @@ "node": ">=8.0.0" } }, - "node_modules/ln-service/node_modules/type-fest": { + "node_modules/ln-sync/node_modules/type-fest": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.6.0.tgz", "integrity": "sha512-rLjWJzQFOq4xw7MgJrCZ6T1jIOvvYElXT12r+y0CC6u67hegDHaxcPqb2fZHOGlqxugGQPNB1EnTezjBetkwkw==", @@ -17546,20 +17688,20 @@ } }, "node_modules/ln-telegram": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/ln-telegram/-/ln-telegram-6.0.0.tgz", - "integrity": "sha512-8vhxoeU0yVOH4wR0YV2Gv3yb4uM9YMS2PMerJ+1eA0p3ep8MWU2/YHugoII9/lxwkKHEU4P2NSlQp2a6mspumg==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/ln-telegram/-/ln-telegram-6.1.1.tgz", + "integrity": "sha512-53eF9YdDI6Dh63xouOGKrrT9B7Qy9mj4JvFZVpYQ0GzH3+G7eWI62wu4InsnXRiEqsaJR9PsxEJSWcJ52NluaQ==", "dependencies": { "@alexbosworth/fiat": "2.0.0", - "async": "3.2.4", + "async": "3.2.5", "asyncjs-util": "1.2.12", "bolt07": "1.8.4", "goldengate": "13.0.2", "grammy": "1.19.2", "ln-accounting": "7.0.2", - "ln-service": "57.1.0", - "ln-sync": "5.2.3", - "luxon": "3.4.3", + "ln-service": "57.1.1", + "ln-sync": "6.0.0", + "luxon": "3.4.4", "paid-services": "5.0.5", "table": "6.8.1" }, @@ -17609,9 +17751,9 @@ } }, "node_modules/ln-telegram/node_modules/@types/express-serve-static-core": { - "version": "4.17.39", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz", - "integrity": "sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ==", + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -17620,18 +17762,29 @@ } }, "node_modules/ln-telegram/node_modules/@types/node": { - "version": "20.3.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.2.tgz", - "integrity": "sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==" + "version": "20.8.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz", + "integrity": "sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==", + "dependencies": { + "undici-types": "~5.26.4" + } }, - "node_modules/ln-telegram/node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "node_modules/ln-telegram/node_modules/@types/request": { + "version": "2.48.12", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz", + "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==", "dependencies": { - "@types/node": "*" + "@types/caseless": "*", + "@types/node": "*", + "@types/tough-cookie": "*", + "form-data": "^2.5.0" } }, + "node_modules/ln-telegram/node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + }, "node_modules/ln-telegram/node_modules/base-x": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", @@ -17773,6 +17926,65 @@ "node": ">=16" } }, + "node_modules/ln-telegram/node_modules/goldengate/node_modules/@types/node": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.2.tgz", + "integrity": "sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==" + }, + "node_modules/ln-telegram/node_modules/goldengate/node_modules/@types/request": { + "version": "2.48.8", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.8.tgz", + "integrity": "sha512-whjk1EDJPcAR2kYHRbFl/lKeeKYTi05A15K9bnLInCVroNDCtXce57xKdI0/rQaA3K+6q0eFyUBPmqfSndUZdQ==", + "dependencies": { + "@types/caseless": "*", + "@types/node": "*", + "@types/tough-cookie": "*", + "form-data": "^2.5.0" + } + }, + "node_modules/ln-telegram/node_modules/goldengate/node_modules/@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ln-telegram/node_modules/goldengate/node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "node_modules/ln-telegram/node_modules/goldengate/node_modules/lightning": { + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/lightning/-/lightning-9.8.0.tgz", + "integrity": "sha512-VJhAL13nuWLHr2hJSDbX5gweh2P1AiCBVG85ZPXR0Gf6/x1eTn1RWLRMxgk+5oiuAKa88GcAHXPYpQjWhKyOnQ==", + "dependencies": { + "@grpc/grpc-js": "1.8.17", + "@grpc/proto-loader": "0.7.7", + "@types/express": "4.17.17", + "@types/node": "20.3.2", + "@types/request": "2.48.8", + "@types/ws": "8.5.5", + "async": "3.2.4", + "asyncjs-util": "1.2.12", + "bitcoinjs-lib": "6.1.3", + "bn.js": "5.2.1", + "body-parser": "1.20.2", + "bolt07": "1.8.4", + "bolt09": "1.0.0", + "cbor": "9.0.0", + "ecpair": "2.1.0", + "express": "4.18.2", + "invoices": "3.0.0", + "psbt": "3.0.0", + "tiny-secp256k1": "2.2.3", + "type-fest": "3.12.0" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/ln-telegram/node_modules/goldengate/node_modules/ln-service": { "version": "56.8.0", "resolved": "https://registry.npmjs.org/ln-service/-/ln-service-56.8.0.tgz", @@ -17791,6 +18003,37 @@ "node": ">=16" } }, + "node_modules/ln-telegram/node_modules/goldengate/node_modules/ln-sync": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/ln-sync/-/ln-sync-5.2.3.tgz", + "integrity": "sha512-8UCQFd0D2BaGXnjhByUsA9Y1zBj4JJ6TTQjFv67tuwspd9Vvo75xO50ABFljD1/5uu4hrq0xRSZs3AjtwYyk3g==", + "dependencies": { + "async": "3.2.4", + "asyncjs-util": "1.2.12", + "bech32": "2.0.0", + "bitcoinjs-lib": "6.1.3", + "bolt07": "1.8.4", + "colorette": "2.0.20", + "ecpair": "2.1.0", + "ln-service": "56.8.0", + "psbt": "3.0.0", + "tiny-secp256k1": "2.2.3" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/ln-telegram/node_modules/goldengate/node_modules/type-fest": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.12.0.tgz", + "integrity": "sha512-qj9wWsnFvVEMUDbESiilKeXeHL7FwwiFcogfhfyjmvT968RXSvnl23f1JOClTHYItsi7o501C/7qVllscUP3oA==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ln-telegram/node_modules/invoices": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/invoices/-/invoices-3.0.0.tgz", @@ -17819,71 +18062,101 @@ } }, "node_modules/ln-telegram/node_modules/lightning": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/lightning/-/lightning-9.8.0.tgz", - "integrity": "sha512-VJhAL13nuWLHr2hJSDbX5gweh2P1AiCBVG85ZPXR0Gf6/x1eTn1RWLRMxgk+5oiuAKa88GcAHXPYpQjWhKyOnQ==", + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/lightning/-/lightning-10.1.2.tgz", + "integrity": "sha512-L8sEyHVhyrvTr9KFmCbphfMDTf6KovdkJ8XVD2KyaT0upTlAiXmD+vBg+5X+wP4y85M+Lbe5svzUIvNWDgbl8w==", "dependencies": { - "@grpc/grpc-js": "1.8.17", - "@grpc/proto-loader": "0.7.7", - "@types/express": "4.17.17", - "@types/node": "20.3.2", - "@types/request": "2.48.8", - "@types/ws": "8.5.5", - "async": "3.2.4", + "@grpc/grpc-js": "1.9.9", + "@grpc/proto-loader": "0.7.10", + "@types/node": "20.8.10", + "@types/request": "2.48.12", + "@types/ws": "8.5.9", + "async": "3.2.5", "asyncjs-util": "1.2.12", - "bitcoinjs-lib": "6.1.3", + "bitcoinjs-lib": "6.1.5", "bn.js": "5.2.1", - "body-parser": "1.20.2", "bolt07": "1.8.4", - "bolt09": "1.0.0", - "cbor": "9.0.0", + "bolt09": "2.0.0", "ecpair": "2.1.0", - "express": "4.18.2", "invoices": "3.0.0", "psbt": "3.0.0", "tiny-secp256k1": "2.2.3", - "type-fest": "3.12.0" + "type-fest": "4.7.1" }, "engines": { - "node": ">=16" + "node": ">=18" } }, - "node_modules/ln-telegram/node_modules/ln-sync": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/ln-sync/-/ln-sync-5.2.3.tgz", - "integrity": "sha512-8UCQFd0D2BaGXnjhByUsA9Y1zBj4JJ6TTQjFv67tuwspd9Vvo75xO50ABFljD1/5uu4hrq0xRSZs3AjtwYyk3g==", + "node_modules/ln-telegram/node_modules/lightning/node_modules/@grpc/grpc-js": { + "version": "1.9.9", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.9.tgz", + "integrity": "sha512-vQ1qwi/Kiyprt+uhb1+rHMpyk4CVRMTGNUGGPRGS7pLNfWkdCHrGEnT6T3/JyC2VZgoOX/X1KwdoU0WYQAeYcQ==", "dependencies": { - "async": "3.2.4", - "asyncjs-util": "1.2.12", - "bech32": "2.0.0", - "bitcoinjs-lib": "6.1.3", - "bolt07": "1.8.4", - "colorette": "2.0.20", - "ecpair": "2.1.0", - "ln-service": "56.8.0", - "psbt": "3.0.0", - "tiny-secp256k1": "2.2.3" + "@grpc/proto-loader": "^0.7.8", + "@types/node": ">=12.12.47" }, "engines": { - "node": ">=16" + "node": "^8.13.0 || >=10.10.0" } }, - "node_modules/ln-telegram/node_modules/ln-sync/node_modules/ln-service": { - "version": "56.8.0", - "resolved": "https://registry.npmjs.org/ln-service/-/ln-service-56.8.0.tgz", - "integrity": "sha512-TWKfTVMhEb7Df7xB6z3/fiNTaBONwyoqYWgl7dZ9JbdOMLrhtX0y9OJAsFWAgIo0SYDjO2MM7sq1UDfLf3Zcqg==", + "node_modules/ln-telegram/node_modules/lightning/node_modules/@grpc/proto-loader": { + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.10.tgz", + "integrity": "sha512-CAqDfoaQ8ykFd9zqBDn4k6iWT9loLAlc2ETmDFS9JCD70gDcnA4L3AFEo2iV7KyAtAAHFW9ftq1Fz+Vsgq80RQ==", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.4", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ln-telegram/node_modules/lightning/node_modules/bitcoinjs-lib": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.5.tgz", + "integrity": "sha512-yuf6xs9QX/E8LWE2aMJPNd0IxGofwfuVOiYdNUESkc+2bHHVKjhJd8qewqapeoolh9fihzHGoDCB5Vkr57RZCQ==", + "dependencies": { + "@noble/hashes": "^1.2.0", + "bech32": "^2.0.0", + "bip174": "^2.1.1", + "bs58check": "^3.0.1", + "typeforce": "^1.11.3", + "varuint-bitcoin": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ln-telegram/node_modules/lightning/node_modules/bolt09": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bolt09/-/bolt09-2.0.0.tgz", + "integrity": "sha512-QtQiDx/nLMMwj+eaJ2tl2UoMa/8K2d8TfRVznHL0DP3cE/bYl4dPueQvSjqej9FVj+iMtrkpkIE5InuodpHmpg==", + "engines": { + "node": ">=18" + } + }, + "node_modules/ln-telegram/node_modules/lightning/node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, + "node_modules/ln-telegram/node_modules/ln-service": { + "version": "57.1.1", + "resolved": "https://registry.npmjs.org/ln-service/-/ln-service-57.1.1.tgz", + "integrity": "sha512-CcSF0cioMx7xUvhuex1i/RtUdOdf8cMX9T8hxXB4kEBzAx5ne9hOeROhhAWBR53IdMTe5ep+4l1uChAsA6O47Q==", "dependencies": { "bolt07": "1.8.4", - "cors": "2.8.5", - "express": "4.18.2", "invoices": "3.0.0", - "lightning": "9.8.0", - "macaroon": "3.0.4", - "morgan": "1.10.0", - "ws": "8.13.0" + "lightning": "10.1.2", + "macaroon": "3.0.4" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/ln-telegram/node_modules/ms": { @@ -17933,11 +18206,11 @@ } }, "node_modules/ln-telegram/node_modules/type-fest": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.12.0.tgz", - "integrity": "sha512-qj9wWsnFvVEMUDbESiilKeXeHL7FwwiFcogfhfyjmvT968RXSvnl23f1JOClTHYItsi7o501C/7qVllscUP3oA==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.7.1.tgz", + "integrity": "sha512-iWr8RUmzAJRfhZugX9O7nZE6pCxDU8CZ3QxsLuTnGcBLJpCaP2ll3s4eMTBoFnU/CeXY/5rfQSuAEsTGJO4y8A==", "engines": { - "node": ">=14.16" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -18282,9 +18555,9 @@ } }, "node_modules/luxon": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz", - "integrity": "sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz", + "integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==", "engines": { "node": ">=12" } @@ -18905,11 +19178,11 @@ } }, "node_modules/next": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/next/-/next-14.0.1.tgz", - "integrity": "sha512-s4YaLpE4b0gmb3ggtmpmV+wt+lPRuGtANzojMQ2+gmBpgX9w5fTbjsy6dXByBuENsdCX5pukZH/GxdFgO62+pA==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/next/-/next-14.0.3.tgz", + "integrity": "sha512-AbYdRNfImBr3XGtvnwOxq8ekVCwbFTv/UJoLwmaX89nk9i051AEY4/HAWzU0YpaTDw8IofUpmuIlvzWF13jxIw==", "dependencies": { - "@next/env": "14.0.1", + "@next/env": "14.0.3", "@swc/helpers": "0.5.2", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001406", @@ -18924,15 +19197,15 @@ "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.0.1", - "@next/swc-darwin-x64": "14.0.1", - "@next/swc-linux-arm64-gnu": "14.0.1", - "@next/swc-linux-arm64-musl": "14.0.1", - "@next/swc-linux-x64-gnu": "14.0.1", - "@next/swc-linux-x64-musl": "14.0.1", - "@next/swc-win32-arm64-msvc": "14.0.1", - "@next/swc-win32-ia32-msvc": "14.0.1", - "@next/swc-win32-x64-msvc": "14.0.1" + "@next/swc-darwin-arm64": "14.0.3", + "@next/swc-darwin-x64": "14.0.3", + "@next/swc-linux-arm64-gnu": "14.0.3", + "@next/swc-linux-arm64-musl": "14.0.3", + "@next/swc-linux-x64-gnu": "14.0.3", + "@next/swc-linux-x64-musl": "14.0.3", + "@next/swc-win32-arm64-msvc": "14.0.3", + "@next/swc-win32-ia32-msvc": "14.0.3", + "@next/swc-win32-x64-msvc": "14.0.3" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", @@ -19301,15 +19574,27 @@ } }, "node_modules/optimism": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.17.5.tgz", - "integrity": "sha512-TEcp8ZwK1RczmvMnvktxHSF2tKgMWjJ71xEFGX5ApLh67VsMSTy1ZUlipJw8W+KaqgOmQ+4pqwkeivY89j+4Vw==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.18.0.tgz", + "integrity": "sha512-tGn8+REwLRNFnb9WmcY5IfpOqeX2kpaYJ1s6Ae3mn12AeydLkR3j+jSCmVQFoXqU8D41PAJ1RG1rCRNWmNZVmQ==", "dependencies": { + "@wry/caches": "^1.0.0", "@wry/context": "^0.7.0", "@wry/trie": "^0.4.3", "tslib": "^2.3.0" } }, + "node_modules/optimism/node_modules/@wry/trie": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.4.3.tgz", + "integrity": "sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -19552,9 +19837,9 @@ } }, "node_modules/paid-services/node_modules/@types/express-serve-static-core": { - "version": "4.17.39", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz", - "integrity": "sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ==", + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -19591,6 +19876,22 @@ "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" }, + "node_modules/paid-services/node_modules/bitcoinjs-lib": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.3.tgz", + "integrity": "sha512-TYXs/Qf+GNk2nnsB9HrXWqzFuEgCg0Gx+v3UW3B8VuceFHXVvhT+7hRnTSvwkX0i8rz2rtujeU6gFaDcFqYFDw==", + "dependencies": { + "@noble/hashes": "^1.2.0", + "bech32": "^2.0.0", + "bip174": "^2.1.0", + "bs58check": "^3.0.1", + "typeforce": "^1.11.3", + "varuint-bitcoin": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/paid-services/node_modules/body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", @@ -19746,22 +20047,6 @@ "@types/node": "*" } }, - "node_modules/paid-services/node_modules/goldengate/node_modules/bitcoinjs-lib": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.3.tgz", - "integrity": "sha512-TYXs/Qf+GNk2nnsB9HrXWqzFuEgCg0Gx+v3UW3B8VuceFHXVvhT+7hRnTSvwkX0i8rz2rtujeU6gFaDcFqYFDw==", - "dependencies": { - "@noble/hashes": "^1.2.0", - "bech32": "^2.0.0", - "bip174": "^2.1.0", - "bs58check": "^3.0.1", - "typeforce": "^1.11.3", - "varuint-bitcoin": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/paid-services/node_modules/goldengate/node_modules/lightning": { "version": "9.8.0", "resolved": "https://registry.npmjs.org/lightning/-/lightning-9.8.0.tgz", @@ -19857,22 +20142,6 @@ "node": ">=16" } }, - "node_modules/paid-services/node_modules/invoices/node_modules/bitcoinjs-lib": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.3.tgz", - "integrity": "sha512-TYXs/Qf+GNk2nnsB9HrXWqzFuEgCg0Gx+v3UW3B8VuceFHXVvhT+7hRnTSvwkX0i8rz2rtujeU6gFaDcFqYFDw==", - "dependencies": { - "@noble/hashes": "^1.2.0", - "bech32": "^2.0.0", - "bip174": "^2.1.0", - "bs58check": "^3.0.1", - "typeforce": "^1.11.3", - "varuint-bitcoin": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/paid-services/node_modules/invoices/node_modules/tiny-secp256k1": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-2.2.2.tgz", @@ -19943,6 +20212,22 @@ "node": ">=6" } }, + "node_modules/paid-services/node_modules/lightning/node_modules/bitcoinjs-lib": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.5.tgz", + "integrity": "sha512-yuf6xs9QX/E8LWE2aMJPNd0IxGofwfuVOiYdNUESkc+2bHHVKjhJd8qewqapeoolh9fihzHGoDCB5Vkr57RZCQ==", + "dependencies": { + "@noble/hashes": "^1.2.0", + "bech32": "^2.0.0", + "bip174": "^2.1.1", + "bs58check": "^3.0.1", + "typeforce": "^1.11.3", + "varuint-bitcoin": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/paid-services/node_modules/lightning/node_modules/cbor": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.1.tgz", @@ -20032,22 +20317,6 @@ "@types/node": "*" } }, - "node_modules/paid-services/node_modules/ln-sync/node_modules/bitcoinjs-lib": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.3.tgz", - "integrity": "sha512-TYXs/Qf+GNk2nnsB9HrXWqzFuEgCg0Gx+v3UW3B8VuceFHXVvhT+7hRnTSvwkX0i8rz2rtujeU6gFaDcFqYFDw==", - "dependencies": { - "@noble/hashes": "^1.2.0", - "bech32": "^2.0.0", - "bip174": "^2.1.0", - "bs58check": "^3.0.1", - "typeforce": "^1.11.3", - "varuint-bitcoin": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/paid-services/node_modules/ln-sync/node_modules/lightning": { "version": "9.8.0", "resolved": "https://registry.npmjs.org/lightning/-/lightning-9.8.0.tgz", @@ -20159,22 +20428,6 @@ "node": ">=16" } }, - "node_modules/paid-services/node_modules/psbt/node_modules/bitcoinjs-lib": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.3.tgz", - "integrity": "sha512-TYXs/Qf+GNk2nnsB9HrXWqzFuEgCg0Gx+v3UW3B8VuceFHXVvhT+7hRnTSvwkX0i8rz2rtujeU6gFaDcFqYFDw==", - "dependencies": { - "@noble/hashes": "^1.2.0", - "bech32": "^2.0.0", - "bip174": "^2.1.0", - "bs58check": "^3.0.1", - "typeforce": "^1.11.3", - "varuint-bitcoin": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/paid-services/node_modules/raw-body": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", @@ -20596,9 +20849,9 @@ } }, "node_modules/prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz", + "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -21295,9 +21548,9 @@ } }, "node_modules/react-grid-layout": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/react-grid-layout/-/react-grid-layout-1.4.2.tgz", - "integrity": "sha512-LLOZogtw5XNHbdCquKQRG/Dspjyfelk+kE9DKRbLUl3UArFRQu/IiH+aPcjh+wSkSHUjf+Rv32ueEYigbGzRLQ==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/react-grid-layout/-/react-grid-layout-1.4.4.tgz", + "integrity": "sha512-7+Lg8E8O8HfOH5FrY80GCIR1SHTn2QnAYKh27/5spoz+OHhMmEhU/14gIkRzJOtympDPaXcVRX/nT1FjmeOUmQ==", "dependencies": { "clsx": "^2.0.0", "fast-equals": "^4.0.3", @@ -21337,9 +21590,9 @@ } }, "node_modules/react-select": { - "version": "5.7.7", - "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.7.tgz", - "integrity": "sha512-HhashZZJDRlfF/AKj0a0Lnfs3sRdw/46VJIRd8IbB9/Ovr74+ZIwkAdSBjSPXsFMG+u72c5xShqwLSKIJllzqw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.8.0.tgz", + "integrity": "sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==", "dependencies": { "@babel/runtime": "^7.12.0", "@emotion/cache": "^11.4.0", @@ -21389,9 +21642,9 @@ } }, "node_modules/react-tooltip": { - "version": "5.22.0", - "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-5.22.0.tgz", - "integrity": "sha512-xbJBRY1LyHYd7j00UeBOqZR9SH/1S47Pe+m8vM1a+ZXglkeSNnBt5YYoPttU/amjC/VZJAPQ8+2B9x8Fl8U1qA==", + "version": "5.24.0", + "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-5.24.0.tgz", + "integrity": "sha512-HjstgpOrUwP4eN6mHU4EThpbxVuKO5SvqumRt1aAcPq0ya+pIVVxlwltndtdIIMBJ7w3jnN05vNfcfh2sxE2mQ==", "dependencies": { "@floating-ui/dom": "^1.0.0", "classnames": "^2.3.0" @@ -23906,9 +24159,9 @@ } }, "node_modules/ts-loader": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.0.tgz", - "integrity": "sha512-LLlB/pkB4q9mW2yLdFMnK3dEHbrBjeZTYguaaIfusyojBgAGf5kF+O6KcWqiGzWqHk0LBsoolrp4VftEURhybg==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", "dev": true, "dependencies": { "chalk": "^4.1.0", @@ -24146,9 +24399,9 @@ "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" }, "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz", + "integrity": "sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -25245,17 +25498,16 @@ "requires": {} }, "@apollo/client": { - "version": "3.8.7", - "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.8.7.tgz", - "integrity": "sha512-DnQtFkQrCyxHTSa9gR84YRLmU/al6HeXcLZazVe+VxKBmx/Hj4rV8xWtzfWYX5ijartsqDR7SJgV037MATEecA==", + "version": "3.8.8", + "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.8.8.tgz", + "integrity": "sha512-omjd9ryGDkadZrKW6l5ktUAdS4SNaFOccYQ4ZST0HLW83y8kQaSZOCTNlpkoBUK8cv6qP8+AxOKwLm2ho8qQ+Q==", "requires": { "@graphql-typed-document-node/core": "^3.1.1", - "@wry/context": "^0.7.3", "@wry/equality": "^0.5.6", - "@wry/trie": "^0.4.3", + "@wry/trie": "^0.5.0", "graphql-tag": "^2.12.6", "hoist-non-react-statics": "^3.3.2", - "optimism": "^0.17.5", + "optimism": "^0.18.0", "prop-types": "^15.7.2", "response-iterator": "^0.2.6", "symbol-observable": "^4.0.0", @@ -26752,9 +27004,9 @@ } }, "@eslint/js": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz", - "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz", + "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==", "dev": true }, "@floating-ui/core": { @@ -28598,9 +28850,9 @@ "requires": {} }, "@grpc/grpc-js": { - "version": "1.9.9", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.9.tgz", - "integrity": "sha512-vQ1qwi/Kiyprt+uhb1+rHMpyk4CVRMTGNUGGPRGS7pLNfWkdCHrGEnT6T3/JyC2VZgoOX/X1KwdoU0WYQAeYcQ==", + "version": "1.9.11", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.11.tgz", + "integrity": "sha512-QDhMfbTROOXUhLHMroow8f3EHiCKUOh6UwxMP5S3EuXMnWMNSVIhatGZRwkpg9OUTYdZPsDUVH3cOAkWhGFUJw==", "requires": { "@grpc/proto-loader": "^0.7.8", "@types/node": ">=12.12.47" @@ -29146,9 +29398,9 @@ } }, "@json2csv/formatters": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@json2csv/formatters/-/formatters-7.0.3.tgz", - "integrity": "sha512-QLTpBNmNxGDAQNALkWwPdnyJ7IdXHQ0Motzog4fZOKK2ozpxckl6vwhWNBxbQs/25Zhp7bLS4J6ILu/hh0en6w==" + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@json2csv/formatters/-/formatters-7.0.4.tgz", + "integrity": "sha512-qdlLx0Pk/+BQnu6zreLgGrdLyUzLNVdsyCUU/+2aduHg4zemVo/e0iWjPk1sy/QZXXh+1RXBe+IiP9eDyj95qg==" }, "@json2csv/plainjs": { "version": "7.0.1", @@ -29187,9 +29439,9 @@ } }, "@nestjs/apollo": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@nestjs/apollo/-/apollo-12.0.9.tgz", - "integrity": "sha512-aAo+FzmLNQdAZVYkJu4Jnhx4QWp3RalfuFe9vH644ap/ao79FhWR/YKA0N+Zr1RTLKjtl7/PUm4N6z2a8G2LbQ==", + "version": "12.0.11", + "resolved": "https://registry.npmjs.org/@nestjs/apollo/-/apollo-12.0.11.tgz", + "integrity": "sha512-E8kBOyGBZ8Zx4qMLnK3+ECZgmLKqNHyYbtkOi0fXWr8ackosLMkRqGgtDVffXRlVA3eo6G3RgnL0Qyu3VvfD5A==", "requires": { "@apollo/server-plugin-landing-page-graphql-playground": "4.0.0", "iterall": "1.3.0", @@ -29327,6 +29579,12 @@ } } }, + "typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true + }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -29341,9 +29599,9 @@ } }, "@nestjs/common": { - "version": "10.2.8", - "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.2.8.tgz", - "integrity": "sha512-rmpwcdvq2IWMmsUVP8rsdKub6uDWk7dwCYo0aif50JTwcvcxzaP3iKVFKoSgvp0RKYu8h15+/AEOfaInmPpl0Q==", + "version": "10.2.10", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.2.10.tgz", + "integrity": "sha512-fwAk931rjW8CNH2Mgwawq/7HWHH1dxkOLdcgs7U52ddLk8CtHXjejm1cbNahewlSbNhvlOl7y1STLHutE6sUqw==", "requires": { "iterare": "1.2.1", "tslib": "2.6.2", @@ -29376,9 +29634,9 @@ } }, "@nestjs/core": { - "version": "10.2.8", - "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.2.8.tgz", - "integrity": "sha512-9+MZ2s8ixfY9Bl/M9ofChiyYymcwdK9ZWNH4GDMF7Am7XRAQ1oqde6MYGG05rhQwiVXuTwaYLlXciJKfsrg5qg==", + "version": "10.2.10", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.2.10.tgz", + "integrity": "sha512-+ckOI6BPi2ZMHikT9MCG4ctHDc4OnjhoIytrn7f2AYMMXI4bnutJhqyQKc30VDka5x3Wq6QAD57pgSP7y+JjJg==", "requires": { "@nuxtjs/opencollective": "0.3.2", "fast-safe-stringify": "2.1.1", @@ -29396,24 +29654,24 @@ } }, "@nestjs/graphql": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@nestjs/graphql/-/graphql-12.0.9.tgz", - "integrity": "sha512-A5oRD5GMwzaNZum06KSxKtqhC7LvS4p7v0hLGzvNWPuLrBjAjAnm/2NV8IV8lYiJXpPHNtSnnekZH9uvy/hZlw==", + "version": "12.0.11", + "resolved": "https://registry.npmjs.org/@nestjs/graphql/-/graphql-12.0.11.tgz", + "integrity": "sha512-iCyVs9+utCQt9ehMhUjQcEdjRN/MrcTBINd7P44O1fzGENuWMbt1Z8RCoZbeGi5iVPBY63HgYik+BnnICqmxZw==", "requires": { "@graphql-tools/merge": "9.0.0", "@graphql-tools/schema": "10.0.0", - "@graphql-tools/utils": "10.0.6", + "@graphql-tools/utils": "10.0.8", "@nestjs/mapped-types": "2.0.2", "chokidar": "3.5.3", - "fast-glob": "3.3.1", + "fast-glob": "3.3.2", "graphql-tag": "2.12.6", - "graphql-ws": "5.14.0", + "graphql-ws": "5.14.2", "lodash": "4.17.21", "normalize-path": "3.0.0", "subscriptions-transport-ws": "0.11.0", "tslib": "2.6.2", - "uuid": "9.0.0", - "ws": "8.13.0" + "uuid": "9.0.1", + "ws": "8.14.2" }, "dependencies": { "@graphql-tools/merge": { @@ -29437,19 +29695,20 @@ } }, "@graphql-tools/utils": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.0.6.tgz", - "integrity": "sha512-hZMjl/BbX10iagovakgf3IiqArx8TPsotq5pwBld37uIX1JiZoSbgbCIFol7u55bh32o6cfDEiiJgfAD5fbeyQ==", + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.0.8.tgz", + "integrity": "sha512-yjyA8ycSa1WRlJqyX/aLqXeE5DvF/H02+zXMUFnCzIDrj0UvLMUrxhmVFnMK0Q2n3bh4uuTeY3621m5za9ovXw==", "requires": { "@graphql-typed-document-node/core": "^3.1.1", + "cross-inspect": "1.0.0", "dset": "^3.1.2", "tslib": "^2.4.0" } }, "graphql-ws": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.14.0.tgz", - "integrity": "sha512-itrUTQZP/TgswR4GSSYuwWUzrE/w5GhbwM2GX3ic2U7aw33jgEsayfIlvaj7/GcIvZgNMzsPTrE5hqPuFUiE5g==", + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.14.2.tgz", + "integrity": "sha512-LycmCwhZ+Op2GlHz4BZDsUYHKRiiUz+3r9wbhBATMETNlORQJAaFlAgTFoeRh6xQoQegwYwIylVD1Qns9/DA3w==", "requires": {} }, "tslib": { @@ -29457,52 +29716,20 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, - "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" - }, "value-or-promise": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==" - }, - "ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "requires": {} } } }, "@nestjs/jwt": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-10.1.1.tgz", - "integrity": "sha512-sISYylg8y1Mb7saxPx5Zh11i7v9JOh70CEC/rN6g43MrbFlJ57c1eYFrffxip1YAx3DmV4K67yXob3syKZMOew==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-10.2.0.tgz", + "integrity": "sha512-x8cG90SURkEiLOehNaN2aRlotxT0KZESUliOPKKnjWiyJOcWurkF3w345WOX0P4MgFzUjGoZ1Sy0aZnxeihT0g==", "requires": { - "@types/jsonwebtoken": "9.0.2", - "jsonwebtoken": "9.0.0" - }, - "dependencies": { - "@types/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q==", - "requires": { - "@types/node": "*" - } - }, - "jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", - "requires": { - "jws": "^3.2.2", - "lodash": "^4.17.21", - "ms": "^2.1.1", - "semver": "^7.3.8" - } - } + "@types/jsonwebtoken": "9.0.5", + "jsonwebtoken": "9.0.2" } }, "@nestjs/mapped-types": { @@ -29518,9 +29745,9 @@ "requires": {} }, "@nestjs/platform-express": { - "version": "10.2.8", - "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.2.8.tgz", - "integrity": "sha512-WoSSVtwIRc5AdGMHWVzWZK4JZLT0f4o2xW8P9gQvcX+omL8W1kXCfY8GQYXNBG84XmBNYH8r0FtC8oMe/lH5NQ==", + "version": "10.2.10", + "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.2.10.tgz", + "integrity": "sha512-U4KDgtMjH8TqEvt0RzC/POP8ABvL9bYoCScvlGtFSKgVGaMLBKkZ4+jHtbQx6qItYSlBBRUuz/dveMZCObfrkQ==", "requires": { "body-parser": "1.20.2", "cors": "2.8.5", @@ -29580,9 +29807,9 @@ } }, "@nestjs/platform-socket.io": { - "version": "10.2.8", - "resolved": "https://registry.npmjs.org/@nestjs/platform-socket.io/-/platform-socket.io-10.2.8.tgz", - "integrity": "sha512-P/Olw9alAaKD7Q1vS/ol7K81x1l7Bmi+AXthBNUPGMmG/W8kxO1krerW4rEhtF3BKJ0qJIa5bhDlb80p4lZcNA==", + "version": "10.2.10", + "resolved": "https://registry.npmjs.org/@nestjs/platform-socket.io/-/platform-socket.io-10.2.10.tgz", + "integrity": "sha512-JBuemeIBp2mpp+z7D12oa22k83TnDTxyQDMKZpO/B2/QnBVR+2C4EZ07/XOct14LQXO6vIjmT0iYYCZbNvczjw==", "requires": { "socket.io": "4.7.2", "tslib": "2.6.2" @@ -29626,9 +29853,9 @@ } }, "@nestjs/websockets": { - "version": "10.2.8", - "resolved": "https://registry.npmjs.org/@nestjs/websockets/-/websockets-10.2.8.tgz", - "integrity": "sha512-oZN1VJFApN7d2eftr65a36QrV0IJNGba4znqyjFnyGvtDWTDcQwzDcnEfvJBTTYhOSBNS7KDfVhne0ythkl6tg==", + "version": "10.2.10", + "resolved": "https://registry.npmjs.org/@nestjs/websockets/-/websockets-10.2.10.tgz", + "integrity": "sha512-L1AkxwLUj/ntk26jO1SXYl3GRElQE6Fikzfy/3MPFURk0GDs7tHUzLcb8BC8q8u5ZpUjBAC2wFVQzrY5R0MHNw==", "requires": { "iterare": "1.2.1", "object-hash": "3.0.0", @@ -29643,14 +29870,14 @@ } }, "@next/env": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.1.tgz", - "integrity": "sha512-Ms8ZswqY65/YfcjrlcIwMPD7Rg/dVjdLapMcSHG26W6O67EJDF435ShW4H4LXi1xKO1oRc97tLXUpx8jpLe86A==" + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.3.tgz", + "integrity": "sha512-7xRqh9nMvP5xrW4/+L0jgRRX+HoNRGnfJpD+5Wq6/13j3dsdzxO3BCXn7D3hMqsDb+vjZnJq+vI7+EtgrYZTeA==" }, "@next/eslint-plugin-next": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.1.tgz", - "integrity": "sha512-bLjJMwXdzvhnQOnxvHoTTUh/+PYk6FF/DCgHi4BXwXCINer+o1ZYfL9aVeezj/oI7wqGJOqwGIXrlBvPbAId3w==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.3.tgz", + "integrity": "sha512-j4K0n+DcmQYCVnSAM+UByTVfIHnYQy2ODozfQP+4RdwtRDfobrIvKq1K4Exb2koJ79HSSa7s6B2SA8T/1YR3RA==", "dev": true, "requires": { "glob": "7.1.7" @@ -29682,57 +29909,57 @@ } }, "@next/swc-darwin-arm64": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.1.tgz", - "integrity": "sha512-JyxnGCS4qT67hdOKQ0CkgFTp+PXub5W1wsGvIq98TNbF3YEIN7iDekYhYsZzc8Ov0pWEsghQt+tANdidITCLaw==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.3.tgz", + "integrity": "sha512-64JbSvi3nbbcEtyitNn2LEDS/hcleAFpHdykpcnrstITFlzFgB/bW0ER5/SJJwUPj+ZPY+z3e+1jAfcczRLVGw==", "optional": true }, "@next/swc-darwin-x64": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.1.tgz", - "integrity": "sha512-625Z7bb5AyIzswF9hvfZWa+HTwFZw+Jn3lOBNZB87lUS0iuCYDHqk3ujuHCkiyPtSC0xFBtYDLcrZ11mF/ap3w==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.3.tgz", + "integrity": "sha512-RkTf+KbAD0SgYdVn1XzqE/+sIxYGB7NLMZRn9I4Z24afrhUpVJx6L8hsRnIwxz3ERE2NFURNliPjJ2QNfnWicQ==", "optional": true }, "@next/swc-linux-arm64-gnu": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.1.tgz", - "integrity": "sha512-iVpn3KG3DprFXzVHM09kvb//4CNNXBQ9NB/pTm8LO+vnnnaObnzFdS5KM+w1okwa32xH0g8EvZIhoB3fI3mS1g==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.3.tgz", + "integrity": "sha512-3tBWGgz7M9RKLO6sPWC6c4pAw4geujSwQ7q7Si4d6bo0l6cLs4tmO+lnSwFp1Tm3lxwfMk0SgkJT7EdwYSJvcg==", "optional": true }, "@next/swc-linux-arm64-musl": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.1.tgz", - "integrity": "sha512-mVsGyMxTLWZXyD5sen6kGOTYVOO67lZjLApIj/JsTEEohDDt1im2nkspzfV5MvhfS7diDw6Rp/xvAQaWZTv1Ww==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.3.tgz", + "integrity": "sha512-v0v8Kb8j8T23jvVUWZeA2D8+izWspeyeDGNaT2/mTHWp7+37fiNfL8bmBWiOmeumXkacM/AB0XOUQvEbncSnHA==", "optional": true }, "@next/swc-linux-x64-gnu": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.1.tgz", - "integrity": "sha512-wMqf90uDWN001NqCM/auRl3+qVVeKfjJdT9XW+RMIOf+rhUzadmYJu++tp2y+hUbb6GTRhT+VjQzcgg/QTD9NQ==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.3.tgz", + "integrity": "sha512-VM1aE1tJKLBwMGtyBR21yy+STfl0MapMQnNrXkxeyLs0GFv/kZqXS5Jw/TQ3TSUnbv0QPDf/X8sDXuMtSgG6eg==", "optional": true }, "@next/swc-linux-x64-musl": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.1.tgz", - "integrity": "sha512-ol1X1e24w4j4QwdeNjfX0f+Nza25n+ymY0T2frTyalVczUmzkVD7QGgPTZMHfR1aLrO69hBs0G3QBYaj22J5GQ==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.3.tgz", + "integrity": "sha512-64EnmKy18MYFL5CzLaSuUn561hbO1Gk16jM/KHznYP3iCIfF9e3yULtHaMy0D8zbHfxset9LTOv6cuYKJgcOxg==", "optional": true }, "@next/swc-win32-arm64-msvc": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.1.tgz", - "integrity": "sha512-WEmTEeWs6yRUEnUlahTgvZteh5RJc4sEjCQIodJlZZ5/VJwVP8p2L7l6VhzQhT4h7KvLx/Ed4UViBdne6zpIsw==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.3.tgz", + "integrity": "sha512-WRDp8QrmsL1bbGtsh5GqQ/KWulmrnMBgbnb+59qNTW1kVi1nG/2ndZLkcbs2GX7NpFLlToLRMWSQXmPzQm4tog==", "optional": true }, "@next/swc-win32-ia32-msvc": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.1.tgz", - "integrity": "sha512-oFpHphN4ygAgZUKjzga7SoH2VGbEJXZa/KL8bHCAwCjDWle6R1SpiGOdUdA8EJ9YsG1TYWpzY6FTbUA+iAJeww==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.3.tgz", + "integrity": "sha512-EKffQeqCrj+t6qFFhIFTRoqb2QwX1mU7iTOvMyLbYw3QtqTw9sMwjykyiMlZlrfm2a4fA84+/aeW+PMg1MjuTg==", "optional": true }, "@next/swc-win32-x64-msvc": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.1.tgz", - "integrity": "sha512-FFp3nOJ/5qSpeWT0BZQ+YE1pSMk4IMpkME/1DwKBwhg4mJLB9L+6EXuJi4JEwaJdl5iN+UUlmUD3IsR1kx5fAg==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.3.tgz", + "integrity": "sha512-ERhKPSJ1vQrPiwrs15Pjz/rvDHZmkmvbf/BjPN/UCOI++ODftT0GtasDPi0j+y6PPJi5HsXw+dpRaXUaw4vjuQ==", "optional": true }, "@noble/hashes": { @@ -30115,15 +30342,15 @@ } }, "@types/bcryptjs": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-2.4.5.tgz", - "integrity": "sha512-tOF6TivOIvq+TWQm78335CMdyVJhpBG3NUdWQDAp95ax4E2rSKbws/ELHLk5EBoucwx/tHt3/hhLOHwWJgVrSw==", + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-2.4.6.tgz", + "integrity": "sha512-9xlo6R2qDs5uixm0bcIqCeMCE6HiQsIyel9KQySStiyqNl2tnj2mP3DX1Nf56MD6KMenNNlBBsy3LJ7gUEQPXQ==", "dev": true }, "@types/big.js": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@types/big.js/-/big.js-6.2.1.tgz", - "integrity": "sha512-dKzZVT10m3ELZgYIShPJ+3Os/E1s3aDQS+wr1ne7VCLU/8hc/R+z/+gkm9WabxSkV9E8wJhTl5wC+0fD9nitsw==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/@types/big.js/-/big.js-6.2.2.tgz", + "integrity": "sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==", "dev": true }, "@types/body-parser": { @@ -30149,9 +30376,9 @@ } }, "@types/cookie": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.3.tgz", - "integrity": "sha512-SLg07AS9z1Ab2LU+QxzU8RCmzsja80ywjf/t5oqw+4NSH20gIGlhLOrBDm1L3PBWzPa4+wkgFQVZAjE6Ioj2ug==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", "dev": true }, "@types/cookiejar": { @@ -30175,21 +30402,21 @@ } }, "@types/crypto-js": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.1.3.tgz", - "integrity": "sha512-YP1sYYayLe7Eg5oXyLLvOLfxBfZ5Fgpz6sVWkpB18wDMywCLPWmqzRz+9gyuOoLF0fzDTTFwlyNbx7koONUwqA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.1.tgz", + "integrity": "sha512-FSPGd9+OcSok3RsM0UZ/9fcvMOXJ1ENE/ZbLfOPlBWj7BgXtEAM8VYfTtT760GiLbQIMoVozwVuisjvsVwqYWw==", "dev": true }, "@types/d3-array": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.0.tgz", - "integrity": "sha512-tjU8juPSfhMnu6mJZPOCVVGba4rZoE0tjHDPb81PYwA8CzbaFscGjgkUM7juUJu6iWA1cCVWNEVwxZ5HN9Jj8Q==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", "dev": true }, "@types/d3-time-format": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.2.tgz", - "integrity": "sha512-wr08C1Gh77qaN8JIkrn5Rz/bdt5M9bdEqFmEOcYhUSq2t2sHvLTBfb4XAtGB3D4hm0ubj50NXWWXoXyp5tPXDg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", + "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==", "dev": true }, "@types/eslint": { @@ -30219,9 +30446,9 @@ "dev": true }, "@types/express": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.20.tgz", - "integrity": "sha512-rOaqlkgEvOW495xErXMsmyX3WKBInbhG5eqojXYi3cGUaLoRDlXa5d52fkfWZT963AZ3v2eZ4MbKE6WpDAGVsw==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "requires": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -30296,9 +30523,9 @@ } }, "@types/jest": { - "version": "29.5.7", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.7.tgz", - "integrity": "sha512-HLyetab6KVPSiF+7pFcUyMeLsx25LDNDemw9mGsJBkai/oouwrjTycocSDYopMEwFhN2Y4s9oPyOCZNofgSt2g==", + "version": "29.5.10", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.10.tgz", + "integrity": "sha512-tE4yxKEphEyxj9s4inideLHktW/x6DwesIwWZ9NN1FKf9zbJYsnhBoA9vrHA/IuIOKwPa5PcFBNV4lpMIOEzyQ==", "dev": true, "requires": { "expect": "^29.0.0", @@ -30306,15 +30533,15 @@ } }, "@types/js-cookie": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.5.tgz", - "integrity": "sha512-dtLshqoiGRDHbHueIT9sjkd2F4tW1qPSX2xKAQK8p1e6pM+Z913GM1shv7dOqqasEMYbC5zEaClJomQe8OtQLA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.6.tgz", + "integrity": "sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==", "dev": true }, "@types/js-yaml": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.8.tgz", - "integrity": "sha512-m6jnPk1VhlYRiLFm3f8X9Uep761f+CK8mHyS65LutH2OhmBF0BeMEjHgg05usH8PLZMWWc/BUR9RPmkvpWnyRA==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", "dev": true }, "@types/json-schema": { @@ -30336,18 +30563,17 @@ "dev": true }, "@types/jsonwebtoken": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.4.tgz", - "integrity": "sha512-8UYapdmR0QlxgvJmyE8lP7guxD0UGVMfknsdtCFZh4ovShdBl3iOI4zdvqBHrB/IS+xUj3PSx73Qkey1fhWz+g==", - "dev": true, + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.5.tgz", + "integrity": "sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==", "requires": { "@types/node": "*" } }, "@types/lodash": { - "version": "4.14.200", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.200.tgz", - "integrity": "sha512-YI/M/4HRImtNf3pJgbF+W6FrXovqj+T+/HpENLTooK9PnkacBsDpeP3IpHab40CClUfhNmdM2WTNP2sa2dni5Q==", + "version": "4.14.202", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", + "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==", "dev": true }, "@types/long": { @@ -30372,9 +30598,9 @@ "dev": true }, "@types/node": { - "version": "20.8.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz", - "integrity": "sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==", + "version": "20.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.1.tgz", + "integrity": "sha512-T2qwhjWwGH81vUEx4EXmBKsTJRXFXNZTL4v0gi01+zyBmCwzE6TyHszqX01m+QHTEq+EZNo13NeJIdEqf+Myrg==", "requires": { "undici-types": "~5.26.4" } @@ -30409,9 +30635,9 @@ "dev": true }, "@types/numeral": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/numeral/-/numeral-2.0.4.tgz", - "integrity": "sha512-lIsqeNjP4xtPplUyVrfYR08aZtkdMQyyet+8zd9xD8HVgNGcLdKhtb6A1qDQ15n+AgAMZQwimlaaNOktLQpb2A==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/numeral/-/numeral-2.0.5.tgz", + "integrity": "sha512-kH8I7OSSwQu9DS9JYdFWbuvhVzvFRoCPCkGxNwoGgaPeDfEPJlcxNvEOypZhQ3XXHsGbfIuYcxcJxKUfJHnRfw==", "dev": true }, "@types/parse-json": { @@ -30425,9 +30651,9 @@ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "@types/qrcode.react": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/qrcode.react/-/qrcode.react-1.0.4.tgz", - "integrity": "sha512-O35T9AJk0wg7ffkgpSQ4Zr7I7eEfEsTCD5u7V2dsvYnZLfUpQz2rLg5ZG2FM/zLmOF4sEE0FY6mxT9WleUDb3Q==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/qrcode.react/-/qrcode.react-1.0.5.tgz", + "integrity": "sha512-BghPtnlwvrvq8QkGa1H25YnN+5OIgCKFuQruncGWLGJYOzeSKiix/4+B9BtfKF2wf5ja8yfyWYA3OXju995G8w==", "dev": true, "requires": { "@types/react": "*" @@ -30453,9 +30679,9 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "@types/react": { - "version": "18.2.35", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.35.tgz", - "integrity": "sha512-LG3xpFZ++rTndV+/XFyX5vUP7NI9yxyk+MQvBDq+CVs8I9DLSc3Ymwb1Vmw5YDoeNeHN4PDZa3HylMKJYT9PNQ==", + "version": "18.2.39", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.39.tgz", + "integrity": "sha512-Oiw+ppED6IremMInLV4HXGbfbG6GyziY3kqAwJYOR0PNbkYDmLWQA3a95EhdSmamsvbkJN96ZNN+YD+fGjzSBA==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -30463,36 +30689,36 @@ } }, "@types/react-copy-to-clipboard": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.6.tgz", - "integrity": "sha512-x347Gy+ZG2dCMiWEHRwiIJ4uMlTmxW7yheRMSQbNf0mFkmXhnYE5nvRdt6SbnT6Z2dp7KPIr3CSvBgSiTIr9zw==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@types/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.7.tgz", + "integrity": "sha512-Gft19D+as4M+9Whq1oglhmK49vqPhcLzk8WfvfLvaYMIPYanyfLy0+CwFucMJfdKoSFyySPmkkWn8/E6voQXjQ==", "dev": true, "requires": { "@types/react": "*" } }, "@types/react-grid-layout": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@types/react-grid-layout/-/react-grid-layout-1.3.4.tgz", - "integrity": "sha512-ZQqOhkizXv8t8AWyH2OcdWxeDr08gJPp/hg4mLCOz1xz6McqQc6HLBEXDIc/r0YsMeIWKOD31Br8i4DA/gilbQ==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/react-grid-layout/-/react-grid-layout-1.3.5.tgz", + "integrity": "sha512-WH/po1gcEcoR6y857yAnPGug+ZhkF4PaTUxgAbwfeSH/QOgVSakKHBXoPGad/sEznmkiaK3pqHk+etdWisoeBQ==", "dev": true, "requires": { "@types/react": "*" } }, "@types/react-qr-reader": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@types/react-qr-reader/-/react-qr-reader-2.1.6.tgz", - "integrity": "sha512-KF3WXsCUczlVasxLTiXNy0bO3043g/qWyYdklFK2xyZuqVyQZyzAY5Cg0+55DZ1WFmyQoL5eIqWndnlMk6RyWg==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/react-qr-reader/-/react-qr-reader-2.1.7.tgz", + "integrity": "sha512-6K6DQeqP7c2oohcfvBpExlOawVsB2/C+7ZZL/fkCkNzYYAKDJnNHnuP3F5ChMl0mpoYEdqkqkllxqfM0VslEiw==", "dev": true, "requires": { "@types/react": "*" } }, "@types/react-slider": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/react-slider/-/react-slider-1.3.3.tgz", - "integrity": "sha512-UMzMsqZh3wzHM4h/3yy3xQKTa3DfjF+S4WLuryDCmOcufgX2m+bNjSQV/xWsKAMfV5DXucQBsFlIu9dcvS+e1A==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/react-slider/-/react-slider-1.3.5.tgz", + "integrity": "sha512-Hhp+YTvc1bALrow07DkpahC4KqlCwKem2/5MsP6AXoPBHBzfRB6OIv+Kr4DFqeP1onmUfdrN04DbyI9/QU6X1A==", "dev": true, "requires": { "@types/react": "*" @@ -30523,18 +30749,18 @@ "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, "@types/secp256k1": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.5.tgz", - "integrity": "sha512-aIonTBMErtE3T9MxDvTZRzcrT/mCqpEZBw3CCY/i+oG9n57N/+7obBkhFgavUAIrX21bU0LHg1XRgtaLdelBhA==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", + "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", "dev": true, "requires": { "@types/node": "*" } }, "@types/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==", + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", "dev": true }, "@types/send": { @@ -30562,9 +30788,9 @@ "dev": true }, "@types/styled-components": { - "version": "5.1.29", - "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.29.tgz", - "integrity": "sha512-5h/ah9PAblggQ6Laa4peplT4iY5ddA8qM1LMD4HzwToUWs3hftfy0fayeRgbtH1JZUdw5CCaowmz7Lnb8SjIxQ==", + "version": "5.1.32", + "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.32.tgz", + "integrity": "sha512-DqVpl8R0vbhVSop4120UHtGrFmHuPeoDwF4hDT0kPJTY8ty0SI38RV3VhCMsWigMUXG+kCXu7vMRqMFNy6eQgA==", "dev": true, "requires": { "@types/hoist-non-react-statics": "*", @@ -30573,9 +30799,9 @@ } }, "@types/styled-react-modal": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/styled-react-modal/-/styled-react-modal-1.2.4.tgz", - "integrity": "sha512-wDuLJybrrkdN6JvJAc+wuCfi8hi5Fx4dOFO4I/Edc+joEakY4uwIVWmT7Ax4s5pWICFzAOHbN8pEsBSxSoO06A==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/styled-react-modal/-/styled-react-modal-1.2.5.tgz", + "integrity": "sha512-Uzrn62S7FP7gkOF4HlYUT3RXJpOcSUnZQRMw9RQUyd5qoVGdBj81UMqZrI1q3x1fhV7J7XQY2jQaVS1Mp2VzIA==", "dev": true, "requires": { "@types/react": "*", @@ -30583,9 +30809,9 @@ } }, "@types/styled-theming": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/@types/styled-theming/-/styled-theming-2.2.7.tgz", - "integrity": "sha512-l7v5L5NtuI0fvWsnFO2v+D/BNs8JuooSWHBcPQf3S9kXK6j29pwpQTdeSBA8tIZOIJ0sGogFQNvLXSuayhl1Iw==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@types/styled-theming/-/styled-theming-2.2.8.tgz", + "integrity": "sha512-7X+Av6dDGR24WlEiTchEJ4wqnhT5LG+W/k1S/CkXWcewgwKsLW/uhU5RoNYpdnhWzB2WlV/qoOnQdVVi6NEd/w==", "dev": true, "requires": { "@types/styled-components": "*", @@ -30603,9 +30829,9 @@ } }, "@types/supertest": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.15.tgz", - "integrity": "sha512-jUCZZ/TMcpGzoSaed9Gjr8HCf3HehExdibyw3OHHEL1als1KmyzcOZZH4MjbObI8TkWsEr7bc7gsW0WTDni+qQ==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.16.tgz", + "integrity": "sha512-6c2ogktZ06tr2ENoZivgm7YnprnhYE4ZoXGMY+oA7IuAf17M8FWvujXZGmxLv8y0PTyts4x5A+erSwVUFA8XSg==", "dev": true, "requires": { "@types/superagent": "*" @@ -30617,15 +30843,15 @@ "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==" }, "@types/uuid": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.6.tgz", - "integrity": "sha512-BT2Krtx4xaO6iwzwMFUYvWBWkV2pr37zD68Vmp1CDV196MzczBRxuEpD6Pr395HAgebC/co7hOphs53r8V7jew==", + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.7.tgz", + "integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==", "dev": true }, "@types/ws": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.8.tgz", - "integrity": "sha512-flUksGIQCnJd6sZ1l5dqCEG/ksaoAg/eUwiLAGTJQcfgvZJKF++Ta4bJA6A5aPSJmsr+xlseHn4KLgVlNnvPTg==", + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.9.tgz", + "integrity": "sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg==", "requires": { "@types/node": "*" } @@ -30646,16 +30872,16 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.9.1.tgz", - "integrity": "sha512-w0tiiRc9I4S5XSXXrMHOWgHgxbrBn1Ro+PmiYhSg2ZVdxrAJtQgzU5o2m1BfP6UOn7Vxcc6152vFjQfmZR4xEg==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.13.1.tgz", + "integrity": "sha512-5bQDGkXaxD46bPvQt08BUz9YSaO4S0fB1LB5JHQuXTfkGPI3+UUeS387C/e9jRie5GqT8u5kFTrMvAjtX4O5kA==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.9.1", - "@typescript-eslint/type-utils": "6.9.1", - "@typescript-eslint/utils": "6.9.1", - "@typescript-eslint/visitor-keys": "6.9.1", + "@typescript-eslint/scope-manager": "6.13.1", + "@typescript-eslint/type-utils": "6.13.1", + "@typescript-eslint/utils": "6.13.1", + "@typescript-eslint/visitor-keys": "6.13.1", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -30665,54 +30891,54 @@ } }, "@typescript-eslint/parser": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.9.1.tgz", - "integrity": "sha512-C7AK2wn43GSaCUZ9do6Ksgi2g3mwFkMO3Cis96kzmgudoVaKyt62yNzJOktP0HDLb/iO2O0n2lBOzJgr6Q/cyg==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.13.1.tgz", + "integrity": "sha512-fs2XOhWCzRhqMmQf0eicLa/CWSaYss2feXsy7xBD/pLyWke/jCIVc2s1ikEAtSW7ina1HNhv7kONoEfVNEcdDQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "6.9.1", - "@typescript-eslint/types": "6.9.1", - "@typescript-eslint/typescript-estree": "6.9.1", - "@typescript-eslint/visitor-keys": "6.9.1", + "@typescript-eslint/scope-manager": "6.13.1", + "@typescript-eslint/types": "6.13.1", + "@typescript-eslint/typescript-estree": "6.13.1", + "@typescript-eslint/visitor-keys": "6.13.1", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.9.1.tgz", - "integrity": "sha512-38IxvKB6NAne3g/+MyXMs2Cda/Sz+CEpmm+KLGEM8hx/CvnSRuw51i8ukfwB/B/sESdeTGet1NH1Wj7I0YXswg==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.13.1.tgz", + "integrity": "sha512-BW0kJ7ceiKi56GbT2KKzZzN+nDxzQK2DS6x0PiSMPjciPgd/JRQGMibyaN2cPt2cAvuoH0oNvn2fwonHI+4QUQ==", "dev": true, "requires": { - "@typescript-eslint/types": "6.9.1", - "@typescript-eslint/visitor-keys": "6.9.1" + "@typescript-eslint/types": "6.13.1", + "@typescript-eslint/visitor-keys": "6.13.1" } }, "@typescript-eslint/type-utils": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.9.1.tgz", - "integrity": "sha512-eh2oHaUKCK58qIeYp19F5V5TbpM52680sB4zNSz29VBQPTWIlE/hCj5P5B1AChxECe/fmZlspAWFuRniep1Skg==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.13.1.tgz", + "integrity": "sha512-A2qPlgpxx2v//3meMqQyB1qqTg1h1dJvzca7TugM3Yc2USDY+fsRBiojAEo92HO7f5hW5mjAUF6qobOPzlBCBQ==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "6.9.1", - "@typescript-eslint/utils": "6.9.1", + "@typescript-eslint/typescript-estree": "6.13.1", + "@typescript-eslint/utils": "6.13.1", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" } }, "@typescript-eslint/types": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.9.1.tgz", - "integrity": "sha512-BUGslGOb14zUHOUmDB2FfT6SI1CcZEJYfF3qFwBeUrU6srJfzANonwRYHDpLBuzbq3HaoF2XL2hcr01c8f8OaQ==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.13.1.tgz", + "integrity": "sha512-gjeEskSmiEKKFIbnhDXUyiqVma1gRCQNbVZ1C8q7Zjcxh3WZMbzWVfGE9rHfWd1msQtPS0BVD9Jz9jded44eKg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.1.tgz", - "integrity": "sha512-U+mUylTHfcqeO7mLWVQ5W/tMLXqVpRv61wm9ZtfE5egz7gtnmqVIw9ryh0mgIlkKk9rZLY3UHygsBSdB9/ftyw==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.13.1.tgz", + "integrity": "sha512-sBLQsvOC0Q7LGcUHO5qpG1HxRgePbT6wwqOiGLpR8uOJvPJbfs0mW3jPA3ujsDvfiVwVlWUDESNXv44KtINkUQ==", "dev": true, "requires": { - "@typescript-eslint/types": "6.9.1", - "@typescript-eslint/visitor-keys": "6.9.1", + "@typescript-eslint/types": "6.13.1", + "@typescript-eslint/visitor-keys": "6.13.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -30721,27 +30947,27 @@ } }, "@typescript-eslint/utils": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.9.1.tgz", - "integrity": "sha512-L1T0A5nFdQrMVunpZgzqPL6y2wVreSyHhKGZryS6jrEN7bD9NplVAyMryUhXsQ4TWLnZmxc2ekar/lSGIlprCA==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.13.1.tgz", + "integrity": "sha512-ouPn/zVoan92JgAegesTXDB/oUp6BP1v8WpfYcqh649ejNc9Qv+B4FF2Ff626kO1xg0wWwwG48lAJ4JuesgdOw==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.9.1", - "@typescript-eslint/types": "6.9.1", - "@typescript-eslint/typescript-estree": "6.9.1", + "@typescript-eslint/scope-manager": "6.13.1", + "@typescript-eslint/types": "6.13.1", + "@typescript-eslint/typescript-estree": "6.13.1", "semver": "^7.5.4" } }, "@typescript-eslint/visitor-keys": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.1.tgz", - "integrity": "sha512-MUaPUe/QRLEffARsmNfmpghuQkW436DvESW+h+M52w0coICHRfD6Np9/K6PdACwnrq1HmuLl+cSPZaJmeVPkSw==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.13.1.tgz", + "integrity": "sha512-NDhQUy2tg6XGNBGDRm1XybOHSia8mcXmlbKWoQP+nm1BIIMxa55shyJfZkHpEBN62KNPLrocSM2PdPcaLgDKMQ==", "dev": true, "requires": { - "@typescript-eslint/types": "6.9.1", + "@typescript-eslint/types": "6.13.1", "eslint-visitor-keys": "^3.4.1" } }, @@ -30947,10 +31173,18 @@ "tslib": "^2.3.1" } }, + "@wry/caches": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@wry/caches/-/caches-1.0.1.tgz", + "integrity": "sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA==", + "requires": { + "tslib": "^2.3.0" + } + }, "@wry/context": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.7.3.tgz", - "integrity": "sha512-Nl8WTesHp89RF803Se9X3IiHjdmLBrIvPMaJkl+rKVJAYyPsz1TEUbu89943HpvujtSJgDUx9W4vZw3K1Mr3sA==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.7.4.tgz", + "integrity": "sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ==", "requires": { "tslib": "^2.3.0" } @@ -30964,9 +31198,9 @@ } }, "@wry/trie": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.4.3.tgz", - "integrity": "sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.5.0.tgz", + "integrity": "sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA==", "requires": { "tslib": "^2.3.0" } @@ -31165,14 +31399,14 @@ } }, "apollo-server": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-3.12.1.tgz", - "integrity": "sha512-wgxx+J8KPTkhepi4qI9qY1xNoYzJfmvRKVUdFmFCZ3lyPO2j/+oOnAnyEVruAIQU5gquK10B0jdwVyvese9J/g==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-3.13.0.tgz", + "integrity": "sha512-hgT/MswNB5G1r+oBhggVX4Fjw53CFLqG15yB5sN+OrYkCVWF5YwPbJWHfSWa7699JMEXJGaoVfFzcvLZK0UlDg==", "dev": true, "requires": { "@types/express": "4.17.14", - "apollo-server-core": "^3.12.1", - "apollo-server-express": "^3.12.1", + "apollo-server-core": "^3.13.0", + "apollo-server-express": "^3.13.0", "express": "^4.17.1" }, "dependencies": { @@ -31191,9 +31425,9 @@ } }, "apollo-server-core": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.12.1.tgz", - "integrity": "sha512-9SF5WAkkV0FZQ2HVUWI9Jada1U0jg7e8NCN9EklbtvaCeUlOLyXyM+KCWuZ7+dqHxjshbtcwylPHutt3uzoNkw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.13.0.tgz", + "integrity": "sha512-v/g6DR6KuHn9DYSdtQijz8dLOkP78I5JSVJzPkARhDbhpH74QNwrQ2PP2URAPPEDJ2EeZNQDX8PvbYkAKqg+kg==", "requires": { "@apollo/utils.keyvaluecache": "^1.0.1", "@apollo/utils.logger": "^1.0.0", @@ -31245,9 +31479,9 @@ "requires": {} }, "apollo-server-express": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.12.1.tgz", - "integrity": "sha512-5A9efrhEXqDx08BnORWf0zPYCABENqur47VZZW8osQpSSnMINqzJiV5RMrzz8wIznecRRhEcz+BqLdiexqZdgg==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.13.0.tgz", + "integrity": "sha512-iSxICNbDUyebOuM8EKb3xOrpIwOQgKxGbR2diSr4HP3IW8T3njKFOoMce50vr+moOCe1ev8BnLcw9SNbuUtf7g==", "requires": { "@types/accepts": "^1.3.5", "@types/body-parser": "1.19.2", @@ -31255,7 +31489,7 @@ "@types/express": "4.17.14", "@types/express-serve-static-core": "4.17.31", "accepts": "^1.3.5", - "apollo-server-core": "^3.12.1", + "apollo-server-core": "^3.13.0", "apollo-server-types": "^3.8.0", "body-parser": "^1.19.0", "cors": "^2.8.5", @@ -31736,9 +31970,9 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "balanceofsatoshis": { - "version": "17.3.0", - "resolved": "https://registry.npmjs.org/balanceofsatoshis/-/balanceofsatoshis-17.3.0.tgz", - "integrity": "sha512-QwZIsPr1P0uqpLCo9B4JPXAF7EsTrhKrlArQ4S/Xkwy5DF3lihdEj9a7Q5EdNUBeIcBeYpD0QX+YwXETFa/yXg==", + "version": "17.5.2", + "resolved": "https://registry.npmjs.org/balanceofsatoshis/-/balanceofsatoshis-17.5.2.tgz", + "integrity": "sha512-qE6RJW8/UwSg0gh/7lWO8bpgD60rgvZZP/kv7imh1qlIUXSj5z1ndrKTwLqbqfWZGrDawgupIajk0P+OR5azUQ==", "requires": { "@alexbosworth/blockchain": "1.7.0", "@alexbosworth/caporal": "1.4.4", @@ -31765,11 +31999,11 @@ "hot-formula-parser": "4.0.0", "import-lazy": "4.0.0", "ini": "4.1.1", - "inquirer": "9.2.11", + "inquirer": "9.2.12", "ln-accounting": "7.0.2", - "ln-service": "57.1.0", + "ln-service": "57.1.2", "ln-sync": "6.0.0", - "ln-telegram": "6.0.0", + "ln-telegram": "6.1.1", "moment": "2.29.4", "paid-services": "5.0.5", "probing": "4.0.0", @@ -32012,11 +32246,11 @@ } }, "inquirer": { - "version": "9.2.11", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.11.tgz", - "integrity": "sha512-B2LafrnnhbRzCWfAdOXisUzL89Kg8cVJlYmhqoi3flSiV/TveO+nsXwgKr9h9PIo+J1hz7nBSk6gegRIMBBf7g==", + "version": "9.2.12", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.12.tgz", + "integrity": "sha512-mg3Fh9g2zfuVWJn6lhST0O7x4n03k7G8Tx5nvikJkbq8/CK47WDVm+UznF0G6s5Zi0KcyUisr6DU8T67N5U+1Q==", "requires": { - "@ljharb/through": "^2.3.9", + "@ljharb/through": "^2.3.11", "ansi-escapes": "^4.3.2", "chalk": "^5.3.0", "cli-cursor": "^3.1.0", @@ -33350,9 +33584,9 @@ } }, "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==" }, "cookie-signature": { "version": "1.0.6", @@ -33485,7 +33719,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/cross-inspect/-/cross-inspect-1.0.0.tgz", "integrity": "sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ==", - "dev": true, "requires": { "tslib": "^2.4.0" } @@ -34202,15 +34435,15 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "eslint": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz", - "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz", + "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.3", - "@eslint/js": "8.53.0", + "@eslint/js": "8.54.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -34327,12 +34560,12 @@ } }, "eslint-config-next": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.0.1.tgz", - "integrity": "sha512-QfIFK2WD39H4WOespjgf6PLv9Bpsd7KGGelCtmq4l67nGvnlsGpuvj0hIT+aIy6p5gKH+lAChYILsyDlxP52yg==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.0.3.tgz", + "integrity": "sha512-IKPhpLdpSUyKofmsXUfrvBC49JMUTdeaD8ZIH4v9Vk0sC1X6URTuTJCLtA0Vwuj7V/CQh0oISuSTvNn5//Buew==", "dev": true, "requires": { - "@next/eslint-plugin-next": "14.0.1", + "@next/eslint-plugin-next": "14.0.3", "@rushstack/eslint-patch": "^1.3.3", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", "eslint-import-resolver-node": "^0.3.6", @@ -34810,6 +35043,11 @@ "vary": "~1.1.2" }, "dependencies": { + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -34874,9 +35112,9 @@ "integrity": "sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg==" }, "fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -35565,9 +35803,9 @@ } }, "@types/express-serve-static-core": { - "version": "4.17.39", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz", - "integrity": "sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ==", + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", "requires": { "@types/node": "*", "@types/qs": "*", @@ -37507,16 +37745,16 @@ } }, "lightning": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/lightning/-/lightning-10.1.1.tgz", - "integrity": "sha512-1dNs3Kecpdld5JbHbJ7lyRtvVxndraqHOeN2I2ACXAY0lD2gjBZRMyCSZI+50OK09V1BRcn6iZYVH/Ej8Qg7gw==", + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/lightning/-/lightning-10.1.3.tgz", + "integrity": "sha512-Vuo30bZeW4rtvnG52kkIP8u+cAWkrLT6KIejPUvhbiYCAamKCfGC+vhQ8euaI8z8BynXToJCIlbRk6/YDHLCZw==", "requires": { - "@grpc/grpc-js": "1.9.9", + "@grpc/grpc-js": "1.9.11", "@grpc/proto-loader": "0.7.10", - "@types/node": "20.8.10", - "@types/request": "2.48.11", - "@types/ws": "8.5.8", - "async": "3.2.4", + "@types/node": "20.9.2", + "@types/request": "2.48.12", + "@types/ws": "8.5.9", + "async": "3.2.5", "asyncjs-util": "1.2.12", "bitcoinjs-lib": "6.1.5", "bn.js": "5.2.1", @@ -37526,13 +37764,21 @@ "invoices": "3.0.0", "psbt": "3.0.0", "tiny-secp256k1": "2.2.3", - "type-fest": "4.6.0" + "type-fest": "4.8.1" }, "dependencies": { + "@types/node": { + "version": "20.9.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.2.tgz", + "integrity": "sha512-WHZXKFCEyIUJzAwh3NyyTHYSR35SevJ6mZ1nWwJafKtiQbqRTIKSRcw3Ma3acqgsent3RRDqeVwpHntMk+9irg==", + "requires": { + "undici-types": "~5.26.4" + } + }, "@types/request": { - "version": "2.48.11", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.11.tgz", - "integrity": "sha512-HuihY1+Vss5RS9ZHzRyTGIzwPTdrJBkCm/mAeLRYrOQu/MGqyezKXWOK1VhCnR+SDbp9G2mRUP+OVEqCrzpcfA==", + "version": "2.48.12", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz", + "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==", "requires": { "@types/caseless": "*", "@types/node": "*", @@ -37540,6 +37786,11 @@ "form-data": "^2.5.0" } }, + "async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + }, "base-x": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", @@ -37645,9 +37896,9 @@ } }, "type-fest": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.6.0.tgz", - "integrity": "sha512-rLjWJzQFOq4xw7MgJrCZ6T1jIOvvYElXT12r+y0CC6u67hegDHaxcPqb2fZHOGlqxugGQPNB1EnTezjBetkwkw==" + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.8.1.tgz", + "integrity": "sha512-ShaaYnjf+0etG8W/FumARKMjjIToy/haCaTjN2dvcewOSoNqCQzdgG7m2JVOlM5qndGTHjkvsrWZs+k/2Z7E0Q==" } } }, @@ -37663,9 +37914,9 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "lint-staged": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.0.2.tgz", - "integrity": "sha512-vnEy7pFTHyVuDmCAIFKR5QDO8XLVlPFQQyujQ/STOxe40ICWqJ6knS2wSJ/ffX/Lw0rz83luRDh+ET7toN+rOw==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.1.0.tgz", + "integrity": "sha512-ZPKXWHVlL7uwVpy8OZ7YQjYDAuO5X4kMh0XgZvPNxLcCCngd0PO5jKQyy3+s4TL2EnHoIXIzP1422f/l3nZKMw==", "dev": true, "requires": { "chalk": "5.3.0", @@ -37677,7 +37928,7 @@ "micromatch": "4.0.5", "pidtree": "0.6.0", "string-argv": "0.3.2", - "yaml": "2.3.3" + "yaml": "2.3.4" }, "dependencies": { "ansi-escapes": { @@ -37903,9 +38154,9 @@ } }, "yaml": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz", - "integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", "dev": true } } @@ -38023,9 +38274,9 @@ } }, "@types/express-serve-static-core": { - "version": "4.17.39", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz", - "integrity": "sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ==", + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", "requires": { "@types/node": "*", "@types/qs": "*", @@ -38237,16 +38488,121 @@ } }, "ln-service": { - "version": "57.1.0", - "resolved": "https://registry.npmjs.org/ln-service/-/ln-service-57.1.0.tgz", - "integrity": "sha512-7vKg0PfiadjBh3K9//1+Vod9OAzZ65kRkWG+1TVVQZKMP+WDLHOgdMDVaITmIAIyVuJjr3g47xK7lNGijM2wAQ==", + "version": "57.1.2", + "resolved": "https://registry.npmjs.org/ln-service/-/ln-service-57.1.2.tgz", + "integrity": "sha512-RBLhyicjP6+LYHIWm7g55xdRykHND5hOngDa989RlfWRAXkJjPYilCqnvgtt1jse4vH1u/er34gqct28D7O3WQ==", "requires": { "bolt07": "1.8.4", "invoices": "3.0.0", - "lightning": "10.1.0", + "lightning": "10.1.3", "macaroon": "3.0.4" }, "dependencies": { + "base-x": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", + "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" + }, + "bitcoinjs-lib": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.3.tgz", + "integrity": "sha512-TYXs/Qf+GNk2nnsB9HrXWqzFuEgCg0Gx+v3UW3B8VuceFHXVvhT+7hRnTSvwkX0i8rz2rtujeU6gFaDcFqYFDw==", + "requires": { + "@noble/hashes": "^1.2.0", + "bech32": "^2.0.0", + "bip174": "^2.1.0", + "bs58check": "^3.0.1", + "typeforce": "^1.11.3", + "varuint-bitcoin": "^1.1.2" + } + }, + "bolt07": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/bolt07/-/bolt07-1.8.4.tgz", + "integrity": "sha512-UyZRSYmVE8K++Jg1BiJrUkxQak03aS/s7ESKDsBdBPzaTlk2E09Y0JYa9HhWN7MRn48Y2K1doOzkb1Hn6XixZw==", + "requires": { + "bn.js": "5.2.1" + } + }, + "bolt09": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bolt09/-/bolt09-1.0.0.tgz", + "integrity": "sha512-J8wh6mRTNnYJuC43iSJRvM2Te0RtO4+Cn0JCgF6q2xWXKWjZjdPV5AGamD8R8C39/Ei6L0I780aFvIZu+bATWw==" + }, + "bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "requires": { + "base-x": "^4.0.0" + } + }, + "bs58check": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-3.0.1.tgz", + "integrity": "sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==", + "requires": { + "@noble/hashes": "^1.2.0", + "bs58": "^5.0.0" + } + }, + "invoices": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/invoices/-/invoices-3.0.0.tgz", + "integrity": "sha512-/WDTkfU2RMelQpQ54BwZssqGXYNWbPnWkZ/9QV57vAvD3RLdCDbhDuucOGti8CK3sgk8nmhRV6V0WfMrxojMmA==", + "requires": { + "bech32": "2.0.0", + "bitcoinjs-lib": "6.1.3", + "bn.js": "5.2.1", + "bolt07": "1.8.4", + "bolt09": "1.0.0", + "tiny-secp256k1": "2.2.2" + } + }, + "tiny-secp256k1": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-2.2.2.tgz", + "integrity": "sha512-KP3eqslmiUH9jxhyQuLY+GqI4wt1EiHWNHHqKVUxCZV41+MT+esucaK4mb6Ji0vKWVKBffJ6tlxU83Pq5TIUwg==", + "requires": { + "uint8array-tools": "0.0.7" + } + } + } + }, + "ln-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ln-sync/-/ln-sync-6.0.0.tgz", + "integrity": "sha512-bbM0hSHDD96jbagTicXQ0PF9utg+6dN7l9OmHMaCpLU7kyyUdwJzyM7Il6boBd4TaTCpz7Ct7znURH0mkwqiFg==", + "requires": { + "async": "3.2.5", + "asyncjs-util": "1.2.12", + "bech32": "2.0.0", + "bitcoinjs-lib": "6.1.5", + "bolt07": "1.8.4", + "colorette": "2.0.20", + "ecpair": "2.1.0", + "ln-service": "57.1.0", + "psbt": "3.0.0", + "tiny-secp256k1": "2.2.3" + }, + "dependencies": { + "@grpc/grpc-js": { + "version": "1.9.9", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.9.tgz", + "integrity": "sha512-vQ1qwi/Kiyprt+uhb1+rHMpyk4CVRMTGNUGGPRGS7pLNfWkdCHrGEnT6T3/JyC2VZgoOX/X1KwdoU0WYQAeYcQ==", + "requires": { + "@grpc/proto-loader": "^0.7.8", + "@types/node": ">=12.12.47" + } + }, + "@types/node": { + "version": "20.8.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz", + "integrity": "sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==", + "requires": { + "undici-types": "~5.26.4" + } + }, "@types/request": { "version": "2.48.11", "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.11.tgz", @@ -38258,6 +38614,19 @@ "form-data": "^2.5.0" } }, + "@types/ws": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.8.tgz", + "integrity": "sha512-flUksGIQCnJd6sZ1l5dqCEG/ksaoAg/eUwiLAGTJQcfgvZJKF++Ta4bJA6A5aPSJmsr+xlseHn4KLgVlNnvPTg==", + "requires": { + "@types/node": "*" + } + }, + "async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + }, "base-x": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", @@ -38352,6 +38721,11 @@ "type-fest": "4.6.0" }, "dependencies": { + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, "bolt09": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/bolt09/-/bolt09-2.0.0.tgz", @@ -38359,6 +38733,17 @@ } } }, + "ln-service": { + "version": "57.1.0", + "resolved": "https://registry.npmjs.org/ln-service/-/ln-service-57.1.0.tgz", + "integrity": "sha512-7vKg0PfiadjBh3K9//1+Vod9OAzZ65kRkWG+1TVVQZKMP+WDLHOgdMDVaITmIAIyVuJjr3g47xK7lNGijM2wAQ==", + "requires": { + "bolt07": "1.8.4", + "invoices": "3.0.0", + "lightning": "10.1.0", + "macaroon": "3.0.4" + } + }, "psbt": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/psbt/-/psbt-3.0.0.tgz", @@ -38395,20 +38780,20 @@ } }, "ln-telegram": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/ln-telegram/-/ln-telegram-6.0.0.tgz", - "integrity": "sha512-8vhxoeU0yVOH4wR0YV2Gv3yb4uM9YMS2PMerJ+1eA0p3ep8MWU2/YHugoII9/lxwkKHEU4P2NSlQp2a6mspumg==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/ln-telegram/-/ln-telegram-6.1.1.tgz", + "integrity": "sha512-53eF9YdDI6Dh63xouOGKrrT9B7Qy9mj4JvFZVpYQ0GzH3+G7eWI62wu4InsnXRiEqsaJR9PsxEJSWcJ52NluaQ==", "requires": { "@alexbosworth/fiat": "2.0.0", - "async": "3.2.4", + "async": "3.2.5", "asyncjs-util": "1.2.12", "bolt07": "1.8.4", "goldengate": "13.0.2", "grammy": "1.19.2", "ln-accounting": "7.0.2", - "ln-service": "57.1.0", - "ln-sync": "5.2.3", - "luxon": "3.4.3", + "ln-service": "57.1.1", + "ln-sync": "6.0.0", + "luxon": "3.4.4", "paid-services": "5.0.5", "table": "6.8.1" }, @@ -38446,9 +38831,9 @@ } }, "@types/express-serve-static-core": { - "version": "4.17.39", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz", - "integrity": "sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ==", + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", "requires": { "@types/node": "*", "@types/qs": "*", @@ -38457,18 +38842,29 @@ } }, "@types/node": { - "version": "20.3.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.2.tgz", - "integrity": "sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==" + "version": "20.8.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz", + "integrity": "sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==", + "requires": { + "undici-types": "~5.26.4" + } }, - "@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "@types/request": { + "version": "2.48.12", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz", + "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==", "requires": { - "@types/node": "*" + "@types/caseless": "*", + "@types/node": "*", + "@types/tough-cookie": "*", + "form-data": "^2.5.0" } }, + "async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + }, "base-x": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", @@ -38591,6 +38987,62 @@ "varuint-bitcoin": "1.1.2" }, "dependencies": { + "@types/node": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.2.tgz", + "integrity": "sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==" + }, + "@types/request": { + "version": "2.48.8", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.8.tgz", + "integrity": "sha512-whjk1EDJPcAR2kYHRbFl/lKeeKYTi05A15K9bnLInCVroNDCtXce57xKdI0/rQaA3K+6q0eFyUBPmqfSndUZdQ==", + "requires": { + "@types/caseless": "*", + "@types/node": "*", + "@types/tough-cookie": "*", + "form-data": "^2.5.0" + } + }, + "@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "requires": { + "@types/node": "*" + } + }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "lightning": { + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/lightning/-/lightning-9.8.0.tgz", + "integrity": "sha512-VJhAL13nuWLHr2hJSDbX5gweh2P1AiCBVG85ZPXR0Gf6/x1eTn1RWLRMxgk+5oiuAKa88GcAHXPYpQjWhKyOnQ==", + "requires": { + "@grpc/grpc-js": "1.8.17", + "@grpc/proto-loader": "0.7.7", + "@types/express": "4.17.17", + "@types/node": "20.3.2", + "@types/request": "2.48.8", + "@types/ws": "8.5.5", + "async": "3.2.4", + "asyncjs-util": "1.2.12", + "bitcoinjs-lib": "6.1.3", + "bn.js": "5.2.1", + "body-parser": "1.20.2", + "bolt07": "1.8.4", + "bolt09": "1.0.0", + "cbor": "9.0.0", + "ecpair": "2.1.0", + "express": "4.18.2", + "invoices": "3.0.0", + "psbt": "3.0.0", + "tiny-secp256k1": "2.2.3", + "type-fest": "3.12.0" + } + }, "ln-service": { "version": "56.8.0", "resolved": "https://registry.npmjs.org/ln-service/-/ln-service-56.8.0.tgz", @@ -38605,6 +39057,28 @@ "morgan": "1.10.0", "ws": "8.13.0" } + }, + "ln-sync": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/ln-sync/-/ln-sync-5.2.3.tgz", + "integrity": "sha512-8UCQFd0D2BaGXnjhByUsA9Y1zBj4JJ6TTQjFv67tuwspd9Vvo75xO50ABFljD1/5uu4hrq0xRSZs3AjtwYyk3g==", + "requires": { + "async": "3.2.4", + "asyncjs-util": "1.2.12", + "bech32": "2.0.0", + "bitcoinjs-lib": "6.1.3", + "bolt07": "1.8.4", + "colorette": "2.0.20", + "ecpair": "2.1.0", + "ln-service": "56.8.0", + "psbt": "3.0.0", + "tiny-secp256k1": "2.2.3" + } + }, + "type-fest": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.12.0.tgz", + "integrity": "sha512-qj9wWsnFvVEMUDbESiilKeXeHL7FwwiFcogfhfyjmvT968RXSvnl23f1JOClTHYItsi7o501C/7qVllscUP3oA==" } } }, @@ -38632,66 +39106,84 @@ } }, "lightning": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/lightning/-/lightning-9.8.0.tgz", - "integrity": "sha512-VJhAL13nuWLHr2hJSDbX5gweh2P1AiCBVG85ZPXR0Gf6/x1eTn1RWLRMxgk+5oiuAKa88GcAHXPYpQjWhKyOnQ==", + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/lightning/-/lightning-10.1.2.tgz", + "integrity": "sha512-L8sEyHVhyrvTr9KFmCbphfMDTf6KovdkJ8XVD2KyaT0upTlAiXmD+vBg+5X+wP4y85M+Lbe5svzUIvNWDgbl8w==", "requires": { - "@grpc/grpc-js": "1.8.17", - "@grpc/proto-loader": "0.7.7", - "@types/express": "4.17.17", - "@types/node": "20.3.2", - "@types/request": "2.48.8", - "@types/ws": "8.5.5", - "async": "3.2.4", + "@grpc/grpc-js": "1.9.9", + "@grpc/proto-loader": "0.7.10", + "@types/node": "20.8.10", + "@types/request": "2.48.12", + "@types/ws": "8.5.9", + "async": "3.2.5", "asyncjs-util": "1.2.12", - "bitcoinjs-lib": "6.1.3", + "bitcoinjs-lib": "6.1.5", "bn.js": "5.2.1", - "body-parser": "1.20.2", "bolt07": "1.8.4", - "bolt09": "1.0.0", - "cbor": "9.0.0", + "bolt09": "2.0.0", "ecpair": "2.1.0", - "express": "4.18.2", "invoices": "3.0.0", "psbt": "3.0.0", "tiny-secp256k1": "2.2.3", - "type-fest": "3.12.0" - } - }, - "ln-sync": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/ln-sync/-/ln-sync-5.2.3.tgz", - "integrity": "sha512-8UCQFd0D2BaGXnjhByUsA9Y1zBj4JJ6TTQjFv67tuwspd9Vvo75xO50ABFljD1/5uu4hrq0xRSZs3AjtwYyk3g==", - "requires": { - "async": "3.2.4", - "asyncjs-util": "1.2.12", - "bech32": "2.0.0", - "bitcoinjs-lib": "6.1.3", - "bolt07": "1.8.4", - "colorette": "2.0.20", - "ecpair": "2.1.0", - "ln-service": "56.8.0", - "psbt": "3.0.0", - "tiny-secp256k1": "2.2.3" + "type-fest": "4.7.1" }, "dependencies": { - "ln-service": { - "version": "56.8.0", - "resolved": "https://registry.npmjs.org/ln-service/-/ln-service-56.8.0.tgz", - "integrity": "sha512-TWKfTVMhEb7Df7xB6z3/fiNTaBONwyoqYWgl7dZ9JbdOMLrhtX0y9OJAsFWAgIo0SYDjO2MM7sq1UDfLf3Zcqg==", + "@grpc/grpc-js": { + "version": "1.9.9", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.9.tgz", + "integrity": "sha512-vQ1qwi/Kiyprt+uhb1+rHMpyk4CVRMTGNUGGPRGS7pLNfWkdCHrGEnT6T3/JyC2VZgoOX/X1KwdoU0WYQAeYcQ==", "requires": { - "bolt07": "1.8.4", - "cors": "2.8.5", - "express": "4.18.2", - "invoices": "3.0.0", - "lightning": "9.8.0", - "macaroon": "3.0.4", - "morgan": "1.10.0", - "ws": "8.13.0" + "@grpc/proto-loader": "^0.7.8", + "@types/node": ">=12.12.47" + } + }, + "@grpc/proto-loader": { + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.10.tgz", + "integrity": "sha512-CAqDfoaQ8ykFd9zqBDn4k6iWT9loLAlc2ETmDFS9JCD70gDcnA4L3AFEo2iV7KyAtAAHFW9ftq1Fz+Vsgq80RQ==", + "requires": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.4", + "yargs": "^17.7.2" } + }, + "bitcoinjs-lib": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.5.tgz", + "integrity": "sha512-yuf6xs9QX/E8LWE2aMJPNd0IxGofwfuVOiYdNUESkc+2bHHVKjhJd8qewqapeoolh9fihzHGoDCB5Vkr57RZCQ==", + "requires": { + "@noble/hashes": "^1.2.0", + "bech32": "^2.0.0", + "bip174": "^2.1.1", + "bs58check": "^3.0.1", + "typeforce": "^1.11.3", + "varuint-bitcoin": "^1.1.2" + } + }, + "bolt09": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bolt09/-/bolt09-2.0.0.tgz", + "integrity": "sha512-QtQiDx/nLMMwj+eaJ2tl2UoMa/8K2d8TfRVznHL0DP3cE/bYl4dPueQvSjqej9FVj+iMtrkpkIE5InuodpHmpg==" + }, + "long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" } } }, + "ln-service": { + "version": "57.1.1", + "resolved": "https://registry.npmjs.org/ln-service/-/ln-service-57.1.1.tgz", + "integrity": "sha512-CcSF0cioMx7xUvhuex1i/RtUdOdf8cMX9T8hxXB4kEBzAx5ne9hOeROhhAWBR53IdMTe5ep+4l1uChAsA6O47Q==", + "requires": { + "bolt07": "1.8.4", + "invoices": "3.0.0", + "lightning": "10.1.2", + "macaroon": "3.0.4" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -38730,9 +39222,9 @@ } }, "type-fest": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.12.0.tgz", - "integrity": "sha512-qj9wWsnFvVEMUDbESiilKeXeHL7FwwiFcogfhfyjmvT968RXSvnl23f1JOClTHYItsi7o501C/7qVllscUP3oA==" + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.7.1.tgz", + "integrity": "sha512-iWr8RUmzAJRfhZugX9O7nZE6pCxDU8CZ3QxsLuTnGcBLJpCaP2ll3s4eMTBoFnU/CeXY/5rfQSuAEsTGJO4y8A==" }, "ws": { "version": "8.13.0", @@ -39010,9 +39502,9 @@ } }, "luxon": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz", - "integrity": "sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg==" + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz", + "integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==" }, "macaroon": { "version": "3.0.4", @@ -39479,20 +39971,20 @@ } }, "next": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/next/-/next-14.0.1.tgz", - "integrity": "sha512-s4YaLpE4b0gmb3ggtmpmV+wt+lPRuGtANzojMQ2+gmBpgX9w5fTbjsy6dXByBuENsdCX5pukZH/GxdFgO62+pA==", - "requires": { - "@next/env": "14.0.1", - "@next/swc-darwin-arm64": "14.0.1", - "@next/swc-darwin-x64": "14.0.1", - "@next/swc-linux-arm64-gnu": "14.0.1", - "@next/swc-linux-arm64-musl": "14.0.1", - "@next/swc-linux-x64-gnu": "14.0.1", - "@next/swc-linux-x64-musl": "14.0.1", - "@next/swc-win32-arm64-msvc": "14.0.1", - "@next/swc-win32-ia32-msvc": "14.0.1", - "@next/swc-win32-x64-msvc": "14.0.1", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/next/-/next-14.0.3.tgz", + "integrity": "sha512-AbYdRNfImBr3XGtvnwOxq8ekVCwbFTv/UJoLwmaX89nk9i051AEY4/HAWzU0YpaTDw8IofUpmuIlvzWF13jxIw==", + "requires": { + "@next/env": "14.0.3", + "@next/swc-darwin-arm64": "14.0.3", + "@next/swc-darwin-x64": "14.0.3", + "@next/swc-linux-arm64-gnu": "14.0.3", + "@next/swc-linux-arm64-musl": "14.0.3", + "@next/swc-linux-x64-gnu": "14.0.3", + "@next/swc-linux-x64-musl": "14.0.3", + "@next/swc-win32-arm64-msvc": "14.0.3", + "@next/swc-win32-ia32-msvc": "14.0.3", + "@next/swc-win32-x64-msvc": "14.0.3", "@swc/helpers": "0.5.2", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001406", @@ -39756,13 +40248,24 @@ } }, "optimism": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.17.5.tgz", - "integrity": "sha512-TEcp8ZwK1RczmvMnvktxHSF2tKgMWjJ71xEFGX5ApLh67VsMSTy1ZUlipJw8W+KaqgOmQ+4pqwkeivY89j+4Vw==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.18.0.tgz", + "integrity": "sha512-tGn8+REwLRNFnb9WmcY5IfpOqeX2kpaYJ1s6Ae3mn12AeydLkR3j+jSCmVQFoXqU8D41PAJ1RG1rCRNWmNZVmQ==", "requires": { + "@wry/caches": "^1.0.0", "@wry/context": "^0.7.0", "@wry/trie": "^0.4.3", "tslib": "^2.3.0" + }, + "dependencies": { + "@wry/trie": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.4.3.tgz", + "integrity": "sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w==", + "requires": { + "tslib": "^2.3.0" + } + } } }, "optionator": { @@ -39948,9 +40451,9 @@ } }, "@types/express-serve-static-core": { - "version": "4.17.39", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz", - "integrity": "sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ==", + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", "requires": { "@types/node": "*", "@types/qs": "*", @@ -39987,6 +40490,19 @@ "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" }, + "bitcoinjs-lib": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.3.tgz", + "integrity": "sha512-TYXs/Qf+GNk2nnsB9HrXWqzFuEgCg0Gx+v3UW3B8VuceFHXVvhT+7hRnTSvwkX0i8rz2rtujeU6gFaDcFqYFDw==", + "requires": { + "@noble/hashes": "^1.2.0", + "bech32": "^2.0.0", + "bip174": "^2.1.0", + "bs58check": "^3.0.1", + "typeforce": "^1.11.3", + "varuint-bitcoin": "^1.1.2" + } + }, "body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", @@ -40126,19 +40642,6 @@ "@types/node": "*" } }, - "bitcoinjs-lib": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.3.tgz", - "integrity": "sha512-TYXs/Qf+GNk2nnsB9HrXWqzFuEgCg0Gx+v3UW3B8VuceFHXVvhT+7hRnTSvwkX0i8rz2rtujeU6gFaDcFqYFDw==", - "requires": { - "@noble/hashes": "^1.2.0", - "bech32": "^2.0.0", - "bip174": "^2.1.0", - "bs58check": "^3.0.1", - "typeforce": "^1.11.3", - "varuint-bitcoin": "^1.1.2" - } - }, "lightning": { "version": "9.8.0", "resolved": "https://registry.npmjs.org/lightning/-/lightning-9.8.0.tgz", @@ -40207,19 +40710,6 @@ "tiny-secp256k1": "2.2.2" }, "dependencies": { - "bitcoinjs-lib": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.3.tgz", - "integrity": "sha512-TYXs/Qf+GNk2nnsB9HrXWqzFuEgCg0Gx+v3UW3B8VuceFHXVvhT+7hRnTSvwkX0i8rz2rtujeU6gFaDcFqYFDw==", - "requires": { - "@noble/hashes": "^1.2.0", - "bech32": "^2.0.0", - "bip174": "^2.1.0", - "bs58check": "^3.0.1", - "typeforce": "^1.11.3", - "varuint-bitcoin": "^1.1.2" - } - }, "tiny-secp256k1": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-2.2.2.tgz", @@ -40277,6 +40767,19 @@ "yargs": "^17.7.2" } }, + "bitcoinjs-lib": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.5.tgz", + "integrity": "sha512-yuf6xs9QX/E8LWE2aMJPNd0IxGofwfuVOiYdNUESkc+2bHHVKjhJd8qewqapeoolh9fihzHGoDCB5Vkr57RZCQ==", + "requires": { + "@noble/hashes": "^1.2.0", + "bech32": "^2.0.0", + "bip174": "^2.1.1", + "bs58check": "^3.0.1", + "typeforce": "^1.11.3", + "varuint-bitcoin": "^1.1.2" + } + }, "cbor": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.1.tgz", @@ -40359,19 +40862,6 @@ "@types/node": "*" } }, - "bitcoinjs-lib": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.3.tgz", - "integrity": "sha512-TYXs/Qf+GNk2nnsB9HrXWqzFuEgCg0Gx+v3UW3B8VuceFHXVvhT+7hRnTSvwkX0i8rz2rtujeU6gFaDcFqYFDw==", - "requires": { - "@noble/hashes": "^1.2.0", - "bech32": "^2.0.0", - "bip174": "^2.1.0", - "bs58check": "^3.0.1", - "typeforce": "^1.11.3", - "varuint-bitcoin": "^1.1.2" - } - }, "lightning": { "version": "9.8.0", "resolved": "https://registry.npmjs.org/lightning/-/lightning-9.8.0.tgz", @@ -40451,21 +40941,6 @@ "bn.js": "5.2.1", "pushdata-bitcoin": "1.0.1", "varuint-bitcoin": "1.1.2" - }, - "dependencies": { - "bitcoinjs-lib": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.3.tgz", - "integrity": "sha512-TYXs/Qf+GNk2nnsB9HrXWqzFuEgCg0Gx+v3UW3B8VuceFHXVvhT+7hRnTSvwkX0i8rz2rtujeU6gFaDcFqYFDw==", - "requires": { - "@noble/hashes": "^1.2.0", - "bech32": "^2.0.0", - "bip174": "^2.1.0", - "bs58check": "^3.0.1", - "typeforce": "^1.11.3", - "varuint-bitcoin": "^1.1.2" - } - } } }, "raw-body": { @@ -40766,9 +41241,9 @@ "dev": true }, "prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz", + "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==", "dev": true }, "prettier-linter-helpers": { @@ -41316,9 +41791,9 @@ } }, "react-grid-layout": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/react-grid-layout/-/react-grid-layout-1.4.2.tgz", - "integrity": "sha512-LLOZogtw5XNHbdCquKQRG/Dspjyfelk+kE9DKRbLUl3UArFRQu/IiH+aPcjh+wSkSHUjf+Rv32ueEYigbGzRLQ==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/react-grid-layout/-/react-grid-layout-1.4.4.tgz", + "integrity": "sha512-7+Lg8E8O8HfOH5FrY80GCIR1SHTn2QnAYKh27/5spoz+OHhMmEhU/14gIkRzJOtympDPaXcVRX/nT1FjmeOUmQ==", "requires": { "clsx": "^2.0.0", "fast-equals": "^4.0.3", @@ -41350,9 +41825,9 @@ } }, "react-select": { - "version": "5.7.7", - "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.7.tgz", - "integrity": "sha512-HhashZZJDRlfF/AKj0a0Lnfs3sRdw/46VJIRd8IbB9/Ovr74+ZIwkAdSBjSPXsFMG+u72c5xShqwLSKIJllzqw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.8.0.tgz", + "integrity": "sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==", "requires": { "@babel/runtime": "^7.12.0", "@emotion/cache": "^11.4.0", @@ -41388,9 +41863,9 @@ } }, "react-tooltip": { - "version": "5.22.0", - "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-5.22.0.tgz", - "integrity": "sha512-xbJBRY1LyHYd7j00UeBOqZR9SH/1S47Pe+m8vM1a+ZXglkeSNnBt5YYoPttU/amjC/VZJAPQ8+2B9x8Fl8U1qA==", + "version": "5.24.0", + "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-5.24.0.tgz", + "integrity": "sha512-HjstgpOrUwP4eN6mHU4EThpbxVuKO5SvqumRt1aAcPq0ya+pIVVxlwltndtdIIMBJ7w3jnN05vNfcfh2sxE2mQ==", "requires": { "@floating-ui/dom": "^1.0.0", "classnames": "^2.3.0" @@ -43296,9 +43771,9 @@ } }, "ts-loader": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.0.tgz", - "integrity": "sha512-LLlB/pkB4q9mW2yLdFMnK3dEHbrBjeZTYguaaIfusyojBgAGf5kF+O6KcWqiGzWqHk0LBsoolrp4VftEURhybg==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", "dev": true, "requires": { "chalk": "^4.1.0", @@ -43467,9 +43942,9 @@ "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" }, "typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==" + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz", + "integrity": "sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==" }, "ua-parser-js": { "version": "0.7.37", diff --git a/package.json b/package.json index f9dfb27c..5c515bdc 100644 --- a/package.json +++ b/package.json @@ -34,23 +34,23 @@ "prepare": "husky install" }, "dependencies": { - "@apollo/client": "^3.8.7", + "@apollo/client": "^3.8.8", "@fullerstack/nax-ipware": "^0.10.0", - "@nestjs/apollo": "^12.0.9", - "@nestjs/common": "^10.2.8", + "@nestjs/apollo": "^12.0.11", + "@nestjs/common": "^10.2.10", "@nestjs/config": "^3.1.1", - "@nestjs/core": "^10.2.8", - "@nestjs/graphql": "^12.0.9", - "@nestjs/jwt": "^10.1.1", + "@nestjs/core": "^10.2.10", + "@nestjs/graphql": "^12.0.11", + "@nestjs/jwt": "^10.2.0", "@nestjs/passport": "^10.0.2", - "@nestjs/platform-express": "^10.2.8", - "@nestjs/platform-socket.io": "^10.2.8", + "@nestjs/platform-express": "^10.2.10", + "@nestjs/platform-socket.io": "^10.2.10", "@nestjs/schedule": "^4.0.0", "@nestjs/throttler": "^5.0.1", - "@nestjs/websockets": "^10.2.8", + "@nestjs/websockets": "^10.2.10", "@tanstack/react-table": "^8.10.7", - "apollo-server-express": "^3.12.1", - "balanceofsatoshis": "^17.3.0", + "apollo-server-express": "^3.13.0", + "balanceofsatoshis": "^17.5.2", "bcryptjs": "^2.4.3", "bech32": "^2.0.0", "big.js": "^6.2.1", @@ -58,7 +58,7 @@ "bip39": "^3.1.0", "bitcoinjs-lib": "^6.1.5", "boltz-core": "^1.0.4", - "cookie": "^0.5.0", + "cookie": "^0.6.0", "cross-env": "^7.0.3", "crypto-js": "^4.1.1", "d3-array": "^3.2.4", @@ -74,10 +74,10 @@ "js-cookie": "^3.0.5", "js-yaml": "^4.1.0", "jsonwebtoken": "^9.0.2", - "lightning": "^10.1.1", + "lightning": "^10.1.3", "lodash": "^4.17.21", "nest-winston": "^1.9.4", - "next": "^14.0.1", + "next": "^14.0.3", "node-fetch": "^3.3.2", "numeral": "^2.0.6", "otplib": "^12.0.1", @@ -89,13 +89,13 @@ "react-copy-to-clipboard": "^5.1.0", "react-dom": "^18.2.0", "react-feather": "^2.0.10", - "react-grid-layout": "^1.4.2", + "react-grid-layout": "^1.4.4", "react-is": "^18.2.0", - "react-select": "^5.7.7", + "react-select": "^5.8.0", "react-slider": "^2.0.6", "react-spinners": "^0.13.8", "react-toastify": "^9.1.3", - "react-tooltip": "^5.22.0", + "react-tooltip": "^5.24.0", "reflect-metadata": "^0.1.13", "rimraf": "^5.0.5", "rxjs": "^7.5.6", @@ -120,53 +120,53 @@ "@graphql-codegen/typescript-resolvers": "^4.0.1", "@nestjs/cli": "^10.2.1", "@nestjs/schematics": "^10.0.3", - "@types/bcryptjs": "^2.4.5", - "@types/big.js": "^6.2.1", - "@types/cookie": "^0.5.3", + "@types/bcryptjs": "^2.4.6", + "@types/big.js": "^6.2.2", + "@types/cookie": "^0.6.0", "@types/cron": "^2.4.0", - "@types/crypto-js": "^4.1.3", - "@types/d3-array": "^3.2.0", - "@types/d3-time-format": "^4.0.2", - "@types/express": "^4.17.20", - "@types/jest": "^29.5.7", - "@types/js-cookie": "^3.0.5", - "@types/js-yaml": "^4.0.8", - "@types/jsonwebtoken": "^9.0.4", - "@types/lodash": "^4.14.200", - "@types/node": "^20.5.8", - "@types/numeral": "^2.0.4", - "@types/qrcode.react": "^1.0.4", - "@types/react": "^18.2.35", - "@types/react-copy-to-clipboard": "^5.0.6", - "@types/react-grid-layout": "^1.3.4", - "@types/react-qr-reader": "^2.1.6", - "@types/react-slider": "^1.3.3", - "@types/secp256k1": "^4.0.5", - "@types/styled-components": "^5.1.29", - "@types/styled-react-modal": "^1.2.4", - "@types/styled-theming": "^2.2.7", - "@types/supertest": "^2.0.15", - "@types/uuid": "^9.0.6", - "@typescript-eslint/eslint-plugin": "^6.9.1", - "@typescript-eslint/parser": "^6.9.1", - "apollo-server": "^3.12.1", + "@types/crypto-js": "^4.2.1", + "@types/d3-array": "^3.2.1", + "@types/d3-time-format": "^4.0.3", + "@types/express": "^4.17.21", + "@types/jest": "^29.5.10", + "@types/js-cookie": "^3.0.6", + "@types/js-yaml": "^4.0.9", + "@types/jsonwebtoken": "^9.0.5", + "@types/lodash": "^4.14.202", + "@types/node": "^20.10.1", + "@types/numeral": "^2.0.5", + "@types/qrcode.react": "^1.0.5", + "@types/react": "^18.2.39", + "@types/react-copy-to-clipboard": "^5.0.7", + "@types/react-grid-layout": "^1.3.5", + "@types/react-qr-reader": "^2.1.7", + "@types/react-slider": "^1.3.5", + "@types/secp256k1": "^4.0.6", + "@types/styled-components": "^5.1.32", + "@types/styled-react-modal": "^1.2.5", + "@types/styled-theming": "^2.2.8", + "@types/supertest": "^2.0.16", + "@types/uuid": "^9.0.7", + "@typescript-eslint/eslint-plugin": "^6.13.1", + "@typescript-eslint/parser": "^6.13.1", + "apollo-server": "^3.13.0", "babel-plugin-styled-components": "^2.1.4", - "eslint": "^8.53.0", - "eslint-config-next": "^14.0.1", + "eslint": "^8.54.0", + "eslint-config-next": "^14.0.3", "eslint-config-prettier": "^9.0.0", "eslint-plugin-prettier": "^5.0.1", "husky": "^8.0.3", "jest": "^29.7.0", - "lint-staged": "^15.0.2", - "prettier": "^3.0.3", + "lint-staged": "^15.1.0", + "prettier": "^3.1.0", "source-map-support": "^0.5.21", "standard-version": "^9.5.0", "supertest": "^6.3.3", "ts-jest": "^29.1.1", - "ts-loader": "^9.5.0", + "ts-loader": "^9.5.1", "ts-node": "^10.9.1", "tsconfig-paths": "^4.2.0", - "typescript": "^5.2.2", + "typescript": "^5.3.2", "ws": "^8.14.2" }, "jest": { From 1e3b9c1594759cd5d5acaf7ab0c9d557ed13760e Mon Sep 17 00:00:00 2001 From: Anthony Potdevin Date: Thu, 30 Nov 2023 18:52:45 +0100 Subject: [PATCH 03/27] chore(release): 0.13.25 --- CHANGELOG.md | 12 ++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d69c3a23..607a00bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,18 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [0.13.25](https://github.com/apotdevin/thunderhub/compare/v0.13.24...v0.13.25) (2023-11-30) + + +### Features + +* add nix flake ([#584](https://github.com/apotdevin/thunderhub/issues/584)) ([4e92870](https://github.com/apotdevin/thunderhub/commit/4e928702cf275c96d5ad51744494ef26816be6b6)) + + +### Improvements + +* bump deps ([2b1bf30](https://github.com/apotdevin/thunderhub/commit/2b1bf30029fa1cf85ffea99cc7163ed0e5a27e83)) + ### [0.13.24](https://github.com/apotdevin/thunderhub/compare/v0.13.23...v0.13.24) (2023-11-23) diff --git a/package-lock.json b/package-lock.json index 899a32b3..0f9fc89e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "thunderhub", - "version": "0.13.24", + "version": "0.13.25", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "thunderhub", - "version": "0.13.24", + "version": "0.13.25", "license": "MIT", "dependencies": { "@apollo/client": "^3.8.8", diff --git a/package.json b/package.json index 5c515bdc..b7f8f2a0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "thunderhub", - "version": "0.13.24", + "version": "0.13.25", "description": "Lightning Node Manager", "license": "MIT", "scripts": { From 0212be08e22e28e70a29cd68e51438c44ab3e2d1 Mon Sep 17 00:00:00 2001 From: Anthony Potdevin Date: Thu, 30 Nov 2023 19:35:34 +0100 Subject: [PATCH 04/27] fix: linting --- .../buttons/colorButton/ColorButton.tsx | 20 +++++++++---------- src/client/src/components/generic/Styled.tsx | 8 ++++---- src/client/src/components/input/index.tsx | 16 +++++++-------- src/client/src/utils/helpers.tsx | 4 ++-- .../src/views/dashboard/widgets/helpers.tsx | 4 ++-- .../quickActions/openChannel/OpenChannel.tsx | 4 ++-- .../modules/api/chain/chain.resolver.ts | 4 ++-- 7 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/client/src/components/buttons/colorButton/ColorButton.tsx b/src/client/src/components/buttons/colorButton/ColorButton.tsx index 8093bc75..cdae81a4 100644 --- a/src/client/src/components/buttons/colorButton/ColorButton.tsx +++ b/src/client/src/components/buttons/colorButton/ColorButton.tsx @@ -48,20 +48,20 @@ const GeneralButton = styled.button` margin: ${mobileMargin}; ` : withMargin - ? css` - margin: ${withMargin}; - ` - : '0'}; + ? css` + margin: ${withMargin}; + ` + : '0'}; ${({ fullWidth, mobileFullWidth }) => mobileFullWidth ? css` width: 100%; ` : fullWidth - ? css` - width: 100%; - ` - : ''}; + ? css` + width: 100%; + ` + : ''}; } `; @@ -88,8 +88,8 @@ const BorderButton = styled(GeneralButton)` ? borderColor : colorButtonBorder : selected - ? colorButtonBorder - : colorButtonBorderTwo}; + ? colorButtonBorder + : colorButtonBorderTwo}; &:hover { ${({ borderColor, selected }: BorderProps) => diff --git a/src/client/src/components/generic/Styled.tsx b/src/client/src/components/generic/Styled.tsx index 041c655a..4eea5b0c 100644 --- a/src/client/src/components/generic/Styled.tsx +++ b/src/client/src/components/generic/Styled.tsx @@ -58,10 +58,10 @@ export const Card = styled.div` padding: ${mobileCardPadding}; ` : cardPadding - ? css` - padding: ${cardPadding}; - ` - : ''}; + ? css` + padding: ${cardPadding}; + ` + : ''}; } `; diff --git a/src/client/src/components/input/index.tsx b/src/client/src/components/input/index.tsx index 8b5830ed..ca2b1186 100644 --- a/src/client/src/components/input/index.tsx +++ b/src/client/src/components/input/index.tsx @@ -45,20 +45,20 @@ export const StyledInput = styled.input` margin: ${mobileMargin}; ` : withMargin - ? css` - margin: ${withMargin}; - ` - : ''}; + ? css` + margin: ${withMargin}; + ` + : ''}; ${({ fullWidth, mobileFullWidth }) => mobileFullWidth ? css` width: 100%; ` : fullWidth - ? css` - width: 100%; - ` - : ''}; + ? css` + width: 100%; + ` + : ''}; } &:hover { diff --git a/src/client/src/utils/helpers.tsx b/src/client/src/utils/helpers.tsx index 3198dee3..02ac3eb1 100644 --- a/src/client/src/utils/helpers.tsx +++ b/src/client/src/utils/helpers.tsx @@ -152,8 +152,8 @@ export const saveToPc = ( link.download = isCsv ? `${filename}.csv` : isJson - ? `${filename}.json` - : `${filename}.txt`; + ? `${filename}.json` + : `${filename}.txt`; link.href = url; link.click(); }; diff --git a/src/client/src/views/dashboard/widgets/helpers.tsx b/src/client/src/views/dashboard/widgets/helpers.tsx index 540f2a20..98c2e315 100644 --- a/src/client/src/views/dashboard/widgets/helpers.tsx +++ b/src/client/src/views/dashboard/widgets/helpers.tsx @@ -187,8 +187,8 @@ export const getByTime = (array: ArrayType, time: number): any[] => { date: total.date ? total.date : isDay - ? subHours(today, Number(key)).toISOString() - : subDays(today, Number(key)).toISOString(), + ? subHours(today, Number(key)).toISOString() + : subDays(today, Number(key)).toISOString(), }; }, { diff --git a/src/client/src/views/home/quickActions/openChannel/OpenChannel.tsx b/src/client/src/views/home/quickActions/openChannel/OpenChannel.tsx index 5a492df1..408a18b9 100644 --- a/src/client/src/views/home/quickActions/openChannel/OpenChannel.tsx +++ b/src/client/src/views/home/quickActions/openChannel/OpenChannel.tsx @@ -69,8 +69,8 @@ export const OpenChannelCard = ({ pushType === 'none' ? 0 : pushType === 'half' - ? size / 2 - : Math.min(pushTokens, size * 0.9); + ? size / 2 + : Math.min(pushTokens, size * 0.9); useEffect(() => { if (type === 'none' && fee === 0) { diff --git a/src/server/modules/api/chain/chain.resolver.ts b/src/server/modules/api/chain/chain.resolver.ts index 0dd115d4..bf5e2872 100644 --- a/src/server/modules/api/chain/chain.resolver.ts +++ b/src/server/modules/api/chain/chain.resolver.ts @@ -65,8 +65,8 @@ export class ChainResolver { const props = fee ? { fee_tokens_per_vbyte: fee } : target - ? { target_confirmations: target } - : {}; + ? { target_confirmations: target } + : {}; const hasTokens = tokens && !sendAllFlag ? { tokens } : {}; const sendAll = sendAllFlag ? { is_send_all: true } : {}; From d66aca8e229e882da46d8ee0715b4daf71aa9348 Mon Sep 17 00:00:00 2001 From: Anthony Potdevin <31413433+apotdevin@users.noreply.github.com> Date: Thu, 30 Nov 2023 20:07:47 +0100 Subject: [PATCH 05/27] chore: downgrade docker node version (#592) --- .nvmrc | 2 +- Dockerfile | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.nvmrc b/.nvmrc index c946e1df..68c98aa7 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v20.9.0 \ No newline at end of file +v18.18.2 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index eda6405f..ed5be7a9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ # --------------- # Install Dependencies # --------------- -FROM node:20.9.0-alpine as deps +FROM node:18.18.2-alpine as deps WORKDIR /app @@ -41,7 +41,7 @@ RUN npm prune --production # --------------- # Release App # --------------- -FROM node:20.9.0-alpine as final +FROM node:18.18.2-alpine as final WORKDIR /app From da6c3e742547198ae7521792e3a0539af890c489 Mon Sep 17 00:00:00 2001 From: Anthony Potdevin Date: Thu, 30 Nov 2023 20:09:08 +0100 Subject: [PATCH 06/27] chore(release): 0.13.26 --- CHANGELOG.md | 12 ++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 607a00bd..77f1e448 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,18 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [0.13.26](https://github.com/apotdevin/thunderhub/compare/v0.13.25...v0.13.26) (2023-11-30) + + +### Bug Fixes + +* linting ([0212be0](https://github.com/apotdevin/thunderhub/commit/0212be08e22e28e70a29cd68e51438c44ab3e2d1)) + + +### Improvements + +* downgrade docker node version ([#592](https://github.com/apotdevin/thunderhub/issues/592)) ([d66aca8](https://github.com/apotdevin/thunderhub/commit/d66aca8e229e882da46d8ee0715b4daf71aa9348)) + ### [0.13.25](https://github.com/apotdevin/thunderhub/compare/v0.13.24...v0.13.25) (2023-11-30) diff --git a/package-lock.json b/package-lock.json index 0f9fc89e..1f997882 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "thunderhub", - "version": "0.13.25", + "version": "0.13.26", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "thunderhub", - "version": "0.13.25", + "version": "0.13.26", "license": "MIT", "dependencies": { "@apollo/client": "^3.8.8", diff --git a/package.json b/package.json index b7f8f2a0..f0306575 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "thunderhub", - "version": "0.13.25", + "version": "0.13.26", "description": "Lightning Node Manager", "license": "MIT", "scripts": { From 99d4f7a65f4ee82b36b4ee1f07225e531fee22ae Mon Sep 17 00:00:00 2001 From: "kody.low" Date: Thu, 16 Nov 2023 12:45:00 -0800 Subject: [PATCH 07/27] feat: begin fedimint cards --- .gitignore | 5 ++-- src/client/src/utils/helpers.tsx | 4 +-- .../src/views/home/account/AccountInfo.tsx | 26 ++++++++++++++++--- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 03b17961..4729ac5e 100644 --- a/.gitignore +++ b/.gitignore @@ -44,6 +44,5 @@ lerna-debug.log* # config files config.yaml - -# For Dev -local_data +data +data/* diff --git a/src/client/src/utils/helpers.tsx b/src/client/src/utils/helpers.tsx index 02ac3eb1..3198dee3 100644 --- a/src/client/src/utils/helpers.tsx +++ b/src/client/src/utils/helpers.tsx @@ -152,8 +152,8 @@ export const saveToPc = ( link.download = isCsv ? `${filename}.csv` : isJson - ? `${filename}.json` - : `${filename}.txt`; + ? `${filename}.json` + : `${filename}.txt`; link.href = url; link.click(); }; diff --git a/src/client/src/views/home/account/AccountInfo.tsx b/src/client/src/views/home/account/AccountInfo.tsx index 33a891f4..a8d9cc6b 100644 --- a/src/client/src/views/home/account/AccountInfo.tsx +++ b/src/client/src/views/home/account/AccountInfo.tsx @@ -1,6 +1,6 @@ import React from 'react'; import styled from 'styled-components'; -import { Zap, Anchor, Pocket } from 'react-feather'; +import { Zap, Anchor, Pocket, Book } from 'react-feather'; import { useNodeBalances } from '../../../hooks/UseNodeBalances'; import Big from 'big.js'; import { renderLine } from '../../../components/generic/helpers'; @@ -20,7 +20,7 @@ const S = { grid: styled.div` display: grid; grid-gap: 16px; - grid-template-columns: 1fr 1fr; + grid-template-columns: 1fr 1fr 1fr; @media (${mediaWidths.mobile}) { display: block; @@ -93,13 +93,19 @@ export const AccountInfo = () => { - Bitcoin + Lightning +
+ +
+
+ + Onchain Bitcoin
- Lightning + Fedimint Ecash
@@ -138,6 +144,18 @@ export const AccountInfo = () => { {renderLine('Force Closures', )} + + + + + Fedimint eCash + + + {renderLine('Available', )} + {renderLine('Not Available', )} + {renderLine('Pending', )} + + ); From 455517a54cc98ed5030c53e204a1df4e7d8aa47f Mon Sep 17 00:00:00 2001 From: "kody.low" Date: Thu, 16 Nov 2023 15:31:36 -0800 Subject: [PATCH 08/27] feat: add fedmint lightning gateway config option to thunderhub configs --- src/client/src/api/GatewayApi.ts | 145 +++++++++++ src/client/src/api/types.ts | 57 +++++ .../src/views/home/account/AccountButtons.tsx | 36 ++- .../home/account/pegInEcash/PegInEcash.tsx | 133 ++++++++++ .../home/account/pegOutEcash/PegOutEcash.tsx | 228 ++++++++++++++++++ src/server/config/configuration.ts | 12 + 6 files changed, 609 insertions(+), 2 deletions(-) create mode 100644 src/client/src/api/GatewayApi.ts create mode 100644 src/client/src/api/types.ts create mode 100644 src/client/src/views/home/account/pegInEcash/PegInEcash.tsx create mode 100644 src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx diff --git a/src/client/src/api/GatewayApi.ts b/src/client/src/api/GatewayApi.ts new file mode 100644 index 00000000..e7d33616 --- /dev/null +++ b/src/client/src/api/GatewayApi.ts @@ -0,0 +1,145 @@ +import { GatewayInfo, Federation } from './types'; + +const SESSION_STORAGE_KEY = 'gateway-ui-key'; + +// GatewayApi is an implementation of the ApiInterface +export class GatewayApi { + private baseUrl: string | undefined = process.env.REACT_APP_FM_GATEWAY_API; + + // Tests a provided password, or the one in the environment config, or the one in session storage + testPassword = async (password?: string): Promise => { + const tempPassword = + password || + this.getPassword() || + process.env.REACT_APP_FM_GATEWAY_PASSWORD; + + if (!tempPassword) { + return false; + } + + // Replace with temp password to check. + sessionStorage.setItem(SESSION_STORAGE_KEY, tempPassword); + + try { + await this.fetchInfo(); + return true; + } catch (err) { + // TODO: make sure error is auth error, not unrelated + console.error(err); + this.clearPassword(); + return false; + } + }; + + private getPassword = (): string | null => { + return sessionStorage.getItem(SESSION_STORAGE_KEY); + }; + + clearPassword = () => { + sessionStorage.removeItem(SESSION_STORAGE_KEY); + }; + + private post = async (api: string, body: unknown): Promise => { + if (this.baseUrl === undefined) { + throw new Error( + 'Misconfigured Gateway API. Make sure FM_GATEWAY_API is configured appropriately' + ); + } + + const password = this.getPassword(); + if (!password) { + throw new Error( + 'Misconfigured Gateway API. Make sure gateway password is configured appropriately' + ); + } + + return fetch(`${this.baseUrl}/${api}`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${password}`, + }, + body: JSON.stringify(body), + }); + }; + + fetchInfo = async (): Promise => { + try { + const res: Response = await this.post('info', null); + + if (res.ok) { + const info: GatewayInfo = await res.json(); + return Promise.resolve(info); + } + + throw responseToError(res); + } catch (error) { + return Promise.reject({ message: 'Error fetching gateway info', error }); + } + }; + + fetchAddress = async (federationId: string): Promise => { + try { + const res: Response = await this.post('address', { + federation_id: federationId, + }); + + if (res.ok) { + const address: string = (await res.text()).replace(/"/g, '').trim(); + return Promise.resolve(address); + } + + throw responseToError(res); + } catch (error) { + return Promise.reject({ + message: 'Error fetching deposit address', + error, + }); + } + }; + + connectFederation = async (inviteCode: string): Promise => { + try { + const res: Response = await this.post('connect-fed', { + invite_code: inviteCode, + }); + + if (res.ok) { + const federation: Federation = await res.json(); + return Promise.resolve(federation); + } + + throw responseToError(res); + } catch (error) { + return Promise.reject({ message: 'Error connecting federation', error }); + } + }; + + requestWithdrawal = async ( + federationId: string, + amountSat: number, + address: string + ): Promise => { + try { + const res: Response = await this.post('withdraw', { + federation_id: federationId, + amount: amountSat, + address, + }); + + if (res.ok) { + const txid: string = await res.text(); + console.log('txid', txid); + return Promise.resolve(txid); + } + + throw responseToError(res); + } catch (error) { + return Promise.reject({ message: 'Error requesting withdrawal', error }); + } + }; +} + +const responseToError = (res: Response): Error => { + return new Error(`Status : ${res.status} \nReason : ${res.statusText}\n`); +}; diff --git a/src/client/src/api/types.ts b/src/client/src/api/types.ts new file mode 100644 index 00000000..e98b5753 --- /dev/null +++ b/src/client/src/api/types.ts @@ -0,0 +1,57 @@ +interface Fees { + base_msat: number; + proportional_millionths: number; +} + +export enum ModuleKind { + Ln = 'ln', + Mint = 'mint', + Wallet = 'wallet', +} + +interface FedimintModule { + config: string; + kind: ModuleKind; + version: number; +} + +interface ApiEndpoint { + name: string; + url: string; +} + +export type MetaConfig = { federation_name?: string }; + +export interface ClientConfig { + consensus_version: number; + epoch_pk: string; + federation_id: string; + api_endpoints: Record; + modules: Record; + meta: MetaConfig; +} + +export interface Federation { + federation_id: string; + balance_msat: number; + config: ClientConfig; +} + +export interface GatewayInfo { + federations: Federation[]; + fees: Fees; + lightning_alias: string; + lightning_pub_key: string; + version_hash: string; + network?: Network; +} + +// Type adaptation from https://docs.rs/bitcoin/latest/bitcoin/network/enum.Network.html +export enum Network { + Bitcoin = 'main', + Testnet = 'test', + Signet = 'signet', + Regtest = 'regtest', +} + +export type TransactionId = string; diff --git a/src/client/src/views/home/account/AccountButtons.tsx b/src/client/src/views/home/account/AccountButtons.tsx index 86f488b7..54526508 100644 --- a/src/client/src/views/home/account/AccountButtons.tsx +++ b/src/client/src/views/home/account/AccountButtons.tsx @@ -1,5 +1,5 @@ import { useState } from 'react'; -import { Anchor, X, Zap } from 'react-feather'; +import { Anchor, X, Zap, Book } from 'react-feather'; import { ColorButton } from '../../../components/buttons/colorButton/ColorButton'; import { Card } from '../../../components/generic/Styled'; import { mediaWidths } from '../../../styles/Themes'; @@ -8,6 +8,8 @@ import { CreateInvoiceCard } from './createInvoice/CreateInvoice'; import { PayCard } from './pay/Payment'; import { ReceiveOnChainCard } from './receiveOnChain/ReceiveOnChain'; import { SendOnChainCard } from './sendOnChain/SendOnChain'; +import { PegInEcashCard } from './pegInEcash/PegInEcash'; +import { PegOutEcashCard } from './pegOutEcash/PegOutEcash'; const SECTION_COLOR = '#FFD300'; @@ -15,7 +17,7 @@ const S = { grid: styled.div` display: grid; grid-gap: 8px; - grid-template-columns: 1fr 1fr 1fr 1fr; + grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr; margin-bottom: 32px; @media (${mediaWidths.mobile}) { @@ -37,6 +39,10 @@ export const AccountButtons = () => { return setState('none')} />; case 'receive_chain': return ; + case 'pegin_ecash': + return ; + case 'pegout_ecash': + return setState('none')} />; default: return null; } @@ -95,6 +101,32 @@ export const AccountButtons = () => { )} Receive + + setState(state === 'pegin_ecash' ? 'none' : 'pegin_ecash') + } + > + {state === 'pegin_ecash' ? ( + + ) : ( + + )} + Peg In + + + setState(state === 'pegout_ecash' ? 'none' : 'pegout_ecash') + } + > + {state === 'pegout_ecash' ? ( + + ) : ( + + )} + Peg Out + {state !== 'none' && {renderContent()}} diff --git a/src/client/src/views/home/account/pegInEcash/PegInEcash.tsx b/src/client/src/views/home/account/pegInEcash/PegInEcash.tsx new file mode 100644 index 00000000..c388be3f --- /dev/null +++ b/src/client/src/views/home/account/pegInEcash/PegInEcash.tsx @@ -0,0 +1,133 @@ +import React, { useState, useEffect } from 'react'; +import styled from 'styled-components'; +import { toast } from 'react-toastify'; +import CopyToClipboard from 'react-copy-to-clipboard'; +import { useCreateAddressMutation } from '../../../../graphql/mutations/__generated__/createAddress.generated'; +import { QRCodeSVG } from 'qrcode.react'; +import { Copy } from 'react-feather'; +import { getErrorContent } from '../../../../utils/error'; +import { ColorButton } from '../../../../components/buttons/colorButton/ColorButton'; +import { mediaWidths } from '../../../../styles/Themes'; +import { SmallSelectWithValue } from '../../../../components/select'; +import { + ResponsiveLine, + SubTitle, +} from '../../../../components/generic/Styled'; + +const S = { + row: styled.div` + display: grid; + align-items: center; + gap: 16px; + grid-template-columns: 1fr 2fr; + + @media (${mediaWidths.mobile}) { + width: 100%; + display: block; + } + `, +}; + +const Responsive = styled.div` + display: flex; + justify-content: space-between; + align-items: center; + + @media (${mediaWidths.mobile}) { + flex-direction: column; + } +`; + +const WrapRequest = styled.div` + overflow-wrap: break-word; + word-wrap: break-word; + -ms-word-break: break-all; + word-break: break-word; + margin: 24px; + font-size: 14px; +`; + +const QRWrapper = styled.div` + width: 280px; + height: 280px; + margin: 16px; + background: white; + padding: 16px; +`; + +const Column = styled.div` + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +`; + +const options = [ + { label: 'p2tr (Default)', value: 'p2tr' }, + { label: 'p2wpkh (Segwit)', value: 'p2wpkh' }, + { label: 'np2wpkh (Nested Segwit)', value: 'np2wpkh' }, +]; + +export const PegInEcashCard = () => { + const [type, setType] = useState(options[0]); + const [received, setReceived] = useState(false); + + const [createAddress, { data, loading }] = useCreateAddressMutation({ + onError: error => toast.error(getErrorContent(error)), + }); + + useEffect(() => { + data && data.createAddress && setReceived(true); + }, [data]); + + return ( + <> + {data && data.createAddress ? ( + + + + + + {data.createAddress} + toast.success('Address Copied')} + > + + + Copy + + + + + ) : ( + <> + + + Address Type: + setType((e[0] || options[1]) as any)} + options={options} + value={type} + isClearable={false} + /> + + createAddress({ variables: { type: type.value } })} + disabled={received} + withMargin={'0 0 0 16px'} + mobileMargin={'16px 0 0'} + arrow={true} + loading={loading} + mobileFullWidth={true} + > + Create Address + + + + )} + + ); +}; diff --git a/src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx b/src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx new file mode 100644 index 00000000..3e76fefc --- /dev/null +++ b/src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx @@ -0,0 +1,228 @@ +import React, { useState, useEffect } from 'react'; +import { toast } from 'react-toastify'; +import { usePayAddressMutation } from '../../../../graphql/mutations/__generated__/sendToAddress.generated'; +import { InputWithDeco } from '../../../../components/input/InputWithDeco'; +import { useBitcoinFees } from '../../../../hooks/UseBitcoinFees'; +import { + Separation, + SingleLine, + SubTitle, +} from '../../../../components/generic/Styled'; +import { getErrorContent } from '../../../../utils/error'; +import { Input } from '../../../../components/input'; +import { + MultiButton, + SingleButton, +} from '../../../../components/buttons/multiButton/MultiButton'; +import { Price, getPrice } from '../../../../components/price/Price'; +import { useConfigState } from '../../../../context/ConfigContext'; +import Modal from '../../../../components/modal/ReactModal'; +import { ColorButton } from '../../../../components/buttons/colorButton/ColorButton'; +import { renderLine } from '../../../../components/generic/helpers'; +import { usePriceState } from '../../../../context/PriceContext'; + +export const PegOutEcashCard = ({ setOpen }: { setOpen: () => void }) => { + const { fast, halfHour, hour, minimum, dontShow } = useBitcoinFees(); + const { currency, displayValues, fetchFees } = useConfigState(); + const priceContext = usePriceState(); + const format = getPrice(currency, displayValues, priceContext); + + const [modalOpen, setModalOpen] = useState(false); + + const [address, setAddress] = useState(''); + const [tokens, setTokens] = useState(0); + const [type, setType] = useState(dontShow || !fetchFees ? 'fee' : 'none'); + const [amount, setAmount] = useState(0); + const [sendAll, setSendAll] = useState(false); + + const canSend = address !== '' && (sendAll || tokens > 0) && amount > 0; + + const [payAddress, { loading }] = usePayAddressMutation({ + onError: error => toast.error(getErrorContent(error)), + onCompleted: () => { + toast.success('Payment Sent!'); + setOpen(); + }, + refetchQueries: ['GetNodeInfo', 'GetBalances'], + }); + + useEffect(() => { + if (type === 'none' && amount === 0) { + setAmount(fast); + } + }, [type, amount, fast]); + + const feeFormat = (amount: number): JSX.Element | string => { + if (type === 'fee' || type === 'none') { + return format({ amount }); + } + return `${amount} blocks`; + }; + + const typeAmount = () => { + switch (type) { + case 'none': + case 'fee': + return { fee: amount }; + case 'target': + return { target: amount }; + default: + return {}; + } + }; + + const tokenAmount = sendAll ? { sendAll } : { tokens }; + + const renderButton = ( + onClick: () => void, + text: string, + selected: boolean + ) => ( + + {text} + + ); + + return ( + <> + setAddress(value)} + /> + + + + {renderButton(() => setSendAll(true), 'Yes', sendAll)} + {renderButton(() => setSendAll(false), 'No', !sendAll)} + + + {!sendAll && ( + setTokens(Number(value))} + /> + )} + + + + {fetchFees && + !dontShow && + renderButton( + () => { + setType('none'); + setAmount(fast); + }, + 'Auto', + type === 'none' + )} + {renderButton( + () => { + setType('fee'); + setAmount(0); + }, + 'Fee (Sats/Byte)', + type === 'fee' + )} + {renderButton( + () => { + setType('target'); + setAmount(0); + }, + 'Target Confirmations', + type === 'target' + )} + + + + {'(~'} + {feeFormat(amount * 223)} + {')'} + + ) + } + > + {type !== 'none' ? ( + 0 ? amount : undefined} + maxWidth={'500px'} + placeholder={type === 'target' ? 'Blocks' : 'Sats/Byte'} + type={'number'} + withMargin={'0 0 0 8px'} + onChange={e => setAmount(Number(e.target.value))} + /> + ) : ( + + {renderButton( + () => setAmount(fast), + `Fastest (${fast} sats)`, + amount === fast + )} + {halfHour !== fast && + renderButton( + () => setAmount(halfHour), + `Half Hour (${halfHour} sats)`, + amount === halfHour + )} + {renderButton( + () => setAmount(hour), + `Hour (${hour} sats)`, + amount === hour + )} + + )} + + {!dontShow && renderLine('Minimum', `${minimum} sat/vByte`)} + + { + setModalOpen(true); + }} + > + Send + + setModalOpen(false)}> + + Send to Address + + {renderLine('Amount:', sendAll ? 'All' : )} + {renderLine('Address:', address)} + {renderLine( + 'Fee:', + type === 'target' ? `${amount} Blocks` : `${amount} Sats/Byte` + )} + + payAddress({ + variables: { address, ...typeAmount(), ...tokenAmount }, + }) + } + disabled={!canSend} + withMargin={'16px 0 0'} + fullWidth={true} + arrow={true} + loading={loading} + > + Send To Address + + + + ); +}; diff --git a/src/server/config/configuration.ts b/src/server/config/configuration.ts index 88ad2e1c..d70ea5ef 100644 --- a/src/server/config/configuration.ts +++ b/src/server/config/configuration.ts @@ -50,6 +50,11 @@ type AmbossConfig = { disableBalancePushes: boolean; }; +type FedimintGatewayConfig = { + apiUrl: string; + password: string; +}; + type ConfigType = { basePath: string; isProduction: boolean; @@ -69,6 +74,7 @@ type ConfigType = { headers: Headers; subscriptions: SubscriptionsConfig; amboss: AmbossConfig; + fedimintGateway: FedimintGatewayConfig; }; export default (): ConfigType => { @@ -136,6 +142,11 @@ export default (): ConfigType => { disableBalancePushes: process.env.DISABLE_BALANCE_PUSHES === 'true', }; + const fedimintGateway = { + apiUrl: process.env.FM_GATEWAY_API || '', + password: process.env.FM_GATEWAY_PASSWORD || '', + }; + const config: ConfigType = { logJson: process.env.LOG_JSON === 'true', masterPasswordOverride: process.env.MASTER_PASSWORD_OVERRIDE || '', @@ -155,6 +166,7 @@ export default (): ConfigType => { yamlEnvs, subscriptions, amboss, + fedimintGateway, }; if (!isProduction) { From 9e521814bc0958b8589a1e3ab6198c530a883106 Mon Sep 17 00:00:00 2001 From: "kody.low" Date: Thu, 16 Nov 2023 20:43:39 -0800 Subject: [PATCH 09/27] feat: connect to federation card --- src/client/src/api/GatewayApi.ts | 6 +- src/client/src/api/GatewayApiProvider.tsx | 21 +++++ .../src/views/home/account/AccountInfo.tsx | 16 +--- .../account/gateway/FedimintGatewayCard.tsx | 88 +++++++++++++++++++ 4 files changed, 114 insertions(+), 17 deletions(-) create mode 100644 src/client/src/api/GatewayApiProvider.tsx create mode 100644 src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx diff --git a/src/client/src/api/GatewayApi.ts b/src/client/src/api/GatewayApi.ts index e7d33616..d987ffad 100644 --- a/src/client/src/api/GatewayApi.ts +++ b/src/client/src/api/GatewayApi.ts @@ -4,14 +4,12 @@ const SESSION_STORAGE_KEY = 'gateway-ui-key'; // GatewayApi is an implementation of the ApiInterface export class GatewayApi { - private baseUrl: string | undefined = process.env.REACT_APP_FM_GATEWAY_API; + private baseUrl: string | undefined = process.env.FM_GATEWAY_API; // Tests a provided password, or the one in the environment config, or the one in session storage testPassword = async (password?: string): Promise => { const tempPassword = - password || - this.getPassword() || - process.env.REACT_APP_FM_GATEWAY_PASSWORD; + password || this.getPassword() || process.env.FM_GATEWAY_PASSWORD; if (!tempPassword) { return false; diff --git a/src/client/src/api/GatewayApiProvider.tsx b/src/client/src/api/GatewayApiProvider.tsx new file mode 100644 index 00000000..dacef0ac --- /dev/null +++ b/src/client/src/api/GatewayApiProvider.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import { GatewayApi } from './GatewayApi'; + +interface ApiContextProps { + // API to interact with the Gateway server + gateway: GatewayApi; +} + +export const ApiContext = React.createContext({ + gateway: new GatewayApi(), +}); + +export const ApiProvider = React.memo(function ApiProvider({ + props, + children, +}: { + props: ApiContextProps; + children: React.ReactNode; +}): JSX.Element { + return {children}; +}); diff --git a/src/client/src/views/home/account/AccountInfo.tsx b/src/client/src/views/home/account/AccountInfo.tsx index a8d9cc6b..0d65b8a2 100644 --- a/src/client/src/views/home/account/AccountInfo.tsx +++ b/src/client/src/views/home/account/AccountInfo.tsx @@ -1,6 +1,6 @@ import React from 'react'; import styled from 'styled-components'; -import { Zap, Anchor, Pocket, Book } from 'react-feather'; +import { Zap, Anchor, Pocket } from 'react-feather'; import { useNodeBalances } from '../../../hooks/UseNodeBalances'; import Big from 'big.js'; import { renderLine } from '../../../components/generic/helpers'; @@ -15,6 +15,7 @@ import { } from '../../../components/generic/Styled'; import { Price } from '../../../components/price/Price'; import { mediaWidths } from '../../../styles/Themes'; +import { FedimintGatewayCard } from './gateway/FedimintGatewayCard'; const S = { grid: styled.div` @@ -144,18 +145,7 @@ export const AccountInfo = () => { {renderLine('Force Closures', )} - - - - - Fedimint eCash - - - {renderLine('Available', )} - {renderLine('Not Available', )} - {renderLine('Pending', )} - - + ); diff --git a/src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx b/src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx new file mode 100644 index 00000000..3adc847b --- /dev/null +++ b/src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx @@ -0,0 +1,88 @@ +import React, { useState } from 'react'; +import { ApiContext } from '../../../../api/GatewayApiProvider'; +import { + Card, + CardWithTitle, + Separation, + SingleLine, + SubTitle, +} from '../../../../components/generic/Styled'; +import { Anchor } from 'react-feather'; +import { renderLine } from '../../../../components/generic/helpers'; +import { GatewayInfo } from '../../../../api/types'; +import { toast } from 'react-toastify'; +import { Input } from '../../../../components/input'; +import { ColorButton } from '../../../../components/buttons/colorButton/ColorButton'; + +export const FedimintGatewayCard = () => { + const { gateway } = React.useContext(ApiContext); + const [gatewayInfo, setGatewayInfo] = useState({ + federations: [], + fees: { + base_msat: 0, + proportional_millionths: 0, + }, + lightning_alias: '', + lightning_pub_key: '', + version_hash: '', + }); + const [inviteCode, setInviteCode] = useState(''); + + const handleEnter = () => { + gateway + .connectFederation(inviteCode) + .then(() => { + toast.success('Successfully connected to federation!'); + setInviteCode(''); + gateway + .fetchInfo() + .then(setGatewayInfo) + .catch(({ message, error }) => { + console.log(error); + toast.error(message); + }); + }) + .catch(({ message, error }) => { + console.log(error); + toast.error(message); + }); + }; + + return ( + + + + + Fedimint Ecash + + + {gatewayInfo.federations.length === 0 ? ( + <> +
+ + {renderLine('Connect to a Federation', ' ')} + +
+ + setInviteCode(e.target.value)} + /> + + Connect + + + + ) : ( + <>{renderLine('Alias', gatewayInfo.federations[0].federation_id)} + )} +
+
+ ); +}; From 17bf936c6ecf396388419b54e7ff21a26399b095 Mon Sep 17 00:00:00 2001 From: "kody.low" Date: Fri, 17 Nov 2023 16:07:27 -0800 Subject: [PATCH 10/27] feat: refactor to gateway context pattern --- src/client/next.config.js | 2 + src/client/src/api/GatewayApi.ts | 2 + src/client/src/api/GatewayApiProvider.tsx | 21 ----- src/client/src/api/types.ts | 26 ++++++ src/client/src/context/ContextProvider.tsx | 5 +- src/client/src/context/GatewayContext.tsx | 87 +++++++++++++++++++ src/client/src/hooks/UseGatewayEcashTotal.tsx | 14 +++ .../src/hooks/UseGatewayFederations.tsx | 11 +++ .../src/views/home/account/AccountInfo.tsx | 33 ++++--- .../account/gateway/FedimintGatewayCard.tsx | 77 ++++++++-------- .../home/account/pegInEcash/PegInEcash.tsx | 75 +++++++++------- .../home/account/pegOutEcash/PegOutEcash.tsx | 81 +++++++++++------ .../views/home/quickActions/QuickActions.tsx | 4 +- 13 files changed, 306 insertions(+), 132 deletions(-) delete mode 100644 src/client/src/api/GatewayApiProvider.tsx create mode 100644 src/client/src/context/GatewayContext.tsx create mode 100644 src/client/src/hooks/UseGatewayEcashTotal.tsx create mode 100644 src/client/src/hooks/UseGatewayFederations.tsx diff --git a/src/client/next.config.js b/src/client/next.config.js index 29589dc1..ce51dcaa 100644 --- a/src/client/next.config.js +++ b/src/client/next.config.js @@ -28,5 +28,7 @@ module.exports = { disableLnMarkets: process.env.DISABLE_LNMARKETS === 'true', noVersionCheck: process.env.NO_VERSION_CHECK === 'true', logoutUrl: process.env.LOGOUT_URL || '', + fmGatewayUrl: process.env.FM_GATEWAY_URL || '', + fmGatewayPassword: process.env.FM_GATEWAY_PASSWORD || '', }, }; diff --git a/src/client/src/api/GatewayApi.ts b/src/client/src/api/GatewayApi.ts index d987ffad..3a407b76 100644 --- a/src/client/src/api/GatewayApi.ts +++ b/src/client/src/api/GatewayApi.ts @@ -141,3 +141,5 @@ export class GatewayApi { const responseToError = (res: Response): Error => { return new Error(`Status : ${res.status} \nReason : ${res.statusText}\n`); }; + +export const gatewayApi = new GatewayApi(); diff --git a/src/client/src/api/GatewayApiProvider.tsx b/src/client/src/api/GatewayApiProvider.tsx deleted file mode 100644 index dacef0ac..00000000 --- a/src/client/src/api/GatewayApiProvider.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import { GatewayApi } from './GatewayApi'; - -interface ApiContextProps { - // API to interact with the Gateway server - gateway: GatewayApi; -} - -export const ApiContext = React.createContext({ - gateway: new GatewayApi(), -}); - -export const ApiProvider = React.memo(function ApiProvider({ - props, - children, -}: { - props: ApiContextProps; - children: React.ReactNode; -}): JSX.Element { - return {children}; -}); diff --git a/src/client/src/api/types.ts b/src/client/src/api/types.ts index e98b5753..8a13441b 100644 --- a/src/client/src/api/types.ts +++ b/src/client/src/api/types.ts @@ -55,3 +55,29 @@ export enum Network { } export type TransactionId = string; + +export const dummyFederation = { + federation_id: 'test_federation_id', + balance_msat: 1000, + config: { + consensus_version: 1, + epoch_pk: 'test_epoch_pk', + federation_id: 'test_federation_id', + api_endpoints: { + 0: { + name: 'test_api_endpoint_name', + url: 'test_api_endpoint_url', + }, + }, + modules: { + 0: { + config: 'test_module_config', + kind: ModuleKind.Ln, + version: 1, + }, + }, + meta: { + federation_name: 'test_federation_name', + }, + }, +}; diff --git a/src/client/src/context/ContextProvider.tsx b/src/client/src/context/ContextProvider.tsx index a446a5d2..6b3c1a38 100644 --- a/src/client/src/context/ContextProvider.tsx +++ b/src/client/src/context/ContextProvider.tsx @@ -4,6 +4,7 @@ import { ChatProvider } from './ChatContext'; import { RebalanceProvider } from './RebalanceContext'; import { DashProvider } from './DashContext'; import { NotificationProvider } from './NotificationContext'; +import { GatewayProvider } from './GatewayContext'; export const ContextProvider: React.FC<{ children?: ReactNode }> = ({ children, @@ -12,7 +13,9 @@ export const ContextProvider: React.FC<{ children?: ReactNode }> = ({ - {children} + + {children} + diff --git a/src/client/src/context/GatewayContext.tsx b/src/client/src/context/GatewayContext.tsx new file mode 100644 index 00000000..9fda1f74 --- /dev/null +++ b/src/client/src/context/GatewayContext.tsx @@ -0,0 +1,87 @@ +import React, { + createContext, + useContext, + useReducer, + ReactNode, + useEffect, +} from 'react'; +import { GatewayInfo } from '../api/types'; +import { gatewayApi } from '../api/GatewayApi'; + +type State = { + gatewayInfo: GatewayInfo | null; + loading: boolean; + error: string | null; +}; + +type ActionType = + | { + type: 'connected'; + state: GatewayInfo; + } + | { + type: 'error'; + state: string; + }; + +type Dispatch = (action: ActionType) => void; + +export const StateContext = createContext(undefined); +export const DispatchContext = createContext(undefined); + +const initialState: State = { + gatewayInfo: null, + loading: true, + error: null, +}; + +const stateReducer = (state: State, action: ActionType): State => { + switch (action.type) { + case 'connected': + return { ...state, gatewayInfo: action.state, loading: false }; + case 'error': + return { ...state, error: action.state, loading: false }; + default: + return state; + } +}; + +const GatewayProvider: React.FC<{ children?: ReactNode }> = ({ children }) => { + const [state, dispatch] = useReducer(stateReducer, initialState); + + useEffect(() => { + gatewayApi + .fetchInfo() + .then(info => { + dispatch({ type: 'connected', state: info }); + }) + .catch(({ error }) => { + console.log('fetchInfo rejected', error); + dispatch({ type: 'connected', state: error.message }); + }); + }, []); + + return ( + + {children} + + ); +}; + +const useGatewayState = () => { + const context = useContext(StateContext); + if (context === undefined) { + throw new Error('useGatewayState must be used within a GatewayProvider'); + } + return context; +}; + +const useGatewayDispatch = () => { + const context = useContext(DispatchContext); + if (context === undefined) { + throw new Error('useGatewayDispatch must be used within a GatewayProvider'); + } + return context; +}; + +export { GatewayProvider, useGatewayState, useGatewayDispatch }; diff --git a/src/client/src/hooks/UseGatewayEcashTotal.tsx b/src/client/src/hooks/UseGatewayEcashTotal.tsx new file mode 100644 index 00000000..e26fce90 --- /dev/null +++ b/src/client/src/hooks/UseGatewayEcashTotal.tsx @@ -0,0 +1,14 @@ +import Big from 'big.js'; +import { useGatewayState } from '../context/GatewayContext'; + +export const useGatewayEcashTotal = () => { + const { gatewayInfo } = useGatewayState(); + + if (!gatewayInfo) { + return new Big(0).toString(); + } + + return gatewayInfo.federations + .reduce((acc, federation) => acc.add(federation.balance_msat), new Big(0)) + .toString(); +}; diff --git a/src/client/src/hooks/UseGatewayFederations.tsx b/src/client/src/hooks/UseGatewayFederations.tsx new file mode 100644 index 00000000..b1a1bcff --- /dev/null +++ b/src/client/src/hooks/UseGatewayFederations.tsx @@ -0,0 +1,11 @@ +import { useGatewayState } from '../context/GatewayContext'; + +export const useGatewayFederations = () => { + const { gatewayInfo } = useGatewayState(); + + if (!gatewayInfo) { + return []; + } + + return gatewayInfo.federations; +}; diff --git a/src/client/src/views/home/account/AccountInfo.tsx b/src/client/src/views/home/account/AccountInfo.tsx index 0d65b8a2..ccae6c7e 100644 --- a/src/client/src/views/home/account/AccountInfo.tsx +++ b/src/client/src/views/home/account/AccountInfo.tsx @@ -16,12 +16,16 @@ import { import { Price } from '../../../components/price/Price'; import { mediaWidths } from '../../../styles/Themes'; import { FedimintGatewayCard } from './gateway/FedimintGatewayCard'; +import { useGatewayEcashTotal } from '../../../hooks/UseGatewayEcashTotal'; +import { useGatewayState } from '../../../context/GatewayContext'; +import { GatewayInfo } from '../../../api/types'; const S = { - grid: styled.div` + grid: styled.div<{ gatewayInfo?: GatewayInfo | null }>` display: grid; grid-gap: 16px; - grid-template-columns: 1fr 1fr 1fr; + grid-template-columns: ${({ gatewayInfo }) => + gatewayInfo ? '1fr 1fr 1fr' : '1fr 1fr'}; @media (${mediaWidths.mobile}) { display: block; @@ -48,12 +52,15 @@ const sectionColor = '#FFD300'; export const AccountInfo = () => { const { onchain, lightning } = useNodeBalances(); + const { gatewayInfo } = useGatewayState(); + const totalFedimintEcash = useGatewayEcashTotal(); const totalAmount = new Big(onchain.confirmed) .add(onchain.pending) .add(onchain.closing) .add(lightning.confirmed) .add(lightning.pending) + .add(totalFedimintEcash) .toString(); const totalChain = new Big(onchain.confirmed).add(onchain.pending).toString(); @@ -76,7 +83,9 @@ export const AccountInfo = () => { return ( <> - Resume + + Network: {gatewayInfo ? gatewayInfo.network : 'Bitcoin'}{' '} + {
- - Fedimint Ecash -
- -
-
+ {gatewayInfo && ( + + Fedimint Ecash +
+ +
+
+ )} - + @@ -145,7 +156,7 @@ export const AccountInfo = () => { {renderLine('Force Closures', )} - + {gatewayInfo ? : null} ); diff --git a/src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx b/src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx index 3adc847b..bfed00fb 100644 --- a/src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx +++ b/src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx @@ -1,71 +1,60 @@ import React, { useState } from 'react'; -import { ApiContext } from '../../../../api/GatewayApiProvider'; import { Card, CardWithTitle, + OverflowText, Separation, SingleLine, SubTitle, } from '../../../../components/generic/Styled'; -import { Anchor } from 'react-feather'; +import { Sun } from 'react-feather'; import { renderLine } from '../../../../components/generic/helpers'; -import { GatewayInfo } from '../../../../api/types'; import { toast } from 'react-toastify'; import { Input } from '../../../../components/input'; import { ColorButton } from '../../../../components/buttons/colorButton/ColorButton'; +import { Price } from '../../../../components/price/Price'; +import { useGatewayDispatch } from '../../../../context/GatewayContext'; +import { gatewayApi } from '../../../../api/GatewayApi'; +import { GatewayInfo } from '../../../../api/types'; + +interface FedimintGatewayCardProps { + gatewayInfo: GatewayInfo; +} -export const FedimintGatewayCard = () => { - const { gateway } = React.useContext(ApiContext); - const [gatewayInfo, setGatewayInfo] = useState({ - federations: [], - fees: { - base_msat: 0, - proportional_millionths: 0, - }, - lightning_alias: '', - lightning_pub_key: '', - version_hash: '', - }); +export const FedimintGatewayCard = ({ + gatewayInfo, +}: FedimintGatewayCardProps) => { + const gatewayDispath = useGatewayDispatch(); const [inviteCode, setInviteCode] = useState(''); const handleEnter = () => { - gateway - .connectFederation(inviteCode) - .then(() => { - toast.success('Successfully connected to federation!'); - setInviteCode(''); - gateway - .fetchInfo() - .then(setGatewayInfo) - .catch(({ message, error }) => { - console.log(error); - toast.error(message); - }); - }) - .catch(({ message, error }) => { - console.log(error); - toast.error(message); - }); + gatewayApi.connectFederation(inviteCode).then(() => { + gatewayApi + .fetchInfo() + .then(info => gatewayDispath({ type: 'connected', state: info })) + .catch(({ error }) => { + toast.error(error.message); + }); + }); }; return ( - + Fedimint Ecash {gatewayInfo.federations.length === 0 ? ( <> -
- - {renderLine('Connect to a Federation', ' ')} - + {/* TODO: Left Align the Text */} +
+ {'Connect to a Federation'}
setInviteCode(e.target.value)} /> @@ -80,7 +69,17 @@ export const FedimintGatewayCard = () => { ) : ( - <>{renderLine('Alias', gatewayInfo.federations[0].federation_id)} +
+ {renderLine( + 'Amount', + + )} + {renderLine( + 'Federation', + gatewayInfo.federations[0].config.meta.federation_name + )} + {renderLine('ID', gatewayInfo.federations[0].federation_id)} +
)} diff --git a/src/client/src/views/home/account/pegInEcash/PegInEcash.tsx b/src/client/src/views/home/account/pegInEcash/PegInEcash.tsx index c388be3f..11a15d8a 100644 --- a/src/client/src/views/home/account/pegInEcash/PegInEcash.tsx +++ b/src/client/src/views/home/account/pegInEcash/PegInEcash.tsx @@ -1,11 +1,9 @@ -import React, { useState, useEffect } from 'react'; +import React, { useState } from 'react'; import styled from 'styled-components'; import { toast } from 'react-toastify'; import CopyToClipboard from 'react-copy-to-clipboard'; -import { useCreateAddressMutation } from '../../../../graphql/mutations/__generated__/createAddress.generated'; import { QRCodeSVG } from 'qrcode.react'; import { Copy } from 'react-feather'; -import { getErrorContent } from '../../../../utils/error'; import { ColorButton } from '../../../../components/buttons/colorButton/ColorButton'; import { mediaWidths } from '../../../../styles/Themes'; import { SmallSelectWithValue } from '../../../../components/select'; @@ -13,6 +11,9 @@ import { ResponsiveLine, SubTitle, } from '../../../../components/generic/Styled'; +import { Federation } from '../../../../api/types'; +import { gatewayApi } from '../../../../api/GatewayApi'; +import { useGatewayFederations } from '../../../../hooks/UseGatewayFederations'; const S = { row: styled.div` @@ -64,35 +65,30 @@ const Column = styled.div` align-items: center; `; -const options = [ - { label: 'p2tr (Default)', value: 'p2tr' }, - { label: 'p2wpkh (Segwit)', value: 'p2wpkh' }, - { label: 'np2wpkh (Nested Segwit)', value: 'np2wpkh' }, -]; - export const PegInEcashCard = () => { - const [type, setType] = useState(options[0]); - const [received, setReceived] = useState(false); - - const [createAddress, { data, loading }] = useCreateAddressMutation({ - onError: error => toast.error(getErrorContent(error)), - }); + const federations: Federation[] = useGatewayFederations(); + const [selectedFederation, setSelectedFederation] = + useState(null); + const [address, setAddress] = useState(''); - useEffect(() => { - data && data.createAddress && setReceived(true); - }, [data]); + const handleFetchPegInAddress = () => { + if (!selectedFederation) return; + gatewayApi.fetchAddress(selectedFederation.federation_id).then(address => { + setAddress(address); + }); + }; return ( <> - {data && data.createAddress ? ( + {address !== '' ? ( - + - {data.createAddress} + {address} toast.success('Address Copied')} > @@ -106,24 +102,37 @@ export const PegInEcashCard = () => { <> - Address Type: - setType((e[0] || options[1]) as any)} - options={options} - value={type} - isClearable={false} - /> + Into Federation: + {federations.length > 0 && ( + setSelectedFederation(e[0] as any)} + options={federations.map(f => ({ + label: + f.config.meta.federation_name || + 'No connected Federations', + value: f.federation_id || 'No connected Federations', + }))} + value={{ + label: + federations[0].config.meta.federation_name || + 'No connected Federations', + value: + federations[0].federation_id || + 'No connected Federations', + }} + isClearable={false} + /> + )} createAddress({ variables: { type: type.value } })} - disabled={received} + onClick={() => handleFetchPegInAddress()} + disabled={false} withMargin={'0 0 0 16px'} mobileMargin={'16px 0 0'} arrow={true} - loading={loading} mobileFullWidth={true} > - Create Address + Create Peg In Address diff --git a/src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx b/src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx index 3e76fefc..95df48ef 100644 --- a/src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx +++ b/src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx @@ -1,6 +1,5 @@ import React, { useState, useEffect } from 'react'; import { toast } from 'react-toastify'; -import { usePayAddressMutation } from '../../../../graphql/mutations/__generated__/sendToAddress.generated'; import { InputWithDeco } from '../../../../components/input/InputWithDeco'; import { useBitcoinFees } from '../../../../hooks/UseBitcoinFees'; import { @@ -8,7 +7,6 @@ import { SingleLine, SubTitle, } from '../../../../components/generic/Styled'; -import { getErrorContent } from '../../../../utils/error'; import { Input } from '../../../../components/input'; import { MultiButton, @@ -20,6 +18,10 @@ import Modal from '../../../../components/modal/ReactModal'; import { ColorButton } from '../../../../components/buttons/colorButton/ColorButton'; import { renderLine } from '../../../../components/generic/helpers'; import { usePriceState } from '../../../../context/PriceContext'; +import { Federation, dummyFederation } from '../../../../api/types'; +import { SmallSelectWithValue } from '../../../../components/select'; +import { useGatewayFederations } from '../../../../hooks/UseGatewayFederations'; +import { gatewayApi } from '../../../../api/GatewayApi'; export const PegOutEcashCard = ({ setOpen }: { setOpen: () => void }) => { const { fast, halfHour, hour, minimum, dontShow } = useBitcoinFees(); @@ -34,17 +36,26 @@ export const PegOutEcashCard = ({ setOpen }: { setOpen: () => void }) => { const [type, setType] = useState(dontShow || !fetchFees ? 'fee' : 'none'); const [amount, setAmount] = useState(0); const [sendAll, setSendAll] = useState(false); + const federations: Federation[] = useGatewayFederations(); + const [selectedFederation, setSelectedFederation] = useState(dummyFederation); const canSend = address !== '' && (sendAll || tokens > 0) && amount > 0; - const [payAddress, { loading }] = usePayAddressMutation({ - onError: error => toast.error(getErrorContent(error)), - onCompleted: () => { - toast.success('Payment Sent!'); + const handlePegOut = ( + federationId: string, + tokenAmount: { sendAll?: boolean; tokens?: number }, + address: string + ) => { + const amountSat = + sendAll && selectedFederation.balance_msat + ? selectedFederation.balance_msat + : tokenAmount.tokens || 0; + + gatewayApi.requestWithdrawal(federationId, amountSat, address).then(() => { + toast.success('Withdrawal request sent'); setOpen(); - }, - refetchQueries: ['GetNodeInfo', 'GetBalances'], - }); + }); + }; useEffect(() => { if (type === 'none' && amount === 0) { @@ -59,17 +70,17 @@ export const PegOutEcashCard = ({ setOpen }: { setOpen: () => void }) => { return `${amount} blocks`; }; - const typeAmount = () => { - switch (type) { - case 'none': - case 'fee': - return { fee: amount }; - case 'target': - return { target: amount }; - default: - return {}; - } - }; + // const typeAmount = () => { + // switch (type) { + // case 'none': + // case 'fee': + // return { fee: amount }; + // case 'target': + // return { target: amount }; + // default: + // return {}; + // } + // }; const tokenAmount = sendAll ? { sendAll } : { tokens }; @@ -86,12 +97,32 @@ export const PegOutEcashCard = ({ setOpen }: { setOpen: () => void }) => { return ( <> setAddress(value)} /> + + + setSelectedFederation((e[0] || dummyFederation) as any) + } + options={federations.map(f => ({ + label: f.config.meta.federation_name || 'No connected Federations', + value: f.federation_id || 'No connected Federations', + }))} + value={{ + label: + federations[0].config.meta.federation_name || + 'No connected Federations', + value: federations[0].federation_id || 'No connected Federations', + }} + isClearable={false} + maxWidth={'500px'} + /> + + {renderButton(() => setSendAll(true), 'Yes', sendAll)} @@ -190,7 +221,7 @@ export const PegOutEcashCard = ({ setOpen }: { setOpen: () => void }) => { { setModalOpen(true); @@ -210,15 +241,13 @@ export const PegOutEcashCard = ({ setOpen }: { setOpen: () => void }) => { )} - payAddress({ - variables: { address, ...typeAmount(), ...tokenAmount }, - }) + handlePegOut(selectedFederation.federation_id, tokenAmount, address) } disabled={!canSend} withMargin={'16px 0 0'} fullWidth={true} arrow={true} - loading={loading} + loading={false} > Send To Address diff --git a/src/client/src/views/home/quickActions/QuickActions.tsx b/src/client/src/views/home/quickActions/QuickActions.tsx index d36b872e..0dcbe79b 100644 --- a/src/client/src/views/home/quickActions/QuickActions.tsx +++ b/src/client/src/views/home/quickActions/QuickActions.tsx @@ -29,7 +29,8 @@ export const QuickCard = styled.div` border-radius: 4px; border: 1px solid ${cardBorderColor}; height: 100px; - width: 100px; + flex-grow: 1; + flex: 1 0 auto; display: flex; flex-direction: column; justify-content: center; @@ -61,6 +62,7 @@ export const QuickTitle = styled.div` const QuickRow = styled.div` display: flex; flex-wrap: wrap; + justify-content: space-between; `; export const QuickActions = () => { From a4ad2b35349377dd06c1f2cfb0110f72738f3a24 Mon Sep 17 00:00:00 2001 From: "kody.low" Date: Fri, 17 Nov 2023 17:49:26 -0800 Subject: [PATCH 11/27] fix: minor run fixes --- src/client/src/hooks/UseGatewayEcashTotal.tsx | 2 +- .../src/views/home/account/AccountInfo.tsx | 2 +- .../gateway/.FedimintGatewayCard.tsx.swp | Bin 0 -> 12288 bytes .../account/gateway/FedimintGatewayCard.tsx | 7 +++---- 4 files changed, 5 insertions(+), 6 deletions(-) create mode 100644 src/client/src/views/home/account/gateway/.FedimintGatewayCard.tsx.swp diff --git a/src/client/src/hooks/UseGatewayEcashTotal.tsx b/src/client/src/hooks/UseGatewayEcashTotal.tsx index e26fce90..ce010cf6 100644 --- a/src/client/src/hooks/UseGatewayEcashTotal.tsx +++ b/src/client/src/hooks/UseGatewayEcashTotal.tsx @@ -4,7 +4,7 @@ import { useGatewayState } from '../context/GatewayContext'; export const useGatewayEcashTotal = () => { const { gatewayInfo } = useGatewayState(); - if (!gatewayInfo) { + if (!gatewayInfo || !gatewayInfo.federations) { return new Big(0).toString(); } diff --git a/src/client/src/views/home/account/AccountInfo.tsx b/src/client/src/views/home/account/AccountInfo.tsx index ccae6c7e..d75216c9 100644 --- a/src/client/src/views/home/account/AccountInfo.tsx +++ b/src/client/src/views/home/account/AccountInfo.tsx @@ -84,7 +84,7 @@ export const AccountInfo = () => { <> - Network: {gatewayInfo ? gatewayInfo.network : 'Bitcoin'}{' '} + Network: {gatewayInfo?.network ? gatewayInfo.network : 'Bitcoin'}{' '} diff --git a/src/client/src/views/home/account/gateway/.FedimintGatewayCard.tsx.swp b/src/client/src/views/home/account/gateway/.FedimintGatewayCard.tsx.swp new file mode 100644 index 0000000000000000000000000000000000000000..8bcdd22863f83ad35d13ae1a2bd1eb2636104c2b GIT binary patch literal 12288 zcmeI2O^6&t6vr#Uuc$E+ji8`Z)A&B2R!(StV+DoPIGzxrdQW@abxDydeUyQmgzHgmEdzfA@BUL#$Vn_cklb2kV}!jrHXI%c@B2T>@xFCMA4<$ zb8$3#*bX9(1tSe#RSuoS$m_OwC=;hCWUE_u>Oy*v2xk-7Z8RJdg+7l}MG||C7YNv9 zU)KfSNSs#G<_`0`sEgtzlYE11Ij6WU+9H&v^ZNxB`?gFrNBTFnMuA&ffxYC(!*khI ze|+j7ePI6!x3(N+^hN=rfKk9GU=%P47zK<1MuA&Q0omC_Uc;Do7vo+luDeFA#jUv* z1&jhl0i%FXz$jo8FbWt2i~>dhqkvJsDDXd2fcb zkHP!k3fKlcuna2T=lclx47?5;@cUjuJ_MJ63yy+^!1a3x`5XKNz5`!^cfn;)11@+B z{BjQ=*TCmMf>mIHDewq503HN;z@K*$@+-IoJ^|Yx0WX0=;8F0~9zs3^F}Mg$fjO`X z{B##$0B->aPJ@HspF0Wp5qu4;Ud<#9l09U~W z;BD|GP&&T>%*QBT6fg?(73du$luoN(l)8>O!L)|sQL91*{8(047MFLh?iCez8(*vs z>Qqr0b9I#Jj0kzfT3WPbXmMU@DQrY`gQJc~5rxV5>ILogqVR`2k94Fw-@uO-g$>cP z+gvi;XUN)|sHTIDg;QHa1l9~0ln)0!R5214Bsmugk5krG$H8jp4dSY^fQ25v*iM-2 zQD;~wO0DCWi~kmg3#n-$w*p>EQ`%;6Q-t%>s&+Q1;z)kAXs%SUuo=EfwLqkbEKXIjz-d)EaZ? zYGWH2!iYpFMs$ykn-CuUj?sk6rG5t$Zc7BurM=FAE+1PglxF36OyiMv0_O2n6kuuA zrp~cMa+>!5nSDMr5}~^kcDlpLyOZY8b;fom7Vz119yfw$W0h~pW2sflC6y6nRNEju z*BP=LietihoPA0yL^}7hx(u&IC1vUyqN`^Y&(6~`ydmlFKr}-tTb!y;=pjef#vQDt zNt?_Lc-WM!Y?iC^S#7bqE4;(DKeSS03x6Cq0(5U|&{fqla}!6Y&aG z#N3ggjlIJ}xGJyaL&?4lrP!FuZX6QG!oIyx=Qu7v_~6p)TWkg zJN+Nl5ssS8#DeRxQPDdlXkwcpCYb0Ap=VK13bmsH$Skpuox*k@zttV(&(56!_98?X zW{0#p>H+Iyrg~c~X;0|A@1dSOwi3r1Jj3+oneH{qrZ@8^RLa#`WqYyTD(1|SvssyF zZ0UA`*P*^~e~R!$8+4P09OHIcJm~OvXxdb|DJ9FhYH;jV9;2tS{3c#k)SH73drHfU qrrv)B&yDP^pEK2+p8M7P(EDLoFwFedimint Ecash - {gatewayInfo.federations.length === 0 ? ( + {!gatewayInfo.federations || gatewayInfo.federations.length === 0 ? ( <> {/* TODO: Left Align the Text */} -
- {'Connect to a Federation'} +
+ {'Connect to a Federation'}
Date: Fri, 17 Nov 2023 19:52:34 -0800 Subject: [PATCH 12/27] feat: add nix flake --- flake.nix | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/flake.nix b/flake.nix index b9a59cd0..9871f8ea 100644 --- a/flake.nix +++ b/flake.nix @@ -2,14 +2,26 @@ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.05"; flake-utils.url = "github:numtide/flake-utils"; + fedimint = { + url = + "github:fedimint/fedimint?rev=f58f1913e62b6529a2ff36ec5c89a3852aba7ca7"; + }; }; outputs = { self, nixpkgs, flake-utils, fedimint }: flake-utils.lib.eachDefaultSystem (system: - let pkgs = import nixpkgs { inherit system; }; + let + pkgs = import nixpkgs { inherit system; }; + fmLib = fedimint.lib.${system}; in { devShells = fmLib.devShells // { default = fmLib.devShells.default.overrideAttrs (prev: { - nativeBuildInputs = [ pkgs.nodejs ] ++ prev.nativeBuildInputs; + nativeBuildInputs = [ + pkgs.mprocs + pkgs.nodejs + fedimint.packages.${system}.devimint + fedimint.packages.${system}.gateway-pkgs + fedimint.packages.${system}.fedimint-pkgs + ] ++ prev.nativeBuildInputs; shellHook = '' npm install ''; From 3240de722b2974145a8d3911d8059db622da5b9d Mon Sep 17 00:00:00 2001 From: "kody.low" Date: Mon, 20 Nov 2023 07:25:26 -0800 Subject: [PATCH 13/27] fix: local_data dir for dev --- .gitignore | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 4729ac5e..03b17961 100644 --- a/.gitignore +++ b/.gitignore @@ -44,5 +44,6 @@ lerna-debug.log* # config files config.yaml -data -data/* + +# For Dev +local_data From 3c08692a56b88088712033cd0b461842b4abc809 Mon Sep 17 00:00:00 2001 From: "kody.low" Date: Mon, 20 Nov 2023 07:25:26 -0800 Subject: [PATCH 14/27] devimint setup scripts fix: local_data dir for dev fix: yaml config file write to temp --- mprocs-nix-gateway.yml | 30 +++++++++++++++++ package.json | 3 +- scripts/mprocs-nix-gateway.sh | 37 +++++++++++++++++++++ scripts/mprocs-nix-guardian.sh | 21 ++++++++++++ scripts/mprocs-nix.sh | 43 +++++++++++++++++++++++++ scripts/mprocs-user-shell.sh | 41 +++++++++++++++++++++++ scripts/replace-react-env.js | 59 ++++++++++++++++++++++++++++++++++ 7 files changed, 233 insertions(+), 1 deletion(-) create mode 100644 mprocs-nix-gateway.yml create mode 100644 scripts/mprocs-nix-gateway.sh create mode 100644 scripts/mprocs-nix-guardian.sh create mode 100755 scripts/mprocs-nix.sh create mode 100644 scripts/mprocs-user-shell.sh create mode 100644 scripts/replace-react-env.js diff --git a/mprocs-nix-gateway.yml b/mprocs-nix-gateway.yml new file mode 100644 index 00000000..2f2f1811 --- /dev/null +++ b/mprocs-nix-gateway.yml @@ -0,0 +1,30 @@ +procs: + user: + shell: bash --init-file scripts/mprocs-user-shell.sh + stop: SIGKILL + thunderhub: + shell: bash --init-file scripts/mprocs-nix-gateway.sh + stop: SIGKILL + env: + PORT: '3000' + BROWSER: none + fedimint0: + shell: tail -n +0 -F $FM_LOGS_DIR/fedimintd-0.log + fedimint1: + shell: tail -n +0 -F $FM_LOGS_DIR/fedimintd-1.log + fedimint2: + shell: tail -n +0 -F $FM_LOGS_DIR/fedimintd-2.log + fedimint3: + shell: tail -n +0 -F $FM_LOGS_DIR/fedimintd-3.log + cln-gw: + shell: tail -n +0 -F $FM_LOGS_DIR/gatewayd-cln.log + lnd-gw: + shell: tail -n +0 -F $FM_LOGS_DIR/gatewayd-lnd.log + cln: + shell: tail -n +0 -F $FM_LOGS_DIR/lightningd.log + lnd: + shell: tail -n +0 -F $FM_LOGS_DIR/lnd.log + bitcoind: + shell: tail -n +0 -F $FM_LOGS_DIR/bitcoind.log + devimint: + shell: tail -n +0 -F $FM_LOGS_DIR/devimint.log diff --git a/package.json b/package.json index f0306575..804a54e9 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,8 @@ "update": "sh ./scripts/updateToLatest.sh", "build:image": "docker build --pull --rm -f Dockerfile -t thunderhub:testing '.'", "build:image:base": "docker build --pull --rm -f Dockerfile --build-arg BASE_PATH=/thub -t thunderhub:testing .", - "prepare": "husky install" + "prepare": "husky install", + "nix-gateway": "./scripts/mprocs-nix.sh dev-fed mprocs-nix-gateway.yml" }, "dependencies": { "@apollo/client": "^3.8.8", diff --git a/scripts/mprocs-nix-gateway.sh b/scripts/mprocs-nix-gateway.sh new file mode 100644 index 00000000..e6616bbd --- /dev/null +++ b/scripts/mprocs-nix-gateway.sh @@ -0,0 +1,37 @@ +# shellcheck shell=bash + +set -eo pipefail + +eval "$(devimint env)" + +echo Waiting for devimint to start up fedimint and gateway + +STATUS="$(devimint wait)" +if [ "$STATUS" = "ERROR" ] +then + echo "fedimint didn't start correctly" + echo "See other panes for errors" + exit 1 +fi + +TEMP_FILE=$(mktemp) +FM_LND_RPC_STRIPPED=$(echo $FM_LND_RPC_ADDR | sed 's/http[s]\?:\/\///') + +cat << EOF > "$TEMP_FILE" +masterPassword: password +accounts: + - name: test-regtest + serverUrl: $FM_LND_RPC_STRIPPED + macaroonPath: $FM_LND_MACAROON + certificatePath: $FM_LND_TLS_CERT +EOF + +echo $TEMP_FILE +# ----------- +# Fedimint Config +# ----------- +export ACCOUNT_CONFIG_PATH=$TEMP_FILE +export FM_GATEWAY_URL=$FM_GATEWAY_API_ADDR +export FM_GATEWAY_PASSWORD=$FM_GATEWAY_PASSWORD + +npm run start:dev diff --git a/scripts/mprocs-nix-guardian.sh b/scripts/mprocs-nix-guardian.sh new file mode 100644 index 00000000..6cfc17ec --- /dev/null +++ b/scripts/mprocs-nix-guardian.sh @@ -0,0 +1,21 @@ +# shellcheck shell=bash + +set -eo pipefail + +eval "$(devimint env)" + +echo Waiting for devimint to start up fedimint and gateway + +STATUS="$(devimint wait)" +if [ "$STATUS" = "ERROR" ] +then + echo "fedimint didn't start correctly" + echo "See other panes for errors" + exit 1 +fi + +# Conigure UI env from devimint env +CONFIG_PORT=$(($FM_PORT_FEDIMINTD_BASE + 1)) # Fedimintd 0 config AOU port is always base + 1 +export REACT_APP_FM_CONFIG_API="ws://127.0.0.1:$CONFIG_PORT" + +yarn dev:guardian-ui diff --git a/scripts/mprocs-nix.sh b/scripts/mprocs-nix.sh new file mode 100755 index 00000000..80ab44a3 --- /dev/null +++ b/scripts/mprocs-nix.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +if [[ -z "${IN_NIX_SHELL:-}" ]]; then + echo "Run "nix develop" first" + exit 1 +fi + +DEVIMINT_COMMAND=$1 +MPROCS_PATH=$2 + +export FM_TEST_DIR="$TMP/fm-$(LC_ALL=C tr -dc A-Za-z0-9 /dev/null & +echo $! >> $FM_PID_FILE + + +# Function for killing processes stored in FM_PID_FILE in reverse-order they were created in +function kill_fedimint_processes { + echo "Killing fedimint processes" + PIDS=$(cat $FM_PID_FILE | sed '1!G;h;$!d') # sed reverses order + if [ -n "$PIDS" ] + then + kill $PIDS 2>/dev/null + fi + rm -f $FM_PID_FILE +} + +trap kill_fedimint_processes EXIT + +echo "PATH: $MPROCS_PATH" +mprocs -c $MPROCS_PATH diff --git a/scripts/mprocs-user-shell.sh b/scripts/mprocs-user-shell.sh new file mode 100644 index 00000000..5a14e079 --- /dev/null +++ b/scripts/mprocs-user-shell.sh @@ -0,0 +1,41 @@ +# shellcheck shell=bash + +eval "$(devimint env)" + +echo Waiting for devimint to start up fedimint + +STATUS="$(devimint wait)" +if [ "$STATUS" = "ERROR" ] +then + echo "fedimint didn't start correctly" + echo "See other panes for errors" + exit 1 +fi + +alias lightning-cli="\$FM_LIGHTNING_CLI" +alias lncli="\$FM_LNCLI" +alias bitcoin-cli="\$FM_BTC_CLIENT" +alias fedimint-cli="\$FM_MINT_CLIENT" +alias gateway-cln="\$FM_GWCLI_CLN" +alias gateway-lnd="\$FM_GWCLI_LND" + +eval "$(fedimint-cli completion bash)" || true +eval "$(gateway-cli completion bash)" || true + +echo Done! +echo +echo "This shell provides the following aliases:" +echo "" +echo " fedimint-cli - cli client to interact with the federation" +echo " lightning-cli - cli client for Core Lightning" +echo " lncli - cli client for LND" +echo " bitcoin-cli - cli client for bitcoind" +echo " gateway-cln - cli client for the CLN gateway" +echo " gateway-lnd - cli client for the LND gateway" +echo +echo "Use '--help' on each command for more information" +echo "" +echo "Important mprocs key sequences:" +echo "" +echo " ctrl+a - switching between panels" +echo " ctrl+a q - quit mprocs" diff --git a/scripts/replace-react-env.js b/scripts/replace-react-env.js new file mode 100644 index 00000000..4388c21e --- /dev/null +++ b/scripts/replace-react-env.js @@ -0,0 +1,59 @@ +const fs = require('fs'); +const path = require('path'); + +const targetDir = process.argv[2]; + +if (!targetDir) { + console.log('Please provide a directory path.'); + process.exit(1); +} + +/** + * Give a file path, replace all {{REACT_APP_ENV}} in its contents with + * their actual environment variable value. + */ +function processFile(filePath) { + const content = fs.readFileSync(filePath, 'utf8'); + const envVariableRegex = /\{\{REACT_APP_([^}]+)\}\}/g; + const matches = content.match(envVariableRegex); + + if (!matches) { + return; + } + + let replacedContent = content; + matches.forEach((match) => { + // Trim off {{ and }} from match + const variableName = match.slice(2, -2); + const envValue = process.env[variableName] || ''; + replacedContent = replacedContent.replace(match, envValue); + }); + + fs.writeFileSync(filePath, replacedContent, 'utf8'); +} + +function processDirectory(directoryPath) { + const files = fs.readdirSync(directoryPath); + + files.forEach((file) => { + const filePath = path.join(directoryPath, file); + const stats = fs.statSync(filePath); + + if (stats.isDirectory()) { + processDirectory(filePath); + } else { + processFile(filePath); + } + }); +} + +try { + processDirectory(targetDir); + console.log('Environment variables replaced successfully.'); +} catch (error) { + console.error( + 'An error occurred while replacing environment variables:', + error + ); + process.exit(1); +} From 22e81f09d467cad42402c2c062b0dcc92617893d Mon Sep 17 00:00:00 2001 From: "kody.low" Date: Thu, 23 Nov 2023 14:42:53 -0800 Subject: [PATCH 15/27] fix: fix gateway password and url assignment from publicRuntimeConfig --- .direnv/flake-profile | 1 + .direnv/flake-profile-1-link | 1 + .envrc | 1 + scripts/mprocs-nix-gateway.sh | 3 +- src/client/next.config.js | 2 +- src/client/src/api/GatewayApi.ts | 51 ++++--------------- .../account/gateway/FedimintGatewayCard.tsx | 9 +++- 7 files changed, 23 insertions(+), 45 deletions(-) create mode 120000 .direnv/flake-profile create mode 120000 .direnv/flake-profile-1-link create mode 100644 .envrc diff --git a/.direnv/flake-profile b/.direnv/flake-profile new file mode 120000 index 00000000..0c05709d --- /dev/null +++ b/.direnv/flake-profile @@ -0,0 +1 @@ +flake-profile-1-link \ No newline at end of file diff --git a/.direnv/flake-profile-1-link b/.direnv/flake-profile-1-link new file mode 120000 index 00000000..3a6b04ce --- /dev/null +++ b/.direnv/flake-profile-1-link @@ -0,0 +1 @@ +/nix/store/xnjqp9yyak09ca78kr0in3v60fw1lqgk-nix-shell-env \ No newline at end of file diff --git a/.envrc b/.envrc new file mode 100644 index 00000000..3550a30f --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/scripts/mprocs-nix-gateway.sh b/scripts/mprocs-nix-gateway.sh index e6616bbd..1bd376bc 100644 --- a/scripts/mprocs-nix-gateway.sh +++ b/scripts/mprocs-nix-gateway.sh @@ -26,12 +26,11 @@ accounts: certificatePath: $FM_LND_TLS_CERT EOF -echo $TEMP_FILE # ----------- # Fedimint Config # ----------- export ACCOUNT_CONFIG_PATH=$TEMP_FILE -export FM_GATEWAY_URL=$FM_GATEWAY_API_ADDR +export FM_GATEWAY_API=$FM_GATEWAY_API_ADDR export FM_GATEWAY_PASSWORD=$FM_GATEWAY_PASSWORD npm run start:dev diff --git a/src/client/next.config.js b/src/client/next.config.js index ce51dcaa..dd08183b 100644 --- a/src/client/next.config.js +++ b/src/client/next.config.js @@ -28,7 +28,7 @@ module.exports = { disableLnMarkets: process.env.DISABLE_LNMARKETS === 'true', noVersionCheck: process.env.NO_VERSION_CHECK === 'true', logoutUrl: process.env.LOGOUT_URL || '', - fmGatewayUrl: process.env.FM_GATEWAY_URL || '', + fmGatewayUrl: process.env.FM_GATEWAY_API || '', fmGatewayPassword: process.env.FM_GATEWAY_PASSWORD || '', }, }; diff --git a/src/client/src/api/GatewayApi.ts b/src/client/src/api/GatewayApi.ts index 3a407b76..09f9beba 100644 --- a/src/client/src/api/GatewayApi.ts +++ b/src/client/src/api/GatewayApi.ts @@ -1,41 +1,16 @@ +// import { publicRuntimeConfig } from '../../next.config'; +// import { publicRuntimeConfig } from '../../next.config'; +import getConfig from 'next/config'; import { GatewayInfo, Federation } from './types'; -const SESSION_STORAGE_KEY = 'gateway-ui-key'; +// const SESSION_STORAGE_KEY = 'gateway-ui-key'; + +const { publicRuntimeConfig } = getConfig(); // GatewayApi is an implementation of the ApiInterface export class GatewayApi { - private baseUrl: string | undefined = process.env.FM_GATEWAY_API; - - // Tests a provided password, or the one in the environment config, or the one in session storage - testPassword = async (password?: string): Promise => { - const tempPassword = - password || this.getPassword() || process.env.FM_GATEWAY_PASSWORD; - - if (!tempPassword) { - return false; - } - - // Replace with temp password to check. - sessionStorage.setItem(SESSION_STORAGE_KEY, tempPassword); - - try { - await this.fetchInfo(); - return true; - } catch (err) { - // TODO: make sure error is auth error, not unrelated - console.error(err); - this.clearPassword(); - return false; - } - }; - - private getPassword = (): string | null => { - return sessionStorage.getItem(SESSION_STORAGE_KEY); - }; - - clearPassword = () => { - sessionStorage.removeItem(SESSION_STORAGE_KEY); - }; + private baseUrl: string | undefined = publicRuntimeConfig.fmGatewayUrl; + private password: string | undefined = publicRuntimeConfig.fmGatewayPassword; private post = async (api: string, body: unknown): Promise => { if (this.baseUrl === undefined) { @@ -44,18 +19,11 @@ export class GatewayApi { ); } - const password = this.getPassword(); - if (!password) { - throw new Error( - 'Misconfigured Gateway API. Make sure gateway password is configured appropriately' - ); - } - return fetch(`${this.baseUrl}/${api}`, { method: 'POST', headers: { 'Content-Type': 'application/json', - Authorization: `Bearer ${password}`, + Authorization: `Bearer ${this.password}`, }, body: JSON.stringify(body), }); @@ -72,6 +40,7 @@ export class GatewayApi { throw responseToError(res); } catch (error) { + console.log(`baseUrl`, this.baseUrl); return Promise.reject({ message: 'Error fetching gateway info', error }); } }; diff --git a/src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx b/src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx index ace9cd2f..4fbc76c6 100644 --- a/src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx +++ b/src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx @@ -37,6 +37,10 @@ export const FedimintGatewayCard = ({ }); }; + const formatFederationId = (id: string) => { + return `${id.slice(0, 6)}...${id.slice(-6)}`; + }; + return ( @@ -77,7 +81,10 @@ export const FedimintGatewayCard = ({ 'Federation', gatewayInfo.federations[0].config.meta.federation_name )} - {renderLine('ID', gatewayInfo.federations[0].federation_id)} + {renderLine( + 'ID', + formatFederationId(gatewayInfo.federations[0].federation_id) + )}
)}
From 51c324fef7b658432f0bed210f59436cdb8258c6 Mon Sep 17 00:00:00 2001 From: "kody.low" Date: Thu, 23 Nov 2023 15:11:32 -0800 Subject: [PATCH 16/27] fix: fix peg out command --- .../src/views/home/account/AccountButtons.tsx | 20 +++++----- .../home/account/pegOutEcash/PegOutEcash.tsx | 37 ++++++++++--------- 2 files changed, 30 insertions(+), 27 deletions(-) diff --git a/src/client/src/views/home/account/AccountButtons.tsx b/src/client/src/views/home/account/AccountButtons.tsx index 54526508..9aa8aba5 100644 --- a/src/client/src/views/home/account/AccountButtons.tsx +++ b/src/client/src/views/home/account/AccountButtons.tsx @@ -39,10 +39,10 @@ export const AccountButtons = () => { return setState('none')} />; case 'receive_chain': return ; - case 'pegin_ecash': - return ; case 'pegout_ecash': return setState('none')} />; + case 'pegin_ecash': + return ; default: return null; } @@ -102,30 +102,30 @@ export const AccountButtons = () => { Receive
- setState(state === 'pegin_ecash' ? 'none' : 'pegin_ecash') + setState(state === 'pegout_ecash' ? 'none' : 'pegout_ecash') } > - {state === 'pegin_ecash' ? ( + {state === 'pegout_ecash' ? ( ) : ( )} - Peg In + Peg Out - setState(state === 'pegout_ecash' ? 'none' : 'pegout_ecash') + setState(state === 'pegin_ecash' ? 'none' : 'pegin_ecash') } > - {state === 'pegout_ecash' ? ( + {state === 'pegin_ecash' ? ( ) : ( )} - Peg Out + Peg In {state !== 'none' && {renderContent()}} diff --git a/src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx b/src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx index 95df48ef..c43f60f9 100644 --- a/src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx +++ b/src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx @@ -18,7 +18,7 @@ import Modal from '../../../../components/modal/ReactModal'; import { ColorButton } from '../../../../components/buttons/colorButton/ColorButton'; import { renderLine } from '../../../../components/generic/helpers'; import { usePriceState } from '../../../../context/PriceContext'; -import { Federation, dummyFederation } from '../../../../api/types'; +import { Federation } from '../../../../api/types'; import { SmallSelectWithValue } from '../../../../components/select'; import { useGatewayFederations } from '../../../../hooks/UseGatewayFederations'; import { gatewayApi } from '../../../../api/GatewayApi'; @@ -36,25 +36,32 @@ export const PegOutEcashCard = ({ setOpen }: { setOpen: () => void }) => { const [type, setType] = useState(dontShow || !fetchFees ? 'fee' : 'none'); const [amount, setAmount] = useState(0); const [sendAll, setSendAll] = useState(false); + const [selectedFederation, setSelectedFederation] = useState(0); const federations: Federation[] = useGatewayFederations(); - const [selectedFederation, setSelectedFederation] = useState(dummyFederation); const canSend = address !== '' && (sendAll || tokens > 0) && amount > 0; const handlePegOut = ( - federationId: string, + federationIdx: number, tokenAmount: { sendAll?: boolean; tokens?: number }, address: string ) => { - const amountSat = - sendAll && selectedFederation.balance_msat - ? selectedFederation.balance_msat - : tokenAmount.tokens || 0; + const amountSat = sendAll + ? federations[selectedFederation].balance_msat + : tokenAmount.tokens || 0; - gatewayApi.requestWithdrawal(federationId, amountSat, address).then(() => { - toast.success('Withdrawal request sent'); - setOpen(); - }); + console.log('selectedFederation', selectedFederation); + console.log('amountSat', amountSat); + gatewayApi + .requestWithdrawal( + federations[federationIdx].federation_id, + amountSat, + address + ) + .then(() => { + toast.success('Withdrawal request sent'); + setOpen(); + }); }; useEffect(() => { @@ -105,9 +112,7 @@ export const PegOutEcashCard = ({ setOpen }: { setOpen: () => void }) => { - setSelectedFederation((e[0] || dummyFederation) as any) - } + callback={e => setSelectedFederation(Number(e))} options={federations.map(f => ({ label: f.config.meta.federation_name || 'No connected Federations', value: f.federation_id || 'No connected Federations', @@ -240,9 +245,7 @@ export const PegOutEcashCard = ({ setOpen }: { setOpen: () => void }) => { type === 'target' ? `${amount} Blocks` : `${amount} Sats/Byte` )} - handlePegOut(selectedFederation.federation_id, tokenAmount, address) - } + onClick={() => handlePegOut(selectedFederation, tokenAmount, address)} disabled={!canSend} withMargin={'16px 0 0'} fullWidth={true} From 25c83188efa5efc06eb04e15167b44c59f862f94 Mon Sep 17 00:00:00 2001 From: "kody.low" Date: Fri, 24 Nov 2023 14:23:58 -0800 Subject: [PATCH 17/27] fix: peg in ecash card --- .../views/home/account/pegInEcash/PegInEcash.tsx | 15 +++++++++------ .../home/account/pegOutEcash/PegOutEcash.tsx | 6 +++--- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/client/src/views/home/account/pegInEcash/PegInEcash.tsx b/src/client/src/views/home/account/pegInEcash/PegInEcash.tsx index 11a15d8a..cf96da9d 100644 --- a/src/client/src/views/home/account/pegInEcash/PegInEcash.tsx +++ b/src/client/src/views/home/account/pegInEcash/PegInEcash.tsx @@ -67,15 +67,18 @@ const Column = styled.div` export const PegInEcashCard = () => { const federations: Federation[] = useGatewayFederations(); - const [selectedFederation, setSelectedFederation] = - useState(null); + const [selectedFederation, setSelectedFederation] = useState(0); const [address, setAddress] = useState(''); const handleFetchPegInAddress = () => { - if (!selectedFederation) return; - gatewayApi.fetchAddress(selectedFederation.federation_id).then(address => { - setAddress(address); - }); + gatewayApi + .fetchAddress(federations[selectedFederation].federation_id) + .then(address => { + setAddress(address); + }) + .catch(e => { + toast.error('Error fetching peg out address', e); + }); }; return ( diff --git a/src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx b/src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx index c43f60f9..2c4b6dfe 100644 --- a/src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx +++ b/src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx @@ -49,9 +49,6 @@ export const PegOutEcashCard = ({ setOpen }: { setOpen: () => void }) => { const amountSat = sendAll ? federations[selectedFederation].balance_msat : tokenAmount.tokens || 0; - - console.log('selectedFederation', selectedFederation); - console.log('amountSat', amountSat); gatewayApi .requestWithdrawal( federations[federationIdx].federation_id, @@ -61,6 +58,9 @@ export const PegOutEcashCard = ({ setOpen }: { setOpen: () => void }) => { .then(() => { toast.success('Withdrawal request sent'); setOpen(); + }) + .catch(e => { + toast.error('Error sending withdrawal request', e); }); }; From 8bdccdaea19a631963eb8e1fa1f62de9d9f6bb64 Mon Sep 17 00:00:00 2001 From: "kody.low" Date: Tue, 28 Nov 2023 11:42:34 -0800 Subject: [PATCH 18/27] feat: fedimint 0.2 api updates --- .direnv/flake-profile | 1 - .direnv/flake-profile-1-link | 1 - flake.lock | 129 ++++++------------------------- flake.nix | 2 +- src/client/src/api/GatewayApi.ts | 9 ++- 5 files changed, 31 insertions(+), 111 deletions(-) delete mode 120000 .direnv/flake-profile delete mode 120000 .direnv/flake-profile-1-link diff --git a/.direnv/flake-profile b/.direnv/flake-profile deleted file mode 120000 index 0c05709d..00000000 --- a/.direnv/flake-profile +++ /dev/null @@ -1 +0,0 @@ -flake-profile-1-link \ No newline at end of file diff --git a/.direnv/flake-profile-1-link b/.direnv/flake-profile-1-link deleted file mode 120000 index 3a6b04ce..00000000 --- a/.direnv/flake-profile-1-link +++ /dev/null @@ -1 +0,0 @@ -/nix/store/xnjqp9yyak09ca78kr0in3v60fw1lqgk-nix-shell-env \ No newline at end of file diff --git a/flake.lock b/flake.lock index c4f8c2bc..1792105c 100644 --- a/flake.lock +++ b/flake.lock @@ -43,27 +43,24 @@ }, "crane": { "inputs": { - "flake-compat": "flake-compat", - "flake-utils": "flake-utils_3", "nixpkgs": [ "fedimint", "flakebox", "nixpkgs" - ], - "rust-overlay": "rust-overlay" + ] }, "locked": { - "lastModified": 1697596235, - "narHash": "sha256-4VTrrTdoA1u1wyf15krZCFl3c29YLesSNioYEgfb2FY=", - "owner": "dpc", + "lastModified": 1699217310, + "narHash": "sha256-xpW3VFUG7yE6UE6Wl0dhqencuENSkV7qpnpe9I8VbPw=", + "owner": "ipetkov", "repo": "crane", - "rev": "c97a0c0d83bfdf01c29113c5592a3defc27cb315", + "rev": "d535642bbe6f377077f7c23f0febb78b1463f449", "type": "github" }, "original": { - "owner": "dpc", + "owner": "ipetkov", "repo": "crane", - "rev": "c97a0c0d83bfdf01c29113c5592a3defc27cb315", + "rev": "d535642bbe6f377077f7c23f0febb78b1463f449", "type": "github" } }, @@ -101,17 +98,17 @@ "nixpkgs-unstable": "nixpkgs-unstable_2" }, "locked": { - "lastModified": 1699573846, - "narHash": "sha256-4xKNhUE7e3GjjMbNib35B7eJWjuDIbYtwoHBOWYtqFA=", + "lastModified": 1701034148, + "narHash": "sha256-e2+nccJSCqprcE5Tr9/6UU7ctYcozk1xglGTa9jbEBs=", "owner": "fedimint", "repo": "fedimint", - "rev": "f58f1913e62b6529a2ff36ec5c89a3852aba7ca7", + "rev": "f47e6638c98c75a8c146144a69d236b4763848bf", "type": "github" }, "original": { "owner": "fedimint", "repo": "fedimint", - "rev": "f58f1913e62b6529a2ff36ec5c89a3852aba7ca7", + "rev": "f47e6638c98c75a8c146144a69d236b4763848bf", "type": "github" } }, @@ -138,22 +135,6 @@ "type": "github" } }, - "flake-compat": { - "flake": false, - "locked": { - "lastModified": 1673956053, - "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, "flake-utils": { "locked": { "lastModified": 1676283394, @@ -188,24 +169,6 @@ } }, "flake-utils_3": { - "inputs": { - "systems": "systems_3" - }, - "locked": { - "lastModified": 1694529238, - "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_4": { "inputs": { "systems": [ "fedimint", @@ -227,9 +190,9 @@ "type": "github" } }, - "flake-utils_5": { + "flake-utils_4": { "inputs": { - "systems": "systems_5" + "systems": "systems_4" }, "locked": { "lastModified": 1694529238, @@ -250,23 +213,23 @@ "android-nixpkgs": "android-nixpkgs", "crane": "crane", "fenix": "fenix", - "flake-utils": "flake-utils_4", + "flake-utils": "flake-utils_3", "nixpkgs": "nixpkgs", "nixpkgs-unstable": "nixpkgs-unstable", - "systems": "systems_4" + "systems": "systems_3" }, "locked": { - "lastModified": 1697820035, - "narHash": "sha256-l+rxi/P5qt+Ud+qQCyOiKB001P/A3J0Hsh7PNg7FyWM=", + "lastModified": 1699681206, + "narHash": "sha256-vg/aDhDPV8QUi2rE3O5C/FgSaxOPZRsuRNvto5aY/JM=", "owner": "rustshop", "repo": "flakebox", - "rev": "0d866b57cd09e30e8385150e846885236ea33bdb", + "rev": "390c23bc911b354f16db4d925dbe9b1f795308ed", "type": "github" }, "original": { "owner": "rustshop", "repo": "flakebox", - "rev": "0d866b57cd09e30e8385150e846885236ea33bdb", + "rev": "390c23bc911b354f16db4d925dbe9b1f795308ed", "type": "github" } }, @@ -320,17 +283,17 @@ }, "nixpkgs-unstable_2": { "locked": { - "lastModified": 1697059129, - "narHash": "sha256-9NJcFF9CEYPvHJ5ckE8kvINvI84SZZ87PvqMbH6pro0=", + "lastModified": 1700794826, + "narHash": "sha256-RyJTnTNKhO0yqRpDISk03I/4A67/dp96YRxc86YOPgU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5e4c2ada4fcd54b99d56d7bd62f384511a7e2593", + "rev": "5a09cb4b393d58f9ed0d9ca1555016a8543c2ac8", "type": "github" }, "original": { "owner": "NixOS", + "ref": "nixos-unstable", "repo": "nixpkgs", - "rev": "5e4c2ada4fcd54b99d56d7bd62f384511a7e2593", "type": "github" } }, @@ -369,7 +332,7 @@ "root": { "inputs": { "fedimint": "fedimint", - "flake-utils": "flake-utils_5", + "flake-utils": "flake-utils_4", "nixpkgs": "nixpkgs_3" } }, @@ -390,35 +353,6 @@ "type": "github" } }, - "rust-overlay": { - "inputs": { - "flake-utils": [ - "fedimint", - "flakebox", - "crane", - "flake-utils" - ], - "nixpkgs": [ - "fedimint", - "flakebox", - "crane", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1695003086, - "narHash": "sha256-d1/ZKuBRpxifmUf7FaedCqhy0lyVbqj44Oc2s+P5bdA=", - "owner": "oxalica", - "repo": "rust-overlay", - "rev": "b87a14abea512d956f0b89d0d8a1e9b41f3e20ff", - "type": "github" - }, - "original": { - "owner": "oxalica", - "repo": "rust-overlay", - "type": "github" - } - }, "systems": { "locked": { "lastModified": 1681028828, @@ -478,21 +412,6 @@ "repo": "default", "type": "github" } - }, - "systems_5": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 9871f8ea..4288e3c5 100644 --- a/flake.nix +++ b/flake.nix @@ -4,7 +4,7 @@ flake-utils.url = "github:numtide/flake-utils"; fedimint = { url = - "github:fedimint/fedimint?rev=f58f1913e62b6529a2ff36ec5c89a3852aba7ca7"; + "github:fedimint/fedimint?rev=f47e6638c98c75a8c146144a69d236b4763848bf"; }; }; outputs = { self, nixpkgs, flake-utils, fedimint }: diff --git a/src/client/src/api/GatewayApi.ts b/src/client/src/api/GatewayApi.ts index 09f9beba..f307aec1 100644 --- a/src/client/src/api/GatewayApi.ts +++ b/src/client/src/api/GatewayApi.ts @@ -19,6 +19,12 @@ export class GatewayApi { ); } + if (this.password === undefined) { + throw new Error( + 'Misconfigured Gateway API. Make sure gateway password is configured appropriately' + ); + } + return fetch(`${this.baseUrl}/${api}`, { method: 'POST', headers: { @@ -40,7 +46,6 @@ export class GatewayApi { throw responseToError(res); } catch (error) { - console.log(`baseUrl`, this.baseUrl); return Promise.reject({ message: 'Error fetching gateway info', error }); } }; @@ -110,5 +115,3 @@ export class GatewayApi { const responseToError = (res: Response): Error => { return new Error(`Status : ${res.status} \nReason : ${res.statusText}\n`); }; - -export const gatewayApi = new GatewayApi(); From fe72ccf914541d5803390f74e3c7746a99136411 Mon Sep 17 00:00:00 2001 From: "kody.low" Date: Tue, 28 Nov 2023 11:49:42 -0800 Subject: [PATCH 19/27] fix: missing export gatewayApi --- src/client/src/api/GatewayApi.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/client/src/api/GatewayApi.ts b/src/client/src/api/GatewayApi.ts index f307aec1..abdbfd3f 100644 --- a/src/client/src/api/GatewayApi.ts +++ b/src/client/src/api/GatewayApi.ts @@ -8,7 +8,7 @@ import { GatewayInfo, Federation } from './types'; const { publicRuntimeConfig } = getConfig(); // GatewayApi is an implementation of the ApiInterface -export class GatewayApi { +class GatewayApi { private baseUrl: string | undefined = publicRuntimeConfig.fmGatewayUrl; private password: string | undefined = publicRuntimeConfig.fmGatewayPassword; @@ -115,3 +115,5 @@ export class GatewayApi { const responseToError = (res: Response): Error => { return new Error(`Status : ${res.status} \nReason : ${res.statusText}\n`); }; + +export const gatewayApi = new GatewayApi(); From f129051eedeccfe28014cdbb889c5533309e04ed Mon Sep 17 00:00:00 2001 From: "kody.low" Date: Tue, 28 Nov 2023 12:08:54 -0800 Subject: [PATCH 20/27] fix: updates --- .../src/components/buttons/colorButton/ColorButton.tsx | 2 +- src/client/src/views/home/account/AccountButtons.tsx | 6 +++--- .../src/views/home/account/gateway/FedimintGatewayCard.tsx | 4 +++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/client/src/components/buttons/colorButton/ColorButton.tsx b/src/client/src/components/buttons/colorButton/ColorButton.tsx index cdae81a4..2021dc0e 100644 --- a/src/client/src/components/buttons/colorButton/ColorButton.tsx +++ b/src/client/src/components/buttons/colorButton/ColorButton.tsx @@ -27,7 +27,7 @@ interface GeneralProps { const GeneralButton = styled.button` min-height: 38px; display: flex; - justify-content: center; + justify-content: space-evenly; align-items: center; cursor: pointer; outline: none; diff --git a/src/client/src/views/home/account/AccountButtons.tsx b/src/client/src/views/home/account/AccountButtons.tsx index 9aa8aba5..9a920447 100644 --- a/src/client/src/views/home/account/AccountButtons.tsx +++ b/src/client/src/views/home/account/AccountButtons.tsx @@ -1,5 +1,5 @@ import { useState } from 'react'; -import { Anchor, X, Zap, Book } from 'react-feather'; +import { Anchor, X, Zap, Sun } from 'react-feather'; import { ColorButton } from '../../../components/buttons/colorButton/ColorButton'; import { Card } from '../../../components/generic/Styled'; import { mediaWidths } from '../../../styles/Themes'; @@ -110,7 +110,7 @@ export const AccountButtons = () => { {state === 'pegout_ecash' ? ( ) : ( - + )} Peg Out @@ -123,7 +123,7 @@ export const AccountButtons = () => { {state === 'pegin_ecash' ? ( ) : ( - + )} Peg In
diff --git a/src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx b/src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx index 4fbc76c6..6f2e8a9b 100644 --- a/src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx +++ b/src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx @@ -20,6 +20,8 @@ interface FedimintGatewayCardProps { gatewayInfo: GatewayInfo; } +const sectionColor = '#FFD300'; + export const FedimintGatewayCard = ({ gatewayInfo, }: FedimintGatewayCardProps) => { @@ -45,7 +47,7 @@ export const FedimintGatewayCard = ({ - + Fedimint Ecash From 7e9cfbf720e0505ed8d29130c9c68670bc34b477 Mon Sep 17 00:00:00 2001 From: "kody.low" Date: Tue, 28 Nov 2023 12:13:53 -0800 Subject: [PATCH 21/27] fix: amount or all updates for withdrawAll --- src/client/src/api/GatewayApi.ts | 2 +- .../src/views/home/account/pegOutEcash/PegOutEcash.tsx | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/client/src/api/GatewayApi.ts b/src/client/src/api/GatewayApi.ts index abdbfd3f..72a56ad8 100644 --- a/src/client/src/api/GatewayApi.ts +++ b/src/client/src/api/GatewayApi.ts @@ -89,7 +89,7 @@ class GatewayApi { requestWithdrawal = async ( federationId: string, - amountSat: number, + amountSat: number | 'all', address: string ): Promise => { try { diff --git a/src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx b/src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx index 2c4b6dfe..e9d3d871 100644 --- a/src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx +++ b/src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx @@ -46,9 +46,7 @@ export const PegOutEcashCard = ({ setOpen }: { setOpen: () => void }) => { tokenAmount: { sendAll?: boolean; tokens?: number }, address: string ) => { - const amountSat = sendAll - ? federations[selectedFederation].balance_msat - : tokenAmount.tokens || 0; + const amountSat = sendAll ? 'all' : tokenAmount.tokens || 0; gatewayApi .requestWithdrawal( federations[federationIdx].federation_id, @@ -238,7 +236,7 @@ export const PegOutEcashCard = ({ setOpen }: { setOpen: () => void }) => { Send to Address - {renderLine('Amount:', sendAll ? 'All' : )} + {renderLine('Amount:', sendAll ? 'all' : )} {renderLine('Address:', address)} {renderLine( 'Fee:', From d717b9deb52051f44bccc4a9816e76a5de866599 Mon Sep 17 00:00:00 2001 From: "kody.low" Date: Tue, 28 Nov 2023 13:47:01 -0800 Subject: [PATCH 22/27] feat: add fedimints tabs and info --- src/client/pages/fedimints.tsx | 116 ++++++++++++++++++ src/client/src/api/types.ts | 7 +- .../src/layouts/navigation/Navigation.tsx | 3 + src/client/src/views/fedimints/AddMint.tsx | 70 +++++++++++ 4 files changed, 195 insertions(+), 1 deletion(-) create mode 100644 src/client/pages/fedimints.tsx create mode 100644 src/client/src/views/fedimints/AddMint.tsx diff --git a/src/client/pages/fedimints.tsx b/src/client/pages/fedimints.tsx new file mode 100644 index 00000000..94c70403 --- /dev/null +++ b/src/client/pages/fedimints.tsx @@ -0,0 +1,116 @@ +import React, { useMemo } from 'react'; +import { GridWrapper } from '../src/components/gridWrapper/GridWrapper'; +import { NextPageContext } from 'next'; +import { getProps } from '../src/utils/ssr'; +import { + CardWithTitle, + SubTitle, + Card, + DarkSubTitle, +} from '../src/components/generic/Styled'; +import { AddMint } from '../src/views/fedimints/AddMint'; +import Table from '../src/components/table'; +import { useGatewayFederations } from '../src/hooks/UseGatewayFederations'; +import { Federation } from '../src/api/types'; +import { CellContext } from '@tanstack/react-table'; + +const FedimintsView = () => { + const federations = useGatewayFederations(); + + const tableData = useMemo(() => { + const federationData = federations || []; + + return federationData.map(f => { + return { + ...f, + alias: f.federation_id, + }; + }); + }, [federations]); + + const columns = useMemo( + () => [ + { + header: 'Federation Name', + accessorKey: 'federation_name', + cell: (props: CellContext) => ( +
+ {props.row.original.config.meta.federation_name || '-'} +
+ ), + }, + { + header: 'Federation ID', + accessorKey: 'federation_id', + cell: (props: CellContext) => ( +
+ {`${props.row.original.federation_id.slice( + 0, + 6 + )}...${props.row.original.federation_id.slice(-6)}`} +
+ ), + }, + { + header: 'Balance (msat)', + accessorKey: 'balance_msat', + cell: (props: CellContext) => ( +
+ {props.row.original.balance_msat} +
+ ), + }, + { + header: 'Consensus Version', + accessorKey: 'consensus_version', + cell: (props: CellContext) => ( +
+ {props.row.original.config.consensus_version.major + + '.' + + props.row.original.config.consensus_version.minor} +
+ ), + }, + ], + [] + ); + + if (!federations || !federations?.length) { + return ( + + No Connected Federations! + + ); + } + + return ( + + Fedimints + + 1 ? 'federations' : 'federation' + } + /> + + + ); +}; + +const Wrapped = () => ( + + + + +); + +export default Wrapped; + +export async function getServerSideProps(context: NextPageContext) { + return await getProps(context); +} diff --git a/src/client/src/api/types.ts b/src/client/src/api/types.ts index 8a13441b..2092adb8 100644 --- a/src/client/src/api/types.ts +++ b/src/client/src/api/types.ts @@ -22,8 +22,13 @@ interface ApiEndpoint { export type MetaConfig = { federation_name?: string }; +export type ConsensusVersion = { + major: number; + minor: number; +}; + export interface ClientConfig { - consensus_version: number; + consensus_version: ConsensusVersion; epoch_pk: string; federation_id: string; api_endpoints: Record; diff --git a/src/client/src/layouts/navigation/Navigation.tsx b/src/client/src/layouts/navigation/Navigation.tsx index 4fdd8e7f..59216dda 100644 --- a/src/client/src/layouts/navigation/Navigation.tsx +++ b/src/client/src/layouts/navigation/Navigation.tsx @@ -2,6 +2,7 @@ import React, { FC, SVGAttributes } from 'react'; import styled, { css } from 'styled-components'; import { Home, + Sun, Cpu, Server, Settings, @@ -123,6 +124,7 @@ const BurgerNav = styled.a` `; const HOME = '/'; +const FEDIMINTS = '/fedimints'; const DASHBOARD = '/dashboard'; const PEERS = '/peers'; const CHANNEL = '/channels'; @@ -180,6 +182,7 @@ export const Navigation = ({ isBurger, setOpen }: NavigationProps) => { const renderLinks = () => ( {renderNavButton('Home', HOME, Home, sidebar)} + {renderNavButton('Fedimints', FEDIMINTS, Sun, sidebar)} {renderNavButton('Dashboard', DASHBOARD, Grid, sidebar)} {renderNavButton('Peers', PEERS, Users, sidebar)} {renderNavButton('Channels', CHANNEL, Cpu, sidebar)} diff --git a/src/client/src/views/fedimints/AddMint.tsx b/src/client/src/views/fedimints/AddMint.tsx new file mode 100644 index 00000000..f814f652 --- /dev/null +++ b/src/client/src/views/fedimints/AddMint.tsx @@ -0,0 +1,70 @@ +import React, { useState } from 'react'; +import { X } from 'react-feather'; +import { toast } from 'react-toastify'; +import { InputWithDeco } from '../../components/input/InputWithDeco'; +import { + CardWithTitle, + SubTitle, + Card, + SingleLine, + DarkSubTitle, + Separation, +} from '../../components/generic/Styled'; +import { ColorButton } from '../../components/buttons/colorButton/ColorButton'; +import { gatewayApi } from '../../api/GatewayApi'; +import { useGatewayDispatch } from '../../context/GatewayContext'; + +export const AddMint = () => { + const gatewayDispatch = useGatewayDispatch(); + const [isAdding, setIsAdding] = useState(false); + const [inviteCode, setInviteCode] = useState(''); + + const handleEnter = () => { + gatewayApi.connectFederation(inviteCode).then(() => { + gatewayApi + .fetchInfo() + .then(info => gatewayDispatch({ type: 'connected', state: info })) + .catch(({ error }) => { + toast.error(error.message); + }); + }); + }; + + return ( + + Mint Management + + + Connect to a new Federation + setIsAdding(prev => !prev)} + > + {isAdding ? : 'Add'} + + + {isAdding && ( + <> + + + setInviteCode(value)} + placeholder={'Paste Invite Code'} + /> +
+ + Connect + + + + )} + + + ); +}; From dd023fa628f0c3d98d281f968d4e91a6d43fc025 Mon Sep 17 00:00:00 2001 From: "kody.low" Date: Wed, 29 Nov 2023 17:58:20 -0800 Subject: [PATCH 23/27] feat: network specific quick actions --- src/client/pages/index.tsx | 4 +- .../src/views/home/account/AccountInfo.tsx | 3 +- src/client/src/views/home/account/network.tsx | 30 ++++ .../home/quickActions/MainnetQuickActions.tsx | 146 ++++++++++++++++ .../quickActions/MutinynetQuickActions.tsx | 144 ++++++++++++++++ .../views/home/quickActions/QuickActions.tsx | 163 +++--------------- .../home/quickActions/RegtestQuickActions.tsx | 126 ++++++++++++++ .../home/quickActions/lnmarkets/index.tsx | 2 +- 8 files changed, 470 insertions(+), 148 deletions(-) create mode 100644 src/client/src/views/home/account/network.tsx create mode 100644 src/client/src/views/home/quickActions/MainnetQuickActions.tsx create mode 100644 src/client/src/views/home/quickActions/MutinynetQuickActions.tsx create mode 100644 src/client/src/views/home/quickActions/RegtestQuickActions.tsx diff --git a/src/client/pages/index.tsx b/src/client/pages/index.tsx index 79ea8981..7e9bdb5b 100644 --- a/src/client/pages/index.tsx +++ b/src/client/pages/index.tsx @@ -7,10 +7,9 @@ import { MempoolReport } from '../src/views/home/reports/mempool'; import { LiquidityGraph } from '../src/views/home/reports/liquidReport/LiquidityGraph'; import { AccountButtons } from '../src/views/home/account/AccountButtons'; import { AccountInfo } from '../src/views/home/account/AccountInfo'; -import { QuickActions } from '../src/views/home/quickActions/QuickActions'; -import { FlowBox } from '../src/views/home/reports/flow'; import { ForwardBox } from '../src/views/home/reports/forwardReport'; import { ConnectCard } from '../src/views/home/connect/Connect'; +import { QuickActions } from '../src/views/home/quickActions/QuickActions'; const HomeView = () => ( <> @@ -19,7 +18,6 @@ const HomeView = () => ( - diff --git a/src/client/src/views/home/account/AccountInfo.tsx b/src/client/src/views/home/account/AccountInfo.tsx index d75216c9..ae8a5bfe 100644 --- a/src/client/src/views/home/account/AccountInfo.tsx +++ b/src/client/src/views/home/account/AccountInfo.tsx @@ -19,6 +19,7 @@ import { FedimintGatewayCard } from './gateway/FedimintGatewayCard'; import { useGatewayEcashTotal } from '../../../hooks/UseGatewayEcashTotal'; import { useGatewayState } from '../../../context/GatewayContext'; import { GatewayInfo } from '../../../api/types'; +import { getNetworkIndicator } from './network'; const S = { grid: styled.div<{ gatewayInfo?: GatewayInfo | null }>` @@ -84,7 +85,7 @@ export const AccountInfo = () => { <> - Network: {gatewayInfo?.network ? gatewayInfo.network : 'Bitcoin'}{' '} + Network: {getNetworkIndicator(gatewayInfo?.network || 'bitcoin')} diff --git a/src/client/src/views/home/account/network.tsx b/src/client/src/views/home/account/network.tsx new file mode 100644 index 00000000..ef402490 --- /dev/null +++ b/src/client/src/views/home/account/network.tsx @@ -0,0 +1,30 @@ +import React from 'react'; + +export const getNetworkIndicator = (network: string) => { + let color: string; + let name: string; + + switch (network) { + case 'bitcoin': + color = 'orange'; + name = 'Mainnet'; + break; + case 'testnet': + color = 'limegreen'; + name = 'Testnet'; + break; + case 'signet': + color = 'purple'; + name = 'Signet'; + break; + case 'regtest': + color = 'skyblue'; + name = 'Regtest'; + break; + default: + color = 'gray'; + name = 'Unknown'; + } + + return {name}; +}; diff --git a/src/client/src/views/home/quickActions/MainnetQuickActions.tsx b/src/client/src/views/home/quickActions/MainnetQuickActions.tsx new file mode 100644 index 00000000..c29577fe --- /dev/null +++ b/src/client/src/views/home/quickActions/MainnetQuickActions.tsx @@ -0,0 +1,146 @@ +import React, { useState } from 'react'; +import styled from 'styled-components'; +import { X, Layers, GitBranch, Command, Zap } from 'react-feather'; +import { + CardWithTitle, + SubTitle, + CardTitle, + SmallButton, + Card, +} from '../../../components/generic/Styled'; +import { + unSelectedNavButton, + cardColor, + cardBorderColor, + mediaWidths, +} from '../../../styles/Themes'; +import { DecodeCard } from './decode/Decode'; +import { SupportCard } from './donate/DonateCard'; +import { SupportBar } from './donate/DonateContent'; +import { OpenChannel } from './openChannel'; +import { LnUrlCard } from './lnurl'; +import { LnMarketsCard } from './lnmarkets'; +import { AmbossCard } from './amboss/AmbossCard'; +import { LightningAddressCard } from './lightningAddress/LightningAddress'; + +export const QuickCard = styled.div` + background: ${cardColor}; + box-shadow: 0 8px 16px -8px rgba(0, 0, 0, 0.1); + border-radius: 4px; + border: 1px solid ${cardBorderColor}; + height: 100px; + flex-grow: 1; + flex: 1 0 auto; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + margin-bottom: 25px; + padding: 10px; + margin-right: 10px; + cursor: pointer; + color: #69c0ff; + + @media (${mediaWidths.mobile}) { + padding: 4px; + height: 80px; + width: 80px; + } + + &:hover { + border: 1px solid #69c0ff; + } +`; + +export const QuickTitle = styled.div` + font-size: 12px; + color: ${unSelectedNavButton}; + margin-top: 10px; + text-align: center; +`; + +const QuickRow = styled.div` + display: flex; + flex-wrap: wrap; + justify-content: space-between; +`; + +export const MainnetQuickActions = () => { + const [openCard, setOpenCard] = useState('none'); + + const getTitle = () => { + switch (openCard) { + case 'decode': + return 'Decode a Lightning Request'; + case 'open_channel': + return 'Open a Channel'; + case 'ln_url': + return 'Use lnurl'; + case 'lightning_address': + return 'Pay to a Lightning Address'; + default: + return 'Mainnet Quick Actions'; + } + }; + + const renderContent = () => { + switch (openCard) { + case 'support': + return ( + + + + ); + case 'decode': + return ; + case 'ln_url': + return ; + case 'lightning_address': + return ; + case 'open_channel': + return ( + + + + ); + default: + return ( + + setOpenCard('support')} /> + + setOpenCard('lightning_address')}> + + Address + + setOpenCard('open_channel')}> + + Open + + setOpenCard('decode')}> + + Decode + + setOpenCard('ln_url')}> + + LNURL + + + + ); + } + }; + + return ( + + + {getTitle()} + {openCard !== 'none' && ( + setOpenCard('none')}> + + + )} + + {renderContent()} + + ); +}; diff --git a/src/client/src/views/home/quickActions/MutinynetQuickActions.tsx b/src/client/src/views/home/quickActions/MutinynetQuickActions.tsx new file mode 100644 index 00000000..5bbacbf4 --- /dev/null +++ b/src/client/src/views/home/quickActions/MutinynetQuickActions.tsx @@ -0,0 +1,144 @@ +import React, { useState } from 'react'; +import styled from 'styled-components'; +import { X, Layers, GitBranch, Command, Zap } from 'react-feather'; +import { + CardWithTitle, + SubTitle, + CardTitle, + SmallButton, + Card, +} from '../../../components/generic/Styled'; +import { + unSelectedNavButton, + cardColor, + cardBorderColor, + mediaWidths, +} from '../../../styles/Themes'; +import { DecodeCard } from './decode/Decode'; +import { SupportCard } from './donate/DonateCard'; +import { SupportBar } from './donate/DonateContent'; +import { OpenChannel } from './openChannel'; +import { LnUrlCard } from './lnurl'; +import { LightningAddressCard } from './lightningAddress/LightningAddress'; + +export const QuickCard = styled.div` + background: ${cardColor}; + box-shadow: 0 8px 16px -8px rgba(0, 0, 0, 0.1); + border-radius: 4px; + border: 1px solid ${cardBorderColor}; + height: 100px; + flex-grow: 1; + flex: 1 0 auto; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + margin-bottom: 25px; + padding: 10px; + margin-right: 10px; + cursor: pointer; + color: #69c0ff; + + @media (${mediaWidths.mobile}) { + padding: 4px; + height: 80px; + width: 80px; + } + + &:hover { + border: 1px solid #69c0ff; + } +`; + +export const QuickTitle = styled.div` + font-size: 12px; + color: ${unSelectedNavButton}; + margin-top: 10px; + text-align: center; +`; + +const QuickRow = styled.div` + display: flex; + flex-wrap: wrap; + justify-content: space-between; +`; + +export const MutinynetQuickActions = () => { + const [openCard, setOpenCard] = useState('none'); + + const getTitle = () => { + switch (openCard) { + case 'decode': + return 'Decode a Lightning Request'; + case 'open_channel': + return 'Open Outbound Channel'; + case 'request_channel': + return 'Request Inbound Channel'; + case 'ln_url': + return 'Use lnurl'; + case 'lightning_address': + return 'Pay to a Lightning Address'; + default: + return 'Mutinynet Quick Actions'; + } + }; + + const renderContent = () => { + switch (openCard) { + case 'support': + return ( + + + + ); + case 'decode': + return ; + case 'ln_url': + return ; + case 'lightning_address': + return ; + case 'open_channel': + return ( + + + + ); + default: + return ( + + setOpenCard('support')} /> + setOpenCard('lightning_address')}> + + Address + + setOpenCard('open_channel')}> + + Open + + setOpenCard('decode')}> + + Decode + + setOpenCard('ln_url')}> + + LNURL + + + ); + } + }; + + return ( + + + {getTitle()} + {openCard !== 'none' && ( + setOpenCard('none')}> + + + )} + + {renderContent()} + + ); +}; diff --git a/src/client/src/views/home/quickActions/QuickActions.tsx b/src/client/src/views/home/quickActions/QuickActions.tsx index 0dcbe79b..4ddf0c3d 100644 --- a/src/client/src/views/home/quickActions/QuickActions.tsx +++ b/src/client/src/views/home/quickActions/QuickActions.tsx @@ -1,146 +1,23 @@ -import React, { useState } from 'react'; -import styled from 'styled-components'; -import { X, Layers, GitBranch, Command, Zap } from 'react-feather'; -import { - CardWithTitle, - SubTitle, - CardTitle, - SmallButton, - Card, -} from '../../../components/generic/Styled'; -import { - unSelectedNavButton, - cardColor, - cardBorderColor, - mediaWidths, -} from '../../../styles/Themes'; -import { DecodeCard } from './decode/Decode'; -import { SupportCard } from './donate/DonateCard'; -import { SupportBar } from './donate/DonateContent'; -import { OpenChannel } from './openChannel'; -import { LnUrlCard } from './lnurl'; -import { LnMarketsCard } from './lnmarkets'; -import { AmbossCard } from './amboss/AmbossCard'; -import { LightningAddressCard } from './lightningAddress/LightningAddress'; - -export const QuickCard = styled.div` - background: ${cardColor}; - box-shadow: 0 8px 16px -8px rgba(0, 0, 0, 0.1); - border-radius: 4px; - border: 1px solid ${cardBorderColor}; - height: 100px; - flex-grow: 1; - flex: 1 0 auto; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - margin-bottom: 25px; - padding: 10px; - margin-right: 10px; - cursor: pointer; - color: #69c0ff; - - @media (${mediaWidths.mobile}) { - padding: 4px; - height: 80px; - width: 80px; - } - - &:hover { - border: 1px solid #69c0ff; - } -`; - -export const QuickTitle = styled.div` - font-size: 12px; - color: ${unSelectedNavButton}; - margin-top: 10px; - text-align: center; -`; - -const QuickRow = styled.div` - display: flex; - flex-wrap: wrap; - justify-content: space-between; -`; +import React from 'react'; +import { useGatewayState } from '../../../context/GatewayContext'; +import { MutinynetQuickActions } from './MutinynetQuickActions'; +import { MainnetQuickActions } from './MainnetQuickActions'; +import { RegtestQuickActions } from './RegtestQuickActions'; +import { Network } from '../../../api/types'; export const QuickActions = () => { - const [openCard, setOpenCard] = useState('none'); - - const getTitle = () => { - switch (openCard) { - case 'decode': - return 'Decode a Lightning Request'; - case 'open_channel': - return 'Open a Channel'; - case 'ln_url': - return 'Use lnurl'; - case 'lightning_address': - return 'Pay to a Lightning Address'; - default: - return 'Quick Actions'; - } - }; - - const renderContent = () => { - switch (openCard) { - case 'support': - return ( - - - - ); - case 'decode': - return ; - case 'ln_url': - return ; - case 'lightning_address': - return ; - case 'open_channel': - return ( - - - - ); - default: - return ( - - setOpenCard('support')} /> - - setOpenCard('lightning_address')}> - - Address - - setOpenCard('open_channel')}> - - Open - - setOpenCard('decode')}> - - Decode - - setOpenCard('ln_url')}> - - LNURL - - - - ); - } - }; - - return ( - - - {getTitle()} - {openCard !== 'none' && ( - setOpenCard('none')}> - - - )} - - {renderContent()} - - ); + const { gatewayInfo } = useGatewayState(); + + switch (gatewayInfo?.network) { + case Network.Signet: + return ; + case Network.Bitcoin: + return ; + case Network.Regtest: + return ; + // case Network.Testnet: + // return ; + default: + return null; + } }; diff --git a/src/client/src/views/home/quickActions/RegtestQuickActions.tsx b/src/client/src/views/home/quickActions/RegtestQuickActions.tsx new file mode 100644 index 00000000..2958e4b6 --- /dev/null +++ b/src/client/src/views/home/quickActions/RegtestQuickActions.tsx @@ -0,0 +1,126 @@ +import React, { useState } from 'react'; +import styled from 'styled-components'; +import { X } from 'react-feather'; +import { + CardWithTitle, + SubTitle, + CardTitle, + SmallButton, + Card, +} from '../../../components/generic/Styled'; +import { + unSelectedNavButton, + cardColor, + cardBorderColor, + mediaWidths, +} from '../../../styles/Themes'; +import { DecodeCard } from './decode/Decode'; +import { SupportCard } from './donate/DonateCard'; +import { SupportBar } from './donate/DonateContent'; +import { OpenChannel } from './openChannel'; +import { LnUrlCard } from './lnurl'; +import { LightningAddressCard } from './lightningAddress/LightningAddress'; + +export const QuickCard = styled.div` + background: ${cardColor}; + box-shadow: 0 8px 16px -8px rgba(0, 0, 0, 0.1); + border-radius: 4px; + border: 1px solid ${cardBorderColor}; + height: 100px; + flex-grow: 1; + flex: 1 0 auto; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + margin-bottom: 25px; + padding: 10px; + margin-right: 10px; + cursor: pointer; + color: #69c0ff; + + @media (${mediaWidths.mobile}) { + padding: 4px; + height: 80px; + width: 80px; + } + + &:hover { + border: 1px solid #69c0ff; + } +`; + +export const QuickTitle = styled.div` + font-size: 12px; + color: ${unSelectedNavButton}; + margin-top: 10px; + text-align: center; +`; + +const QuickRow = styled.div` + display: flex; + flex-wrap: wrap; + justify-content: space-between; +`; + +export const RegtestQuickActions = () => { + const [openCard, setOpenCard] = useState('none'); + + const getTitle = () => { + switch (openCard) { + case 'decode': + return 'Decode a Lightning Request'; + case 'open_channel': + return 'Open Outbound Channel'; + case 'ln_url': + return 'Use lnurl'; + case 'lightning_address': + return 'Pay to a Lightning Address'; + default: + return 'Regtest Quick Actions'; + } + }; + + const renderContent = () => { + switch (openCard) { + case 'support': + return ( + + + + ); + case 'decode': + return ; + case 'ln_url': + return ; + case 'lightning_address': + return ; + case 'open_channel': + return ( + + + + ); + default: + return ( + + setOpenCard('support')} /> + + ); + } + }; + + return ( + + + {getTitle()} + {openCard !== 'none' && ( + setOpenCard('none')}> + + + )} + + {renderContent()} + + ); +}; diff --git a/src/client/src/views/home/quickActions/lnmarkets/index.tsx b/src/client/src/views/home/quickActions/lnmarkets/index.tsx index 29869478..049cb544 100644 --- a/src/client/src/views/home/quickActions/lnmarkets/index.tsx +++ b/src/client/src/views/home/quickActions/lnmarkets/index.tsx @@ -11,7 +11,7 @@ import { useLnMarketsLoginMutation } from '../../../../graphql/mutations/__gener import { useGetLnMarketsStatusQuery } from '../../../../graphql/queries/__generated__/getLnMarketsStatus.generated'; import { getErrorContent } from '../../../../utils/error'; import getConfig from 'next/config'; -import { QuickCard, QuickTitle } from '../QuickActions'; +import { QuickCard, QuickTitle } from '../MainnetQuickActions'; const { publicRuntimeConfig } = getConfig(); const { disableLnMarkets } = publicRuntimeConfig; From d29320cbf2922b4ff9482c24c34b7230f186b443 Mon Sep 17 00:00:00 2001 From: "kody.low" Date: Thu, 30 Nov 2023 13:09:58 -0800 Subject: [PATCH 24/27] fix: hold --- flake.lock | 8 ++++---- .../layouts/navigation/nodeInfo/NodeInfo.tsx | 19 ++++++++++++++++--- .../dashboard/widgets/lightning/balances.tsx | 14 ++++++++++++++ .../views/dashboard/widgets/widgetList.tsx | 9 +++++++++ 4 files changed, 43 insertions(+), 7 deletions(-) diff --git a/flake.lock b/flake.lock index 1792105c..b45f9da9 100644 --- a/flake.lock +++ b/flake.lock @@ -98,17 +98,17 @@ "nixpkgs-unstable": "nixpkgs-unstable_2" }, "locked": { - "lastModified": 1701034148, - "narHash": "sha256-e2+nccJSCqprcE5Tr9/6UU7ctYcozk1xglGTa9jbEBs=", + "lastModified": 1701251322, + "narHash": "sha256-og7C8Q19KsHf4HCsgiI1CbNEWk4kUcArtiitWteTXpw=", "owner": "fedimint", "repo": "fedimint", - "rev": "f47e6638c98c75a8c146144a69d236b4763848bf", + "rev": "bbe587845935517df8a36b9b2a6b98fa4bc1e19e", "type": "github" }, "original": { "owner": "fedimint", "repo": "fedimint", - "rev": "f47e6638c98c75a8c146144a69d236b4763848bf", + "rev": "bbe587845935517df8a36b9b2a6b98fa4bc1e19e", "type": "github" } }, diff --git a/src/client/src/layouts/navigation/nodeInfo/NodeInfo.tsx b/src/client/src/layouts/navigation/nodeInfo/NodeInfo.tsx index 543dd43f..80e3368d 100644 --- a/src/client/src/layouts/navigation/nodeInfo/NodeInfo.tsx +++ b/src/client/src/layouts/navigation/nodeInfo/NodeInfo.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { Zap, Anchor, Circle } from 'react-feather'; +import { Zap, Anchor, Circle, Sun } from 'react-feather'; import { Tooltip as ReactTooltip } from 'react-tooltip'; import styled from 'styled-components'; import { getPrice, Price } from '../../../components/price/Price'; @@ -16,6 +16,7 @@ import { } from '../../../components/generic/Styled'; import { useConfigState } from '../../../context/ConfigContext'; import { usePriceState } from '../../../context/PriceContext'; +import { useGatewayEcashTotal } from '../../../hooks/UseGatewayEcashTotal'; const Closed = styled.div` display: flex; @@ -46,8 +47,8 @@ const Info = styled.div` const Balance = styled.div` display: flex; - justify-content: center; - align-items: center; + justify-content: space-between; + align-items: space-between; margin: 2px 0; padding: 0 5px; cursor: default; @@ -80,6 +81,7 @@ export const NodeInfo = ({ isOpen, isBurger }: NodeInfoProps) => { } = useNodeInfo(); const { onchain, lightning } = useNodeBalances(); + const totalFedimintEcash = useGatewayEcashTotal(); const { currency, displayValues } = useConfigState(); const priceContext = usePriceState(); @@ -130,6 +132,10 @@ export const NodeInfo = ({ isOpen, isBurger }: NodeInfoProps) => { /> + + + + ); } @@ -181,6 +187,9 @@ export const NodeInfo = ({ isOpen, isBurger }: NodeInfoProps) => { {renderLine('Closed Channels', closedChannelCount)} {renderLine('Peers', peersCount)} + + {renderLine('Fedimint Balance', totalFedimintEcash)} + ); } @@ -201,6 +210,10 @@ export const NodeInfo = ({ isOpen, isBurger }: NodeInfoProps) => { + + + + { ); }; + +export const FedimintBalance = () => { + const totalFedimintEcash = useGatewayEcashTotal(); + + return ( + + Fedimint Balance + + + + + ); +}; diff --git a/src/client/src/views/dashboard/widgets/widgetList.tsx b/src/client/src/views/dashboard/widgets/widgetList.tsx index c8447f0f..e6199e90 100644 --- a/src/client/src/views/dashboard/widgets/widgetList.tsx +++ b/src/client/src/views/dashboard/widgets/widgetList.tsx @@ -3,6 +3,7 @@ import { MempoolWidget } from './external/mempool'; import { ChainBalance, ChannelBalance, + FedimintBalance, TotalBalance, } from './lightning/balances'; import { ChannelListWidget } from './lightning/channels'; @@ -111,6 +112,14 @@ export const widgetList: WidgetProps[] = [ component: ChainBalance, default: { ...defaultProps, w: 2, h: 3 }, }, + { + id: 6, + name: 'Fedimint Balance', + group: 'Lightning', + subgroup: 'Info', + component: FedimintBalance, + default: { ...defaultProps, w: 2, h: 3 }, + }, { id: 7, name: 'Alias', From 7f9cb0f733aa7ef2aa3aa5f152d9ce7f04c5af28 Mon Sep 17 00:00:00 2001 From: "kody.low" Date: Thu, 30 Nov 2023 14:26:57 -0800 Subject: [PATCH 25/27] feat: skyler updates --- flake.lock | 8 +- .../buttons/colorButton/ColorButton.tsx | 3 +- src/client/src/components/generic/Styled.tsx | 8 ++ .../src/layouts/navigation/Navigation.tsx | 1 + .../layouts/navigation/nodeInfo/NodeInfo.tsx | 16 ++-- src/client/src/utils/helpers.tsx | 5 +- .../src/views/home/account/AccountButtons.tsx | 6 +- .../src/views/home/account/AccountInfo.tsx | 82 +++++++++---------- .../account/gateway/FedimintGatewayCard.tsx | 5 +- 9 files changed, 67 insertions(+), 67 deletions(-) diff --git a/flake.lock b/flake.lock index b45f9da9..1792105c 100644 --- a/flake.lock +++ b/flake.lock @@ -98,17 +98,17 @@ "nixpkgs-unstable": "nixpkgs-unstable_2" }, "locked": { - "lastModified": 1701251322, - "narHash": "sha256-og7C8Q19KsHf4HCsgiI1CbNEWk4kUcArtiitWteTXpw=", + "lastModified": 1701034148, + "narHash": "sha256-e2+nccJSCqprcE5Tr9/6UU7ctYcozk1xglGTa9jbEBs=", "owner": "fedimint", "repo": "fedimint", - "rev": "bbe587845935517df8a36b9b2a6b98fa4bc1e19e", + "rev": "f47e6638c98c75a8c146144a69d236b4763848bf", "type": "github" }, "original": { "owner": "fedimint", "repo": "fedimint", - "rev": "bbe587845935517df8a36b9b2a6b98fa4bc1e19e", + "rev": "f47e6638c98c75a8c146144a69d236b4763848bf", "type": "github" } }, diff --git a/src/client/src/components/buttons/colorButton/ColorButton.tsx b/src/client/src/components/buttons/colorButton/ColorButton.tsx index 2021dc0e..9c386baf 100644 --- a/src/client/src/components/buttons/colorButton/ColorButton.tsx +++ b/src/client/src/components/buttons/colorButton/ColorButton.tsx @@ -27,7 +27,8 @@ interface GeneralProps { const GeneralButton = styled.button` min-height: 38px; display: flex; - justify-content: space-evenly; + justify-content: center; + gap: 8px; align-items: center; cursor: pointer; outline: none; diff --git a/src/client/src/components/generic/Styled.tsx b/src/client/src/components/generic/Styled.tsx index 4eea5b0c..3250fc1d 100644 --- a/src/client/src/components/generic/Styled.tsx +++ b/src/client/src/components/generic/Styled.tsx @@ -154,6 +154,14 @@ export const RightAlign = styled.div` align-items: center; `; +export const LeftAlign = styled.div` + width: 100%; + display: flex; + justify-content: flex-start; + align-items: center; + gap: 8px; +`; + export const ColumnLine = styled.div` display: flex; flex-direction: column; diff --git a/src/client/src/layouts/navigation/Navigation.tsx b/src/client/src/layouts/navigation/Navigation.tsx index 59216dda..4d2a1850 100644 --- a/src/client/src/layouts/navigation/Navigation.tsx +++ b/src/client/src/layouts/navigation/Navigation.tsx @@ -200,6 +200,7 @@ export const Navigation = ({ isBurger, setOpen }: NavigationProps) => { const renderBurger = () => ( {renderBurgerNav('Home', HOME, Home)} + {renderBurgerNav('Fedimints', FEDIMINTS, Sun)} {renderBurgerNav('Dashboard', DASHBOARD, Grid)} {renderBurgerNav('Peers', PEERS, Users)} {renderBurgerNav('Channels', CHANNEL, Cpu)} diff --git a/src/client/src/layouts/navigation/nodeInfo/NodeInfo.tsx b/src/client/src/layouts/navigation/nodeInfo/NodeInfo.tsx index 80e3368d..80511d60 100644 --- a/src/client/src/layouts/navigation/nodeInfo/NodeInfo.tsx +++ b/src/client/src/layouts/navigation/nodeInfo/NodeInfo.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { Zap, Anchor, Circle, Sun } from 'react-feather'; +import { Zap, Link, Circle, Sun } from 'react-feather'; import { Tooltip as ReactTooltip } from 'react-tooltip'; import styled from 'styled-components'; import { getPrice, Price } from '../../../components/price/Price'; @@ -48,7 +48,8 @@ const Info = styled.div` const Balance = styled.div` display: flex; justify-content: space-between; - align-items: space-between; + align-items: center; + width: 100%; margin: 2px 0; padding: 0 5px; cursor: default; @@ -122,14 +123,11 @@ export const NodeInfo = ({ isOpen, isBurger }: NodeInfoProps) => { size={18} color={channelPending === 0 ? '#FFD300' : '#652EC7'} fill={channelPending === 0 ? '#FFD300' : '#652EC7'} - /> + />{' '} - + @@ -162,7 +160,7 @@ export const NodeInfo = ({ isOpen, isBurger }: NodeInfoProps) => { color={channelPending === 0 ? '#FFD300' : '#652EC7'} /> - @@ -207,7 +205,7 @@ export const NodeInfo = ({ isOpen, isBurger }: NodeInfoProps) => { - + diff --git a/src/client/src/utils/helpers.tsx b/src/client/src/utils/helpers.tsx index 3198dee3..7bd24c3f 100644 --- a/src/client/src/utils/helpers.tsx +++ b/src/client/src/utils/helpers.tsx @@ -1,5 +1,5 @@ import numeral from 'numeral'; -import { SatoshiSymbol } from '../components/satoshi/Satoshi'; +// import { SatoshiSymbol } from '../components/satoshi/Satoshi'; import { unSelectedNavButton } from '../styles/Themes'; import styled from 'styled-components'; @@ -87,8 +87,7 @@ export const getValue = ({ return ( <> - {breakAmount} - + {breakAmount} {'sats'} ); } diff --git a/src/client/src/views/home/account/AccountButtons.tsx b/src/client/src/views/home/account/AccountButtons.tsx index 9a920447..588c4a14 100644 --- a/src/client/src/views/home/account/AccountButtons.tsx +++ b/src/client/src/views/home/account/AccountButtons.tsx @@ -1,5 +1,5 @@ import { useState } from 'react'; -import { Anchor, X, Zap, Sun } from 'react-feather'; +import { Link, X, Zap, Sun } from 'react-feather'; import { ColorButton } from '../../../components/buttons/colorButton/ColorButton'; import { Card } from '../../../components/generic/Styled'; import { mediaWidths } from '../../../styles/Themes'; @@ -84,7 +84,7 @@ export const AccountButtons = () => { {state === 'send_chain' ? ( ) : ( - + )} Send @@ -97,7 +97,7 @@ export const AccountButtons = () => { {state === 'receive_chain' ? ( ) : ( - + )} Receive diff --git a/src/client/src/views/home/account/AccountInfo.tsx b/src/client/src/views/home/account/AccountInfo.tsx index ae8a5bfe..f191b32c 100644 --- a/src/client/src/views/home/account/AccountInfo.tsx +++ b/src/client/src/views/home/account/AccountInfo.tsx @@ -1,6 +1,6 @@ import React from 'react'; import styled from 'styled-components'; -import { Zap, Anchor, Pocket } from 'react-feather'; +import { Zap, Link } from 'react-feather'; import { useNodeBalances } from '../../../hooks/UseNodeBalances'; import Big from 'big.js'; import { renderLine } from '../../../components/generic/helpers'; @@ -9,14 +9,14 @@ import { CardWithTitle, SubTitle, Separation, - DarkSubTitle, - ResponsiveLine, - SingleLine, + // DarkSubTitle, + // ResponsiveLine, + LeftAlign, } from '../../../components/generic/Styled'; import { Price } from '../../../components/price/Price'; import { mediaWidths } from '../../../styles/Themes'; import { FedimintGatewayCard } from './gateway/FedimintGatewayCard'; -import { useGatewayEcashTotal } from '../../../hooks/UseGatewayEcashTotal'; +// import { useGatewayEcashTotal } from '../../../hooks/UseGatewayEcashTotal'; import { useGatewayState } from '../../../context/GatewayContext'; import { GatewayInfo } from '../../../api/types'; import { getNetworkIndicator } from './network'; @@ -34,40 +34,40 @@ const S = { `, }; -const Tile = styled.div` - display: flex; - flex-direction: column; - justify-content: space-between; - align-items: ${({ startTile }: { startTile?: boolean }) => - startTile ? 'flex-start' : 'flex-end'}; +// const Tile = styled.div` +// display: flex; +// flex-direction: column; +// justify-content: space-between; +// align-items: ${({ startTile }: { startTile?: boolean }) => +// startTile ? 'flex-start' : 'flex-end'}; - @media (${mediaWidths.mobile}) { - width: 100%; - flex-direction: row; - align-items: flex-end; - margin: 0 0 8px; - } -`; +// @media (${mediaWidths.mobile}) { +// width: 100%; +// flex-direction: row; +// align-items: flex-end; +// margin: 0 0 8px; +// } +// `; const sectionColor = '#FFD300'; export const AccountInfo = () => { const { onchain, lightning } = useNodeBalances(); const { gatewayInfo } = useGatewayState(); - const totalFedimintEcash = useGatewayEcashTotal(); + // const totalFedimintEcash = useGatewayEcashTotal(); - const totalAmount = new Big(onchain.confirmed) - .add(onchain.pending) - .add(onchain.closing) - .add(lightning.confirmed) - .add(lightning.pending) - .add(totalFedimintEcash) - .toString(); + // const totalAmount = new Big(onchain.confirmed) + // .add(onchain.pending) + // .add(onchain.closing) + // .add(lightning.confirmed) + // .add(lightning.pending) + // .add(totalFedimintEcash) + // .toString(); - const totalChain = new Big(onchain.confirmed).add(onchain.pending).toString(); - const totalLightning = new Big(lightning.confirmed) - .add(lightning.pending) - .toString(); + // const totalChain = new Big(onchain.confirmed).add(onchain.pending).toString(); + // const totalLightning = new Big(lightning.confirmed) + // .add(lightning.pending) + // .toString(); const activeLightning = new Big(lightning.active) .sub(lightning.commit) @@ -87,16 +87,8 @@ export const AccountInfo = () => { Network: {getNetworkIndicator(gatewayInfo?.network || 'bitcoin')} - + {/* - Total
@@ -124,18 +116,18 @@ export const AccountInfo = () => { )} - + */} - + Lightning - + {renderLine('Available', )} {renderLine('Not Available', )} @@ -144,13 +136,13 @@ export const AccountInfo = () => { - - + Bitcoin - + {renderLine('Available', )} {renderLine('Pending', )} diff --git a/src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx b/src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx index 6f2e8a9b..6599bb0e 100644 --- a/src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx +++ b/src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx @@ -2,6 +2,7 @@ import React, { useState } from 'react'; import { Card, CardWithTitle, + LeftAlign, Separation, SingleLine, SubTitle, @@ -46,10 +47,10 @@ export const FedimintGatewayCard = ({ return ( - + Fedimint Ecash - + {!gatewayInfo.federations || gatewayInfo.federations.length === 0 ? ( <> From 02175d0437ca1eaa3f6bde7b3a230e9ed00add79 Mon Sep 17 00:00:00 2001 From: "kody.low" Date: Fri, 1 Dec 2023 18:38:47 -0800 Subject: [PATCH 26/27] feat: bump fedimint version for multifederation support --- flake.lock | 7 +- flake.nix | 5 +- src/client/src/api/GatewayApi.ts | 1 - src/client/src/api/types.ts | 5 +- src/client/src/styles/Themes.ts | 2 + .../src/views/home/account/AccountButtons.tsx | 2 +- .../src/views/home/account/AccountInfo.tsx | 31 +---- .../gateway/.FedimintGatewayCard.tsx.swp | Bin 12288 -> 0 bytes .../home/account/pegInEcash/PegInEcash.tsx | 27 ++-- .../home/account/pegOutEcash/PegOutEcash.tsx | 125 +----------------- 10 files changed, 26 insertions(+), 179 deletions(-) delete mode 100644 src/client/src/views/home/account/gateway/.FedimintGatewayCard.tsx.swp diff --git a/flake.lock b/flake.lock index 1792105c..741e3941 100644 --- a/flake.lock +++ b/flake.lock @@ -98,17 +98,16 @@ "nixpkgs-unstable": "nixpkgs-unstable_2" }, "locked": { - "lastModified": 1701034148, - "narHash": "sha256-e2+nccJSCqprcE5Tr9/6UU7ctYcozk1xglGTa9jbEBs=", + "lastModified": 1701469066, + "narHash": "sha256-3pt8qUfaUvQRl1gWY2Qkk4MRBbzpYtId/rdTitLffBQ=", "owner": "fedimint", "repo": "fedimint", - "rev": "f47e6638c98c75a8c146144a69d236b4763848bf", + "rev": "f316e987aaf1a81b1626f7e418318ca683e0a47a", "type": "github" }, "original": { "owner": "fedimint", "repo": "fedimint", - "rev": "f47e6638c98c75a8c146144a69d236b4763848bf", "type": "github" } }, diff --git a/flake.nix b/flake.nix index 4288e3c5..25dc8dfd 100644 --- a/flake.nix +++ b/flake.nix @@ -2,10 +2,7 @@ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.05"; flake-utils.url = "github:numtide/flake-utils"; - fedimint = { - url = - "github:fedimint/fedimint?rev=f47e6638c98c75a8c146144a69d236b4763848bf"; - }; + fedimint = { url = "github:fedimint/fedimint?branch=releases/0.2"; }; }; outputs = { self, nixpkgs, flake-utils, fedimint }: flake-utils.lib.eachDefaultSystem (system: diff --git a/src/client/src/api/GatewayApi.ts b/src/client/src/api/GatewayApi.ts index 72a56ad8..7800b019 100644 --- a/src/client/src/api/GatewayApi.ts +++ b/src/client/src/api/GatewayApi.ts @@ -101,7 +101,6 @@ class GatewayApi { if (res.ok) { const txid: string = await res.text(); - console.log('txid', txid); return Promise.resolve(txid); } diff --git a/src/client/src/api/types.ts b/src/client/src/api/types.ts index 2092adb8..16d4867d 100644 --- a/src/client/src/api/types.ts +++ b/src/client/src/api/types.ts @@ -53,14 +53,15 @@ export interface GatewayInfo { // Type adaptation from https://docs.rs/bitcoin/latest/bitcoin/network/enum.Network.html export enum Network { - Bitcoin = 'main', - Testnet = 'test', + Bitcoin = 'bitcoin', + Testnet = 'testnet', Signet = 'signet', Regtest = 'regtest', } export type TransactionId = string; +// For testing export const dummyFederation = { federation_id: 'test_federation_id', balance_msat: 1000, diff --git a/src/client/src/styles/Themes.ts b/src/client/src/styles/Themes.ts index e00c4577..89e2bf0f 100644 --- a/src/client/src/styles/Themes.ts +++ b/src/client/src/styles/Themes.ts @@ -43,9 +43,11 @@ export const fontColors = { export const mediaDimensions = { mobile: 700, + modifiedMobile: 950, }; export const mediaWidths = { mobile: `max-width: ${mediaDimensions.mobile}px`, + modifiedMobile: `max-width: ${mediaDimensions.modifiedMobile}px`, }; // --------------------------------------- diff --git a/src/client/src/views/home/account/AccountButtons.tsx b/src/client/src/views/home/account/AccountButtons.tsx index 588c4a14..24afcd3d 100644 --- a/src/client/src/views/home/account/AccountButtons.tsx +++ b/src/client/src/views/home/account/AccountButtons.tsx @@ -20,7 +20,7 @@ const S = { grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr; margin-bottom: 32px; - @media (${mediaWidths.mobile}) { + @media (${mediaWidths.modifiedMobile}) { grid-template-columns: 1fr 1fr; } `, diff --git a/src/client/src/views/home/account/AccountInfo.tsx b/src/client/src/views/home/account/AccountInfo.tsx index f191b32c..bac53d3f 100644 --- a/src/client/src/views/home/account/AccountInfo.tsx +++ b/src/client/src/views/home/account/AccountInfo.tsx @@ -28,46 +28,17 @@ const S = { grid-template-columns: ${({ gatewayInfo }) => gatewayInfo ? '1fr 1fr 1fr' : '1fr 1fr'}; - @media (${mediaWidths.mobile}) { + @media (${mediaWidths.modifiedMobile}) { display: block; } `, }; -// const Tile = styled.div` -// display: flex; -// flex-direction: column; -// justify-content: space-between; -// align-items: ${({ startTile }: { startTile?: boolean }) => -// startTile ? 'flex-start' : 'flex-end'}; - -// @media (${mediaWidths.mobile}) { -// width: 100%; -// flex-direction: row; -// align-items: flex-end; -// margin: 0 0 8px; -// } -// `; - const sectionColor = '#FFD300'; export const AccountInfo = () => { const { onchain, lightning } = useNodeBalances(); const { gatewayInfo } = useGatewayState(); - // const totalFedimintEcash = useGatewayEcashTotal(); - - // const totalAmount = new Big(onchain.confirmed) - // .add(onchain.pending) - // .add(onchain.closing) - // .add(lightning.confirmed) - // .add(lightning.pending) - // .add(totalFedimintEcash) - // .toString(); - - // const totalChain = new Big(onchain.confirmed).add(onchain.pending).toString(); - // const totalLightning = new Big(lightning.confirmed) - // .add(lightning.pending) - // .toString(); const activeLightning = new Big(lightning.active) .sub(lightning.commit) diff --git a/src/client/src/views/home/account/gateway/.FedimintGatewayCard.tsx.swp b/src/client/src/views/home/account/gateway/.FedimintGatewayCard.tsx.swp deleted file mode 100644 index 8bcdd22863f83ad35d13ae1a2bd1eb2636104c2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2O^6&t6vr#Uuc$E+ji8`Z)A&B2R!(StV+DoPIGzxrdQW@abxDydeUyQmgzHgmEdzfA@BUL#$Vn_cklb2kV}!jrHXI%c@B2T>@xFCMA4<$ zb8$3#*bX9(1tSe#RSuoS$m_OwC=;hCWUE_u>Oy*v2xk-7Z8RJdg+7l}MG||C7YNv9 zU)KfSNSs#G<_`0`sEgtzlYE11Ij6WU+9H&v^ZNxB`?gFrNBTFnMuA&ffxYC(!*khI ze|+j7ePI6!x3(N+^hN=rfKk9GU=%P47zK<1MuA&Q0omC_Uc;Do7vo+luDeFA#jUv* z1&jhl0i%FXz$jo8FbWt2i~>dhqkvJsDDXd2fcb zkHP!k3fKlcuna2T=lclx47?5;@cUjuJ_MJ63yy+^!1a3x`5XKNz5`!^cfn;)11@+B z{BjQ=*TCmMf>mIHDewq503HN;z@K*$@+-IoJ^|Yx0WX0=;8F0~9zs3^F}Mg$fjO`X z{B##$0B->aPJ@HspF0Wp5qu4;Ud<#9l09U~W z;BD|GP&&T>%*QBT6fg?(73du$luoN(l)8>O!L)|sQL91*{8(047MFLh?iCez8(*vs z>Qqr0b9I#Jj0kzfT3WPbXmMU@DQrY`gQJc~5rxV5>ILogqVR`2k94Fw-@uO-g$>cP z+gvi;XUN)|sHTIDg;QHa1l9~0ln)0!R5214Bsmugk5krG$H8jp4dSY^fQ25v*iM-2 zQD;~wO0DCWi~kmg3#n-$w*p>EQ`%;6Q-t%>s&+Q1;z)kAXs%SUuo=EfwLqkbEKXIjz-d)EaZ? zYGWH2!iYpFMs$ykn-CuUj?sk6rG5t$Zc7BurM=FAE+1PglxF36OyiMv0_O2n6kuuA zrp~cMa+>!5nSDMr5}~^kcDlpLyOZY8b;fom7Vz119yfw$W0h~pW2sflC6y6nRNEju z*BP=LietihoPA0yL^}7hx(u&IC1vUyqN`^Y&(6~`ydmlFKr}-tTb!y;=pjef#vQDt zNt?_Lc-WM!Y?iC^S#7bqE4;(DKeSS03x6Cq0(5U|&{fqla}!6Y&aG z#N3ggjlIJ}xGJyaL&?4lrP!FuZX6QG!oIyx=Qu7v_~6p)TWkg zJN+Nl5ssS8#DeRxQPDdlXkwcpCYb0Ap=VK13bmsH$Skpuox*k@zttV(&(56!_98?X zW{0#p>H+Iyrg~c~X;0|A@1dSOwi3r1Jj3+oneH{qrZ@8^RLa#`WqYyTD(1|SvssyF zZ0UA`*P*^~e~R!$8+4P09OHIcJm~OvXxdb|DJ9FhYH;jV9;2tS{3c#k)SH73drHfU qrrv)B&yDP^pEK2+p8M7P(EDLoFw { const [selectedFederation, setSelectedFederation] = useState(0); const [address, setAddress] = useState(''); + const options = federations.map(f => ({ + label: f.config.meta.federation_name || 'No connected Federations', + value: f.federation_id || 'No connected Federations', + })); + const handleFetchPegInAddress = () => { gatewayApi .fetchAddress(federations[selectedFederation].federation_id) @@ -108,21 +113,13 @@ export const PegInEcashCard = () => { Into Federation: {federations.length > 0 && ( setSelectedFederation(e[0] as any)} - options={federations.map(f => ({ - label: - f.config.meta.federation_name || - 'No connected Federations', - value: f.federation_id || 'No connected Federations', - }))} - value={{ - label: - federations[0].config.meta.federation_name || - 'No connected Federations', - value: - federations[0].federation_id || - 'No connected Federations', - }} + callback={e => + setSelectedFederation( + federations.findIndex(f => f.federation_id === e[0].value) + ) + } + options={options} + value={options[selectedFederation]} isClearable={false} /> )} diff --git a/src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx b/src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx index e9d3d871..a780760e 100644 --- a/src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx +++ b/src/client/src/views/home/account/pegOutEcash/PegOutEcash.tsx @@ -1,45 +1,34 @@ -import React, { useState, useEffect } from 'react'; +import React, { useState } from 'react'; import { toast } from 'react-toastify'; import { InputWithDeco } from '../../../../components/input/InputWithDeco'; -import { useBitcoinFees } from '../../../../hooks/UseBitcoinFees'; import { Separation, SingleLine, SubTitle, } from '../../../../components/generic/Styled'; -import { Input } from '../../../../components/input'; import { MultiButton, SingleButton, } from '../../../../components/buttons/multiButton/MultiButton'; -import { Price, getPrice } from '../../../../components/price/Price'; -import { useConfigState } from '../../../../context/ConfigContext'; +import { Price } from '../../../../components/price/Price'; import Modal from '../../../../components/modal/ReactModal'; import { ColorButton } from '../../../../components/buttons/colorButton/ColorButton'; import { renderLine } from '../../../../components/generic/helpers'; -import { usePriceState } from '../../../../context/PriceContext'; import { Federation } from '../../../../api/types'; import { SmallSelectWithValue } from '../../../../components/select'; import { useGatewayFederations } from '../../../../hooks/UseGatewayFederations'; import { gatewayApi } from '../../../../api/GatewayApi'; export const PegOutEcashCard = ({ setOpen }: { setOpen: () => void }) => { - const { fast, halfHour, hour, minimum, dontShow } = useBitcoinFees(); - const { currency, displayValues, fetchFees } = useConfigState(); - const priceContext = usePriceState(); - const format = getPrice(currency, displayValues, priceContext); - const [modalOpen, setModalOpen] = useState(false); const [address, setAddress] = useState(''); const [tokens, setTokens] = useState(0); - const [type, setType] = useState(dontShow || !fetchFees ? 'fee' : 'none'); - const [amount, setAmount] = useState(0); const [sendAll, setSendAll] = useState(false); const [selectedFederation, setSelectedFederation] = useState(0); const federations: Federation[] = useGatewayFederations(); - const canSend = address !== '' && (sendAll || tokens > 0) && amount > 0; + const canSend = address !== '' && (sendAll || tokens > 0); const handlePegOut = ( federationIdx: number, @@ -62,31 +51,6 @@ export const PegOutEcashCard = ({ setOpen }: { setOpen: () => void }) => { }); }; - useEffect(() => { - if (type === 'none' && amount === 0) { - setAmount(fast); - } - }, [type, amount, fast]); - - const feeFormat = (amount: number): JSX.Element | string => { - if (type === 'fee' || type === 'none') { - return format({ amount }); - } - return `${amount} blocks`; - }; - - // const typeAmount = () => { - // switch (type) { - // case 'none': - // case 'fee': - // return { fee: amount }; - // case 'target': - // return { target: amount }; - // default: - // return {}; - // } - // }; - const tokenAmount = sendAll ? { sendAll } : { tokens }; const renderButton = ( @@ -142,85 +106,6 @@ export const PegOutEcashCard = ({ setOpen }: { setOpen: () => void }) => { inputCallback={value => setTokens(Number(value))} /> )} - - - - {fetchFees && - !dontShow && - renderButton( - () => { - setType('none'); - setAmount(fast); - }, - 'Auto', - type === 'none' - )} - {renderButton( - () => { - setType('fee'); - setAmount(0); - }, - 'Fee (Sats/Byte)', - type === 'fee' - )} - {renderButton( - () => { - setType('target'); - setAmount(0); - }, - 'Target Confirmations', - type === 'target' - )} - - - - {'(~'} - {feeFormat(amount * 223)} - {')'} - - ) - } - > - {type !== 'none' ? ( - 0 ? amount : undefined} - maxWidth={'500px'} - placeholder={type === 'target' ? 'Blocks' : 'Sats/Byte'} - type={'number'} - withMargin={'0 0 0 8px'} - onChange={e => setAmount(Number(e.target.value))} - /> - ) : ( - - {renderButton( - () => setAmount(fast), - `Fastest (${fast} sats)`, - amount === fast - )} - {halfHour !== fast && - renderButton( - () => setAmount(halfHour), - `Half Hour (${halfHour} sats)`, - amount === halfHour - )} - {renderButton( - () => setAmount(hour), - `Hour (${hour} sats)`, - amount === hour - )} - - )} - - {!dontShow && renderLine('Minimum', `${minimum} sat/vByte`)} - void }) => { {renderLine('Amount:', sendAll ? 'all' : )} {renderLine('Address:', address)} - {renderLine( - 'Fee:', - type === 'target' ? `${amount} Blocks` : `${amount} Sats/Byte` - )} handlePegOut(selectedFederation, tokenAmount, address)} disabled={!canSend} From bc98fc2d1d897e392c919fbd8c4c66ba134c8329 Mon Sep 17 00:00:00 2001 From: "kody.low" Date: Fri, 1 Dec 2023 19:59:16 -0800 Subject: [PATCH 27/27] fix: multifederation and leave button --- src/client/pages/fedimints.tsx | 44 ++++++++++++------- .../account/gateway/FedimintGatewayCard.tsx | 16 ++----- 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/src/client/pages/fedimints.tsx b/src/client/pages/fedimints.tsx index 94c70403..7a5ecc89 100644 --- a/src/client/pages/fedimints.tsx +++ b/src/client/pages/fedimints.tsx @@ -8,11 +8,14 @@ import { Card, DarkSubTitle, } from '../src/components/generic/Styled'; +import { X } from 'react-feather'; import { AddMint } from '../src/views/fedimints/AddMint'; import Table from '../src/components/table'; import { useGatewayFederations } from '../src/hooks/UseGatewayFederations'; import { Federation } from '../src/api/types'; import { CellContext } from '@tanstack/react-table'; +import { toast } from 'react-toastify'; +import { Price } from '../src/components/price/Price'; const FedimintsView = () => { const federations = useGatewayFederations(); @@ -40,34 +43,45 @@ const FedimintsView = () => { ), }, { - header: 'Federation ID', - accessorKey: 'federation_id', + header: 'Balance', + accessorKey: 'balance_msat', cell: (props: CellContext) => (
- {`${props.row.original.federation_id.slice( - 0, - 6 - )}...${props.row.original.federation_id.slice(-6)}`} +
), }, { - header: 'Balance (msat)', - accessorKey: 'balance_msat', + header: 'Suported Modules', + accessorKey: 'modules', cell: (props: CellContext) => (
- {props.row.original.balance_msat} + {Object.values(props.row.original.config.modules) + .map(module => module.kind) + .join(', ')}
), }, { - header: 'Consensus Version', - accessorKey: 'consensus_version', + header: 'Leave', + accessorKey: 'leave', cell: (props: CellContext) => ( -
- {props.row.original.config.consensus_version.major + - '.' + - props.row.original.config.consensus_version.minor} +
{ + if (props.row.original.balance_msat > 0) { + toast.error("Can't leave a federation you've got sats in!"); + } else { + toast.warn('Not implemented yet!'); + } + }} + > +
), }, diff --git a/src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx b/src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx index 6599bb0e..4c1486da 100644 --- a/src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx +++ b/src/client/src/views/home/account/gateway/FedimintGatewayCard.tsx @@ -40,10 +40,6 @@ export const FedimintGatewayCard = ({ }); }; - const formatFederationId = (id: string) => { - return `${id.slice(0, 6)}...${id.slice(-6)}`; - }; - return ( @@ -75,18 +71,14 @@ export const FedimintGatewayCard = ({ ) : ( -
+
{renderLine( - 'Amount', + 'Total Amount', )} {renderLine( - 'Federation', - gatewayInfo.federations[0].config.meta.federation_name - )} - {renderLine( - 'ID', - formatFederationId(gatewayInfo.federations[0].federation_id) + 'Connected Federations', + gatewayInfo.federations.length )}
)}