From 570e2716955f3c85092a505860f3ff13ea751953 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sat, 22 Jan 2022 13:16:15 -0800 Subject: [PATCH 01/65] clightning-plugins: bump to latest git Signed-off-by: William Casarin --- pkgs/clightning-plugins/default.nix | 4 ++-- pkgs/python-packages/pyln-proto/default.nix | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pkgs/clightning-plugins/default.nix b/pkgs/clightning-plugins/default.nix index 45498aa6f..4f1746192 100644 --- a/pkgs/clightning-plugins/default.nix +++ b/pkgs/clightning-plugins/default.nix @@ -6,8 +6,8 @@ let src = pkgs.fetchFromGitHub { owner = "lightningd"; repo = "plugins"; - rev = "1f6f701bf1e60882b8fa61cb735e7033c8c29e3c"; - sha256 = "088h0yxs0fbrr7r6mi4xmznf0a294i45fbc792xrmwchlay0k7jj"; + rev = "b88c9278102ea9bffddce8143d31e939b31e835c"; + sha256 = "sha256-qf4MYqP2Bwlqqn2y2LCIYuFq71r2m6IFT/w4noW6ePU="; }; version = builtins.substring 0 7 src.rev; diff --git a/pkgs/python-packages/pyln-proto/default.nix b/pkgs/python-packages/pyln-proto/default.nix index c7b269a0c..e66de6dba 100644 --- a/pkgs/python-packages/pyln-proto/default.nix +++ b/pkgs/python-packages/pyln-proto/default.nix @@ -4,6 +4,7 @@ , coincurve , base58 , mypy +, pycparser , setuptools-scm }: @@ -17,6 +18,7 @@ buildPythonPackage rec { bitstring cryptography coincurve + pycparser base58 mypy setuptools-scm From b8524720a5d652922173990050e2cf728cceb7d1 Mon Sep 17 00:00:00 2001 From: nixbitcoin Date: Mon, 14 Feb 2022 14:04:11 +0000 Subject: [PATCH 02/65] lnd: point out SCB functionality more clearly --- README.md | 2 +- examples/configuration.nix | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 09f4b4782..d102ee18a 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,7 @@ NixOS modules ([src](modules/modules.nix)) * [rebalance](https://github.com/lightningd/plugins/tree/master/rebalance): keeps your channels balanced * [summary](https://github.com/lightningd/plugins/tree/master/summary): print a nice summary of the node status * [zmq](https://github.com/lightningd/plugins/tree/master/zmq): publishes notifications via ZeroMQ to configured endpoints - * [lnd](https://github.com/lightningnetwork/lnd) with support for announcing an onion service + * [lnd](https://github.com/lightningnetwork/lnd) with support for announcing an onion service and [static channel backups](https://github.com/lightningnetwork/lnd/blob/master/docs/recovery.md) * [Lightning Loop](https://github.com/lightninglabs/loop) * [Lightning Pool](https://github.com/lightninglabs/pool) * [charge-lnd](https://github.com/accumulator/charge-lnd): policy-based channel fee manager diff --git a/examples/configuration.nix b/examples/configuration.nix index 0c84226a6..84d0c0e5b 100644 --- a/examples/configuration.nix +++ b/examples/configuration.nix @@ -83,6 +83,8 @@ # You should also backup your channel state after opening new channels. # This will allow you to recover off-chain funds, by force-closing channels. # scp bitcoin-node:/var/lib/lnd/chain/bitcoin/mainnet/channel.backup ./backups/lnd/ + # + # Alternatively, you can have these files backed up by services.backups below. ### RIDE THE LIGHTNING # Set this to enable RTL, a web interface for lnd and clightning. From 71eccb73d63b758aa7c8f404ce5549124c602b5d Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sun, 20 Feb 2022 19:42:42 -0800 Subject: [PATCH 03/65] python-packages/runes: init at 0.4.0 Signed-off-by: William Casarin --- pkgs/python-packages/default.nix | 1 + pkgs/python-packages/runes/default.nix | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 pkgs/python-packages/runes/default.nix diff --git a/pkgs/python-packages/default.nix b/pkgs/python-packages/default.nix index 0c0f9d339..de08158eb 100644 --- a/pkgs/python-packages/default.nix +++ b/pkgs/python-packages/default.nix @@ -11,6 +11,7 @@ in { urldecode = callPackage ./urldecode {}; chromalog = callPackage ./chromalog {}; txzmq = callPackage ./txzmq {}; + runes = callPackage ./runes {}; joinmarketbase = joinmarketPkg ./jmbase; joinmarketclient = joinmarketPkg ./jmclient; diff --git a/pkgs/python-packages/runes/default.nix b/pkgs/python-packages/runes/default.nix new file mode 100644 index 000000000..125c0bb07 --- /dev/null +++ b/pkgs/python-packages/runes/default.nix @@ -0,0 +1,22 @@ +{ sha256, lib, buildPythonPackage, fetchFromGitHub }: + +buildPythonPackage { + pname = "runes"; + version = "0.4.0"; + + src = fetchFromGitHub { + repo = "runes"; + owner = "rustyrussell"; + rev = "7e3d7648db844ce2c78cc3e9e4f872f827252251"; + sha256 = "sha256-e0iGLV/57gCpqA7vrW6JMFM0R6iAq5oFwUpZoGySwfs="; + }; + + propagatedBuildInputs = [ sha256 ]; + + meta = with lib; { + description = "Runes for authentication (like macaroons only simpler)"; + homepage = "https://github.com/rustyrussell/runes"; + maintainers = with maintainers; [ jb55 ]; + license = licenses.mit; + }; +} From 80312ba9d7176a5877a93052b759fb88674566cf Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sun, 20 Feb 2022 19:43:43 -0800 Subject: [PATCH 04/65] python-packages/sha256: init at 0.1 Signed-off-by: William Casarin --- pkgs/python-packages/default.nix | 1 + pkgs/python-packages/sha256/default.nix | 32 +++++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 pkgs/python-packages/sha256/default.nix diff --git a/pkgs/python-packages/default.nix b/pkgs/python-packages/default.nix index de08158eb..c7162f365 100644 --- a/pkgs/python-packages/default.nix +++ b/pkgs/python-packages/default.nix @@ -11,6 +11,7 @@ in { urldecode = callPackage ./urldecode {}; chromalog = callPackage ./chromalog {}; txzmq = callPackage ./txzmq {}; + sha256 = callPackage ./sha256 {}; runes = callPackage ./runes {}; joinmarketbase = joinmarketPkg ./jmbase; diff --git a/pkgs/python-packages/sha256/default.nix b/pkgs/python-packages/sha256/default.nix new file mode 100644 index 000000000..50fd0c7cf --- /dev/null +++ b/pkgs/python-packages/sha256/default.nix @@ -0,0 +1,32 @@ +{ lib, buildPythonPackage, fetchFromGitHub, cython }: + +buildPythonPackage rec { + pname = "sha256"; + version = builtins.substring 0 8 src.rev; + + # The version from pypi is old/broken + src = fetchFromGitHub { + repo = "sha256"; + owner = "cloudtools"; + rev = "e0645d118f7296dde45397a755261f78d421bdee"; + sha256 = "sha256-gEctMgF5qZiWelVHVCl3zazRNuaQ7lJP8ExI5xWEBVI="; + }; + + nativeBuildInputs = [ cython ]; + + doCheck = false; + + configurePhase = '' + python setup.py sdist + ''; + + meta = with lib; { + description = '' + SHA-256 implementation that allows for setting and getting the mid-state + information. + ''; + homepage = "https://github.com/cloudtools/sha256"; + maintainers = with maintainers; [ jb55 ]; + license = licenses.mit; + }; +} From 380ec3bb7871ddeb9cc9768433d20af31ee9e5ae Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sun, 20 Feb 2022 19:44:14 -0800 Subject: [PATCH 05/65] clightning-plugins: add commando Signed-off-by: William Casarin --- pkgs/clightning-plugins/default.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkgs/clightning-plugins/default.nix b/pkgs/clightning-plugins/default.nix index 4f1746192..eb1d5acb3 100644 --- a/pkgs/clightning-plugins/default.nix +++ b/pkgs/clightning-plugins/default.nix @@ -23,6 +23,10 @@ let + " --replace pyln-client~=0.9.3 pyln-client~=0.10.1"; }; rebalance = { description = "Keeps your channels balanced"; }; + commando = { + description = "Enable RPC over lightning"; + extraPkgs = [ nbPython3Packages.runes ]; + }; summary = { description = "Prints a summary of the node status"; extraPkgs = [ packaging requests ]; From 0bede274a8054f126d8f2bf811ced45efd7cbbe9 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Wed, 23 Feb 2022 20:32:01 +0100 Subject: [PATCH 06/65] clightning-plugins/commando: add module --- README.md | 1 + modules/clightning-plugins/commando.nix | 37 +++++++++++++++++++++++++ modules/clightning-plugins/default.nix | 1 + test/tests.nix | 5 ++++ 4 files changed, 44 insertions(+) create mode 100644 modules/clightning-plugins/commando.nix diff --git a/README.md b/README.md index 09f4b4782..a798fb111 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,7 @@ NixOS modules ([src](modules/modules.nix)) * [clightning](https://github.com/ElementsProject/lightning) with support for announcing an onion service\ Available plugins: * [clboss](https://github.com/ZmnSCPxj/clboss): automated C-Lightning Node Manager + * [commando](https://github.com/lightningd/plugins/tree/master/commando): control your node over lightning * [helpme](https://github.com/lightningd/plugins/tree/master/helpme): walks you through setting up a fresh c-lightning node * [monitor](https://github.com/renepickhardt/plugins/tree/master/monitor): helps you analyze the health of your peers and channels * [prometheus](https://github.com/lightningd/plugins/tree/master/prometheus): lightning node exporter for the prometheus timeseries server diff --git a/modules/clightning-plugins/commando.nix b/modules/clightning-plugins/commando.nix new file mode 100644 index 000000000..b9c19f447 --- /dev/null +++ b/modules/clightning-plugins/commando.nix @@ -0,0 +1,37 @@ +{ config, lib, pkgs, ... }: + +with lib; +let cfg = config.services.clightning.plugins.commando; in +{ + options.services.clightning.plugins.commando = { + enable = mkEnableOption "commando (clightning plugin)"; + readers = mkOption { + type = with types; listOf str; + default = []; + example = [ "0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518" ]; + description = '' + IDs of nodes which can execute read-only commands (list*, get*, ...). + ''; + }; + writers = mkOption { + type = with types; listOf str; + default = []; + example = [ "0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518" ]; + description = '' + IDs of nodes which can execute any commands. + ''; + }; + }; + + config = mkIf cfg.enable { + services.clightning.extraConfig = '' + plugin=${config.nix-bitcoin.pkgs.clightning-plugins.commando.path} + '' + + concatMapStrings (reader: '' + commando_reader=${reader} + '') cfg.readers + + concatMapStrings (writer: '' + commando_writer=${writer} + '') cfg.writers; + }; +} diff --git a/modules/clightning-plugins/default.nix b/modules/clightning-plugins/default.nix index 9a397828f..da304644a 100644 --- a/modules/clightning-plugins/default.nix +++ b/modules/clightning-plugins/default.nix @@ -13,6 +13,7 @@ let in { imports = [ ./clboss.nix + ./commando.nix ./prometheus.nix ./summary.nix ./zmq.nix diff --git a/test/tests.nix b/test/tests.nix index 7f06a16a7..b7462954e 100644 --- a/test/tests.nix +++ b/test/tests.nix @@ -132,6 +132,11 @@ let prometheus.enable = true; rebalance.enable = true; summary.enable = true; + commando = { + enable = true; + readers = [ "0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518" ]; + writers = [ "0336efaa22b8ba77ae721a25d589e1c5f2486073dd2f041add32a23316150e8b62" ]; + }; zmq = let tcpEndpoint = "tcp://127.0.0.1:5501"; in { enable = true; channel-opened = tcpEndpoint; From 2d6c4e829e655260dd4f33f2dae85ae1e8090ed7 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 24 Feb 2022 08:31:57 -0800 Subject: [PATCH 07/65] readme: fix monitor c-lightning plugin link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a798fb111..85cc79668 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ NixOS modules ([src](modules/modules.nix)) * [clboss](https://github.com/ZmnSCPxj/clboss): automated C-Lightning Node Manager * [commando](https://github.com/lightningd/plugins/tree/master/commando): control your node over lightning * [helpme](https://github.com/lightningd/plugins/tree/master/helpme): walks you through setting up a fresh c-lightning node - * [monitor](https://github.com/renepickhardt/plugins/tree/master/monitor): helps you analyze the health of your peers and channels + * [monitor](https://github.com/lightningd/plugins/tree/master/monitor): helps you analyze the health of your peers and channels * [prometheus](https://github.com/lightningd/plugins/tree/master/prometheus): lightning node exporter for the prometheus timeseries server * [rebalance](https://github.com/lightningd/plugins/tree/master/rebalance): keeps your channels balanced * [summary](https://github.com/lightningd/plugins/tree/master/summary): print a nice summary of the node status From ee4cdb0586117125fd1a2c2329655aeedd601da7 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sat, 26 Feb 2022 10:08:14 -0800 Subject: [PATCH 08/65] pyln-proto: relax pycparser constraint This is a bit hostile to different nixpkgs versions Signed-off-by: William Casarin --- pkgs/python-packages/pyln-proto/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/python-packages/pyln-proto/default.nix b/pkgs/python-packages/pyln-proto/default.nix index e66de6dba..80303a20d 100644 --- a/pkgs/python-packages/pyln-proto/default.nix +++ b/pkgs/python-packages/pyln-proto/default.nix @@ -29,6 +29,7 @@ buildPythonPackage rec { postUnpack = "sourceRoot=$sourceRoot/contrib/pyln-proto"; postPatch = '' sed -i ' + s|pycparser==2.20|pycparser~=2.20| s|coincurve ~= 13.0|coincurve == 15.0.0| s|base58 ~= 2.0.1|base58 == 2.1.0| s|mypy==0.790|mypy == 0.812| From 59bf0274c0e9fb1d13fc1e7ebb145d9289a43ac0 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Mon, 20 Dec 2021 15:16:38 +0100 Subject: [PATCH 09/65] pkgs: add groups, sort alphabetically --- pkgs/default.nix | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/pkgs/default.nix b/pkgs/default.nix index 7fb8d0deb..9475328d6 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -6,23 +6,27 @@ in , pkgsUnstable ? import nixpkgsPinned.nixpkgs-unstable { config = {}; overlays = []; } }: let self = { - rtl = pkgs.callPackage ./rtl { }; cl-rest = pkgs.callPackage ./cl-rest { }; - spark-wallet = pkgs.callPackage ./spark-wallet { }; - liquid-swap = pkgs.python3Packages.callPackage ./liquid-swap { }; - joinmarket = pkgs.callPackage ./joinmarket { inherit (self) nbPython3Packages; }; - generate-secrets = import ./generate-secrets-deprecated.nix; - nixops19_09 = pkgs.callPackage ./nixops { }; - krops = import ./krops { }; - netns-exec = pkgs.callPackage ./netns-exec { }; - clightning-plugins = pkgs.recurseIntoAttrs (import ./clightning-plugins pkgs self.nbPython3Packages); clboss = pkgs.callPackage ./clboss { }; + clightning-plugins = pkgs.recurseIntoAttrs (import ./clightning-plugins pkgs self.nbPython3Packages); + joinmarket = pkgs.callPackage ./joinmarket { inherit (self) nbPython3Packages; }; + liquid-swap = pkgs.python3Packages.callPackage ./liquid-swap { }; + rtl = pkgs.callPackage ./rtl { }; secp256k1 = pkgs.callPackage ./secp256k1 { }; + spark-wallet = pkgs.callPackage ./spark-wallet { }; nbPython3Packages = (pkgs.python3.override { packageOverrides = import ./python-packages self; }).pkgs; + # Internal pkgs + netns-exec = pkgs.callPackage ./netns-exec { }; + krops = import ./krops { }; + + # Deprecated pkgs + generate-secrets = import ./generate-secrets-deprecated.nix; + nixops19_09 = pkgs.callPackage ./nixops { }; + pinned = import ./pinned.nix pkgs pkgsUnstable; modulesPkgs = self // self.pinned; From 2493c8c20186d2aae93388ab3cf92865a01fac1e Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Mon, 28 Feb 2022 14:01:54 +0100 Subject: [PATCH 10/65] liquidd: add service timeouts like in bitcoind Previously, liquidd could fail with error: liquidd.service: start operation timed out. Terminating. --- modules/liquid.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/liquid.nix b/modules/liquid.nix index 075b91808..f884e855a 100644 --- a/modules/liquid.nix +++ b/modules/liquid.nix @@ -270,6 +270,8 @@ in { NotifyAccess = "all"; User = cfg.user; Group = cfg.group; + TimeoutStartSec = "5min"; + TimeoutStopSec = "10min"; ExecStart = "${nbPkgs.elementsd}/bin/elementsd -datadir='${cfg.dataDir}'"; Restart = "on-failure"; ReadWritePaths = cfg.dataDir; From 16daaaf79fba3ca1f4d0f5377152d80a9d7e13e8 Mon Sep 17 00:00:00 2001 From: Jonas Nick Date: Sat, 5 Mar 2022 21:49:07 +0000 Subject: [PATCH 11/65] update nixpkgs{,-unstable} btcpayserver: 1.4.4 -> 1.4.7 elementsd: 0.21.0.1 -> 0.21.0.2 lightning-loop: 0.16.0-beta -> 0.17.0-beta --- flake.lock | 12 ++++++------ test/nixos-search/flake.lock | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/flake.lock b/flake.lock index 9c55f497d..e7d0bd854 100644 --- a/flake.lock +++ b/flake.lock @@ -17,11 +17,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1644193793, - "narHash": "sha256-ggCI5LCXwkUJQwjpkr9qDFbQMiK3JvAfeNR4Uy0ny5Q=", + "lastModified": 1646406548, + "narHash": "sha256-xp+3f76ycZXNf9pG65Ef9KfDl1fas2UQu/cBe/pLd+c=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "521e4d7d13b09bc0a21976b9d19abd197d4e3b1e", + "rev": "47cd6702934434dd02bc53a67dbce3e5493e33a2", "type": "github" }, "original": { @@ -33,11 +33,11 @@ }, "nixpkgsUnstable": { "locked": { - "lastModified": 1644330694, - "narHash": "sha256-bxfJfDL8nKWR+LOwUf9xoZol8WKcahPS4EbD1U4kLT0=", + "lastModified": 1646415428, + "narHash": "sha256-L6ysyFcumtr+JnSXIuBx3SzZaptTneSzJ6aPnQKE4Kg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "18a062b02d6eb382714187b06e3bfc3ba25ace78", + "rev": "639d0ff3523f1b4b0f82cf51dba4697b9c89323b", "type": "github" }, "original": { diff --git a/test/nixos-search/flake.lock b/test/nixos-search/flake.lock index bf251ba56..32168e5cd 100644 --- a/test/nixos-search/flake.lock +++ b/test/nixos-search/flake.lock @@ -5,11 +5,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1644071056, - "narHash": "sha256-vClz4PD7cwckP8SEnaIIfLqfgT2v6MwB3aJcqemmDp8=", + "lastModified": 1646219142, + "narHash": "sha256-zjoJ9dZGA6ra1zf7imHwkJu6jKzFWcGv21//5QkjGyg=", "owner": "nixos", "repo": "nixos-search", - "rev": "b4163eb8b20a9956c4b63eb88ca06da3e1dd7f86", + "rev": "a5b2b8f0e5232b17314d163ce252c64224d82919", "type": "github" }, "original": { From 6629e9a66f1b4aea5feb30a89c0be0ff5c6dd1a0 Mon Sep 17 00:00:00 2001 From: nixbitcoin Date: Thu, 3 Mar 2022 15:12:58 +0000 Subject: [PATCH 12/65] joinmarket: bump secp256k1 to version used upstream Also incorporate improvements from upstream nixpkgs expression. Except, `enable-tests` line which is already enabled by default upstream. Add comment explaining the reason for having a custom secp256k1 pkg in nix-bitcoin. --- pkgs/default.nix | 1 + pkgs/secp256k1/default.nix | 34 +++++++++++++++++++++++++++------- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/pkgs/default.nix b/pkgs/default.nix index 9475328d6..d72c61f26 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -12,6 +12,7 @@ let self = { joinmarket = pkgs.callPackage ./joinmarket { inherit (self) nbPython3Packages; }; liquid-swap = pkgs.python3Packages.callPackage ./liquid-swap { }; rtl = pkgs.callPackage ./rtl { }; + # The secp256k1 version used by joinmarket secp256k1 = pkgs.callPackage ./secp256k1 { }; spark-wallet = pkgs.callPackage ./spark-wallet { }; diff --git a/pkgs/secp256k1/default.nix b/pkgs/secp256k1/default.nix index 6dbffbc84..1e5723db9 100644 --- a/pkgs/secp256k1/default.nix +++ b/pkgs/secp256k1/default.nix @@ -1,26 +1,46 @@ -{ lib, stdenv, fetchFromGitHub, autoreconfHook }: +{ lib +, stdenv +, fetchFromGitHub +, autoreconfHook +}: stdenv.mkDerivation { pname = "secp256k1"; - version = "2019-10-11"; + version = "2021-12-03"; src = fetchFromGitHub { owner = "bitcoin-core"; repo = "secp256k1"; - rev = "0d9540b13ffcd7cd44cc361b8744b93d88aa76ba"; - sha256 = "05zwhv8ffzrfdzqbsb4zm4kjdbjxqy5jh9r83fic0qpk2mkvc2i2"; + rev = "490022745164b56439688b0fc04f9bd43578e5c3"; + hash = "sha256-6CmGWiecthaGWSKX7VHWj5zvDAwVE9U5YOo9JRJWYwI="; }; nativeBuildInputs = [ autoreconfHook ]; - configureFlags = ["--enable-module-recovery" "--disable-jni" "--enable-experimental" "--enable-module-ecdh" "--enable-benchmark=no" ]; + configureFlags = [ + "--enable-benchmark=no" + "--enable-exhaustive-tests=no" + "--enable-experimental" + "--enable-module-ecdh" + "--enable-module-recovery" + "--enable-module-schnorrsig" + ]; + + doCheck = true; + + checkPhase = "./tests"; meta = with lib; { description = "Optimized C library for EC operations on curve secp256k1"; + longDescription = '' + Optimized C library for EC operations on curve secp256k1. Part of + Bitcoin Core. This library is a work in progress and is being used + to research best practices. Use at your own risk. + ''; homepage = "https://github.com/bitcoin-core/secp256k1"; - license = licenses.mit; + license = with licenses; [ mit ]; maintainers = with maintainers; [ nixbitcoin ]; - platforms = platforms.unix; + platforms = with platforms; unix; }; } From 5bee663e3009a0c25dc80762f6991ae5710c80df Mon Sep 17 00:00:00 2001 From: nixbitcoin Date: Thu, 3 Mar 2022 15:53:04 +0000 Subject: [PATCH 13/65] backups: bring in line with upstream duplicity Also, tell users that they can set `services.duplicity.*` to further configure the backup. --- modules/backups.nix | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/modules/backups.nix b/modules/backups.nix index 8b140cf04..9f2220ac2 100644 --- a/modules/backups.nix +++ b/modules/backups.nix @@ -3,7 +3,16 @@ with lib; let options.services.backups = { - enable = mkEnableOption "Backups service"; + enable = mkOption { + type = types.bool; + default = false; + description = '' + Enable backups of node data. + This uses the NixOS duplicity service. + To further configure the backup, you can set NixOS options `services.duplicity.*`. + The `services.duplicity.cleanup.*` options are particularly useful. + ''; + }; with-bulk-data = mkOption { type = types.bool; default = false; @@ -87,8 +96,8 @@ in { enable = true; extraFlags = [ "--include-filelist" "${filelist}" - "--full-if-older-than" "1M" ]; + fullIfOlderThan = mkDefault "1M"; targetUrl = cfg.destination; frequency = cfg.frequency; secretFile = "${config.nix-bitcoin.secretsDir}/backup-encryption-env"; From 4f45266524f935f9d028868c591a032206927e12 Mon Sep 17 00:00:00 2001 From: nixbitcoin Date: Wed, 9 Mar 2022 12:23:20 +0000 Subject: [PATCH 14/65] rtl: 0.12.1 -> 0.12.2 --- pkgs/rtl/generate.sh | 2 +- pkgs/rtl/node-packages.nix | 236 ++++++++++++++++++------------------- 2 files changed, 119 insertions(+), 119 deletions(-) diff --git a/pkgs/rtl/generate.sh b/pkgs/rtl/generate.sh index 9173ce5ad..239a5a893 100755 --- a/pkgs/rtl/generate.sh +++ b/pkgs/rtl/generate.sh @@ -5,7 +5,7 @@ set -euo pipefail TMPDIR="$(mktemp -d -p /tmp)" trap "rm -rf $TMPDIR" EXIT -version="0.12.1" +version="0.12.2" repo=https://github.com/Ride-The-Lightning/RTL # Fetch and verify source tarball diff --git a/pkgs/rtl/node-packages.nix b/pkgs/rtl/node-packages.nix index 6ba0a1bbe..f58dce7dc 100644 --- a/pkgs/rtl/node-packages.nix +++ b/pkgs/rtl/node-packages.nix @@ -112,202 +112,202 @@ let sha512 = "NNDrSK32mpkuQiY6CzAjRBvWSiLM+61dC3EOfBUDIyPzIp318fhqZ5ohxY42Fvp07KGnRv5tcqb/1QE8Ukwbyg=="; }; }; - "@babel/code-frame-7.16.0" = { + "@babel/code-frame-7.16.7" = { name = "_at_babel_slash_code-frame"; packageName = "@babel/code-frame"; - version = "7.16.0"; + version = "7.16.7"; src = fetchurl { - url = "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz"; - sha512 = "IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA=="; + url = "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz"; + sha512 = "iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg=="; }; }; - "@babel/compat-data-7.16.4" = { + "@babel/compat-data-7.17.0" = { name = "_at_babel_slash_compat-data"; packageName = "@babel/compat-data"; - version = "7.16.4"; + version = "7.17.0"; src = fetchurl { - url = "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz"; - sha512 = "1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q=="; + url = "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz"; + sha512 = "392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng=="; }; }; - "@babel/core-7.16.0" = { + "@babel/core-7.16.12" = { name = "_at_babel_slash_core"; packageName = "@babel/core"; - version = "7.16.0"; + version = "7.16.12"; src = fetchurl { - url = "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz"; - sha512 = "mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ=="; + url = "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz"; + sha512 = "dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg=="; }; }; - "@babel/generator-7.16.0" = { + "@babel/generator-7.16.8" = { name = "_at_babel_slash_generator"; packageName = "@babel/generator"; - version = "7.16.0"; + version = "7.16.8"; src = fetchurl { - url = "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz"; - sha512 = "RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew=="; + url = "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz"; + sha512 = "1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw=="; }; }; - "@babel/generator-7.16.5" = { + "@babel/generator-7.17.3" = { name = "_at_babel_slash_generator"; packageName = "@babel/generator"; - version = "7.16.5"; + version = "7.17.3"; src = fetchurl { - url = "https://registry.npmjs.org/@babel/generator/-/generator-7.16.5.tgz"; - sha512 = "kIvCdjZqcdKqoDbVVdt5R99icaRtrtYhYK/xux5qiWCBmfdvEYMFZ68QCrpE5cbFM1JsuArUNs1ZkuKtTtUcZA=="; + url = "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz"; + sha512 = "+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg=="; }; }; - "@babel/helper-compilation-targets-7.16.3" = { + "@babel/helper-compilation-targets-7.16.7" = { name = "_at_babel_slash_helper-compilation-targets"; packageName = "@babel/helper-compilation-targets"; - version = "7.16.3"; + version = "7.16.7"; src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz"; - sha512 = "vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA=="; + url = "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz"; + sha512 = "mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA=="; }; }; - "@babel/helper-environment-visitor-7.16.5" = { + "@babel/helper-environment-visitor-7.16.7" = { name = "_at_babel_slash_helper-environment-visitor"; packageName = "@babel/helper-environment-visitor"; - version = "7.16.5"; + version = "7.16.7"; src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.5.tgz"; - sha512 = "ODQyc5AnxmZWm/R2W7fzhamOk1ey8gSguo5SGvF0zcB3uUzRpTRmM/jmLSm9bDMyPlvbyJ+PwPEK0BWIoZ9wjg=="; + url = "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz"; + sha512 = "SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag=="; }; }; - "@babel/helper-function-name-7.16.0" = { + "@babel/helper-function-name-7.16.7" = { name = "_at_babel_slash_helper-function-name"; packageName = "@babel/helper-function-name"; - version = "7.16.0"; + version = "7.16.7"; src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz"; - sha512 = "BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog=="; + url = "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz"; + sha512 = "QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA=="; }; }; - "@babel/helper-get-function-arity-7.16.0" = { + "@babel/helper-get-function-arity-7.16.7" = { name = "_at_babel_slash_helper-get-function-arity"; packageName = "@babel/helper-get-function-arity"; - version = "7.16.0"; + version = "7.16.7"; src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz"; - sha512 = "ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ=="; + url = "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz"; + sha512 = "flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw=="; }; }; - "@babel/helper-hoist-variables-7.16.0" = { + "@babel/helper-hoist-variables-7.16.7" = { name = "_at_babel_slash_helper-hoist-variables"; packageName = "@babel/helper-hoist-variables"; - version = "7.16.0"; + version = "7.16.7"; src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz"; - sha512 = "1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg=="; + url = "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz"; + sha512 = "m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg=="; }; }; - "@babel/helper-module-imports-7.16.0" = { + "@babel/helper-module-imports-7.16.7" = { name = "_at_babel_slash_helper-module-imports"; packageName = "@babel/helper-module-imports"; - version = "7.16.0"; + version = "7.16.7"; src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz"; - sha512 = "kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg=="; + url = "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz"; + sha512 = "LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg=="; }; }; - "@babel/helper-module-transforms-7.16.5" = { + "@babel/helper-module-transforms-7.17.6" = { name = "_at_babel_slash_helper-module-transforms"; packageName = "@babel/helper-module-transforms"; - version = "7.16.5"; + version = "7.17.6"; src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.5.tgz"; - sha512 = "CkvMxgV4ZyyioElFwcuWnDCcNIeyqTkCm9BxXZi73RR1ozqlpboqsbGUNvRTflgZtFbbJ1v5Emvm+lkjMYY/LQ=="; + url = "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz"; + sha512 = "2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA=="; }; }; - "@babel/helper-simple-access-7.16.0" = { + "@babel/helper-simple-access-7.16.7" = { name = "_at_babel_slash_helper-simple-access"; packageName = "@babel/helper-simple-access"; - version = "7.16.0"; + version = "7.16.7"; src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz"; - sha512 = "o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw=="; + url = "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz"; + sha512 = "ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g=="; }; }; - "@babel/helper-split-export-declaration-7.16.0" = { + "@babel/helper-split-export-declaration-7.16.7" = { name = "_at_babel_slash_helper-split-export-declaration"; packageName = "@babel/helper-split-export-declaration"; - version = "7.16.0"; + version = "7.16.7"; src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz"; - sha512 = "0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw=="; + url = "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz"; + sha512 = "xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw=="; }; }; - "@babel/helper-validator-identifier-7.15.7" = { + "@babel/helper-validator-identifier-7.16.7" = { name = "_at_babel_slash_helper-validator-identifier"; packageName = "@babel/helper-validator-identifier"; - version = "7.15.7"; + version = "7.16.7"; src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz"; - sha512 = "K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w=="; + url = "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz"; + sha512 = "hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw=="; }; }; - "@babel/helper-validator-option-7.14.5" = { + "@babel/helper-validator-option-7.16.7" = { name = "_at_babel_slash_helper-validator-option"; packageName = "@babel/helper-validator-option"; - version = "7.14.5"; + version = "7.16.7"; src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz"; - sha512 = "OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow=="; + url = "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz"; + sha512 = "TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ=="; }; }; - "@babel/helpers-7.16.5" = { + "@babel/helpers-7.17.2" = { name = "_at_babel_slash_helpers"; packageName = "@babel/helpers"; - version = "7.16.5"; + version = "7.17.2"; src = fetchurl { - url = "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.5.tgz"; - sha512 = "TLgi6Lh71vvMZGEkFuIxzaPsyeYCHQ5jJOOX1f0xXn0uciFuE8cEk0wyBquMcCxBXZ5BJhE2aUB7pnWTD150Tw=="; + url = "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz"; + sha512 = "0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ=="; }; }; - "@babel/highlight-7.16.0" = { + "@babel/highlight-7.16.10" = { name = "_at_babel_slash_highlight"; packageName = "@babel/highlight"; - version = "7.16.0"; + version = "7.16.10"; src = fetchurl { - url = "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz"; - sha512 = "t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g=="; + url = "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz"; + sha512 = "5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw=="; }; }; - "@babel/parser-7.16.5" = { + "@babel/parser-7.17.3" = { name = "_at_babel_slash_parser"; packageName = "@babel/parser"; - version = "7.16.5"; + version = "7.17.3"; src = fetchurl { - url = "https://registry.npmjs.org/@babel/parser/-/parser-7.16.5.tgz"; - sha512 = "+Ce7T5iPNWzfu9C1aB5tN3Lyafs5xb3Ic7vBWyZL2KXT3QSdD1dD3CvgOzPmQKoNNRt6uauc0XwNJTQtXC2/Mw=="; + url = "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz"; + sha512 = "7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA=="; }; }; - "@babel/template-7.16.0" = { + "@babel/template-7.16.7" = { name = "_at_babel_slash_template"; packageName = "@babel/template"; - version = "7.16.0"; + version = "7.16.7"; src = fetchurl { - url = "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz"; - sha512 = "MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A=="; + url = "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz"; + sha512 = "I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w=="; }; }; - "@babel/traverse-7.16.5" = { + "@babel/traverse-7.17.3" = { name = "_at_babel_slash_traverse"; packageName = "@babel/traverse"; - version = "7.16.5"; + version = "7.17.3"; src = fetchurl { - url = "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.5.tgz"; - sha512 = "FOCODAzqUMROikDYLYxl4nmwiLlu85rNqBML/A5hKRVXG2LV8d0iMqgPzdYTcIpjZEBB7D6UDU9vxRZiriASdQ=="; + url = "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz"; + sha512 = "5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw=="; }; }; - "@babel/types-7.16.0" = { + "@babel/types-7.17.0" = { name = "_at_babel_slash_types"; packageName = "@babel/types"; - version = "7.16.0"; + version = "7.17.0"; src = fetchurl { - url = "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz"; - sha512 = "PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg=="; + url = "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz"; + sha512 = "TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw=="; }; }; "@foliojs-fork/fontkit-1.9.1" = { @@ -832,13 +832,13 @@ let sha512 = "L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="; }; }; - "caniuse-lite-1.0.30001286" = { + "caniuse-lite-1.0.30001313" = { name = "caniuse-lite"; packageName = "caniuse-lite"; - version = "1.0.30001286"; + version = "1.0.30001313"; src = fetchurl { - url = "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001286.tgz"; - sha512 = "zaEMRH6xg8ESMi2eQ3R4eZ5qw/hJiVsO/HlLwniIwErij0JDr9P+8V4dtx1l+kLq6j3yy8l8W4fst1lBnat5wQ=="; + url = "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001313.tgz"; + sha512 = "rI1UN0koZUiKINjysQDuRi2VeSCce3bYJNmDcj3PIKREiAmjakugBul1QSkg/fPrlULYl6oWfGg3PbgOSY9X4Q=="; }; }; "canonical-path-1.0.0" = { @@ -3590,10 +3590,10 @@ let args = { name = "rtl"; packageName = "rtl"; - version = "0.12.1-beta"; + version = "0.12.2-beta"; src = fetchurl { - url = "https://github.com/Ride-The-Lightning/RTL/archive/refs/tags/v0.12.1.tar.gz"; - hash = "sha256-PNv4kipeaTKrk+LjBzaUjOiEdYeB7P463ojXsUmlgc0="; + url = "https://github.com/Ride-The-Lightning/RTL/archive/refs/tags/v0.12.2.tar.gz"; + hash = "sha256-xvW6zq/mBsuRy8AwoAPJ2RR7iqhKrC57SVWyFTjq6aw="; }; dependencies = [ sources."@angular/animations-13.0.3" @@ -3608,45 +3608,45 @@ let sources."@angular/platform-browser-13.0.3" sources."@angular/platform-browser-dynamic-13.0.3" sources."@angular/router-13.0.3" - sources."@babel/code-frame-7.16.0" - sources."@babel/compat-data-7.16.4" - (sources."@babel/core-7.16.0" // { + sources."@babel/code-frame-7.16.7" + sources."@babel/compat-data-7.17.0" + (sources."@babel/core-7.16.12" // { dependencies = [ sources."semver-6.3.0" sources."source-map-0.5.7" ]; }) - (sources."@babel/generator-7.16.0" // { + (sources."@babel/generator-7.16.8" // { dependencies = [ sources."source-map-0.5.7" ]; }) - (sources."@babel/helper-compilation-targets-7.16.3" // { + (sources."@babel/helper-compilation-targets-7.16.7" // { dependencies = [ sources."semver-6.3.0" ]; }) - sources."@babel/helper-environment-visitor-7.16.5" - sources."@babel/helper-function-name-7.16.0" - sources."@babel/helper-get-function-arity-7.16.0" - sources."@babel/helper-hoist-variables-7.16.0" - sources."@babel/helper-module-imports-7.16.0" - sources."@babel/helper-module-transforms-7.16.5" - sources."@babel/helper-simple-access-7.16.0" - sources."@babel/helper-split-export-declaration-7.16.0" - sources."@babel/helper-validator-identifier-7.15.7" - sources."@babel/helper-validator-option-7.14.5" - sources."@babel/helpers-7.16.5" - sources."@babel/highlight-7.16.0" - sources."@babel/parser-7.16.5" - sources."@babel/template-7.16.0" - (sources."@babel/traverse-7.16.5" // { + sources."@babel/helper-environment-visitor-7.16.7" + sources."@babel/helper-function-name-7.16.7" + sources."@babel/helper-get-function-arity-7.16.7" + sources."@babel/helper-hoist-variables-7.16.7" + sources."@babel/helper-module-imports-7.16.7" + sources."@babel/helper-module-transforms-7.17.6" + sources."@babel/helper-simple-access-7.16.7" + sources."@babel/helper-split-export-declaration-7.16.7" + sources."@babel/helper-validator-identifier-7.16.7" + sources."@babel/helper-validator-option-7.16.7" + sources."@babel/helpers-7.17.2" + sources."@babel/highlight-7.16.10" + sources."@babel/parser-7.17.3" + sources."@babel/template-7.16.7" + (sources."@babel/traverse-7.17.3" // { dependencies = [ - sources."@babel/generator-7.16.5" + sources."@babel/generator-7.17.3" sources."source-map-0.5.7" ]; }) - sources."@babel/types-7.16.0" + sources."@babel/types-7.17.0" sources."@foliojs-fork/fontkit-1.9.1" (sources."@foliojs-fork/linebreak-1.1.1" // { dependencies = [ @@ -3728,7 +3728,7 @@ let sources."bytes-3.1.0" sources."call-bind-1.0.2" sources."camelcase-5.3.1" - sources."caniuse-lite-1.0.30001286" + sources."caniuse-lite-1.0.30001313" sources."canonical-path-1.0.0" sources."caseless-0.12.0" sources."chalk-2.4.2" From 91203d8d06344fb84abe19a11aeefd414407bc55 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Thu, 10 Mar 2022 22:48:16 +0100 Subject: [PATCH 15/65] secrets: fix secrets setup warning With newer nixpkgs versions, a type error was shown instead of the warning message when `secretsSetupMethod` was unset. --- modules/secrets/secrets.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/secrets/secrets.nix b/modules/secrets/secrets.nix index 4ad7752f2..aa758d598 100644 --- a/modules/secrets/secrets.nix +++ b/modules/secrets/secrets.nix @@ -66,7 +66,7 @@ let }; secretsSetupMethod = mkOption { - type = types.str; + type = with types; nullOr str; default = null; }; From 118595608d057abf484825e27f72729d23ef312f Mon Sep 17 00:00:00 2001 From: Jonas Nick Date: Sat, 12 Mar 2022 17:14:08 +0000 Subject: [PATCH 16/65] update nixpkgs{,-unstable} electrs: 0.9.5 -> 0.9.6 --- flake.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/flake.lock b/flake.lock index e7d0bd854..5fe1fd6d4 100644 --- a/flake.lock +++ b/flake.lock @@ -17,11 +17,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1646406548, - "narHash": "sha256-xp+3f76ycZXNf9pG65Ef9KfDl1fas2UQu/cBe/pLd+c=", + "lastModified": 1646933238, + "narHash": "sha256-RZJnLN0o4B35eTnUc2tEAD12X5TNeeJhhvH3Fd6Pmdo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "47cd6702934434dd02bc53a67dbce3e5493e33a2", + "rev": "bacbfd713b4781a4a82c1f390f8fe21ae3b8b95b", "type": "github" }, "original": { @@ -33,11 +33,11 @@ }, "nixpkgsUnstable": { "locked": { - "lastModified": 1646415428, - "narHash": "sha256-L6ysyFcumtr+JnSXIuBx3SzZaptTneSzJ6aPnQKE4Kg=", + "lastModified": 1646955661, + "narHash": "sha256-AYLta1PubJnrkv15+7G+6ErW5m9NcI9wSdJ+n7pKAe0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "639d0ff3523f1b4b0f82cf51dba4697b9c89323b", + "rev": "e9545762b032559c27d8ec9141ed63ceca1aa1ac", "type": "github" }, "original": { From 77b34954ef8cafd928a0cad3f400a23cf4b5fd0f Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Tue, 29 Mar 2022 16:30:47 +0200 Subject: [PATCH 17/65] cl-rest: 0.6.1 -> 0.7.0 --- pkgs/cl-rest/generate.sh | 2 +- pkgs/cl-rest/node-packages.nix | 46 +++++++++++++++++----------------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/pkgs/cl-rest/generate.sh b/pkgs/cl-rest/generate.sh index 9068270bb..8d58c7518 100755 --- a/pkgs/cl-rest/generate.sh +++ b/pkgs/cl-rest/generate.sh @@ -5,7 +5,7 @@ set -euo pipefail TMPDIR="$(mktemp -d -p /tmp)" trap "rm -rf $TMPDIR" EXIT -version="0.6.1" +version="0.7.0" repo=https://github.com/Ride-The-Lightning/c-lightning-REST # Fetch and verify source tarball diff --git a/pkgs/cl-rest/node-packages.nix b/pkgs/cl-rest/node-packages.nix index c331fc363..023911182 100644 --- a/pkgs/cl-rest/node-packages.nix +++ b/pkgs/cl-rest/node-packages.nix @@ -625,13 +625,13 @@ let sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"; }; }; - "json-schema-0.2.3" = { + "json-schema-0.4.0" = { name = "json-schema"; packageName = "json-schema"; - version = "0.2.3"; + version = "0.4.0"; src = fetchurl { - url = "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz"; - sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13"; + url = "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz"; + sha512 = "es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="; }; }; "json-schema-ref-parser-7.1.2" = { @@ -670,13 +670,13 @@ let sha1 = "3f4dae4a91fac315f71062f8521cc239f1366280"; }; }; - "jsprim-1.4.1" = { + "jsprim-1.4.2" = { name = "jsprim"; packageName = "jsprim"; - version = "1.4.1"; + version = "1.4.2"; src = fetchurl { - url = "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz"; - sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"; + url = "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz"; + sha512 = "P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw=="; }; }; "lodash.get-4.4.2" = { @@ -1093,22 +1093,22 @@ let sha512 = "zk6ig8J2B4OqCnBSIqO67/Ui96NTjuoX10YGa4YVlIlQzLpHUZbLFZaO+zSubQoqAiJxmpvlbUplEcFIsPCESA=="; }; }; - "swagger-ui-dist-3.24.0" = { + "swagger-ui-dist-4.9.1" = { name = "swagger-ui-dist"; packageName = "swagger-ui-dist"; - version = "3.24.0"; + version = "4.9.1"; src = fetchurl { - url = "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-3.24.0.tgz"; - sha512 = "5uAjeEqV+zbtalBDXAIrkqUZwsUHYwvBSeGYlFcLj1ERS3jfprL4OPLSSriDoeXCtNmWzpz5aooV2qJW+DqdUQ=="; + url = "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.9.1.tgz"; + sha512 = "hYo/kt/wXYd/4WOUm2NLyDa3tR3lCfHbjVa1wSvvSL8AKbYoJsBkc4Va7VJ1uv/JO89xM1736pp1tzJkrVsBxA=="; }; }; - "swagger-ui-express-4.1.2" = { + "swagger-ui-express-4.3.0" = { name = "swagger-ui-express"; packageName = "swagger-ui-express"; - version = "4.1.2"; + version = "4.3.0"; src = fetchurl { - url = "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.1.2.tgz"; - sha512 = "bVT16qj6WdNlEKFkSLOoTeGuqEm2lfOFRq6mVHAx+viA/ikORE+n4CS3WpVcYmQzM4HE6+DUFgAWcMRBJNpjcw=="; + url = "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.3.0.tgz"; + sha512 = "jN46SEEe9EoXa3ZgZoKgnSF6z0w3tnM1yqhO4Y+Q4iZVc8JOQB960EZpIAz6rNROrDApVDwcMHR0mhlnc/5Omw=="; }; }; "toidentifier-1.0.0" = { @@ -1277,10 +1277,10 @@ let args = { name = "c-lightning-rest"; packageName = "c-lightning-rest"; - version = "0.6.0"; + version = "0.7.0"; src = fetchurl { - url = "https://github.com/Ride-The-Lightning/c-lightning-REST/archive/refs/tags/v0.6.1.tar.gz"; - hash = "sha256-4IaNeuuIf2hOVWpjEwFzQgY97B7ON4AoRBKReDGvvf0="; + url = "https://github.com/Ride-The-Lightning/c-lightning-REST/archive/refs/tags/v0.7.0.tar.gz"; + hash = "sha256-NeeG4WyXWPZv5u5HuMwVhIgDgHStgah3YNtk4bKvNoY="; }; dependencies = [ sources."accepts-1.3.7" @@ -1363,12 +1363,12 @@ let sources."isstream-0.1.2" sources."js-yaml-3.13.1" sources."jsbn-0.1.1" - sources."json-schema-0.2.3" + sources."json-schema-0.4.0" sources."json-schema-ref-parser-7.1.2" sources."json-schema-traverse-0.4.1" sources."json-stringify-safe-5.0.1" sources."jsonparse-1.3.1" - sources."jsprim-1.4.1" + sources."jsprim-1.4.2" sources."lodash.get-4.4.2" sources."lodash.isequal-4.5.0" (sources."macaroon-3.0.4" // { @@ -1425,8 +1425,8 @@ let sources."swagger-jsdoc-3.4.0" sources."swagger-methods-2.0.2" sources."swagger-parser-8.0.0" - sources."swagger-ui-dist-3.24.0" - sources."swagger-ui-express-4.1.2" + sources."swagger-ui-dist-4.9.1" + sources."swagger-ui-express-4.3.0" sources."toidentifier-1.0.0" sources."tough-cookie-2.5.0" sources."tunnel-agent-0.6.0" From 4f74690292e1c1c2ba3114d7ceff2930e6823bf8 Mon Sep 17 00:00:00 2001 From: nixbitcoin Date: Tue, 22 Feb 2022 13:49:19 +0000 Subject: [PATCH 18/65] joinmarket: 0.9.4 -> 0.9.5 Notes - We can no longer test for `unknown error in JSON-RPC`. `jm-ob-watcher` now simply outputs `Starting ob-watcher`. Tested working on https://nixbitcoin.org/orderbook. - Removed Agora IRC server since it is offline semi-permanently. Should probably also be removed upstream. - Includes patch for https://github.com/JoinMarket-Org/joinmarket-clientserver/issues/1193 --- modules/joinmarket.nix | 10 +--------- pkgs/joinmarket/default.nix | 20 ++++++++++++++----- .../python-bitcointx/default.nix | 4 ++-- .../python-bitcointx/get-sha256.sh | 2 +- test/tests.nix | 4 ---- test/tests.py | 5 ++--- 6 files changed, 21 insertions(+), 24 deletions(-) diff --git a/modules/joinmarket.nix b/modules/joinmarket.nix index b9b160722..c14b40e2f 100644 --- a/modules/joinmarket.nix +++ b/modules/joinmarket.nix @@ -150,16 +150,8 @@ let usessl = false ${socks5Settings} - # agora.anarplex.net - [MESSAGING:server3] - host = vxecvd6lc4giwtasjhgbrr3eop6pzq6i5rveracktioneunalgqlwfad.onion - channel = joinmarket-pit - port = 6667 - usessl = false - ${socks5Settings} - # ilita - [MESSAGING:server4] + [MESSAGING:server3] host = ilitafrzzgxymv6umx2ux7kbz3imyeko6cnqkvy4nisjjj4qpqkrptid.onion channel = joinmarket-pit port = 6667 diff --git a/pkgs/joinmarket/default.nix b/pkgs/joinmarket/default.nix index 6c620f22b..2ec027ec5 100644 --- a/pkgs/joinmarket/default.nix +++ b/pkgs/joinmarket/default.nix @@ -1,10 +1,20 @@ -{ stdenv, lib, fetchurl, python3, nbPython3Packages, pkgs }: +{ stdenv, lib, fetchurl, applyPatches, fetchpatch, python3, nbPython3Packages, pkgs }: let - version = "0.9.4"; - src = fetchurl { - url = "https://github.com/JoinMarket-Org/joinmarket-clientserver/archive/v${version}.tar.gz"; - sha256 = "1xkz274g9lv5yif77h0mci1fsgam56sdc8m281q3a8hij9nmzmq1"; + version = "0.9.5"; + src = applyPatches { + src = fetchurl { + url = "https://github.com/JoinMarket-Org/joinmarket-clientserver/archive/v${version}.tar.gz"; + sha256 = "0q8hfq4y7az5ly97brq1khhhvhnq6irzw0ginmz20fwn7w3yc5sn"; + }; + patches = [ + (fetchpatch { + # https://github.com/JoinMarket-Org/joinmarket-clientserver/pull/1206 + name = "ob-export-fix"; + url = "https://patch-diff.githubusercontent.com/raw/JoinMarket-Org/joinmarket-clientserver/pull/1206.patch"; + sha256 = "0532gixjyc8r11sfmlf32v5iwy0rhkpa8rbvm4b7h509hnyycvhx"; + }) + ]; }; runtimePackages = with nbPython3Packages; [ diff --git a/pkgs/python-packages/python-bitcointx/default.nix b/pkgs/python-packages/python-bitcointx/default.nix index a886773a5..422aeb64c 100644 --- a/pkgs/python-packages/python-bitcointx/default.nix +++ b/pkgs/python-packages/python-bitcointx/default.nix @@ -2,11 +2,11 @@ buildPythonPackage rec { pname = "python-bitcointx"; - version = "1.1.1.post0"; + version = "1.1.3"; src = fetchurl { url = "https://github.com/Simplexum/${pname}/archive/${pname}-v${version}.tar.gz"; - sha256 = "d12593b09785a7a4ce08cb1928815c2366e9f6e4fab317267462857bf83904b0"; + sha256 = "f0f487c29619df0e94a04f6deb3dc950ff9954c072017bd3eda90f73c24f0953"; }; patchPhase = '' diff --git a/pkgs/python-packages/python-bitcointx/get-sha256.sh b/pkgs/python-packages/python-bitcointx/get-sha256.sh index 669fcff9c..ad3873588 100755 --- a/pkgs/python-packages/python-bitcointx/get-sha256.sh +++ b/pkgs/python-packages/python-bitcointx/get-sha256.sh @@ -9,7 +9,7 @@ cd $TMPDIR echo "Fetching latest release" git clone https://github.com/simplexum/python-bitcointx 2> /dev/null cd python-bitcointx -latest=python-bitcointx-v1.1.1.post0 +latest=python-bitcointx-v1.1.3 echo "Latest release is ${latest}" # GPG verification diff --git a/test/tests.nix b/test/tests.nix index b7462954e..193c9f41a 100644 --- a/test/tests.nix +++ b/test/tests.nix @@ -108,10 +108,6 @@ let txfee = 200; }; - # Disable restarting joinmarket-ob-watcher because it always fails - # on non-synced mainnet nodes - systemd.services.joinmarket-ob-watcher.serviceConfig.Restart = mkForce "no"; - tests.nodeinfo = config.nix-bitcoin.nodeinfo.enable; tests.backups = cfg.backups.enable; diff --git a/test/tests.py b/test/tests.py index 7739e9cf9..c6cab60e6 100644 --- a/test/tests.py +++ b/test/tests.py @@ -241,9 +241,8 @@ def _(): @test("joinmarket-ob-watcher") def _(): - # joinmarket-ob-watcher fails on non-synced mainnet nodes. - # Also, it doesn't support any of the test networks. - machine.wait_until_succeeds(log_has_string("joinmarket-ob-watcher", "unknown error in JSON-RPC")) + assert_running("joinmarket-ob-watcher") + machine.wait_until_succeeds(log_has_string("joinmarket-ob-watcher", "Starting ob-watcher")) @test("nodeinfo") def _(): From bdccaa3edd222d6bdf8bb3fdf974f35e592ab076 Mon Sep 17 00:00:00 2001 From: nixbitcoin Date: Tue, 22 Feb 2022 18:08:34 +0000 Subject: [PATCH 19/65] Add SECURITY.md Including nix-bitcoin security fund information --- README.md | 4 ++ SECURITY.md | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 SECURITY.md diff --git a/README.md b/README.md index d102ee18a..2d77a779e 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,10 @@ NixOS modules ([src](modules/modules.nix)) Security --- +See [SECURITY.md](SECURITY.md) for the security policy and how to report a vulnerability. + +nix-bitcoin aims to achieve a high degree of security by building on the following principles: + * **Simplicity:** Only services enabled in `configuration.nix` and their dependencies are installed, support for [doas](https://github.com/Duncaen/OpenDoas) ([sudo alternative](https://lobste.rs/s/efsvqu/heap_based_buffer_overflow_sudo_cve_2021#c_c6fcfa)), code is continuously reviewed and refined. * **Integrity:** The Nix package manager guarantees that all dependencies are exactly specified, packages can be built from source to reduce reliance on binary caches, nix-bitcoin merge commits are signed, all commits are approved by multiple nix-bitcoin developers, upstream packages are cryptographically verified where possible, we use this software ourselves. * **Principle of Least Privilege:** Services operate with least privileges; they each have their own user and are restricted further with [systemd features](pkgs/lib.nix), [RPC whitelisting](modules/bitcoind-rpc-public-whitelist.nix) and [netns-isolation](modules/netns-isolation.nix). There's a non-root user *operator* to interact with the various services. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..f1f7dc83d --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,103 @@ +# Security Policy + +## Reporting a Vulnerability + +To report security issues send an encrypted email to the following nix-bitcoin developers or contact them via [matrix](https://matrix.org/). + +| Name | GPG Fingerprint | Email | Matrix | +|---------------|----------------------------------------------------|-------------------------|------------------------------------------------------------------------------------| +| Jonas Nick | 36C7 1A37 C9D9 88BD E825 08D9 B1A7 0E4F 8DCD 0366 | jonasd.nick@gmail.com | [@nickler:nixbitcoin.org](https://matrix.to/#/@nickler:nixbitcoin.org) | +| Erik Arvstedt | 4E28 0A8C 1B33 4C86 C26B C134 3331 2B94 4DD9 7846 | erik.arvstedt@gmail.com | [@erikarvstedt:matrix.org](https://matrix.to/#/@erikarvstedt:matrix.org) | +| nixbitcoindev | 577A 3452 7F3E 2A85 E80F E164 DD11 F9AD 5308 B3BA | nixbitcoin@i2pmail.org | [@nixbitcoindev:nixbitcoin.org](https://matrix.to/#/@nixbitcoindev:nixbitcoin.org) | + +You can import a GPG key by running the following command with that individual’s fingerprint: `gpg --keyserver hkps://keys.openpgp.org --recv-keys ""`. Ensure that you put quotes around fingerprints containing spaces. + +[Responsible disclosures](https://en.wikipedia.org/wiki/Coordinated_vulnerability_disclosure) may qualify for a reward from the nix-bitcoin security fund (see [below](#nix-bitcoin-security-fund)). + +## Wall of Fame + +*empty* + + +## nix-bitcoin security fund + +The nix-bitcoin security fund is a collection of funds held on the following 2/3 +bitcoin multisig address which is used to reward security researchers who +discover and report vulnerabilities in nix-bitcoin or its upstream dependencies. +Rewards are paid out as percentages of the total fund, rather than as fixed +amounts. + +``` +bc1qrpnz05n0yznaj6yw82wy8dhwuqz86s87vdlhq4cu92fus9qal25s555wsy +``` +([View balance](https://mempool.nixbitcoin.org/address/bc1qrpnz05n0yznaj6yw82wy8dhwuqz86s87vdlhq4cu92fus9qal25s555wsy)) + +The nix-bitcoin developers [listed above](#reporting-a-vulnerability) each hold +one key to the multisig address and collectively form the nix-bitcoin developer +quorum: + +### Eligible Vulnerabilities + +The following types of vulnerabilities qualify for rewards, to the exclusion of +all other security vulnerabilities. + +| Type | Description | Examples | +| :-: | :-: | :-: | +| Outright Vulnerabilities | Vulnerabilities in nix-bitcoin specific tooling (except CI tooling) | privilege escalation in SUID binary `netns-exec`, improper release signature verification through `fetch-release` | +| Violations of [PoLP](https://en.wikipedia.org/wiki/Principle_of_least_privilege) | nix-bitcoin services are given too much privilege over the system or unnecessary access to other nix-bitcoin services, or one of the nix-bitcoin isolation measures is incorrectly implemented | `netns-isolation` doesn't work, spark-wallet has access to bitcoin RPC interface or files | +| Vulnerabilities in Dependencies | A vulnerability in any dependency of a nix-bitcoin installation with a configuration consisting of any combination of the following services: bitcoind, clightning, lnd, electrs, joinmarket, btcpayserver, liquidd.
**Note:** The vulnerability must first be reported to and handled by the maintainers of the dependency before it qualifies for a reward| Compromised NixOS expression pulls in malicious package, JoinMarket pulls in a python dependency with a known severe vulnerability | +| Bad Documentation | Our documentation suggests blatantly insecure things | `install.md` tells you to add our SSH keys to your root user | +| Compromise of Signing Key | Compromise of the nix-bitcoin signing key, i.e., `0xB1A70E4F8DCD0366` | Leaking the key, managing to sign something with it | + +### Reward + +Researchers qualify for a maximum reward[^1] of 10% of the total fund holdings for +reporting any vulnerability that matches the above eligibility requirements. If +a vulnerability or any combination of a number of vulnerabilities that meet the +above-described eligibility requirements can lead to a realistic attack on +nix-bitcoin users, researchers qualify for a higher maximum reward[^1] depending +the final outcome of the attack scenario: + +| Outcome | Description | Maximum Reward of Total Fund[^1] | +| :-: | :-: | :-: | +| Loss of Funds | Attack allows stealing or destroying user's funds | 50 % | +| Loss of Privacy | Attack allows exfiltrating sensitive information or otherwise attributing a user's real world identity to his nix-bitcoin node or funds held/managed thereon without the user specifically opting-in to this (e.g., by disabling the `secure-node` preset) | 25 % | +| Denial of Service | Attack allows crashing a service or otherwise denying a user service from his node | 25 % | + +All other reported vulnerabilities which meet the above requirements without a +clear and plausible attack scenario receive a maximum reward[^1] of 10% of the +fund. + +[^1]: Rewards are subject to a discount at the discretion of the nix-bitcoin +developer quorum for reasons such as insignificance of the vulnerability or +obscurity of the victim's required configuration, as well as simple mitigation +(i.e. the attack should have been mitigated anyway by common-sense security +measures) or complex/unlikely attack execution. + +### Policy + +* Vulnerabilities must be [responsibly + disclosed](https://en.wikipedia.org/wiki/Coordinated_vulnerability_disclosure). +* E2EE: Vulnerabilities must be disclosed via end-to-end encrypted communication + methods, such as PGP E-Mail or Matrix. +* Wall of Fame: In addition to the above rewards, security researchers will also + be added to the Wall of Fame, unless, of course, they wish to remain + anonymous. +* First come, first serve: Rewards are awarded strictly on a first come, first + serve basis from the date they were responsibly disclosed in their entirety. + Multiple reports from the same researcher can either be bundled for a higher + likelihood of receiving the full maximum reward or rewarded individually, + proportional to the remaining amount. +* Exclusion of dependencies with existing bug bounty programms: Software which + is covered by an existing bug bounty program is not eligible for rewards under + the "Vulnerabilities in Dependencies" category. +* Exclusion of dependencies with known vulnerabilities that are in the process + of being patched: Software with a known vulnerability where there is reason to + believe that the patch is still under development or simply has not yet been + ported to NixOS, due to the relative recency of the patch, is not eligible for + rewards under the "Vulnerabilities in Dependencies" category. +* Termination: The fund can be terminated at any time by the quorum of key + holders in which case the holdings are donated to non-profit organizations. +* This document may be updated over time to ensure smooth and purposeful + operation of the fund as an incentive for security researchers to investigate + and report vulnerabilities in the nix-bitcoin ecosystem. From e793a3470c4fd9227b86b6e421fe7a5753b266cc Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Tue, 29 Mar 2022 21:48:56 +0200 Subject: [PATCH 20/65] lndinit: init at 0.1.3-beta --- pkgs/default.nix | 1 + pkgs/lndinit/default.nix | 24 ++++++++++++++++++++++++ pkgs/lndinit/get-sha256.sh | 26 ++++++++++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 pkgs/lndinit/default.nix create mode 100755 pkgs/lndinit/get-sha256.sh diff --git a/pkgs/default.nix b/pkgs/default.nix index d72c61f26..672f2b29c 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -10,6 +10,7 @@ let self = { clboss = pkgs.callPackage ./clboss { }; clightning-plugins = pkgs.recurseIntoAttrs (import ./clightning-plugins pkgs self.nbPython3Packages); joinmarket = pkgs.callPackage ./joinmarket { inherit (self) nbPython3Packages; }; + lndinit = pkgs.callPackage ./lndinit { }; liquid-swap = pkgs.python3Packages.callPackage ./liquid-swap { }; rtl = pkgs.callPackage ./rtl { }; # The secp256k1 version used by joinmarket diff --git a/pkgs/lndinit/default.nix b/pkgs/lndinit/default.nix new file mode 100644 index 000000000..4cbd76060 --- /dev/null +++ b/pkgs/lndinit/default.nix @@ -0,0 +1,24 @@ +{ lib, buildGoModule, fetchFromGitHub }: + +buildGoModule rec { + pname = "lndinit"; + version = "0.1.3-beta"; + + src = fetchFromGitHub { + owner = "lightninglabs"; + repo = pname; + rev = "v${version}"; + sha256 = "sha256-sO1DpbppCurxr9g9nUl9Vx82FJK1mTcUw3rY1Fm1wEU="; + }; + + vendorSha256 = "sha256-xdxxixSabcuGzwCctHrP/RV/Z8sCQDmk2PU4j1u8MX8="; + + subPackages = [ "." ]; + + meta = with lib; { + description = "Wallet initializer utility for lnd"; + homepage = "https://github.com/lightninglabs/lndinit"; + license = licenses.mit; + maintainers = with maintainers; [ earvstedt ]; + }; +} diff --git a/pkgs/lndinit/get-sha256.sh b/pkgs/lndinit/get-sha256.sh new file mode 100755 index 000000000..b2533c01f --- /dev/null +++ b/pkgs/lndinit/get-sha256.sh @@ -0,0 +1,26 @@ +#! /usr/bin/env nix-shell +#! nix-shell -i bash -p git gnupg curl jq +set -euo pipefail + +TMPDIR="$(mktemp -d -p /tmp)" +trap "rm -rf $TMPDIR" EXIT +cd $TMPDIR + +echo "Fetching latest release" +repo=lightninglabs/lndinit +latest=$(curl -s --show-error https://api.github.com/repos/$repo/releases/latest | jq -r .tag_name) +echo "Latest release is $latest" +git clone --depth 1 --branch $latest https://github.com/lightninglabs/lndinit 2>/dev/null +cd lndinit + +# GPG verification +export GNUPGHOME=$TMPDIR +echo "Fetching Oliver Gugger's key" +gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys F4FC70F07310028424EFC20A8E4256593F177720 2> /dev/null +echo "Verifying latest release" +git verify-tag $latest + +echo "tag: $latest" +git checkout -q tags/$latest +rm -rf .git +nix hash path . From a4a5c72b01e95a85db9ce50e62feea1c06a63811 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Tue, 29 Mar 2022 21:48:57 +0200 Subject: [PATCH 21/65] lnd: use `lndinit` for wallet creation --- modules/lnd.nix | 50 ++++++++++++++++++++----------------------------- 1 file changed, 20 insertions(+), 30 deletions(-) diff --git a/modules/lnd.nix b/modules/lnd.nix index d312ac328..da44192da 100644 --- a/modules/lnd.nix +++ b/modules/lnd.nix @@ -126,6 +126,7 @@ let nbLib = config.nix-bitcoin.lib; secretsDir = config.nix-bitcoin.secretsDir; runAsUser = config.nix-bitcoin.runAsUserCmd; + lndinit = "${config.nix-bitcoin.pkgs.lndinit}/bin/lndinit"; bitcoind = config.services.bitcoind; @@ -202,6 +203,21 @@ in { echo "externalip=$(${cfg.getPublicAddressCmd})" ''} } >> '${cfg.dataDir}/lnd.conf' + + if [[ ! -f ${networkDir}/wallet.db ]]; then + mnemonic='${cfg.dataDir}/lnd-seed-mnemonic' + + if [[ ! -f "$mnemonic" ]]; then + echo "Create lnd seed" + (umask u=r,go=; ${lndinit} gen-seed > "$mnemonic") + fi + + echo "Create lnd wallet" + ${lndinit} -v init-wallet \ + --file.seed="$mnemonic" \ + --file.wallet-password='${secretsDir}/lnd-wallet-password' \ + --init-file.output-wallet-dir='${cfg.networkDir}' + fi ''; serviceConfig = nbLib.defaultHardening // { Type = "notify"; @@ -210,8 +226,7 @@ in { ExecStart = '' ${cfg.package}/bin/lnd \ --configfile="${cfg.dataDir}/lnd.conf" \ - --wallet-unlock-password-file="${secretsDir}/lnd-wallet-password" \ - --wallet-unlock-allow-create + --wallet-unlock-password-file="${secretsDir}/lnd-wallet-password" ''; User = cfg.user; TimeoutSec = "15min"; @@ -221,33 +236,9 @@ in { ExecStartPost = let curl = "${pkgs.curl}/bin/curl -s --show-error --cacert ${cfg.certPath}"; restUrl = "https://${nbLib.addressWithPort cfg.restAddress cfg.restPort}/v1"; - in [ - (nbLib.script "lnd-create-wallet" '' - if [[ ! -f ${networkDir}/wallet.db ]]; then - mnemonic="${cfg.dataDir}/lnd-seed-mnemonic" - if [[ ! -f "$mnemonic" ]]; then - echo "Create lnd seed" - umask u=r,go= - ${curl} -X GET ${restUrl}/genseed | ${pkgs.jq}/bin/jq -c '.cipher_seed_mnemonic' > "$mnemonic" - fi - - echo "Create lnd wallet" - ${curl} --output /dev/null \ - -X POST -d "{\"wallet_password\": \"$(cat ${secretsDir}/lnd-wallet-password | tr -d '\n' | base64 -w0)\", \ - \"cipher_seed_mnemonic\": $(cat "$mnemonic" | tr -d '\n')}" \ - ${restUrl}/initwallet - - echo "Wait until wallet is created" - getStatus() { - /run/current-system/systemd/bin/systemctl show -p StatusText lnd | cut -f 2 -d= - } - while [[ $(getStatus) == "Wallet locked" ]]; do - sleep 0.1 - done - fi - '') + in # Setting macaroon permissions for other users needs root permissions - (nbLib.rootScript "lnd-create-macaroons" '' + nbLib.rootScript "lnd-create-macaroons" '' umask ug=r,o= ${lib.concatMapStrings (macaroon: '' echo "Create custom macaroon ${macaroon}" @@ -260,8 +251,7 @@ in { ${pkgs.jq}/bin/jq -c '.macaroon' | ${pkgs.xxd}/bin/xxd -p -r > "$macaroonPath" chown ${cfg.macaroons.${macaroon}.user}: "$macaroonPath" '') (attrNames cfg.macaroons)} - '') - ]; + ''; } // nbLib.allowedIPAddresses cfg.tor.enforce; }; From d394a079a8b973aafd3b7c39fb55c3e2760dbc71 Mon Sep 17 00:00:00 2001 From: Jonas Nick Date: Mon, 4 Apr 2022 17:17:31 +0000 Subject: [PATCH 22/65] update nixpkgs{,-unstable} --- flake.lock | 18 +++++++++--------- test/nixos-search/flake.lock | 28 ++++++++++++++++++++++------ 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/flake.lock b/flake.lock index 5fe1fd6d4..e9addae83 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "flake-utils": { "locked": { - "lastModified": 1644229661, - "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", "owner": "numtide", "repo": "flake-utils", - "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", "type": "github" }, "original": { @@ -17,11 +17,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1646933238, - "narHash": "sha256-RZJnLN0o4B35eTnUc2tEAD12X5TNeeJhhvH3Fd6Pmdo=", + "lastModified": 1648965846, + "narHash": "sha256-xaO0KS+sgZLYrhaQNjVe6eRcOUIM1mEkAjT+dRbPblU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "bacbfd713b4781a4a82c1f390f8fe21ae3b8b95b", + "rev": "0aac710801aec4ba545527cf41a5706028fe6271", "type": "github" }, "original": { @@ -33,11 +33,11 @@ }, "nixpkgsUnstable": { "locked": { - "lastModified": 1646955661, - "narHash": "sha256-AYLta1PubJnrkv15+7G+6ErW5m9NcI9wSdJ+n7pKAe0=", + "lastModified": 1648219316, + "narHash": "sha256-Ctij+dOi0ZZIfX5eMhgwugfvB+WZSrvVNAyAuANOsnQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e9545762b032559c27d8ec9141ed63ceca1aa1ac", + "rev": "30d3d79b7d3607d56546dd2a6b49e156ba0ec634", "type": "github" }, "original": { diff --git a/test/nixos-search/flake.lock b/test/nixos-search/flake.lock index 32168e5cd..20e2c6ece 100644 --- a/test/nixos-search/flake.lock +++ b/test/nixos-search/flake.lock @@ -1,15 +1,31 @@ { "nodes": { + "flake-utils": { + "locked": { + "lastModified": 1644229661, + "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "nixos-search": { "inputs": { + "flake-utils": "flake-utils", "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1646219142, - "narHash": "sha256-zjoJ9dZGA6ra1zf7imHwkJu6jKzFWcGv21//5QkjGyg=", + "lastModified": 1648850703, + "narHash": "sha256-nZeV3sV3UU9NzJPSGrPN8/clecTqx9byQUtTjS7XMXk=", "owner": "nixos", "repo": "nixos-search", - "rev": "a5b2b8f0e5232b17314d163ce252c64224d82919", + "rev": "6ba56bc7e96ce83a5d33868b38acb04ebbc688e1", "type": "github" }, "original": { @@ -20,11 +36,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1631118067, - "narHash": "sha256-tEcFvm3a6ToeBGwHdjfB2mVQwa4LZCZTQYE2LnY3ycA=", + "lastModified": 1642903813, + "narHash": "sha256-0lNfGW8sNfyTrixoQhVG00Drl/ECaf5GbfKAQ1ZDoyE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "09cd65b33c5653d7d2954fef4b9f0e718c899743", + "rev": "689b76bcf36055afdeb2e9852f5ecdd2bf483f87", "type": "github" }, "original": { From 3b4cf665e823908c6820dcab7960800c129082b2 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Mon, 25 Apr 2022 11:18:57 +0200 Subject: [PATCH 23/65] clboss: 0.11B -> 0.11E --- pkgs/clboss/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/clboss/default.nix b/pkgs/clboss/default.nix index ba6de166e..0812876a4 100644 --- a/pkgs/clboss/default.nix +++ b/pkgs/clboss/default.nix @@ -5,11 +5,11 @@ let in stdenv.mkDerivation rec { pname = "clboss"; - version = "0.11B"; + version = "0.11E"; src = fetchurl { url = "https://github.com/ZmnSCPxj/clboss/releases/download/${version}/clboss-${version}.tar.gz"; - sha256 = "1ba4izgvq1qy3wfcnvs44pm0vi769h6i9ylbbnpxakxmwsd690xi"; + hash = "sha256-TDDD5tM3aNRxgSP/6rVM+4bX9zwcErZ0yQpQOjNU1FM="; }; nativeBuildInputs = [ pkgconfig libev curlWithGnuTLS sqlite ]; From f08b83bce2d3ee71de3a68bc3335f0e7c075af6b Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Mon, 25 Apr 2022 11:19:10 +0200 Subject: [PATCH 24/65] clboss: update module --- modules/clightning-plugins/clboss.nix | 31 ++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/modules/clightning-plugins/clboss.nix b/modules/clightning-plugins/clboss.nix index 970a9ccec..3a439b20b 100644 --- a/modules/clightning-plugins/clboss.nix +++ b/modules/clightning-plugins/clboss.nix @@ -4,7 +4,14 @@ with lib; let cfg = config.services.clightning.plugins.clboss; in { options.services.clightning.plugins.clboss = { - enable = mkEnableOption "CLBOSS (clightning plugin)"; + enable = mkOption { + type = types.bool; + default = true; + description = '' + Whether to enable CLBOSS (clightning plugin). + See also: https://github.com/ZmnSCPxj/clboss#operating + ''; + }; min-onchain = mkOption { type = types.ints.positive; default = 30000; @@ -14,6 +21,25 @@ let cfg = config.services.clightning.plugins.clboss; in the funds in your clightning wallet. ''; }; + min-channel = mkOption { + type = types.ints.positive; + default = 500000; + description = "The minimum size (in satoshi) of channels created by CLBOSS."; + }; + max-channel = mkOption { + type = types.ints.positive; + default = 16777215; + description = "The maximum size (in satoshi) of channels created by CLBOSS."; + }; + zerobasefee = mkOption { + type = types.enum [ "require" "allow" "disallow" ]; + default = "allow"; + description = '' + require: set `base_fee` to 0. + allow: set `base_fee` according to the CLBOSS heuristics, which may include value 0. + disallow: set `base_fee` to according to the CLBOSS heuristics, with a minimum value of 1. + ''; + }; package = mkOption { type = types.package; default = config.nix-bitcoin.pkgs.clboss; @@ -26,6 +52,9 @@ let cfg = config.services.clightning.plugins.clboss; in services.clightning.extraConfig = '' plugin=${cfg.package}/bin/clboss clboss-min-onchain=${toString cfg.min-onchain} + clboss-min-channel=${toString cfg.min-channel} + clboss-max-channel=${toString cfg.max-channel} + clboss-zerobasefee=${cfg.zerobasefee} ''; systemd.services.clightning.path = [ pkgs.dnsutils From dd2dcad3dc5126412f2f4b6c0217dd2887e9f743 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Sat, 30 Apr 2022 13:08:50 +0200 Subject: [PATCH 25/65] clboss: 0.11E -> 0.12 --- pkgs/clboss/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/clboss/default.nix b/pkgs/clboss/default.nix index 0812876a4..150fffda8 100644 --- a/pkgs/clboss/default.nix +++ b/pkgs/clboss/default.nix @@ -5,11 +5,11 @@ let in stdenv.mkDerivation rec { pname = "clboss"; - version = "0.11E"; + version = "0.12"; src = fetchurl { url = "https://github.com/ZmnSCPxj/clboss/releases/download/${version}/clboss-${version}.tar.gz"; - hash = "sha256-TDDD5tM3aNRxgSP/6rVM+4bX9zwcErZ0yQpQOjNU1FM="; + hash = "sha256-UZcSfbpp3vPsD3CDukp+r5Z60h0UEWTduqF4DhJ+H2U="; }; nativeBuildInputs = [ pkgconfig libev curlWithGnuTLS sqlite ]; From 66b19403a6426550a452c8995f1d3acf72fbbe72 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Thu, 5 May 2022 16:58:16 +0200 Subject: [PATCH 26/65] clboss: fix clboss being enabled by default --- modules/clightning-plugins/clboss.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/clightning-plugins/clboss.nix b/modules/clightning-plugins/clboss.nix index 3a439b20b..5e61cd2ac 100644 --- a/modules/clightning-plugins/clboss.nix +++ b/modules/clightning-plugins/clboss.nix @@ -6,7 +6,7 @@ let cfg = config.services.clightning.plugins.clboss; in options.services.clightning.plugins.clboss = { enable = mkOption { type = types.bool; - default = true; + default = false; description = '' Whether to enable CLBOSS (clightning plugin). See also: https://github.com/ZmnSCPxj/clboss#operating From 29d2ffc111ccf553314101dec44a1d9e6fd650dd Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Sat, 30 Apr 2022 15:35:45 +0200 Subject: [PATCH 27/65] defaultHardening: allow `clone3` system call clone3 is the latest version of the clone system call, which is already allowed. clone3 is required by nbxplorer 2.3.20. --- pkgs/lib.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/lib.nix b/pkgs/lib.nix index 5ac6e6e8b..6919ae622 100644 --- a/pkgs/lib.nix +++ b/pkgs/lib.nix @@ -33,7 +33,7 @@ let self = { # @system-service whitelist and docker seccomp blacklist (except for "clone" # which is a core requirement for systemd services) # @system-service is defined in src/shared/seccomp-util.c (systemd source) - SystemCallFilter = [ "@system-service" "~add_key clone3 kcmp keyctl mbind move_pages name_to_handle_at personality process_vm_readv process_vm_writev request_key set_mempolicy setns unshare userfaultfd" ]; + SystemCallFilter = [ "@system-service" "~add_key kcmp keyctl mbind move_pages name_to_handle_at personality process_vm_readv process_vm_writev request_key set_mempolicy setns unshare userfaultfd" ]; SystemCallArchitectures = "native"; }; From 7de56b019fe34872dbfb77a46ba5fadd15e1dc2d Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Sat, 30 Apr 2022 15:35:46 +0200 Subject: [PATCH 28/65] nbxplorer: use postgresql The former DBTrie backend has been deprecated. --- examples/configuration.nix | 2 +- modules/backups.nix | 4 +++- modules/btcpayserver.nix | 20 ++++++++++++++------ modules/versioning.nix | 11 +++++++++++ 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/examples/configuration.nix b/examples/configuration.nix index 84d0c0e5b..93b9f1411 100644 --- a/examples/configuration.nix +++ b/examples/configuration.nix @@ -268,5 +268,5 @@ # The nix-bitcoin release version that your config is compatible with. # When upgrading to a backwards-incompatible release, nix-bitcoin will display an # an error and provide hints for migrating your config to the new release. - nix-bitcoin.configVersion = "0.0.65"; + nix-bitcoin.configVersion = "0.0.70"; } diff --git a/modules/backups.nix b/modules/backups.nix index 9f2220ac2..21e0b20eb 100644 --- a/modules/backups.nix +++ b/modules/backups.nix @@ -121,6 +121,8 @@ in { fi ''; - services.backups.postgresqlDatabases = mkIf config.services.btcpayserver.enable [ "btcpaydb" ]; + services.backups.postgresqlDatabases = mkIf config.services.btcpayserver.enable ( + [ "btcpaydb" ] ++ optional cfg.with-bulk-data "nbxplorer" + ); }; } diff --git a/modules/btcpayserver.nix b/modules/btcpayserver.nix index 2b55e5b9d..8f5f92a49 100644 --- a/modules/btcpayserver.nix +++ b/modules/btcpayserver.nix @@ -136,11 +136,17 @@ in { }; services.postgresql = { enable = true; - ensureDatabases = [ "btcpaydb" ]; - ensureUsers = [{ - name = cfg.btcpayserver.user; - ensurePermissions."DATABASE btcpaydb" = "ALL PRIVILEGES"; - }]; + ensureDatabases = [ "btcpaydb" "nbxplorer" ]; + ensureUsers = [ + { + name = cfg.btcpayserver.user; + ensurePermissions."DATABASE btcpaydb" = "ALL PRIVILEGES"; + } + { + name = cfg.nbxplorer.user; + ensurePermissions."DATABASE nbxplorer" = "ALL PRIVILEGES"; + } + ]; }; systemd.tmpfiles.rules = [ @@ -162,10 +168,12 @@ in { lbtcrpcurl=http://${nbLib.addressWithPort liquidd.rpc.address liquidd.rpc.port} lbtcnodeendpoint=${nbLib.addressWithPort liquidd.address liquidd.whitelistedPort} ''} + postgres=User ID=${cfg.nbxplorer.user};Host=/run/postgresql;Database=nbxplorer + automigrate=1 ''; in rec { wantedBy = [ "multi-user.target" ]; - requires = [ "bitcoind.service" ] ++ optional cfg.btcpayserver.lbtc "liquidd.service"; + requires = [ "bitcoind.service" "postgresql.service" ] ++ optional cfg.btcpayserver.lbtc "liquidd.service"; after = requires; preStart = '' install -m 600 ${configFile} '${cfg.nbxplorer.dataDir}/settings.config' diff --git a/modules/versioning.nix b/modules/versioning.nix index e1d6761f7..aa9693fb2 100644 --- a/modules/versioning.nix +++ b/modules/versioning.nix @@ -202,6 +202,17 @@ let config to your node. ''; } + { + version = "0.0.70"; + condition = config.services.nbxplorer.enable; + message = '' + The nbxplorer database backend has changed from DBTrie to Postgresql. + The new `services.postgresql` database name is `nbxplorer`. + The migration happens automatically after deploying. + Migration time for a large server with a 5GB DBTrie database takes about 40 minutes. + See also: https://github.com/dgarage/NBXplorer/blob/master/docs/Postgres-Migration.md + ''; + } ]; mkOnionServiceChange = service: { From aa21fb454e44afa414a2aefebdce5b38146314e8 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Sat, 30 Apr 2022 15:35:47 +0200 Subject: [PATCH 29/65] tests: disable `btcpayserver.lbtc` for regtest Previously, in case of btcpayserver.lbtc on regtest, nbxplorer just printed a log error while trying to generate liquidd regtest blocks. Now nbxplorer exits with an error, so disable lbtc. --- test/tests.nix | 16 ++++++++++++++++ test/tests.py | 8 +------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/test/tests.nix b/test/tests.nix index 193c9f41a..190616fe8 100644 --- a/test/tests.nix +++ b/test/tests.nix @@ -95,6 +95,7 @@ let }; # Needed to test macaroon creation environment.systemPackages = mkIfTest "btcpayserver" (with pkgs; [ openssl xxd ]); + test.data.btcpayserver-lbtc = config.services.btcpayserver.lbtc; tests.joinmarket = cfg.joinmarket.enable; tests.joinmarket-yieldgenerator = cfg.joinmarket.yieldgenerator.enable; @@ -264,6 +265,21 @@ let # `validatepegin` is incompatible with regtest services.liquidd.validatepegin = mkForce false; + + # TODO-EXTERNAL: + # Reenable `btcpayserver.lbtc` in regtest (and add test in tests.py) + # when nbxplorer can parse liquidd regtest blocks. + # + # When `btcpayserver.lbtc` is enabled in regtest, nxbplorer tries to + # generate regtest blocks, which fails because no liquidd wallet exists. + # When blocks are pre-generated via `liquidd.postStart`, nbxplorer + # fails to parse the blocks: + # info: NBXplorer.Indexer.LBTC: Full node version detected: 210002 + # info: NBXplorer.Indexer.LBTC: NBXplorer is correctly whitelisted by the node + # fail: NBXplorer.Indexer.LBTC: Unhandled exception in the indexer, retrying in 10 seconds + # System.IO.EndOfStreamException: No more byte to read + # at NBitcoin.BitcoinStream.ReadWriteBytes(Span`1 data) + services.btcpayserver.lbtc = mkForce false; }; ## Examples / debug helper diff --git a/test/tests.py b/test/tests.py index c6cab60e6..9f2f3860d 100644 --- a/test/tests.py +++ b/test/tests.py @@ -188,7 +188,7 @@ def _(): def _(): assert_running("nbxplorer") machine.wait_until_succeeds(log_has_string("nbxplorer", "BTC: RPC connection successful")) - if "liquidd" in enabled_tests: + if test_data["btcpayserver-lbtc"]: machine.wait_until_succeeds(log_has_string("nbxplorer", "LBTC: RPC connection successful")) wait_for_open_port(ip("nbxplorer"), 24444) @@ -399,12 +399,6 @@ def enabled(unit): succeed("runuser -u operator -- pool orders list") if enabled("btcpayserver"): machine.wait_until_succeeds(log_has_string("nbxplorer", f"BTC: Starting scan at block {num_blocks}")) - # TODO-EXTERNAL: - # nbxplorer 2.2.16 currently fails with with lbtc (liquidd) on regtest - # LBTC: Full node version detected: 210000 - # LBTC: RPC connection successful - # LBTC: Failed to connect to RPC - # System.IO.EndOfStreamException: No more byte to read if "netns-isolation" in enabled_tests: def ip(name): From 408486ac9c159395d603a577ffe251da307eb463 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Sat, 30 Apr 2022 15:35:48 +0200 Subject: [PATCH 30/65] tests: update nbxplorer --- test/tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/tests.py b/test/tests.py index 9f2f3860d..a90bf0390 100644 --- a/test/tests.py +++ b/test/tests.py @@ -398,7 +398,7 @@ def enabled(unit): ) succeed("runuser -u operator -- pool orders list") if enabled("btcpayserver"): - machine.wait_until_succeeds(log_has_string("nbxplorer", f"BTC: Starting scan at block {num_blocks}")) + machine.wait_until_succeeds(log_has_string("nbxplorer", f"At height: {num_blocks}")) if "netns-isolation" in enabled_tests: def ip(name): From 43ee7668abb79a1b0200b87f29f924add852156e Mon Sep 17 00:00:00 2001 From: Jonas Nick Date: Thu, 5 May 2022 12:50:19 +0000 Subject: [PATCH 31/65] joinmarket: explicitly create no descriptor wallet The default value of `descriptors` has changed from `false` to `true` in Bitcoin Core 23.0. --- modules/joinmarket.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/joinmarket.nix b/modules/joinmarket.nix index c14b40e2f..6a35abaa4 100644 --- a/modules/joinmarket.nix +++ b/modules/joinmarket.nix @@ -290,6 +290,7 @@ in { echo "Create watch-only wallet ${cfg.rpcWalletFile}" if ! output=$(${bitcoind.cli}/bin/bitcoin-cli -named createwallet \ wallet_name="${cfg.rpcWalletFile}" \ + descriptors=false \ ${optionalString (!bitcoind.regtest) "disable_private_keys=true"} 2>&1 ); then # Ignore error if bitcoind wallet already exists From ca834cce8416c3a031c27f2bb5064d45cc4ee774 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Thu, 5 May 2022 20:43:08 +0200 Subject: [PATCH 32/65] joinmarket: simplify pkgs Remove unused dependencies. --- pkgs/python-packages/jmbitcoin/default.nix | 4 ++-- pkgs/python-packages/jmclient/default.nix | 7 +++---- pkgs/python-packages/jmdaemon/default.nix | 4 ++-- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/pkgs/python-packages/jmbitcoin/default.nix b/pkgs/python-packages/jmbitcoin/default.nix index c0924362d..fcc17515e 100644 --- a/pkgs/python-packages/jmbitcoin/default.nix +++ b/pkgs/python-packages/jmbitcoin/default.nix @@ -1,4 +1,4 @@ -{ version, src, lib, buildPythonPackage, fetchurl, future, coincurve, urldecode, pyaes, python-bitcointx, joinmarketbase }: +{ version, src, lib, buildPythonPackage, fetchurl, urldecode, pyaes, python-bitcointx, joinmarketbase }: buildPythonPackage rec { pname = "joinmarketbitcoin"; @@ -6,7 +6,7 @@ buildPythonPackage rec { postUnpack = "sourceRoot=$sourceRoot/jmbitcoin"; - propagatedBuildInputs = [ future coincurve urldecode pyaes python-bitcointx ]; + propagatedBuildInputs = [ urldecode pyaes python-bitcointx ]; checkInputs = [ joinmarketbase ]; diff --git a/pkgs/python-packages/jmclient/default.nix b/pkgs/python-packages/jmclient/default.nix index 6b9d8ef16..dde369b35 100644 --- a/pkgs/python-packages/jmclient/default.nix +++ b/pkgs/python-packages/jmclient/default.nix @@ -1,4 +1,4 @@ -{ version, src, lib, buildPythonPackage, fetchurl, future, configparser, joinmarketbase, joinmarketdaemon, mnemonic, argon2_cffi, bencoderpyx, pyaes, joinmarketbitcoin, txtorcon, klein, pyjwt, autobahn, cryptography }: +{ version, src, lib, buildPythonPackage, fetchurl, future, configparser, joinmarketbase, joinmarketdaemon, mnemonic, argon2_cffi, bencoderpyx, pyaes, joinmarketbitcoin, klein, pyjwt, autobahn }: buildPythonPackage rec { pname = "joinmarketclient"; @@ -6,10 +6,9 @@ buildPythonPackage rec { postUnpack = "sourceRoot=$sourceRoot/jmclient"; - checkInputs = [ joinmarketbitcoin joinmarketdaemon txtorcon ]; + checkInputs = [ joinmarketbitcoin joinmarketdaemon ]; - # configparser may need to be compiled with python_version<"3.2" - propagatedBuildInputs = [ future configparser joinmarketbase mnemonic argon2_cffi bencoderpyx pyaes klein pyjwt autobahn cryptography ]; + propagatedBuildInputs = [ future configparser joinmarketbase mnemonic argon2_cffi bencoderpyx pyaes klein pyjwt autobahn ]; patchPhase = '' substituteInPlace setup.py \ diff --git a/pkgs/python-packages/jmdaemon/default.nix b/pkgs/python-packages/jmdaemon/default.nix index 5dd5a7c3c..c643f94f3 100644 --- a/pkgs/python-packages/jmdaemon/default.nix +++ b/pkgs/python-packages/jmdaemon/default.nix @@ -1,4 +1,4 @@ -{ version, src, lib, buildPythonPackage, fetchurl, future, txtorcon, cryptography, pyopenssl, libnacl, joinmarketbase }: +{ version, src, lib, buildPythonPackage, fetchurl, txtorcon, cryptography, pyopenssl, libnacl, joinmarketbase }: buildPythonPackage rec { pname = "joinmarketdaemon"; @@ -6,7 +6,7 @@ buildPythonPackage rec { postUnpack = "sourceRoot=$sourceRoot/jmdaemon"; - propagatedBuildInputs = [ future txtorcon cryptography pyopenssl libnacl joinmarketbase ]; + propagatedBuildInputs = [ txtorcon cryptography pyopenssl libnacl joinmarketbase ]; meta = with lib; { description = "Client library for Bitcoin coinjoins"; From 900836fe0d5983192db78c7da5a15a66925cf84d Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Thu, 5 May 2022 20:43:09 +0200 Subject: [PATCH 33/65] joinmarket: add private python package set This is a nonfunctional refactoring commit. It's needed because pkg `pyln-proto`, which is introduced in the next commit, requires a different, incompatible version of `cryptography`, which must be placed in a different python package set. --- pkgs/default.nix | 2 +- pkgs/joinmarket/default.nix | 14 ++++++++++++-- pkgs/python-packages/default.nix | 8 +++++--- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/pkgs/default.nix b/pkgs/default.nix index 672f2b29c..e79149edb 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -9,7 +9,7 @@ let self = { cl-rest = pkgs.callPackage ./cl-rest { }; clboss = pkgs.callPackage ./clboss { }; clightning-plugins = pkgs.recurseIntoAttrs (import ./clightning-plugins pkgs self.nbPython3Packages); - joinmarket = pkgs.callPackage ./joinmarket { inherit (self) nbPython3Packages; }; + joinmarket = pkgs.callPackage ./joinmarket { nbPythonPackageOverrides = import ./python-packages self; }; lndinit = pkgs.callPackage ./lndinit { }; liquid-swap = pkgs.python3Packages.callPackage ./liquid-swap { }; rtl = pkgs.callPackage ./rtl { }; diff --git a/pkgs/joinmarket/default.nix b/pkgs/joinmarket/default.nix index 2ec027ec5..4ffc890a9 100644 --- a/pkgs/joinmarket/default.nix +++ b/pkgs/joinmarket/default.nix @@ -1,4 +1,4 @@ -{ stdenv, lib, fetchurl, applyPatches, fetchpatch, python3, nbPython3Packages, pkgs }: +{ stdenv, lib, fetchurl, applyPatches, fetchpatch, python3, nbPythonPackageOverrides, pkgs }: let version = "0.9.5"; @@ -17,7 +17,17 @@ let ]; }; - runtimePackages = with nbPython3Packages; [ + pyPkgs = (python3.override { + packageOverrides = (self: super: let + overrides = nbPythonPackageOverrides self super; + in + overrides // { + cryptography = overrides.cryptography_3_3_2; + } + ); + }).pkgs; + + runtimePackages = with pyPkgs; [ joinmarketbase joinmarketclient joinmarketbitcoin diff --git a/pkgs/python-packages/default.nix b/pkgs/python-packages/default.nix index c7162f365..c0a756829 100644 --- a/pkgs/python-packages/default.nix +++ b/pkgs/python-packages/default.nix @@ -30,13 +30,15 @@ in { base58 = callPackage ./specific-versions/base58.nix {}; # cryptography 3.3.2, required by joinmarketdaemon - cryptography = callPackage ./specific-versions/cryptography {}; - cryptography_vectors = callPackage ./specific-versions/cryptography/vectors.nix {}; + # Used in the private python package set for joinmarket (../joinmarket/default.nix) + cryptography_3_3_2 = callPackage ./specific-versions/cryptography { + cryptography_vectors = callPackage ./specific-versions/cryptography/vectors.nix {}; + }; # autobahn 20.12.3, required by joinmarketclient autobahn = callPackage ./specific-versions/autobahn.nix {}; - # tubes 0.2.0, required by klein + # tubes 0.2.0, required by jmclient (via pkg `klein`) tubes = callPackage ./specific-versions/tubes.nix {}; # recommonmark 0.7.1, required by pyln-client From 6bdf0ac3fb485438098b668341dcf205066dcdaf Mon Sep 17 00:00:00 2001 From: Jonas Nick Date: Thu, 5 May 2022 09:55:05 +0000 Subject: [PATCH 34/65] update nixpkgs{,-unstable} This commit does not pass the tests. Fixup is in the next commit. bitcoin: 22.0 -> 23.0 bitcoind: 22.0 -> 23.0 btcpayserver: 1.4.7 -> 1.5.1 clightning: 0.10.2 -> 0.11.0.1 electrs: 0.9.6 -> 0.9.7 hwi: 2.0.2 -> 2.1.0 lightning-loop: 0.17.0-beta -> 0.18.0-beta lnd: 0.14.2-beta -> 0.14.3-beta nbxplorer: 2.2.20 -> 2.3.20 --- flake.lock | 18 +++++++++--------- pkgs/pinned.nix | 8 ++++---- test/nixos-search/flake.lock | 35 ++++++++++++++++++++++++++--------- 3 files changed, 39 insertions(+), 22 deletions(-) diff --git a/flake.lock b/flake.lock index e9addae83..7d910835e 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "flake-utils": { "locked": { - "lastModified": 1648297722, - "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "lastModified": 1649676176, + "narHash": "sha256-OWKJratjt2RW151VUlJPRALb7OU2S5s+f0vLj4o1bHM=", "owner": "numtide", "repo": "flake-utils", - "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "rev": "a4b154ebbdc88c8498a5c7b01589addc9e9cb678", "type": "github" }, "original": { @@ -17,11 +17,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1648965846, - "narHash": "sha256-xaO0KS+sgZLYrhaQNjVe6eRcOUIM1mEkAjT+dRbPblU=", + "lastModified": 1651571855, + "narHash": "sha256-KZie6c2J2DUPLjG2PkYSwGLvD6RygA3TxZSPQpctbNI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0aac710801aec4ba545527cf41a5706028fe6271", + "rev": "fd43ce017d4c95f47166d28664a004f57458a0b1", "type": "github" }, "original": { @@ -33,11 +33,11 @@ }, "nixpkgsUnstable": { "locked": { - "lastModified": 1648219316, - "narHash": "sha256-Ctij+dOi0ZZIfX5eMhgwugfvB+WZSrvVNAyAuANOsnQ=", + "lastModified": 1651634615, + "narHash": "sha256-VtvcS61bLh5mIBm9cV3idUHdlfPRFus/NwdJfaj5s8o=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "30d3d79b7d3607d56546dd2a6b49e156ba0ec634", + "rev": "abfd31179174133ab8131139d650297bf4da63b7", "type": "github" }, "original": { diff --git a/pkgs/pinned.nix b/pkgs/pinned.nix index 951a70d79..3bb2f0304 100644 --- a/pkgs/pinned.nix +++ b/pkgs/pinned.nix @@ -2,18 +2,18 @@ pkgs: pkgsUnstable: { inherit (pkgs) - bitcoin - bitcoind charge-lnd - clightning extra-container - hwi lndconnect; inherit (pkgsUnstable) + bitcoin + bitcoind btcpayserver + clightning electrs elementsd + hwi lightning-loop lightning-pool lnd diff --git a/test/nixos-search/flake.lock b/test/nixos-search/flake.lock index 20e2c6ece..904dd3bc4 100644 --- a/test/nixos-search/flake.lock +++ b/test/nixos-search/flake.lock @@ -2,11 +2,11 @@ "nodes": { "flake-utils": { "locked": { - "lastModified": 1644229661, - "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", + "lastModified": 1649676176, + "narHash": "sha256-OWKJratjt2RW151VUlJPRALb7OU2S5s+f0vLj4o1bHM=", "owner": "numtide", "repo": "flake-utils", - "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", + "rev": "a4b154ebbdc88c8498a5c7b01589addc9e9cb678", "type": "github" }, "original": { @@ -15,17 +15,34 @@ "type": "github" } }, + "nixos-org-configurations": { + "flake": false, + "locked": { + "lastModified": 1648674978, + "narHash": "sha256-7lVlPb9/Lu3M9xPzwdvtgqkeQI4FAMv+T3v+yT54ZZ0=", + "owner": "NixOS", + "repo": "nixos-org-configurations", + "rev": "76c0687ac275235142dae7c855aab2885302298c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixos-org-configurations", + "type": "github" + } + }, "nixos-search": { "inputs": { "flake-utils": "flake-utils", + "nixos-org-configurations": "nixos-org-configurations", "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1648850703, - "narHash": "sha256-nZeV3sV3UU9NzJPSGrPN8/clecTqx9byQUtTjS7XMXk=", + "lastModified": 1650836881, + "narHash": "sha256-FKsTNQWq8lv6+Qr6LouEukTsJIGEU51H1cWc1PSOtvU=", "owner": "nixos", "repo": "nixos-search", - "rev": "6ba56bc7e96ce83a5d33868b38acb04ebbc688e1", + "rev": "eea6cd3ffb4d3d39956316d6e976b9d5ce52d508", "type": "github" }, "original": { @@ -36,11 +53,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1642903813, - "narHash": "sha256-0lNfGW8sNfyTrixoQhVG00Drl/ECaf5GbfKAQ1ZDoyE=", + "lastModified": 1650701402, + "narHash": "sha256-XKfstdtqDg+O+gNBx1yGVKWIhLgfEDg/e2lvJSsp9vU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "689b76bcf36055afdeb2e9852f5ecdd2bf483f87", + "rev": "bc41b01dd7a9fdffd32d9b03806798797532a5fe", "type": "github" }, "original": { From f234e59ca5e62a24d8eef0c7490d6f6de3e43c18 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Thu, 5 May 2022 20:43:10 +0200 Subject: [PATCH 35/65] nbPython3Packages: fix clightning pkgs Also enable tests for the pyln-* pkgs. --- pkgs/clightning-plugins/default.nix | 5 ++- pkgs/python-packages/coincurve/default.nix | 4 +-- pkgs/python-packages/default.nix | 10 ++++-- pkgs/python-packages/pyln-bolt7/default.nix | 19 ++++------- pkgs/python-packages/pyln-client/default.nix | 19 +++++++++-- pkgs/python-packages/pyln-proto/default.nix | 24 +++++-------- .../specific-versions/base58.nix | 34 ------------------- 7 files changed, 44 insertions(+), 71 deletions(-) delete mode 100644 pkgs/python-packages/specific-versions/base58.nix diff --git a/pkgs/clightning-plugins/default.nix b/pkgs/clightning-plugins/default.nix index eb1d5acb3..bf8443b7a 100644 --- a/pkgs/clightning-plugins/default.nix +++ b/pkgs/clightning-plugins/default.nix @@ -14,7 +14,10 @@ let plugins = with nbPython3Packages; { helpme = { description = "Walks you through setting up a c-lightning node, offering advice for common problems"; }; - monitor = { description = "Helps you analyze the health of your peers and channels"; }; + monitor = { + description = "Helps you analyze the health of your peers and channels"; + extraPkgs = [ packaging ]; + }; prometheus = { description = "Lightning node exporter for the prometheus timeseries server"; extraPkgs = [ prometheus_client ]; diff --git a/pkgs/python-packages/coincurve/default.nix b/pkgs/python-packages/coincurve/default.nix index 042ac67fd..2e5156d4e 100644 --- a/pkgs/python-packages/coincurve/default.nix +++ b/pkgs/python-packages/coincurve/default.nix @@ -3,11 +3,11 @@ autoconf, automake, libtool, libffi, requests }: buildPythonPackage rec { pname = "coincurve"; - version = "15.0.0"; + version = "17.0.0"; src = fetchPypi { inherit pname version; - sha256 = "0ras7qb4ib9sik703fcb9f3jrgq7nx5wvdgx9k1pshmrxl8lnlh6"; + hash = "sha256-aNpVr/iYcClS/aPuBP1u1gu2uR+RnGknB4btdmtUi5M"; }; doCheck = false; diff --git a/pkgs/python-packages/default.nix b/pkgs/python-packages/default.nix index c0a756829..39fdcc0ba 100644 --- a/pkgs/python-packages/default.nix +++ b/pkgs/python-packages/default.nix @@ -4,6 +4,8 @@ let joinmarketPkg = pkg: callPackage pkg { inherit (nbPkgs.joinmarket) version src; }; clightningPkg = pkg: callPackage pkg { inherit (nbPkgs.pinned) clightning; }; + + unstable = (import ../nixpkgs-pinned.nix).nixpkgs-unstable; in { bencoderpyx = callPackage ./bencoderpyx {}; coincurve = callPackage ./coincurve {}; @@ -26,15 +28,17 @@ in { ## Specific versions of packages that already exist in nixpkgs - # base58 2.1.0, required by pyln-proto - base58 = callPackage ./specific-versions/base58.nix {}; - # cryptography 3.3.2, required by joinmarketdaemon # Used in the private python package set for joinmarket (../joinmarket/default.nix) cryptography_3_3_2 = callPackage ./specific-versions/cryptography { cryptography_vectors = callPackage ./specific-versions/cryptography/vectors.nix {}; }; + # cryptography 36.0.0, required by pyln-proto. + cryptography = callPackage "${unstable}/pkgs/development/python-modules/cryptography" { + Security = self.darwin.apple_sdk.frameworks.Security; + }; + # autobahn 20.12.3, required by joinmarketclient autobahn = callPackage ./specific-versions/autobahn.nix {}; diff --git a/pkgs/python-packages/pyln-bolt7/default.nix b/pkgs/python-packages/pyln-bolt7/default.nix index 84cb8552b..16bf920c2 100644 --- a/pkgs/python-packages/pyln-bolt7/default.nix +++ b/pkgs/python-packages/pyln-bolt7/default.nix @@ -1,22 +1,17 @@ -{ buildPythonPackage, clightning, pyln-proto }: +{ buildPythonPackage, poetry-core, pytestCheckHook, clightning, pyln-proto }: buildPythonPackage rec { pname = "pyln-bolt7"; - - # See fn `bolt_meta` in - # https://github.com/ElementsProject/lightning/blob/master/contrib/pyln-spec/bolt7/setup.py - version = "1.0.2.186"; + # The version is defined here: + # https://github.com/ElementsProject/lightning/blob/master/contrib/pyln-spec/bolt7/pyproject.toml + version = "1.0.2.186.post0"; + format = "pyproject"; inherit (clightning) src; + nativeBuildInputs = [ poetry-core ]; propagatedBuildInputs = [ pyln-proto ]; + checkInputs = [ pytestCheckHook ]; postUnpack = "sourceRoot=$sourceRoot/contrib/pyln-spec/bolt7"; - - # TODO-EXTERNAL: - # Remove when this fix is released - # https://github.com/ElementsProject/lightning/pull/4910 - postPatch = '' - sed -i 's|pyln.proto|pyln-proto|' requirements.txt - ''; } diff --git a/pkgs/python-packages/pyln-client/default.nix b/pkgs/python-packages/pyln-client/default.nix index 9ca49f82c..b997ce426 100644 --- a/pkgs/python-packages/pyln-client/default.nix +++ b/pkgs/python-packages/pyln-client/default.nix @@ -1,14 +1,27 @@ -{ buildPythonPackage, clightning, pyln-bolt7, recommonmark, setuptools-scm }: +{ buildPythonPackage, poetry-core, pytestCheckHook, clightning, pyln-bolt7, pyln-proto }: buildPythonPackage rec { pname = "pyln-client"; version = clightning.version; + format = "pyproject"; inherit (clightning) src; - propagatedBuildInputs = [ pyln-bolt7 recommonmark setuptools-scm ]; + nativeBuildInputs = [ poetry-core ]; - SETUPTOOLS_SCM_PRETEND_VERSION = version; + propagatedBuildInputs = [ + pyln-bolt7 + pyln-proto + ]; + + checkInputs = [ pytestCheckHook ]; postUnpack = "sourceRoot=$sourceRoot/contrib/${pname}"; + + # Fix version typo in pyproject.toml + # TODO-EXTERNAL: + # This is already fixed upstream. Remove this after the next clightning release. + postPatch = '' + sed -i 's|pyln-bolt7 = "^1.0.186"|pyln-bolt7 = "^1.0.2.186"|' pyproject.toml + ''; } diff --git a/pkgs/python-packages/pyln-proto/default.nix b/pkgs/python-packages/pyln-proto/default.nix index 80303a20d..29ee61a5d 100644 --- a/pkgs/python-packages/pyln-proto/default.nix +++ b/pkgs/python-packages/pyln-proto/default.nix @@ -1,38 +1,30 @@ -{ buildPythonPackage, clightning +{ buildPythonPackage +, clightning +, poetry-core +, pytestCheckHook , bitstring , cryptography , coincurve , base58 -, mypy -, pycparser -, setuptools-scm }: buildPythonPackage rec { pname = "pyln-proto"; version = clightning.version; + format = "pyproject"; inherit (clightning) src; + nativeBuildInputs = [ poetry-core ]; + propagatedBuildInputs = [ bitstring cryptography coincurve - pycparser base58 - mypy - setuptools-scm ]; - SETUPTOOLS_SCM_PRETEND_VERSION = version; + checkInputs = [ pytestCheckHook ]; postUnpack = "sourceRoot=$sourceRoot/contrib/pyln-proto"; - postPatch = '' - sed -i ' - s|pycparser==2.20|pycparser~=2.20| - s|coincurve ~= 13.0|coincurve == 15.0.0| - s|base58 ~= 2.0.1|base58 == 2.1.0| - s|mypy==0.790|mypy == 0.812| - ' requirements.txt - ''; } diff --git a/pkgs/python-packages/specific-versions/base58.nix b/pkgs/python-packages/specific-versions/base58.nix deleted file mode 100644 index 143768394..000000000 --- a/pkgs/python-packages/specific-versions/base58.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ lib -, buildPythonPackage -, fetchPypi -, pyhamcrest -, pytest-benchmark -, pytestCheckHook -, pythonOlder -}: - -buildPythonPackage rec { - pname = "base58"; - version = "2.1.0"; - disabled = pythonOlder "3.5"; - - src = fetchPypi { - inherit pname version; - sha256 = "sha256-FxpUe0o8YeGuOAciSm967HXjZMQ5XnViZJ1zNXaAAaI="; - }; - - checkInputs = [ - pyhamcrest - pytest-benchmark - pytestCheckHook - ]; - - pythonImportsCheck = [ "base58" ]; - - meta = with lib; { - description = "Base58 and Base58Check implementation"; - homepage = "https://github.com/keis/base58"; - license = licenses.mit; - maintainers = with maintainers; [ nyanloutre ]; - }; -} From c30aa33c15ead7c76768f9180adaed5afe712165 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Sun, 1 May 2022 15:52:30 +0200 Subject: [PATCH 36/65] cl-rest: rename pkg to clightning-rest --- modules/rtl.nix | 2 +- pkgs/{cl-rest => clightning-rest}/composition.nix | 0 pkgs/{cl-rest => clightning-rest}/default.nix | 0 pkgs/{cl-rest => clightning-rest}/generate.sh | 0 pkgs/{cl-rest => clightning-rest}/node-packages.nix | 0 pkgs/{cl-rest => clightning-rest}/pkg.json | 0 pkgs/default.nix | 2 +- 7 files changed, 2 insertions(+), 2 deletions(-) rename pkgs/{cl-rest => clightning-rest}/composition.nix (100%) rename pkgs/{cl-rest => clightning-rest}/default.nix (100%) rename pkgs/{cl-rest => clightning-rest}/generate.sh (100%) rename pkgs/{cl-rest => clightning-rest}/node-packages.nix (100%) rename pkgs/{cl-rest => clightning-rest}/pkg.json (100%) diff --git a/modules/rtl.nix b/modules/rtl.nix index f40a3f765..3257b8b5e 100644 --- a/modules/rtl.nix +++ b/modules/rtl.nix @@ -248,7 +248,7 @@ in { StateDirectory = "cl-rest"; # cl-rest reads the config file from the working directory WorkingDirectory = cl-rest.dataDir; - ExecStart = "${nbPkgs.cl-rest}/bin/cl-rest"; + ExecStart = "${nbPkgs.clightning-rest}/bin/cl-rest"; # Show "cl-rest" instead of "node" in the journal SyslogIdentifier = "cl-rest"; User = cfg.user; diff --git a/pkgs/cl-rest/composition.nix b/pkgs/clightning-rest/composition.nix similarity index 100% rename from pkgs/cl-rest/composition.nix rename to pkgs/clightning-rest/composition.nix diff --git a/pkgs/cl-rest/default.nix b/pkgs/clightning-rest/default.nix similarity index 100% rename from pkgs/cl-rest/default.nix rename to pkgs/clightning-rest/default.nix diff --git a/pkgs/cl-rest/generate.sh b/pkgs/clightning-rest/generate.sh similarity index 100% rename from pkgs/cl-rest/generate.sh rename to pkgs/clightning-rest/generate.sh diff --git a/pkgs/cl-rest/node-packages.nix b/pkgs/clightning-rest/node-packages.nix similarity index 100% rename from pkgs/cl-rest/node-packages.nix rename to pkgs/clightning-rest/node-packages.nix diff --git a/pkgs/cl-rest/pkg.json b/pkgs/clightning-rest/pkg.json similarity index 100% rename from pkgs/cl-rest/pkg.json rename to pkgs/clightning-rest/pkg.json diff --git a/pkgs/default.nix b/pkgs/default.nix index e79149edb..41fd40a84 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -6,7 +6,7 @@ in , pkgsUnstable ? import nixpkgsPinned.nixpkgs-unstable { config = {}; overlays = []; } }: let self = { - cl-rest = pkgs.callPackage ./cl-rest { }; + clightning-rest = pkgs.callPackage ./clightning-rest { }; clboss = pkgs.callPackage ./clboss { }; clightning-plugins = pkgs.recurseIntoAttrs (import ./clightning-plugins pkgs self.nbPython3Packages); joinmarket = pkgs.callPackage ./joinmarket { nbPythonPackageOverrides = import ./python-packages self; }; From acf5fe69ad84df2389359f1358f9663e072cb402 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Thu, 5 May 2022 21:56:16 +0200 Subject: [PATCH 37/65] add standalone `clightning-rest` service - Rename `services.rtl.cl-rest` to `services.clightning-rest`. `clightning-rest` is generally useful for connecting external REST clients to clightning. - Add a dedicated network namespace in netns-isolation. - Add nodeinfo entry. - Add datadir (which contains REST auth data) to backups. --- README.md | 1 + modules/backups.nix | 1 + modules/clightning-rest.nix | 104 +++++++++++++++++++++++++++++++++ modules/modules.nix | 1 + modules/netns-isolation.nix | 17 +++--- modules/nodeinfo.nix | 1 + modules/obsolete-options.nix | 22 ++++++- modules/presets/enable-tor.nix | 1 + modules/rtl.nix | 82 +++----------------------- modules/versioning.nix | 11 ++++ test/tests.nix | 4 ++ test/tests.py | 7 ++- 12 files changed, 166 insertions(+), 86 deletions(-) create mode 100644 modules/clightning-rest.nix diff --git a/README.md b/README.md index a088e5424..6808fb4d2 100644 --- a/README.md +++ b/README.md @@ -73,6 +73,7 @@ NixOS modules ([src](modules/modules.nix)) * [rebalance](https://github.com/lightningd/plugins/tree/master/rebalance): keeps your channels balanced * [summary](https://github.com/lightningd/plugins/tree/master/summary): print a nice summary of the node status * [zmq](https://github.com/lightningd/plugins/tree/master/zmq): publishes notifications via ZeroMQ to configured endpoints + * [clightning-rest](https://github.com/Ride-The-Lightning/c-lightning-REST): REST server for clightning * [lnd](https://github.com/lightningnetwork/lnd) with support for announcing an onion service and [static channel backups](https://github.com/lightningnetwork/lnd/blob/master/docs/recovery.md) * [Lightning Loop](https://github.com/lightninglabs/loop) * [Lightning Pool](https://github.com/lightninglabs/pool) diff --git a/modules/backups.nix b/modules/backups.nix index 21e0b20eb..bf230c405 100644 --- a/modules/backups.nix +++ b/modules/backups.nix @@ -62,6 +62,7 @@ let ''} ${config.services.bitcoind.dataDir} ${config.services.clightning.dataDir} + ${config.services.clightning-rest.dataDir} ${config.services.lnd.dataDir} ${optionalString (!cfg.with-bulk-data) '' - ${config.services.liquidd.dataDir}/*/blocks diff --git a/modules/clightning-rest.nix b/modules/clightning-rest.nix new file mode 100644 index 000000000..c182a3b44 --- /dev/null +++ b/modules/clightning-rest.nix @@ -0,0 +1,104 @@ +{ config, lib, pkgs, ... }: + +with lib; +let + options.services.clightning-rest = { + enable = mkEnableOption "lightning-rest"; + port = mkOption { + type = types.port; + default = 3001; + description = "REST server port."; + }; + docPort = mkOption { + type = types.port; + default = 4001; + description = "Swagger API documentation server port."; + }; + dataDir = mkOption { + type = types.path; + default = "/var/lib/clightning-rest"; + description = "The data directory for clightning-rest."; + }; + extraConfig = mkOption { + type = types.attrs; + default = {}; + example = { + DOMAIN = "mynode.org"; + }; + description = '' + Extra config options. + See: https://github.com/Ride-The-Lightning/c-lightning-REST#option-1-via-config-file-cl-rest-configjson + ''; + }; + # Used by ./rtl.nix + group = mkOption { + readOnly = true; + default = clightning.group; + description = "The group under which clightning-rest is run."; + }; + # Rest server address. + # Not configurable. The server always listens on all interfaces: + # https://github.com/Ride-The-Lightning/c-lightning-REST/issues/84 + # Required by netns-isolation. + address = mkOption { + internal = true; + default = "0.0.0.0"; + }; + tor.enforce = nbLib.tor.enforce; + }; + + cfg = config.services.clightning-rest; + nbLib = config.nix-bitcoin.lib; + nbPkgs = config.nix-bitcoin.pkgs; + + inherit (config.services) + bitcoind + clightning; + + configFile = builtins.toFile "clightning-rest-config" (builtins.toJSON ({ + PORT = cfg.port; + DOCPORT = cfg.docPort; + LNRPCPATH = "${clightning.dataDir}/${bitcoind.makeNetworkName "bitcoin" "regtest"}/lightning-rpc"; + EXECMODE = "production"; + PROTOCOL = "https"; + RPCCOMMANDS = ["*"]; + } // cfg.extraConfig)); +in { + inherit options; + + config = mkIf cfg.enable { + services.clightning.enable = true; + + systemd.tmpfiles.rules = [ + "d '${cfg.dataDir}' 0770 ${clightning.user} ${cfg.group} - -" + ]; + + systemd.services.clightning-rest = mkIf cfg.enable { + wantedBy = [ "multi-user.target" ]; + requires = [ "clightning.service" ]; + after = [ "clightning.service" ]; + path = [ pkgs.openssl ]; + environment.CL_REST_STATE_DIR = cfg.dataDir; + preStart = '' + ln -sfn ${configFile} cl-rest-config.json + ''; + postStart = '' + while [[ ! -e '${cfg.dataDir}/certs/access.macaroon' ]]; do + sleep 0.1 + done + ''; + serviceConfig = nbLib.defaultHardening // { + # clightning-rest reads the config file from the working directory + WorkingDirectory = cfg.dataDir; + ExecStart = "${nbPkgs.clightning-rest}/bin/cl-rest"; + # Show "clightning-rest" instead of "node" in the journal + SyslogIdentifier = "clightning-rest"; + User = clightning.user; + Restart = "on-failure"; + RestartSec = "10s"; + ReadWritePaths = cfg.dataDir; + } // nbLib.allowedIPAddresses cfg.tor.enforce + // nbLib.nodejs; + }; + }; +} diff --git a/modules/modules.nix b/modules/modules.nix index a0512f665..0c5fe77be 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -12,6 +12,7 @@ ./bitcoind.nix ./clightning.nix ./clightning-plugins + ./clightning-rest.nix ./spark-wallet.nix ./lnd.nix ./lnd-rest-onion-service.nix # Requires onion-addresses.nix diff --git a/modules/netns-isolation.nix b/modules/netns-isolation.nix index 47a837c7e..815948185 100644 --- a/modules/netns-isolation.nix +++ b/modules/netns-isolation.nix @@ -283,9 +283,13 @@ in { }; rtl = { id = 29; - connections = [] - ++ optional (config.services.rtl.nodes.lnd) "lnd" - ++ optional config.services.rtl.loop "lightning-loop"; + connections = + optional config.services.rtl.nodes.lnd "lnd" ++ + optional config.services.rtl.loop "lightning-loop" ++ + optional config.services.rtl.nodes.clightning "clightning-rest"; + }; + clightning-rest = { + id = 30; }; }; @@ -341,11 +345,8 @@ in { services.lightning-pool.rpcAddress = netns.lightning-pool.address; services.rtl.address = netns.rtl.address; - systemd.services.cl-rest = mkIf config.services.rtl.cl-rest.enable { - serviceConfig.NetworkNamespacePath = "/var/run/netns/nb-rtl"; - requires = [ "netns-rtl.service" ] ; - after = [ "netns-rtl.service" ]; - }; + + services.clightning-rest.address = netns.clightning-rest.address; } ]); } diff --git a/modules/nodeinfo.nix b/modules/nodeinfo.nix index 1c3d5446a..b6ed8138b 100644 --- a/modules/nodeinfo.nix +++ b/modules/nodeinfo.nix @@ -27,6 +27,7 @@ let lnd = mkInfo '' info["nodeid"] = shell("lncli getinfo | jq -r '.identity_pubkey'") ''; + clightning-rest = mkInfo ""; electrs = mkInfo ""; spark-wallet = mkInfo ""; btcpayserver = mkInfo ""; diff --git a/modules/obsolete-options.nix b/modules/obsolete-options.nix index fc7916475..c503c1c33 100644 --- a/modules/obsolete-options.nix +++ b/modules/obsolete-options.nix @@ -1,4 +1,4 @@ -{ lib, ... }: +{ lib, config, ... }: with lib; let @@ -31,6 +31,8 @@ in { (mkRenamedOptionModule [ "services" "btcpayserver" "bind" ] [ "services" "btcpayserver" "address" ]) (mkRenamedOptionModule [ "services" "liquidd" "bind" ] [ "services" "liquidd" "address" ]) (mkRenamedOptionModule [ "services" "liquidd" "rpcbind" ] [ "services" "liquidd" "rpc" "address" ]) + # 0.0.70 + (mkRenamedOptionModule [ "services" "rtl" "cl-rest" ] [ "services" "clightning-rest" ]) (mkRenamedOptionModule [ "nix-bitcoin" "setup-secrets" ] [ "nix-bitcoin" "setupSecrets" ]) @@ -59,4 +61,22 @@ in { "rtl" "electrs" ]); + + config = { + # Migrate old clightning-rest datadir from nix-bitcoin versions < 0.0.70 + systemd.services.clightning-rest-migrate-datadir = let + inherit (config.services) clightning-rest clightning; + in mkIf config.services.clightning-rest.enable { + requiredBy = [ "clightning-rest.service" ]; + before = [ "clightning-rest.service" ]; + script = '' + if [[ -e /var/lib/cl-rest/certs ]]; then + mv /var/lib/cl-rest/* '${clightning-rest.dataDir}' + chown -R ${clightning.user}: '${clightning-rest.dataDir}' + rm -r /var/lib/cl-rest + fi + ''; + serviceConfig.Type = "oneshot"; + }; + }; } diff --git a/modules/presets/enable-tor.nix b/modules/presets/enable-tor.nix index a63634cb8..2a0ed02df 100644 --- a/modules/presets/enable-tor.nix +++ b/modules/presets/enable-tor.nix @@ -38,6 +38,7 @@ in { rtl = defaultEnforceTor; joinmarket = defaultEnforceTor; joinmarket-ob-watcher = defaultEnforceTor; + clightning-rest = defaultEnforceTor; }; # Add onion services for incoming connections diff --git a/modules/rtl.nix b/modules/rtl.nix index 3257b8b5e..db5257acf 100644 --- a/modules/rtl.nix +++ b/modules/rtl.nix @@ -70,36 +70,6 @@ let default = cfg.user; description = "The group as which to run RTL."; }; - cl-rest = { - enable = mkOption { - readOnly = true; - type = types.bool; - default = cfg.nodes.clightning; - description = '' - Enable c-lightning-REST server. This service is required for - clightning support and is automatically enabled. - ''; - }; - address = mkOption { - readOnly = true; - default = "0.0.0.0"; - description = '' - Rest server address. - Not configurable. The server always listens on all interfaces: - https://github.com/Ride-The-Lightning/c-lightning-REST/issues/84 - ''; - }; - port = mkOption { - type = types.port; - default = 3001; - description = "REST server port."; - }; - docPort = mkOption { - type = types.port; - default = 4001; - description = "Swagger API documentation server port."; - }; - }; tor.enforce = nbLib.tor.enforce; }; @@ -119,7 +89,7 @@ let } "macaroonPath": "${if isLnd then "${cfg.dataDir}/macaroons" - else "${cl-rest.dataDir}/certs" + else "${clightning-rest.dataDir}/certs" }" }, "Settings": { @@ -140,7 +110,7 @@ let "lnServerUrl": "https://${ if isLnd then nbLib.addressWithPort lnd.restAddress lnd.restPort - else nbLib.addressWithPort cfg.cl-rest.address cfg.cl-rest.port + else nbLib.addressWithPort clightning-rest.address clightning-rest.port }" } } @@ -165,25 +135,10 @@ let } ''; - cl-rest = { - configFile = builtins.toFile "config" '' - { - "PORT": ${toString cfg.cl-rest.port}, - "DOCPORT": ${toString cfg.cl-rest.docPort}, - "LNRPCPATH": "${clightning.dataDir}/${bitcoind.makeNetworkName "bitcoin" "regtest"}/lightning-rpc", - "PROTOCOL": "https", - "EXECMODE": "production", - "RPCCOMMANDS": ["*"] - } - ''; - # serviceConfig.StateDirectory - dataDir = "/var/lib/cl-rest"; - }; - inherit (config.services) bitcoind lnd - clightning + clightning-rest lightning-loop; in { inherit options; @@ -199,7 +154,7 @@ in { services.lnd.enable = mkIf cfg.nodes.lnd true; services.lightning-loop.enable = mkIf cfg.loop true; - services.clightning.enable = mkIf cfg.nodes.clightning true; + services.clightning-rest.enable = mkIf cfg.nodes.clightning true; systemd.tmpfiles.rules = [ "d '${cfg.dataDir}' 0770 ${cfg.user} ${cfg.group} - -" @@ -209,7 +164,7 @@ in { systemd.services.rtl = rec { wantedBy = [ "multi-user.target" ]; - requires = optional cfg.nodes.clightning "cl-rest.service" ++ + requires = optional cfg.nodes.clightning "clightning-rest.service" ++ optional cfg.nodes.lnd "lnd.service"; after = requires; environment.RTL_CONFIG_PATH = cfg.dataDir; @@ -235,35 +190,12 @@ in { // nbLib.nodejs; }; - systemd.services.cl-rest = mkIf cfg.cl-rest.enable { - wantedBy = [ "multi-user.target" ]; - requires = [ "clightning.service" ]; - after = [ "clightning.service" ]; - path = [ pkgs.openssl ]; - preStart = '' - ln -sfn ${cl-rest.configFile} cl-rest-config.json - ''; - environment.CL_REST_STATE_DIR = cl-rest.dataDir; - serviceConfig = nbLib.defaultHardening // { - StateDirectory = "cl-rest"; - # cl-rest reads the config file from the working directory - WorkingDirectory = cl-rest.dataDir; - ExecStart = "${nbPkgs.clightning-rest}/bin/cl-rest"; - # Show "cl-rest" instead of "node" in the journal - SyslogIdentifier = "cl-rest"; - User = cfg.user; - Restart = "on-failure"; - RestartSec = "10s"; - } // nbLib.allowLocalIPAddresses - // nbLib.nodejs; - }; - users.users.${cfg.user} = { isSystemUser = true; group = cfg.group; extraGroups = - # Enable clightning RPC access for cl-rest - optional cfg.cl-rest.enable clightning.group ++ + # Reads cert and macaroon from the clightning-rest datadir + optional cfg.nodes.clightning clightning-rest.group ++ optional cfg.loop lnd.group; }; users.groups.${cfg.group} = {}; diff --git a/modules/versioning.nix b/modules/versioning.nix index aa9693fb2..3aab6821f 100644 --- a/modules/versioning.nix +++ b/modules/versioning.nix @@ -213,6 +213,17 @@ let See also: https://github.com/dgarage/NBXplorer/blob/master/docs/Postgres-Migration.md ''; } + { + version = "0.0.70"; + condition = config.services.clightning-rest.enable; + message = '' + The `cl-rest` service has been renamed to `clightning-rest`. + and is now available as a standalone service (`services.clightning-rest`). + Its data dir has moved to `${config.services.clightning-rest.dataDir}`, + and the service now runs under the clightning user and group. + The data dir migration happens automatically after deploying. + ''; + } ]; mkOnionServiceChange = service: { diff --git a/test/tests.nix b/test/tests.nix index 190616fe8..02971604d 100644 --- a/test/tests.nix +++ b/test/tests.nix @@ -59,6 +59,8 @@ let systemd.services.clightning.serviceConfig.TimeoutStopSec = mkIf config.services.clightning.plugins.clboss.enable "500ms"; + tests.clightning-rest = cfg.clightning-rest.enable; + tests.rtl = cfg.rtl.enable; services.rtl.nodes.lnd = mkDefault true; services.rtl.nodes.clightning = mkDefault true; @@ -163,6 +165,7 @@ let test.features.clightningPlugins = true; services.rtl.enable = true; services.spark-wallet.enable = true; + services.clightning-rest.enable = true; services.lnd.enable = true; services.lnd.restOnionService.enable = true; services.lightning-loop.enable = true; @@ -206,6 +209,7 @@ let imports = [ scenarios.regtestBase ]; services.clightning.enable = true; test.features.clightningPlugins = true; + services.clightning-rest.enable = true; services.liquidd.enable = true; services.rtl.enable = true; services.spark-wallet.enable = true; diff --git a/test/tests.py b/test/tests.py index a90bf0390..68fbc34ff 100644 --- a/test/tests.py +++ b/test/tests.py @@ -211,9 +211,12 @@ def _(): machine.wait_until_succeeds( log_has_string("rtl", "Server is up and running") ) - assert_running("cl-rest") + +@test("clightning-rest") +def _(): + assert_running("clightning-rest") machine.wait_until_succeeds( - log_has_string("cl-rest", "cl-rest api server is ready and listening on port: 3001") + log_has_string("clightning-rest", "cl-rest api server is ready and listening on port: 3001") ) @test("spark-wallet") From e2fee4bf1af66b70ab4a3d279b5eb0a2f7e6a85f Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Thu, 5 May 2022 21:56:17 +0200 Subject: [PATCH 38/65] lnd-rest-onion-service.nix: move to lndconnect-onion.nix, add clightning support Option `services.lnd.restOnionService.package` has been removed. There's not much use in overriding the [lndconnect pkg](https://github.com/LN-Zap/lndconnect). --- README.md | 2 +- examples/configuration.nix | 19 ++++- modules/lnd-rest-onion-service.nix | 54 ------------- modules/lndconnect-onion.nix | 124 +++++++++++++++++++++++++++++ modules/modules.nix | 2 +- modules/obsolete-options.nix | 1 + modules/versioning.nix | 7 ++ test/tests.nix | 6 +- test/tests.py | 10 ++- 9 files changed, 161 insertions(+), 64 deletions(-) delete mode 100644 modules/lnd-rest-onion-service.nix create mode 100644 modules/lndconnect-onion.nix diff --git a/README.md b/README.md index 6808fb4d2..bcbc6c65c 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ NixOS modules ([src](modules/modules.nix)) * [Lightning Loop](https://github.com/lightninglabs/loop) * [Lightning Pool](https://github.com/lightninglabs/pool) * [charge-lnd](https://github.com/accumulator/charge-lnd): policy-based channel fee manager - * [lndconnect](https://github.com/LN-Zap/lndconnect) via a REST onion service + * [lndconnect](https://github.com/LN-Zap/lndconnect): connect your wallet to lnd or clightning via a REST onion service * [Ride The Lightning](https://github.com/Ride-The-Lightning/RTL): web interface for `lnd` and `clightning` * [spark-wallet](https://github.com/shesek/spark-wallet) * [electrs](https://github.com/romanz/electrs) diff --git a/examples/configuration.nix b/examples/configuration.nix index 93b9f1411..bc1c990c8 100644 --- a/examples/configuration.nix +++ b/examples/configuration.nix @@ -53,6 +53,17 @@ # == Plugins # See ../README.md (Features → clightning) for the list of available plugins. # services.clightning.plugins.prometheus.enable = true; + # + # == REST server + # Set this to create a clightning REST onion service. + # This also adds binary `lndconnect-onion-clightning` to the system environment. + # This binary creates QR codes or URLs for connecting applications to clightning + # via the REST onion service (see ../docs/services.md). + # + # services.clightning-rest = { + # enable = true; + # lndconnectOnion.enable = true; + # }; ### LND # Set this to enable lnd, a lightning implementation written in Go. @@ -68,10 +79,10 @@ # nix-bitcoin.onionServices.lnd.public = true; # # Set this to create an lnd REST onion service. - # Adds binary `lndconnect-rest-onion` to the system environment. - # This binary generates QR codes or URIs for connecting applications to lnd via the - # REST onion service. - # services.lnd.restOnionService.enable = true; + # This also adds binary `lndconnect-onion` to the system environment. + # This binary generates QR codes or URLs for connecting applications to lnd via the + # REST onion service (see ../docs/services.md). + # services.lnd.lndconnectOnion.enable = true; # ## WARNING # If you use lnd, you should manually backup your wallet mnemonic diff --git a/modules/lnd-rest-onion-service.nix b/modules/lnd-rest-onion-service.nix deleted file mode 100644 index f2c94d564..000000000 --- a/modules/lnd-rest-onion-service.nix +++ /dev/null @@ -1,54 +0,0 @@ -{ config, lib, pkgs, ... }: - -with lib; -let - options.services.lnd.restOnionService = { - enable = mkOption { - default = false; - type = types.bool; - description = '' - Create an onion service for the lnd REST service. - Add a `lndconnect-rest-onion` binary (https://github.com/LN-Zap/lndconnect) to the system environment. - This binary generates QR codes or URIs for connecting applications to lnd via the REST onion service. - ''; - }; - package = mkOption { - type = types.package; - default = config.nix-bitcoin.pkgs.lndconnect; - defaultText = "config.nix-bitcoin.pkgs.lndconnect"; - description = "The package providing lndconnect binaries."; - }; - }; - - cfg = config.services.lnd.restOnionService; - nbLib = config.nix-bitcoin.lib; - runAsUser = config.nix-bitcoin.runAsUserCmd; - - lnd = config.services.lnd; - - bin = pkgs.writeScriptBin "lndconnect-rest-onion" '' - #!/usr/bin/env -S ${runAsUser} ${lnd.user} ${pkgs.bash}/bin/bash - - exec ${cfg.package}/bin/lndconnect \ - --host=$(cat ${config.nix-bitcoin.onionAddresses.dataDir}/lnd/lnd-rest) \ - --port=${toString lnd.restPort} \ - --lnddir=${lnd.dataDir} \ - --tlscertpath=${lnd.certPath} "$@" - ''; -in { - inherit options; - - config = mkIf cfg.enable { - services.tor = { - enable = true; - relay.onionServices.lnd-rest = nbLib.mkOnionService { - target.addr = nbLib.address lnd.restAddress; - target.port = lnd.restPort; - port = lnd.restPort; - }; - }; - nix-bitcoin.onionAddresses.access.lnd = [ "lnd-rest" ]; - - environment.systemPackages = [ bin ]; - }; -} diff --git a/modules/lndconnect-onion.nix b/modules/lndconnect-onion.nix new file mode 100644 index 000000000..740d4b273 --- /dev/null +++ b/modules/lndconnect-onion.nix @@ -0,0 +1,124 @@ +{ config, lib, pkgs, ... }: + +with lib; +let + options = { + services.lnd.lndconnectOnion.enable = mkOption { + type = types.bool; + default = false; + description = '' + Create an onion service for the lnd REST server. + Add a `lndconnect-onion` binary to the system environment. + See: https://github.com/LN-Zap/lndconnect + + Usage: + ``` + # Print QR code + lndconnect-onion + + # Print URL + lndconnect-onion --url + ``` + ''; + }; + + services.clightning-rest.lndconnectOnion.enable = mkOption { + type = types.bool; + default = false; + description = '' + Create an onion service for clightning-rest. + Add a `lndconnect-onion-clightning` binary to the system environment. + See: https://github.com/LN-Zap/lndconnect + + Usage: + ``` + # Print QR code + lndconnect-onion-clightning + + # Print URL + lndconnect-onion-clightning --url + ``` + ''; + }; + }; + + nbLib = config.nix-bitcoin.lib; + runAsUser = config.nix-bitcoin.runAsUserCmd; + + inherit (config.services) + lnd + clightning + clightning-rest; + + mkLndconnect = { + name, + shebang ? "#!${pkgs.stdenv.shell} -e", + onionService, + port, + certPath, + macaroonPath + }: + # TODO-EXTERNAL: + # lndconnect requires a --configfile argument, although it's unused + # https://github.com/LN-Zap/lndconnect/issues/25 + pkgs.writeScriptBin name '' + ${shebang} + exec ${config.nix-bitcoin.pkgs.lndconnect}/bin/lndconnect \ + --host=$(cat ${config.nix-bitcoin.onionAddresses.dataDir}/${onionService}) \ + --port=${toString port} \ + --tlscertpath='${certPath}' \ + --adminmacaroonpath='${macaroonPath}' \ + --configfile=/dev/null "$@" + ''; +in { + inherit options; + + config = mkMerge [ + (mkIf (lnd.enable && lnd.lndconnectOnion.enable) { + services.tor = { + enable = true; + relay.onionServices.lnd-rest = nbLib.mkOnionService { + target.addr = nbLib.address lnd.restAddress; + target.port = lnd.restPort; + port = lnd.restPort; + }; + }; + nix-bitcoin.onionAddresses.access.${lnd.user} = [ "lnd-rest" ]; + + environment.systemPackages = [( + mkLndconnect { + name = "lndconnect-onion"; + # Run as lnd user because the macaroon and cert are not group-readable + shebang = "#!/usr/bin/env -S ${runAsUser} ${lnd.user} ${pkgs.bash}/bin/bash"; + onionService = "${lnd.user}/lnd-rest"; + port = lnd.restPort; + certPath = lnd.certPath; + macaroonPath = "${lnd.networkDir}/admin.macaroon"; + } + )]; + }) + + (mkIf (clightning-rest.enable && clightning-rest.lndconnectOnion.enable) { + services.tor = { + enable = true; + relay.onionServices.clightning-rest = nbLib.mkOnionService { + target.addr = nbLib.address clightning-rest.address; + target.port = clightning-rest.port; + port = clightning-rest.port; + }; + }; + # This also allows nodeinfo to show the clightning-rest onion address + nix-bitcoin.onionAddresses.access.operator = [ "clightning-rest" ]; + + environment.systemPackages = [( + mkLndconnect { + name = "lndconnect-onion-clightning"; + onionService = "operator/clightning-rest"; + port = clightning-rest.port; + certPath = "${clightning-rest.dataDir}/certs/certificate.pem"; + macaroonPath = "${clightning-rest.dataDir}/certs/access.macaroon"; + } + )]; + }) + ]; +} diff --git a/modules/modules.nix b/modules/modules.nix index 0c5fe77be..bf0dbab64 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -15,10 +15,10 @@ ./clightning-rest.nix ./spark-wallet.nix ./lnd.nix - ./lnd-rest-onion-service.nix # Requires onion-addresses.nix ./lightning-loop.nix ./lightning-pool.nix ./charge-lnd.nix + ./lndconnect-onion.nix # Requires onion-addresses.nix ./rtl.nix ./electrs.nix ./liquid.nix diff --git a/modules/obsolete-options.nix b/modules/obsolete-options.nix index c503c1c33..e07bf309a 100644 --- a/modules/obsolete-options.nix +++ b/modules/obsolete-options.nix @@ -33,6 +33,7 @@ in { (mkRenamedOptionModule [ "services" "liquidd" "rpcbind" ] [ "services" "liquidd" "rpc" "address" ]) # 0.0.70 (mkRenamedOptionModule [ "services" "rtl" "cl-rest" ] [ "services" "clightning-rest" ]) + (mkRenamedOptionModule [ "services" "lnd" "restOnionService" "enable" ] [ "services" "lnd" "lndconnectOnion" "enable" ]) (mkRenamedOptionModule [ "nix-bitcoin" "setup-secrets" ] [ "nix-bitcoin" "setupSecrets" ]) diff --git a/modules/versioning.nix b/modules/versioning.nix index 3aab6821f..ad3bf7d7a 100644 --- a/modules/versioning.nix +++ b/modules/versioning.nix @@ -224,6 +224,13 @@ let The data dir migration happens automatically after deploying. ''; } + { + version = "0.0.70"; + condition = config.services.lnd.lndconnectOnion.enable; + message = '' + The `lndconnect-rest-onion` binary has been renamed to `lndconnect-onion`. + ''; + } ]; mkOnionServiceChange = service: { diff --git a/test/tests.nix b/test/tests.nix index 02971604d..dceb56db7 100644 --- a/test/tests.nix +++ b/test/tests.nix @@ -76,7 +76,8 @@ let tests.lnd = cfg.lnd.enable; services.lnd.port = 9736; - tests.lnd-rest-onion-service = cfg.lnd.restOnionService.enable; + tests.lndconnect-onion-lnd = cfg.lnd.lndconnectOnion.enable; + tests.lndconnect-onion-clightning = cfg.clightning-rest.lndconnectOnion.enable; tests.lightning-loop = cfg.lightning-loop.enable; @@ -166,8 +167,9 @@ let services.rtl.enable = true; services.spark-wallet.enable = true; services.clightning-rest.enable = true; + services.clightning-rest.lndconnectOnion.enable = true; services.lnd.enable = true; - services.lnd.restOnionService.enable = true; + services.lnd.lndconnectOnion.enable = true; services.lightning-loop.enable = true; services.lightning-pool.enable = true; services.charge-lnd.enable = true; diff --git a/test/tests.py b/test/tests.py index 68fbc34ff..3f56bb06a 100644 --- a/test/tests.py +++ b/test/tests.py @@ -148,9 +148,15 @@ def _(): assert_matches("runuser -u operator -- lncli getinfo | jq", '"version"') assert_no_failure("lnd") -@test("lnd-rest-onion-service") +@test("lndconnect-onion-lnd") def _(): - assert_matches("runuser -u operator -- lndconnect-rest-onion -j", ".onion") + assert_running("lnd") + assert_matches("runuser -u operator -- lndconnect-onion --url", ".onion") + +@test("lndconnect-onion-clightning") +def _(): + assert_running("clightning-rest") + assert_matches("runuser -u operator -- lndconnect-onion-clightning --url", ".onion") @test("lightning-loop") def _(): From 20c0194ade3910a65cb0087bfff89eb0684421d6 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Thu, 5 May 2022 21:56:18 +0200 Subject: [PATCH 39/65] readme: add hint about github table of contents button --- README.md | 3 +++ docs/img/github-table-of-contents.svg | 3 +++ 2 files changed, 6 insertions(+) create mode 100755 docs/img/github-table-of-contents.svg diff --git a/README.md b/README.md index bcbc6c65c..78847df66 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,9 @@ Get started Docs --- +Hint: To show a table of contents, click the button (![Github TOC button](docs/img/github-table-of-contents.svg)) in the +top left corner of the documents. + * [Hardware requirements](docs/hardware.md) * [Installation](docs/install.md) * [Configuration and maintenance](docs/configuration.md) diff --git a/docs/img/github-table-of-contents.svg b/docs/img/github-table-of-contents.svg new file mode 100755 index 000000000..617e38557 --- /dev/null +++ b/docs/img/github-table-of-contents.svg @@ -0,0 +1,3 @@ + + + From 8e1ad6e3a85a8b534b0a03fd7760cf62cde0f205 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Thu, 5 May 2022 21:56:19 +0200 Subject: [PATCH 40/65] docs/services: update Zeus usage section, add clightning The current Zeus version has native tor support, so Orbot is no longer required. --- docs/services.md | 91 +++++++++++++++++++++++++++++------------------- 1 file changed, 55 insertions(+), 36 deletions(-) diff --git a/docs/services.md b/docs/services.md index 28935d612..c2ceda6ab 100644 --- a/docs/services.md +++ b/docs/services.md @@ -44,6 +44,61 @@ You can find the `` with command `nodeinfo`. The default password location is `$secretsDir/rtl-password`. See: [Secrets dir](./configuration.md#secrets-dir) +# Use LND or clightning with Zeus (smartphone wallet) via Tor +1. Install [Zeus](https://zeusln.app) + +2. Edit your `configuration.nix` + + ##### For lnd + + Add the following config: + ``` + services.lnd.lndconnectOnion.enable = true; + ``` + + ##### For clightning + + Add the following config: + ``` + services.clightning-rest = { + enable = true; + lndconnectOnion.enable = true; + }; + ``` + +3. Deploy your configuration + +3. Run the following command on your node (as user `operator`) to create a QR code + with address and authentication information: + + ##### For lnd + ``` + lndconnect-onion + ``` + + ##### For clightning + ``` + lndconnect-onion-clightning + ``` + +4. Configure Zeus + - Add a new node + - Select `Scan lndconnect config` (at the bottom) and scan the QR code + - For clightning: Set `Node interface` to `c-lightning-REST` + - Click `Save node config` + - Start sending sats privately + +### Additional lndconnect features +Create plain text URLs or QR code images: +``` +lndconnect-onion --url +lndconnect-onion --image +`````` +Create a QR code for a custom hostname: +``` +lndconnect-onion --host=mynode.org +``` + # Connect to spark-wallet ### Requirements * Android phone @@ -87,42 +142,6 @@ See: [Secrets dir](./configuration.md#secrets-dir) Done ``` -# Connect to LND with Zeus -### Requirements -* Android phone -* [Orbot](https://guardianproject.info/apps/orbot/) installed from - [F-Droid](https://guardianproject.info/fdroid) (recommended) or - [Google Play](https://play.google.com/store/apps/details?id=org.torproject.android&hl=en) -* [Zeus](https://zeusln.app/) installed from - [F-Droid](https://f-droid.org/en/packages/app.zeusln.zeus/) (recommended) or - [Google Play](https://play.google.com/store/apps/details?id=app.zeusln.zeus) - -1. Enable `restOnionService` in `configuration.nix` - - Change - ``` - # services.lnd.restOnionService.enable = true; - ``` - to - ``` - services.lnd.restOnionService.enable = true; - ``` - -2. Deploy new `configuration.nix` - -3. Run command `lndconnect-rest-onion` (under `operator` user) to create a QR code for - connecting to LND via the REST onion service. - -4. Enable Orbot VPN for Zeus - ``` - Open Orbot app - Turn on "VPN Mode" - Select Gear icon under "Tor-Enabled Apps" - Toggle checkbox under Zeus icon - ``` - -5. Scan the QR code with your Zeus wallet and start sending Satoshis privately - # Connect to electrs ### Requirements Android * Android phone From 4b800605e0f99b31d82ea01777acde99e509d489 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Fri, 6 May 2022 16:45:00 +0200 Subject: [PATCH 41/65] add `release` branch Use this as the default in the example flake. --- examples/flakes/flake.nix | 2 +- helper/push-release.sh | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/examples/flakes/flake.nix b/examples/flakes/flake.nix index 6e030a88b..c2392fd8a 100644 --- a/examples/flakes/flake.nix +++ b/examples/flakes/flake.nix @@ -1,7 +1,7 @@ { description = "A basic nix-bitcoin node"; - inputs.nix-bitcoin.url = "github:fort-nix/nix-bitcoin"; + inputs.nix-bitcoin.url = "github:fort-nix/nix-bitcoin/release"; outputs = { self, nix-bitcoin }: { diff --git a/helper/push-release.sh b/helper/push-release.sh index cbf93a9d0..2648706d7 100755 --- a/helper/push-release.sh +++ b/helper/push-release.sh @@ -3,6 +3,7 @@ set -euo pipefail REPO=fort-nix/nix-bitcoin BRANCH=master +GIT_REMOTE=origin OAUTH_TOKEN= DRY_RUN= TAG_NAME= @@ -88,4 +89,7 @@ post_asset nar-hash.txt.asc post_asset $ARCHIVE post_asset $SHA256SUMS post_asset $SHA256SUMS.asc + +git push $GIT_REMOTE $BRANCH:release + echo "Successfully created" $(echo $POST_DATA | jq -r .tag_name) From e6bb281a8893671a1898ea01dc382fa98e3e9e70 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Sat, 7 May 2022 20:34:21 +0200 Subject: [PATCH 42/65] services: set systemd list options as list values This makes our list definitions mergeable with custom list values set by users. Previously, a module error ("value is a string while a list was expected") was thrown instead. This commit was partly auto-generated with this script: #!/usr/bin/env ruby Dir["**/*.nix"].each do |file| src = File.read(file) fixed = src.gsub(/ReadWritePaths *= *(.*?);/) do "ReadWritePaths = [ #{$1} ];" end File.write(file, fixed) if fixed != src end --- modules/bitcoind.nix | 4 ++-- modules/btcpayserver.nix | 4 ++-- modules/clightning-rest.nix | 2 +- modules/clightning.nix | 2 +- modules/electrs.nix | 2 +- modules/joinmarket.nix | 4 ++-- modules/lightning-loop.nix | 2 +- modules/lightning-pool.nix | 2 +- modules/liquid.nix | 2 +- modules/lnd.nix | 2 +- modules/rtl.nix | 2 +- pkgs/lib.nix | 6 +++++- 12 files changed, 19 insertions(+), 15 deletions(-) diff --git a/modules/bitcoind.nix b/modules/bitcoind.nix index bf59a8043..51e5265a3 100644 --- a/modules/bitcoind.nix +++ b/modules/bitcoind.nix @@ -423,7 +423,7 @@ in { ExecStart = "${cfg.package}/bin/bitcoind -datadir='${cfg.dataDir}'"; Restart = "on-failure"; UMask = mkIf cfg.dataDirReadableByGroup "0027"; - ReadWritePaths = cfg.dataDir; + ReadWritePaths = [ cfg.dataDir ]; } // nbLib.allowedIPAddresses cfg.tor.enforce // optionalAttrs zmqServerEnabled nbLib.allowNetlink; }; @@ -449,7 +449,7 @@ in { serviceConfig = nbLib.defaultHardening // { User = cfg.user; Group = cfg.group; - ReadWritePaths = cfg.dataDir; + ReadWritePaths = [ cfg.dataDir ]; } // nbLib.allowLocalIPAddresses; }; diff --git a/modules/btcpayserver.nix b/modules/btcpayserver.nix index 8f5f92a49..49cc8c109 100644 --- a/modules/btcpayserver.nix +++ b/modules/btcpayserver.nix @@ -192,7 +192,7 @@ in { User = cfg.nbxplorer.user; Restart = "on-failure"; RestartSec = "10s"; - ReadWritePaths = cfg.nbxplorer.dataDir; + ReadWritePaths = [ cfg.nbxplorer.dataDir ]; MemoryDenyWriteExecute = "false"; } // nbLib.allowedIPAddresses cfg.nbxplorer.tor.enforce; }; @@ -245,7 +245,7 @@ in { User = cfg.btcpayserver.user; Restart = "on-failure"; RestartSec = "10s"; - ReadWritePaths = cfg.btcpayserver.dataDir; + ReadWritePaths = [ cfg.btcpayserver.dataDir ]; MemoryDenyWriteExecute = "false"; } // nbLib.allowedIPAddresses cfg.btcpayserver.tor.enforce; }; in self; diff --git a/modules/clightning-rest.nix b/modules/clightning-rest.nix index c182a3b44..5ca51cf9c 100644 --- a/modules/clightning-rest.nix +++ b/modules/clightning-rest.nix @@ -96,7 +96,7 @@ in { User = clightning.user; Restart = "on-failure"; RestartSec = "10s"; - ReadWritePaths = cfg.dataDir; + ReadWritePaths = [ cfg.dataDir ]; } // nbLib.allowedIPAddresses cfg.tor.enforce // nbLib.nodejs; }; diff --git a/modules/clightning.nix b/modules/clightning.nix index e1c6569c9..32ea647be 100644 --- a/modules/clightning.nix +++ b/modules/clightning.nix @@ -148,7 +148,7 @@ in { User = cfg.user; Restart = "on-failure"; RestartSec = "10s"; - ReadWritePaths = cfg.dataDir; + ReadWritePaths = [ cfg.dataDir ]; } // nbLib.allowedIPAddresses cfg.tor.enforce; # Wait until the rpc socket appears postStart = '' diff --git a/modules/electrs.nix b/modules/electrs.nix index 32e29b046..afe85be24 100644 --- a/modules/electrs.nix +++ b/modules/electrs.nix @@ -92,7 +92,7 @@ in { Group = cfg.group; Restart = "on-failure"; RestartSec = "10s"; - ReadWritePaths = cfg.dataDir; + ReadWritePaths = [ cfg.dataDir ]; } // nbLib.allowedIPAddresses cfg.tor.enforce; }; diff --git a/modules/joinmarket.nix b/modules/joinmarket.nix index 6a35abaa4..d7c4a0c97 100644 --- a/modules/joinmarket.nix +++ b/modules/joinmarket.nix @@ -328,7 +328,7 @@ in { User = cfg.user; Restart = "on-failure"; RestartSec = "10s"; - ReadWritePaths = cfg.dataDir; + ReadWritePaths = [ cfg.dataDir ]; } // nbLib.allowedIPAddresses cfg.tor.enforce; }; @@ -368,7 +368,7 @@ in { # because it provides the wallet password via stdin to the main process SyslogIdentifier = "joinmarket-yieldgenerator"; User = cfg.user; - ReadWritePaths = cfg.dataDir; + ReadWritePaths = [ cfg.dataDir ]; } // nbLib.allowTor; }; }) diff --git a/modules/lightning-loop.nix b/modules/lightning-loop.nix index 614d39f59..00da742ab 100644 --- a/modules/lightning-loop.nix +++ b/modules/lightning-loop.nix @@ -106,7 +106,7 @@ in { User = lnd.user; Restart = "on-failure"; RestartSec = "10s"; - ReadWritePaths = cfg.dataDir; + ReadWritePaths = [ cfg.dataDir ]; } // nbLib.allowedIPAddresses cfg.tor.enforce; }; diff --git a/modules/lightning-pool.nix b/modules/lightning-pool.nix index d60ea3c67..240c283c7 100644 --- a/modules/lightning-pool.nix +++ b/modules/lightning-pool.nix @@ -103,7 +103,7 @@ in { User = "lnd"; Restart = "on-failure"; RestartSec = "10s"; - ReadWritePaths = cfg.dataDir; + ReadWritePaths = [ cfg.dataDir ]; } // (nbLib.allowedIPAddresses cfg.tor.enforce) // nbLib.allowNetlink; # required by gRPC-Go }; diff --git a/modules/liquid.nix b/modules/liquid.nix index f884e855a..ee3ff2288 100644 --- a/modules/liquid.nix +++ b/modules/liquid.nix @@ -274,7 +274,7 @@ in { TimeoutStopSec = "10min"; ExecStart = "${nbPkgs.elementsd}/bin/elementsd -datadir='${cfg.dataDir}'"; Restart = "on-failure"; - ReadWritePaths = cfg.dataDir; + ReadWritePaths = [ cfg.dataDir ]; } // nbLib.allowedIPAddresses cfg.tor.enforce; }; diff --git a/modules/lnd.nix b/modules/lnd.nix index da44192da..8f0fe3a5a 100644 --- a/modules/lnd.nix +++ b/modules/lnd.nix @@ -232,7 +232,7 @@ in { TimeoutSec = "15min"; Restart = "on-failure"; RestartSec = "10s"; - ReadWritePaths = cfg.dataDir; + ReadWritePaths = [ cfg.dataDir ]; ExecStartPost = let curl = "${pkgs.curl}/bin/curl -s --show-error --cacert ${cfg.certPath}"; restUrl = "https://${nbLib.addressWithPort cfg.restAddress cfg.restPort}/v1"; diff --git a/modules/rtl.nix b/modules/rtl.nix index db5257acf..8dbab0caa 100644 --- a/modules/rtl.nix +++ b/modules/rtl.nix @@ -185,7 +185,7 @@ in { User = cfg.user; Restart = "on-failure"; RestartSec = "10s"; - ReadWritePaths = cfg.dataDir; + ReadWritePaths = [ cfg.dataDir ]; } // nbLib.allowedIPAddresses cfg.tor.enforce // nbLib.nodejs; }; diff --git a/pkgs/lib.nix b/pkgs/lib.nix index 6919ae622..6b058fdef 100644 --- a/pkgs/lib.nix +++ b/pkgs/lib.nix @@ -46,7 +46,11 @@ let self = { # Allow takes precedence over Deny. allowLocalIPAddresses = { - IPAddressAllow = "127.0.0.1/32 ::1/128 169.254.0.0/16"; + IPAddressAllow = [ + "127.0.0.1/32" + "::1/128" + "169.254.0.0/16" + ]; }; allowAllIPAddresses = { IPAddressAllow = "any"; }; allowTor = self.allowLocalIPAddresses; From 472bcf1565a7d8558b8dacfd4ee78a19112c8a60 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Wed, 11 May 2022 10:01:12 +0200 Subject: [PATCH 43/65] pkgs-unstable: inherit system from stable pkgs Previously, `builtins.defaultSystem` was implicitly used. This fixes NixOS system builds for systems other than `defaultSystem`. --- pkgs/default.nix | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkgs/default.nix b/pkgs/default.nix index 41fd40a84..9c7ee4a78 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -3,7 +3,11 @@ let in # Set default values for use without flakes { pkgs ? import { config = {}; overlays = []; } -, pkgsUnstable ? import nixpkgsPinned.nixpkgs-unstable { config = {}; overlays = []; } +, pkgsUnstable ? import nixpkgsPinned.nixpkgs-unstable { + inherit (pkgs) system; + config = {}; + overlays = []; + } }: let self = { clightning-rest = pkgs.callPackage ./clightning-rest { }; From 4c2d908a38539b0fe2bfc7520fbec0afe588c267 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Sat, 14 May 2022 15:21:34 +0200 Subject: [PATCH 44/65] rtl: 0.12.2-beta -> 0.12.3-beta --- pkgs/rtl/generate.sh | 2 +- pkgs/rtl/node-packages.nix | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pkgs/rtl/generate.sh b/pkgs/rtl/generate.sh index 239a5a893..0ffbd1a09 100755 --- a/pkgs/rtl/generate.sh +++ b/pkgs/rtl/generate.sh @@ -5,7 +5,7 @@ set -euo pipefail TMPDIR="$(mktemp -d -p /tmp)" trap "rm -rf $TMPDIR" EXIT -version="0.12.2" +version="0.12.3" repo=https://github.com/Ride-The-Lightning/RTL # Fetch and verify source tarball diff --git a/pkgs/rtl/node-packages.nix b/pkgs/rtl/node-packages.nix index f58dce7dc..9ee401762 100644 --- a/pkgs/rtl/node-packages.nix +++ b/pkgs/rtl/node-packages.nix @@ -2389,13 +2389,13 @@ let sha512 = "6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A=="; }; }; - "minimist-1.2.5" = { + "minimist-1.2.6" = { name = "minimist"; packageName = "minimist"; - version = "1.2.5"; + version = "1.2.6"; src = fetchurl { - url = "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz"; - sha512 = "FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="; + url = "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz"; + sha512 = "Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="; }; }; "ms-2.0.0" = { @@ -3590,10 +3590,10 @@ let args = { name = "rtl"; packageName = "rtl"; - version = "0.12.2-beta"; + version = "0.12.3-beta"; src = fetchurl { - url = "https://github.com/Ride-The-Lightning/RTL/archive/refs/tags/v0.12.2.tar.gz"; - hash = "sha256-xvW6zq/mBsuRy8AwoAPJ2RR7iqhKrC57SVWyFTjq6aw="; + url = "https://github.com/Ride-The-Lightning/RTL/archive/refs/tags/v0.12.3.tar.gz"; + hash = "sha256-2X5Bf9rniiN/NNEqnNJYF/YQ0v+EwnwQHB5VXVfS9to="; }; dependencies = [ sources."@angular/animations-13.0.3" @@ -3943,7 +3943,7 @@ let sources."methods-1.1.2" sources."mime-db-1.51.0" sources."mime-types-2.1.34" - sources."minimist-1.2.5" + sources."minimist-1.2.6" sources."ms-2.1.2" sources."negotiator-0.6.2" sources."next-tick-1.0.0" From beae9f8df7dd727d05be98311d03c84689679611 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Sat, 14 May 2022 15:21:35 +0200 Subject: [PATCH 45/65] clightning-rest: 0.7.0 -> 0.7.2 --- pkgs/clightning-rest/generate.sh | 2 +- pkgs/clightning-rest/node-packages.nix | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pkgs/clightning-rest/generate.sh b/pkgs/clightning-rest/generate.sh index 8d58c7518..4537f44a8 100755 --- a/pkgs/clightning-rest/generate.sh +++ b/pkgs/clightning-rest/generate.sh @@ -5,7 +5,7 @@ set -euo pipefail TMPDIR="$(mktemp -d -p /tmp)" trap "rm -rf $TMPDIR" EXIT -version="0.7.0" +version="0.7.2" repo=https://github.com/Ride-The-Lightning/c-lightning-REST # Fetch and verify source tarball diff --git a/pkgs/clightning-rest/node-packages.nix b/pkgs/clightning-rest/node-packages.nix index 023911182..09bb36ccc 100644 --- a/pkgs/clightning-rest/node-packages.nix +++ b/pkgs/clightning-rest/node-packages.nix @@ -175,13 +175,13 @@ let sha1 = "1b681c21ff84033c826543090689420d187151dc"; }; }; - "clightningjs-0.1.1" = { + "clightningjs-0.2.2" = { name = "clightningjs"; packageName = "clightningjs"; - version = "0.1.1"; + version = "0.2.2"; src = fetchurl { - url = "https://registry.npmjs.org/clightningjs/-/clightningjs-0.1.1.tgz"; - sha512 = "r/poNODgYDJQZVU1X3lMirDCOD2Bw9XyPdjRXcOXAnHtSihf4OnO1c7iB82ots+2aExQnKuBk9JOE3QwY6FHOw=="; + url = "https://registry.npmjs.org/clightningjs/-/clightningjs-0.2.2.tgz"; + sha512 = "9fdWYNxe/IUe0uG0b1XdxWGlev1IPlWZpN6Hrsr3uTOZe1kSR+ySBMzdsgD73Rc3LeX7DfdKhT3uuT8B77HIqg=="; }; }; "combined-stream-1.0.8" = { @@ -1277,10 +1277,10 @@ let args = { name = "c-lightning-rest"; packageName = "c-lightning-rest"; - version = "0.7.0"; + version = "0.7.2"; src = fetchurl { - url = "https://github.com/Ride-The-Lightning/c-lightning-REST/archive/refs/tags/v0.7.0.tar.gz"; - hash = "sha256-NeeG4WyXWPZv5u5HuMwVhIgDgHStgah3YNtk4bKvNoY="; + url = "https://github.com/Ride-The-Lightning/c-lightning-REST/archive/refs/tags/v0.7.2.tar.gz"; + hash = "sha256-G3PWoOW69B+so7sDiAcZNgaAWtmp/H5U9I6vh5YeUEQ="; }; dependencies = [ sources."accepts-1.3.7" @@ -1300,7 +1300,7 @@ let sources."bytes-3.1.0" sources."call-me-maybe-1.0.1" sources."caseless-0.12.0" - sources."clightningjs-0.1.1" + sources."clightningjs-0.2.2" sources."combined-stream-1.0.8" sources."commander-2.20.0" sources."concat-map-0.0.1" From ff228a604d6265f7ecc4eea1b8e468b502647861 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Sat, 14 May 2022 15:21:36 +0200 Subject: [PATCH 46/65] rtl: change `nodes` options - Move option `rtl.nodes.{lnd,clightning}` -> `rtl.nodes.{lnd,clightning}.enable` This is required by the next commit. - Move option `rtl.loop` -> `rtl.nodes.lnd.loop` - Only enable loop when `nodes.lnd` is enabled --- examples/configuration.nix | 6 ++-- modules/netns-isolation.nix | 10 ++++--- modules/rtl.nix | 60 ++++++++++++++++++++----------------- test/tests.nix | 14 ++++++--- 4 files changed, 52 insertions(+), 38 deletions(-) diff --git a/examples/configuration.nix b/examples/configuration.nix index bc1c990c8..535a96711 100644 --- a/examples/configuration.nix +++ b/examples/configuration.nix @@ -103,17 +103,17 @@ # # Set this to add a clightning node interface. # Automatically enables clightning. - # services.rtl.nodes.clightning = true; + # services.rtl.nodes.clightning.enable = true; # # Set this to add a lnd node interface. # Automatically enables lnd. - # services.rtl.nodes.lnd = true; + # services.rtl.nodes.lnd.enable = true; # # You can enable both nodes simultaneously. # # Set this option to enable swaps with lightning-loop. # Automatically enables lightning-loop. - # services.rtl.loop = true; + # services.rtl.nodes.lnd.loop = true; ### SPARK WALLET # Set this to enable spark-wallet, a minimalistic wallet GUI for diff --git a/modules/netns-isolation.nix b/modules/netns-isolation.nix index 815948185..97b32d031 100644 --- a/modules/netns-isolation.nix +++ b/modules/netns-isolation.nix @@ -283,10 +283,12 @@ in { }; rtl = { id = 29; - connections = - optional config.services.rtl.nodes.lnd "lnd" ++ - optional config.services.rtl.loop "lightning-loop" ++ - optional config.services.rtl.nodes.clightning "clightning-rest"; + connections = let + nodes = config.services.rtl.nodes; + in + optional nodes.lnd.enable "lnd" ++ + optional (nodes.lnd.enable && nodes.lnd.loop) "lightning-loop" ++ + optional nodes.clightning.enable "clightning-rest"; }; clightning-rest = { id = 30; diff --git a/modules/rtl.nix b/modules/rtl.nix index 8dbab0caa..49c8dc20d 100644 --- a/modules/rtl.nix +++ b/modules/rtl.nix @@ -20,15 +20,24 @@ let description = "The data directory for RTL."; }; nodes = { - clightning = mkOption { - type = types.bool; - default = false; - description = "Enable the clightning node interface."; + clightning = { + enable = mkOption { + type = types.bool; + default = false; + description = "Enable the clightning node interface."; + }; }; - lnd = mkOption { - type = types.bool; - default = false; - description = "Enable the lnd node interface."; + lnd = { + enable = mkOption { + type = types.bool; + default = false; + description = "Enable the lnd node interface."; + }; + loop = mkOption { + type = types.bool; + default = false; + description = "Enable swaps with lightning-loop."; + }; }; reverseOrder = mkOption { type = types.bool; @@ -39,11 +48,6 @@ let ''; }; }; - loop = mkOption { - type = types.bool; - default = false; - description = "Whether to enable swaps with lightning-loop."; - }; nightTheme = mkOption { type = types.bool; default = false; @@ -84,7 +88,7 @@ let "lnNode": "Node", "lnImplementation": "${if isLnd then "LND" else "CLT"}", "Authentication": { - ${optionalString (isLnd && cfg.loop) + ${optionalString (isLnd && lndLoopEnabled) ''"swapMacaroonPath": "${lightning-loop.dataDir}/${bitcoind.network}",'' } "macaroonPath": "${if isLnd @@ -104,7 +108,7 @@ let ${optionalString (cfg.extraCurrency != null) ''"currencyUnit": "${cfg.extraCurrency}",'' } - ${optionalString (isLnd && cfg.loop) + ${optionalString (isLnd && lndLoopEnabled) ''"swapServerUrl": "https://${nbLib.addressWithPort lightning-loop.restAddress lightning-loop.restPort}",'' } "lnServerUrl": "https://${ @@ -116,8 +120,8 @@ let } ''; - nodes' = optional cfg.nodes.clightning (node { isLnd = false; index = 1; }) ++ - optional cfg.nodes.lnd (node { isLnd = true; index = 2; }); + nodes' = optional cfg.nodes.clightning.enable (node { isLnd = false; index = 1; }) ++ + optional cfg.nodes.lnd.enable (node { isLnd = true; index = 2; }); nodes = if cfg.nodes.reverseOrder then reverseList nodes' else nodes'; @@ -140,21 +144,23 @@ let lnd clightning-rest lightning-loop; + + lndLoopEnabled = cfg.nodes.lnd.enable && cfg.nodes.lnd.loop; in { inherit options; config = mkIf cfg.enable { assertions = [ - { assertion = cfg.nodes.clightning || cfg.nodes.lnd; + { assertion = cfg.nodes.clightning.enable || cfg.nodes.lnd.enable; message = '' - RTL: At least one of `nodes.lnd` or `nodes.clightning` must be `true`. + RTL: At least one of `nodes.lnd.enable` or `nodes.clightning.enable` must be `true`. ''; } ]; - services.lnd.enable = mkIf cfg.nodes.lnd true; - services.lightning-loop.enable = mkIf cfg.loop true; - services.clightning-rest.enable = mkIf cfg.nodes.clightning true; + services.lnd.enable = mkIf cfg.nodes.lnd.enable true; + services.lightning-loop.enable = mkIf lndLoopEnabled true; + services.clightning-rest.enable = mkIf cfg.nodes.clightning.enable true; systemd.tmpfiles.rules = [ "d '${cfg.dataDir}' 0770 ${cfg.user} ${cfg.group} - -" @@ -164,8 +170,8 @@ in { systemd.services.rtl = rec { wantedBy = [ "multi-user.target" ]; - requires = optional cfg.nodes.clightning "clightning-rest.service" ++ - optional cfg.nodes.lnd "lnd.service"; + requires = optional cfg.nodes.clightning.enable "clightning-rest.service" ++ + optional cfg.nodes.lnd.enable "lnd.service"; after = requires; environment.RTL_CONFIG_PATH = cfg.dataDir; serviceConfig = nbLib.defaultHardening // { @@ -174,7 +180,7 @@ in { <${configFile} sed "s|@multiPass@|$(cat ${secretsDir}/rtl-password)|" \ > '${cfg.dataDir}/RTL-Config.json' '') - ] ++ optional cfg.nodes.lnd + ] ++ optional cfg.nodes.lnd.enable (nbLib.rootScript "rtl-copy-macaroon" '' install -D -o ${cfg.user} -g ${cfg.group} ${lnd.networkDir}/admin.macaroon \ '${cfg.dataDir}/macaroons/admin.macaroon' @@ -195,8 +201,8 @@ in { group = cfg.group; extraGroups = # Reads cert and macaroon from the clightning-rest datadir - optional cfg.nodes.clightning clightning-rest.group ++ - optional cfg.loop lnd.group; + optional cfg.nodes.clightning.enable clightning-rest.group ++ + optional lndLoopEnabled lnd.group; }; users.groups.${cfg.group} = {}; diff --git a/test/tests.nix b/test/tests.nix index dceb56db7..be0852d19 100644 --- a/test/tests.nix +++ b/test/tests.nix @@ -62,14 +62,20 @@ let tests.clightning-rest = cfg.clightning-rest.enable; tests.rtl = cfg.rtl.enable; - services.rtl.nodes.lnd = mkDefault true; - services.rtl.nodes.clightning = mkDefault true; - services.rtl.loop = mkIf cfg.rtl.nodes.lnd (mkDefault true); + services.rtl = { + nodes = { + lnd = { + enable = mkDefault true; + loop = mkDefault true; + }; + clightning.enable = mkDefault true; + }; + extraCurrency = mkDefault "CHF"; + }; # Use a simple, non-random password for manual web interface tests nix-bitcoin.generateSecretsCmds.rtl = mkIf cfg.rtl.enable (mkForce '' echo a > rtl-password ''); - services.rtl.extraCurrency = mkDefault "CHF"; tests.spark-wallet = cfg.spark-wallet.enable; From 3755b3ebea57e0cadd941d39e40002186159e769 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Sat, 14 May 2022 15:21:37 +0200 Subject: [PATCH 47/65] rtl: add option `extraConfig` for nodes Also define rtl config as a Nix attrset that is converted to JSON --- modules/rtl.nix | 121 +++++++++++++++++++++++++++--------------------- pkgs/lib.nix | 2 + test/tests.nix | 1 + 3 files changed, 72 insertions(+), 52 deletions(-) diff --git a/modules/rtl.nix b/modules/rtl.nix index 49c8dc20d..33a3e0657 100644 --- a/modules/rtl.nix +++ b/modules/rtl.nix @@ -26,6 +26,19 @@ let default = false; description = "Enable the clightning node interface."; }; + extraConfig = mkOption { + type = types.attrs; + default = {}; + example = { + Settings.userPersona = "MERCHANT"; + Settings.logLevel = "DEBUG"; + }; + description = '' + Extra clightning node configuration. + See here for all available options: + https://github.com/Ride-The-Lightning/RTL/blob/master/.github/docs/Application_configurations.md + ''; + }; }; lnd = { enable = mkOption { @@ -38,6 +51,19 @@ let default = false; description = "Enable swaps with lightning-loop."; }; + extraConfig = mkOption { + type = types.attrs; + default = {}; + example = { + Settings.userPersona = "MERCHANT"; + Settings.logLevel = "DEBUG"; + }; + description = '' + Extra lnd node configuration. + See here for all available options: + https://github.com/Ride-The-Lightning/RTL/blob/master/.github/docs/Application_configurations.md + ''; + }; }; reverseOrder = mkOption { type = types.bool; @@ -82,62 +108,53 @@ let nbPkgs = config.nix-bitcoin.pkgs; secretsDir = config.nix-bitcoin.secretsDir; - node = { isLnd, index }: '' - { - "index": ${toString index}, - "lnNode": "Node", - "lnImplementation": "${if isLnd then "LND" else "CLT"}", - "Authentication": { - ${optionalString (isLnd && lndLoopEnabled) - ''"swapMacaroonPath": "${lightning-loop.dataDir}/${bitcoind.network}",'' - } - "macaroonPath": "${if isLnd - then "${cfg.dataDir}/macaroons" - else "${clightning-rest.dataDir}/certs" - }" - }, - "Settings": { - "userPersona": "OPERATOR", - "themeMode": "${if cfg.nightTheme then "NIGHT" else "DAY"}", - "themeColor": "PURPLE", - ${optionalString isLnd - ''"channelBackupPath": "${cfg.dataDir}/backup/lnd",'' - } - "logLevel": "INFO", - "fiatConversion": ${if cfg.extraCurrency == null then "false" else "true"}, - ${optionalString (cfg.extraCurrency != null) - ''"currencyUnit": "${cfg.extraCurrency}",'' - } - ${optionalString (isLnd && lndLoopEnabled) - ''"swapServerUrl": "https://${nbLib.addressWithPort lightning-loop.restAddress lightning-loop.restPort}",'' - } - "lnServerUrl": "https://${ - if isLnd - then nbLib.addressWithPort lnd.restAddress lnd.restPort - else nbLib.addressWithPort clightning-rest.address clightning-rest.port - }" - } - } - ''; + inherit (nbLib) optionalAttr; - nodes' = optional cfg.nodes.clightning.enable (node { isLnd = false; index = 1; }) ++ - optional cfg.nodes.lnd.enable (node { isLnd = true; index = 2; }); + node = { isLnd, index }: { + inherit index; + lnNode = "Node"; + lnImplementation = if isLnd then "LND" else "CLT"; + Authentication = { + ${optionalAttr (isLnd && lndLoopEnabled) "swapMacaroonPath"} = "${lightning-loop.dataDir}/${bitcoind.network}"; + macaroonPath = if isLnd + then "${cfg.dataDir}/macaroons" + else "${clightning-rest.dataDir}/certs"; + }; + Settings = { + userPersona = "OPERATOR"; + themeMode = if cfg.nightTheme then "NIGHT" else "DAY"; + themeColor = "PURPLE"; + ${optionalAttr isLnd "channelBackupPath"} = "${cfg.dataDir}/backup/lnd"; + logLevel = "INFO"; + fiatConversion = cfg.extraCurrency != null; + ${optionalAttr (cfg.extraCurrency != null) "currencyUnit"} = cfg.extraCurrency; + ${optionalAttr (isLnd && lndLoopEnabled) "swapServerUrl"} = + "https://${nbLib.addressWithPort lightning-loop.restAddress lightning-loop.restPort}"; + lnServerUrl = "https://${ + if isLnd + then nbLib.addressWithPort lnd.restAddress lnd.restPort + else nbLib.addressWithPort clightning-rest.address clightning-rest.port + }"; + }; + }; + + nodes' = + optional cfg.nodes.clightning.enable + (recursiveUpdate (node { isLnd = false; index = 1; }) cfg.nodes.clightning.extraConfig) ++ + optional cfg.nodes.lnd.enable + (recursiveUpdate (node { isLnd = true; index = 2; }) cfg.nodes.lnd.extraConfig); nodes = if cfg.nodes.reverseOrder then reverseList nodes' else nodes'; - configFile = builtins.toFile "config" '' - { - "multiPass": "@multiPass@", - "host": "${cfg.address}", - "port": "${toString cfg.port}", - "SSO": { - "rtlSSO": 0 - }, - "nodes": [ - ${builtins.concatStringsSep ",\n" nodes} - ] - } - ''; + rtlConfig = { + multiPass = "@multiPass@"; + host = cfg.address; + port = cfg.port; + SSO.rtlSSO = 0; + inherit nodes; + }; + + configFile = builtins.toFile "config" (builtins.toJSON rtlConfig); inherit (config.services) bitcoind diff --git a/pkgs/lib.nix b/pkgs/lib.nix index 6b058fdef..ff4d44f85 100644 --- a/pkgs/lib.nix +++ b/pkgs/lib.nix @@ -107,4 +107,6 @@ let self = { addressWithPort = addr: port: "${self.address addr}:${toString port}"; + optionalAttr = cond: name: if cond then name else null; + }; in self diff --git a/test/tests.nix b/test/tests.nix index be0852d19..7f3e42009 100644 --- a/test/tests.nix +++ b/test/tests.nix @@ -67,6 +67,7 @@ let lnd = { enable = mkDefault true; loop = mkDefault true; + extraConfig.Settings.userPersona = "MERCHANT"; }; clightning.enable = mkDefault true; }; From b2ac602b46f207d1ce5eb56c267df34aabba78f4 Mon Sep 17 00:00:00 2001 From: Jonas Nick Date: Mon, 16 May 2022 21:03:10 +0000 Subject: [PATCH 48/65] update nixpkgs clightning: 0.11.0.1 -> 0.11.1 --- flake.lock | 18 +++++++++--------- test/nixos-search/flake.lock | 18 +++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/flake.lock b/flake.lock index 7d910835e..baf755fd1 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "flake-utils": { "locked": { - "lastModified": 1649676176, - "narHash": "sha256-OWKJratjt2RW151VUlJPRALb7OU2S5s+f0vLj4o1bHM=", + "lastModified": 1652557277, + "narHash": "sha256-jSes9DaIVMdmwBB78KkFUVrlDzawmD62vrUg0GS2500=", "owner": "numtide", "repo": "flake-utils", - "rev": "a4b154ebbdc88c8498a5c7b01589addc9e9cb678", + "rev": "12806d31a381e7cd169a6bac35590e7b36dc5fe5", "type": "github" }, "original": { @@ -17,11 +17,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1651571855, - "narHash": "sha256-KZie6c2J2DUPLjG2PkYSwGLvD6RygA3TxZSPQpctbNI=", + "lastModified": 1652559422, + "narHash": "sha256-jPVTNImBTUIFdtur+d4IVot6eXmsvtOcBm0TzxmhWPk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "fd43ce017d4c95f47166d28664a004f57458a0b1", + "rev": "8b3398bc7587ebb79f93dfeea1b8c574d3c6dba1", "type": "github" }, "original": { @@ -33,11 +33,11 @@ }, "nixpkgsUnstable": { "locked": { - "lastModified": 1651634615, - "narHash": "sha256-VtvcS61bLh5mIBm9cV3idUHdlfPRFus/NwdJfaj5s8o=", + "lastModified": 1652692103, + "narHash": "sha256-ygRLh8g0F/WkVCSfQcxMoVaaD45i6Ky+f+b4wCOazag=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "abfd31179174133ab8131139d650297bf4da63b7", + "rev": "556ce9a40abde33738e6c9eac65f965a8be3b623", "type": "github" }, "original": { diff --git a/test/nixos-search/flake.lock b/test/nixos-search/flake.lock index 904dd3bc4..30fe2b30d 100644 --- a/test/nixos-search/flake.lock +++ b/test/nixos-search/flake.lock @@ -18,11 +18,11 @@ "nixos-org-configurations": { "flake": false, "locked": { - "lastModified": 1648674978, - "narHash": "sha256-7lVlPb9/Lu3M9xPzwdvtgqkeQI4FAMv+T3v+yT54ZZ0=", + "lastModified": 1651495498, + "narHash": "sha256-u/WU4G+DBJp7L8UO7UMLcor7QHfHp8P6pKwDPhBz504=", "owner": "NixOS", "repo": "nixos-org-configurations", - "rev": "76c0687ac275235142dae7c855aab2885302298c", + "rev": "2a65c35c03163f0ecbe0f86f4bd56aaf5c4f4dd0", "type": "github" }, "original": { @@ -38,11 +38,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1650836881, - "narHash": "sha256-FKsTNQWq8lv6+Qr6LouEukTsJIGEU51H1cWc1PSOtvU=", + "lastModified": 1652295804, + "narHash": "sha256-VzvA5YxzPsn4t2tFLgj+QavsdO2YpH/1d3xrZ/18VdQ=", "owner": "nixos", "repo": "nixos-search", - "rev": "eea6cd3ffb4d3d39956316d6e976b9d5ce52d508", + "rev": "3b41f2dcfd3448efea38f241c5229ac4948e51a7", "type": "github" }, "original": { @@ -53,11 +53,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1650701402, - "narHash": "sha256-XKfstdtqDg+O+gNBx1yGVKWIhLgfEDg/e2lvJSsp9vU=", + "lastModified": 1651726670, + "narHash": "sha256-dSGdzB49SEvdOJvrQWfQYkAefewXraHIV08Vz6iDXWQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "bc41b01dd7a9fdffd32d9b03806798797532a5fe", + "rev": "c777cdf5c564015d5f63b09cc93bef4178b19b01", "type": "github" }, "original": { From 63b3eec9cd5125c7bfe0c70743756c5c4d862e3c Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Tue, 17 May 2022 13:18:37 +0200 Subject: [PATCH 49/65] push-release.sh: fix pushing to master branch --- helper/push-release.sh | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/helper/push-release.sh b/helper/push-release.sh index 2648706d7..9e833a323 100755 --- a/helper/push-release.sh +++ b/helper/push-release.sh @@ -8,6 +8,8 @@ OAUTH_TOKEN= DRY_RUN= TAG_NAME= +trap 'echo "Error at ${BASH_SOURCE[0]}:$LINENO"' ERR + for arg in "$@"; do case $arg in --dry-run|-n) @@ -32,6 +34,8 @@ else fi fi +cd "${BASH_SOURCE[0]%/*}" + RESPONSE=$(curl https://api.github.com/repos/$REPO/releases/latest 2> /dev/null) echo "Latest release" $(echo $RESPONSE | jq -r '.tag_name' | tail -c +2) @@ -51,16 +55,17 @@ if [[ ! $DRY_RUN ]]; then trap "rm -rf $TMPDIR" EXIT; fi ARCHIVE_NAME=nix-bitcoin-$TAG_NAME.tar.gz ARCHIVE=$TMPDIR/$ARCHIVE_NAME -# Need to be in the repositories root directory for archiving +# Need to be in the repo root directory for archiving (cd $(git rev-parse --show-toplevel); git archive --format=tar.gz -o $ARCHIVE $BRANCH) SHA256SUMS=$TMPDIR/SHA256SUMS.txt -# Want to use relative path with sha256sums because it'll output the first +# Use relative path with sha256sums because it'll output the first # argument (cd $TMPDIR; sha256sum $ARCHIVE_NAME > $SHA256SUMS) gpg -o $SHA256SUMS.asc -a --detach-sig $SHA256SUMS -cd $TMPDIR +pushd $TMPDIR >/dev/null + nix hash to-sri --type sha256 $(nix-prefetch-url --unpack file://$ARCHIVE 2> /dev/null) > nar-hash.txt gpg -o nar-hash.txt.asc -a --detach-sig nar-hash.txt @@ -90,6 +95,10 @@ post_asset $ARCHIVE post_asset $SHA256SUMS post_asset $SHA256SUMS.asc -git push $GIT_REMOTE $BRANCH:release +popd >/dev/null + +if [[ ! $DRY_RUN ]]; then + git push $GIT_REMOTE $BRANCH:release +fi echo "Successfully created" $(echo $POST_DATA | jq -r .tag_name) From 84fe731c9476d8dae6ba519551dda584fc388411 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Tue, 17 May 2022 13:18:38 +0200 Subject: [PATCH 50/65] treewide: curl: exit with error status on HTTP errors This makes scripts fail early on request errors. Previously, curl exited with status 0 when enountering HTTP error status codes. `-fsS` equals `--fail --silent --show-error`. --- helper/fetch-release | 6 +++--- modules/lnd.nix | 2 +- pkgs/lndinit/get-sha256.sh | 2 +- test/tests.py | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/helper/fetch-release b/helper/fetch-release index cc3ffdbd9..ee14de8d4 100755 --- a/helper/fetch-release +++ b/helper/fetch-release @@ -8,7 +8,7 @@ trap 'echo "Error at ${BASH_SOURCE[0]}, line $LINENO"' ERR repo=fort-nix/nix-bitcoin if [[ ! -v version ]]; then - version=$(curl -s --show-error "https://api.github.com/repos/$repo/releases/latest" | jq -r '.tag_name' | tail -c +2) + version=$(curl -fsS "https://api.github.com/repos/$repo/releases/latest" | jq -r '.tag_name' | tail -c +2) fi TMPDIR=$(mktemp -d) @@ -27,8 +27,8 @@ gpg --list-keys "36C7 1A37 C9D9 88BD E825 08D9 B1A7 0E4F 8DCD 0366" > /dev/null # Fetch nar-hash of release cd $TMPDIR baseUrl=https://github.com/$repo/releases/download/v$version -curl -s --show-error -L -O $baseUrl/nar-hash.txt -curl -s --show-error -L -O $baseUrl/nar-hash.txt.asc +curl -fsS -L -O $baseUrl/nar-hash.txt +curl -fsS -L -O $baseUrl/nar-hash.txt.asc # Verify signature for nar-hash gpg --verify nar-hash.txt.asc &> /dev/null || { diff --git a/modules/lnd.nix b/modules/lnd.nix index 8f0fe3a5a..8cdbcd4c3 100644 --- a/modules/lnd.nix +++ b/modules/lnd.nix @@ -234,7 +234,7 @@ in { RestartSec = "10s"; ReadWritePaths = [ cfg.dataDir ]; ExecStartPost = let - curl = "${pkgs.curl}/bin/curl -s --show-error --cacert ${cfg.certPath}"; + curl = "${pkgs.curl}/bin/curl -fsS --cacert ${cfg.certPath}"; restUrl = "https://${nbLib.addressWithPort cfg.restAddress cfg.restPort}/v1"; in # Setting macaroon permissions for other users needs root permissions diff --git a/pkgs/lndinit/get-sha256.sh b/pkgs/lndinit/get-sha256.sh index b2533c01f..ba65d2234 100755 --- a/pkgs/lndinit/get-sha256.sh +++ b/pkgs/lndinit/get-sha256.sh @@ -8,7 +8,7 @@ cd $TMPDIR echo "Fetching latest release" repo=lightninglabs/lndinit -latest=$(curl -s --show-error https://api.github.com/repos/$repo/releases/latest | jq -r .tag_name) +latest=$(curl -fsS https://api.github.com/repos/$repo/releases/latest | jq -r .tag_name) echo "Latest release is $latest" git clone --depth 1 --branch $latest https://github.com/lightninglabs/lndinit 2>/dev/null cd lndinit diff --git a/test/tests.py b/test/tests.py index 3f56bb06a..e1599abc7 100644 --- a/test/tests.py +++ b/test/tests.py @@ -203,13 +203,13 @@ def _(): wait_for_open_port(ip("btcpayserver"), 23000) # test lnd custom macaroon assert_matches( - "runuser -u btcpayserver -- curl -s --cacert /secrets/lnd-cert " + "runuser -u btcpayserver -- curl -fsS --cacert /secrets/lnd-cert " '--header "Grpc-Metadata-macaroon: $(xxd -ps -u -c 1000 /run/lnd/btcpayserver.macaroon)" ' f"-X GET https://{ip('lnd')}:8080/v1/getinfo | jq", '"version"', ) # Test web server response - assert_matches(f"curl -L {ip('btcpayserver')}:23000", "Welcome to your BTCPay Server") + assert_matches(f"curl -fsS -L {ip('btcpayserver')}:23000", "Welcome to your BTCPay Server") @test("rtl") def _(): @@ -230,7 +230,7 @@ def _(): assert_running("spark-wallet") wait_for_open_port(ip("spark-wallet"), 9737) spark_auth = re.search("login=(.*)", succeed("cat /secrets/spark-wallet-login"))[1] - assert_matches(f"curl -s {spark_auth}@{ip('spark-wallet')}:9737", "Spark") + assert_matches(f"curl -fsS {spark_auth}@{ip('spark-wallet')}:9737", "Spark") @test("joinmarket") def _(): From 15288d58e1d4456f569b49b859f152b3a4247a21 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Tue, 17 May 2022 13:18:39 +0200 Subject: [PATCH 51/65] lnd: rename var `mnemonic` -> `seed` This matches lnd's terminology. --- modules/lnd.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/lnd.nix b/modules/lnd.nix index 8cdbcd4c3..25e26c6fd 100644 --- a/modules/lnd.nix +++ b/modules/lnd.nix @@ -205,16 +205,16 @@ in { } >> '${cfg.dataDir}/lnd.conf' if [[ ! -f ${networkDir}/wallet.db ]]; then - mnemonic='${cfg.dataDir}/lnd-seed-mnemonic' + seed='${cfg.dataDir}/lnd-seed-mnemonic' - if [[ ! -f "$mnemonic" ]]; then + if [[ ! -f "$seed" ]]; then echo "Create lnd seed" - (umask u=r,go=; ${lndinit} gen-seed > "$mnemonic") + (umask u=r,go=; ${lndinit} gen-seed > "$seed") fi echo "Create lnd wallet" ${lndinit} -v init-wallet \ - --file.seed="$mnemonic" \ + --file.seed="$seed" \ --file.wallet-password='${secretsDir}/lnd-wallet-password' \ --init-file.output-wallet-dir='${cfg.networkDir}' fi From e2721a9039e0dd545ca6b1406078b75b0f595d53 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Tue, 17 May 2022 13:18:41 +0200 Subject: [PATCH 52/65] examples/configuration.nix: update system.stateVersion --- examples/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/configuration.nix b/examples/configuration.nix index bc1c990c8..136881330 100644 --- a/examples/configuration.nix +++ b/examples/configuration.nix @@ -274,7 +274,7 @@ # compatible, in order to avoid breaking some software such as database # servers. You should change this only after NixOS release notes say you # should. - system.stateVersion = "21.05"; # Did you read the comment? + system.stateVersion = "21.11"; # Did you read the comment? # The nix-bitcoin release version that your config is compatible with. # When upgrading to a backwards-incompatible release, nix-bitcoin will display an From 107ee27be31ae88c595489248c864683493d5c91 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Tue, 17 May 2022 13:18:42 +0200 Subject: [PATCH 53/65] docs/configuration: improve wording --- docs/configuration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configuration.md b/docs/configuration.md index f65446a4f..a9f1aea40 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -178,7 +178,7 @@ Some services require extra steps: # Use bitcoind from another node -Use a bitcoind instance running on another node within a nix-bitcoin config. +Here's how to use a bitcoind instance running on another node within a nix-bitcoin config: ```nix imports = [ ]; From 3d32c0afeb4eaa5b71728604a04213f6af3ee4c6 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Tue, 17 May 2022 13:18:43 +0200 Subject: [PATCH 54/65] docs/configuration: clarify description It's not entirely clear what 'updating the secrets' means (it refers to the previous step), so just remove this part. --- docs/configuration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configuration.md b/docs/configuration.md index a9f1aea40..1e1a0ca78 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -226,7 +226,7 @@ $secretsDir/bitcoin-rpcpassword-public ``` See: [Secrets dir](#secrets-dir) -Restart `bitcoind` after updating the secrets: `systemctl restart bitcoind`. +Afterwards, restart `bitcoind`: `systemctl restart bitcoind`. # Temporarily disable a service From 9649785dd5d2e588807a2ca96dc13792e46b12aa Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Tue, 17 May 2022 13:18:44 +0200 Subject: [PATCH 55/65] docs/configuration: improve formatting Join paragraphs that refer to the same topic. --- docs/configuration.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/configuration.md b/docs/configuration.md index 1e1a0ca78..98c0f538c 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -22,8 +22,7 @@ This fetches the latest release, verifies its signatures and updates `nix-bitcoi ## Get started with Nix See [Nix - A One Pager](https://github.com/tazjin/nix-1p) for a short guide -to Nix, the language used in `configuration.nix`. - +to Nix, the language used in `configuration.nix`.\ You can follow along this guide by running command `nix repl` which allows you to interactively evaluate Nix expressions. From 571983a993058c07be6fb8a1673ff4eaa0c5ea0f Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Fri, 6 May 2022 17:03:21 +0200 Subject: [PATCH 56/65] docs/services: improve lndconnect section --- docs/services.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/services.md b/docs/services.md index c2ceda6ab..90a71dc53 100644 --- a/docs/services.md +++ b/docs/services.md @@ -44,7 +44,7 @@ You can find the `` with command `nodeinfo`. The default password location is `$secretsDir/rtl-password`. See: [Secrets dir](./configuration.md#secrets-dir) -# Use LND or clightning with Zeus (smartphone wallet) via Tor +# Use LND or clightning with Zeus (mobile wallet) via Tor 1. Install [Zeus](https://zeusln.app) 2. Edit your `configuration.nix` @@ -86,7 +86,7 @@ See: [Secrets dir](./configuration.md#secrets-dir) - Select `Scan lndconnect config` (at the bottom) and scan the QR code - For clightning: Set `Node interface` to `c-lightning-REST` - Click `Save node config` - - Start sending sats privately + - Start sending and stacking sats privately ### Additional lndconnect features Create plain text URLs or QR code images: From ef93a9a8bd8b14d3f50e4b4fd6564a50234b0e4a Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Wed, 18 May 2022 13:33:45 +0200 Subject: [PATCH 57/65] rtl: formatting --- modules/rtl.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/rtl.nix b/modules/rtl.nix index 8dbab0caa..919a07783 100644 --- a/modules/rtl.nix +++ b/modules/rtl.nix @@ -3,7 +3,7 @@ with lib; let options.services.rtl = { - enable = mkEnableOption "Ride The Lightning, a web interface for lnd and clightning "; + enable = mkEnableOption "Ride The Lightning, a web interface for lnd and clightning"; address = mkOption { type = types.str; default = "127.0.0.1"; From 041162d1e3b5103039be47581d7249c27282d589 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Sun, 22 May 2022 15:56:14 +0200 Subject: [PATCH 58/65] clightning-plugins: update to latest rev --- pkgs/clightning-plugins/default.nix | 4 ++-- pkgs/clightning-plugins/get-sha256.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/clightning-plugins/default.nix b/pkgs/clightning-plugins/default.nix index bf8443b7a..49f39c947 100644 --- a/pkgs/clightning-plugins/default.nix +++ b/pkgs/clightning-plugins/default.nix @@ -6,8 +6,8 @@ let src = pkgs.fetchFromGitHub { owner = "lightningd"; repo = "plugins"; - rev = "b88c9278102ea9bffddce8143d31e939b31e835c"; - sha256 = "sha256-qf4MYqP2Bwlqqn2y2LCIYuFq71r2m6IFT/w4noW6ePU="; + rev = "7ef9e6c172c0bd0dd09168e19b29e44f7ec6ec4d"; + sha256 = "12llf4dnyria0s1x4bmm360d6bxk47z0wyxwwlmq3762mdfl36js"; }; version = builtins.substring 0 7 src.rev; diff --git a/pkgs/clightning-plugins/get-sha256.sh b/pkgs/clightning-plugins/get-sha256.sh index ccc678b3b..3def5056d 100755 --- a/pkgs/clightning-plugins/get-sha256.sh +++ b/pkgs/clightning-plugins/get-sha256.sh @@ -10,5 +10,5 @@ archive_hash () { echo "Fetching latest lightningd/plugins release" latest=$(git ls-remote https://github.com/lightningd/plugins master | cut -f 1) -echo "rev: ${latest}" -echo "sha256: $(archive_hash lightningd/plugins $latest)" +echo "rev = \"${latest}\";" +echo "sha256 = \"$(archive_hash lightningd/plugins $latest)\";" From ae94665ad18ca3b49f485cce38bb4f2023de3f2e Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Sun, 22 May 2022 15:56:15 +0200 Subject: [PATCH 59/65] clightning: add `package` option --- modules/clightning.nix | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/modules/clightning.nix b/modules/clightning.nix index 32ea647be..fd6bc5add 100644 --- a/modules/clightning.nix +++ b/modules/clightning.nix @@ -64,10 +64,16 @@ let default = cfg.user; description = "The group as which to run clightning."; }; + package = mkOption { + type = types.package; + default = nbPkgs.clightning; + defaultText = "config.nix-bitcoin.pkgs.clightning"; + description = "The package providing clightning binaries."; + }; cli = mkOption { readOnly = true; default = pkgs.writeScriptBin "lightning-cli" '' - ${nbPkgs.clightning}/bin/lightning-cli --lightning-dir='${cfg.dataDir}' "$@" + ${cfg.package}/bin/lightning-cli --lightning-dir='${cfg.dataDir}' "$@" ''; defaultText = "(See source)"; description = "Binary to connect with the clightning instance."; @@ -120,7 +126,7 @@ in { rpc.threads = 16; }; - environment.systemPackages = [ nbPkgs.clightning (hiPrio cfg.cli) ]; + environment.systemPackages = [ cfg.package (hiPrio cfg.cli) ]; systemd.tmpfiles.rules = [ "d '${cfg.dataDir}' 0770 ${cfg.user} ${cfg.group} - -" @@ -144,7 +150,7 @@ in { } > '${cfg.dataDir}/config' ''; serviceConfig = nbLib.defaultHardening // { - ExecStart = "${nbPkgs.clightning}/bin/lightningd --lightning-dir=${cfg.dataDir}"; + ExecStart = "${cfg.package}/bin/lightningd --lightning-dir=${cfg.dataDir}"; User = cfg.user; Restart = "on-failure"; RestartSec = "10s"; From 37a19fa607adf041afac4bf2983b59929abc1f1a Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Mon, 20 Dec 2021 15:16:39 +0100 Subject: [PATCH 60/65] helper: add start-bash-session.sh --- helper/start-bash-session.sh | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 helper/start-bash-session.sh diff --git a/helper/start-bash-session.sh b/helper/start-bash-session.sh new file mode 100644 index 000000000..a30d090fb --- /dev/null +++ b/helper/start-bash-session.sh @@ -0,0 +1,6 @@ +# Start an interactive bash session in the current bash environment. + +# BASH_ENVIRONMENT contains definitions of read-only variables like 'BASHOPTS' that +# cause warnings on evaluation. Suppress these warnings while sourcing. +BASH_ENVIRONMENT=<(declare -p; declare -pf) \ + bash --rcfile <(echo 'source $BASH_ENVIRONMENT 2>/dev/null') From b5913f3ccce0b3c2e9991ac6d720efb812b002c9 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Fri, 25 Feb 2022 13:21:54 +0100 Subject: [PATCH 61/65] fulcrum: init at bcccf76f (2022-02-24) --- pkgs/default.nix | 1 + pkgs/fulcrum/default.nix | 39 ++++++++++++++++++++++++++++++++++++++ pkgs/fulcrum/get-sha256.sh | 22 +++++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 pkgs/fulcrum/default.nix create mode 100755 pkgs/fulcrum/get-sha256.sh diff --git a/pkgs/default.nix b/pkgs/default.nix index 9c7ee4a78..fbbc9915e 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -13,6 +13,7 @@ let self = { clightning-rest = pkgs.callPackage ./clightning-rest { }; clboss = pkgs.callPackage ./clboss { }; clightning-plugins = pkgs.recurseIntoAttrs (import ./clightning-plugins pkgs self.nbPython3Packages); + fulcrum = pkgs.libsForQt5.callPackage ./fulcrum { }; joinmarket = pkgs.callPackage ./joinmarket { nbPythonPackageOverrides = import ./python-packages self; }; lndinit = pkgs.callPackage ./lndinit { }; liquid-swap = pkgs.python3Packages.callPackage ./liquid-swap { }; diff --git a/pkgs/fulcrum/default.nix b/pkgs/fulcrum/default.nix new file mode 100644 index 000000000..d2ed360aa --- /dev/null +++ b/pkgs/fulcrum/default.nix @@ -0,0 +1,39 @@ +{ mkDerivation, lib, fetchFromGitHub, pkg-config +, qmake +, qtbase +, rocksdb +, zeromq +}: + +mkDerivation rec { + pname = "fulcrum"; + version = builtins.substring 0 8 src.rev; + + src = fetchFromGitHub { + owner = "cculianu"; + repo = "Fulcrum"; + rev = "bcccf76f5fa8570d87a7077caddb86ee504fd1d8"; + sha256 = "sha256-5xIG7CjpEz8XCXMLx2MWrEWVHk6dJVvrvE1Jq9Ji4Hw="; + }; + + nativeBuildInputs = [ + pkg-config + qmake + ]; + + buildInputs = [ + qtbase + rocksdb + zeromq + ]; + + enableParallelBuilding = true; + + meta = with lib; { + description = "A fast SPV server for BCH and BTC"; + homepage = "https://github.com/cculianu/Fulcrum"; + license = licenses.gpl2Plus; + platforms = platforms.linux; + maintainers = with maintainers; [ earvstedt ]; + }; +} diff --git a/pkgs/fulcrum/get-sha256.sh b/pkgs/fulcrum/get-sha256.sh new file mode 100755 index 000000000..3ac7c0a70 --- /dev/null +++ b/pkgs/fulcrum/get-sha256.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p coreutils git gnupg nix_2_4 +set -euo pipefail + +version="bcccf76f5fa8570d87a7077caddb86ee504fd1d8" + +# Fetch release and GPG-verify the content hash +tmpdir=$(mktemp -d /tmp/fulcrum-verify-gpg.XXX) +repo=$tmpdir/repo +#trap "rm -rf $tmpdir" EXIT +git clone https://github.com/cculianu/Fulcrum $repo +git -C $repo checkout $version +export GNUPGHOME=$tmpdir +# Fetch cculianu's key +gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys D465135F97D0047E18E99DC321810A542031C02C +echo +echo "Verifying commit" +git -C $repo verify-commit ${version} +rm -rf $repo/.git +hash=$(nix hash path $repo) +rm -rf $tmpdir +echo $hash From 11d895ac6283f22727488232bbf70b48dd918376 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Fri, 25 Feb 2022 13:21:53 +0100 Subject: [PATCH 62/65] bitcoind-rpc-public-whitelist: add `ping` Required by fulcrum. --- modules/bitcoind-rpc-public-whitelist.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/bitcoind-rpc-public-whitelist.nix b/modules/bitcoind-rpc-public-whitelist.nix index 70ce406ce..38ca2c03e 100644 --- a/modules/bitcoind-rpc-public-whitelist.nix +++ b/modules/bitcoind-rpc-public-whitelist.nix @@ -2,6 +2,7 @@ [ "echo" "getinfo" + "ping" "uptime" # Blockchain "getbestblockhash" From a2ae5375a259bd1681fa16f088d8cfbf990a1f1b Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Fri, 25 Feb 2022 13:21:55 +0100 Subject: [PATCH 63/65] fulcrum: add module --- modules/fulcrum.nix | 120 ++++++++++++++++++++++++++++++++++++ modules/modules.nix | 1 + modules/netns-isolation.nix | 6 ++ 3 files changed, 127 insertions(+) create mode 100644 modules/fulcrum.nix diff --git a/modules/fulcrum.nix b/modules/fulcrum.nix new file mode 100644 index 000000000..82d65d9df --- /dev/null +++ b/modules/fulcrum.nix @@ -0,0 +1,120 @@ +{ config, lib, pkgs, ... }: + +with lib; +let + options.services.fulcrum = { + enable = mkEnableOption "fulcrum, an Electrum server implemented in C++"; + address = mkOption { + type = types.str; + default = "127.0.0.1"; + description = "Address to listen for RPC connections."; + }; + port = mkOption { + type = types.port; + default = 50001; + description = "Port to listen for RPC connections."; + }; + dataDir = mkOption { + type = types.path; + default = "/var/lib/fulcrum"; + description = "The data directory for fulcrum."; + }; + extraConfig = mkOption { + type = types.lines; + default = ""; + description = '' + Extra lines appended to the configuration file. + + See all available options at + https://github.com/cculianu/Fulcrum/blob/master/doc/fulcrum-example-config.conf + ''; + }; + user = mkOption { + type = types.str; + default = "fulcrum"; + description = "The user as which to run fulcrum."; + }; + group = mkOption { + type = types.str; + default = cfg.user; + description = "The group as which to run fulcrum."; + }; + tor.enforce = nbLib.tor.enforce; + }; + + cfg = config.services.fulcrum; + nbLib = config.nix-bitcoin.lib; + secretsDir = config.nix-bitcoin.secretsDir; + bitcoind = config.services.bitcoind; + + configFile = builtins.toFile "fulcrum.conf" '' + datadir = ${cfg.dataDir} + bitcoind = ${nbLib.addressWithPort bitcoind.rpc.address bitcoind.rpc.port} + tcp = ${cfg.address}:${toString cfg.port} + # TODO + peering = false + # Disable logging timestamps + ts-format = none + rpcuser = ${bitcoind.rpc.users.public.name} + + ${cfg.extraConfig} + ''; + + pkg = pkgs.libsForQt5.callPackage ./fulcrum-pkg.nix {}; +in { + inherit options; + + config = mkIf cfg.enable { + assertions = [ + { assertion = bitcoind.prune == 0; + message = "fulcrum does not support bitcoind pruning."; + } + { assertion = + !(config.services ? electrs) + || !config.services.electrs.enable + || config.services.electrs.port != cfg.port; + message = '' + Fulcrum and Electrs can't both bind to TCP RPC port 50001. Either + disable Fulcrum/Electrs or change services.electrs.port or + services.fulcrum.port to a port other than 50001. + ''; + } + ]; + + services.bitcoind = { + enable = true; + txindex = true; + }; + + systemd.tmpfiles.rules = [ + "d '${cfg.dataDir}' 0770 ${cfg.user} ${cfg.group} - -" + ]; + + systemd.services.fulcrum = { + wantedBy = [ "multi-user.target" ]; + requires = [ "bitcoind.service" ]; + after = [ "bitcoind.service" ]; + preStart = '' + { + cat ${configFile} + echo "rpcpassword = $(cat ${secretsDir}/bitcoin-rpcpassword-public)" + } > '${cfg.dataDir}/fulcrum.conf' + ''; + serviceConfig = nbLib.defaultHardening // { + ExecStart = "${config.nix-bitcoin.pkgs.fulcrum}/bin/Fulcrum '${cfg.dataDir}/fulcrum.conf'"; + User = cfg.user; + Group = cfg.group; + Restart = "on-failure"; + RestartSec = "10s"; + ReadWritePaths = cfg.dataDir; + } // nbLib.allowedIPAddresses cfg.tor.enforce; + }; + + users.users.${cfg.user} = { + isSystemUser = true; + group = cfg.group; + extraGroups = [ "bitcoinrpc-public" ]; + }; + users.groups.${cfg.group} = {}; + }; +} diff --git a/modules/modules.nix b/modules/modules.nix index bf0dbab64..08c20bc69 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -21,6 +21,7 @@ ./lndconnect-onion.nix # Requires onion-addresses.nix ./rtl.nix ./electrs.nix + ./fulcrum.nix ./liquid.nix ./btcpayserver.nix ./joinmarket.nix diff --git a/modules/netns-isolation.nix b/modules/netns-isolation.nix index 97b32d031..ce1a9cec0 100644 --- a/modules/netns-isolation.nix +++ b/modules/netns-isolation.nix @@ -293,6 +293,10 @@ in { clightning-rest = { id = 30; }; + fulcrum = { + id = 32; + connections = [ "bitcoind" ]; + }; }; services.bitcoind = { @@ -324,6 +328,8 @@ in { services.electrs.address = netns.electrs.address; + services.fulcrum.address = netns.fulcrum.address; + services.spark-wallet = { address = netns.spark-wallet.address; extraArgs = "--no-tls"; From f034a25e3fbe06a1b4083d3fccd0dbda15ed3596 Mon Sep 17 00:00:00 2001 From: nixbitcoin Date: Thu, 17 Feb 2022 11:07:01 +0000 Subject: [PATCH 64/65] mempool: init at 2.3.1 Co-authored-by: Erik Arvstedt --- pkgs/default.nix | 3 + pkgs/mempool/README.md | 17 + pkgs/mempool/default.nix | 82 + pkgs/mempool/fix-config-path.patch | 8 + pkgs/mempool/frontend.nix | 64 + pkgs/mempool/generate.sh | 45 + pkgs/mempool/node-packages-backend.nix | 1012 ++ pkgs/mempool/node-packages-frontend.nix | 11404 ++++++++++++++++++++++ 8 files changed, 12635 insertions(+) create mode 100644 pkgs/mempool/README.md create mode 100644 pkgs/mempool/default.nix create mode 100644 pkgs/mempool/fix-config-path.patch create mode 100644 pkgs/mempool/frontend.nix create mode 100755 pkgs/mempool/generate.sh create mode 100644 pkgs/mempool/node-packages-backend.nix create mode 100644 pkgs/mempool/node-packages-frontend.nix diff --git a/pkgs/default.nix b/pkgs/default.nix index fbbc9915e..ef64a748f 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -18,6 +18,9 @@ let self = { lndinit = pkgs.callPackage ./lndinit { }; liquid-swap = pkgs.python3Packages.callPackage ./liquid-swap { }; rtl = pkgs.callPackage ./rtl { }; + inherit (pkgs.callPackage ./mempool { }) + mempool-backend + mempool-frontend; # The secp256k1 version used by joinmarket secp256k1 = pkgs.callPackage ./secp256k1 { }; spark-wallet = pkgs.callPackage ./spark-wallet { }; diff --git a/pkgs/mempool/README.md b/pkgs/mempool/README.md new file mode 100644 index 000000000..435156809 --- /dev/null +++ b/pkgs/mempool/README.md @@ -0,0 +1,17 @@ +## Issues with the backend that complicate packaging + +- Backend expects file `mempool-config.json` to reside in source code at + `../mempool-config.json`, relative to file `$pkg/lib/node_modules/mempool-backend/dist/index.js` + +- Backend expects file `../.git/refs/heads/master` to exist relative to the working + dir. This is used for constructing a version string. + +- Backend must be run with working dir `$pkg/lib/node_modules/mempool-backend` so + that file `package.json` can be read relative to PWD. + +`mempool-backend.workaround` works around these issues. Demo: +```shell +nix build ../..#mempool-backend.workaround --out-link /tmp/mempool +# Run the backend in a sandbox +nix shell nixpkgs#bubblewrap -c bwrap --unshare-net --ro-bind / / -- /tmp/mempool/bin/mempool-backend +``` diff --git a/pkgs/mempool/default.nix b/pkgs/mempool/default.nix new file mode 100644 index 000000000..2e7f25ac7 --- /dev/null +++ b/pkgs/mempool/default.nix @@ -0,0 +1,82 @@ +{ pkgs, lib, fetchFromGitHub, fetchurl, makeWrapper, rsync }: +rec { + nodejs = pkgs.nodejs-16_x; + nodejsRuntime = pkgs.nodejs-slim-16_x; + + src = fetchFromGitHub { + owner = "mempool"; + repo = "mempool"; + rev = "v2.3.1"; + hash = "sha256-l7wdbNDi7A8o2nBg3V7FR+TAd0PIZBhIw44k+9OAaX4="; + }; + + # node2nix requires that the backend and frontend are available as distinct node + # packages + srcBackend = pkgs.runCommand "mempool-backend" {} '' + cp -r --no-preserve=mode ${src}/backend $out + cd $out + patch -p2 <${./fix-config-path.patch} + ''; + srcFrontend = pkgs.runCommand "mempool-frontend" {} '' + cp -r ${src}/frontend $out + ''; + + nodeEnv = import "${toString pkgs.path}/pkgs/development/node-packages/node-env.nix" { + inherit (pkgs) stdenv lib python2 runCommand writeTextFile writeShellScript; + inherit pkgs nodejs; + libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null; + }; + + nodePkgs = file: import file { + inherit (pkgs) fetchurl nix-gitignore stdenv lib fetchgit; + inherit nodeEnv; + }; + backendPkgs = nodePkgs ./node-packages-backend.nix; + frontendPkgs = nodePkgs ./node-packages-frontend.nix; + + mempool-backend = nodeEnv.buildNodePackage (backendPkgs.args // { + src = srcBackend; + + nativeBuildInputs = (backendPkgs.args.nativeBuildInputs or []) ++ [ + makeWrapper + ]; + + postInstall = '' + npm run build + + # Remove unneeded src and cache files + rm -r src cache .[!.]* + + makeWrapper ${nodejsRuntime}/bin/node $out/bin/mempool-backend \ + --add-flags $out/lib/node_modules/mempool-backend/dist/index.js + ''; + + inherit meta; + + passthru.workaround = backend-workaround; + }); + + backend-workaround = mempool-backend.overrideAttrs (old: { + postInstall = old.postInstall + '' + # See ./README.md + cp mempool-config.sample.json mempool-config.json + mkdir -p ../.git/refs/heads + echo 0000000000000000000000000000000000000000 > ../.git/refs/heads/master + + makeWrapper ${nodejsRuntime}/bin/node $out/bin/mempool-backend \ + --add-flags $out/lib/node_modules/mempool-backend/dist/index.js \ + --run "cd $out/lib/node_modules/mempool-backend" + ''; + }); + + mempool-frontend = + import ./frontend.nix srcFrontend nodeEnv frontendPkgs nodejs meta fetchurl rsync; + + meta = with lib; { + description = "Bitcoin blockchain and mempool explorer"; + homepage = "https://github.com/mempool/mempool/"; + license = licenses.agpl3Plus; + maintainers = with maintainers; [ nixbitcoin earvstedt ]; + platforms = platforms.unix; + }; +} diff --git a/pkgs/mempool/fix-config-path.patch b/pkgs/mempool/fix-config-path.patch new file mode 100644 index 000000000..945b8b7f7 --- /dev/null +++ b/pkgs/mempool/fix-config-path.patch @@ -0,0 +1,8 @@ +--- a/backend/src/config.ts ++++ b/backend/src/config.ts +@@ -1,4 +1,4 @@ +-const configFile = require('../mempool-config.json'); ++const configFile = require('/var/lib/mempool/config.json'); + + interface IConfig { + MEMPOOL: { diff --git a/pkgs/mempool/frontend.nix b/pkgs/mempool/frontend.nix new file mode 100644 index 000000000..8de16ce1d --- /dev/null +++ b/pkgs/mempool/frontend.nix @@ -0,0 +1,64 @@ +srcFrontend: nodeEnv: frontendPkgs: nodejs: meta: fetchurl: rsync: +let + # TODO: Fetch the rev and hashes via ./generate.sh + assetRegistryRev = "689456ad4d653055eb690dca282b9f8faab1e873"; + assetIndex = fetchurl { + url = "https://raw.githubusercontent.com/mempool/asset_registry_db/${assetRegistryRev}/index.json"; + hash = "sha256-9pqWQoe3AkTswUt9lFXs02YB5/RB2tFzIQpRDUG34/U="; + }; + assetIndexMinimal = fetchurl { + url = "https://raw.githubusercontent.com/mempool/asset_registry_db/${assetRegistryRev}/index.minimal.json"; + hash = "sha256-RobjVsefsUEPomqYARu4d9s/cDfhb0ra+63IUNeYWuw="; + }; + pools = fetchurl { + url = "https://raw.githubusercontent.com/btccom/Blockchain-Known-Pools/8446d4d156035e128a2e98742e91880265c61d6c/pools.json"; + hash = "sha256-wX6+Q7ykKXHoHhiJnb12X4x1PqTrpK3h89vpwdDf2zw="; + }; +in +nodeEnv.buildNodePackage (frontendPkgs.args // { + src = srcFrontend; + + nativeBuildInputs = (frontendPkgs.args.nativeBuildInputs or []) ++ [ + # Required by /bin scripts generated by node packages + nodejs + # Required by node script `sync-assets` (defined in frontend/package.json) + rsync + ]; + + npmFlags = "--no-optional"; + + postInstall = '' + # Patch shebangs of scripts that were generated by `npm ... rebuild` + patchShebangs node_modules + + # sync-assets.js is called during `npm run build` and downloads assets from the + # internet. Disable this script and instead add the assets manually after building. + true > sync-assets.js + + # TODO-EXTERNAL: + # `npm run build` produces incorrect output if a parent dir of $PWD is named `node_modules`: + # https://github.com/mempool/mempool/issues/1256 + # This is the case here, where $PWD equals $out/lib/node_modules/mempool-frontend + mv $PWD $out/lib/tmp + cd $out/lib/tmp + npm run build + + # Add assets that would otherwise be downloaded by sync-assets.js + resources=dist/mempool/browser/resources/resources + resourcesEnUS=dist/mempool/browser/en-US/resources + cp ${assetIndex} $resources/assets.json + cp ${assetIndex} $resourcesEnUS/assets.json + cp ${assetIndexMinimal} $resources/assets.minimal.json + cp ${assetIndexMinimal} $resourcesEnUS/assets.minimal.json + cp ${pools} $resources/pools.json + cp ${pools} $resourcesEnUS/pools.json + + # Move build to $out + mv dist/mempool/browser/* $out + + # Remove temporary files + rm -r $out/lib + ''; + + inherit meta; +}) diff --git a/pkgs/mempool/generate.sh b/pkgs/mempool/generate.sh new file mode 100755 index 000000000..b92157000 --- /dev/null +++ b/pkgs/mempool/generate.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env nix-shell +#! nix-shell -i bash -p nodePackages.node2nix gnupg wget jq gnused nix_2_4 +set -euo pipefail + +# Use this to start a debug shell at the location of this statement +# . "${BASH_SOURCE[0]%/*}/../../helper/start-bash-session.sh" + +repo=https://github.com/mempool/mempool + +TMPDIR="$(mktemp -d /tmp/mempool.XXX)" +trap "rm -rf $TMPDIR" EXIT + +version=v2.3.1 +# Fetch and verify source +src=$TMPDIR/src +mkdir -p $src +git clone --depth 1 --branch ${version} -c advice.detachedHead=false https://github.com/mempool/mempool $src +export GNUPGHOME=$TMPDIR +gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys 913C5FF1F579B66CA10378DBA394E332255A6173 2> /dev/null +git -C $src verify-tag ${version} +rm -rf $src/.git +hash=$(nix hash path $src) + +generatePkg() { + component=$1 + node2nix \ + --input $src/$component/package.json \ + --lock $src/$component/package-lock.json \ + --output node-packages-$component.nix \ + --composition /dev/null \ + --strip-optional-dependencies \ + --no-copy-node-env + + # Delete reference to temporary src + sed -i '/\bsrc = .*\/tmp\/mempool/d' node-packages-$component.nix +} + +generatePkg frontend +generatePkg backend + +# Use the verified package src +sed -i " + s|\brev = .*;|rev = \"${version}\";| + s|\hash = .*;|hash = \"${hash}\";| +" default.nix diff --git a/pkgs/mempool/node-packages-backend.nix b/pkgs/mempool/node-packages-backend.nix new file mode 100644 index 000000000..c612a239e --- /dev/null +++ b/pkgs/mempool/node-packages-backend.nix @@ -0,0 +1,1012 @@ +# This file has been generated by node2nix 1.9.0. Do not edit! + +{nodeEnv, fetchurl, fetchgit, nix-gitignore, stdenv, lib, globalBuildInputs ? []}: + +let + sources = { + "@mempool/bitcoin-3.0.3" = { + name = "_at_mempool_slash_bitcoin"; + packageName = "@mempool/bitcoin"; + version = "3.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@mempool/bitcoin/-/bitcoin-3.0.3.tgz"; + sha512 = "10UdbwchnevlebDTN+Xhv75AEhDmTMy9UgWHlqx5MG2mheFG6+eqmtHsdxeYnv3IAtTtlRfA6fY0RbV/x4TNFQ=="; + }; + }; + "@mempool/electrum-client-1.1.8" = { + name = "_at_mempool_slash_electrum-client"; + packageName = "@mempool/electrum-client"; + version = "1.1.8"; + src = fetchurl { + url = "https://registry.npmjs.org/@mempool/electrum-client/-/electrum-client-1.1.8.tgz"; + sha512 = "6YP6UJstlk2GgC++NwPJthMPvLozyEMlqPq7RjvIWSwrL0smvM0Q0PAOohwZJtJFDWspuEUtNRF7aHQT2ztnYg=="; + }; + }; + "@types/node-14.14.20" = { + name = "_at_types_slash_node"; + packageName = "@types/node"; + version = "14.14.20"; + src = fetchurl { + url = "https://registry.npmjs.org/@types/node/-/node-14.14.20.tgz"; + sha512 = "Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A=="; + }; + }; + "@types/ws-8.2.2" = { + name = "_at_types_slash_ws"; + packageName = "@types/ws"; + version = "8.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz"; + sha512 = "NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg=="; + }; + }; + "accepts-1.3.7" = { + name = "accepts"; + packageName = "accepts"; + version = "1.3.7"; + src = fetchurl { + url = "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz"; + sha512 = "Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA=="; + }; + }; + "array-flatten-1.1.1" = { + name = "array-flatten"; + packageName = "array-flatten"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz"; + sha1 = "9a5f699051b1e7073328f2a008968b64ea2955d2"; + }; + }; + "axios-0.24.0" = { + name = "axios"; + packageName = "axios"; + version = "0.24.0"; + src = fetchurl { + url = "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz"; + sha512 = "Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA=="; + }; + }; + "base-x-3.0.9" = { + name = "base-x"; + packageName = "base-x"; + version = "3.0.9"; + src = fetchurl { + url = "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz"; + sha512 = "H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ=="; + }; + }; + "bech32-2.0.0" = { + name = "bech32"; + packageName = "bech32"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz"; + sha512 = "LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg=="; + }; + }; + "bip174-2.0.1" = { + name = "bip174"; + packageName = "bip174"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/bip174/-/bip174-2.0.1.tgz"; + sha512 = "i3X26uKJOkDTAalYAp0Er+qGMDhrbbh2o93/xiPyAN2s25KrClSpe3VXo/7mNJoqA5qfko8rLS2l3RWZgYmjKQ=="; + }; + }; + "bitcoinjs-lib-6.0.1" = { + name = "bitcoinjs-lib"; + packageName = "bitcoinjs-lib"; + version = "6.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.0.1.tgz"; + sha512 = "x/7D4jDj/MMkmO6t3p2CSDXTqpwZ/jRsRiJDmaiXabrR9XRo7jwby8HRn7EyK1h24rKFFI7vI0ay4czl6bDOZQ=="; + }; + }; + "body-parser-1.19.0" = { + name = "body-parser"; + packageName = "body-parser"; + version = "1.19.0"; + src = fetchurl { + url = "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz"; + sha512 = "dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw=="; + }; + }; + "bs58-4.0.1" = { + name = "bs58"; + packageName = "bs58"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz"; + sha1 = "be161e76c354f6f788ae4071f63f34e8c4f0a42a"; + }; + }; + "bs58check-2.1.2" = { + name = "bs58check"; + packageName = "bs58check"; + version = "2.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz"; + sha512 = "0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA=="; + }; + }; + "bytes-3.1.0" = { + name = "bytes"; + packageName = "bytes"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz"; + sha512 = "zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="; + }; + }; + "cipher-base-1.0.4" = { + name = "cipher-base"; + packageName = "cipher-base"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz"; + sha512 = "Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q=="; + }; + }; + "content-disposition-0.5.3" = { + name = "content-disposition"; + packageName = "content-disposition"; + version = "0.5.3"; + src = fetchurl { + url = "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz"; + sha512 = "ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g=="; + }; + }; + "content-type-1.0.4" = { + name = "content-type"; + packageName = "content-type"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz"; + sha512 = "hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="; + }; + }; + "cookie-0.4.0" = { + name = "cookie"; + packageName = "cookie"; + version = "0.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz"; + sha512 = "+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="; + }; + }; + "cookie-signature-1.0.6" = { + name = "cookie-signature"; + packageName = "cookie-signature"; + version = "1.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz"; + sha1 = "e303a882b342cc3ee8ca513a79999734dab3ae2c"; + }; + }; + "create-hash-1.2.0" = { + name = "create-hash"; + packageName = "create-hash"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz"; + sha512 = "z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg=="; + }; + }; + "crypto-js-4.0.0" = { + name = "crypto-js"; + packageName = "crypto-js"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz"; + sha512 = "bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg=="; + }; + }; + "debug-2.6.9" = { + name = "debug"; + packageName = "debug"; + version = "2.6.9"; + src = fetchurl { + url = "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"; + sha512 = "bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="; + }; + }; + "denque-2.0.1" = { + name = "denque"; + packageName = "denque"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz"; + sha512 = "tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ=="; + }; + }; + "depd-1.1.2" = { + name = "depd"; + packageName = "depd"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz"; + sha1 = "9bcd52e14c097763e749b274c4346ed2e560b5a9"; + }; + }; + "destroy-1.0.4" = { + name = "destroy"; + packageName = "destroy"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz"; + sha1 = "978857442c44749e4206613e37946205826abd80"; + }; + }; + "ee-first-1.1.1" = { + name = "ee-first"; + packageName = "ee-first"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz"; + sha1 = "590c61156b0ae2f4f0255732a158b266bc56b21d"; + }; + }; + "encodeurl-1.0.2" = { + name = "encodeurl"; + packageName = "encodeurl"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz"; + sha1 = "ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"; + }; + }; + "escape-html-1.0.3" = { + name = "escape-html"; + packageName = "escape-html"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz"; + sha1 = "0258eae4d3d0c0974de1c169188ef0051d1d1988"; + }; + }; + "etag-1.8.1" = { + name = "etag"; + packageName = "etag"; + version = "1.8.1"; + src = fetchurl { + url = "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz"; + sha1 = "41ae2eeb65efa62268aebfea83ac7d79299b0887"; + }; + }; + "express-4.17.1" = { + name = "express"; + packageName = "express"; + version = "4.17.1"; + src = fetchurl { + url = "https://registry.npmjs.org/express/-/express-4.17.1.tgz"; + sha512 = "mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g=="; + }; + }; + "finalhandler-1.1.2" = { + name = "finalhandler"; + packageName = "finalhandler"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz"; + sha512 = "aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA=="; + }; + }; + "follow-redirects-1.14.7" = { + name = "follow-redirects"; + packageName = "follow-redirects"; + version = "1.14.7"; + src = fetchurl { + url = "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz"; + sha512 = "+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ=="; + }; + }; + "forwarded-0.1.2" = { + name = "forwarded"; + packageName = "forwarded"; + version = "0.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz"; + sha1 = "98c23dab1175657b8c0573e8ceccd91b0ff18c84"; + }; + }; + "fresh-0.5.2" = { + name = "fresh"; + packageName = "fresh"; + version = "0.5.2"; + src = fetchurl { + url = "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz"; + sha1 = "3d8cadd90d976569fa835ab1f8e4b23a105605a7"; + }; + }; + "generate-function-2.3.1" = { + name = "generate-function"; + packageName = "generate-function"; + version = "2.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz"; + sha512 = "eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ=="; + }; + }; + "hash-base-3.1.0" = { + name = "hash-base"; + packageName = "hash-base"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz"; + sha512 = "1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA=="; + }; + }; + "http-errors-1.7.2" = { + name = "http-errors"; + packageName = "http-errors"; + version = "1.7.2"; + src = fetchurl { + url = "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz"; + sha512 = "uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg=="; + }; + }; + "iconv-lite-0.4.24" = { + name = "iconv-lite"; + packageName = "iconv-lite"; + version = "0.4.24"; + src = fetchurl { + url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"; + sha512 = "v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="; + }; + }; + "iconv-lite-0.6.3" = { + name = "iconv-lite"; + packageName = "iconv-lite"; + version = "0.6.3"; + src = fetchurl { + url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz"; + sha512 = "4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="; + }; + }; + "inherits-2.0.3" = { + name = "inherits"; + packageName = "inherits"; + version = "2.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz"; + sha1 = "633c2c83e3da42a502f52466022480f4208261de"; + }; + }; + "inherits-2.0.4" = { + name = "inherits"; + packageName = "inherits"; + version = "2.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"; + sha512 = "k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="; + }; + }; + "ipaddr.js-1.9.1" = { + name = "ipaddr.js"; + packageName = "ipaddr.js"; + version = "1.9.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz"; + sha512 = "0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="; + }; + }; + "is-property-1.0.2" = { + name = "is-property"; + packageName = "is-property"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz"; + sha1 = "57fe1c4e48474edd65b09911f26b1cd4095dda84"; + }; + }; + "locutus-2.0.15" = { + name = "locutus"; + packageName = "locutus"; + version = "2.0.15"; + src = fetchurl { + url = "https://registry.npmjs.org/locutus/-/locutus-2.0.15.tgz"; + sha512 = "2xWC4RkoAoCVXEb/stzEgG1TNgd+mrkLBj6TuEDNyUoKeQ2XzDTyJUC23sMiqbL6zJmJSP3w59OZo+zc4IBOmA=="; + }; + }; + "long-4.0.0" = { + name = "long"; + packageName = "long"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/long/-/long-4.0.0.tgz"; + sha512 = "XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="; + }; + }; + "lru-cache-4.1.5" = { + name = "lru-cache"; + packageName = "lru-cache"; + version = "4.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz"; + sha512 = "sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g=="; + }; + }; + "lru-cache-6.0.0" = { + name = "lru-cache"; + packageName = "lru-cache"; + version = "6.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"; + sha512 = "Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="; + }; + }; + "md5.js-1.3.5" = { + name = "md5.js"; + packageName = "md5.js"; + version = "1.3.5"; + src = fetchurl { + url = "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz"; + sha512 = "xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg=="; + }; + }; + "media-typer-0.3.0" = { + name = "media-typer"; + packageName = "media-typer"; + version = "0.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz"; + sha1 = "8710d7af0aa626f8fffa1ce00168545263255748"; + }; + }; + "merge-descriptors-1.0.1" = { + name = "merge-descriptors"; + packageName = "merge-descriptors"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz"; + sha1 = "b00aaa556dd8b44568150ec9d1b953f3f90cbb61"; + }; + }; + "methods-1.1.2" = { + name = "methods"; + packageName = "methods"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz"; + sha1 = "5529a4d67654134edcc5266656835b0f851afcee"; + }; + }; + "mime-1.6.0" = { + name = "mime"; + packageName = "mime"; + version = "1.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz"; + sha512 = "x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="; + }; + }; + "mime-db-1.45.0" = { + name = "mime-db"; + packageName = "mime-db"; + version = "1.45.0"; + src = fetchurl { + url = "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz"; + sha512 = "CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w=="; + }; + }; + "mime-types-2.1.28" = { + name = "mime-types"; + packageName = "mime-types"; + version = "2.1.28"; + src = fetchurl { + url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz"; + sha512 = "0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ=="; + }; + }; + "ms-2.0.0" = { + name = "ms"; + packageName = "ms"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"; + sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8"; + }; + }; + "ms-2.1.1" = { + name = "ms"; + packageName = "ms"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz"; + sha512 = "tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="; + }; + }; + "mysql2-2.3.3" = { + name = "mysql2"; + packageName = "mysql2"; + version = "2.3.3"; + src = fetchurl { + url = "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz"; + sha512 = "wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA=="; + }; + }; + "named-placeholders-1.1.2" = { + name = "named-placeholders"; + packageName = "named-placeholders"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz"; + sha512 = "wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA=="; + }; + }; + "negotiator-0.6.2" = { + name = "negotiator"; + packageName = "negotiator"; + version = "0.6.2"; + src = fetchurl { + url = "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz"; + sha512 = "hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="; + }; + }; + "node-worker-threads-pool-1.4.3" = { + name = "node-worker-threads-pool"; + packageName = "node-worker-threads-pool"; + version = "1.4.3"; + src = fetchurl { + url = "https://registry.npmjs.org/node-worker-threads-pool/-/node-worker-threads-pool-1.4.3.tgz"; + sha512 = "US55ZGzEDQY2oq8Bc33dFVNKGpx4KaCJqThMDomSsUeX8tMdp2eDjQ6OP0yFd1HTEuHuLqxXSTWC4eidEsbXlg=="; + }; + }; + "on-finished-2.3.0" = { + name = "on-finished"; + packageName = "on-finished"; + version = "2.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz"; + sha1 = "20f1336481b083cd75337992a16971aa2d906947"; + }; + }; + "parseurl-1.3.3" = { + name = "parseurl"; + packageName = "parseurl"; + version = "1.3.3"; + src = fetchurl { + url = "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz"; + sha512 = "CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="; + }; + }; + "path-to-regexp-0.1.7" = { + name = "path-to-regexp"; + packageName = "path-to-regexp"; + version = "0.1.7"; + src = fetchurl { + url = "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz"; + sha1 = "df604178005f522f15eb4490e7247a1bfaa67f8c"; + }; + }; + "proxy-addr-2.0.6" = { + name = "proxy-addr"; + packageName = "proxy-addr"; + version = "2.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz"; + sha512 = "dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw=="; + }; + }; + "pseudomap-1.0.2" = { + name = "pseudomap"; + packageName = "pseudomap"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz"; + sha1 = "f052a28da70e618917ef0a8ac34c1ae5a68286b3"; + }; + }; + "qs-6.7.0" = { + name = "qs"; + packageName = "qs"; + version = "6.7.0"; + src = fetchurl { + url = "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz"; + sha512 = "VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="; + }; + }; + "range-parser-1.2.1" = { + name = "range-parser"; + packageName = "range-parser"; + version = "1.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz"; + sha512 = "Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="; + }; + }; + "raw-body-2.4.0" = { + name = "raw-body"; + packageName = "raw-body"; + version = "2.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz"; + sha512 = "4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q=="; + }; + }; + "readable-stream-3.6.0" = { + name = "readable-stream"; + packageName = "readable-stream"; + version = "3.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz"; + sha512 = "BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA=="; + }; + }; + "ripemd160-2.0.2" = { + name = "ripemd160"; + packageName = "ripemd160"; + version = "2.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz"; + sha512 = "ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA=="; + }; + }; + "safe-buffer-5.1.2" = { + name = "safe-buffer"; + packageName = "safe-buffer"; + version = "5.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"; + sha512 = "Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="; + }; + }; + "safe-buffer-5.2.1" = { + name = "safe-buffer"; + packageName = "safe-buffer"; + version = "5.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz"; + sha512 = "rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="; + }; + }; + "safer-buffer-2.1.2" = { + name = "safer-buffer"; + packageName = "safer-buffer"; + version = "2.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"; + sha512 = "YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="; + }; + }; + "send-0.17.1" = { + name = "send"; + packageName = "send"; + version = "0.17.1"; + src = fetchurl { + url = "https://registry.npmjs.org/send/-/send-0.17.1.tgz"; + sha512 = "BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg=="; + }; + }; + "seq-queue-0.0.5" = { + name = "seq-queue"; + packageName = "seq-queue"; + version = "0.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz"; + sha1 = "d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e"; + }; + }; + "serve-static-1.14.1" = { + name = "serve-static"; + packageName = "serve-static"; + version = "1.14.1"; + src = fetchurl { + url = "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz"; + sha512 = "JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg=="; + }; + }; + "setprototypeof-1.1.1" = { + name = "setprototypeof"; + packageName = "setprototypeof"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz"; + sha512 = "JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="; + }; + }; + "sha.js-2.4.11" = { + name = "sha.js"; + packageName = "sha.js"; + version = "2.4.11"; + src = fetchurl { + url = "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz"; + sha512 = "QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ=="; + }; + }; + "sqlstring-2.3.2" = { + name = "sqlstring"; + packageName = "sqlstring"; + version = "2.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.2.tgz"; + sha512 = "vF4ZbYdKS8OnoJAWBmMxCQDkiEBkGQYU7UZPtL8flbDRSNkhaXvRJ279ZtI6M+zDaQovVU4tuRgzK5fVhvFAhg=="; + }; + }; + "statuses-1.5.0" = { + name = "statuses"; + packageName = "statuses"; + version = "1.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz"; + sha1 = "161c7dac177659fd9811f43771fa99381478628c"; + }; + }; + "string_decoder-1.3.0" = { + name = "string_decoder"; + packageName = "string_decoder"; + version = "1.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz"; + sha512 = "hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="; + }; + }; + "toidentifier-1.0.0" = { + name = "toidentifier"; + packageName = "toidentifier"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz"; + sha512 = "yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="; + }; + }; + "type-is-1.6.18" = { + name = "type-is"; + packageName = "type-is"; + version = "1.6.18"; + src = fetchurl { + url = "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz"; + sha512 = "TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g=="; + }; + }; + "typeforce-1.18.0" = { + name = "typeforce"; + packageName = "typeforce"; + version = "1.18.0"; + src = fetchurl { + url = "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz"; + sha512 = "7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g=="; + }; + }; + "typescript-4.4.4" = { + name = "typescript"; + packageName = "typescript"; + version = "4.4.4"; + src = fetchurl { + url = "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz"; + sha512 = "DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA=="; + }; + }; + "unpipe-1.0.0" = { + name = "unpipe"; + packageName = "unpipe"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"; + sha1 = "b2bf4ee8514aae6165b4817829d21b2ef49904ec"; + }; + }; + "util-deprecate-1.0.2" = { + name = "util-deprecate"; + packageName = "util-deprecate"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"; + sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf"; + }; + }; + "utils-merge-1.0.1" = { + name = "utils-merge"; + packageName = "utils-merge"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz"; + sha1 = "9f95710f50a267947b2ccc124741c1028427e713"; + }; + }; + "varuint-bitcoin-1.1.2" = { + name = "varuint-bitcoin"; + packageName = "varuint-bitcoin"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz"; + sha512 = "4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw=="; + }; + }; + "vary-1.1.2" = { + name = "vary"; + packageName = "vary"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"; + sha1 = "2299f02c6ded30d4a5961b0b9f74524a18f634fc"; + }; + }; + "wif-2.0.6" = { + name = "wif"; + packageName = "wif"; + version = "2.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz"; + sha1 = "08d3f52056c66679299726fade0d432ae74b4704"; + }; + }; + "ws-8.3.0" = { + name = "ws"; + packageName = "ws"; + version = "8.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ws/-/ws-8.3.0.tgz"; + sha512 = "Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw=="; + }; + }; + "yallist-2.1.2" = { + name = "yallist"; + packageName = "yallist"; + version = "2.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz"; + sha1 = "1c11f9218f076089a47dd512f93c6699a6a81d52"; + }; + }; + "yallist-4.0.0" = { + name = "yallist"; + packageName = "yallist"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"; + sha512 = "3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="; + }; + }; + }; + args = { + name = "mempool-backend"; + packageName = "mempool-backend"; + version = "2.3.1"; + dependencies = [ + sources."@mempool/bitcoin-3.0.3" + sources."@mempool/electrum-client-1.1.8" + sources."@types/node-14.14.20" + sources."@types/ws-8.2.2" + sources."accepts-1.3.7" + sources."array-flatten-1.1.1" + sources."axios-0.24.0" + sources."base-x-3.0.9" + sources."bech32-2.0.0" + sources."bip174-2.0.1" + sources."bitcoinjs-lib-6.0.1" + sources."body-parser-1.19.0" + sources."bs58-4.0.1" + sources."bs58check-2.1.2" + sources."bytes-3.1.0" + sources."cipher-base-1.0.4" + (sources."content-disposition-0.5.3" // { + dependencies = [ + sources."safe-buffer-5.1.2" + ]; + }) + sources."content-type-1.0.4" + sources."cookie-0.4.0" + sources."cookie-signature-1.0.6" + sources."create-hash-1.2.0" + sources."crypto-js-4.0.0" + sources."debug-2.6.9" + sources."denque-2.0.1" + sources."depd-1.1.2" + sources."destroy-1.0.4" + sources."ee-first-1.1.1" + sources."encodeurl-1.0.2" + sources."escape-html-1.0.3" + sources."etag-1.8.1" + (sources."express-4.17.1" // { + dependencies = [ + sources."safe-buffer-5.1.2" + ]; + }) + sources."finalhandler-1.1.2" + sources."follow-redirects-1.14.7" + sources."forwarded-0.1.2" + sources."fresh-0.5.2" + sources."generate-function-2.3.1" + sources."hash-base-3.1.0" + (sources."http-errors-1.7.2" // { + dependencies = [ + sources."inherits-2.0.3" + ]; + }) + sources."iconv-lite-0.4.24" + sources."inherits-2.0.4" + sources."ipaddr.js-1.9.1" + sources."is-property-1.0.2" + sources."locutus-2.0.15" + sources."long-4.0.0" + sources."lru-cache-6.0.0" + sources."md5.js-1.3.5" + sources."media-typer-0.3.0" + sources."merge-descriptors-1.0.1" + sources."methods-1.1.2" + sources."mime-1.6.0" + sources."mime-db-1.45.0" + sources."mime-types-2.1.28" + sources."ms-2.0.0" + (sources."mysql2-2.3.3" // { + dependencies = [ + sources."iconv-lite-0.6.3" + ]; + }) + (sources."named-placeholders-1.1.2" // { + dependencies = [ + sources."lru-cache-4.1.5" + sources."yallist-2.1.2" + ]; + }) + sources."negotiator-0.6.2" + sources."node-worker-threads-pool-1.4.3" + sources."on-finished-2.3.0" + sources."parseurl-1.3.3" + sources."path-to-regexp-0.1.7" + sources."proxy-addr-2.0.6" + sources."pseudomap-1.0.2" + sources."qs-6.7.0" + sources."range-parser-1.2.1" + sources."raw-body-2.4.0" + sources."readable-stream-3.6.0" + sources."ripemd160-2.0.2" + sources."safe-buffer-5.2.1" + sources."safer-buffer-2.1.2" + (sources."send-0.17.1" // { + dependencies = [ + sources."ms-2.1.1" + ]; + }) + sources."seq-queue-0.0.5" + sources."serve-static-1.14.1" + sources."setprototypeof-1.1.1" + sources."sha.js-2.4.11" + sources."sqlstring-2.3.2" + sources."statuses-1.5.0" + sources."string_decoder-1.3.0" + sources."toidentifier-1.0.0" + sources."type-is-1.6.18" + sources."typeforce-1.18.0" + sources."typescript-4.4.4" + sources."unpipe-1.0.0" + sources."util-deprecate-1.0.2" + sources."utils-merge-1.0.1" + sources."varuint-bitcoin-1.1.2" + sources."vary-1.1.2" + sources."wif-2.0.6" + sources."ws-8.3.0" + sources."yallist-4.0.0" + ]; + buildInputs = globalBuildInputs; + meta = { + description = "Bitcoin mempool visualizer and blockchain explorer backend"; + homepage = "https://mempool.space"; + license = "GNU Affero General Public License v3.0"; + }; + production = true; + bypassCache = true; + reconstructLock = false; + }; +in +{ + args = args; + sources = sources; + tarball = nodeEnv.buildNodeSourceDist args; + package = nodeEnv.buildNodePackage args; + shell = nodeEnv.buildNodeShell args; + nodeDependencies = nodeEnv.buildNodeDependencies (lib.overrideExisting args { + src = stdenv.mkDerivation { + name = args.name + "-package-json"; + src = nix-gitignore.gitignoreSourcePure [ + "*" + "!package.json" + "!package-lock.json" + ] args.src; + dontBuild = true; + installPhase = "mkdir -p $out; cp -r ./* $out;"; + }; + }); +} diff --git a/pkgs/mempool/node-packages-frontend.nix b/pkgs/mempool/node-packages-frontend.nix new file mode 100644 index 000000000..acb31bb1d --- /dev/null +++ b/pkgs/mempool/node-packages-frontend.nix @@ -0,0 +1,11404 @@ +# This file has been generated by node2nix 1.9.0. Do not edit! + +{nodeEnv, fetchurl, fetchgit, nix-gitignore, stdenv, lib, globalBuildInputs ? []}: + +let + sources = { + "@ampproject/remapping-1.0.2" = { + name = "_at_ampproject_slash_remapping"; + packageName = "@ampproject/remapping"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/@ampproject/remapping/-/remapping-1.0.2.tgz"; + sha512 = "SncaVxs+E3EdoA9xJgHfWPxZfowAgeIsd71VpqCKP6KNKm6s7zSqqvUc70UpKUFsrV3dAmy6qxHoIj5NG+3DiA=="; + }; + }; + "@angular-devkit/architect-0.1300.4" = { + name = "_at_angular-devkit_slash_architect"; + packageName = "@angular-devkit/architect"; + version = "0.1300.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1300.4.tgz"; + sha512 = "COW2W6rI9D69QEXGc/MyTbJY9gT+u8yMTpONpIjopd+KoSK/q2wGr0RleUf7XSCunZCs0SRI7z3Pw1EAdQCP7Q=="; + }; + }; + "@angular-devkit/architect-0.1301.2" = { + name = "_at_angular-devkit_slash_architect"; + packageName = "@angular-devkit/architect"; + version = "0.1301.2"; + src = fetchurl { + url = "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1301.2.tgz"; + sha512 = "v8e6OF80Ezo5MTHtFcq1AZJH+Wq+hN9pMZ1iLGkODIfKIW9zx6aPhx0JY0b7sZkfNVL8ay8JA8f339eBMnOE9A=="; + }; + }; + "@angular-devkit/build-angular-13.1.2" = { + name = "_at_angular-devkit_slash_build-angular"; + packageName = "@angular-devkit/build-angular"; + version = "13.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.1.2.tgz"; + sha512 = "0FeDqfjWJjgIU42T3136RNYb7Yv2as6Z8rAnfUlX6RjRGZf98+6ZQZ80yREgrLkm7L8G1qWJc1sn3NyVMDwf9A=="; + }; + }; + "@angular-devkit/build-webpack-0.1301.2" = { + name = "_at_angular-devkit_slash_build-webpack"; + packageName = "@angular-devkit/build-webpack"; + version = "0.1301.2"; + src = fetchurl { + url = "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1301.2.tgz"; + sha512 = "Xk0k0tMcLOy2HI1/YrfWeLUrtKvk7/E7fhG3XoozT/pXBQgiZGoPuCt34HNPDkx3WNSedzvh5DNv8kPlILfjIw=="; + }; + }; + "@angular-devkit/core-13.0.4" = { + name = "_at_angular-devkit_slash_core"; + packageName = "@angular-devkit/core"; + version = "13.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@angular-devkit/core/-/core-13.0.4.tgz"; + sha512 = "AzgLvERLC6qzY5aZWUpkz5nx+pZChrq3DSt6azMPALwzzoABrwiO6XqzRnj17mXtANXLH2oe9FuHr9jzgFbF1g=="; + }; + }; + "@angular-devkit/core-13.1.2" = { + name = "_at_angular-devkit_slash_core"; + packageName = "@angular-devkit/core"; + version = "13.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/@angular-devkit/core/-/core-13.1.2.tgz"; + sha512 = "uXVesIRiCL/Nv+RSV8JM4j8IoZiGCGnqV2FOJ1hvH7DPxIjhjPMdG/B54xMydZpeASW3ofuxeORyAXxFIBm8Zg=="; + }; + }; + "@angular-devkit/schematics-13.0.4" = { + name = "_at_angular-devkit_slash_schematics"; + packageName = "@angular-devkit/schematics"; + version = "13.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.0.4.tgz"; + sha512 = "3LsmpfAEOxwPyachrktCHtGUYBzQCCzD0++CUjhK8W99v8/IAplkm4dgovFb1RiRkUm44l+HIS7387AbvEIf5A=="; + }; + }; + "@angular/animations-13.1.1" = { + name = "_at_angular_slash_animations"; + packageName = "@angular/animations"; + version = "13.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@angular/animations/-/animations-13.1.1.tgz"; + sha512 = "6ECC9Dn5gmV4U1cz1pRJ2p5lo0BET2CjG1RbhTaZR8lOsoMsmlV/JdBAp8eyYTiGii3MLS6Q2P/hN/YG2SRGQQ=="; + }; + }; + "@angular/cli-13.0.4" = { + name = "_at_angular_slash_cli"; + packageName = "@angular/cli"; + version = "13.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@angular/cli/-/cli-13.0.4.tgz"; + sha512 = "0QMJXFNn57LVg7ZwZFPO90g6aZHDnoe5yCB7fo3nskOhDw1AW/rnbbaNVMVX/SvP30hOOTLsfVJ1Y3I6eKDgRA=="; + }; + }; + "@angular/common-13.1.1" = { + name = "_at_angular_slash_common"; + packageName = "@angular/common"; + version = "13.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@angular/common/-/common-13.1.1.tgz"; + sha512 = "FQwRZ1XgTH2PbPjBmq2jAZzETVNX9yWQt21MuNGtokC7V4eS0NYlFIDbhy3UPWCzRgd3+P7P4+HdX15VxCjf9g=="; + }; + }; + "@angular/compiler-13.1.1" = { + name = "_at_angular_slash_compiler"; + packageName = "@angular/compiler"; + version = "13.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@angular/compiler/-/compiler-13.1.1.tgz"; + sha512 = "WS+BB4h2LOBAGQ+P+RcKDw43Z7yAB5m1RY2/MAI+qI339V97WlWEQXxSMvBhCuzJnww1SSZfHMADaB54Jdjx2g=="; + }; + }; + "@angular/compiler-cli-13.1.1" = { + name = "_at_angular_slash_compiler-cli"; + packageName = "@angular/compiler-cli"; + version = "13.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.1.1.tgz"; + sha512 = "ycdXN2urBZepbXn2xx1oxF1i6g0Dq/Rb8ySQeELdL9qr6hiZF9fkvIwd91d8uhFG2PvoM4O8/U/3x4yA2bXzew=="; + }; + }; + "@angular/core-13.1.1" = { + name = "_at_angular_slash_core"; + packageName = "@angular/core"; + version = "13.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@angular/core/-/core-13.1.1.tgz"; + sha512 = "oLGKgzUbHqte/q7EokOJWUiXAtBjwuZM6c9Or2a7WDJNeImQilxk5qy91RPSbP8FhOBysebqAayrfiCYexlShg=="; + }; + }; + "@angular/forms-13.1.1" = { + name = "_at_angular_slash_forms"; + packageName = "@angular/forms"; + version = "13.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@angular/forms/-/forms-13.1.1.tgz"; + sha512 = "wtYzRHPv4mf1Vsi4GEal5qcI2wjqUW+lu8Fsd2Aoe8NqkwtY3fq+iWEP/4pnvmH0RlC+3QbNNV/01D5UKolvgg=="; + }; + }; + "@angular/localize-13.1.1" = { + name = "_at_angular_slash_localize"; + packageName = "@angular/localize"; + version = "13.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@angular/localize/-/localize-13.1.1.tgz"; + sha512 = "R3DJaDDl+IMo0JbNtU4bgVGT4poavHGvg8E2q9xausn0jtkKY8MLa231a1MWlrc/lLVhX1M0sEr+X3CG/lRqhw=="; + }; + }; + "@angular/platform-browser-13.1.1" = { + name = "_at_angular_slash_platform-browser"; + packageName = "@angular/platform-browser"; + version = "13.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.1.1.tgz"; + sha512 = "jk9MGwnaVc98wmw5dRBicduI/a8dHtUzaAi1dV003fUWldS9a5FBuj/ym7DJubaD5Njl8l79SFbjrP9aAsqM5A=="; + }; + }; + "@angular/platform-browser-dynamic-13.1.1" = { + name = "_at_angular_slash_platform-browser-dynamic"; + packageName = "@angular/platform-browser-dynamic"; + version = "13.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.1.1.tgz"; + sha512 = "ujHJMhJk93hjLx/SQ67y7xiGh2UDL+toVi3OlorWvnYGgPR26ufyL+J73BA+RAKHSP2WPiXU+/87vSz8r+BEgA=="; + }; + }; + "@angular/platform-server-13.1.1" = { + name = "_at_angular_slash_platform-server"; + packageName = "@angular/platform-server"; + version = "13.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@angular/platform-server/-/platform-server-13.1.1.tgz"; + sha512 = "vzGHv2k9Fv9BKRQOdl6RPqj149KZgQ2IFFnSvjbCCLoZ47WV6fw155t+OTWuMLIPySNrsjzRJSRj04hbK9+8yQ=="; + }; + }; + "@angular/router-13.1.1" = { + name = "_at_angular_slash_router"; + packageName = "@angular/router"; + version = "13.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@angular/router/-/router-13.1.1.tgz"; + sha512 = "rlz5BBgNX+G2vVu2Gb5avx3LL08i7R/xZO7zPwh0HhXz/Vp8XFlWwaqAGb6Hgat772K2uCxF1/JBLQCUBY2MNQ=="; + }; + }; + "@assemblyscript/loader-0.10.1" = { + name = "_at_assemblyscript_slash_loader"; + packageName = "@assemblyscript/loader"; + version = "0.10.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz"; + sha512 = "H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg=="; + }; + }; + "@babel/code-frame-7.16.7" = { + name = "_at_babel_slash_code-frame"; + packageName = "@babel/code-frame"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz"; + sha512 = "iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg=="; + }; + }; + "@babel/compat-data-7.16.4" = { + name = "_at_babel_slash_compat-data"; + packageName = "@babel/compat-data"; + version = "7.16.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz"; + sha512 = "1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q=="; + }; + }; + "@babel/core-7.16.0" = { + name = "_at_babel_slash_core"; + packageName = "@babel/core"; + version = "7.16.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz"; + sha512 = "mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ=="; + }; + }; + "@babel/core-7.8.6" = { + name = "_at_babel_slash_core"; + packageName = "@babel/core"; + version = "7.8.6"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/core/-/core-7.8.6.tgz"; + sha512 = "Sheg7yEJD51YHAvLEV/7Uvw95AeWqYPL3Vk3zGujJKIhJ+8oLw2ALaf3hbucILhKsgSoADOvtKRJuNVdcJkOrg=="; + }; + }; + "@babel/generator-7.16.0" = { + name = "_at_babel_slash_generator"; + packageName = "@babel/generator"; + version = "7.16.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz"; + sha512 = "RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew=="; + }; + }; + "@babel/generator-7.16.8" = { + name = "_at_babel_slash_generator"; + packageName = "@babel/generator"; + version = "7.16.8"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz"; + sha512 = "1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw=="; + }; + }; + "@babel/helper-annotate-as-pure-7.16.0" = { + name = "_at_babel_slash_helper-annotate-as-pure"; + packageName = "@babel/helper-annotate-as-pure"; + version = "7.16.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz"; + sha512 = "ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg=="; + }; + }; + "@babel/helper-annotate-as-pure-7.16.7" = { + name = "_at_babel_slash_helper-annotate-as-pure"; + packageName = "@babel/helper-annotate-as-pure"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz"; + sha512 = "s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw=="; + }; + }; + "@babel/helper-builder-binary-assignment-operator-visitor-7.16.7" = { + name = "_at_babel_slash_helper-builder-binary-assignment-operator-visitor"; + packageName = "@babel/helper-builder-binary-assignment-operator-visitor"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz"; + sha512 = "C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA=="; + }; + }; + "@babel/helper-compilation-targets-7.16.7" = { + name = "_at_babel_slash_helper-compilation-targets"; + packageName = "@babel/helper-compilation-targets"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz"; + sha512 = "mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA=="; + }; + }; + "@babel/helper-create-class-features-plugin-7.16.7" = { + name = "_at_babel_slash_helper-create-class-features-plugin"; + packageName = "@babel/helper-create-class-features-plugin"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.7.tgz"; + sha512 = "kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw=="; + }; + }; + "@babel/helper-create-regexp-features-plugin-7.16.7" = { + name = "_at_babel_slash_helper-create-regexp-features-plugin"; + packageName = "@babel/helper-create-regexp-features-plugin"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz"; + sha512 = "fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g=="; + }; + }; + "@babel/helper-define-polyfill-provider-0.3.0" = { + name = "_at_babel_slash_helper-define-polyfill-provider"; + packageName = "@babel/helper-define-polyfill-provider"; + version = "0.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz"; + sha512 = "7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg=="; + }; + }; + "@babel/helper-environment-visitor-7.16.7" = { + name = "_at_babel_slash_helper-environment-visitor"; + packageName = "@babel/helper-environment-visitor"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz"; + sha512 = "SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag=="; + }; + }; + "@babel/helper-explode-assignable-expression-7.16.7" = { + name = "_at_babel_slash_helper-explode-assignable-expression"; + packageName = "@babel/helper-explode-assignable-expression"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz"; + sha512 = "KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ=="; + }; + }; + "@babel/helper-function-name-7.16.7" = { + name = "_at_babel_slash_helper-function-name"; + packageName = "@babel/helper-function-name"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz"; + sha512 = "QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA=="; + }; + }; + "@babel/helper-get-function-arity-7.16.7" = { + name = "_at_babel_slash_helper-get-function-arity"; + packageName = "@babel/helper-get-function-arity"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz"; + sha512 = "flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw=="; + }; + }; + "@babel/helper-hoist-variables-7.16.7" = { + name = "_at_babel_slash_helper-hoist-variables"; + packageName = "@babel/helper-hoist-variables"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz"; + sha512 = "m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg=="; + }; + }; + "@babel/helper-member-expression-to-functions-7.16.7" = { + name = "_at_babel_slash_helper-member-expression-to-functions"; + packageName = "@babel/helper-member-expression-to-functions"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz"; + sha512 = "VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q=="; + }; + }; + "@babel/helper-module-imports-7.16.7" = { + name = "_at_babel_slash_helper-module-imports"; + packageName = "@babel/helper-module-imports"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz"; + sha512 = "LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg=="; + }; + }; + "@babel/helper-module-transforms-7.16.7" = { + name = "_at_babel_slash_helper-module-transforms"; + packageName = "@babel/helper-module-transforms"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz"; + sha512 = "gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng=="; + }; + }; + "@babel/helper-optimise-call-expression-7.16.7" = { + name = "_at_babel_slash_helper-optimise-call-expression"; + packageName = "@babel/helper-optimise-call-expression"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz"; + sha512 = "EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w=="; + }; + }; + "@babel/helper-plugin-utils-7.16.7" = { + name = "_at_babel_slash_helper-plugin-utils"; + packageName = "@babel/helper-plugin-utils"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz"; + sha512 = "Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA=="; + }; + }; + "@babel/helper-remap-async-to-generator-7.16.8" = { + name = "_at_babel_slash_helper-remap-async-to-generator"; + packageName = "@babel/helper-remap-async-to-generator"; + version = "7.16.8"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz"; + sha512 = "fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw=="; + }; + }; + "@babel/helper-replace-supers-7.16.7" = { + name = "_at_babel_slash_helper-replace-supers"; + packageName = "@babel/helper-replace-supers"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz"; + sha512 = "y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw=="; + }; + }; + "@babel/helper-simple-access-7.16.7" = { + name = "_at_babel_slash_helper-simple-access"; + packageName = "@babel/helper-simple-access"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz"; + sha512 = "ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g=="; + }; + }; + "@babel/helper-skip-transparent-expression-wrappers-7.16.0" = { + name = "_at_babel_slash_helper-skip-transparent-expression-wrappers"; + packageName = "@babel/helper-skip-transparent-expression-wrappers"; + version = "7.16.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz"; + sha512 = "+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw=="; + }; + }; + "@babel/helper-split-export-declaration-7.16.7" = { + name = "_at_babel_slash_helper-split-export-declaration"; + packageName = "@babel/helper-split-export-declaration"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz"; + sha512 = "xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw=="; + }; + }; + "@babel/helper-validator-identifier-7.16.7" = { + name = "_at_babel_slash_helper-validator-identifier"; + packageName = "@babel/helper-validator-identifier"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz"; + sha512 = "hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw=="; + }; + }; + "@babel/helper-validator-option-7.16.7" = { + name = "_at_babel_slash_helper-validator-option"; + packageName = "@babel/helper-validator-option"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz"; + sha512 = "TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ=="; + }; + }; + "@babel/helper-wrap-function-7.16.8" = { + name = "_at_babel_slash_helper-wrap-function"; + packageName = "@babel/helper-wrap-function"; + version = "7.16.8"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz"; + sha512 = "8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw=="; + }; + }; + "@babel/helpers-7.16.7" = { + name = "_at_babel_slash_helpers"; + packageName = "@babel/helpers"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz"; + sha512 = "9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw=="; + }; + }; + "@babel/highlight-7.16.7" = { + name = "_at_babel_slash_highlight"; + packageName = "@babel/highlight"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz"; + sha512 = "aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw=="; + }; + }; + "@babel/parser-7.16.8" = { + name = "_at_babel_slash_parser"; + packageName = "@babel/parser"; + version = "7.16.8"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz"; + sha512 = "i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw=="; + }; + }; + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7" = { + name = "_at_babel_slash_plugin-bugfix-safari-id-destructuring-collision-in-function-expression"; + packageName = "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz"; + sha512 = "anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg=="; + }; + }; + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7" = { + name = "_at_babel_slash_plugin-bugfix-v8-spread-parameters-in-optional-chaining"; + packageName = "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz"; + sha512 = "di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw=="; + }; + }; + "@babel/plugin-proposal-async-generator-functions-7.16.4" = { + name = "_at_babel_slash_plugin-proposal-async-generator-functions"; + packageName = "@babel/plugin-proposal-async-generator-functions"; + version = "7.16.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.4.tgz"; + sha512 = "/CUekqaAaZCQHleSK/9HajvcD/zdnJiKRiuUFq8ITE+0HsPzquf53cpFiqAwl/UfmJbR6n5uGPQSPdrmKOvHHg=="; + }; + }; + "@babel/plugin-proposal-class-properties-7.16.7" = { + name = "_at_babel_slash_plugin-proposal-class-properties"; + packageName = "@babel/plugin-proposal-class-properties"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz"; + sha512 = "IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww=="; + }; + }; + "@babel/plugin-proposal-class-static-block-7.16.7" = { + name = "_at_babel_slash_plugin-proposal-class-static-block"; + packageName = "@babel/plugin-proposal-class-static-block"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz"; + sha512 = "dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw=="; + }; + }; + "@babel/plugin-proposal-dynamic-import-7.16.7" = { + name = "_at_babel_slash_plugin-proposal-dynamic-import"; + packageName = "@babel/plugin-proposal-dynamic-import"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz"; + sha512 = "I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg=="; + }; + }; + "@babel/plugin-proposal-export-namespace-from-7.16.7" = { + name = "_at_babel_slash_plugin-proposal-export-namespace-from"; + packageName = "@babel/plugin-proposal-export-namespace-from"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz"; + sha512 = "ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA=="; + }; + }; + "@babel/plugin-proposal-json-strings-7.16.7" = { + name = "_at_babel_slash_plugin-proposal-json-strings"; + packageName = "@babel/plugin-proposal-json-strings"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz"; + sha512 = "lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ=="; + }; + }; + "@babel/plugin-proposal-logical-assignment-operators-7.16.7" = { + name = "_at_babel_slash_plugin-proposal-logical-assignment-operators"; + packageName = "@babel/plugin-proposal-logical-assignment-operators"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz"; + sha512 = "K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg=="; + }; + }; + "@babel/plugin-proposal-nullish-coalescing-operator-7.16.7" = { + name = "_at_babel_slash_plugin-proposal-nullish-coalescing-operator"; + packageName = "@babel/plugin-proposal-nullish-coalescing-operator"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz"; + sha512 = "aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ=="; + }; + }; + "@babel/plugin-proposal-numeric-separator-7.16.7" = { + name = "_at_babel_slash_plugin-proposal-numeric-separator"; + packageName = "@babel/plugin-proposal-numeric-separator"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz"; + sha512 = "vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw=="; + }; + }; + "@babel/plugin-proposal-object-rest-spread-7.16.7" = { + name = "_at_babel_slash_plugin-proposal-object-rest-spread"; + packageName = "@babel/plugin-proposal-object-rest-spread"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz"; + sha512 = "3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA=="; + }; + }; + "@babel/plugin-proposal-optional-catch-binding-7.16.7" = { + name = "_at_babel_slash_plugin-proposal-optional-catch-binding"; + packageName = "@babel/plugin-proposal-optional-catch-binding"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz"; + sha512 = "eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA=="; + }; + }; + "@babel/plugin-proposal-optional-chaining-7.16.7" = { + name = "_at_babel_slash_plugin-proposal-optional-chaining"; + packageName = "@babel/plugin-proposal-optional-chaining"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz"; + sha512 = "eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA=="; + }; + }; + "@babel/plugin-proposal-private-methods-7.16.7" = { + name = "_at_babel_slash_plugin-proposal-private-methods"; + packageName = "@babel/plugin-proposal-private-methods"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.7.tgz"; + sha512 = "7twV3pzhrRxSwHeIvFE6coPgvo+exNDOiGUMg39o2LiLo1Y+4aKpfkcLGcg1UHonzorCt7SNXnoMyCnnIOA8Sw=="; + }; + }; + "@babel/plugin-proposal-private-property-in-object-7.16.7" = { + name = "_at_babel_slash_plugin-proposal-private-property-in-object"; + packageName = "@babel/plugin-proposal-private-property-in-object"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz"; + sha512 = "rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ=="; + }; + }; + "@babel/plugin-proposal-unicode-property-regex-7.16.7" = { + name = "_at_babel_slash_plugin-proposal-unicode-property-regex"; + packageName = "@babel/plugin-proposal-unicode-property-regex"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz"; + sha512 = "QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg=="; + }; + }; + "@babel/plugin-syntax-async-generators-7.8.4" = { + name = "_at_babel_slash_plugin-syntax-async-generators"; + packageName = "@babel/plugin-syntax-async-generators"; + version = "7.8.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz"; + sha512 = "tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw=="; + }; + }; + "@babel/plugin-syntax-class-properties-7.12.13" = { + name = "_at_babel_slash_plugin-syntax-class-properties"; + packageName = "@babel/plugin-syntax-class-properties"; + version = "7.12.13"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz"; + sha512 = "fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA=="; + }; + }; + "@babel/plugin-syntax-class-static-block-7.14.5" = { + name = "_at_babel_slash_plugin-syntax-class-static-block"; + packageName = "@babel/plugin-syntax-class-static-block"; + version = "7.14.5"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz"; + sha512 = "b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw=="; + }; + }; + "@babel/plugin-syntax-dynamic-import-7.8.3" = { + name = "_at_babel_slash_plugin-syntax-dynamic-import"; + packageName = "@babel/plugin-syntax-dynamic-import"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz"; + sha512 = "5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ=="; + }; + }; + "@babel/plugin-syntax-export-namespace-from-7.8.3" = { + name = "_at_babel_slash_plugin-syntax-export-namespace-from"; + packageName = "@babel/plugin-syntax-export-namespace-from"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz"; + sha512 = "MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q=="; + }; + }; + "@babel/plugin-syntax-json-strings-7.8.3" = { + name = "_at_babel_slash_plugin-syntax-json-strings"; + packageName = "@babel/plugin-syntax-json-strings"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz"; + sha512 = "lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA=="; + }; + }; + "@babel/plugin-syntax-logical-assignment-operators-7.10.4" = { + name = "_at_babel_slash_plugin-syntax-logical-assignment-operators"; + packageName = "@babel/plugin-syntax-logical-assignment-operators"; + version = "7.10.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz"; + sha512 = "d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig=="; + }; + }; + "@babel/plugin-syntax-nullish-coalescing-operator-7.8.3" = { + name = "_at_babel_slash_plugin-syntax-nullish-coalescing-operator"; + packageName = "@babel/plugin-syntax-nullish-coalescing-operator"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz"; + sha512 = "aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ=="; + }; + }; + "@babel/plugin-syntax-numeric-separator-7.10.4" = { + name = "_at_babel_slash_plugin-syntax-numeric-separator"; + packageName = "@babel/plugin-syntax-numeric-separator"; + version = "7.10.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz"; + sha512 = "9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug=="; + }; + }; + "@babel/plugin-syntax-object-rest-spread-7.8.3" = { + name = "_at_babel_slash_plugin-syntax-object-rest-spread"; + packageName = "@babel/plugin-syntax-object-rest-spread"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz"; + sha512 = "XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA=="; + }; + }; + "@babel/plugin-syntax-optional-catch-binding-7.8.3" = { + name = "_at_babel_slash_plugin-syntax-optional-catch-binding"; + packageName = "@babel/plugin-syntax-optional-catch-binding"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz"; + sha512 = "6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q=="; + }; + }; + "@babel/plugin-syntax-optional-chaining-7.8.3" = { + name = "_at_babel_slash_plugin-syntax-optional-chaining"; + packageName = "@babel/plugin-syntax-optional-chaining"; + version = "7.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz"; + sha512 = "KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg=="; + }; + }; + "@babel/plugin-syntax-private-property-in-object-7.14.5" = { + name = "_at_babel_slash_plugin-syntax-private-property-in-object"; + packageName = "@babel/plugin-syntax-private-property-in-object"; + version = "7.14.5"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz"; + sha512 = "0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg=="; + }; + }; + "@babel/plugin-syntax-top-level-await-7.14.5" = { + name = "_at_babel_slash_plugin-syntax-top-level-await"; + packageName = "@babel/plugin-syntax-top-level-await"; + version = "7.14.5"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz"; + sha512 = "hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw=="; + }; + }; + "@babel/plugin-transform-arrow-functions-7.16.7" = { + name = "_at_babel_slash_plugin-transform-arrow-functions"; + packageName = "@babel/plugin-transform-arrow-functions"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz"; + sha512 = "9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ=="; + }; + }; + "@babel/plugin-transform-async-to-generator-7.16.0" = { + name = "_at_babel_slash_plugin-transform-async-to-generator"; + packageName = "@babel/plugin-transform-async-to-generator"; + version = "7.16.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz"; + sha512 = "PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw=="; + }; + }; + "@babel/plugin-transform-block-scoped-functions-7.16.7" = { + name = "_at_babel_slash_plugin-transform-block-scoped-functions"; + packageName = "@babel/plugin-transform-block-scoped-functions"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz"; + sha512 = "JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg=="; + }; + }; + "@babel/plugin-transform-block-scoping-7.16.7" = { + name = "_at_babel_slash_plugin-transform-block-scoping"; + packageName = "@babel/plugin-transform-block-scoping"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz"; + sha512 = "ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ=="; + }; + }; + "@babel/plugin-transform-classes-7.16.7" = { + name = "_at_babel_slash_plugin-transform-classes"; + packageName = "@babel/plugin-transform-classes"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz"; + sha512 = "WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ=="; + }; + }; + "@babel/plugin-transform-computed-properties-7.16.7" = { + name = "_at_babel_slash_plugin-transform-computed-properties"; + packageName = "@babel/plugin-transform-computed-properties"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz"; + sha512 = "gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw=="; + }; + }; + "@babel/plugin-transform-destructuring-7.16.7" = { + name = "_at_babel_slash_plugin-transform-destructuring"; + packageName = "@babel/plugin-transform-destructuring"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz"; + sha512 = "VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A=="; + }; + }; + "@babel/plugin-transform-dotall-regex-7.16.7" = { + name = "_at_babel_slash_plugin-transform-dotall-regex"; + packageName = "@babel/plugin-transform-dotall-regex"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz"; + sha512 = "Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ=="; + }; + }; + "@babel/plugin-transform-duplicate-keys-7.16.7" = { + name = "_at_babel_slash_plugin-transform-duplicate-keys"; + packageName = "@babel/plugin-transform-duplicate-keys"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz"; + sha512 = "03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw=="; + }; + }; + "@babel/plugin-transform-exponentiation-operator-7.16.7" = { + name = "_at_babel_slash_plugin-transform-exponentiation-operator"; + packageName = "@babel/plugin-transform-exponentiation-operator"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz"; + sha512 = "8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA=="; + }; + }; + "@babel/plugin-transform-for-of-7.16.7" = { + name = "_at_babel_slash_plugin-transform-for-of"; + packageName = "@babel/plugin-transform-for-of"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz"; + sha512 = "/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg=="; + }; + }; + "@babel/plugin-transform-function-name-7.16.7" = { + name = "_at_babel_slash_plugin-transform-function-name"; + packageName = "@babel/plugin-transform-function-name"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz"; + sha512 = "SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA=="; + }; + }; + "@babel/plugin-transform-literals-7.16.7" = { + name = "_at_babel_slash_plugin-transform-literals"; + packageName = "@babel/plugin-transform-literals"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz"; + sha512 = "6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ=="; + }; + }; + "@babel/plugin-transform-member-expression-literals-7.16.7" = { + name = "_at_babel_slash_plugin-transform-member-expression-literals"; + packageName = "@babel/plugin-transform-member-expression-literals"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz"; + sha512 = "mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw=="; + }; + }; + "@babel/plugin-transform-modules-amd-7.16.7" = { + name = "_at_babel_slash_plugin-transform-modules-amd"; + packageName = "@babel/plugin-transform-modules-amd"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz"; + sha512 = "KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g=="; + }; + }; + "@babel/plugin-transform-modules-commonjs-7.16.8" = { + name = "_at_babel_slash_plugin-transform-modules-commonjs"; + packageName = "@babel/plugin-transform-modules-commonjs"; + version = "7.16.8"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz"; + sha512 = "oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA=="; + }; + }; + "@babel/plugin-transform-modules-systemjs-7.16.7" = { + name = "_at_babel_slash_plugin-transform-modules-systemjs"; + packageName = "@babel/plugin-transform-modules-systemjs"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz"; + sha512 = "DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw=="; + }; + }; + "@babel/plugin-transform-modules-umd-7.16.7" = { + name = "_at_babel_slash_plugin-transform-modules-umd"; + packageName = "@babel/plugin-transform-modules-umd"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz"; + sha512 = "EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ=="; + }; + }; + "@babel/plugin-transform-named-capturing-groups-regex-7.16.8" = { + name = "_at_babel_slash_plugin-transform-named-capturing-groups-regex"; + packageName = "@babel/plugin-transform-named-capturing-groups-regex"; + version = "7.16.8"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz"; + sha512 = "j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw=="; + }; + }; + "@babel/plugin-transform-new-target-7.16.7" = { + name = "_at_babel_slash_plugin-transform-new-target"; + packageName = "@babel/plugin-transform-new-target"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz"; + sha512 = "xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg=="; + }; + }; + "@babel/plugin-transform-object-super-7.16.7" = { + name = "_at_babel_slash_plugin-transform-object-super"; + packageName = "@babel/plugin-transform-object-super"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz"; + sha512 = "14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw=="; + }; + }; + "@babel/plugin-transform-parameters-7.16.7" = { + name = "_at_babel_slash_plugin-transform-parameters"; + packageName = "@babel/plugin-transform-parameters"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz"; + sha512 = "AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw=="; + }; + }; + "@babel/plugin-transform-property-literals-7.16.7" = { + name = "_at_babel_slash_plugin-transform-property-literals"; + packageName = "@babel/plugin-transform-property-literals"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz"; + sha512 = "z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw=="; + }; + }; + "@babel/plugin-transform-regenerator-7.16.7" = { + name = "_at_babel_slash_plugin-transform-regenerator"; + packageName = "@babel/plugin-transform-regenerator"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz"; + sha512 = "mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q=="; + }; + }; + "@babel/plugin-transform-reserved-words-7.16.7" = { + name = "_at_babel_slash_plugin-transform-reserved-words"; + packageName = "@babel/plugin-transform-reserved-words"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz"; + sha512 = "KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg=="; + }; + }; + "@babel/plugin-transform-runtime-7.16.4" = { + name = "_at_babel_slash_plugin-transform-runtime"; + packageName = "@babel/plugin-transform-runtime"; + version = "7.16.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.4.tgz"; + sha512 = "pru6+yHANMTukMtEZGC4fs7XPwg35v8sj5CIEmE+gEkFljFiVJxEWxx/7ZDkTK+iZRYo1bFXBtfIN95+K3cJ5A=="; + }; + }; + "@babel/plugin-transform-shorthand-properties-7.16.7" = { + name = "_at_babel_slash_plugin-transform-shorthand-properties"; + packageName = "@babel/plugin-transform-shorthand-properties"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz"; + sha512 = "hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg=="; + }; + }; + "@babel/plugin-transform-spread-7.16.7" = { + name = "_at_babel_slash_plugin-transform-spread"; + packageName = "@babel/plugin-transform-spread"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz"; + sha512 = "+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg=="; + }; + }; + "@babel/plugin-transform-sticky-regex-7.16.7" = { + name = "_at_babel_slash_plugin-transform-sticky-regex"; + packageName = "@babel/plugin-transform-sticky-regex"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz"; + sha512 = "NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw=="; + }; + }; + "@babel/plugin-transform-template-literals-7.16.7" = { + name = "_at_babel_slash_plugin-transform-template-literals"; + packageName = "@babel/plugin-transform-template-literals"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz"; + sha512 = "VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA=="; + }; + }; + "@babel/plugin-transform-typeof-symbol-7.16.7" = { + name = "_at_babel_slash_plugin-transform-typeof-symbol"; + packageName = "@babel/plugin-transform-typeof-symbol"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz"; + sha512 = "p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ=="; + }; + }; + "@babel/plugin-transform-unicode-escapes-7.16.7" = { + name = "_at_babel_slash_plugin-transform-unicode-escapes"; + packageName = "@babel/plugin-transform-unicode-escapes"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz"; + sha512 = "TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q=="; + }; + }; + "@babel/plugin-transform-unicode-regex-7.16.7" = { + name = "_at_babel_slash_plugin-transform-unicode-regex"; + packageName = "@babel/plugin-transform-unicode-regex"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz"; + sha512 = "oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q=="; + }; + }; + "@babel/preset-env-7.16.4" = { + name = "_at_babel_slash_preset-env"; + packageName = "@babel/preset-env"; + version = "7.16.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.4.tgz"; + sha512 = "v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA=="; + }; + }; + "@babel/preset-modules-0.1.5" = { + name = "_at_babel_slash_preset-modules"; + packageName = "@babel/preset-modules"; + version = "0.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz"; + sha512 = "A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA=="; + }; + }; + "@babel/runtime-7.16.3" = { + name = "_at_babel_slash_runtime"; + packageName = "@babel/runtime"; + version = "7.16.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz"; + sha512 = "WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ=="; + }; + }; + "@babel/template-7.16.0" = { + name = "_at_babel_slash_template"; + packageName = "@babel/template"; + version = "7.16.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz"; + sha512 = "MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A=="; + }; + }; + "@babel/template-7.16.7" = { + name = "_at_babel_slash_template"; + packageName = "@babel/template"; + version = "7.16.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz"; + sha512 = "I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w=="; + }; + }; + "@babel/traverse-7.16.8" = { + name = "_at_babel_slash_traverse"; + packageName = "@babel/traverse"; + version = "7.16.8"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz"; + sha512 = "xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ=="; + }; + }; + "@babel/types-7.16.8" = { + name = "_at_babel_slash_types"; + packageName = "@babel/types"; + version = "7.16.8"; + src = fetchurl { + url = "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz"; + sha512 = "smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg=="; + }; + }; + "@csstools/convert-colors-1.4.0" = { + name = "_at_csstools_slash_convert-colors"; + packageName = "@csstools/convert-colors"; + version = "1.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz"; + sha512 = "5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw=="; + }; + }; + "@discoveryjs/json-ext-0.5.6" = { + name = "_at_discoveryjs_slash_json-ext"; + packageName = "@discoveryjs/json-ext"; + version = "0.5.6"; + src = fetchurl { + url = "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz"; + sha512 = "ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA=="; + }; + }; + "@fortawesome/angular-fontawesome-0.8.2" = { + name = "_at_fortawesome_slash_angular-fontawesome"; + packageName = "@fortawesome/angular-fontawesome"; + version = "0.8.2"; + src = fetchurl { + url = "https://registry.npmjs.org/@fortawesome/angular-fontawesome/-/angular-fontawesome-0.8.2.tgz"; + sha512 = "K/AiykA4YbHKE6XKEtZ0ZvVRQocUHyk+79HYWIfhGy3teHpzxsUqB/UjDaxivgBd6dF6ihlzgEbgrDMHlGNwGg=="; + }; + }; + "@fortawesome/fontawesome-common-types-0.2.35" = { + name = "_at_fortawesome_slash_fontawesome-common-types"; + packageName = "@fortawesome/fontawesome-common-types"; + version = "0.2.35"; + src = fetchurl { + url = "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.35.tgz"; + sha512 = "IHUfxSEDS9dDGqYwIW7wTN6tn/O8E0n5PcAHz9cAaBoZw6UpG20IG/YM3NNLaGPwPqgjBAFjIURzqoQs3rrtuw=="; + }; + }; + "@fortawesome/fontawesome-svg-core-1.2.35" = { + name = "_at_fortawesome_slash_fontawesome-svg-core"; + packageName = "@fortawesome/fontawesome-svg-core"; + version = "1.2.35"; + src = fetchurl { + url = "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.35.tgz"; + sha512 = "uLEXifXIL7hnh2sNZQrIJWNol7cTVIzwI+4qcBIq9QWaZqUblm0IDrtSqbNg+3SQf8SMGHkiSigD++rHmCHjBg=="; + }; + }; + "@fortawesome/free-solid-svg-icons-5.15.3" = { + name = "_at_fortawesome_slash_free-solid-svg-icons"; + packageName = "@fortawesome/free-solid-svg-icons"; + version = "5.15.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.3.tgz"; + sha512 = "XPeeu1IlGYqz4VWGRAT5ukNMd4VHUEEJ7ysZ7pSSgaEtNvSo+FLurybGJVmiqkQdK50OkSja2bfZXOeyMGRD8Q=="; + }; + }; + "@gar/promisify-1.1.2" = { + name = "_at_gar_slash_promisify"; + packageName = "@gar/promisify"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz"; + sha512 = "82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw=="; + }; + }; + "@goto-bus-stop/common-shake-2.4.0" = { + name = "_at_goto-bus-stop_slash_common-shake"; + packageName = "@goto-bus-stop/common-shake"; + version = "2.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@goto-bus-stop/common-shake/-/common-shake-2.4.0.tgz"; + sha512 = "LO+7v+UbxE3IyAS4Suf/KYB7Zq9DEIHibwDe6Wph4apNEfDyyxP7BSxzRS/Qa9lUH5gsm9eL9nF8EE1E0/nQkQ=="; + }; + }; + "@goto-bus-stop/envify-5.0.0" = { + name = "_at_goto-bus-stop_slash_envify"; + packageName = "@goto-bus-stop/envify"; + version = "5.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@goto-bus-stop/envify/-/envify-5.0.0.tgz"; + sha512 = "xAnxuDWmwQxO8CgVuPTxKuNsKDfwyXXTyAabG4sNoK59H/ZMC7BHxTA/4ehtinsxbcH7/9L65F5VhyNdQfUyqA=="; + }; + }; + "@istanbuljs/load-nyc-config-1.1.0" = { + name = "_at_istanbuljs_slash_load-nyc-config"; + packageName = "@istanbuljs/load-nyc-config"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz"; + sha512 = "VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ=="; + }; + }; + "@istanbuljs/schema-0.1.2" = { + name = "_at_istanbuljs_slash_schema"; + packageName = "@istanbuljs/schema"; + version = "0.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz"; + sha512 = "tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw=="; + }; + }; + "@jridgewell/resolve-uri-1.0.0" = { + name = "_at_jridgewell_slash_resolve-uri"; + packageName = "@jridgewell/resolve-uri"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-1.0.0.tgz"; + sha512 = "9oLAnygRMi8Q5QkYEU4XWK04B+nuoXoxjRvRxgjuChkLZFBja0YPSgdZ7dZtwhncLBcQe/I/E+fLuk5qxcYVJA=="; + }; + }; + "@juggle/resize-observer-3.3.1" = { + name = "_at_juggle_slash_resize-observer"; + packageName = "@juggle/resize-observer"; + version = "3.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.3.1.tgz"; + sha512 = "zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw=="; + }; + }; + "@mempool/mempool.js-2.3.0" = { + name = "_at_mempool_slash_mempool.js"; + packageName = "@mempool/mempool.js"; + version = "2.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@mempool/mempool.js/-/mempool.js-2.3.0.tgz"; + sha512 = "FrN9WjZCEyyLodrTPQxmlWDh8B/UGK0jlKfVNzJxqzQ1IMPo/Hpdws8xwYEcsks5JqsaxbjLwaC3GAtJ6Brd0A=="; + }; + }; + "@ng-bootstrap/ng-bootstrap-11.0.0" = { + name = "_at_ng-bootstrap_slash_ng-bootstrap"; + packageName = "@ng-bootstrap/ng-bootstrap"; + version = "11.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-11.0.0.tgz"; + sha512 = "qDnB0+jbpQ4wjXpM4NPRAtwmgTDUCjGavoeRDZHOvFfYvx/MBf1RTjZEqTJ1Yqq1pKP4BWpzxCgVTunfnpmsjA=="; + }; + }; + "@ngtools/webpack-13.1.2" = { + name = "_at_ngtools_slash_webpack"; + packageName = "@ngtools/webpack"; + version = "13.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.1.2.tgz"; + sha512 = "F/KraxCCUjSn5nWVEQSuyVfnoE9j/bTcpIb+6e38/Hq/saPfsUoNiRjWlTAxCD44vHbMuVkJ/ZRZT6hdICAslw=="; + }; + }; + "@nguniversal/common-11.2.1" = { + name = "_at_nguniversal_slash_common"; + packageName = "@nguniversal/common"; + version = "11.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@nguniversal/common/-/common-11.2.1.tgz"; + sha512 = "2PYo38yBCIE5GdURFj9s5b18bY/SwX3WHmNRoMaR6Aj8uE0j2kVpmyqQgdHTyvf93pgpIbRyo7x1J6MFFXPQAA=="; + }; + }; + "@nguniversal/express-engine-11.2.1" = { + name = "_at_nguniversal_slash_express-engine"; + packageName = "@nguniversal/express-engine"; + version = "11.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@nguniversal/express-engine/-/express-engine-11.2.1.tgz"; + sha512 = "Y2t4qkyeI5xaegZeI1fJDcMUvQ4AZbKxvEibahapEX5ixN7dxq+iB6xKnSIOG+WYaP3l4c6sExhlKo/oxNXMqA=="; + }; + }; + "@nodelib/fs.scandir-2.1.5" = { + name = "_at_nodelib_slash_fs.scandir"; + packageName = "@nodelib/fs.scandir"; + version = "2.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"; + sha512 = "vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="; + }; + }; + "@nodelib/fs.stat-2.0.5" = { + name = "_at_nodelib_slash_fs.stat"; + packageName = "@nodelib/fs.stat"; + version = "2.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"; + sha512 = "RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="; + }; + }; + "@nodelib/fs.walk-1.2.8" = { + name = "_at_nodelib_slash_fs.walk"; + packageName = "@nodelib/fs.walk"; + version = "1.2.8"; + src = fetchurl { + url = "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"; + sha512 = "oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="; + }; + }; + "@npmcli/fs-1.0.0" = { + name = "_at_npmcli_slash_fs"; + packageName = "@npmcli/fs"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz"; + sha512 = "8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ=="; + }; + }; + "@npmcli/git-2.1.0" = { + name = "_at_npmcli_slash_git"; + packageName = "@npmcli/git"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz"; + sha512 = "/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw=="; + }; + }; + "@npmcli/installed-package-contents-1.0.7" = { + name = "_at_npmcli_slash_installed-package-contents"; + packageName = "@npmcli/installed-package-contents"; + version = "1.0.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz"; + sha512 = "9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw=="; + }; + }; + "@npmcli/move-file-1.1.2" = { + name = "_at_npmcli_slash_move-file"; + packageName = "@npmcli/move-file"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz"; + sha512 = "1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg=="; + }; + }; + "@npmcli/node-gyp-1.0.3" = { + name = "_at_npmcli_slash_node-gyp"; + packageName = "@npmcli/node-gyp"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz"; + sha512 = "fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA=="; + }; + }; + "@npmcli/promise-spawn-1.3.2" = { + name = "_at_npmcli_slash_promise-spawn"; + packageName = "@npmcli/promise-spawn"; + version = "1.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz"; + sha512 = "QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg=="; + }; + }; + "@npmcli/run-script-2.0.0" = { + name = "_at_npmcli_slash_run-script"; + packageName = "@npmcli/run-script"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@npmcli/run-script/-/run-script-2.0.0.tgz"; + sha512 = "fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig=="; + }; + }; + "@scarf/scarf-1.1.0" = { + name = "_at_scarf_slash_scarf"; + packageName = "@scarf/scarf"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.1.0.tgz"; + sha512 = "b2iE8kjjzzUo2WZ0xuE2N77kfnTds7ClrDxcz3Atz7h2XrNVoAPUoT75i7CY0st5x++70V91Y+c6RpBX9MX7Jg=="; + }; + }; + "@schematics/angular-13.0.4" = { + name = "_at_schematics_slash_angular"; + packageName = "@schematics/angular"; + version = "13.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/@schematics/angular/-/angular-13.0.4.tgz"; + sha512 = "P9F5c8ApLbEyfNO4TZNsTyAdrtOjwIhrM/P+eEC4/x6nklWlEFE6TGMYTNjiK/RRhkbX1tBs8gcdJLYxtEqPSg=="; + }; + }; + "@tootallnate/once-1.1.2" = { + name = "_at_tootallnate_slash_once"; + packageName = "@tootallnate/once"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz"; + sha512 = "RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="; + }; + }; + "@types/component-emitter-1.2.10" = { + name = "_at_types_slash_component-emitter"; + packageName = "@types/component-emitter"; + version = "1.2.10"; + src = fetchurl { + url = "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz"; + sha512 = "bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg=="; + }; + }; + "@types/cookie-0.4.1" = { + name = "_at_types_slash_cookie"; + packageName = "@types/cookie"; + version = "0.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz"; + sha512 = "XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="; + }; + }; + "@types/cors-2.8.12" = { + name = "_at_types_slash_cors"; + packageName = "@types/cors"; + version = "2.8.12"; + src = fetchurl { + url = "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz"; + sha512 = "vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw=="; + }; + }; + "@types/eslint-7.28.0" = { + name = "_at_types_slash_eslint"; + packageName = "@types/eslint"; + version = "7.28.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz"; + sha512 = "07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A=="; + }; + }; + "@types/eslint-scope-3.7.1" = { + name = "_at_types_slash_eslint-scope"; + packageName = "@types/eslint-scope"; + version = "3.7.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz"; + sha512 = "SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g=="; + }; + }; + "@types/estree-0.0.50" = { + name = "_at_types_slash_estree"; + packageName = "@types/estree"; + version = "0.0.50"; + src = fetchurl { + url = "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz"; + sha512 = "C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw=="; + }; + }; + "@types/http-proxy-1.17.7" = { + name = "_at_types_slash_http-proxy"; + packageName = "@types/http-proxy"; + version = "1.17.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.7.tgz"; + sha512 = "9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w=="; + }; + }; + "@types/json-schema-7.0.9" = { + name = "_at_types_slash_json-schema"; + packageName = "@types/json-schema"; + version = "7.0.9"; + src = fetchurl { + url = "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz"; + sha512 = "qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ=="; + }; + }; + "@types/node-12.19.7" = { + name = "_at_types_slash_node"; + packageName = "@types/node"; + version = "12.19.7"; + src = fetchurl { + url = "https://registry.npmjs.org/@types/node/-/node-12.19.7.tgz"; + sha512 = "zvjOU1g4CpPilbTDUATnZCUb/6lARMRAqzT7ILwl1P3YvU2leEcZ2+fw9+Jrw/paXB1CgQyXTrN4hWDtqT9O2A=="; + }; + }; + "@types/parse-json-4.0.0" = { + name = "_at_types_slash_parse-json"; + packageName = "@types/parse-json"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz"; + sha512 = "//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="; + }; + }; + "@types/qrcode-1.4.1" = { + name = "_at_types_slash_qrcode"; + packageName = "@types/qrcode"; + version = "1.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.4.1.tgz"; + sha512 = "vxMyr7JM7tYPxu8vUE83NiosWX5DZieCyYeJRoOIg0pAkyofCBzknJ2ycUZkPGDFis2RS8GN/BeJLnRnAPxeCA=="; + }; + }; + "@types/retry-0.12.1" = { + name = "_at_types_slash_retry"; + packageName = "@types/retry"; + version = "0.12.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz"; + sha512 = "xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g=="; + }; + }; + "@webassemblyjs/ast-1.11.1" = { + name = "_at_webassemblyjs_slash_ast"; + packageName = "@webassemblyjs/ast"; + version = "1.11.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz"; + sha512 = "ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw=="; + }; + }; + "@webassemblyjs/floating-point-hex-parser-1.11.1" = { + name = "_at_webassemblyjs_slash_floating-point-hex-parser"; + packageName = "@webassemblyjs/floating-point-hex-parser"; + version = "1.11.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz"; + sha512 = "iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ=="; + }; + }; + "@webassemblyjs/helper-api-error-1.11.1" = { + name = "_at_webassemblyjs_slash_helper-api-error"; + packageName = "@webassemblyjs/helper-api-error"; + version = "1.11.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz"; + sha512 = "RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg=="; + }; + }; + "@webassemblyjs/helper-buffer-1.11.1" = { + name = "_at_webassemblyjs_slash_helper-buffer"; + packageName = "@webassemblyjs/helper-buffer"; + version = "1.11.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz"; + sha512 = "gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA=="; + }; + }; + "@webassemblyjs/helper-numbers-1.11.1" = { + name = "_at_webassemblyjs_slash_helper-numbers"; + packageName = "@webassemblyjs/helper-numbers"; + version = "1.11.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz"; + sha512 = "vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ=="; + }; + }; + "@webassemblyjs/helper-wasm-bytecode-1.11.1" = { + name = "_at_webassemblyjs_slash_helper-wasm-bytecode"; + packageName = "@webassemblyjs/helper-wasm-bytecode"; + version = "1.11.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz"; + sha512 = "PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q=="; + }; + }; + "@webassemblyjs/helper-wasm-section-1.11.1" = { + name = "_at_webassemblyjs_slash_helper-wasm-section"; + packageName = "@webassemblyjs/helper-wasm-section"; + version = "1.11.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz"; + sha512 = "10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg=="; + }; + }; + "@webassemblyjs/ieee754-1.11.1" = { + name = "_at_webassemblyjs_slash_ieee754"; + packageName = "@webassemblyjs/ieee754"; + version = "1.11.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz"; + sha512 = "hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ=="; + }; + }; + "@webassemblyjs/leb128-1.11.1" = { + name = "_at_webassemblyjs_slash_leb128"; + packageName = "@webassemblyjs/leb128"; + version = "1.11.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz"; + sha512 = "BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw=="; + }; + }; + "@webassemblyjs/utf8-1.11.1" = { + name = "_at_webassemblyjs_slash_utf8"; + packageName = "@webassemblyjs/utf8"; + version = "1.11.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz"; + sha512 = "9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ=="; + }; + }; + "@webassemblyjs/wasm-edit-1.11.1" = { + name = "_at_webassemblyjs_slash_wasm-edit"; + packageName = "@webassemblyjs/wasm-edit"; + version = "1.11.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz"; + sha512 = "g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA=="; + }; + }; + "@webassemblyjs/wasm-gen-1.11.1" = { + name = "_at_webassemblyjs_slash_wasm-gen"; + packageName = "@webassemblyjs/wasm-gen"; + version = "1.11.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz"; + sha512 = "F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA=="; + }; + }; + "@webassemblyjs/wasm-opt-1.11.1" = { + name = "_at_webassemblyjs_slash_wasm-opt"; + packageName = "@webassemblyjs/wasm-opt"; + version = "1.11.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz"; + sha512 = "VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw=="; + }; + }; + "@webassemblyjs/wasm-parser-1.11.1" = { + name = "_at_webassemblyjs_slash_wasm-parser"; + packageName = "@webassemblyjs/wasm-parser"; + version = "1.11.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz"; + sha512 = "rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA=="; + }; + }; + "@webassemblyjs/wast-printer-1.11.1" = { + name = "_at_webassemblyjs_slash_wast-printer"; + packageName = "@webassemblyjs/wast-printer"; + version = "1.11.1"; + src = fetchurl { + url = "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz"; + sha512 = "IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg=="; + }; + }; + "@xtuc/ieee754-1.2.0" = { + name = "_at_xtuc_slash_ieee754"; + packageName = "@xtuc/ieee754"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz"; + sha512 = "DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="; + }; + }; + "@xtuc/long-4.2.2" = { + name = "_at_xtuc_slash_long"; + packageName = "@xtuc/long"; + version = "4.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz"; + sha512 = "NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="; + }; + }; + "@yarnpkg/lockfile-1.1.0" = { + name = "_at_yarnpkg_slash_lockfile"; + packageName = "@yarnpkg/lockfile"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz"; + sha512 = "GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ=="; + }; + }; + "JSONStream-1.3.5" = { + name = "JSONStream"; + packageName = "JSONStream"; + version = "1.3.5"; + src = fetchurl { + url = "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz"; + sha512 = "E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ=="; + }; + }; + "abab-2.0.5" = { + name = "abab"; + packageName = "abab"; + version = "2.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz"; + sha512 = "9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q=="; + }; + }; + "abbrev-1.1.1" = { + name = "abbrev"; + packageName = "abbrev"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz"; + sha512 = "nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="; + }; + }; + "accepts-1.3.7" = { + name = "accepts"; + packageName = "accepts"; + version = "1.3.7"; + src = fetchurl { + url = "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz"; + sha512 = "Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA=="; + }; + }; + "acorn-5.7.4" = { + name = "acorn"; + packageName = "acorn"; + version = "5.7.4"; + src = fetchurl { + url = "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz"; + sha512 = "1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg=="; + }; + }; + "acorn-7.4.1" = { + name = "acorn"; + packageName = "acorn"; + version = "7.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz"; + sha512 = "nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="; + }; + }; + "acorn-8.5.0" = { + name = "acorn"; + packageName = "acorn"; + version = "8.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz"; + sha512 = "yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q=="; + }; + }; + "acorn-import-assertions-1.7.6" = { + name = "acorn-import-assertions"; + packageName = "acorn-import-assertions"; + version = "1.7.6"; + src = fetchurl { + url = "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.7.6.tgz"; + sha512 = "FlVvVFA1TX6l3lp8VjDnYYq7R1nyW6x3svAt4nDgrWQ9SBaSh9CnbwgSUTasgfNfOG5HlM1ehugCvM+hjo56LA=="; + }; + }; + "acorn-node-1.8.2" = { + name = "acorn-node"; + packageName = "acorn-node"; + version = "1.8.2"; + src = fetchurl { + url = "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz"; + sha512 = "8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A=="; + }; + }; + "acorn-node-2.0.1" = { + name = "acorn-node"; + packageName = "acorn-node"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/acorn-node/-/acorn-node-2.0.1.tgz"; + sha512 = "VLR5sHqjk+8c5hrKeP2fWaIHb8eewsoxnZ8r2qpwRHXMHuC7KyOPflnOx9dLssVQUurzJ7rO0OzIFjHcndafWw=="; + }; + }; + "acorn-walk-7.2.0" = { + name = "acorn-walk"; + packageName = "acorn-walk"; + version = "7.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz"; + sha512 = "OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA=="; + }; + }; + "adjust-sourcemap-loader-4.0.0" = { + name = "adjust-sourcemap-loader"; + packageName = "adjust-sourcemap-loader"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz"; + sha512 = "OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A=="; + }; + }; + "agent-base-6.0.2" = { + name = "agent-base"; + packageName = "agent-base"; + version = "6.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz"; + sha512 = "RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="; + }; + }; + "agentkeepalive-4.1.4" = { + name = "agentkeepalive"; + packageName = "agentkeepalive"; + version = "4.1.4"; + src = fetchurl { + url = "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz"; + sha512 = "+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ=="; + }; + }; + "aggregate-error-3.1.0" = { + name = "aggregate-error"; + packageName = "aggregate-error"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz"; + sha512 = "4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA=="; + }; + }; + "ajv-6.12.6" = { + name = "ajv"; + packageName = "ajv"; + version = "6.12.6"; + src = fetchurl { + url = "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"; + sha512 = "j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="; + }; + }; + "ajv-8.6.3" = { + name = "ajv"; + packageName = "ajv"; + version = "8.6.3"; + src = fetchurl { + url = "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz"; + sha512 = "SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw=="; + }; + }; + "ajv-8.8.2" = { + name = "ajv"; + packageName = "ajv"; + version = "8.8.2"; + src = fetchurl { + url = "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz"; + sha512 = "x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw=="; + }; + }; + "ajv-formats-2.1.1" = { + name = "ajv-formats"; + packageName = "ajv-formats"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz"; + sha512 = "Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA=="; + }; + }; + "ajv-keywords-3.5.2" = { + name = "ajv-keywords"; + packageName = "ajv-keywords"; + version = "3.5.2"; + src = fetchurl { + url = "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz"; + sha512 = "5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="; + }; + }; + "ajv-keywords-5.1.0" = { + name = "ajv-keywords"; + packageName = "ajv-keywords"; + version = "5.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz"; + sha512 = "YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw=="; + }; + }; + "amdefine-1.0.1" = { + name = "amdefine"; + packageName = "amdefine"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz"; + sha1 = "4a5282ac164729e93619bcfd3ad151f817ce91f5"; + }; + }; + "ansi-colors-4.1.1" = { + name = "ansi-colors"; + packageName = "ansi-colors"; + version = "4.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz"; + sha512 = "JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA=="; + }; + }; + "ansi-escapes-4.3.1" = { + name = "ansi-escapes"; + packageName = "ansi-escapes"; + version = "4.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz"; + sha512 = "JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA=="; + }; + }; + "ansi-html-community-0.0.8" = { + name = "ansi-html-community"; + packageName = "ansi-html-community"; + version = "0.0.8"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz"; + sha512 = "1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw=="; + }; + }; + "ansi-regex-2.1.1" = { + name = "ansi-regex"; + packageName = "ansi-regex"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz"; + sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df"; + }; + }; + "ansi-regex-5.0.1" = { + name = "ansi-regex"; + packageName = "ansi-regex"; + version = "5.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz"; + sha512 = "quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="; + }; + }; + "ansi-regex-6.0.1" = { + name = "ansi-regex"; + packageName = "ansi-regex"; + version = "6.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz"; + sha512 = "n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA=="; + }; + }; + "ansi-styles-2.2.1" = { + name = "ansi-styles"; + packageName = "ansi-styles"; + version = "2.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz"; + sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe"; + }; + }; + "ansi-styles-3.2.1" = { + name = "ansi-styles"; + packageName = "ansi-styles"; + version = "3.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz"; + sha512 = "VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="; + }; + }; + "ansi-styles-4.3.0" = { + name = "ansi-styles"; + packageName = "ansi-styles"; + version = "4.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"; + sha512 = "zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="; + }; + }; + "anymatch-3.1.2" = { + name = "anymatch"; + packageName = "anymatch"; + version = "3.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz"; + sha512 = "P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg=="; + }; + }; + "aproba-2.0.0" = { + name = "aproba"; + packageName = "aproba"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz"; + sha512 = "lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ=="; + }; + }; + "are-we-there-yet-2.0.0" = { + name = "are-we-there-yet"; + packageName = "are-we-there-yet"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz"; + sha512 = "Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw=="; + }; + }; + "argparse-1.0.10" = { + name = "argparse"; + packageName = "argparse"; + version = "1.0.10"; + src = fetchurl { + url = "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz"; + sha512 = "o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="; + }; + }; + "array-filter-1.0.0" = { + name = "array-filter"; + packageName = "array-filter"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz"; + sha1 = "baf79e62e6ef4c2a4c0b831232daffec251f9d83"; + }; + }; + "array-flatten-1.1.1" = { + name = "array-flatten"; + packageName = "array-flatten"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz"; + sha1 = "9a5f699051b1e7073328f2a008968b64ea2955d2"; + }; + }; + "array-flatten-2.1.2" = { + name = "array-flatten"; + packageName = "array-flatten"; + version = "2.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz"; + sha512 = "hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ=="; + }; + }; + "array-from-2.1.1" = { + name = "array-from"; + packageName = "array-from"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz"; + sha1 = "cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195"; + }; + }; + "array-union-2.1.0" = { + name = "array-union"; + packageName = "array-union"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz"; + sha512 = "HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="; + }; + }; + "array-union-3.0.1" = { + name = "array-union"; + packageName = "array-union"; + version = "3.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz"; + sha512 = "1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw=="; + }; + }; + "asn1-0.2.4" = { + name = "asn1"; + packageName = "asn1"; + version = "0.2.4"; + src = fetchurl { + url = "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz"; + sha512 = "jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg=="; + }; + }; + "asn1.js-5.4.1" = { + name = "asn1.js"; + packageName = "asn1.js"; + version = "5.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz"; + sha512 = "+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA=="; + }; + }; + "assert-1.5.0" = { + name = "assert"; + packageName = "assert"; + version = "1.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz"; + sha512 = "EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA=="; + }; + }; + "assert-plus-1.0.0" = { + name = "assert-plus"; + packageName = "assert-plus"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz"; + sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"; + }; + }; + "async-2.6.3" = { + name = "async"; + packageName = "async"; + version = "2.6.3"; + src = fetchurl { + url = "https://registry.npmjs.org/async/-/async-2.6.3.tgz"; + sha512 = "zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg=="; + }; + }; + "asynckit-0.4.0" = { + name = "asynckit"; + packageName = "asynckit"; + version = "0.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"; + sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"; + }; + }; + "atob-2.1.2" = { + name = "atob"; + packageName = "atob"; + version = "2.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz"; + sha512 = "Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="; + }; + }; + "autoprefixer-9.8.8" = { + name = "autoprefixer"; + packageName = "autoprefixer"; + version = "9.8.8"; + src = fetchurl { + url = "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz"; + sha512 = "eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA=="; + }; + }; + "available-typed-arrays-1.0.2" = { + name = "available-typed-arrays"; + packageName = "available-typed-arrays"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz"; + sha512 = "XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ=="; + }; + }; + "aws-sign2-0.7.0" = { + name = "aws-sign2"; + packageName = "aws-sign2"; + version = "0.7.0"; + src = fetchurl { + url = "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz"; + sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"; + }; + }; + "aws4-1.11.0" = { + name = "aws4"; + packageName = "aws4"; + version = "1.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz"; + sha512 = "xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="; + }; + }; + "axios-0.21.4" = { + name = "axios"; + packageName = "axios"; + version = "0.21.4"; + src = fetchurl { + url = "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz"; + sha512 = "ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg=="; + }; + }; + "axios-0.24.0" = { + name = "axios"; + packageName = "axios"; + version = "0.24.0"; + src = fetchurl { + url = "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz"; + sha512 = "Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA=="; + }; + }; + "babel-loader-8.2.3" = { + name = "babel-loader"; + packageName = "babel-loader"; + version = "8.2.3"; + src = fetchurl { + url = "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz"; + sha512 = "n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw=="; + }; + }; + "babel-plugin-dynamic-import-node-2.3.3" = { + name = "babel-plugin-dynamic-import-node"; + packageName = "babel-plugin-dynamic-import-node"; + version = "2.3.3"; + src = fetchurl { + url = "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz"; + sha512 = "jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ=="; + }; + }; + "babel-plugin-istanbul-6.1.1" = { + name = "babel-plugin-istanbul"; + packageName = "babel-plugin-istanbul"; + version = "6.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz"; + sha512 = "Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA=="; + }; + }; + "babel-plugin-polyfill-corejs2-0.3.0" = { + name = "babel-plugin-polyfill-corejs2"; + packageName = "babel-plugin-polyfill-corejs2"; + version = "0.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz"; + sha512 = "wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA=="; + }; + }; + "babel-plugin-polyfill-corejs3-0.4.0" = { + name = "babel-plugin-polyfill-corejs3"; + packageName = "babel-plugin-polyfill-corejs3"; + version = "0.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz"; + sha512 = "YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw=="; + }; + }; + "babel-plugin-polyfill-regenerator-0.3.0" = { + name = "babel-plugin-polyfill-regenerator"; + packageName = "babel-plugin-polyfill-regenerator"; + version = "0.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz"; + sha512 = "dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg=="; + }; + }; + "balanced-match-1.0.0" = { + name = "balanced-match"; + packageName = "balanced-match"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz"; + sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767"; + }; + }; + "base64-arraybuffer-0.1.4" = { + name = "base64-arraybuffer"; + packageName = "base64-arraybuffer"; + version = "0.1.4"; + src = fetchurl { + url = "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz"; + sha1 = "9818c79e059b1355f97e0428a017c838e90ba812"; + }; + }; + "base64-js-1.5.1" = { + name = "base64-js"; + packageName = "base64-js"; + version = "1.5.1"; + src = fetchurl { + url = "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz"; + sha512 = "AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="; + }; + }; + "base64id-2.0.0" = { + name = "base64id"; + packageName = "base64id"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz"; + sha512 = "lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="; + }; + }; + "batch-0.6.1" = { + name = "batch"; + packageName = "batch"; + version = "0.6.1"; + src = fetchurl { + url = "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz"; + sha1 = "dc34314f4e679318093fc760272525f94bf25c16"; + }; + }; + "bcrypt-pbkdf-1.0.2" = { + name = "bcrypt-pbkdf"; + packageName = "bcrypt-pbkdf"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz"; + sha1 = "a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"; + }; + }; + "big.js-5.2.2" = { + name = "big.js"; + packageName = "big.js"; + version = "5.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz"; + sha512 = "vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="; + }; + }; + "binary-extensions-2.1.0" = { + name = "binary-extensions"; + packageName = "binary-extensions"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz"; + sha512 = "1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ=="; + }; + }; + "bl-4.1.0" = { + name = "bl"; + packageName = "bl"; + version = "4.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz"; + sha512 = "1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="; + }; + }; + "bn.js-4.12.0" = { + name = "bn.js"; + packageName = "bn.js"; + version = "4.12.0"; + src = fetchurl { + url = "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz"; + sha512 = "c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="; + }; + }; + "bn.js-5.2.0" = { + name = "bn.js"; + packageName = "bn.js"; + version = "5.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz"; + sha512 = "D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw=="; + }; + }; + "body-parser-1.19.0" = { + name = "body-parser"; + packageName = "body-parser"; + version = "1.19.0"; + src = fetchurl { + url = "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz"; + sha512 = "dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw=="; + }; + }; + "bonjour-3.5.0" = { + name = "bonjour"; + packageName = "bonjour"; + version = "3.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz"; + sha1 = "8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"; + }; + }; + "boolbase-1.0.0" = { + name = "boolbase"; + packageName = "boolbase"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz"; + sha1 = "68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"; + }; + }; + "bootstrap-4.5.0" = { + name = "bootstrap"; + packageName = "bootstrap"; + version = "4.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/bootstrap/-/bootstrap-4.5.0.tgz"; + sha512 = "Z93QoXvodoVslA+PWNdk23Hze4RBYIkpb5h8I2HY2Tu2h7A0LpAgLcyrhrSUyo2/Oxm2l1fRZPs1e5hnxnliXA=="; + }; + }; + "brace-expansion-1.1.11" = { + name = "brace-expansion"; + packageName = "brace-expansion"; + version = "1.1.11"; + src = fetchurl { + url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"; + sha512 = "iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="; + }; + }; + "braces-3.0.2" = { + name = "braces"; + packageName = "braces"; + version = "3.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz"; + sha512 = "b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A=="; + }; + }; + "brorand-1.1.0" = { + name = "brorand"; + packageName = "brorand"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz"; + sha1 = "12c25efe40a45e3c323eb8675a0a0ce57b22371f"; + }; + }; + "browser-pack-6.1.0" = { + name = "browser-pack"; + packageName = "browser-pack"; + version = "6.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz"; + sha512 = "erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA=="; + }; + }; + "browser-pack-flat-3.4.2" = { + name = "browser-pack-flat"; + packageName = "browser-pack-flat"; + version = "3.4.2"; + src = fetchurl { + url = "https://registry.npmjs.org/browser-pack-flat/-/browser-pack-flat-3.4.2.tgz"; + sha512 = "TrUo6n2fGSOCYFAKkt/EkgenytAuuCI88fmXFA60aNFVHvz3CZEBTXYSvvXVpU6xpjM8lj/6vkC6Exn8KPjtPw=="; + }; + }; + "browser-process-hrtime-0.1.3" = { + name = "browser-process-hrtime"; + packageName = "browser-process-hrtime"; + version = "0.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz"; + sha512 = "bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw=="; + }; + }; + "browser-resolve-2.0.0" = { + name = "browser-resolve"; + packageName = "browser-resolve"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz"; + sha512 = "7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ=="; + }; + }; + "browser-unpack-1.4.2" = { + name = "browser-unpack"; + packageName = "browser-unpack"; + version = "1.4.2"; + src = fetchurl { + url = "https://registry.npmjs.org/browser-unpack/-/browser-unpack-1.4.2.tgz"; + sha512 = "uHkiY4bmXjjBBWoKH1aRnEGTQxUUCCcVtoJfH9w1lmGGjETY4u93Zk+GRYkCE/SRMrdoMTINQ/1/manr/3aMVA=="; + }; + }; + "browserify-17.0.0" = { + name = "browserify"; + packageName = "browserify"; + version = "17.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz"; + sha512 = "SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w=="; + }; + }; + "browserify-aes-1.2.0" = { + name = "browserify-aes"; + packageName = "browserify-aes"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz"; + sha512 = "+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA=="; + }; + }; + "browserify-cipher-1.0.1" = { + name = "browserify-cipher"; + packageName = "browserify-cipher"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz"; + sha512 = "sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w=="; + }; + }; + "browserify-des-1.0.2" = { + name = "browserify-des"; + packageName = "browserify-des"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz"; + sha512 = "BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A=="; + }; + }; + "browserify-rsa-4.1.0" = { + name = "browserify-rsa"; + packageName = "browserify-rsa"; + version = "4.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz"; + sha512 = "AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog=="; + }; + }; + "browserify-sign-4.2.1" = { + name = "browserify-sign"; + packageName = "browserify-sign"; + version = "4.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz"; + sha512 = "/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg=="; + }; + }; + "browserify-zlib-0.2.0" = { + name = "browserify-zlib"; + packageName = "browserify-zlib"; + version = "0.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz"; + sha512 = "Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA=="; + }; + }; + "browserslist-4.19.1" = { + name = "browserslist"; + packageName = "browserslist"; + version = "4.19.1"; + src = fetchurl { + url = "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz"; + sha512 = "u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A=="; + }; + }; + "buffer-5.2.1" = { + name = "buffer"; + packageName = "buffer"; + version = "5.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz"; + sha512 = "c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg=="; + }; + }; + "buffer-5.7.1" = { + name = "buffer"; + packageName = "buffer"; + version = "5.7.1"; + src = fetchurl { + url = "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz"; + sha512 = "EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="; + }; + }; + "buffer-from-1.1.1" = { + name = "buffer-from"; + packageName = "buffer-from"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz"; + sha512 = "MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="; + }; + }; + "buffer-indexof-1.1.1" = { + name = "buffer-indexof"; + packageName = "buffer-indexof"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz"; + sha512 = "4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g=="; + }; + }; + "buffer-xor-1.0.3" = { + name = "buffer-xor"; + packageName = "buffer-xor"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz"; + sha1 = "26e61ed1422fb70dd42e6e36729ed51d855fe8d9"; + }; + }; + "builtin-status-codes-3.0.0" = { + name = "builtin-status-codes"; + packageName = "builtin-status-codes"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz"; + sha1 = "85982878e21b98e1c66425e03d0174788f569ee8"; + }; + }; + "builtins-1.0.3" = { + name = "builtins"; + packageName = "builtins"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz"; + sha1 = "cb94faeb61c8696451db36534e1422f94f0aee88"; + }; + }; + "bundle-collapser-1.4.0" = { + name = "bundle-collapser"; + packageName = "bundle-collapser"; + version = "1.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/bundle-collapser/-/bundle-collapser-1.4.0.tgz"; + sha512 = "Gd3K3+3KI1Utuk+gwAvuOVOjT/2XLGL8tU6FwDKk04LlOZkYfT0pwQllsG1Dv8RRhgcjNxZSDmmSXb0AOkwSwg=="; + }; + }; + "bytes-3.0.0" = { + name = "bytes"; + packageName = "bytes"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz"; + sha1 = "d32815404d689699f85a4ea4fa8755dd13a96048"; + }; + }; + "bytes-3.1.0" = { + name = "bytes"; + packageName = "bytes"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz"; + sha512 = "zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="; + }; + }; + "cacache-15.3.0" = { + name = "cacache"; + packageName = "cacache"; + version = "15.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz"; + sha512 = "VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ=="; + }; + }; + "cached-path-relative-1.0.2" = { + name = "cached-path-relative"; + packageName = "cached-path-relative"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz"; + sha512 = "5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg=="; + }; + }; + "call-bind-1.0.2" = { + name = "call-bind"; + packageName = "call-bind"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz"; + sha512 = "7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA=="; + }; + }; + "call-matcher-2.0.0" = { + name = "call-matcher"; + packageName = "call-matcher"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/call-matcher/-/call-matcher-2.0.0.tgz"; + sha512 = "CIDC5wZZfZ2VjZu849WQckS58Z3pJXFfRaSjNjgo/q3in5zxkhTwVL83vttgtmvyLG7TuDlLlBya7SKP6CjDIA=="; + }; + }; + "callsites-3.1.0" = { + name = "callsites"; + packageName = "callsites"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz"; + sha512 = "P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="; + }; + }; + "camelcase-5.3.1" = { + name = "camelcase"; + packageName = "camelcase"; + version = "5.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz"; + sha512 = "L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="; + }; + }; + "caniuse-lite-1.0.30001298" = { + name = "caniuse-lite"; + packageName = "caniuse-lite"; + version = "1.0.30001298"; + src = fetchurl { + url = "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001298.tgz"; + sha512 = "AcKqikjMLlvghZL/vfTHorlQsLDhGRalYf1+GmWCf5SCMziSGjRYQW/JEksj14NaYHIR6KIhrFAy0HV5C25UzQ=="; + }; + }; + "canonical-path-1.0.0" = { + name = "canonical-path"; + packageName = "canonical-path"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz"; + sha512 = "feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg=="; + }; + }; + "caseless-0.12.0" = { + name = "caseless"; + packageName = "caseless"; + version = "0.12.0"; + src = fetchurl { + url = "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz"; + sha1 = "1b681c21ff84033c826543090689420d187151dc"; + }; + }; + "chalk-1.1.3" = { + name = "chalk"; + packageName = "chalk"; + version = "1.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz"; + sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98"; + }; + }; + "chalk-2.4.2" = { + name = "chalk"; + packageName = "chalk"; + version = "2.4.2"; + src = fetchurl { + url = "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"; + sha512 = "Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="; + }; + }; + "chalk-4.1.0" = { + name = "chalk"; + packageName = "chalk"; + version = "4.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz"; + sha512 = "qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A=="; + }; + }; + "chalk-4.1.2" = { + name = "chalk"; + packageName = "chalk"; + version = "4.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"; + sha512 = "oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="; + }; + }; + "chardet-0.7.0" = { + name = "chardet"; + packageName = "chardet"; + version = "0.7.0"; + src = fetchurl { + url = "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz"; + sha512 = "mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="; + }; + }; + "chokidar-3.5.2" = { + name = "chokidar"; + packageName = "chokidar"; + version = "3.5.2"; + src = fetchurl { + url = "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz"; + sha512 = "ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ=="; + }; + }; + "chownr-2.0.0" = { + name = "chownr"; + packageName = "chownr"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz"; + sha512 = "bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="; + }; + }; + "chrome-trace-event-1.0.3" = { + name = "chrome-trace-event"; + packageName = "chrome-trace-event"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz"; + sha512 = "p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg=="; + }; + }; + "cipher-base-1.0.4" = { + name = "cipher-base"; + packageName = "cipher-base"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz"; + sha512 = "Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q=="; + }; + }; + "circular-dependency-plugin-5.2.2" = { + name = "circular-dependency-plugin"; + packageName = "circular-dependency-plugin"; + version = "5.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz"; + sha512 = "g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ=="; + }; + }; + "clean-stack-2.2.0" = { + name = "clean-stack"; + packageName = "clean-stack"; + version = "2.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz"; + sha512 = "4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="; + }; + }; + "cli-cursor-3.1.0" = { + name = "cli-cursor"; + packageName = "cli-cursor"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz"; + sha512 = "I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw=="; + }; + }; + "cli-spinners-2.6.0" = { + name = "cli-spinners"; + packageName = "cli-spinners"; + version = "2.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz"; + sha512 = "t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q=="; + }; + }; + "cli-width-3.0.0" = { + name = "cli-width"; + packageName = "cli-width"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz"; + sha512 = "FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw=="; + }; + }; + "clipboard-2.0.6" = { + name = "clipboard"; + packageName = "clipboard"; + version = "2.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz"; + sha512 = "g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg=="; + }; + }; + "cliui-6.0.0" = { + name = "cliui"; + packageName = "cliui"; + version = "6.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz"; + sha512 = "t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ=="; + }; + }; + "cliui-7.0.4" = { + name = "cliui"; + packageName = "cliui"; + version = "7.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz"; + sha512 = "OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ=="; + }; + }; + "clone-1.0.4" = { + name = "clone"; + packageName = "clone"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz"; + sha1 = "da309cc263df15994c688ca902179ca3c7cd7c7e"; + }; + }; + "clone-deep-4.0.1" = { + name = "clone-deep"; + packageName = "clone-deep"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz"; + sha512 = "neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ=="; + }; + }; + "color-convert-1.9.3" = { + name = "color-convert"; + packageName = "color-convert"; + version = "1.9.3"; + src = fetchurl { + url = "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz"; + sha512 = "QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="; + }; + }; + "color-convert-2.0.1" = { + name = "color-convert"; + packageName = "color-convert"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"; + sha512 = "RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="; + }; + }; + "color-name-1.1.3" = { + name = "color-name"; + packageName = "color-name"; + version = "1.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"; + sha1 = "a7d0558bd89c42f795dd42328f740831ca53bc25"; + }; + }; + "color-name-1.1.4" = { + name = "color-name"; + packageName = "color-name"; + version = "1.1.4"; + src = fetchurl { + url = "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"; + sha512 = "dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="; + }; + }; + "color-support-1.1.3" = { + name = "color-support"; + packageName = "color-support"; + version = "1.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz"; + sha512 = "qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="; + }; + }; + "colorette-2.0.16" = { + name = "colorette"; + packageName = "colorette"; + version = "2.0.16"; + src = fetchurl { + url = "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz"; + sha512 = "hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g=="; + }; + }; + "colors-1.4.0" = { + name = "colors"; + packageName = "colors"; + version = "1.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz"; + sha512 = "a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA=="; + }; + }; + "combine-source-map-0.8.0" = { + name = "combine-source-map"; + packageName = "combine-source-map"; + version = "0.8.0"; + src = fetchurl { + url = "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz"; + sha1 = "a58d0df042c186fcf822a8e8015f5450d2d79a8b"; + }; + }; + "combined-stream-1.0.8" = { + name = "combined-stream"; + packageName = "combined-stream"; + version = "1.0.8"; + src = fetchurl { + url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"; + sha512 = "FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="; + }; + }; + "commander-2.20.3" = { + name = "commander"; + packageName = "commander"; + version = "2.20.3"; + src = fetchurl { + url = "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz"; + sha512 = "GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="; + }; + }; + "common-shakeify-0.6.2" = { + name = "common-shakeify"; + packageName = "common-shakeify"; + version = "0.6.2"; + src = fetchurl { + url = "https://registry.npmjs.org/common-shakeify/-/common-shakeify-0.6.2.tgz"; + sha512 = "vxlXr26fqxm8ZJ0jh8MlvpeN6IbyUKqsVmgb4rAjDM/0f4nKebiHaAXpF/Mm86W9ENR5iSI7UOnUTylpVyplUA=="; + }; + }; + "commondir-1.0.1" = { + name = "commondir"; + packageName = "commondir"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz"; + sha1 = "ddd800da0c66127393cca5950ea968a3aaf1253b"; + }; + }; + "component-emitter-1.3.0" = { + name = "component-emitter"; + packageName = "component-emitter"; + version = "1.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz"; + sha512 = "Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="; + }; + }; + "compressible-2.0.18" = { + name = "compressible"; + packageName = "compressible"; + version = "2.0.18"; + src = fetchurl { + url = "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz"; + sha512 = "AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg=="; + }; + }; + "compression-1.7.4" = { + name = "compression"; + packageName = "compression"; + version = "1.7.4"; + src = fetchurl { + url = "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz"; + sha512 = "jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ=="; + }; + }; + "concat-map-0.0.1" = { + name = "concat-map"; + packageName = "concat-map"; + version = "0.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"; + sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b"; + }; + }; + "concat-stream-1.6.2" = { + name = "concat-stream"; + packageName = "concat-stream"; + version = "1.6.2"; + src = fetchurl { + url = "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz"; + sha512 = "27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw=="; + }; + }; + "concat-stream-2.0.0" = { + name = "concat-stream"; + packageName = "concat-stream"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz"; + sha512 = "MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A=="; + }; + }; + "connect-3.7.0" = { + name = "connect"; + packageName = "connect"; + version = "3.7.0"; + src = fetchurl { + url = "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz"; + sha512 = "ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ=="; + }; + }; + "connect-history-api-fallback-1.6.0" = { + name = "connect-history-api-fallback"; + packageName = "connect-history-api-fallback"; + version = "1.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz"; + sha512 = "e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg=="; + }; + }; + "console-browserify-1.2.0" = { + name = "console-browserify"; + packageName = "console-browserify"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz"; + sha512 = "ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA=="; + }; + }; + "console-control-strings-1.1.0" = { + name = "console-control-strings"; + packageName = "console-control-strings"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz"; + sha1 = "3d7cf4464db6446ea644bf4b39507f9851008e8e"; + }; + }; + "constants-browserify-1.0.0" = { + name = "constants-browserify"; + packageName = "constants-browserify"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz"; + sha1 = "c20b96d8c617748aaf1c16021760cd27fcb8cb75"; + }; + }; + "content-disposition-0.5.3" = { + name = "content-disposition"; + packageName = "content-disposition"; + version = "0.5.3"; + src = fetchurl { + url = "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz"; + sha512 = "ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g=="; + }; + }; + "content-type-1.0.4" = { + name = "content-type"; + packageName = "content-type"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz"; + sha512 = "hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="; + }; + }; + "convert-source-map-1.1.3" = { + name = "convert-source-map"; + packageName = "convert-source-map"; + version = "1.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz"; + sha1 = "4829c877e9fe49b3161f3bf3673888e204699860"; + }; + }; + "convert-source-map-1.7.0" = { + name = "convert-source-map"; + packageName = "convert-source-map"; + version = "1.7.0"; + src = fetchurl { + url = "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz"; + sha512 = "4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA=="; + }; + }; + "cookie-0.4.0" = { + name = "cookie"; + packageName = "cookie"; + version = "0.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz"; + sha512 = "+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="; + }; + }; + "cookie-0.4.1" = { + name = "cookie"; + packageName = "cookie"; + version = "0.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz"; + sha512 = "ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="; + }; + }; + "cookie-signature-1.0.6" = { + name = "cookie-signature"; + packageName = "cookie-signature"; + version = "1.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz"; + sha1 = "e303a882b342cc3ee8ca513a79999734dab3ae2c"; + }; + }; + "copy-anything-2.0.3" = { + name = "copy-anything"; + packageName = "copy-anything"; + version = "2.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.3.tgz"; + sha512 = "GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ=="; + }; + }; + "copy-webpack-plugin-10.0.0" = { + name = "copy-webpack-plugin"; + packageName = "copy-webpack-plugin"; + version = "10.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.0.0.tgz"; + sha512 = "tuCVuFMBbRsb7IH0q1CUb50/Skv+7a6c7DJ+xi4fAbOzNLTYVMUTPnf8uGvKPtmqTvzYBrfEFo7YgP4TsUWmtg=="; + }; + }; + "core-js-3.19.3" = { + name = "core-js"; + packageName = "core-js"; + version = "3.19.3"; + src = fetchurl { + url = "https://registry.npmjs.org/core-js/-/core-js-3.19.3.tgz"; + sha512 = "LeLBMgEGSsG7giquSzvgBrTS7V5UL6ks3eQlUSbN8dJStlLFiRzUm5iqsRyzUB8carhfKjkJ2vzKqE6z1Vga9g=="; + }; + }; + "core-js-compat-3.20.2" = { + name = "core-js-compat"; + packageName = "core-js-compat"; + version = "3.20.2"; + src = fetchurl { + url = "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.2.tgz"; + sha512 = "qZEzVQ+5Qh6cROaTPFLNS4lkvQ6mBzE3R6A6EEpssj7Zr2egMHgsy4XapdifqJDGC9CBiNv7s+ejI96rLNQFdg=="; + }; + }; + "core-util-is-1.0.2" = { + name = "core-util-is"; + packageName = "core-util-is"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz"; + sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7"; + }; + }; + "cors-2.8.5" = { + name = "cors"; + packageName = "cors"; + version = "2.8.5"; + src = fetchurl { + url = "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz"; + sha512 = "KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g=="; + }; + }; + "cosmiconfig-7.0.1" = { + name = "cosmiconfig"; + packageName = "cosmiconfig"; + version = "7.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz"; + sha512 = "a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ=="; + }; + }; + "count-lines-0.1.2" = { + name = "count-lines"; + packageName = "count-lines"; + version = "0.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/count-lines/-/count-lines-0.1.2.tgz"; + sha1 = "e33493fb6860a82f7159d8237843fbfaefee5962"; + }; + }; + "create-ecdh-4.0.4" = { + name = "create-ecdh"; + packageName = "create-ecdh"; + version = "4.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz"; + sha512 = "mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A=="; + }; + }; + "create-hash-1.2.0" = { + name = "create-hash"; + packageName = "create-hash"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz"; + sha512 = "z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg=="; + }; + }; + "create-hmac-1.1.7" = { + name = "create-hmac"; + packageName = "create-hmac"; + version = "1.1.7"; + src = fetchurl { + url = "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz"; + sha512 = "MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg=="; + }; + }; + "critters-0.0.15" = { + name = "critters"; + packageName = "critters"; + version = "0.0.15"; + src = fetchurl { + url = "https://registry.npmjs.org/critters/-/critters-0.0.15.tgz"; + sha512 = "AE7hkXb3eZUbEvS1SKZa+OU4o2kUOXtzVeE/2E/mjU/0mV1wpBT1HfUCWVRS4zwvkBNJ0AQYsVjAoFm+kIhfdw=="; + }; + }; + "critters-0.0.7" = { + name = "critters"; + packageName = "critters"; + version = "0.0.7"; + src = fetchurl { + url = "https://registry.npmjs.org/critters/-/critters-0.0.7.tgz"; + sha512 = "qUF2SaAWFYjNPdCcPpu68p2DnHiosia84yx5mPTlUMQjkjChR+n6sO1/I7yn2U2qNDgSPTd2SoaTIDQcUL+EwQ=="; + }; + }; + "cross-spawn-7.0.3" = { + name = "cross-spawn"; + packageName = "cross-spawn"; + version = "7.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz"; + sha512 = "iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w=="; + }; + }; + "crypto-browserify-3.12.0" = { + name = "crypto-browserify"; + packageName = "crypto-browserify"; + version = "3.12.0"; + src = fetchurl { + url = "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz"; + sha512 = "fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg=="; + }; + }; + "css-3.0.0" = { + name = "css"; + packageName = "css"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/css/-/css-3.0.0.tgz"; + sha512 = "DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ=="; + }; + }; + "css-blank-pseudo-0.1.4" = { + name = "css-blank-pseudo"; + packageName = "css-blank-pseudo"; + version = "0.1.4"; + src = fetchurl { + url = "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz"; + sha512 = "LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w=="; + }; + }; + "css-has-pseudo-0.10.0" = { + name = "css-has-pseudo"; + packageName = "css-has-pseudo"; + version = "0.10.0"; + src = fetchurl { + url = "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz"; + sha512 = "Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ=="; + }; + }; + "css-loader-6.5.1" = { + name = "css-loader"; + packageName = "css-loader"; + version = "6.5.1"; + src = fetchurl { + url = "https://registry.npmjs.org/css-loader/-/css-loader-6.5.1.tgz"; + sha512 = "gEy2w9AnJNnD9Kuo4XAP9VflW/ujKoS9c/syO+uWMlm5igc7LysKzPXaDoR2vroROkSwsTS2tGr1yGGEbZOYZQ=="; + }; + }; + "css-prefers-color-scheme-3.1.1" = { + name = "css-prefers-color-scheme"; + packageName = "css-prefers-color-scheme"; + version = "3.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz"; + sha512 = "MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg=="; + }; + }; + "css-select-4.2.1" = { + name = "css-select"; + packageName = "css-select"; + version = "4.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz"; + sha512 = "/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ=="; + }; + }; + "css-what-5.1.0" = { + name = "css-what"; + packageName = "css-what"; + version = "5.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz"; + sha512 = "arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw=="; + }; + }; + "cssdb-4.4.0" = { + name = "cssdb"; + packageName = "cssdb"; + version = "4.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz"; + sha512 = "LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ=="; + }; + }; + "cssesc-2.0.0" = { + name = "cssesc"; + packageName = "cssesc"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz"; + sha512 = "MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="; + }; + }; + "cssesc-3.0.0" = { + name = "cssesc"; + packageName = "cssesc"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz"; + sha512 = "/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="; + }; + }; + "custom-event-1.0.1" = { + name = "custom-event"; + packageName = "custom-event"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz"; + sha1 = "5d02a46850adf1b4a317946a3928fccb5bfd0425"; + }; + }; + "d-1.0.1" = { + name = "d"; + packageName = "d"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/d/-/d-1.0.1.tgz"; + sha512 = "m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA=="; + }; + }; + "dash-ast-1.0.0" = { + name = "dash-ast"; + packageName = "dash-ast"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz"; + sha512 = "Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA=="; + }; + }; + "dash-ast-2.0.1" = { + name = "dash-ast"; + packageName = "dash-ast"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz"; + sha512 = "5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ=="; + }; + }; + "dashdash-1.14.1" = { + name = "dashdash"; + packageName = "dashdash"; + version = "1.14.1"; + src = fetchurl { + url = "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz"; + sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"; + }; + }; + "date-format-2.1.0" = { + name = "date-format"; + packageName = "date-format"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz"; + sha512 = "bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA=="; + }; + }; + "date-format-3.0.0" = { + name = "date-format"; + packageName = "date-format"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz"; + sha512 = "eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w=="; + }; + }; + "debug-2.6.9" = { + name = "debug"; + packageName = "debug"; + version = "2.6.9"; + src = fetchurl { + url = "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"; + sha512 = "bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="; + }; + }; + "debug-3.1.0" = { + name = "debug"; + packageName = "debug"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz"; + sha512 = "OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g=="; + }; + }; + "debug-3.2.7" = { + name = "debug"; + packageName = "debug"; + version = "3.2.7"; + src = fetchurl { + url = "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz"; + sha512 = "CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="; + }; + }; + "debug-4.3.2" = { + name = "debug"; + packageName = "debug"; + version = "4.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz"; + sha512 = "mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw=="; + }; + }; + "decamelize-1.2.0" = { + name = "decamelize"; + packageName = "decamelize"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz"; + sha1 = "f6534d15148269b20352e7bee26f501f9a191290"; + }; + }; + "decode-uri-component-0.2.0" = { + name = "decode-uri-component"; + packageName = "decode-uri-component"; + version = "0.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz"; + sha1 = "eb3913333458775cb84cd1a1fae062106bb87545"; + }; + }; + "dedent-0.7.0" = { + name = "dedent"; + packageName = "dedent"; + version = "0.7.0"; + src = fetchurl { + url = "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz"; + sha1 = "2495ddbaf6eb874abb0e1be9df22d2e5a544326c"; + }; + }; + "deep-equal-1.1.1" = { + name = "deep-equal"; + packageName = "deep-equal"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz"; + sha512 = "yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g=="; + }; + }; + "deep-is-0.1.3" = { + name = "deep-is"; + packageName = "deep-is"; + version = "0.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz"; + sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34"; + }; + }; + "default-gateway-6.0.3" = { + name = "default-gateway"; + packageName = "default-gateway"; + version = "6.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz"; + sha512 = "fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg=="; + }; + }; + "defaults-1.0.3" = { + name = "defaults"; + packageName = "defaults"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz"; + sha1 = "c656051e9817d9ff08ed881477f3fe4019f3ef7d"; + }; + }; + "define-lazy-prop-2.0.0" = { + name = "define-lazy-prop"; + packageName = "define-lazy-prop"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz"; + sha512 = "Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="; + }; + }; + "define-properties-1.1.3" = { + name = "define-properties"; + packageName = "define-properties"; + version = "1.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz"; + sha512 = "3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ=="; + }; + }; + "defined-1.0.0" = { + name = "defined"; + packageName = "defined"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz"; + sha1 = "c98d9bcef75674188e110969151199e39b1fa693"; + }; + }; + "del-6.0.0" = { + name = "del"; + packageName = "del"; + version = "6.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/del/-/del-6.0.0.tgz"; + sha512 = "1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ=="; + }; + }; + "delayed-stream-1.0.0" = { + name = "delayed-stream"; + packageName = "delayed-stream"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"; + sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619"; + }; + }; + "delegate-3.2.0" = { + name = "delegate"; + packageName = "delegate"; + version = "3.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz"; + sha512 = "IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="; + }; + }; + "delegates-1.0.0" = { + name = "delegates"; + packageName = "delegates"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz"; + sha1 = "84c6e159b81904fdca59a0ef44cd870d31250f9a"; + }; + }; + "depd-1.1.2" = { + name = "depd"; + packageName = "depd"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz"; + sha1 = "9bcd52e14c097763e749b274c4346ed2e560b5a9"; + }; + }; + "dependency-graph-0.11.0" = { + name = "dependency-graph"; + packageName = "dependency-graph"; + version = "0.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz"; + sha512 = "JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg=="; + }; + }; + "deps-sort-2.0.1" = { + name = "deps-sort"; + packageName = "deps-sort"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz"; + sha512 = "1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw=="; + }; + }; + "des.js-1.0.1" = { + name = "des.js"; + packageName = "des.js"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz"; + sha512 = "Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA=="; + }; + }; + "destroy-1.0.4" = { + name = "destroy"; + packageName = "destroy"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz"; + sha1 = "978857442c44749e4206613e37946205826abd80"; + }; + }; + "detect-node-2.1.0" = { + name = "detect-node"; + packageName = "detect-node"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz"; + sha512 = "T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g=="; + }; + }; + "detective-5.2.0" = { + name = "detective"; + packageName = "detective"; + version = "5.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz"; + sha512 = "6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg=="; + }; + }; + "di-0.0.1" = { + name = "di"; + packageName = "di"; + version = "0.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/di/-/di-0.0.1.tgz"; + sha1 = "806649326ceaa7caa3306d75d985ea2748ba913c"; + }; + }; + "diffie-hellman-5.0.3" = { + name = "diffie-hellman"; + packageName = "diffie-hellman"; + version = "5.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz"; + sha512 = "kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg=="; + }; + }; + "dijkstrajs-1.0.1" = { + name = "dijkstrajs"; + packageName = "dijkstrajs"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.1.tgz"; + sha1 = "d3cd81221e3ea40742cfcde556d4e99e98ddc71b"; + }; + }; + "dir-glob-3.0.1" = { + name = "dir-glob"; + packageName = "dir-glob"; + version = "3.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz"; + sha512 = "WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="; + }; + }; + "dns-equal-1.0.0" = { + name = "dns-equal"; + packageName = "dns-equal"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz"; + sha1 = "b39e7f1da6eb0a75ba9c17324b34753c47e0654d"; + }; + }; + "dns-packet-1.3.4" = { + name = "dns-packet"; + packageName = "dns-packet"; + version = "1.3.4"; + src = fetchurl { + url = "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz"; + sha512 = "BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA=="; + }; + }; + "dns-txt-2.0.2" = { + name = "dns-txt"; + packageName = "dns-txt"; + version = "2.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz"; + sha1 = "b91d806f5d27188e4ab3e7d107d881a1cc4642b6"; + }; + }; + "dom-serialize-2.2.1" = { + name = "dom-serialize"; + packageName = "dom-serialize"; + version = "2.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz"; + sha1 = "562ae8999f44be5ea3076f5419dcd59eb43ac95b"; + }; + }; + "dom-serializer-1.3.2" = { + name = "dom-serializer"; + packageName = "dom-serializer"; + version = "1.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz"; + sha512 = "5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig=="; + }; + }; + "domain-browser-1.2.0" = { + name = "domain-browser"; + packageName = "domain-browser"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz"; + sha512 = "jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA=="; + }; + }; + "domelementtype-2.2.0" = { + name = "domelementtype"; + packageName = "domelementtype"; + version = "2.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz"; + sha512 = "DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A=="; + }; + }; + "domhandler-4.3.0" = { + name = "domhandler"; + packageName = "domhandler"; + version = "4.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz"; + sha512 = "fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g=="; + }; + }; + "domino-2.1.6" = { + name = "domino"; + packageName = "domino"; + version = "2.1.6"; + src = fetchurl { + url = "https://registry.npmjs.org/domino/-/domino-2.1.6.tgz"; + sha512 = "3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ=="; + }; + }; + "domutils-2.8.0" = { + name = "domutils"; + packageName = "domutils"; + version = "2.8.0"; + src = fetchurl { + url = "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz"; + sha512 = "w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="; + }; + }; + "duplexer-0.1.2" = { + name = "duplexer"; + packageName = "duplexer"; + version = "0.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz"; + sha512 = "jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg=="; + }; + }; + "duplexer2-0.1.4" = { + name = "duplexer2"; + packageName = "duplexer2"; + version = "0.1.4"; + src = fetchurl { + url = "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz"; + sha1 = "8b12dab878c0d69e3e7891051662a32fc6bddcc1"; + }; + }; + "duplexify-4.1.1" = { + name = "duplexify"; + packageName = "duplexify"; + version = "4.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/duplexify/-/duplexify-4.1.1.tgz"; + sha512 = "DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA=="; + }; + }; + "ecc-jsbn-0.1.2" = { + name = "ecc-jsbn"; + packageName = "ecc-jsbn"; + version = "0.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz"; + sha1 = "3a83a904e54353287874c564b7549386849a98c9"; + }; + }; + "echarts-5.2.2" = { + name = "echarts"; + packageName = "echarts"; + version = "5.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/echarts/-/echarts-5.2.2.tgz"; + sha512 = "yxuBfeIH5c+0FsoRP60w4De6omXhA06c7eUYBsC1ykB6Ys2yK5fSteIYWvkJ4xJVLQgCvAdO8C4mN6MLeJpBaw=="; + }; + }; + "ee-first-1.1.1" = { + name = "ee-first"; + packageName = "ee-first"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz"; + sha1 = "590c61156b0ae2f4f0255732a158b266bc56b21d"; + }; + }; + "electron-to-chromium-1.4.41" = { + name = "electron-to-chromium"; + packageName = "electron-to-chromium"; + version = "1.4.41"; + src = fetchurl { + url = "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.41.tgz"; + sha512 = "VQEXEJc+8rJIva85H8EPtB5Ux9g8TzkNGBanqphM9ZWMZ34elueKJ+5g+BPhz3Lk8gkujfQRcIZ+fpA0btUIuw=="; + }; + }; + "elliptic-6.5.4" = { + name = "elliptic"; + packageName = "elliptic"; + version = "6.5.4"; + src = fetchurl { + url = "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz"; + sha512 = "iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ=="; + }; + }; + "emoji-regex-8.0.0" = { + name = "emoji-regex"; + packageName = "emoji-regex"; + version = "8.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz"; + sha512 = "MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="; + }; + }; + "emojis-list-3.0.0" = { + name = "emojis-list"; + packageName = "emojis-list"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz"; + sha512 = "/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="; + }; + }; + "encode-utf8-1.0.3" = { + name = "encode-utf8"; + packageName = "encode-utf8"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz"; + sha512 = "ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw=="; + }; + }; + "encodeurl-1.0.2" = { + name = "encodeurl"; + packageName = "encodeurl"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz"; + sha1 = "ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"; + }; + }; + "end-of-stream-1.4.4" = { + name = "end-of-stream"; + packageName = "end-of-stream"; + version = "1.4.4"; + src = fetchurl { + url = "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz"; + sha512 = "+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q=="; + }; + }; + "engine.io-4.1.2" = { + name = "engine.io"; + packageName = "engine.io"; + version = "4.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/engine.io/-/engine.io-4.1.2.tgz"; + sha512 = "t5z6zjXuVLhXDMiFJPYsPOWEER8B0tIsD3ETgw19S1yg9zryvUfY3Vhtk3Gf4sihw/bQGIqQ//gjvVlu+Ca0bQ=="; + }; + }; + "engine.io-parser-4.0.3" = { + name = "engine.io-parser"; + packageName = "engine.io-parser"; + version = "4.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.3.tgz"; + sha512 = "xEAAY0msNnESNPc00e19y5heTPX4y/TJ36gr8t1voOaNmTojP9b3oK3BbJLFufW2XFPQaaijpFewm2g2Um3uqA=="; + }; + }; + "enhanced-resolve-5.8.3" = { + name = "enhanced-resolve"; + packageName = "enhanced-resolve"; + version = "5.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz"; + sha512 = "EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA=="; + }; + }; + "ent-2.2.0" = { + name = "ent"; + packageName = "ent"; + version = "2.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz"; + sha1 = "e964219325a21d05f44466a2f686ed6ce5f5dd1d"; + }; + }; + "entities-2.2.0" = { + name = "entities"; + packageName = "entities"; + version = "2.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz"; + sha512 = "p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="; + }; + }; + "env-paths-2.2.1" = { + name = "env-paths"; + packageName = "env-paths"; + version = "2.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz"; + sha512 = "+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="; + }; + }; + "err-code-2.0.3" = { + name = "err-code"; + packageName = "err-code"; + version = "2.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz"; + sha512 = "2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="; + }; + }; + "error-ex-1.3.2" = { + name = "error-ex"; + packageName = "error-ex"; + version = "1.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz"; + sha512 = "7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g=="; + }; + }; + "es-abstract-1.18.0" = { + name = "es-abstract"; + packageName = "es-abstract"; + version = "1.18.0"; + src = fetchurl { + url = "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz"; + sha512 = "LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw=="; + }; + }; + "es-module-lexer-0.9.3" = { + name = "es-module-lexer"; + packageName = "es-module-lexer"; + version = "0.9.3"; + src = fetchurl { + url = "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz"; + sha512 = "1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ=="; + }; + }; + "es-to-primitive-1.2.1" = { + name = "es-to-primitive"; + packageName = "es-to-primitive"; + version = "1.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz"; + sha512 = "QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA=="; + }; + }; + "es5-ext-0.10.53" = { + name = "es5-ext"; + packageName = "es5-ext"; + version = "0.10.53"; + src = fetchurl { + url = "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz"; + sha512 = "Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q=="; + }; + }; + "es6-iterator-2.0.3" = { + name = "es6-iterator"; + packageName = "es6-iterator"; + version = "2.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz"; + sha1 = "a7de889141a05a94b0854403b2d0a0fbfa98f3b7"; + }; + }; + "es6-map-0.1.5" = { + name = "es6-map"; + packageName = "es6-map"; + version = "0.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz"; + sha1 = "9136e0503dcc06a301690f0bb14ff4e364e949f0"; + }; + }; + "es6-set-0.1.5" = { + name = "es6-set"; + packageName = "es6-set"; + version = "0.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz"; + sha1 = "d2b3ec5d4d800ced818db538d28974db0a73ccb1"; + }; + }; + "es6-symbol-3.1.1" = { + name = "es6-symbol"; + packageName = "es6-symbol"; + version = "3.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz"; + sha1 = "bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"; + }; + }; + "es6-symbol-3.1.3" = { + name = "es6-symbol"; + packageName = "es6-symbol"; + version = "3.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz"; + sha512 = "NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA=="; + }; + }; + "es6-weak-map-2.0.3" = { + name = "es6-weak-map"; + packageName = "es6-weak-map"; + version = "2.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz"; + sha512 = "p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA=="; + }; + }; + "esbuild-wasm-0.14.2" = { + name = "esbuild-wasm"; + packageName = "esbuild-wasm"; + version = "0.14.2"; + src = fetchurl { + url = "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.2.tgz"; + sha512 = "Rs8NjWoo1UdsVjhxT2o6kLCX9Sh65pyd3/h4XeJ3jjQNM6NgL+/CSowuJgvOIjDAXMLXpc6fdGnyZQDil9IUJA=="; + }; + }; + "escalade-3.1.1" = { + name = "escalade"; + packageName = "escalade"; + version = "3.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz"; + sha512 = "k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="; + }; + }; + "escape-html-1.0.3" = { + name = "escape-html"; + packageName = "escape-html"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz"; + sha1 = "0258eae4d3d0c0974de1c169188ef0051d1d1988"; + }; + }; + "escape-string-regexp-1.0.5" = { + name = "escape-string-regexp"; + packageName = "escape-string-regexp"; + version = "1.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"; + sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"; + }; + }; + "escodegen-1.14.3" = { + name = "escodegen"; + packageName = "escodegen"; + version = "1.14.3"; + src = fetchurl { + url = "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz"; + sha512 = "qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw=="; + }; + }; + "escope-3.6.0" = { + name = "escope"; + packageName = "escope"; + version = "3.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz"; + sha1 = "e01975e812781a163a6dadfdd80398dc64c889c3"; + }; + }; + "eslint-scope-5.1.1" = { + name = "eslint-scope"; + packageName = "eslint-scope"; + version = "5.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz"; + sha512 = "2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="; + }; + }; + "esprima-4.0.1" = { + name = "esprima"; + packageName = "esprima"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz"; + sha512 = "eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="; + }; + }; + "espurify-2.1.1" = { + name = "espurify"; + packageName = "espurify"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/espurify/-/espurify-2.1.1.tgz"; + sha512 = "zttWvnkhcDyGOhSH4vO2qCBILpdCMv/MX8lp4cqgRkQoDRGK2oZxi2GfWhlP2dIXmk7BaKeOTuzbHhyC68o8XQ=="; + }; + }; + "esrecurse-4.3.0" = { + name = "esrecurse"; + packageName = "esrecurse"; + version = "4.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz"; + sha512 = "KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="; + }; + }; + "estraverse-4.3.0" = { + name = "estraverse"; + packageName = "estraverse"; + version = "4.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz"; + sha512 = "39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="; + }; + }; + "estraverse-5.2.0" = { + name = "estraverse"; + packageName = "estraverse"; + version = "5.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz"; + sha512 = "BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ=="; + }; + }; + "estree-is-function-1.0.0" = { + name = "estree-is-function"; + packageName = "estree-is-function"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz"; + sha512 = "nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA=="; + }; + }; + "estree-is-identifier-1.0.0" = { + name = "estree-is-identifier"; + packageName = "estree-is-identifier"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/estree-is-identifier/-/estree-is-identifier-1.0.0.tgz"; + sha512 = "2BDRGrkQJV/NhCAmmE33A35WAaxq3WQaGHgQuD//7orGWfpFqj8Srkwvx0TH+20yIdOF1yMQwi8anv5ISec2AQ=="; + }; + }; + "estree-is-member-expression-1.0.0" = { + name = "estree-is-member-expression"; + packageName = "estree-is-member-expression"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/estree-is-member-expression/-/estree-is-member-expression-1.0.0.tgz"; + sha512 = "Ec+X44CapIGExvSZN+pGkmr5p7HwUVQoPQSd458Lqwvaf4/61k/invHSh4BYK8OXnCkfEhWuIoG5hayKLQStIg=="; + }; + }; + "estree-is-require-1.0.0" = { + name = "estree-is-require"; + packageName = "estree-is-require"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/estree-is-require/-/estree-is-require-1.0.0.tgz"; + sha512 = "oWxQdSEmnUwNZsDQYiBNpVxKEhMmsJQSSxnDrwsr1MWtooCLfhgzsNGzmokdmfK0EzEIS5V4LPvqxv1Kmb1vvA=="; + }; + }; + "esutils-2.0.3" = { + name = "esutils"; + packageName = "esutils"; + version = "2.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz"; + sha512 = "kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="; + }; + }; + "etag-1.8.1" = { + name = "etag"; + packageName = "etag"; + version = "1.8.1"; + src = fetchurl { + url = "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz"; + sha1 = "41ae2eeb65efa62268aebfea83ac7d79299b0887"; + }; + }; + "event-emitter-0.3.5" = { + name = "event-emitter"; + packageName = "event-emitter"; + version = "0.3.5"; + src = fetchurl { + url = "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz"; + sha1 = "df8c69eef1647923c7157b9ce83840610b02cc39"; + }; + }; + "eventemitter-asyncresource-1.0.0" = { + name = "eventemitter-asyncresource"; + packageName = "eventemitter-asyncresource"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz"; + sha512 = "39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ=="; + }; + }; + "eventemitter3-4.0.7" = { + name = "eventemitter3"; + packageName = "eventemitter3"; + version = "4.0.7"; + src = fetchurl { + url = "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz"; + sha512 = "8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="; + }; + }; + "events-3.3.0" = { + name = "events"; + packageName = "events"; + version = "3.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/events/-/events-3.3.0.tgz"; + sha512 = "mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="; + }; + }; + "evp_bytestokey-1.0.3" = { + name = "evp_bytestokey"; + packageName = "evp_bytestokey"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz"; + sha512 = "/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA=="; + }; + }; + "execa-5.1.1" = { + name = "execa"; + packageName = "execa"; + version = "5.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz"; + sha512 = "8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="; + }; + }; + "express-4.17.1" = { + name = "express"; + packageName = "express"; + version = "4.17.1"; + src = fetchurl { + url = "https://registry.npmjs.org/express/-/express-4.17.1.tgz"; + sha512 = "mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g=="; + }; + }; + "ext-1.4.0" = { + name = "ext"; + packageName = "ext"; + version = "1.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz"; + sha512 = "Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A=="; + }; + }; + "extend-3.0.2" = { + name = "extend"; + packageName = "extend"; + version = "3.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz"; + sha512 = "fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="; + }; + }; + "external-editor-3.1.0" = { + name = "external-editor"; + packageName = "external-editor"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz"; + sha512 = "hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew=="; + }; + }; + "extsprintf-1.3.0" = { + name = "extsprintf"; + packageName = "extsprintf"; + version = "1.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz"; + sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05"; + }; + }; + "falafel-2.2.4" = { + name = "falafel"; + packageName = "falafel"; + version = "2.2.4"; + src = fetchurl { + url = "https://registry.npmjs.org/falafel/-/falafel-2.2.4.tgz"; + sha512 = "0HXjo8XASWRmsS0X1EkhwEMZaD3Qvp7FfURwjLKjG1ghfRm/MGZl2r4cWUTv41KdNghTw4OUMmVtdGQp3+H+uQ=="; + }; + }; + "fancy-canvas-0.2.2" = { + name = "fancy-canvas"; + packageName = "fancy-canvas"; + version = "0.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/fancy-canvas/-/fancy-canvas-0.2.2.tgz"; + sha512 = "50qi8xA0QkHbjmb8h7XQ6k2fvD7y/yMfiUw9YTarJ7rWrq6o5/3CCXPouYk+XSLASvvxtjyiQLRBFt3qkE3oyA=="; + }; + }; + "fast-deep-equal-3.1.3" = { + name = "fast-deep-equal"; + packageName = "fast-deep-equal"; + version = "3.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"; + sha512 = "f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="; + }; + }; + "fast-glob-3.2.10" = { + name = "fast-glob"; + packageName = "fast-glob"; + version = "3.2.10"; + src = fetchurl { + url = "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.10.tgz"; + sha512 = "s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A=="; + }; + }; + "fast-json-stable-stringify-2.1.0" = { + name = "fast-json-stable-stringify"; + packageName = "fast-json-stable-stringify"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"; + sha512 = "lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="; + }; + }; + "fast-levenshtein-2.0.6" = { + name = "fast-levenshtein"; + packageName = "fast-levenshtein"; + version = "2.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"; + sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917"; + }; + }; + "fast-safe-stringify-2.0.7" = { + name = "fast-safe-stringify"; + packageName = "fast-safe-stringify"; + version = "2.0.7"; + src = fetchurl { + url = "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz"; + sha512 = "Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA=="; + }; + }; + "fastq-1.13.0" = { + name = "fastq"; + packageName = "fastq"; + version = "1.13.0"; + src = fetchurl { + url = "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz"; + sha512 = "YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw=="; + }; + }; + "faye-websocket-0.11.4" = { + name = "faye-websocket"; + packageName = "faye-websocket"; + version = "0.11.4"; + src = fetchurl { + url = "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz"; + sha512 = "CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g=="; + }; + }; + "figures-3.2.0" = { + name = "figures"; + packageName = "figures"; + version = "3.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz"; + sha512 = "yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg=="; + }; + }; + "fill-range-7.0.1" = { + name = "fill-range"; + packageName = "fill-range"; + version = "7.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz"; + sha512 = "qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ=="; + }; + }; + "finalhandler-1.1.2" = { + name = "finalhandler"; + packageName = "finalhandler"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz"; + sha512 = "aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA=="; + }; + }; + "find-cache-dir-3.3.2" = { + name = "find-cache-dir"; + packageName = "find-cache-dir"; + version = "3.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz"; + sha512 = "wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig=="; + }; + }; + "find-up-4.1.0" = { + name = "find-up"; + packageName = "find-up"; + version = "4.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz"; + sha512 = "PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="; + }; + }; + "flatted-2.0.2" = { + name = "flatted"; + packageName = "flatted"; + version = "2.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz"; + sha512 = "r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA=="; + }; + }; + "flatten-1.0.3" = { + name = "flatten"; + packageName = "flatten"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz"; + sha512 = "dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg=="; + }; + }; + "follow-redirects-1.14.7" = { + name = "follow-redirects"; + packageName = "follow-redirects"; + version = "1.14.7"; + src = fetchurl { + url = "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz"; + sha512 = "+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ=="; + }; + }; + "foreach-2.0.5" = { + name = "foreach"; + packageName = "foreach"; + version = "2.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz"; + sha1 = "0bee005018aeb260d0a3af3ae658dd0136ec1b99"; + }; + }; + "forever-agent-0.6.1" = { + name = "forever-agent"; + packageName = "forever-agent"; + version = "0.6.1"; + src = fetchurl { + url = "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz"; + sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"; + }; + }; + "form-data-2.3.3" = { + name = "form-data"; + packageName = "form-data"; + version = "2.3.3"; + src = fetchurl { + url = "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz"; + sha512 = "1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ=="; + }; + }; + "forwarded-0.1.2" = { + name = "forwarded"; + packageName = "forwarded"; + version = "0.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz"; + sha1 = "98c23dab1175657b8c0573e8ceccd91b0ff18c84"; + }; + }; + "fresh-0.5.2" = { + name = "fresh"; + packageName = "fresh"; + version = "0.5.2"; + src = fetchurl { + url = "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz"; + sha1 = "3d8cadd90d976569fa835ab1f8e4b23a105605a7"; + }; + }; + "from2-2.3.0" = { + name = "from2"; + packageName = "from2"; + version = "2.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz"; + sha1 = "8bfb5502bde4a4d36cfdeea007fcca21d7e382af"; + }; + }; + "from2-string-1.1.0" = { + name = "from2-string"; + packageName = "from2-string"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/from2-string/-/from2-string-1.1.0.tgz"; + sha1 = "18282b27d08a267cb3030cd2b8b4b0f212af752a"; + }; + }; + "fs-extra-8.1.0" = { + name = "fs-extra"; + packageName = "fs-extra"; + version = "8.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz"; + sha512 = "yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="; + }; + }; + "fs-minipass-2.1.0" = { + name = "fs-minipass"; + packageName = "fs-minipass"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz"; + sha512 = "V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg=="; + }; + }; + "fs-monkey-1.0.3" = { + name = "fs-monkey"; + packageName = "fs-monkey"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz"; + sha512 = "cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q=="; + }; + }; + "fs.realpath-1.0.0" = { + name = "fs.realpath"; + packageName = "fs.realpath"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"; + sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f"; + }; + }; + "function-bind-1.1.1" = { + name = "function-bind"; + packageName = "function-bind"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"; + sha512 = "yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="; + }; + }; + "gauge-4.0.0" = { + name = "gauge"; + packageName = "gauge"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/gauge/-/gauge-4.0.0.tgz"; + sha512 = "F8sU45yQpjQjxKkm1UOAhf0U/O0aFt//Fl7hsrNVto+patMHjs7dPI9mFOGUKbhrgKm0S3EjW3scMFuQmWSROw=="; + }; + }; + "gensync-1.0.0-beta.2" = { + name = "gensync"; + packageName = "gensync"; + version = "1.0.0-beta.2"; + src = fetchurl { + url = "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz"; + sha512 = "3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="; + }; + }; + "get-assigned-identifiers-1.2.0" = { + name = "get-assigned-identifiers"; + packageName = "get-assigned-identifiers"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz"; + sha512 = "mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ=="; + }; + }; + "get-caller-file-2.0.5" = { + name = "get-caller-file"; + packageName = "get-caller-file"; + version = "2.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz"; + sha512 = "DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="; + }; + }; + "get-intrinsic-1.1.1" = { + name = "get-intrinsic"; + packageName = "get-intrinsic"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz"; + sha512 = "kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q=="; + }; + }; + "get-package-type-0.1.0" = { + name = "get-package-type"; + packageName = "get-package-type"; + version = "0.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz"; + sha512 = "pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q=="; + }; + }; + "get-stream-6.0.1" = { + name = "get-stream"; + packageName = "get-stream"; + version = "6.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz"; + sha512 = "ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="; + }; + }; + "getpass-0.1.7" = { + name = "getpass"; + packageName = "getpass"; + version = "0.1.7"; + src = fetchurl { + url = "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz"; + sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa"; + }; + }; + "glob-7.2.0" = { + name = "glob"; + packageName = "glob"; + version = "7.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz"; + sha512 = "lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q=="; + }; + }; + "glob-parent-5.1.2" = { + name = "glob-parent"; + packageName = "glob-parent"; + version = "5.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"; + sha512 = "AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="; + }; + }; + "glob-parent-6.0.2" = { + name = "glob-parent"; + packageName = "glob-parent"; + version = "6.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz"; + sha512 = "XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="; + }; + }; + "glob-to-regexp-0.4.1" = { + name = "glob-to-regexp"; + packageName = "glob-to-regexp"; + version = "0.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz"; + sha512 = "lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="; + }; + }; + "globals-11.12.0" = { + name = "globals"; + packageName = "globals"; + version = "11.12.0"; + src = fetchurl { + url = "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz"; + sha512 = "WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="; + }; + }; + "globby-11.1.0" = { + name = "globby"; + packageName = "globby"; + version = "11.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz"; + sha512 = "jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="; + }; + }; + "globby-12.0.2" = { + name = "globby"; + packageName = "globby"; + version = "12.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/globby/-/globby-12.0.2.tgz"; + sha512 = "lAsmb/5Lww4r7MM9nCCliDZVIKbZTavrsunAsHLr9oHthrZP1qi7/gAnHOsUs9bLvEt2vKVJhHmxuL7QbDuPdQ=="; + }; + }; + "good-listener-1.2.2" = { + name = "good-listener"; + packageName = "good-listener"; + version = "1.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz"; + sha1 = "d53b30cdf9313dffb7dc9a0d477096aa6d145c50"; + }; + }; + "graceful-fs-4.2.8" = { + name = "graceful-fs"; + packageName = "graceful-fs"; + version = "4.2.8"; + src = fetchurl { + url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz"; + sha512 = "qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg=="; + }; + }; + "handle-thing-2.0.1" = { + name = "handle-thing"; + packageName = "handle-thing"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz"; + sha512 = "9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg=="; + }; + }; + "has-1.0.3" = { + name = "has"; + packageName = "has"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/has/-/has-1.0.3.tgz"; + sha512 = "f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw=="; + }; + }; + "has-ansi-2.0.0" = { + name = "has-ansi"; + packageName = "has-ansi"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz"; + sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91"; + }; + }; + "has-bigints-1.0.1" = { + name = "has-bigints"; + packageName = "has-bigints"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz"; + sha512 = "LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA=="; + }; + }; + "has-flag-3.0.0" = { + name = "has-flag"; + packageName = "has-flag"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz"; + sha1 = "b5d454dc2199ae225699f3467e5a07f3b955bafd"; + }; + }; + "has-flag-4.0.0" = { + name = "has-flag"; + packageName = "has-flag"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"; + sha512 = "EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="; + }; + }; + "has-symbols-1.0.2" = { + name = "has-symbols"; + packageName = "has-symbols"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz"; + sha512 = "chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw=="; + }; + }; + "has-unicode-2.0.1" = { + name = "has-unicode"; + packageName = "has-unicode"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz"; + sha1 = "e0e6fe6a28cf51138855e086d1691e771de2a8b9"; + }; + }; + "hash-base-3.1.0" = { + name = "hash-base"; + packageName = "hash-base"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz"; + sha512 = "1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA=="; + }; + }; + "hash.js-1.1.7" = { + name = "hash.js"; + packageName = "hash.js"; + version = "1.1.7"; + src = fetchurl { + url = "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz"; + sha512 = "taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA=="; + }; + }; + "hdr-histogram-js-2.0.1" = { + name = "hdr-histogram-js"; + packageName = "hdr-histogram-js"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.1.tgz"; + sha512 = "uPZxl1dAFnjUFHWLZmt93vUUvtHeaBay9nVNHu38SdOjMSF/4KqJUqa1Seuj08ptU1rEb6AHvB41X8n/zFZ74Q=="; + }; + }; + "hdr-histogram-percentiles-obj-3.0.0" = { + name = "hdr-histogram-percentiles-obj"; + packageName = "hdr-histogram-percentiles-obj"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz"; + sha512 = "7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw=="; + }; + }; + "hmac-drbg-1.0.1" = { + name = "hmac-drbg"; + packageName = "hmac-drbg"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz"; + sha1 = "d2745701025a6c775a6c545793ed502fc0c649a1"; + }; + }; + "hosted-git-info-4.0.2" = { + name = "hosted-git-info"; + packageName = "hosted-git-info"; + version = "4.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz"; + sha512 = "c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg=="; + }; + }; + "hpack.js-2.1.6" = { + name = "hpack.js"; + packageName = "hpack.js"; + version = "2.1.6"; + src = fetchurl { + url = "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz"; + sha1 = "87774c0949e513f42e84575b3c45681fade2a0b2"; + }; + }; + "html-entities-2.3.2" = { + name = "html-entities"; + packageName = "html-entities"; + version = "2.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz"; + sha512 = "c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ=="; + }; + }; + "htmlescape-1.1.1" = { + name = "htmlescape"; + packageName = "htmlescape"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz"; + sha1 = "3a03edc2214bca3b66424a3e7959349509cb0351"; + }; + }; + "http-cache-semantics-4.1.0" = { + name = "http-cache-semantics"; + packageName = "http-cache-semantics"; + version = "4.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz"; + sha512 = "carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="; + }; + }; + "http-deceiver-1.2.7" = { + name = "http-deceiver"; + packageName = "http-deceiver"; + version = "1.2.7"; + src = fetchurl { + url = "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz"; + sha1 = "fa7168944ab9a519d337cb0bec7284dc3e723d87"; + }; + }; + "http-errors-1.6.3" = { + name = "http-errors"; + packageName = "http-errors"; + version = "1.6.3"; + src = fetchurl { + url = "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz"; + sha1 = "8b55680bb4be283a0b5bf4ea2e38580be1d9320d"; + }; + }; + "http-errors-1.7.2" = { + name = "http-errors"; + packageName = "http-errors"; + version = "1.7.2"; + src = fetchurl { + url = "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz"; + sha512 = "uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg=="; + }; + }; + "http-parser-js-0.5.5" = { + name = "http-parser-js"; + packageName = "http-parser-js"; + version = "0.5.5"; + src = fetchurl { + url = "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz"; + sha512 = "x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA=="; + }; + }; + "http-proxy-1.18.1" = { + name = "http-proxy"; + packageName = "http-proxy"; + version = "1.18.1"; + src = fetchurl { + url = "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz"; + sha512 = "7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ=="; + }; + }; + "http-proxy-agent-4.0.1" = { + name = "http-proxy-agent"; + packageName = "http-proxy-agent"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz"; + sha512 = "k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg=="; + }; + }; + "http-proxy-middleware-2.0.1" = { + name = "http-proxy-middleware"; + packageName = "http-proxy-middleware"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz"; + sha512 = "cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg=="; + }; + }; + "https-browserify-1.0.0" = { + name = "https-browserify"; + packageName = "https-browserify"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz"; + sha1 = "ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"; + }; + }; + "https-proxy-agent-5.0.0" = { + name = "https-proxy-agent"; + packageName = "https-proxy-agent"; + version = "5.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz"; + sha512 = "EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA=="; + }; + }; + "human-signals-2.1.0" = { + name = "human-signals"; + packageName = "human-signals"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz"; + sha512 = "B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="; + }; + }; + "humanize-ms-1.2.1" = { + name = "humanize-ms"; + packageName = "humanize-ms"; + version = "1.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz"; + sha1 = "c46e3159a293f6b896da29316d8b6fe8bb79bbed"; + }; + }; + "iconv-lite-0.4.24" = { + name = "iconv-lite"; + packageName = "iconv-lite"; + version = "0.4.24"; + src = fetchurl { + url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"; + sha512 = "v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="; + }; + }; + "iconv-lite-0.6.3" = { + name = "iconv-lite"; + packageName = "iconv-lite"; + version = "0.6.3"; + src = fetchurl { + url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz"; + sha512 = "4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="; + }; + }; + "icss-utils-5.1.0" = { + name = "icss-utils"; + packageName = "icss-utils"; + version = "5.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz"; + sha512 = "soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA=="; + }; + }; + "ieee754-1.2.1" = { + name = "ieee754"; + packageName = "ieee754"; + version = "1.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz"; + sha512 = "dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="; + }; + }; + "ignore-5.2.0" = { + name = "ignore"; + packageName = "ignore"; + version = "5.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz"; + sha512 = "CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ=="; + }; + }; + "ignore-walk-4.0.1" = { + name = "ignore-walk"; + packageName = "ignore-walk"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz"; + sha512 = "rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw=="; + }; + }; + "immutable-4.0.0" = { + name = "immutable"; + packageName = "immutable"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz"; + sha512 = "zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw=="; + }; + }; + "import-fresh-3.3.0" = { + name = "import-fresh"; + packageName = "import-fresh"; + version = "3.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz"; + sha512 = "veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw=="; + }; + }; + "imurmurhash-0.1.4" = { + name = "imurmurhash"; + packageName = "imurmurhash"; + version = "0.1.4"; + src = fetchurl { + url = "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"; + sha1 = "9218b9b2b928a238b13dc4fb6b6d576f231453ea"; + }; + }; + "indent-string-4.0.0" = { + name = "indent-string"; + packageName = "indent-string"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz"; + sha512 = "EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="; + }; + }; + "indexes-of-1.0.1" = { + name = "indexes-of"; + packageName = "indexes-of"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz"; + sha1 = "f30f716c8e2bd346c7b67d3df3915566a7c05607"; + }; + }; + "infer-owner-1.0.4" = { + name = "infer-owner"; + packageName = "infer-owner"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz"; + sha512 = "IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A=="; + }; + }; + "inflight-1.0.6" = { + name = "inflight"; + packageName = "inflight"; + version = "1.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"; + sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9"; + }; + }; + "inherits-2.0.1" = { + name = "inherits"; + packageName = "inherits"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"; + sha1 = "b17d08d326b4423e568eff719f91b0b1cbdf69f1"; + }; + }; + "inherits-2.0.3" = { + name = "inherits"; + packageName = "inherits"; + version = "2.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz"; + sha1 = "633c2c83e3da42a502f52466022480f4208261de"; + }; + }; + "inherits-2.0.4" = { + name = "inherits"; + packageName = "inherits"; + version = "2.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"; + sha512 = "k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="; + }; + }; + "ini-2.0.0" = { + name = "ini"; + packageName = "ini"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz"; + sha512 = "7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA=="; + }; + }; + "inline-source-map-0.6.2" = { + name = "inline-source-map"; + packageName = "inline-source-map"; + version = "0.6.2"; + src = fetchurl { + url = "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz"; + sha1 = "f9393471c18a79d1724f863fa38b586370ade2a5"; + }; + }; + "inquirer-8.2.0" = { + name = "inquirer"; + packageName = "inquirer"; + version = "8.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz"; + sha512 = "0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ=="; + }; + }; + "insert-module-globals-7.2.1" = { + name = "insert-module-globals"; + packageName = "insert-module-globals"; + version = "7.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz"; + sha512 = "ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg=="; + }; + }; + "ip-1.1.5" = { + name = "ip"; + packageName = "ip"; + version = "1.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz"; + sha1 = "bdded70114290828c0a039e72ef25f5aaec4354a"; + }; + }; + "ipaddr.js-1.9.1" = { + name = "ipaddr.js"; + packageName = "ipaddr.js"; + version = "1.9.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz"; + sha512 = "0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="; + }; + }; + "ipaddr.js-2.0.1" = { + name = "ipaddr.js"; + packageName = "ipaddr.js"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz"; + sha512 = "1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng=="; + }; + }; + "is-arguments-1.1.0" = { + name = "is-arguments"; + packageName = "is-arguments"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz"; + sha512 = "1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg=="; + }; + }; + "is-arrayish-0.2.1" = { + name = "is-arrayish"; + packageName = "is-arrayish"; + version = "0.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz"; + sha1 = "77c99840527aa8ecb1a8ba697b80645a7a926a9d"; + }; + }; + "is-bigint-1.0.1" = { + name = "is-bigint"; + packageName = "is-bigint"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz"; + sha512 = "J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg=="; + }; + }; + "is-binary-path-2.1.0" = { + name = "is-binary-path"; + packageName = "is-binary-path"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz"; + sha512 = "ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="; + }; + }; + "is-boolean-object-1.1.0" = { + name = "is-boolean-object"; + packageName = "is-boolean-object"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz"; + sha512 = "a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA=="; + }; + }; + "is-buffer-1.1.6" = { + name = "is-buffer"; + packageName = "is-buffer"; + version = "1.1.6"; + src = fetchurl { + url = "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"; + sha512 = "NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="; + }; + }; + "is-buffer-2.0.5" = { + name = "is-buffer"; + packageName = "is-buffer"; + version = "2.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz"; + sha512 = "i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="; + }; + }; + "is-callable-1.2.3" = { + name = "is-callable"; + packageName = "is-callable"; + version = "1.2.3"; + src = fetchurl { + url = "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz"; + sha512 = "J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ=="; + }; + }; + "is-core-module-2.2.0" = { + name = "is-core-module"; + packageName = "is-core-module"; + version = "2.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz"; + sha512 = "XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ=="; + }; + }; + "is-date-object-1.0.2" = { + name = "is-date-object"; + packageName = "is-date-object"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz"; + sha512 = "USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g=="; + }; + }; + "is-docker-2.2.1" = { + name = "is-docker"; + packageName = "is-docker"; + version = "2.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz"; + sha512 = "F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="; + }; + }; + "is-extglob-2.1.1" = { + name = "is-extglob"; + packageName = "is-extglob"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"; + sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2"; + }; + }; + "is-fullwidth-code-point-3.0.0" = { + name = "is-fullwidth-code-point"; + packageName = "is-fullwidth-code-point"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz"; + sha512 = "zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="; + }; + }; + "is-generator-function-1.0.8" = { + name = "is-generator-function"; + packageName = "is-generator-function"; + version = "1.0.8"; + src = fetchurl { + url = "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.8.tgz"; + sha512 = "2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ=="; + }; + }; + "is-glob-4.0.3" = { + name = "is-glob"; + packageName = "is-glob"; + version = "4.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz"; + sha512 = "xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="; + }; + }; + "is-interactive-1.0.0" = { + name = "is-interactive"; + packageName = "is-interactive"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz"; + sha512 = "2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="; + }; + }; + "is-lambda-1.0.1" = { + name = "is-lambda"; + packageName = "is-lambda"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz"; + sha1 = "3d9877899e6a53efc0160504cde15f82e6f061d5"; + }; + }; + "is-negative-zero-2.0.1" = { + name = "is-negative-zero"; + packageName = "is-negative-zero"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz"; + sha512 = "2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w=="; + }; + }; + "is-number-7.0.0" = { + name = "is-number"; + packageName = "is-number"; + version = "7.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"; + sha512 = "41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="; + }; + }; + "is-number-object-1.0.4" = { + name = "is-number-object"; + packageName = "is-number-object"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz"; + sha512 = "zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw=="; + }; + }; + "is-path-cwd-2.2.0" = { + name = "is-path-cwd"; + packageName = "is-path-cwd"; + version = "2.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz"; + sha512 = "w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ=="; + }; + }; + "is-path-inside-3.0.3" = { + name = "is-path-inside"; + packageName = "is-path-inside"; + version = "3.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz"; + sha512 = "Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ=="; + }; + }; + "is-plain-obj-3.0.0" = { + name = "is-plain-obj"; + packageName = "is-plain-obj"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz"; + sha512 = "gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA=="; + }; + }; + "is-plain-object-2.0.4" = { + name = "is-plain-object"; + packageName = "is-plain-object"; + version = "2.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz"; + sha512 = "h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og=="; + }; + }; + "is-regex-1.1.2" = { + name = "is-regex"; + packageName = "is-regex"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz"; + sha512 = "axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg=="; + }; + }; + "is-stream-2.0.1" = { + name = "is-stream"; + packageName = "is-stream"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz"; + sha512 = "hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="; + }; + }; + "is-string-1.0.5" = { + name = "is-string"; + packageName = "is-string"; + version = "1.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz"; + sha512 = "buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ=="; + }; + }; + "is-symbol-1.0.3" = { + name = "is-symbol"; + packageName = "is-symbol"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz"; + sha512 = "OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ=="; + }; + }; + "is-typed-array-1.1.5" = { + name = "is-typed-array"; + packageName = "is-typed-array"; + version = "1.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz"; + sha512 = "S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug=="; + }; + }; + "is-typedarray-1.0.0" = { + name = "is-typedarray"; + packageName = "is-typedarray"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz"; + sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a"; + }; + }; + "is-unicode-supported-0.1.0" = { + name = "is-unicode-supported"; + packageName = "is-unicode-supported"; + version = "0.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz"; + sha512 = "knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="; + }; + }; + "is-what-3.14.1" = { + name = "is-what"; + packageName = "is-what"; + version = "3.14.1"; + src = fetchurl { + url = "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz"; + sha512 = "sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA=="; + }; + }; + "is-wsl-2.2.0" = { + name = "is-wsl"; + packageName = "is-wsl"; + version = "2.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz"; + sha512 = "fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="; + }; + }; + "isarray-1.0.0" = { + name = "isarray"; + packageName = "isarray"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz"; + sha1 = "bb935d48582cba168c06834957a54a3e07124f11"; + }; + }; + "isarray-2.0.5" = { + name = "isarray"; + packageName = "isarray"; + version = "2.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz"; + sha512 = "xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="; + }; + }; + "isbinaryfile-4.0.8" = { + name = "isbinaryfile"; + packageName = "isbinaryfile"; + version = "4.0.8"; + src = fetchurl { + url = "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz"; + sha512 = "53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w=="; + }; + }; + "isexe-2.0.0" = { + name = "isexe"; + packageName = "isexe"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"; + sha1 = "e8fbf374dc556ff8947a10dcb0572d633f2cfa10"; + }; + }; + "isobject-3.0.1" = { + name = "isobject"; + packageName = "isobject"; + version = "3.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz"; + sha1 = "4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"; + }; + }; + "isstream-0.1.2" = { + name = "isstream"; + packageName = "isstream"; + version = "0.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz"; + sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a"; + }; + }; + "istanbul-lib-coverage-3.2.0" = { + name = "istanbul-lib-coverage"; + packageName = "istanbul-lib-coverage"; + version = "3.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz"; + sha512 = "eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw=="; + }; + }; + "istanbul-lib-instrument-5.1.0" = { + name = "istanbul-lib-instrument"; + packageName = "istanbul-lib-instrument"; + version = "5.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz"; + sha512 = "czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q=="; + }; + }; + "jest-worker-27.2.0" = { + name = "jest-worker"; + packageName = "jest-worker"; + version = "27.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.0.tgz"; + sha512 = "laB0ZVIBz+voh/QQy9dmUuuDsadixeerrKqyVpgPz+CCWiOYjOBabUXHIXZhsdvkWbLqSHbgkAHWl5cg24Q6RA=="; + }; + }; + "js-tokens-4.0.0" = { + name = "js-tokens"; + packageName = "js-tokens"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"; + sha512 = "RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="; + }; + }; + "js-yaml-3.14.0" = { + name = "js-yaml"; + packageName = "js-yaml"; + version = "3.14.0"; + src = fetchurl { + url = "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz"; + sha512 = "/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A=="; + }; + }; + "jsbn-0.1.1" = { + name = "jsbn"; + packageName = "jsbn"; + version = "0.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz"; + sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"; + }; + }; + "jsesc-0.5.0" = { + name = "jsesc"; + packageName = "jsesc"; + version = "0.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz"; + sha1 = "e7dee66e35d6fc16f710fe91d5cf69f70f08911d"; + }; + }; + "jsesc-2.5.2" = { + name = "jsesc"; + packageName = "jsesc"; + version = "2.5.2"; + src = fetchurl { + url = "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz"; + sha512 = "OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="; + }; + }; + "json-parse-better-errors-1.0.2" = { + name = "json-parse-better-errors"; + packageName = "json-parse-better-errors"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz"; + sha512 = "mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="; + }; + }; + "json-parse-even-better-errors-2.3.1" = { + name = "json-parse-even-better-errors"; + packageName = "json-parse-even-better-errors"; + version = "2.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz"; + sha512 = "xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="; + }; + }; + "json-schema-0.4.0" = { + name = "json-schema"; + packageName = "json-schema"; + version = "0.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz"; + sha512 = "es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="; + }; + }; + "json-schema-traverse-0.4.1" = { + name = "json-schema-traverse"; + packageName = "json-schema-traverse"; + version = "0.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"; + sha512 = "xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="; + }; + }; + "json-schema-traverse-1.0.0" = { + name = "json-schema-traverse"; + packageName = "json-schema-traverse"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz"; + sha512 = "NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="; + }; + }; + "json-stringify-safe-5.0.1" = { + name = "json-stringify-safe"; + packageName = "json-stringify-safe"; + version = "5.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz"; + sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"; + }; + }; + "json5-1.0.1" = { + name = "json5"; + packageName = "json5"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz"; + sha512 = "aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow=="; + }; + }; + "json5-2.2.0" = { + name = "json5"; + packageName = "json5"; + version = "2.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz"; + sha512 = "f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA=="; + }; + }; + "jsonc-parser-3.0.0" = { + name = "jsonc-parser"; + packageName = "jsonc-parser"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz"; + sha512 = "fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA=="; + }; + }; + "jsonfile-4.0.0" = { + name = "jsonfile"; + packageName = "jsonfile"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz"; + sha1 = "8771aae0799b64076b76640fca058f9c10e33ecb"; + }; + }; + "jsonparse-1.3.1" = { + name = "jsonparse"; + packageName = "jsonparse"; + version = "1.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz"; + sha1 = "3f4dae4a91fac315f71062f8521cc239f1366280"; + }; + }; + "karma-6.3.4" = { + name = "karma"; + packageName = "karma"; + version = "6.3.4"; + src = fetchurl { + url = "https://registry.npmjs.org/karma/-/karma-6.3.4.tgz"; + sha512 = "hbhRogUYIulfkBTZT7xoPrCYhRBnBoqbbL4fszWD0ReFGUxU+LYBr3dwKdAluaDQ/ynT9/7C+Lf7pPNW4gSx4Q=="; + }; + }; + "karma-source-map-support-1.4.0" = { + name = "karma-source-map-support"; + packageName = "karma-source-map-support"; + version = "1.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz"; + sha512 = "RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A=="; + }; + }; + "kind-of-6.0.3" = { + name = "kind-of"; + packageName = "kind-of"; + version = "6.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz"; + sha512 = "dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="; + }; + }; + "klona-2.0.5" = { + name = "klona"; + packageName = "klona"; + version = "2.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz"; + sha512 = "pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ=="; + }; + }; + "labeled-stream-splicer-2.0.2" = { + name = "labeled-stream-splicer"; + packageName = "labeled-stream-splicer"; + version = "2.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz"; + sha512 = "Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw=="; + }; + }; + "less-4.1.2" = { + name = "less"; + packageName = "less"; + version = "4.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/less/-/less-4.1.2.tgz"; + sha512 = "EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA=="; + }; + }; + "less-loader-10.2.0" = { + name = "less-loader"; + packageName = "less-loader"; + version = "10.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/less-loader/-/less-loader-10.2.0.tgz"; + sha512 = "AV5KHWvCezW27GT90WATaDnfXBv99llDbtaj4bshq6DvAihMdNjaPDcUMa6EXKLRF+P2opFenJp89BXg91XLYg=="; + }; + }; + "levn-0.3.0" = { + name = "levn"; + packageName = "levn"; + version = "0.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz"; + sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee"; + }; + }; + "license-webpack-plugin-4.0.0" = { + name = "license-webpack-plugin"; + packageName = "license-webpack-plugin"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.0.tgz"; + sha512 = "b9iMrROrw2fTOJBZ57h0xJfT5/1Cxg4ucYbtpWoukv4Awb2TFPfDDFVHNM8w6SYQpVfB13a5tQJxgGamqwrsyw=="; + }; + }; + "lightweight-charts-3.3.0" = { + name = "lightweight-charts"; + packageName = "lightweight-charts"; + version = "3.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/lightweight-charts/-/lightweight-charts-3.3.0.tgz"; + sha512 = "W5jeBrXcHG8eHnIQ0L2CB9TLkrrsjNPlQq5SICPO8PnJ3dJ8jZkLCAwemZ7Ym7ZGCfKCz6ow1EPbyzNYxblnkw=="; + }; + }; + "lines-and-columns-1.2.4" = { + name = "lines-and-columns"; + packageName = "lines-and-columns"; + version = "1.2.4"; + src = fetchurl { + url = "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz"; + sha512 = "7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="; + }; + }; + "loader-runner-4.2.0" = { + name = "loader-runner"; + packageName = "loader-runner"; + version = "4.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz"; + sha512 = "92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw=="; + }; + }; + "loader-utils-1.4.0" = { + name = "loader-utils"; + packageName = "loader-utils"; + version = "1.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz"; + sha512 = "qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA=="; + }; + }; + "loader-utils-2.0.0" = { + name = "loader-utils"; + packageName = "loader-utils"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz"; + sha512 = "rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ=="; + }; + }; + "loader-utils-3.2.0" = { + name = "loader-utils"; + packageName = "loader-utils"; + version = "3.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz"; + sha512 = "HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ=="; + }; + }; + "locate-path-5.0.0" = { + name = "locate-path"; + packageName = "locate-path"; + version = "5.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz"; + sha512 = "t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="; + }; + }; + "lodash-4.17.21" = { + name = "lodash"; + packageName = "lodash"; + version = "4.17.21"; + src = fetchurl { + url = "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"; + sha512 = "v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="; + }; + }; + "lodash.debounce-4.0.8" = { + name = "lodash.debounce"; + packageName = "lodash.debounce"; + version = "4.0.8"; + src = fetchurl { + url = "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz"; + sha1 = "82d79bff30a67c4005ffd5e2515300ad9ca4d7af"; + }; + }; + "lodash.memoize-3.0.4" = { + name = "lodash.memoize"; + packageName = "lodash.memoize"; + version = "3.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz"; + sha1 = "2dcbd2c287cbc0a55cc42328bd0c736150d53e3f"; + }; + }; + "log-symbols-4.1.0" = { + name = "log-symbols"; + packageName = "log-symbols"; + version = "4.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz"; + sha512 = "8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg=="; + }; + }; + "log4js-6.3.0" = { + name = "log4js"; + packageName = "log4js"; + version = "6.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz"; + sha512 = "Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw=="; + }; + }; + "lru-cache-6.0.0" = { + name = "lru-cache"; + packageName = "lru-cache"; + version = "6.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"; + sha512 = "Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="; + }; + }; + "magic-string-0.23.2" = { + name = "magic-string"; + packageName = "magic-string"; + version = "0.23.2"; + src = fetchurl { + url = "https://registry.npmjs.org/magic-string/-/magic-string-0.23.2.tgz"; + sha512 = "oIUZaAxbcxYIp4AyLafV6OVKoB3YouZs0UTCJ8mOKBHNyJgGDaMJ4TgA+VylJh6fx7EQCC52XkbURxxG9IoJXA=="; + }; + }; + "magic-string-0.25.7" = { + name = "magic-string"; + packageName = "magic-string"; + version = "0.25.7"; + src = fetchurl { + url = "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz"; + sha512 = "4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA=="; + }; + }; + "make-dir-3.1.0" = { + name = "make-dir"; + packageName = "make-dir"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz"; + sha512 = "g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw=="; + }; + }; + "make-fetch-happen-9.1.0" = { + name = "make-fetch-happen"; + packageName = "make-fetch-happen"; + version = "9.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz"; + sha512 = "+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg=="; + }; + }; + "md5.js-1.3.5" = { + name = "md5.js"; + packageName = "md5.js"; + version = "1.3.5"; + src = fetchurl { + url = "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz"; + sha512 = "xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg=="; + }; + }; + "media-typer-0.3.0" = { + name = "media-typer"; + packageName = "media-typer"; + version = "0.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz"; + sha1 = "8710d7af0aa626f8fffa1ce00168545263255748"; + }; + }; + "memfs-3.4.1" = { + name = "memfs"; + packageName = "memfs"; + version = "3.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz"; + sha512 = "1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw=="; + }; + }; + "merge-descriptors-1.0.1" = { + name = "merge-descriptors"; + packageName = "merge-descriptors"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz"; + sha1 = "b00aaa556dd8b44568150ec9d1b953f3f90cbb61"; + }; + }; + "merge-source-map-1.0.4" = { + name = "merge-source-map"; + packageName = "merge-source-map"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz"; + sha1 = "a5de46538dae84d4114cc5ea02b4772a6346701f"; + }; + }; + "merge-stream-2.0.0" = { + name = "merge-stream"; + packageName = "merge-stream"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz"; + sha512 = "abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="; + }; + }; + "merge2-1.4.1" = { + name = "merge2"; + packageName = "merge2"; + version = "1.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz"; + sha512 = "8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="; + }; + }; + "methods-1.1.2" = { + name = "methods"; + packageName = "methods"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz"; + sha1 = "5529a4d67654134edcc5266656835b0f851afcee"; + }; + }; + "micromatch-4.0.4" = { + name = "micromatch"; + packageName = "micromatch"; + version = "4.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz"; + sha512 = "pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg=="; + }; + }; + "miller-rabin-4.0.1" = { + name = "miller-rabin"; + packageName = "miller-rabin"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz"; + sha512 = "115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA=="; + }; + }; + "mime-1.6.0" = { + name = "mime"; + packageName = "mime"; + version = "1.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz"; + sha512 = "x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="; + }; + }; + "mime-2.5.2" = { + name = "mime"; + packageName = "mime"; + version = "2.5.2"; + src = fetchurl { + url = "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz"; + sha512 = "tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg=="; + }; + }; + "mime-db-1.49.0" = { + name = "mime-db"; + packageName = "mime-db"; + version = "1.49.0"; + src = fetchurl { + url = "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz"; + sha512 = "CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA=="; + }; + }; + "mime-types-2.1.32" = { + name = "mime-types"; + packageName = "mime-types"; + version = "2.1.32"; + src = fetchurl { + url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz"; + sha512 = "hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A=="; + }; + }; + "mimic-fn-2.1.0" = { + name = "mimic-fn"; + packageName = "mimic-fn"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz"; + sha512 = "OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="; + }; + }; + "mini-css-extract-plugin-2.4.5" = { + name = "mini-css-extract-plugin"; + packageName = "mini-css-extract-plugin"; + version = "2.4.5"; + src = fetchurl { + url = "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.4.5.tgz"; + sha512 = "oEIhRucyn1JbT/1tU2BhnwO6ft1jjH1iCX9Gc59WFMg0n5773rQU0oyQ0zzeYFFuBfONaRbQJyGoPtuNseMxjA=="; + }; + }; + "minify-stream-2.1.0" = { + name = "minify-stream"; + packageName = "minify-stream"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/minify-stream/-/minify-stream-2.1.0.tgz"; + sha512 = "P5xE4EQRkn7Td54VGcgfDMFx1jmKPPIXCdcMfrbXS6cNHK4dO1LXwtYFb48hHrSmZfT+jlGImvHgSZEkbpNtCw=="; + }; + }; + "minimalistic-assert-1.0.1" = { + name = "minimalistic-assert"; + packageName = "minimalistic-assert"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz"; + sha512 = "UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="; + }; + }; + "minimalistic-crypto-utils-1.0.1" = { + name = "minimalistic-crypto-utils"; + packageName = "minimalistic-crypto-utils"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz"; + sha1 = "f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"; + }; + }; + "minimatch-3.0.4" = { + name = "minimatch"; + packageName = "minimatch"; + version = "3.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz"; + sha512 = "yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA=="; + }; + }; + "minimist-1.2.5" = { + name = "minimist"; + packageName = "minimist"; + version = "1.2.5"; + src = fetchurl { + url = "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz"; + sha512 = "FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="; + }; + }; + "minipass-3.1.5" = { + name = "minipass"; + packageName = "minipass"; + version = "3.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz"; + sha512 = "+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw=="; + }; + }; + "minipass-collect-1.0.2" = { + name = "minipass-collect"; + packageName = "minipass-collect"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz"; + sha512 = "6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA=="; + }; + }; + "minipass-fetch-1.4.1" = { + name = "minipass-fetch"; + packageName = "minipass-fetch"; + version = "1.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz"; + sha512 = "CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw=="; + }; + }; + "minipass-flush-1.0.5" = { + name = "minipass-flush"; + packageName = "minipass-flush"; + version = "1.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz"; + sha512 = "JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw=="; + }; + }; + "minipass-json-stream-1.0.1" = { + name = "minipass-json-stream"; + packageName = "minipass-json-stream"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz"; + sha512 = "ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg=="; + }; + }; + "minipass-pipeline-1.2.4" = { + name = "minipass-pipeline"; + packageName = "minipass-pipeline"; + version = "1.2.4"; + src = fetchurl { + url = "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz"; + sha512 = "xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A=="; + }; + }; + "minipass-sized-1.0.3" = { + name = "minipass-sized"; + packageName = "minipass-sized"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz"; + sha512 = "MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g=="; + }; + }; + "minizlib-2.1.2" = { + name = "minizlib"; + packageName = "minizlib"; + version = "2.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz"; + sha512 = "bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg=="; + }; + }; + "mkdirp-0.5.5" = { + name = "mkdirp"; + packageName = "mkdirp"; + version = "0.5.5"; + src = fetchurl { + url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz"; + sha512 = "NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ=="; + }; + }; + "mkdirp-1.0.4" = { + name = "mkdirp"; + packageName = "mkdirp"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz"; + sha512 = "vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="; + }; + }; + "mkdirp-classic-0.5.3" = { + name = "mkdirp-classic"; + packageName = "mkdirp-classic"; + version = "0.5.3"; + src = fetchurl { + url = "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz"; + sha512 = "gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="; + }; + }; + "module-deps-6.2.3" = { + name = "module-deps"; + packageName = "module-deps"; + version = "6.2.3"; + src = fetchurl { + url = "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz"; + sha512 = "fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA=="; + }; + }; + "ms-2.0.0" = { + name = "ms"; + packageName = "ms"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"; + sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8"; + }; + }; + "ms-2.1.1" = { + name = "ms"; + packageName = "ms"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz"; + sha512 = "tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="; + }; + }; + "ms-2.1.2" = { + name = "ms"; + packageName = "ms"; + version = "2.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"; + sha512 = "sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="; + }; + }; + "multi-stage-sourcemap-0.2.1" = { + name = "multi-stage-sourcemap"; + packageName = "multi-stage-sourcemap"; + version = "0.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.2.1.tgz"; + sha1 = "b09fc8586eaa17f81d575c4ad02e0f7a3f6b1105"; + }; + }; + "multicast-dns-6.2.3" = { + name = "multicast-dns"; + packageName = "multicast-dns"; + version = "6.2.3"; + src = fetchurl { + url = "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz"; + sha512 = "ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g=="; + }; + }; + "multicast-dns-service-types-1.1.0" = { + name = "multicast-dns-service-types"; + packageName = "multicast-dns-service-types"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz"; + sha1 = "899f11d9686e5e05cb91b35d5f0e63b773cfc901"; + }; + }; + "multisplice-1.0.0" = { + name = "multisplice"; + packageName = "multisplice"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/multisplice/-/multisplice-1.0.0.tgz"; + sha512 = "KU5tVjIdTGsMb92JlWwEZCGrvtI1ku9G9GuNbWdQT/Ici1ztFXX0L8lWpbbC3pISVMfBNL56wdqplHvva2XSlA=="; + }; + }; + "mute-stream-0.0.8" = { + name = "mute-stream"; + packageName = "mute-stream"; + version = "0.0.8"; + src = fetchurl { + url = "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz"; + sha512 = "nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="; + }; + }; + "mutexify-1.3.1" = { + name = "mutexify"; + packageName = "mutexify"; + version = "1.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/mutexify/-/mutexify-1.3.1.tgz"; + sha512 = "nU7mOEuaXiQIB/EgTIjYZJ7g8KqMm2D8l4qp+DqA4jxWOb/tnb1KEoqp+tlbdQIDIAiC1i7j7X/3yHDFXLxr9g=="; + }; + }; + "nanobench-2.1.1" = { + name = "nanobench"; + packageName = "nanobench"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/nanobench/-/nanobench-2.1.1.tgz"; + sha512 = "z+Vv7zElcjN+OpzAxAquUayFLGK3JI/ubCl0Oh64YQqsTGG09CGqieJVQw4ui8huDnnAgrvTv93qi5UaOoNj8A=="; + }; + }; + "nanoid-3.1.30" = { + name = "nanoid"; + packageName = "nanoid"; + version = "3.1.30"; + src = fetchurl { + url = "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz"; + sha512 = "zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ=="; + }; + }; + "negotiator-0.6.2" = { + name = "negotiator"; + packageName = "negotiator"; + version = "0.6.2"; + src = fetchurl { + url = "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz"; + sha512 = "hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="; + }; + }; + "neo-async-2.6.2" = { + name = "neo-async"; + packageName = "neo-async"; + version = "2.6.2"; + src = fetchurl { + url = "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz"; + sha512 = "Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="; + }; + }; + "next-tick-1.0.0" = { + name = "next-tick"; + packageName = "next-tick"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz"; + sha1 = "ca86d1fe8828169b0120208e3dc8424b9db8342c"; + }; + }; + "ngx-bootrap-multiselect-2.0.0" = { + name = "ngx-bootrap-multiselect"; + packageName = "ngx-bootrap-multiselect"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ngx-bootrap-multiselect/-/ngx-bootrap-multiselect-2.0.0.tgz"; + sha512 = "GV/2MigCS5oi6P+zWtFSmq1TLWW1kcKsJNAXLP3hHXxmY3HgMKeUPk57o3T+YHje73JRp5reXMhEIlYuoOmoRg=="; + }; + }; + "ngx-echarts-7.0.1" = { + name = "ngx-echarts"; + packageName = "ngx-echarts"; + version = "7.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ngx-echarts/-/ngx-echarts-7.0.1.tgz"; + sha512 = "DDRwEssQRjjgPElEjF1emORoUEnF6OMZ20xnQBLueSHitM7XnIUErYVe9GMmm/jCtI+iPvJPEedyxMPl62nHLw=="; + }; + }; + "ngx-infinite-scroll-10.0.1" = { + name = "ngx-infinite-scroll"; + packageName = "ngx-infinite-scroll"; + version = "10.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ngx-infinite-scroll/-/ngx-infinite-scroll-10.0.1.tgz"; + sha512 = "7is0eJZ9kJPsaHohRmMhJ/QFHAW9jp9twO5HcHRvFM/Yl/R8QCiokgjwmH0/CR3MuxUanxfHZMfO3PbYTwlBEg=="; + }; + }; + "node-forge-0.10.0" = { + name = "node-forge"; + packageName = "node-forge"; + version = "0.10.0"; + src = fetchurl { + url = "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz"; + sha512 = "PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA=="; + }; + }; + "node-gyp-8.4.1" = { + name = "node-gyp"; + packageName = "node-gyp"; + version = "8.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz"; + sha512 = "olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w=="; + }; + }; + "node-releases-2.0.1" = { + name = "node-releases"; + packageName = "node-releases"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz"; + sha512 = "CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA=="; + }; + }; + "nopt-5.0.0" = { + name = "nopt"; + packageName = "nopt"; + version = "5.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz"; + sha512 = "Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ=="; + }; + }; + "normalize-path-3.0.0" = { + name = "normalize-path"; + packageName = "normalize-path"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz"; + sha512 = "6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="; + }; + }; + "normalize-range-0.1.2" = { + name = "normalize-range"; + packageName = "normalize-range"; + version = "0.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz"; + sha1 = "2d10c06bdfd312ea9777695a4d28439456b75942"; + }; + }; + "npm-bundled-1.1.2" = { + name = "npm-bundled"; + packageName = "npm-bundled"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz"; + sha512 = "x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ=="; + }; + }; + "npm-install-checks-4.0.0" = { + name = "npm-install-checks"; + packageName = "npm-install-checks"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz"; + sha512 = "09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w=="; + }; + }; + "npm-normalize-package-bin-1.0.1" = { + name = "npm-normalize-package-bin"; + packageName = "npm-normalize-package-bin"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz"; + sha512 = "EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA=="; + }; + }; + "npm-package-arg-8.1.5" = { + name = "npm-package-arg"; + packageName = "npm-package-arg"; + version = "8.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz"; + sha512 = "LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q=="; + }; + }; + "npm-packlist-3.0.0" = { + name = "npm-packlist"; + packageName = "npm-packlist"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz"; + sha512 = "L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ=="; + }; + }; + "npm-pick-manifest-6.1.1" = { + name = "npm-pick-manifest"; + packageName = "npm-pick-manifest"; + version = "6.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz"; + sha512 = "dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA=="; + }; + }; + "npm-registry-fetch-11.0.0" = { + name = "npm-registry-fetch"; + packageName = "npm-registry-fetch"; + version = "11.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz"; + sha512 = "jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA=="; + }; + }; + "npm-run-path-4.0.1" = { + name = "npm-run-path"; + packageName = "npm-run-path"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz"; + sha512 = "S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="; + }; + }; + "npmlog-6.0.0" = { + name = "npmlog"; + packageName = "npmlog"; + version = "6.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/npmlog/-/npmlog-6.0.0.tgz"; + sha512 = "03ppFRGlsyUaQFbGC2C8QWJN/C/K7PsfyD9aQdhVKAQIH4sQBc8WASqFBP7O+Ut4d2oo5LoeoboB3cGdBZSp6Q=="; + }; + }; + "nth-check-2.0.1" = { + name = "nth-check"; + packageName = "nth-check"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz"; + sha512 = "it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w=="; + }; + }; + "num2fraction-1.2.2" = { + name = "num2fraction"; + packageName = "num2fraction"; + version = "1.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz"; + sha1 = "6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"; + }; + }; + "object-assign-4.1.1" = { + name = "object-assign"; + packageName = "object-assign"; + version = "4.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"; + sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863"; + }; + }; + "object-inspect-1.9.0" = { + name = "object-inspect"; + packageName = "object-inspect"; + version = "1.9.0"; + src = fetchurl { + url = "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz"; + sha512 = "i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw=="; + }; + }; + "object-is-1.1.5" = { + name = "object-is"; + packageName = "object-is"; + version = "1.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz"; + sha512 = "3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw=="; + }; + }; + "object-keys-1.1.1" = { + name = "object-keys"; + packageName = "object-keys"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz"; + sha512 = "NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="; + }; + }; + "object.assign-4.1.2" = { + name = "object.assign"; + packageName = "object.assign"; + version = "4.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz"; + sha512 = "ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ=="; + }; + }; + "obuf-1.1.2" = { + name = "obuf"; + packageName = "obuf"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz"; + sha512 = "PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="; + }; + }; + "on-finished-2.3.0" = { + name = "on-finished"; + packageName = "on-finished"; + version = "2.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz"; + sha1 = "20f1336481b083cd75337992a16971aa2d906947"; + }; + }; + "on-headers-1.0.2" = { + name = "on-headers"; + packageName = "on-headers"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz"; + sha512 = "pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="; + }; + }; + "once-1.4.0" = { + name = "once"; + packageName = "once"; + version = "1.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz"; + sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1"; + }; + }; + "onetime-5.1.2" = { + name = "onetime"; + packageName = "onetime"; + version = "5.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz"; + sha512 = "kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="; + }; + }; + "open-8.4.0" = { + name = "open"; + packageName = "open"; + version = "8.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/open/-/open-8.4.0.tgz"; + sha512 = "XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q=="; + }; + }; + "opencollective-postinstall-2.0.3" = { + name = "opencollective-postinstall"; + packageName = "opencollective-postinstall"; + version = "2.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz"; + sha512 = "8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q=="; + }; + }; + "optionator-0.8.3" = { + name = "optionator"; + packageName = "optionator"; + version = "0.8.3"; + src = fetchurl { + url = "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz"; + sha512 = "+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA=="; + }; + }; + "ora-5.4.1" = { + name = "ora"; + packageName = "ora"; + version = "5.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz"; + sha512 = "5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ=="; + }; + }; + "os-browserify-0.3.0" = { + name = "os-browserify"; + packageName = "os-browserify"; + version = "0.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz"; + sha1 = "854373c7f5c2315914fc9bfc6bd8238fdda1ec27"; + }; + }; + "os-tmpdir-1.0.2" = { + name = "os-tmpdir"; + packageName = "os-tmpdir"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz"; + sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274"; + }; + }; + "p-limit-2.3.0" = { + name = "p-limit"; + packageName = "p-limit"; + version = "2.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz"; + sha512 = "//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="; + }; + }; + "p-limit-3.1.0" = { + name = "p-limit"; + packageName = "p-limit"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz"; + sha512 = "TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="; + }; + }; + "p-locate-4.1.0" = { + name = "p-locate"; + packageName = "p-locate"; + version = "4.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz"; + sha512 = "R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="; + }; + }; + "p-map-4.0.0" = { + name = "p-map"; + packageName = "p-map"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz"; + sha512 = "/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ=="; + }; + }; + "p-retry-4.6.1" = { + name = "p-retry"; + packageName = "p-retry"; + version = "4.6.1"; + src = fetchurl { + url = "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz"; + sha512 = "e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA=="; + }; + }; + "p-try-2.2.0" = { + name = "p-try"; + packageName = "p-try"; + version = "2.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz"; + sha512 = "R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="; + }; + }; + "pacote-12.0.2" = { + name = "pacote"; + packageName = "pacote"; + version = "12.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/pacote/-/pacote-12.0.2.tgz"; + sha512 = "Ar3mhjcxhMzk+OVZ8pbnXdb0l8+pimvlsqBGRNkble2NVgyqOGE3yrCGi/lAYq7E7NRDMz89R1Wx5HIMCGgeYg=="; + }; + }; + "pako-1.0.11" = { + name = "pako"; + packageName = "pako"; + version = "1.0.11"; + src = fetchurl { + url = "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz"; + sha512 = "4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="; + }; + }; + "parent-module-1.0.1" = { + name = "parent-module"; + packageName = "parent-module"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz"; + sha512 = "GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="; + }; + }; + "parents-1.0.1" = { + name = "parents"; + packageName = "parents"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz"; + sha1 = "fedd4d2bf193a77745fe71e371d73c3307d9c751"; + }; + }; + "parse-asn1-5.1.6" = { + name = "parse-asn1"; + packageName = "parse-asn1"; + version = "5.1.6"; + src = fetchurl { + url = "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz"; + sha512 = "RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw=="; + }; + }; + "parse-json-5.2.0" = { + name = "parse-json"; + packageName = "parse-json"; + version = "5.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz"; + sha512 = "ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="; + }; + }; + "parse-node-version-1.0.1" = { + name = "parse-node-version"; + packageName = "parse-node-version"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz"; + sha512 = "3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA=="; + }; + }; + "parse5-6.0.1" = { + name = "parse5"; + packageName = "parse5"; + version = "6.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz"; + sha512 = "Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="; + }; + }; + "parse5-html-rewriting-stream-6.0.1" = { + name = "parse5-html-rewriting-stream"; + packageName = "parse5-html-rewriting-stream"; + version = "6.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz"; + sha512 = "vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg=="; + }; + }; + "parse5-htmlparser2-tree-adapter-6.0.1" = { + name = "parse5-htmlparser2-tree-adapter"; + packageName = "parse5-htmlparser2-tree-adapter"; + version = "6.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz"; + sha512 = "qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA=="; + }; + }; + "parse5-sax-parser-6.0.1" = { + name = "parse5-sax-parser"; + packageName = "parse5-sax-parser"; + version = "6.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz"; + sha512 = "kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg=="; + }; + }; + "parseurl-1.3.3" = { + name = "parseurl"; + packageName = "parseurl"; + version = "1.3.3"; + src = fetchurl { + url = "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz"; + sha512 = "CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="; + }; + }; + "path-browserify-1.0.1" = { + name = "path-browserify"; + packageName = "path-browserify"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz"; + sha512 = "b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="; + }; + }; + "path-exists-4.0.0" = { + name = "path-exists"; + packageName = "path-exists"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz"; + sha512 = "ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="; + }; + }; + "path-is-absolute-1.0.1" = { + name = "path-is-absolute"; + packageName = "path-is-absolute"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"; + sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"; + }; + }; + "path-key-3.1.1" = { + name = "path-key"; + packageName = "path-key"; + version = "3.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz"; + sha512 = "ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="; + }; + }; + "path-parse-1.0.7" = { + name = "path-parse"; + packageName = "path-parse"; + version = "1.0.7"; + src = fetchurl { + url = "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz"; + sha512 = "LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="; + }; + }; + "path-platform-0.11.15" = { + name = "path-platform"; + packageName = "path-platform"; + version = "0.11.15"; + src = fetchurl { + url = "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz"; + sha1 = "e864217f74c36850f0852b78dc7bf7d4a5721bf2"; + }; + }; + "path-to-regexp-0.1.7" = { + name = "path-to-regexp"; + packageName = "path-to-regexp"; + version = "0.1.7"; + src = fetchurl { + url = "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz"; + sha1 = "df604178005f522f15eb4490e7247a1bfaa67f8c"; + }; + }; + "path-type-4.0.0" = { + name = "path-type"; + packageName = "path-type"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz"; + sha512 = "gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="; + }; + }; + "pbkdf2-3.1.1" = { + name = "pbkdf2"; + packageName = "pbkdf2"; + version = "3.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz"; + sha512 = "4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg=="; + }; + }; + "performance-now-2.1.0" = { + name = "performance-now"; + packageName = "performance-now"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz"; + sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"; + }; + }; + "picocolors-0.2.1" = { + name = "picocolors"; + packageName = "picocolors"; + version = "0.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz"; + sha512 = "cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA=="; + }; + }; + "picocolors-1.0.0" = { + name = "picocolors"; + packageName = "picocolors"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"; + sha512 = "1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="; + }; + }; + "picomatch-2.3.0" = { + name = "picomatch"; + packageName = "picomatch"; + version = "2.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz"; + sha512 = "lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw=="; + }; + }; + "pify-2.3.0" = { + name = "pify"; + packageName = "pify"; + version = "2.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz"; + sha1 = "ed141a6ac043a849ea588498e7dca8b15330e90c"; + }; + }; + "piscina-3.1.0" = { + name = "piscina"; + packageName = "piscina"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/piscina/-/piscina-3.1.0.tgz"; + sha512 = "KTW4sjsCD34MHrUbx9eAAbuUSpVj407hQSgk/6Epkg0pbRBmv4a3UX7Sr8wxm9xYqQLnsN4mFOjqGDzHAdgKQg=="; + }; + }; + "pkg-dir-4.2.0" = { + name = "pkg-dir"; + packageName = "pkg-dir"; + version = "4.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz"; + sha512 = "HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ=="; + }; + }; + "pngjs-5.0.0" = { + name = "pngjs"; + packageName = "pngjs"; + version = "5.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz"; + sha512 = "40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw=="; + }; + }; + "portfinder-1.0.28" = { + name = "portfinder"; + packageName = "portfinder"; + version = "1.0.28"; + src = fetchurl { + url = "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz"; + sha512 = "Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA=="; + }; + }; + "postcss-7.0.39" = { + name = "postcss"; + packageName = "postcss"; + version = "7.0.39"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz"; + sha512 = "yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA=="; + }; + }; + "postcss-8.4.4" = { + name = "postcss"; + packageName = "postcss"; + version = "8.4.4"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss/-/postcss-8.4.4.tgz"; + sha512 = "joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q=="; + }; + }; + "postcss-attribute-case-insensitive-4.0.2" = { + name = "postcss-attribute-case-insensitive"; + packageName = "postcss-attribute-case-insensitive"; + version = "4.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz"; + sha512 = "clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA=="; + }; + }; + "postcss-color-functional-notation-2.0.1" = { + name = "postcss-color-functional-notation"; + packageName = "postcss-color-functional-notation"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz"; + sha512 = "ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g=="; + }; + }; + "postcss-color-gray-5.0.0" = { + name = "postcss-color-gray"; + packageName = "postcss-color-gray"; + version = "5.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz"; + sha512 = "q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw=="; + }; + }; + "postcss-color-hex-alpha-5.0.3" = { + name = "postcss-color-hex-alpha"; + packageName = "postcss-color-hex-alpha"; + version = "5.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz"; + sha512 = "PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw=="; + }; + }; + "postcss-color-mod-function-3.0.3" = { + name = "postcss-color-mod-function"; + packageName = "postcss-color-mod-function"; + version = "3.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz"; + sha512 = "YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ=="; + }; + }; + "postcss-color-rebeccapurple-4.0.1" = { + name = "postcss-color-rebeccapurple"; + packageName = "postcss-color-rebeccapurple"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz"; + sha512 = "aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g=="; + }; + }; + "postcss-custom-media-7.0.8" = { + name = "postcss-custom-media"; + packageName = "postcss-custom-media"; + version = "7.0.8"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz"; + sha512 = "c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg=="; + }; + }; + "postcss-custom-properties-8.0.11" = { + name = "postcss-custom-properties"; + packageName = "postcss-custom-properties"; + version = "8.0.11"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz"; + sha512 = "nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA=="; + }; + }; + "postcss-custom-selectors-5.1.2" = { + name = "postcss-custom-selectors"; + packageName = "postcss-custom-selectors"; + version = "5.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz"; + sha512 = "DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w=="; + }; + }; + "postcss-dir-pseudo-class-5.0.0" = { + name = "postcss-dir-pseudo-class"; + packageName = "postcss-dir-pseudo-class"; + version = "5.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz"; + sha512 = "3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw=="; + }; + }; + "postcss-double-position-gradients-1.0.0" = { + name = "postcss-double-position-gradients"; + packageName = "postcss-double-position-gradients"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz"; + sha512 = "G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA=="; + }; + }; + "postcss-env-function-2.0.2" = { + name = "postcss-env-function"; + packageName = "postcss-env-function"; + version = "2.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz"; + sha512 = "rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw=="; + }; + }; + "postcss-focus-visible-4.0.0" = { + name = "postcss-focus-visible"; + packageName = "postcss-focus-visible"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz"; + sha512 = "Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g=="; + }; + }; + "postcss-focus-within-3.0.0" = { + name = "postcss-focus-within"; + packageName = "postcss-focus-within"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz"; + sha512 = "W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w=="; + }; + }; + "postcss-font-variant-4.0.1" = { + name = "postcss-font-variant"; + packageName = "postcss-font-variant"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz"; + sha512 = "I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA=="; + }; + }; + "postcss-gap-properties-2.0.0" = { + name = "postcss-gap-properties"; + packageName = "postcss-gap-properties"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz"; + sha512 = "QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg=="; + }; + }; + "postcss-image-set-function-3.0.1" = { + name = "postcss-image-set-function"; + packageName = "postcss-image-set-function"; + version = "3.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz"; + sha512 = "oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw=="; + }; + }; + "postcss-import-14.0.2" = { + name = "postcss-import"; + packageName = "postcss-import"; + version = "14.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz"; + sha512 = "BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g=="; + }; + }; + "postcss-initial-3.0.4" = { + name = "postcss-initial"; + packageName = "postcss-initial"; + version = "3.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.4.tgz"; + sha512 = "3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg=="; + }; + }; + "postcss-lab-function-2.0.1" = { + name = "postcss-lab-function"; + packageName = "postcss-lab-function"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz"; + sha512 = "whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg=="; + }; + }; + "postcss-loader-6.2.1" = { + name = "postcss-loader"; + packageName = "postcss-loader"; + version = "6.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz"; + sha512 = "WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q=="; + }; + }; + "postcss-logical-3.0.0" = { + name = "postcss-logical"; + packageName = "postcss-logical"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz"; + sha512 = "1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA=="; + }; + }; + "postcss-media-minmax-4.0.0" = { + name = "postcss-media-minmax"; + packageName = "postcss-media-minmax"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz"; + sha512 = "fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw=="; + }; + }; + "postcss-modules-extract-imports-3.0.0" = { + name = "postcss-modules-extract-imports"; + packageName = "postcss-modules-extract-imports"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz"; + sha512 = "bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw=="; + }; + }; + "postcss-modules-local-by-default-4.0.0" = { + name = "postcss-modules-local-by-default"; + packageName = "postcss-modules-local-by-default"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz"; + sha512 = "sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ=="; + }; + }; + "postcss-modules-scope-3.0.0" = { + name = "postcss-modules-scope"; + packageName = "postcss-modules-scope"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz"; + sha512 = "hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg=="; + }; + }; + "postcss-modules-values-4.0.0" = { + name = "postcss-modules-values"; + packageName = "postcss-modules-values"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz"; + sha512 = "RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ=="; + }; + }; + "postcss-nesting-7.0.1" = { + name = "postcss-nesting"; + packageName = "postcss-nesting"; + version = "7.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz"; + sha512 = "FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg=="; + }; + }; + "postcss-overflow-shorthand-2.0.0" = { + name = "postcss-overflow-shorthand"; + packageName = "postcss-overflow-shorthand"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz"; + sha512 = "aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g=="; + }; + }; + "postcss-page-break-2.0.0" = { + name = "postcss-page-break"; + packageName = "postcss-page-break"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz"; + sha512 = "tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ=="; + }; + }; + "postcss-place-4.0.1" = { + name = "postcss-place"; + packageName = "postcss-place"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz"; + sha512 = "Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg=="; + }; + }; + "postcss-preset-env-6.7.0" = { + name = "postcss-preset-env"; + packageName = "postcss-preset-env"; + version = "6.7.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz"; + sha512 = "eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg=="; + }; + }; + "postcss-pseudo-class-any-link-6.0.0" = { + name = "postcss-pseudo-class-any-link"; + packageName = "postcss-pseudo-class-any-link"; + version = "6.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz"; + sha512 = "lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew=="; + }; + }; + "postcss-replace-overflow-wrap-3.0.0" = { + name = "postcss-replace-overflow-wrap"; + packageName = "postcss-replace-overflow-wrap"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz"; + sha512 = "2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw=="; + }; + }; + "postcss-selector-matches-4.0.0" = { + name = "postcss-selector-matches"; + packageName = "postcss-selector-matches"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz"; + sha512 = "LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww=="; + }; + }; + "postcss-selector-not-4.0.1" = { + name = "postcss-selector-not"; + packageName = "postcss-selector-not"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz"; + sha512 = "YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ=="; + }; + }; + "postcss-selector-parser-5.0.0" = { + name = "postcss-selector-parser"; + packageName = "postcss-selector-parser"; + version = "5.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz"; + sha512 = "w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ=="; + }; + }; + "postcss-selector-parser-6.0.6" = { + name = "postcss-selector-parser"; + packageName = "postcss-selector-parser"; + version = "6.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz"; + sha512 = "9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg=="; + }; + }; + "postcss-value-parser-4.1.0" = { + name = "postcss-value-parser"; + packageName = "postcss-value-parser"; + version = "4.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz"; + sha512 = "97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ=="; + }; + }; + "postcss-values-parser-2.0.1" = { + name = "postcss-values-parser"; + packageName = "postcss-values-parser"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz"; + sha512 = "2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg=="; + }; + }; + "prelude-ls-1.1.2" = { + name = "prelude-ls"; + packageName = "prelude-ls"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz"; + sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54"; + }; + }; + "pretty-bytes-5.6.0" = { + name = "pretty-bytes"; + packageName = "pretty-bytes"; + version = "5.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz"; + sha512 = "FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg=="; + }; + }; + "pretty-hrtime-1.0.3" = { + name = "pretty-hrtime"; + packageName = "pretty-hrtime"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz"; + sha1 = "b7e3ea42435a4c9b2759d99e0f201eb195802ee1"; + }; + }; + "process-0.11.10" = { + name = "process"; + packageName = "process"; + version = "0.11.10"; + src = fetchurl { + url = "https://registry.npmjs.org/process/-/process-0.11.10.tgz"; + sha1 = "7332300e840161bda3e69a1d1d91a7d4bc16f182"; + }; + }; + "process-nextick-args-2.0.1" = { + name = "process-nextick-args"; + packageName = "process-nextick-args"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz"; + sha512 = "3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="; + }; + }; + "promise-inflight-1.0.1" = { + name = "promise-inflight"; + packageName = "promise-inflight"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz"; + sha1 = "98472870bf228132fcbdd868129bad12c3c029e3"; + }; + }; + "promise-retry-2.0.1" = { + name = "promise-retry"; + packageName = "promise-retry"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz"; + sha512 = "y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g=="; + }; + }; + "proxy-addr-2.0.6" = { + name = "proxy-addr"; + packageName = "proxy-addr"; + version = "2.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz"; + sha512 = "dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw=="; + }; + }; + "psl-1.8.0" = { + name = "psl"; + packageName = "psl"; + version = "1.8.0"; + src = fetchurl { + url = "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz"; + sha512 = "RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="; + }; + }; + "public-encrypt-4.0.3" = { + name = "public-encrypt"; + packageName = "public-encrypt"; + version = "4.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz"; + sha512 = "zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q=="; + }; + }; + "punycode-1.3.2" = { + name = "punycode"; + packageName = "punycode"; + version = "1.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz"; + sha1 = "9653a036fb7c1ee42342f2325cceefea3926c48d"; + }; + }; + "punycode-1.4.1" = { + name = "punycode"; + packageName = "punycode"; + version = "1.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz"; + sha1 = "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"; + }; + }; + "punycode-2.1.1" = { + name = "punycode"; + packageName = "punycode"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz"; + sha512 = "XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="; + }; + }; + "qjobs-1.2.0" = { + name = "qjobs"; + packageName = "qjobs"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz"; + sha512 = "8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg=="; + }; + }; + "qrcode-1.5.0" = { + name = "qrcode"; + packageName = "qrcode"; + version = "1.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/qrcode/-/qrcode-1.5.0.tgz"; + sha512 = "9MgRpgVc+/+47dFvQeD6U2s0Z92EsKzcHogtum4QB+UNd025WOJSHvn/hjk9xmzj7Stj95CyUAs31mrjxliEsQ=="; + }; + }; + "qs-6.7.0" = { + name = "qs"; + packageName = "qs"; + version = "6.7.0"; + src = fetchurl { + url = "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz"; + sha512 = "VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="; + }; + }; + "querystring-0.2.0" = { + name = "querystring"; + packageName = "querystring"; + version = "0.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz"; + sha1 = "b209849203bb25df820da756e747005878521620"; + }; + }; + "querystring-es3-0.2.1" = { + name = "querystring-es3"; + packageName = "querystring-es3"; + version = "0.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz"; + sha1 = "9ec61f79049875707d69414596fd907a4d711e73"; + }; + }; + "queue-microtask-1.2.3" = { + name = "queue-microtask"; + packageName = "queue-microtask"; + version = "1.2.3"; + src = fetchurl { + url = "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz"; + sha512 = "NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="; + }; + }; + "randombytes-2.1.0" = { + name = "randombytes"; + packageName = "randombytes"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz"; + sha512 = "vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="; + }; + }; + "randomfill-1.0.4" = { + name = "randomfill"; + packageName = "randomfill"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz"; + sha512 = "87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw=="; + }; + }; + "range-parser-1.2.1" = { + name = "range-parser"; + packageName = "range-parser"; + version = "1.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz"; + sha512 = "Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="; + }; + }; + "raw-body-2.4.0" = { + name = "raw-body"; + packageName = "raw-body"; + version = "2.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz"; + sha512 = "4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q=="; + }; + }; + "read-cache-1.0.0" = { + name = "read-cache"; + packageName = "read-cache"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz"; + sha1 = "e664ef31161166c9751cdbe8dbcf86b5fb58f774"; + }; + }; + "read-only-stream-2.0.0" = { + name = "read-only-stream"; + packageName = "read-only-stream"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz"; + sha1 = "2724fd6a8113d73764ac288d4386270c1dbf17f0"; + }; + }; + "read-package-json-fast-2.0.3" = { + name = "read-package-json-fast"; + packageName = "read-package-json-fast"; + version = "2.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz"; + sha512 = "W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ=="; + }; + }; + "readable-stream-2.3.7" = { + name = "readable-stream"; + packageName = "readable-stream"; + version = "2.3.7"; + src = fetchurl { + url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz"; + sha512 = "Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw=="; + }; + }; + "readable-stream-3.6.0" = { + name = "readable-stream"; + packageName = "readable-stream"; + version = "3.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz"; + sha512 = "BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA=="; + }; + }; + "readdirp-3.6.0" = { + name = "readdirp"; + packageName = "readdirp"; + version = "3.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz"; + sha512 = "hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="; + }; + }; + "reflect-metadata-0.1.13" = { + name = "reflect-metadata"; + packageName = "reflect-metadata"; + version = "0.1.13"; + src = fetchurl { + url = "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz"; + sha512 = "Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg=="; + }; + }; + "regenerate-1.4.2" = { + name = "regenerate"; + packageName = "regenerate"; + version = "1.4.2"; + src = fetchurl { + url = "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz"; + sha512 = "zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="; + }; + }; + "regenerate-unicode-properties-9.0.0" = { + name = "regenerate-unicode-properties"; + packageName = "regenerate-unicode-properties"; + version = "9.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz"; + sha512 = "3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA=="; + }; + }; + "regenerator-runtime-0.13.9" = { + name = "regenerator-runtime"; + packageName = "regenerator-runtime"; + version = "0.13.9"; + src = fetchurl { + url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz"; + sha512 = "p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="; + }; + }; + "regenerator-transform-0.14.5" = { + name = "regenerator-transform"; + packageName = "regenerator-transform"; + version = "0.14.5"; + src = fetchurl { + url = "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz"; + sha512 = "eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw=="; + }; + }; + "regex-parser-2.2.11" = { + name = "regex-parser"; + packageName = "regex-parser"; + version = "2.2.11"; + src = fetchurl { + url = "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz"; + sha512 = "jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q=="; + }; + }; + "regexp.prototype.flags-1.3.1" = { + name = "regexp.prototype.flags"; + packageName = "regexp.prototype.flags"; + version = "1.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz"; + sha512 = "JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA=="; + }; + }; + "regexpu-core-4.8.0" = { + name = "regexpu-core"; + packageName = "regexpu-core"; + version = "4.8.0"; + src = fetchurl { + url = "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz"; + sha512 = "1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg=="; + }; + }; + "regjsgen-0.5.2" = { + name = "regjsgen"; + packageName = "regjsgen"; + version = "0.5.2"; + src = fetchurl { + url = "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz"; + sha512 = "OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A=="; + }; + }; + "regjsparser-0.7.0" = { + name = "regjsparser"; + packageName = "regjsparser"; + version = "0.7.0"; + src = fetchurl { + url = "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz"; + sha512 = "A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ=="; + }; + }; + "require-directory-2.1.1" = { + name = "require-directory"; + packageName = "require-directory"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz"; + sha1 = "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"; + }; + }; + "require-from-string-2.0.2" = { + name = "require-from-string"; + packageName = "require-from-string"; + version = "2.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz"; + sha512 = "Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="; + }; + }; + "require-main-filename-2.0.0" = { + name = "require-main-filename"; + packageName = "require-main-filename"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz"; + sha512 = "NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="; + }; + }; + "requires-port-1.0.0" = { + name = "requires-port"; + packageName = "requires-port"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz"; + sha1 = "925d2601d39ac485e091cf0da5c6e694dc3dcaff"; + }; + }; + "resolve-1.20.0" = { + name = "resolve"; + packageName = "resolve"; + version = "1.20.0"; + src = fetchurl { + url = "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz"; + sha512 = "wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A=="; + }; + }; + "resolve-from-4.0.0" = { + name = "resolve-from"; + packageName = "resolve-from"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"; + sha512 = "pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="; + }; + }; + "resolve-from-5.0.0" = { + name = "resolve-from"; + packageName = "resolve-from"; + version = "5.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz"; + sha512 = "qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="; + }; + }; + "resolve-url-loader-4.0.0" = { + name = "resolve-url-loader"; + packageName = "resolve-url-loader"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz"; + sha512 = "05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA=="; + }; + }; + "restore-cursor-3.1.0" = { + name = "restore-cursor"; + packageName = "restore-cursor"; + version = "3.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz"; + sha512 = "l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA=="; + }; + }; + "retry-0.12.0" = { + name = "retry"; + packageName = "retry"; + version = "0.12.0"; + src = fetchurl { + url = "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz"; + sha1 = "1b42a6266a21f07421d1b0b54b7dc167b01c013b"; + }; + }; + "retry-0.13.1" = { + name = "retry"; + packageName = "retry"; + version = "0.13.1"; + src = fetchurl { + url = "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz"; + sha512 = "XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg=="; + }; + }; + "reusify-1.0.4" = { + name = "reusify"; + packageName = "reusify"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz"; + sha512 = "U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="; + }; + }; + "rfdc-1.3.0" = { + name = "rfdc"; + packageName = "rfdc"; + version = "1.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz"; + sha512 = "V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA=="; + }; + }; + "rimraf-3.0.2" = { + name = "rimraf"; + packageName = "rimraf"; + version = "3.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz"; + sha512 = "JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="; + }; + }; + "ripemd160-2.0.2" = { + name = "ripemd160"; + packageName = "ripemd160"; + version = "2.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz"; + sha512 = "ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA=="; + }; + }; + "run-async-2.4.1" = { + name = "run-async"; + packageName = "run-async"; + version = "2.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz"; + sha512 = "tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ=="; + }; + }; + "run-parallel-1.2.0" = { + name = "run-parallel"; + packageName = "run-parallel"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz"; + sha512 = "5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="; + }; + }; + "rxjs-6.6.7" = { + name = "rxjs"; + packageName = "rxjs"; + version = "6.6.7"; + src = fetchurl { + url = "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz"; + sha512 = "hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ=="; + }; + }; + "rxjs-7.4.0" = { + name = "rxjs"; + packageName = "rxjs"; + version = "7.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz"; + sha512 = "7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w=="; + }; + }; + "safe-buffer-5.1.2" = { + name = "safe-buffer"; + packageName = "safe-buffer"; + version = "5.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"; + sha512 = "Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="; + }; + }; + "safe-buffer-5.2.1" = { + name = "safe-buffer"; + packageName = "safe-buffer"; + version = "5.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz"; + sha512 = "rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="; + }; + }; + "safer-buffer-2.1.2" = { + name = "safer-buffer"; + packageName = "safer-buffer"; + version = "2.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"; + sha512 = "YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="; + }; + }; + "sass-1.44.0" = { + name = "sass"; + packageName = "sass"; + version = "1.44.0"; + src = fetchurl { + url = "https://registry.npmjs.org/sass/-/sass-1.44.0.tgz"; + sha512 = "0hLREbHFXGQqls/K8X+koeP+ogFRPF4ZqetVB19b7Cst9Er8cOR0rc6RU7MaI4W1JmUShd1BPgPoeqmmgMMYFw=="; + }; + }; + "sass-loader-12.4.0" = { + name = "sass-loader"; + packageName = "sass-loader"; + version = "12.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/sass-loader/-/sass-loader-12.4.0.tgz"; + sha512 = "7xN+8khDIzym1oL9XyS6zP6Ges+Bo2B2xbPrjdMHEYyV3AQYhd/wXeru++3ODHF0zMjYmVadblSKrPrjEkL8mg=="; + }; + }; + "sax-1.2.4" = { + name = "sax"; + packageName = "sax"; + version = "1.2.4"; + src = fetchurl { + url = "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz"; + sha512 = "NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="; + }; + }; + "schema-utils-2.7.1" = { + name = "schema-utils"; + packageName = "schema-utils"; + version = "2.7.1"; + src = fetchurl { + url = "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz"; + sha512 = "SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg=="; + }; + }; + "schema-utils-3.1.1" = { + name = "schema-utils"; + packageName = "schema-utils"; + version = "3.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz"; + sha512 = "Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw=="; + }; + }; + "schema-utils-4.0.0" = { + name = "schema-utils"; + packageName = "schema-utils"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz"; + sha512 = "1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg=="; + }; + }; + "scope-analyzer-2.1.1" = { + name = "scope-analyzer"; + packageName = "scope-analyzer"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.1.tgz"; + sha512 = "azEAihtQ9mEyZGhfgTJy3IbOWEzeOrYbg7NcYEshPKnKd+LZmC3TNd5dmDxbLBsTG/JVWmCp+vDJ03vJjeXMHg=="; + }; + }; + "select-1.1.2" = { + name = "select"; + packageName = "select"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/select/-/select-1.1.2.tgz"; + sha1 = "0e7350acdec80b1108528786ec1d4418d11b396d"; + }; + }; + "select-hose-2.0.0" = { + name = "select-hose"; + packageName = "select-hose"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz"; + sha1 = "625d8658f865af43ec962bfc376a37359a4994ca"; + }; + }; + "selfsigned-1.10.14" = { + name = "selfsigned"; + packageName = "selfsigned"; + version = "1.10.14"; + src = fetchurl { + url = "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz"; + sha512 = "lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA=="; + }; + }; + "semver-5.7.1" = { + name = "semver"; + packageName = "semver"; + version = "5.7.1"; + src = fetchurl { + url = "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz"; + sha512 = "sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="; + }; + }; + "semver-6.3.0" = { + name = "semver"; + packageName = "semver"; + version = "6.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz"; + sha512 = "b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="; + }; + }; + "semver-7.0.0" = { + name = "semver"; + packageName = "semver"; + version = "7.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz"; + sha512 = "+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A=="; + }; + }; + "semver-7.3.5" = { + name = "semver"; + packageName = "semver"; + version = "7.3.5"; + src = fetchurl { + url = "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz"; + sha512 = "PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ=="; + }; + }; + "send-0.17.1" = { + name = "send"; + packageName = "send"; + version = "0.17.1"; + src = fetchurl { + url = "https://registry.npmjs.org/send/-/send-0.17.1.tgz"; + sha512 = "BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg=="; + }; + }; + "serialize-javascript-6.0.0" = { + name = "serialize-javascript"; + packageName = "serialize-javascript"; + version = "6.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz"; + sha512 = "Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag=="; + }; + }; + "serve-index-1.9.1" = { + name = "serve-index"; + packageName = "serve-index"; + version = "1.9.1"; + src = fetchurl { + url = "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz"; + sha1 = "d3768d69b1e7d82e5ce050fff5b453bea12a9239"; + }; + }; + "serve-static-1.14.1" = { + name = "serve-static"; + packageName = "serve-static"; + version = "1.14.1"; + src = fetchurl { + url = "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz"; + sha512 = "JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg=="; + }; + }; + "set-blocking-2.0.0" = { + name = "set-blocking"; + packageName = "set-blocking"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz"; + sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7"; + }; + }; + "setprototypeof-1.1.0" = { + name = "setprototypeof"; + packageName = "setprototypeof"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz"; + sha512 = "BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="; + }; + }; + "setprototypeof-1.1.1" = { + name = "setprototypeof"; + packageName = "setprototypeof"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz"; + sha512 = "JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="; + }; + }; + "sha.js-2.4.11" = { + name = "sha.js"; + packageName = "sha.js"; + version = "2.4.11"; + src = fetchurl { + url = "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz"; + sha512 = "QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ=="; + }; + }; + "shallow-clone-3.0.1" = { + name = "shallow-clone"; + packageName = "shallow-clone"; + version = "3.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz"; + sha512 = "/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA=="; + }; + }; + "shasum-object-1.0.0" = { + name = "shasum-object"; + packageName = "shasum-object"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz"; + sha512 = "Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg=="; + }; + }; + "shebang-command-2.0.0" = { + name = "shebang-command"; + packageName = "shebang-command"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz"; + sha512 = "kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="; + }; + }; + "shebang-regex-3.0.0" = { + name = "shebang-regex"; + packageName = "shebang-regex"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz"; + sha512 = "7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="; + }; + }; + "shell-quote-1.7.2" = { + name = "shell-quote"; + packageName = "shell-quote"; + version = "1.7.2"; + src = fetchurl { + url = "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz"; + sha512 = "mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg=="; + }; + }; + "signal-exit-3.0.3" = { + name = "signal-exit"; + packageName = "signal-exit"; + version = "3.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz"; + sha512 = "VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="; + }; + }; + "simple-concat-1.0.1" = { + name = "simple-concat"; + packageName = "simple-concat"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz"; + sha512 = "cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="; + }; + }; + "slash-3.0.0" = { + name = "slash"; + packageName = "slash"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz"; + sha512 = "g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="; + }; + }; + "slash-4.0.0" = { + name = "slash"; + packageName = "slash"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz"; + sha512 = "3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew=="; + }; + }; + "smart-buffer-4.2.0" = { + name = "smart-buffer"; + packageName = "smart-buffer"; + version = "4.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz"; + sha512 = "94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="; + }; + }; + "socket.io-3.1.2" = { + name = "socket.io"; + packageName = "socket.io"; + version = "3.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/socket.io/-/socket.io-3.1.2.tgz"; + sha512 = "JubKZnTQ4Z8G4IZWtaAZSiRP3I/inpy8c/Bsx2jrwGrTbKeVU5xd6qkKMHpChYeM3dWZSO0QACiGK+obhBNwYw=="; + }; + }; + "socket.io-adapter-2.1.0" = { + name = "socket.io-adapter"; + packageName = "socket.io-adapter"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.1.0.tgz"; + sha512 = "+vDov/aTsLjViYTwS9fPy5pEtTkrbEKsw2M+oVSoFGw6OD1IpvlV1VPhUzNbofCQ8oyMbdYJqDtGdmHQK6TdPg=="; + }; + }; + "socket.io-parser-4.0.4" = { + name = "socket.io-parser"; + packageName = "socket.io-parser"; + version = "4.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz"; + sha512 = "t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g=="; + }; + }; + "sockjs-0.3.24" = { + name = "sockjs"; + packageName = "sockjs"; + version = "0.3.24"; + src = fetchurl { + url = "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz"; + sha512 = "GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ=="; + }; + }; + "socks-2.6.1" = { + name = "socks"; + packageName = "socks"; + version = "2.6.1"; + src = fetchurl { + url = "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz"; + sha512 = "kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA=="; + }; + }; + "socks-proxy-agent-6.1.1" = { + name = "socks-proxy-agent"; + packageName = "socks-proxy-agent"; + version = "6.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz"; + sha512 = "t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew=="; + }; + }; + "source-map-0.1.43" = { + name = "source-map"; + packageName = "source-map"; + version = "0.1.43"; + src = fetchurl { + url = "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz"; + sha1 = "c24bc146ca517c1471f5dacbe2571b2b7f9e3346"; + }; + }; + "source-map-0.5.7" = { + name = "source-map"; + packageName = "source-map"; + version = "0.5.7"; + src = fetchurl { + url = "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz"; + sha1 = "8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"; + }; + }; + "source-map-0.6.1" = { + name = "source-map"; + packageName = "source-map"; + version = "0.6.1"; + src = fetchurl { + url = "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"; + sha512 = "UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="; + }; + }; + "source-map-0.7.3" = { + name = "source-map"; + packageName = "source-map"; + version = "0.7.3"; + src = fetchurl { + url = "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz"; + sha512 = "CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="; + }; + }; + "source-map-js-0.6.2" = { + name = "source-map-js"; + packageName = "source-map-js"; + version = "0.6.2"; + src = fetchurl { + url = "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz"; + sha512 = "/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug=="; + }; + }; + "source-map-js-1.0.1" = { + name = "source-map-js"; + packageName = "source-map-js"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz"; + sha512 = "4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA=="; + }; + }; + "source-map-loader-3.0.0" = { + name = "source-map-loader"; + packageName = "source-map-loader"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.0.tgz"; + sha512 = "GKGWqWvYr04M7tn8dryIWvb0s8YM41z82iQv01yBtIylgxax0CwvSy6gc2Y02iuXwEfGWRlMicH0nvms9UZphw=="; + }; + }; + "source-map-resolve-0.6.0" = { + name = "source-map-resolve"; + packageName = "source-map-resolve"; + version = "0.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz"; + sha512 = "KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w=="; + }; + }; + "source-map-support-0.5.21" = { + name = "source-map-support"; + packageName = "source-map-support"; + version = "0.5.21"; + src = fetchurl { + url = "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz"; + sha512 = "uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="; + }; + }; + "sourcemap-codec-1.4.8" = { + name = "sourcemap-codec"; + packageName = "sourcemap-codec"; + version = "1.4.8"; + src = fetchurl { + url = "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz"; + sha512 = "9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="; + }; + }; + "spdy-4.0.2" = { + name = "spdy"; + packageName = "spdy"; + version = "4.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz"; + sha512 = "r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA=="; + }; + }; + "spdy-transport-3.0.0" = { + name = "spdy-transport"; + packageName = "spdy-transport"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz"; + sha512 = "hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw=="; + }; + }; + "sprintf-js-1.0.3" = { + name = "sprintf-js"; + packageName = "sprintf-js"; + version = "1.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz"; + sha1 = "04e6926f662895354f3dd015203633b857297e2c"; + }; + }; + "sshpk-1.16.1" = { + name = "sshpk"; + packageName = "sshpk"; + version = "1.16.1"; + src = fetchurl { + url = "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz"; + sha512 = "HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg=="; + }; + }; + "ssri-8.0.1" = { + name = "ssri"; + packageName = "ssri"; + version = "8.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz"; + sha512 = "97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ=="; + }; + }; + "statuses-1.5.0" = { + name = "statuses"; + packageName = "statuses"; + version = "1.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz"; + sha1 = "161c7dac177659fd9811f43771fa99381478628c"; + }; + }; + "stream-browserify-3.0.0" = { + name = "stream-browserify"; + packageName = "stream-browserify"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz"; + sha512 = "H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA=="; + }; + }; + "stream-combiner-0.2.2" = { + name = "stream-combiner"; + packageName = "stream-combiner"; + version = "0.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz"; + sha1 = "aec8cbac177b56b6f4fa479ced8c1912cee52858"; + }; + }; + "stream-combiner2-1.1.1" = { + name = "stream-combiner2"; + packageName = "stream-combiner2"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz"; + sha1 = "fb4d8a1420ea362764e21ad4780397bebcb41cbe"; + }; + }; + "stream-http-3.1.1" = { + name = "stream-http"; + packageName = "stream-http"; + version = "3.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz"; + sha512 = "S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg=="; + }; + }; + "stream-shift-1.0.1" = { + name = "stream-shift"; + packageName = "stream-shift"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz"; + sha512 = "AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="; + }; + }; + "stream-splicer-2.0.1" = { + name = "stream-splicer"; + packageName = "stream-splicer"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz"; + sha512 = "Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg=="; + }; + }; + "streamroller-2.2.4" = { + name = "streamroller"; + packageName = "streamroller"; + version = "2.2.4"; + src = fetchurl { + url = "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz"; + sha512 = "OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ=="; + }; + }; + "string-width-4.2.3" = { + name = "string-width"; + packageName = "string-width"; + version = "4.2.3"; + src = fetchurl { + url = "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"; + sha512 = "wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="; + }; + }; + "string.prototype.trimend-1.0.4" = { + name = "string.prototype.trimend"; + packageName = "string.prototype.trimend"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz"; + sha512 = "y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A=="; + }; + }; + "string.prototype.trimstart-1.0.4" = { + name = "string.prototype.trimstart"; + packageName = "string.prototype.trimstart"; + version = "1.0.4"; + src = fetchurl { + url = "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz"; + sha512 = "jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw=="; + }; + }; + "string_decoder-1.1.1" = { + name = "string_decoder"; + packageName = "string_decoder"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz"; + sha512 = "n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="; + }; + }; + "strip-ansi-3.0.1" = { + name = "strip-ansi"; + packageName = "strip-ansi"; + version = "3.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz"; + sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"; + }; + }; + "strip-ansi-6.0.0" = { + name = "strip-ansi"; + packageName = "strip-ansi"; + version = "6.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz"; + sha512 = "AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w=="; + }; + }; + "strip-ansi-6.0.1" = { + name = "strip-ansi"; + packageName = "strip-ansi"; + version = "6.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"; + sha512 = "Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="; + }; + }; + "strip-ansi-7.0.1" = { + name = "strip-ansi"; + packageName = "strip-ansi"; + version = "7.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz"; + sha512 = "cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw=="; + }; + }; + "strip-final-newline-2.0.0" = { + name = "strip-final-newline"; + packageName = "strip-final-newline"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz"; + sha512 = "BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="; + }; + }; + "stylus-0.55.0" = { + name = "stylus"; + packageName = "stylus"; + version = "0.55.0"; + src = fetchurl { + url = "https://registry.npmjs.org/stylus/-/stylus-0.55.0.tgz"; + sha512 = "MuzIIVRSbc8XxHH7FjkvWqkIcr1BvoMZoR/oFuAJDlh7VSaNJzrB4uJ38GRQa+mWjLXODAMzeDe0xi9GYbGwnw=="; + }; + }; + "stylus-loader-6.2.0" = { + name = "stylus-loader"; + packageName = "stylus-loader"; + version = "6.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/stylus-loader/-/stylus-loader-6.2.0.tgz"; + sha512 = "5dsDc7qVQGRoc6pvCL20eYgRUxepZ9FpeK28XhdXaIPP6kXr6nI1zAAKFQgP5OBkOfKaURp4WUpJzspg1f01Gg=="; + }; + }; + "subarg-1.0.0" = { + name = "subarg"; + packageName = "subarg"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz"; + sha1 = "f62cf17581e996b48fc965699f54c06ae268b8d2"; + }; + }; + "supports-color-2.0.0" = { + name = "supports-color"; + packageName = "supports-color"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz"; + sha1 = "535d045ce6b6363fa40117084629995e9df324c7"; + }; + }; + "supports-color-5.5.0" = { + name = "supports-color"; + packageName = "supports-color"; + version = "5.5.0"; + src = fetchurl { + url = "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz"; + sha512 = "QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="; + }; + }; + "supports-color-7.2.0" = { + name = "supports-color"; + packageName = "supports-color"; + version = "7.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"; + sha512 = "qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="; + }; + }; + "supports-color-8.1.1" = { + name = "supports-color"; + packageName = "supports-color"; + version = "8.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz"; + sha512 = "MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="; + }; + }; + "symbol-observable-4.0.0" = { + name = "symbol-observable"; + packageName = "symbol-observable"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz"; + sha512 = "b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ=="; + }; + }; + "syntax-error-1.4.0" = { + name = "syntax-error"; + packageName = "syntax-error"; + version = "1.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz"; + sha512 = "YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w=="; + }; + }; + "tapable-2.2.1" = { + name = "tapable"; + packageName = "tapable"; + version = "2.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz"; + sha512 = "GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="; + }; + }; + "tar-6.1.11" = { + name = "tar"; + packageName = "tar"; + version = "6.1.11"; + src = fetchurl { + url = "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz"; + sha512 = "an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA=="; + }; + }; + "terser-3.17.0" = { + name = "terser"; + packageName = "terser"; + version = "3.17.0"; + src = fetchurl { + url = "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz"; + sha512 = "/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ=="; + }; + }; + "terser-4.8.0" = { + name = "terser"; + packageName = "terser"; + version = "4.8.0"; + src = fetchurl { + url = "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz"; + sha512 = "EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw=="; + }; + }; + "terser-5.10.0" = { + name = "terser"; + packageName = "terser"; + version = "5.10.0"; + src = fetchurl { + url = "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz"; + sha512 = "AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA=="; + }; + }; + "terser-5.9.0" = { + name = "terser"; + packageName = "terser"; + version = "5.9.0"; + src = fetchurl { + url = "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz"; + sha512 = "h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ=="; + }; + }; + "terser-webpack-plugin-5.1.4" = { + name = "terser-webpack-plugin"; + packageName = "terser-webpack-plugin"; + version = "5.1.4"; + src = fetchurl { + url = "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz"; + sha512 = "C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA=="; + }; + }; + "test-exclude-6.0.0" = { + name = "test-exclude"; + packageName = "test-exclude"; + version = "6.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz"; + sha512 = "cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w=="; + }; + }; + "text-table-0.2.0" = { + name = "text-table"; + packageName = "text-table"; + version = "0.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"; + sha1 = "7f5ee823ae805207c00af2df4a84ec3fcfa570b4"; + }; + }; + "through-2.3.8" = { + name = "through"; + packageName = "through"; + version = "2.3.8"; + src = fetchurl { + url = "https://registry.npmjs.org/through/-/through-2.3.8.tgz"; + sha1 = "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"; + }; + }; + "through2-2.0.5" = { + name = "through2"; + packageName = "through2"; + version = "2.0.5"; + src = fetchurl { + url = "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz"; + sha512 = "/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ=="; + }; + }; + "through2-3.0.2" = { + name = "through2"; + packageName = "through2"; + version = "3.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz"; + sha512 = "enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ=="; + }; + }; + "thunky-1.1.0" = { + name = "thunky"; + packageName = "thunky"; + version = "1.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz"; + sha512 = "eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA=="; + }; + }; + "timers-browserify-1.4.2" = { + name = "timers-browserify"; + packageName = "timers-browserify"; + version = "1.4.2"; + src = fetchurl { + url = "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz"; + sha1 = "c9c58b575be8407375cb5e2462dacee74359f41d"; + }; + }; + "tiny-emitter-2.1.0" = { + name = "tiny-emitter"; + packageName = "tiny-emitter"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz"; + sha512 = "NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="; + }; + }; + "tinyify-3.0.0" = { + name = "tinyify"; + packageName = "tinyify"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/tinyify/-/tinyify-3.0.0.tgz"; + sha512 = "RtjVjC1xwwxt8AMVfxEmo+FzRJB6p5sAOtFaJj8vMrkWShtArsM4dLVRWhx2Vc07Me3NWgmP7pi9UPm/a2XNNA=="; + }; + }; + "tlite-0.1.9" = { + name = "tlite"; + packageName = "tlite"; + version = "0.1.9"; + src = fetchurl { + url = "https://registry.npmjs.org/tlite/-/tlite-0.1.9.tgz"; + sha512 = "5QOBAvDxZZwW1i+2YXMgF6/PuV/KhA0LyE9PyVi8Ywr3bfIPziZcQD+RpdJaQurCU8zIGtBo/XuPCEHdvyeFuQ=="; + }; + }; + "tmp-0.0.33" = { + name = "tmp"; + packageName = "tmp"; + version = "0.0.33"; + src = fetchurl { + url = "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz"; + sha512 = "jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw=="; + }; + }; + "tmp-0.2.1" = { + name = "tmp"; + packageName = "tmp"; + version = "0.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz"; + sha512 = "76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ=="; + }; + }; + "to-fast-properties-2.0.0" = { + name = "to-fast-properties"; + packageName = "to-fast-properties"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz"; + sha1 = "dc5e698cbd079265bc73e0377681a4e4e83f616e"; + }; + }; + "to-regex-range-5.0.1" = { + name = "to-regex-range"; + packageName = "to-regex-range"; + version = "5.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz"; + sha512 = "65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="; + }; + }; + "toidentifier-1.0.0" = { + name = "toidentifier"; + packageName = "toidentifier"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz"; + sha512 = "yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="; + }; + }; + "transform-ast-2.4.4" = { + name = "transform-ast"; + packageName = "transform-ast"; + version = "2.4.4"; + src = fetchurl { + url = "https://registry.npmjs.org/transform-ast/-/transform-ast-2.4.4.tgz"; + sha512 = "AxjeZAcIOUO2lev2GDe3/xZ1Q0cVGjIMk5IsriTy8zbWlsEnjeB025AhkhBJHoy997mXpLd4R+kRbvnnQVuQHQ=="; + }; + }; + "tree-kill-1.2.2" = { + name = "tree-kill"; + packageName = "tree-kill"; + version = "1.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz"; + sha512 = "L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="; + }; + }; + "tslib-1.14.1" = { + name = "tslib"; + packageName = "tslib"; + version = "1.14.1"; + src = fetchurl { + url = "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"; + sha512 = "Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="; + }; + }; + "tslib-2.1.0" = { + name = "tslib"; + packageName = "tslib"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz"; + sha512 = "hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A=="; + }; + }; + "tslib-2.3.0" = { + name = "tslib"; + packageName = "tslib"; + version = "2.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz"; + sha512 = "N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="; + }; + }; + "tslib-2.3.1" = { + name = "tslib"; + packageName = "tslib"; + version = "2.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz"; + sha512 = "77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="; + }; + }; + "tty-browserify-0.0.1" = { + name = "tty-browserify"; + packageName = "tty-browserify"; + version = "0.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz"; + sha512 = "C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw=="; + }; + }; + "tunnel-agent-0.6.0" = { + name = "tunnel-agent"; + packageName = "tunnel-agent"; + version = "0.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz"; + sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd"; + }; + }; + "tweetnacl-0.14.5" = { + name = "tweetnacl"; + packageName = "tweetnacl"; + version = "0.14.5"; + src = fetchurl { + url = "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz"; + sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64"; + }; + }; + "type-1.2.0" = { + name = "type"; + packageName = "type"; + version = "1.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/type/-/type-1.2.0.tgz"; + sha512 = "+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="; + }; + }; + "type-2.1.0" = { + name = "type"; + packageName = "type"; + version = "2.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/type/-/type-2.1.0.tgz"; + sha512 = "G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA=="; + }; + }; + "type-check-0.3.2" = { + name = "type-check"; + packageName = "type-check"; + version = "0.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz"; + sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72"; + }; + }; + "type-fest-0.11.0" = { + name = "type-fest"; + packageName = "type-fest"; + version = "0.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz"; + sha512 = "OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ=="; + }; + }; + "type-is-1.6.18" = { + name = "type-is"; + packageName = "type-is"; + version = "1.6.18"; + src = fetchurl { + url = "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz"; + sha512 = "TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g=="; + }; + }; + "typed-assert-1.0.8" = { + name = "typed-assert"; + packageName = "typed-assert"; + version = "1.0.8"; + src = fetchurl { + url = "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.8.tgz"; + sha512 = "5NkbXZUlmCE73Fs7gvkp1XXJWHYetPkg60QnQ2NXQmBYNFxbBr2zA8GCtaH4K2s2WhOmSlgiSTmrjrcm5tnM5g=="; + }; + }; + "typedarray-0.0.6" = { + name = "typedarray"; + packageName = "typedarray"; + version = "0.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"; + sha1 = "867ac74e3864187b1d3d47d996a78ec5c8830777"; + }; + }; + "typescript-4.4.4" = { + name = "typescript"; + packageName = "typescript"; + version = "4.4.4"; + src = fetchurl { + url = "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz"; + sha512 = "DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA=="; + }; + }; + "ua-parser-js-0.7.28" = { + name = "ua-parser-js"; + packageName = "ua-parser-js"; + version = "0.7.28"; + src = fetchurl { + url = "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz"; + sha512 = "6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g=="; + }; + }; + "uglifyify-5.0.2" = { + name = "uglifyify"; + packageName = "uglifyify"; + version = "5.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/uglifyify/-/uglifyify-5.0.2.tgz"; + sha512 = "NcSk6pgoC+IgwZZ2tVLVHq+VNKSvLPlLkF5oUiHPVOJI0s/OlSVYEGXG9PCAH0hcyFZLyvt4KBdPAQBRlVDn1Q=="; + }; + }; + "umd-3.0.3" = { + name = "umd"; + packageName = "umd"; + version = "3.0.3"; + src = fetchurl { + url = "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz"; + sha512 = "4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow=="; + }; + }; + "unassert-1.6.0" = { + name = "unassert"; + packageName = "unassert"; + version = "1.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/unassert/-/unassert-1.6.0.tgz"; + sha512 = "GoMtWTwGSxSFuRD0NKmbjlx3VJkgvSogzDzMPpJXYmBZv6MIWButsyMqEYhMx3NI4osXACcZA9mXiBteXyJtRw=="; + }; + }; + "unassertify-2.1.1" = { + name = "unassertify"; + packageName = "unassertify"; + version = "2.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/unassertify/-/unassertify-2.1.1.tgz"; + sha512 = "YIAaIlc6/KC9Oib8cVZLlpDDhK1UTEuaDyx9BwD97xqxDZC0cJOqwFcs/Y6K3m73B5VzHsRTBLXNO0dxS/GkTw=="; + }; + }; + "unbox-primitive-1.0.1" = { + name = "unbox-primitive"; + packageName = "unbox-primitive"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz"; + sha512 = "tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw=="; + }; + }; + "undeclared-identifiers-1.1.3" = { + name = "undeclared-identifiers"; + packageName = "undeclared-identifiers"; + version = "1.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz"; + sha512 = "pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw=="; + }; + }; + "unicode-canonical-property-names-ecmascript-2.0.0" = { + name = "unicode-canonical-property-names-ecmascript"; + packageName = "unicode-canonical-property-names-ecmascript"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz"; + sha512 = "yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ=="; + }; + }; + "unicode-match-property-ecmascript-2.0.0" = { + name = "unicode-match-property-ecmascript"; + packageName = "unicode-match-property-ecmascript"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz"; + sha512 = "5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q=="; + }; + }; + "unicode-match-property-value-ecmascript-2.0.0" = { + name = "unicode-match-property-value-ecmascript"; + packageName = "unicode-match-property-value-ecmascript"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz"; + sha512 = "7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw=="; + }; + }; + "unicode-property-aliases-ecmascript-2.0.0" = { + name = "unicode-property-aliases-ecmascript"; + packageName = "unicode-property-aliases-ecmascript"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz"; + sha512 = "5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ=="; + }; + }; + "uniq-1.0.1" = { + name = "uniq"; + packageName = "uniq"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz"; + sha1 = "b31c5ae8254844a3a8281541ce2b04b865a734ff"; + }; + }; + "unique-filename-1.1.1" = { + name = "unique-filename"; + packageName = "unique-filename"; + version = "1.1.1"; + src = fetchurl { + url = "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz"; + sha512 = "Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ=="; + }; + }; + "unique-slug-2.0.2" = { + name = "unique-slug"; + packageName = "unique-slug"; + version = "2.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz"; + sha512 = "zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w=="; + }; + }; + "universalify-0.1.2" = { + name = "universalify"; + packageName = "universalify"; + version = "0.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz"; + sha512 = "rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="; + }; + }; + "unpipe-1.0.0" = { + name = "unpipe"; + packageName = "unpipe"; + version = "1.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"; + sha1 = "b2bf4ee8514aae6165b4817829d21b2ef49904ec"; + }; + }; + "uri-js-4.4.0" = { + name = "uri-js"; + packageName = "uri-js"; + version = "4.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz"; + sha512 = "B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g=="; + }; + }; + "url-0.11.0" = { + name = "url"; + packageName = "url"; + version = "0.11.0"; + src = fetchurl { + url = "https://registry.npmjs.org/url/-/url-0.11.0.tgz"; + sha1 = "3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"; + }; + }; + "util-0.10.3" = { + name = "util"; + packageName = "util"; + version = "0.10.3"; + src = fetchurl { + url = "https://registry.npmjs.org/util/-/util-0.10.3.tgz"; + sha1 = "7afb1afe50805246489e3db7fe0ed379336ac0f9"; + }; + }; + "util-0.12.3" = { + name = "util"; + packageName = "util"; + version = "0.12.3"; + src = fetchurl { + url = "https://registry.npmjs.org/util/-/util-0.12.3.tgz"; + sha512 = "I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog=="; + }; + }; + "util-deprecate-1.0.2" = { + name = "util-deprecate"; + packageName = "util-deprecate"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"; + sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf"; + }; + }; + "utils-merge-1.0.1" = { + name = "utils-merge"; + packageName = "utils-merge"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz"; + sha1 = "9f95710f50a267947b2ccc124741c1028427e713"; + }; + }; + "uuid-8.3.2" = { + name = "uuid"; + packageName = "uuid"; + version = "8.3.2"; + src = fetchurl { + url = "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz"; + sha512 = "+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="; + }; + }; + "validate-npm-package-name-3.0.0" = { + name = "validate-npm-package-name"; + packageName = "validate-npm-package-name"; + version = "3.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz"; + sha1 = "5fa912d81eb7d0c74afc140de7317f0ca7df437e"; + }; + }; + "vary-1.1.2" = { + name = "vary"; + packageName = "vary"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"; + sha1 = "2299f02c6ded30d4a5961b0b9f74524a18f634fc"; + }; + }; + "verror-1.10.0" = { + name = "verror"; + packageName = "verror"; + version = "1.10.0"; + src = fetchurl { + url = "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz"; + sha1 = "3a105ca17053af55d6e270c1f8288682e18da400"; + }; + }; + "vm-browserify-1.1.2" = { + name = "vm-browserify"; + packageName = "vm-browserify"; + version = "1.1.2"; + src = fetchurl { + url = "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz"; + sha512 = "2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ=="; + }; + }; + "void-elements-2.0.1" = { + name = "void-elements"; + packageName = "void-elements"; + version = "2.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz"; + sha1 = "c066afb582bb1cb4128d60ea92392e94d5e9dbec"; + }; + }; + "watchpack-2.3.1" = { + name = "watchpack"; + packageName = "watchpack"; + version = "2.3.1"; + src = fetchurl { + url = "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz"; + sha512 = "x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA=="; + }; + }; + "wbuf-1.7.3" = { + name = "wbuf"; + packageName = "wbuf"; + version = "1.7.3"; + src = fetchurl { + url = "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz"; + sha512 = "O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA=="; + }; + }; + "wcwidth-1.0.1" = { + name = "wcwidth"; + packageName = "wcwidth"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz"; + sha1 = "f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"; + }; + }; + "webpack-5.65.0" = { + name = "webpack"; + packageName = "webpack"; + version = "5.65.0"; + src = fetchurl { + url = "https://registry.npmjs.org/webpack/-/webpack-5.65.0.tgz"; + sha512 = "Q5or2o6EKs7+oKmJo7LaqZaMOlDWQse9Tm5l1WAfU/ujLGN5Pb0SqGeVkN/4bpPmEqEP5RnVhiqsOtWtUVwGRw=="; + }; + }; + "webpack-dev-middleware-5.2.2" = { + name = "webpack-dev-middleware"; + packageName = "webpack-dev-middleware"; + version = "5.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.2.2.tgz"; + sha512 = "DjZyYrsHhkikAFNvSNKrpnziXukU1EChFAh9j4LAm6ndPLPW8cN0KhM7T+RAiOqsQ6ABfQ8hoKIs9IWMTjov+w=="; + }; + }; + "webpack-dev-server-4.6.0" = { + name = "webpack-dev-server"; + packageName = "webpack-dev-server"; + version = "4.6.0"; + src = fetchurl { + url = "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.6.0.tgz"; + sha512 = "oojcBIKvx3Ya7qs1/AVWHDgmP1Xml8rGsEBnSobxU/UJSX1xP1GPM3MwsAnDzvqcVmVki8tV7lbcsjEjk0PtYg=="; + }; + }; + "webpack-merge-5.8.0" = { + name = "webpack-merge"; + packageName = "webpack-merge"; + version = "5.8.0"; + src = fetchurl { + url = "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz"; + sha512 = "/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q=="; + }; + }; + "webpack-sources-3.2.2" = { + name = "webpack-sources"; + packageName = "webpack-sources"; + version = "3.2.2"; + src = fetchurl { + url = "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz"; + sha512 = "cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw=="; + }; + }; + "webpack-subresource-integrity-5.0.0" = { + name = "webpack-subresource-integrity"; + packageName = "webpack-subresource-integrity"; + version = "5.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.0.0.tgz"; + sha512 = "x9514FpLRydO+UAQ8DY4aLtCjxmdLkuQVcDFN1kGzuusREYJ1B0rzk/iIlWiL6dnvrhEGFj2+UsdxDkP8Z4UKg=="; + }; + }; + "websocket-driver-0.7.4" = { + name = "websocket-driver"; + packageName = "websocket-driver"; + version = "0.7.4"; + src = fetchurl { + url = "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz"; + sha512 = "b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg=="; + }; + }; + "websocket-extensions-0.1.4" = { + name = "websocket-extensions"; + packageName = "websocket-extensions"; + version = "0.1.4"; + src = fetchurl { + url = "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz"; + sha512 = "OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg=="; + }; + }; + "which-2.0.2" = { + name = "which"; + packageName = "which"; + version = "2.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/which/-/which-2.0.2.tgz"; + sha512 = "BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="; + }; + }; + "which-boxed-primitive-1.0.2" = { + name = "which-boxed-primitive"; + packageName = "which-boxed-primitive"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz"; + sha512 = "bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg=="; + }; + }; + "which-module-2.0.0" = { + name = "which-module"; + packageName = "which-module"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz"; + sha1 = "d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"; + }; + }; + "which-typed-array-1.1.4" = { + name = "which-typed-array"; + packageName = "which-typed-array"; + version = "1.1.4"; + src = fetchurl { + url = "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz"; + sha512 = "49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA=="; + }; + }; + "wide-align-1.1.5" = { + name = "wide-align"; + packageName = "wide-align"; + version = "1.1.5"; + src = fetchurl { + url = "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz"; + sha512 = "eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg=="; + }; + }; + "wildcard-2.0.0" = { + name = "wildcard"; + packageName = "wildcard"; + version = "2.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz"; + sha512 = "JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw=="; + }; + }; + "word-wrap-1.2.3" = { + name = "word-wrap"; + packageName = "word-wrap"; + version = "1.2.3"; + src = fetchurl { + url = "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz"; + sha512 = "Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="; + }; + }; + "wrap-ansi-6.2.0" = { + name = "wrap-ansi"; + packageName = "wrap-ansi"; + version = "6.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz"; + sha512 = "r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="; + }; + }; + "wrap-ansi-7.0.0" = { + name = "wrap-ansi"; + packageName = "wrap-ansi"; + version = "7.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz"; + sha512 = "YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="; + }; + }; + "wrap-comment-1.0.1" = { + name = "wrap-comment"; + packageName = "wrap-comment"; + version = "1.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/wrap-comment/-/wrap-comment-1.0.1.tgz"; + sha512 = "APccrMwl/ont0RHFTXNAQfM647duYYEfs6cngrIyTByTI0xbWnDnPSptFZhS68L4WCjt2ZxuhCFwuY6Pe88KZQ=="; + }; + }; + "wrappy-1.0.2" = { + name = "wrappy"; + packageName = "wrappy"; + version = "1.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"; + sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"; + }; + }; + "ws-7.4.6" = { + name = "ws"; + packageName = "ws"; + version = "7.4.6"; + src = fetchurl { + url = "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz"; + sha512 = "YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A=="; + }; + }; + "ws-8.3.0" = { + name = "ws"; + packageName = "ws"; + version = "8.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ws/-/ws-8.3.0.tgz"; + sha512 = "Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw=="; + }; + }; + "ws-8.4.0" = { + name = "ws"; + packageName = "ws"; + version = "8.4.0"; + src = fetchurl { + url = "https://registry.npmjs.org/ws/-/ws-8.4.0.tgz"; + sha512 = "IHVsKe2pjajSUIl4KYMQOdlyliovpEPquKkqbwswulszzI7r0SfQrxnXdWAEqOlDCLrVSJzo+O1hAwdog2sKSQ=="; + }; + }; + "xhr2-0.2.0" = { + name = "xhr2"; + packageName = "xhr2"; + version = "0.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/xhr2/-/xhr2-0.2.0.tgz"; + sha512 = "BDtiD0i2iKPK/S8OAZfpk6tyzEDnKKSjxWHcMBVmh+LuqJ8A32qXTyOx+TVOg2dKvq6zGBq2sgKPkEeRs1qTRA=="; + }; + }; + "xtend-4.0.2" = { + name = "xtend"; + packageName = "xtend"; + version = "4.0.2"; + src = fetchurl { + url = "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz"; + sha512 = "LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="; + }; + }; + "y18n-4.0.1" = { + name = "y18n"; + packageName = "y18n"; + version = "4.0.1"; + src = fetchurl { + url = "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz"; + sha512 = "wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ=="; + }; + }; + "y18n-5.0.6" = { + name = "y18n"; + packageName = "y18n"; + version = "5.0.6"; + src = fetchurl { + url = "https://registry.npmjs.org/y18n/-/y18n-5.0.6.tgz"; + sha512 = "PlVX4Y0lDTN6E2V4ES2tEdyvXkeKzxa8c/vo0pxPr/TqbztddTP0yn7zZylIyiAuxerqj0Q5GhpJ1YJCP8LaZQ=="; + }; + }; + "y18n-5.0.8" = { + name = "y18n"; + packageName = "y18n"; + version = "5.0.8"; + src = fetchurl { + url = "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz"; + sha512 = "0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="; + }; + }; + "yallist-4.0.0" = { + name = "yallist"; + packageName = "yallist"; + version = "4.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"; + sha512 = "3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="; + }; + }; + "yaml-1.10.2" = { + name = "yaml"; + packageName = "yaml"; + version = "1.10.2"; + src = fetchurl { + url = "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz"; + sha512 = "r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="; + }; + }; + "yargs-15.4.1" = { + name = "yargs"; + packageName = "yargs"; + version = "15.4.1"; + src = fetchurl { + url = "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz"; + sha512 = "aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A=="; + }; + }; + "yargs-16.2.0" = { + name = "yargs"; + packageName = "yargs"; + version = "16.2.0"; + src = fetchurl { + url = "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz"; + sha512 = "D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw=="; + }; + }; + "yargs-17.3.0" = { + name = "yargs"; + packageName = "yargs"; + version = "17.3.0"; + src = fetchurl { + url = "https://registry.npmjs.org/yargs/-/yargs-17.3.0.tgz"; + sha512 = "GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew=="; + }; + }; + "yargs-parser-18.1.3" = { + name = "yargs-parser"; + packageName = "yargs-parser"; + version = "18.1.3"; + src = fetchurl { + url = "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz"; + sha512 = "o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ=="; + }; + }; + "yargs-parser-20.2.7" = { + name = "yargs-parser"; + packageName = "yargs-parser"; + version = "20.2.7"; + src = fetchurl { + url = "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz"; + sha512 = "FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw=="; + }; + }; + "yargs-parser-21.0.0" = { + name = "yargs-parser"; + packageName = "yargs-parser"; + version = "21.0.0"; + src = fetchurl { + url = "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz"; + sha512 = "z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA=="; + }; + }; + "yocto-queue-0.1.0" = { + name = "yocto-queue"; + packageName = "yocto-queue"; + version = "0.1.0"; + src = fetchurl { + url = "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"; + sha512 = "rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="; + }; + }; + "zone.js-0.11.4" = { + name = "zone.js"; + packageName = "zone.js"; + version = "0.11.4"; + src = fetchurl { + url = "https://registry.npmjs.org/zone.js/-/zone.js-0.11.4.tgz"; + sha512 = "DDh2Ab+A/B+9mJyajPjHFPWfYU1H+pdun4wnnk0OcQTNjem1XQSZ2CDW+rfZEUDjv5M19SBqAkjZi0x5wuB5Qw=="; + }; + }; + "zrender-5.2.1" = { + name = "zrender"; + packageName = "zrender"; + version = "5.2.1"; + src = fetchurl { + url = "https://registry.npmjs.org/zrender/-/zrender-5.2.1.tgz"; + sha512 = "M3bPGZuyLTNBC6LiNKXJwSCtglMp8XUEqEBG+2MdICDI3d1s500Y4P0CzldQGsqpRVB7fkvf3BKQQRxsEaTlsw=="; + }; + }; + }; + args = { + name = "mempool-frontend"; + packageName = "mempool-frontend"; + version = "2.3.1"; + dependencies = [ + sources."@ampproject/remapping-1.0.2" + (sources."@angular-devkit/build-angular-13.1.2" // { + dependencies = [ + sources."@angular-devkit/architect-0.1301.2" + sources."@angular-devkit/core-13.1.2" + sources."ajv-8.8.2" + sources."ajv-formats-2.1.1" + sources."ansi-styles-4.3.0" + sources."chalk-4.1.2" + sources."color-convert-2.0.1" + sources."color-name-1.1.4" + sources."critters-0.0.15" + sources."has-flag-4.0.0" + sources."json-schema-traverse-1.0.0" + sources."loader-utils-3.2.0" + sources."supports-color-7.2.0" + sources."terser-5.10.0" + ]; + }) + (sources."@angular-devkit/build-webpack-0.1301.2" // { + dependencies = [ + sources."@angular-devkit/architect-0.1301.2" + sources."@angular-devkit/core-13.1.2" + sources."ajv-8.8.2" + sources."ajv-formats-2.1.1" + sources."json-schema-traverse-1.0.0" + ]; + }) + sources."@angular/animations-13.1.1" + (sources."@angular/cli-13.0.4" // { + dependencies = [ + sources."@angular-devkit/architect-0.1300.4" + sources."@angular-devkit/core-13.0.4" + sources."@angular-devkit/schematics-13.0.4" + sources."@schematics/angular-13.0.4" + sources."ajv-8.6.3" + sources."ajv-formats-2.1.1" + sources."ini-2.0.0" + sources."json-schema-traverse-1.0.0" + ]; + }) + sources."@angular/common-13.1.1" + sources."@angular/compiler-13.1.1" + (sources."@angular/compiler-cli-13.1.1" // { + dependencies = [ + sources."ansi-styles-4.3.0" + sources."cliui-7.0.4" + sources."color-convert-2.0.1" + sources."color-name-1.1.4" + sources."wrap-ansi-7.0.0" + sources."y18n-5.0.8" + sources."yargs-17.3.0" + sources."yargs-parser-21.0.0" + ]; + }) + sources."@angular/core-13.1.1" + sources."@angular/forms-13.1.1" + (sources."@angular/localize-13.1.1" // { + dependencies = [ + sources."@babel/core-7.8.6" + sources."ansi-styles-4.3.0" + sources."cliui-7.0.4" + sources."color-convert-2.0.1" + sources."color-name-1.1.4" + sources."semver-5.7.1" + sources."source-map-0.5.7" + sources."wrap-ansi-7.0.0" + sources."y18n-5.0.8" + sources."yargs-17.3.0" + sources."yargs-parser-21.0.0" + ]; + }) + sources."@angular/platform-browser-13.1.1" + sources."@angular/platform-browser-dynamic-13.1.1" + sources."@angular/platform-server-13.1.1" + sources."@angular/router-13.1.1" + sources."@assemblyscript/loader-0.10.1" + sources."@babel/code-frame-7.16.7" + sources."@babel/compat-data-7.16.4" + (sources."@babel/core-7.16.0" // { + dependencies = [ + sources."semver-6.3.0" + sources."source-map-0.5.7" + ]; + }) + (sources."@babel/generator-7.16.0" // { + dependencies = [ + sources."source-map-0.5.7" + ]; + }) + sources."@babel/helper-annotate-as-pure-7.16.0" + sources."@babel/helper-builder-binary-assignment-operator-visitor-7.16.7" + (sources."@babel/helper-compilation-targets-7.16.7" // { + dependencies = [ + sources."semver-6.3.0" + ]; + }) + (sources."@babel/helper-create-class-features-plugin-7.16.7" // { + dependencies = [ + sources."@babel/helper-annotate-as-pure-7.16.7" + ]; + }) + (sources."@babel/helper-create-regexp-features-plugin-7.16.7" // { + dependencies = [ + sources."@babel/helper-annotate-as-pure-7.16.7" + ]; + }) + (sources."@babel/helper-define-polyfill-provider-0.3.0" // { + dependencies = [ + sources."semver-6.3.0" + ]; + }) + sources."@babel/helper-environment-visitor-7.16.7" + sources."@babel/helper-explode-assignable-expression-7.16.7" + (sources."@babel/helper-function-name-7.16.7" // { + dependencies = [ + sources."@babel/template-7.16.7" + ]; + }) + sources."@babel/helper-get-function-arity-7.16.7" + sources."@babel/helper-hoist-variables-7.16.7" + sources."@babel/helper-member-expression-to-functions-7.16.7" + sources."@babel/helper-module-imports-7.16.7" + (sources."@babel/helper-module-transforms-7.16.7" // { + dependencies = [ + sources."@babel/template-7.16.7" + ]; + }) + sources."@babel/helper-optimise-call-expression-7.16.7" + sources."@babel/helper-plugin-utils-7.16.7" + (sources."@babel/helper-remap-async-to-generator-7.16.8" // { + dependencies = [ + sources."@babel/helper-annotate-as-pure-7.16.7" + ]; + }) + sources."@babel/helper-replace-supers-7.16.7" + sources."@babel/helper-simple-access-7.16.7" + sources."@babel/helper-skip-transparent-expression-wrappers-7.16.0" + sources."@babel/helper-split-export-declaration-7.16.7" + sources."@babel/helper-validator-identifier-7.16.7" + sources."@babel/helper-validator-option-7.16.7" + (sources."@babel/helper-wrap-function-7.16.8" // { + dependencies = [ + sources."@babel/template-7.16.7" + ]; + }) + (sources."@babel/helpers-7.16.7" // { + dependencies = [ + sources."@babel/template-7.16.7" + ]; + }) + sources."@babel/highlight-7.16.7" + sources."@babel/parser-7.16.8" + sources."@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7" + sources."@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7" + sources."@babel/plugin-proposal-async-generator-functions-7.16.4" + sources."@babel/plugin-proposal-class-properties-7.16.7" + sources."@babel/plugin-proposal-class-static-block-7.16.7" + sources."@babel/plugin-proposal-dynamic-import-7.16.7" + sources."@babel/plugin-proposal-export-namespace-from-7.16.7" + sources."@babel/plugin-proposal-json-strings-7.16.7" + sources."@babel/plugin-proposal-logical-assignment-operators-7.16.7" + sources."@babel/plugin-proposal-nullish-coalescing-operator-7.16.7" + sources."@babel/plugin-proposal-numeric-separator-7.16.7" + sources."@babel/plugin-proposal-object-rest-spread-7.16.7" + sources."@babel/plugin-proposal-optional-catch-binding-7.16.7" + sources."@babel/plugin-proposal-optional-chaining-7.16.7" + sources."@babel/plugin-proposal-private-methods-7.16.7" + (sources."@babel/plugin-proposal-private-property-in-object-7.16.7" // { + dependencies = [ + sources."@babel/helper-annotate-as-pure-7.16.7" + ]; + }) + sources."@babel/plugin-proposal-unicode-property-regex-7.16.7" + sources."@babel/plugin-syntax-async-generators-7.8.4" + sources."@babel/plugin-syntax-class-properties-7.12.13" + sources."@babel/plugin-syntax-class-static-block-7.14.5" + sources."@babel/plugin-syntax-dynamic-import-7.8.3" + sources."@babel/plugin-syntax-export-namespace-from-7.8.3" + sources."@babel/plugin-syntax-json-strings-7.8.3" + sources."@babel/plugin-syntax-logical-assignment-operators-7.10.4" + sources."@babel/plugin-syntax-nullish-coalescing-operator-7.8.3" + sources."@babel/plugin-syntax-numeric-separator-7.10.4" + sources."@babel/plugin-syntax-object-rest-spread-7.8.3" + sources."@babel/plugin-syntax-optional-catch-binding-7.8.3" + sources."@babel/plugin-syntax-optional-chaining-7.8.3" + sources."@babel/plugin-syntax-private-property-in-object-7.14.5" + sources."@babel/plugin-syntax-top-level-await-7.14.5" + sources."@babel/plugin-transform-arrow-functions-7.16.7" + sources."@babel/plugin-transform-async-to-generator-7.16.0" + sources."@babel/plugin-transform-block-scoped-functions-7.16.7" + sources."@babel/plugin-transform-block-scoping-7.16.7" + (sources."@babel/plugin-transform-classes-7.16.7" // { + dependencies = [ + sources."@babel/helper-annotate-as-pure-7.16.7" + ]; + }) + sources."@babel/plugin-transform-computed-properties-7.16.7" + sources."@babel/plugin-transform-destructuring-7.16.7" + sources."@babel/plugin-transform-dotall-regex-7.16.7" + sources."@babel/plugin-transform-duplicate-keys-7.16.7" + sources."@babel/plugin-transform-exponentiation-operator-7.16.7" + sources."@babel/plugin-transform-for-of-7.16.7" + sources."@babel/plugin-transform-function-name-7.16.7" + sources."@babel/plugin-transform-literals-7.16.7" + sources."@babel/plugin-transform-member-expression-literals-7.16.7" + sources."@babel/plugin-transform-modules-amd-7.16.7" + sources."@babel/plugin-transform-modules-commonjs-7.16.8" + sources."@babel/plugin-transform-modules-systemjs-7.16.7" + sources."@babel/plugin-transform-modules-umd-7.16.7" + sources."@babel/plugin-transform-named-capturing-groups-regex-7.16.8" + sources."@babel/plugin-transform-new-target-7.16.7" + sources."@babel/plugin-transform-object-super-7.16.7" + sources."@babel/plugin-transform-parameters-7.16.7" + sources."@babel/plugin-transform-property-literals-7.16.7" + sources."@babel/plugin-transform-regenerator-7.16.7" + sources."@babel/plugin-transform-reserved-words-7.16.7" + (sources."@babel/plugin-transform-runtime-7.16.4" // { + dependencies = [ + sources."semver-6.3.0" + ]; + }) + sources."@babel/plugin-transform-shorthand-properties-7.16.7" + sources."@babel/plugin-transform-spread-7.16.7" + sources."@babel/plugin-transform-sticky-regex-7.16.7" + sources."@babel/plugin-transform-template-literals-7.16.7" + sources."@babel/plugin-transform-typeof-symbol-7.16.7" + sources."@babel/plugin-transform-unicode-escapes-7.16.7" + sources."@babel/plugin-transform-unicode-regex-7.16.7" + (sources."@babel/preset-env-7.16.4" // { + dependencies = [ + sources."semver-6.3.0" + ]; + }) + sources."@babel/preset-modules-0.1.5" + sources."@babel/runtime-7.16.3" + sources."@babel/template-7.16.0" + (sources."@babel/traverse-7.16.8" // { + dependencies = [ + sources."@babel/generator-7.16.8" + sources."source-map-0.5.7" + ]; + }) + sources."@babel/types-7.16.8" + sources."@csstools/convert-colors-1.4.0" + sources."@discoveryjs/json-ext-0.5.6" + sources."@fortawesome/angular-fontawesome-0.8.2" + sources."@fortawesome/fontawesome-common-types-0.2.35" + sources."@fortawesome/fontawesome-svg-core-1.2.35" + sources."@fortawesome/free-solid-svg-icons-5.15.3" + sources."@gar/promisify-1.1.2" + (sources."@goto-bus-stop/common-shake-2.4.0" // { + dependencies = [ + sources."debug-3.2.7" + ]; + }) + (sources."@goto-bus-stop/envify-5.0.0" // { + dependencies = [ + sources."acorn-node-2.0.1" + sources."dash-ast-2.0.1" + ]; + }) + sources."@istanbuljs/load-nyc-config-1.1.0" + sources."@istanbuljs/schema-0.1.2" + sources."@jridgewell/resolve-uri-1.0.0" + sources."@juggle/resize-observer-3.3.1" + (sources."@mempool/mempool.js-2.3.0" // { + dependencies = [ + sources."axios-0.24.0" + sources."ws-8.3.0" + ]; + }) + sources."@ng-bootstrap/ng-bootstrap-11.0.0" + sources."@ngtools/webpack-13.1.2" + sources."@nguniversal/common-11.2.1" + sources."@nguniversal/express-engine-11.2.1" + sources."@nodelib/fs.scandir-2.1.5" + sources."@nodelib/fs.stat-2.0.5" + sources."@nodelib/fs.walk-1.2.8" + sources."@npmcli/fs-1.0.0" + (sources."@npmcli/git-2.1.0" // { + dependencies = [ + sources."mkdirp-1.0.4" + sources."which-2.0.2" + ]; + }) + sources."@npmcli/installed-package-contents-1.0.7" + (sources."@npmcli/move-file-1.1.2" // { + dependencies = [ + sources."mkdirp-1.0.4" + ]; + }) + sources."@npmcli/node-gyp-1.0.3" + sources."@npmcli/promise-spawn-1.3.2" + sources."@npmcli/run-script-2.0.0" + sources."@scarf/scarf-1.1.0" + sources."@tootallnate/once-1.1.2" + sources."@types/component-emitter-1.2.10" + sources."@types/cookie-0.4.1" + sources."@types/cors-2.8.12" + sources."@types/eslint-7.28.0" + sources."@types/eslint-scope-3.7.1" + sources."@types/estree-0.0.50" + sources."@types/http-proxy-1.17.7" + sources."@types/json-schema-7.0.9" + sources."@types/node-12.19.7" + sources."@types/parse-json-4.0.0" + sources."@types/qrcode-1.4.1" + sources."@types/retry-0.12.1" + sources."@webassemblyjs/ast-1.11.1" + sources."@webassemblyjs/floating-point-hex-parser-1.11.1" + sources."@webassemblyjs/helper-api-error-1.11.1" + sources."@webassemblyjs/helper-buffer-1.11.1" + sources."@webassemblyjs/helper-numbers-1.11.1" + sources."@webassemblyjs/helper-wasm-bytecode-1.11.1" + sources."@webassemblyjs/helper-wasm-section-1.11.1" + sources."@webassemblyjs/ieee754-1.11.1" + sources."@webassemblyjs/leb128-1.11.1" + sources."@webassemblyjs/utf8-1.11.1" + sources."@webassemblyjs/wasm-edit-1.11.1" + sources."@webassemblyjs/wasm-gen-1.11.1" + sources."@webassemblyjs/wasm-opt-1.11.1" + sources."@webassemblyjs/wasm-parser-1.11.1" + sources."@webassemblyjs/wast-printer-1.11.1" + sources."@xtuc/ieee754-1.2.0" + sources."@xtuc/long-4.2.2" + sources."@yarnpkg/lockfile-1.1.0" + sources."JSONStream-1.3.5" + sources."abab-2.0.5" + sources."abbrev-1.1.1" + sources."accepts-1.3.7" + sources."acorn-7.4.1" + sources."acorn-node-1.8.2" + sources."acorn-walk-7.2.0" + sources."adjust-sourcemap-loader-4.0.0" + sources."agent-base-6.0.2" + sources."agentkeepalive-4.1.4" + sources."aggregate-error-3.1.0" + sources."ajv-6.12.6" + sources."ajv-keywords-3.5.2" + sources."amdefine-1.0.1" + sources."ansi-colors-4.1.1" + sources."ansi-escapes-4.3.1" + sources."ansi-html-community-0.0.8" + sources."ansi-regex-5.0.1" + sources."ansi-styles-3.2.1" + sources."anymatch-3.1.2" + sources."aproba-2.0.0" + (sources."are-we-there-yet-2.0.0" // { + dependencies = [ + sources."readable-stream-3.6.0" + ]; + }) + (sources."argparse-1.0.10" // { + dependencies = [ + sources."sprintf-js-1.0.3" + ]; + }) + sources."array-filter-1.0.0" + sources."array-flatten-1.1.1" + sources."array-from-2.1.1" + sources."array-union-3.0.1" + sources."asn1-0.2.4" + (sources."asn1.js-5.4.1" // { + dependencies = [ + sources."bn.js-4.12.0" + ]; + }) + (sources."assert-1.5.0" // { + dependencies = [ + sources."inherits-2.0.1" + sources."util-0.10.3" + ]; + }) + sources."assert-plus-1.0.0" + sources."asynckit-0.4.0" + sources."atob-2.1.2" + (sources."autoprefixer-9.8.8" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + sources."available-typed-arrays-1.0.2" + sources."aws-sign2-0.7.0" + sources."aws4-1.11.0" + sources."axios-0.21.4" + (sources."babel-loader-8.2.3" // { + dependencies = [ + sources."json5-1.0.1" + sources."loader-utils-1.4.0" + ]; + }) + sources."babel-plugin-dynamic-import-node-2.3.3" + (sources."babel-plugin-istanbul-6.1.1" // { + dependencies = [ + sources."istanbul-lib-instrument-5.1.0" + sources."semver-6.3.0" + ]; + }) + (sources."babel-plugin-polyfill-corejs2-0.3.0" // { + dependencies = [ + sources."semver-6.3.0" + ]; + }) + sources."babel-plugin-polyfill-corejs3-0.4.0" + sources."babel-plugin-polyfill-regenerator-0.3.0" + sources."balanced-match-1.0.0" + sources."base64-arraybuffer-0.1.4" + sources."base64-js-1.5.1" + sources."base64id-2.0.0" + sources."batch-0.6.1" + sources."bcrypt-pbkdf-1.0.2" + sources."big.js-5.2.2" + sources."binary-extensions-2.1.0" + (sources."bl-4.1.0" // { + dependencies = [ + sources."readable-stream-3.6.0" + ]; + }) + sources."bn.js-5.2.0" + (sources."body-parser-1.19.0" // { + dependencies = [ + sources."debug-2.6.9" + sources."ms-2.0.0" + sources."qs-6.7.0" + sources."raw-body-2.4.0" + ]; + }) + (sources."bonjour-3.5.0" // { + dependencies = [ + sources."array-flatten-2.1.2" + ]; + }) + sources."boolbase-1.0.0" + sources."bootstrap-4.5.0" + sources."brace-expansion-1.1.11" + sources."braces-3.0.2" + sources."brorand-1.1.0" + sources."browser-pack-6.1.0" + sources."browser-pack-flat-3.4.2" + sources."browser-resolve-2.0.0" + sources."browser-unpack-1.4.2" + (sources."browserify-17.0.0" // { + dependencies = [ + sources."buffer-5.2.1" + sources."path-browserify-1.0.1" + sources."punycode-1.4.1" + (sources."stream-browserify-3.0.0" // { + dependencies = [ + sources."readable-stream-3.6.0" + ]; + }) + (sources."stream-http-3.1.1" // { + dependencies = [ + sources."readable-stream-3.6.0" + ]; + }) + sources."timers-browserify-1.4.2" + sources."tty-browserify-0.0.1" + sources."util-0.12.3" + ]; + }) + sources."browserify-aes-1.2.0" + sources."browserify-cipher-1.0.1" + sources."browserify-des-1.0.2" + sources."browserify-rsa-4.1.0" + (sources."browserify-sign-4.2.1" // { + dependencies = [ + sources."readable-stream-3.6.0" + sources."safe-buffer-5.2.1" + ]; + }) + sources."browserify-zlib-0.2.0" + sources."browserslist-4.19.1" + sources."buffer-5.7.1" + sources."buffer-from-1.1.1" + sources."buffer-indexof-1.1.1" + sources."buffer-xor-1.0.3" + sources."builtin-status-codes-3.0.0" + sources."builtins-1.0.3" + sources."bundle-collapser-1.4.0" + sources."bytes-3.1.0" + (sources."cacache-15.3.0" // { + dependencies = [ + sources."mkdirp-1.0.4" + ]; + }) + sources."cached-path-relative-1.0.2" + sources."call-bind-1.0.2" + sources."call-matcher-2.0.0" + sources."callsites-3.1.0" + sources."camelcase-5.3.1" + sources."caniuse-lite-1.0.30001298" + sources."canonical-path-1.0.0" + sources."caseless-0.12.0" + sources."chalk-2.4.2" + sources."chardet-0.7.0" + sources."chokidar-3.5.2" + sources."chownr-2.0.0" + sources."chrome-trace-event-1.0.3" + sources."cipher-base-1.0.4" + sources."circular-dependency-plugin-5.2.2" + sources."clean-stack-2.2.0" + sources."cli-cursor-3.1.0" + sources."cli-spinners-2.6.0" + sources."cli-width-3.0.0" + sources."clipboard-2.0.6" + sources."cliui-6.0.0" + sources."clone-1.0.4" + sources."clone-deep-4.0.1" + sources."color-convert-1.9.3" + sources."color-name-1.1.3" + sources."color-support-1.1.3" + sources."colors-1.4.0" + (sources."combine-source-map-0.8.0" // { + dependencies = [ + sources."convert-source-map-1.1.3" + sources."lodash.memoize-3.0.4" + sources."source-map-0.5.7" + ]; + }) + sources."combined-stream-1.0.8" + sources."commander-2.20.3" + sources."common-shakeify-0.6.2" + sources."commondir-1.0.1" + sources."component-emitter-1.3.0" + sources."compressible-2.0.18" + (sources."compression-1.7.4" // { + dependencies = [ + sources."bytes-3.0.0" + sources."debug-2.6.9" + sources."ms-2.0.0" + ]; + }) + sources."concat-map-0.0.1" + sources."concat-stream-1.6.2" + sources."connect-history-api-fallback-1.6.0" + sources."console-browserify-1.2.0" + sources."console-control-strings-1.1.0" + sources."constants-browserify-1.0.0" + sources."content-disposition-0.5.3" + sources."content-type-1.0.4" + sources."convert-source-map-1.7.0" + sources."cookie-0.4.0" + sources."cookie-signature-1.0.6" + sources."copy-anything-2.0.3" + (sources."copy-webpack-plugin-10.0.0" // { + dependencies = [ + sources."ajv-8.8.2" + sources."ajv-formats-2.1.1" + sources."ajv-keywords-5.1.0" + sources."glob-parent-6.0.2" + sources."json-schema-traverse-1.0.0" + sources."schema-utils-4.0.0" + ]; + }) + sources."core-js-3.19.3" + (sources."core-js-compat-3.20.2" // { + dependencies = [ + sources."semver-7.0.0" + ]; + }) + sources."core-util-is-1.0.2" + sources."cors-2.8.5" + sources."cosmiconfig-7.0.1" + sources."count-lines-0.1.2" + (sources."create-ecdh-4.0.4" // { + dependencies = [ + sources."bn.js-4.12.0" + ]; + }) + sources."create-hash-1.2.0" + sources."create-hmac-1.1.7" + (sources."critters-0.0.7" // { + dependencies = [ + sources."ansi-styles-4.3.0" + sources."chalk-4.1.0" + sources."color-convert-2.0.1" + sources."color-name-1.1.4" + sources."has-flag-4.0.0" + sources."supports-color-7.2.0" + ]; + }) + (sources."cross-spawn-7.0.3" // { + dependencies = [ + sources."which-2.0.2" + ]; + }) + sources."crypto-browserify-3.12.0" + (sources."css-3.0.0" // { + dependencies = [ + sources."source-map-0.6.1" + ]; + }) + (sources."css-blank-pseudo-0.1.4" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."css-has-pseudo-0.10.0" // { + dependencies = [ + sources."cssesc-2.0.0" + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."postcss-selector-parser-5.0.0" + sources."source-map-0.6.1" + ]; + }) + sources."css-loader-6.5.1" + (sources."css-prefers-color-scheme-3.1.1" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + sources."css-select-4.2.1" + sources."css-what-5.1.0" + sources."cssdb-4.4.0" + sources."cssesc-3.0.0" + sources."custom-event-1.0.1" + sources."d-1.0.1" + sources."dash-ast-1.0.0" + sources."dashdash-1.14.1" + sources."date-format-3.0.0" + sources."debug-4.3.2" + sources."decamelize-1.2.0" + sources."decode-uri-component-0.2.0" + sources."dedent-0.7.0" + sources."deep-equal-1.1.1" + sources."deep-is-0.1.3" + sources."default-gateway-6.0.3" + sources."defaults-1.0.3" + sources."define-lazy-prop-2.0.0" + sources."define-properties-1.1.3" + sources."defined-1.0.0" + (sources."del-6.0.0" // { + dependencies = [ + sources."array-union-2.1.0" + sources."globby-11.1.0" + sources."slash-3.0.0" + ]; + }) + sources."delayed-stream-1.0.0" + sources."delegate-3.2.0" + sources."delegates-1.0.0" + sources."depd-1.1.2" + sources."dependency-graph-0.11.0" + sources."deps-sort-2.0.1" + sources."des.js-1.0.1" + sources."destroy-1.0.4" + sources."detect-node-2.1.0" + sources."detective-5.2.0" + sources."di-0.0.1" + (sources."diffie-hellman-5.0.3" // { + dependencies = [ + sources."bn.js-4.12.0" + ]; + }) + sources."dijkstrajs-1.0.1" + sources."dir-glob-3.0.1" + sources."dns-equal-1.0.0" + sources."dns-packet-1.3.4" + sources."dns-txt-2.0.2" + sources."dom-serialize-2.2.1" + sources."dom-serializer-1.3.2" + sources."domain-browser-1.2.0" + sources."domelementtype-2.2.0" + sources."domhandler-4.3.0" + sources."domino-2.1.6" + sources."domutils-2.8.0" + sources."duplexer-0.1.2" + sources."duplexer2-0.1.4" + sources."ecc-jsbn-0.1.2" + (sources."echarts-5.2.2" // { + dependencies = [ + sources."tslib-2.3.0" + ]; + }) + sources."ee-first-1.1.1" + sources."electron-to-chromium-1.4.41" + (sources."elliptic-6.5.4" // { + dependencies = [ + sources."bn.js-4.12.0" + ]; + }) + sources."emoji-regex-8.0.0" + sources."emojis-list-3.0.0" + sources."encode-utf8-1.0.3" + sources."encodeurl-1.0.2" + sources."end-of-stream-1.4.4" + sources."enhanced-resolve-5.8.3" + sources."ent-2.2.0" + sources."entities-2.2.0" + sources."env-paths-2.2.1" + sources."err-code-2.0.3" + sources."error-ex-1.3.2" + sources."es-abstract-1.18.0" + sources."es-module-lexer-0.9.3" + sources."es-to-primitive-1.2.1" + sources."es5-ext-0.10.53" + sources."es6-iterator-2.0.3" + sources."es6-map-0.1.5" + (sources."es6-set-0.1.5" // { + dependencies = [ + sources."es6-symbol-3.1.1" + ]; + }) + sources."es6-symbol-3.1.3" + sources."es6-weak-map-2.0.3" + sources."esbuild-wasm-0.14.2" + sources."escalade-3.1.1" + sources."escape-html-1.0.3" + sources."escape-string-regexp-1.0.5" + sources."escodegen-1.14.3" + sources."escope-3.6.0" + sources."eslint-scope-5.1.1" + sources."esprima-4.0.1" + sources."espurify-2.1.1" + (sources."esrecurse-4.3.0" // { + dependencies = [ + sources."estraverse-5.2.0" + ]; + }) + sources."estraverse-4.3.0" + sources."estree-is-function-1.0.0" + sources."estree-is-identifier-1.0.0" + sources."estree-is-member-expression-1.0.0" + sources."estree-is-require-1.0.0" + sources."esutils-2.0.3" + sources."etag-1.8.1" + sources."event-emitter-0.3.5" + sources."eventemitter-asyncresource-1.0.0" + sources."eventemitter3-4.0.7" + sources."events-3.3.0" + sources."evp_bytestokey-1.0.3" + (sources."execa-5.1.1" // { + dependencies = [ + sources."human-signals-2.1.0" + ]; + }) + (sources."express-4.17.1" // { + dependencies = [ + sources."debug-2.6.9" + sources."finalhandler-1.1.2" + sources."mime-1.6.0" + sources."ms-2.0.0" + sources."qs-6.7.0" + (sources."send-0.17.1" // { + dependencies = [ + sources."ms-2.1.1" + ]; + }) + sources."serve-static-1.14.1" + ]; + }) + (sources."ext-1.4.0" // { + dependencies = [ + sources."type-2.1.0" + ]; + }) + sources."extend-3.0.2" + sources."external-editor-3.1.0" + sources."extsprintf-1.3.0" + sources."falafel-2.2.4" + sources."fancy-canvas-0.2.2" + sources."fast-deep-equal-3.1.3" + sources."fast-glob-3.2.10" + sources."fast-json-stable-stringify-2.1.0" + sources."fast-levenshtein-2.0.6" + sources."fast-safe-stringify-2.0.7" + sources."fastq-1.13.0" + sources."faye-websocket-0.11.4" + sources."figures-3.2.0" + sources."fill-range-7.0.1" + sources."find-cache-dir-3.3.2" + sources."find-up-4.1.0" + sources."flatted-2.0.2" + sources."flatten-1.0.3" + sources."follow-redirects-1.14.7" + sources."foreach-2.0.5" + sources."forever-agent-0.6.1" + sources."form-data-2.3.3" + sources."forwarded-0.1.2" + sources."fresh-0.5.2" + sources."from2-2.3.0" + sources."from2-string-1.1.0" + sources."fs-extra-8.1.0" + sources."fs-minipass-2.1.0" + sources."fs-monkey-1.0.3" + sources."fs.realpath-1.0.0" + sources."function-bind-1.1.1" + (sources."gauge-4.0.0" // { + dependencies = [ + sources."strip-ansi-6.0.1" + ]; + }) + sources."gensync-1.0.0-beta.2" + sources."get-assigned-identifiers-1.2.0" + sources."get-caller-file-2.0.5" + sources."get-intrinsic-1.1.1" + sources."get-package-type-0.1.0" + sources."get-stream-6.0.1" + sources."getpass-0.1.7" + sources."glob-7.2.0" + sources."glob-parent-5.1.2" + sources."glob-to-regexp-0.4.1" + sources."globals-11.12.0" + sources."globby-12.0.2" + sources."good-listener-1.2.2" + sources."graceful-fs-4.2.8" + sources."handle-thing-2.0.1" + sources."has-1.0.3" + (sources."has-ansi-2.0.0" // { + dependencies = [ + sources."ansi-regex-2.1.1" + ]; + }) + sources."has-bigints-1.0.1" + sources."has-flag-3.0.0" + sources."has-symbols-1.0.2" + sources."has-unicode-2.0.1" + (sources."hash-base-3.1.0" // { + dependencies = [ + sources."readable-stream-3.6.0" + sources."safe-buffer-5.2.1" + ]; + }) + sources."hash.js-1.1.7" + sources."hdr-histogram-js-2.0.1" + sources."hdr-histogram-percentiles-obj-3.0.0" + sources."hmac-drbg-1.0.1" + sources."hosted-git-info-4.0.2" + sources."hpack.js-2.1.6" + sources."html-entities-2.3.2" + sources."htmlescape-1.1.1" + sources."http-cache-semantics-4.1.0" + sources."http-deceiver-1.2.7" + (sources."http-errors-1.7.2" // { + dependencies = [ + sources."inherits-2.0.3" + ]; + }) + sources."http-parser-js-0.5.5" + sources."http-proxy-1.18.1" + sources."http-proxy-agent-4.0.1" + sources."https-browserify-1.0.0" + sources."https-proxy-agent-5.0.0" + sources."humanize-ms-1.2.1" + sources."iconv-lite-0.4.24" + sources."icss-utils-5.1.0" + sources."ieee754-1.2.1" + sources."ignore-5.2.0" + sources."ignore-walk-4.0.1" + (sources."import-fresh-3.3.0" // { + dependencies = [ + sources."resolve-from-4.0.0" + ]; + }) + sources."imurmurhash-0.1.4" + sources."indent-string-4.0.0" + sources."indexes-of-1.0.1" + sources."infer-owner-1.0.4" + sources."inflight-1.0.6" + sources."inherits-2.0.4" + (sources."inline-source-map-0.6.2" // { + dependencies = [ + sources."source-map-0.5.7" + ]; + }) + (sources."inquirer-8.2.0" // { + dependencies = [ + sources."ansi-styles-4.3.0" + sources."chalk-4.1.2" + sources."color-convert-2.0.1" + sources."color-name-1.1.4" + sources."has-flag-4.0.0" + sources."rxjs-7.4.0" + sources."supports-color-7.2.0" + sources."tslib-2.1.0" + ]; + }) + sources."insert-module-globals-7.2.1" + sources."ip-1.1.5" + sources."ipaddr.js-1.9.1" + sources."is-arguments-1.1.0" + sources."is-arrayish-0.2.1" + sources."is-bigint-1.0.1" + sources."is-binary-path-2.1.0" + sources."is-boolean-object-1.1.0" + sources."is-buffer-1.1.6" + sources."is-callable-1.2.3" + sources."is-core-module-2.2.0" + sources."is-date-object-1.0.2" + sources."is-docker-2.2.1" + sources."is-extglob-2.1.1" + sources."is-fullwidth-code-point-3.0.0" + sources."is-generator-function-1.0.8" + sources."is-glob-4.0.3" + sources."is-interactive-1.0.0" + sources."is-lambda-1.0.1" + sources."is-negative-zero-2.0.1" + sources."is-number-7.0.0" + sources."is-number-object-1.0.4" + sources."is-path-cwd-2.2.0" + sources."is-path-inside-3.0.3" + sources."is-plain-obj-3.0.0" + sources."is-plain-object-2.0.4" + sources."is-regex-1.1.2" + sources."is-stream-2.0.1" + sources."is-string-1.0.5" + sources."is-symbol-1.0.3" + sources."is-typed-array-1.1.5" + sources."is-typedarray-1.0.0" + sources."is-unicode-supported-0.1.0" + sources."is-what-3.14.1" + sources."is-wsl-2.2.0" + sources."isarray-2.0.5" + sources."isbinaryfile-4.0.8" + sources."isexe-2.0.0" + sources."isobject-3.0.1" + sources."isstream-0.1.2" + sources."istanbul-lib-coverage-3.2.0" + (sources."jest-worker-27.2.0" // { + dependencies = [ + sources."has-flag-4.0.0" + sources."supports-color-8.1.1" + ]; + }) + sources."js-tokens-4.0.0" + sources."js-yaml-3.14.0" + sources."jsbn-0.1.1" + sources."jsesc-2.5.2" + sources."json-parse-better-errors-1.0.2" + sources."json-parse-even-better-errors-2.3.1" + sources."json-schema-0.4.0" + sources."json-schema-traverse-0.4.1" + sources."json-stringify-safe-5.0.1" + sources."json5-2.2.0" + sources."jsonc-parser-3.0.0" + sources."jsonfile-4.0.0" + sources."jsonparse-1.3.1" + (sources."karma-6.3.4" // { + dependencies = [ + (sources."connect-3.7.0" // { + dependencies = [ + sources."debug-2.6.9" + ]; + }) + sources."cookie-0.4.1" + sources."engine.io-4.1.2" + sources."engine.io-parser-4.0.3" + (sources."finalhandler-1.1.2" // { + dependencies = [ + sources."debug-2.6.9" + ]; + }) + sources."ms-2.0.0" + sources."socket.io-3.1.2" + sources."socket.io-adapter-2.1.0" + sources."socket.io-parser-4.0.4" + sources."source-map-0.6.1" + sources."tmp-0.2.1" + ]; + }) + sources."karma-source-map-support-1.4.0" + sources."kind-of-6.0.3" + sources."klona-2.0.5" + sources."labeled-stream-splicer-2.0.2" + sources."less-4.1.2" + sources."less-loader-10.2.0" + sources."levn-0.3.0" + sources."license-webpack-plugin-4.0.0" + sources."lightweight-charts-3.3.0" + sources."lines-and-columns-1.2.4" + sources."loader-runner-4.2.0" + sources."loader-utils-2.0.0" + sources."locate-path-5.0.0" + sources."lodash-4.17.21" + sources."lodash.debounce-4.0.8" + (sources."log-symbols-4.1.0" // { + dependencies = [ + sources."ansi-styles-4.3.0" + sources."chalk-4.1.0" + sources."color-convert-2.0.1" + sources."color-name-1.1.4" + sources."has-flag-4.0.0" + sources."supports-color-7.2.0" + ]; + }) + sources."log4js-6.3.0" + sources."lru-cache-6.0.0" + sources."magic-string-0.25.7" + (sources."make-dir-3.1.0" // { + dependencies = [ + sources."semver-6.3.0" + ]; + }) + sources."make-fetch-happen-9.1.0" + sources."md5.js-1.3.5" + sources."media-typer-0.3.0" + sources."memfs-3.4.1" + sources."merge-descriptors-1.0.1" + sources."merge-stream-2.0.0" + sources."merge2-1.4.1" + sources."methods-1.1.2" + sources."micromatch-4.0.4" + (sources."miller-rabin-4.0.1" // { + dependencies = [ + sources."bn.js-4.12.0" + ]; + }) + sources."mime-2.5.2" + sources."mime-db-1.49.0" + sources."mime-types-2.1.32" + sources."mimic-fn-2.1.0" + (sources."mini-css-extract-plugin-2.4.5" // { + dependencies = [ + sources."ajv-8.8.2" + sources."ajv-formats-2.1.1" + sources."ajv-keywords-5.1.0" + sources."json-schema-traverse-1.0.0" + sources."schema-utils-4.0.0" + ]; + }) + (sources."minify-stream-2.1.0" // { + dependencies = [ + sources."concat-stream-2.0.0" + sources."duplexify-4.1.1" + sources."readable-stream-3.6.0" + sources."source-map-0.6.1" + sources."terser-4.8.0" + ]; + }) + sources."minimalistic-assert-1.0.1" + sources."minimalistic-crypto-utils-1.0.1" + sources."minimatch-3.0.4" + sources."minimist-1.2.5" + sources."minipass-3.1.5" + sources."minipass-collect-1.0.2" + sources."minipass-fetch-1.4.1" + sources."minipass-flush-1.0.5" + sources."minipass-json-stream-1.0.1" + sources."minipass-pipeline-1.2.4" + sources."minipass-sized-1.0.3" + sources."minizlib-2.1.2" + sources."mkdirp-0.5.5" + sources."mkdirp-classic-0.5.3" + sources."module-deps-6.2.3" + sources."ms-2.1.2" + (sources."multi-stage-sourcemap-0.2.1" // { + dependencies = [ + sources."source-map-0.1.43" + ]; + }) + sources."multicast-dns-6.2.3" + sources."multicast-dns-service-types-1.1.0" + sources."multisplice-1.0.0" + sources."mute-stream-0.0.8" + sources."mutexify-1.3.1" + (sources."nanobench-2.1.1" // { + dependencies = [ + sources."ansi-regex-2.1.1" + sources."ansi-styles-2.2.1" + sources."browser-process-hrtime-0.1.3" + sources."chalk-1.1.3" + sources."strip-ansi-3.0.1" + sources."supports-color-2.0.0" + ]; + }) + sources."nanoid-3.1.30" + sources."negotiator-0.6.2" + sources."neo-async-2.6.2" + sources."next-tick-1.0.0" + sources."ngx-bootrap-multiselect-2.0.0" + sources."ngx-echarts-7.0.1" + sources."ngx-infinite-scroll-10.0.1" + sources."node-forge-0.10.0" + (sources."node-gyp-8.4.1" // { + dependencies = [ + sources."which-2.0.2" + ]; + }) + sources."node-releases-2.0.1" + sources."nopt-5.0.0" + sources."normalize-path-3.0.0" + sources."normalize-range-0.1.2" + sources."npm-bundled-1.1.2" + sources."npm-install-checks-4.0.0" + sources."npm-normalize-package-bin-1.0.1" + sources."npm-package-arg-8.1.5" + sources."npm-packlist-3.0.0" + sources."npm-pick-manifest-6.1.1" + sources."npm-registry-fetch-11.0.0" + sources."npm-run-path-4.0.1" + sources."npmlog-6.0.0" + sources."nth-check-2.0.1" + sources."num2fraction-1.2.2" + sources."object-assign-4.1.1" + sources."object-inspect-1.9.0" + sources."object-is-1.1.5" + sources."object-keys-1.1.1" + sources."object.assign-4.1.2" + sources."obuf-1.1.2" + sources."on-finished-2.3.0" + sources."on-headers-1.0.2" + sources."once-1.4.0" + sources."onetime-5.1.2" + sources."open-8.4.0" + sources."opencollective-postinstall-2.0.3" + sources."optionator-0.8.3" + (sources."ora-5.4.1" // { + dependencies = [ + sources."ansi-styles-4.3.0" + sources."chalk-4.1.0" + sources."color-convert-2.0.1" + sources."color-name-1.1.4" + sources."has-flag-4.0.0" + sources."supports-color-7.2.0" + ]; + }) + sources."os-browserify-0.3.0" + sources."os-tmpdir-1.0.2" + sources."p-limit-3.1.0" + (sources."p-locate-4.1.0" // { + dependencies = [ + sources."p-limit-2.3.0" + ]; + }) + sources."p-map-4.0.0" + (sources."p-retry-4.6.1" // { + dependencies = [ + sources."retry-0.13.1" + ]; + }) + sources."p-try-2.2.0" + (sources."pacote-12.0.2" // { + dependencies = [ + sources."mkdirp-1.0.4" + ]; + }) + sources."pako-1.0.11" + sources."parent-module-1.0.1" + sources."parents-1.0.1" + sources."parse-asn1-5.1.6" + sources."parse-json-5.2.0" + sources."parse-node-version-1.0.1" + sources."parse5-6.0.1" + sources."parse5-html-rewriting-stream-6.0.1" + sources."parse5-htmlparser2-tree-adapter-6.0.1" + sources."parse5-sax-parser-6.0.1" + sources."parseurl-1.3.3" + sources."path-exists-4.0.0" + sources."path-is-absolute-1.0.1" + sources."path-key-3.1.1" + sources."path-parse-1.0.7" + sources."path-platform-0.11.15" + sources."path-to-regexp-0.1.7" + sources."path-type-4.0.0" + sources."pbkdf2-3.1.1" + sources."performance-now-2.1.0" + sources."picocolors-1.0.0" + sources."picomatch-2.3.0" + sources."piscina-3.1.0" + sources."pkg-dir-4.2.0" + sources."pngjs-5.0.0" + (sources."portfinder-1.0.28" // { + dependencies = [ + sources."async-2.6.3" + sources."debug-3.2.7" + ]; + }) + (sources."postcss-8.4.4" // { + dependencies = [ + sources."source-map-js-1.0.1" + ]; + }) + (sources."postcss-attribute-case-insensitive-4.0.2" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-color-functional-notation-2.0.1" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-color-gray-5.0.0" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-color-hex-alpha-5.0.3" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-color-mod-function-3.0.3" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-color-rebeccapurple-4.0.1" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-custom-media-7.0.8" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-custom-properties-8.0.11" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-custom-selectors-5.1.2" // { + dependencies = [ + sources."cssesc-2.0.0" + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."postcss-selector-parser-5.0.0" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-dir-pseudo-class-5.0.0" // { + dependencies = [ + sources."cssesc-2.0.0" + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."postcss-selector-parser-5.0.0" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-double-position-gradients-1.0.0" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-env-function-2.0.2" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-focus-visible-4.0.0" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-focus-within-3.0.0" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-font-variant-4.0.1" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-gap-properties-2.0.0" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-image-set-function-3.0.1" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + sources."postcss-import-14.0.2" + (sources."postcss-initial-3.0.4" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-lab-function-2.0.1" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + sources."postcss-loader-6.2.1" + (sources."postcss-logical-3.0.0" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-media-minmax-4.0.0" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + sources."postcss-modules-extract-imports-3.0.0" + sources."postcss-modules-local-by-default-4.0.0" + sources."postcss-modules-scope-3.0.0" + sources."postcss-modules-values-4.0.0" + (sources."postcss-nesting-7.0.1" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-overflow-shorthand-2.0.0" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-page-break-2.0.0" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-place-4.0.1" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-preset-env-6.7.0" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-pseudo-class-any-link-6.0.0" // { + dependencies = [ + sources."cssesc-2.0.0" + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."postcss-selector-parser-5.0.0" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-replace-overflow-wrap-3.0.0" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-selector-matches-4.0.0" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + (sources."postcss-selector-not-4.0.1" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + sources."postcss-selector-parser-6.0.6" + sources."postcss-value-parser-4.1.0" + sources."postcss-values-parser-2.0.1" + sources."prelude-ls-1.1.2" + sources."pretty-bytes-5.6.0" + sources."pretty-hrtime-1.0.3" + sources."process-0.11.10" + sources."process-nextick-args-2.0.1" + sources."promise-inflight-1.0.1" + sources."promise-retry-2.0.1" + sources."proxy-addr-2.0.6" + sources."psl-1.8.0" + (sources."public-encrypt-4.0.3" // { + dependencies = [ + sources."bn.js-4.12.0" + ]; + }) + sources."punycode-2.1.1" + sources."qjobs-1.2.0" + (sources."qrcode-1.5.0" // { + dependencies = [ + sources."yargs-15.4.1" + ]; + }) + sources."querystring-0.2.0" + sources."querystring-es3-0.2.1" + sources."queue-microtask-1.2.3" + sources."randombytes-2.1.0" + sources."randomfill-1.0.4" + sources."range-parser-1.2.1" + (sources."read-cache-1.0.0" // { + dependencies = [ + sources."pify-2.3.0" + ]; + }) + sources."read-only-stream-2.0.0" + sources."read-package-json-fast-2.0.3" + (sources."readable-stream-2.3.7" // { + dependencies = [ + sources."isarray-1.0.0" + ]; + }) + sources."readdirp-3.6.0" + sources."reflect-metadata-0.1.13" + sources."regenerate-1.4.2" + sources."regenerate-unicode-properties-9.0.0" + sources."regenerator-runtime-0.13.9" + sources."regenerator-transform-0.14.5" + sources."regex-parser-2.2.11" + sources."regexp.prototype.flags-1.3.1" + sources."regexpu-core-4.8.0" + sources."regjsgen-0.5.2" + (sources."regjsparser-0.7.0" // { + dependencies = [ + sources."jsesc-0.5.0" + ]; + }) + sources."require-directory-2.1.1" + sources."require-from-string-2.0.2" + sources."require-main-filename-2.0.0" + sources."requires-port-1.0.0" + sources."resolve-1.20.0" + sources."resolve-from-5.0.0" + (sources."resolve-url-loader-4.0.0" // { + dependencies = [ + sources."picocolors-0.2.1" + sources."postcss-7.0.39" + sources."source-map-0.6.1" + ]; + }) + sources."restore-cursor-3.1.0" + sources."retry-0.12.0" + sources."reusify-1.0.4" + sources."rfdc-1.3.0" + sources."rimraf-3.0.2" + sources."ripemd160-2.0.2" + sources."run-async-2.4.1" + sources."run-parallel-1.2.0" + (sources."rxjs-6.6.7" // { + dependencies = [ + sources."tslib-1.14.1" + ]; + }) + sources."safe-buffer-5.1.2" + sources."safer-buffer-2.1.2" + (sources."sass-1.44.0" // { + dependencies = [ + sources."immutable-4.0.0" + ]; + }) + sources."sass-loader-12.4.0" + sources."sax-1.2.4" + sources."schema-utils-2.7.1" + sources."scope-analyzer-2.1.1" + sources."select-1.1.2" + sources."select-hose-2.0.0" + sources."selfsigned-1.10.14" + sources."semver-7.3.5" + sources."serialize-javascript-6.0.0" + (sources."serve-index-1.9.1" // { + dependencies = [ + sources."debug-2.6.9" + sources."http-errors-1.6.3" + sources."inherits-2.0.3" + sources."ms-2.0.0" + sources."setprototypeof-1.1.0" + ]; + }) + sources."set-blocking-2.0.0" + sources."setprototypeof-1.1.1" + sources."sha.js-2.4.11" + sources."shallow-clone-3.0.1" + sources."shasum-object-1.0.0" + sources."shebang-command-2.0.0" + sources."shebang-regex-3.0.0" + sources."shell-quote-1.7.2" + sources."signal-exit-3.0.3" + sources."simple-concat-1.0.1" + sources."slash-4.0.0" + sources."smart-buffer-4.2.0" + sources."sockjs-0.3.24" + sources."socks-2.6.1" + sources."socks-proxy-agent-6.1.1" + sources."source-map-0.7.3" + sources."source-map-js-0.6.2" + (sources."source-map-loader-3.0.0" // { + dependencies = [ + sources."iconv-lite-0.6.3" + ]; + }) + sources."source-map-resolve-0.6.0" + (sources."source-map-support-0.5.21" // { + dependencies = [ + sources."source-map-0.6.1" + ]; + }) + sources."sourcemap-codec-1.4.8" + sources."spdy-4.0.2" + (sources."spdy-transport-3.0.0" // { + dependencies = [ + sources."readable-stream-3.6.0" + ]; + }) + sources."sshpk-1.16.1" + sources."ssri-8.0.1" + sources."statuses-1.5.0" + sources."stream-combiner-0.2.2" + sources."stream-combiner2-1.1.1" + sources."stream-shift-1.0.1" + sources."stream-splicer-2.0.1" + (sources."streamroller-2.2.4" // { + dependencies = [ + sources."date-format-2.1.0" + ]; + }) + (sources."string-width-4.2.3" // { + dependencies = [ + sources."strip-ansi-6.0.1" + ]; + }) + sources."string.prototype.trimend-1.0.4" + sources."string.prototype.trimstart-1.0.4" + sources."string_decoder-1.1.1" + sources."strip-ansi-6.0.0" + sources."strip-final-newline-2.0.0" + (sources."stylus-0.55.0" // { + dependencies = [ + sources."debug-3.1.0" + sources."mkdirp-1.0.4" + sources."ms-2.0.0" + sources."semver-6.3.0" + ]; + }) + sources."stylus-loader-6.2.0" + sources."subarg-1.0.0" + sources."supports-color-5.5.0" + sources."symbol-observable-4.0.0" + sources."syntax-error-1.4.0" + sources."tapable-2.2.1" + (sources."tar-6.1.11" // { + dependencies = [ + sources."mkdirp-1.0.4" + ]; + }) + sources."terser-5.9.0" + (sources."terser-webpack-plugin-5.1.4" // { + dependencies = [ + sources."schema-utils-3.1.1" + sources."source-map-0.6.1" + ]; + }) + sources."test-exclude-6.0.0" + sources."text-table-0.2.0" + sources."through-2.3.8" + sources."through2-2.0.5" + sources."thunky-1.1.0" + sources."tiny-emitter-2.1.0" + (sources."tinyify-3.0.0" // { + dependencies = [ + sources."through2-3.0.2" + ]; + }) + sources."tlite-0.1.9" + sources."tmp-0.0.33" + sources."to-fast-properties-2.0.0" + sources."to-regex-range-5.0.1" + sources."toidentifier-1.0.0" + (sources."transform-ast-2.4.4" // { + dependencies = [ + sources."is-buffer-2.0.5" + sources."magic-string-0.23.2" + sources."merge-source-map-1.0.4" + sources."source-map-0.5.7" + ]; + }) + sources."tree-kill-1.2.2" + sources."tslib-2.3.1" + sources."tunnel-agent-0.6.0" + sources."tweetnacl-0.14.5" + sources."type-1.2.0" + sources."type-check-0.3.2" + sources."type-fest-0.11.0" + sources."type-is-1.6.18" + sources."typed-assert-1.0.8" + sources."typedarray-0.0.6" + sources."typescript-4.4.4" + sources."ua-parser-js-0.7.28" + (sources."uglifyify-5.0.2" // { + dependencies = [ + sources."convert-source-map-1.1.3" + sources."source-map-0.6.1" + sources."terser-3.17.0" + ]; + }) + sources."umd-3.0.3" + sources."unassert-1.6.0" + (sources."unassertify-2.1.1" // { + dependencies = [ + sources."acorn-5.7.4" + ]; + }) + sources."unbox-primitive-1.0.1" + sources."undeclared-identifiers-1.1.3" + sources."unicode-canonical-property-names-ecmascript-2.0.0" + sources."unicode-match-property-ecmascript-2.0.0" + sources."unicode-match-property-value-ecmascript-2.0.0" + sources."unicode-property-aliases-ecmascript-2.0.0" + sources."uniq-1.0.1" + sources."unique-filename-1.1.1" + sources."unique-slug-2.0.2" + sources."universalify-0.1.2" + sources."unpipe-1.0.0" + sources."uri-js-4.4.0" + (sources."url-0.11.0" // { + dependencies = [ + sources."punycode-1.3.2" + ]; + }) + sources."util-deprecate-1.0.2" + sources."utils-merge-1.0.1" + sources."uuid-8.3.2" + sources."validate-npm-package-name-3.0.0" + sources."vary-1.1.2" + sources."verror-1.10.0" + sources."vm-browserify-1.1.2" + sources."void-elements-2.0.1" + sources."watchpack-2.3.1" + sources."wbuf-1.7.3" + sources."wcwidth-1.0.1" + (sources."webpack-5.65.0" // { + dependencies = [ + sources."acorn-8.5.0" + sources."acorn-import-assertions-1.7.6" + sources."schema-utils-3.1.1" + ]; + }) + (sources."webpack-dev-middleware-5.2.2" // { + dependencies = [ + sources."ajv-8.8.2" + sources."ajv-formats-2.1.1" + sources."ajv-keywords-5.1.0" + sources."colorette-2.0.16" + sources."json-schema-traverse-1.0.0" + sources."schema-utils-4.0.0" + ]; + }) + (sources."webpack-dev-server-4.6.0" // { + dependencies = [ + sources."ajv-8.8.2" + sources."ajv-formats-2.1.1" + sources."ajv-keywords-5.1.0" + sources."ansi-regex-6.0.1" + sources."colorette-2.0.16" + sources."http-proxy-middleware-2.0.1" + sources."ipaddr.js-2.0.1" + sources."json-schema-traverse-1.0.0" + sources."schema-utils-4.0.0" + sources."strip-ansi-7.0.1" + sources."ws-8.4.0" + ]; + }) + sources."webpack-merge-5.8.0" + sources."webpack-sources-3.2.2" + sources."webpack-subresource-integrity-5.0.0" + sources."websocket-driver-0.7.4" + sources."websocket-extensions-0.1.4" + sources."which-boxed-primitive-1.0.2" + sources."which-module-2.0.0" + sources."which-typed-array-1.1.4" + sources."wide-align-1.1.5" + sources."wildcard-2.0.0" + sources."word-wrap-1.2.3" + (sources."wrap-ansi-6.2.0" // { + dependencies = [ + sources."ansi-styles-4.3.0" + sources."color-convert-2.0.1" + sources."color-name-1.1.4" + ]; + }) + sources."wrap-comment-1.0.1" + sources."wrappy-1.0.2" + sources."ws-7.4.6" + sources."xhr2-0.2.0" + sources."xtend-4.0.2" + sources."y18n-4.0.1" + sources."yallist-4.0.0" + sources."yaml-1.10.2" + (sources."yargs-16.2.0" // { + dependencies = [ + sources."ansi-styles-4.3.0" + sources."cliui-7.0.4" + sources."color-convert-2.0.1" + sources."color-name-1.1.4" + sources."wrap-ansi-7.0.0" + sources."y18n-5.0.6" + sources."yargs-parser-20.2.7" + ]; + }) + sources."yargs-parser-18.1.3" + sources."yocto-queue-0.1.0" + sources."zone.js-0.11.4" + (sources."zrender-5.2.1" // { + dependencies = [ + sources."tslib-2.3.0" + ]; + }) + ]; + buildInputs = globalBuildInputs; + meta = { + description = "Bitcoin mempool visualizer and blockchain explorer backend"; + homepage = "https://mempool.space"; + license = "GNU Affero General Public License v3.0"; + }; + production = true; + bypassCache = true; + reconstructLock = false; + }; +in +{ + args = args; + sources = sources; + tarball = nodeEnv.buildNodeSourceDist args; + package = nodeEnv.buildNodePackage args; + shell = nodeEnv.buildNodeShell args; + nodeDependencies = nodeEnv.buildNodeDependencies (lib.overrideExisting args { + src = stdenv.mkDerivation { + name = args.name + "-package-json"; + src = nix-gitignore.gitignoreSourcePure [ + "*" + "!package.json" + "!package-lock.json" + ] args.src; + dontBuild = true; + installPhase = "mkdir -p $out; cp -r ./* $out;"; + }; + }); +} From 15a42202959937c298a0614832e30ff5d871229f Mon Sep 17 00:00:00 2001 From: nixbitcoin Date: Thu, 17 Feb 2022 13:27:57 +0000 Subject: [PATCH 65/65] mempool: add module Co-authored-by: Erik Arvstedt --- examples/configuration.nix | 5 + modules/default.nix | 1 + modules/mempool.nix | 302 +++++++++++++++++++++++++++++++++ modules/modules.nix | 1 + modules/netns-isolation.nix | 11 +- modules/nodeinfo.nix | 1 + modules/onion-services.nix | 3 + modules/presets/enable-tor.nix | 5 + test/tests.nix | 3 + test/tests.py | 8 + 10 files changed, 339 insertions(+), 1 deletion(-) create mode 100644 modules/mempool.nix diff --git a/examples/configuration.nix b/examples/configuration.nix index c946a351f..6a3cea9ce 100644 --- a/examples/configuration.nix +++ b/examples/configuration.nix @@ -214,6 +214,11 @@ # Set this to enable the JoinMarket order book watcher. # services.joinmarket-ob-watcher.enable = true; + ### MEMPOOL + # Set this to enable mempool, a fully featured Bitcoin visualizer, explorer, and + # API service. + # services.mempool.enable = true; + ### Backups # Set this to enable nix-bitcoin's own backup service. By default, it # uses duplicity to incrementally back up all important files in /var/lib to diff --git a/modules/default.nix b/modules/default.nix index f173f9ac5..2c98a00ab 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -7,6 +7,7 @@ liquid = ./liquid.nix; presets.secure-node = ./presets/secure-node.nix; rtl = ./rtl.nix; + mempool = ./mempool.nix; spark-wallet = ./spark-wallet.nix; lnd = ./lnd.nix; charge-lnd = ./charge-lnd.nix; diff --git a/modules/mempool.nix b/modules/mempool.nix new file mode 100644 index 000000000..4b80e9740 --- /dev/null +++ b/modules/mempool.nix @@ -0,0 +1,302 @@ +{ config, lib, pkgs, ... }: + +with lib; +let + options.services.mempool = { + enable = mkEnableOption "Mempool, a fully featured Bitcoin visualizer, explorer, and API service."; + # Use nginx address as services.mempool.address so onion-services.nix can pick up on it + address = mkOption { + type = types.str; + default = if config.nix-bitcoin.netns-isolation.enable then + config.nix-bitcoin.netns-isolation.netns.nginx.address + else + "localhost"; + description = "HTTP server address."; + }; + port = mkOption { + type = types.port; + default = 12125; # random port for nginx + description = "HTTP server port."; + }; + backendAddress = mkOption { + type = types.str; + default = "127.0.0.1"; + description = "mempool-backend address."; + }; + backendPort = mkOption { + type = types.port; + default = 8999; + description = "Backend server port."; + }; + electrumServer = mkOption { + type = types.enum [ "electrs" "fulcrum" ]; + default = "electrs"; + description = "Electrum server implementation."; + }; + dataDir = mkOption { + type = types.path; + default = "/var/lib/mempool"; + description = "The data directory for Mempool."; + }; + user = mkOption { + type = types.str; + default = "mempool"; + description = "The user as which to run Mempool."; + }; + group = mkOption { + type = types.str; + default = cfg.user; + description = "The group as which to run Mempool."; + }; + tor.enforce = nbLib.tor.enforce; + }; + + cfg = config.services.mempool; + nbLib = config.nix-bitcoin.lib; + nbPkgs = config.nix-bitcoin.pkgs; + secretsDir = config.nix-bitcoin.secretsDir; + mysqlAddress = if config.nix-bitcoin.netns-isolation.enable then + config.nix-bitcoin.netns-isolation.netns.mysql.address + else + "localhost"; + + configFile = builtins.toFile "mempool-config" + (builtins.toJSON + { + MEMPOOL = { + NETWORK = "mainnet"; + BACKEND = "electrum"; + HTTP_PORT = cfg.backendPort; + CACHE_DIR = "/run/mempool"; + }; + CORE_RPC = { + HOST = bitcoind.rpc.address; + PORT = bitcoind.rpc.port; + USERNAME = bitcoind.rpc.users.public.name; + PASSWORD = "@btcRpcPassword@"; + }; + ELECTRUM = let + server = config.services.${cfg.electrumServer}; + in { + HOST = server.address; + PORT = server.port; + TLS_ENABLED = false; + }; + DATABASE = { + ENABLED = true; + HOST = mysqlAddress; + PORT = config.services.mysql.port; + DATABASE = "mempool"; + USERNAME = cfg.user; + PASSWORD = "@mempoolDbPassword@"; + }; + } + ); + + inherit (config.services) + bitcoind + electrs + fulcrum; +in { + inherit options; + + config = mkIf cfg.enable { + services.bitcoind.txindex = true; + services.electrs.enable = mkIf (cfg.electrumServer == "electrs" ) true; + services.fulcrum.enable = mkIf (cfg.electrumServer == "fulcrum" ) true; + services.mysql = { + enable = true; + settings.mysqld.skip_name_resolve = true; + package = pkgs.mariadb; + initialDatabases = [{name = "mempool";}]; + initialScript = "${secretsDir}/mempool-db-initialScript"; + }; + + systemd.tmpfiles.rules = [ + "d '${cfg.dataDir}' 0770 ${cfg.user} ${cfg.group} - -" + # Create symlink to static website content + "L+ /var/www/mempool/browser - - - - ${nbPkgs.mempool-frontend}" + ]; + + systemd.services.mempool = { + wantedBy = [ "multi-user.target" ]; + requires = [ "${cfg.electrumServer}.service" ]; + after = [ "${cfg.electrumServer}.service" "mysql.service" ]; + serviceConfig = nbLib.defaultHardening // { + ExecStartPre = [ + (nbLib.script "mempool-setup-config" '' + <${configFile} sed \ + -e "s|@btcRpcPassword@|$(cat ${secretsDir}/bitcoin-rpcpassword-public)|" \ + -e "s|@mempoolDbPassword@|$(cat ${secretsDir}/mempool-db-password)|" \ + > '${cfg.dataDir}/config.json' + '') + ]; + ExecStart = "${nbPkgs.mempool-backend.workaround}/bin/mempool-backend"; + RuntimeDirectory = "mempool"; + # Show "mempool" instead of "node" in the journal + SyslogIdentifier = "mempool"; + User = cfg.user; + Restart = "on-failure"; + RestartSec = "10s"; + ReadWritePaths = cfg.dataDir; + } // nbLib.allowedIPAddresses cfg.tor.enforce + // nbLib.nodejs; + }; + + services.nginx = { + enable = true; + enableReload = true; + recommendedProxySettings = true; + recommendedGzipSettings = true; + recommendedOptimisation = true; + recommendedTlsSettings = true; + eventsConfig = '' + multi_accept on; + ''; + appendHttpConfig = '' + map $http_accept_language $header_lang { + default en-US; + ~*^en-US en-US; + ~*^en en-US; + ~*^ar ar; + ~*^ca ca; + ~*^cs cs; + ~*^de de; + ~*^es es; + ~*^fa fa; + ~*^fr fr; + ~*^ko ko; + ~*^it it; + ~*^he he; + ~*^ka ka; + ~*^hu hu; + ~*^mk mk; + ~*^nl nl; + ~*^ja ja; + ~*^nb nb; + ~*^pl pl; + ~*^pt pt; + ~*^ro ro; + ~*^ru ru; + ~*^sl sl; + ~*^fi fi; + ~*^sv sv; + ~*^th th; + ~*^tr tr; + ~*^uk uk; + ~*^vi vi; + ~*^zh zh; + ~*^hi hi; + } + + map $cookie_lang $lang { + default $header_lang; + ~*^en-US en-US; + ~*^en en-US; + ~*^ar ar; + ~*^ca ca; + ~*^cs cs; + ~*^de de; + ~*^es es; + ~*^fa fa; + ~*^fr fr; + ~*^ko ko; + ~*^it it; + ~*^he he; + ~*^ka ka; + ~*^hu hu; + ~*^mk mk; + ~*^nl nl; + ~*^ja ja; + ~*^nb nb; + ~*^pl pl; + ~*^pt pt; + ~*^ro ro; + ~*^ru ru; + ~*^sl sl; + ~*^fi fi; + ~*^sv sv; + ~*^th th; + ~*^tr tr; + ~*^uk uk; + ~*^vi vi; + ~*^zh zh; + ~*^hi hi; + } + ''; + virtualHosts."mempool" = { + root = "/var/www/mempool/browser"; + serverName = "_"; + listen = [ { addr = cfg.address; port = cfg.port; } ]; + extraConfig = '' + add_header Cache-Control "public, no-transform"; + + add_header Vary Accept-Language; + add_header Vary Cookie; + + location / { + try_files /$lang/$uri /$lang/$uri/ $uri $uri/ /en-US/$uri @index-redirect; + expires 10m; + } + location /resources { + try_files /$lang/$uri /$lang/$uri/ $uri $uri/ /en-US/$uri @index-redirect; + expires 1h; + } + location @index-redirect { + rewrite (.*) /$lang/index.html; + } + + location ~ ^/(ar|bg|bs|ca|cs|da|de|et|el|es|eo|eu|fa|fr|gl|ko|hr|id|it|he|ka|lv|lt|hu|mk|ms|nl|ja|nb|nn|pl|pt|pt-BR|ro|ru|sk|sl|sr|sh|fi|sv|th|tr|uk|vi|zh|hi)/resources/ { + rewrite ^/[a-zA-Z-]*/resources/(.*) /en-US/resources/$1; + } + location ~ ^/(ar|bg|bs|ca|cs|da|de|et|el|es|eo|eu|fa|fr|gl|ko|hr|id|it|he|ka|lv|lt|hu|mk|ms|nl|ja|nb|nn|pl|pt|pt-BR|ro|ru|sk|sl|sr|sh|fi|sv|th|tr|uk|vi|zh|hi)/ { + try_files $uri $uri/ /$1/index.html =404; + } + + location = /api { + try_files $uri $uri/ /en-US/index.html =404; + } + location = /api/ { + try_files $uri $uri/ /en-US/index.html =404; + } + + location /api/v1/ws { + proxy_pass http://${cfg.backendAddress}:${toString cfg.backendPort}/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + } + location /api/v1 { + proxy_pass http://${cfg.backendAddress}:${toString cfg.backendPort}/api/v1; + } + location /api/ { + proxy_pass http://${cfg.backendAddress}:${toString cfg.backendPort}/api/v1/; + } + + location /ws { + proxy_pass http://${cfg.backendAddress}:${toString cfg.backendPort}/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + } + ''; + }; + }; + + users.users.${cfg.user} = { + isSystemUser = true; + group = cfg.group; + extraGroups = [ "bitcoinrpc-public" ]; + }; + users.groups.${cfg.group} = {}; + + nix-bitcoin.secrets.mempool-db-initialScript.user = config.services.mysql.user; + nix-bitcoin.secrets.mempool-db-password.user = cfg.user; + nix-bitcoin.generateSecretsCmds.mempool = '' + makePasswordSecret mempool-db-password + if [[ mempool-db-password -nt mempool-db-initialScript ]]; then + echo "grant all on mempool.* to '${cfg.user}'@'${cfg.backendAddress}' identified by '$(cat mempool-db-password)'" > mempool-db-initialScript + fi + ''; + }; +} diff --git a/modules/modules.nix b/modules/modules.nix index 08c20bc69..df6f2c882 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -20,6 +20,7 @@ ./charge-lnd.nix ./lndconnect-onion.nix # Requires onion-addresses.nix ./rtl.nix + ./mempool.nix ./electrs.nix ./fulcrum.nix ./liquid.nix diff --git a/modules/netns-isolation.nix b/modules/netns-isolation.nix index ce1a9cec0..1df3e87e8 100644 --- a/modules/netns-isolation.nix +++ b/modules/netns-isolation.nix @@ -293,8 +293,15 @@ in { clightning-rest = { id = 30; }; - fulcrum = { + mempool = { + id = 31; + connections = [ "bitcoind" "electrs" "fulcrum" "nginx" "mysql" ]; + }; + mysql = { id = 32; + }; + fulcrum = { + id = 33; connections = [ "bitcoind" ]; }; }; @@ -355,6 +362,8 @@ in { services.rtl.address = netns.rtl.address; services.clightning-rest.address = netns.clightning-rest.address; + + services.mempool.backendAddress = netns.mempool.address; } ]); } diff --git a/modules/nodeinfo.nix b/modules/nodeinfo.nix index b6ed8138b..19f23f988 100644 --- a/modules/nodeinfo.nix +++ b/modules/nodeinfo.nix @@ -34,6 +34,7 @@ let liquidd = mkInfo ""; joinmarket-ob-watcher = mkInfo ""; rtl = mkInfo ""; + mempool = mkInfo ""; # Only add sshd when it has an onion service sshd = name: cfg: mkIfOnionPort "sshd" (onionPort: '' add_service("sshd", """set_onion_address(info, "sshd", ${onionPort})""") diff --git a/modules/onion-services.nix b/modules/onion-services.nix index 7aa3cfaad..134515eae 100644 --- a/modules/onion-services.nix +++ b/modules/onion-services.nix @@ -120,6 +120,9 @@ in { rtl = { externalPort = 80; }; + mempool = { + externalPort = 80; + }; }; } ]; diff --git a/modules/presets/enable-tor.nix b/modules/presets/enable-tor.nix index 2a0ed02df..66278890a 100644 --- a/modules/presets/enable-tor.nix +++ b/modules/presets/enable-tor.nix @@ -28,6 +28,10 @@ in { # btcpayserver = defaultEnableTorProxy; spark-wallet = defaultEnableTorProxy; lightning-pool = defaultEnableTorProxy; + # TODO-EXTERNAL: + # disable Tor enforcement until + # https://github.com/mempool/mempool/pull/1213 is released + # mempool = defaultEnforceTor; # These services don't make outgoing connections # (or use Tor by default in case of joinmarket) @@ -49,5 +53,6 @@ in { spark-wallet.enable = defaultTrue; joinmarket-ob-watcher.enable = defaultTrue; rtl.enable = defaultTrue; + mempool.enable = defaultTrue; }; } diff --git a/test/tests.nix b/test/tests.nix index 7f3e42009..47acda8fe 100644 --- a/test/tests.nix +++ b/test/tests.nix @@ -78,6 +78,8 @@ let echo a > rtl-password ''); + tests.mempool = cfg.mempool.enable; + tests.spark-wallet = cfg.spark-wallet.enable; tests.lnd = cfg.lnd.enable; @@ -221,6 +223,7 @@ let services.clightning-rest.enable = true; services.liquidd.enable = true; services.rtl.enable = true; + services.mempool.enable = true; services.spark-wallet.enable = true; services.lnd.enable = true; services.lightning-loop.enable = true; diff --git a/test/tests.py b/test/tests.py index e1599abc7..1d598aa35 100644 --- a/test/tests.py +++ b/test/tests.py @@ -225,6 +225,14 @@ def _(): log_has_string("clightning-rest", "cl-rest api server is ready and listening on port: 3001") ) +@test("mempool") +def _(): + assert_running("mempool") + machine.wait_until_succeeds( + log_has_string("mempool", "Mempool Server is running on port 8999") + ) + assert_matches(f"curl -L {ip('nginx')}:12125", "mempool - Bitcoin Explorer") + @test("spark-wallet") def _(): assert_running("spark-wallet")