From 1a64deeb894dc95e2645a75771732c6cc53a79ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Bouya?= Date: Wed, 4 Oct 2023 01:35:06 +0200 Subject: Squash changes containing private information There were a lot of changes since the previous commit, but a lot of them contained personnal information about users. All thos changes got stashed into a single commit (history is kept in a different place) and private information was moved in a separate private repository --- modules/default.nix | 29 - modules/duply_backup/default.nix | 124 - modules/naemon/default.nix | 183 - modules/naemon/naemon.cfg | 1059 --- modules/private/buildbot/common/build_helpers.py | 277 - modules/private/buildbot/common/libvirt.py | 318 - modules/private/buildbot/common/master.cfg | 69 - modules/private/buildbot/default.nix | 244 - .../private/buildbot/projects/caldance/__init__.py | 198 - .../buildbot/projects/cryptoportfolio/__init__.py | 169 - .../private/buildbot/projects/denise/__init__.py | 186 - .../private/buildbot/projects/immaeEu/__init__.py | 314 - .../projects/immaeEu/scripts/lacells_download | 163 - modules/private/buildbot/projects/test/__init__.py | 197 - modules/private/certificates.nix | 199 - modules/private/databases/default.nix | 57 - modules/private/databases/mariadb.nix | 182 - modules/private/databases/mariadb_replication.nix | 251 - modules/private/databases/openldap/default.nix | 147 - .../private/databases/openldap/eldiron_schemas.nix | 21 - modules/private/databases/openldap/immae.schema | 179 - modules/private/databases/openldap_replication.nix | 166 - modules/private/databases/postgresql.nix | 228 - .../private/databases/postgresql_replication.nix | 182 - modules/private/databases/redis.nix | 133 - modules/private/databases/redis_replication.nix | 171 - modules/private/databases/utils.nix | 30 - modules/private/default.nix | 136 - modules/private/dns.nix | 197 - modules/private/ejabberd/default.nix | 92 - modules/private/ejabberd/ejabberd.yml | 231 - modules/private/environment.nix | 1492 ---- modules/private/ftp.nix | 248 - modules/private/ftp_sync.sh | 47 - modules/private/gemini/default.nix | 26 - modules/private/gemini/public/index.gmi | 70 - modules/private/gitolite/default.nix | 77 - modules/private/gitolite/gitolite_ldap_groups.sh | 15 - modules/private/gitolite/ldap_gitolite.sh | 33 - modules/private/irc.nix | 54 - modules/private/loginctl-linger.nix | 47 - modules/private/mail/default.nix | 42 - modules/private/mail/dovecot.nix | 292 - modules/private/mail/filter-rewrite-from.py | 68 - modules/private/mail/milters.nix | 88 - modules/private/mail/opensmtpd.nix | 57 - modules/private/mail/postfix.nix | 471 - modules/private/mail/relay.nix | 235 - modules/private/mail/rspamd.nix | 87 - modules/private/mail/scan_reported_mails | 21 - modules/private/mail/sieve_bin/imapsieve_copy | 8 - modules/private/mail/sieve_scripts/backup.sieve | 7 - .../private/mail/sieve_scripts/report_ham.sieve | 11 - .../private/mail/sieve_scripts/report_spam.sieve | 3 - modules/private/mail/sympa.nix | 213 - modules/private/mail/verify_from.py | 60 - modules/private/monitoring/default.nix | 249 - modules/private/monitoring/myplugins.nix | 389 - modules/private/monitoring/nagios-cli.cfg | 68 - modules/private/monitoring/objects_backup-2.nix | 111 - modules/private/monitoring/objects_common.nix | 253 - modules/private/monitoring/objects_dilion.nix | 32 - modules/private/monitoring/objects_eban.nix | 70 - modules/private/monitoring/objects_eldiron.nix | 38 - modules/private/monitoring/objects_master.nix | 39 - .../private/monitoring/objects_monitoring-1.nix | 714 -- modules/private/monitoring/objects_phare.nix | 17 - .../private/monitoring/objects_quatresaisons.nix | 38 - modules/private/monitoring/objects_tiboqorl-fr.nix | 174 - modules/private/monitoring/objects_ulminfo-fr.nix | 17 - .../private/monitoring/plugins/check_backup_age | 66 - modules/private/monitoring/plugins/check_bandwidth | 123 - modules/private/monitoring/plugins/check_command | 113 - modules/private/monitoring/plugins/check_emails | 121 - modules/private/monitoring/plugins/check_eriomem | 83 - .../private/monitoring/plugins/check_ftp_database | 11 - modules/private/monitoring/plugins/check_git | 81 - .../monitoring/plugins/check_imap_connection | 52 - .../monitoring/plugins/check_last_file_date | 28 - modules/private/monitoring/plugins/check_mem.sh | 29 - .../monitoring/plugins/check_mysql_replication | 41 - .../monitoring/plugins/check_openldap_replication | 54 - modules/private/monitoring/plugins/check_ovh_sms | 25 - .../plugins/check_postgres_database_count | 32 - .../monitoring/plugins/check_postgres_replication | 35 - .../monitoring/plugins/check_redis_replication | 38 - .../private/monitoring/plugins/check_zfs_snapshot | 325 - modules/private/monitoring/plugins/notify_by_email | 29 - modules/private/monitoring/plugins/notify_by_slack | 46 - modules/private/monitoring/plugins/notify_eban_url | 6 - modules/private/monitoring/plugins/send_nrdp.sh | 57 - modules/private/monitoring/send_mails | 15 - modules/private/monitoring/status.nix | 93 - modules/private/monitoring/status/app.py | 414 - modules/private/monitoring/status_engine.nix | 115 - modules/private/monitoring/to_objects.nix | 77 - modules/private/mpd.nix | 60 - modules/private/pub/default.nix | 56 - modules/private/pub/ldap_pub.sh | 56 - modules/private/pub/restrict | 64 - modules/private/pub/tmux.restrict.conf | 43 - modules/private/ssh/default.nix | 91 - modules/private/ssh/ldap_authorized_keys.sh | 52 - modules/private/ssh/ldap_regular.sh | 19 - modules/private/system.nix | 98 - modules/private/system/backup-2.nix | 137 - modules/private/system/dilion.nix | 242 - modules/private/system/dilion/vms.nix | 185 - .../system/dilion/vms/base_configuration.nix | 21 - modules/private/system/dilion/vms/base_image.nix | 94 - .../system/dilion/vms/buildbot_configuration.nix | 67 - modules/private/system/eldiron.nix | 228 - modules/private/system/monitoring-1.nix | 69 - modules/private/system/quatresaisons.nix | 436 - modules/private/system/quatresaisons/databases.nix | 147 - modules/private/system/quatresaisons/landing.yml | 32 - .../private/system/quatresaisons/landing_4c.yml | 24 - modules/private/system/quatresaisons/nextcloud.nix | 141 - modules/private/tasks/default.nix | 355 - modules/private/tasks/www/index.php | 168 - modules/private/vpn/default.nix | 65 - modules/private/vpn/tinc/host-down | 7 - modules/private/vpn/tinc/host-up | 11 - modules/private/vpn/tinc/tinc-down | 12 - modules/private/vpn/tinc/tinc-up | 14 - modules/private/vpn/tinc/tinc.conf | 11 - .../websites/_www/googleb6d69446ff4ca3e5.html | 1 - modules/private/websites/_www/index.htm | 9 - .../private/websites/_www/maintenance_immae.html | 58 - modules/private/websites/_www/nossl.html | 11 - modules/private/websites/bakeer/cloud.nix | 23 - .../capitaines/discourse_static/discourse.png | Bin 2440 -> 0 bytes .../capitaines/discourse_static/index.html | 28 - .../private/websites/capitaines/landing_pages.nix | 57 - .../websites/capitaines/mastodon_static/index.html | 29 - .../websites/capitaines/mastodon_static/oops.png | Bin 120305 -> 0 bytes modules/private/websites/chloe/app/default.nix | 22 - modules/private/websites/chloe/config/chmod.php | 4 - modules/private/websites/chloe/config/connect.php | 15 - modules/private/websites/chloe/config/ldap.php | 9 - modules/private/websites/chloe/integration.nix | 104 - modules/private/websites/chloe/production.nix | 112 - modules/private/websites/cip-ca/sympa.nix | 28 - modules/private/websites/commons/adminer.nix | 4 - .../websites/connexionswing/app/default.nix | 29 - .../websites/connexionswing/app/php-packages.nix | 597 -- .../websites/connexionswing/integration.nix | 141 - .../private/websites/connexionswing/production.nix | 110 - modules/private/websites/default.nix | 324 - modules/private/websites/denise/aventuriers.nix | 26 - modules/private/websites/denise/bingo.nix | 100 - modules/private/websites/denise/denisejerome.nix | 31 - modules/private/websites/denise/evariste.nix | 104 - modules/private/websites/denise/oms.nix | 100 - modules/private/websites/denise/production.nix | 25 - .../private/websites/emilia/atelierfringant.nix | 65 - modules/private/websites/emilia/moodle.nix | 65 - modules/private/websites/emilia/moodle/pause.html | 48 - modules/private/websites/florian/app.nix | 142 - modules/private/websites/florian/app/default.nix | 27 - .../private/websites/florian/app/php-packages.nix | 389 - modules/private/websites/florian/integration.nix | 34 - modules/private/websites/florian/production.nix | 34 - .../websites/immae/chatons/immae-eu.properties | 46 - .../immae/chatons/service-etherpad.properties | 164 - .../immae/eurl/certificates/2021-certificate.crt | 23 - modules/private/websites/immae/matrix/client | 8 - modules/private/websites/immae/matrix/server | 3 - modules/private/websites/immae/production.nix | 137 - modules/private/websites/immae/release.nix | 39 - modules/private/websites/immae/temp.nix | 64 - .../private/websites/isabelle/aten_app/default.nix | 61 - .../websites/isabelle/aten_app/php-packages.nix | 740 -- .../websites/isabelle/aten_app/yarn-packages.nix | 7871 ---------------- .../private/websites/isabelle/aten_integration.nix | 91 - .../private/websites/isabelle/aten_production.nix | 90 - modules/private/websites/isabelle/config/chmod.php | 4 - .../private/websites/isabelle/config/connect.php | 15 - modules/private/websites/isabelle/config/ldap.php | 9 - modules/private/websites/isabelle/iridologie.nix | 113 - .../websites/isabelle/iridologie_app/default.nix | 19 - modules/private/websites/jerome/naturaloutil.nix | 97 - modules/private/websites/leila/production.nix | 114 - modules/private/websites/ludivine/app/default.nix | 37 - .../private/websites/ludivine/app/php-packages.nix | 868 -- modules/private/websites/ludivine/integration.nix | 145 - modules/private/websites/ludivine/production.nix | 116 - modules/private/websites/moomin.txt | 16 - modules/private/websites/nassime/production.nix | 35 - modules/private/websites/nath/villon.nix | 42 - modules/private/websites/papa/maison_bbc.nix | 28 - .../websites/papa/maison_bbc_static/data.json | 4101 --------- .../websites/papa/maison_bbc_static/favicon.ico | Bin 318 -> 0 bytes .../websites/papa/maison_bbc_static/index.html | 164 - .../websites/papa/maison_bbc_static/lamaison.png | Bin 259991 -> 0 bytes modules/private/websites/papa/surveillance.nix | 50 - .../websites/patrick_fodella/altermondia.nix | 73 - .../private/websites/patrick_fodella/ecolyeu.nix | 72 - .../private/websites/piedsjaloux/app/default.nix | 29 - .../websites/piedsjaloux/app/php-packages.nix | 1009 --- .../private/websites/piedsjaloux/integration.nix | 135 - .../private/websites/piedsjaloux/production.nix | 106 - .../private/websites/ressourcerie_banon/cloud.nix | 20 - .../websites/ressourcerie_banon/cryptpad.nix | 49 - .../websites/ressourcerie_banon/production.nix | 70 - modules/private/websites/richie/production.nix | 106 - modules/private/websites/syden/peertube.nix | 132 - .../private/websites/telio_tortay/production.nix | 81 - modules/private/websites/tools/assets/default.nix | 39 - .../websites/tools/assets/static/favicon.png | Bin 1734 -> 0 bytes .../websites/tools/assets/static/logger.png | Bin 3340 -> 0 bytes .../websites/tools/assets/static/logger.txt | 3 - .../private/websites/tools/assets/static/logo.jpg | Bin 6931 -> 0 bytes .../private/websites/tools/assets/static/logo.txt | 7 - .../websites/tools/assets/static/logo_big.jpg | Bin 16390 -> 0 bytes .../websites/tools/assets/static/logo_big.txt | 7 - .../websites/tools/assets/static/logo_center.jpg | Bin 29509 -> 0 bytes .../websites/tools/assets/static/logo_center.txt | 8 - .../websites/tools/assets/static/monitoring.png | Bin 57395 -> 0 bytes .../websites/tools/assets/static/monitoring.txt | 3 - .../websites/tools/assets/static/photos/ct.jpg | Bin 55914 -> 0 bytes .../tools/assets/static/photos/fretlink.jpg | Bin 1520106 -> 0 bytes .../websites/tools/assets/static/photos/raton.jpg | Bin 17614 -> 0 bytes modules/private/websites/tools/cloud/default.nix | 184 - modules/private/websites/tools/cloud/farm.nix | 123 - .../private/websites/tools/commento/default.nix | 59 - .../private/websites/tools/cryptpad/default.nix | 50 - modules/private/websites/tools/cryptpad/farm.nix | 180 - modules/private/websites/tools/dav/davical.nix | 133 - modules/private/websites/tools/dav/default.nix | 55 - modules/private/websites/tools/dav/www/index.html | 42 - modules/private/websites/tools/db/default.nix | 21 - .../private/websites/tools/diaspora/default.nix | 185 - modules/private/websites/tools/ether/default.nix | 216 - .../websites/tools/games/codenames/codenames.patch | 8306 ----------------- .../websites/tools/games/codenames/default.nix | 50 - .../websites/tools/games/codenames/deps.nix | 11 - .../websites/tools/games/codenames/elm-srcs.nix | 77 - .../websites/tools/games/codenames/frontend.nix | 22 - .../websites/tools/games/codenames/greenapid.nix | 18 - .../websites/tools/games/codenames/greenapid.patch | 39 - .../tools/games/codenames/node-packages.nix | 7621 ---------------- .../websites/tools/games/codenames/registry.dat | Bin 105421 -> 0 bytes .../websites/tools/games/codenames/shell.nix | 50 - .../tools/games/codenames/wordlists/french.txt | 694 -- .../tools/games/terraforming-mars/default.nix | 48 - .../games/terraforming-mars/node-packages.nix | 4353 --------- .../games/terraforming-mars/terraforming-mars.nix | 36 - modules/private/websites/tools/git/default.nix | 49 - modules/private/websites/tools/git/gitweb.nix | 119 - modules/private/websites/tools/git/mantisbt.nix | 91 - modules/private/websites/tools/im/default.nix | 42 - .../private/websites/tools/im/www/converse.html | 57 - modules/private/websites/tools/im/www/index.html | 47 - modules/private/websites/tools/mail/default.nix | 79 - modules/private/websites/tools/mail/mta-sts.nix | 54 - modules/private/websites/tools/mail/rainloop.nix | 54 - .../private/websites/tools/mail/roundcubemail.nix | 118 - modules/private/websites/tools/mail/www/index.html | 74 - .../private/websites/tools/mastodon/default.nix | 136 - modules/private/websites/tools/mgoblin/default.nix | 134 - .../private/websites/tools/peertube/default.nix | 94 - .../private/websites/tools/performance/default.nix | 88 - modules/private/websites/tools/stats/default.nix | 51 - modules/private/websites/tools/tools/adminer.nix | 46 - .../private/websites/tools/tools/csp_reports.nix | 11 - modules/private/websites/tools/tools/default.nix | 429 - .../private/websites/tools/tools/dmarc_reports.nix | 59 - .../websites/tools/tools/dmarc_reports/api.php | 122 - .../websites/tools/tools/dmarc_reports/app.js | 103 - .../websites/tools/tools/dmarc_reports/default.css | 130 - .../websites/tools/tools/dmarc_reports/index.html | 128 - modules/private/websites/tools/tools/dokuwiki.nix | 56 - modules/private/websites/tools/tools/grocy.nix | 48 - modules/private/websites/tools/tools/kanboard.nix | 80 - modules/private/websites/tools/tools/landing.nix | 29 - .../websites/tools/tools/landing/ldap_password.php | 140 - .../websites/tools/tools/landing/ldap_ssh_keys.php | 348 - .../private/websites/tools/tools/landing/myip.php | 1 - .../websites/tools/tools/landing/node-packages.nix | 130 - .../tools/tools/landing/report_csp_violation.php | 22 - .../websites/tools/tools/landing/yarn-packages.nix | 9357 -------------------- modules/private/websites/tools/tools/ldap.nix | 69 - modules/private/websites/tools/tools/phpbb.nix | 55 - modules/private/websites/tools/tools/rompr.nix | 72 - modules/private/websites/tools/tools/shaarli.nix | 66 - modules/private/websites/tools/tools/ttrss.nix | 129 - modules/private/websites/tools/tools/wallabag.nix | 142 - modules/private/websites/tools/tools/webhooks.nix | 17 - modules/private/websites/tools/tools/ympd.nix | 40 - modules/private/websites/tools/tools/yourls.nix | 86 - modules/private/websites/tools/vpn/default.nix | 13 - modules/private/websites/tools/vpn/www/index.html | 91 - modules/private/websites/tools/vpn/www/style.css | 61 - modules/webapps/diaspora.nix | 173 - modules/webapps/etherpad-lite.nix | 162 - modules/webapps/mastodon.nix | 265 - modules/webapps/mediagoblin.nix | 231 - modules/webapps/webstats/default.nix | 80 - modules/webapps/webstats/goaccess.conf | 100 - modules/websites/default.nix | 281 - modules/websites/httpd-service-builder.nix | 735 -- modules/websites/httpd-service-builder.patch | 150 - modules/websites/nosslVhost/index.html | 11 - modules/websites/php-application.nix | 224 - modules/zrepl.nix | 45 - 306 files changed, 75788 deletions(-) delete mode 100644 modules/default.nix delete mode 100644 modules/duply_backup/default.nix delete mode 100644 modules/naemon/default.nix delete mode 100644 modules/naemon/naemon.cfg delete mode 100644 modules/private/buildbot/common/build_helpers.py delete mode 100644 modules/private/buildbot/common/libvirt.py delete mode 100644 modules/private/buildbot/common/master.cfg delete mode 100644 modules/private/buildbot/default.nix delete mode 100644 modules/private/buildbot/projects/caldance/__init__.py delete mode 100644 modules/private/buildbot/projects/cryptoportfolio/__init__.py delete mode 100644 modules/private/buildbot/projects/denise/__init__.py delete mode 100644 modules/private/buildbot/projects/immaeEu/__init__.py delete mode 100755 modules/private/buildbot/projects/immaeEu/scripts/lacells_download delete mode 100644 modules/private/buildbot/projects/test/__init__.py delete mode 100644 modules/private/certificates.nix delete mode 100644 modules/private/databases/default.nix delete mode 100644 modules/private/databases/mariadb.nix delete mode 100644 modules/private/databases/mariadb_replication.nix delete mode 100644 modules/private/databases/openldap/default.nix delete mode 100644 modules/private/databases/openldap/eldiron_schemas.nix delete mode 100644 modules/private/databases/openldap/immae.schema delete mode 100644 modules/private/databases/openldap_replication.nix delete mode 100644 modules/private/databases/postgresql.nix delete mode 100644 modules/private/databases/postgresql_replication.nix delete mode 100644 modules/private/databases/redis.nix delete mode 100644 modules/private/databases/redis_replication.nix delete mode 100644 modules/private/databases/utils.nix delete mode 100644 modules/private/default.nix delete mode 100644 modules/private/dns.nix delete mode 100644 modules/private/ejabberd/default.nix delete mode 100644 modules/private/ejabberd/ejabberd.yml delete mode 100644 modules/private/environment.nix delete mode 100644 modules/private/ftp.nix delete mode 100755 modules/private/ftp_sync.sh delete mode 100644 modules/private/gemini/default.nix delete mode 100644 modules/private/gemini/public/index.gmi delete mode 100644 modules/private/gitolite/default.nix delete mode 100755 modules/private/gitolite/gitolite_ldap_groups.sh delete mode 100644 modules/private/gitolite/ldap_gitolite.sh delete mode 100644 modules/private/irc.nix delete mode 100644 modules/private/loginctl-linger.nix delete mode 100644 modules/private/mail/default.nix delete mode 100644 modules/private/mail/dovecot.nix delete mode 100755 modules/private/mail/filter-rewrite-from.py delete mode 100644 modules/private/mail/milters.nix delete mode 100644 modules/private/mail/opensmtpd.nix delete mode 100644 modules/private/mail/postfix.nix delete mode 100644 modules/private/mail/relay.nix delete mode 100644 modules/private/mail/rspamd.nix delete mode 100755 modules/private/mail/scan_reported_mails delete mode 100755 modules/private/mail/sieve_bin/imapsieve_copy delete mode 100644 modules/private/mail/sieve_scripts/backup.sieve delete mode 100644 modules/private/mail/sieve_scripts/report_ham.sieve delete mode 100644 modules/private/mail/sieve_scripts/report_spam.sieve delete mode 100644 modules/private/mail/sympa.nix delete mode 100755 modules/private/mail/verify_from.py delete mode 100644 modules/private/monitoring/default.nix delete mode 100644 modules/private/monitoring/myplugins.nix delete mode 100644 modules/private/monitoring/nagios-cli.cfg delete mode 100644 modules/private/monitoring/objects_backup-2.nix delete mode 100644 modules/private/monitoring/objects_common.nix delete mode 100644 modules/private/monitoring/objects_dilion.nix delete mode 100644 modules/private/monitoring/objects_eban.nix delete mode 100644 modules/private/monitoring/objects_eldiron.nix delete mode 100644 modules/private/monitoring/objects_master.nix delete mode 100644 modules/private/monitoring/objects_monitoring-1.nix delete mode 100644 modules/private/monitoring/objects_phare.nix delete mode 100644 modules/private/monitoring/objects_quatresaisons.nix delete mode 100644 modules/private/monitoring/objects_tiboqorl-fr.nix delete mode 100644 modules/private/monitoring/objects_ulminfo-fr.nix delete mode 100755 modules/private/monitoring/plugins/check_backup_age delete mode 100755 modules/private/monitoring/plugins/check_bandwidth delete mode 100755 modules/private/monitoring/plugins/check_command delete mode 100755 modules/private/monitoring/plugins/check_emails delete mode 100755 modules/private/monitoring/plugins/check_eriomem delete mode 100755 modules/private/monitoring/plugins/check_ftp_database delete mode 100755 modules/private/monitoring/plugins/check_git delete mode 100755 modules/private/monitoring/plugins/check_imap_connection delete mode 100755 modules/private/monitoring/plugins/check_last_file_date delete mode 100755 modules/private/monitoring/plugins/check_mem.sh delete mode 100755 modules/private/monitoring/plugins/check_mysql_replication delete mode 100755 modules/private/monitoring/plugins/check_openldap_replication delete mode 100755 modules/private/monitoring/plugins/check_ovh_sms delete mode 100755 modules/private/monitoring/plugins/check_postgres_database_count delete mode 100755 modules/private/monitoring/plugins/check_postgres_replication delete mode 100755 modules/private/monitoring/plugins/check_redis_replication delete mode 100755 modules/private/monitoring/plugins/check_zfs_snapshot delete mode 100755 modules/private/monitoring/plugins/notify_by_email delete mode 100755 modules/private/monitoring/plugins/notify_by_slack delete mode 100755 modules/private/monitoring/plugins/notify_eban_url delete mode 100755 modules/private/monitoring/plugins/send_nrdp.sh delete mode 100755 modules/private/monitoring/send_mails delete mode 100644 modules/private/monitoring/status.nix delete mode 100755 modules/private/monitoring/status/app.py delete mode 100644 modules/private/monitoring/status_engine.nix delete mode 100644 modules/private/monitoring/to_objects.nix delete mode 100644 modules/private/mpd.nix delete mode 100644 modules/private/pub/default.nix delete mode 100644 modules/private/pub/ldap_pub.sh delete mode 100644 modules/private/pub/restrict delete mode 100644 modules/private/pub/tmux.restrict.conf delete mode 100644 modules/private/ssh/default.nix delete mode 100755 modules/private/ssh/ldap_authorized_keys.sh delete mode 100644 modules/private/ssh/ldap_regular.sh delete mode 100644 modules/private/system.nix delete mode 100644 modules/private/system/backup-2.nix delete mode 100644 modules/private/system/dilion.nix delete mode 100644 modules/private/system/dilion/vms.nix delete mode 100644 modules/private/system/dilion/vms/base_configuration.nix delete mode 100644 modules/private/system/dilion/vms/base_image.nix delete mode 100644 modules/private/system/dilion/vms/buildbot_configuration.nix delete mode 100644 modules/private/system/eldiron.nix delete mode 100644 modules/private/system/monitoring-1.nix delete mode 100644 modules/private/system/quatresaisons.nix delete mode 100644 modules/private/system/quatresaisons/databases.nix delete mode 100644 modules/private/system/quatresaisons/landing.yml delete mode 100644 modules/private/system/quatresaisons/landing_4c.yml delete mode 100644 modules/private/system/quatresaisons/nextcloud.nix delete mode 100644 modules/private/tasks/default.nix delete mode 100644 modules/private/tasks/www/index.php delete mode 100644 modules/private/vpn/default.nix delete mode 100755 modules/private/vpn/tinc/host-down delete mode 100755 modules/private/vpn/tinc/host-up delete mode 100755 modules/private/vpn/tinc/tinc-down delete mode 100755 modules/private/vpn/tinc/tinc-up delete mode 100644 modules/private/vpn/tinc/tinc.conf delete mode 100644 modules/private/websites/_www/googleb6d69446ff4ca3e5.html delete mode 100644 modules/private/websites/_www/index.htm delete mode 100644 modules/private/websites/_www/maintenance_immae.html delete mode 100644 modules/private/websites/_www/nossl.html delete mode 100644 modules/private/websites/bakeer/cloud.nix delete mode 100644 modules/private/websites/capitaines/discourse_static/discourse.png delete mode 100644 modules/private/websites/capitaines/discourse_static/index.html delete mode 100644 modules/private/websites/capitaines/landing_pages.nix delete mode 100644 modules/private/websites/capitaines/mastodon_static/index.html delete mode 100644 modules/private/websites/capitaines/mastodon_static/oops.png delete mode 100644 modules/private/websites/chloe/app/default.nix delete mode 100644 modules/private/websites/chloe/config/chmod.php delete mode 100644 modules/private/websites/chloe/config/connect.php delete mode 100644 modules/private/websites/chloe/config/ldap.php delete mode 100644 modules/private/websites/chloe/integration.nix delete mode 100644 modules/private/websites/chloe/production.nix delete mode 100644 modules/private/websites/cip-ca/sympa.nix delete mode 100644 modules/private/websites/commons/adminer.nix delete mode 100644 modules/private/websites/connexionswing/app/default.nix delete mode 100644 modules/private/websites/connexionswing/app/php-packages.nix delete mode 100644 modules/private/websites/connexionswing/integration.nix delete mode 100644 modules/private/websites/connexionswing/production.nix delete mode 100644 modules/private/websites/default.nix delete mode 100644 modules/private/websites/denise/aventuriers.nix delete mode 100644 modules/private/websites/denise/bingo.nix delete mode 100644 modules/private/websites/denise/denisejerome.nix delete mode 100644 modules/private/websites/denise/evariste.nix delete mode 100644 modules/private/websites/denise/oms.nix delete mode 100644 modules/private/websites/denise/production.nix delete mode 100644 modules/private/websites/emilia/atelierfringant.nix delete mode 100644 modules/private/websites/emilia/moodle.nix delete mode 100644 modules/private/websites/emilia/moodle/pause.html delete mode 100644 modules/private/websites/florian/app.nix delete mode 100644 modules/private/websites/florian/app/default.nix delete mode 100644 modules/private/websites/florian/app/php-packages.nix delete mode 100644 modules/private/websites/florian/integration.nix delete mode 100644 modules/private/websites/florian/production.nix delete mode 100644 modules/private/websites/immae/chatons/immae-eu.properties delete mode 100644 modules/private/websites/immae/chatons/service-etherpad.properties delete mode 100644 modules/private/websites/immae/eurl/certificates/2021-certificate.crt delete mode 100644 modules/private/websites/immae/matrix/client delete mode 100644 modules/private/websites/immae/matrix/server delete mode 100644 modules/private/websites/immae/production.nix delete mode 100644 modules/private/websites/immae/release.nix delete mode 100644 modules/private/websites/immae/temp.nix delete mode 100644 modules/private/websites/isabelle/aten_app/default.nix delete mode 100644 modules/private/websites/isabelle/aten_app/php-packages.nix delete mode 100644 modules/private/websites/isabelle/aten_app/yarn-packages.nix delete mode 100644 modules/private/websites/isabelle/aten_integration.nix delete mode 100644 modules/private/websites/isabelle/aten_production.nix delete mode 100644 modules/private/websites/isabelle/config/chmod.php delete mode 100644 modules/private/websites/isabelle/config/connect.php delete mode 100644 modules/private/websites/isabelle/config/ldap.php delete mode 100644 modules/private/websites/isabelle/iridologie.nix delete mode 100644 modules/private/websites/isabelle/iridologie_app/default.nix delete mode 100644 modules/private/websites/jerome/naturaloutil.nix delete mode 100644 modules/private/websites/leila/production.nix delete mode 100644 modules/private/websites/ludivine/app/default.nix delete mode 100644 modules/private/websites/ludivine/app/php-packages.nix delete mode 100644 modules/private/websites/ludivine/integration.nix delete mode 100644 modules/private/websites/ludivine/production.nix delete mode 100644 modules/private/websites/moomin.txt delete mode 100644 modules/private/websites/nassime/production.nix delete mode 100644 modules/private/websites/nath/villon.nix delete mode 100644 modules/private/websites/papa/maison_bbc.nix delete mode 100644 modules/private/websites/papa/maison_bbc_static/data.json delete mode 100644 modules/private/websites/papa/maison_bbc_static/favicon.ico delete mode 100644 modules/private/websites/papa/maison_bbc_static/index.html delete mode 100644 modules/private/websites/papa/maison_bbc_static/lamaison.png delete mode 100644 modules/private/websites/papa/surveillance.nix delete mode 100644 modules/private/websites/patrick_fodella/altermondia.nix delete mode 100644 modules/private/websites/patrick_fodella/ecolyeu.nix delete mode 100644 modules/private/websites/piedsjaloux/app/default.nix delete mode 100644 modules/private/websites/piedsjaloux/app/php-packages.nix delete mode 100644 modules/private/websites/piedsjaloux/integration.nix delete mode 100644 modules/private/websites/piedsjaloux/production.nix delete mode 100644 modules/private/websites/ressourcerie_banon/cloud.nix delete mode 100644 modules/private/websites/ressourcerie_banon/cryptpad.nix delete mode 100644 modules/private/websites/ressourcerie_banon/production.nix delete mode 100644 modules/private/websites/richie/production.nix delete mode 100644 modules/private/websites/syden/peertube.nix delete mode 100644 modules/private/websites/telio_tortay/production.nix delete mode 100644 modules/private/websites/tools/assets/default.nix delete mode 100644 modules/private/websites/tools/assets/static/favicon.png delete mode 100644 modules/private/websites/tools/assets/static/logger.png delete mode 100644 modules/private/websites/tools/assets/static/logger.txt delete mode 100644 modules/private/websites/tools/assets/static/logo.jpg delete mode 100644 modules/private/websites/tools/assets/static/logo.txt delete mode 100644 modules/private/websites/tools/assets/static/logo_big.jpg delete mode 100644 modules/private/websites/tools/assets/static/logo_big.txt delete mode 100644 modules/private/websites/tools/assets/static/logo_center.jpg delete mode 100644 modules/private/websites/tools/assets/static/logo_center.txt delete mode 100644 modules/private/websites/tools/assets/static/monitoring.png delete mode 100644 modules/private/websites/tools/assets/static/monitoring.txt delete mode 100644 modules/private/websites/tools/assets/static/photos/ct.jpg delete mode 100644 modules/private/websites/tools/assets/static/photos/fretlink.jpg delete mode 100644 modules/private/websites/tools/assets/static/photos/raton.jpg delete mode 100644 modules/private/websites/tools/cloud/default.nix delete mode 100644 modules/private/websites/tools/cloud/farm.nix delete mode 100644 modules/private/websites/tools/commento/default.nix delete mode 100644 modules/private/websites/tools/cryptpad/default.nix delete mode 100644 modules/private/websites/tools/cryptpad/farm.nix delete mode 100644 modules/private/websites/tools/dav/davical.nix delete mode 100644 modules/private/websites/tools/dav/default.nix delete mode 100644 modules/private/websites/tools/dav/www/index.html delete mode 100644 modules/private/websites/tools/db/default.nix delete mode 100644 modules/private/websites/tools/diaspora/default.nix delete mode 100644 modules/private/websites/tools/ether/default.nix delete mode 100644 modules/private/websites/tools/games/codenames/codenames.patch delete mode 100644 modules/private/websites/tools/games/codenames/default.nix delete mode 100644 modules/private/websites/tools/games/codenames/deps.nix delete mode 100644 modules/private/websites/tools/games/codenames/elm-srcs.nix delete mode 100644 modules/private/websites/tools/games/codenames/frontend.nix delete mode 100644 modules/private/websites/tools/games/codenames/greenapid.nix delete mode 100644 modules/private/websites/tools/games/codenames/greenapid.patch delete mode 100644 modules/private/websites/tools/games/codenames/node-packages.nix delete mode 100644 modules/private/websites/tools/games/codenames/registry.dat delete mode 100644 modules/private/websites/tools/games/codenames/shell.nix delete mode 100644 modules/private/websites/tools/games/codenames/wordlists/french.txt delete mode 100644 modules/private/websites/tools/games/terraforming-mars/default.nix delete mode 100644 modules/private/websites/tools/games/terraforming-mars/node-packages.nix delete mode 100644 modules/private/websites/tools/games/terraforming-mars/terraforming-mars.nix delete mode 100644 modules/private/websites/tools/git/default.nix delete mode 100644 modules/private/websites/tools/git/gitweb.nix delete mode 100644 modules/private/websites/tools/git/mantisbt.nix delete mode 100644 modules/private/websites/tools/im/default.nix delete mode 100644 modules/private/websites/tools/im/www/converse.html delete mode 100644 modules/private/websites/tools/im/www/index.html delete mode 100644 modules/private/websites/tools/mail/default.nix delete mode 100644 modules/private/websites/tools/mail/mta-sts.nix delete mode 100644 modules/private/websites/tools/mail/rainloop.nix delete mode 100644 modules/private/websites/tools/mail/roundcubemail.nix delete mode 100644 modules/private/websites/tools/mail/www/index.html delete mode 100644 modules/private/websites/tools/mastodon/default.nix delete mode 100644 modules/private/websites/tools/mgoblin/default.nix delete mode 100644 modules/private/websites/tools/peertube/default.nix delete mode 100644 modules/private/websites/tools/performance/default.nix delete mode 100644 modules/private/websites/tools/stats/default.nix delete mode 100644 modules/private/websites/tools/tools/adminer.nix delete mode 100644 modules/private/websites/tools/tools/csp_reports.nix delete mode 100644 modules/private/websites/tools/tools/default.nix delete mode 100644 modules/private/websites/tools/tools/dmarc_reports.nix delete mode 100644 modules/private/websites/tools/tools/dmarc_reports/api.php delete mode 100644 modules/private/websites/tools/tools/dmarc_reports/app.js delete mode 100644 modules/private/websites/tools/tools/dmarc_reports/default.css delete mode 100644 modules/private/websites/tools/tools/dmarc_reports/index.html delete mode 100644 modules/private/websites/tools/tools/dokuwiki.nix delete mode 100644 modules/private/websites/tools/tools/grocy.nix delete mode 100644 modules/private/websites/tools/tools/kanboard.nix delete mode 100644 modules/private/websites/tools/tools/landing.nix delete mode 100644 modules/private/websites/tools/tools/landing/ldap_password.php delete mode 100644 modules/private/websites/tools/tools/landing/ldap_ssh_keys.php delete mode 100644 modules/private/websites/tools/tools/landing/myip.php delete mode 100644 modules/private/websites/tools/tools/landing/node-packages.nix delete mode 100644 modules/private/websites/tools/tools/landing/report_csp_violation.php delete mode 100644 modules/private/websites/tools/tools/landing/yarn-packages.nix delete mode 100644 modules/private/websites/tools/tools/ldap.nix delete mode 100644 modules/private/websites/tools/tools/phpbb.nix delete mode 100644 modules/private/websites/tools/tools/rompr.nix delete mode 100644 modules/private/websites/tools/tools/shaarli.nix delete mode 100644 modules/private/websites/tools/tools/ttrss.nix delete mode 100644 modules/private/websites/tools/tools/wallabag.nix delete mode 100644 modules/private/websites/tools/tools/webhooks.nix delete mode 100644 modules/private/websites/tools/tools/ympd.nix delete mode 100644 modules/private/websites/tools/tools/yourls.nix delete mode 100644 modules/private/websites/tools/vpn/default.nix delete mode 100644 modules/private/websites/tools/vpn/www/index.html delete mode 100644 modules/private/websites/tools/vpn/www/style.css delete mode 100644 modules/webapps/diaspora.nix delete mode 100644 modules/webapps/etherpad-lite.nix delete mode 100644 modules/webapps/mastodon.nix delete mode 100644 modules/webapps/mediagoblin.nix delete mode 100644 modules/webapps/webstats/default.nix delete mode 100644 modules/webapps/webstats/goaccess.conf delete mode 100644 modules/websites/default.nix delete mode 100644 modules/websites/httpd-service-builder.nix delete mode 100644 modules/websites/httpd-service-builder.patch delete mode 100644 modules/websites/nosslVhost/index.html delete mode 100644 modules/websites/php-application.nix delete mode 100644 modules/zrepl.nix (limited to 'modules') diff --git a/modules/default.nix b/modules/default.nix deleted file mode 100644 index 2f06eb1..0000000 --- a/modules/default.nix +++ /dev/null @@ -1,29 +0,0 @@ -let - flakeCompat = import ../lib/flake-compat.nix; - flakeLib = (flakeCompat ../flakes/lib).lib; -in -{ - myids = (flakeCompat ../flakes/myuids).nixosModule; - secrets = flakeLib.withNarKeyCompat flakeCompat ../flakes/secrets "nixosModule"; - filesWatcher = flakeLib.withNarKeyCompat flakeCompat ../flakes/files-watcher "nixosModule"; - - webstats = ./webapps/webstats; - diaspora = ./webapps/diaspora.nix; - etherpad-lite = ./webapps/etherpad-lite.nix; - mastodon = ./webapps/mastodon.nix; - mediagoblin = ./webapps/mediagoblin.nix; - peertube = (flakeCompat ../flakes/peertube).nixosModule; - fiche = flakeLib.withNarKeyCompat flakeCompat ../flakes/fiche "nixosModule"; - paste = flakeLib.withNarKeyCompat flakeCompat ../flakes/paste "nixosModule"; - - opendmarc = flakeLib.withNarKeyCompat flakeCompat ../flakes/opendmarc "nixosModule"; - openarc = flakeLib.withNarKeyCompat flakeCompat ../flakes/openarc "nixosModule"; - - duplyBackup = ./duply_backup; - rsyncBackup = flakeLib.withNarKeyCompat flakeCompat ../flakes/rsync_backup "nixosModule"; - naemon = ./naemon; - - php-application = ./websites/php-application.nix; - zrepl = ./zrepl.nix; - websites = ./websites; -} // (if builtins.pathExists ./private then import ./private else {}) diff --git a/modules/duply_backup/default.nix b/modules/duply_backup/default.nix deleted file mode 100644 index 846b1d4..0000000 --- a/modules/duply_backup/default.nix +++ /dev/null @@ -1,124 +0,0 @@ -{ lib, pkgs, config, name, ... }: - -let - cfg = config.myEnv.backup; - varDir = "/var/lib/duply"; - duplyProfile = profile: remote: prefix: '' - GPG_PW="${cfg.password}" - TARGET="${cfg.remotes.${remote}.remote profile.bucket}${prefix}" - export AWS_ACCESS_KEY_ID="${cfg.remotes.${remote}.accessKeyId}" - export AWS_SECRET_ACCESS_KEY="${cfg.remotes.${remote}.secretAccessKey}" - SOURCE="${profile.rootDir}" - FILENAME=".duplicity-ignore" - DUPL_PARAMS="$DUPL_PARAMS --exclude-if-present '$FILENAME'" - VERBOSITY=4 - ARCH_DIR="${varDir}/caches" - - # Do a full backup after 1 month - MAX_FULLBKP_AGE=1M - DUPL_PARAMS="$DUPL_PARAMS --allow-source-mismatch --exclude-other-filesystems --full-if-older-than $MAX_FULLBKP_AGE " - # Backups older than 2months are deleted - MAX_AGE=2M - # Keep 2 full backups - MAX_FULL_BACKUPS=2 - MAX_FULLS_WITH_INCRS=2 - ''; - action = "bkp_purge_purgeFull_purgeIncr"; - varName = k: remoteName: - if remoteName == "eriomem" then k else remoteName + "_" + k; -in -{ - options = { - services.duplyBackup.enable = lib.mkOption { - type = lib.types.bool; - default = false; - description = '' - Whether to enable remote backups. - ''; - }; - services.duplyBackup.profiles = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule { - options = { - rootDir = lib.mkOption { - type = lib.types.path; - description = '' - Path to backup - ''; - }; - bucket = lib.mkOption { - type = lib.types.str; - default = "immae-${name}"; - description = '' - Bucket to use - ''; - }; - remotes = lib.mkOption { - type = lib.types.listOf lib.types.str; - default = ["eriomem"]; - description = '' - Remotes to use for backup - ''; - }; - excludeFile = lib.mkOption { - type = lib.types.lines; - default = ""; - description = '' - Content to put in exclude file - ''; - }; - }; - }); - }; - }; - - config = lib.mkIf config.services.duplyBackup.enable { - system.activationScripts.backup = '' - install -m 0700 -o root -g root -d ${varDir} ${varDir}/caches - ''; - secrets.keys = lib.listToAttrs (lib.flatten (lib.mapAttrsToList (k: v: - map (remote: [ - (lib.nameValuePair "backup/${varName k remote}/conf" { - permissions = "0400"; - text = duplyProfile v remote "${k}/"; - }) - (lib.nameValuePair "backup/${varName k remote}/exclude" { - permissions = "0400"; - text = v.excludeFile; - }) - (lib.nameValuePair "backup/${varName k remote}" { - permissions = "0500"; - isDir = true; - }) - ]) v.remotes) config.services.duplyBackup.profiles)); - - services.cron = { - enable = true; - systemCronJobs = let - backups = pkgs.writeScript "backups" '' - #!${pkgs.stdenv.shell} - - ${builtins.concatStringsSep "\n" (lib.flatten (lib.mapAttrsToList (k: v: - map (remote: [ - '' - touch ${varDir}/${varName k remote}.log - ${pkgs.duply}/bin/duply ${config.secrets.fullPaths."backup/${varName k remote}"}/ ${action} --force >> ${varDir}/${varName k remote}.log - [[ $? = 0 ]] || echo -e "Error when doing backup for ${varName k remote}, see above\n---------------------------------------" >&2 - '' - ]) v.remotes - ) config.services.duplyBackup.profiles))} - ''; - in - [ - "0 2 * * * root ${backups}" - ]; - - }; - - security.pki.certificateFiles = [ - (pkgs.fetchurl { - url = "http://downloads.e.eriomem.net/eriomemca.pem"; - sha256 = "1ixx4c6j3m26j8dp9a3dkvxc80v1nr5aqgmawwgs06bskasqkvvh"; - }) - ]; - }; -} diff --git a/modules/naemon/default.nix b/modules/naemon/default.nix deleted file mode 100644 index 60a75b3..0000000 --- a/modules/naemon/default.nix +++ /dev/null @@ -1,183 +0,0 @@ -{ config, lib, pkgs, ... }: - -with lib; - -let - cfg = config.services.naemon; - - naemonConfig = pkgs.runCommand "naemon-config" { - objectsFile = pkgs.writeText "naemon_objects.cfg" cfg.objectDefs; - resourceFile = config.secrets.fullPaths."naemon/resources.cfg"; - extraConfig = pkgs.writeText "extra.cfg" cfg.extraConfig; - inherit (cfg) logDir varDir runDir cacheDir; - } '' - substituteAll ${./naemon.cfg} $out - cat $extraConfig >> $out - ''; -in -{ - options = { - services.naemon = { - enable = mkOption { - default = false; - description = " - Whether to use Naemon to monitor - your system or network. - "; - }; - - objectDefs = mkOption { - type = types.lines; - default = ""; - description = " - A list of Naemon object configuration that must define - the hosts, host groups, services and contacts for the - network that you want Naemon to monitor. - "; - }; - - extraResource = mkOption { - type = types.lines; - default = ""; - example = '' - # Sets $USER2$ to be the path to event handlers - #$USER2$=/usr/lib/monitoring-plugins/eventhandlers - - # Store some usernames and passwords (hidden from the CGIs) - #$USER3$=someuser - #$USER4$=somepassword - ''; - description = " - Lines to add to the resource file - # You can define $USERx$ macros in this file, which can in turn be used - # in command definitions in your host config file(s). $USERx$ macros are - # useful for storing sensitive information such as usernames, passwords, - # etc. They are also handy for specifying the path to plugins and - # event handlers - if you decide to move the plugins or event handlers to - # a different directory in the future, you can just update one or two - # $USERx$ macros, instead of modifying a lot of command definitions. - # - # Naemon supports up to 256 $USERx$ macros ($USER1$ through $USER256$) - # - # Resource files may also be used to store configuration directives for - # external data sources like MySQL... - # - "; - }; - - extraConfig = mkOption { - type = types.lines; - default = ""; - description = " - Extra config to append to main config - "; - }; - - user = mkOption { - type = types.str; - default = "naemon"; - description = "User for naemon"; - }; - - group = mkOption { - type = types.str; - default = "naemon"; - description = "Group for naemon"; - }; - - varDir = mkOption { - type = types.path; - default = "/var/lib/naemon"; - description = "The directory where naemon stores its data"; - }; - - cacheDir = mkOption { - type = types.path; - default = "/var/cache/naemon"; - description = "The directory where naemon stores its cache"; - }; - - runDir = mkOption { - type = types.path; - default = "/run/naemon"; - description = "The directory where naemon stores its runtime files"; - }; - - logDir = mkOption { - type = types.path; - default = "/var/log/naemon"; - description = "The directory where naemon stores its log files"; - }; - - package = mkOption { - type = types.package; - default = pkgs.naemon.override { - inherit (cfg) varDir cacheDir logDir runDir user group; - }; - description = '' - Naemon package to use - ''; - }; - }; - }; - - - config = mkIf cfg.enable { - secrets.keys = { - "naemon/resources.cfg" = { - user = cfg.user; - group = cfg.group; - permissions = "0400"; - text = '' - $USER1$=${pkgs.monitoring-plugins}/libexec - ${cfg.extraResource} - ''; - }; - }; - - users.users = optionalAttrs (cfg.user == "naemon") { - naemon = { - group = cfg.group; - uid = config.ids.uids.nagios; - extraGroups = [ "keys" ]; - }; - }; - users.groups = optionalAttrs (cfg.user == "naemon") { - naemon = { - gid = config.ids.gids.nagios; - }; - }; - - services.filesWatcher.naemon = { - paths = [ config.secrets.fullPaths."naemon/resources.cfg" ]; - }; - systemd.services.naemon = { - description = "Naemon monitoring daemon"; - path = [ cfg.package pkgs.monitoring-plugins ]; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - - preStart = "${cfg.package}/bin/naemon -vp ${naemonConfig}"; - script = "${cfg.package}/bin/naemon --daemon ${naemonConfig}"; - reload = "${pkgs.utillinux}/bin/kill -HUP $MAINPID"; - serviceConfig = { - User = cfg.user; - Restart = "always"; - RestartSec = 2; - StandardOutput = "journal"; - StandardError = "inherit"; - PIDFile = "${cfg.runDir}/naemon.pid"; - LogsDirectory = assert lib.strings.hasPrefix "/var/log/" cfg.logDir; - lib.strings.removePrefix "/var/log/" cfg.logDir; - CacheDirectory = assert lib.strings.hasPrefix "/var/cache/" cfg.cacheDir; - let unprefixed = lib.strings.removePrefix "/var/cache/" cfg.cacheDir; - in [ unprefixed "${unprefixed}/checkresults" ]; - StateDirectory = assert lib.strings.hasPrefix "/var/lib/" cfg.varDir; - lib.strings.removePrefix "/var/lib/" cfg.varDir; - RuntimeDirectory = assert lib.strings.hasPrefix "/run/" cfg.runDir; - lib.strings.removePrefix "/run/" cfg.runDir; - }; - }; - }; -} diff --git a/modules/naemon/naemon.cfg b/modules/naemon/naemon.cfg deleted file mode 100644 index 792e03b..0000000 --- a/modules/naemon/naemon.cfg +++ /dev/null @@ -1,1059 +0,0 @@ -############################################################################## -# -# naemon.cfg - Sample Main Config File for Naemon 1.0.10.gc2a87305.dirty.20190703.source -# -# Read the documentation for more information on this configuration -# file. I've provided some comments here, but things may not be so -# clear without further explanation. -# -# -############################################################################## - - -# LOG FILE -# This is the main log file where service and host events are logged -# for historical purposes. This should be the first option specified -# in the config file!!! - -log_file=@logDir@/naemon.log - - - -# OBJECT CONFIGURATION FILE(S) -# These are the object configuration files in which you define hosts, -# host groups, contacts, contact groups, services, etc. -# You can split your object definitions across several config files -# if you wish (as shown below), or keep them all in a single config file. - -# You can specify individual object config files as shown below: -#cfg_file=/etc/naemon/objects/commands.cfg -#cfg_file=/etc/naemon/objects/contacts.cfg -#cfg_file=/etc/naemon/objects/timeperiods.cfg -#cfg_file=/etc/naemon/objects/templates.cfg -cfg_file=@objectsFile@ - - -# You can also tell naemon to process all config files (with a .cfg -# extension) in a particular directory by using the cfg_dir -# directive as shown below: -#cfg_dir=/etc/naemon/conf.d - - - - -# OBJECT CACHE FILE -# This option determines where object definitions are cached when -# naemon starts/restarts. The CGIs read object definitions from -# this cache file (rather than looking at the object config files -# directly) in order to prevent inconsistencies that can occur -# when the config files are modified after naemon starts. - -object_cache_file=@varDir@/objects.cache - - - -# PRE-CACHED OBJECT FILE -# This options determines the location of the precached object file. -# If you run naemon with the -p command line option, it will preprocess -# your object configuration file(s) and write the cached config to this -# file. You can then start naemon with the -u option to have it read -# object definitions from this precached file, rather than the standard -# object configuration files (see the cfg_file and cfg_dir options above). -# Using a precached object file can speed up the time needed to (re)start -# the naemon process if you've got a large and/or complex configuration. -# Read the documentation section on optimizing naemon to find our more -# about how this feature works. - -precached_object_file=@varDir@/objects.precache - - - -# RESOURCE FILE -# This is an optional resource file that contains $USERx$ macro -# definitions. Multiple resource files can be specified by using -# multiple resource_file definitions. The CGIs will not attempt to -# read the contents of resource files, so information that is -# considered to be sensitive (usernames, passwords, etc) can be -# defined as macros in this file and restrictive permissions (600) -# can be placed on this file. - -resource_file=@resourceFile@ - - - -# STATUS FILE -# This is where the current status of all monitored services and -# hosts is stored. Its contents are read and processed by the CGIs. -# The contents of the status file are deleted every time naemon -# restarts. - -status_file=@varDir@/status.dat - - - -# STATUS FILE UPDATE INTERVAL -# This option determines the frequency (in seconds) that -# naemon will periodically dump program, host, and -# service status data. Set it to 0 to disable updates. - -status_update_interval=10 - - - -# EXTERNAL COMMAND OPTION -# This option allows you to specify whether or not Naemon should check -# for external commands (in the command file defined below). By default -# Naemon will *not* check for external commands, just to be on the -# cautious side. If you want to be able to use the CGI command interface -# you will have to enable this. -# Values: 0 = disable commands, 1 = enable commands - -check_external_commands=1 - - - -# EXTERNAL COMMAND FILE -# This is the file that Naemon checks for external command requests. -# It is also where the command CGI will write commands that are submitted -# by users, so it must be writeable by the user that the web server -# is running as (usually 'nobody'). Permissions should be set at the -# directory level instead of on the file, as the file is deleted every -# time its contents are processed. - -command_file=@runDir@/naemon.cmd - - - -# QUERY HANDLER INTERFACE -# This is the socket that is created for the Query Handler interface - -query_socket=@runDir@/naemon.qh - - - -# LOCK FILE -# This is the lockfile that Naemon will use to store its PID number -# in when it is running in daemon mode. - -lock_file=@runDir@/naemon.pid - - - -# TEMP FILE -# This is a temporary file that is used as scratch space when Naemon -# updates the status log, cleans the comment file, etc. This file -# is created, used, and deleted throughout the time that Naemon is -# running. - -temp_file=@cacheDir@/naemon.tmp - - - -# TEMP PATH -# This is path where Naemon can create temp files for service and -# host check results, etc. - -temp_path=@cacheDir@ - - - -# EVENT BROKER OPTIONS -# Controls what (if any) data gets sent to the event broker. -# Values: 0 = Broker nothing -# -1 = Broker everything -# = See documentation - -event_broker_options=-1 - - - -# EVENT BROKER MODULE(S) -# This directive is used to specify an event broker module that should -# be loaded by Naemon at startup. Use multiple directives if you want -# to load more than one module. Arguments that should be passed to -# the module at startup are seperated from the module path by a space. -# -# Example: -# -# broker_module= [moduleargs] - -#broker_module=/usr/lib/naemon/naemon-livestatus/livestatus.so @cacheDir@/live -#broker_module=/somewhere/module1.o -#broker_module=/somewhere/module2.o arg1 arg2=3 debug=0 - -# In order to provide drop-in support for new modules, you can also make use of -# the include_dir directive. The include_dir directive causes Naemon to parse -# any configuration (not just object configuration, as with cfg_dir) as if the -# contents of the files in the pointed-to directory was included on this line. -# The path to the directory is relative to the path of the main naemon.cfg -# file. -#include_dir=module-conf.d - -# LOG ARCHIVE PATH -# This is the directory where archived (rotated) log files are placed by the -# logrotate daemon. It is used by out of core add-ons to discover the logfiles. - -log_archive_path=@logDir@/archives - - - -# LOGGING OPTIONS -# If you want messages logged to the syslog facility, as well as the -# Naemon log file set this option to 1. If not, set it to 0. - -use_syslog=0 - -# NOTIFICATION LOGGING OPTION -# If you don't want notifications to be logged, set this value to 0. -# If notifications should be logged, set the value to 1. - -log_notifications=1 - -# Notification suppression reason (NSR) logging causes the reason for a -# notification suppression to be logged, when it occurs. This can potentially -# add some noise to your log file, but is highly useful when troubleshooting -# missing notifications. - -enable_notification_suppression_reason_logging=1 - - -# SERVICE RETRY LOGGING OPTION -# If you don't want service check retries to be logged, set this value -# to 0. If retries should be logged, set the value to 1. - -log_service_retries=1 - - - -# HOST RETRY LOGGING OPTION -# If you don't want host check retries to be logged, set this value to -# 0. If retries should be logged, set the value to 1. - -log_host_retries=1 - - - -# EVENT HANDLER LOGGING OPTION -# If you don't want host and service event handlers to be logged, set -# this value to 0. If event handlers should be logged, set the value -# to 1. - -log_event_handlers=1 - - - -# INITIAL STATES LOGGING OPTION -# If you want Naemon to log all initial host and service states to -# the main log file (the first time the service or host is checked) -# you can enable this option by setting this value to 1. If you -# are not using an external application that does long term state -# statistics reporting, you do not need to enable this option. In -# this case, set the value to 0. - -log_initial_states=0 - - - -# CURRENT STATES LOGGING OPTION -# If you don't want Naemon to log all current host and service states -# after log has been rotated to the main log file, you can disable this -# option by setting this value to 0. Default value is 1. - -log_current_states=1 - - - -# EXTERNAL COMMANDS LOGGING OPTION -# If you don't want Naemon to log external commands, set this value -# to 0. If external commands should be logged, set this value to 1. -# Note: This option does not include logging of passive service -# checks - see the option below for controlling whether or not -# passive checks are logged. - -log_external_commands=1 - - - -# PASSIVE CHECKS LOGGING OPTION -# If you don't want Naemon to log passive host and service checks, set -# this value to 0. If passive checks should be logged, set -# this value to 1. - -log_passive_checks=1 - - - -# GLOBAL HOST AND SERVICE EVENT HANDLERS -# These options allow you to specify a host and service event handler -# command that is to be run for every host or service state change. -# The global event handler is executed immediately prior to the event -# handler that you have optionally specified in each host or -# service definition. The command argument is the short name of a -# command definition that you define in your host configuration file. -# Read the HTML docs for more information. - -#global_host_event_handler=somecommand -#global_service_event_handler=somecommand - - - -# MAXIMUM CONCURRENT SERVICE CHECKS -# This option allows you to specify the maximum number of -# service checks that can be run in parallel at any given time. -# Specifying a value of 1 for this variable essentially prevents -# any service checks from being parallelized. A value of 0 -# will not restrict the number of concurrent checks that are -# being executed. - -max_concurrent_checks=0 - - -# CHECK RESULT PATH -# This is directory where Naemon reads check results of host and -# service checks to further process them. -# -# Note: Naemon does not require this folder internally but it still -# can be used to pass check results to Naemon. - -check_result_path=@cacheDir@/checkresults - - -# CACHED HOST CHECK HORIZON -# This option determines the maximum amount of time (in seconds) -# that the state of a previous host check is considered current. -# Cached host states (from host checks that were performed more -# recently that the timeframe specified by this value) can immensely -# improve performance in regards to the host check logic. -# Too high of a value for this option may result in inaccurate host -# states being used by Naemon, while a lower value may result in a -# performance hit for host checks. Use a value of 0 to disable host -# check caching. - -cached_host_check_horizon=15 - - - -# CACHED SERVICE CHECK HORIZON -# This option determines the maximum amount of time (in seconds) -# that the state of a previous service check is considered current. -# Cached service states (from service checks that were performed more -# recently that the timeframe specified by this value) can immensely -# improve performance in regards to predictive dependency checks. -# Use a value of 0 to disable service check caching. - -cached_service_check_horizon=15 - - - -# ENABLE PREDICTIVE HOST DEPENDENCY CHECKS -# This option determines whether or not Naemon will attempt to execute -# checks of hosts when it predicts that future dependency logic test -# may be needed. These predictive checks can help ensure that your -# host dependency logic works well. -# Values: -# 0 = Disable predictive checks -# 1 = Enable predictive checks (default) - -enable_predictive_host_dependency_checks=1 - - - -# ENABLE PREDICTIVE SERVICE DEPENDENCY CHECKS -# This option determines whether or not Naemon will attempt to execute -# checks of service when it predicts that future dependency logic test -# may be needed. These predictive checks can help ensure that your -# service dependency logic works well. -# Values: -# 0 = Disable predictive checks -# 1 = Enable predictive checks (default) - -enable_predictive_service_dependency_checks=1 - - - -# SOFT STATE DEPENDENCIES -# This option determines whether or not Naemon will use soft state -# information when checking host and service dependencies. Normally -# Naemon will only use the latest hard host or service state when -# checking dependencies. If you want it to use the latest state (regardless -# of whether its a soft or hard state type), enable this option. -# Values: -# 0 = Don't use soft state dependencies (default) -# 1 = Use soft state dependencies - -soft_state_dependencies=0 - - - -# TIME CHANGE ADJUSTMENT THRESHOLDS -# These options determine when Naemon will react to detected changes -# in system time (either forward or backwards). - -#time_change_threshold=900 - - - -# TIMEOUT VALUES -# These options control how much time Naemon will allow various -# types of commands to execute before killing them off. Options -# are available for controlling maximum time allotted for -# service checks, host checks, event handlers, notifications, the -# ocsp command, and performance data commands. All values are in -# seconds. - -service_check_timeout=60 -host_check_timeout=30 -event_handler_timeout=30 -notification_timeout=30 -ocsp_timeout=5 -perfdata_timeout=5 - - - -# RETAIN STATE INFORMATION -# This setting determines whether or not Naemon will save state -# information for services and hosts before it shuts down. Upon -# startup Naemon will reload all saved service and host state -# information before starting to monitor. This is useful for -# maintaining long-term data on state statistics, etc, but will -# slow Naemon down a bit when it (re)starts. Since its only -# a one-time penalty, I think its well worth the additional -# startup delay. - -retain_state_information=1 - - - -# STATE RETENTION FILE -# This is the file that Naemon should use to store host and -# service state information before it shuts down. The state -# information in this file is also read immediately prior to -# starting to monitor the network when Naemon is restarted. -# This file is used only if the retain_state_information -# variable is set to 1. - -state_retention_file=@varDir@/retention.dat - - - -# RETENTION DATA UPDATE INTERVAL -# This setting determines how often (in minutes) that Naemon -# will automatically save retention data during normal operation. -# If you set this value to 0, Naemon will not save retention -# data at regular interval, but it will still save retention -# data before shutting down or restarting. If you have disabled -# state retention, this option has no effect. - -retention_update_interval=60 - - - -# USE RETAINED PROGRAM STATE -# This setting determines whether or not Naemon will set -# program status variables based on the values saved in the -# retention file. If you want to use retained program status -# information, set this value to 1. If not, set this value -# to 0. - -use_retained_program_state=1 - - - -# USE RETAINED SCHEDULING INFO -# This setting determines whether or not Naemon will retain -# the scheduling info (next check time) for hosts and services -# based on the values saved in the retention file. If you -# If you want to use retained scheduling info, set this -# value to 1. If not, set this value to 0. - -use_retained_scheduling_info=1 - - -# RETAINED_SCHEDULING_RANDOMIZE_WINDOW -# If use_retained_scheduling info is enabled, this setting -# sets the window (in seconds), in which checks that were -# supposed to executed during a restart, is rescheduled. -# That is, if set to 60 seconds, then all checks that were -# missed due to a restart will be scheduled randomly to be -# executed in the first 60 seconds after a restart. -# If the retained_scheduling_randomize_window is larger than -# the objects check_interval, the check_interval is used -# instead. - -retained_scheduling_randomize_window=60 - - -# RETAINED ATTRIBUTE MASKS (ADVANCED FEATURE) -# The following variables are used to specify specific host and -# service attributes that should *not* be retained by Naemon during -# program restarts. -# -# The values of the masks are bitwise ANDs of values specified -# by the "MODATTR_" definitions found in include/common.h. -# For example, if you do not want the current enabled/disabled state -# of flap detection and event handlers for hosts to be retained, you -# would use a value of 24 for the host attribute mask... -# MODATTR_EVENT_HANDLER_ENABLED (8) + MODATTR_FLAP_DETECTION_ENABLED (16) = 24 - -# This mask determines what host attributes are not retained -retained_host_attribute_mask=0 - -# This mask determines what service attributes are not retained -retained_service_attribute_mask=0 - -# These two masks determine what process attributes are not retained. -# There are two masks, because some process attributes have host and service -# options. For example, you can disable active host checks, but leave active -# service checks enabled. -retained_process_host_attribute_mask=0 -retained_process_service_attribute_mask=0 - -# These two masks determine what contact attributes are not retained. -# There are two masks, because some contact attributes have host and -# service options. For example, you can disable host notifications for -# a contact, but leave service notifications enabled for them. -retained_contact_host_attribute_mask=0 -retained_contact_service_attribute_mask=0 - - - -# INTERVAL LENGTH -# This is the seconds per unit interval as used in the -# host/contact/service configuration files. Setting this to 60 means -# that each interval is one minute long (60 seconds). Other settings -# have not been tested much, so your mileage is likely to vary... - -interval_length=60 - - - -# AGGRESSIVE HOST CHECKING OPTION -# If you don't want to turn on aggressive host checking features, set -# this value to 0 (the default). Otherwise set this value to 1 to -# enable the aggressive check option. Read the docs for more info -# on what aggressive host check is or check out the source code in -# base/checks.c - -use_aggressive_host_checking=0 - - - -# SERVICE CHECK EXECUTION OPTION -# This determines whether or not Naemon will actively execute -# service checks when it initially starts. If this option is -# disabled, checks are not actively made, but Naemon can still -# receive and process passive check results that come in. Unless -# you're implementing redundant hosts or have a special need for -# disabling the execution of service checks, leave this enabled! -# Values: 1 = enable checks, 0 = disable checks - -execute_service_checks=1 - - - -# PASSIVE SERVICE CHECK ACCEPTANCE OPTION -# This determines whether or not Naemon will accept passive -# service checks results when it initially (re)starts. -# Values: 1 = accept passive checks, 0 = reject passive checks - -accept_passive_service_checks=1 - - - -# HOST CHECK EXECUTION OPTION -# This determines whether or not Naemon will actively execute -# host checks when it initially starts. If this option is -# disabled, checks are not actively made, but Naemon can still -# receive and process passive check results that come in. Unless -# you're implementing redundant hosts or have a special need for -# disabling the execution of host checks, leave this enabled! -# Values: 1 = enable checks, 0 = disable checks - -execute_host_checks=1 - - - -# PASSIVE HOST CHECK ACCEPTANCE OPTION -# This determines whether or not Naemon will accept passive -# host checks results when it initially (re)starts. -# Values: 1 = accept passive checks, 0 = reject passive checks - -accept_passive_host_checks=1 - - - -# NOTIFICATIONS OPTION -# This determines whether or not Naemon will sent out any host or -# service notifications when it is initially (re)started. -# Values: 1 = enable notifications, 0 = disable notifications - -enable_notifications=1 - - - -# EVENT HANDLER USE OPTION -# This determines whether or not Naemon will run any host or -# service event handlers when it is initially (re)started. Unless -# you're implementing redundant hosts, leave this option enabled. -# Values: 1 = enable event handlers, 0 = disable event handlers - -enable_event_handlers=1 - - - -# PROCESS PERFORMANCE DATA OPTION -# This determines whether or not Naemon will process performance -# data returned from service and host checks. If this option is -# enabled, host performance data will be processed using the -# host_perfdata_command (defined below) and service performance -# data will be processed using the service_perfdata_command (also -# defined below). Read the HTML docs for more information on -# performance data. -# Values: 1 = process performance data, 0 = do not process performance data - -process_performance_data=0 - - - -# HOST AND SERVICE PERFORMANCE DATA PROCESSING COMMANDS -# These commands are run after every host and service check is -# performed. These commands are executed only if the -# enable_performance_data option (above) is set to 1. The command -# argument is the short name of a command definition that you -# define in your host configuration file. Read the HTML docs for -# more information on performance data. - -#host_perfdata_command=process-host-perfdata -#service_perfdata_command=process-service-perfdata - - - -# HOST AND SERVICE PERFORMANCE DATA FILES -# These files are used to store host and service performance data. -# Performance data is only written to these files if the -# enable_performance_data option (above) is set to 1. - -#host_perfdata_file=@varDir@/host-perfdata -#service_perfdata_file=@varDir@/service-perfdata - - - -# HOST AND SERVICE PERFORMANCE DATA FILE TEMPLATES -# These options determine what data is written (and how) to the -# performance data files. The templates may contain macros, special -# characters (\t for tab, \r for carriage return, \n for newline) -# and plain text. A newline is automatically added after each write -# to the performance data file. Some examples of what you can do are -# shown below. - -#host_perfdata_file_template=[HOSTPERFDATA]\t$TIMET$\t$HOSTNAME$\t$HOSTEXECUTIONTIME$\t$HOSTOUTPUT$\t$HOSTPERFDATA$ -#service_perfdata_file_template=[SERVICEPERFDATA]\t$TIMET$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$ - - - -# HOST AND SERVICE PERFORMANCE DATA FILE MODES -# This option determines whether or not the host and service -# performance data files are opened in write ("w") or append ("a") -# mode. If you want to use named pipes, you should use the special -# pipe ("p") mode which avoid blocking at startup, otherwise you will -# likely want the defult append ("a") mode. - -#host_perfdata_file_mode=a -#service_perfdata_file_mode=a - - - -# HOST AND SERVICE PERFORMANCE DATA FILE PROCESSING INTERVAL -# These options determine how often (in seconds) the host and service -# performance data files are processed using the commands defined -# below. A value of 0 indicates the files should not be periodically -# processed. - -#host_perfdata_file_processing_interval=0 -#service_perfdata_file_processing_interval=0 - - - -# HOST AND SERVICE PERFORMANCE DATA FILE PROCESSING COMMANDS -# These commands are used to periodically process the host and -# service performance data files. The interval at which the -# processing occurs is determined by the options above. - -#host_perfdata_file_processing_command=process-host-perfdata-file -#service_perfdata_file_processing_command=process-service-perfdata-file - - - -# HOST AND SERVICE PERFORMANCE DATA PROCESS EMPTY RESULTS -# These options determine wether the core will process empty perfdata -# results or not. This is needed for distributed monitoring, and intentionally -# turned on by default. -# If you don't require empty perfdata - saving some cpu cycles -# on unwanted macro calculation - you can turn that off. Be careful! -# Values: 1 = enable, 0 = disable - -#host_perfdata_process_empty_results=1 -#service_perfdata_process_empty_results=1 - - -# OBSESS OVER SERVICE CHECKS OPTION -# This determines whether or not Naemon will obsess over service -# checks and run the ocsp_command defined below. Unless you're -# planning on implementing distributed monitoring, do not enable -# this option. Read the HTML docs for more information on -# implementing distributed monitoring. -# Values: 1 = obsess over services, 0 = do not obsess (default) - -obsess_over_services=0 - - - -# OBSESSIVE COMPULSIVE SERVICE PROCESSOR COMMAND -# This is the command that is run for every service check that is -# processed by Naemon. This command is executed only if the -# obsess_over_services option (above) is set to 1. The command -# argument is the short name of a command definition that you -# define in your host configuration file. Read the HTML docs for -# more information on implementing distributed monitoring. - -#ocsp_command=somecommand - - - -# OBSESS OVER HOST CHECKS OPTION -# This determines whether or not Naemon will obsess over host -# checks and run the ochp_command defined below. Unless you're -# planning on implementing distributed monitoring, do not enable -# this option. Read the HTML docs for more information on -# implementing distributed monitoring. -# Values: 1 = obsess over hosts, 0 = do not obsess (default) - -obsess_over_hosts=0 - - - -# OBSESSIVE COMPULSIVE HOST PROCESSOR COMMAND -# This is the command that is run for every host check that is -# processed by Naemon. This command is executed only if the -# obsess_over_hosts option (above) is set to 1. The command -# argument is the short name of a command definition that you -# define in your host configuration file. Read the HTML docs for -# more information on implementing distributed monitoring. - -#ochp_command=somecommand - - - -# TRANSLATE PASSIVE HOST CHECKS OPTION -# This determines whether or not Naemon will translate -# DOWN/UNREACHABLE passive host check results into their proper -# state for this instance of Naemon. This option is useful -# if you have distributed or failover monitoring setup. In -# these cases your other Naemon servers probably have a different -# "view" of the network, with regards to the parent/child relationship -# of hosts. If a distributed monitoring server thinks a host -# is DOWN, it may actually be UNREACHABLE from the point of -# this Naemon instance. Enabling this option will tell Naemon -# to translate any DOWN or UNREACHABLE host states it receives -# passively into the correct state from the view of this server. -# Values: 1 = perform translation, 0 = do not translate (default) - -translate_passive_host_checks=0 - - - -# PASSIVE HOST CHECKS ARE SOFT OPTION -# This determines whether or not Naemon will treat passive host -# checks as being HARD or SOFT. By default, a passive host check -# result will put a host into a HARD state type. This can be changed -# by enabling this option. -# Values: 0 = passive checks are HARD, 1 = passive checks are SOFT - -passive_host_checks_are_soft=0 - - - -# ORPHANED HOST/SERVICE CHECK OPTIONS -# These options determine whether or not Naemon will periodically -# check for orphaned host service checks. Since service checks are -# not rescheduled until the results of their previous execution -# instance are processed, there exists a possibility that some -# checks may never get rescheduled. A similar situation exists for -# host checks, although the exact scheduling details differ a bit -# from service checks. Orphaned checks seem to be a rare -# problem and should not happen under normal circumstances. -# If you have problems with service checks never getting -# rescheduled, make sure you have orphaned service checks enabled. -# Values: 1 = enable checks, 0 = disable checks - -check_for_orphaned_services=1 -check_for_orphaned_hosts=1 - - - -# SERVICE FRESHNESS CHECK OPTION -# This option determines whether or not Naemon will periodically -# check the "freshness" of service results. Enabling this option -# is useful for ensuring passive checks are received in a timely -# manner. -# Values: 1 = enabled freshness checking, 0 = disable freshness checking - -check_service_freshness=1 - - - -# SERVICE FRESHNESS CHECK INTERVAL -# This setting determines how often (in seconds) Naemon will -# check the "freshness" of service check results. If you have -# disabled service freshness checking, this option has no effect. - -service_freshness_check_interval=60 - - - -# SERVICE CHECK TIMEOUT STATE -# This setting determines the state Naemon will report when a -# service check times out - that is does not respond within -# service_check_timeout seconds. This can be useful if a -# machine is running at too high a load and you do not want -# to consider a failed service check to be critical (the default). -# Valid settings are: -# c - Critical (default) -# u - Unknown -# w - Warning -# o - OK - -service_check_timeout_state=c - - - -# HOST FRESHNESS CHECK OPTION -# This option determines whether or not Naemon will periodically -# check the "freshness" of host results. Enabling this option -# is useful for ensuring passive checks are received in a timely -# manner. -# Values: 1 = enabled freshness checking, 0 = disable freshness checking - -check_host_freshness=0 - - - -# HOST FRESHNESS CHECK INTERVAL -# This setting determines how often (in seconds) Naemon will -# check the "freshness" of host check results. If you have -# disabled host freshness checking, this option has no effect. - -host_freshness_check_interval=60 - - - - -# ADDITIONAL FRESHNESS THRESHOLD LATENCY -# This setting determines the number of seconds that Naemon -# will add to any host and service freshness thresholds that -# it calculates (those not explicitly specified by the user). - -additional_freshness_latency=15 - - - - -# FLAP DETECTION OPTION -# This option determines whether or not Naemon will try -# and detect hosts and services that are "flapping". -# Flapping occurs when a host or service changes between -# states too frequently. When Naemon detects that a -# host or service is flapping, it will temporarily suppress -# notifications for that host/service until it stops -# flapping. Flap detection is very experimental, so read -# the HTML documentation before enabling this feature! -# Values: 1 = enable flap detection -# 0 = disable flap detection (default) - -enable_flap_detection=1 - - - -# FLAP DETECTION THRESHOLDS FOR HOSTS AND SERVICES -# Read the HTML documentation on flap detection for -# an explanation of what this option does. This option -# has no effect if flap detection is disabled. - -low_service_flap_threshold=5.0 -high_service_flap_threshold=20.0 -low_host_flap_threshold=5.0 -high_host_flap_threshold=20.0 - - - -# DATE FORMAT OPTION -# This option determines how short dates are displayed. Valid options -# include: -# us (MM-DD-YYYY HH:MM:SS) -# euro (DD-MM-YYYY HH:MM:SS) -# iso8601 (YYYY-MM-DD HH:MM:SS) -# strict-iso8601 (YYYY-MM-DDTHH:MM:SS) -# - -date_format=us - - - - -# TIMEZONE OFFSET -# This option is used to override the default timezone that this -# instance of Naemon runs in. If not specified, Naemon will use -# the system configured timezone. - -#use_timezone=US/Mountain -#use_timezone=Australia/Brisbane - - - -# ILLEGAL OBJECT NAME CHARACTERS -# This option allows you to specify illegal characters that cannot -# be used in host names, service descriptions, or names of other -# object types. - -illegal_object_name_chars=`~!$%^&*|'"<>?,()= - - - -# ILLEGAL MACRO OUTPUT CHARACTERS -# This option allows you to specify illegal characters that are -# stripped from macros before being used in notifications, event -# handlers, etc. This DOES NOT affect macros used in service or -# host check commands. -# The following macros are stripped of the characters you specify: -# $HOSTOUTPUT$ -# $HOSTPERFDATA$ -# $HOSTACKAUTHOR$ -# $HOSTACKCOMMENT$ -# $SERVICEOUTPUT$ -# $SERVICEPERFDATA$ -# $SERVICEACKAUTHOR$ -# $SERVICEACKCOMMENT$ - -illegal_macro_output_chars=`~$&|'"<> - - - -# REGULAR EXPRESSION MATCHING -# This option controls whether or not regular expression matching -# takes place in the object config files. Regular expression -# matching is used to match host, hostgroup, service, and service -# group names/descriptions in some fields of various object types. -# Values: 1 = enable regexp matching, 0 = disable regexp matching - -use_regexp_matching=0 - - - -# "TRUE" REGULAR EXPRESSION MATCHING -# This option controls whether or not "true" regular expression -# matching takes place in the object config files. This option -# only has an effect if regular expression matching is enabled -# (see above). If this option is DISABLED, regular expression -# matching only occurs if a string contains wildcard characters -# (* and ?). If the option is ENABLED, regexp matching occurs -# all the time (which can be annoying). -# Values: 1 = enable true matching, 0 = disable true matching - -use_true_regexp_matching=0 - - - -# ADMINISTRATOR EMAIL/PAGER ADDRESSES -# The email and pager address of a global administrator (likely you). -# Naemon never uses these values itself, but you can access them by -# using the $ADMINEMAIL$ and $ADMINPAGER$ macros in your notification -# commands. - -admin_email=naemon@localhost -admin_pager=pagenaemon@localhost - - - -# DEBUG LEVEL -# This option determines how much (if any) debugging information will -# be written to the debug file. OR values together to log multiple -# types of information. -# Values: -# -1 = Everything -# 0 = Nothing -# 1 = Functions -# 2 = Configuration -# 4 = Process information -# 8 = Scheduled events -# 16 = Host/service checks -# 32 = Notifications -# 64 = Event broker -# 128 = External commands -# 256 = Commands -# 512 = Scheduled downtime -# 1024 = Comments -# 2048 = Macros - -debug_level=0 - - - -# DEBUG VERBOSITY -# This option determines how verbose the debug log out will be. -# Values: 0 = Brief output -# 1 = More detailed -# 2 = Very detailed - -debug_verbosity=1 - - - -# DEBUG FILE -# This option determines where Naemon should write debugging information. - -debug_file=@cacheDir@/naemon.debug - - - -# MAX DEBUG FILE SIZE -# This option determines the maximum size (in bytes) of the debug file. If -# the file grows larger than this size, it will be renamed with a .old -# extension. If a file already exists with a .old extension it will -# automatically be deleted. This helps ensure your disk space usage doesn't -# get out of control when debugging Naemon. - -max_debug_file_size=1000000 - - - -# Should we allow hostgroups to have no hosts, we default this to off since -# that was the old behavior - -allow_empty_hostgroup_assignment=0 - - - -# Normally worker count is dynamically allocated based on 1.5 * number of cpu's -# with a minimum of 4 workers. This value will override the defaults - -#check_workers=3 - - -# DISABLE SERVICE CHECKS WHEN HOST DOWN -# This option will disable all service checks if the host is not in an UP state -# -# While desirable in some environments, enabling this value can distort report -# values as the expected quantity of checks will not have been performed - -#host_down_disable_service_checks=0 - - -# CIRCULAR DEPENDENCIES (EXPERIMENTAL) -# Allow for circular dependencies in naemon's host graph. -# Enabaling this will cause propagation the following to stop working: -# * scheduling downtime -# * enabling notification -# * disabling notification -# This feature is experimental and bugs might occur. - -allow_circular_dependencies=0 diff --git a/modules/private/buildbot/common/build_helpers.py b/modules/private/buildbot/common/build_helpers.py deleted file mode 100644 index acea905..0000000 --- a/modules/private/buildbot/common/build_helpers.py +++ /dev/null @@ -1,277 +0,0 @@ -from buildbot.plugins import util, steps, schedulers -from buildbot_buildslist import BuildsList -from shutil import which - -__all__ = [ - "force_scheduler", "deploy_scheduler", "hook_scheduler", - "clean_branch", "package_and_upload", "SlackStatusPush", - "XMPPStatusPush", "NixShellCommand" - ] - -# Small helpers" -@util.renderer -def clean_branch(props): - if props.hasProperty("branch") and len(props["branch"]) > 0: - return props["branch"].replace("/", "_") - else: - return "HEAD" - -def package_and_upload(package, package_dest, package_url): - return [ - steps.ShellCommand(name="build package", - logEnviron=False, haltOnFailure=True, workdir="source", - command=["git", "archive", "HEAD", "-o", package]), - - steps.FileUpload(name="upload package", workersrc=package, - workdir="source", masterdest=package_dest, - url=package_url, mode=0o644), - - steps.ShellCommand(name="cleanup package", logEnviron=False, - haltOnFailure=True, workdir="source", alwaysRun=True, - command=["rm", "-f", package]), - ] - -# Steps -class NixShellCommand(steps.ShellCommand): - def __init__(self, command=None, pure=True, nixfile=None, **kwargs): - assert(isinstance(command, str)) - oldpath = kwargs.get("env", {}).get("PATH", None) - if which("nix-shell", path=oldpath) is None: - kwargs["env"] = kwargs.get("env", {}) - if isinstance(oldpath, str): - kwargs["env"]["PATH"] = "/run/current-system/sw/bin:" + oldpath - elif isinstance(oldpath, list): - kwargs["env"]["PATH"] = ["/run/current-system/sw/bin"] + oldpath - nixcommand = ["nix-shell"] - if pure: - nixcommand.append("--pure") - nixcommand.append("--run") - nixcommand.append(command) - if nixfile is not None: - nixcommand.append(nixfile) - super().__init__(command=nixcommand, **kwargs) - -# Schedulers -def force_scheduler(name, builders): - return schedulers.ForceScheduler(name=name, - label="Force build", buttonName="Force build", - reason=util.StringParameter(name="reason", label="Reason", default="Force build"), - codebases=[ - util.CodebaseParameter("", - branch=util.StringParameter( - name="branch", label="Git reference (tag, branch)", required=True), - revision=util.FixedParameter(name="revision", default=""), - repository=util.FixedParameter(name="repository", default=""), - project=util.FixedParameter(name="project", default=""), - ), - ], - username=util.FixedParameter(name="username", default="Web button"), - builderNames=builders) - -def deploy_scheduler(name, builders): - return schedulers.ForceScheduler(name=name, - builderNames=builders, - label="Deploy built package", buttonName="Deploy", - username=util.FixedParameter(name="username", default="Web button"), - codebases=[ - util.CodebaseParameter(codebase="", - branch=util.FixedParameter(name="branch", default=""), - revision=util.FixedParameter(name="revision", default=""), - repository=util.FixedParameter(name="repository", default=""), - project=util.FixedParameter(name="project", default=""))], - reason=util.FixedParameter(name="reason", default="Deploy"), - properties=[ - util.ChoiceStringParameter(label="Environment", - name="environment", default="integration", - choices=["integration", "production"]), - BuildsList(label="Build to deploy", name="build"), - ] - ) - -def hook_scheduler(project, timer=10): - return schedulers.AnyBranchScheduler( - change_filter=util.ChangeFilter(category="hooks", project=project), - name=project, treeStableTimer=timer, builderNames=["{}_build".format(project)]) - -# Slack/XMPP status push -from buildbot.reporters.http import HttpStatusPushBase -from twisted.internet import defer -from twisted.python import log -from buildbot.util import httpclientservice -from buildbot.reporters import utils -from buildbot.process import results -from twisted.words.protocols.jabber.jid import JID -from wokkel import client, xmppim -from functools import partial - -class SlackStatusPush(HttpStatusPushBase): - name = "SlackStatusPush" - - @defer.inlineCallbacks - def reconfigService(self, serverUrl, **kwargs): - yield HttpStatusPushBase.reconfigService(self, **kwargs) - self._http = yield httpclientservice.HTTPClientService.getService( - self.master, serverUrl) - - @defer.inlineCallbacks - def send(self, build): - yield utils.getDetailsForBuild(self.master, build, wantProperties=True) - response = yield self._http.post("", json=self.format(build)) - if response.code != 200: - log.msg("%s: unable to upload status: %s" % - (response.code, response.content)) - - def format(self, build): - colors = [ - "#36A64F", # success - "#F1E903", # warnings - "#DA0505", # failure - "#FFFFFF", # skipped - "#000000", # exception - "#FFFFFF", # retry - "#D02CA9", # cancelled - ] - - if "environment" in build["properties"]: - msg = "{} environment".format(build["properties"]["environment"][0]) - if "build" in build["properties"]: - msg = "of archive {} in ".format(build["properties"]["build"][0]) + msg - elif len(build["buildset"]["sourcestamps"][0]["branch"] or []) > 0: - msg = "revision {}".format(build["buildset"]["sourcestamps"][0]["branch"]) - else: - msg = "build" - - if build["complete"]: - timedelta = int((build["complete_at"] - build["started_at"]).total_seconds()) - hours, rest = divmod(timedelta, 3600) - minutes, seconds = divmod(rest, 60) - if hours > 0: - duration = "{}h {}min {}s".format(hours, minutes, seconds) - elif minutes > 0: - duration = "{}min {}s".format(minutes, seconds) - else: - duration = "{}s".format(seconds) - - text = "Build <{}|{}> of {}'s {} was {} in {}.".format( - build["url"], build["buildid"], - build["builder"]["name"], - msg, - results.Results[build["results"]], - duration, - ) - fields = [ - { - "title": "Build", - "value": "<{}|{}>".format(build["url"], build["buildid"]), - "short": True, - }, - { - "title": "Project", - "value": build["builder"]["name"], - "short": True, - }, - { - "title": "Build status", - "value": results.Results[build["results"]], - "short": True, - }, - { - "title": "Build duration", - "value": duration, - "short": True, - }, - ] - if "environment" in build["properties"]: - fields.append({ - "title": "Environment", - "value": build["properties"]["environment"][0], - "short": True, - }) - if "build" in build["properties"]: - fields.append({ - "title": "Archive", - "value": build["properties"]["build"][0], - "short": True, - }) - attachments = [{ - "fallback": "", - "color": colors[build["results"]], - "fields": fields - }] - else: - text = "Build <{}|{}> of {}'s {} started.".format( - build["url"], build["buildid"], - build["builder"]["name"], - msg, - ) - attachments = [] - - return { - "username": "Buildbot", - "icon_url": "http://docs.buildbot.net/current/_static/icon.png", - "text": text, - "attachments": attachments, - } - -class XMPPStatusPush(HttpStatusPushBase): - name = "XMPPStatusPush" - - @defer.inlineCallbacks - def reconfigService(self, password, recipients, **kwargs): - yield HttpStatusPushBase.reconfigService(self, **kwargs) - self.password = password - self.recipients = recipients - - @defer.inlineCallbacks - def send(self, build): - yield utils.getDetailsForBuild(self.master, build, wantProperties=True) - body = self.format(build) - factory = client.DeferredClientFactory(JID("notify_bot@immae.fr/buildbot"), self.password) - d = client.clientCreator(factory) - def send_message(recipient, stream): - message = xmppim.Message(recipient=JID(recipient), body=body) - message.stanzaType = 'chat' - stream.send(message.toElement()) - # To allow chaining - return stream - for recipient in self.recipients: - d.addCallback(partial(send_message, recipient)) - d.addCallback(lambda _: factory.streamManager.xmlstream.sendFooter()) - d.addErrback(log.err) - - def format(self, build): - if "environment" in build["properties"]: - msg = "{} environment".format(build["properties"]["environment"][0]) - if "build" in build["properties"]: - msg = "of archive {} in ".format(build["properties"]["build"][0]) + msg - elif len(build["buildset"]["sourcestamps"][0]["branch"] or []) > 0: - msg = "revision {}".format(build["buildset"]["sourcestamps"][0]["branch"]) - else: - msg = "build" - - if build["complete"]: - timedelta = int((build["complete_at"] - build["started_at"]).total_seconds()) - hours, rest = divmod(timedelta, 3600) - minutes, seconds = divmod(rest, 60) - if hours > 0: - duration = "{}h {}min {}s".format(hours, minutes, seconds) - elif minutes > 0: - duration = "{}min {}s".format(minutes, seconds) - else: - duration = "{}s".format(seconds) - - text = "Build {} ( {} ) of {}'s {} was {} in {}.".format( - build["buildid"], build["url"], - build["builder"]["name"], - msg, - results.Results[build["results"]], - duration, - ) - else: - text = "Build {} ( {} ) of {}'s {} started.".format( - build["buildid"], build["url"], - build["builder"]["name"], - msg, - ) - - return text diff --git a/modules/private/buildbot/common/libvirt.py b/modules/private/buildbot/common/libvirt.py deleted file mode 100644 index e250627..0000000 --- a/modules/private/buildbot/common/libvirt.py +++ /dev/null @@ -1,318 +0,0 @@ -# This file was part of Buildbot. Buildbot is free software: you can -# redistribute it and/or modify it under the terms of the GNU General Public -# License as published by the Free Software Foundation, version 2. -# -# This program is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -# details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Portions Copyright Buildbot Team Members -# Portions Copyright 2010 Isotoma Limited - - -import os - -from twisted.internet import defer -from twisted.internet import threads -from twisted.internet import utils -from twisted.python import failure -from twisted.python import log - -from buildbot import config -from buildbot.util.eventual import eventually -from buildbot.worker import AbstractLatentWorker - -try: - import libvirt -except ImportError: - libvirt = None - -import random -import string - -def random_string_generator(): - chars = string.ascii_letters - return ''.join(random.choice(chars) for x in range(6)) - -class WorkQueue: - - """ - I am a class that turns parallel access into serial access. - - I exist because we want to run libvirt access in threads as we don't - trust calls not to block, but under load libvirt doesn't seem to like - this kind of threaded use. - """ - - def __init__(self): - self.queue = [] - - def _process(self): - log.msg("Looking to start a piece of work now...") - - # Is there anything to do? - if not self.queue: - log.msg("_process called when there is no work") - return - - # Peek at the top of the stack - get a function to call and - # a deferred to fire when its all over - d, next_operation, args, kwargs = self.queue[0] - - # Start doing some work - expects a deferred - try: - d2 = next_operation(*args, **kwargs) - except Exception: - d2 = defer.fail() - - # Whenever a piece of work is done, whether it worked or not - # call this to schedule the next piece of work - @d2.addBoth - def _work_done(res): - log.msg("Completed a piece of work") - self.queue.pop(0) - if self.queue: - log.msg("Preparing next piece of work") - eventually(self._process) - return res - - # When the work is done, trigger d - d2.chainDeferred(d) - - def execute(self, cb, *args, **kwargs): - kickstart_processing = not self.queue - d = defer.Deferred() - self.queue.append((d, cb, args, kwargs)) - if kickstart_processing: - self._process() - return d - - def executeInThread(self, cb, *args, **kwargs): - return self.execute(threads.deferToThread, cb, *args, **kwargs) - - -# A module is effectively a singleton class, so this is OK -queue = WorkQueue() - - -class Domain: - - """ - I am a wrapper around a libvirt Domain object - """ - - def __init__(self, connection, domain): - self.connection = connection - self.domain = domain - - def name(self): - return queue.executeInThread(self.domain.name) - - def create(self): - return queue.executeInThread(self.domain.create) - - def shutdown(self): - return queue.executeInThread(self.domain.shutdown) - - def destroy(self): - return queue.executeInThread(self.domain.destroy) - -class Volume: - def __init__(self, connection, volume): - self.connection = connection - self.volume = volume - - @defer.inlineCallbacks - def destroy(self): - yield queue.executeInThread(self.volume.wipe) - yield queue.executeInThread(self.volume.delete) - -class Pool: - VolumeClass = Volume - def __init__(self, connection, pool): - self.connection = connection - self.pool = pool - - @defer.inlineCallbacks - def create_volume(self, xml): - res = yield queue.executeInThread(self.pool.createXML, xml) - return self.VolumeClass(self.connection, res) - -class Connection: - - """ - I am a wrapper around a libvirt Connection object. - """ - - DomainClass = Domain - PoolClass = Pool - - def __init__(self, uri): - self.uri = uri - self._connection = None - - @property - def connection(self): - if self._connection is not None: - try: - if not self._connection.isAlive(): - self._connection = None - except: - self._connection = None - if self._connection is None: - self._connection = libvirt.open(self.uri) - return self._connection - - @defer.inlineCallbacks - def create(self, xml): - """ I take libvirt XML and start a new VM """ - res = yield queue.executeInThread(self.connection.createXML, xml, 0) - return self.DomainClass(self, res) - - @defer.inlineCallbacks - def lookup_pool(self, name): - res = yield queue.executeInThread(self.connection.storagePoolLookupByName, name) - return self.PoolClass(self, res) - -class LibVirtWorker(AbstractLatentWorker): - - def __init__(self, name, password, connection, master_url, base_image=None, **kwargs): - super().__init__(name, password, **kwargs) - if not libvirt: - config.error( - "The python module 'libvirt' is needed to use a LibVirtWorker") - - self.master_url = master_url - self.random_name = random_string_generator() - self.connection = connection - self.base_image = base_image - - self.domain = None - self.domain_name = "buildbot-" + self.workername + "-" + self.random_name - self.volume = None - self.volume_name = "buildbot-" + self.workername + "-" + self.random_name - self.pool_name = "buildbot-disks" - - def reconfigService(self, *args, **kwargs): - if 'build_wait_timeout' not in kwargs: - kwargs['build_wait_timeout'] = 0 - return super().reconfigService(*args, **kwargs) - - def canStartBuild(self): - if self.domain and not self.isConnected(): - log.msg( - "Not accepting builds as existing domain but worker not connected") - return False - - return super().canStartBuild() - - @defer.inlineCallbacks - def _prepare_image(self): - log.msg("Creating temporary image {}".format(self.volume_name)) - pool = yield self.connection.lookup_pool(self.pool_name) - vol_xml = """ - - {vol_name} - 10 - - - - 0600 - 0 - 0 - - - - /etc/libvirtd/base-images/buildbot.qcow2 - - - - """.format(vol_name = self.volume_name) - self.volume = yield pool.create_volume(vol_xml) - - @defer.inlineCallbacks - def start_instance(self, build): - """ - I start a new instance of a VM. - - If a base_image is specified, I will make a clone of that otherwise i will - use image directly. - - If i'm not given libvirt domain definition XML, I will look for my name - in the list of defined virtual machines and start that. - """ - domain_xml = """ - - {domain_name} - 2 - 1 - - - buildbot_master_url={master_url} - buildbot_worker_name={worker_name} - - - - hvm - - - - /run/current-system/sw/bin/qemu-system-x86_64 - - - - - - - - - - - - - - - - - """.format(volume_name = self.volume_name, master_url = self.master_url, pool_name = - self.pool_name, domain_name = self.domain_name, worker_name = self.workername) - - yield self._prepare_image() - - try: - self.domain = yield self.connection.create(domain_xml) - except Exception: - log.err(failure.Failure(), - ("Cannot start a VM ({}), failing gracefully and triggering" - "a new build check").format(self.workername)) - self.domain = None - return False - - return [self.domain_name] - - def stop_instance(self, fast=False): - """ - I attempt to stop a running VM. - I make sure any connection to the worker is removed. - If the VM was using a cloned image, I remove the clone - When everything is tidied up, I ask that bbot looks for work to do - """ - - log.msg("Attempting to stop '{}'".format(self.workername)) - if self.domain is None: - log.msg("I don't think that domain is even running, aborting") - return defer.succeed(None) - - domain = self.domain - self.domain = None - - d = domain.destroy() - if self.volume is not None: - self.volume.destroy() - - return d diff --git a/modules/private/buildbot/common/master.cfg b/modules/private/buildbot/common/master.cfg deleted file mode 100644 index abe08e0..0000000 --- a/modules/private/buildbot/common/master.cfg +++ /dev/null @@ -1,69 +0,0 @@ -# -*- python -*- -# ex: set filetype=python: - -from buildbot.plugins import secrets, util, webhooks -from buildbot.util import bytes2unicode -import re -import os -from buildbot_config import E, configure -import json - -class CustomBase(webhooks.base): - def getChanges(self, request): - try: - content = request.content.read() - args = json.loads(bytes2unicode(content)) - except Exception as e: - raise ValueError("Error loading JSON: " + str(e)) - - args.setdefault("comments", "") - args.setdefault("repository", "") - args.setdefault("author", args.get("who")) - - return ([args], None) - -userInfoProvider = util.LdapUserInfo( - uri=E.LDAP_URL, - bindUser=E.LDAP_ADMIN_USER, - bindPw=open(E.SECRETS_FILE + "/ldap", "r").read().rstrip(), - accountBase=E.LDAP_BASE, - accountPattern=E.LDAP_PATTERN, - accountFullName='cn', - accountEmail='mail', - avatarData="jpegPhoto", - groupBase=E.LDAP_BASE, - groupName="cn", - groupMemberPattern=E.LDAP_GROUP_PATTERN, - ) - -c = BuildmasterConfig = { - "title": E.TITLE, - "titleURL": E.TITLE_URL, - "db": { - "db_url": "sqlite:///state.sqlite" - }, - "protocols": { "pb": { "port": E.PB_SOCKET } }, - "workers": [], - "change_source": [], - "schedulers": [], - "builders": [], - "services": [], - "secretsProviders": [ - secrets.SecretInAFile(E.SECRETS_FILE), - ], - "www": { - "change_hook_dialects": { "base": { "custom_class": CustomBase } }, - "plugins": { - "waterfall_view": {}, - "console_view": {}, - "grid_view": {}, - "buildslist": {}, - }, - "auth": util.RemoteUserAuth( - header=b"X-Remote-User", - userInfoProvider=userInfoProvider, - headerRegex=re.compile(br"(?P[^ @]+)")), - } - } - -configure(c) diff --git a/modules/private/buildbot/default.nix b/modules/private/buildbot/default.nix deleted file mode 100644 index ec28b63..0000000 --- a/modules/private/buildbot/default.nix +++ /dev/null @@ -1,244 +0,0 @@ -{ lib, pkgs, config, ... }: -let - varDir = "/var/lib/buildbot"; - buildbot_common = pkgs.python3Packages.buildPythonPackage rec { - name = "buildbot_common"; - src = ./common; - format = "other"; - installPhase = '' - mkdir -p $out/${pkgs.python3.pythonForBuild.sitePackages} - cp -a $src $out/${pkgs.python3.pythonForBuild.sitePackages}/buildbot_common - ''; - }; - buildbot = pkgs.python3Packages.buildbot-full; -in -{ - options = { - myServices.buildbot.enable = lib.mkOption { - type = lib.types.bool; - default = false; - description = '' - Whether to enable buildbot. - ''; - }; - }; - - config = lib.mkIf config.myServices.buildbot.enable { - ids.uids.buildbot = config.myEnv.buildbot.user.uid; - ids.gids.buildbot = config.myEnv.buildbot.user.gid; - - users.groups.buildbot.gid = config.ids.gids.buildbot; - users.users.buildbot = { - name = "buildbot"; - uid = config.ids.uids.buildbot; - group = "buildbot"; - description = "Buildbot user"; - home = varDir; - extraGroups = [ "keys" ]; - }; - - services.websites.env.tools.watchPaths = lib.attrsets.mapAttrsToList - (k: project: config.secrets.fullPaths."buildbot/${project.name}/webhook-httpd-include") - config.myEnv.buildbot.projects; - - services.websites.env.tools.vhostConfs.git.extraConfig = lib.attrsets.mapAttrsToList (k: project: '' - RedirectMatch permanent "^/buildbot/${project.name}$" "/buildbot/${project.name}/" - RewriteEngine On - RewriteRule ^/buildbot/${project.name}/ws(.*)$ unix:///run/buildbot/${project.name}.sock|ws://git.immae.eu/ws$1 [P,NE,QSA,L] - ProxyPass /buildbot/${project.name}/ unix:///run/buildbot/${project.name}.sock|http://${project.name}-git.immae.eu/ - ProxyPassReverse /buildbot/${project.name}/ unix:///run/buildbot/${project.name}.sock|http://${project.name}-git.immae.eu/ - - Use LDAPConnect - Require ldap-group cn=users,ou=${project.name},cn=buildbot,ou=services,dc=immae,dc=eu - - SetEnvIf X-Url-Scheme https HTTPS=1 - ProxyPreserveHost On - - - - Require local - Require ldap-group cn=users,ou=${project.name},cn=buildbot,ou=services,dc=immae,dc=eu - Include ${config.secrets.fullPaths."buildbot/${project.name}/webhook-httpd-include"} - - - '') config.myEnv.buildbot.projects; - - system.activationScripts = lib.attrsets.mapAttrs' (k: project: lib.attrsets.nameValuePair "buildbot-${project.name}" { - deps = [ "users" "wrappers" ]; - text = '' - install -m 755 -o buildbot -g buildbot -d ${varDir}/${project.name} - - ${project.activationScript} - ''; - }) config.myEnv.buildbot.projects; - - secrets.keys = lib.listToAttrs ( - lib.lists.flatten ( - lib.attrsets.mapAttrsToList (k: project: - lib.attrsets.mapAttrsToList (k: v: - (lib.nameValuePair "buildbot/${project.name}/${k}" { - permissions = "0600"; - user = "buildbot"; - group = "buildbot"; - text = v; - }) - ) project.secrets - ++ [ - (lib.nameValuePair "buildbot/${project.name}/webhook-httpd-include" { - permissions = "0600"; - user = "wwwrun"; - group = "wwwrun"; - text = lib.optionalString (project.webhookTokens != null) '' - Require expr "req('Access-Key') in { ${builtins.concatStringsSep ", " (map (x: "'${x}'") project.webhookTokens)} }" - ''; - }) - (lib.nameValuePair "buildbot/${project.name}/environment_file" { - permissions = "0600"; - user = "buildbot"; - group = "buildbot"; - text = let - project_env = with lib.attrsets; - mapAttrs' (k: v: nameValuePair "BUILDBOT_${k}" v) project.environment // - mapAttrs' (k: v: nameValuePair "BUILDBOT_PATH_${k}" (v pkgs)) (attrByPath ["builderPaths"] {} project) // - { - BUILDBOT_PROJECT_DIR = ./projects + "/${project.name}"; - BUILDBOT_WORKER_PORT = builtins.toString project.workerPort; - BUILDBOT_HOST = config.hostEnv.fqdn; - BUILDBOT_VIRT_URL = "qemu+ssh://libvirt@dilion.immae.eu/system"; - }; - in builtins.concatStringsSep "\n" - (lib.mapAttrsToList (envK: envV: "${envK}=${envV}") project_env); - }) - ] - ) config.myEnv.buildbot.projects - ) - ) // { - "buildbot/ldap" = { - permissions = "0600"; - user = "buildbot"; - group = "buildbot"; - text = config.myEnv.buildbot.ldap.password; - }; - "buildbot/worker_password" = { - permissions = "0600"; - user = "buildbot"; - group = "buildbot"; - text = config.myEnv.buildbot.workerPassword; - }; - "buildbot/ssh_key" = { - permissions = "0600"; - user = "buildbot"; - group = "buildbot"; - text = config.myEnv.buildbot.ssh_key.private; - }; - }; - - services.filesWatcher = lib.attrsets.mapAttrs' (k: project: lib.attrsets.nameValuePair "buildbot-${project.name}" { - restart = true; - paths = [ - config.secrets.fullPaths."buildbot/ldap" - config.secrets.fullPaths."buildbot/worker_password" - config.secrets.fullPaths."buildbot/ssh_key" - config.secrets.fullPaths."buildbot/${project.name}/environment_file" - ] ++ lib.attrsets.mapAttrsToList (k: v: config.secrets.fullPaths."buildbot/${project.name}/${k}") project.secrets; - }) config.myEnv.buildbot.projects; - - systemd.slices.buildbot = { - description = "buildbot slice"; - }; - - networking.firewall.allowedTCPPorts = lib.attrsets.mapAttrsToList (k: v: v.workerPort) config.myEnv.buildbot.projects; - systemd.services = lib.attrsets.mapAttrs' (k: project: lib.attrsets.nameValuePair "buildbot-${project.name}" { - description = "Buildbot Continuous Integration Server ${project.name}."; - after = [ "network-online.target" ]; - wantedBy = [ "multi-user.target" ]; - path = project.packages pkgs ++ (project.pythonPackages buildbot.pythonModule pkgs); - preStart = let - master-cfg = "${buildbot_common}/${pkgs.python3.pythonForBuild.sitePackages}/buildbot_common/master.cfg"; - tac_file = pkgs.writeText "buildbot.tac" '' - import os - - from twisted.application import service - from buildbot.master import BuildMaster - - basedir = '${varDir}/${project.name}' - rotateLength = 10000000 - maxRotatedFiles = 10 - configfile = '${master-cfg}' - - # Default umask for server - umask = None - - # if this is a relocatable tac file, get the directory containing the TAC - if basedir == '.': - import os - basedir = os.path.abspath(os.path.dirname(__file__)) - - # note: this line is matched against to check that this is a buildmaster - # directory; do not edit it. - application = service.Application('buildmaster') - from twisted.python.logfile import LogFile - from twisted.python.log import ILogObserver, FileLogObserver - logfile = LogFile.fromFullPath(os.path.join(basedir, "twistd.log"), rotateLength=rotateLength, - maxRotatedFiles=maxRotatedFiles) - application.setComponent(ILogObserver, FileLogObserver(logfile).emit) - - m = BuildMaster(basedir, configfile, umask) - m.setServiceParent(application) - m.log_rotation.rotateLength = rotateLength - m.log_rotation.maxRotatedFiles = maxRotatedFiles - ''; - in '' - if [ ! -f ${varDir}/${project.name}/buildbot.tac ]; then - ${buildbot}/bin/buildbot create-master -c "${master-cfg}" "${varDir}/${project.name}" - rm -f ${varDir}/${project.name}/master.cfg.sample - rm -f ${varDir}/${project.name}/buildbot.tac - fi - ln -sf ${tac_file} ${varDir}/${project.name}/buildbot.tac - # different buildbots may be trying that simultaneously, add the || true to avoid complaining in case of race - install -Dm600 -o buildbot -g buildbot -T ${config.secrets.fullPaths."buildbot/ssh_key"} ${varDir}/buildbot_key || true - buildbot_secrets=${varDir}/${project.name}/secrets - install -m 0700 -o buildbot -g buildbot -d $buildbot_secrets - install -Dm600 -o buildbot -g buildbot -T ${config.secrets.fullPaths."buildbot/ldap"} $buildbot_secrets/ldap - install -Dm600 -o buildbot -g buildbot -T ${config.secrets.fullPaths."buildbot/worker_password"} $buildbot_secrets/worker_password - ${builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList - (k: v: "install -Dm600 -o buildbot -g buildbot -T ${config.secrets.fullPaths."buildbot/${project.name}/${k}"} $buildbot_secrets/${k}") project.secrets - )} - ${buildbot}/bin/buildbot upgrade-master ${varDir}/${project.name} - ''; - environment = let - buildbot_config = pkgs.python3Packages.buildPythonPackage (rec { - name = "buildbot_config-${project.name}"; - src = ./projects + "/${project.name}"; - format = "other"; - installPhase = '' - mkdir -p $out/${pkgs.python3.pythonForBuild.sitePackages} - cp -a $src $out/${pkgs.python3.pythonForBuild.sitePackages}/buildbot_config - ''; - }); - HOME = "${varDir}/${project.name}"; - PYTHONPATH = "${buildbot.pythonModule.withPackages (self: project.pythonPackages self pkgs ++ [ - pkgs.python3Packages.libvirt - pkgs.python3Packages.wokkel - pkgs.python3Packages.treq pkgs.python3Packages.ldap3 buildbot - pkgs.python3Packages.buildbot-worker - buildbot_common buildbot_config - ])}/${buildbot.pythonModule.sitePackages}${if project.pythonPathHome then ":${varDir}/${project.name}/.local/${pkgs.python3.pythonForBuild.sitePackages}" else ""}"; - in { inherit PYTHONPATH HOME; }; - - serviceConfig = { - Slice = "buildbot.slice"; - Type = "forking"; - User = "buildbot"; - Group = "buildbot"; - RuntimeDirectory = "buildbot"; - RuntimeDirectoryPreserve = "yes"; - StateDirectory = "buildbot"; - SupplementaryGroups = "keys"; - WorkingDirectory = "${varDir}/${project.name}"; - ExecStart = "${buildbot}/bin/buildbot start"; - EnvironmentFile = config.secrets.fullPaths."buildbot/${project.name}/environment_file"; - }; - }) config.myEnv.buildbot.projects; - }; -} diff --git a/modules/private/buildbot/projects/caldance/__init__.py b/modules/private/buildbot/projects/caldance/__init__.py deleted file mode 100644 index 2074d9e..0000000 --- a/modules/private/buildbot/projects/caldance/__init__.py +++ /dev/null @@ -1,198 +0,0 @@ -from buildbot.plugins import * -from buildbot_common.build_helpers import * -import os -from buildbot.util import bytes2unicode -import json - -__all__ = [ "configure", "E" ] - -class E(): - PROJECT = "caldance" - BUILDBOT_URL = "https://git.immae.eu/buildbot/{}/".format(PROJECT) - SOCKET = "unix:/run/buildbot/{}.sock".format(PROJECT) - PB_SOCKET = "unix:address=/run/buildbot/{}_pb.sock".format(PROJECT) - RELEASE_PATH = "/var/lib/ftp/release.immae.eu/{}".format(PROJECT) - RELEASE_URL = "https://release.immae.eu/{}".format(PROJECT) - GIT_URL = "gitolite@git.immae.eu:perso/simon_descarpentries/www.cal-dance.com" - SSH_KEY_PATH = "/var/lib/buildbot/buildbot_key" - SSH_HOST_KEY = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIFbhFTl2A2RJn5L51yxJM4XfCS2ZaiSX/jo9jFSdghF" - LDAP_HOST = "ldap.immae.eu" - LDAP_DN = "cn=buildbot,ou=services,dc=immae,dc=eu" - LDAP_ROLES_BASE = "ou=roles,ou=hosts,dc=immae,dc=eu" - XMPP_RECIPIENTS = os.environ["BUILDBOT_XMPP_RECIPIENTS"].split(" ") - - PUPPET_HOST = { - "integration": [ "-p8022", "root@caldance.cs.immae.dev"], - } - - # master.cfg - SECRETS_FILE = os.getcwd() + "/secrets" - LDAP_URL = "ldaps://ldap.immae.eu:636" - LDAP_ADMIN_USER = "cn=buildbot,ou=services,dc=immae,dc=eu" - LDAP_BASE = "dc=immae,dc=eu" - LDAP_PATTERN = "(uid=%(username)s)" - LDAP_GROUP_PATTERN = "(&(memberOf=cn=groups,ou=caldance,cn=buildbot,ou=services,dc=immae,dc=eu)(member=%(dn)s))" - TITLE_URL = "https://caldance.cs.immae.dev" - TITLE = "Caldance" - -class CustomBase(webhooks.base): - def getChanges(self, request): - try: - content = request.content.read() - args = json.loads(bytes2unicode(content)) - except Exception as e: - raise ValueError("Error loading JSON: " + str(e)) - - args.setdefault("comments", "") - args.setdefault("repository", "") - args.setdefault("author", args.get("who", "unknown")) - - if args["category"] == "deploy_webhook": - args = { - "category": "deploy_webhook", - "comments": "", - "repository": "", - "author": "webhook", - "project": "Caldance", - "properties": { - "environment": args.get("environment", "integration"), - "build": "caldance_{}.tar.gz".format(args.get("build", "master")) - } - } - - return ([args], None) - -def deploy_hook_scheduler(project, timer=1): - return schedulers.AnyBranchScheduler( - change_filter=util.ChangeFilter(category="deploy_webhook", project=project), - name="{}_deploy".format(project), treeStableTimer=timer, builderNames=["{}_deploy".format(project)]) - -def configure(c): - c["buildbotURL"] = E.BUILDBOT_URL - c["www"]["port"] = E.SOCKET - - c["www"]["change_hook_dialects"]["base"] = { - "custom_class": CustomBase - } - c['workers'].append(worker.LocalWorker("generic-worker")) - c['workers'].append(worker.LocalWorker("deploy-worker")) - - db_lock = util.MasterLock("deploy_after_build") - - c['schedulers'].append(hook_scheduler("Caldance", timer=1)) - c['schedulers'].append(force_scheduler("force_caldance", ["Caldance_build"])) - c['schedulers'].append(deploy_scheduler("deploy_caldance", ["Caldance_deploy"])) - c['schedulers'].append(deploy_hook_scheduler("Caldance", timer=1)) - - c['builders'].append(factory("caldance", locks=[db_lock.access('exclusive')])) - - c['builders'].append(deploy_factory("caldance", locks=[db_lock.access('exclusive')])) - - c['services'].append(SlackStatusPush( - name="slack_status_caldance", - builders=["Caldance_build", "Caldance_deploy"], - serverUrl=open(E.SECRETS_FILE + "/slack_webhook", "r").read().rstrip())) - c['services'].append(XMPPStatusPush( - name="xmpp_status_caldance", - builders=["Caldance_build", "Caldance_deploy"], - recipients=E.XMPP_RECIPIENTS, - password=open(E.SECRETS_FILE + "/notify_xmpp_password", "r").read().rstrip())) - -def factory(project, locks=[], ignore_fails=False): - release_file = "{1}/{0}_%(kw:clean_branch)s.tar.gz" - - package = util.Interpolate("{0}_%(kw:clean_branch)s.tar.gz".format(project), clean_branch=clean_branch) - package_dest = util.Interpolate(release_file.format(project, E.RELEASE_PATH), clean_branch=clean_branch) - package_url = util.Interpolate(release_file.format(project, E.RELEASE_URL), clean_branch=clean_branch) - - factory = util.BuildFactory() - factory.addStep(steps.Git(logEnviron=False, repourl=E.GIT_URL, - sshPrivateKey=open(E.SSH_KEY_PATH).read().rstrip(), - sshHostKey=E.SSH_HOST_KEY, mode="full", method="copy")) - factory.addSteps(package_and_upload(package, package_dest, package_url)) - - return util.BuilderConfig( - name="{}_build".format(project.capitalize()), - locks=locks, - workernames=["generic-worker"], factory=factory) - -def compute_build_infos(project): - @util.renderer - def compute(props): - import re, hashlib - build_file = props.getProperty("build") - package_dest = "{1}/{0}".format(build_file, E.RELEASE_PATH) - version = re.match(r"{0}_(.*).tar.gz".format(project), build_file).group(1) - with open(package_dest, "rb") as f: - sha = hashlib.sha256(f.read()).hexdigest() - return { - "build_version": version, - "build_hash": sha, - } - return compute - -@util.renderer -def puppet_ssh_command(props): - environment = props["environment"] if props.hasProperty("environment") else "integration" - ssh_command = [ - "ssh", "-o", "UserKnownHostsFile=/dev/null", "-o", "StrictHostKeyChecking=no", "-o", "CheckHostIP=no", - "-i", E.SSH_KEY_PATH ] - return ssh_command + E.PUPPET_HOST.get(environment, ["host.invalid"]) - -def deploy_factory(project, locks=[]): - package_dest = util.Interpolate("{0}/%(prop:build)s".format(E.RELEASE_PATH)) - - factory = util.BuildFactory() - factory.addStep(steps.MasterShellCommand(command=["test", "-f", package_dest])) - factory.addStep(steps.SetProperties(properties=compute_build_infos(project))) - factory.addStep(LdapPush(environment=util.Property("environment"), - project=project, build_version=util.Property("build_version"), - build_hash=util.Property("build_hash"), ldap_password=util.Secret("ldap"))) - factory.addStep(steps.MasterShellCommand(command=puppet_ssh_command)) - return util.BuilderConfig( - name="{}_deploy".format(project.capitalize()), - locks=locks, - workernames=["deploy-worker"], factory=factory) - -from twisted.internet import defer -from buildbot.process.buildstep import FAILURE -from buildbot.process.buildstep import SUCCESS -from buildbot.process.buildstep import BuildStep - -class LdapPush(BuildStep): - name = "LdapPush" - renderables = ["environment", "project", "build_version", "build_hash", "ldap_password"] - - def __init__(self, **kwargs): - self.environment = kwargs.pop("environment") - self.project = kwargs.pop("project") - self.build_version = kwargs.pop("build_version") - self.build_hash = kwargs.pop("build_hash") - self.ldap_password = kwargs.pop("ldap_password") - self.ldap_host = kwargs.pop("ldap_host", E.LDAP_HOST) - super().__init__(**kwargs) - - def run(self): - import json - from ldap3 import Reader, Writer, Server, Connection, ObjectDef - server = Server(self.ldap_host) - conn = Connection(server, - user=E.LDAP_DN, - password=self.ldap_password) - conn.bind() - obj = ObjectDef("immaePuppetClass", conn) - r = Reader(conn, obj, - "cn=caldance.{},{}".format(self.environment, E.LDAP_ROLES_BASE)) - r.search() - if len(r) > 0: - w = Writer.from_cursor(r) - for value in w[0].immaePuppetJson.values: - config = json.loads(value) - if "role::caldance::{}_version".format(self.project) in config: - config["role::caldance::{}_version".format(self.project)] = self.build_version - config["role::caldance::{}_sha256".format(self.project)] = self.build_hash - w[0].immaePuppetJson -= value - w[0].immaePuppetJson += json.dumps(config, indent=" ") - w.commit() - return defer.succeed(SUCCESS) - return defer.succeed(FAILURE) diff --git a/modules/private/buildbot/projects/cryptoportfolio/__init__.py b/modules/private/buildbot/projects/cryptoportfolio/__init__.py deleted file mode 100644 index 5d70f95..0000000 --- a/modules/private/buildbot/projects/cryptoportfolio/__init__.py +++ /dev/null @@ -1,169 +0,0 @@ -from buildbot.plugins import * -from buildbot_common.build_helpers import * -import os - -__all__ = [ "configure", "E" ] - -class E(): - PROJECT = "cryptoportfolio" - BUILDBOT_URL = "https://git.immae.eu/buildbot/{}/".format(PROJECT) - SOCKET = "unix:/run/buildbot/{}.sock".format(PROJECT) - PB_SOCKET = "unix:address=/run/buildbot/{}_pb.sock".format(PROJECT) - RELEASE_PATH = "/var/lib/ftp/release.immae.eu/{}".format(PROJECT) - RELEASE_URL = "https://release.immae.eu/{}".format(PROJECT) - GIT_URL = "https://git.immae.eu/perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/{0}.git" - SSH_KEY_PATH = "/var/lib/buildbot/buildbot_key" - LDAP_HOST = "ldap.immae.eu" - LDAP_DN = "cn=buildbot,ou=services,dc=immae,dc=eu" - LDAP_ROLES_BASE = "ou=roles,ou=hosts,dc=immae,dc=eu" - - PUPPET_HOST = { - "production": "root@cryptoportfolio.immae.eu", - "integration": "root@cryptoportfolio-dev.immae.eu" - } - - # master.cfg - SECRETS_FILE = os.getcwd() + "/secrets" - LDAP_URL = "ldaps://ldap.immae.eu:636" - LDAP_ADMIN_USER = "cn=buildbot,ou=services,dc=immae,dc=eu" - LDAP_BASE = "dc=immae,dc=eu" - LDAP_PATTERN = "(uid=%(username)s)" - LDAP_GROUP_PATTERN = "(&(memberOf=cn=groups,ou=cryptoportfolio,cn=buildbot,ou=services,dc=immae,dc=eu)(member=%(dn)s))" - TITLE_URL = "https://git.immae.eu" - TITLE = "Cryptoportfolio" - -# eval .. dans .zshrc_local -# mkdir -p $BUILD/go -# export GOPATH=$BUILD/go -# go get -u github.com/golang/dep/cmd/dep -# export PATH=$PATH:$BUILD/go/bin -# go get git.immae.eu/Cryptoportfolio/Front.git -# cd $BUILD/go/src/git.immae.eu/Cryptoportfolio/Front.git -# git checkout dev -# dep ensure -def configure(c): - c["buildbotURL"] = E.BUILDBOT_URL - c["www"]["port"] = E.SOCKET - - c['workers'].append(worker.LocalWorker("generic-worker")) - c['workers'].append(worker.LocalWorker("deploy-worker")) - - c['schedulers'].append(hook_scheduler("Trader")) - c['schedulers'].append(hook_scheduler("Front")) - c['schedulers'].append(force_scheduler( - "force_cryptoportfolio", ["Trader_build", "Front_build"])) - c['schedulers'].append(deploy_scheduler("deploy_cryptoportfolio", - ["Trader_deploy", "Front_deploy"])) - - c['builders'].append(factory("trader")) - c['builders'].append(factory("front", ignore_fails=True)) - - c['builders'].append(deploy_factory("trader")) - c['builders'].append(deploy_factory("front")) - - c['services'].append(SlackStatusPush( - name="slack_status_cryptoportfolio", - builders=["Front_build", "Trader_build", "Front_deploy", "Trader_deploy"], - serverUrl=open(E.SECRETS_FILE + "/slack_webhook", "r").read().rstrip())) - -def factory(project, ignore_fails=False): - release_file = "{1}/{0}/{0}_%(kw:clean_branch)s.tar.gz" - - url = E.GIT_URL.format(project.capitalize()) - - package = util.Interpolate("{0}_%(kw:clean_branch)s.tar.gz".format(project), clean_branch=clean_branch) - package_dest = util.Interpolate(release_file.format(project, E.RELEASE_PATH), clean_branch=clean_branch) - package_url = util.Interpolate(release_file.format(project, E.RELEASE_URL), clean_branch=clean_branch) - - factory = util.BuildFactory() - factory.addStep(steps.Git(logEnviron=False, repourl=url, - mode="full", method="copy")) - factory.addStep(steps.ShellCommand(name="make install", - logEnviron=False, haltOnFailure=(not ignore_fails), - warnOnFailure=ignore_fails, flunkOnFailure=(not ignore_fails), - command=["make", "install"])) - factory.addStep(steps.ShellCommand(name="make test", - logEnviron=False, haltOnFailure=(not ignore_fails), - warnOnFailure=ignore_fails, flunkOnFailure=(not ignore_fails), - command=["make", "test"])) - factory.addSteps(package_and_upload(package, package_dest, package_url)) - - return util.BuilderConfig( - name="{}_build".format(project.capitalize()), - workernames=["generic-worker"], factory=factory) - -def compute_build_infos(project): - @util.renderer - def compute(props): - import re, hashlib - build_file = props.getProperty("build") - package_dest = "{2}/{0}/{1}".format(project, build_file, E.RELEASE_PATH) - version = re.match(r"{0}_(.*).tar.gz".format(project), build_file).group(1) - with open(package_dest, "rb") as f: - sha = hashlib.sha256(f.read()).hexdigest() - return { - "build_version": version, - "build_hash": sha, - } - return compute - -@util.renderer -def puppet_host(props): - environment = props["environment"] if props.hasProperty("environment") else "integration" - return E.PUPPET_HOST.get(environment, "host.invalid") - -def deploy_factory(project): - package_dest = util.Interpolate("{1}/{0}/%(prop:build)s".format(project, E.RELEASE_PATH)) - - factory = util.BuildFactory() - factory.addStep(steps.MasterShellCommand(command=["test", "-f", package_dest])) - factory.addStep(steps.SetProperties(properties=compute_build_infos(project))) - factory.addStep(LdapPush(environment=util.Property("environment"), - project=project, build_version=util.Property("build_version"), - build_hash=util.Property("build_hash"), ldap_password=util.Secret("ldap"))) - factory.addStep(steps.MasterShellCommand(command=[ - "ssh", "-o", "UserKnownHostsFile=/dev/null", "-o", "StrictHostKeyChecking=no", "-o", "CheckHostIP=no", "-i", E.SSH_KEY_PATH, puppet_host])) - return util.BuilderConfig(name="{}_deploy".format(project.capitalize()), workernames=["deploy-worker"], factory=factory) - -from twisted.internet import defer -from buildbot.process.buildstep import FAILURE -from buildbot.process.buildstep import SUCCESS -from buildbot.process.buildstep import BuildStep - -class LdapPush(BuildStep): - name = "LdapPush" - renderables = ["environment", "project", "build_version", "build_hash", "ldap_password"] - - def __init__(self, **kwargs): - self.environment = kwargs.pop("environment") - self.project = kwargs.pop("project") - self.build_version = kwargs.pop("build_version") - self.build_hash = kwargs.pop("build_hash") - self.ldap_password = kwargs.pop("ldap_password") - self.ldap_host = kwargs.pop("ldap_host", E.LDAP_HOST) - super().__init__(**kwargs) - - def run(self): - import json - from ldap3 import Reader, Writer, Server, Connection, ObjectDef - server = Server(self.ldap_host) - conn = Connection(server, - user=E.LDAP_DN, - password=self.ldap_password) - conn.bind() - obj = ObjectDef("immaePuppetClass", conn) - r = Reader(conn, obj, - "cn=cryptoportfolio.{},{}".format(self.environment, E.LDAP_ROLES_BASE)) - r.search() - if len(r) > 0: - w = Writer.from_cursor(r) - for value in w[0].immaePuppetJson.values: - config = json.loads(value) - if "role::cryptoportfolio::{}_version".format(self.project) in config: - config["role::cryptoportfolio::{}_version".format(self.project)] = self.build_version - config["role::cryptoportfolio::{}_sha256".format(self.project)] = self.build_hash - w[0].immaePuppetJson -= value - w[0].immaePuppetJson += json.dumps(config, indent=" ") - w.commit() - return defer.succeed(SUCCESS) - return defer.succeed(FAILURE) diff --git a/modules/private/buildbot/projects/denise/__init__.py b/modules/private/buildbot/projects/denise/__init__.py deleted file mode 100644 index abeba3c..0000000 --- a/modules/private/buildbot/projects/denise/__init__.py +++ /dev/null @@ -1,186 +0,0 @@ -from buildbot.plugins import * -from buildbot_common.build_helpers import * -import os -from buildbot.util import bytes2unicode -import json - -__all__ = [ "configure", "E" ] - -class E(): - PROJECT = "denise" - BUILDBOT_URL = "https://git.immae.eu/buildbot/{}/".format(PROJECT) - SOCKET = "unix:/run/buildbot/{}.sock".format(PROJECT) - PB_SOCKET = "unix:address=/run/buildbot/{}_pb.sock".format(PROJECT) - SSH_KEY_PATH = "/var/lib/buildbot/buildbot_key" - SSH_HOST_KEY = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIFbhFTl2A2RJn5L51yxJM4XfCS2ZaiSX/jo9jFSdghF" - - BINGO_RELEASE_PATH = "/var/lib/buildbot/outputs/denise/bingo" - BINGO_BETA_PATH = "/var/lib/buildbot/outputs/denise/bingo_beta" - BINGO_GIT_URL = "gitolite@git.immae.eu:perso/Denise/bingo" - - OMS_RELEASE_PATH = "/var/lib/buildbot/outputs/denise/oms" - OMS_BETA_PATH = "/var/lib/buildbot/outputs/denise/oms_beta" - OMS_GIT_URL = "gitolite@git.immae.eu:perso/Denise/oms" - - AVENTURIERS_RELEASE_PATH = "/var/lib/buildbot/outputs/denise/aventuriers" - AVENTURIERS_GIT_URL = "https://git.immae.eu/perso/Denise/aventuriers.git" - - # master.cfg - SECRETS_FILE = os.getcwd() + "/secrets" - LDAP_URL = "ldaps://ldap.immae.eu:636" - LDAP_ADMIN_USER = "cn=buildbot,ou=services,dc=immae,dc=eu" - LDAP_BASE = "dc=immae,dc=eu" - LDAP_PATTERN = "(uid=%(username)s)" - LDAP_GROUP_PATTERN = "(&(memberOf=cn=groups,ou=denise,cn=buildbot,ou=services,dc=immae,dc=eu)(member=%(dn)s))" - TITLE_URL = "https://oms.syanni.eu" - TITLE = "Syanni website" - -class CustomBase(webhooks.base): - def getChanges(self, request): - try: - content = request.content.read() - args = json.loads(bytes2unicode(content)) - except Exception as e: - raise ValueError("Error loading JSON: " + str(e)) - - args.setdefault("comments", "") - args.setdefault("repository", "") - args.setdefault("author", args.get("who", "unknown")) - - return ([args], None) - -def configure(c): - c["buildbotURL"] = E.BUILDBOT_URL - c["www"]["port"] = E.SOCKET - - c["www"]["change_hook_dialects"]["base"] = { - "custom_class": CustomBase - } - c['workers'].append(worker.LocalWorker("generic-worker-denise")) - - c['schedulers'].append(hook_scheduler("DeniseBingo", timer=1)) - c['schedulers'].append(hook_scheduler("DeniseOMS", timer=1)) - c['schedulers'].append(hook_scheduler("DeniseAventuriers", timer=1)) - c['schedulers'].append(force_scheduler("force_denise", [ - "DeniseBingo_build", "DeniseOMS_build", "DeniseAventuriers_build" - ])) - - c['builders'].append(denise_oms_factory()) - c['builders'].append(denise_bingo_factory()) - c['builders'].append(denise_aventuriers_factory()) - -def denise_bingo_factory(): - @util.renderer - def bingo_run_path(props): - if props.hasProperty("branch") and len(props["branch"]) > 0 and props["branch"] == "master": - return "/run/denise_bingo/gunicorn.pid" - else: - return "/run/denise_bingo_beta/gunicorn.pid" - - @util.renderer - def bingo_systemd_service(props): - if props.hasProperty("branch") and len(props["branch"]) > 0 and props["branch"] == "master": - return "denise-bingo" - else: - return "denise-bingo-beta" - - @util.renderer - def bingo_url(props): - if props.hasProperty("branch") and len(props["branch"]) > 0 and props["branch"] == "master": - return "https://bingo.syanni.eu" - else: - return "https://beta.bingo.syanni.eu" - - @util.renderer - def bingo_path(props): - if props.hasProperty("branch") and len(props["branch"]) > 0 and props["branch"] == "master": - return E.BINGO_RELEASE_PATH - else: - return E.BINGO_BETA_PATH - - factory = util.BuildFactory() - factory.addStep(steps.Git(logEnviron=False, repourl=E.BINGO_GIT_URL, - submodules=True, sshPrivateKey=open(E.SSH_KEY_PATH).read().rstrip(), - sshHostKey=E.SSH_HOST_KEY, mode="full", method="copy")) - factory.addStep(steps.MasterShellCommand(command=util.Interpolate("rm -rf %(kw:bingo_path)s", bingo_path=bingo_path))) - factory.addStep(steps.DirectoryUpload(workersrc="../source", - masterdest=bingo_path, - url=bingo_url)) - factory.addStep(steps.MasterShellCommand(command=util.Interpolate("chmod -R a+rX %(kw:bingo_path)s", bingo_path=bingo_path))) - factory.addStep(steps.MasterShellCommand(command=util.Interpolate("/run/wrappers/bin/sudo systemctl restart %(kw:bingo_service)s.service", bingo_service=bingo_systemd_service))) - - return util.BuilderConfig(name="DeniseBingo_build", workernames=["generic-worker-denise"], factory=factory) - -def denise_oms_factory(): - @util.renderer - def oms_run_path(props): - if props.hasProperty("branch") and len(props["branch"]) > 0 and props["branch"] == "master": - return "/run/denise_oms/gunicorn.pid" - else: - return "/run/denise_oms_beta/gunicorn.pid" - - @util.renderer - def oms_systemd_service(props): - if props.hasProperty("branch") and len(props["branch"]) > 0 and props["branch"] == "master": - return "denise-oms" - else: - return "denise-oms-beta" - - @util.renderer - def oms_url(props): - if props.hasProperty("branch") and len(props["branch"]) > 0 and props["branch"] == "master": - return "https://oms.syanni.eu" - else: - return "https://beta.oms.syanni.eu" - - @util.renderer - def oms_path(props): - if props.hasProperty("branch") and len(props["branch"]) > 0 and props["branch"] == "master": - return E.OMS_RELEASE_PATH - else: - return E.OMS_BETA_PATH - - factory = util.BuildFactory() - factory.addStep(steps.Git(logEnviron=False, repourl=E.OMS_GIT_URL, - submodules=True, sshPrivateKey=open(E.SSH_KEY_PATH).read().rstrip(), - sshHostKey=E.SSH_HOST_KEY, mode="full", method="copy")) - factory.addStep(steps.MasterShellCommand(command=util.Interpolate("rm -rf %(kw:oms_path)s", oms_path=oms_path))) - factory.addStep(steps.DirectoryUpload(workersrc="../source", - masterdest=oms_path, - url=oms_url)) - factory.addStep(steps.MasterShellCommand(command=util.Interpolate("chmod -R a+rX %(kw:oms_path)s", oms_path=oms_path))) - factory.addStep(steps.MasterShellCommand(command=util.Interpolate("/run/wrappers/bin/sudo systemctl restart %(kw:oms_service)s.service", oms_service=oms_systemd_service))) - - return util.BuilderConfig(name="DeniseOMS_build", workernames=["generic-worker-denise"], factory=factory) - -def denise_aventuriers_factory(): - path_env = { - "PATH": os.environ["BUILDBOT_PATH_Aventuriers"] + ":${PATH}", - "TZ": "Europe/Paris", - } - - factory = util.BuildFactory() - factory.addStep(steps.Git(logEnviron=False, repourl=E.AVENTURIERS_GIT_URL, - submodules=True, mode="full", method="fresh")) - factory.addStep(steps.ShellCommand(name="build files", - logEnviron=False, haltOnFailure=True, workdir="build", - env=path_env, command=["make", "tout", "encyclo"])) - factory.addStep(steps.MasterShellCommand(command="rm -rf {}".format(E.AVENTURIERS_RELEASE_PATH))) - factory.addStep(steps.DirectoryUpload(workersrc="../build/html", - masterdest=E.AVENTURIERS_RELEASE_PATH, - url="https://aventuriers.syanni.eu")) - factory.addStep(steps.FileUpload(name="upload epub file", workersrc="aventuriers.epub", - workdir="build", masterdest=E.AVENTURIERS_RELEASE_PATH + "/aventuriers.epub", - url="https://aventuriers.syanni.eu/aventuriers.epub", mode=0o644)) - factory.addStep(steps.FileUpload(name="upload mobi file", workersrc="aventuriers.mobi", - workdir="build", masterdest=E.AVENTURIERS_RELEASE_PATH + "/aventuriers.mobi", - url="https://aventuriers.syanni.eu/aventuriers.mobi", mode=0o644)) - factory.addStep(steps.FileUpload(name="upload pdf file", workersrc="aventuriers.pdf", - workdir="build", masterdest=E.AVENTURIERS_RELEASE_PATH + "/aventuriers.pdf", - url="https://aventuriers.syanni.eu/aventuriers.pdf", mode=0o644)) - factory.addStep(steps.FileUpload(name="upload encyclo pdf file", workersrc="encyclo.pdf", - workdir="build", masterdest=E.AVENTURIERS_RELEASE_PATH + "/encyclo.pdf", - url="https://aventuriers.syanni.eu/encyclo.pdf", mode=0o644)) - factory.addStep(steps.MasterShellCommand(command="chmod -R a+rX {}".format(E.AVENTURIERS_RELEASE_PATH))) - - return util.BuilderConfig(name="DeniseAventuriers_build", workernames=["generic-worker-denise"], factory=factory) diff --git a/modules/private/buildbot/projects/immaeEu/__init__.py b/modules/private/buildbot/projects/immaeEu/__init__.py deleted file mode 100644 index 83265cd..0000000 --- a/modules/private/buildbot/projects/immaeEu/__init__.py +++ /dev/null @@ -1,314 +0,0 @@ -from buildbot.plugins import * -from buildbot_common.build_helpers import * -import os -from buildbot.util import bytes2unicode -import json - -__all__ = [ "configure", "E" ] - -class E(): - PROJECT = "immaeEu" - BUILDBOT_URL = "https://git.immae.eu/buildbot/{}/".format(PROJECT) - SOCKET = "unix:/run/buildbot/{}.sock".format(PROJECT) - PB_SOCKET = "unix:address=/run/buildbot/{}_pb.sock".format(PROJECT) - SSH_KEY_PATH = "/var/lib/buildbot/buildbot_key" - SSH_HOST_KEY = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIFbhFTl2A2RJn5L51yxJM4XfCS2ZaiSX/jo9jFSdghF" - XMPP_RECIPIENTS = os.environ["BUILDBOT_XMPP_RECIPIENTS"].split(" ") - - BIP39_GIT_URL = "https://git.immae.eu/perso/Immae/Projets/Cryptomonnaies/BIP39.git" - IMMAE_EU_GIT_URL = "gitolite@git.immae.eu:perso/Immae/Sites/Blog" - HISTORY_GIT_URL = "gitolite@git.immae.eu:perso/Immae/Sites/History" - RECETTES_GIT_URL = "gitolite@git.immae.eu:perso/Immae/Sites/Recettes" - COURS_GIT_URL = "gitolite@git.immae.eu:perso/Immae/Sites/Cours" - DOCS_GIT_URL = "gitolite@git.immae.eu:perso/Immae/Sites/Docs" - NORMALESUP_GIT_URL = "gitolite@git.immae.eu:perso/Immae/Projets/Sites/Normalesup" - - COURS_RELEASE_PATH = "/var/lib/buildbot/outputs/immae/cours" - COURS_TARBALL_PATH = "/var/lib/ftp/release.immae.eu/cours" - COURS_TARBALL_URL = "https://release.immae.eu/cours" - BIP39_RELEASE_PATH = "/var/lib/buildbot/outputs/immae/bip39" - HISTORY_RELEASE_PATH = "/var/lib/buildbot/outputs/immae/history" - IMMAE_EU_RELEASE_PATH = "/var/lib/buildbot/outputs/immae/blog" - DOCS_RELEASE_PATH = "/var/lib/buildbot/outputs/immae/docs" - RECETTES_RELEASE_PATH = "/var/lib/buildbot/outputs/immae/recettes" - NORMALESUP_RELEASE_PATH = "/var/lib/buildbot/outputs/immae/recherche" - GSMCELLS_RELEASE_PATH = "/var/lib/ftp/release.immae.eu/gsm_cells" - GSMCELLS_RELEASE_URL = "https://release.immae.eu/gsm_cells" - - # master.cfg - SECRETS_FILE = os.getcwd() + "/secrets" - LDAP_URL = "ldaps://ldap.immae.eu:636" - LDAP_ADMIN_USER = "cn=buildbot,ou=services,dc=immae,dc=eu" - LDAP_BASE = "dc=immae,dc=eu" - LDAP_PATTERN = "(uid=%(username)s)" - LDAP_GROUP_PATTERN = "(&(memberOf=cn=groups,ou=immaeEu,cn=buildbot,ou=services,dc=immae,dc=eu)(member=%(dn)s))" - TITLE_URL = "https://www.immae.eu" - TITLE = "Immae website" - -class CustomBase(webhooks.base): - def getChanges(self, request): - try: - content = request.content.read() - args = json.loads(bytes2unicode(content)) - except Exception as e: - raise ValueError("Error loading JSON: " + str(e)) - - args.setdefault("comments", "") - args.setdefault("repository", "") - args.setdefault("author", args.get("who", "unknown")) - - return ([args], None) - -def configure(c): - c["buildbotURL"] = E.BUILDBOT_URL - c["www"]["port"] = E.SOCKET - - c["www"]["change_hook_dialects"]["base"] = { - "custom_class": CustomBase - } - c['workers'].append(worker.LocalWorker("generic-worker-immae-eu")) - - c['schedulers'].append(hook_scheduler("ImmaeEu", timer=1)) - c['schedulers'].append(hook_scheduler("Normalesup", timer=1)) - c['schedulers'].append(hook_scheduler("Cours", timer=1)) - c['schedulers'].append(hook_scheduler("Recettes", timer=1)) - c['schedulers'].append(hook_scheduler("Docs", timer=1)) - c['schedulers'].append(hook_scheduler("History", timer=1)) - c['schedulers'].append(hook_scheduler("BIP39", timer=1)) - c['schedulers'].append(schedulers.Nightly(name="GSMCells-weekly", - builderNames=["GSMCells_build"], dayOfWeek=6, hour=3)) - c['schedulers'].append(force_scheduler("force_immae_eu", [ - "ImmaeEu_build", "Normalesup_build", "Cours_build", "Docs_build", - "Recettes_build", "History_build", "BIP39_build" - ])) - c['schedulers'].append(schedulers.ForceScheduler( - name="GSMCells-force", label="Force build", - buttonName="Force build", - reason=util.StringParameter(name="reason", label="Reason", default="Force build"), - codebases=[ - util.CodebaseParameter("", - branch=util.FixedParameter(name="branch", default=""), - revision=util.FixedParameter(name="revision", default=""), - repository=util.FixedParameter(name="repository", default=""), - project=util.FixedParameter(name="project", default=""), - ), - ], - username=util.FixedParameter(name="username", default="Web button"), - builderNames=["GSMCells_build"] - )) - - c['builders'].append(immae_eu_factory()) - c['builders'].append(normalesup_factory()) - c['builders'].append(cours_factory()) - c['builders'].append(gsm_cells_factory()) - c['builders'].append(recettes_factory()) - c['builders'].append(docs_factory()) - c['builders'].append(history_factory()) - c['builders'].append(bip39_factory()) - - c['services'].append(SlackStatusPush( - name="slack_status_immae_eu_project", - builders=[ - "ImmaeEu_build", "Normalesup_build", "Cours_build", "Docs_build", - "GSMCells_build", "Recettes_build", "History_build", - "BIP39_build" - ], - serverUrl=open(E.SECRETS_FILE + "/slack_webhook", "r").read().rstrip())) - c['services'].append(XMPPStatusPush( - name="xmpp_status_immae_eu_project", - builders=[ - "ImmaeEu_build", "Normalesup_build", "Cours_build", "Docs_build", - "GSMCells_build", "Recettes_build", "History_build", - "BIP39_build" - ], - recipients=E.XMPP_RECIPIENTS, - password=open(E.SECRETS_FILE + "/notify_xmpp_password", "r").read().rstrip())) - -def history_factory(): - path_env = { - "PATH": os.environ["BUILDBOT_PATH_History"] + ":${PATH}" - } - factory = util.BuildFactory() - factory.addStep(steps.Git(logEnviron=False, repourl=E.HISTORY_GIT_URL, - submodules=True, sshPrivateKey=open(E.SSH_KEY_PATH).read().rstrip(), - sshHostKey=E.SSH_HOST_KEY, mode="full", method="copy")) - factory.addStep(steps.ShellCommand(name="build website", - logEnviron=False, haltOnFailure=True, workdir="source", - env=path_env, command=["jekyll", "build"])) - factory.addStep(steps.MasterShellCommand(command="rm -rf {}".format(E.HISTORY_RELEASE_PATH))) - factory.addStep(steps.DirectoryUpload(workersrc="../source/_site", - masterdest=E.HISTORY_RELEASE_PATH, - url="https://www.immae.eu/history")) - factory.addStep(steps.MasterShellCommand(command="chmod -R a+rX {}".format(E.HISTORY_RELEASE_PATH))) - - return util.BuilderConfig(name="History_build", workernames=["generic-worker-immae-eu"], factory=factory) - -def docs_factory(): - path_env = { - "PATH": os.environ["BUILDBOT_PATH_Docs"] + ":${PATH}" - } - factory = util.BuildFactory() - factory.addStep(steps.Git(logEnviron=False, repourl=E.DOCS_GIT_URL, - submodules=True, sshPrivateKey=open(E.SSH_KEY_PATH).read().rstrip(), - sshHostKey=E.SSH_HOST_KEY, mode="full", method="copy")) - factory.addStep(steps.ShellCommand(name="build website", - logEnviron=False, haltOnFailure=True, workdir="source", - env=path_env, command=["make", "clean", "html"])) - factory.addStep(steps.MasterShellCommand(command="rm -rf {}".format(E.DOCS_RELEASE_PATH))) - factory.addStep(steps.DirectoryUpload(workersrc="../source/_build/html", - masterdest=E.DOCS_RELEASE_PATH, - url="https://www.immae.eu/docs")) - factory.addStep(steps.MasterShellCommand(command="chmod -R a+rX {}".format(E.DOCS_RELEASE_PATH))) - - return util.BuilderConfig(name="Docs_build", workernames=["generic-worker-immae-eu"], factory=factory) - -def recettes_factory(): - path_env = { - "PATH": os.environ["BUILDBOT_PATH_Recettes"] + ":${PATH}" - } - factory = util.BuildFactory() - factory.addStep(steps.Git(logEnviron=False, repourl=E.RECETTES_GIT_URL, - submodules=True, sshPrivateKey=open(E.SSH_KEY_PATH).read().rstrip(), - sshHostKey=E.SSH_HOST_KEY, mode="full", method="copy")) - factory.addStep(NixShellCommand(name="build website", - logEnviron=False, haltOnFailure=True, workdir="source", - env=path_env, command="jekyll build --trace --baseurl /recettes")) - factory.addStep(steps.MasterShellCommand(command="rm -rf {}".format(E.RECETTES_RELEASE_PATH))) - factory.addStep(steps.DirectoryUpload(workersrc="../source/_site", - masterdest=E.RECETTES_RELEASE_PATH, - url="https://www.immae.eu/recettes")) - factory.addStep(steps.MasterShellCommand(command="chmod -R a+rX {}".format(E.RECETTES_RELEASE_PATH))) - - return util.BuilderConfig(name="Recettes_build", workernames=["generic-worker-immae-eu"], factory=factory) - -def bip39_factory(): - path_env = { - "PATH": os.environ["BUILDBOT_PATH_BIP39"] + ":${PATH}" - } - factory = util.BuildFactory() - factory.addStep(steps.Git(logEnviron=False, repourl=E.BIP39_GIT_URL, - submodules=True, mode="full", method="copy")) - factory.addStep(steps.ShellCommand(name="build file", - logEnviron=False, haltOnFailure=True, workdir="source", - env=path_env, command=["python", "compile.py"])) - factory.addStep(steps.FileUpload(name="upload file", workersrc="bip39-standalone.html", - workdir="source", masterdest=E.BIP39_RELEASE_PATH + "/index.html", - url="https://tools.immae.eu/BIP39", mode=0o644)) - factory.addStep(steps.MasterShellCommand(command="chmod -R a+rX {}".format(E.BIP39_RELEASE_PATH))) - - return util.BuilderConfig(name="BIP39_build", workernames=["generic-worker-immae-eu"], factory=factory) - -def immae_eu_factory(): - path_env = { - "PATH": os.environ["BUILDBOT_PATH_ImmaeEu"] + ":${PATH}" - } - factory = util.BuildFactory() - factory.addStep(steps.Git(logEnviron=False, repourl=E.IMMAE_EU_GIT_URL, - submodules=True, sshPrivateKey=open(E.SSH_KEY_PATH).read().rstrip(), - sshHostKey=E.SSH_HOST_KEY, mode="full", method="copy")) - factory.addStep(steps.ShellCommand(name="build website", - logEnviron=False, haltOnFailure=True, workdir="source", - env=path_env, command=["make", "html"])) - factory.addStep(steps.MasterShellCommand(command="rm -rf {}".format(E.IMMAE_EU_RELEASE_PATH))) - factory.addStep(steps.DirectoryUpload(workersrc="../source/output", - masterdest=E.IMMAE_EU_RELEASE_PATH, - url="https://www.immae.eu")) - factory.addStep(steps.MasterShellCommand(command="chmod -R a+rX {}".format(E.IMMAE_EU_RELEASE_PATH))) - - return util.BuilderConfig(name="ImmaeEu_build", workernames=["generic-worker-immae-eu"], factory=factory) - -def cours_factory(): - path_env = { - "PATH": os.environ["BUILDBOT_PATH_Cours"] + ":${PATH}", - "CI": "yes" - } - factory = util.BuildFactory() - factory.addStep(steps.Git(logEnviron=False, repourl=E.COURS_GIT_URL, - submodules=True, sshPrivateKey=open(E.SSH_KEY_PATH).read().rstrip(), - sshHostKey=E.SSH_HOST_KEY, mode="full", method="copy")) - factory.addStep(steps.ShellCommand(name="build website", - logEnviron=False, haltOnFailure=True, workdir="source", - command=["make", "build"], env=path_env)) - factory.addStep(steps.MasterShellCommand(command="rm -rf {}".format(E.COURS_RELEASE_PATH))) - factory.addStep(steps.DirectoryUpload(workersrc="../source/build", - masterdest=E.COURS_RELEASE_PATH, - url="https://www.immae.eu/cours")) - factory.addStep(steps.MasterShellCommand(command="chmod -R a+rX {}".format(E.COURS_RELEASE_PATH))) - - factory.addStep(steps.ShellCommand(name="build pdfs", - logEnviron=False, haltOnFailure=True, workdir="source", - command=["make", "pdfs"], env=path_env)) - - package = util.Interpolate("cours_%(kw:clean_branch)s.tar.gz", clean_branch=clean_branch) - release_file = "{0}/cours_%(kw:clean_branch)s.tar.gz" - package_dest = util.Interpolate(release_file.format(E.COURS_TARBALL_PATH), clean_branch=clean_branch) - package_url = util.Interpolate(release_file.format(E.COURS_TARBALL_URL), clean_branch=clean_branch) - factory.addStep(steps.ShellCommand(name="build pdf tarball", - logEnviron=False, haltOnFailure=True, workdir="source", - command=["tar", "-cvf", package, "-C", "pdfs", "mp", "mpsi"], env=path_env)) - factory.addStep(steps.FileUpload(name="upload package", workersrc=package, - workdir="source", masterdest=package_dest, - url=package_url, mode=0o644)) - - return util.BuilderConfig(name="Cours_build", workernames=["generic-worker-immae-eu"], factory=factory) - -def normalesup_factory(): - path_env = { - "PATH": os.environ["BUILDBOT_PATH_Normalesup"] + ":${PATH}" - } - factory = util.BuildFactory() - factory.addStep(steps.Git(logEnviron=False, repourl=E.NORMALESUP_GIT_URL, - submodules=True, sshPrivateKey=open(E.SSH_KEY_PATH).read().rstrip(), - sshHostKey=E.SSH_HOST_KEY, mode="full", method="copy")) - factory.addStep(steps.ShellCommand(name="build website", - logEnviron=False, haltOnFailure=True, workdir="source", - command=["make", "build"], env=path_env)) - factory.addStep(steps.ShellCommand(name="give read access to all files", - logEnviron=False, haltOnFailure=True, workdir="source", - command="chmod -R a+rX build", env=path_env)) - factory.addStep(steps.ShellCommand(name="synchronize with phare", - logEnviron=False, haltOnFailure=True, workdir="source", - env=path_env, command=[ - "rsync", "-av", "--delete", - "-e", "ssh -i {} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o CheckHostIP=no".format(E.SSH_KEY_PATH), - "build/", - os.environ["BUILDBOT_NORMALESUP_HOST"] - ])) - factory.addStep(steps.MasterShellCommand(command="rm -rf {}".format(E.NORMALESUP_RELEASE_PATH))) - factory.addStep(steps.DirectoryUpload(workersrc="../source/build", masterdest=E.NORMALESUP_RELEASE_PATH, - url="https://www.immae.eu/recherche")) - factory.addStep(steps.MasterShellCommand(command="chmod -R a+rX {}".format(E.NORMALESUP_RELEASE_PATH))) - - return util.BuilderConfig(name="Normalesup_build", workernames=["generic-worker-immae-eu"], factory=factory) - -def gsm_cells_factory(): - path_env = { - "PATH": os.environ["BUILDBOT_PATH_GSMCells"] + ":${PATH}", - "IN_BUILDBOT": "yes", - } - master_env = { - "HTACCESS": ''' - Options +FollowSymLinks - IndexIgnore * - ''' - } - for k, v in os.environ.items(): - if k.startswith("BUILDBOT_GSM_CELLS_"): - path_env[k[len("BUILDBOT_GSM_CELLS_"):]] = v - - script = os.environ["BUILDBOT_PROJECT_DIR"] + "/scripts/lacells_download" - factory = util.BuildFactory() - factory.addStep(steps.ShellCommand(name="download files", - logEnviron=False, haltOnFailure=True, command=[script], env=path_env)) - factory.addStep(steps.ShellCommand(name="give read access to all files", - logEnviron=False, haltOnFailure=True, - command="chmod a+r lacells.db", env=path_env)) - factory.addStep(steps.FileUpload(workersrc="lacells.db", - masterdest=(E.GSMCELLS_RELEASE_PATH+"/lacells.db"), url=(E.GSMCELLS_RELEASE_URL+"/lacells.db"))) - factory.addStep(steps.MasterShellCommand(command="touch {}/.duplicity-ignore".format(E.GSMCELLS_RELEASE_PATH))) - factory.addStep(steps.MasterShellCommand(command='echo "$HTACCESS" > {}/.htaccess'.format(E.GSMCELLS_RELEASE_PATH), - env=master_env)) - factory.addStep(steps.MasterShellCommand(command="ln -sf lacells.db {}/lacells.db.new".format(E.GSMCELLS_RELEASE_PATH))) - factory.addStep(steps.MasterShellCommand(command="chmod -R a+rX {}".format(E.GSMCELLS_RELEASE_PATH))) - - return util.BuilderConfig(name="GSMCells_build", workernames=["generic-worker-immae-eu"], factory=factory) diff --git a/modules/private/buildbot/projects/immaeEu/scripts/lacells_download b/modules/private/buildbot/projects/immaeEu/scripts/lacells_download deleted file mode 100755 index 1193cf3..0000000 --- a/modules/private/buildbot/projects/immaeEu/scripts/lacells_download +++ /dev/null @@ -1,163 +0,0 @@ -#!/usr/bin/env bash - -# FLG - Fast Lacells.db Generator -# -# Simple script to quickly download and generate lacells.db for LocalGSMBackend by n76 -# https://github.com/n76/Local-GSM-Backend -# Uses Mozilla Location Service, OpenCellID and radiocells.org databases as source -# Based on lacells-creator by wvengen and n76 -# -# Licensed under GPLv3 or later -# (C)2016 Sebastian Obrusiewicz -# sobrus@o2.pl - -if [ -z "$IN_BUILDBOT" ]; then -#DEFAULT_CONFIG_BEGIN -ENABLE_OCI=1 #enable OpenCellID data source -ENABLE_MOZ=1 #enable Mozilla Location Services (MLS) data source -ENABLE_RCO=0 #enable radiocells.org data source (it can be quite slow) - -# See https://en.wikipedia.org/wiki/Mobile_country_code -# 208 France -MCC="" #contry codes separated with "|", for example "260|262". Leave dot+asterisk ".*" for all countries -RCO_SRC_FILE="fr.sqlite" #radiocells.org source database file, set "openbmap.sqlite" for entire world database, see https://radiocells.org/downloads for smaller country specific files, for example "pl.sqlite" for Poland -RADIO="" #you can remove LTE if your phone does not support it -TOKEN="" #your OCID token, required to download from OpenCellID. Get your free token at https://opencellid.org/ -fi -TMPDIR='.' #for temporary files only, use disk if you don't have enough RAM, AND remember to have enough disk space in /var/tmp for sqlite temporary files -KEEP_FILES=1 #whether to keep (1) or delete (0) the CSV files after processing - -#do not edit following variables, unless you know what you're doing -EMPTY=',,,,,,,,,,,,,' #dummy empty file for disabled sources -OCI_FILE=$TMPDIR"/ocid.csv" #opencellid temporary file -MOZ_FILE=$TMPDIR"/mozilla.csv" #mozilla temporary file -RCO_FILE=$TMPDIR"/rco.csv" #radiocells.org temporary file -#DEFAULT_CONFIG_END - -#USER_CONFIG_BEGIN -BINDIR=$( dirname "$(readlink -f "$0")" ) #" -if [[ -f "${BINDIR}/config" ]]; then - . "${BINDIR}/config" -fi -#USER_CONFIG_END - -function manage_backup -{ - file=$1 - if [ -s $file ] - then - if [ $KEEP_FILES == "1" ] - then - gzip -kf $file - fi - elif [ -s $file".gz" ] && [ "${file##*.}" == "csv" ] - then - echo "Using" $file".gz backup file" - gzip -dkf $file".gz" - fi -} - - -function download_ocid -{ - URL="https://opencellid.org/ocid/downloads?token=${TOKEN}&type=full&file=cell_towers.csv.gz" - if [ $ENABLE_OCI == "1" ] - then - wget -qO- "$URL" | gunzip | egrep "^($RADIO),($MCC)," > $OCI_FILE - manage_backup $OCI_FILE - else - echo $EMPTY > $OCI_FILE - fi -} - -function download_mozilla -{ - if [ $ENABLE_MOZ == "1" ] - then - NW=`date -u "+%Y-%m-%d"` - wget -qO- "https://d17pt8qph6ncyq.cloudfront.net/export/MLS-full-cell-export-${NW}T000000.csv.gz" | gunzip | egrep "^($RADIO),($MCC)," > $MOZ_FILE - manage_backup $MOZ_FILE - else - echo $EMPTY > $MOZ_FILE - fi -} - -function download_radiocells -{ - if [ $ENABLE_RCO == "1" ] - then - RCO_SELECT="SELECT technology, mcc, mnc, area, cid, NULL, longitude, latitude, 1000 accuracy, measurements, NULL, NULL, NULL, NULL FROM cell_zone;" - wget -qO- "https://cdn.radiocells.org/"$RCO_SRC_FILE > $TMPDIR"/"$RCO_SRC_FILE - sqlite3 -header -csv $TMPDIR"/"$RCO_SRC_FILE "$RCO_SELECT" | egrep "^($RADIO),($MCC)," > $RCO_FILE - rm $TMPDIR"/"$RCO_SRC_FILE - manage_backup $RCO_FILE - else - echo $EMPTY > $RCO_FILE - fi -} - -echo "Downloading data" - -download_ocid & -OP=$! -download_mozilla & -MO=$! -download_radiocells & -RO=$! - -wait $OP -wait $MO -wait $RO - -if [ -s $MOZ_FILE ] && [ -s $OCI_FILE ] && [ -s $RCO_FILE ] -then - -manage_backup lacells.db -rm lacells.db - -echo "Generating database" - -sqlite3 lacells.db <<-SQL -PRAGMA synchronous = OFF; -PRAGMA journal_mode = OFF; - -CREATE TEMP TABLE cells_import (radio TEXT,mcc INTEGER,mnc INTEGER,lac INTEGER,cid INTEGER,unit STRING,longitude NUMERIC,latitude NUMERIC,accuracy INTEGER,samples INTEGER,changeable BOOLEAN,created INTEGER,updated INTEGER, avgSignal INTEGER); -CREATE TABLE cells (mcc INTEGER,mnc INTEGER,lac INTEGER,cid INTEGER,longitude REAL,latitude REAL,altitude REAL,accuracy REAL,samples INTEGER); - -.header on -.mode csv - -.import "$OCI_FILE" cells_import -.import "$MOZ_FILE" cells_import -.import "$RCO_FILE" cells_import - -UPDATE cells_import SET samples=1 WHERE samples IS NULL OR samples < 1; - -INSERT INTO cells -SELECT mcc, mnc, lac, cid, - sum(longitude * samples) / sum(samples) as longitude, - sum(latitude * samples) / sum(samples) as latitude, - -1 as altitude, - sum(accuracy * samples) / sum(samples) as accuracy, - sum(samples) as samples -FROM cells_import -GROUP BY mcc, mnc, lac, cid; - -DROP TABLE cells_import; - -UPDATE cells SET accuracy=500 WHERE accuracy < 500; -UPDATE cells SET accuracy=100000 WHERE accuracy > 100000; - -CREATE INDEX _idx1 ON cells (mcc, mnc, lac, cid); -CREATE INDEX _idx2 ON cells (lac, cid); - -VACUUM; -SQL - -else - echo "Download error" -fi - -rm $OCI_FILE -rm $MOZ_FILE -rm $RCO_FILE diff --git a/modules/private/buildbot/projects/test/__init__.py b/modules/private/buildbot/projects/test/__init__.py deleted file mode 100644 index e2f6f82..0000000 --- a/modules/private/buildbot/projects/test/__init__.py +++ /dev/null @@ -1,197 +0,0 @@ -from buildbot.plugins import * -from buildbot_common.build_helpers import * -import buildbot_common.libvirt as ilibvirt -import os -from buildbot.util import bytes2unicode -import json - -__all__ = [ "configure", "E" ] - -class E(): - PROJECT = "test" - BUILDBOT_URL = "https://git.immae.eu/buildbot/{}/".format(PROJECT) - SOCKET = "unix:/run/buildbot/{}.sock".format(PROJECT) - PB_SOCKET = os.environ["BUILDBOT_WORKER_PORT"] - WORKER_HOST = "{}:{}".format(os.environ["BUILDBOT_HOST"], PB_SOCKET) - RELEASE_PATH = "/var/lib/ftp/release.immae.eu/{}".format(PROJECT) - RELEASE_URL = "https://release.immae.eu/{}".format(PROJECT) - GIT_URL = "https://git.immae.eu/perso/Immae/TestProject.git" - SSH_KEY_PATH = "/var/lib/buildbot/buildbot_key" - LIBVIRT_URL = os.environ["BUILDBOT_VIRT_URL"] + "?keyfile=" + SSH_KEY_PATH - PUPPET_HOST = "root@backup-1.v.immae.eu" - LDAP_HOST = "ldap.immae.eu" - LDAP_DN = "cn=buildbot,ou=services,dc=immae,dc=eu" - LDAP_ROLES_BASE = "ou=roles,ou=hosts,dc=immae,dc=eu" - XMPP_RECIPIENTS = os.environ["BUILDBOT_XMPP_RECIPIENTS"].split(" ") - - # master.cfg - SECRETS_FILE = os.getcwd() + "/secrets" - LDAP_URL = "ldaps://ldap.immae.eu:636" - LDAP_ADMIN_USER = "cn=buildbot,ou=services,dc=immae,dc=eu" - LDAP_BASE = "dc=immae,dc=eu" - LDAP_PATTERN = "(uid=%(username)s)" - LDAP_GROUP_PATTERN = "(&(memberOf=cn=groups,ou=test,cn=buildbot,ou=services,dc=immae,dc=eu)(member=%(dn)s))" - TITLE_URL = "https://git.immae.eu/?p=perso/Immae/TestProject.git;a=summary" - TITLE = "Test project" - -class CustomBase(webhooks.base): - def getChanges(self, request): - try: - content = request.content.read() - args = json.loads(bytes2unicode(content)) - except Exception as e: - raise ValueError("Error loading JSON: " + str(e)) - - args.setdefault("comments", "") - args.setdefault("repository", "") - args.setdefault("author", args.get("who", "unknown")) - - if args["category"] == "deploy_webhook": - args = { - "category": "deploy_webhook", - "comments": "", - "repository": "", - "author": "unknown", - "project": "TestProject", - "properties": { - "environment": args.get("environment", "integration"), - "build": "test_{}.tar.gz".format(args.get("branch", "master")) - } - } - - return ([args], None) - -def deploy_hook_scheduler(project, timer=1): - return schedulers.AnyBranchScheduler( - change_filter=util.ChangeFilter(category="deploy_webhook", project=project), - name="{}_deploy".format(project), treeStableTimer=timer, builderNames=["{}_deploy".format(project)]) - -def configure(c): - c["buildbotURL"] = E.BUILDBOT_URL - c["www"]["port"] = E.SOCKET - - c["www"]["change_hook_dialects"]["base"] = { - "custom_class": CustomBase - } - c['workers'].append(ilibvirt.LibVirtWorker("test-build", - open(E.SECRETS_FILE + "/worker_password", "r").read().rstrip(), - ilibvirt.Connection(E.LIBVIRT_URL), - E.WORKER_HOST)) - c['workers'].append(ilibvirt.LibVirtWorker("test-deploy", - open(E.SECRETS_FILE + "/worker_password", "r").read().rstrip(), - ilibvirt.Connection(E.LIBVIRT_URL), - E.WORKER_HOST)) - - c['schedulers'].append(hook_scheduler("TestProject", timer=1)) - c['schedulers'].append(force_scheduler("force_test", ["TestProject_build"])) - c['schedulers'].append(deploy_scheduler("deploy_test", ["TestProject_deploy"])) - c['schedulers'].append(deploy_hook_scheduler("TestProject", timer=1)) - - c['builders'].append(factory()) - c['builders'].append(deploy_factory()) - - c['services'].append(SlackStatusPush( - name="slack_status_test_project", - builders=["TestProject_build", "TestProject_deploy"], - serverUrl=open(E.SECRETS_FILE + "/slack_webhook", "r").read().rstrip())) - c['services'].append(XMPPStatusPush( - name="xmpp_status_test_project", - builders=["TestProject_build", "TestProject_deploy"], - recipients=E.XMPP_RECIPIENTS, - password=open(E.SECRETS_FILE + "/notify_xmpp_password", "r").read().rstrip())) - -def factory(): - package = util.Interpolate("test_%(kw:clean_branch)s.tar.gz", clean_branch=clean_branch) - package_dest = util.Interpolate("{}/test_%(kw:clean_branch)s.tar.gz".format(E.RELEASE_PATH), clean_branch=clean_branch) - package_url = util.Interpolate("{}/test_%(kw:clean_branch)s.tar.gz".format(E.RELEASE_URL), clean_branch=clean_branch) - - factory = util.BuildFactory() - factory.addStep(steps.Git(logEnviron=False, - repourl=E.GIT_URL, mode="full", method="copy")) - factory.addStep(steps.ShellCommand(name="env", - logEnviron=False, command=["env"])) - factory.addStep(steps.ShellCommand(name="pwd", - logEnviron=False, command=["pwd"])) - factory.addStep(steps.ShellCommand(name="true", - logEnviron=False, command=["true"])) - factory.addStep(steps.ShellCommand(name="echo", - logEnviron=False, command=["echo", package])) - factory.addSteps(package_and_upload(package, package_dest, package_url)) - - return util.BuilderConfig(name="TestProject_build", workernames=["test-build"], factory=factory) - - -def compute_build_infos(): - @util.renderer - def compute(props): - import re, hashlib - build_file = props.getProperty("build") - package_dest = "{}/{}".format(E.RELEASE_PATH, build_file) - version = re.match(r"{0}_(.*).tar.gz".format("test"), build_file).group(1) - with open(package_dest, "rb") as f: - sha = hashlib.sha256(f.read()).hexdigest() - return { - "build_version": version, - "build_hash": sha, - } - return compute - -@util.renderer -def puppet_host(props): - return E.PUPPET_HOST - -def deploy_factory(): - package_dest = util.Interpolate("{}/%(prop:build)s".format(E.RELEASE_PATH)) - - factory = util.BuildFactory() - factory.addStep(steps.MasterShellCommand(command=["test", "-f", package_dest])) - factory.addStep(steps.SetProperties(properties=compute_build_infos())) - factory.addStep(LdapPush(environment=util.Property("environment"), - build_version=util.Property("build_version"), - build_hash=util.Property("build_hash"), - ldap_password=util.Secret("ldap"))) - factory.addStep(steps.MasterShellCommand(command=[ - "ssh", "-o", "UserKnownHostsFile=/dev/null", "-o", "StrictHostKeyChecking=no", "-o", "CheckHostIP=no", "-i", E.SSH_KEY_PATH, puppet_host])) - return util.BuilderConfig(name="TestProject_deploy", workernames=["test-deploy"], factory=factory) - -from twisted.internet import defer -from buildbot.process.buildstep import FAILURE -from buildbot.process.buildstep import SUCCESS -from buildbot.process.buildstep import BuildStep - -class LdapPush(BuildStep): - name = "LdapPush" - renderables = ["environment", "build_version", "build_hash", "ldap_password"] - - def __init__(self, **kwargs): - self.environment = kwargs.pop("environment") - self.build_version = kwargs.pop("build_version") - self.build_hash = kwargs.pop("build_hash") - self.ldap_password = kwargs.pop("ldap_password") - self.ldap_host = kwargs.pop("ldap_host", E.LDAP_HOST) - super().__init__(**kwargs) - - def run(self): - import json - from ldap3 import Reader, Writer, Server, Connection, ObjectDef - server = Server(self.ldap_host) - conn = Connection(server, - user=E.LDAP_DN, - password=self.ldap_password) - conn.bind() - obj = ObjectDef("immaePuppetClass", conn) - r = Reader(conn, obj, - "cn=test.{},{}".format(self.environment, E.LDAP_ROLES_BASE)) - r.search() - if len(r) > 0: - w = Writer.from_cursor(r) - for value in w[0].immaePuppetJson.values: - config = json.loads(value) - if "test_version" in config: - config["test_version"] = self.build_version - config["test_sha256"] = self.build_hash - w[0].immaePuppetJson -= value - w[0].immaePuppetJson += json.dumps(config, indent=" ") - w.commit() - return defer.succeed(SUCCESS) - return defer.succeed(FAILURE) diff --git a/modules/private/certificates.nix b/modules/private/certificates.nix deleted file mode 100644 index 9879946..0000000 --- a/modules/private/certificates.nix +++ /dev/null @@ -1,199 +0,0 @@ -{ lib, pkgs, config, name, ... }: -{ - options.myServices.certificates = { - enable = lib.mkEnableOption "enable certificates"; - webroot = lib.mkOption { - readOnly = true; - default = "/var/lib/acme/acme-challenges"; - }; - certConfig = lib.mkOption { - default = { - webroot = lib.mkForce null; # avoids creation of tmpfiles - email = "ismael@bouya.org"; - postRun = builtins.concatStringsSep "\n" [ - (lib.optionalString config.services.httpd.Prod.enable "systemctl reload httpdProd.service") - (lib.optionalString config.services.httpd.Tools.enable "systemctl reload httpdTools.service") - (lib.optionalString config.services.httpd.Inte.enable "systemctl reload httpdInte.service") - (lib.optionalString config.services.nginx.enable "systemctl reload nginx.service") - ]; - extraLegoRenewFlags = [ "--reuse-key" ]; - keyType = lib.mkDefault "ec256"; # https://github.com/NixOS/nixpkgs/pull/83121 - }; - description = "Default configuration for certificates"; - }; - }; - - config = lib.mkIf config.myServices.certificates.enable { - services.nginx = { - recommendedTlsSettings = true; - virtualHosts = { - "${config.hostEnv.fqdn}" = { - acmeRoot = config.myServices.certificates.webroot; - useACMEHost = name; - forceSSL = true; - }; - }; - }; - services.websites.certs = config.myServices.certificates.certConfig; - myServices.databasesCerts = config.myServices.certificates.certConfig; - myServices.ircCerts = config.myServices.certificates.certConfig; - - security.acme.acceptTerms = true; - security.acme.preliminarySelfsigned = true; - - security.acme.certs = { - "${name}" = config.myServices.certificates.certConfig // { - domain = config.hostEnv.fqdn; - }; - }; - - users.users.acme = { - uid = config.ids.uids.acme; - group = "acme"; - description = "Acme user"; - }; - users.groups.acme = { - gid = config.ids.gids.acme; - }; - - systemd.services = lib.attrsets.mapAttrs' (k: v: - lib.attrsets.nameValuePair "acme-selfsigned-${k}" { - wantedBy = [ "acme-selfsigned-certificates.target" ]; - script = lib.mkAfter '' - cp $workdir/server.crt ${config.security.acme.certs."${k}".directory}/cert.pem - chown '${v.user}:${v.group}' ${config.security.acme.certs."${k}".directory}/cert.pem - chmod ${if v.allowKeysForGroup then "750" else "700"} ${config.security.acme.certs."${k}".directory}/cert.pem - - cp $workdir/ca.crt ${config.security.acme.certs."${k}".directory}/chain.pem - chown '${v.user}:${v.group}' ${config.security.acme.certs."${k}".directory}/chain.pem - chmod ${if v.allowKeysForGroup then "750" else "700"} ${config.security.acme.certs."${k}".directory}/chain.pem - ''; - } - ) config.security.acme.certs // - lib.attrsets.mapAttrs' (k: data: - lib.attrsets.nameValuePair "acme-${k}" { - after = lib.mkAfter [ "bind.service" ]; - serviceConfig = - let - cfg = config.security.acme; - hashOptions = let - domains = builtins.concatStringsSep "," ( - [ data.domain ] ++ (builtins.attrNames data.extraDomains) - ); - certOptions = builtins.concatStringsSep "," [ - (if data.ocspMustStaple then "must-staple" else "no-must-staple") - ]; - in - builtins.hashString "sha256" (builtins.concatStringsSep ";" [ data.keyType domains certOptions ]); - accountsDir = "accounts-${data.keyType}"; - lpath = "acme/${k}"; - apath = "/var/lib/${lpath}"; - spath = "/var/lib/acme/.lego/${k}"; - fileMode = if data.allowKeysForGroup then "640" else "600"; - dirFileMode = if data.allowKeysForGroup then "750" else "700"; - globalOpts = [ "-d" data.domain "--email" data.email "--path" "." "--key-type" data.keyType ] - ++ lib.optionals (cfg.acceptTerms) [ "--accept-tos" ] - ++ lib.optionals (data.dnsProvider != null && !data.dnsPropagationCheck) [ "--dns.disable-cp" ] - ++ lib.concatLists (lib.mapAttrsToList (name: root: [ "-d" name ]) data.extraDomains) - ++ (if data.dnsProvider != null then [ "--dns" data.dnsProvider ] else [ "--http" "--http.webroot" config.myServices.certificates.webroot ]) - ++ lib.optionals (cfg.server != null || data.server != null) ["--server" (if data.server == null then cfg.server else data.server)]; - certOpts = lib.optionals data.ocspMustStaple [ "--must-staple" ]; - runOpts = lib.escapeShellArgs (globalOpts ++ [ "run" ] ++ certOpts); - renewOpts = lib.escapeShellArgs (globalOpts ++ - [ "renew" "--days" (builtins.toString cfg.validMinDays) ] ++ - certOpts ++ data.extraLegoRenewFlags); - forceRenewOpts = lib.escapeShellArgs (globalOpts ++ - [ "renew" "--days" "999" ] ++ - certOpts ++ data.extraLegoRenewFlags); - keyName = builtins.replaceStrings ["*"] ["_"] data.domain; - in { - User = lib.mkForce "acme"; - Group = lib.mkForce "acme"; - WorkingDirectory = lib.mkForce spath; - StateDirectory = lib.mkForce "acme/.lego/${k} acme/.lego/${accountsDir}"; - ExecStartPre = - let - script = pkgs.writeScript "acme-prestart" '' - #!${pkgs.runtimeShell} -e - install -m 0755 -o acme -g acme -d ${config.myServices.certificates.webroot} - ''; - in - lib.mkForce "+${script}"; - ExecStart = lib.mkForce (pkgs.writeScript "acme-start" '' - #!${pkgs.runtimeShell} -e - # lego doesn't check key type after initial creation, we - # need to check for him - if [ -L ${spath}/accounts -o -d ${spath}/accounts ]; then - if [ -L ${spath}/accounts -a "$(readlink ${spath}/accounts)" != ../${accountsDir} ]; then - ln -sfn ../${accountsDir} ${spath}/accounts - mv -f ${spath}/certificates/${keyName}.key ${spath}/certificates/${keyName}.key.old - fi - else - ln -s ../${accountsDir} ${spath}/accounts - fi - # check if domain changed: lego doesn't check by itself - if [ ! -e ${spath}/certificates/${keyName}.crt -o ! -e ${spath}/certificates/${keyName}.key -o ! -e "${spath}/accounts/acme-v02.api.letsencrypt.org/${data.email}/account.json" ]; then - ${pkgs.lego}/bin/lego ${runOpts} - elif [ ! -f ${spath}/currentDomains -o "$(cat ${spath}/currentDomains)" != "${hashOptions}" ]; then - ${pkgs.lego}/bin/lego ${forceRenewOpts} - else - ${pkgs.lego}/bin/lego ${renewOpts} - fi - ''); - ExecStartPost = - let - ISRG_Root_X1 = pkgs.fetchurl { - url = "https://letsencrypt.org/certs/isrgrootx1.pem"; - sha256 = "1la36n2f31j9s03v847ig6ny9lr875q3g7smnq33dcsmf2i5gd92"; - }; - fix_ISRG_Root_X1 = pkgs.writeScript "fix-pem" '' - for file in chain fullchain full; do - if grep -q MIIFYDCCBEigAwIBAgIQQAF3ITfU6UK47naqPGQKtzANBgkqhkiG9w0BAQsFADA "$file.pem"; then - cat ${ISRG_Root_X1} | grep -v " CERTIFICATE" | \ - sed -i.bak -ne "/MIIFYDCCBEigAwIBAgIQQAF3ITfU6UK47naqPGQKtzANBgkqhkiG9w0BAQsFADA/ {r /dev/stdin" -e ":a; n; /Dfvp7OOGAN6dEOM4+qR9sdjoSYKEBpsr6GtPAQw4dy753ec5/ { b }; ba };p" $file.pem - fi - done - ''; - script = pkgs.writeScript "acme-post-start" '' - #!${pkgs.runtimeShell} -e - install -m 0755 -o root -g root -d /var/lib/acme - install -m 0${dirFileMode} -o ${data.user} -g ${data.group} -d /var/lib/acme/${k} - cd /var/lib/acme/${k} - - # Test that existing cert is older than new cert - KEY=${spath}/certificates/${keyName}.key - KEY_CHANGED=no - if [ -e $KEY -a $KEY -nt key.pem ]; then - KEY_CHANGED=yes - cp -p ${spath}/certificates/${keyName}.key key.pem - cp -p ${spath}/certificates/${keyName}.crt fullchain.pem - cp -p ${spath}/certificates/${keyName}.issuer.crt chain.pem - ln -sf fullchain.pem cert.pem - cat key.pem fullchain.pem > full.pem - echo -n "${hashOptions}" > ${spath}/currentDomains - fi - - ${fix_ISRG_Root_X1} - chmod ${fileMode} *.pem - chown '${data.user}:${data.group}' *.pem - - if [ "$KEY_CHANGED" = "yes" ]; then - : # noop in case postRun is empty - ${data.postRun} - fi - ''; - in - lib.mkForce "+${script}"; - }; - } - ) config.security.acme.certs // - { - httpdProd = lib.mkIf config.services.httpd.Prod.enable - { after = [ "acme-selfsigned-certificates.target" ]; wants = [ "acme-selfsigned-certificates.target" ]; }; - httpdTools = lib.mkIf config.services.httpd.Tools.enable - { after = [ "acme-selfsigned-certificates.target" ]; wants = [ "acme-selfsigned-certificates.target" ]; }; - httpdInte = lib.mkIf config.services.httpd.Inte.enable - { after = [ "acme-selfsigned-certificates.target" ]; wants = [ "acme-selfsigned-certificates.target" ]; }; - }; - }; -} diff --git a/modules/private/databases/default.nix b/modules/private/databases/default.nix deleted file mode 100644 index 1241658..0000000 --- a/modules/private/databases/default.nix +++ /dev/null @@ -1,57 +0,0 @@ -{ lib, config, nodes, ... }: -let - cfg = config.myServices.databases; -in -{ - options.myServices = { - databases.enable = lib.mkEnableOption "my databases service"; - databasesCerts = lib.mkOption { - description = "Default databases configurations for certificates as accepted by acme"; - }; - }; - - config.myServices.databases = lib.mkIf cfg.enable { - mariadb = { - enable = true; - ldapConfig = { - inherit (config.myEnv.ldap) host base; - inherit (config.myEnv.databases.mysql.pam) dn filter password; - }; - replicationLdapConfig = { - inherit (config.myEnv.ldap) host base; - inherit (config.myEnv.servers.eldiron.ldap) dn password; - }; - credentials.root = config.myEnv.databases.mysql.systemUsers.root; - }; - - openldap = { - accessFile = ../../../nixops/secrets/ldap.conf; - baseDn = config.myEnv.ldap.base; - rootDn = config.myEnv.ldap.root_dn; - rootPw = config.myEnv.ldap.root_pw; - enable = true; - }; - - postgresql = { - ldapConfig = { - inherit (config.myEnv.ldap) host base; - inherit (config.myEnv.databases.postgresql.pam) dn filter password; - }; - replicationLdapConfig = { - inherit (config.myEnv.ldap) host base; - inherit (config.myEnv.servers.eldiron.ldap) dn password; - }; - authorizedHosts = { - }; - replicationHosts = { - backup-2 = { - ip4 = [config.myEnv.servers.backup-2.ips.main.ip4]; - ip6 = config.myEnv.servers.backup-2.ips.main.ip6; - }; - }; - enable = true; - }; - - redis.enable = true; - }; -} diff --git a/modules/private/databases/mariadb.nix b/modules/private/databases/mariadb.nix deleted file mode 100644 index 101eb3f..0000000 --- a/modules/private/databases/mariadb.nix +++ /dev/null @@ -1,182 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.databases.mariadb; -in { - options.myServices.databases = { - mariadb = { - enable = lib.mkOption { - default = false; - example = true; - description = "Whether to enable mariadb database"; - type = lib.types.bool; - }; - package = lib.mkOption { - type = lib.types.package; - default = pkgs.mariadb; - description = '' - Mariadb package to use. - ''; - }; - credentials = lib.mkOption { - default = {}; - description = "Credentials"; - type = lib.types.attrsOf lib.types.str; - }; - ldapConfig = lib.mkOption { - description = "LDAP configuration to allow PAM identification via LDAP"; - type = lib.types.submodule { - options = { - host = lib.mkOption { type = lib.types.str; }; - base = lib.mkOption { type = lib.types.str; }; - dn = lib.mkOption { type = lib.types.str; }; - password = lib.mkOption { type = lib.types.str; }; - filter = lib.mkOption { type = lib.types.str; }; - }; - }; - }; - replicationLdapConfig = lib.mkOption { - description = "LDAP configuration to allow replication"; - type = lib.types.submodule { - options = { - host = lib.mkOption { type = lib.types.str; }; - base = lib.mkOption { type = lib.types.str; }; - dn = lib.mkOption { type = lib.types.str; }; - password = lib.mkOption { type = lib.types.str; }; - }; - }; - }; - dataDir = lib.mkOption { - type = lib.types.path; - default = "/var/lib/mysql"; - description = '' - The directory where Mariadb stores its data. - ''; - }; - # Output variables - socketsDir = lib.mkOption { - type = lib.types.path; - default = "/run/mysqld"; - description = '' - The directory where Mariadb puts sockets. - ''; - }; - sockets = lib.mkOption { - type = lib.types.attrsOf lib.types.path; - default = { - mysqld = "${cfg.socketsDir}/mysqld.sock"; - }; - readOnly = true; - description = '' - Mariadb sockets - ''; - }; - }; - }; - - config = lib.mkIf cfg.enable { - networking.firewall.allowedTCPPorts = [ 3306 ]; - - # for adminer, ssl is implemented with mysqli only, which is - # currently disabled because it’s not compatible with pam. - # Thus we need to generate two users for each 'remote': one remote - # with SSL, and one localhost without SSL. - # User identified by LDAP: - # CREATE USER foo@% IDENTIFIED VIA pam USING 'mysql' REQUIRE SSL; - # CREATE USER foo@localhost IDENTIFIED VIA pam USING 'mysql'; - - # To create a user (host) for replication: - # CREATE USER 'host'@'%' IDENTIFIED VIA pam USING 'mysql_replication' REQUIRE SSL; - # GRANT REPLICATION SLAVE, REPLICATION CLIENT, RELOAD, LOCK TABLES, SELECT, SHOW VIEW ON *.* TO 'host'@'%'; - # (the lock/select grant permits to let the replication host handle - # the initial fetch of the database) - # % should be valid for both localhost (for cron dumps) and the origin host. - services.mysql = { - enable = true; - package = cfg.package; - dataDir = cfg.dataDir; - settings = { - mysqld = { - ssl_ca = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt"; - ssl_key = "${config.security.acme.certs.mysql.directory}/key.pem"; - ssl_cert = "${config.security.acme.certs.mysql.directory}/fullchain.pem"; - - # for replication - log-bin = "mariadb-bin"; - server-id = "1"; - - # this introduces a small delay before storing on disk, but - # makes it order of magnitudes quicker - innodb_flush_log_at_trx_commit = "0"; - }; - }; - }; - - users.users.mysql.extraGroups = [ "keys" ]; - security.acme.certs."mysql" = config.myServices.databasesCerts // { - user = "mysql"; - group = "mysql"; - domain = "db-1.immae.eu"; - postRun = '' - systemctl restart mysql.service - ''; - }; - - secrets.keys = { - "mysql/mysqldump" = { - permissions = "0400"; - user = "root"; - group = "root"; - text = '' - [mysqldump] - user = root - password = ${cfg.credentials.root} - ''; - }; - "mysql/pam" = { - permissions = "0400"; - user = "mysql"; - group = "mysql"; - text = with cfg.ldapConfig; '' - host ${host} - base ${base} - binddn ${dn} - bindpw ${password} - pam_filter ${filter} - ssl start_tls - ''; - }; - "mysql/pam_replication" = { - permissions = "0400"; - user = "mysql"; - group = "mysql"; - text = with cfg.replicationLdapConfig; '' - host ${host} - base ${base} - binddn ${dn} - bindpw ${password} - pam_login_attribute cn - ssl start_tls - ''; - }; - }; - - security.pam.services = let - pam_ldap = "${pkgs.pam_ldap}/lib/security/pam_ldap.so"; - in { - mysql = { - text = '' - # https://mariadb.com/kb/en/mariadb/pam-authentication-plugin/ - auth required ${pam_ldap} config=${config.secrets.fullPaths."mysql/pam"} - account required ${pam_ldap} config=${config.secrets.fullPaths."mysql/pam"} - ''; - }; - mysql_replication = { - text = '' - auth required ${pam_ldap} config=${config.secrets.fullPaths."mysql/pam_replication"} - account required ${pam_ldap} config=${config.secrets.fullPaths."mysql/pam_replication"} - ''; - }; - }; - - }; -} diff --git a/modules/private/databases/mariadb_replication.nix b/modules/private/databases/mariadb_replication.nix deleted file mode 100644 index 68e6f7f..0000000 --- a/modules/private/databases/mariadb_replication.nix +++ /dev/null @@ -1,251 +0,0 @@ -{ pkgs, config, lib, ... }: -let - cfg = config.myServices.databasesReplication.mariadb; -in -{ - options.myServices.databasesReplication.mariadb = { - enable = lib.mkEnableOption "Enable mariadb replication"; - base = lib.mkOption { - type = lib.types.path; - description = '' - Base path to put the replications - ''; - }; - hosts = lib.mkOption { - default = {}; - description = '' - Hosts to backup - ''; - type = lib.types.attrsOf (lib.types.submodule { - options = { - package = lib.mkOption { - type = lib.types.package; - default = pkgs.mariadb; - description = '' - Mariadb package for this host - ''; - }; - serverId = lib.mkOption { - type = lib.types.int; - description = '' - Server id to use for replication cluster (must be unique among the cluster!) - ''; - }; - host = lib.mkOption { - type = lib.types.str; - description = '' - Host to connect to - ''; - }; - port = lib.mkOption { - type = lib.types.str; - description = '' - Port to connect to - ''; - }; - user = lib.mkOption { - type = lib.types.str; - description = '' - User to connect as - ''; - }; - password = lib.mkOption { - type = lib.types.str; - description = '' - Password to use - ''; - }; - dumpUser = lib.mkOption { - type = lib.types.str; - description = '' - User who can do a dump - ''; - }; - dumpPassword = lib.mkOption { - type = lib.types.str; - description = '' - Password for the dump user - ''; - }; - }; - }); - }; - }; - - config = lib.mkIf cfg.enable { - users.users.mysql = { - description = "MySQL server user"; - group = "mysql"; - uid = config.ids.uids.mysql; - extraGroups = [ "keys" ]; - }; - users.groups.mysql.gid = config.ids.gids.mysql; - - secrets.keys = lib.listToAttrs (lib.flatten (lib.mapAttrsToList (name: hcfg: [ - (lib.nameValuePair "mysql_replication/${name}/slave_init_commands" { - user = "mysql"; - group = "mysql"; - permissions = "0400"; - text = '' - CHANGE MASTER TO master_host="${hcfg.host}", master_port=${hcfg.port}, master_user="${hcfg.user}", master_password="${hcfg.password}", master_ssl=1, master_use_gtid=slave_pos; - START SLAVE; - ''; - }) - (lib.nameValuePair "mysql_replication/${name}/mysqldump_remote" { - permissions = "0400"; - user = "root"; - group = "root"; - text = '' - [mysqldump] - user = ${hcfg.user} - password = ${hcfg.password} - ''; - }) - (lib.nameValuePair "mysql_replication/${name}/mysqldump" { - permissions = "0400"; - user = "root"; - group = "root"; - text = '' - [mysqldump] - user = ${hcfg.dumpUser} - password = ${hcfg.dumpPassword} - ''; - }) - (lib.nameValuePair "mysql_replication/${name}/client" { - permissions = "0400"; - user = "mysql"; - group = "mysql"; - text = '' - [client] - user = ${hcfg.dumpUser} - password = ${hcfg.dumpPassword} - ''; - }) - ]) cfg.hosts)); - - services.cron = { - enable = true; - systemCronJobs = lib.flatten (lib.mapAttrsToList (name: hcfg: - let - dataDir = "${cfg.base}/${name}/mysql"; - backupDir = "${cfg.base}/${name}/mysql_backup"; - backup_script = pkgs.writeScript "backup_mysql_${name}" '' - #!${pkgs.stdenv.shell} - - set -euo pipefail - - filename=${backupDir}/$(${pkgs.coreutils}/bin/date -Iminutes).sql - ${hcfg.package}/bin/mysqldump \ - --defaults-file=${config.secrets.fullPaths."mysql_replication/${name}/mysqldump"} \ - -S /run/mysqld_${name}/mysqld.sock \ - --gtid \ - --master-data \ - --flush-privileges \ - --ignore-database=netdata \ - --all-databases > $filename - ${pkgs.gzip}/bin/gzip $filename - ''; - u = pkgs.callPackage ./utils.nix {}; - cleanup_script = pkgs.writeScript "cleanup_mysql_${name}" (u.exponentialDumps "sql.gz" backupDir); - in [ - "0 22,4,10,16 * * * root ${backup_script}" - "0 3 * * * root ${cleanup_script}" - ]) cfg.hosts); - }; - - system.activationScripts = lib.attrsets.mapAttrs' (name: hcfg: - lib.attrsets.nameValuePair "mysql_replication_${name}" { - deps = [ "users" "groups" ]; - text = '' - install -m 0700 -o mysql -g mysql -d ${cfg.base}/${name}/mysql - install -m 0700 -o mysql -g mysql -d ${cfg.base}/${name}/mysql_backup - ''; - }) cfg.hosts; - - environment.etc = lib.attrsets.mapAttrs' (name: hcfg: - lib.attrsets.nameValuePair "mysql/${name}_my.cnf" { - text = '' - [mysqld] - skip-networking - socket = /run/mysqld_${name}/mysqld.sock - datadir = ${cfg.base}/${name}/mysql/ - log-bin = mariadb-bin - server-id = ${builtins.toString hcfg.serverId} - ''; - } - ) cfg.hosts; - - systemd.services = lib.attrsets.mapAttrs' (name: hcfg: - let - dataDir = "${cfg.base}/${name}/mysql"; - in - lib.attrsets.nameValuePair "mysql_backup_${name}" { - description = "Mysql replication for ${name}"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - restartTriggers = [ config.environment.etc."mysql/${name}_my.cnf".source ]; - unitConfig.RequiresMountsFor = dataDir; - - preStart = '' - if ! test -e ${dataDir}/mysql; then - if ! test -e ${dataDir}/initial.sql; then - ${hcfg.package}/bin/mysqldump \ - --defaults-file=${config.secrets.fullPaths."mysql_replication/${name}/mysqldump_remote"} \ - -h ${hcfg.host} \ - -P ${hcfg.port} \ - --ssl \ - --gtid \ - --flush-privileges \ - --master-data \ - --all-databases > ${dataDir}/initial.sql - fi - - ${hcfg.package}/bin/mysql_install_db \ - --defaults-file=/etc/mysql/${name}_my.cnf \ - --user=mysql \ - --datadir=${dataDir} \ - --basedir=${hcfg.package} - fi - ''; - - serviceConfig = { - User = "mysql"; - Group = "mysql"; - RuntimeDirectory = "mysqld_${name}"; - RuntimeDirectoryMode = "0755"; - SupplementaryGroups = "keys"; - PermissionsStartOnly = true; - Type = "notify"; - - ExecStart = "${hcfg.package}/bin/mysqld --defaults-file=/etc/mysql/${name}_my.cnf --user=mysql --datadir=${dataDir} --basedir=${hcfg.package}"; - ExecStartPost = - let - sql_before = pkgs.writeText "mysql-initial-before" '' - DROP DATABASE test; - INSTALL SONAME 'auth_pam'; - ''; - setupScript = pkgs.writeScript "mysql-setup" '' - #!${pkgs.runtimeShell} -e - - if test -e ${dataDir}/initial.sql; then - cat \ - ${sql_before} \ - ${dataDir}/initial.sql \ - ${config.secrets.fullPaths."mysql_replication/${name}/slave_init_commands"} \ - | ${hcfg.package}/bin/mysql \ - --defaults-file=/etc/mysql/${name}_my.cnf \ - -S /run/mysqld_${name}/mysqld.sock \ - --user=root - rm -f ${dataDir}/initial.sql - fi - ''; - in - "+${setupScript}"; - # initial dump can take a long time - TimeoutStartSec="infinity"; - TimeoutStopSec = 120; - }; - }) cfg.hosts; - }; -} - diff --git a/modules/private/databases/openldap/default.nix b/modules/private/databases/openldap/default.nix deleted file mode 100644 index d35aca0..0000000 --- a/modules/private/databases/openldap/default.nix +++ /dev/null @@ -1,147 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.databases.openldap; - ldapConfig = let - eldiron_schemas = pkgs.callPackage ./eldiron_schemas.nix {}; - in '' - ${eldiron_schemas} - - pidfile ${cfg.pids.pid} - argsfile ${cfg.pids.args} - - moduleload back_hdb - backend hdb - - TLSCertificateFile ${config.security.acme.certs.ldap.directory}/cert.pem - TLSCertificateKeyFile ${config.security.acme.certs.ldap.directory}/key.pem - TLSCACertificateFile ${config.security.acme.certs.ldap.directory}/fullchain.pem - TLSCACertificatePath ${pkgs.cacert.unbundled}/etc/ssl/certs/ - #This makes openldap crash - #TLSCipherSuite DEFAULT - - sasl-host kerberos.immae.eu - ''; -in -{ - options.myServices.databases = { - openldap = { - enable = lib.mkOption { - default = false; - example = true; - description = "Whether to enable ldap"; - type = lib.types.bool; - }; - baseDn = lib.mkOption { - type = lib.types.str; - description = '' - Base DN for LDAP - ''; - }; - rootDn = lib.mkOption { - type = lib.types.str; - description = '' - Root DN - ''; - }; - rootPw = lib.mkOption { - type = lib.types.str; - description = '' - Root (Hashed) password - ''; - }; - accessFile = lib.mkOption { - type = lib.types.path; - description = '' - The file path that defines the access - ''; - }; - dataDir = lib.mkOption { - type = lib.types.path; - default = "/var/lib/openldap"; - description = '' - The directory where Openldap stores its data. - ''; - }; - socketsDir = lib.mkOption { - type = lib.types.path; - default = "/run/slapd"; - description = '' - The directory where Openldap puts sockets and pid files. - ''; - }; - # Output variables - pids = lib.mkOption { - type = lib.types.attrsOf lib.types.path; - default = { - pid = "${cfg.socketsDir}/slapd.pid"; - args = "${cfg.socketsDir}/slapd.args"; - }; - readOnly = true; - description = '' - Slapd pid files - ''; - }; - }; - }; - - config = lib.mkIf cfg.enable { - secrets.keys = { - "ldap/password" = { - permissions = "0400"; - user = "openldap"; - group = "openldap"; - text = "rootpw ${cfg.rootPw}"; - }; - "ldap/access" = { - permissions = "0400"; - user = "openldap"; - group = "openldap"; - text = builtins.readFile cfg.accessFile; - }; - "ldap" = { - permissions = "0500"; - user = "openldap"; - group = "openldap"; - isDir = true; - }; - }; - users.users.openldap.extraGroups = [ "keys" ]; - networking.firewall.allowedTCPPorts = [ 636 389 ]; - - security.acme.certs."ldap" = config.myServices.databasesCerts // { - user = "openldap"; - group = "openldap"; - domain = "ldap.immae.eu"; - postRun = '' - systemctl restart openldap.service - ''; - }; - - services.filesWatcher.openldap = { - restart = true; - paths = [ config.secrets.fullPaths."ldap" ]; - }; - - services.openldap = { - enable = true; - dataDir = cfg.dataDir; - urlList = [ "ldap://" "ldaps://" ]; - logLevel = "none"; - extraConfig = ldapConfig; - extraDatabaseConfig = '' - moduleload memberof - overlay memberof - - moduleload syncprov - overlay syncprov - syncprov-checkpoint 100 10 - - include ${config.secrets.fullPaths."ldap/access"} - ''; - rootpwFile = config.secrets.fullPaths."ldap/password"; - suffix = cfg.baseDn; - rootdn = cfg.rootDn; - database = "hdb"; - }; - }; -} diff --git a/modules/private/databases/openldap/eldiron_schemas.nix b/modules/private/databases/openldap/eldiron_schemas.nix deleted file mode 100644 index cf45ebe..0000000 --- a/modules/private/databases/openldap/eldiron_schemas.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ fetchurl, openldap }: -let - kerberosSchema = fetchurl { - url = "https://raw.githubusercontent.com/krb5/krb5/0bdd3b8058ed4ec9acc050e316bea86f6830b15f/src/plugins/kdb/ldap/libkdb_ldap/kerberos.schema"; - sha256 = "17fnkkf6s3lznsl7wp6914pqsc78d038rh38l638big8z608ksww"; - }; - puppetSchema = fetchurl { - url = "https://raw.githubusercontent.com/puppetlabs/puppet/bf7c108825ffdb5ea89cf3e500d55d27ab64b8d2/ext/ldap/puppet.schema"; - sha256 = "11bjf5zfvqlim7p9vddcafs0wiq3v8ys77x8h6fbp9c6bdfh0awh"; - }; - schemas = [ - #"${openldap}/etc/schema/core.schema" - #"${openldap}/etc/schema/cosine.schema" - #"${openldap}/etc/schema/inetorgperson.schema" - #"${openldap}/etc/schema/nis.schema" - puppetSchema - kerberosSchema - ./immae.schema - ]; -in - builtins.concatStringsSep "\n" (map (v: "include ${v}") schemas) diff --git a/modules/private/databases/openldap/immae.schema b/modules/private/databases/openldap/immae.schema deleted file mode 100644 index d2ef972..0000000 --- a/modules/private/databases/openldap/immae.schema +++ /dev/null @@ -1,179 +0,0 @@ -# vim: set filetype=slapd: -objectIdentifier Immaeroot 1.3.6.1.4.1.50071 - -objectIdentifier Immae Immaeroot:2 -objectIdentifier ImmaeattributeType Immae:3 -objectIdentifier ImmaeobjectClass Immae:4 - -# TT-RSS -attributetype ( ImmaeattributeType:1 NAME 'immaeTtrssLogin' - DESC 'login for TTRSS' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) - -objectclass ( ImmaeobjectClass:1 NAME 'immaeTtrssClass' - DESC 'Expansion of the existing object classes for ttrss' - SUP top AUXILIARY - MUST ( immaeTtrssLogin ) ) - -# FTP -attributetype ( ImmaeattributeType:2 NAME 'immaeFtpDirectory' - DESC 'home directory for ftp' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) - -attributetype ( ImmaeattributeType:3 NAME 'immaeFtpUid' - DESC 'user id for ftp' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) - -attributetype ( ImmaeattributeType:4 NAME 'immaeFtpGid' - DESC 'group id for ftp' - EQUALITY integerMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) - -objectclass ( ImmaeobjectClass:2 NAME 'immaeFtpClass' - DESC 'Expansion of the existing object classes for ftp' - SUP top AUXILIARY - MUST ( immaeFtpDirectory $ immaeFtpGid $ immaeFtpUid ) ) - - -# SSH keys -attributetype ( ImmaeattributeType:5 NAME 'immaeSshKey' - DESC 'OpenSSH Public key' - EQUALITY octetStringMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 ) - -objectClass ( ImmaeobjectClass:3 NAME 'immaeSshClass' - DESC 'OpenSSH class' - SUP top AUXILIARY - MAy ( immaeSSHKey ) ) - -# Specific access -attributetype (ImmaeattributeType:6 NAME 'immaeAccessDn' - EQUALITY distinguishedNameMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 ) - -attributetype (ImmaeattributeType:17 NAME 'immaeAccessWriteDn' - EQUALITY distinguishedNameMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 ) - -attributetype (ImmaeattributeType:18 NAME 'immaeAccessReadSubtree' - EQUALITY distinguishedNameMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 ) - -objectClass ( ImmaeobjectClass:4 NAME 'immaeAccessClass' - DESC 'Access class' - SUP top AUXILIARY - MAY ( immaeAccessDn $ immaeAccessWriteDn $ immaeAccessReadSubtree ) ) - -# Xmpp uid -attributetype ( ImmaeattributeType:7 NAME 'immaeXmppUid' - DESC 'user part for Xmpp' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) - -objectclass ( ImmaeobjectClass:5 NAME 'immaeXmppClass' - DESC 'Expansion of the existing object classes for XMPP' - SUP top AUXILIARY - MUST ( immaeXmppUid ) ) - -# Postfix accounts -attributetype ( ImmaeattributeType:8 NAME 'immaePostfixAddress' - DESC 'the dovecot address to match as username' - EQUALITY caseIgnoreIA5Match - SUBSTR caseIgnoreIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) - -attributetype ( ImmaeattributeType:9 NAME 'immaePostfixHome' - DESC 'the postfix home directory' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) - -attributetype ( ImmaeattributeType:10 NAME 'immaePostfixMail' - DESC 'the dovecot mail location' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) - -attributetype ( ImmaeattributeType:11 NAME 'immaePostfixUid' - DESC 'the dovecot uid' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) - -attributetype ( ImmaeattributeType:12 NAME 'immaePostfixGid' - DESC 'the dovecot gid' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) - -objectclass ( ImmaeobjectClass:6 NAME 'immaePostfixClass' - DESC 'Expansion of the existing object classes for Postfix' - SUP top AUXILIARY - MUST ( immaePostfixAddress $ immaePostfixHome $ - immaePostfixMail $ immaePostfixUid $ immaePostfixGid ) - ) - -# Tinc informations -# Domaine = une classe a part ou une partie du dn ? -# attributetype ( ImmaeattributeType:13 NAME 'immaeTincIpSegment' -# DESC 'the internal ip segment in tinc' -# EQUALITY caseIgnoreIA5Match -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) -# -# attributetype ( ImmaeattributeType:14 NAME 'immaeTincSubdomain' -# DESC 'the host subdomain' -# EQUALITY caseIgnoreIA5Match -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) -# -# attributetype ( ImmaeattributeType:15 NAME 'immaeTincHostname' -# DESC 'the host name' -# EQUALITY caseIgnoreIA5Match -# SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) -# -# objectclass ( ImmaeobjectClass:7 NAME 'immaeTincHostClass' -# DESC 'Expansion of the existing object classes for Tinc' -# SUP top AUXILIARY -# MUST ( immaeTincInternalIp $ immaeTincSubdomain $ -# immaeTincHostname ) -# ) - -attributetype (ImmaeattributeType:16 NAME 'immaePuppetJson' - DESC 'Puppet hiera json' - EQUALITY octetStringMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 ) - -objectclass ( ImmaeobjectClass:8 NAME 'immaePuppetClass' - DESC 'Expansion of the existing object classes for Puppet' - SUP top AUXILIARY - MUST ( immaePuppetJson ) - ) - -attributetype (ImmaeattributeType:19 NAME 'immaeTaskId' - DESC 'Taskwarrior server Org:Name:Key' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) - -objectclass ( ImmaeobjectClass:9 NAME 'immaeTaskClass' - DESC 'Expansion of the existing object classes for Task' - SUP top AUXILIARY - MUST ( immaeTaskId ) - ) - -# Peertube uid -attributetype ( ImmaeattributeType:20 NAME 'immaePeertubeId' - DESC 'login for Peertube' - EQUALITY caseIgnoreMatch - SUBSTR caseIgnoreSubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} ) - -objectclass ( ImmaeobjectClass:10 NAME 'immaePeertubeClass' - DESC 'Expansion of the existing object classes for peertube' - SUP top AUXILIARY - MUST ( immaePeertubeId ) ) - - -# Last: -# attributetype ( ImmaeattributeType:20 NAME 'immaePeertubeId' -# objectclass ( ImmaeobjectClass:10 NAME 'immaePeertubeClass' diff --git a/modules/private/databases/openldap_replication.nix b/modules/private/databases/openldap_replication.nix deleted file mode 100644 index b456323..0000000 --- a/modules/private/databases/openldap_replication.nix +++ /dev/null @@ -1,166 +0,0 @@ -{ pkgs, config, lib, ... }: -let - cfg = config.myServices.databasesReplication.openldap; - eldiron_schemas = pkgs.callPackage ./openldap/eldiron_schemas.nix {}; - ldapConfig = hcfg: name: pkgs.writeText "slapd.conf" '' - include ${pkgs.openldap}/etc/schema/core.schema - include ${pkgs.openldap}/etc/schema/cosine.schema - include ${pkgs.openldap}/etc/schema/inetorgperson.schema - include ${pkgs.openldap}/etc/schema/nis.schema - ${eldiron_schemas} - pidfile /run/slapd_${name}/slapd.pid - argsfile /run/slapd_${name}/slapd.args - - moduleload back_hdb - backend hdb - database hdb - - suffix "${hcfg.base}" - rootdn "cn=root,${hcfg.base}" - directory ${cfg.base}/${name}/openldap - - index objectClass eq - index uid pres,eq - index entryUUID eq - - include ${config.secrets.fullPaths."openldap_replication/${name}/replication_config"} - ''; -in -{ - options.myServices.databasesReplication.openldap = { - enable = lib.mkEnableOption "Enable openldap replication"; - base = lib.mkOption { - type = lib.types.path; - description = '' - Base path to put the replications - ''; - }; - hosts = lib.mkOption { - default = {}; - description = '' - Hosts to backup - ''; - type = lib.types.attrsOf (lib.types.submodule { - options = { - package = lib.mkOption { - type = lib.types.package; - default = pkgs.openldap; - description = '' - Openldap package for this host - ''; - }; - url = lib.mkOption { - type = lib.types.str; - description = '' - Host to connect to - ''; - }; - base = lib.mkOption { - type = lib.types.str; - description = '' - Base DN to replicate - ''; - }; - dn = lib.mkOption { - type = lib.types.str; - description = '' - DN to use - ''; - }; - password = lib.mkOption { - type = lib.types.str; - description = '' - Password to use - ''; - }; - }; - }); - }; - }; - - config = lib.mkIf cfg.enable { - users.users.openldap = { - description = "Openldap database user"; - group = "openldap"; - uid = config.ids.uids.openldap; - extraGroups = [ "keys" ]; - }; - users.groups.openldap.gid = config.ids.gids.openldap; - - secrets.keys = lib.listToAttrs (lib.flatten (lib.mapAttrsToList (name: hcfg: [ - (lib.nameValuePair "openldap_replication/${name}/replication_config" { - user = "openldap"; - group = "openldap"; - permissions = "0400"; - text = '' - syncrepl rid=000 - provider=${hcfg.url} - type=refreshAndPersist - searchbase="${hcfg.base}" - retry="5 10 300 +" - attrs="*,+" - schemachecking=off - bindmethod=simple - binddn="${hcfg.dn}" - credentials="${hcfg.password}" - ''; - }) - (lib.nameValuePair "openldap_replication/${name}/replication_password" { - user = "openldap"; - group = "openldap"; - permissions = "0400"; - text = hcfg.password; - }) - ]) cfg.hosts)); - - services.cron = { - enable = true; - systemCronJobs = lib.flatten (lib.mapAttrsToList (name: hcfg: - let - dataDir = "${cfg.base}/${name}/openldap"; - backupDir = "${cfg.base}/${name}/openldap_backup"; - backup_script = pkgs.writeScript "backup_openldap_${name}" '' - #!${pkgs.stdenv.shell} - - ${hcfg.package}/bin/slapcat -b "${hcfg.base}" -f ${ldapConfig hcfg name} -l ${backupDir}/$(${pkgs.coreutils}/bin/date -Iminutes).ldif - ''; - u = pkgs.callPackage ./utils.nix {}; - cleanup_script = pkgs.writeScript "cleanup_openldap_${name}" (u.exponentialDumps "ldif" backupDir); - in [ - "0 22,4,10,16 * * * root ${backup_script}" - "0 3 * * * root ${cleanup_script}" - ]) cfg.hosts); - }; - - system.activationScripts = lib.attrsets.mapAttrs' (name: hcfg: - lib.attrsets.nameValuePair "openldap_replication_${name}" { - deps = [ "users" "groups" ]; - text = '' - install -m 0700 -o openldap -g openldap -d ${cfg.base}/${name}/openldap - install -m 0700 -o openldap -g openldap -d ${cfg.base}/${name}/openldap_backup - ''; - }) cfg.hosts; - - systemd.services = lib.attrsets.mapAttrs' (name: hcfg: - let - dataDir = "${cfg.base}/${name}/openldap"; - in - lib.attrsets.nameValuePair "openldap_backup_${name}" { - description = "Openldap replication for ${name}"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - unitConfig.RequiresMountsFor = dataDir; - - preStart = '' - mkdir -p /run/slapd_${name} - chown -R "openldap:openldap" /run/slapd_${name} - ''; - - serviceConfig = { - ExecStart = "${hcfg.package}/libexec/slapd -d 0 -u openldap -g openldap -f ${ldapConfig hcfg name}"; - }; - }) cfg.hosts; - }; -} - - diff --git a/modules/private/databases/postgresql.nix b/modules/private/databases/postgresql.nix deleted file mode 100644 index a6c4cc9..0000000 --- a/modules/private/databases/postgresql.nix +++ /dev/null @@ -1,228 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.databases.postgresql; -in { - options.myServices.databases = { - postgresql = { - enable = lib.mkOption { - default = false; - example = true; - description = "Whether to enable postgresql database"; - type = lib.types.bool; - }; - package = lib.mkOption { - type = lib.types.package; - default = pkgs.postgresql; - description = '' - Postgresql package to use. - ''; - }; - ldapConfig = lib.mkOption { - description = "LDAP configuration to allow PAM identification via LDAP"; - type = lib.types.submodule { - options = { - host = lib.mkOption { type = lib.types.str; }; - base = lib.mkOption { type = lib.types.str; }; - dn = lib.mkOption { type = lib.types.str; }; - password = lib.mkOption { type = lib.types.str; }; - filter = lib.mkOption { type = lib.types.str; }; - }; - }; - }; - replicationLdapConfig = lib.mkOption { - description = "LDAP configuration to allow replication"; - type = lib.types.submodule { - options = { - host = lib.mkOption { type = lib.types.str; }; - base = lib.mkOption { type = lib.types.str; }; - dn = lib.mkOption { type = lib.types.str; }; - password = lib.mkOption { type = lib.types.str; }; - }; - }; - }; - authorizedHosts = lib.mkOption { - default = {}; - description = "Hosts to allow connections from"; - type = lib.types.attrsOf (lib.types.listOf (lib.types.submodule { - options = { - method = lib.mkOption { - default = "md5"; - type = lib.types.str; - }; - username = lib.mkOption { - default = "all"; - type = lib.types.str; - }; - database = lib.mkOption { - default = "all"; - type = lib.types.str; - }; - ip4 = lib.mkOption { - default = []; - type = lib.types.listOf lib.types.str; - }; - ip6 = lib.mkOption { - default = []; - type = lib.types.listOf lib.types.str; - }; - }; - })); - }; - replicationHosts = lib.mkOption { - default = {}; - description = "Hosts to allow replication from"; - type = lib.types.attrsOf (lib.types.submodule { - options = { - ip4 = lib.mkOption { - type = lib.types.listOf lib.types.str; - }; - ip6 = lib.mkOption { - type = lib.types.listOf lib.types.str; - }; - }; - }); - }; - # Output variables - socketsDir = lib.mkOption { - type = lib.types.path; - default = "/run/postgresql"; - description = '' - The directory where Postgresql puts sockets. - ''; - readOnly = true; - }; - }; - }; - - config = lib.mkIf cfg.enable { - networking.firewall.allowedTCPPorts = [ 5432 ]; - - security.acme.certs."postgresql" = config.myServices.databasesCerts // { - user = "postgres"; - group = "postgres"; - domain = "db-1.immae.eu"; - postRun = '' - systemctl reload postgresql.service - ''; - }; - - systemd.services.postgresql.serviceConfig = { - SupplementaryGroups = "keys"; - }; - systemd.services.postgresql.postStart = lib.mkAfter '' - # This line is already defined in 19.09 - PSQL="${pkgs.sudo}/bin/sudo -u postgres psql --port=5432" - - ${builtins.concatStringsSep "\n" (lib.mapAttrsToList (role: _: '' - $PSQL -tAc "SELECT 1 FROM pg_roles WHERE rolname='${role}'" \ - | grep -q 1 \ - || $PSQL -tAc 'CREATE USER "${role}" WITH REPLICATION' - '') cfg.replicationHosts)} - - ${builtins.concatStringsSep "\n" (lib.mapAttrsToList (role: _: - let - sname = builtins.replaceStrings ["-"] ["_"] role; - in - '' - $PSQL -tAc "SELECT 1 FROM pg_replication_slots WHERE slot_name='${sname}'" \ - | grep -q 1 \ - || $PSQL -tAc "SELECT * FROM pg_create_physical_replication_slot('${sname}')" - '') cfg.replicationHosts)} - ''; - - services.postgresql = { - enable = true; - package = cfg.package; - enableTCPIP = true; - extraConfig = '' - max_connections = 100 - wal_level = logical - shared_buffers = 512MB - work_mem = 10MB - max_wal_size = 1GB - min_wal_size = 80MB - log_timezone = 'Europe/Paris' - datestyle = 'iso, mdy' - timezone = 'Europe/Paris' - lc_messages = 'en_US.UTF-8' - lc_monetary = 'en_US.UTF-8' - lc_numeric = 'en_US.UTF-8' - lc_time = 'en_US.UTF-8' - default_text_search_config = 'pg_catalog.english' - # this introduces a small delay before storing on disk, but - # makes it order of magnitudes quicker - synchronous_commit = off - ssl = on - ssl_cert_file = '${config.security.acme.certs.postgresql.directory}/fullchain.pem' - ssl_key_file = '${config.security.acme.certs.postgresql.directory}/key.pem' - ''; - authentication = let - hosts = builtins.concatStringsSep "\n" ( - lib.lists.flatten (lib.mapAttrsToList (k: vs: map (v: - map (ip6: "hostssl ${v.database} ${v.username} ${ip6}/128 ${v.method}") v.ip6 - ++ map (ip4: "hostssl ${v.database} ${v.username} ${ip4}/32 ${v.method}") v.ip4 - ) vs) cfg.authorizedHosts - )); - replication = builtins.concatStringsSep "\n" ( - lib.lists.flatten (lib.mapAttrsToList (k: v: - map (ip6: "hostssl replication ${k} ${ip6}/128 pam pamservice=postgresql_replication") v.ip6 - ++ map (ip4: "hostssl replication ${k} ${ip4}/32 pam pamservice=postgresql_replication") v.ip4 - ) cfg.replicationHosts - )); - in '' - local all postgres ident - local all all md5 - ${hosts} - hostssl all all all pam - ${replication} - ''; - }; - - secrets.keys = { - "postgresql/pam" = { - permissions = "0400"; - group = "postgres"; - user = "postgres"; - text = with cfg.ldapConfig; '' - host ${host} - base ${base} - binddn ${dn} - bindpw ${password} - pam_filter ${filter} - ssl start_tls - ''; - }; - "postgresql/pam_replication" = { - permissions = "0400"; - group = "postgres"; - user = "postgres"; - text = with cfg.replicationLdapConfig; '' - host ${host} - base ${base} - binddn ${dn} - bindpw ${password} - pam_login_attribute cn - ssl start_tls - ''; - }; - }; - - security.pam.services = let - pam_ldap = "${pkgs.pam_ldap}/lib/security/pam_ldap.so"; - in { - postgresql = { - text = '' - auth required ${pam_ldap} config=${config.secrets.fullPaths."postgresql/pam"} - account required ${pam_ldap} config=${config.secrets.fullPaths."postgresql/pam"} - ''; - }; - postgresql_replication = { - text = '' - auth required ${pam_ldap} config=${config.secrets.fullPaths."postgresql/pam_replication"} - account required ${pam_ldap} config=${config.secrets.fullPaths."postgresql/pam_replication"} - ''; - }; - }; - }; -} - diff --git a/modules/private/databases/postgresql_replication.nix b/modules/private/databases/postgresql_replication.nix deleted file mode 100644 index 135bbed..0000000 --- a/modules/private/databases/postgresql_replication.nix +++ /dev/null @@ -1,182 +0,0 @@ -{ pkgs, config, lib, ... }: -let - cfg = config.myServices.databasesReplication.postgresql; -in -{ - options.myServices.databasesReplication.postgresql = { - enable = lib.mkEnableOption "Enable postgresql replication"; - base = lib.mkOption { - type = lib.types.path; - description = '' - Base path to put the replications - ''; - }; - mainPackage = lib.mkOption { - type = lib.types.package; - default = pkgs.postgresql; - description = '' - Postgresql package available in shell - ''; - }; - hosts = lib.mkOption { - default = {}; - description = '' - Hosts to backup - ''; - type = lib.types.attrsOf (lib.types.submodule { - options = { - package = lib.mkOption { - type = lib.types.package; - default = pkgs.postgresql; - description = '' - Postgresql package for this host - ''; - }; - slot = lib.mkOption { - type = lib.types.str; - description = '' - Slot to use for replication - ''; - }; - connection = lib.mkOption { - type = lib.types.str; - description = '' - Connection string to access the psql master - ''; - }; - }; - }); - }; - }; - - config = lib.mkIf cfg.enable { - users.users.postgres = { - name = "postgres"; - uid = config.ids.uids.postgres; - group = "postgres"; - description = "PostgreSQL server user"; - home = "/var/lib/postgresql"; - useDefaultShell = true; - extraGroups = [ "keys" ]; - }; - users.groups.postgres.gid = config.ids.gids.postgres; - environment.systemPackages = [ cfg.mainPackage ]; - - secrets.keys = lib.listToAttrs (lib.flatten (lib.mapAttrsToList (name: hcfg: [ - (lib.nameValuePair "postgresql_replication/${name}/recovery.conf" { - user = "postgres"; - group = "postgres"; - permissions = "0400"; - text = '' - standby_mode = on - primary_conninfo = '${hcfg.connection}?sslmode=require' - primary_slot_name = '${hcfg.slot}' - ''; - }) - (lib.nameValuePair "postgresql_replication/${name}/connection_string" { - user = "postgres"; - group = "postgres"; - permissions = "0400"; - text = hcfg.connection; - }) - (lib.nameValuePair "postgresql_replication/${name}/postgresql.conf" { - user = "postgres"; - group = "postgres"; - permissions = "0400"; - text = let - dataDir = "${cfg.base}/${name}/postgresql"; - in '' - listen_addresses = ''' - unix_socket_directories = '${dataDir}' - data_directory = '${dataDir}' - wal_level = logical - ''; - }) - ]) cfg.hosts)); - - services.cron = { - enable = true; - systemCronJobs = lib.flatten (lib.mapAttrsToList (name: hcfg: - let - dataDir = "${cfg.base}/${name}/postgresql"; - backupDir = "${cfg.base}/${name}/postgresql_backup"; - backup_script = pkgs.writeScript "backup_psql_${name}" '' - #!${pkgs.stdenv.shell} - - set -euo pipefail - - resume_replication() { - ${hcfg.package}/bin/psql -h ${dataDir} -c "SELECT pg_wal_replay_resume();" >/dev/null || echo "impossible to resume replication" - } - - trap resume_replication EXIT - - ${hcfg.package}/bin/psql -h ${dataDir} -c "SELECT pg_wal_replay_pause();" >/dev/null || (echo "impossible to pause replication" && false) - - ${hcfg.package}/bin/pg_dumpall -h ${dataDir} -f ${backupDir}/$(${pkgs.coreutils}/bin/date -Iminutes).sql - ''; - u = pkgs.callPackage ./utils.nix {}; - cleanup_script = pkgs.writeScript "cleanup_postgresql_${name}" (u.keepLastNDumps "sql" backupDir 6); - in [ - "0 22,4,10,16 * * * postgres ${backup_script}" - "0 3 * * * postgres ${cleanup_script}" - ]) cfg.hosts); - }; - - system.activationScripts = lib.attrsets.mapAttrs' (name: hcfg: - lib.attrsets.nameValuePair "psql_replication_${name}" { - deps = [ "users" ]; - text = '' - install -m 0700 -o postgres -g postgres -d ${cfg.base}/${name}/postgresql - install -m 0700 -o postgres -g postgres -d ${cfg.base}/${name}/postgresql_backup - ''; - }) cfg.hosts; - - systemd.services = lib.attrsets.mapAttrs' (name: hcfg: - let - dataDir = "${cfg.base}/${name}/postgresql"; - in - lib.attrsets.nameValuePair "postgresql_backup_${name}" { - description = "Postgresql replication for ${name}"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - - environment.PGDATA = dataDir; - path = [ hcfg.package ]; - - preStart = '' - if ! test -e ${dataDir}/PG_VERSION; then - mkdir -m 0700 -p ${dataDir} - chown -R postgres:postgres ${dataDir} - fi - ''; - script = let - fp = n: config.secrets.fullPaths."postgresql_replication/${name}/${n}"; - in '' - if ! test -e ${dataDir}/PG_VERSION; then - pg_basebackup -d $(cat ${fp "connection_string"}) -D ${dataDir} -S ${hcfg.slot} - fi - ln -sfn ${fp "recovery.conf"} ${dataDir}/recovery.conf - ln -sfn ${fp "postgresql.conf"} ${dataDir}/postgresql.conf - - exec postgres - ''; - - serviceConfig = { - ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; - User = "postgres"; - Group = "postgres"; - PermissionsStartOnly = true; - RuntimeDirectory = "postgresql"; - Type = "notify"; - - KillSignal = "SIGINT"; - KillMode = "mixed"; - # basebackup can take a long time - TimeoutStartSec="infinity"; - TimeoutStopSec = 120; - }; - unitConfig.RequiresMountsFor = dataDir; - }) cfg.hosts; - }; -} diff --git a/modules/private/databases/redis.nix b/modules/private/databases/redis.nix deleted file mode 100644 index 685fa46..0000000 --- a/modules/private/databases/redis.nix +++ /dev/null @@ -1,133 +0,0 @@ -{ lib, config, pkgs, ... }: -let - cfg = config.myServices.databases.redis; -in { - options.myServices.databases.redis = { - enable = lib.mkOption { - default = false; - example = true; - description = "Whether to enable redis database"; - type = lib.types.bool; - }; - socketsDir = lib.mkOption { - type = lib.types.path; - default = "/run/redis"; - description = '' - The directory where Redis puts sockets. - ''; - }; - # Output variables - sockets = lib.mkOption { - type = lib.types.attrsOf lib.types.path; - default = { - redis = "${cfg.socketsDir}/redis.sock"; - }; - readOnly = true; - description = '' - Redis sockets - ''; - }; - }; - - config = lib.mkIf cfg.enable { - users.users.redis.uid = config.ids.uids.redis; - users.groups.redis.gid = config.ids.gids.redis; - services.redis = rec { - enable = true; - bind = "127.0.0.1"; - unixSocket = cfg.sockets.redis; - extraConfig = '' - unixsocketperm 777 - maxclients 1024 - ''; - }; - systemd.services.redis.serviceConfig.Slice = "redis.slice"; - - services.spiped = { - enable = true; - config.redis = { - decrypt = true; - source = "0.0.0.0:16379"; - target = "/run/redis/redis.sock"; - keyfile = config.secrets.fullPaths."redis/spiped_keyfile"; - }; - }; - systemd.services.spiped_redis = { - description = "Secure pipe 'redis'"; - after = [ "network.target" ]; - wantedBy = [ "multi-user.target" ]; - - serviceConfig = { - Slice = "redis.slice"; - Restart = "always"; - User = "spiped"; - PermissionsStartOnly = true; - SupplementaryGroups = "keys"; - }; - - script = "exec ${pkgs.spiped}/bin/spiped -F `cat /etc/spiped/redis.spec`"; - }; - - services.filesWatcher.predixy = { - restart = true; - paths = [ config.secrets.fullPaths."redis/predixy.conf" ]; - }; - - networking.firewall.allowedTCPPorts = [ 7617 16379 ]; - secrets.keys = { - "redis/predixy.conf" = { - user = "redis"; - group = "redis"; - permissions = "0400"; - text = '' - Name Predixy - Bind 127.0.0.1:7617 - ClientTimeout 300 - WorkerThreads 1 - - Authority { - Auth "${config.myEnv.databases.redis.predixy.read}" { - Mode read - } - } - - StandaloneServerPool { - Databases 16 - RefreshMethod fixed - Group shard001 { - + ${config.myEnv.databases.redis.socket} - } - } - ''; - }; - "redis/spiped_keyfile" = { - user = "spiped"; - group = "spiped"; - permissions = "0400"; - text = config.myEnv.databases.redis.spiped_key; - }; - }; - - systemd.slices.redis = { - description = "Redis slice"; - }; - - systemd.services.predixy = { - description = "Redis proxy"; - wantedBy = [ "multi-user.target" ]; - after = [ "redis.service" ]; - - serviceConfig = { - Slice = "redis.slice"; - User = "redis"; - Group = "redis"; - SupplementaryGroups = "keys"; - Type = "simple"; - - ExecStart = "${pkgs.predixy}/bin/predixy ${config.secrets.fullPaths."redis/predixy.conf"}"; - }; - - }; - }; -} - diff --git a/modules/private/databases/redis_replication.nix b/modules/private/databases/redis_replication.nix deleted file mode 100644 index 9e48939..0000000 --- a/modules/private/databases/redis_replication.nix +++ /dev/null @@ -1,171 +0,0 @@ -{ pkgs, config, lib, ... }: -let - cfg = config.myServices.databasesReplication.redis; -in -{ - options.myServices.databasesReplication.redis = { - enable = lib.mkEnableOption "Enable redis replication"; - base = lib.mkOption { - type = lib.types.path; - description = '' - Base path to put the replications - ''; - }; - hosts = lib.mkOption { - default = {}; - description = '' - Hosts to backup - ''; - type = lib.types.attrsOf (lib.types.submodule { - options = { - package = lib.mkOption { - type = lib.types.package; - default = pkgs.redis; - description = '' - Redis package for this host - ''; - }; - host = lib.mkOption { - type = lib.types.str; - description = '' - Host to connect to - ''; - }; - port = lib.mkOption { - type = lib.types.str; - description = '' - Port to connect to - ''; - }; - password = lib.mkOption { - type = lib.types.nullOr lib.types.str; - default = null; - description = '' - Password to use - ''; - }; - }; - }); - }; - }; - - config = lib.mkIf cfg.enable { - users.users.redis = { - description = "Redis database user"; - group = "redis"; - uid = config.ids.uids.redis; - extraGroups = [ "keys" ]; - }; - users.groups.redis.gid = config.ids.gids.redis; - - services.spiped = { # sync from eldiron - enable = true; - config.redis = { - encrypt = true; - source = "127.0.0.1:16379"; - target = "${config.myEnv.servers.eldiron.ips.main.ip4}:16379"; - keyfile = config.secrets.fullPaths."redis/spiped_eldiron_keyfile"; - }; - }; - - secrets.keys = lib.mapAttrs' (name: hcfg: - lib.nameValuePair "redis_replication/${name}/config" { - user = "redis"; - group = "redis"; - permissions = "0400"; - text = '' - pidfile ${cfg.base}/${name}/redis/redis.pid - port 0 - unixsocket /run/redis_${name}/redis.sock - loglevel notice - logfile /dev/null - syslog-enabled yes - databases 16 - save 900 1 - save 300 10 - save 60 10000 - dbfilename dump.rdb - dir ${cfg.base}/${name}/redis/ - slaveof ${hcfg.host} ${hcfg.port} - ${if hcfg.password != null then "masterauth ${hcfg.password}" else ""} - appendOnly no - appendfsync everysec - slowlog-log-slower-than 10000 - slowlog-max-len 128 - unixsocketperm 777 - maxclients 1024 - ''; - } - ) cfg.hosts // { - "redis/spiped_eldiron_keyfile" = { # For eldiron only - user = "spiped"; - group = "spiped"; - permissions = "0400"; - text = config.myEnv.databases.redis.spiped_key; - }; - }; - - services.cron = { - enable = true; - systemCronJobs = lib.flatten (lib.mapAttrsToList (name: hcfg: - let - dataDir = "${cfg.base}/${name}/redis"; - backupDir = "${cfg.base}/${name}/redis_backup"; - backup_script = pkgs.writeScript "backup_redis_${name}" '' - #!${pkgs.stdenv.shell} - - ${pkgs.coreutils}/bin/cp ${cfg.base}/${name}/redis/dump.rdb \ - ${backupDir}/$(${pkgs.coreutils}/bin/date -Iminutes).rdb - ''; - u = pkgs.callPackage ./utils.nix {}; - cleanup_script = pkgs.writeScript "cleanup_redis_${name}" (u.exponentialDumps "rdb" backupDir); - in [ - "0 22,4,10,16 * * * root ${backup_script}" - "0 3 * * * root ${cleanup_script}" - ]) cfg.hosts); - }; - - system.activationScripts = lib.attrsets.mapAttrs' (name: hcfg: - lib.attrsets.nameValuePair "redis_replication_${name}" { - deps = [ "users" "groups" ]; - text = '' - install -m 0700 -o redis -g redis -d ${cfg.base}/${name}/redis - install -m 0700 -o redis -g redis -d ${cfg.base}/${name}/redis_backup - ''; - }) cfg.hosts; - - systemd.services = { - spiped_redis = { # For eldiron - description = "Secure pipe 'redis'"; - after = [ "network.target" ]; - wantedBy = [ "multi-user.target" ]; - - serviceConfig = { - Restart = "always"; - User = "spiped"; - PermissionsStartOnly = true; - SupplementaryGroups = "keys"; - }; - - script = "exec ${pkgs.spiped}/bin/spiped -F `cat /etc/spiped/redis.spec`"; - }; - } // lib.attrsets.mapAttrs' (name: hcfg: - let - dataDir = "${cfg.base}/${name}/redis"; - in - lib.attrsets.nameValuePair "redis_backup_${name}" { - description = "Redis replication for ${name}"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - unitConfig.RequiresMountsFor = dataDir; - - serviceConfig = { - ExecStart = "${hcfg.package}/bin/redis-server ${config.secrets.fullPaths."redis_replication/${name}/config"}"; - User = "redis"; - RuntimeDirectory = "redis_${name}"; - }; - }) cfg.hosts; - }; -} - - diff --git a/modules/private/databases/utils.nix b/modules/private/databases/utils.nix deleted file mode 100644 index 47988fc..0000000 --- a/modules/private/databases/utils.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ pkgs }: -{ - keepLastNDumps = ext: backupDir: n: '' - #!${pkgs.stdenv.shell} - - cd ${backupDir} - ${pkgs.coreutils}/bin/rm -f \ - $(${pkgs.coreutils}/bin/ls -1 *.${ext} \ - | ${pkgs.coreutils}/bin/sort -r \ - | ${pkgs.gnused}/bin/sed -e '1,${builtins.toString n}d') - ''; - exponentialDumps = ext: backupDir: let - log2rotateSrc = builtins.fetchGit { - url = "https://github.com/avian2/pylog2rotate"; - ref = "master"; - rev = "061f0564757289d3bea553b16f8fd5c4a0319c5e"; - }; - log2rotate = pkgs.writeScript "log2rotate" '' - #!${pkgs.python3}/bin/python - - ${builtins.readFile "${log2rotateSrc}/log2rotate.py"} - ''; - in '' - #!${pkgs.stdenv.shell} - - cd ${backupDir} - ${pkgs.coreutils}/bin/rm -f $(ls -1 *.${ext} | grep -v 'T22:' | sort -r | sed -e '1,12d') - ${pkgs.coreutils}/bin/rm -f $(ls -1 *T22*.${ext} | ${log2rotate} --skip 7 --fuzz 7 --delete --format='%Y-%m-%dT%H:%M+00:00.${ext}') - ''; -} diff --git a/modules/private/default.nix b/modules/private/default.nix deleted file mode 100644 index 9108a92..0000000 --- a/modules/private/default.nix +++ /dev/null @@ -1,136 +0,0 @@ -let -set = { - # adatped from nixpkgs/nixos/modules/services/web-servers/apache-httpd/default.nix - httpdInte = import ../websites/httpd-service-builder.nix { httpdName = "Inte"; withUsers = false; }; - httpdProd = import ../websites/httpd-service-builder.nix { httpdName = "Prod"; withUsers = false; }; - httpdTools = import ../websites/httpd-service-builder.nix { httpdName = "Tools"; withUsers = true; }; - - databases = ./databases; - mariadb = ./databases/mariadb.nix; - openldap = ./databases/openldap; - postgresql = ./databases/postgresql.nix; - redis = ./databases/redis.nix; - postgresqlReplication = ./databases/postgresql_replication.nix; - mariadbReplication = ./databases/mariadb_replication.nix; - redisReplication = ./databases/redis_replication.nix; - openldapReplication = ./databases/openldap_replication.nix; - - websites = ./websites; - gemini = ./gemini; - - - # Personal websites - bakeerCloud = ./websites/bakeer/cloud.nix; - - capitainesLandingPages = ./websites/capitaines/landing_pages.nix; - - chloeInte = ./websites/chloe/integration.nix; - chloeProd = ./websites/chloe/production.nix; - - cipcaSympa = ./websites/cip-ca/sympa.nix; - - connexionswingInte = ./websites/connexionswing/integration.nix; - connexionswingProd = ./websites/connexionswing/production.nix; - - deniseDenisejeromeProd = ./websites/denise/denisejerome.nix; - deniseEvariste = ./websites/denise/evariste.nix; - deniseOMS = ./websites/denise/oms.nix; - deniseBingo = ./websites/denise/bingo.nix; - deniseAventuriers = ./websites/denise/aventuriers.nix; - deniseProduction = ./websites/denise/production.nix; - - emiliaMoodle = ./websites/emilia/moodle.nix; - emiliaAtelierFringant = ./websites/emilia/atelierfringant.nix; - - florianApp = ./websites/florian/app.nix; - florianInte = ./websites/florian/integration.nix; - florianProd = ./websites/florian/production.nix; - - immaeProd = ./websites/immae/production.nix; - immaeRelease = ./websites/immae/release.nix; - immaeTemp = ./websites/immae/temp.nix; - - isabelleAtenInte = ./websites/isabelle/aten_integration.nix; - isabelleAtenProd = ./websites/isabelle/aten_production.nix; - isabelleIridologie = ./websites/isabelle/iridologie.nix; - - jeromeNaturaloutil = ./websites/jerome/naturaloutil.nix; - - leilaProd = ./websites/leila/production.nix; - - ludivineInte = ./websites/ludivine/integration.nix; - ludivineProd = ./websites/ludivine/production.nix; - - nassimeProd = ./websites/nassime/production.nix; - - nathVillon = ./websites/nath/villon.nix; - - papaMaisonBbc = ./websites/papa/maison_bbc.nix; - papaSurveillance = ./websites/papa/surveillance.nix; - - patrickFodellaEcolyeu = ./websites/patrick_fodella/ecolyeu.nix; - patrickFodellaAltermondia = ./websites/patrick_fodella/altermondia.nix; - - piedsjalouxInte = ./websites/piedsjaloux/integration.nix; - piedsjalouxProd = ./websites/piedsjaloux/production.nix; - - ressourcerieBanonProd = ./websites/ressourcerie_banon/production.nix; - ressourcerieBanonCloud = ./websites/ressourcerie_banon/cloud.nix; - ressourcerieBanonCryptpad = ./websites/ressourcerie_banon/cryptpad.nix; - - richieProd = ./websites/richie/production.nix; - - sydenPeertube = ./websites/syden/peertube.nix; - - teliotortayProd = ./websites/telio_tortay/production.nix; - - # Tools - assetsTools = ./websites/tools/assets; - cloudTool = ./websites/tools/cloud; - cloudFarmTool = ./websites/tools/cloud/farm.nix; - cryptpadTool = ./websites/tools/cryptpad; - cryptpadFarmTool = ./websites/tools/cryptpad/farm.nix; - commentoTool = ./websites/tools/commento; - davTool = ./websites/tools/dav; - vpnTool = ./websites/tools/vpn; - dbTool = ./websites/tools/db; - diasporaTool = ./websites/tools/diaspora; - etherTool = ./websites/tools/ether; - gitTool = ./websites/tools/git; - imTool = ./websites/tools/im; - mastodonTool = ./websites/tools/mastodon; - mgoblinTool = ./websites/tools/mgoblin; - peertubeTool = ./websites/tools/peertube; - performanceTool = ./websites/tools/performance; - toolsTool = ./websites/tools/tools; - mailTool = ./websites/tools/mail; - statsTool = ./websites/tools/stats; - - # Games - codenamesGame = ./websites/tools/games/codenames; - terraformingMarsGame = ./websites/tools/games/terraforming-mars; - - mail = ./mail; - - buildbot = ./buildbot; - certificates = ./certificates.nix; - gitolite = ./gitolite; - irc = ./irc.nix; - pub = ./pub; - tasks = ./tasks; - dns = ./dns.nix; - ftp = ./ftp.nix; - mpd = ./mpd.nix; - ejabberd = ./ejabberd; - ssh = ./ssh; - monitoring = ./monitoring; - status = ./monitoring/status.nix; - status_engine = ./monitoring/status_engine.nix; - vpn = ./vpn; - - environment = ./environment.nix; - system = ./system.nix; - loginctl-linger = ./loginctl-linger.nix; -}; -in -builtins.listToAttrs (map (attr: { name = "priv${attr}"; value = set.${attr}; }) (builtins.attrNames set)) diff --git a/modules/private/dns.nix b/modules/private/dns.nix deleted file mode 100644 index 1d7fd52..0000000 --- a/modules/private/dns.nix +++ /dev/null @@ -1,197 +0,0 @@ -{ lib, pkgs, config, ... }: -{ - options.myServices.dns.enable = lib.mkEnableOption "enable DNS resolver"; - config = let - # taken from unstable - cartesianProductOfSets = attrsOfLists: with lib; - lib.foldl' (listOfAttrs: attrName: - concatMap (attrs: - map (listValue: attrs // { ${attrName} = listValue; }) attrsOfLists.${attrName} - ) listOfAttrs - ) [{}] (attrNames attrsOfLists); - cfg = config.services.bind; - keyIncludes = builtins.concatStringsSep "\n" (map (v: "include \"${config.secrets.fullPaths."bind/${v}.key"}\";") (builtins.attrNames config.myEnv.dns.keys)); - cartProduct = lib.foldr - (s: servers: servers // { ${s.masters} = lib.unique ((servers.${s.masters} or []) ++ [s.keys]); }) - {} - (lib.unique (lib.concatMap (z: cartesianProductOfSets { masters = z.masters or []; keys = z.keys or []; }) config.myEnv.dns.slaveZones)); - toKeyList = servers: keys: builtins.concatStringsSep "\n" (map (s: '' - server ${s} { - keys { ${builtins.concatStringsSep ";" keys}; }; - }; - '') servers); - serverIncludes = builtins.concatStringsSep "\n" (lib.mapAttrsToList (n: toKeyList (lib.flatten (builtins.attrValues config.myEnv.dns.ns."${n}"))) cartProduct); - configFile = pkgs.writeText "named.conf" '' - include "/etc/bind/rndc.key"; - controls { - inet 127.0.0.1 allow {localhost;} keys {"rndc-key";}; - }; - - acl cachenetworks { ${lib.concatMapStrings (entry: " ${entry}; ") cfg.cacheNetworks} }; - acl badnetworks { ${lib.concatMapStrings (entry: " ${entry}; ") cfg.blockedNetworks} }; - - options { - listen-on { ${lib.concatMapStrings (entry: " ${entry}; ") cfg.listenOn} }; - listen-on-v6 { ${lib.concatMapStrings (entry: " ${entry}; ") cfg.listenOnIpv6} }; - allow-query { cachenetworks; }; - blackhole { badnetworks; }; - forward first; - forwarders { ${lib.concatMapStrings (entry: " ${entry}; ") cfg.forwarders} }; - directory "/var/run/named"; - pid-file "/var/run/named/named.pid"; - ${cfg.extraOptions} - }; - - ${keyIncludes} - ${serverIncludes} - - ${cfg.extraConfig} - - ${ lib.concatMapStrings - ({ name, file, master ? true, extra ? "", slaves ? [], masters ? [] }: - '' - zone "${name}" { - type ${if master then "master" else "slave"}; - file "${file}"; - ${ if lib.lists.length slaves > 0 then - '' - allow-transfer { - ${lib.concatMapStrings (ip: "${ip};\n") slaves} - }; - '' else ""} - ${ if lib.lists.length masters > 0 then - '' - masters { - ${lib.concatMapStrings (ip: "${ip};\n") masters} - }; - '' else ""} - allow-query { any; }; - ${extra} - }; - '') - cfg.zones } - ''; - mxes = lib.attrsets.filterAttrs - (n: v: v.mx.enable) - config.myEnv.servers; - ip4mxes = builtins.concatStringsSep "\n" (lib.mapAttrsToList - (n: v: "${v.mx.subdomain} IN A ${v.ips.main.ip4}") - mxes); - ip6mxes = builtins.concatStringsSep "\n" (lib.mapAttrsToList - (n: v: builtins.concatStringsSep "\n" (map (i: "${v.mx.subdomain} IN AAAA ${i}") v.ips.main.ip6)) - mxes); - mxmxes = n: conf: builtins.concatStringsSep "\n" (lib.mapAttrsToList - (_: v: "${n} IN MX ${v.mx.priority} ${v.mx.subdomain}.${conf.name}.") - mxes); - in lib.mkIf config.myServices.dns.enable { - networking.firewall.allowedUDPPorts = [ 53 ]; - networking.firewall.allowedTCPPorts = [ 53 ]; - users.users.named.extraGroups = [ "keys" ]; - secrets.keys = lib.mapAttrs' (k: v: - lib.nameValuePair "bind/${k}.key" { - permissions = "0400"; - user = "named"; - text = '' - key "${k}" - { - algorithm ${v.algorithm}; - secret "${v.secret}"; - }; - ''; - } - ) config.myEnv.dns.keys; - services.bind = { - enable = true; - cacheNetworks = ["any"]; - configFile = configFile; - extraOptions = '' - allow-recursion { 127.0.0.1; }; - allow-transfer { none; }; - - notify-source ${config.myEnv.servers.eldiron.ips.main.ip4}; - notify-source-v6 ${lib.head config.myEnv.servers.eldiron.ips.main.ip6}; - version none; - hostname none; - server-id none; - ''; - zones = with config.myEnv.dns; - assert (builtins.substring ((builtins.stringLength soa.email)-1) 1 soa.email) != "."; - assert (builtins.substring ((builtins.stringLength soa.primary)-1) 1 soa.primary) != "."; - (map (conf: { - name = conf.name; - master = false; - file = "/var/run/named/${conf.name}.zone"; - masters = if lib.attrsets.hasAttr "masters" conf - then lib.lists.flatten (map (n: lib.attrsets.attrValues ns.${n}) conf.masters) - else []; - }) slaveZones) - ++ (map (conf: { - name = conf.name; - master = true; - extra = if lib.attrsets.hasAttr "extra" conf then conf.extra else ""; - slaves = if lib.attrsets.hasAttr "slaves" conf - then lib.lists.flatten (map (n: lib.attrsets.attrValues ns.${n}) conf.slaves) - else []; - file = pkgs.writeText "${conf.name}.zone" '' - $TTL 10800 - @ IN SOA ${soa.primary}. ${builtins.replaceStrings ["@"] ["."] soa.email}. ${soa.serial} ${soa.refresh} ${soa.retry} ${soa.expire} ${soa.ttl} - - ${lib.concatStringsSep "\n" (map (x: "@ IN NS ${x}.") (lib.concatMap (n: lib.attrsets.mapAttrsToList (k: v: k) ns.${n}) conf.ns))} - ${lib.optionalString (conf.withCAA != null) '' - ${conf.name}. IN CAA 0 issue "${conf.withCAA}" - ''} - - ${conf.entries} - - ${if lib.attrsets.hasAttr "withEmail" conf && lib.lists.length conf.withEmail > 0 then '' - ${ip4mxes} - ${ip6mxes} - ${lib.concatStringsSep "\n\n" (map (e: - let - n = if e.domain == "" then "@" else "${e.domain} "; - suffix = if e.domain == "" then "" else ".${e.domain}"; - in - '' - ; ------------------ mail: ${n} --------------------------- - ${mxmxes n conf} - - ; https://tools.ietf.org/html/rfc6186 - _submission._tcp${suffix} SRV 0 1 587 smtp.immae.eu. - _submissions._tcp${suffix} SRV 0 1 465 smtp.immae.eu. - _imap._tcp${suffix} SRV 0 1 143 imap.immae.eu. - _imaps._tcp${suffix} SRV 0 1 993 imap.immae.eu. - _pop3._tcp${suffix} SRV 10 1 110 pop3.immae.eu. - _pop3s._tcp${suffix} SRV 10 1 995 pop3.immae.eu. - _sieve._tcp${suffix} SRV 0 1 4190 imap.immae.eu. - - ; MTA-STS - ; https://blog.delouw.ch/2018/12/16/using-mta-sts-to-enhance-email-transport-security-and-privacy/ - ; https://support.google.com/a/answer/9261504 - _mta-sts${suffix} IN TXT "v=STSv1;id=20200109150200Z" - _smtp._tls${suffix} IN TXT "v=TLSRPTv1;rua=mailto:postmaster+mta-sts@immae.eu" - mta-sts${suffix} IN A ${config.myEnv.servers.eldiron.ips.main.ip4} - ${builtins.concatStringsSep "\n" (map (i: "mta-sts${suffix} IN AAAA ${i}") config.myEnv.servers.eldiron.ips.main.ip6)} - - ; Mail sender authentications - ${n} IN TXT "v=spf1 mx ~all" - _dmarc${suffix} IN TXT "v=DMARC1; p=none; adkim=r; aspf=r; fo=1; rua=mailto:postmaster+rua@immae.eu; ruf=mailto:postmaster+ruf@immae.eu;" - ${if e.send then '' - immae_eu._domainkey${suffix} IN TXT ( "v=DKIM1; k=rsa; s=email; " - "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzl3vLd8W5YAuumC5+ZT9OV7/14Pmh5JYtwyqKI3cfe9NnAqInt3xO4bZ7oqIxRKWN4SD39vm7O/QOvFdBt00ENOOzdP90s5gKw6eIP/4+vPTh0IWltAsmu9B2agzdtWUE7t2xFKIzEn8l9niRE2QYbVaqZv4sub98vY55fIgFoHtjkmNC7325S8fjDJGp6OPbyhAs6Xl5/adjF" - "0ko4Y2p6RaxLQfjlS0bxmK4Qg6C14pIXHtzVeqOuWrwApqt5+AULSn97iUtqV/IJlEEjC6DUR44t3C/G0G/k46iFclCqRRi0hdPrOHCtZDbtMubnTN9eaUiNpkXh1WnCflHwtjQwIDAQAB" ) - eldiron._domainkey${suffix} IN TXT ${config.myEnv.mail.dkim.eldiron.public} - '' else ""} - '') conf.withEmail)} - '' + (if conf.name == "immae.eu" then '' - ; ----------------- Accept DMARC reports ------------------- - ${lib.concatStringsSep "\n" ( - lib.flatten ( - map (z: map (e: "${e.domain}${if builtins.stringLength e.domain > 0 then "." else ""}${z.name}._report._dmarc IN TXT \"v=DMARC1;\"") (z.withEmail or [])) masterZones - ) - )} - '' else "") else ""} - ''; - }) masterZones); - }; - }; -} diff --git a/modules/private/ejabberd/default.nix b/modules/private/ejabberd/default.nix deleted file mode 100644 index 4d86a64..0000000 --- a/modules/private/ejabberd/default.nix +++ /dev/null @@ -1,92 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.ejabberd; -in -{ - options.myServices = { - ejabberd.enable = lib.mkOption { - type = lib.types.bool; - default = false; - description = '' - Whether to enable ejabberd service. - ''; - }; - }; - - config = lib.mkIf cfg.enable { - security.acme.certs = { - "ejabberd" = config.myServices.certificates.certConfig // { - user = "ejabberd"; - group = "ejabberd"; - domain = "eldiron.immae.eu"; - keyType = "rsa4096"; - postRun = '' - systemctl restart ejabberd.service - ''; - extraDomains = { - "immae.fr" = null; - "conference.immae.fr" = null; - "proxy.immae.fr" = null; - "pubsub.immae.fr" = null; - "upload.immae.fr" = null; - }; - }; - }; - networking.firewall.allowedTCPPorts = [ 5222 5269 ]; - myServices.websites.tools.im.enable = true; - systemd.services.ejabberd.postStop = '' - rm /var/log/ejabberd/erl_crash*.dump - ''; - secrets.keys = { - "ejabberd/psql.yml" = { - permissions = "0400"; - user = "ejabberd"; - group = "ejabberd"; - text = '' - sql_type: pgsql - sql_server: "localhost" - sql_database: "${config.myEnv.jabber.postgresql.database}" - sql_username: "${config.myEnv.jabber.postgresql.user}" - sql_password: "${config.myEnv.jabber.postgresql.password}" - ''; - }; - "ejabberd/host.yml" = { - permissions = "0400"; - user = "ejabberd"; - group = "ejabberd"; - text = '' - host_config: - "immae.fr": - domain_certfile: "${config.security.acme.certs.ejabberd.directory}/full.pem" - auth_method: [ldap] - ldap_servers: ["${config.myEnv.jabber.ldap.host}"] - ldap_encrypt: tls - ldap_rootdn: "${config.myEnv.jabber.ldap.dn}" - ldap_password: "${config.myEnv.jabber.ldap.password}" - ldap_base: "${config.myEnv.jabber.ldap.base}" - ldap_uids: - uid: "%u" - immaeXmppUid: "%u" - ldap_filter: "${config.myEnv.jabber.ldap.filter}" - ''; - }; - }; - users.users.ejabberd.extraGroups = [ "keys" ]; - services.ejabberd = { - package = pkgs.ejabberd.override { withPgsql = true; }; - imagemagick = true; - enable = true; - ctlConfig = '' - ERLANG_NODE=ejabberd@localhost - ''; - configFile = pkgs.runCommand "ejabberd.yml" { - certificatePrivateKeyAndFullChain = "${config.security.acme.certs.ejabberd.directory}/full.pem"; - certificateCA = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt"; - sql_config_file = config.secrets.fullPaths."ejabberd/psql.yml"; - host_config_file = config.secrets.fullPaths."ejabberd/host.yml"; - } '' - substituteAll ${./ejabberd.yml} $out - ''; - }; - }; -} diff --git a/modules/private/ejabberd/ejabberd.yml b/modules/private/ejabberd/ejabberd.yml deleted file mode 100644 index 82ac35b..0000000 --- a/modules/private/ejabberd/ejabberd.yml +++ /dev/null @@ -1,231 +0,0 @@ -### -### ejabberd configuration file -### -### The parameters used in this configuration file are explained at -### -### https://docs.ejabberd.im/admin/configuration -### -### The configuration file is written in YAML. -### ******************************************************* -### ******* !!! WARNING !!! ******* -### ******* YAML IS INDENTATION SENSITIVE ******* -### ******* MAKE SURE YOU INDENT SECTIONS CORRECTLY ******* -### ******************************************************* -### Refer to http://en.wikipedia.org/wiki/YAML for the brief description. -### However, ejabberd treats different literals as different types: -### -### - unquoted or single-quoted strings. They are called "atoms". -### Example: dog, 'Jupiter', '3.14159', YELLOW -### -### - numeric literals. Example: 3, -45.0, .0 -### -### - quoted or folded strings. -### Examples of quoted string: "Lizzard", "orange". -### Example of folded string: -### > Art thou not Romeo, -### and a Montague? -### - -hosts: - - "immae.fr" - -loglevel: 4 -log_rotate_size: 10485760 -log_rotate_date: "" -log_rotate_count: 1 -log_rate_limit: 100 - -certfiles: - - "@certificatePrivateKeyAndFullChain@" - -listen: - - - port: 5222 - ip: "::" - module: ejabberd_c2s - max_stanza_size: 262144 - shaper: c2s_shaper - access: c2s - starttls_required: true - - - port: 5269 - ip: "::" - module: ejabberd_s2s_in - max_stanza_size: 524288 - - - port: 5280 - ip: "127.0.0.1" - module: ejabberd_http - request_handlers: - "/admin": ejabberd_web_admin - "/api": mod_http_api - "/bosh": mod_bosh - "/captcha": ejabberd_captcha - "/upload": mod_http_upload - "/ws": ejabberd_http_ws - tls: false - -s2s_use_starttls: optional -s2s_cafile: "@certificateCA@" - -default_db: sql -include_config_file: @sql_config_file@ -include_config_file: @host_config_file@ -new_sql_schema: true - -acl: - admin: - - user: "ismael@immae.fr" - local: - user_regexp: "" - loopback: - ip: - - "127.0.0.0/8" - - "::1/128" - - "::FFFF:127.0.0.1/128" - -access_rules: - local: - - allow: local - c2s: - - deny: blocked - - allow - announce: - - allow: admin - configure: - - allow: admin - muc_admin: - - allow: admin - muc_create: - - allow: local - muc: - - allow - pubsub_createnode: - - allow: local - register: - - deny - trusted_network: - - allow: loopback - -api_permissions: - "console commands": - from: - - ejabberd_ctl - who: all - what: "*" - "admin access": - who: - - acl: admin - - oauth: - - scope: "ejabberd:admin" - - acl: admin - what: - - "*" - - "!stop" - - "!start" - "public commands": - who: - - ip: - - "0.0.0.0" - - "::" - what: - - "status" - - "connected_users_number" - -shaper: - normal: 1000 - fast: 50000 - -shaper_rules: - max_user_sessions: 10 - max_user_offline_messages: - - 5000: admin - - 100 - c2s_shaper: - - none: admin - - normal - s2s_shaper: fast - -modules: - mod_adhoc: {} - mod_admin_extra: {} - mod_announce: - access: announce - mod_avatar: {} - mod_blocking: {} - mod_bosh: {} - mod_caps: {} - mod_carboncopy: {} - mod_client_state: {} - mod_configure: {} - mod_disco: {} - mod_fail2ban: {} - mod_http_api: {} - mod_http_upload: - put_url: "https://im.immae.fr/upload" - custom_headers: - "Access-Control-Allow-Origin": "*" - "Access-Control-Allow-Methods": "OPTIONS, HEAD, GET, PUT, POST" - "Access-Control-Allow-Headers": "Content-Type" - mod_last: {} - mod_mam: - default: always - mod_muc: - access: - - allow - access_admin: - - allow: admin - access_create: muc_create - access_persistent: muc_create - default_room_options: - mam: true - mod_muc_admin: {} - mod_offline: - access_max_user_messages: max_user_offline_messages - mod_ping: {} - mod_privacy: {} - mod_private: {} - mod_proxy65: - access: local - max_connections: 5 - mod_pubsub: - access_createnode: pubsub_createnode - plugins: - - "flat" - - "pep" - force_node_config: - ## Change from "whitelist" to "open" to enable OMEMO support - ## See https://github.com/processone/ejabberd/issues/2425 - "eu.siacs.conversations.axolotl.*": - access_model: open - ## Avoid buggy clients to make their bookmarks public - "storage:bookmarks": - access_model: whitelist - mod_push: {} - mod_push_keepalive: {} - mod_register: - ## Only accept registration requests from the "trusted" - ## network (see access_rules section above). - ## Think twice before enabling registration from any - ## address. See the Jabber SPAM Manifesto for details: - ## https://github.com/ge0rg/jabber-spam-fighting-manifesto - ip_access: trusted_network - access: register - mod_roster: - versioning: true - mod_s2s_dialback: {} - mod_shared_roster: {} - mod_stats: {} - mod_stream_mgmt: - resend_on_timeout: if_offline - mod_time: {} - mod_vcard: {} - mod_vcard_xupdate: {} - mod_version: - show_os: false - -### Local Variables: -### mode: yaml -### End: -### vim: set filetype=yaml tabstop=8 - diff --git a/modules/private/environment.nix b/modules/private/environment.nix deleted file mode 100644 index 837d24b..0000000 --- a/modules/private/environment.nix +++ /dev/null @@ -1,1492 +0,0 @@ -{ config, lib, name, ... }: -with lib; -with types; -with lists; -let - ldapOptions = { - base = mkOption { description = "Base of the LDAP tree"; type = str; }; - host = mkOption { description = "Host to access LDAP"; type = str; }; - root_dn = mkOption { description = "DN of the root user"; type = str; }; - root_pw = mkOption { description = "Hashed password of the root user"; type = str; }; - replication_dn = mkOption { description = "DN of the user allowed to replicate the LDAP directory"; type = str; }; - replication_pw = mkOption { description = "Password of the user allowed to replicate the LDAP directory"; type = str; }; - }; - mkLdapOptions = name: more: mkOption { - description = "${name} LDAP configuration"; - type = submodule { - options = ldapOptions // { - dn = mkOption { description = "DN of the ${name} user"; type = str; }; - password = mkOption { description = "password of the ${name} user"; type = str; }; - filter = mkOption { description = "Filter for ${name} users"; type = str; default = ""; }; - } // more; - }; - }; - mysqlOptions = { - host = mkOption { description = "Host to access Mysql"; type = str; }; - remoteHost = mkOption { description = "Host to access Mysql from outside"; type = str; }; - port = mkOption { description = "Port to access Mysql"; type = str; }; - socket = mkOption { description = "Socket to access Mysql"; type = path; }; - systemUsers = mkOption { - description = "Attrs of user-passwords allowed to access mysql"; - type = attrsOf str; - }; - pam = mkOption { - description = "PAM configuration for mysql"; - type = submodule { - options = { - dn = mkOption { description = "DN to connect as to check users"; type = str; }; - password = mkOption { description = "DN password to connect as to check users"; type = str; }; - filter = mkOption { description = "filter to match users"; type = str; }; - }; - }; - }; - }; - mkMysqlOptions = name: more: mkOption { - description = "${name} mysql configuration"; - type = submodule { - options = mysqlOptions // { - database = mkOption { description = "${name} database"; type = str; }; - user = mkOption { description = "${name} user"; type = str; }; - password = mkOption { description = "mysql password of the ${name} user"; type = str; }; - } // more; - }; - }; - psqlOptions = { - host = mkOption { description = "Host to access Postgresql"; type = str; }; - port = mkOption { description = "Port to access Postgresql"; type = str; }; - socket = mkOption { description = "Socket to access Postgresql"; type = path; }; - pam = mkOption { - description = "PAM configuration for psql"; - type = submodule { - options = { - dn = mkOption { description = "DN to connect as to check users"; type = str; }; - password = mkOption { description = "DN password to connect as to check users"; type = str; }; - filter = mkOption { description = "filter to match users"; type = str; }; - }; - }; - }; - }; - mkPsqlOptions = name: mkOption { - description = "${name} psql configuration"; - type = submodule { - options = psqlOptions // { - database = mkOption { description = "${name} database"; type = str; }; - schema = mkOption { description = "${name} schema"; type = nullOr str; default = null; }; - user = mkOption { description = "${name} user"; type = str; }; - password = mkOption { description = "psql password of the ${name} user"; type = str; }; - }; - }; - }; - redisOptions = { - host = mkOption { description = "Host to access Redis"; type = str; }; - port = mkOption { description = "Port to access Redis"; type = str; }; - socket = mkOption { description = "Socket to access Redis"; type = path; }; - dbs = mkOption { - description = "Attrs of db number. Each number should be unique to avoid collision!"; - type = attrsOf str; - }; - spiped_key = mkOption { - type = str; - description = '' - Key to use with spiped to make a secure channel to replication - ''; - }; - predixy = mkOption { - description = "Predixy configuration. Unused yet"; - type = submodule { - options = { - read = mkOption { type = str; description = "Read password"; }; - }; - }; - }; - }; - mkRedisOptions = name: mkOption { - description = "${name} redis configuration"; - type = submodule { - options = redisOptions // { - db = mkOption { description = "${name} database"; type = str; }; - }; - }; - }; - smtpOptions = { - host = mkOption { description = "Host to access SMTP"; type = str; }; - port = mkOption { description = "Port to access SMTP"; type = str; }; - }; - mkSmtpOptions = name: mkOption { - description = "${name} smtp configuration"; - type = submodule { - options = smtpOptions // { - email = mkOption { description = "${name} email"; type = str; }; - password = mkOption { description = "SMTP password of the ${name} user"; type = str; }; - }; - }; - }; - hostEnv = submodule { - options = { - fqdn = mkOption { - description = "Host FQDN"; - type = str; - }; - users = mkOption { - type = unspecified; - default = pkgs: []; - description = '' - Sublist of users from realUsers. Function that takes pkgs as - argument and gives an array as a result - ''; - }; - emails = mkOption { - default = []; - description = "List of e-mails that the server can be a sender of"; - type = listOf str; - }; - ldap = mkOption { - description = '' - LDAP credentials for the host - ''; - type = submodule { - options = { - password = mkOption { type = str; description = "Password for the LDAP connection"; }; - dn = mkOption { type = str; description = "DN for the LDAP connection"; }; - }; - }; - }; - mx = mkOption { - description = "subdomain and priority for MX server"; - default = { enable = false; }; - type = submodule { - options = { - enable = mkEnableOption "Enable MX"; - subdomain = mkOption { type = nullOr str; description = "Subdomain name (mx-*)"; }; - priority = mkOption { type = nullOr str; description = "Priority"; }; - }; - }; - }; - ips = mkOption { - description = '' - attrs of ip4/ip6 grouped by section - ''; - type = attrsOf (submodule { - options = { - ip4 = mkOption { - type = str; - description = '' - ip4 address of the host - ''; - }; - ip6 = mkOption { - type = listOf str; - default = []; - description = '' - ip6 addresses of the host - ''; - }; - }; - }); - }; - }; - }; -in -{ - options.myEnv = { - servers = mkOption { - description = '' - Attrs of servers information in the cluster (not necessarily handled by nixops) - ''; - default = {}; - type = attrsOf hostEnv; - }; - hetznerCloud = mkOption { - description = '' - Hetzner Cloud credential information - ''; - type = submodule { - options = { - authToken = mkOption { - type = str; - description = '' - The API auth token. - ''; - }; - }; - }; - }; - hetzner = mkOption { - description = '' - Hetzner credential information - ''; - type = submodule { - options = { - user = mkOption { type = str; description = "User"; }; - pass = mkOption { type = str; description = "Password"; }; - }; - }; - }; - sshd = mkOption { - description = '' - sshd service credential information - ''; - type = submodule { - options = { - rootKeys = mkOption { type = attrsOf str; description = "Keys of root users"; }; - ldap = mkOption { - description = '' - LDAP credentials for cn=ssh,ou=services,dc=immae,dc=eu dn - ''; - type = submodule { - options = { - password = mkOption { description = "Password"; type = str; }; - }; - }; - }; - }; - }; - }; - ports = mkOption { - description = '' - non-standard reserved ports. Must be unique! - ''; - type = attrsOf port; - default = {}; - apply = let - noDupl = x: builtins.length (builtins.attrValues x) == builtins.length (unique (builtins.attrValues x)); - in - x: if isAttrs x && noDupl x then x else throw "Non unique values for ports"; - }; - httpd = mkOption { - description = '' - httpd service credential information - ''; - type = submodule { - options = { - ldap = mkOption { - description = '' - LDAP credentials for cn=httpd,ou=services,dc=immae,dc=eu dn - ''; - type = submodule { - options = { - password = mkOption { description = "Password"; type = str; }; - }; - }; - }; - }; - }; - }; - smtp = mkOption { - type = submodule { options = smtpOptions; }; - description = "SMTP configuration"; - }; - ldap = mkOption { - description = '' - LDAP server configuration - ''; - type = submodule { - options = ldapOptions; - }; - }; - databases = mkOption { - description = "Databases configuration"; - type = submodule { - options = { - mysql = mkOption { - type = submodule { options = mysqlOptions; }; - description = "Mysql configuration"; - }; - redis = mkOption { - type = submodule { options = redisOptions; }; - description = "Redis configuration"; - }; - postgresql = mkOption { - type = submodule { options = psqlOptions; }; - description = "Postgresql configuration"; - }; - }; - }; - }; - jabber = mkOption { - description = "Jabber configuration"; - type = submodule { - options = { - postfix_user_filter = mkOption { type = str; description = "Postfix filter to get xmpp users"; }; - ldap = mkLdapOptions "Jabber" {}; - postgresql = mkPsqlOptions "Jabber"; - }; - }; - }; - realUsers = mkOption { - description = '' - Attrset of function taking pkgs as argument. - Real users settings, should provide a subattr of users.users. - with at least: name, (hashed)Password, shell - ''; - type = attrsOf unspecified; - }; - users = mkOption { - description = "System and regular users uid/gid"; - type = attrsOf (submodule { - options = { - uid = mkOption { - description = "user uid"; - type = int; - }; - gid = mkOption { - description = "user gid"; - type = int; - }; - }; - }); - }; - dns = mkOption { - description = "DNS configuration"; - type = submodule { - options = { - soa = mkOption { - description = "SOA information"; - type = submodule { - options = { - serial = mkOption { - description = "Serial number. Should be incremented at each change and unique"; - type = str; - }; - refresh = mkOption { - description = "Refresh time"; - type = str; - }; - retry = mkOption { - description = "Retry time"; - type = str; - }; - expire = mkOption { - description = "Expire time"; - type = str; - }; - ttl = mkOption { - description = "Default TTL time"; - type = str; - }; - email = mkOption { - description = "hostmaster e-mail"; - type = str; - }; - primary = mkOption { - description = "Primary NS"; - type = str; - }; - }; - }; - }; - ns = mkOption { - description = "Attrs of NS servers group"; - example = { - foo = { - "ns1.foo.com" = [ "198.51.100.10" "2001:db8:abcd::1" ]; - "ns2.foo.com" = [ "198.51.100.15" "2001:db8:1234::1" ]; - }; - }; - type = attrsOf (attrsOf (listOf str)); - }; - keys = mkOption { - default = {}; - description = "DNS keys"; - type = attrsOf (submodule { - options = { - algorithm = mkOption { type = str; description = "Algorithm"; }; - secret = mkOption { type = str; description = "Secret"; }; - }; - }); - }; - slaveZones = mkOption { - description = "List of slave zones"; - type = listOf (submodule { - options = { - name = mkOption { type = str; description = "zone name"; }; - masters = mkOption { - description = "NS master groups of this zone"; - type = listOf str; - }; - keys = mkOption { - default = []; - description = "Keys associated to the server"; - type = listOf str; - }; - }; - }); - }; - masterZones = mkOption { - description = "List of master zones"; - type = listOf (submodule { - options = { - name = mkOption { type = str; description = "zone name"; }; - withCAA = mkOption { type = nullOr str; description = "CAA entry"; default = null; }; - slaves = mkOption { - description = "NS slave groups of this zone"; - type = listOf str; - }; - ns = mkOption { - description = "groups names that should have their NS entries listed here"; - type = listOf str; - }; - extra = mkOption { - description = "Extra zone configuration for bind"; - example = '' - notify yes; - ''; - type = lines; - }; - entries = mkOption { type = lines; description = "Regular entries of the NS zone"; }; - withEmail = mkOption { - description = "List of domains that should have mail entries (MX, dkim, SPF, ...)"; - default = []; - type = listOf (submodule { - options = { - domain = mkOption { type = str; description = "Which subdomain is concerned"; }; - send = mkOption { type = bool; description = "Whether there can be e-mails originating from the subdomain"; }; - receive = mkOption { type = bool; description = "Whether there can be e-mails arriving to the subdomain"; }; - }; - }); - }; - }; - }); - }; - }; - }; - }; - backup = mkOption { - description = '' - Remote backup with duplicity - ''; - type = submodule { - options = { - password = mkOption { type = str; description = "Password for encrypting files"; }; - remotes = mkOption { - type = attrsOf (submodule { - options = { - remote = mkOption { - type = unspecified; - example = literalExample '' - bucket: "s3://some_host/${bucket}"; - ''; - description = '' - Function. - Takes a bucket name as argument and returns a url - ''; - }; - accessKeyId = mkOption { type = str; description = "Remote access-key"; }; - secretAccessKey = mkOption { type = str; description = "Remote access secret"; }; - }; - }); - }; - }; - }; - }; - zrepl_backup = mkOption { - type = submodule { - options = { - ssh_key = mkOption { - description = "SSH key information"; - type = submodule { - options = { - public = mkOption { type = str; description = "Public part of the key"; }; - private = mkOption { type = lines; description = "Private part of the key"; }; - }; - }; - }; - mysql = mkMysqlOptions "Zrepl" {}; - }; - }; - }; - rsync_backup = mkOption { - description ='' - Rsync backup configuration from controlled host - ''; - type = submodule { - options = { - ssh_key = mkOption { - description = "SSH key information"; - type = submodule { - options = { - public = mkOption { type = str; description = "Public part of the key"; }; - private = mkOption { type = lines; description = "Private part of the key"; }; - }; - }; - }; - profiles = mkOption { - description = "Attrs of profiles to backup"; - type = attrsOf (submodule { - options = { - keep = mkOption { type = int; description = "Number of backups to keep"; }; - check_command = mkOption { type = str; description = "command to check if backup needs to be done"; default = "backup"; }; - login = mkOption { type = str; description = "Login to connect to host"; }; - port = mkOption { type = str; default = "22"; description = "Port to connect to host"; }; - host = mkOption { type = str; description = "Host to connect to"; }; - host_key = mkOption { type = str; description = "Host key"; }; - host_key_type = mkOption { type = str; description = "Host key type"; }; - parts = mkOption { - description = "Parts to backup for this host"; - type = attrsOf (submodule { - options = { - remote_folder = mkOption { type = path; description = "Remote folder to backup";}; - exclude_from = mkOption { - type = listOf path; - default = []; - description = "List of folders/files to exclude from the backup"; - }; - files_from = mkOption { - type = listOf path; - default = []; - description = "List of folders/files to backup in the base folder"; - }; - args = mkOption { - type = nullOr str; - default = null; - description = "Extra arguments to pass to rsync"; - }; - }; - }); - }; - }; - }); - }; - }; - }; - }; - monitoring = mkOption { - description = "Monitoring configuration"; - type = submodule { - options = { - status_url = mkOption { type = str; description = "URL to push status to"; }; - status_token = mkOption { type = str; description = "Token for the status url"; }; - http_user_password = mkOption { type = str; description = "HTTP credentials to check services behind wall"; }; - email = mkOption { type = str; description = "Admin E-mail"; }; - ssh_public_key = mkOption { type = str; description = "SSH public key"; }; - ssh_secret_key = mkOption { type = str; description = "SSH secret key"; }; - imap_login = mkOption { type = str; description = "IMAP login"; }; - imap_password = mkOption { type = str; description = "IMAP password"; }; - eriomem_keys = mkOption { type = listOf (listOf str); description = "Eriomem keys"; default = []; }; - ovh_sms = mkOption { - description = "OVH credentials for sms script"; - type = submodule { - options = { - endpoint = mkOption { type = str; default = "ovh-eu"; description = "OVH endpoint"; }; - application_key = mkOption { type = str; description = "Application key"; }; - application_secret = mkOption { type = str; description = "Application secret"; }; - consumer_key = mkOption { type = str; description = "Consumer key"; }; - account = mkOption { type = str; description = "Account"; }; - }; - }; - }; - eban = mkOption { - description = "Eban credentials for webhook"; - type = submodule { - options = { - user = mkOption { type = str; description = "User"; }; - password = mkOption { type = str; description = "Password"; }; - }; - }; - }; - nrdp_tokens = mkOption { type = listOf str; description = "Tokens allowed to push status update"; }; - slack_url = mkOption { type = str; description = "Slack webhook url to push status update"; }; - slack_channel = mkOption { type = str; description = "Slack channel to push status update"; }; - netdata_aggregator = mkOption { type = str; description = "Url where netdata information should be sent"; }; - netdata_keys = mkOption { type = attrsOf str; description = "netdata host keys"; }; - contacts = mkOption { type = attrsOf unspecified; description = "Contact dicts to fill naemon objects"; }; - email_check = mkOption { - description = "Emails services to check"; - type = attrsOf (submodule { - options = { - local = mkOption { type = bool; default = false; description = "Use local configuration"; }; - port = mkOption { type = nullOr str; default = null; description = "Port to connect to ssh"; }; - login = mkOption { type = nullOr str; default = null; description = "Login to connect to ssh"; }; - targets = mkOption { type = listOf str; description = "Hosts to send E-mails to"; }; - mail_address = mkOption { type = nullOr str; default = null; description = "E-mail recipient part to send e-mail to"; }; - mail_domain = mkOption { type = nullOr str; default = null; description = "E-mail domain part to send e-mail to"; }; - }; - }); - }; - }; - }; - }; - mpd = mkOption { - description = "MPD configuration"; - type = submodule { - options = { - folder = mkOption { type = str; description = "Folder to serve from the MPD instance"; }; - password = mkOption { type = str; description = "Password to connect to the MPD instance"; }; - host = mkOption { type = str; description = "Host to connect to the MPD instance"; }; - port = mkOption { type = str; description = "Port to connect to the MPD instance"; }; - }; - }; - }; - ftp = mkOption { - description = "FTP configuration"; - type = submodule { - options = { - ldap = mkLdapOptions "FTP" { - proftpd_filter = mkOption { type = str; description = "Filter for proftpd listing in LDAP"; }; - pure-ftpd_filter = mkOption { type = str; description = "Filter for pure-ftpd listing in LDAP"; }; - }; - }; - }; - }; - vpn = mkOption { - description = "VPN configuration"; - type = attrsOf (submodule { - options = { - prefix = mkOption { type = str; description = "ipv6 prefix for the vpn subnet"; }; - privateKey = mkOption { type = str; description = "Private key for the host"; }; - publicKey = mkOption { type = str; description = "Public key for the host"; }; - }; - }); - }; - mail = mkOption { - description = "Mail configuration"; - type = submodule { - options = { - dmarc = mkOption { - description = "DMARC configuration"; - type = submodule { - options = { - ignore_hosts = mkOption { - type = lines; - description = '' - Hosts to ignore when checking for dmarc - ''; - }; - }; - }; - }; - dkim = mkOption { - description = "DKIM configuration"; - type = attrsOf (submodule { - options = { - public = mkOption { - type = str; - example = '' - ( "v=DKIM1; k=rsa; " - "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3w1a2aMxWw9+hdcmbqX4UevcVqr204y0K73Wdc7MPZiOOlUJQYsMNSYR1Y/SC7jmPKeitpcJCpQgn/cveJZbuikjjPLsDReHyFEYmC278ZLRTELHx6f1IXM8WE08JIRT69CfZiMi1rVcOh9qRT4F93PyjCauU8Y5hJjtg9ThsWwIDAQAB" ) - ''; - description = "Public entry to put in DNS TXT field"; - }; - private = mkOption { type = str; description = "Private key"; }; - }; - }); - }; - postfix = mkOption { - description = "Postfix configuration"; - type = submodule { - options = { - additional_mailbox_domains = mkOption { - description = '' - List of domains that are used as mailbox final destination, in addition to those defined in the DNS records - ''; - type = listOf str; - }; - mysql = mkMysqlOptions "Postfix" { - password_encrypt = mkOption { type = str; description = "Key to encrypt relay password in database"; }; - }; - backup_domains = mkOption { - description = '' - Domains that are accepted for relay as backup domain - ''; - type = attrsOf (submodule { - options = { - domains = mkOption { type = listOf str; description = "Domains list"; }; - relay_restrictions = mkOption { - type = lines; - description = '' - Restrictions for relaying the e-mails from the domains - ''; - }; - recipient_maps = mkOption { - description = '' - Recipient map to accept relay for. - Must be specified for domain, the rules apply to everyone! - ''; - type = listOf (submodule { - options = { - type = mkOption { - type = enum [ "hash" ]; - description = "Map type"; - }; - content = mkOption { - type = str; - description = "Map content"; - }; - }; - }); - }; - }; - }); - }; - }; - }; - }; - dovecot = mkOption { - description = "Dovecot configuration"; - type = submodule { - options = { - ldap = mkLdapOptions "Dovecot" { - pass_attrs = mkOption { type = str; description = "Password attribute in LDAP"; }; - user_attrs = mkOption { type = str; description = "User attribute mapping in LDAP"; }; - iterate_attrs = mkOption { type = str; description = "User attribute mapping for listing in LDAP"; }; - iterate_filter = mkOption { type = str; description = "User attribute filter for listing in LDAP"; }; - postfix_mailbox_filter = mkOption { type = str; description = "Postfix filter to get mailboxes"; }; - }; - }; - }; - }; - rspamd = mkOption { - description = "rspamd configuration"; - type = submodule { - options = { - redis = mkRedisOptions "Redis"; - read_password_hashed = mkOption { type = str; description = "Hashed read password for rspamd"; }; - write_password_hashed = mkOption { type = str; description = "Hashed write password for rspamd"; }; - read_password = mkOption { - type = str; - description = "Read password for rspamd. Unused"; - apply = x: ""; - }; - write_password = mkOption { - type = str; - description = "Write password for rspamd. Unused"; - apply = x: ""; - }; - }; - }; - }; - scripts = mkOption { - description = "Mail script recipients"; - type = attrsOf (submodule { - options = { - external = mkEnableOption "Create a script_@mail.immae.eu external address"; - src = mkOption { - description = '' - git source to fetch the script from. - It must have a default.nix file as its root accepting a scriptEnv parameter - ''; - type = submodule { - options = { - url = mkOption { type = str; description = "git url to fetch"; }; - rev = mkOption { type = str; description = "git reference to fetch"; }; - }; - }; - }; - env = mkOption { - description = "Variables to pass to the script"; - type = unspecified; - }; - }; - }); - }; - sympa = mkOption { - description = "Sympa configuration"; - type = submodule { - options = { - listmasters = mkOption { - type = listOf str; - description = "Listmasters"; - }; - postgresql = mkPsqlOptions "Sympa"; - data_sources = mkOption { - type = attrsOf str; - default = {}; - description = "Data sources to make available to sympa"; - }; - scenari = mkOption { - type = attrsOf str; - default = {}; - description = "Scenari to make available to sympa"; - }; - }; - }; - }; - }; - }; - }; - buildbot = mkOption { - description = "Buildbot configuration"; - type = submodule { - options = { - ssh_key = mkOption { - description = "SSH key information"; - type = submodule { - options = { - public = mkOption { type = str; description = "Public part of the key"; }; - private = mkOption { type = lines; description = "Private part of the key"; }; - }; - }; - }; - workerPassword = mkOption { description = "Buildbot worker password"; type = str; }; - user = mkOption { - description = "Buildbot user"; - type = submodule { - options = { - uid = mkOption { - description = "user uid"; - type = int; - }; - gid = mkOption { - description = "user gid"; - type = int; - }; - }; - }; - }; - ldap = mkOption { - description = "Ldap configuration for buildbot"; - type = submodule { - options = { - password = mkOption { type = str; description = "Buildbot password"; }; - }; - }; - }; - projects = mkOption { - description = "Projects to make a buildbot for"; - type = attrsOf (submodule { - options = { - name = mkOption { type = str; description = "Project name"; }; - packages = mkOption { - type = unspecified; - example = literalExample '' - pkgs: [ pkgs.bash pkgs.git pkgs.gzip pkgs.openssh ]; - ''; - description = '' - Function. - Builds packages list to make available to buildbot project. - Takes pkgs as argument. - ''; - }; - pythonPackages = mkOption { - type = unspecified; - example = literalExample '' - p: pkgs: [ pkgs.python3Packages.pip ]; - ''; - description = '' - Function. - Builds python packages list to make available to buildbot project. - Takes buildbot python module as first argument and pkgs as second argument in order to augment the python modules list. - ''; - }; - pythonPathHome = mkOption { type = bool; description = "Whether to add project’s python home to python path"; }; - workerPort = mkOption { type = port; description = "Port for the worker"; }; - secrets = mkOption { - type = attrsOf str; - description = "Secrets for the project to dump as files"; - }; - environment = mkOption { - type = attrsOf str; - description = '' - Environment variables for the project. - BUILDBOT_ is prefixed to the variable names - ''; - }; - activationScript = mkOption { - type = lines; - description = '' - Activation script to run during deployment - ''; - }; - builderPaths = mkOption { - type = attrsOf unspecified; - default = {}; - description = '' - Attrs of functions to make accessible specifically per builder. - Takes pkgs as argument and should return a single path containing binaries. - This path will be accessible as BUILDBOT_PATH_ - ''; - }; - webhookTokens = mkOption { - type = nullOr (listOf str); - default = null; - description = '' - List of tokens allowed to push to project’s change_hook/base endpoint - ''; - }; - }; - }); - }; - }; - }; - }; - tools = mkOption { - description = "Tools configurations"; - type = submodule { - options = { - contact = mkOption { type = str; description = "Contact e-mail address"; }; - assets = mkOption { - default = {}; - type = attrsOf (submodule { - options = { - url = mkOption { type = str; description = "URL to fetch"; }; - sha256 = mkOption { type = str; description = "Hash of the url"; }; - }; - }); - description = "Assets to provide on assets.immae.eu"; - }; - davical = mkOption { - description = "Davical configuration"; - type = submodule { - options = { - postgresql = mkPsqlOptions "Davical"; - ldap = mkLdapOptions "Davical" {}; - }; - }; - }; - diaspora = mkOption { - description = "Diaspora configuration"; - type = submodule { - options = { - postgresql = mkPsqlOptions "Diaspora"; - redis = mkRedisOptions "Diaspora"; - ldap = mkLdapOptions "Diaspora" {}; - secret_token = mkOption { type = str; description = "Secret token"; }; - }; - }; - }; - dmarc_reports = mkOption { - description = "DMARC reports configuration"; - type = submodule { - options = { - mysql = mkMysqlOptions "DMARC" {}; - anonymous_key = mkOption { type = str; description = "Anonymous hashing key"; }; - }; - }; - }; - etherpad-lite = mkOption { - description = "Etherpad configuration"; - type = submodule { - options = { - postgresql = mkPsqlOptions "Etherpad"; - ldap = mkLdapOptions "Etherpad" { - group_filter = mkOption { type = str; description = "Filter for groups"; }; - }; - adminPassword = mkOption { type = str; description = "Admin password for mypads / admin"; }; - session_key = mkOption { type = str; description = "Session key"; }; - api_key = mkOption { type = str; description = "API key"; }; - redirects = mkOption { type = str; description = "Redirects for apache"; }; - }; - }; - }; - gitolite = mkOption { - description = "Gitolite configuration"; - type = submodule { - options = { - ldap = mkLdapOptions "Gitolite" {}; - ssh_key = mkOption { - description = "SSH key information"; - type = submodule { - options = { - public = mkOption { type = str; description = "Public part of the key"; }; - private = mkOption { type = lines; description = "Private part of the key"; }; - }; - }; - }; - }; - }; - }; - kanboard = mkOption { - description = "Kanboard configuration"; - type = submodule { - options = { - postgresql = mkPsqlOptions "Kanboard"; - ldap = mkLdapOptions "Kanboard" { - admin_dn = mkOption { type = str; description = "Admin DN"; }; - }; - }; - }; - }; - mantisbt = mkOption { - description = "Mantisbt configuration"; - type = submodule { - options = { - postgresql = mkPsqlOptions "Mantisbt"; - ldap = mkLdapOptions "Mantisbt" {}; - master_salt = mkOption { type = str; description = "Master salt for password hash"; }; - }; - }; - }; - mastodon = mkOption { - description = "Mastodon configuration"; - type = submodule { - options = { - postgresql = mkPsqlOptions "Mastodon"; - redis = mkRedisOptions "Mastodon"; - ldap = mkLdapOptions "Mastodon" {}; - paperclip_secret = mkOption { type = str; description = "Paperclip secret"; }; - otp_secret = mkOption { type = str; description = "OTP secret"; }; - secret_key_base = mkOption { type = str; description = "Secret key base"; }; - vapid = mkOption { - description = "vapid key"; - type = submodule { - options = { - private = mkOption { type = str; description = "Private key"; }; - public = mkOption { type = str; description = "Public key"; }; - }; - }; - }; - }; - }; - }; - mediagoblin = mkOption { - description = "Mediagoblin configuration"; - type = submodule { - options = { - postgresql = mkPsqlOptions "Mediagoblin"; - redis = mkRedisOptions "Mediagoblin"; - ldap = mkLdapOptions "Mediagoblin" {}; - }; - }; - }; - nextcloud = mkOption { - description = "Nextcloud configuration"; - type = submodule { - options = { - postgresql = mkPsqlOptions "Peertube"; - redis = mkRedisOptions "Peertube"; - password_salt = mkOption { type = str; description = "Password salt"; }; - instance_id = mkOption { type = str; description = "Instance ID"; }; - secret = mkOption { type = str; description = "App secret"; }; - }; - }; - }; - peertube = mkOption { - description = "Peertube configuration"; - type = submodule { - options = { - listenPort = mkOption { type = port; description = "Port to listen to"; }; - postgresql = mkPsqlOptions "Peertube"; - redis = mkRedisOptions "Peertube"; - ldap = mkLdapOptions "Peertube" {}; - }; - }; - }; - syden_peertube = mkOption { - description = "Peertube Syden configuration"; - type = submodule { - options = { - listenPort = mkOption { type = port; description = "Port to listen to"; }; - postgresql = mkPsqlOptions "Peertube"; - redis = mkRedisOptions "Peertube"; - }; - }; - }; - phpldapadmin = mkOption { - description = "phpLdapAdmin configuration"; - type = submodule { - options = { - ldap = mkLdapOptions "phpldapadmin" {}; - }; - }; - }; - rompr = mkOption { - description = "Rompr configuration"; - type = submodule { - options = { - mpd = mkOption { - description = "MPD configuration"; - type = submodule { - options = { - host = mkOption { type = str; description = "Host for MPD"; }; - port = mkOption { type = port; description = "Port to access MPD host"; }; - }; - }; - }; - }; - }; - }; - roundcubemail = mkOption { - description = "Roundcubemail configuration"; - type = submodule { - options = { - postgresql = mkPsqlOptions "TT-RSS"; - secret = mkOption { type = str; description = "Secret"; }; - }; - }; - }; - shaarli = mkOption { - description = "Shaarli configuration"; - type = submodule { - options = { - ldap = mkLdapOptions "Shaarli" {}; - }; - }; - }; - status_engine = mkOption { - description = "Status Engine configuration"; - type = submodule { - options = { - mysql = mkMysqlOptions "StatusEngine" {}; - ldap = mkLdapOptions "StatusEngine" {}; - }; - }; - }; - task = mkOption { - description = "Taskwarrior configuration"; - type = submodule { - options = { - ldap = mkLdapOptions "Taskwarrior" {}; - taskwarrior-web = mkOption { - description = "taskwarrior-web profiles"; - type = attrsOf (submodule { - options = { - uid = mkOption { - type = listOf str; - description = "List of ldap uids having access to this profile"; - }; - org = mkOption { type = str; description = "Taskd organisation"; }; - key = mkOption { type = str; description = "Taskd key"; }; - date = mkOption { type = str; description = "Preferred date format"; }; - }; - }); - }; - }; - }; - }; - ttrss = mkOption { - description = "TT-RSS configuration"; - type = submodule { - options = { - postgresql = mkPsqlOptions "TT-RSS"; - ldap = mkLdapOptions "TT-RSS" {}; - }; - }; - }; - wallabag = mkOption { - description = "Wallabag configuration"; - type = submodule { - options = { - postgresql = mkPsqlOptions "Wallabag"; - ldap = mkLdapOptions "Wallabag" { - admin_filter = mkOption { type = str; description = "Admin users filter"; }; - }; - redis = mkRedisOptions "Wallabag"; - secret = mkOption { type = str; description = "App secret"; }; - }; - }; - }; - webhooks = mkOption { - type = attrsOf str; - description = "Mapping 'name'.php => script for webhooks"; - }; - csp_reports = mkOption { - description = "CSP report configuration"; - type = submodule { - options = { - report_uri = mkOption { type = str; description = "URI to report CSP violations to"; }; - policies = mkOption { type = attrsOf str; description = "CSP policies to apply"; }; - postgresql = mkPsqlOptions "CSP reports"; - }; - }; - }; - commento = mkOption { - description = "Commento configuration"; - type = submodule { - options = { - listenPort = mkOption { type = port; description = "Port to listen to"; }; - postgresql = mkPsqlOptions "Commento"; - smtp = mkSmtpOptions "Commento"; - }; - }; - }; - cryptpad = mkOption { - description = "Cryptpad configuration"; - type = attrsOf (submodule { - options = { - email = mkOption { type = str; description = "Admin e-mail"; }; - admins = mkOption { type = listOf str; description = "Instance admin public keys"; }; - port = mkOption { type = port; description = "Port to listen to"; }; - }; - }); - }; - ympd = mkOption { - description = "Ympd configuration"; - type = submodule { - options = { - listenPort = mkOption { type = port; description = "Port to listen to"; }; - mpd = mkOption { - description = "MPD configuration"; - type = submodule { - options = { - password = mkOption { type = str; description = "Password to access MPD host"; }; - host = mkOption { type = str; description = "Host for MPD"; }; - port = mkOption { type = port; description = "Port to access MPD host"; }; - }; - }; - }; - }; - }; - }; - umami = mkOption { - description = "Umami configuration"; - type = submodule { - options = { - listenPort = mkOption { type = port; description = "Port to listen to"; }; - postgresql = mkPsqlOptions "Umami"; - hashSalt = mkOption { type = str; description = "Hash salt"; }; - }; - }; - }; - yourls = mkOption { - description = "Yourls configuration"; - type = submodule { - options = { - mysql = mkMysqlOptions "Yourls" {}; - ldap = mkLdapOptions "Yourls" {}; - cookieKey = mkOption { type = str; description = "Cookie key"; }; - }; - }; - }; - }; - }; - }; - serverSpecific = mkOption { type = attrsOf unspecified; description = "Server specific configuration"; }; - websites = mkOption { - description = "Websites configurations"; - type = submodule { - options = { - immae = mkOption { - description = "Immae configuration by environment"; - type = submodule { - options = { - temp = mkOption { - description = "Temp configuration"; - type = submodule { - options = { - ldap = mkLdapOptions "Immae temp" { - filter = mkOption { type = str; description = "Filter for user access"; }; - }; - }; - }; - }; - }; - }; - }; - isabelle = mkOption { - description = "Isabelle configurations by environment"; - type = - let - atenSubmodule = mkOption { - description = "environment configuration"; - type = submodule { - options = { - environment = mkOption { type = str; description = "Symfony environment"; }; - secret = mkOption { type = str; description = "Symfony App secret"; }; - postgresql = mkPsqlOptions "Aten"; - }; - }; - }; - in - submodule { - options = { - aten_production = atenSubmodule; - aten_integration = atenSubmodule; - iridologie = mkOption { - description = "environment configuration"; - type = submodule { - options = { - environment = mkOption { type = str; description = "SPIP environment"; }; - mysql = mkMysqlOptions "Iridologie" {}; - ldap = mkLdapOptions "Iridologie" {}; - }; - }; - }; - }; - }; - }; - chloe = mkOption { - description = "Chloe configurations by environment"; - type = - let - chloeSubmodule = mkOption { - description = "environment configuration"; - type = submodule { - options = { - environment = mkOption { type = str; description = "SPIP environment"; }; - mysql = mkMysqlOptions "Chloe" {}; - ldap = mkLdapOptions "Chloe" {}; - }; - }; - }; - in - submodule { - options = { - production = chloeSubmodule; - integration = chloeSubmodule; - }; - }; - }; - connexionswing = mkOption { - description = "Connexionswing configurations by environment"; - type = - let - csSubmodule = mkOption { - description = "environment configuration"; - type = submodule { - options = { - environment = mkOption { type = str; description = "Symfony environment"; }; - mysql = mkMysqlOptions "Connexionswing" {}; - secret = mkOption { type = str; description = "Symfony App secret"; }; - email = mkOption { type = str; description = "Symfony email notification"; }; - }; - }; - }; - in - submodule { - options = { - production = csSubmodule; - integration = csSubmodule; - }; - }; - }; - jerome = mkOption { - description = "Naturaloutil configuration"; - type = submodule { - options = { - mysql = mkMysqlOptions "Naturaloutil" {}; - server_admin = mkOption { type = str; description = "Server admin e-mail"; }; - }; - }; - }; - telio_tortay = mkOption { - description = "Telio Tortay configuration"; - type = submodule { - options = { - server_admin = mkOption { type = str; description = "Server admin e-mail"; }; - }; - }; - }; - ludivine = mkOption { - description = "Ludivinecassal configurations by environment"; - type = - let - lcSubmodule = mkOption { - description = "environment configuration"; - type = submodule { - options = { - environment = mkOption { type = str; description = "Symfony environment"; }; - mysql = mkMysqlOptions "LudivineCassal" {}; - ldap = mkLdapOptions "LudivineCassal" {}; - secret = mkOption { type = str; description = "Symfony App secret"; }; - }; - }; - }; - in - submodule { - options = { - production = lcSubmodule; - integration = lcSubmodule; - }; - }; - }; - emilia = mkOption { - description = "Emilia configuration"; - type = submodule { - options = { - postgresql = mkPsqlOptions "Emilia"; - }; - }; - }; - florian = mkOption { - description = "Florian configuration"; - type = submodule { - options = { - server_admin = mkOption { type = str; description = "Server admin e-mail"; }; - }; - }; - }; - nassime = mkOption { - description = "Nassime configuration"; - type = submodule { - options = { - server_admin = mkOption { type = str; description = "Server admin e-mail"; }; - }; - }; - }; - piedsjaloux = mkOption { - description = "Piedsjaloux configurations by environment"; - type = - let - pjSubmodule = mkOption { - description = "environment configuration"; - type = submodule { - options = { - environment = mkOption { type = str; description = "Symfony environment"; }; - mysql = mkMysqlOptions "Piedsjaloux" {}; - secret = mkOption { type = str; description = "Symfony App secret"; }; - }; - }; - }; - in - submodule { - options = { - production = pjSubmodule; - integration = pjSubmodule; - }; - }; - }; - richie = mkOption { - description = "Europe Richie configurations by environment"; - type = submodule { - options = { - mysql = mkMysqlOptions "Richie" {}; - smtp_mailer = mkOption { - description = "SMTP mailer configuration"; - type = submodule { - options = { - user = mkOption { type = str; description = "Username"; }; - password = mkOption { type = str; description = "Password"; }; - }; - }; - }; - }; - }; - }; - caldance = mkOption { - description = "Caldance configurations by environment"; - type = submodule { - options = { - integration = mkOption { - description = "environment configuration"; - type = submodule { - options = { - password = mkOption { type = str; description = "Password file content for basic auth"; }; - }; - }; - }; - }; - }; - }; - tellesflorian = mkOption { - description = "Tellesflorian configurations by environment"; - type = - let - tfSubmodule = mkOption { - description = "environment configuration"; - type = submodule { - options = { - environment = mkOption { type = str; description = "Symfony environment"; }; - mysql = mkMysqlOptions "Tellesflorian" {}; - secret = mkOption { type = str; description = "Symfony App secret"; }; - invite_passwords = mkOption { type = str; description = "Password basic auth"; }; - }; - }; - }; - in - submodule { - options = { - integration = tfSubmodule; - }; - }; - }; - }; - }; - }; - }; - options.hostEnv = mkOption { - readOnly = true; - type = hostEnv; - default = config.myEnv.servers."${name}"; - description = "Host environment"; - }; -} diff --git a/modules/private/ftp.nix b/modules/private/ftp.nix deleted file mode 100644 index cae25c1..0000000 --- a/modules/private/ftp.nix +++ /dev/null @@ -1,248 +0,0 @@ -{ lib, pkgs, config, ... }: -let - package = pkgs.pure-ftpd.override { ldapFtpId = "immaeFtp"; }; - pure-ftpd-enabled = config.myServices.ftp.pure-ftpd.enable; - proftpd-enabled = config.myServices.ftp.proftpd.enable; -in -{ - options = { - myServices.ftp.enable = lib.mkOption { - type = lib.types.bool; - default = false; - description = '' - Whether to enable ftp. - ''; - }; - myServices.ftp.pure-ftpd.enable = lib.mkOption { - type = lib.types.bool; - default = false; - description = '' - Whether to enable pure-ftpd. - ''; - }; - myServices.ftp.proftpd.enable = lib.mkOption { - type = lib.types.bool; - default = true; - description = '' - Whether to enable proftpd. - ''; - }; - }; - - config = lib.mkIf config.myServices.ftp.enable { - security.acme.certs."ftp" = config.myServices.certificates.certConfig // { - domain = "eldiron.immae.eu"; - postRun = (lib.optionalString pure-ftpd-enabled '' - systemctl restart pure-ftpd.service - '') + (lib.optionalString proftpd-enabled '' - systemctl restart proftpd.service - ''); - extraDomains = { "ftp.immae.eu" = null; }; - }; - - networking = { - firewall = { - allowedTCPPorts = [ 21 115 ]; - allowedTCPPortRanges = [ { from = 40000; to = 50000; } ]; - }; - }; - - users.users.ftp = { - uid = config.ids.uids.ftp; # 8 - group = "ftp"; - description = "Anonymous FTP user"; - home = "/homeless-shelter"; - extraGroups = [ "keys" ]; - }; - - users.groups.ftp.gid = config.ids.gids.ftp; - - system.activationScripts.ftp = '' - install -m 0755 -o ftp -g ftp -d /var/lib/ftp - '' + (lib.optionalString proftpd-enabled '' - install -m 0755 -o nobody -g nogroup -d /var/lib/proftpd/authorized_keys - ''); - - secrets.keys."pure-ftpd-ldap" = lib.mkIf pure-ftpd-enabled { - permissions = "0400"; - user = "ftp"; - group = "ftp"; - text = '' - LDAPServer ${config.myEnv.ftp.ldap.host} - LDAPPort 389 - LDAPUseTLS True - LDAPBaseDN ${config.myEnv.ftp.ldap.base} - LDAPBindDN ${config.myEnv.ftp.ldap.dn} - LDAPBindPW ${config.myEnv.ftp.ldap.password} - LDAPDefaultUID 500 - LDAPForceDefaultUID False - LDAPDefaultGID 100 - LDAPForceDefaultGID False - LDAPFilter ${config.myEnv.ftp.ldap.pure-ftpd_filter} - - LDAPAuthMethod BIND - - # Pas de possibilite de donner l'Uid/Gid ! - # Compile dans pure-ftpd directement avec immaeFtpUid / immaeFtpGid - LDAPHomeDir immaeFtpDirectory - ''; - }; - secrets.keys."proftpd-ldap.conf" = lib.mkIf proftpd-enabled { - permissions = "0400"; - user = "ftp"; - group = "ftp"; - text = '' - LDAPServer ldaps://${config.myEnv.ftp.ldap.host}:636/??sub - LDAPUseTLS on - LDAPAuthBinds on - LDAPBindDN "${config.myEnv.ftp.ldap.dn}" "${config.myEnv.ftp.ldap.password}" - LDAPSearchScope subtree - LDAPAuthBinds on - LDAPDefaultGID 100 - LDAPDefaultUID 500 - LDAPForceDefaultUID off - LDAPForceDefaultGID off - LDAPAttr gidNumber immaeFtpGid - LDAPAttr uidNumber immaeFtpUid - LDAPAttr homeDirectory immaeFtpDirectory - LDAPUsers "${config.myEnv.ftp.ldap.base}" "${config.myEnv.ftp.ldap.proftpd_filter}" - LDAPGroups "${config.myEnv.ftp.ldap.base}" - ''; - }; - - services.filesWatcher.pure-ftpd = lib.mkIf pure-ftpd-enabled { - restart = true; - paths = [ config.secrets.fullPaths."pure-ftpd-ldap" ]; - }; - services.filesWatcher.proftpd = lib.mkIf proftpd-enabled { - restart = true; - paths = [ config.secrets.fullPaths."proftpd-ldap.conf" ]; - }; - - systemd.services.pure-ftpd = let - configFile = pkgs.writeText "pure-ftpd.conf" '' - PassivePortRange 40000 50000 - Bind 42 - ChrootEveryone yes - CreateHomeDir yes - BrokenClientsCompatibility yes - MaxClientsNumber 50 - Daemonize yes - MaxClientsPerIP 8 - VerboseLog no - DisplayDotFiles yes - AnonymousOnly no - NoAnonymous no - SyslogFacility ftp - DontResolve yes - MaxIdleTime 15 - LDAPConfigFile ${config.secrets.fullPaths."pure-ftpd-ldap"} - LimitRecursion 10000 8 - AnonymousCanCreateDirs no - MaxLoad 4 - AntiWarez yes - Umask 133:022 - # ftp - MinUID 8 - AllowUserFXP no - AllowAnonymousFXP no - ProhibitDotFilesWrite no - ProhibitDotFilesRead no - AutoRename no - AnonymousCantUpload no - MaxDiskUsage 99 - CustomerProof yes - TLS 1 - CertFile ${config.security.acme.certs.ftp.directory}/full.pem - ''; - in lib.mkIf pure-ftpd-enabled { - description = "Pure-FTPd server"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - - serviceConfig.ExecStart = "${package}/bin/pure-ftpd ${configFile}"; - serviceConfig.Type = "forking"; - serviceConfig.PIDFile = "/run/pure-ftpd.pid"; - }; - - systemd.services.proftpd = let - configFile = pkgs.writeText "proftpd.conf" '' - ServerName "ProFTPD" - ServerType standalone - DefaultServer on - - Port 21 - UseIPv6 on - Umask 022 - MaxInstances 30 - MaxClients 50 - MaxClientsPerHost 8 - - # Set the user and group under which the server will run. - User ftp - Group ftp - - CreateHome on - DefaultRoot ~ - - AllowOverwrite on - - TLSEngine on - TLSRequired off - TLSProtocol TLSv1.1 TLSv1.2 TLSv1.3 - - TLSCertificateChainFile ${config.security.acme.certs.ftp.directory}/fullchain.pem - TLSECCertificateFile ${config.security.acme.certs.ftp.directory}/cert.pem - TLSECCertificateKeyFile ${config.security.acme.certs.ftp.directory}/key.pem - TLSRenegotiate none - PidFile /run/proftpd/proftpd.pid - - ScoreboardFile /run/proftpd/proftpd.scoreboard - - PassivePorts 40000 50000 - #DebugLevel 10 - Include ${config.secrets.fullPaths."proftpd-ldap.conf"} - - RequireValidShell off - - # Bar use of SITE CHMOD by default - - DenyAll - - - - Umask 022 - Port 115 - SFTPEngine on - CreateHome on - DefaultRoot ~ - - AllowOverwrite on - - SFTPHostKey /etc/ssh/ssh_host_ed25519_key - SFTPHostKey /etc/ssh/ssh_host_rsa_key - Include ${config.secrets.fullPaths."proftpd-ldap.conf"} - RequireValidShell off - SFTPAuthorizedUserKeys file:/var/lib/proftpd/authorized_keys/%u - SFTPAuthMethods password publickey - - SFTPOptions IgnoreSFTPSetOwners - - ''; - in lib.mkIf proftpd-enabled { - description = "ProFTPD server"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - - serviceConfig.ExecStart = "${pkgs.proftpd}/bin/proftpd -c ${configFile}"; - serviceConfig.Type = "forking"; - serviceConfig.PIDFile = "/run/proftpd/proftpd.pid"; - serviceConfig.RuntimeDirectory = "proftpd"; - }; - - services.cron.systemCronJobs = lib.mkIf proftpd-enabled [ - "*/2 * * * * nobody ${./ftp_sync.sh}" - ]; - }; - -} diff --git a/modules/private/ftp_sync.sh b/modules/private/ftp_sync.sh deleted file mode 100755 index 8b0d9c5..0000000 --- a/modules/private/ftp_sync.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env bash - -LDAPSEARCH=ldapsearch - -LDAP_BIND="cn=ssh,ou=services,dc=immae,dc=eu" -LDAP_PASS=$(cat /etc/ssh/ldap_password) -LDAP_HOST="ldap.immae.eu" -LDAP_BASE="dc=immae,dc=eu" -LDAP_FILTER="(memberOf=cn=users,cn=ftp,ou=services,dc=immae,dc=eu)" - -handle_keys() { - uids="$1" - keys="$2" - if [ -n "$uids" ]; then - for uid in $uids; do - echo "$keys" | while read key; do - if [ -n "$key" ]; then - ssh-keygen -e -f <(echo "$key") - fi - done > /var/lib/proftpd/authorized_keys/$uid - done - fi -} - -mkdir -p /var/lib/proftpd/authorized_keys - -while read i; do - if [[ "$i" =~ ^dn: ]]; then - handle_keys "$uids" "$keys" - uids="" - keys="" - fi; - if [[ "$i" =~ ^uid: ]]; then - uids="$uids ${i#uid: }" - fi - if [[ "$i" =~ ^immaeSshKey: ]]; then - key="${i#immaeSshKey: }" - if [[ "$key" =~ ^ssh- ]]; then - keys="$keys -$key" - elif echo "$key" | cut -d" " -f1 | grep -q "\bftp\b"; then - keys="$keys -$(echo "$key" | cut -d" " -f2-)" - fi - fi -done < <(ldapsearch -h "$LDAP_HOST" -ZZ -LLL -D "$LDAP_BIND" -w "$LDAP_PASS" -b "$LDAP_BASE" -x -o ldif-wrap=no "$LDAP_FILTER" uid immaeSshKey) -handle_keys "$uids" "$keys" diff --git a/modules/private/gemini/default.nix b/modules/private/gemini/default.nix deleted file mode 100644 index ffe8a12..0000000 --- a/modules/private/gemini/default.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ lib, config, pkgs, ... }: -let - configFile = pkgs.writeText "config.yaml" '' - listen: ":1965" - hosts: - immae.eu: - cert: /var/lib/acme/immae/full.pem - key: /var/lib/acme/immae/key.pem - paths: - - path: / - root: ${./public} - ''; -in -{ - options.myServices.gemini.enable = lib.mkEnableOption "enable Gemini capsule"; - config = lib.mkIf config.myServices.gemini.enable { - networking.firewall.allowedTCPPorts = [ 1965 ]; - systemd.services.gemini = { - description = "Gemini capsule server"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - serviceConfig.ExecStart = "${pkgs.twins}/bin/twins -config ${configFile}"; - serviceConfig.Type = "simple"; - }; - }; -} diff --git a/modules/private/gemini/public/index.gmi b/modules/private/gemini/public/index.gmi deleted file mode 100644 index 034a0d9..0000000 --- a/modules/private/gemini/public/index.gmi +++ /dev/null @@ -1,70 +0,0 @@ -# Immae - -## Présentation - -Dans le but de promouvoir la décentralisation des données personnelles et l’usage de logiciels open source, je propose un hébergement de divers services utiles. Ces services sont basés sur du code libre et déployés sur des systèmes libres également. - -Je suis un particulier, et dans la mesure de mes capacités, j’essaye toujours de fournir des services à ma famille et à mes amis proches en remplacement de services non libres fournis par les géants du web. J’ai décidé de faire le nécessaire pour étendre ces services à un public plus large, avec pour but de conserver une qualité suffisante. - -Lorsque c’est possible, les programmes que je développe sont également libres de droits (ce n’est pas toujours dépendant de ma volonté ou tributaire de ma disponibilité pour rendre le code accessible) - -Depuis juin 2019 je fais partie du collectif CHATONS, dont je respecte en particulier la charte: -=> https://chatons.org CHATONS - -## Tarifs - -Je ne cherche pas à faire de profits en proposant ces services. Cependant, l’hébergement de ces services n’est pas gratuit, et maintenir ces services à un niveau de qualité suffisant demande de l’investissement en temps. Ainsi, selon l’usage désiré, le niveau de personnalisation et support dont vous avez besoin et les moyens à votre disposition et votre volonté, une participation pourra être demandée afin d’y accéder. -=> https://www.immae.eu/licences_et_tip.html Tips - -## Services proposés - -Voici une liste non exhaustive de services que je propose : - -* Mastodon -* Nextcloud -* Calendrier/Contacts et synchronisation -* Hébergement de vidéos (Mediagoblin) -* Hébergement de vidéos (Peertube) -* Kanboard -* Flux RSS -* "Lire plus tard" (wallabag) -* Partage de liens (Shaarli) -* Raccourcisseur d’URLs -* Édition de texte collaborative -* Réseau social -* Hébergement de dépôts git privés et publics, gestion d’issues -* Messagerie instantanée (XMPP/Jabber) -* Comptes e-mails avec domaines personnalisés, IMAP/SMTP, MX backup -* Hébergement et administration de sites web privés -* Comptes shell protégés - -Un tableau de bord des services est disponible : -=> https://tools.immae.eu Tableau de bord des services - -Je propose également de l’aide à distance (ou de visu si la distance est faible), pour l’usage de ces outils ou d’autres problèmes liés à l’informatique. - -Si vous ne voyez pas ce que vous voulez dans la liste, nous pourrons essayer de trouver une solution ensemble. Je suis ouvert aussi bien sûr à la création de nouveaux services (la liste est encore incomplète et d’autres services sont déjà prévus), dans le cadre défini en haut : basé sur des applications libres. - -=> https://status.immae.eu État des services - -## Comment faire ? - -Vous devez commencer par accepter les conditions générales dgutilisation : -=> https://www.immae.eu/CGU Conditions générales d’utilisation -Elles ne contiennent rien d’inhabituel mais elles ont été écrites par moi-même, donc sans jargon juridique. Elles vous permettront de décider si les garanties proposées sont en accord avec ce que vous pouvez vous permettre. - -Ensuite, contactez-moi avec vos vœux : -=> https://www.immae.eu/contacts_fr.html Page de contact - -## Infrastructure et open source - -Dans le but de pouvoir décemment offrir une qualité de service suffisante sans pour autant y passer mes journées, l’installation des services est gérée via NixOS, permettant d’assurer la reproductibilité et l’automatisation des installations. - -Cette configuration est stockée publiquement dans un dépôt git, réutilisable et améliorable librement (avec probablement quelques ajustements). -=> https://git.immae.eu/cgit/perso/Immae/Config/Nix.git/ Dépôt git de la configuration - - -=> https://www.immae.eu/contacts_fr.html Page de contact -=> https://www.immae.eu/CGU Conditions générales d’utilisation -=> https://www.immae.eu/mentions.html Mentions légales -=> https://www.immae.eu/licences_et_tip.html Quelques informations sur les licences utilisées et tips diff --git a/modules/private/gitolite/default.nix b/modules/private/gitolite/default.nix deleted file mode 100644 index 6a74734..0000000 --- a/modules/private/gitolite/default.nix +++ /dev/null @@ -1,77 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.gitolite; -in { - options.myServices.gitolite = { - enable = lib.mkEnableOption "my gitolite service"; - gitoliteDir = lib.mkOption { - type = lib.types.str; - default = "/var/lib/gitolite"; - }; - }; - - config = lib.mkIf cfg.enable { - myServices.ssh.modules = [{ - snippet = builtins.readFile ./ldap_gitolite.sh; - dependencies = [ pkgs.gitolite ]; - }]; - networking.firewall.allowedTCPPorts = [ 9418 ]; - - secrets.keys."gitolite/ldap_password" = { - user = "gitolite"; - group = "gitolite"; - permissions = "0400"; - text = config.myEnv.tools.gitolite.ldap.password; - }; - - services.gitDaemon = { - enable = true; - user = "gitolite"; - group = "gitolite"; - basePath = "${cfg.gitoliteDir}/repositories"; - }; - - system.activationScripts.gitolite = let - deps = [ pkgs.openldap pkgs.stdenv.shellPackage pkgs.gnugrep pkgs.coreutils ]; - gitolite_ldap_groups = pkgs.runCommand "gitolite_ldap_groups.sh" { - buildInputs = [ pkgs.makeWrapper ]; - } '' - makeWrapper "${./gitolite_ldap_groups.sh}" "$out" \ - --prefix PATH : ${lib.makeBinPath deps} \ - --set LDAP_PASS_PATH ${config.secrets.fullPaths."gitolite/ldap_password"} - ''; - in { - deps = [ "users" ]; - text = '' - if [ -d ${cfg.gitoliteDir} ]; then - ln -sf ${gitolite_ldap_groups} ${cfg.gitoliteDir}/gitolite_ldap_groups.sh - chmod g+rx ${cfg.gitoliteDir} - fi - if [ -f ${cfg.gitoliteDir}/projects.list ]; then - chmod g+r ${cfg.gitoliteDir}/projects.list - fi - ''; - }; - - users.users.wwwrun.extraGroups = [ "gitolite" ]; - users.users.gitolite.extraGroups = [ "keys" ]; - - users.users.gitolite.packages = let - python-packages = python-packages: with python-packages; [ - simplejson - urllib3 - sleekxmpp - ]; - in - [ - (pkgs.python3.withPackages python-packages) - pkgs.nettools - pkgs.findutils - ]; - # Installation: https://git.immae.eu/mantisbt/view.php?id=93 - services.gitolite = { - enable = true; - adminPubkey = config.myEnv.sshd.rootKeys.immae_dilion; - }; - }; -} diff --git a/modules/private/gitolite/gitolite_ldap_groups.sh b/modules/private/gitolite/gitolite_ldap_groups.sh deleted file mode 100755 index 3d7117e..0000000 --- a/modules/private/gitolite/gitolite_ldap_groups.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash - -uid_param="$1" -ldap_host="ldap.immae.eu" -ldap_binddn="cn=gitolite,ou=services,dc=immae,dc=eu" -ldap_bindpw="$(cat $LDAP_PASS_PATH)" -ldap_searchbase="dc=immae,dc=eu" -ldap_scope="subtree" - -ldap_options="-h ${ldap_host} -ZZ -x -D ${ldap_binddn} -w ${ldap_bindpw} -b ${ldap_searchbase} -s ${ldap_scope}" - -ldap_filter="(&(memberOf=cn=groups,cn=gitolite,ou=services,dc=immae,dc=eu)(|(member=uid=${uid_param},ou=users,dc=immae,dc=eu)(member=uid=${uid_param},ou=group_users,dc=immae,dc=eu)))" -ldap_result=$(ldapsearch ${ldap_options} -LLL "${ldap_filter}" cn | grep 'cn:' | cut -d' ' -f2) - -echo "$ldap_result" diff --git a/modules/private/gitolite/ldap_gitolite.sh b/modules/private/gitolite/ldap_gitolite.sh deleted file mode 100644 index 23cb2bf..0000000 --- a/modules/private/gitolite/ldap_gitolite.sh +++ /dev/null @@ -1,33 +0,0 @@ -### This snippet is not standalone and must be integrated in the global ldap_authorized_keys.sh -LDAP_GITOLITE_MEMBER="cn=users,cn=gitolite,ou=services,dc=immae,dc=eu" -GITOLITE_SHELL=$(which gitolite-shell) - -if [[ $user == gitolite ]]; then - ldap_search '(&(memberOf='$LDAP_GITOLITE_MEMBER')('$KEY'=*))' $KEY | \ - while read line ; - do - if [ ! -z "$line" ]; then - if [[ $line == dn* ]]; then - user=$(sed -n 's/.*uid=\([^,]*\).*/\1/p' <<< "$line") - if [ -n "$user" ]; then - if [[ $user == "immae" ]] || [[ $user == "denise" ]]; then - # Capitalize first letter (backward compatibility) - user=$(sed -r 's/^([a-z])/\U\1/' <<< "$user") - fi - else - # Service fake user - user=$(sed -n 's/.*cn=\([^,]*\).*/\1/p' <<< "$line") - fi - elif [[ $line == $KEY* ]]; then - key=$(clean_key_line git "$line") - if [ ! -z "$key" ]; then - if [[ $key != *$'\n'* ]] && [[ $key == ssh-* ]]; then - echo -n 'command="'$GITOLITE_SHELL' '$user'",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ' - echo $key - fi - fi - fi - fi - done - exit 0 -fi diff --git a/modules/private/irc.nix b/modules/private/irc.nix deleted file mode 100644 index bc0bfb4..0000000 --- a/modules/private/irc.nix +++ /dev/null @@ -1,54 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.irc; -in -{ - options.myServices = { - ircCerts = lib.mkOption { - description = "Default ircconfigurations for certificates as accepted by acme"; - }; - irc.enable = lib.mkOption { - type = lib.types.bool; - default = false; - description = '' - Whether to enable irc stuff. - ''; - }; - }; - - config = lib.mkIf cfg.enable { - security.acme.certs."irc" = config.myServices.ircCerts // { - domain = "irc.immae.eu"; - postRun = '' - systemctl restart stunnel.service - ''; - }; - - networking.firewall.allowedTCPPorts = [ 6697 ]; - services.bitlbee = with pkgs; { - enable = true; - authMode = "Registered"; - libpurple_plugins = [ - purple-hangouts - purple-matrix - ]; - plugins = [ - bitlbee-mastodon - bitlbee-facebook - bitlbee-discord - bitlbee-steam - ]; - }; - - services.stunnel = { - enable = true; - servers = { - bitlbee = { - accept = 6697; - connect = 6667; - cert = "${config.security.acme.certs.irc.directory}/full.pem"; - }; - }; - }; - }; -} diff --git a/modules/private/loginctl-linger.nix b/modules/private/loginctl-linger.nix deleted file mode 100644 index e6b9f23..0000000 --- a/modules/private/loginctl-linger.nix +++ /dev/null @@ -1,47 +0,0 @@ -{ config, lib, pkgs, ... }: - -# https://github.com/michalrus/dotfiles/commit/ebd5fa9583f82589f23531647aa677feb3f8d344#diff-4d353005ef5b3e37f33c07332b8523edR1 -# A temporary hack to `loginctl enable-linger $somebody` (for -# multiplexer sessions to last), until this one is unresolved: -# https://github.com/NixOS/nixpkgs/issues/3702 -# -# Usage: `users.extraUsers.somebody.linger = true` or slt. - -with lib; - -let - - dataDir = "/var/lib/systemd/linger"; - - lingeringUsers = map (u: u.name) (attrValues (flip filterAttrs config.users.users (n: u: u.linger))); - - lingeringUsersFile = builtins.toFile "lingering-users" - (concatStrings (map (s: "${s}\n") - (sort (a: b: a < b) lingeringUsers))); # this sorting is important for `comm` to work correctly - - updateLingering = pkgs.writeScript "update-lingering" '' - if [ ! -e ${dataDir} ]; then - install -m 0755 -o root -g root -d ${dataDir} - fi - if [ -e ${dataDir} ] ; then - ls ${dataDir} | sort | comm -3 -1 ${lingeringUsersFile} - | xargs -r ${pkgs.systemd}/bin/loginctl disable-linger - ls ${dataDir} | sort | comm -3 -2 ${lingeringUsersFile} - | xargs -r ${pkgs.systemd}/bin/loginctl enable-linger - fi - ''; - -in - -{ - options = { - users.users = mkOption { - options = [{ - linger = mkEnableOption "lingering for the user"; - }]; - }; - }; - - config = { - system.activationScripts.update-lingering = - stringAfter [ "users" ] updateLingering; - }; -} diff --git a/modules/private/mail/default.nix b/modules/private/mail/default.nix deleted file mode 100644 index 2d405c6..0000000 --- a/modules/private/mail/default.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ lib, pkgs, config, ... }: -{ - imports = [ - ./milters.nix - ./postfix.nix - ./dovecot.nix - ./relay.nix - ./rspamd.nix - ./opensmtpd.nix - ./sympa.nix - ]; - options.myServices.mail.enable = lib.mkEnableOption "enable Mail services"; - options.myServices.mailRelay.enable = lib.mkEnableOption "enable Mail relay services"; - options.myServices.mailBackup.enable = lib.mkEnableOption "enable MX backup services"; - - config = lib.mkIf config.myServices.mail.enable { - security.acme.certs."mail" = config.myServices.certificates.certConfig // { - domain = config.hostEnv.fqdn; - extraDomains = let - zonesWithMx = builtins.filter (zone: - lib.attrsets.hasAttr "withEmail" zone && lib.lists.length zone.withEmail > 0 - ) config.myEnv.dns.masterZones; - mxs = map (zone: "${config.hostEnv.mx.subdomain}.${zone.name}") zonesWithMx; - in builtins.listToAttrs (map (mx: lib.attrsets.nameValuePair mx null) mxs); - }; - # This is for clients that don’t support elliptic curves (e.g. - # printer) - security.acme.certs."mail-rsa" = config.myServices.certificates.certConfig // { - domain = config.hostEnv.fqdn; - keyType = "rsa4096"; - extraDomains = let - zonesWithMx = builtins.filter (zone: - lib.attrsets.hasAttr "withEmail" zone && lib.lists.length zone.withEmail > 0 - ) config.myEnv.dns.masterZones; - mxs = map (zone: "${config.hostEnv.mx.subdomain}.${zone.name}") zonesWithMx; - in builtins.listToAttrs (map (mx: lib.attrsets.nameValuePair mx null) mxs); - }; - systemd.slices.mail = { - description = "Mail slice"; - }; - }; -} diff --git a/modules/private/mail/dovecot.nix b/modules/private/mail/dovecot.nix deleted file mode 100644 index b6fdc02..0000000 --- a/modules/private/mail/dovecot.nix +++ /dev/null @@ -1,292 +0,0 @@ -{ lib, pkgs, config, ... }: -let - sieve_bin = pkgs.runCommand "sieve_bin" { - buildInputs = [ pkgs.makeWrapper ]; - } '' - cp -a ${./sieve_bin} $out - chmod -R u+w $out - patchShebangs $out - for i in $out/*; do - wrapProgram "$i" --prefix PATH : ${lib.makeBinPath [ pkgs.coreutils ]} - done - ''; -in -{ - config = lib.mkIf config.myServices.mail.enable { - systemd.services.dovecot2.serviceConfig.Slice = "mail.slice"; - secrets.keys."dovecot/ldap" = { - user = config.services.dovecot2.user; - group = config.services.dovecot2.group; - permissions = "0400"; - text = '' - hosts = ${config.myEnv.mail.dovecot.ldap.host} - tls = yes - - dn = ${config.myEnv.mail.dovecot.ldap.dn} - dnpass = ${config.myEnv.mail.dovecot.ldap.password} - - auth_bind = yes - - ldap_version = 3 - - base = ${config.myEnv.mail.dovecot.ldap.base} - scope = subtree - - pass_filter = ${config.myEnv.mail.dovecot.ldap.filter} - pass_attrs = ${config.myEnv.mail.dovecot.ldap.pass_attrs} - - user_attrs = ${config.myEnv.mail.dovecot.ldap.user_attrs} - user_filter = ${config.myEnv.mail.dovecot.ldap.filter} - iterate_attrs = ${config.myEnv.mail.dovecot.ldap.iterate_attrs} - iterate_filter = ${config.myEnv.mail.dovecot.ldap.iterate_filter} - ''; - }; - - users.users.vhost = { - group = "vhost"; - uid = config.ids.uids.vhost; - }; - users.groups.vhost.gid = config.ids.gids.vhost; - - # https://blog.zeninc.net/index.php?post/2018/04/01/Un-annuaire-pour-les-gouverner-tous....... - services.dovecot2 = { - enable = true; - enablePAM = false; - enablePop3 = true; - enableImap = true; - enableLmtp = true; - protocols = [ "sieve" ]; - modules = [ - pkgs.dovecot_pigeonhole - pkgs.dovecot_fts-xapian - ]; - mailUser = "vhost"; - mailGroup = "vhost"; - createMailUser = false; - mailboxes = { - Trash = { auto = "subscribe"; specialUse = "Trash"; }; - Junk = { auto = "subscribe"; specialUse = "Junk"; }; - Sent = { auto = "subscribe"; specialUse = "Sent"; }; - Drafts = { auto = "subscribe"; specialUse = "Drafts"; }; - }; - mailLocation = "mbox:~/Mail:INBOX=~/Mail/Inbox:INDEX=~/.imap"; - sslServerCert = "/var/lib/acme/mail/fullchain.pem"; - sslServerKey = "/var/lib/acme/mail/key.pem"; - sslCACert = "/var/lib/acme/mail/fullchain.pem"; - extraConfig = builtins.concatStringsSep "\n" [ - # For printer which doesn’t support elliptic curve - '' - ssl_alt_cert = &1 > /dev/null | grep -v "Mailbox doesn't exist:" | grep -v "Info: Opening DB" - ${pkgs.dovecot}/bin/doveadm expunge -A MAILBOX Junk SEEN NOT FLAGGED BEFORE 4w 2>&1 > /dev/null | grep -v "Mailbox doesn't exist:" | grep -v "Info: Opening DB" - ${pkgs.dovecot}/bin/doveadm expunge -A MAILBOX Trash NOT FLAGGED BEFORE 4w 2>&1 > /dev/null | grep -v "Mailbox doesn't exist:" | grep -v "Info: Opening DB" - ''; - in - [ - "0 2 * * * root ${cron_script}/bin/cleanup-imap-folders" - ]; - security.acme.certs."mail-rsa" = { - postRun = '' - systemctl restart dovecot2.service - ''; - extraDomains = { - "imap.immae.eu" = null; - "pop3.immae.eu" = null; - }; - }; - security.acme.certs."mail" = { - postRun = '' - systemctl restart dovecot2.service - ''; - extraDomains = { - "imap.immae.eu" = null; - "pop3.immae.eu" = null; - }; - }; - }; -} - diff --git a/modules/private/mail/filter-rewrite-from.py b/modules/private/mail/filter-rewrite-from.py deleted file mode 100755 index aad9c69..0000000 --- a/modules/private/mail/filter-rewrite-from.py +++ /dev/null @@ -1,68 +0,0 @@ -#! /usr/bin/env python3 -import sys - -sys.stdin.reconfigure(encoding='utf-8') -sys.stdout.reconfigure(encoding='utf-8') -stdin = sys.stdin -stdout = sys.stdout - -mailaddr = sys.argv[1] -inheader = {} - -# Change to actual file for logging -logfile = open("/dev/null", "a") - -def log(l, i): - logfile.write("{} {}\n".format(i, l)) - logfile.flush() - -def send(l): - log(l, ">") - stdout.write("{}\n".format(l)) - stdout.flush() - -def token_and_sid(version, sid, token): - if version < "0.5": - return "{}|{}".format(token, sid) - else: - return "{}|{}".format(sid, token) - -log("started", "l") -while True: - line = stdin.readline().strip() - log(line, "<") - if not line: - log("finished", "l") - break - splitted = line.split("|") - if line == "config|ready": - log("in config ready", "l") - send("register|filter|smtp-in|mail-from") - send("register|filter|smtp-in|data-line") - send("register|ready") - if splitted[0] != "filter": - continue - if len(splitted) < 7: - send("invalid filter command: expected >6 fields!") - sys.exit(1) - version = splitted[1] - action = splitted[4] - sid = splitted[5] - token = splitted[6] - token_sid = token_and_sid(version, sid, token) - rest = "|".join(splitted[7:]) - if action == "mail-from": - inheader[sid] = True - send("filter-result|{}|rewrite|<{}>".format(token_sid, mailaddr)) - continue - if action == "data-line": - if rest == "" and inheader.get(sid, False): - inheader[sid] = False - if rest == "." and not inheader.get(sid): - del(inheader[sid]) - if inheader.get(sid, False) and rest.upper().startswith("FROM:"): - send("filter-dataline|{}|From: {}".format(token_sid, mailaddr)) - else: - send("filter-dataline|{}|{}".format(token_sid, rest)) - continue - send("filter-result|{}|proceed".format(token_sid)) diff --git a/modules/private/mail/milters.nix b/modules/private/mail/milters.nix deleted file mode 100644 index 4b93a7a..0000000 --- a/modules/private/mail/milters.nix +++ /dev/null @@ -1,88 +0,0 @@ -{ lib, pkgs, config, name, ... }: -{ - imports = - builtins.attrValues (import ../../../lib/flake-compat.nix ../../../flakes/private/openarc).nixosModules - ++ builtins.attrValues (import ../../../lib/flake-compat.nix ../../../flakes/private/opendmarc).nixosModules; - - options.myServices.mail.milters.sockets = lib.mkOption { - type = lib.types.attrsOf lib.types.path; - default = { - opendkim = "/run/opendkim/opendkim.sock"; - opendmarc = config.services.opendmarc.socket; - openarc = config.services.openarc.socket; - }; - readOnly = true; - description = '' - milters sockets - ''; - }; - config = lib.mkIf (config.myServices.mail.enable || config.myServices.mailBackup.enable) { - secrets.keys = { - "opendkim" = { - isDir = true; - user = config.services.opendkim.user; - group = config.services.opendkim.group; - permissions = "0550"; - }; - "opendkim/eldiron.private" = { - user = config.services.opendkim.user; - group = config.services.opendkim.group; - permissions = "0400"; - text = config.myEnv.mail.dkim.eldiron.private; - }; - "opendkim/eldiron.txt" = { - user = config.services.opendkim.user; - group = config.services.opendkim.group; - permissions = "0444"; - text = '' - eldiron._domainkey IN TXT ${config.myEnv.mail.dkim.eldiron.public}''; - }; - }; - users.users."${config.services.opendkim.user}".extraGroups = [ "keys" ]; - services.opendkim = { - enable = true; - socket = "local:${config.myServices.mail.milters.sockets.opendkim}"; - domains = builtins.concatStringsSep "," (lib.flatten (map - (zone: map - (e: "${e.domain}${lib.optionalString (e.domain != "") "."}${zone.name}") - (zone.withEmail or []) - ) - config.myEnv.dns.masterZones - )); - keyPath = config.secrets.fullPaths."opendkim"; - selector = "eldiron"; - configFile = pkgs.writeText "opendkim.conf" '' - SubDomains yes - UMask 002 - AlwaysAddARHeader yes - ''; - group = config.services.postfix.group; - }; - systemd.services.opendkim.serviceConfig.Slice = "mail.slice"; - systemd.services.opendkim.preStart = lib.mkBefore '' - # Skip the prestart script as keys are handled in secrets - exit 0 - ''; - services.filesWatcher.opendkim = { - restart = true; - paths = [ - config.secrets.fullPaths."opendkim/eldiron.private" - ]; - }; - - systemd.services.milter_verify_from = { - description = "Verify from milter"; - after = [ "network.target" ]; - wantedBy = [ "multi-user.target" ]; - - serviceConfig = { - Slice = "mail.slice"; - User = "postfix"; - Group = "postfix"; - ExecStart = let python = pkgs.python3.withPackages (p: [ p.pymilter ]); - in "${python}/bin/python ${./verify_from.py} -s /run/milter_verify_from/verify_from.sock"; - RuntimeDirectory = "milter_verify_from"; - }; - }; - }; -} diff --git a/modules/private/mail/opensmtpd.nix b/modules/private/mail/opensmtpd.nix deleted file mode 100644 index e05bba9..0000000 --- a/modules/private/mail/opensmtpd.nix +++ /dev/null @@ -1,57 +0,0 @@ -{ lib, pkgs, config, name, ... }: -{ - config = lib.mkIf config.myServices.mailRelay.enable { - secrets.keys."opensmtpd/creds" = { - user = "smtpd"; - group = "smtpd"; - permissions = "0400"; - text = '' - eldiron ${name}:${config.hostEnv.ldap.password} - ''; - }; - users.users.smtpd.extraGroups = [ "keys" ]; - services.opensmtpd = { - enable = true; - serverConfiguration = let - filter-rewrite-from = pkgs.runCommand "filter-rewrite-from.py" { - buildInputs = [ pkgs.python3 ]; - } '' - cp ${./filter-rewrite-from.py} $out - patchShebangs $out - ''; - in '' - table creds \ - "${config.secrets.fullPaths."opensmtpd/creds"}" - # FIXME: filtering requires 6.6, uncomment following lines when - # upgrading - # filter "fixfrom" \ - # proc-exec "${filter-rewrite-from} ${name}@immae.eu" - # listen on socket filter "fixfrom" - action "relay-rewrite-from" relay \ - helo ${config.hostEnv.fqdn} \ - host smtp+tls://eldiron@eldiron.immae.eu:587 \ - auth \ - mail-from ${name}@immae.eu - action "relay" relay \ - helo ${config.hostEnv.fqdn} \ - host smtp+tls://eldiron@eldiron.immae.eu:587 \ - auth - match for any !mail-from "@immae.eu" action "relay-rewrite-from" - match for any mail-from "@immae.eu" action "relay" - ''; - }; - environment.systemPackages = [ config.services.opensmtpd.package ]; - services.mail.sendmailSetuidWrapper = { - program = "sendmail"; - source = "${config.services.opensmtpd.package}/bin/smtpctl"; - setuid = false; - setgid = false; - }; - security.wrappers.mailq = { - program = "mailq"; - source = "${config.services.opensmtpd.package}/bin/smtpctl"; - setuid = false; - setgid = false; - }; - }; -} diff --git a/modules/private/mail/postfix.nix b/modules/private/mail/postfix.nix deleted file mode 100644 index ae98a8a..0000000 --- a/modules/private/mail/postfix.nix +++ /dev/null @@ -1,471 +0,0 @@ -{ lib, pkgs, config, nodes, ... }: -{ - config = lib.mkIf config.myServices.mail.enable { - secrets.keys = { - "postfix/mysql_alias_maps" = { - user = config.services.postfix.user; - group = config.services.postfix.group; - permissions = "0440"; - text = '' - # We need to specify that option to trigger ssl connection - tls_ciphers = TLSv1.2 - user = ${config.myEnv.mail.postfix.mysql.user} - password = ${config.myEnv.mail.postfix.mysql.password} - hosts = unix:${config.myEnv.mail.postfix.mysql.socket} - dbname = ${config.myEnv.mail.postfix.mysql.database} - query = SELECT DISTINCT destination - FROM forwardings - WHERE - ((regex = 1 AND '%s' REGEXP CONCAT('^',source,'$') ) OR (regex = 0 AND source = '%s')) - AND active = 1 - AND '%s' NOT IN - ( - SELECT source - FROM forwardings_blacklisted - WHERE source = '%s' - ) UNION - SELECT 'devnull@immae.eu' - FROM forwardings_blacklisted - WHERE source = '%s' - ''; - }; - "postfix/ldap_mailboxes" = { - user = config.services.postfix.user; - group = config.services.postfix.group; - permissions = "0440"; - text = '' - server_host = ldaps://${config.myEnv.mail.dovecot.ldap.host}:636 - search_base = ${config.myEnv.mail.dovecot.ldap.base} - query_filter = ${config.myEnv.mail.dovecot.ldap.postfix_mailbox_filter} - bind_dn = ${config.myEnv.mail.dovecot.ldap.dn} - bind_pw = ${config.myEnv.mail.dovecot.ldap.password} - result_attribute = immaePostfixAddress - result_format = dummy - version = 3 - ''; - }; - "postfix/mysql_sender_login_maps" = { - user = config.services.postfix.user; - group = config.services.postfix.group; - permissions = "0440"; - text = '' - # We need to specify that option to trigger ssl connection - tls_ciphers = TLSv1.2 - user = ${config.myEnv.mail.postfix.mysql.user} - password = ${config.myEnv.mail.postfix.mysql.password} - hosts = unix:${config.myEnv.mail.postfix.mysql.socket} - dbname = ${config.myEnv.mail.postfix.mysql.database} - query = SELECT DISTINCT destination - FROM forwardings - WHERE - ( - (regex = 1 AND CONCAT(SUBSTRING_INDEX('%u', '+', 1), '@%d') REGEXP CONCAT('^',source,'$') ) - OR - (regex = 0 AND source = CONCAT(SUBSTRING_INDEX('%u', '+', 1), '@%d')) - ) - AND active = 1 - UNION SELECT CONCAT(SUBSTRING_INDEX('%u', '+', 1), '@%d') AS destination - ''; - }; - "postfix/mysql_sender_relays_maps" = { - user = config.services.postfix.user; - group = config.services.postfix.group; - permissions = "0440"; - text = '' - # We need to specify that option to trigger ssl connection - tls_ciphers = TLSv1.2 - user = ${config.myEnv.mail.postfix.mysql.user} - password = ${config.myEnv.mail.postfix.mysql.password} - hosts = unix:${config.myEnv.mail.postfix.mysql.socket} - dbname = ${config.myEnv.mail.postfix.mysql.database} - # INSERT INTO sender_relays - # (`from`, owner, relay, login, password, regex, active) - # VALUES - # ( 'sender@otherhost.org' - # , 'me@mail.immae.eu' - # , '[otherhost.org]:587' - # , 'otherhostlogin' - # , AES_ENCRYPT('otherhostpassword', '${config.myEnv.mail.postfix.mysql.password_encrypt}') - # , '0' - # , '1'); - - query = SELECT DISTINCT `owner` - FROM sender_relays - WHERE - ((regex = 1 AND '%s' REGEXP CONCAT('^',`from`,'$') ) OR (regex = 0 AND `from` = '%s')) - AND active = 1 - ''; - }; - "postfix/mysql_sender_relays_hosts" = { - user = config.services.postfix.user; - group = config.services.postfix.group; - permissions = "0440"; - text = '' - # We need to specify that option to trigger ssl connection - tls_ciphers = TLSv1.2 - user = ${config.myEnv.mail.postfix.mysql.user} - password = ${config.myEnv.mail.postfix.mysql.password} - hosts = unix:${config.myEnv.mail.postfix.mysql.socket} - dbname = ${config.myEnv.mail.postfix.mysql.database} - - query = SELECT DISTINCT relay - FROM sender_relays - WHERE - ((regex = 1 AND '%s' REGEXP CONCAT('^',`from`,'$') ) OR (regex = 0 AND `from` = '%s')) - AND active = 1 - ''; - }; - "postfix/mysql_sender_relays_creds" = { - user = config.services.postfix.user; - group = config.services.postfix.group; - permissions = "0440"; - text = '' - # We need to specify that option to trigger ssl connection - tls_ciphers = TLSv1.2 - user = ${config.myEnv.mail.postfix.mysql.user} - password = ${config.myEnv.mail.postfix.mysql.password} - hosts = unix:${config.myEnv.mail.postfix.mysql.socket} - dbname = ${config.myEnv.mail.postfix.mysql.database} - - query = SELECT DISTINCT CONCAT(`login`, ':', AES_DECRYPT(`password`, '${config.myEnv.mail.postfix.mysql.password_encrypt}')) - FROM sender_relays - WHERE - ((regex = 1 AND '%s' REGEXP CONCAT('^',`from`,'$') ) OR (regex = 0 AND `from` = '%s')) - AND active = 1 - ''; - }; - "postfix/ldap_ejabberd_users_immae_fr" = { - user = config.services.postfix.user; - group = config.services.postfix.group; - permissions = "0440"; - text = '' - server_host = ldaps://${config.myEnv.jabber.ldap.host}:636 - search_base = ${config.myEnv.jabber.ldap.base} - query_filter = ${config.myEnv.jabber.postfix_user_filter} - domain = immae.fr - bind_dn = ${config.myEnv.jabber.ldap.dn} - bind_pw = ${config.myEnv.jabber.ldap.password} - result_attribute = immaeXmppUid - result_format = ejabberd@localhost - version = 3 - ''; - }; - } // lib.mapAttrs' (name: v: lib.nameValuePair "postfix/scripts/${name}-env" { - user = "postfixscripts"; - group = "root"; - permissions = "0400"; - text = builtins.toJSON v.env; - }) config.myEnv.mail.scripts; - - networking.firewall.allowedTCPPorts = [ 25 465 587 ]; - - users.users.postfixscripts = { - group = "keys"; - uid = config.ids.uids.postfixscripts; - description = "Postfix scripts user"; - }; - users.users."${config.services.postfix.user}".extraGroups = [ "keys" ]; - services.filesWatcher.postfix = { - restart = true; - paths = [ - config.secrets.fullPaths."postfix/mysql_alias_maps" - config.secrets.fullPaths."postfix/ldap_mailboxes" - config.secrets.fullPaths."postfix/mysql_sender_login_maps" - config.secrets.fullPaths."postfix/ldap_ejabberd_users_immae_fr" - ]; - }; - services.postfix = { - extraAliases = let - toScript = name: script: pkgs.writeScript name '' - #! ${pkgs.stdenv.shell} - mail=$(${pkgs.coreutils}/bin/cat -) - output=$(echo "$mail" | ${script} 2>&1) - ret=$? - - if [ "$ret" != "0" ]; then - echo "$mail" \ - | ${pkgs.procmail}/bin/formail -i "X-Return-Code: $ret" \ - | /run/wrappers/bin/sendmail -i scripts_error+${name}@mail.immae.eu - - messageId=$(echo "$mail" | ${pkgs.procmail}/bin/formail -x "Message-Id:") - repeat=$(echo "$mail" | ${pkgs.procmail}/bin/formail -X "From:" -X "Received:") - - ${pkgs.coreutils}/bin/cat <')" - ''; - }; - in builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (n: v: ''${n}: "|${v}"'') scripts); - mapFiles = let - recipient_maps = let - name = n: i: "relay_${n}_${toString i}"; - pair = n: i: m: lib.attrsets.nameValuePair (name n i) ( - if m.type == "hash" - then pkgs.writeText (name n i) m.content - else null - ); - pairs = n: v: lib.imap1 (i: m: pair n i m) v.recipient_maps; - in lib.attrsets.filterAttrs (k: v: v != null) ( - lib.attrsets.listToAttrs (lib.flatten ( - lib.attrsets.mapAttrsToList pairs config.myEnv.mail.postfix.backup_domains - )) - ); - relay_restrictions = lib.attrsets.filterAttrs (k: v: v != null) ( - lib.attrsets.mapAttrs' (n: v: - lib.attrsets.nameValuePair "recipient_access_${n}" ( - if lib.attrsets.hasAttr "relay_restrictions" v - then pkgs.writeText "recipient_access_${n}" v.relay_restrictions - else null - ) - ) config.myEnv.mail.postfix.backup_domains - ); - virtual_map = { - virtual = let - cfg = config.myEnv.monitoring.email_check.eldiron; - address = "${cfg.mail_address}@${cfg.mail_domain}"; - in pkgs.writeText "postfix-virtual" ( - builtins.concatStringsSep "\n" ( - ["${address} testmail@localhost"] ++ - lib.attrsets.mapAttrsToList ( - n: v: lib.optionalString v.external '' - script_${n}@mail.immae.eu ${n}@localhost, scripts@mail.immae.eu - '' - ) config.myEnv.mail.scripts - ) - ); - }; - sasl_access = { - host_sender_login = with lib.attrsets; let - addresses = zipAttrs (lib.flatten (mapAttrsToList - (n: v: (map (e: { "${e}" = "${n}@immae.eu"; }) v.emails)) config.myEnv.servers)); - joined = builtins.concatStringsSep ","; - in pkgs.writeText "host-sender-login" - (builtins.concatStringsSep "\n" (mapAttrsToList (n: v: "${n} ${joined v}") addresses)); - }; - in - recipient_maps // relay_restrictions // virtual_map // sasl_access; - config = { - ### postfix module overrides - readme_directory = "${pkgs.postfix}/share/postfix/doc"; - smtp_tls_CAfile = lib.mkForce ""; - smtp_tls_cert_file = lib.mkForce ""; - smtp_tls_key_file = lib.mkForce ""; - - message_size_limit = "1073741824"; # Don't put 0 here, it's not equivalent to "unlimited" - mailbox_size_limit = "1073741825"; # Workaround, local delivered mails should all go through scripts - alias_database = "\$alias_maps"; - - ### Aliases scripts user - default_privs = "postfixscripts"; - - ### Virtual mailboxes config - virtual_alias_maps = [ - "hash:/etc/postfix/virtual" - "mysql:${config.secrets.fullPaths."postfix/mysql_alias_maps"}" - "ldap:${config.secrets.fullPaths."postfix/ldap_ejabberd_users_immae_fr"}" - ]; - virtual_mailbox_domains = config.myEnv.mail.postfix.additional_mailbox_domains - ++ lib.remove null (lib.flatten (map - (zone: map - (e: if e.receive - then "${e.domain}${lib.optionalString (e.domain != "") "."}${zone.name}" - else null - ) - (zone.withEmail or []) - ) - config.myEnv.dns.masterZones - )); - virtual_mailbox_maps = [ - "ldap:${config.secrets.fullPaths."postfix/ldap_mailboxes"}" - ]; - dovecot_destination_recipient_limit = "1"; - virtual_transport = "dovecot"; - - ### Relay domains - relay_domains = lib.flatten (lib.attrsets.mapAttrsToList (n: v: v.domains or []) config.myEnv.mail.postfix.backup_domains); - relay_recipient_maps = lib.flatten (lib.attrsets.mapAttrsToList (n: v: - lib.imap1 (i: m: "${m.type}:/etc/postfix/relay_${n}_${toString i}") v.recipient_maps - ) config.myEnv.mail.postfix.backup_domains); - smtpd_relay_restrictions = [ - "defer_unauth_destination" - ] ++ lib.flatten (lib.attrsets.mapAttrsToList (n: v: - if lib.attrsets.hasAttr "relay_restrictions" v - then [ "check_recipient_access hash:/etc/postfix/recipient_access_${n}" ] - else [] - ) config.myEnv.mail.postfix.backup_domains); - - ### Additional smtpd configuration - smtpd_tls_received_header = "yes"; - smtpd_tls_loglevel = "1"; - - ### Email sending configuration - smtp_tls_security_level = "may"; - smtp_tls_loglevel = "1"; - - ### Force ip bind for smtp - smtp_bind_address = config.hostEnv.ips.main.ip4; - smtp_bind_address6 = builtins.head config.hostEnv.ips.main.ip6; - - # Use some relays when authorized senders are not myself - smtp_sasl_mechanism_filter = "plain,login"; # GSSAPI Not correctly supported by postfix - smtp_sasl_auth_enable = "yes"; - smtp_sasl_password_maps = - "mysql:${config.secrets.fullPaths."postfix/mysql_sender_relays_creds"}"; - smtp_sasl_security_options = "noanonymous"; - smtp_sender_dependent_authentication = "yes"; - sender_dependent_relayhost_maps = - "mysql:${config.secrets.fullPaths."postfix/mysql_sender_relays_hosts"}"; - - ### opendkim, opendmarc, openarc milters - non_smtpd_milters = [ - "unix:${config.myServices.mail.milters.sockets.opendkim}" - ]; - smtpd_milters = [ - "unix:${config.myServices.mail.milters.sockets.opendkim}" - "unix:${config.myServices.mail.milters.sockets.openarc}" - "unix:${config.myServices.mail.milters.sockets.opendmarc}" - ]; - - smtp_use_tls = true; - smtpd_use_tls = true; - smtpd_tls_chain_files = builtins.concatStringsSep "," [ "/var/lib/acme/mail/full.pem" "/var/lib/acme/mail-rsa/full.pem" ]; - - maximal_queue_lifetime = "6w"; - bounce_queue_lifetime = "6w"; - }; - enable = true; - enableSmtp = true; - enableSubmission = true; - submissionOptions = { - # Don’t use "long form", only commas (cf - # http://www.postfix.org/master.5.html long form is not handled - # well by the submission function) - smtpd_tls_security_level = "encrypt"; - smtpd_sasl_auth_enable = "yes"; - smtpd_tls_auth_only = "yes"; - smtpd_sasl_tls_security_options = "noanonymous"; - smtpd_sasl_type = "dovecot"; - smtpd_sasl_path = "private/auth"; - smtpd_reject_unlisted_recipient = "no"; - smtpd_client_restrictions = "permit_sasl_authenticated,reject"; - smtpd_relay_restrictions = "permit_sasl_authenticated,reject"; - # Refuse to send e-mails with a From that is not handled - smtpd_sender_restrictions = - "reject_sender_login_mismatch,reject_unlisted_sender,permit_sasl_authenticated,reject"; - smtpd_sender_login_maps = builtins.concatStringsSep "," [ - "hash:/etc/postfix/host_sender_login" - "mysql:${config.secrets.fullPaths."postfix/mysql_sender_relays_maps"}" - "mysql:${config.secrets.fullPaths."postfix/mysql_sender_login_maps"}" - ]; - smtpd_recipient_restrictions = "permit_sasl_authenticated,reject"; - milter_macro_daemon_name = "ORIGINATING"; - smtpd_milters = builtins.concatStringsSep "," [ - # FIXME: put it back when opensmtpd is upgraded and able to - # rewrite the from header - #"unix:/run/milter_verify_from/verify_from.sock" - "unix:${config.myServices.mail.milters.sockets.opendkim}" - ]; - }; - destination = ["localhost"]; - # This needs to reverse DNS - hostname = config.hostEnv.fqdn; - setSendmail = true; - recipientDelimiter = "+"; - masterConfig = { - submissions = { - type = "inet"; - private = false; - command = "smtpd"; - args = ["-o" "smtpd_tls_wrappermode=yes" ] ++ (let - mkKeyVal = opt: val: [ "-o" (opt + "=" + val) ]; - in lib.concatLists (lib.mapAttrsToList mkKeyVal config.services.postfix.submissionOptions) - ); - }; - dovecot = { - type = "unix"; - privileged = true; - chroot = false; - command = "pipe"; - args = let - # rspamd could be used as a milter, but then it cannot apply - # its checks "per user" (milter is not yet dispatched to - # users), so we wrap dovecot-lda inside rspamc per recipient - # here. - rspamc_dovecot = pkgs.writeScriptBin "rspamc_dovecot" '' - #! ${pkgs.stdenv.shell} - sender="$1" - original_recipient="$2" - user="$3" - - ${pkgs.coreutils}/bin/cat - | \ - (${pkgs.rspamd}/bin/rspamc -h ${config.myServices.mail.rspamd.sockets.worker-controller} -c bayes -d "$user" --mime || true) | \ - ${pkgs.dovecot}/libexec/dovecot/dovecot-lda -f "$sender" -a "$original_recipient" -d "$user" - ''; - in [ - "flags=ODRhu" "user=vhost:vhost" - "argv=${rspamc_dovecot}/bin/rspamc_dovecot \${sender} \${original_recipient} \${user}@\${nexthop}" - ]; - }; - }; - }; - security.acme.certs."mail" = { - postRun = '' - systemctl restart postfix.service - ''; - extraDomains = { - "smtp.immae.eu" = null; - }; - }; - security.acme.certs."mail-rsa" = { - postRun = '' - systemctl restart postfix.service - ''; - extraDomains = { - "smtp.immae.eu" = null; - }; - }; - system.activationScripts.testmail = { - deps = [ "users" ]; - text = let - allCfg = config.myEnv.monitoring.email_check; - cfg = allCfg.eldiron; - reverseTargets = builtins.attrNames (lib.attrsets.filterAttrs (k: v: builtins.elem "eldiron" v.targets) allCfg); - to_email = cfg': host': - let sep = if lib.strings.hasInfix "+" cfg'.mail_address then "_" else "+"; - in "${cfg'.mail_address}${sep}${host'}@${cfg'.mail_domain}"; - mails_to_receive = builtins.concatStringsSep " " (map (to_email cfg) reverseTargets); - in '' - install -m 0555 -o postfixscripts -g keys -d /var/lib/naemon/checks/email - for f in ${mails_to_receive}; do - if [ ! -f /var/lib/naemon/checks/email/$f ]; then - install -m 0644 -o postfixscripts -g keys /dev/null -T /var/lib/naemon/checks/email/$f - touch -m -d @0 /var/lib/naemon/checks/email/$f - fi - done - ''; - }; - systemd.services.postfix.serviceConfig.Slice = "mail.slice"; - }; -} diff --git a/modules/private/mail/relay.nix b/modules/private/mail/relay.nix deleted file mode 100644 index 668d365..0000000 --- a/modules/private/mail/relay.nix +++ /dev/null @@ -1,235 +0,0 @@ -{ lib, pkgs, config, nodes, name, ... }: -{ - config = lib.mkIf config.myServices.mailBackup.enable { - security.acme.certs."mail" = config.myServices.certificates.certConfig // { - postRun = '' - systemctl restart postfix.service - ''; - domain = config.hostEnv.fqdn; - extraDomains = let - zonesWithMx = builtins.filter (zone: - lib.attrsets.hasAttr "withEmail" zone && lib.lists.length zone.withEmail > 0 - ) config.myEnv.dns.masterZones; - mxs = map (zone: "${config.myEnv.servers."${name}".mx.subdomain}.${zone.name}") zonesWithMx; - in builtins.listToAttrs (map (mx: lib.attrsets.nameValuePair mx null) mxs); - }; - secrets.keys = { - "postfix/mysql_alias_maps" = { - user = config.services.postfix.user; - group = config.services.postfix.group; - permissions = "0440"; - text = '' - # We need to specify that option to trigger ssl connection - tls_ciphers = TLSv1.2 - user = ${config.myEnv.mail.postfix.mysql.user} - password = ${config.myEnv.mail.postfix.mysql.password} - hosts = ${config.myEnv.mail.postfix.mysql.remoteHost} - dbname = ${config.myEnv.mail.postfix.mysql.database} - query = SELECT DISTINCT 1 - FROM forwardings - WHERE - ((regex = 1 AND '%s' REGEXP CONCAT('^',source,'$') ) OR (regex = 0 AND source = '%s')) - AND active = 1 - AND '%s' NOT IN - ( - SELECT source - FROM forwardings_blacklisted - WHERE source = '%s' - ) UNION - SELECT 'devnull@immae.eu' - FROM forwardings_blacklisted - WHERE source = '%s' - ''; - }; - "postfix/ldap_mailboxes" = { - user = config.services.postfix.user; - group = config.services.postfix.group; - permissions = "0440"; - text = '' - server_host = ldaps://${config.myEnv.mail.dovecot.ldap.host}:636 - search_base = ${config.myEnv.mail.dovecot.ldap.base} - query_filter = ${config.myEnv.mail.dovecot.ldap.postfix_mailbox_filter} - bind_dn = ${config.myEnv.mail.dovecot.ldap.dn} - bind_pw = ${config.myEnv.mail.dovecot.ldap.password} - result_attribute = immaePostfixAddress - result_format = dummy - version = 3 - ''; - }; - "postfix/sympa_mailbox_maps" = { - user = config.services.postfix.user; - group = config.services.postfix.group; - permissions = "0440"; - text = '' - hosts = ${config.myEnv.mail.sympa.postgresql.host} - user = ${config.myEnv.mail.sympa.postgresql.user} - password = ${config.myEnv.mail.sympa.postgresql.password} - dbname = ${config.myEnv.mail.sympa.postgresql.database} - query = SELECT DISTINCT 1 FROM list_table WHERE '%s' IN ( - CONCAT(name_list, '@', robot_list), - CONCAT(name_list, '-request@', robot_list), - CONCAT(name_list, '-editor@', robot_list), - CONCAT(name_list, '-unsubscribe@', robot_list), - CONCAT(name_list, '-owner@', robot_list), - CONCAT('sympa-request@', robot_list), - CONCAT('sympa-owner@', robot_list), - CONCAT('sympa@', robot_list), - CONCAT('listmaster@', robot_list), - CONCAT('bounce@', robot_list), - CONCAT('abuse-feedback-report@', robot_list) - ) - ''; - }; - "postfix/ldap_ejabberd_users_immae_fr" = { - user = config.services.postfix.user; - group = config.services.postfix.group; - permissions = "0440"; - text = '' - server_host = ldaps://${config.myEnv.jabber.ldap.host}:636 - search_base = ${config.myEnv.jabber.ldap.base} - query_filter = ${config.myEnv.jabber.postfix_user_filter} - domain = immae.fr - bind_dn = ${config.myEnv.jabber.ldap.dn} - bind_pw = ${config.myEnv.jabber.ldap.password} - result_attribute = immaeXmppUid - result_format = ejabberd@localhost - version = 3 - ''; - }; - }; - - networking.firewall.allowedTCPPorts = [ 25 ]; - - users.users."${config.services.postfix.user}".extraGroups = [ "keys" ]; - services.filesWatcher.postfix = { - restart = true; - paths = [ - config.secrets.fullPaths."postfix/mysql_alias_maps" - config.secrets.fullPaths."postfix/sympa_mailbox_maps" - config.secrets.fullPaths."postfix/ldap_ejabberd_users_immae_fr" - config.secrets.fullPaths."postfix/ldap_mailboxes" - ]; - }; - services.postfix = { - mapFiles = let - recipient_maps = let - name = n: i: "relay_${n}_${toString i}"; - pair = n: i: m: lib.attrsets.nameValuePair (name n i) ( - if m.type == "hash" - then pkgs.writeText (name n i) m.content - else null - ); - pairs = n: v: lib.imap1 (i: m: pair n i m) v.recipient_maps; - in lib.attrsets.filterAttrs (k: v: v != null) ( - lib.attrsets.listToAttrs (lib.flatten ( - lib.attrsets.mapAttrsToList pairs config.myEnv.mail.postfix.backup_domains - )) - ); - relay_restrictions = lib.attrsets.filterAttrs (k: v: v != null) ( - lib.attrsets.mapAttrs' (n: v: - lib.attrsets.nameValuePair "recipient_access_${n}" ( - if lib.attrsets.hasAttr "relay_restrictions" v - then pkgs.writeText "recipient_access_${n}" v.relay_restrictions - else null - ) - ) config.myEnv.mail.postfix.backup_domains - ); - virtual_map = { - virtual = let - cfg = config.myEnv.monitoring.email_check.eldiron; - address = "${cfg.mail_address}@${cfg.mail_domain}"; - in pkgs.writeText "postfix-virtual" ( - builtins.concatStringsSep "\n" ( - ["${address} 1"] ++ - lib.attrsets.mapAttrsToList ( - n: v: lib.optionalString v.external '' - script_${n}@mail.immae.eu 1 - '' - ) config.myEnv.mail.scripts - ) - ); - }; - in - recipient_maps // relay_restrictions // virtual_map; - config = { - ### postfix module overrides - readme_directory = "${pkgs.postfix}/share/postfix/doc"; - smtp_tls_CAfile = lib.mkForce ""; - smtp_tls_cert_file = lib.mkForce ""; - smtp_tls_key_file = lib.mkForce ""; - - message_size_limit = "1073741824"; # Don't put 0 here, it's not equivalent to "unlimited" - mailbox_size_limit = "1073741825"; # Workaround, local delivered mails should all go through scripts - alias_database = "\$alias_maps"; - - ### Relay domains - relay_domains = let - backups = lib.flatten (lib.attrsets.mapAttrsToList (n: v: v.domains or []) config.myEnv.mail.postfix.backup_domains); - virtual_domains = config.myEnv.mail.postfix.additional_mailbox_domains - ++ lib.remove null (lib.flatten (map - (zone: map - (e: if e.receive - then "${e.domain}${lib.optionalString (e.domain != "") "."}${zone.name}" - else null - ) - (zone.withEmail or []) - ) - config.myEnv.dns.masterZones - )); - in - backups ++ virtual_domains; - relay_recipient_maps = let - backup_recipients = lib.flatten (lib.attrsets.mapAttrsToList (n: v: - lib.imap1 (i: m: "${m.type}:/etc/postfix/relay_${n}_${toString i}") v.recipient_maps - ) config.myEnv.mail.postfix.backup_domains); - virtual_alias_maps = [ - "hash:/etc/postfix/virtual" - "mysql:${config.secrets.fullPaths."postfix/mysql_alias_maps"}" - "ldap:${config.secrets.fullPaths."postfix/ldap_ejabberd_users_immae_fr"}" - ]; - virtual_mailbox_maps = [ - "ldap:${config.secrets.fullPaths."postfix/ldap_mailboxes"}" - "pgsql:${config.secrets.fullPaths."postfix/sympa_mailbox_maps"}" - ]; - in - backup_recipients ++ virtual_alias_maps ++ virtual_mailbox_maps; - smtpd_relay_restrictions = [ - "defer_unauth_destination" - ] ++ lib.flatten (lib.attrsets.mapAttrsToList (n: v: - if lib.attrsets.hasAttr "relay_restrictions" v - then [ "check_recipient_access hash:/etc/postfix/recipient_access_${n}" ] - else [] - ) config.myEnv.mail.postfix.backup_domains); - - ### Additional smtpd configuration - smtpd_tls_received_header = "yes"; - smtpd_tls_loglevel = "1"; - - ### Email sending configuration - smtp_tls_security_level = "may"; - smtp_tls_loglevel = "1"; - - ### Force ip bind for smtp - smtp_bind_address = config.myEnv.servers."${name}".ips.main.ip4; - smtp_bind_address6 = builtins.head config.myEnv.servers."${name}".ips.main.ip6; - - smtpd_milters = [ - "unix:${config.myServices.mail.milters.sockets.opendkim}" - "unix:${config.myServices.mail.milters.sockets.openarc}" - "unix:${config.myServices.mail.milters.sockets.opendmarc}" - ]; - }; - enable = true; - enableSmtp = true; - enableSubmission = false; - destination = ["localhost"]; - # This needs to reverse DNS - hostname = config.hostEnv.fqdn; - setSendmail = false; - sslCert = "/var/lib/acme/mail/fullchain.pem"; - sslKey = "/var/lib/acme/mail/key.pem"; - recipientDelimiter = "+"; - }; - }; -} - diff --git a/modules/private/mail/rspamd.nix b/modules/private/mail/rspamd.nix deleted file mode 100644 index 05f1300..0000000 --- a/modules/private/mail/rspamd.nix +++ /dev/null @@ -1,87 +0,0 @@ -{ lib, pkgs, config, ... }: -{ - options.myServices.mail.rspamd.sockets = lib.mkOption { - type = lib.types.attrsOf lib.types.path; - default = { - worker-controller = "/run/rspamd/worker-controller.sock"; - }; - readOnly = true; - description = '' - rspamd sockets - ''; - }; - config = lib.mkIf config.myServices.mail.enable { - services.cron.systemCronJobs = let - cron_script = pkgs.runCommand "cron_script" { - buildInputs = [ pkgs.makeWrapper ]; - } '' - mkdir -p $out - cp ${./scan_reported_mails} $out/scan_reported_mails - patchShebangs $out - for i in $out/*; do - wrapProgram "$i" --prefix PATH : ${lib.makeBinPath [ pkgs.coreutils pkgs.rspamd pkgs.flock ]} - done - ''; - in - [ "*/20 * * * * vhost ${cron_script}/scan_reported_mails" ]; - - systemd.services.rspamd.serviceConfig.Slice = "mail.slice"; - services.rspamd = { - enable = true; - debug = false; - overrides = { - "actions.conf".text = '' - reject = null; - add_header = 6; - greylist = null; - ''; - "milter_headers.conf".text = '' - extended_spam_headers = true; - ''; - }; - locals = { - "redis.conf".text = '' - servers = "${config.myEnv.mail.rspamd.redis.socket}"; - db = "${config.myEnv.mail.rspamd.redis.db}"; - ''; - "classifier-bayes.conf".text = '' - users_enabled = true; - backend = "redis"; - servers = "${config.myEnv.mail.rspamd.redis.socket}"; - database = "${config.myEnv.mail.rspamd.redis.db}"; - autolearn = true; - cache { - backend = "redis"; - } - new_schema = true; - statfile { - BAYES_HAM { - spam = false; - } - BAYES_SPAM { - spam = true; - } - } - ''; - }; - workers = { - controller = { - extraConfig = '' - enable_password = "${config.myEnv.mail.rspamd.write_password_hashed}"; - password = "${config.myEnv.mail.rspamd.read_password_hashed}"; - ''; - bindSockets = [ { - socket = config.myServices.mail.rspamd.sockets.worker-controller; - mode = "0660"; - owner = config.services.rspamd.user; - group = "vhost"; - } ]; - }; - }; - postfix = { - enable = true; - config = {}; - }; - }; - }; -} diff --git a/modules/private/mail/scan_reported_mails b/modules/private/mail/scan_reported_mails deleted file mode 100755 index fe9f4d6..0000000 --- a/modules/private/mail/scan_reported_mails +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash - -( flock -n 9 || exit 1 -shopt -s nullglob -for spool in /var/lib/vhost/.rspamd/*/pending; do - rspamd_folder=$(dirname $spool) - mail_user=$(basename $rspamd_folder) - mv $rspamd_folder/pending $rspamd_folder/processing - - for mtype in ham spam; do - if [ -d $rspamd_folder/processing/$mtype ]; then - output="$(rspamc -h /run/rspamd/worker-controller.sock -c bayes -d $mail_user learn_$mtype $rspamd_folder/processing/$mtype/*)" - echo "[$mtype: $mail_user]" ${output} >> /var/lib/vhost/.rspamd/rspamd.log - mkdir -p $rspamd_folder/processed/$mtype - cp $rspamd_folder/processing/$mtype/* $rspamd_folder/processed/$mtype/ - fi - done - - rm -rf $rspamd_folder/processing -done -) 9>/var/lib/vhost/scan_reported_mails.lock diff --git a/modules/private/mail/sieve_bin/imapsieve_copy b/modules/private/mail/sieve_bin/imapsieve_copy deleted file mode 100755 index 2ca1f23..0000000 --- a/modules/private/mail/sieve_bin/imapsieve_copy +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash -# Inspired from https://docs.iredmail.org/dovecot.imapsieve.html - -MSG_TYPE="$1" -OUTPUT_DIR="/var/lib/vhost/.rspamd/${USER}/pending/${MSG_TYPE}" -FILE="${OUTPUT_DIR}/$(date +%Y%m%d%H%M%S)-${RANDOM}${RANDOM}.eml" -mkdir -p "${OUTPUT_DIR}" -cat > ${FILE} < /dev/stdin diff --git a/modules/private/mail/sieve_scripts/backup.sieve b/modules/private/mail/sieve_scripts/backup.sieve deleted file mode 100644 index 3014c0a..0000000 --- a/modules/private/mail/sieve_scripts/backup.sieve +++ /dev/null @@ -1,7 +0,0 @@ -# vim: filetype=sieve -require ["copy","mailbox","fileinto","regex"]; -if header :is "X-Spam" "Yes" { - fileinto :create :copy "Backup/Spam"; -} else { - fileinto :create :copy "Backup/Ham"; -} diff --git a/modules/private/mail/sieve_scripts/report_ham.sieve b/modules/private/mail/sieve_scripts/report_ham.sieve deleted file mode 100644 index f9b8481..0000000 --- a/modules/private/mail/sieve_scripts/report_ham.sieve +++ /dev/null @@ -1,11 +0,0 @@ -require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"]; - -if environment :matches "imap.mailbox" "*" { - set "mailbox" "${1}"; -} - -if string "${mailbox}" "Trash" { - stop; -} - -pipe :copy "imapsieve_copy" [ "ham" ]; diff --git a/modules/private/mail/sieve_scripts/report_spam.sieve b/modules/private/mail/sieve_scripts/report_spam.sieve deleted file mode 100644 index 9a1f794..0000000 --- a/modules/private/mail/sieve_scripts/report_spam.sieve +++ /dev/null @@ -1,3 +0,0 @@ -require ["vnd.dovecot.pipe", "copy", "imapsieve" ]; - -pipe :copy "imapsieve_copy" [ "spam" ]; diff --git a/modules/private/mail/sympa.nix b/modules/private/mail/sympa.nix deleted file mode 100644 index 0626ac0..0000000 --- a/modules/private/mail/sympa.nix +++ /dev/null @@ -1,213 +0,0 @@ -{ lib, pkgs, config, ... }: -let - domain = "lists.immae.eu"; - sympaConfig = config.myEnv.mail.sympa; -in -{ - config = lib.mkIf config.myServices.mail.enable { - myServices.databases.postgresql.authorizedHosts = { - backup-2 = [ - { - username = "sympa"; - database = "sympa"; - ip4 = [config.myEnv.servers.backup-2.ips.main.ip4]; - ip6 = config.myEnv.servers.backup-2.ips.main.ip6; - } - ]; - }; - services.websites.env.tools.vhostConfs.mail = { - extraConfig = lib.mkAfter [ - '' - Alias /static-sympa/ /var/lib/sympa/static_content/ - - Require all granted - AllowOverride none - - - SetHandler "proxy:unix:/run/sympa/wwsympa.socket|fcgi://" - Require all granted - - '' - ]; - }; - - secrets.keys = { - "sympa/db_password" = { - permissions = "0400"; - group = "sympa"; - user = "sympa"; - text = sympaConfig.postgresql.password; - }; - } - // lib.mapAttrs' (n: v: lib.nameValuePair "sympa/data_sources/${n}.incl" { - permissions = "0400"; group = "sympa"; user = "sympa"; text = v; - }) sympaConfig.data_sources - // lib.mapAttrs' (n: v: lib.nameValuePair "sympa/scenari/${n}" { - permissions = "0400"; group = "sympa"; user = "sympa"; text = v; - }) sympaConfig.scenari; - users.users.sympa.extraGroups = [ "keys" ]; - systemd.slices.mail-sympa = { - description = "Sympa slice"; - }; - - systemd.services.sympa.serviceConfig.SupplementaryGroups = [ "keys" ]; - systemd.services.sympa-archive.serviceConfig.SupplementaryGroups = [ "keys" ]; - systemd.services.sympa-bounce.serviceConfig.SupplementaryGroups = [ "keys" ]; - systemd.services.sympa-bulk.serviceConfig.SupplementaryGroups = [ "keys" ]; - systemd.services.sympa-task.serviceConfig.SupplementaryGroups = [ "keys" ]; - - systemd.services.sympa.serviceConfig.Slice = "mail-sympa.slice"; - systemd.services.sympa-archive.serviceConfig.Slice = "mail-sympa.slice"; - systemd.services.sympa-bounce.serviceConfig.Slice = "mail-sympa.slice"; - systemd.services.sympa-bulk.serviceConfig.Slice = "mail-sympa.slice"; - systemd.services.sympa-task.serviceConfig.Slice = "mail-sympa.slice"; - - # https://github.com/NixOS/nixpkgs/pull/84202 - systemd.services.sympa.serviceConfig.ProtectKernelModules = lib.mkForce false; - systemd.services.sympa-archive.serviceConfig.ProtectKernelModules = lib.mkForce false; - systemd.services.sympa-bounce.serviceConfig.ProtectKernelModules = lib.mkForce false; - systemd.services.sympa-bulk.serviceConfig.ProtectKernelModules = lib.mkForce false; - systemd.services.sympa-task.serviceConfig.ProtectKernelModules = lib.mkForce false; - systemd.services.sympa.serviceConfig.ProtectKernelTunables = lib.mkForce false; - systemd.services.sympa-archive.serviceConfig.ProtectKernelTunables = lib.mkForce false; - systemd.services.sympa-bounce.serviceConfig.ProtectKernelTunables = lib.mkForce false; - systemd.services.sympa-bulk.serviceConfig.ProtectKernelTunables = lib.mkForce false; - systemd.services.sympa-task.serviceConfig.ProtectKernelTunables = lib.mkForce false; - - systemd.services.wwsympa = { - wantedBy = [ "multi-user.target" ]; - after = [ "sympa.service" ]; - serviceConfig = { - Slice = "mail-sympa.slice"; - Type = "forking"; - PIDFile = "/run/sympa/wwsympa.pid"; - Restart = "always"; - ExecStart = ''${pkgs.spawn_fcgi}/bin/spawn-fcgi \ - -u sympa \ - -g sympa \ - -U wwwrun \ - -M 0600 \ - -F 2 \ - -P /run/sympa/wwsympa.pid \ - -s /run/sympa/wwsympa.socket \ - -- ${pkgs.sympa}/lib/sympa/cgi/wwsympa.fcgi - ''; - StateDirectory = "sympa"; - ProtectHome = true; - ProtectSystem = "full"; - ProtectControlGroups = true; - }; - }; - - services.postfix = { - mapFiles = { - # Update relay list when changing one of those - sympa_virtual = pkgs.writeText "virtual.sympa" '' - sympa-request@${domain} postmaster@immae.eu - sympa-owner@${domain} postmaster@immae.eu - - sympa-request@cip-ca.fr postmaster@immae.eu - sympa-owner@cip-ca.fr postmaster@immae.eu - ''; - sympa_transport = pkgs.writeText "transport.sympa" '' - ${domain} error:User unknown in recipient table - sympa@${domain} sympa:sympa@${domain} - listmaster@${domain} sympa:listmaster@${domain} - bounce@${domain} sympabounce:sympa@${domain} - abuse-feedback-report@${domain} sympabounce:sympa@${domain} - - sympa@cip-ca.fr sympa:sympa@cip-ca.fr - listmaster@cip-ca.fr sympa:listmaster@cip-ca.fr - bounce@cip-ca.fr sympabounce:sympa@cip-ca.fr - abuse-feedback-report@cip-ca.fr sympabounce:sympa@cip-ca.fr - ''; - }; - config = { - transport_maps = lib.mkAfter [ - "hash:/etc/postfix/sympa_transport" - "hash:/var/lib/sympa/sympa_transport" - ]; - virtual_alias_maps = lib.mkAfter [ - "hash:/etc/postfix/sympa_virtual" - ]; - virtual_mailbox_maps = lib.mkAfter [ - "hash:/etc/postfix/sympa_transport" - "hash:/var/lib/sympa/sympa_transport" - "hash:/etc/postfix/sympa_virtual" - ]; - }; - masterConfig = { - sympa = { - type = "unix"; - privileged = true; - chroot = false; - command = "pipe"; - args = [ - "flags=hqRu" - "user=sympa" - "argv=${pkgs.sympa}/libexec/queue" - "\${nexthop}" - ]; - }; - sympabounce = { - type = "unix"; - privileged = true; - chroot = false; - command = "pipe"; - args = [ - "flags=hqRu" - "user=sympa" - "argv=${pkgs.sympa}/libexec/bouncequeue" - "\${nexthop}" - ]; - }; - }; - }; - services.sympa = { - enable = true; - listMasters = sympaConfig.listmasters; - mainDomain = domain; - domains = { - "${domain}" = { - webHost = "mail.immae.eu"; - webLocation = "/sympa"; - }; - "cip-ca.fr" = { - webHost = "mail.cip-ca.fr"; - webLocation = "/sympa"; - }; - }; - - database = { - type = "PostgreSQL"; - user = sympaConfig.postgresql.user; - host = sympaConfig.postgresql.socket; - name = sympaConfig.postgresql.database; - passwordFile = config.secrets.fullPaths."sympa/db_password"; - createLocally = false; - }; - settings = { - sendmail = "/run/wrappers/bin/sendmail"; - log_smtp = "on"; - sendmail_aliases = "/var/lib/sympa/sympa_transport"; - aliases_program = "${pkgs.postfix}/bin/postmap"; - }; - settingsFile = { - "virtual.sympa".enable = false; - "transport.sympa".enable = false; - } // lib.mapAttrs' (n: v: lib.nameValuePair - "etc/${domain}/data_sources/${n}.incl" - { source = config.secrets.fullPaths."sympa/data_sources/${n}.incl"; }) sympaConfig.data_sources - // lib.mapAttrs' (n: v: lib.nameValuePair - "etc/${domain}/scenari/${n}" - { source = config.secrets.fullPaths."sympa/scenari/${n}"; }) sympaConfig.scenari; - web = { - server = "none"; - }; - - mta = { - type = "none"; - }; - }; - }; -} diff --git a/modules/private/mail/verify_from.py b/modules/private/mail/verify_from.py deleted file mode 100755 index b75001e..0000000 --- a/modules/private/mail/verify_from.py +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env python3 -import Milter -import argparse -from email.header import decode_header -from email.utils import parseaddr - -class CheckMilter(Milter.Base): - def __init__(self): - self.envelope_from = None - self.header_from = None - - @Milter.noreply - def connect(self, IPname, family, hostaddr): - return Milter.CONTINUE - - def hello(self, heloname): - return Milter.CONTINUE - - def envfrom(self, mailfrom, *args): - self.envelope_from = parseaddr(mailfrom)[1] - return Milter.CONTINUE - - @Milter.noreply - def envrcpt(self, to, *str): - return Milter.CONTINUE - - @Milter.noreply - def header(self, name, hval): - if name.lower() == "from": - self.header_from = parseaddr(decode_header(hval)[-1][0])[1] - return Milter.CONTINUE - - def eoh(self): - if self.header_from is not None and self.header_from != "" and self.header_from != self.envelope_from: - self.setreply("553", xcode="5.7.1", msg="<%s>: From header rejected: not matching envelope From %s" - % (self.header_from, self.envelope_from)) - return Milter.REJECT - - return Milter.CONTINUE - - @Milter.noreply - def body(self, chunk): - return Milter.CONTINUE - - def eom(self): - return Milter.ACCEPT - - def close(self): - return Milter.CONTINUE - - def abort(self): - return Milter.CONTINUE - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument("--socket", "-s", type=str, help="socket to listen to") - config = parser.parse_args() - - Milter.factory = CheckMilter - Milter.runmilter("check_from", config.socket, timeout=300) diff --git a/modules/private/monitoring/default.nix b/modules/private/monitoring/default.nix deleted file mode 100644 index 0783c2f..0000000 --- a/modules/private/monitoring/default.nix +++ /dev/null @@ -1,249 +0,0 @@ -{ config, pkgs, lib, name, nodes, ... }: -let - cfg = config.myServices.monitoring; - activatedPlugins = [ "memory" "command" "bandwidth" ] - ++ (if cfg.master then (masterObjects.activatedPlugins or []) else []) - ++ (if cfg.master then (lib.flatten (map (v: v.activatedPlugins or []) otherObjects)) else []) - ++ (hostObjects.activatedPlugins or []) - ++ (if cfg.master then ["notify-primary"] else ["notify-secondary"]); - allPluginsConfig = import ./myplugins.nix { - inherit pkgs lib config; - sudo = "/run/wrappers/bin/sudo"; - }; - mypluginsConfig = lib.getAttrs activatedPlugins allPluginsConfig; - myplugins = let - mypluginsChunk = builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (k: v: v.chunk or "") mypluginsConfig); - in pkgs.runCommand "buildplugins" { - buildInputs = [ pkgs.makeWrapper pkgs.perl ]; - } '' - mkdir $out - ${mypluginsChunk} - ''; - toObjects = pkgs.callPackage ./to_objects.nix {}; - commonConfig = { - dilion = { - processWarn = "250"; processAlert = "400"; - loadWarn = "1.0"; loadAlert = "1.2"; - interface = "eth0"; - }; - eldiron = { - processWarn = "550"; processAlert = "650"; - loadWarn = "1.0"; loadAlert = "1.2"; - interface = "eth0"; - }; - backup-2 = { - processWarn = "60"; processAlert = "70"; - loadWarn = "1.0"; loadAlert = "2.0"; - interface = "ens3"; - }; - monitoring-1 = { - processWarn = "50"; processAlert = "60"; - loadWarn = "4.0"; loadAlert = "6.0"; - load15Warn = "1.0"; load15Alert = "2.0"; - interface = "ens3"; - }; - quatresaisons = { - processWarn = "250"; processAlert = "400"; - loadWarn = "1.0"; loadAlert = "1.2"; - interface = "eth0"; - }; - }; - externalObjects = lib.genAttrs [ "tiboqorl-fr" ] - (n: pkgs.callPackage (./. + "/objects_" + n + ".nix") { inherit emailCheck; }); - masterPassiveObjects = let - passiveNodes = lib.attrsets.filterAttrs (n: _: builtins.elem n ["backup-2" "eldiron" "quatresaisons" "dilion"]) nodes; - toPassiveServices = map (s: s.passiveInfo.filter s // s.passiveInfo); - passiveServices = lib.flatten (lib.attrsets.mapAttrsToList - (_: n: toPassiveServices n.config.myServices.monitoring.services) - passiveNodes - ) ++ lib.flatten (lib.attrsets.mapAttrsToList - (_: n: toPassiveServices n.service) - externalObjects); - in { - service = passiveServices; - host = lib.lists.foldr - (a: b: a//b) - {} - (lib.attrsets.mapAttrsToList (_: h: h.config.myServices.monitoring.hosts) passiveNodes - ++ lib.attrsets.mapAttrsToList (_: n: n.host) externalObjects); - }; - emailCheck = host: hostFQDN: let - allCfg = config.myEnv.monitoring.email_check; - cfg = allCfg."${host}"; - reverseTargets = builtins.attrNames (lib.attrsets.filterAttrs (k: v: builtins.elem host v.targets) allCfg); - to_email = cfg': host': - let sep = if lib.strings.hasInfix "+" cfg'.mail_address then "_" else "+"; - in "${cfg'.mail_address}${sep}${host'}@${cfg'.mail_domain}"; - mails_to_send = builtins.concatStringsSep "," (map (n: to_email allCfg."${n}" host) cfg.targets); - mails_to_receive = builtins.concatStringsSep "," (map (n: "${to_email cfg n}:${n}") reverseTargets); - command = if cfg.local - then - [ "check_emails_local" "/var/lib/naemon/checks/email" mails_to_send mails_to_receive ] - else - [ "check_emails" cfg.login cfg.port mails_to_send mails_to_receive ]; - in - { - service_description = "${hostFQDN} email service is active"; - use = "mail-service"; - host_name = hostFQDN; - servicegroups = "webstatus-email"; - check_command = command; - }; - otherObjects = map - (n: (pkgs.callPackage (./. + "/objects_" + n + ".nix") { inherit emailCheck; })) - [ "ulminfo-fr" "phare" "eban" ]; - masterObjects = pkgs.callPackage ./objects_master.nix { inherit config; }; - commonObjects = pkgs.callPackage ./objects_common.nix ({ - master = cfg.master; - hostFQDN = config.hostEnv.fqdn; - hostName = name; - inherit mypluginsConfig; - } // builtins.getAttr name commonConfig); - hostObjects = - let - specific_file = ./. + "/objects_" + name + ".nix"; - in - lib.attrsets.optionalAttrs - (builtins.pathExists specific_file) - (pkgs.callPackage specific_file { - inherit config nodes emailCheck; - hostFQDN = config.hostEnv.fqdn; - hostName = name; - }); - objectsFiles = lib.mapAttrs' (name: value: lib.nameValuePair - "=/${name}/objects.conf" { alias = pkgs.writeText "objects.conf" (toObjects value); } - ) externalObjects; -in -{ - options = { - myServices.monitoring = { - enable = lib.mkOption { - type = lib.types.bool; - default = false; - description = '' - Whether to enable monitoring. - ''; - }; - master = lib.mkOption { - type = lib.types.bool; - default = false; - description = '' - This instance is the master instance - ''; - }; - hosts = lib.mkOption { - readOnly = true; - description = "Hosts list for this host"; - default = (commonObjects.host or {}) // (hostObjects.host or {}); - }; - services = lib.mkOption { - readOnly = true; - description = "Services list for this host"; - default = commonObjects.service ++ hostObjects.service; - }; - }; - }; - - config = lib.mkIf cfg.enable { - services.nginx = lib.mkIf config.myServices.status.enable { - virtualHosts."status.immae.eu".locations = objectsFiles // { - "=/common/immae.cfg" = { - alias = pkgs.writeText "immae.cfg" '' - # put me for instance in /etc/naemon/module-conf.d/immae.cfg - # Make sure that you have include_dir=module-conf.d in - # naemon.cfg - log_initial_states=1 - date_format=iso8601 - admin_email=${config.myEnv.monitoring.email} - obsess_over_services=1 - ocsp_command=notify-master - ''; - }; - "=/common/resource.cfg" = { - alias = pkgs.writeText "resource.cfg" '' - # Resource.cfg file - # Replace this with path to monitoring plugins - $USER1$=@@COMMON_PLUGINS@@ - # Replace this with a path to scripts from - # https://git.immae.eu/cgit/perso/Immae/Config/Nix.git/tree/modules/private/monitoring/plugins - $USER2$=@@IMMAE_PLUGINS@@ - $USER200$=https://status.immae.eu/ - $USER201$=@@TOKEN@@ - ''; - }; - }; - }; - - security.sudo.extraRules = let - pluginsSudo = lib.lists.remove null (lib.attrsets.mapAttrsToList (k: v: - if (v ? sudo) - then ({ users = [ "naemon" ]; } // (v.sudo myplugins)) - else null) mypluginsConfig); - in [ - { - commands = [ - { command = "${pkgs.mdadm}/bin/mdadm --monitor --scan -1"; options = [ "NOPASSWD" ]; } - { command = "${pkgs.postfix}/bin/mailq"; options = [ "NOPASSWD" ]; } - ]; - users = [ "naemon" ]; - runAs = "root"; - } - ] ++ pluginsSudo; - environment.etc."mdadm.conf" = { - enable = true; - mode = "0644"; - user = "root"; - text = "MAILADDR ${config.myEnv.monitoring.email}"; - }; - - secrets.keys = { - "naemon/id_rsa" = { - user = "naemon"; - group = "naemon"; - permissions = "0400"; - text = config.myEnv.monitoring.ssh_secret_key; - }; - } // lib.optionalAttrs cfg.master ( - lib.mapAttrs' (k: v: lib.nameValuePair "${k}_access_key" { - user = "naemon"; - group = "naemon"; - permissions = "0400"; - text = '' - export AWS_ACCESS_KEY_ID="${v.accessKeyId}" - export AWS_SECRET_ACCESS_KEY="${v.secretAccessKey}" - export BASE_URL="${v.remote "immae-eldiron"}" - ''; - }) config.myEnv.backup.remotes - ); - # needed since extraResource is not in the closure - systemd.services.naemon.path = [ myplugins ]; - services.naemon = { - enable = true; - extraConfig = '' - use_syslog=1 - log_initial_states=1 - date_format=iso8601 - admin_email=${config.myEnv.monitoring.email} - '' + lib.optionalString (!cfg.master) '' - obsess_over_services=1 - ocsp_command=notify-master - '' + lib.optionalString (cfg.master) '' - broker_module=${pkgs.naemon-livestatus}/lib/naemon-livestatus/livestatus.so ${config.services.naemon.runDir}/live - broker_module=${pkgs.status_engine.module}/lib/status-engine/naemon/statusengine-${pkgs.naemon.status_engine_version}.o use_service_perfdata=1 use_process_data=0 use_system_command_data=0 use_external_command_data=0 use_flapping_data=0 use_program_status_data=0 use_notification_data=0 use_contact_status_data=0 use_contact_notification_data=0 use_event_handler_data=0 use_object_data=0 - ''; - extraResource = let - resources = [hostObjects.resources or {}] ++ (lib.mapAttrsToList (k: v: v.resources or {}) mypluginsConfig); - joined = lib.zipAttrsWith (n: v: if builtins.length (lib.unique v) == 1 then builtins.head v else abort "Non-unique resources names") resources; - joinedStr = builtins.concatStringsSep "\n" (lib.mapAttrsToList (k: v: "$" + "${k}$=${v}") joined); - in '' - $USER2$=${myplugins} - ${joinedStr} - ''; - objectDefs = toObjects commonObjects - + toObjects hostObjects - + lib.optionalString cfg.master (toObjects masterObjects) - + lib.optionalString cfg.master (toObjects masterPassiveObjects) - + lib.optionalString cfg.master (builtins.concatStringsSep "\n" (map toObjects otherObjects)); - }; - }; -} diff --git a/modules/private/monitoring/myplugins.nix b/modules/private/monitoring/myplugins.nix deleted file mode 100644 index e59ddc4..0000000 --- a/modules/private/monitoring/myplugins.nix +++ /dev/null @@ -1,389 +0,0 @@ -{ sudo, pkgs, lib, config }: -let - cfg = config.myServices.monitoring; -in -{ - notify-secondary = { - resources = { - USER200 = config.myEnv.monitoring.status_url; - USER201 = config.myEnv.monitoring.status_token; - }; - commands = { - notify-master = "$USER2$/send_nrdp.sh -u \"$USER200$\" -t \"$USER201$\" -H \"$HOSTADDRESS$\" -s \"$SERVICEDESC$\" -S \"$SERVICESTATEID$\" -o \"$SERVICEOUTPUT$ | $SERVICEPERFDATA$\""; - }; - chunk = '' - cp ${./plugins}/send_nrdp.sh $out - patchShebangs $out/send_nrdp.sh - wrapProgram $out/send_nrdp.sh --prefix PATH : ${lib.makeBinPath [ - pkgs.curl pkgs.jq - ]} - ''; - }; - notify-primary = { - resources = { - USER206 = config.myEnv.monitoring.slack_channel; - USER207 = config.myEnv.monitoring.slack_url; - USER210 = config.myEnv.monitoring.eban.user; - USER211 = config.myEnv.monitoring.eban.password; - }; - commands = { - # $OVE is to force naemon to run via shell instead of execve which fails here - notify-host-by-email = "ADMINEMAIL=\"$ADMINEMAIL$\" SERVICENOTIFICATIONID=\"$SERVICENOTIFICATIONID$\" HOSTSTATE=\"$HOSTSTATE$\" HOSTOUTPUT=\"$HOSTOUTPUT$\" $USER2$/notify_by_email host \"$NOTIFICATIONTYPE$\" \"$HOSTALIAS$\" \"$LONGDATETIME$\" \"$CONTACTEMAIL$\" $OVE"; - # $OVE is to force naemon to run via shell instead of execve which fails here - notify-service-by-email = "ADMINEMAIL=\"$ADMINEMAIL$\" SERVICENOTIFICATIONID=\"$SERVICENOTIFICATIONID$\" SERVICEDESC=\"$SERVICEDESC$\" SERVICESTATE=\"$SERVICESTATE$\" SERVICEOUTPUT=\"$SERVICEOUTPUT$\" $USER2$/notify_by_email service \"$NOTIFICATIONTYPE$\" \"$HOSTALIAS$\" \"$LONGDATETIME$\" \"$CONTACTEMAIL$\" $OVE"; - notify-by-slack = "HOST=\"$HOSTALIAS$\" SERVICESTATE=\"$SERVICESTATE$\" SERVICEDESC=\"$SERVICEDESC$\" SERVICEOUTPUT=\"$SERVICEOUTPUT$\" $USER2$/notify_by_slack \"$ARG1$\" \"$ARG2$\""; - notify-host-eban-url = "STATUS_NAME=\"Server\" USER=\"$USER210$\" PASSWORD=\"$USER211$\" HOSTSTATE=\"$HOSTSTATE$\" $USER2$/notify_eban_url"; - notify-service-eban-url = "STATUS_NAME=\"$_SERVICEWEBSTATUS_NAME$\" USER=\"$USER210$\" PASSWORD=\"$USER211$\" SERVICESTATE=\"$SERVICESTATE$\" $USER2$/notify_eban_url"; - }; - chunk = '' - cp ${./plugins}/{notify_by_email,notify_by_slack,notify_eban_url} $out - patchShebangs $out/{notify_by_email,notify_by_slack,notify_eban_url} - wrapProgram $out/notify_by_email --prefix PATH : ${lib.makeBinPath [ - pkgs.mailutils - ]} - wrapProgram $out/notify_by_slack --prefix PATH : ${lib.makeBinPath [ - pkgs.curl pkgs.jq - ]} - wrapProgram $out/notify_eban_url --prefix PATH : ${lib.makeBinPath [ - pkgs.curl - ]} - ''; - }; - bandwidth = { - commands = { - check_local_bandwidth = "$USER2$/check_bandwidth -i=$ARG1$ -w $ARG2$ -c $ARG3$"; - }; - chunk = '' - cp ${./plugins}/check_bandwidth $out/ - patchShebangs $out/check_bandwidth - wrapProgram $out/check_bandwidth --prefix PATH : ${lib.makeBinPath [ - pkgs.iproute pkgs.bc - ]} - ''; - }; - command = { - commands = { - check_command_match = "$USER2$/check_command -c \"$ARG1$\" -C \"$ARG2$\" $ARG3$"; - check_command_output = "$USER2$/check_command -c \"$ARG1$\" -s 0 -o \"$ARG2$\" $ARG3$"; - check_command_status = "$USER2$/check_command -c \"$ARG1$\" -s \"$ARG2$\" $ARG3$"; - }; - chunk = '' - cp ${./plugins}/check_command $out/ - patchShebangs $out/check_command - wrapProgram $out/check_command --prefix PATH : ${config.security.wrapperDir} - ''; - }; - dns = { - commands = { - check_dns = "$USER1$/check_dns -H $ARG1$ -s $HOSTADDRESS$ $ARG2$"; - check_external_dns = "$USER1$/check_dns -H $ARG2$ -s $ARG1$ $ARG3$"; - }; - }; - emails = { - resources = { - USER203 = config.secrets.fullPaths."naemon/id_rsa"; - }; - commands = { - check_emails = "$USER2$/check_emails -H $HOSTADDRESS$ -i $USER203$ -l $ARG1$ -p $ARG2$ -s $ARG3$ -f $ARG4$"; - check_emails_local = "$USER2$/check_emails -H $HOSTADDRESS$ -n $ARG1$ -r $ADMINEMAIL$ -s $ARG2$ -f $ARG3$"; - }; - chunk = let - send_mails = pkgs.runCommand "send_mails" { - buildInputs = [ pkgs.makeWrapper ]; - } '' - mkdir -p $out/bin - cp ${./send_mails} $out/bin/send_mails - patchShebangs $out - wrapProgram $out/bin/send_mails --prefix PATH : ${lib.makeBinPath [ - pkgs.mailutils - ]} - ''; - in '' - cp ${./plugins}/check_emails $out/ - patchShebangs $out/check_emails - wrapProgram $out/check_emails --prefix PATH : ${lib.makeBinPath [ - pkgs.openssh send_mails - ]} --prefix PERL5LIB : ${pkgs.perlPackages.makePerlPath [ - pkgs.perlPackages.TimeDate - ]} - ''; - }; - eriomem = { - resources = { - USER208 = builtins.concatStringsSep "," (map (builtins.concatStringsSep ":") config.myEnv.monitoring.eriomem_keys); - }; - commands = { - check_backup_eriomem = "$USER2$/check_eriomem $USER208$"; - check_backup_eriomem_age = "$USER2$/check_backup_eriomem_age $ARG1$"; - }; - chunk = '' - cp ${./plugins}/check_eriomem $out/ - patchShebangs $out/check_eriomem - wrapProgram $out/check_eriomem --prefix PATH : ${lib.makeBinPath [ - pkgs.s3cmd pkgs.python3 - ]} - cp ${./plugins}/check_backup_age $out/check_backup_eriomem_age - patchShebangs $out/check_backup_eriomem_age - wrapProgram $out/check_backup_eriomem_age --prefix PATH : ${lib.makeBinPath [ - pkgs.duplicity - ]} --set SECRETS_PATH ${lib.optionalString cfg.master config.secrets.fullPaths."eriomem_access_key"} - ''; - }; - file_date = { - commands = { - check_last_file_date = "${sudo} -u \"$ARG3$\" $USER2$/check_last_file_date \"$ARG1$\" \"$ARG2$\""; - }; - chunk = '' - cp ${./plugins}/check_last_file_date $out/ - patchShebangs $out/check_last_file_date - ''; - sudo = myplugins: { - commands = [ - { command = "${myplugins}/check_last_file_date /backup2/*"; options = [ "NOPASSWD" ]; } - ]; - runAs = "ALL"; - }; - }; - ftp = { - commands = { - check_ftp_database = "$USER2$/check_ftp_database"; - }; - chunk = '' - cp ${./plugins}/check_ftp_database $out/ - patchShebangs $out/check_ftp_database - wrapProgram $out/check_ftp_database --prefix PATH : ${lib.makeBinPath [ - pkgs.lftp - ]} - ''; - }; - git = { - resources = { - USER203 = config.secrets.fullPaths."naemon/id_rsa"; - }; - commands = { - check_git = "$USER2$/check_git $USER203$"; - }; - chunk = '' - cp ${./plugins}/check_git $out/ - patchShebangs $out/check_git - wrapProgram $out/check_git --prefix PATH : ${lib.makeBinPath [ - pkgs.git pkgs.openssh - ]} - ''; - }; - http = { - resources = { - USER202 = config.myEnv.monitoring.http_user_password; - }; - commands = { - check_http = "$USER1$/check_http --sni -f stickyport -H \"$ARG1$\" -u \"$ARG2$\" -r \"$ARG3$\""; - check_https = "$USER1$/check_http --sni --ssl -f stickyport -H \"$ARG1$\" -u \"$ARG2$\" -r \"$ARG3$\""; - check_https_auth = "$USER1$/check_http --sni --ssl -a \"$USER202$\" -f stickyport -H \"$ARG1$\" -u \"$ARG2$\" -r \"$ARG3$\""; - check_https_certificate = "$USER1$/check_http --sni --ssl -H \"$ARG1$\" -C 21,15"; - check_https_code = "$USER1$/check_http --sni --ssl -f stickyport -H \"$ARG1$\" -u \"$ARG2$\" -e \"$ARG3$\" -r \"$ARG4$\""; - }; - }; - imap = { - resources = { - USER204 = config.myEnv.monitoring.imap_login; - USER205 = config.myEnv.monitoring.imap_password; - }; - commands = { - check_imap_connection = "$USER2$/check_imap_connection -u \"$USER204$\" -p \"$USER205$\" -H \"imap.immae.eu:143\""; - }; - chunk = '' - cp ${./plugins}/check_imap_connection $out/ - patchShebangs $out/check_imap_connection - wrapProgram $out/check_imap_connection --prefix PATH : ${lib.makeBinPath [ - pkgs.openssl - ]} - ''; - }; - megaraid = let - megacli = pkgs.megacli.overrideAttrs(old: { meta = old.meta // { license = null; }; }); - in { - commands = { - check_megaraid = "$USER2$/check_megaraid_sas --sudo"; - }; - chunk = let - megaCliPlugin = pkgs.runCommand "megaCliPlugin" { - plugin = pkgs.fetchurl { - name = "check_megaraid_sas"; - url = "https://exchange.nagios.org/components/com_mtree/attachment.php?link_id=6381&cf_id=24"; - sha256 = "0yf60p4c0hb4q3fng9fc14qc89bqm0f1sijayzygadaqcl44jx4p"; - }; - } '' - mkdir $out - cp $plugin $out/check_megaraid_sas - chmod +x $out/check_megaraid_sas - patchShebangs $out - substituteInPlace $out/check_megaraid_sas --replace /usr/sbin/MegaCli ${megacli}/bin/MegaCli64 - substituteInPlace $out/check_megaraid_sas --replace 'sudo $megacli' '${sudo} $megacli' - sed -i -e "s/use utils qw(%ERRORS);/my %ERRORS = ('OK' => 0, 'WARNING' => 1, 'CRITICAL' => 2, 'UNKNOWN' => 3);/" $out/check_megaraid_sas - ''; - in '' - cp ${megaCliPlugin}/check_megaraid_sas $out/ - patchShebangs $out/check_megaraid_sas - ''; - sudo = _: { - commands = [ - { command = "${megacli}/bin/MegaCli64"; options = [ "NOPASSWD" ]; } - ]; - runAs = "root"; - }; - }; - memory = { - commands = { - check_memory = "$USER2$/check_mem.sh -w $ARG1$ -c $ARG2$"; - }; - chunk = '' - cp ${./plugins}/check_mem.sh $out/ - patchShebangs $out/check_mem.sh - wrapProgram $out/check_mem.sh --prefix PATH : ${lib.makeBinPath [ - pkgs.gnugrep pkgs.gawk pkgs.procps-ng - ]} - ''; - }; - mysql = { - commands = { - check_mysql_replication = "${sudo} -u mysql $USER2$/check_mysql_replication \"$ARG1$\" \"$ARG2$\""; - }; - chunk = '' - cp ${./plugins}/check_mysql_replication $out/ - patchShebangs $out/check_mysql_replication - wrapProgram $out/check_mysql_replication --prefix PATH : ${lib.makeBinPath [ - pkgs.gnugrep pkgs.gnused pkgs.coreutils pkgs.mariadb - ]} - ''; - sudo = myplugins: { - commands = [ - { command = "${myplugins}/check_mysql_replication *"; options = [ "NOPASSWD" ]; } - ]; - runAs = "mysql"; - }; - }; - openldap = { - commands = { - check_openldap_replication = "${sudo} -u openldap $USER2$/check_openldap_replication \"$ARG1$\" \"$ARG2$\" \"$ARG3$\" \"$ARG4$\" \"$ARG5$\""; - }; - chunk = '' - cp ${./plugins}/check_openldap_replication $out/ - patchShebangs $out/check_openldap_replication - wrapProgram $out/check_openldap_replication --prefix PATH : ${lib.makeBinPath [ - pkgs.gnugrep pkgs.gnused pkgs.coreutils pkgs.openldap - ]} - ''; - sudo = myplugins: { - commands = [ - { command = "${myplugins}/check_openldap_replication *"; options = [ "NOPASSWD" ]; } - ]; - runAs = "openldap"; - }; - }; - ovh = { - resources = { - USER209 = builtins.concatStringsSep "," [ - config.myEnv.monitoring.ovh_sms.endpoint - config.myEnv.monitoring.ovh_sms.application_key - config.myEnv.monitoring.ovh_sms.application_secret - config.myEnv.monitoring.ovh_sms.consumer_key - config.myEnv.monitoring.ovh_sms.account - ]; - }; - commands = { - check_backup_ovh_age = "$USER2$/check_backup_ovh_age $ARG1$"; - check_ovh_sms = "$USER2$/check_ovh_sms \"$USER209$\""; - }; - chunk = '' - cp ${./plugins}/check_backup_age $out/check_backup_ovh_age - patchShebangs $out/check_backup_ovh_age - wrapProgram $out/check_backup_ovh_age --prefix PATH : ${lib.makeBinPath [ - pkgs.duplicity - ]} --set SECRETS_PATH ${lib.optionalString cfg.master config.secrets.fullPaths."ovh_access_key"} - cp ${./plugins}/check_ovh_sms $out/ - patchShebangs $out/check_ovh_sms - wrapProgram $out/check_ovh_sms --prefix PATH : ${lib.makeBinPath [ - (pkgs.python3.withPackages (ps: [ps.ovh])) - ]} - ''; - }; - postgresql = { - commands = { - check_postgresql_replication = "${sudo} -u postgres $USER2$/check_postgres_replication \"$ARG1$\" \"$ARG2$\" \"$ARG3$\""; - check_postgresql_database_count = "$USER2$/check_postgres_database_count \"$ARG1$\" \"$ARG2$\" \"$ARG3$\""; - }; - chunk = let - postgresqlBinary = if config.myServices.databasesReplication.postgresql.enable - then config.myServices.databasesReplication.postgresql.mainPackage - else if config.myServices.databases.enable - then config.myServices.databases.postgresql.package - else pkgs.postgresql; - in '' - cp ${./plugins}/check_postgres_replication $out/ - patchShebangs $out/check_postgres_replication - wrapProgram $out/check_postgres_replication --prefix PATH : ${lib.makeBinPath [ - postgresqlBinary - ]} - cp ${./plugins}/check_postgres_database_count $out/ - patchShebangs $out/check_postgres_database_count - wrapProgram $out/check_postgres_database_count --prefix PATH : ${lib.makeBinPath [ - postgresqlBinary - ]} - ''; - - sudo = myplugins: { - commands = [ - { command = "${myplugins}/check_postgres_replication *"; options = [ "NOPASSWD" ]; } - ]; - runAs = "postgres"; - }; - }; - redis = { - commands = { - check_redis_replication = "${sudo} -u redis $USER2$/check_redis_replication \"$ARG1$\""; - }; - chunk = '' - cp ${./plugins}/check_redis_replication $out/ - patchShebangs $out/check_redis_replication - wrapProgram $out/check_redis_replication --prefix PATH : ${lib.makeBinPath [ - pkgs.gnugrep pkgs.coreutils pkgs.redis - ]} - ''; - sudo = myplugins: { - commands = [ - { command = "${myplugins}/check_redis_replication *"; options = [ "NOPASSWD" ]; } - ]; - runAs = "redis"; - }; - }; - tcp = { - commands = { - check_tcp = "$USER1$/check_tcp -H $HOSTADDRESS$ -p $ARG1$ -e \"$ARG2$\" -Mcrit"; - check_tcp_ssl = "$USER1$/check_tcp -H $HOSTADDRESS$ -p $ARG1$ -S -D 21,15"; - }; - }; - zfs = { - commands = { - check_zfs = "$USER2$/check_zpool.sh -p ALL -w 80 -c 90"; - check_zfs_snapshot = "$USER2$/check_zfs_snapshot -d $ARG1$ -c 18000 -w 14400"; - }; - chunk = let - zfsPlugin = pkgs.fetchurl { - url = "https://www.claudiokuenzler.com/monitoring-plugins/check_zpools.sh"; - sha256 = "0p9ms9340in80jkds4kfspw62xnzsv5s7ni9m28kxyd0bnzkbzhf"; - }; - in '' - cp ${zfsPlugin} $out/check_zpool.sh - chmod +x $out/check_zpool.sh - patchShebangs $out/check_zpool.sh - wrapProgram $out/check_zpool.sh --prefix PATH : ${lib.makeBinPath [ - pkgs.which pkgs.zfs pkgs.gawk - ]} - cp ${./plugins}/check_zfs_snapshot $out - patchShebangs $out/check_zfs_snapshot - wrapProgram $out/check_zfs_snapshot --prefix PATH : ${lib.makeBinPath [ - pkgs.zfs pkgs.coreutils pkgs.gawk pkgs.gnugrep - ]} - ''; - }; -} diff --git a/modules/private/monitoring/nagios-cli.cfg b/modules/private/monitoring/nagios-cli.cfg deleted file mode 100644 index 7bd30cb..0000000 --- a/modules/private/monitoring/nagios-cli.cfg +++ /dev/null @@ -1,68 +0,0 @@ -# -*- coding: utf-8; -*- - -[cli] -history = /var/lib/naemon/nagios_cli_history - -[ui] -color = 1 -prompt = naemon %s> -prompt_separator = " → " - -[nagios] -log = /var/log/naemon -command_file = /run/naemon/naemon.cmd -log_file = %(log)s/naemon.log -object_cache_file = /var/lib/naemon/objects.cache -status_file = /var/lib/naemon/status.dat - -[object] -host.status = - host_name - current_state - plugin_output - is_flapping - last_check - last_time_down - last_state_change - check_period - notification_period - current_attempt - max_attempts -service.status = - host_name - service_description - current_state - is_flapping - plugin_output - last_time_down - last_state_change - last_check - next_check - check_interval - check_latency - check_period - notification_period - current_attempt - max_attempts - -[string] -level.ok = ↑ OK -level.warning = ! WARNING -level.critical = ↓ CRITICAL -level.unknown = ↕ UNKNOWN - -[color] -error = bold_red - -prompt = normal -prompt.object = bold - -host.host_name = bold -host.plugin_output = bold -service.plugin_output = bold - -level.ok = bold_green -level.warning = bold_yellow -level.critical = bold_red -level.unknown = bold_magenta - diff --git a/modules/private/monitoring/objects_backup-2.nix b/modules/private/monitoring/objects_backup-2.nix deleted file mode 100644 index 28032a4..0000000 --- a/modules/private/monitoring/objects_backup-2.nix +++ /dev/null @@ -1,111 +0,0 @@ -{ config, pkgs, lib, hostFQDN, emailCheck, ... }: -let - defaultPassiveInfo = { - filter = lib.attrsets.filterAttrs - (k: v: builtins.elem k ["service_description"] || builtins.substring 0 1 k == "_"); - use = "external-passive-service"; - freshness_threshold = "450"; - retry_interval = "1"; - servicegroups = "webstatus-resources"; - host_name = hostFQDN; - }; -in -{ - activatedPlugins = [ "file_date" "mysql" "openldap" "redis" "emails" ]; - service = [ - (emailCheck "backup-2" hostFQDN // { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-email"; freshness_threshold = "1350"; }; - }) - { - passiveInfo = defaultPassiveInfo; - service_description = "Size on /backup2 partition"; - use = "local-service"; - check_command = ["check_local_disk" "10%" "5%" "/backup2"]; - } - { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-backup"; }; - service_description = "Last backup in /backup2/phare is not too old"; - use = "local-service"; - check_command = ["check_last_file_date" "/backup2/phare" "14" "backup"]; - } - { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-backup"; }; - service_description = "Last backup in /backup2/dilion is not too old"; - use = "local-service"; - check_command = ["check_last_file_date" "/backup2/dilion" "14" "backup"]; - } - { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-backup"; }; - service_description = "Last backup in /backup2/ulminfo is not too old"; - use = "local-service"; - check_command = ["check_last_file_date" "/backup2/ulminfo" "14" "backup"]; - } - { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-databases,webstatus-backup"; }; - service_description = "Last postgresql dump in /backup2/eldiron/postgresql_backup is not too old"; - use = "local-service"; - check_command = ["check_last_file_date" "/backup2/eldiron/postgresql_backup" "7" "postgres"]; - } - { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-databases"; }; - service_description = "Redis replication for eldiron is up to date"; - use = "local-service"; - check_command = ["check_redis_replication" "/run/redis_eldiron/redis.sock"]; - } - { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-databases,webstatus-backup"; }; - service_description = "Last redis dump in /backup2/eldiron/redis_backup is not too old"; - use = "local-service"; - check_command = ["check_last_file_date" "/backup2/eldiron/redis_backup" "7" "redis"]; - } - { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-databases"; }; - service_description = "Mysql replication for eldiron is up to date"; - use = "local-service"; - check_command = ["check_mysql_replication" "/run/mysqld_eldiron/mysqld.sock" config.secrets.fullPaths."mysql_replication/eldiron/client"]; - } - { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-databases,webstatus-backup"; }; - service_description = "Last mysql dump in /backup2/eldiron/mysql_backup is not too old"; - use = "local-service"; - check_command = ["check_last_file_date" "/backup2/eldiron/mysql_backup" "7" "mysql"]; - } - { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-databases"; }; - service_description = "Openldap replication for eldiron is up to date"; - use = "local-service"; - check_command = let - name = "eldiron"; - hcfg = config.myServices.databasesReplication.openldap.hosts.eldiron; - base = config.myServices.databasesReplication.openldap.base; - eldiron_schemas = pkgs.callPackage ../databases/openldap/eldiron_schemas.nix {}; - ldapConfig = pkgs.writeText "slapd.conf" '' - include ${pkgs.openldap}/etc/schema/core.schema - include ${pkgs.openldap}/etc/schema/cosine.schema - include ${pkgs.openldap}/etc/schema/inetorgperson.schema - include ${pkgs.openldap}/etc/schema/nis.schema - ${eldiron_schemas} - moduleload back_hdb - backend hdb - database hdb - - suffix "${hcfg.base}" - directory ${base}/${name}/openldap - ''; - in [ - "check_openldap_replication" - hcfg.url - hcfg.dn - config.secrets.fullPaths."openldap_replication/eldiron/replication_password" - hcfg.base - ldapConfig - ]; - } - { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-databases,webstatus-backup"; }; - service_description = "Last openldap dump in /backup2/eldiron/openldap_backup is not too old"; - use = "local-service"; - check_command = ["check_last_file_date" "/backup2/eldiron/openldap_backup" "7" "openldap"]; - } - ]; -} diff --git a/modules/private/monitoring/objects_common.nix b/modules/private/monitoring/objects_common.nix deleted file mode 100644 index 7c9f642..0000000 --- a/modules/private/monitoring/objects_common.nix +++ /dev/null @@ -1,253 +0,0 @@ -{ hostFQDN -, hostName -, interface ? "eth0" -, processWarn ? "250" -, processAlert ? "400" -, loadWarn ? "0.9" -, load5Warn ? loadWarn -, load15Warn ? load5Warn -, loadAlert ? "1.0" -, load5Alert ? loadAlert -, load15Alert ? load5Alert -, mdadm -, master -, lib -, mypluginsConfig -, ... -}: -let - defaultPassiveInfo = { - filter = lib.attrsets.filterAttrs - (k: v: builtins.elem k ["service_description"] || builtins.substring 0 1 k == "_"); - use = "external-passive-service"; - freshness_threshold = "450"; - retry_interval = "1"; - servicegroups = "webstatus-resources"; - host_name = hostFQDN; - }; -in -{ - host = { - "${hostFQDN}" = { - alias = hostFQDN; - address = hostFQDN; - use = "linux-server"; - hostgroups = "webstatus-hosts"; - _webstatus_name = hostName; - _webstatus_vhost = "status.immae.eu"; - }; - }; - service = [ - { - passiveInfo = defaultPassiveInfo; - service_description = "Size on root partition"; - use = "local-service"; - check_command = ["check_local_disk" "20%" "10%" "/"]; - } - { - passiveInfo = defaultPassiveInfo; - service_description = "Total number of process"; - use = "local-service"; - check_command = [ - "check_local_procs" - processWarn - processAlert - "RSZDT" - ]; - } - { - passiveInfo = defaultPassiveInfo; - service_description = "Network bandwidth"; - use = "local-service"; - check_interval = "2"; - max_check_attempts = "20"; - retry_interval = "2"; - check_command = [ - "check_local_bandwidth" - interface - "20480" # kb/s - "51200" # kb/s - ]; - } - { - passiveInfo = defaultPassiveInfo; - service_description = "Average load"; - use = "local-service"; - check_command = [ - "check_local_load" - "${loadWarn},${load5Warn},${load15Warn}" - "${loadAlert},${load5Alert},${load15Alert}" - ]; - } - { - passiveInfo = defaultPassiveInfo; - service_description = "Swap usage"; - use = "local-service"; - check_command = ["check_local_swap" "20" "10"]; - } - { - passiveInfo = defaultPassiveInfo; - service_description = "Memory usage"; - use = "local-service"; - check_command = ["check_memory" "80" "90"]; - } - { - passiveInfo = defaultPassiveInfo; - service_description = "NTP is activated and working"; - use = "local-service"; - check_command = ["check_ntp"]; - } - { - passiveInfo = defaultPassiveInfo; - service_description = "No mdadm array is degraded"; - use = "local-service"; - check_command = [ - "check_command_output" - "${mdadm}/bin/mdadm --monitor --scan -1" - "^$" - "-s 0 -r root" - ]; - } - ]; - command = lib.foldr (v: o: o // (v.commands or {})) {} (builtins.attrValues mypluginsConfig) // { - check_local_disk = "$USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$"; - check_local_procs = "$USER1$/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$"; - check_local_load = "$USER1$/check_load -r -w $ARG1$ -c $ARG2$"; - check_local_swap = "$USER1$/check_swap -n ok -w $ARG1$ -c $ARG2$"; - check_ntp = "$USER1$/check_ntp_time -t 30 -q -H 0.arch.pool.ntp.org"; - check_mailq = "$USER1$/check_mailq -s -w 1 -c 2"; - check_smtp = "$USER1$/check_smtp -H $HOSTADDRESS$ -p 25 -S -D 21,15"; - - check_host_alive = "$USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5"; - check_ok = "$USER1$/check_dummy 0 \"Dummy OK\""; - check_critical = "$USER1$/check_dummy 2 \"Dummy CRITICAL\""; - }; - timeperiod = { - "24x7" = { - alias = "24 Hours A Day, 7 Days A Week"; - monday = "00:00-24:00"; - tuesday = "00:00-24:00"; - wednesday = "00:00-24:00"; - thursday = "00:00-24:00"; - friday = "00:00-24:00"; - saturday = "00:00-24:00"; - sunday = "00:00-24:00"; - }; - }; - servicegroup = { - webstatus-webapps = { alias = "Web applications"; }; - webstatus-websites = { alias = "Personal websites"; }; - webstatus-ssl = { alias = "SSL certificates"; }; - webstatus-dns = { alias = "DNS resolution"; }; - webstatus-remote-services = { alias = "Other remote services"; }; - webstatus-local-services = { alias = "Other local services"; }; - webstatus-email = { alias = "E-mail services"; }; - webstatus-resources = { alias = "Local resources"; }; - webstatus-databases = { alias = "Databases resources"; }; - webstatus-backup = { alias = "Backup resources"; }; - }; - hostgroup = { - webstatus-hosts = { alias = "Hosts"; }; - }; - contactgroup = { - admins = { alias = "Naemon Administrators"; }; - }; - templates = { - service = { - generic-service = { - active_checks_enabled = "1"; - check_freshness = "0"; - check_interval = "10"; - check_period = "24x7"; - contact_groups = "admins"; - event_handler_enabled = "1"; - flap_detection_enabled = "1"; - is_volatile = "0"; - max_check_attempts = "3"; - notification_interval = "60"; - notification_options = "w,u,c,r,f,s"; - notification_period = "24x7"; - notifications_enabled = if master then "1" else "0"; - obsess_over_service = "1"; - passive_checks_enabled = "1"; - process_perf_data = "1"; - retain_nonstatus_information = "1"; - retain_status_information = "1"; - retry_interval = "2"; - _webstatus_namespace = "immae"; - }; - local-service = { - use = "generic-service"; - host_name = hostFQDN; - check_interval = "5"; - max_check_attempts = "4"; - retry_interval = "1"; - servicegroups = "webstatus-resources"; - }; - external-service = { - use = "generic-service"; - check_interval = "5"; - max_check_attempts = "4"; - retry_interval = "1"; - }; - web-service = { - use = "generic-service"; - check_interval = "20"; - max_check_attempts = "2"; - retry_interval = "1"; - }; - external-web-service = { - use = "generic-service"; - check_interval = "20"; - max_check_attempts = "2"; - retry_interval = "1"; - }; - mail-service = { - use = "generic-service"; - check_interval = "15"; - max_check_attempts = "1"; - retry_interval = "1"; - }; - dns-service = { - use = "generic-service"; - check_interval = "120"; - notification_interval = "120"; - max_check_attempts = "5"; - retry_interval = "5"; - }; - }; - # No contact, we go through master - contact = { - generic-contact = { - host_notification_commands = "notify-host-by-email"; - host_notification_options = "d,u,r,f,s"; - host_notification_period = "24x7"; - service_notification_commands = "notify-service-by-email"; - service_notification_options = "w,u,c,r,f,s"; - service_notification_period = "24x7"; - }; - }; - host = { - generic-host = { - event_handler_enabled = "1"; - flap_detection_enabled = "1"; - notification_period = "24x7"; - notifications_enabled = "1"; - process_perf_data = "1"; - retain_nonstatus_information = "1"; - retain_status_information = "1"; - }; - linux-server = { - check_command = "check_host_alive"; - check_interval = "5"; - check_period = "24x7"; - contact_groups = "admins"; - max_check_attempts = "10"; - notification_interval = "120"; - notification_options = "d,u,r,f"; - retry_interval = "1"; - _webstatus_namespace = "immae"; - }; - }; - }; -} diff --git a/modules/private/monitoring/objects_dilion.nix b/modules/private/monitoring/objects_dilion.nix deleted file mode 100644 index 16b3c64..0000000 --- a/modules/private/monitoring/objects_dilion.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ lib, hostFQDN, emailCheck, ... }: -let - defaultPassiveInfo = { - filter = lib.attrsets.filterAttrs - (k: v: builtins.elem k ["service_description"] || builtins.substring 0 1 k == "_"); - use = "external-passive-service"; - freshness_threshold = "450"; - retry_interval = "1"; - servicegroups = "webstatus-resources"; - host_name = hostFQDN; - }; - zfs_snapshot = name: { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-resources"; }; - service_description = "ZFS snapshot ${name} happened not too long ago"; - use = "local-service"; - check_command = ["check_zfs_snapshot" name]; - }; -in -{ - activatedPlugins = [ "zfs" ]; - service = [ - { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-resources"; }; - service_description = "No ZFS pool is degraded"; - use = "local-service"; - check_command = ["check_zfs"]; - } - (zfs_snapshot "zpool/backup/eldiron/zpool/root") - (zfs_snapshot "zpool/backup/eldiron/zpool/root/etc") - (zfs_snapshot "zpool/backup/eldiron/zpool/root/var") - ]; -} diff --git a/modules/private/monitoring/objects_eban.nix b/modules/private/monitoring/objects_eban.nix deleted file mode 100644 index df54f6a..0000000 --- a/modules/private/monitoring/objects_eban.nix +++ /dev/null @@ -1,70 +0,0 @@ -{ ... }: -let - serviceTemplate = rest: { - host_name = "eban.bzh"; - use = "external-web-service"; - contacts = "eban"; - contact_groups = "null"; - check_interval = "15"; - - servicegroups = "webstatus-resources"; - _webstatus_namespace = "eban"; - } // rest; -in -{ - activatedPlugins = [ "http" ]; - contact = { - eban = { - use = "generic-contact"; - host_notification_commands = "notify-host-eban-url"; - service_notification_commands = "notify-service-eban-url"; - }; - }; - host = { - "eban.bzh" = { - alias = "eban.bzh"; - address = "eban.bzh"; - use = "linux-server"; - hostgroups = "webstatus-hosts"; - contacts = "eban"; - contact_groups = "null"; - _webstatus_name = "Eban"; - _webstatus_vhost = "status.eban.bzh"; - _webstatus_namespace = "eban"; - }; - }; - service = [ - (serviceTemplate { - service_description = "Eban website is up and running"; - check_command = ["check_https" "eban.bzh" "/" ""]; - _webstatus_name = "Main Website"; - _webstatus_url = "https://eban.bzh/"; - }) - (serviceTemplate { - service_description = "Eban blog is up and running"; - check_command = ["check_https" "blog.eban.bzh" "/" "<title>"]; - _webstatus_name = "Blog"; - _webstatus_url = "https://blog.eban.bzh/"; - }) - (serviceTemplate { - service_description = "Eban gitea is up and running"; - check_command = ["check_https" "git.eban.bzh" "/" "<title>"]; - _webstatus_name = "Git"; - _webstatus_url = "https://git.eban.bzh/"; - }) - (serviceTemplate { - service_description = "I Learned website is up and running"; - check_command = [ "check_https" "ilearned.eu.org" "/" "<title" ]; - - _webstatus_name = "I Learned website"; - _webstatus_url = "https://ilearned.eu.org/"; - }) - (serviceTemplate { - service_description = "I Learned gitea is up and running"; - check_command = [ "check_https" "git.ilearned.eu.org" "/" "<title" ]; - - _webstatus_name = "I Learned Git"; - _webstatus_url = "https://git.ilearned.eu.org/"; - }) - ]; -} diff --git a/modules/private/monitoring/objects_eldiron.nix b/modules/private/monitoring/objects_eldiron.nix deleted file mode 100644 index 75e7b0e..0000000 --- a/modules/private/monitoring/objects_eldiron.nix +++ /dev/null @@ -1,38 +0,0 @@ -{ lib, hostFQDN, emailCheck, ... }: -let - defaultPassiveInfo = { - filter = lib.attrsets.filterAttrs - (k: v: builtins.elem k ["service_description"] || builtins.substring 0 1 k == "_"); - use = "external-passive-service"; - freshness_threshold = "450"; - retry_interval = "1"; - servicegroups = "webstatus-resources"; - host_name = hostFQDN; - }; -in -{ - activatedPlugins = [ "emails" "postgresql" "zfs" ]; - service = [ - { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-databases"; }; - service_description = "Postgresql replication for backup-2 is up to date"; - use = "local-service"; - check_command = ["check_postgresql_replication" "backup-2" "/run/postgresql" "5432"]; - } - { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-resources"; }; - service_description = "No ZFS pool is degraded"; - use = "local-service"; - check_command = ["check_zfs"]; - } - { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-email"; }; - service_description = "mailq is empty"; - use = "local-service"; - check_command = ["check_mailq"]; - } - (emailCheck "eldiron" hostFQDN // { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-email"; freshness_threshold = "1350"; }; - }) - ]; -} diff --git a/modules/private/monitoring/objects_master.nix b/modules/private/monitoring/objects_master.nix deleted file mode 100644 index 30bfe73..0000000 --- a/modules/private/monitoring/objects_master.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ config, ... }: -{ - contact = { - immae = config.myEnv.monitoring.contacts.immae // { - use = "generic-contact"; - contactgroups = "admins"; - host_notification_commands = "notify-host-by-email,notify-by-slack!$USER206$!$USER207$"; - service_notification_commands = "notify-service-by-email,notify-by-slack!$USER206$!$USER207$"; - }; - }; - command = { - check_passive = "$USER1$/check_dummy 3 \"Service result are stale\""; - }; - templates = { - service = { - external-passive-service = { - active_checks_enabled = "0"; - check_freshness = "1"; - check_period = "24x7"; - contact_groups = "admins"; - event_handler_enabled = "1"; - flap_detection_enabled = "1"; - is_volatile = "0"; - max_check_attempts = "3"; - notification_interval = "60"; - notification_options = "w,u,c,r,f,s"; - notification_period = "24x7"; - notifications_enabled = "1"; - passive_checks_enabled = "1"; - process_perf_data = "1"; - retain_nonstatus_information = "1"; - retain_status_information = "1"; - retry_interval = "2"; - check_command = "check_passive"; - _webstatus_namespace = "immae"; - }; - }; - }; -} diff --git a/modules/private/monitoring/objects_monitoring-1.nix b/modules/private/monitoring/objects_monitoring-1.nix deleted file mode 100644 index 563be16..0000000 --- a/modules/private/monitoring/objects_monitoring-1.nix +++ /dev/null @@ -1,714 +0,0 @@ -{ config, pkgs, nodes, hostFQDN, emailCheck, lib, ... }: -{ - activatedPlugins = [ "dns" "ftp" "git" "http" "imap" "ovh" "tcp" ]; - host = { - # Dummy host for testing - # "dummy-host" = { - # alias = "dummy.host"; - # address = "dummy.host"; - # use = "linux-server"; - # check_command = "check_ok"; - # }; - }; - service = [ - # Dummy service for testing - # { - # service_description = "Dummy failing test"; - # host_name = "dummy-host"; - # use = "local-service"; - # check_interval = "0.3"; - # max_check_attempts = "1"; - # flap_detection_enabled = "0"; - # notification_interval = "0.1"; - # check_command = "check_critical"; - # } - - (emailCheck "monitoring-1" hostFQDN) - - { - service_description = "ftp has access to database for authentication"; - host_name = "eldiron.immae.eu"; - use = "external-service"; - check_command = "check_ftp_database"; - - servicegroups = "webstatus-remote-services"; - _webstatus_name = "FTP"; - _webstatus_url = "ftp.immae.eu"; - } - - { - service_description = "gitolite is working"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = "check_git"; - - servicegroups = "webstatus-remote-services"; - _webstatus_name = "Git"; - _webstatus_url = "git.immae.eu"; - } - - { - service_description = "postfix SSL is up to date"; - host_name = "eldiron.immae.eu"; - use = "external-service"; - check_command = "check_smtp"; - - servicegroups = "webstatus-ssl"; - _webstatus_name = "SMTP"; - _webstatus_url = "smtp.immae.eu"; - } - - { - service_description = "imap SSL is up to date"; - host_name = "eldiron.immae.eu"; - use = "external-service"; - check_command = ["check_tcp_ssl" "993"]; - - servicegroups = "webstatus-ssl"; - _webstatus_name = "IMAP"; - _webstatus_url = "imap.immae.eu"; - } - - { - service_description = "imap connection works"; - host_name = "eldiron.immae.eu"; - use = "external-service"; - check_command = "check_imap_connection"; - - servicegroups = "webstatus-remote-services,webstatus-email"; - _webstatus_name = "IMAP"; - _webstatus_url = "imap.immae.eu"; - } - - # Third party services - { - service_description = "OVH account has enough sms"; - host_name = "eldiron.immae.eu"; - use = "external-service"; - check_command = "check_ovh_sms"; - - check_interval = "120"; - notification_interval = "1440"; - } - - # Backup services - # { - # service_description = "eriomem backup is up and not full"; - # host_name = "eldiron.immae.eu"; - # use = "external-service"; - # check_command = "check_backup_eriomem"; - - # check_interval = "120"; - # notification_interval = "1440"; - - # servicegroups = "webstatus-backup"; - # } - { - service_description = "ovh backup is up and not full"; - host_name = "eldiron.immae.eu"; - use = "external-service"; - check_command = "check_ok"; - - check_interval = "120"; - notification_interval = "1440"; - - servicegroups = "webstatus-backup"; - } - - # DNS services - { - service_description = "eldiron dns is active and authoritative for aten.pro"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_dns" "aten.pro" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "aten.pro"; - } - - { - service_description = "eldiron dns is active and authoritative for bouya.org"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_dns" "bouya.org" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "bouya.org"; - } - - { - service_description = "eldiron dns is active and authoritative for filedesreves.fr"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_dns" "filedesreves.fr" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "filedesreves.fr"; - } - - { - service_description = "eldiron dns is active and authoritative for ludivinecassal.com"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_dns" "ludivinecassal.com" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "ludivinecassal.com"; - } - - { - service_description = "eldiron dns is active and authoritative for icommandeur.org"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_dns" "icommandeur.org" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "icommandeur.org"; - } - - { - service_description = "eldiron dns is active and authoritative for immae.eu"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_dns" "immae.eu" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "immae.eu"; - } - - { - service_description = "eldiron dns is active and authoritative for immae.fr"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_dns" "immae.fr" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "immae.fr"; - } - - { - service_description = "eldiron dns is active and authoritative for piedsjaloux.fr"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_dns" "piedsjaloux.fr" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "piedsjaloux.fr"; - } - - { - service_description = "eldiron dns is active and authoritative for saison-photo.org"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_dns" "saison-photo.org" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "saison-photo.org"; - } - - { - service_description = "eldiron dns is active and authoritative for tellesflorian.com"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_dns" "tellesflorian.com" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "tellesflorian.com"; - } - - { - service_description = "eldiron dns is active and authoritative for capitaines.fr"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_dns" "capitaines.fr" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "capitaines.fr"; - } - - { - service_description = "cloudns dns is active and authoritative for aten.pro"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_external_dns" "pns1.cloudns.net" "aten.pro" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "aten.pro (Secondary DNS ClouDNS)"; - } - - { - service_description = "cloudns dns is active and authoritative for bouya.org"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_external_dns" "pns1.cloudns.net" "bouya.org" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "bouya.org (Secondary DNS ClouDNS)"; - } - - { - service_description = "cloudns dns is active and authoritative for filedesreves.fr"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_external_dns" "pns1.cloudns.net" "filedesreves.fr" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "filedesreves.fr (Secondary DNS ClouDNS)"; - } - - { - service_description = "cloudns dns is active and authoritative for ludivinecassal.com"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_external_dns" "pns1.cloudns.net" "ludivinecassal.com" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "ludivinecassal.com (Secondary DNS ClouDNS)"; - } - - { - service_description = "cloudns dns is active and authoritative for icommandeur.org"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_external_dns" "pns1.cloudns.net" "icommandeur.org" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "icommandeur.org (Secondary DNS ClouDNS)"; - } - - { - service_description = "cloudns dns is active and authoritative for immae.eu"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_external_dns" "pns1.cloudns.net" "immae.eu" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "immae.eu (Secondary DNS ClouDNS)"; - } - - { - service_description = "cloudns dns is active and authoritative for immae.fr"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_external_dns" "pns1.cloudns.net" "immae.fr" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "immae.fr (Secondary DNS ClouDNS)"; - } - - { - service_description = "cloudns dns is active and authoritative for piedsjaloux.fr"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_external_dns" "pns1.cloudns.net" "piedsjaloux.fr" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "piedsjaloux.fr (Secondary DNS ClouDNS)"; - } - - { - service_description = "cloudns dns is active and authoritative for tellesflorian.com"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_external_dns" "pns1.cloudns.net" "tellesflorian.com" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "tellesflorian.com (Secondary DNS ClouDNS)"; - } - - { - service_description = "cloudns dns is active and authoritative for saison-photo.org"; - host_name = "eldiron.immae.eu"; - use = "dns-service"; - check_command = ["check_external_dns" "pns1.cloudns.net" "saison-photo.org" "-A"]; - - servicegroups = "webstatus-dns"; - _webstatus_name = "saison-photo.org (Secondary DNS ClouDNS)"; - } - - #### Web scenarios - { - service_description = "blog website is running on immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "www.immae.eu" "/blog/" "egrep -ri TODO /etc"]; - - servicegroups = "webstatus-websites"; - _webstatus_name = "Immae’s Blog"; - _webstatus_url = "https://www.immae.eu/blog"; - } - - { - service_description = "owncloud website is running on cloud.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "cloud.immae.eu" "/" "a safe home for all your data"]; - - servicegroups = "webstatus-webapps"; - _webstatus_name = "Nextcloud"; - _webstatus_url = "https://cloud.immae.eu"; - } - - { - service_description = "nextcloud website is running on nextcloud.4c.salle-s.org"; - host_name = "quatresaisons.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "nextcloud.4c.salle-s.org" "/" "a safe home for all your data"]; - - servicegroups = "webstatus-webapps"; - _webstatus_name = "Nextcloud"; - _webstatus_url = "https://nextcloud.4c.salle-s.org"; - } - - { - service_description = "davical website is running on dav.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "dav.immae.eu" "/davical/" "Log On Please"]; - - servicegroups = "webstatus-webapps"; - _webstatus_name = "Davical"; - _webstatus_url = "https://dav.immae.eu/davical"; - } - - { - service_description = "adminer website is running on tools.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https_auth" "tools.immae.eu" "/adminer/" "www.adminer.org"]; - - servicegroups = "webstatus-webapps"; - _webstatus_name = "Adminer"; - _webstatus_url = "https://tools.immae.eu/adminer/"; - } - - { - service_description = "ttrss website is running on tools.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "tools.immae.eu" "/ttrss/" "<title>Tiny Tiny RSS"]; - - servicegroups = "webstatus-webapps"; - _webstatus_name = "TT-RSS"; - _webstatus_url = "https://tools.immae.eu/ttrss/"; - } - - { - service_description = "mpd website is running on tools.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https_auth" "tools.immae.eu" "/mpd/" "<title>ympd"]; - - servicegroups = "webstatus-webapps"; - _webstatus_name = "MPD (YMPD)"; - _webstatus_url = "https://tools.immae.eu/mpd/"; - } - - { - service_description = "rompr mpd website is running on tools.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https_auth" "tools.immae.eu" "/rompr/" "<title>RompЯ"]; - - servicegroups = "webstatus-webapps"; - _webstatus_name = "MPD (ROMPR)"; - _webstatus_url = "https://tools.immae.eu/rompr/"; - } - - { - service_description = "wallabag website is running on tools.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "tools.immae.eu" "/wallabag/" "<title>Bienvenue sur wallabag"]; - - servicegroups = "webstatus-webapps"; - _webstatus_name = "Wallabag"; - _webstatus_url = "https://tools.immae.eu/wallabag/"; - } - - { - service_description = "yourl website is running on tools.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "tools.immae.eu" "/url/admin/" "<title>YOURLS"]; - - servicegroups = "webstatus-webapps"; - _webstatus_name = "YOURLS"; - _webstatus_url = "https://tools.immae.eu/url/admin/"; - } - - { - service_description = "roundcube website is running on mail.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "mail.immae.eu" "/roundcube/" "<title>Roundcube"]; - - servicegroups = "webstatus-webapps,webstatus-email"; - _webstatus_name = "Roundcube"; - _webstatus_url = "https://mail.immae.eu/roundcube/"; - } - - { - service_description = "dokuwiki website is running on tools.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "tools.immae.eu" "/dokuwiki/" "<title>start"]; - - servicegroups = "webstatus-webapps"; - _webstatus_name = "Dokuwiki"; - _webstatus_url = "https://tools.immae.eu/dokuwiki/"; - } - - { - service_description = "shaarli website is running on tools.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "tools.immae.eu" "/Shaarli/immae" "<title>Immae"]; - - servicegroups = "webstatus-webapps"; - _webstatus_name = "Shaarli"; - _webstatus_url = "https://tools.immae.eu/Shaarli/"; - } - - { - service_description = "ldap website is running on tools.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "tools.immae.eu" "/ldap/" "<title>phpLDAPadmin"]; - - servicegroups = "webstatus-webapps"; - _webstatus_name = "LDAP"; - _webstatus_url = "https://tools.immae.eu/ldap/"; - } - - { - service_description = "gitweb website is running on git.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "git.immae.eu" "/cgit" "<title>Immae’s git"]; - - servicegroups = "webstatus-webapps"; - _webstatus_name = "Git"; - _webstatus_url = "https://git.immae.eu/"; - } - - { - service_description = "mantisbt website is running on git.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "git.immae.eu" "/mantisbt/" "<title>My View - MantisBT"]; - - servicegroups = "webstatus-webapps"; - _webstatus_name = "Mantisbt"; - _webstatus_url = "https://git.immae.eu/mantisbt"; - } - - { - service_description = "diaspora website is running on diaspora.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "diaspora.immae.eu" "/" "is the online social world where you are in control"]; - - servicegroups = "webstatus-webapps"; - _webstatus_name = "Diaspora"; - _webstatus_url = "https://diaspora.immae.eu/"; - } - - { - service_description = "peertube website is running on peertube.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "peertube.immae.eu" "/" "<title>Immae’s PeerTube"]; - - servicegroups = "webstatus-webapps"; - _webstatus_name = "Peertube"; - _webstatus_url = "https://peertube.immae.eu/"; - } - - { - service_description = "etherpad website is running on ether.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "ether.immae.eu" "/" "<title>Etherpad"]; - - servicegroups = "webstatus-webapps"; - _webstatus_name = "Etherpad"; - _webstatus_url = "https://ether.immae.eu/"; - } - - { - service_description = "mediagoblin website is running on mgoblin.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "mgoblin.immae.eu" "/" "<title>GNU MediaGoblin"]; - - servicegroups = "webstatus-webapps"; - _webstatus_name = "Mediagoblin"; - _webstatus_url = "https://mgoblin.immae.eu/"; - } - - { - service_description = "mastodon website is running on mastodon.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "mastodon.immae.eu" "/" "Mastodon"]; - - servicegroups = "webstatus-webapps"; - _webstatus_name = "Mastodon"; - _webstatus_url = "https://mastodon.immae.eu/"; - } - - # Other web pages - { - service_description = "Jerome website is running on naturaloutil.immae.eu"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "naturaloutil.immae.eu" "/ping.php" "YES"]; - - servicegroups = "webstatus-websites"; - _webstatus_name = "naturaloutil.immae.eu"; - _webstatus_url = "https://naturaloutil.immae.eu/"; - } - - { - service_description = "Telio website is running on realistesmedia.fr"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "realistesmedia.fr" "/" "doctype html"]; - contact_groups = "telio-tortay"; - } - - { - service_description = "Chloe website site is running on osteopathe-cc.fr"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "www.osteopathe-cc.fr" "/" "Chloé Condamin ostéopathe D.O."]; - - servicegroups = "webstatus-websites"; - _webstatus_name = "osteopathe-cc.fr"; - _webstatus_url = "https://www.osteopathe-cc.fr/"; - } - - { - service_description = "Richie website is running on europe-richie.org"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "www.europe-richie.org" "/" "<title>.Europe Richie]"]; - - servicegroups = "webstatus-websites"; - _webstatus_name = "europe-richie.org"; - _webstatus_url = "https://www.europe-richie.org/"; - } - - { - service_description = "Ludivine website site is running on ludivinecassal.com"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "www.ludivinecassal.com" "/" "<title>Ludivine Cassal"]; - - servicegroups = "webstatus-websites"; - _webstatus_name = "ludivinecassal.com"; - _webstatus_url = "https://www.ludivinecassal.com/"; - } - - { - service_description = "Aten website site is running on aten.pro"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "aten.pro" "/" "<title>ATEN"]; - - servicegroups = "webstatus-websites"; - _webstatus_name = "aten.pro"; - _webstatus_url = "https://aten.pro/"; - } - - { - service_description = "PiedsJaloux website site is running on piedsjaloux.fr"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "www.piedsjaloux.fr" "/" "<title>Les Pieds Jaloux"]; - - servicegroups = "webstatus-websites"; - _webstatus_name = "piedsjaloux.fr"; - _webstatus_url = "https://www.piedsjaloux.fr/"; - } - - { - service_description = "Denise and Jerome website site is running on denisejerome.piedsjaloux.fr"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "denisejerome.piedsjaloux.fr" "/" "<title>Accueil - Mariage"]; - - servicegroups = "webstatus-websites"; - _webstatus_name = "denisejerome.piedsjaloux.fr"; - _webstatus_url = "https://denisejerome.piedsjaloux.fr/"; - } - - { - service_description = "Connexionswing website site is running on connexionswing.com"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "www.connexionswing.com" "/" "<title>Cours, stages"]; - - servicegroups = "webstatus-websites"; - _webstatus_name = "connexionswing.com"; - _webstatus_url = "https://www.connexionswing.com/"; - } - - { - service_description = "Sandetludo website site is running on sandetludo.com"; - host_name = "eldiron.immae.eu"; - use = "external-web-service"; - check_command = ["check_https" "www.sandetludo.com" "/" "<title>Cours de West Coast"]; - - servicegroups = "webstatus-websites"; - _webstatus_name = "sandetludo.com"; - _webstatus_url = "https://www.sandetludo.com/"; - } - - # SSL - { - service_description = "ldap SSL is up to date"; - host_name = "eldiron.immae.eu"; - use = "external-service"; - check_command = ["check_tcp_ssl" "636"]; - - servicegroups = "webstatus-ssl"; - _webstatus_name = "LDAP"; - _webstatus_url = "ldap.immae.eu"; - } - - # Tiboqorl - { - service_description = "Cyllene support page is running"; - host_name = "tiboqorl.fr"; - use = "external-web-service"; - contact_groups = "tiboqorl"; - check_command = [ "check_https" "sc.groupe-cyllene.com" "/" "<title>Support Client Cyllene" ]; - _webstatus_namespace = "tiboqorl"; - } - - { - service_description = "Origny page is running"; - host_name = "tiboqorl.fr"; - use = "external-web-service"; - contact_groups = "tiboqorl"; - check_command = [ "check_https" "origny.tiboqorl.fr" "/" "<title>Home Assistant" ]; - _webstatus_namespace = "tiboqorl"; - } - ]; - contact = { - telio-tortay = config.myEnv.monitoring.contacts.telio-tortay // { - use = "generic-contact"; - contactgroups = "telio-tortay"; - }; - thibault = config.myEnv.monitoring.contacts.thibault // { - use = "generic-contact"; - contactgroups = "tiboqorl"; - }; - }; - contactgroup = { - telio-tortay = { alias = "Telio Tortay"; members = "immae"; }; - tiboqorl = { alias = "Tiboqorl"; members = "immae"; }; - }; -} diff --git a/modules/private/monitoring/objects_phare.nix b/modules/private/monitoring/objects_phare.nix deleted file mode 100644 index 082e7e3..0000000 --- a/modules/private/monitoring/objects_phare.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ emailCheck, ... }: -{ - activatedPlugins = [ "emails" ]; - host = { - "phare.normalesup.org" = { - alias = "phare.normalesup.org"; - address = "phare.normalesup.org"; - use = "linux-server"; - hostgroups = "webstatus-hosts"; - _webstatus_name = "phare"; - _webstatus_vhost = "status.immae.eu"; - }; - }; - service = [ - (emailCheck "phare" "phare.normalesup.org") - ]; -} diff --git a/modules/private/monitoring/objects_quatresaisons.nix b/modules/private/monitoring/objects_quatresaisons.nix deleted file mode 100644 index f30cf81..0000000 --- a/modules/private/monitoring/objects_quatresaisons.nix +++ /dev/null @@ -1,38 +0,0 @@ -{ lib, hostFQDN, emailCheck, openldap, ... }: -let - defaultPassiveInfo = { - filter = lib.attrsets.filterAttrs - (k: v: builtins.elem k ["service_description"] || builtins.substring 0 1 k == "_"); - use = "external-passive-service"; - freshness_threshold = "450"; - retry_interval = "1"; - servicegroups = "webstatus-resources"; - host_name = hostFQDN; - }; -in -{ - resources = { - USER212 = "{{ .monitoring.quatresaisons.naemon_ldap }}"; - }; - activatedPlugins = [ "megaraid" "command" "postgresql" ]; - service = [ - { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-resources"; }; - service_description = "No RAID device is degraded"; - use = "local-service"; - check_command = ["check_megaraid"]; - } - { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-resources"; }; - service_description = "LDAP is running"; - use = "local-service"; - check_command = [ "check_command_status" "${openldap}/bin/ldapwhoami -D uid=naemon,ou=services,dc=salle-s,dc=org -w $USER212$" "0" ""]; - } - { - passiveInfo = defaultPassiveInfo // { servicegroups = "webstatus-resources"; }; - service_description = "Postgresql is running"; - use = "local-service"; - check_command = [ "check_postgresql_database_count" "/run/postgresql" "5432" "3" ]; - } - ]; -} diff --git a/modules/private/monitoring/objects_tiboqorl-fr.nix b/modules/private/monitoring/objects_tiboqorl-fr.nix deleted file mode 100644 index b49a1d8..0000000 --- a/modules/private/monitoring/objects_tiboqorl-fr.nix +++ /dev/null @@ -1,174 +0,0 @@ -{ lib, ... }: -let - hostFQDN = "tiboqorl.fr"; - defaultPassiveInfo = { - filter = lib.attrsets.filterAttrs - (k: v: builtins.elem k ["service_description"] || builtins.substring 0 1 k == "_"); - use = "external-passive-service"; - contact_groups = "tiboqorl"; - freshness_threshold = "450"; - notification_interval = "240"; - retry_interval = "1"; - servicegroups = "webstatus-resources"; - _webstatus_namespace = "tiboqorl"; - host_name = hostFQDN; - }; -in -{ - host = { - "tiboqorl.fr" = { - alias = "tiboqorl.fr"; - address = "tiboqorl.fr"; - use = "linux-server"; - contact_groups = "tiboqorl"; - hostgroups = "webstatus-hosts"; - _webstatus_name = "tiboqorl"; - _webstatus_vhost = "status.immae.eu"; - _webstatus_namespace = "tiboqorl"; - }; - }; - service = [ - { - passiveInfo = defaultPassiveInfo; - service_description = "Size on root partition"; - use = "local-service"; - check_command = ["check_local_disk" "20%" "10%" "/"]; - } - { - passiveInfo = defaultPassiveInfo; - service_description = "Total number of process"; - use = "local-service"; - check_command = [ "check_local_procs" "250" "400" "RSZDT" ]; - } - { - passiveInfo = defaultPassiveInfo; - service_description = "Network bandwidth"; - use = "local-service"; - check_interval = "2"; - max_check_attempts = "20"; - retry_interval = "2"; - check_command = [ - "check_local_bandwidth" - "eth0" - "20480" # kb/s - "51200" # kb/s - ]; - } - { - passiveInfo = defaultPassiveInfo; - service_description = "Average load"; - use = "local-service"; - check_command = [ - "check_local_load" - "0.75,0.75,0.75" # warn - "1.0,1.0,1.0" # alert - ]; - } - { - passiveInfo = defaultPassiveInfo; - service_description = "Swap usage"; - use = "local-service"; - check_command = ["check_local_swap" "20" "10"]; - } - { - passiveInfo = defaultPassiveInfo; - service_description = "Memory usage"; - use = "local-service"; - check_command = ["check_memory" "80" "90"]; - } - { - passiveInfo = defaultPassiveInfo; - service_description = "NTP is activated and working"; - use = "local-service"; - check_command = ["check_ntp"]; - } - ]; - command = { - check_local_disk = "$USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$"; - check_local_procs = "$USER1$/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$"; - check_local_load = "$USER1$/check_load -w $ARG1$ -c $ARG2$"; - check_local_swap = "$USER1$/check_swap -n ok -w $ARG1$ -c $ARG2$"; - check_local_bandwidth = "$USER2$/check_bandwidth -i=$ARG1$ -w $ARG2$ -c $ARG3$"; - check_memory = "$USER2$/check_mem.sh -w $ARG1$ -c $ARG2$"; - check_ntp = "$USER1$/check_ntp_time -t 30 -q -H 0.arch.pool.ntp.org"; - - check_host_alive = "$USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5"; - - notify-master = "$USER2$/send_nrdp.sh -u \"$USER200$\" -t \"$USER201$\" -H \"$HOSTADDRESS$\" -s \"$SERVICEDESC$\" -S \"$SERVICESTATEID$\" -o \"$SERVICEOUTPUT$ | $SERVICEPERFDATA$\""; - }; - timeperiod = { - "24x7" = { - alias = "24 Hours A Day, 7 Days A Week"; - monday = "00:00-24:00"; - tuesday = "00:00-24:00"; - wednesday = "00:00-24:00"; - thursday = "00:00-24:00"; - friday = "00:00-24:00"; - saturday = "00:00-24:00"; - sunday = "00:00-24:00"; - }; - }; - servicegroup = { - webstatus-resources = { alias = "Local resources"; }; - }; - hostgroup = { - webstatus-hosts = { alias = "Hosts"; }; - }; - contactgroup = { - tiboqorl = { alias = "Naemon Administrators"; }; - }; - templates = { - service = { - generic-service = { - active_checks_enabled = "1"; - check_freshness = "0"; - check_interval = "10"; - check_period = "24x7"; - contact_groups = "tiboqorl"; - event_handler_enabled = "1"; - flap_detection_enabled = "1"; - is_volatile = "0"; - max_check_attempts = "3"; - notification_interval = "60"; - notification_options = "w,u,c,r,f,s"; - notification_period = "24x7"; - notifications_enabled = "0"; - obsess_over_service = "1"; - passive_checks_enabled = "1"; - process_perf_data = "1"; - retain_nonstatus_information = "1"; - retain_status_information = "1"; - retry_interval = "2"; - }; - local-service = { - use = "generic-service"; - host_name = hostFQDN; - check_interval = "5"; - max_check_attempts = "4"; - retry_interval = "1"; - servicegroups = "webstatus-resources"; - }; - }; - host = { - generic-host = { - event_handler_enabled = "1"; - flap_detection_enabled = "1"; - notification_period = "24x7"; - notifications_enabled = "1"; - process_perf_data = "1"; - retain_nonstatus_information = "1"; - retain_status_information = "1"; - }; - linux-server = { - check_command = "check_host_alive"; - check_interval = "5"; - check_period = "24x7"; - contact_groups = "tiboqorl"; - max_check_attempts = "10"; - notification_interval = "120"; - notification_options = "d,u,r,f"; - retry_interval = "1"; - }; - }; - }; -} diff --git a/modules/private/monitoring/objects_ulminfo-fr.nix b/modules/private/monitoring/objects_ulminfo-fr.nix deleted file mode 100644 index bd2804b..0000000 --- a/modules/private/monitoring/objects_ulminfo-fr.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ emailCheck, ... }: -{ - activatedPlugins = [ "emails" ]; - host = { - "ulminfo.fr" = { - alias = "ulminfo.fr"; - address = "ulminfo.fr"; - use = "linux-server"; - hostgroups = "webstatus-hosts"; - _webstatus_name = "ulminfo"; - _webstatus_vhost = "status.immae.eu"; - }; - }; - service = [ - (emailCheck "ulminfo" "ulminfo.fr") - ]; -} diff --git a/modules/private/monitoring/plugins/check_backup_age b/modules/private/monitoring/plugins/check_backup_age deleted file mode 100755 index d873bdc..0000000 --- a/modules/private/monitoring/plugins/check_backup_age +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -source $SECRETS_PATH -export HOME=$(mktemp -d) - -trap "rm -rf $HOME" EXIT -folder=$1 - -parse_date() { - d=$1 - echo $d | sed -e "s/^\(....\)\(..\)\(..\)T\(..\)\(..\)\(..\)/\1-\2-\3T\4:\5:\6/" -} - -output=$(duplicity collection-status --log-fd 2 "$BASE_URL$folder" 2>&1 > /dev/null) - -output=$(echo "$output" | grep -v "^\.") - -last_full=$(parse_date "$(echo "$output" | grep "^ full " | cut -d' ' -f3 | sort | tail -n1)") -last_bkp=$(parse_date "$(echo "$output" | grep -E "^ (full|inc) " | cut -d' ' -f3 | sort | tail -n1)") -orphaned_sets=$(echo "$output" | grep "^orphaned-sets-num" | cut -d' ' -f2) -incomplete_sets=$(echo "$output" | grep "^incomplete-sets-num" | cut -d' ' -f2) - -if [[ -z "$last_full" || -z "$last_bkp" || -z "$orphaned_sets" || -z "$incomplete_sets" ]]; then - echo "duply-backup $folder UNKNOWN - impossible to parse result" - exit 3 -fi - -last_full_age=$(( ($(date "+%s") - $(date -d "$last_full" "+%s")) / (60*60*24) )) -last_bkp_age=$(( ($(date "+%s") - $(date -d "$last_bkp" "+%s")) / (60*60) )) - -PERFS="orphan=$orphaned_sets;1;;0; incomplete=$incomplete_sets;1;;0; age=${last_bkp_age}h;30;48;0; full_age=${last_full_age}d;35;45;0;" - - -WARNINGS="" -ERRORS="" -if [[ "$incomplete_sets" -gt 0 ]]; then - WARNINGS="$WARNINGS - Incomplete sets is $incomplete_sets" -fi - -if [[ "$orphaned_sets" -gt 0 ]]; then - WARNINGS="$WARNINGS - Orphaned sets is $orphaned_sets" -fi - -if [[ "$last_full_age" -gt 45 ]]; then - ERRORS="$ERRORS - Last full backup is too old $last_full" -elif [[ "$last_full_age" -gt 35 ]]; then - WARNINGS="$WARNINGS - Last full backup is getting old $last_full" -fi - -if [[ "$last_bkp_age" -gt 48 ]]; then - ERRORS="$ERRORS - Last backup is too old $last_bkp" -elif [[ "$last_bkp_age" -gt 30 ]]; then - WARNINGS="$WARNINGS - Last backup is getting old $last_bkp" -fi - -if [[ -n "$ERRORS" ]]; then - echo "duply-backup $folder CRITICAL$ERRORS$WARNINGS | $PERFS" - exit 2 -elif [[ -n "$WARNINGS" ]]; then - echo "duply-backup $folder WARNING$WARNINGS | $PERFS" - exit 1 -else - echo "duply-backup $folder OK | $PERFS" -fi diff --git a/modules/private/monitoring/plugins/check_bandwidth b/modules/private/monitoring/plugins/check_bandwidth deleted file mode 100755 index 53c5d85..0000000 --- a/modules/private/monitoring/plugins/check_bandwidth +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/bash - -# ============================== SUMMARY ===================================== -#Author : Ken Roulamellah -#Date : 19/07/2018 -#Version : 1.0 -# Licence : GPL -# ===================== INFORMATION ABOUT THIS PLUGIN ======================== -# -# This plugin checks the average RX and TX bandwidth utilisation. It use -# kbytes as measure unite. -# -# ========================== START OF PROGRAM CODE =========================== - -STATE_OK=0 -STATE_WARNING=1 -STATE_CRITICAL=2 -STATE_UNKNOWN=3 - -interface=$( ip route | grep default | awk '{print $5}' | head -n1) -function print_usage() -{ - echo "Usage :" - echo "$0 [ -i=INTERFACE] [ -ct=COUNT ] -w WARNING -c CRITICAL" - echo "This script calculate the average bandwith usage." - echo "Default values | interface: ${interface}, counter: 10" -} - -counter=10 -warning=-1 -critical=-1 - -sum_rx=0 -sum_tx=0 -avg_rx= -avg_tx= -i= - - -if [[ $# -lt 4 ]]; -then - echo "Error: Arguments are missing" - print_usage - exit $STATE_UNKNOWN -fi - -while [[ $# -gt 0 ]]; do - case "$1" in - -i=*) - interface="$(cut -d'=' -f2 <<<"$1")" - shift - ;; - -ct=*) - counter="$(cut -d'=' -f2 <<<"$1")" - shift - ;; - -w) - warning=$2 - shift 2 - ;; - -c) - critical=$2 - shift 2 - ;; - *) - printf "\nError: Invalid option '$1'" - print_usage - exit $STATE_UNKNOWN - ;; - esac -done - -if [ $warning -lt 0 ] || [ $critical -lt 0 ]; -then - echo "Error: You need to specify a warning and critical treshold" - print_usage - exit $STATE_UNKNOWN -fi - -grep -q "up" /sys/class/net/$interface/operstate || exec echo "$interface: no such device or down" - -read rx <"/sys/class/net/$interface/statistics/rx_bytes" -read tx <"/sys/class/net/$interface/statistics/tx_bytes" - -i=$counter -while [ $i -gt 0 ]; do - sleep 1 - read newrx <"/sys/class/net/$interface/statistics/rx_bytes" - read newtx <"/sys/class/net/$interface/statistics/tx_bytes" - - #echo "old rx :$rx" - #echo "new rx :$newrx" - rx_cal=$(bc <<< "scale=2; ($newrx-$rx) / 1000") - tx_cal=$(bc <<< "scale=2; ($newtx-$tx) / 1000") - - sum_rx=$(bc <<< "scale=2;$sum_rx+$rx_cal") - sum_tx=$(bc <<< "scale=2;$sum_tx+$tx_cal") - - #echo "$interface {rx: $rx_cal ko/s, tx: $tx_cal ko/s}" - rx=$newrx - tx=$newtx - ((i --)) -done - -avg_rx=$(bc <<< "scale=2;$sum_rx/$counter") -avg_tx=$(bc <<< "scale=2;$sum_tx/$counter") - -#echo "$avg_rx" -#echo "$avg_tx" - - -if [ $(bc <<< "$avg_rx > $critical || $avg_tx > $critical") -eq 1 ]; then - echo "$interface CRITICAL - AVG_RX: $avg_rx kb/s, AVG_TX: - $avg_tx kb/s | RX="$avg_rx"kbps;0;0;0; TX="$avg_tx"kbps;0;0;0;" - exit $STATE_CRITICAL -elif [ $(bc <<< "$avg_rx > $warning || $avg_tx > $warning") -eq 1 ]; then - echo "$interface WARNING - AVG_RX: $avg_rx kb/s, AVG_TX: $avg_tx kb/s | RX="$avg_rx"kbps;0;0;0; TX="$avg_tx"kbps;0;0;0;" - exit $STATE_WARNING -else - echo "$interface - OK AVG_RX: $avg_rx kb/s, AVG_TX: $avg_tx kb/s | RX="$avg_rx"kbps;0;0;0; TX="$avg_tx"kbps;0;0;0;" - exit $STATE_OK -fi -exit 3 diff --git a/modules/private/monitoring/plugins/check_command b/modules/private/monitoring/plugins/check_command deleted file mode 100755 index 2b546c1..0000000 --- a/modules/private/monitoring/plugins/check_command +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/env perl - -use strict; -use Getopt::Std; -$| = 1; - -my %opts; -getopts('hr:C:c:s:o:', \%opts); - -my $STATE_OK = 0; -my $STATE_WARNING = 1; -my $STATE_CRITICAL = 2; -my $STATE_UNKNOWN = 3; - -if ($opts{'h'} || scalar(%opts) == 0) { - &print_help(); - exit($STATE_OK); -} - -my $command = $opts{'c'}; -if ($command eq '') { - print "You must provide a command to check.\n"; - exit($STATE_UNKNOWN); -} - -my $expected_output = $opts{'o'}; -my $expected_status = $opts{'s'}; -my $other_command = $opts{'C'}; - -if ($other_command eq '' and $expected_status eq '' and $expected_output eq '') { - $expected_status = 0; -} - -my $cmd = $command . ' 2>&1'; -my $other_cmd; -if ($other_command ne '') { - $other_cmd = $other_command . ' 2>&1'; -} - -my $run_as; -if ($opts{'r'}) { - $run_as = $opts{'r'}; - $cmd = "sudo -u $run_as -n $cmd"; - - if ($other_command ne '') { - $other_cmd = "sudo -u $run_as -n $other_cmd"; - } - -} - -my $cmd_result = `$cmd`; -my $other_cmd_result; -if ($other_command ne '') { - $other_cmd_result = `$other_cmd`; - chomp($other_cmd_result); -} - -chomp($cmd_result); -if ($cmd_result =~ /sudo/i) { - print "$command CRITICAL - No sudo right to run the command | result=1;;;;\n"; - exit($STATE_UNKNOWN); -} elsif ($expected_status ne '') { - if ($? != $expected_status) { - print "$command CRITICAL - Response status $? | result=1;;;;\n"; - exit($STATE_CRITICAL); - } else { - print "$command OK - Response status $? | result=0;;;;\n"; - exit($STATE_OK); - } -} elsif ($other_command ne '') { - if ($cmd_result ne $other_cmd_result) { - print "$command CRITICAL - Expected output not matching other command output | result=1;;;;\n"; - exit($STATE_CRITICAL); - } else { - print "$command OK - Expected output matching other command output | result=0;;;;\n"; - exit($STATE_OK); - } -} else { - if ($cmd_result !~ /$expected_output/) { - print "$command CRITICAL - Expected output not matching | result=1;;;;\n"; - exit($STATE_CRITICAL); - } else { - print "$command OK - Expected output matching | result=0;;;;\n"; - exit($STATE_OK); - } -} - -sub print_help() { - print << "EOF"; -Check whether the given command responds as expected. One of -o -C or -s must be selected. - -Options: --h - Print detailed help screen - --c - command to run (required) - --C - other command to compare output - --r user - Run as user via sudo. - --s - status code to check - --o - output to check - -EOF -} - diff --git a/modules/private/monitoring/plugins/check_emails b/modules/private/monitoring/plugins/check_emails deleted file mode 100755 index 534e5a5..0000000 --- a/modules/private/monitoring/plugins/check_emails +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/env perl - -use strict; -use Getopt::Std; -use File::Basename; -use Date::Parse; -use POSIX qw(strftime); - -$| = 1; - -my %opts; -getopts('hH:l:s:p:f:i:n:r:', \%opts); - -my $STATE_OK = 0; -my $STATE_WARNING = 1; -my $STATE_CRITICAL = 2; -my $STATE_UNKNOWN = 3; - -if ($opts{'h'} || scalar(%opts) == 0) { - &print_help(); - exit($STATE_OK); -} - -my $port = $opts{'p'}; -my $host = $opts{'H'}; -my $login = $opts{'l'}; -if ($login ne '') { - $login = "$login@"; -} - -my $identity = $opts{'i'}; -my $local_directory = $opts{'n'}; -my $return_path = $opts{'r'}; - -my @emails_to_send = split(/,/, $opts{'s'}); -my @emails_to_expect = split(/,/, $opts{'f'}); - -my $cmd_result; -if ($local_directory ne '') { - if (@emails_to_expect and ! -d $local_directory) { - print "Emails $host UNKNOWN - Could not find local directory"; - exit($STATE_UNKNOWN); - } - $cmd_result = `send_mails $local_directory $return_path @emails_to_send 2>&1`; -} else { - $cmd_result = `ssh -o BatchMode=yes -o UserKnownHostsFile=/dev/null -o CheckHostIP=no -o StrictHostKeyChecking=no -p $port -i $identity $login$host send_mails @emails_to_send 2>&1`; - - if ($cmd_result =~ /Host key verification failed./) { - print "Emails $host UNKNOWN - Could not connect to host with ssh key\n"; - exit($STATE_UNKNOWN); - } -} - -my @lines = split(/\n/, $cmd_result); - -my %found_emails; - -foreach my $line (@lines) { - my @split_line = split(/;/, $line, 2); - $found_emails{$split_line[0]} = $split_line[1]; -} - -my $output = ""; -my $old = 0; -foreach my $email_from (@emails_to_expect) { - my @email_split = split(/:/, $email_from); - my $email = $email_split[0]; - my $from = $email_split[1]; - - if ( exists $found_emails{$email} ) { - my $email_date = str2time($found_emails{$email}); - my $current_date = strftime "%s", localtime; - - if ($current_date - $email_date > 60*30) { - $output = "$output$email ($found_emails{$email} from $from) "; - } - $old = ($current_date - $email_date) > $old ? ($current_date - $email_date) : $old; - } else { - $output = "$output$email (missing) " - } -} - -if ($output ne '') { - print "Emails $host CRITICAL - expecting emails: $output | timestamp=${old}s;;;;\n"; - exit($STATE_CRITICAL); -} else { - print "Emails $host OK | timestamp=${old}s;;;;\n"; - exit($STATE_OK); -} - -sub print_help() { - print << "EOF"; -Check sent emails - -Options: --h - Print detailed help screen - --H - Host to check - --l - Login - --i - Identity file - --n - Don’t use ssh, pass that directory to script - --r - Return path for local e-mails - --s - Comma separated list of emails to send from the host. - --f - Comma separated list of emails to expect on the host. -EOF -} - diff --git a/modules/private/monitoring/plugins/check_eriomem b/modules/private/monitoring/plugins/check_eriomem deleted file mode 100755 index 880b88a..0000000 --- a/modules/private/monitoring/plugins/check_eriomem +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env python -import os -import sys -import getopt -import signal -from subprocess import Popen, PIPE - -STATE_OK = 0 -STATE_WARNING = 1 -STATE_CRITICAL = 2 -STATE_UNKNOWN = 3 - -keys = sys.argv[1].split(",") - -def to_args(k): - access, secret = k.split(":", 1) - return [ - "s3cmd", - '-c=/dev/null', - '--no-check-certificate', - '--access_key={}'.format(access), - '--secret_key={}'.format(secret), - '--host=e.eriomem.net', - '--host-bucket=%(bucket)s.e.eriomem.net', - 'du' - ] - -max_size = 1024*1024*1024*1024 -warning_percent = 99.75 -critical_percent = 99.95 - -def output(code, msg): - print(msg) - sys.exit(code) - -def main(): - def handler(signum, frame): - raise IOError - signal.signal(signal.SIGALRM, handler) - signal.alarm(60) - - try: - ps = [Popen(to_args(a), stdout=PIPE, stderr=PIPE) for a in keys] - outs = [p.communicate() for p in ps] - rets = [p.wait() for p in ps] - except IOError: - for p in ps: - os.kill(p.pid, signal.SIGTERM) - output(STATE_UNKNOWN, - "Eriomem UNKNOWN - Command timeout after 60 seconds!") - - signal.alarm(0) - - if sum(rets) == 0: - usages = [int(out[0].decode().split("\n")[-2].split()[0]) for out in outs] - usage = sum(usages) - use_percent = 100 * usage / max_size - if use_percent > critical_percent: - output(STATE_CRITICAL, - "Eriomem CRITICAL - bucket usage: %s (%s%%);| size=%s;;;;" % - (sizeof_fmt(usage), use_percent, sizeof_fmt(usage))) - elif use_percent > warning_percent: - output(STATE_WARNING, - "Eriomem WARNING - bucket usage: %s (%s%%);| size=%s;;;;" % - (sizeof_fmt(usage), use_percent, sizeof_fmt(usage))) - else: - output(STATE_OK, - "Eriomem OK - bucket usage: %s (%d%%);| size=%s;;;;" % - (sizeof_fmt(usage), use_percent, sizeof_fmt(usage))) - else: - messages = "\n".join([out[0].decode() + out[1].decode() for out in outs]) - output(STATE_UNKNOWN, - "Eriomem UNKNOWN - Error in command") - -def sizeof_fmt(num): - for unit in ['','ko','Mo','Go','To','Po','Eo','Zo']: - if abs(num) < 1024.0: - return "%3.1f%s" % (num, unit) - num /= 1024.0 - return "%.1f%s%s" % (num, 'Yo') - -if __name__ == '__main__': - main() diff --git a/modules/private/monitoring/plugins/check_ftp_database b/modules/private/monitoring/plugins/check_ftp_database deleted file mode 100755 index f9cf579..0000000 --- a/modules/private/monitoring/plugins/check_ftp_database +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -OUT=$(echo "ls" | lftp -u test_ftp,test_ftp eldiron.immae.eu | grep it_works | wc -l) - -if [ "$OUT" -eq 1 ]; then - echo "ftp connection OK - access to ftp is working | ftp=1;;;;" - exit 0 -else - echo "ftp connection CRITICAL - no access to ftp | ftp=0;;;;" - exit 2 -fi diff --git a/modules/private/monitoring/plugins/check_git b/modules/private/monitoring/plugins/check_git deleted file mode 100755 index e8fbb29..0000000 --- a/modules/private/monitoring/plugins/check_git +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env bash - -SSH_KEY="$1" - -TMPDIR=$(mktemp -d) - -if [ ! -d "$TMPDIR" ]; then - echo "gitolite UNKNOWN - impossible to create temp dir" - exit 3 -fi - -trap "rm -rf $TMPDIR" EXIT - -ERRORS="" -OUTPUT="" -PERFS="" - -cd "$TMPDIR" -OUT=$(git clone -q git://git.immae.eu/perso/Immae/Projets/Ruby/Monitor.git 2>&1) -ERR=$? -if [ -n "$OUT" ]; then -OUTPUT="$OUTPUT -$OUT" -fi -if [ "$ERR" != 0 ]; then - PERFS="$PERFS git=0;;;;" - ERRORS="$ERRORS git://" -else - PERFS="$PERFS git=1;;;;" -fi -rm -rf Monitor - -OUT=$(git clone -q http://git.immae.eu/perso/Immae/Projets/Ruby/Monitor.git 2>&1) -ERR=$? -if [ -n "$OUT" ]; then -OUTPUT="$OUTPUT -$OUT" -fi -if [ "$ERR" != 0 ]; then - ERRORS="$ERRORS http://" - PERFS="$PERFS http=0;;;;" -else - PERFS="$PERFS http=1;;;;" -fi -rm -rf Monitor - -OUT=$(git clone -q https://git.immae.eu/perso/Immae/Projets/Ruby/Monitor.git 2>&1) -ERR=$? -if [ -n "$OUT" ]; then -OUTPUT="$OUTPUT -$OUT" -fi -if [ "$ERR" != 0 ]; then - ERRORS="$ERRORS https://" - PERFS="$PERFS https=0;;;;" -else - PERFS="$PERFS https=1;;;;" -fi -rm -rf Monitor - -OUT=$(GIT_SSH_COMMAND="ssh -i $SSH_KEY -o BatchMode=yes -o UserKnownHostsFile=/dev/null -o CheckHostIP=no -o StrictHostKeyChecking=no" git clone -q gitolite@git.immae.eu:perso/Immae/Projets/Ruby/Monitor 2>&1) -ERR=$? -if [ -n "$OUT" ]; then -OUTPUT="$OUTPUT -$OUT" -fi -if [ "$ERR" != 0 ]; then - ERRORS="$ERRORS ssh" - PERFS="$PERFS ssh=0;;;;" -else - PERFS="$PERFS ssh=1;;;;" -fi -rm -rf Monitor - -if [ -n "$ERRORS" ]; then - echo "gitolite CRITICAL - impossible to clone via$ERRORS | $PERFS" - exit 2 -else - echo "gitolite OK - ssh, git, http and https work | $PERFS" - exit 0 -fi diff --git a/modules/private/monitoring/plugins/check_imap_connection b/modules/private/monitoring/plugins/check_imap_connection deleted file mode 100755 index c1ab0dd..0000000 --- a/modules/private/monitoring/plugins/check_imap_connection +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env perl - -use strict; -use Getopt::Std; -$| = 1; - -my %opts; -getopts('h:u:p:H:', \%opts); - -my $STATE_OK = 0; -my $STATE_WARNING = 1; -my $STATE_CRITICAL = 2; -my $STATE_UNKNOWN = 3; - -if ($opts{'h'} || !$opts{'u'} || !$opts{'p'} || !$opts{'H'}) { - &print_help(); - exit($STATE_UNKNOWN); -} - -my $user = $opts{'u'}; -my $password = $opts{'p'}; -my $host = $opts{'H'}; - -my $cmd_result = `(echo "a login $user $password"; echo "b logout") | openssl s_client -quiet -ign_eof -connect $host -starttls imap 2>&1`; -my $expected_result = "a OK Logged in"; - -chomp($cmd_result); -if ($cmd_result !~ /$expected_result/) { - print "IMAP CRITICAL - Unable to connect via imaps | imap=0;;;;\n"; - exit($STATE_CRITICAL); -} else { - print "IMAP OK - imaps connected successfully | imap=1;;;;\n"; - exit($STATE_OK); -} - -sub print_help() { - print << "EOF"; -Check whether imap works via ssl and is able to connect its database. - -Options: --h - Print detailed help screen --u - User to log in as --p - Password to log in --H - Host to log in to - -EOF -} - diff --git a/modules/private/monitoring/plugins/check_last_file_date b/modules/private/monitoring/plugins/check_last_file_date deleted file mode 100755 index f51a258..0000000 --- a/modules/private/monitoring/plugins/check_last_file_date +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -STATE_OK=0 -STATE_WARNING=1 -STATE_CRITICAL=2 -STATE_UNKNOWN=3 - -base_path=$1 -hours=$2 - -last_date=$(find $base_path -mindepth 1 -maxdepth 1 -printf "%T@\n" 2>/dev/null | sort | tail -n 1) - -if [ -z "$last_date" ]; then - echo "UNKNOWN: Could not read folder" - exit $STATE_UNKNOWN -else - LC_ALL=C last_date=$(printf "%.*f" 0 $last_date) - LC_ALL=C age=$(( $(date "+%s") - $last_date)) - max_age=$(( $hours * 60 * 60 )) - min_date=$(date -d "$hours hours ago" "+%s") - if [ "$min_date" -lt "$last_date" ]; then - echo "OK: Last file $(date -d @$last_date) | age=${age}s;;$max_age;;" - exit $STATE_OK - else - echo "CRITICAL: Last file $(date -d @$last_date) | age=${age}s;;$max_age;;" - exit $STATE_CRITICAL - fi -fi diff --git a/modules/private/monitoring/plugins/check_mem.sh b/modules/private/monitoring/plugins/check_mem.sh deleted file mode 100755 index cc97ae2..0000000 --- a/modules/private/monitoring/plugins/check_mem.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash - -if [ "$1" = "-w" ] && [ "$2" -gt "0" ] && [ "$3" = "-c" ] && [ "$4" -gt "0" ]; then - FreeM=`free -m` - memTotal_m=`echo "$FreeM" |grep Mem |awk '{print $2}'` - memUsed_m=`echo "$FreeM" |grep Mem |awk '{print $3}'` - memFree_m=`echo "$FreeM" |grep Mem |awk '{print $4}'` - memBuffer_m=`echo "$FreeM" |grep Mem |awk '{print $6}'` - memCache_m=`echo "$FreeM" |grep Mem |awk '{print $7}'` - memUsedPrc=`echo $((($memUsed_m*100)/$memTotal_m))||cut -d. -f1` - if [ "$memUsedPrc" -ge "$4" ]; then - echo "Memory: CRITICAL Total: $memTotal_m MB - Used: $memUsed_m MB - $memUsedPrc% used!|TOTAL=$memTotal_m;;;; USED=$memUsed_m;;;; CACHE=$memCache_m;;;; BUFFER=$memBuffer_m;;;;" - exit 2 - elif [ "$memUsedPrc" -ge "$2" ]; then - echo "Memory: WARNING Total: $memTotal_m MB - Used: $memUsed_m MB - $memUsedPrc% used!|TOTAL=$memTotal_m;;;; USED=$memUsed_m;;;; CACHE=$memCache_m;;;; BUFFER=$memBuffer_m;;;;" - exit 1 - else - echo "Memory: OK Total: $memTotal_m MB - Used: $memUsed_m MB - $memUsedPrc% used|TOTAL=$memTotal_m;;;; USED=$memUsed_m;;;; CACHE=$memCache_m;;;; BUFFER=$memBuffer_m;;;;" - exit 0 - fi -else # If inputs are not as expected, print help. - sName="`echo $0|awk -F '/' '{print $NF}'`" - echo -e "\n\n\t\t### $sName Version 2.0###\n" - echo -e "# Usage:\t$sName -w <warnlevel> -c <critlevel>" - echo -e "\t\t= warnlevel and critlevel is percentage value without %\n" - echo "# EXAMPLE:\t/usr/lib64/nagios/plugins/$sName -w 80 -c 90" - echo -e "\nCopyright (C) 2012 Lukasz Gogolin (lukasz.gogolin@gmail.com), improved by Nestor 2015\n\n" - exit -fi diff --git a/modules/private/monitoring/plugins/check_mysql_replication b/modules/private/monitoring/plugins/check_mysql_replication deleted file mode 100755 index 1ee5de1..0000000 --- a/modules/private/monitoring/plugins/check_mysql_replication +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash - -STATE_OK=0 -STATE_WARNING=1 -STATE_CRITICAL=2 -STATE_UNKNOWN=3 - -socket=$1 -config_file=$2 -info=$(mysql --defaults-file=${config_file} -S $socket -e "show slave status" --vertical) -exit_code=$? - -lag=$(echo "$info" | grep "\bSeconds_Behind_Master\b" | cut -d':' -f2 | sed -e "s/\s//g") - -IO_running=$(echo "$info" | grep "\bSlave_IO_Running\b" | cut -d':' -f2 | sed -e "s/\s//g") -SQL_running=$(echo "$info" | grep "\bSlave_SQL_Running\b" | cut -d':' -f2 | sed -e "s/\s//g") - -if [[ $exit_code -ne 0 ]]; then - echo "UNKNOWN - Impossible to run mysql command" - exit $STATE_UNKNOWN -elif [[ -z "$lag" ]]; then - echo "UNKNOWN - No replication found for mysql" - exit $STATE_UNKNOWN -elif [[ "$IO_running" != "Yes" || "$SQL_running" != "Yes" ]]; then - echo "UNKNOWN - Replication is not running" - exit $STATE_UNKNOWN -else - output="Replication lag for mysql is ${lag}s" - LC_ALL=C lag=$(printf "%.*f" 0 $lag) - - if [[ $lag -lt 5 ]]; then - echo "OK - $output | time=${lag}s;5;10;;" - exit $STATE_OK - elif [[ $lag -lt 10 ]]; then - echo "WARNING - $output | time=${lag}s;5;10;;" - exit $STATE_WARNING - else - echo "CRITICAL - $output | time=${lag}s;5;10;;" - exit $STATE_CRITICAL - fi -fi diff --git a/modules/private/monitoring/plugins/check_openldap_replication b/modules/private/monitoring/plugins/check_openldap_replication deleted file mode 100755 index 7136ad5..0000000 --- a/modules/private/monitoring/plugins/check_openldap_replication +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash - -STATE_OK=0 -STATE_WARNING=1 -STATE_CRITICAL=2 -STATE_UNKNOWN=3 - -distant_host="$1" -replication_dn="$2" -replication_pw="$3" -base="$4" -config="$5" - -to_date() { - i="$1" - i=$(echo "$i" | grep contextCSN | cut -d":" -f2 | sed -e "s/\s//g") - i=$(echo "$i" | cut -d"#" -f1) - i=$(echo "$i" | cut -d"." -f1) - echo "$i" -} - -# ldap -remote_ldap=$(ldapsearch -H $distant_host -D "$replication_dn" -y "$replication_pw" -b "$base" -s base -LLL contextCSN ) -exit_code_remote=$? -remote_ldap=$(to_date "$remote_ldap") - -# slapcat -local_ldap=$(slapcat -b "$base" -f "$config" -a "(entryDN=$base)") -exit_code_local=$? -local_ldap=$(to_date "$local_ldap") - -offset=$(($remote_ldap - $local_ldap)) - -if [[ $exit_code_remote -ne 0 || $exit_code_local -ne 0 ]]; then - echo "UNKNOWN - Impossible to run ldap command" - exit $STATE_UNKNOWN -elif [[ -z "$offset" ]]; then - echo "UNKNOWN - No replication found" - exit $STATE_UNKNOWN -else - output="Replication lag for openldap is ${offset}s" - LC_ALL=C lag=$(printf "%.*f" 0 $lag) - - if [[ $offset -lt 5 ]]; then - echo "OK - $output | time=${offset}s;5;10;;" - exit $STATE_OK - elif [[ $offset -lt 10 ]]; then - echo "WARNING - $output | time=${offset}s;5;10;;" - exit $STATE_WARNING - else - echo "CRITICAL - $output | time=${offset}s;5;10;;" - exit $STATE_CRITICAL - fi -fi diff --git a/modules/private/monitoring/plugins/check_ovh_sms b/modules/private/monitoring/plugins/check_ovh_sms deleted file mode 100755 index caf279c..0000000 --- a/modules/private/monitoring/plugins/check_ovh_sms +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env python - -import sys -try: - import ovh - - [endpoint, application_key, application_secret, consumer_key, account] = sys.argv[1].split(",") - client = ovh.Client( - endpoint=endpoint, - application_key=application_key, - application_secret=application_secret, - consumer_key=consumer_key, - ) - - result = client.get('/sms/{}'.format(account))["creditsLeft"] - - if result < 20: - print("SMS OVH Critical - Not enough sms left ({})|SMS={};;;;".format(result, result)) - sys.exit(2) - else: - print("SMS OVH Ok - Enough sms left ({})|SMS={};;;;".format(result, result)) - sys.exit(0) -except Exception: - print("SMS OVH UNKNOWN - Error during script") - sys.exit(3) diff --git a/modules/private/monitoring/plugins/check_postgres_database_count b/modules/private/monitoring/plugins/check_postgres_database_count deleted file mode 100755 index 43bdd8c..0000000 --- a/modules/private/monitoring/plugins/check_postgres_database_count +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/bash - -STATE_OK=0 -STATE_WARNING=1 -STATE_CRITICAL=2 -STATE_UNKNOWN=3 - -host=$1 -port=$2 -min=$3 - -count=$(psql -h $host -p $port -A -q -c '\t' -c 'select count(datname) from pg_catalog.pg_database' postgres 2>&1) -exit_code=$? - -if [[ $exit_code -ne 0 ]]; then - echo "UNKNOWN - Impossible to run psql command: $count" - exit $STATE_UNKNOWN -elif [[ -z "$count" ]]; then - echo "UNKNOWN - No database found" - exit $STATE_UNKNOWN -else - output="Database count is $count" - LC_ALL=C count=$(printf "%.*f" 0 $count) - - if [[ $count -gt $min ]]; then - echo "OK - $output | count=${count};$min;$min;0;" - exit $STATE_OK - else - echo "CRITICAL - $output | count=${count};$min;$min;0;" - exit $STATE_CRITICAL - fi -fi diff --git a/modules/private/monitoring/plugins/check_postgres_replication b/modules/private/monitoring/plugins/check_postgres_replication deleted file mode 100755 index ff257a3..0000000 --- a/modules/private/monitoring/plugins/check_postgres_replication +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash - -STATE_OK=0 -STATE_WARNING=1 -STATE_CRITICAL=2 -STATE_UNKNOWN=3 - -user=$1 -host=$2 -port=$3 - -lag=$(psql -h $host -p $port -A -t -c "SELECT COALESCE(EXTRACT(EPOCH FROM replay_lag),0) FROM pg_stat_replication WHERE usename='$user'" 2>/dev/null) -exit_code=$? - -if [[ $exit_code -ne 0 ]]; then - echo "UNKNOWN - Impossible to run psql command" - exit $STATE_UNKNOWN -elif [[ -z "$lag" ]]; then - echo "UNKNOWN - No replication found for $user" - exit $STATE_UNKNOWN -else - output="Replication lag for $user is ${lag}s" - LC_ALL=C lag=$(printf "%.*f" 0 $lag) - - if [[ $lag -lt 5 ]]; then - echo "OK - $output | time=${lag}s;5;10;0;" - exit $STATE_OK - elif [[ $lag -lt 10 ]]; then - echo "WARNING - $output | time=${lag}s;5;10;0;" - exit $STATE_WARNING - else - echo "CRITICAL - $output | time=${lag}s;5;10;0;" - exit $STATE_CRITICAL - fi -fi diff --git a/modules/private/monitoring/plugins/check_redis_replication b/modules/private/monitoring/plugins/check_redis_replication deleted file mode 100755 index 6dbe4c4..0000000 --- a/modules/private/monitoring/plugins/check_redis_replication +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash - -STATE_OK=0 -STATE_WARNING=1 -STATE_CRITICAL=2 -STATE_UNKNOWN=3 - -socket=$1 - -info=$(redis-cli -s $socket info replication) -lag=$(echo "$info" | grep master_last_io_seconds_ago | cut -d":" -f2 | sed -e "s/\s//g") -slave_offset=$(echo "$info" | grep slave_repl_offset | cut -d":" -f2 | sed -e "s/\s//g") -master_offset=$(echo "$info" | grep master_repl_offset | cut -d":" -f2 | sed -e "s/\s//g") -offset=$(($master_offset - $slave_offset)) - -exit_code=$? - -if [[ $exit_code -ne 0 ]]; then - echo "UNKNOWN - Impossible to run redis command" - exit $STATE_UNKNOWN -elif [[ -z "$lag" ]]; then - echo "UNKNOWN - No replication found" - exit $STATE_UNKNOWN -else - output="Replication lag for redis is ${lag}s and offset is ${offset}" - LC_ALL=C lag=$(printf "%.*f" 0 $lag) - - if [[ $lag -lt 5 && $offset -lt 5 ]]; then - echo "OK - $output | time=${lag}s;5;10;0; offset=${offset};5;10;0;" - exit $STATE_OK - elif [[ $lag -lt 10 && $offset -lt 10 ]]; then - echo "WARNING - $output | time=${lag}s;5;10;0; offset=${offset};5;10;0;" - exit $STATE_WARNING - else - echo "CRITICAL - $output | time=${lag}s;5;10;0; offset=${offset};5;10;0;" - exit $STATE_CRITICAL - fi -fi diff --git a/modules/private/monitoring/plugins/check_zfs_snapshot b/modules/private/monitoring/plugins/check_zfs_snapshot deleted file mode 100755 index 56f8c4f..0000000 --- a/modules/private/monitoring/plugins/check_zfs_snapshot +++ /dev/null @@ -1,325 +0,0 @@ -#! /bin/sh - -OS=$(uname) - -# MIT License -# -# Copyright (c) 2016 Josef Friedrich <josef@friedrich.rocks> -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -######################################################################## -# Date functions -######################################################################## - -# This date function must be placed on the top of this file because -# they are used in some global variables. - -# to_year ### - -## -# Get the four digit year integer from now. -# -# Return: -# The current 4 digit year. -## -_now_to_year() { - date +%Y -} - -## -# Convert a date in the format YYYY-MM-DD to a four digit year integer. -# -# Parameters: -# a date in the format YYYY-MM-DD -# -# Return: -# four digit year integer -## -_date_to_year() { - local OPTIONS - if [ "$OS" = 'Linux' ]; then - OPTIONS="--date $1" - # FreeBSD, Darwin - else - OPTIONS="-j -f %Y-%m-%d $1" - fi - date $OPTIONS +%Y -} - -# to_datetime ### - -## -# Convert a UNIX timestamp to a datetime string. -# -# Parameters: -# UNIX timestamp -# -# Return: -# %Y-%m-%d.%H:%M:%S -## -_timestamp_to_datetime() { - local OPTIONS - if [ "$OS" = 'Linux' ]; then - OPTIONS="--date @$1" - # FreeBSD, Darwin - else - OPTIONS="-j -f %s $1" - fi - date $OPTIONS +%Y-%m-%d.%H:%M:%S -} - -# to_timestamp ### - -## -# Get the current UNIX timestamp. -# -# Return: -# %current UNIX timestamp -## -_now_to_timestamp() { - date +%s -} - -PROJECT_PAGES='https://github.com/Josef-Friedrich/check_zfs_snapshot -https://exchange.icinga.com/joseffriedrich/check_zfs_snapshot -https://exchange.nagios.org/directory/Plugins/System-Metrics/File-System/check_zfs_snapshot/details' - -VERSION=1.2 -FIRST_RELEASE=2016-09-08 -SHORT_DESCRIPTION="Monitoring plugin to check how long ago the last \ -snapshot of a ZFS dataset was created." -USAGE="check_zfs_snapshot v$VERSION -Copyright (c) $(_date_to_year $FIRST_RELEASE)-$(_now_to_year) \ -Josef Friedrich <josef@friedrich.rocks> - -$SHORT_DESCRIPTION - - -Usage: check_zfs_snapshot <options> - -Options: - -c, --critical=OPT_CRITICAL - Interval in seconds for critical state. - -d, --dataset=OPT_DATASET - The ZFS dataset to check. - -h, --help - Show this help. - -s, --short-description - Show a short description of the command. - -v, --version - Show the version number. - -w, --warning=OPT_WARNING - Interval in seconds for warning state. Must be lower than -c - -Performance data: - - last_ago - Time interval in seconds for last snapshot. - - warning - Interval in seconds. - - critical - Interval in seconds. - - snapshot_count - How many snapshot exists in the given dataset and all child - datasets exists. -" - -# Exit codes -STATE_OK=0 -STATE_WARNING=1 -STATE_CRITICAL=2 -STATE_UNKNOWN=3 - -_get_last_snapshot() { - zfs get creation -Hpr -t snapshot "$1" | \ - awk 'BEGIN {max = 0} {if ($3>max) max=$3} END {print max}' -} - -_getopts() { - while getopts ':c:d:hsvw:-:' OPT ; do - case $OPT in - - c) - OPT_CRITICAL=$OPTARG - ;; - - d) - OPT_DATASET="$OPTARG" - ;; - - h) - echo "$USAGE" - exit 0 - ;; - - s) - echo "$SHORT_DESCRIPTION" - exit 0 - ;; - - v) - echo "$VERSION" - exit 0 - ;; - - w) - OPT_WARNING=$OPTARG - ;; - - \?) - echo "Invalid option “-$OPTARG”!" >&2 - exit 2 - ;; - - :) - echo "Option “-$OPTARG” requires an argument!" >&2 - exit 3 - ;; - - -) - LONG_OPTARG="${OPTARG#*=}" - - case $OPTARG in - - critical=?*) - OPT_CRITICAL=$LONG_OPTARG - ;; - - dataset=?*) - OPT_DATASET="$LONG_OPTARG" - ;; - - help) - echo "$USAGE" - exit 0 - ;; - - short-description) - echo "$SHORT_DESCRIPTION" - exit 0 - ;; - - version) - echo "$VERSION" - exit 0 - ;; - - warning=?*) - OPT_WARNING=$LONG_OPTARG - ;; - - critical*|dataset*|warning*) - echo "Option “--$OPTARG” requires an argument!" >&2 - exit 3 - ;; - - help*|short-description*|version*) - echo "No argument allowed for the option “--$OPTARG”!" >&2 - exit 4 - ;; - - '') # "--" terminates argument processing - break - ;; - - *) - echo "Invalid option “--$OPTARG”!" >&2 - exit 2 - ;; - - esac - ;; - - esac - done -} - -_snapshot_count() { - # FreeBSD wc adds some whitespaces before the number! - # cat $HOME/debug | wc -l - # 7 - local COUNT - COUNT="$(zfs list -t snapshot | grep "$1" | wc -l)" - echo $COUNT -} - -_performance_data() { - echo "| \ -last_ago=${DIFF}s;$OPT_WARNING;$OPT_CRITICAL;0 \ -count=$(_snapshot_count "$OPT_DATASET");;;0\ -" -} - -## This SEPARATOR is required for test purposes. Please don’t remove! ## - -_getopts $@ - -if [ -z "$OPT_WARNING" ]; then - # 1 day - OPT_WARNING=86400 -fi - -if [ -z "$OPT_CRITICAL" ]; then - # 3 day - OPT_CRITICAL=259200 -fi - -if [ -z "$OPT_DATASET" ]; then - echo "Dataset has to be set! Use option -d <dataset>" >&2 - echo "$USAGE" >&2 - exit $STATE_UNKNOWN -fi - -if ! zfs list "$OPT_DATASET" > /dev/null 2>&1; then - echo "'$OPT_DATASET' is no ZFS dataset!" >&2 - echo "$USAGE" >&2 - exit $STATE_UNKNOWN -fi - -NOW=$(_now_to_timestamp) - -CREATION_DATE=$(_get_last_snapshot "$OPT_DATASET") - -DIFF=$((NOW - CREATION_DATE)) - -if [ "$OPT_WARNING" -gt "$OPT_CRITICAL" ]; then - echo '-w OPT_WARNING must be smaller than -c OPT_CRITICAL' - _usage >&2 - exit $STATE_UNKNOWN -fi - -RETURN=STATE_UNKNOWN - -if [ "$DIFF" -gt "$OPT_CRITICAL" ]; then - RETURN=$STATE_CRITICAL - MESSAGE="CRITICAL:" -elif [ "$DIFF" -gt "$OPT_WARNING" ]; then - RETURN=$STATE_WARNING - MESSAGE="WARNING:" -else - RETURN=$STATE_OK - MESSAGE="OK:" -fi - -DATE="$(_timestamp_to_datetime "$CREATION_DATE")" - -echo "$MESSAGE Last snapshot for dataset '$OPT_DATASET' was created on $DATE $(_performance_data)" - -exit $RETURN diff --git a/modules/private/monitoring/plugins/notify_by_email b/modules/private/monitoring/plugins/notify_by_email deleted file mode 100755 index 959db26..0000000 --- a/modules/private/monitoring/plugins/notify_by_email +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash - -# $1 = service/host - -# $2 = type (PROBLEM RECOVERY ACKNOWLEDGEMENT FLAPPINGSTART FLAPPINGSTOP FLAPPINGDISABLED DOWNTIMESTART DOWNTIMESTOP DOWNTIMECANCELLED) -# http://www.naemon.org/documentation/usersguide/macrolist.html#notificationtype - -# $3 = host alias - -# $4 = date (YYYY-MM-DDTHH:MM:SS) - -# $5 = E-mail - -NOTIFICATION_TYPE="$2" -HOST_ALIAS="$3" -DATE="$4" -CONTACT="$5" - -message="" - -if [ "$1" = "host" ]; then - message=$(printf "%b" "***** Naemon *****\n\nNotification Type: $NOTIFICATION_TYPE\n\nHost: $HOST_ALIAS\nState: $HOSTSTATE\nInfo: $HOSTOUTPUT\n\nDate/Time: $DATE\n") - subject="** $NOTIFICATION_TYPE Host Alert: $HOST_ALIAS is $HOSTSTATE **" -else - message=$(printf "%b" "***** Naemon *****\n\nNotification Type: $NOTIFICATION_TYPE\n\nService: $SERVICEDESC\nHost: $HOST_ALIAS\nState: $SERVICESTATE\n\nDate/Time: $DATE\n\nAdditional Info:\n\n$SERVICEOUTPUT\n") - subject="** $NOTIFICATION_TYPE Service Alert: $HOST_ALIAS/$SERVICEDESC is $SERVICESTATE **" -fi - -echo "$message" | MAILRC=/dev/null mail -r "$ADMINEMAIL" -n -s "$subject" "$CONTACT" diff --git a/modules/private/monitoring/plugins/notify_by_slack b/modules/private/monitoring/plugins/notify_by_slack deleted file mode 100755 index 1b16a0d..0000000 --- a/modules/private/monitoring/plugins/notify_by_slack +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env bash - -SLACK_CHANNEL="$1" -SLACK_USERNAME="Naemon" -SLACK_URL="$2" -SLACK_USERICON="https://assets.immae.eu/monitoring.png" - -if [ "$SERVICESTATE" = "CRITICAL" ]; then - ICON=":exclamation:" - COLOR="#DA0505" -elif [ "$SERVICESTATE" = "WARNING" ]; then - ICON=":warning:" - COLOR="#F1E903" -elif [ "$SERVICESTATE" = "OK" ]; then - ICON=":white_check_mark:" - COLOR="#36a64f" -elif [ "$SERVICESTATE" = "UNKNOWN" ]; then - ICON=":question:" - COLOR="#000000" -else - ICON=":white_medium_square:" - COLOR="#ffffff" -fi - -payload=$(echo "{}" | jq -r \ - --arg "icon_url" "$SLACK_USERICON" \ - --arg "channel" "$SLACK_CHANNEL" \ - --arg "username" "$SLACK_USERNAME" \ - --arg "text" "${ICON} ${SERVICEDESC} on ${HOST} is ${SERVICESTATE}" \ - --arg "color" "$COLOR" \ - --arg "host" "$HOST" \ - --arg "desc" "$SERVICEDESC" \ - --arg "state" "$SERVICESTATE" \ - --arg "output" "$SERVICEOUTPUT" \ - '.icon_url = $icon_url | - .channel = $channel | - .username = $username | - .text = $text | - .attachments = [{fallback:"", color:$color,fields: [{},{},{},{}]}] | - .attachments[0].fields[0] = {title:"Host",value:$host,short:true} | - .attachments[0].fields[1] = {title:"Service description",value:$desc,short:true} | - .attachments[0].fields[2] = {title:"Status",value:$state,short:true} | - .attachments[0].fields[3] = {title:"Message",value:$output,short:false} - ') - -curl -X POST --data "payload=$payload" $SLACK_URL diff --git a/modules/private/monitoring/plugins/notify_eban_url b/modules/private/monitoring/plugins/notify_eban_url deleted file mode 100755 index 107b5de..0000000 --- a/modules/private/monitoring/plugins/notify_eban_url +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -if [ "$SERVICESTATE" = "CRITICAL" -o "$SERVICESTATE" = "UNKNOWN" -o "$HOSTSTATE" = "DOWN" -o "$HOSTSTATE" = "UNREACHABLE" ]; then - MESSAGE="$STATUS_NAME seems down!" - curl -X GET -G --data-urlencode "user=$USER" --data-urlencode "pass=$PASSWORD" --data-urlencode "msg=$MESSAGE" https://smsapi.free-mobile.fr/sendmsg -fi diff --git a/modules/private/monitoring/plugins/send_nrdp.sh b/modules/private/monitoring/plugins/send_nrdp.sh deleted file mode 100755 index c83c8cb..0000000 --- a/modules/private/monitoring/plugins/send_nrdp.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/bash - -TEMPLATE='{ - "cmd": "submitcheck", - "token": $token, - "checkresult": [{ - "hostname": $hostname, - "state": $state, - "output": $output, - "type": $type, - "servicename": $servicename - }] -}' - -while getopts "u:t:H:s:S:o:" option -do - case $option in - u) url=$OPTARG ;; - t) token=$OPTARG ;; - H) hostname=$OPTARG ;; - s) servicename=$OPTARG ;; - S) state=$OPTARG ;; - o) output=$OPTARG ;; - esac -done - -if [ -n "$servicename" ]; then - checktype="service" -else - checktype="host" -fi - -payload=$(jq -n \ - --arg type "$checktype" \ - --arg hostname "$hostname" \ - --arg servicename "$servicename" \ - --arg output "$output" \ - --arg token "$token" \ - --arg state "$state" \ - "$TEMPLATE") - -rslt=$(curl -f --silent --insecure -d "$payload" -H "Content-Type: application/json" "$url") -ret=$? - -if [ $ret != 0 ];then - echo "ERROR: could not connect to NRDP server at $url" - exit 1 -fi - -status=$(echo "$rslt" | jq -r .status) -message=$(echo "$rslt" | jq -r .message) - -if [ "$status" != "ok" ];then - echo "ERROR: The NRDP Server said $message" - exit 2 -fi -echo "Sent 1 checks to $url" diff --git a/modules/private/monitoring/send_mails b/modules/private/monitoring/send_mails deleted file mode 100755 index 105c505..0000000 --- a/modules/private/monitoring/send_mails +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash - -CHECK_DIR=$1 -shift -RETURN_PATH=$1 -shift - -for mail in "$@"; do - echo "Test Mail" | MAILRC=/dev/null mail -n -r "$RETURN_PATH" -s "TestMailImmae " "$mail" -done - -if [ -d "$CHECK_DIR" ]; then - cd $CHECK_DIR - stat -c '%n;%y' * -fi diff --git a/modules/private/monitoring/status.nix b/modules/private/monitoring/status.nix deleted file mode 100644 index ab0290c..0000000 --- a/modules/private/monitoring/status.nix +++ /dev/null @@ -1,93 +0,0 @@ -{ config, pkgs, lib, name, ... }: -{ - options = { - myServices.status = { - enable = lib.mkOption { - type = lib.types.bool; - default = false; - description = '' - Whether to enable status app. - ''; - }; - }; - }; - config = lib.mkIf config.myServices.status.enable { - secrets.keys."naemon-status/environment" = { - user = "naemon"; - group = "naemon"; - permissions = "0400"; - text = '' - TOKENS=${builtins.concatStringsSep " " config.myEnv.monitoring.nrdp_tokens} - ''; - }; - services.nginx = { - enable = true; - recommendedOptimisation = true; - recommendedGzipSettings = true; - recommendedProxySettings = true; - upstreams."netdata".servers = { "127.0.0.1:19999" = {}; }; - upstreams."netdata".extraConfig = '' - keepalive 64; - ''; - virtualHosts."status.eban.bzh" = { - acmeRoot = config.myServices.certificates.webroot; - useACMEHost = name; - forceSSL = true; - locations."/".proxyPass = "http://unix:/run/naemon-status/socket.sock:/"; - }; - virtualHosts."status.immae.eu" = { - acmeRoot = config.myServices.certificates.webroot; - useACMEHost = name; - forceSSL = true; - locations."/".proxyPass = "http://unix:/run/naemon-status/socket.sock:/"; - - locations."= /netdata".return = "301 /netdata/"; - locations."~ /netdata/(?<ndpath>.*)".extraConfig = '' - proxy_redirect off; - proxy_set_header Host $host; - - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Server $host; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_http_version 1.1; - proxy_pass_request_headers on; - proxy_set_header Connection "keep-alive"; - proxy_store off; - proxy_pass http://netdata/$ndpath$is_args$args; - - gzip on; - gzip_proxied any; - gzip_types *; - ''; - }; - }; - security.acme.certs."${name}" = { - extraDomains."status.immae.eu" = null; - extraDomains."status.eban.bzh" = null; - user = config.services.nginx.user; - group = config.services.nginx.group; - }; - - myServices.certificates.enable = true; - networking.firewall.allowedTCPPorts = [ 80 443 ]; - systemd.services.naemon-status = { - description = "Naemon status"; - after = [ "network.target" ]; - wantedBy = [ "multi-user.target" ]; - - serviceConfig = { - EnvironmentFile = config.secrets.fullPaths."naemon-status/environment"; - Type = "simple"; - WorkingDirectory = "${./status}"; - ExecStart = let - python = pkgs.python3.withPackages (p: [ p.gunicorn p.flask p.flask_login ]); - in - "${python}/bin/gunicorn -w4 --bind unix:/run/naemon-status/socket.sock app:app"; - User = "naemon"; - RuntimeDirectory = "naemon-status"; - StandardOutput = "journal"; - StandardError = "inherit"; - }; - }; - }; -} diff --git a/modules/private/monitoring/status/app.py b/modules/private/monitoring/status/app.py deleted file mode 100755 index ff92891..0000000 --- a/modules/private/monitoring/status/app.py +++ /dev/null @@ -1,414 +0,0 @@ -from flask import Flask, request, render_template_string, jsonify, make_response -from flask_login import LoginManager, UserMixin, login_required -import socket -import json -import time -import os - -login_manager = LoginManager() -app = Flask(__name__) -login_manager.init_app(app) - -STATUS = [ - "ok", - "warning", - "error", - "unknown" - ] - -HOST_STATUS = [ - "up", - "down", - "unreachable", - ] - -#### Push -AUTHORIZED_KEYS = os.environ.get("TOKENS", "").split() -COMMAND_FILE = "/var/run/naemon/naemon.cmd" - -ERROR_NO_REQUEST_HANDLER="NO REQUEST HANDLER" -ERROR_NO_TOKEN_SUPPLIED="NO TOKEN" -ERROR_BAD_TOKEN_SUPPLIED="BAD TOKEN" - -ERROR_BAD_COMMAND_FILE="BAD COMMAND FILE" -ERROR_COMMAND_FILE_OPEN_WRITE="COMMAND FILE UNWRITEABLE" -ERROR_COMMAND_FILE_OPEN="CANNOT OPEN COMMAND FILE" -ERROR_BAD_WRITE="WRITE ERROR" - -ERROR_BAD_DATA="BAD DATA" -ERROR_BAD_JSON="BAD JSON" - -ERROR_NO_CORRECT_STATUS="NO STATUS WAS CORRECT" -#### /Push - -def get_lq(request): - # https://mathias-kettner.de/checkmk_livestatus.html - socket_path="/var/run/naemon/live" - s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) - s.connect(socket_path) - s.send(request.encode()) - s.shutdown(socket.SHUT_WR) - chunks = [] - while len(chunks) == 0 or len(chunks[-1]) > 0: - chunks.append(s.recv(4096)) - s.close() - return b"".join(chunks).decode() - -class Host: - def __init__(self, name, alias, status, webname, vhost): - self.name = name - self.alias = alias - self.webname = webname or alias - self.vhost = vhost - self.status = status - self.services = [] - - @classmethod - def parse_hosts(cls, payload, vhost): - parsed = filter(lambda x: x.vhost == vhost, [cls.parse(p) for p in json.loads(payload)]) - return {p.name: p for p in parsed} - - @classmethod - def parse(cls, payload): - return cls(payload[0], payload[1], HOST_STATUS[payload[2]], payload[3].get("WEBSTATUS_NAME"), payload[3].get("WEBSTATUS_VHOST")) - - def __repr__(self): - return "Host {}: {} ({})".format(self.name, self.alias, self.webname) - - @classmethod - def query(cls, vhost): - answer = get_lq("""GET hosts -Filter: groups >= webstatus-hosts -Columns: name alias state custom_variables -OutputFormat: json -""") - return cls.parse_hosts(answer, vhost) - - def fill_services(self, services): - self.services = [service for service in services if service.host == self.name] - -class ServiceGroup: - def __init__(self, name, alias): - self.name = name - self.alias = alias - self.services = [] - - @classmethod - def parse_groups(cls, payload): - parsed = [cls.parse(p) for p in json.loads(payload)] - return {p.name: p for p in parsed} - - @classmethod - def parse(cls, payload): - return cls(payload[0], payload[1]) - - @classmethod - def query(cls): - answer = get_lq("""GET servicegroups -Filter: name ~ ^webstatus- -Columns: name alias custom_variables -OutputFormat: json -""") - return cls.parse_groups(answer) - - def fill_services(self, services, hosts): - self.services = [service for service in services if any([group == self.name for group in service.groups]) and service.host in hosts] - - def __repr__(self): - return "ServiceGroup {}: {}".format(self.name, self.alias) - -class Service: - def __init__(self, name, host, groups, status, webname, url, description, infos): - self.name = name - self.host = host - self.groups = groups - self.status = status - self.webname = webname - self.url = url - self.description = description - self.infos = infos - - @classmethod - def parse_services(cls, payload): - parsed = json.loads(payload) - return [cls.parse(p) for p in parsed if cls.valid(p[2])] - - @staticmethod - def valid(groups): - return any([b.startswith("webstatus-") for b in groups]) - - @classmethod - def parse(cls, payload): - return cls(payload[0], - payload[1], - payload[2], - STATUS[payload[3]], - payload[4].get("WEBSTATUS_NAME"), - payload[4].get("WEBSTATUS_URL"), - payload[5], - payload[6]) - - @classmethod - def query(cls): - answer = get_lq("""GET services -Columns: display_name host_name groups state custom_variables description plugin_output -OutputFormat: json -""") - return cls.parse_services(answer) - - def __repr__(self): - return "Service {}: {}".format(self.name, self.webname) - -def get_infos(vhost): - hosts = Host.query(vhost) - servicegroups = ServiceGroup.query() - services = Service.query() - - for host in hosts: - hosts[host].fill_services(services) - for group in servicegroups: - servicegroups[group].fill_services(services, hosts) - return (hosts, servicegroups, services) - -TEMPLATE='''<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> -<html lang="en" xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <title>Status - - - - -

Hosts

- {%- for host in hosts.values() %} -

- {{ host.status }} - {{ host.webname }} -

- {%- for service in servicegroups["webstatus-resources"].services if service.host == host.name -%} - {%- if loop.first %} -
    - {% endif %} - -
  • - {{ service.status }} - {{ service.description }} - {{ service.infos }} -
  • - - {%- if loop.last %} -
- {% endif %} - {% endfor %} - {%- endfor %} - - {%- for group in servicegroups.values() if group.services and group.name != "webstatus-resources" %} - {%- if loop.first %} -

Services

-
- {%- endif %} -
-

{{ group.alias }}

- {%- for service in group.services if service.host in hosts -%} - {%- if loop.first %} -
    - {% endif %} - -
  • - {{ service.status }} - - {% if service.url and service.url.startswith("https://") %} - {{ service.webname or service.description }} - {% else %} - {{ service.webname or service.description }} - {% endif %} - - {{ hosts[service.host].webname }} -
  • - - {%- if loop.last %} -
- {% endif %} - {%- endfor -%} -
- {%- if loop.last %} -
- {% endif %} - {%- endfor %} - - -''' - -@login_manager.request_loader -def load_user_from_request(request): - api_key = request.headers.get('Token') - if api_key in AUTHORIZED_KEYS: - return UserMixin() - content = request.get_json(force=True, silent=True) - if content is not None and content.get("token") in AUTHORIZED_KEYS: - return UserMixin() - -@app.route("/live", methods=["POST"]) -@login_required -def live(): - query = request.get_data() - result = get_lq(query.decode() + "\n") - resp = make_response(result) - resp.content_type = "text/plain" - return resp - -@app.route("/", methods=["GET"]) -def get(): - (hosts, servicegroups, services) = get_infos(request.host) - resp = make_response(render_template_string(TEMPLATE, hosts=hosts, servicegroups=servicegroups)) - resp.content_type = "text/html" - return resp - -@app.route("/", methods=["POST"]) -@login_required -def push(): - content = request.get_json(force=True, silent=True) - if content is None: - return ERROR_BAD_JSON - if content.get("cmd") != "submitcheck": - return render_error(ERROR_NO_REQUEST_HANDLER) - if "checkresult" not in content or not isinstance(content["checkresult"], list): - return render_error(ERROR_BAD_DATA) - - checks = 0 - errors = 0 - for check in map(lambda x: CheckResult.from_json(x), content["checkresult"]): - if check is None: - errors += 1 - continue - try: - write_check_output(check) - except Exception as e: - return render_error(str(e)) - checks += 1 - return render_response(checks, errors) - -def write_check_output(check): - if check.type== "service": - command = "[{time}] PROCESS_SERVICE_CHECK_RESULT;{hostname};{servicename};{state};{output}"; - else: - command = "[{time}] PROCESS_HOST_CHECK_RESULT;{hostname};{state};{output}"; - formatted = command.format( - time=int(time.time()), - hostname=check.hostname, - state=check.state, - output=check.output, - servicename=check.servicename, - ) - - if not os.path.exists(COMMAND_FILE): - raise Exception(ERROR_BAD_COMMAND_FILE) - if not os.access(COMMAND_FILE, os.W_OK): - raise Exception(ERROR_COMMAND_FILE_OPEN_WRITE) - if not os.access(COMMAND_FILE, os.W_OK): - raise Exception(ERROR_COMMAND_FILE_OPEN_WRITE) - try: - with open(COMMAND_FILE, "w") as c: - c.write(formatted + "\n") - except Exception as e: - raise Exception(ERROR_BAD_WRITE) - -def render_error(error): - return jsonify({ - "status": "error", - "message": error, - }) - -def render_response(checks, errors): - if checks > 0: - return jsonify({ - "status": "ok", - "result": { - "checks": checks, - "errors": errors, - } - }) - else: - return jsonify({ - "status": "error", - "message": ERROR_NO_CORRECT_STATUS, - }) - -class CheckResult: - def __init__(self, hostname, state, output, servicename, checktype): - self.hostname = hostname - self.state = state - self.output = output - self.servicename = servicename - self.type = checktype - - @classmethod - def from_json(klass, j): - if not isinstance(j, dict): - return None - for key in ["hostname", "state", "output"]: - if key not in j or not isinstance(j[key], str): - return None - for key in ["servicename", "type"]: - if key in j and not isinstance(j[key], str): - return None - return klass( - j["hostname"], - j["state"], - j["output"], - j.get("servicename", ""), - j.get("type", "host")) - diff --git a/modules/private/monitoring/status_engine.nix b/modules/private/monitoring/status_engine.nix deleted file mode 100644 index 39a753a..0000000 --- a/modules/private/monitoring/status_engine.nix +++ /dev/null @@ -1,115 +0,0 @@ -{ config, pkgs, lib, name, ... }: -let - package = pkgs.status_engine.worker.override { config_file = config.secrets.fullPaths."status_engine"; }; - env = config.myEnv.tools.status_engine; -in -{ - config = lib.mkIf config.myServices.status.enable { - systemd.services.gearmand = { - description = "Gearman daemon"; - after = [ "network.target" ]; - wantedBy = [ "multi-user.target" ]; - serviceConfig = { - DynamicUser = true; - User = "gearmand"; - Type = "simple"; - ExecStart = "${pkgs.gearmand}/bin/gearmand --syslog -L 127.0.0.1 -q libsqlite3 --libsqlite3-db /var/lib/gearmand/gearmand.db --store-queue-on-shutdown -l stderr -P /run/gearmand/gearmand.pid"; - RuntimeDirectory = "gearmand"; - StateDirectory = "gearmand"; - }; - }; - - secrets.keys."status_engine" = { - permissions = "0400"; - user = "naemon"; - group = "naemon"; - text = '' - node_name: ${name} - use_gearman: 1 - gearman: - address: 127.0.0.1 - port: 4730 - timeout: 1000 - use_rabbitmq: 0 - use_redis: 1 - redis: - address: 127.0.0.1 - port: 6379 - db: 0 - store_live_data_in_archive_backend: 1 - use_mysql: 1 - mysql: - host: ${env.mysql.remoteHost} - port: ${env.mysql.port} - username: ${env.mysql.user} - password: ${env.mysql.password} - database: ${env.mysql.database} - use_crate: 0 - number_of_bulk_records: 100 - max_bulk_delay: 5 - number_servicestatus_worker: 1 - number_hoststatus_worker: 1 - number_logentry_worker: 1 - number_statechange_worker: 1 - number_hostcheck_worker: 1 - number_servicecheck_worker: 1 - number_misc_worker: 1 - - process_perfdata: 1 - number_perfdata_worker: 1 - perfdata_backend: - - mysql - - check_for_commands: 1 - command_check_interval: 15 - external_command_file: /run/naemon/naemon.cmd - query_handler: /run/naemon/naemon.qh - submit_method: qh - - syslog_enabled: 1 - syslog_tag: statusengine-worker - - # Archive age - age_hostchecks: 5 - age_host_acknowledgements: 60 - age_host_notifications: 60 - age_host_statehistory: 365 - age_host_downtimes: 60 - age_servicechecks: 5 - age_service_acknowledgements: 60 - age_service_notifications: 60 - age_service_statehistory: 365 - age_service_downtimes: 60 - age_logentries: 5 - age_tasks: 1 - age_perfdata: 90 - - disable_http_proxy: 1 - ''; - }; - - services.redis = rec { - enable = true; - bind = "127.0.0.1"; - }; - - services.cron = { - mailto = "cron@immae.eu"; - systemCronJobs = [ - "0 0 * * * naemon cd ${package} && ./bin/Console.php cleanup" - ]; - }; - - systemd.services.status_engine_worker = { - description = "Status engine worker"; - after = [ "network.target" ]; - wantedBy = [ "multi-user.target" ]; - serviceConfig = { - Type = "simple"; - Restart = "on-failure"; - User = "naemon"; - ExecStart = "${package}/bin/StatusengineWorker.php"; - }; - }; - }; -} diff --git a/modules/private/monitoring/to_objects.nix b/modules/private/monitoring/to_objects.nix deleted file mode 100644 index 12721d2..0000000 --- a/modules/private/monitoring/to_objects.nix +++ /dev/null @@ -1,77 +0,0 @@ -{ lib }: - with lib.attrsets; - with lib.strings; - with lib.lists; - with lib.trivial; -let - pad = width: str: let - padWidth = width - stringLength str; - padding = concatStrings (genList (const " ") padWidth); - in str + optionalString (padWidth > 0) padding; - toStr = k: v: - if k == "check_command" && builtins.isList v - then builtins.concatStringsSep "!" v - else v; - - toService = service: '' - define service { - ${builtins.concatStringsSep "\n" (mapAttrsToList (k: v: - " ${pad 30 k} ${toStr k v}" - ) (filterAttrs (k: v: ! builtins.elem k ["passiveInfo" "filter"]) service))} - } - ''; - toServices = services: builtins.concatStringsSep "\n" (map toService services); - - toCommand = k: v: '' - define command { - ${pad 30 "command_name"} ${k} - ${pad 30 "command_line"} ${v} - } - ''; - toCommands = a: builtins.concatStringsSep "\n" (mapAttrsToList toCommand a); - - toOther = keyname: k: v: '' - define ${keyname} { - ${pad 30 "${keyname}_name"} ${k} - ${builtins.concatStringsSep "\n" (mapAttrsToList (kk: vv: - " ${pad 30 kk} ${vv}" - ) v)} - } - ''; - toOtherNoName = keyname: v: '' - define ${keyname} { - ${builtins.concatStringsSep "\n" (mapAttrsToList (kk: vv: - " ${pad 30 kk} ${vv}" - ) v)} - } - ''; - toOthers = keyname: a: builtins.concatStringsSep "\n" (mapAttrsToList (toOther keyname) a); - toOthersArray = keyname: a: builtins.concatStringsSep "\n" (map (toOtherNoName keyname) a); - - toTemplate = keyname: k: v: '' - define ${keyname} { - ${pad 30 "name"} ${k} - ${pad 30 "register"} 0 - ${builtins.concatStringsSep "\n" (mapAttrsToList (kk: vv: - " ${pad 30 kk} ${vv}" - ) v)} - } - ''; - toTemplates' = keyname: a: builtins.concatStringsSep "\n" (mapAttrsToList (toTemplate keyname) a); - toTemplates = v: builtins.concatStringsSep "\n" (mapAttrsToList toTemplates' v); - - toObjects' = keyname: v: - if keyname == "service" - then toServices v - else if keyname == "command" - then toCommands v - else if keyname == "templates" - then toTemplates v - else if builtins.elem keyname ["hostgroup" "host" "contactgroup" "contact" "timeperiod" "servicegroup"] - then toOthers keyname v - else if builtins.elem keyname ["servicedependency"] - then toOthersArray keyname v - else ""; - toObjects = v: builtins.concatStringsSep "\n" (mapAttrsToList toObjects' v); -in - toObjects diff --git a/modules/private/mpd.nix b/modules/private/mpd.nix deleted file mode 100644 index 640b001..0000000 --- a/modules/private/mpd.nix +++ /dev/null @@ -1,60 +0,0 @@ -{ lib, pkgs, config, ... }: -{ - options.myServices.mpd.enable = lib.mkEnableOption "enable MPD"; - config = lib.mkIf config.myServices.mpd.enable { - secrets.keys = { - "mpd" = { - permissions = "0400"; - text = config.myEnv.mpd.password; - }; - "mpd-config" = { - permissions = "0400"; - user = "mpd"; - group = "mpd"; - text = '' - password "${config.myEnv.mpd.password}@read,add,control,admin" - ''; - }; - }; - networking.firewall.allowedTCPPorts = [ 6600 ]; - users.users.mpd.extraGroups = [ "wwwrun" "keys" ]; - systemd.services.mpd.serviceConfig.RuntimeDirectory = "mpd"; - services.filesWatcher.mpd = { - restart = true; - paths = [ config.secrets.fullPaths."mpd-config" ]; - }; - - services.mpd = { - enable = true; - network.listenAddress = "any"; - musicDirectory = config.myEnv.mpd.folder; - extraConfig = '' - include "${config.secrets.fullPaths."mpd-config"}" - audio_output { - type "null" - name "No Output" - mixer_type "none" - } - audio_output { - type "httpd" - name "OGG" - encoder "vorbis" - bind_to_address "/run/mpd/ogg.sock" - quality "5.0" - format "44100:16:1" - } - audio_output { - type "httpd" - name "MP3" - encoder "lame" - bind_to_address "/run/mpd/mp3.sock" - quality "5.0" - format "44100:16:1" - } - - - ''; - }; - }; -} - diff --git a/modules/private/pub/default.nix b/modules/private/pub/default.nix deleted file mode 100644 index c419530..0000000 --- a/modules/private/pub/default.nix +++ /dev/null @@ -1,56 +0,0 @@ -{ lib, pkgs, config, ... }: -{ - options = { - myServices.pub.enable = lib.mkOption { - type = lib.types.bool; - default = false; - description = '' - Whether to enable pub user. - ''; - }; - }; - - config = lib.mkIf config.myServices.pub.enable { - myServices.ssh.modules = [{ - snippet = builtins.readFile ./ldap_pub.sh; - dependencies = [ pkgs.coreutils ]; - }]; - users.users.pub = let - restrict = pkgs.runCommand "restrict" { - file = ./restrict; - buildInputs = [ pkgs.makeWrapper ]; - } '' - mkdir -p $out/bin - cp $file $out/bin/restrict - chmod a+x $out/bin/restrict - patchShebangs $out/bin/restrict - wrapProgram $out/bin/restrict \ - --prefix PATH : ${lib.makeBinPath [ pkgs.bubblewrap pkgs.rrsync ]} \ - --set TMUX_RESTRICT ${./tmux.restrict.conf} - ''; - purple-hangouts = pkgs.purple-hangouts.overrideAttrs(old: { - installPhase = '' - install -Dm755 -t $out/lib/purple-2/ libhangouts.so - for size in 16 22 24 48; do - install -TDm644 hangouts$size.png $out/share/pixmaps/pidgin/protocols/$size/hangouts.png - done - ''; - }); - in { - createHome = true; - description = "Restricted shell user"; - home = "/var/lib/pub"; - uid = config.myEnv.users.pub.uid; - useDefaultShell = true; - packages = [ - restrict - pkgs.tmux - (pkgs.pidgin.override { plugins = [ - pkgs.purple-plugin-pack purple-hangouts - pkgs.purple-discord pkgs.purple-facebook - pkgs.telegram-purple - ]; }) - ]; - }; - }; -} diff --git a/modules/private/pub/ldap_pub.sh b/modules/private/pub/ldap_pub.sh deleted file mode 100644 index bbbefdc..0000000 --- a/modules/private/pub/ldap_pub.sh +++ /dev/null @@ -1,56 +0,0 @@ -### This snippet is not standalone and must be integrated in the global ldap_authorized_keys.sh -LDAP_PUB_RESTRICT_MEMBER="cn=restrict,cn=pub,ou=services,dc=immae,dc=eu" -LDAP_PUB_FORWARD_MEMBER="cn=forward,cn=pub,ou=services,dc=immae,dc=eu" -ECHO=$(which echo) - -if [[ $user == pub ]]; then - ldap_search '(&(memberOf='$LDAP_PUB_RESTRICT_MEMBER')('$KEY'=*))' $KEY | \ - while read line ; - do - if [ ! -z "$line" ]; then - if [[ $line == dn* ]]; then - echo "" - user=$(sed -n 's/.*uid=\([^,]*\).*/\1/p' <<< "$line") - echo "# $user" - elif [[ $line == $KEY* ]]; then - key=$(clean_key_line pub "$line") - key_forward=$(clean_key_line forward "$line") - if [ ! -z "$key" ]; then - if [[ $key != *$'\n'* ]] && [[ $key == ssh-* ]]; then - echo -n 'command="/etc/profiles/per-user/pub/bin/restrict '$user'" ' - echo $key - fi - elif [ ! -z "$key_forward" ]; then - if [[ $key_forward != *$'\n'* ]] && [[ $key_forward == ssh-* ]]; then - echo "# forward only" - echo -n 'no-pty,no-X11-forwarding,command="'$ECHO' forward only" ' - echo $key_forward - fi - fi - fi - fi - done - - echo "" - ldap_search '(&(memberOf='$LDAP_PUB_FORWARD_MEMBER')('$KEY'=*))' $KEY | \ - while read line ; - do - if [ ! -z "$line" ]; then - if [[ $line == dn* ]]; then - echo "" - user=$(sed -n 's/.*uid=\([^,]*\).*/\1/p' <<< "$line") - echo "# $user" - elif [[ $line == $KEY* ]]; then - key=$(clean_key_line forward "$line") - if [ ! -z "$key" ]; then - if [[ $key != *$'\n'* ]] && [[ $key == ssh-* ]]; then - echo -n 'no-pty,no-X11-forwarding,command="'$ECHO' forward only" ' - echo $key - fi - fi - fi - fi - done - exit 0 -fi - diff --git a/modules/private/pub/restrict b/modules/private/pub/restrict deleted file mode 100644 index b2f3be3..0000000 --- a/modules/private/pub/restrict +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env bash -user="$1" -rootuser="$HOME/$user/" -mkdir -p $rootuser - -orig="$SSH_ORIGINAL_COMMAND" -if [ -z "$orig" ]; then - orig="/bin/bash -l" -fi -if [ "${orig:0:7}" = "command" ]; then - orig="${orig:8}" -fi - -case "$orig" in -rsync*) - rrsync $HOME/$user/ - ;; -*) - nix_store_paths() { - nix-store -q -R \ - /run/current-system/sw \ - /etc/profiles/per-user/pub \ - /etc/ssl/certs/ca-bundle.crt \ - | while read i; do - printf '%s--ro-bind\0'$i'\0'$i'\0' '' - done - } - - set -euo pipefail - (exec -c bwrap --ro-bind /usr /usr \ - --args 10 \ - --dir /tmp \ - --dir /var \ - --symlink ../tmp var/tmp \ - --proc /proc \ - --dev /dev \ - --ro-bind /etc/resolv.conf /etc/resolv.conf \ - --ro-bind /etc/zoneinfo /etc/zoneinfo \ - --ro-bind /etc/ssl /etc/ssl \ - --ro-bind /etc/static/ssl/certs /etc/static/ssl/certs \ - --ro-bind /run/current-system/sw/lib/locale/locale-archive /etc/locale-archive \ - --ro-bind /run/current-system/sw/bin /bin \ - --ro-bind /etc/profiles/per-user/pub/bin /bin-pub \ - --bind /var/lib/pub/$user /var/lib/pub \ - --dir /var/lib/commons \ - --ro-bind $TMUX_RESTRICT /var/lib/commons/tmux.restrict.conf \ - --chdir /var/lib/pub \ - --unshare-all \ - --share-net \ - --dir /run/user/$(id -u) \ - --setenv TERM "$TERM" \ - --setenv LOCALE_ARCHIVE "/etc/locale-archive" \ - --setenv XDG_RUNTIME_DIR "/run/user/`id -u`" \ - --setenv PS1 "$user@pub $ " \ - --setenv PATH "/bin:/bin-pub" \ - --setenv HOME "/var/lib/pub" \ - --file 11 /etc/passwd \ - --file 12 /etc/group \ - -- $orig) \ - 10< <(nix_store_paths) \ - 11< <(getent passwd $UID 65534) \ - 12< <(getent group $(id -g) 65534) - ;; -esac diff --git a/modules/private/pub/tmux.restrict.conf b/modules/private/pub/tmux.restrict.conf deleted file mode 100644 index 5aefd1c..0000000 --- a/modules/private/pub/tmux.restrict.conf +++ /dev/null @@ -1,43 +0,0 @@ -# Pour les nostalgiques de screen -# comme les raccourcis ne sont pas les mêmes, j'évite -set -g prefix C-a -unbind-key C-b - -unbind-key -a -bind-key -n C-h list-keys -bind-key C-d detach -bind-key & confirm-before -p "kill-window #W? (y/n)" kill-window - -# même hack que sur screen lorsqu'on veut profiter du scroll du terminal -# (xterm ...) -set -g terminal-overrides 'xterm*:smcup@:rmcup@' - -#Pour les ctrl+arrow -set-option -g xterm-keys on - -# c'est un minimum (defaut 2000) -set-option -g history-limit 10000 - -# lorsque j'ai encore un tmux ailleurs seule -# sa fenetre active réduit la taille de ma fenetre locale -setw -g aggressive-resize on - -# Pour etre alerté sur un changement dans une autre fenêtre -setw -g monitor-activity on -#set -g visual-activity on -#set -g visual-bell on - -set -g base-index 1 - -# repercuter le contenu de la fenetre dans la barre de titre -# reference des string : man tmux (status-left) -set -g set-titles on -set -g set-titles-string '#H #W #T' # host window command - -#Dans les valeurs par defaut deja, avec le ssh-agent -set -g update-environment "DISPLAY SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY PATH" - -set -g status off -set -g status-left '' -set -g status-right '' - diff --git a/modules/private/ssh/default.nix b/modules/private/ssh/default.nix deleted file mode 100644 index ee5dda5..0000000 --- a/modules/private/ssh/default.nix +++ /dev/null @@ -1,91 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.ssh; -in -{ - options.myServices.ssh = let - module = lib.types.submodule { - options = { - snippet = lib.mkOption { - type = lib.types.lines; - description = '' - Snippet to use - ''; - }; - dependencies = lib.mkOption { - type = lib.types.listOf lib.types.package; - default = []; - description = '' - Dependencies of the package - ''; - }; - }; - }; - in { - predefinedModules = lib.mkOption { - type = lib.types.attrsOf module; - default = { - regular = { - snippet = builtins.readFile ./ldap_regular.sh; - }; - }; - readOnly = true; - description = '' - Predefined modules - ''; - }; - modules = lib.mkOption { - type = lib.types.listOf module; - default = []; - description = '' - List of modules to enable - ''; - }; - }; - config = { - networking.firewall.allowedTCPPorts = [ 22 ]; - } // (lib.mkIf (builtins.length cfg.modules > 0) { - - services.openssh.extraConfig = '' - AuthorizedKeysCommand /etc/ssh/ldap_authorized_keys - AuthorizedKeysCommandUser nobody - ''; - - secrets.keys."ssh-ldap" = { - user = "nobody"; - group = "nogroup"; - permissions = "0400"; - text = config.myEnv.sshd.ldap.password; - }; - system.activationScripts.sshd = { - deps = [ "secrets" ]; - text = '' - install -Dm400 -o nobody -g nogroup -T ${config.secrets.fullPaths."ssh-ldap"} /etc/ssh/ldap_password - ''; - }; - # ssh is strict about parent directory having correct rights, don't - # move it in the nix store. - environment.etc."ssh/ldap_authorized_keys" = let - deps = lib.lists.unique ( - [ pkgs.which pkgs.openldap pkgs.stdenv.shellPackage pkgs.gnugrep pkgs.gnused pkgs.coreutils ] - ++ lib.flatten (map (v: v.dependencies) cfg.modules) - ); - fullScript = pkgs.runCommand "ldap_authorized_keys" { - snippets = builtins.concatStringsSep "\n" (map (v: v.snippet) cfg.modules); - } '' - substituteAll ${./ldap_authorized_keys.sh} $out - chmod a+x $out - ''; - ldap_authorized_keys = pkgs.runCommand "ldap_authorized_keys" { - buildInputs = [ pkgs.makeWrapper ]; - } '' - makeWrapper "${fullScript}" "$out" --prefix PATH : ${lib.makeBinPath deps} - ''; - in { - enable = true; - mode = "0755"; - user = "root"; - source = ldap_authorized_keys; - }; - }); -} diff --git a/modules/private/ssh/ldap_authorized_keys.sh b/modules/private/ssh/ldap_authorized_keys.sh deleted file mode 100755 index 402f283..0000000 --- a/modules/private/ssh/ldap_authorized_keys.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env bash - -LDAPSEARCH=ldapsearch -KEY="immaeSshKey" -LDAP_BIND="cn=ssh,ou=services,dc=immae,dc=eu" -LDAP_PASS=$(cat /etc/ssh/ldap_password) -LDAP_HOST="ldap.immae.eu" -LDAP_BASE="dc=immae,dc=eu" - -suitable_for() { - type_for="$1" - key="$2" - - if [[ $key != *$'\n'* ]] && [[ $key == ssh-* ]]; then - echo "$key" - else - key_type=$(cut -d " " -f 1 <<< "$key") - - if grep -q "\b-$type_for\b" <<< "$key_type"; then - echo "" - elif grep -q "\b$type_for\b" <<< "$key_type"; then - echo $(sed -e "s/^[^ ]* //g" <<< "$key") - else - echo "" - fi - fi -} - -clean_key_line() { - type_for="$1" - line="$2" - - if [[ "$line" == $KEY::* ]]; then - # base64 keys should't happen, unless wrong copy-pasting - key="" - else - key=$(sed -e "s/^$KEY: *//" -e "s/ *$//" <<< "$line") - fi - - suitable_for "$type_for" "$key" -} - -ldap_search() { - $LDAPSEARCH -h $LDAP_HOST -ZZ -b $LDAP_BASE -D $LDAP_BIND -w "$LDAP_PASS" -x -o ldif-wrap=no -LLL "$@" -} - -ldap_keys() { - user=$1; - @snippets@ -} - -ldap_keys $@ diff --git a/modules/private/ssh/ldap_regular.sh b/modules/private/ssh/ldap_regular.sh deleted file mode 100644 index 4c2f47e..0000000 --- a/modules/private/ssh/ldap_regular.sh +++ /dev/null @@ -1,19 +0,0 @@ -### This snippet is not standalone and must be integrated in the global ldap_authorized_keys.sh -LDAP_MEMBER="cn=users,cn=ssh,ou=services,dc=immae,dc=eu" - -ldap_search '(&(memberOf='$LDAP_MEMBER')('$KEY'=*)(uid='$user'))' $KEY | \ - while read line ; - do - if [ ! -z "$line" ]; then - if [[ $line == dn* ]]; then - user=$(sed -n 's/.*uid=\([^,]*\).*/\1/p' <<< "$line") - elif [[ $line == $KEY* ]]; then - key=$(clean_key_line ssh "$line") - if [ ! -z "$key" ]; then - if [[ $key != *$'\n'* ]] && [[ $key == ssh-* ]]; then - echo $key - fi - fi - fi - fi - done diff --git a/modules/private/system.nix b/modules/private/system.nix deleted file mode 100644 index 5f3d79e..0000000 --- a/modules/private/system.nix +++ /dev/null @@ -1,98 +0,0 @@ -{ pkgs, lib, config, name, nodes, ... }: -{ - config = { - deployment.secrets."secret_vars.yml" = { - source = builtins.toString ../../nixops/secrets/vars.yml; - destination = config.secrets.secretsVars; - owner.user = "root"; - owner.group = "root"; - permissions = "0400"; - }; - - networking.extraHosts = builtins.concatStringsSep "\n" - (lib.mapAttrsToList (n: v: "${v.config.hostEnv.ips.main.ip4} ${n}") nodes); - - users.extraUsers.root.openssh.authorizedKeys.keys = [ config.myEnv.sshd.rootKeys.nix_repository ]; - secrets.deleteSecretsVars = true; - secrets.gpgKeys = [ - ../../nixops/public_keys/Immae.pub - ]; - secrets.secretsVars = "/run/keys/vars.yml"; - - services.openssh.enable = true; - - nixpkgs.overlays = builtins.attrValues (import ../../overlays) ++ [ - (self: super: { - postgresql = self.postgresql_pam; - mariadb = self.mariadb_pam; - }) # don’t put them as generic overlay because of home-manager - ]; - - services.journald.extraConfig = '' - #Should be "warning" but disabled for now, it prevents anything from being stored - MaxLevelStore=info - MaxRetentionSec=1year - ''; - - users.users = - builtins.listToAttrs (map (x: lib.attrsets.nameValuePair x.name ({ - isNormalUser = true; - home = "/home/${x.name}"; - createHome = true; - linger = true; - } // x)) (config.hostEnv.users pkgs)) - // { - root.packages = let - nagios-cli = pkgs.writeScriptBin "nagios-cli" '' - #!${pkgs.stdenv.shell} - sudo -u naemon ${pkgs.nagios-cli}/bin/nagios-cli -c ${./monitoring/nagios-cli.cfg} - ''; - in - [ - pkgs.telnet - pkgs.htop - pkgs.iftop - pkgs.bind.dnsutils - pkgs.httpie - pkgs.iotop - pkgs.whois - pkgs.ngrep - pkgs.tcpdump - pkgs.tshark - pkgs.tcpflow - # pkgs.mitmproxy # failing - pkgs.nmap - pkgs.p0f - pkgs.socat - pkgs.lsof - pkgs.psmisc - pkgs.openssl - pkgs.wget - - pkgs.cnagios - nagios-cli - - pkgs.pv - pkgs.smartmontools - ]; - }; - - users.mutableUsers = lib.mkDefault false; - - environment.etc.cnagios.source = "${pkgs.cnagios}/share/doc/cnagios"; - environment.systemPackages = [ - pkgs.git - pkgs.vim - pkgs.rsync - pkgs.strace - ] ++ - (lib.optional (builtins.length (config.hostEnv.users pkgs) > 0) pkgs.home-manager); - - systemd.targets.maintenance = { - description = "Maintenance target with only sshd"; - after = [ "network-online.target" "sshd.service" ]; - requires = [ "network-online.target" "sshd.service" ]; - unitConfig.AllowIsolate = "yes"; - }; - }; -} diff --git a/modules/private/system/backup-2.nix b/modules/private/system/backup-2.nix deleted file mode 100644 index c01a666..0000000 --- a/modules/private/system/backup-2.nix +++ /dev/null @@ -1,137 +0,0 @@ -{ config, pkgs, resources, name, ... }: -{ - deployment = { - targetUser = "root"; - targetHost = config.hostEnv.ips.main.ip4; - substituteOnDestination = true; - }; - # ssh-keyscan backup-2 | nix-shell -p ssh-to-age --run ssh-to-age - secrets.ageKeys = [ "age1kk3nr27qu42j28mcfdag5lhq0zu2pky7gfanvne8l4z2ctevjpgskmw0sr" ]; - secrets.keys = { - "rsync_backup/identity" = { - user = "backup"; - group = "backup"; - permissions = "0400"; - text = config.myEnv.rsync_backup.ssh_key.private; - }; - "rsync_backup/identity.pub" = { - user = "backup"; - group = "backup"; - permissions = "0444"; - text = config.myEnv.rsync_backup.ssh_key.public; - }; - }; - boot.kernelPackages = pkgs.linuxPackages_latest; - myEnv = import ../../../nixops/secrets/environment.nix; - - imports = [ ] ++ builtins.attrValues (import ../..); - - fileSystems = { - "/backup2" = { - fsType = "ext4"; - device = "UUID=b9425333-f567-435d-94d8-b26c22d93426"; - }; - "/" = { device = "/dev/sda1"; fsType = "ext4"; }; - }; - - networking = { - firewall.enable = true; - interfaces."ens3".ipv4.addresses = pkgs.lib.attrsets.mapAttrsToList - (n: ips: { address = ips.ip4; prefixLength = 32; }) - (pkgs.lib.attrsets.filterAttrs (n: v: n != "main") config.hostEnv.ips); - interfaces."ens3".ipv6.addresses = pkgs.lib.flatten (pkgs.lib.attrsets.mapAttrsToList - (n: ips: map (ip: { address = ip; prefixLength = (if n == "main" && ip == pkgs.lib.head ips.ip6 then 64 else 128); }) (ips.ip6 or [])) - config.hostEnv.ips); - defaultGateway6 = { address = "fe80::1"; interface = "ens3"; }; - }; - - boot.loader.grub.device = "nodev"; - - myServices.certificates.enable = true; - security.acme.certs."${name}" = { - user = config.services.nginx.user; - group = config.services.nginx.group; - }; - services.nginx = { - enable = true; - recommendedOptimisation = true; - recommendedGzipSettings = true; - recommendedProxySettings = true; - }; - networking.firewall.allowedTCPPorts = [ 80 443 ]; - - services.cron = { - mailto = "cron@immae.eu"; - enable = true; - }; - - services.rsyncBackup = { - mountpoint = "/backup2"; - profiles = config.myEnv.rsync_backup.profiles; - ssh_key_public = config.secrets.fullPaths."rsync_backup/identity.pub"; - ssh_key_private = config.secrets.fullPaths."rsync_backup/identity"; - }; - - myServices.mailRelay.enable = true; - myServices.mailBackup.enable = true; - myServices.monitoring.enable = true; - myServices.databasesReplication = { - postgresql = { - enable = true; - base = "/backup2"; - mainPackage = pkgs.postgresql; - hosts = { - eldiron = { - slot = "backup_2"; - connection = "postgresql://backup-2:${config.hostEnv.ldap.password}@eldiron.immae.eu"; - package = pkgs.postgresql; - }; - }; - }; - mariadb = { - enable = true; - base = "/backup2"; - hosts = { - eldiron = { - serverId = 2; - # mysql resolves "backup-2" host and checks the ip, but uses /etc/hosts which only contains ip4 - host = config.myEnv.servers.eldiron.ips.main.ip4; - port = "3306"; - user = "backup-2"; - password = config.hostEnv.ldap.password; - dumpUser = "root"; - dumpPassword = config.myEnv.databases.mysql.systemUsers.root; - }; - }; - }; - redis = { - enable = true; - base = "/backup2"; - hosts = { - eldiron = { - host = "127.0.0.1"; - port = "16379"; - }; - }; - }; - openldap = { - enable = true; - base = "/backup2"; - hosts = { - eldiron = { - url = "ldaps://${config.myEnv.ldap.host}:636"; - dn = config.myEnv.ldap.replication_dn; - password = config.myEnv.ldap.replication_pw; - base = config.myEnv.ldap.base; - }; - }; - }; - }; - - # This value determines the NixOS release with which your system is - # to be compatible, in order to avoid breaking some software such as - # database servers. You should change this only after NixOS release - # notes say you should. - # https://nixos.org/nixos/manual/release-notes.html - system.stateVersion = "20.03"; # Did you read the comment? -} diff --git a/modules/private/system/dilion.nix b/modules/private/system/dilion.nix deleted file mode 100644 index fa92cd9..0000000 --- a/modules/private/system/dilion.nix +++ /dev/null @@ -1,242 +0,0 @@ -{ config, pkgs, name, lib, ... }: -{ - deployment = { - targetUser = "root"; - targetHost = config.hostEnv.ips.main.ip4; - substituteOnDestination = true; - }; - # ssh-keyscan dilion | nix-shell -p ssh-to-age --run ssh-to-age - secrets.ageKeys = [ "age1x49n6qa0arkdpq8530s7umgm0gqkq90exv4jep97q30rfnzknpaqate06a" ]; - nixpkgs.system = lib.mkOverride 900 "x86_64-linux"; - boot = { - loader = { - grub = { - version = 2; - devices = [ "/dev/sda" "/dev/sdb" "/dev/sdc" "/dev/sdd" ]; - }; - timeout = 1; - }; - blacklistedKernelModules = [ "nvidiafb" ]; - supportedFilesystems = [ "zfs" ]; - kernelPackages = pkgs.linuxPackages_latest; - kernelModules = [ "kvm-intel" ]; - initrd.availableKernelModules = [ "ahci" "sd_mod" ]; - initrd.secrets = { - "/boot/pass.key" = "/boot/pass.key"; - }; - kernel.sysctl."vm.nr_hugepages" = 256; # for xmr-stak - # available in nixos-20.09 - #zfs.requestEncryptionCredentials = [ "zpool/root" ]; - }; - nix.maxJobs = 8; - powerManagement.cpuFreqGovernor = "powersave"; - hardware.enableRedistributableFirmware = true; - - myEnv = import ../../../nixops/secrets/environment.nix; - - swapDevices = [ { label = "swap"; } ]; - fileSystems = { - "/" = { fsType = "zfs"; device = "zpool/root"; }; - "/boot" = { fsType = "ext4"; device = "/dev/disk/by-uuid/fd1c511e-2bc0-49d5-b8bb-95e7e8c8c816"; }; - "/etc" = { fsType = "zfs"; device = "zpool/root/etc"; }; - "/home" = { fsType = "zfs"; device = "zpool/root/home"; }; - "/home/immae" = { fsType = "zfs"; device = "zpool/root/home/immae"; }; - "/tmp" = { fsType = "zfs"; device = "zpool/root/tmp"; }; - "/var" = { fsType = "zfs"; device = "zpool/root/var"; }; - "/data" = { fsType = "ext4"; label = "data"; }; - "/nix" = { fsType = "ext4"; label = "nix"; }; - }; - - services.udev.extraRules = '' - ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="10:bf:48:7f:e6:3b", NAME="eth0" - ''; - - networking = { - hostId = "27c3048d"; # generated with head -c4 /dev/urandom | od -A none -t x4 - firewall.enable = false; - interfaces."eth0".ipv4.addresses = - [ { address = config.hostEnv.ips.main.ip4; prefixLength = 27; } ] - ++ pkgs.lib.attrsets.mapAttrsToList - (n: ips: { address = ips.ip4; prefixLength = 32; }) - (pkgs.lib.attrsets.filterAttrs (n: v: n != "main") config.hostEnv.ips); - interfaces."eth0".ipv6.addresses = - [ { address = "2a01:4f8:141:53e7::"; prefixLength = 64; } ] - ++ pkgs.lib.flatten (pkgs.lib.attrsets.mapAttrsToList - (n: ips: map (ip: { address = ip; prefixLength = (if n == "main" && ip == pkgs.lib.head ips.ip6 then 64 else 128); }) (ips.ip6 or [])) - config.hostEnv.ips); - defaultGateway = { address = "176.9.10.225"; interface = "eth0"; }; - defaultGateway6 = { address = "fe80::1"; interface = "eth0"; }; - nameservers = [ - "213.133.98.98" - "213.133.99.99" - "213.133.100.100" - "2a01:4f8:0:a0a1::add:1010" - "2a01:4f8:0:a102::add:9999" - "2a01:4f8:0:a111::add:9898" - ]; - }; - - myServices.ssh.modules = [ config.myServices.ssh.predefinedModules.regular ]; - imports = builtins.attrValues (import ../..) ++ [ ./dilion/vms.nix ]; - - system.nssModules = [ pkgs.libvirt ]; - system.nssDatabases.hosts = lib.mkForce [ "files" "libvirt_guest" "mymachines" "dns" "myhostname" ]; - programs.zsh.enable = true; - - users.users.libvirt = { - hashedPassword = "!"; - shell = pkgs.bashInteractive; - isSystemUser = true; - group = "libvirtd"; - packages = [ pkgs.netcat-openbsd ]; - openssh.authorizedKeys.keys = [ - config.myEnv.buildbot.ssh_key.public - config.myEnv.sshd.rootKeys.ismael_flony - ]; - }; - - users.users.backup = { - hashedPassword = "!"; - isSystemUser = true; - extraGroups = [ "keys" ]; - shell = pkgs.bashInteractive; - openssh.authorizedKeys.keys = let - zreplConfig = config.secrets.fullPaths."zrepl/zrepl.yml"; - in - ["command=\"${pkgs.zrepl}/bin/zrepl stdinserver --config ${zreplConfig} eldiron\",restrict ${config.myEnv.zrepl_backup.ssh_key.public}"]; - }; - security.sudo.extraRules = pkgs.lib.mkAfter [ - { - commands = [ - { command = "/home/immae/.nix-profile/root_scripts/*"; options = [ "NOPASSWD" ]; } - ]; - users = [ "immae" ]; - runAs = "root"; - } - ]; - - system.activationScripts.libvirtd_exports = '' - install -m 0755 -o root -g root -d /var/lib/caldance - ''; - virtualisation.docker.enable = true; - virtualisation.docker.storageDriver = "zfs"; - virtualisation.libvirtd.enable = true; - users.extraUsers.immae.extraGroups = [ "libvirtd" "docker" ]; - systemd.services.libvirtd.postStart = '' - install -m 0770 -g libvirtd -d /var/lib/libvirt/images - ''; - systemd.services.socat-caldance = { - description = "Forward ssh port to caldance"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - - serviceConfig = { - ExecStart = "${pkgs.socat}/bin/socat TCP-LISTEN:8022,fork TCP:caldance:22"; - }; - }; - - time.timeZone = "Europe/Paris"; - nix = { - useSandbox = "relaxed"; - extraOptions = '' - keep-outputs = true - keep-derivations = true - allow-unsafe-native-code-during-evaluation = true - experimental-features = nix-command flakes - #Assumed in NUR - allow-import-from-derivation = true - ''; - }; - - security.pki.certificateFiles = [ - (pkgs.fetchurl { - url = "http://downloads.e.eriomem.net/eriomemca.pem"; - sha256 = "1ixx4c6j3m26j8dp9a3dkvxc80v1nr5aqgmawwgs06bskasqkvvh"; - }) - ]; - - # This is equivalent to setting environment.sessionVariables.NIX_PATH - nix.nixPath = [ - "home-manager=${pkgs.sources.home-manager.url}" - "nixpkgs=${pkgs.sources.nixpkgs-home-manager.url}" - ]; - nix.binaryCaches = [ "https://hydra.iohk.io" "https://cache.nixos.org" ]; - nix.binaryCachePublicKeys = [ "hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ=" ]; - - myServices.monitoring.enable = true; - myServices.certificates.enable = true; - security.acme.certs."${name}-immae" = config.myServices.certificates.certConfig // { - user = "immae"; - domain = "dilion.immae.eu"; - }; - security.acme.certs."${name}" = { - user = config.services.nginx.user; - group = config.services.nginx.group; - extraDomains = { - "dilion.immae.dev" = null; - "caldance.cs.immae.dev" = null; - }; - }; - services.nginx = { - enable = true; - recommendedOptimisation = true; - recommendedGzipSettings = true; - recommendedProxySettings = true; - upstreams = { - caldance.servers."caldance:3031" = {}; - }; - virtualHosts = { - "dilion.immae.dev" = { - acmeRoot = config.myServices.certificates.webroot; - useACMEHost = name; - forceSSL = true; - root = "/home/immae/www"; - }; - "caldance.cs.immae.dev" = { - acmeRoot = config.myServices.certificates.webroot; - useACMEHost = name; - forceSSL = true; - locations."/".extraConfig = '' - uwsgi_pass caldance; - ''; - locations."/static/".alias = "/var/lib/caldance/caldance/app/www/static/"; - locations."/media/".alias = "/var/lib/caldance/caldance/media/"; - extraConfig = '' - auth_basic "Authentification requise"; - auth_basic_user_file ${pkgs.writeText "htpasswd" config.myEnv.websites.caldance.integration.password}; - ''; - }; - }; - }; - - systemd.services.zrepl.serviceConfig.RuntimeDirectory = lib.mkForce "zrepl zrepl/stdinserver"; - systemd.services.zrepl.serviceConfig.User = "backup"; - # zfs allow backup create,mount,receive,destroy,rename,snapshot,hold,bookmark,release zpool/backup - services.zrepl = { - enable = true; - config = '' - global: - control: - sockpath: /run/zrepl/control - serve: - stdinserver: - sockdir: /run/zrepl/stdinserver - jobs: - - type: sink - # must not change - name: "backup-from-eldiron" - root_fs: "zpool/backup" - serve: - type: stdinserver - client_identities: - - eldiron - ''; - }; - # This value determines the NixOS release with which your system is - # to be compatible, in order to avoid breaking some software such as - # database servers. You should change this only after NixOS release - # notes say you should. - # https://nixos.org/nixos/manual/release-notes.html - system.stateVersion = "20.03"; # Did you read the comment? -} - diff --git a/modules/private/system/dilion/vms.nix b/modules/private/system/dilion/vms.nix deleted file mode 100644 index af96622..0000000 --- a/modules/private/system/dilion/vms.nix +++ /dev/null @@ -1,185 +0,0 @@ -# inspired from https://nixos.wiki/wiki/Virtualization_in_NixOS -{ config, pkgs, lib, ... }@args: -let - pools = { - niximages = { - type = "dir"; - target = "/etc/libvirtd/base-images"; - }; - buildbot-disks = rec { - preStart = '' - mkdir -p ${target} - ''; - type = "dir"; - target = "/var/lib/libvirt/images/buildbot-disks"; - }; - zfspool = { - # pool-define-as --name zfspool --source-name zpool/libvirt --type zfs - type = "zfs"; - xml = '' - - zpool/libvirt - - ''; - }; - }; - networks = { - immae = { - bridgeNumber = "1"; - ipRange = "192.168.100"; - }; - }; - guests = { - caldance = { - pool = "zfspool"; - cpus = "1"; - memory = "2"; - network = "immae"; - diskSize = "10GiB"; - extraDevicesXML = '' - - - - - ''; - }; - buildbot = { - pool = "zfspool"; - cpus = "1"; - memory = "3"; - network = "immae"; - diskSize = "10GiB"; - destroyVolumeOnExit = true; - }; - }; - toImage = f: "${import ./vms/base_image.nix f (args // { myEnv = config.myEnv; })}/nixos.qcow2"; -in -{ - environment.etc."libvirtd/base-images/nixos.qcow2".source = toImage ./vms/base_configuration.nix; - environment.etc."libvirtd/base-images/buildbot.qcow2".source = toImage ./vms/buildbot_configuration.nix; - systemd.services = lib.mapAttrs' (name: guest: lib.nameValuePair "libvirtd-guest-${name}" { - after = [ "libvirtd.service" "libvirtd-pool-${guest.pool}.service" "libvirtd-network-${guest.network}.service" ]; - requires = [ "libvirtd.service" "libvirtd-pool-${guest.pool}.service" "libvirtd-network-${guest.network}.service" ]; - wantedBy = [ "multi-user.target" ]; - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = "yes"; - }; - script = - let - xml = pkgs.writeText "libvirt-guest-${name}.xml" - '' - - ${name} - UUID - ${guest.memory} - ${guest.cpus} - - hvm - - - /run/current-system/sw/bin/qemu-system-x86_64 - - - - - ${guest.extraDevicesXML or ""} - - - - - - - - - - - ''; - in - guest.preStart or "" + '' - if ! ${pkgs.libvirt}/bin/virsh vol-key 'guest-${name}' --pool ${guest.pool} &> /dev/null; then - ${pkgs.libvirt}/bin/virsh vol-create-as --pool ${guest.pool} --name 'guest-${name}' --capacity '${guest.diskSize}' - volume_path=$(${pkgs.libvirt}/bin/virsh vol-path --pool ${guest.pool} --vol 'guest-${name}') - ${pkgs.qemu}/bin/qemu-img convert /etc/libvirtd/base-images/nixos.qcow2 $volume_path - fi - uuid="$(${pkgs.libvirt}/bin/virsh domuuid '${name}' || true)" - ${pkgs.libvirt}/bin/virsh define <(sed "s/UUID/$uuid/" '${xml}') - ${pkgs.libvirt}/bin/virsh start '${name}' - ''; - preStop = '' - ${pkgs.libvirt}/bin/virsh shutdown '${name}' - let "timeout = $(date +%s) + 10" - while [ "$(${pkgs.libvirt}/bin/virsh list --name | grep --count '^${name}$')" -gt 0 ]; do - if [ "$(date +%s)" -ge "$timeout" ]; then - # Meh, we warned it... - ${pkgs.libvirt}/bin/virsh destroy '${name}' - else - # The machine is still running, let's give it some time to shut down - sleep 0.5 - fi - done - '' + lib.optionalString (guest.destroyVolumeOnExit or false) '' - if ${pkgs.libvirt}/bin/virsh vol-key 'guest-${name}' --pool ${guest.pool} &> /dev/null; then - ${pkgs.libvirt}/bin/virsh vol-wipe --pool ${guest.pool} --vol 'guest-${name}' || true - ${pkgs.libvirt}/bin/virsh vol-delete --pool ${guest.pool} --vol 'guest-${name}' - fi - ''; - }) guests // (lib.mapAttrs' (name: network: lib.nameValuePair "libvirtd-network-${name}" { - after = [ "libvirtd.service" ]; - requires = [ "libvirtd.service" ]; - wantedBy = [ "multi-user.target" ]; - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = "yes"; - }; - script = let - xml = pkgs.writeText "libvirt-network-${name}.xml" '' - - ${name} - UUID - - - - - - - - - - ''; - in '' - uuid="$(${pkgs.libvirt}/bin/virsh net-uuid '${name}' || true)" - ${pkgs.libvirt}/bin/virsh net-define <(sed "s/UUID/$uuid/" '${xml}') - ${pkgs.libvirt}/bin/virsh net-start '${name}' - ''; - preStop = '' - ${pkgs.libvirt}/bin/virsh net-destroy '${name}' - ''; - }) networks) // (lib.mapAttrs' (name: pool: lib.nameValuePair "libvirtd-pool-${name}" { - after = [ "libvirtd.service" ]; - requires = [ "libvirtd.service" ]; - wantedBy = [ "multi-user.target" ]; - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = "yes"; - }; - script = let - xml = pkgs.writeText "libvirt-pool-${name}.xml" '' - - ${name} - UUID - ${pool.xml or ""} - ${if pool ? target then '' - - ${pool.target} - - '' else ""} - - ''; - in pool.preStart or "" + '' - uuid="$(${pkgs.libvirt}/bin/virsh pool-uuid '${name}' || true)" - ${pkgs.libvirt}/bin/virsh pool-define <(sed "s/UUID/$uuid/" '${xml}') - ${pkgs.libvirt}/bin/virsh pool-start '${name}' || true - ''; - }) pools); -} diff --git a/modules/private/system/dilion/vms/base_configuration.nix b/modules/private/system/dilion/vms/base_configuration.nix deleted file mode 100644 index e2caba2..0000000 --- a/modules/private/system/dilion/vms/base_configuration.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ lib, config, ... }@args: -{ - options.myEnv = (import ../../../environment.nix (args // { name = "dummy"; })).options.myEnv; - config = { - fileSystems."/".device = "/dev/disk/by-label/nixos"; - boot.initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "virtio_balloon" "virtio_blk" "virtio_pci" "virtio_ring" ]; - boot.loader = { - grub = { - version = 2; - device = "/dev/vda"; - }; - timeout = 0; - }; - services.openssh.enable = true; - networking.firewall.allowedTCPPorts = [ 22 ]; - users = { - mutableUsers = false; - users.root.openssh.authorizedKeys.keys = [ config.myEnv.sshd.rootKeys.immae_dilion ]; - }; - }; -} diff --git a/modules/private/system/dilion/vms/base_image.nix b/modules/private/system/dilion/vms/base_image.nix deleted file mode 100644 index 8de8560..0000000 --- a/modules/private/system/dilion/vms/base_image.nix +++ /dev/null @@ -1,94 +0,0 @@ -configuration_file: { pkgs ? import {}, system ? builtins.currentSystem, myEnv, ... }: -let - config = (import { - inherit system; - modules = [ { - myEnv = myEnv; - imports = [ configuration_file ]; - - # We want our template image to be as small as possible, but the deployed image should be able to be - # of any size. Hence we resize on the first boot. - systemd.services.resize-main-fs = { - wantedBy = [ "multi-user.target" ]; - serviceConfig.Type = "oneshot"; - script = - '' - # Resize main partition to fill whole disk - echo ", +" | ${pkgs.utillinux}/bin/sfdisk /dev/vda --no-reread -N 1 - ${pkgs.parted}/bin/partprobe - # Resize filesystem - ${pkgs.e2fsprogs}/bin/resize2fs /dev/vda1 - ''; - }; - } ]; - }).config; -in pkgs.vmTools.runInLinuxVM ( - pkgs.runCommand "nixos-base-image" - { - memSize = 768; - preVM = - '' - mkdir $out - diskImage=image.qcow2 - ${pkgs.vmTools.qemu}/bin/qemu-img create -f qcow2 $diskImage 2G - mv closure xchg/ - ''; - postVM = - '' - echo compressing VM image... - ${pkgs.vmTools.qemu}/bin/qemu-img convert -c $diskImage -O qcow2 $out/nixos.qcow2 - ''; - buildInputs = [ pkgs.utillinux pkgs.perl pkgs.parted pkgs.e2fsprogs ]; - exportReferencesGraph = - [ "closure" config.system.build.toplevel ]; - } - '' - # Create the partition - parted /dev/vda mklabel msdos - parted /dev/vda -- mkpart primary ext4 1M -1s - - # Format the partition - mkfs.ext4 -L nixos /dev/vda1 - mkdir /mnt - mount /dev/vda1 /mnt - - for dir in dev proc sys; do - mkdir /mnt/$dir - mount --bind /$dir /mnt/$dir - done - - storePaths=$(perl ${pkgs.pathsFromGraph} /tmp/xchg/closure) - echo filling Nix store... - mkdir -p /mnt/nix/store - set -f - cp -prd $storePaths /mnt/nix/store - # The permissions will be set up incorrectly if the host machine is not running NixOS - chown -R 0:30000 /mnt/nix/store - - mkdir -p /mnt/etc/nix - echo 'build-users-group = ' > /mnt/etc/nix/nix.conf - - # Register the paths in the Nix database. - export USER=root - printRegistration=1 perl ${pkgs.pathsFromGraph} /tmp/xchg/closure | \ - chroot /mnt ${config.nix.package.out}/bin/nix-store --load-db - - # Create the system profile to allow nixos-rebuild to work. - chroot /mnt ${config.nix.package.out}/bin/nix-env \ - -p /nix/var/nix/profiles/system --set ${config.system.build.toplevel} - - # `nixos-rebuild' requires an /etc/NIXOS. - mkdir -p /mnt/etc/nixos - touch /mnt/etc/NIXOS - - # `switch-to-configuration' requires a /bin/sh - mkdir -p /mnt/bin - ln -s ${config.system.build.binsh}/bin/sh /mnt/bin/sh - - # Generate the GRUB menu. - chroot /mnt ${config.system.build.toplevel}/bin/switch-to-configuration boot - - umount /mnt/{proc,dev,sys} - umount /mnt - '' -) diff --git a/modules/private/system/dilion/vms/buildbot_configuration.nix b/modules/private/system/dilion/vms/buildbot_configuration.nix deleted file mode 100644 index 05b02d4..0000000 --- a/modules/private/system/dilion/vms/buildbot_configuration.nix +++ /dev/null @@ -1,67 +0,0 @@ -{ pkgs, config, lib, ... }: -{ - imports = [ - - ./base_configuration.nix - ]; - systemd.services.buildbot-worker.serviceConfig.ExecStartPre = let - cfg = config.services.buildbot-worker; - script = pkgs.writeScript "decode-dmi" '' - #!${pkgs.stdenv.shell} - - mkdir -vp "${cfg.buildbotDir}" - varfile=${cfg.buildbotDir}/variables - rm $varfile || true - echo "[DEFAULT]" > $varfile - strings=$(${pkgs.dmidecode}/bin/dmidecode --oem-string count) - for i in $(seq 1 $strings); do - ${pkgs.dmidecode}/bin/dmidecode --oem-string $i >> $varfile - done - chown -R ${cfg.user}:${cfg.group} ${cfg.buildbotDir} - ''; - in - lib.mkForce ["+${script}"]; - systemd.services.buildbot-worker.serviceConfig.ExecStart = let - cfg = config.services.buildbot-worker; - tacFile = pkgs.writeText "buildbot-worker.tac" '' - import os - from io import open - - from buildbot_worker.bot import Worker - from twisted.application import service - - basedir = '${cfg.buildbotDir}' - - # note: this line is matched against to check that this is a worker - # directory; do not edit it. - application = service.Application('buildbot-worker') - - import configparser - config = config = configparser.ConfigParser() - config.read("${cfg.buildbotDir}/variables") - master_url_split = config["DEFAULT"]["buildbot_master_url"].split(':') - buildmaster_host = master_url_split[0] - port = int(master_url_split[1]) - workername = config["DEFAULT"]["buildbot_worker_name"] - - with open('${cfg.workerPassFile}', 'r', encoding='utf-8') as passwd_file: - passwd = passwd_file.read().strip('\r\n') - keepalive = ${toString cfg.keepalive} - umask = None - maxdelay = 300 - numcpus = None - allow_shutdown = None - - s = Worker(buildmaster_host, port, workername, passwd, basedir, - keepalive, umask=umask, maxdelay=maxdelay, - numcpus=numcpus, allow_shutdown=allow_shutdown) - s.setServiceParent(application) - ''; - in - lib.mkForce "${cfg.package.pythonModule.pkgs.twisted}/bin/twistd --nodaemon --pidfile= --logfile - --python ${tacFile}"; - services.buildbot-worker = { - enable = true; - workerPass = config.myEnv.buildbot.workerPassword; - packages = [ pkgs.git pkgs.gzip pkgs.openssh ]; - }; -} diff --git a/modules/private/system/eldiron.nix b/modules/private/system/eldiron.nix deleted file mode 100644 index 8b2784d..0000000 --- a/modules/private/system/eldiron.nix +++ /dev/null @@ -1,228 +0,0 @@ -{ config, pkgs, lib, ... }: -{ - deployment = { - targetUser = "root"; - targetHost = config.hostEnv.ips.main.ip4; - substituteOnDestination = true; - }; - # ssh-keyscan eldiron | nix-shell -p ssh-to-age --run ssh-to-age - secrets.ageKeys = [ "age1dxr5lhvtnjssfaqpnf6qx80h8gfwkxg3tdf35m6n9wljmk7wadfs3kmahj" ]; - boot = { - kernelModules = [ "kvm-intel" ]; - blacklistedKernelModules = [ "nvidiafb" ]; - loader.timeout = 1; - loader.grub.devices = [ "/dev/sda" "/dev/sdb" ]; - kernel.sysctl = { - # https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001.md - "net.ipv4.tcp_sack" = 0; - }; - supportedFilesystems = [ "zfs" ]; - kernelParams = ["zfs.zfs_arc_max=6442450944"]; - kernelPackages = pkgs.linuxPackages_latest; - initrd.availableKernelModules = [ "ahci" "sd_mod" ]; - initrd.secrets = { - "/boot/pass.key" = "/boot/pass.key"; - }; - }; - services.udev.extraRules = '' - ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="c8:60:00:56:a0:88", NAME="eth0" - ''; - nix.maxJobs = 8; - powerManagement.cpuFreqGovernor = "powersave"; - myEnv = import ../../../nixops/secrets/environment.nix; - - fileSystems = { - # pools: - # zpool: ashift=12 - # zfast: ashift=12 - # zfs: - # zpool/: acltype=posixacl ; xattr=sa ; atime=off ; mountpoint=legacy - # zpool/root: encryption=on ; keyformat=passphrase ; keylocation=file:///boot/pass.key - # zpool/root/var: atime=on - # zfast/: acltype=posixacl ; xattr=sa ; atime=off ; mountpoint=legacy - # zfast/root: encryption=on ; keyformat=passphrase ; keylocation=file:///boot/pass.key - # zfast/root/etc: ø - # zfast/root/nix: ø - # zfast/root/tmp: async=disabled - # zfast/root/var: atime=on - # zfast/root/var/lib: ø - # zfast/root/var/lib/mysql: logbias=throughput ; atime=off ; primarycache=metadata - # zfast/root/var/lib/postgresql: recordsize=8K ; atime=off ; logbias=throughput - # zfast/root/var/lib/postgresql/11.0: ø - # zfast/root/var/lib/postgresql/11.0/pg_wal: ø - "/" = { fsType = "zfs"; device = "zpool/root"; }; - "/boot" = { fsType = "ext4"; device = "/dev/disk/by-uuid/e6bb18fb-ff56-4b5f-ae9f-e60d40dc0622"; }; - "/etc" = { fsType = "zfs"; device = "zpool/root/etc"; }; - "/nix" = { fsType = "zfs"; device = "zfast/root/nix"; }; - "/tmp" = { fsType = "zfs"; device = "zfast/root/tmp"; }; - "/var" = { fsType = "zfs"; device = "zpool/root/var"; }; - "/var/lib/mysql" = { fsType = "zfs"; device = "zfast/root/var/lib/mysql"; }; - "/var/lib/postgresql" = { fsType = "zfs"; device = "zfast/root/var/lib/postgresql"; }; - "/var/lib/postgresql/11.0" = { fsType = "zfs"; device = "zfast/root/var/lib/postgresql/11.0"; }; - "/var/lib/postgresql/11.0/pg_wal" = { fsType = "zfs"; device = "zfast/root/var/lib/postgresql/11.0/pg_wal"; }; - }; - swapDevices = [ { label = "swap1"; } { label = "swap2"; } ]; - hardware.enableRedistributableFirmware = true; - - services.zfs = { - autoScrub = { - enable = false; - }; - }; - networking = { - hostId = "8262ca33"; # generated with head -c4 /dev/urandom | od -A none -t x4 - firewall.enable = true; - # FIXME: on next reboot, remove the /27 and the localCommands - interfaces."eth0".ipv4.addresses = - pkgs.lib.attrsets.mapAttrsToList - (n: ips: { address = ips.ip4; prefixLength = 32; }) - (pkgs.lib.attrsets.filterAttrs (n: v: n != "main") config.hostEnv.ips) - ++ [ { address = config.hostEnv.ips.main.ip4; prefixLength = 27; } ]; - interfaces."eth0".ipv6.addresses = pkgs.lib.flatten (pkgs.lib.attrsets.mapAttrsToList - (n: ips: map (ip: { address = ip; prefixLength = (if n == "main" && ip == pkgs.lib.head ips.ip6 then 64 else 128); }) (ips.ip6 or [])) - config.hostEnv.ips); - defaultGateway = "176.9.151.65"; - localCommands = '' - # FIXME: Those commands were added by nixops and may not be - # actually needed - ip -6 addr add '2a01:4f8:160:3445::/64' dev 'eth0' || true - ip -4 route change '176.9.151.64/27' via '176.9.151.65' dev 'eth0' || true - ip -6 route add default via 'fe80::1' dev eth0 || true - ''; - nameservers = [ - "213.133.98.98" - "213.133.99.99" - "213.133.100.100" - "2a01:4f8:0:a0a1::add:1010" - "2a01:4f8:0:a102::add:9999" - "2a01:4f8:0:a111::add:9898" - ]; - }; - - imports = builtins.attrValues (import ../..); - - myServices.buildbot.enable = true; - myServices.databases.enable = true; - myServices.gitolite.enable = true; - myServices.monitoring.enable = true; - myServices.irc.enable = true; - myServices.pub.enable = true; - myServices.tasks.enable = true; - myServices.mpd.enable = true; - myServices.dns.enable = true; - myServices.certificates.enable = true; - myServices.websites.enable = true; - myServices.gemini.enable = true; - myServices.mail.enable = true; - myServices.ejabberd.enable = true; - myServices.vpn.enable = true; - myServices.ftp.enable = true; - - services.netdata.enable = true; - services.netdata.config.global."memory mode" = "none"; - services.netdata.config.health."enabled" = "no"; - services.netdata.config.web.mode = "none"; - users.users."${config.services.netdata.user}".extraGroups = [ "keys" ]; - environment.etc."netdata/stream.conf".source = config.secrets.fullPaths."netdata-stream.conf"; - secrets.keys = { - "netdata-stream.conf" = { - user = config.services.netdata.user; - group = config.services.netdata.group; - permissions = "0400"; - text = '' - [stream] - enabled = yes - destination = ${config.myEnv.monitoring.netdata_aggregator} - api key = ${config.myEnv.monitoring.netdata_keys.eldiron} - ''; - }; - "zrepl_backup/identity" = { - user = "root"; - group = "root"; - permissions = "0400"; - text = config.myEnv.zrepl_backup.ssh_key.private; - }; - }; - programs.ssh.knownHosts.dilion = { - hostNames = ["dilion.immae.eu"]; - publicKey = let - profile = config.myEnv.rsync_backup.profiles.dilion; - in - "${profile.host_key_type} ${profile.host_key}"; - }; - - services.cron = { - enable = true; - mailto = "cron@immae.eu"; - systemCronJobs = [ - '' - 0 0 * * * root journalctl -q --since="25 hours ago" -u postfix -t postfix/smtpd -g "immae.eu.*Recipient address rejected" - # Need a way to blacklist properly - # 0 0 * * * root journalctl -q --since="25 hours ago" -u postfix -t postfix/smtpd -g "NOQUEUE:" - 0 0 * * * root journalctl -q --since="25 hours ago" -u postfix -t postfix/smtp -g "status=bounced" - '' - ]; - }; - - environment.systemPackages = [ pkgs.bindfs ]; - - services.zrepl = { - enable = true; - config = let - redis_dump = pkgs.writeScript "redis-dump" '' - #! ${pkgs.stdenv.shell} - ${pkgs.redis}/bin/redis-cli bgsave - ''; - in '' - jobs: - - type: push - # must not change - name: "backup-to-dilion" - filesystems: - "zpool/root": true - "zpool/root/etc": true - "zpool/root/var<": true - connect: - type: ssh+stdinserver - host: dilion.immae.eu - user: backup - port: 22 - identity_file: ${config.secrets.fullPaths."zrepl_backup/identity"} - snapshotting: - type: periodic - prefix: zrepl_ - interval: 1h - #hooks: - # - type: mysql-lock-tables - # dsn: "${config.myEnv.zrepl_backup.mysql.user}:${config.myEnv.zrepl_backup.mysql.password}@tcp(localhost)/" - # filesystems: - # "zpool/root/var": true - # - type: command - # path: ${redis_dump} - # err_is_fatal: false - # filesystems: - # "zpool/root/var": true - send: - encrypted: true - pruning: - keep_sender: - - type: regex - regex: "^manual_.*" - - type: grid - grid: 24x1h | 7x1d | 4x7d | 6x30d - regex: "^zrepl_.*" - keep_receiver: - - type: regex - regex: "^manual_.*" - - type: grid - grid: 6x4h | 7x1d | 4x7d | 6x30d - regex: "^zrepl_.*" - ''; - }; - # This value determines the NixOS release with which your system is - # to be compatible, in order to avoid breaking some software such as - # database servers. You should change this only after NixOS release - # notes say you should. - # https://nixos.org/nixos/manual/release-notes.html - system.stateVersion = "20.03"; # Did you read the comment? -} diff --git a/modules/private/system/monitoring-1.nix b/modules/private/system/monitoring-1.nix deleted file mode 100644 index dea5f45..0000000 --- a/modules/private/system/monitoring-1.nix +++ /dev/null @@ -1,69 +0,0 @@ -{ config, pkgs, resources, ... }: -{ - deployment = { - targetUser = "root"; - targetHost = config.hostEnv.ips.main.ip4; - substituteOnDestination = true; - }; - # ssh-keyscan monitoring-1 | nix-shell -p ssh-to-age --run ssh-to-age - secrets.ageKeys = [ "age1dn4lzhgxusqrpjjnzm7w8ml39ptf326htuzmpqdqs2gg3wq7cqzqxuvx8k" ]; - boot.kernelPackages = pkgs.linuxPackages_latest; - myEnv = import ../../../nixops/secrets/environment.nix; - - imports = [ ] ++ builtins.attrValues (import ../..); - - myServices.monitoring.enable = true; - myServices.monitoring.master = true; - myServices.status.enable = true; - networking = { - firewall.enable = true; - interfaces."ens3".ipv4.addresses = pkgs.lib.attrsets.mapAttrsToList - (n: ips: { address = ips.ip4; prefixLength = 32; }) - (pkgs.lib.attrsets.filterAttrs (n: v: n != "main") config.hostEnv.ips); - interfaces."ens3".ipv6.addresses = pkgs.lib.flatten (pkgs.lib.attrsets.mapAttrsToList - (n: ips: map (ip: { address = ip; prefixLength = (if n == "main" && ip == pkgs.lib.head ips.ip6 then 64 else 128); }) (ips.ip6 or [])) - config.hostEnv.ips); - defaultGateway6 = { address = "fe80::1"; interface = "ens3"; }; - }; - boot.loader.grub.device = "nodev"; - fileSystems."/" = { device = "/dev/sda1"; fsType = "ext4"; }; - myServices.mailRelay.enable = true; - - security.pki.certificateFiles = [ - (pkgs.fetchurl { - url = "http://downloads.e.eriomem.net/eriomemca.pem"; - sha256 = "1ixx4c6j3m26j8dp9a3dkvxc80v1nr5aqgmawwgs06bskasqkvvh"; - }) - ]; - - services.netdata.enable = true; - services.netdata.config.web."allow dashboard from" = "localhost"; - services.netdata.config.web."allow badges from" = "*"; - services.netdata.config.web."allow streaming from" = "*"; - services.netdata.config.web."allow netdata.conf from" = "fd*"; - services.netdata.config.web."allow management from" = "fd*"; - networking.firewall.allowedTCPPorts = [ 19999 ]; - environment.etc."netdata/stream.conf".source = config.secrets.fullPaths."netdata-stream.conf"; - - secrets.keys = { - "netdata-stream.conf" = { - user = config.services.netdata.user; - group = config.services.netdata.group; - permissions = "0400"; - text = builtins.concatStringsSep "\n" (pkgs.lib.mapAttrsToList (_: key: '' - [${key}] - enabled = yes - default history = 3600 - default memory = ram - health enabled by default = auto - '') config.myEnv.monitoring.netdata_keys); - }; - }; - users.users."${config.services.netdata.user}".extraGroups = [ "keys" ]; - # This value determines the NixOS release with which your system is - # to be compatible, in order to avoid breaking some software such as - # database servers. You should change this only after NixOS release - # notes say you should. - # https://nixos.org/nixos/manual/release-notes.html - system.stateVersion = "20.03"; # Did you read the comment? -} diff --git a/modules/private/system/quatresaisons.nix b/modules/private/system/quatresaisons.nix deleted file mode 100644 index 82db70f..0000000 --- a/modules/private/system/quatresaisons.nix +++ /dev/null @@ -1,436 +0,0 @@ -{ config, pkgs, lib, ... }: -let - serverSpecificConfig = config.myEnv.serverSpecific.quatresaisons; - yarnModules = pkgs.yarn2nix-moretea.mkYarnModules rec { - name = "landing"; - pname = name; - version = "v1.0.0"; - packageJSON = "${pkgs.sources.webapps-landing}/package.json"; - yarnLock = "${pkgs.sources.webapps-landing}/yarn.lock"; - yarnNix = ../websites/tools/tools/landing/yarn-packages.nix; - }; - toLanding = landingConfig: pkgs.stdenv.mkDerivation rec { - pname = "landing"; - version = "v1.0.0"; - src = pkgs.sources.webapps-landing; - - buildInputs = [ yarnModules pkgs.yarn2nix-moretea.yarn ]; - configurePhase = '' - ln -s ${yarnModules}/node_modules . - ''; - buildPhase = '' - yarn build - ''; - installPhase = '' - cp -a dist $out - cp -f ${landingConfig} $out/config.yml - ln -s service-worker.js $out/worker.js - ''; - }; - normalUsers = serverSpecificConfig.users; - sponsoredUser = pkgs.writeScriptBin "sponsored_user" '' - #!/usr/bin/env bash - - set -euo pipefail - [ -z "''${SUDO_USER+x}" ] && echo "Must be run with sudo" && exit 1 - - mygroup=$(id -ng $SUDO_USER) - - sponsored=$(getent group $mygroup | cut -d':' -f4) - - echo "Sponsored users: ''${sponsored:-}" - - log () { - touch /var/log/sponsored_users - chmod go-rwx /var/log/sponsored_users - echo "`date` $mygroup $1" | LANG=C cat -v | tr '\012' ' ' | sed 's:$:\x0a:' >> /var/log/sponsored_users - } - - create_user () { - log "creates $1: $2" - useradd -m -G users,$mygroup -g $mygroup -p '!' "$1" - touch /var/lib/nixos/sponsored_users - chmod go-rwx /var/lib/nixos/sponsored_users - echo "$mygroup $1 $2" >> /var/lib/nixos/sponsored_users - (${pkgs.openldap}/bin/ldapadd -c -D cn=root,dc=salle-s,dc=org \ - -y ${config.secrets.fullPaths."ldap/sync_password"} 2>/dev/null >/dev/null || true) </dev/null >/dev/null || true - - # Remove obsolete users - ${pkgs.openldap}/bin/ldapsearch -LLL ${com} -s one -b "ou=users,dc=salle-s,dc=org" "uid" |\ - grep "^uid" | ${pkgs.gnused}/bin/sed -e "s/uid: //" | while read ldapuser; do - - for user in ${builtins.concatStringsSep " " (builtins.attrNames normalUsers)}; do - if [ "$user" = "$ldapuser" ]; then - continue 2 - fi - done - ${pkgs.openldap}/bin/ldapdelete -r ${com} uid=$ldapuser,ou=users,dc=salle-s,dc=org - done - - # Subusers - if [ -f /var/lib/nixos/sponsored_users ]; then - cat /var/lib/nixos/sponsored_users | while read mainUser subUser name; do - (${pkgs.openldap}/bin/ldapadd -c ${com} 2>/dev/null >/dev/null || true) <s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedVhost - Protocols h2 http/1.1 - AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript - '' ]; - ips = - let ips = config.hostEnv.ips.main; - in [ips.ip4] ++ (ips.ip6 or []); - - fallbackVhost = { - certName = "quatresaisons"; - hosts = [ "quatresaisons.immae.eu" ]; - root = pkgs.runCommand "empty" {} "mkdir $out && touch $out/index.html"; - extraConfig = [ "DirectoryIndex index.html" ]; - }; - vhostConfs.salle-s = { - certName = "quatresaisons"; - addToCerts = true; - hosts = [ "salle-s.org" ]; - root = toLanding ./quatresaisons/landing.yml; - extraConfig = [ - '' - - AllowOverride None - Require all granted - DirectoryIndex index.html - - '' - ]; - }; - vhostConfs.tools = { - certName = "quatresaisons"; - addToCerts = true; - hosts = [ "4c.salle-s.org" "quatresaisons.salle-s.org" "quatre-saisons.salle-s.org" ]; - root = toLanding ./quatresaisons/landing_4c.yml; - extraConfig = [ - '' - Alias /charte ${serverSpecificConfig.charte_path} - - AllowOverride None - Require all granted - DirectoryIndex index.html index.txt - - - - AllowOverride None - Require all granted - DirectoryIndex index.html - - '' - ]; - }; - }; - system.activationScripts.httpd = '' - install -d -m 0750 -o wwwrun -g wwwrun /var/lib/php - install -d -m 0750 -o wwwrun -g wwwrun /var/lib/php/sessions - ''; - - services.phpfpm = { - phpOptions = '' - session.save_path = "/var/lib/php/sessions" - post_max_size = 20M - ; 15 days (seconds) - session.gc_maxlifetime = 1296000 - ; 30 days (minutes) - session.cache_expire = 43200 - ''; - settings = { - log_level = "notice"; - }; - }; - -} diff --git a/modules/private/system/quatresaisons/databases.nix b/modules/private/system/quatresaisons/databases.nix deleted file mode 100644 index f7b27e0..0000000 --- a/modules/private/system/quatresaisons/databases.nix +++ /dev/null @@ -1,147 +0,0 @@ -{ pkgs, config, lib, ... }: -{ - config = let - serverSpecificConfig = config.myEnv.serverSpecific.quatresaisons; - phpLdapAdmin = pkgs.webapps.phpldapadmin.override { config = config.secrets.fullPaths."webapps/tools-ldap"; }; - in { - services.postgresql.enable = true; - services.postgresql.package = pkgs.postgresql_12; - services.postgresql.ensureUsers = [ - { name = "naemon"; } - ]; - secrets.keys = { - "ldap/password" = { - permissions = "0400"; - user = "openldap"; - group = "openldap"; - text = "rootpw ${serverSpecificConfig.ldap_root_pw}"; - }; - "webapps/tools-ldap" = { - user = "wwwrun"; - group = "wwwrun"; - permissions = "0400"; - text = '' - custom->appearance['show_clear_password'] = true; - $config->custom->appearance['hide_template_warning'] = true; - $config->custom->appearance['theme'] = "tango"; - $config->custom->appearance['minimalMode'] = false; - $config->custom->appearance['tree'] = 'AJAXTree'; - - $servers = new Datastore(); - - $servers->newServer('ldap_pla'); - $servers->setValue('server','name','LDAP'); - $servers->setValue('server','host','ldap://localhost'); - $servers->setValue('login','auth_type','cookie'); - $servers->setValue('login','bind_id','${serverSpecificConfig.ldap_phpldapadmin_dn}'); - $servers->setValue('login','bind_pass','${serverSpecificConfig.ldap_phpldapadmin_password}'); - $servers->setValue('appearance','pla_password_hash','ssha'); - $servers->setValue('login','attr','uid'); - $servers->setValue('login','fallback_dn',true); - ''; - }; - }; - - users.users.openldap.extraGroups = [ "keys" ]; - services.openldap = { - enable = true; - dataDir = "/var/lib/openldap"; - urlList = [ "ldap://localhost" ]; - logLevel = "none"; - extraConfig = '' - pidfile /run/slapd/slapd.pid - argsfile /run/slapd/slapd.args - - moduleload back_hdb - backend hdb - ''; - - extraDatabaseConfig = '' - moduleload memberof - overlay memberof - - moduleload syncprov - overlay syncprov - syncprov-checkpoint 100 10 - - index objectClass eq - index uid pres,eq - #index uidMember pres,eq - index mail pres,sub,eq - index cn pres,sub,eq - index sn pres,sub,eq - index dc eq - index member eq - index memberOf eq - - # No one must access that information except root - access to attrs=description - by * none - - access to attrs=entry,uid filter="(uid=*)" - by dn.exact="${serverSpecificConfig.ldap_phpldapadmin_dn}" read - by * break - - access to dn.subtree="ou=users,dc=salle-s,dc=org" - by dn.subtree="ou=services,dc=salle-s,dc=org" read - by * break - - access to * - by self read - by anonymous auth - by * break - ''; - rootpwFile = config.secrets.fullPaths."ldap/password"; - suffix = "dc=salle-s,dc=org"; - rootdn = "cn=root,dc=salle-s,dc=org"; - database = "hdb"; - }; - - services.websites.env.production.modules = [ "proxy_fcgi" ]; - services.websites.env.production.vhostConfs.tools.extraConfig = [ - '' - Alias /ldap "${phpLdapAdmin}/htdocs" - - DirectoryIndex index.php - - SetHandler "proxy:unix:${config.services.phpfpm.pools.ldap.socket}|fcgi://localhost" - - - AllowOverride None - Require all granted - - '' - ]; - services.phpfpm.pools.ldap = { - user = "wwwrun"; - group = "wwwrun"; - settings = - let - basedir = builtins.concatStringsSep ":" [ phpLdapAdmin config.secrets.fullPaths."webapps/tools-ldap" ]; - in { - "listen.owner" = "wwwrun"; - "listen.group" = "wwwrun"; - "pm" = "ondemand"; - "pm.max_children" = "60"; - "pm.process_idle_timeout" = "60"; - - # Needed to avoid clashes in browser cookies (same domain) - "php_value[session.name]" = "LdapPHPSESSID"; - "php_admin_value[open_basedir]" = "${basedir}:/tmp:/var/lib/php/sessions/phpldapadmin"; - "php_admin_value[session.save_path]" = "/var/lib/php/sessions/phpldapadmin"; - }; - phpPackage = pkgs.php72; - }; - system.activationScripts.ldap = { - deps = [ "users" ]; - text = '' - install -m 0755 -o wwwrun -g wwwrun -d /var/lib/php/sessions/phpldapadmin - ''; - }; - systemd.services.phpfpm-ldap = { - after = lib.mkAfter [ "openldap.service" ]; - wants = [ "openldap.service" ]; - }; - }; -} diff --git a/modules/private/system/quatresaisons/landing.yml b/modules/private/system/quatresaisons/landing.yml deleted file mode 100644 index cf4ba87..0000000 --- a/modules/private/system/quatresaisons/landing.yml +++ /dev/null @@ -1,32 +0,0 @@ ---- -# Homepage configuration -# See https://fontawesome.com/icons for icons options - -title: "Websites dashboard" -subtitle: "Salle-S" -footer: false -#footer: '

Created with ❤️ with bulma, vuejs & font awesome // Fork me on

' # set false if you want to hide it. - -# Optional navbar -# links: [] # Allows for navbar (dark mode, layout, and search) without any links -links: [] - -# Services -# First level array represent a group. -# Leave only a "items" key if not using group (group name, icon & tagstyle are optional, section separation will not be displayed). -services: - - name: "Quatramaran" - items: - - name: "Roundcube" - logo: "assets/tools/roundcube.svg" - url: "https://quatramaran.salle-s.org/roundcube/" - - name: "Les dessous de paillasse" - url: "https://dessous-de-paillasse.salle-s.org" - - name: "Quatre Saisons" - items: - - name: "Charte d’utilisation" - icon: "fas fa-scroll" - url: "https://4c.salle-s.org/charte/" - - name: "Nextcloud" - logo: "assets/tools/nextcloud.png" - url: "https://nextcloud.4c.salle-s.org" diff --git a/modules/private/system/quatresaisons/landing_4c.yml b/modules/private/system/quatresaisons/landing_4c.yml deleted file mode 100644 index 0b9f6b6..0000000 --- a/modules/private/system/quatresaisons/landing_4c.yml +++ /dev/null @@ -1,24 +0,0 @@ ---- -# Homepage configuration -# See https://fontawesome.com/icons for icons options - -title: "Websites dashboard" -subtitle: "Quatre saisons" -footer: false -#footer: '

Created with ❤️ with bulma, vuejs & font awesome // Fork me on

' # set false if you want to hide it. - -# Optional navbar -# links: [] # Allows for navbar (dark mode, layout, and search) without any links -links: [] - -# Services -# First level array represent a group. -# Leave only a "items" key if not using group (group name, icon & tagstyle are optional, section separation will not be displayed). -services: - - items: - - name: "Charte d’utilisation" - icon: "fas fa-scroll" - url: "https://4c.salle-s.org/charte/" - - name: "Nextcloud" - logo: "assets/tools/nextcloud.png" - url: "https://nextcloud.4c.salle-s.org" diff --git a/modules/private/system/quatresaisons/nextcloud.nix b/modules/private/system/quatresaisons/nextcloud.nix deleted file mode 100644 index 89d69d5..0000000 --- a/modules/private/system/quatresaisons/nextcloud.nix +++ /dev/null @@ -1,141 +0,0 @@ -{ lib, pkgs, config, ... }: -let - nextcloud = pkgs.webapps.nextcloud.withApps (a: [ - a.apporder a.audioplayer a.bookmarks a.calendar a.carnet a.circles - a.contacts a.cookbook a.deck a.extract a.files_markdown - a.files_readmemd a.flowupload a.gpxedit a.gpxpod a.keeweb a.maps - a.metadata a.music a.notes a.ocsms a.passman a.polls a.spreed - a.social a.tasks - ]); - varDir = "/var/lib/nextcloud"; - phpFpm = rec { - basedir = builtins.concatStringsSep ":" ([ nextcloud varDir ] ++ nextcloud.apps); - pool = { - "listen.owner" = "wwwrun"; - "listen.group" = "wwwrun"; - "pm" = "ondemand"; - "pm.max_children" = "60"; - "pm.process_idle_timeout" = "60"; - - "php_admin_value[output_buffering]" = "0"; - "php_admin_value[max_execution_time]" = "1800"; - "php_admin_value[zend_extension]" = "opcache"; - #already enabled by default? - #"php_value[opcache.enable]" = "1"; - "php_value[opcache.enable_cli]" = "1"; - "php_value[opcache.interned_strings_buffer]" = "8"; - "php_value[opcache.max_accelerated_files]" = "10000"; - "php_value[opcache.memory_consumption]" = "128"; - "php_value[opcache.save_comments]" = "1"; - "php_value[opcache.revalidate_freq]" = "1"; - "php_admin_value[memory_limit]" = "512M"; - - "php_admin_value[open_basedir]" = "/run/wrappers/bin/sendmail:${basedir}:/proc/meminfo:/dev/urandom:/proc/self/fd:/tmp"; - "php_admin_value[session.save_path]" = "${varDir}/phpSessions"; - }; - }; -in { - config = { - services.postgresql.ensureDatabases = [ "nextcloud" ]; - services.postgresql.ensureUsers = [ - { name = "nextcloud"; ensurePermissions = { "DATABASE nextcloud" = "ALL PRIVILEGES"; }; } - ]; - services.websites.env.production.modules = [ "proxy_fcgi" ]; - - services.websites.env.production.vhostConfs.cloud = { - certName = "quatresaisons"; - addToCerts = true; - hosts = ["nextcloud.4c.salle-s.org" ]; - root = nextcloud; - extraConfig = - [ - '' - SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 - - AcceptPathInfo On - DirectoryIndex index.php - Options FollowSymlinks - Require all granted - AllowOverride all - - - Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload" - - - CGIPassAuth on - SetHandler "proxy:unix:${config.services.phpfpm.pools.nextcloud.socket}|fcgi://localhost" - - - - '' - ]; - }; - services.websites.env.production.vhostConfs.cloud_wait = let - content = pkgs.writeText "contenu" '' - nextcloud est un service qui a besoin de pérennité du nom - "nextcloud.salle-s.org", on va peut-etre y arriver, c'est une - question de jours, voir le message informatique.internet:8017 - ''; - in { - certName = "quatresaisons"; - addToCerts = true; - hosts = ["nextcloud.salle-s.org" ]; - root = content; - extraConfig = - [ - '' - Alias / ${content} - '' - ]; - }; - - users.users.root.packages = let - occ = pkgs.writeScriptBin "nextcloud-occ" '' - #! ${pkgs.stdenv.shell} - cd ${nextcloud} - NEXTCLOUD_CONFIG_DIR="${nextcloud}/config" \ - exec \ - sudo -E -u wwwrun ${pkgs.php74}/bin/php \ - -c ${pkgs.php74}/etc/php.ini \ - occ $* - ''; - in [ occ ]; - - system.activationScripts.nextcloud = { - deps = [ "users" ]; - text = let - confs = lib.attrsets.mapAttrs (n: v: pkgs.writeText "${n}.json" (builtins.toJSON v)) nextcloud.otherConfig; - in - '' - install -m 0755 -o wwwrun -g wwwrun -d ${varDir} - install -m 0755 -o wwwrun -g wwwrun -d ${varDir}/config - install -m 0750 -o wwwrun -g wwwrun -d ${varDir}/phpSessions - ${builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (n: v: - "install -D -m 0644 -o wwwrun -g wwwrun -T ${v} ${varDir}/config/${n}.json" - ) confs)} - ''; - }; - services.phpfpm.pools.nextcloud = { - user = "wwwrun"; - group = "wwwrun"; - settings = phpFpm.pool; - phpPackage = pkgs.php74.withExtensions({ enabled, all }: enabled ++ [ all.redis all.apcu all.opcache all.imagick ]); - }; - - services.cron = { - enable = true; - systemCronJobs = let - script = pkgs.writeScriptBin "nextcloud-cron" '' - #! ${pkgs.stdenv.shell} - export LOCALE_ARCHIVE=/run/current-system/sw/lib/locale/locale-archive - export PATH=/run/wrappers/bin:$PATH - ${pkgs.php74}/bin/php -d memory_limit=512M -f ${nextcloud}/cron.php - ''; - in [ - '' - */15 * * * * wwwrun ${script}/bin/nextcloud-cron - '' - ]; - }; - }; -} diff --git a/modules/private/tasks/default.nix b/modules/private/tasks/default.nix deleted file mode 100644 index 6480255..0000000 --- a/modules/private/tasks/default.nix +++ /dev/null @@ -1,355 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.tasks; - server_vardir = config.services.taskserver.dataDir; - fqdn = "task.immae.eu"; - user = config.services.taskserver.user; - env = config.myEnv.tools.task; - group = config.services.taskserver.group; - taskserver-user-certs = pkgs.runCommand "taskserver-user-certs" {} '' - mkdir -p $out/bin - cat > $out/bin/taskserver-user-certs <<"EOF" - #!/usr/bin/env bash - - user=$1 - - silent_certtool() { - if ! output="$("${pkgs.gnutls.bin}/bin/certtool" "$@" 2>&1)"; then - echo "GNUTLS certtool invocation failed with output:" >&2 - echo "$output" >&2 - fi - } - - silent_certtool -p \ - --bits 4096 \ - --outfile "${server_vardir}/userkeys/$user.key.pem" - ${pkgs.gnused}/bin/sed -i -n -e '/^-----BEGIN RSA PRIVATE KEY-----$/,$p' "${server_vardir}/userkeys/$user.key.pem" - - silent_certtool -c \ - --template "${pkgs.writeText "taskserver-ca.template" '' - tls_www_client - encryption_key - signing_key - expiration_days = 3650 - ''}" \ - --load-ca-certificate "${server_vardir}/keys/ca.cert" \ - --load-ca-privkey "${server_vardir}/keys/ca.key" \ - --load-privkey "${server_vardir}/userkeys/$user.key.pem" \ - --outfile "${server_vardir}/userkeys/$user.cert.pem" - EOF - chmod a+x $out/bin/taskserver-user-certs - patchShebangs $out/bin/taskserver-user-certs - ''; - taskwarrior-web = pkgs.webapps.taskwarrior-web; - socketsDir = "/run/taskwarrior-web"; - varDir = "/var/lib/taskwarrior-web"; - taskwebPages = let - uidPages = lib.attrsets.zipAttrs ( - lib.lists.flatten - (lib.attrsets.mapAttrsToList (k: c: map (v: { "${v}" = k; }) c.uid) env.taskwarrior-web) - ); - pages = lib.attrsets.mapAttrs (uid: items: - if lib.lists.length items == 1 then - '' - - - - - - - '' - else - '' - - - To-do list disponibles - - - - -
    - ${builtins.concatStringsSep "\n" (map (item: "
  • ${item}
  • ") items)} -
- - - '' - ) uidPages; - in - pkgs.runCommand "taskwerver-pages" {} '' - mkdir -p $out/ - ${builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (k: v: "cp ${pkgs.writeText k v} $out/${k}.html") pages)} - echo "Please login" > $out/index.html - ''; -in { - options.myServices.tasks = { - enable = lib.mkEnableOption "my tasks service"; - }; - - config = lib.mkIf cfg.enable { - secrets.keys = { - "webapps/tools-taskwarrior-web" = { - user = "wwwrun"; - group = "wwwrun"; - permissions = "0400"; - text = '' - SetEnv TASKD_HOST "${fqdn}:${toString config.services.taskserver.listenPort}" - SetEnv TASKD_VARDIR "${server_vardir}" - SetEnv TASKD_LDAP_HOST "ldaps://${env.ldap.host}" - SetEnv TASKD_LDAP_DN "${env.ldap.dn}" - SetEnv TASKD_LDAP_PASSWORD "${env.ldap.password}" - SetEnv TASKD_LDAP_BASE "${env.ldap.base}" - SetEnv TASKD_LDAP_FILTER "${env.ldap.filter}" - ''; - }; - } // (lib.mapAttrs' (name: userConfig: lib.nameValuePair "webapps/tools-taskwarrior/${name}-taskrc" { - inherit user group; - permissions = "0400"; - text = let - credentials = "${userConfig.org}/${name}/${userConfig.key}"; - dateFormat = userConfig.date; - in '' - data.location=${varDir}/${name} - taskd.certificate=${server_vardir}/userkeys/taskwarrior-web.cert.pem - taskd.key=${server_vardir}/userkeys/taskwarrior-web.key.pem - # IdenTrust DST Root CA X3 - # obtained here: https://letsencrypt.org/fr/certificates/ - taskd.ca=${pkgs.writeText "ca.cert" '' - -----BEGIN CERTIFICATE----- - MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw - TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh - cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 - WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu - ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY - MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc - h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ - 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U - A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW - T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH - B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC - B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv - KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn - OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn - jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw - qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI - rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV - HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq - hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL - ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ - 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK - NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 - ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur - TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC - jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc - oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq - 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA - mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d - emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= - -----END CERTIFICATE-----''} - taskd.server=${fqdn}:${toString config.services.taskserver.listenPort} - taskd.credentials=${credentials} - dateformat=${dateFormat} - ''; - }) env.taskwarrior-web); - services.websites.env.tools.watchPaths = [ config.secrets.fullPaths."webapps/tools-taskwarrior-web" ]; - services.websites.env.tools.modules = [ "proxy_fcgi" "sed" ]; - services.websites.env.tools.vhostConfs.task = { - certName = "eldiron"; - addToCerts = true; - hosts = [ "task.immae.eu" ]; - root = ./www; - extraConfig = [ '' - - DirectoryIndex index.php - Use LDAPConnect - Require ldap-group cn=users,cn=taskwarrior,ou=services,dc=immae,dc=eu - - SetHandler "proxy:unix:${config.services.phpfpm.pools.tasks.socket}|fcgi://localhost" - - Include ${config.secrets.fullPaths."webapps/tools-taskwarrior-web"} - - '' - '' - - ProxyPass "unix://${socketsDir}/%{folderName}.sock|http://localhost-%{folderName}/" - ProxyPassReverse "unix://${socketsDir}/%{folderName}.sock|http://localhost-%{folderName}/" - ProxyPassReverse http://${fqdn}/ - - SetOutputFilter Sed - OutputSed "s|/ajax|/taskweb/%{folderName}/ajax|g" - OutputSed "s|\([^x]\)/tasks|\1/taskweb/%{folderName}/tasks|g" - OutputSed "s|\([^x]\)/projects|\1/taskweb/%{folderName}/projects|g" - OutputSed "s|http://${fqdn}/|/taskweb/%{folderName}/|g" - OutputSed "s|/img/relax.jpg|/taskweb/%{folderName}/img/relax.jpg|g" - - '' - '' - Alias /taskweb ${taskwebPages} - - DirectoryIndex index.html - Require all granted - - - RewriteEngine on - RewriteRule ^/taskweb$ /taskweb/ [R=301,L] - RedirectMatch permanent ^/taskweb/([^/]+)$ /taskweb/$1/ - - RewriteCond %{LA-U:REMOTE_USER} !="" - RewriteCond ${taskwebPages}/%{LA-U:REMOTE_USER}.html -f - RewriteRule ^/taskweb/?$ ${taskwebPages}/%{LA-U:REMOTE_USER}.html [L] - - - Use LDAPConnect - Require ldap-group cn=users,cn=taskwarrior,ou=services,dc=immae,dc=eu - - '' - ] ++ (lib.attrsets.mapAttrsToList (k: v: '' - - ${builtins.concatStringsSep "\n" (map (uid: "Require ldap-attribute uid=${uid}") v.uid)} - - Use Taskwarrior ${k} - - '') env.taskwarrior-web); - }; - services.phpfpm.pools = { - tasks = { - user = user; - group = group; - settings = { - "listen.owner" = "wwwrun"; - "listen.group" = "wwwrun"; - "pm" = "dynamic"; - "pm.max_children" = "60"; - "pm.start_servers" = "2"; - "pm.min_spare_servers" = "1"; - "pm.max_spare_servers" = "10"; - - # Needed to avoid clashes in browser cookies (same domain) - "php_value[session.name]" = "TaskPHPSESSID"; - "php_admin_value[open_basedir]" = "${./www}:/tmp:${server_vardir}:/etc/profiles/per-user/${user}/bin/"; - }; - phpEnv = { - PATH = "/etc/profiles/per-user/${user}/bin"; - }; - phpPackage = pkgs.php72; - }; - }; - - security.acme.certs."task" = config.myServices.certificates.certConfig // { - inherit user group; - domain = fqdn; - postRun = '' - systemctl restart taskserver.service - ''; - }; - - users.users.${user} = { - extraGroups = [ "keys" ]; - packages = [ taskserver-user-certs ]; - }; - - system.activationScripts.taskserver = { - deps = [ "users" ]; - text = '' - install -m 0750 -o ${user} -g ${group} -d ${server_vardir} - install -m 0750 -o ${user} -g ${group} -d ${server_vardir}/userkeys - install -m 0750 -o ${user} -g ${group} -d ${server_vardir}/keys - - if [ ! -e "${server_vardir}/keys/ca.key" ]; then - silent_certtool() { - if ! output="$("${pkgs.gnutls.bin}/bin/certtool" "$@" 2>&1)"; then - echo "GNUTLS certtool invocation failed with output:" >&2 - echo "$output" >&2 - fi - } - - silent_certtool -p \ - --bits 4096 \ - --outfile "${server_vardir}/keys/ca.key" - - silent_certtool -s \ - --template "${pkgs.writeText "taskserver-ca.template" '' - cn = ${fqdn} - expiration_days = -1 - cert_signing_key - ca - ''}" \ - --load-privkey "${server_vardir}/keys/ca.key" \ - --outfile "${server_vardir}/keys/ca.cert" - - chown :${group} "${server_vardir}/keys/ca.key" - chmod g+r "${server_vardir}/keys/ca.key" - fi - ''; - }; - - services.taskserver = { - enable = true; - allowedClientIDs = [ "^task [2-9]" "^Mirakel [1-9]" ]; - inherit fqdn; - listenHost = "::"; - pki.manual.ca.cert = "${server_vardir}/keys/ca.cert"; - pki.manual.server.cert = "${config.security.acme.certs.task.directory}/fullchain.pem"; - pki.manual.server.crl = "${config.security.acme.certs.task.directory}/invalid.crl"; - pki.manual.server.key = "${config.security.acme.certs.task.directory}/key.pem"; - requestLimit = 104857600; - }; - - system.activationScripts.taskwarrior-web = { - deps = [ "users" ]; - text = '' - if [ ! -f ${server_vardir}/userkeys/taskwarrior-web.cert.pem ]; then - ${taskserver-user-certs}/bin/taskserver-user-certs taskwarrior-web - chown taskd:taskd ${server_vardir}/userkeys/taskwarrior-web.cert.pem ${server_vardir}/userkeys/taskwarrior-web.key.pem - fi - ''; - }; - - systemd.slices.taskwarrior = { - description = "Taskwarrior slice"; - }; - - systemd.services = (lib.attrsets.mapAttrs' (name: userConfig: - lib.attrsets.nameValuePair "taskwarrior-web-${name}" { - description = "Taskwarrior webapp for ${name}"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - path = [ pkgs.taskwarrior ]; - - environment.TASKRC = config.secrets.fullPaths."webapps/tools-taskwarrior/${name}-taskrc"; - environment.BUNDLE_PATH = "${taskwarrior-web.gems}/${taskwarrior-web.gems.ruby.gemPath}"; - environment.BUNDLE_GEMFILE = "${taskwarrior-web.gems.confFiles}/Gemfile"; - environment.LC_ALL = "fr_FR.UTF-8"; - - script = '' - exec ${taskwarrior-web.gems}/${taskwarrior-web.gems.ruby.gemPath}/bin/bundle exec thin start -R config.ru -S ${socketsDir}/${name}.sock - ''; - - serviceConfig = { - Slice = "taskwarrior.slice"; - User = user; - PrivateTmp = true; - Restart = "always"; - TimeoutSec = 60; - Type = "simple"; - WorkingDirectory = taskwarrior-web; - StateDirectoryMode = 0750; - StateDirectory = assert lib.strings.hasPrefix "/var/lib/" varDir; - (lib.strings.removePrefix "/var/lib/" varDir + "/${name}"); - RuntimeDirectoryPreserve = "yes"; - RuntimeDirectory = assert lib.strings.hasPrefix "/run/" socketsDir; - lib.strings.removePrefix "/run/" socketsDir; - }; - - unitConfig.RequiresMountsFor = varDir; - }) env.taskwarrior-web) // { - taskserver-ca.postStart = '' - chown :${group} "${server_vardir}/keys/ca.key" - chmod g+r "${server_vardir}/keys/ca.key" - ''; - taskserver-ca.serviceConfig.Slice = "taskwarrior.slice"; - taskserver-init.serviceConfig.Slice = "taskwarrior.slice"; - taskserver.serviceConfig.Slice = "taskwarrior.slice"; - }; - - }; -} diff --git a/modules/private/tasks/www/index.php b/modules/private/tasks/www/index.php deleted file mode 100644 index 49ccd24..0000000 --- a/modules/private/tasks/www/index.php +++ /dev/null @@ -1,168 +0,0 @@ - $value) { - if ($key !== "count") { - $entries[] = explode(":", $value); - } -} - -if (isset($_GET["file"])) { - $basecert = $vardir . "/userkeys/" . $ldap_user; - if (!file_exists($basecert . ".cert.pem")) { - exec("taskserver-user-certs $ldap_user"); - } - $certificate = file_get_contents($basecert . ".cert.pem"); - $cert_key = file_get_contents($basecert . ".key.pem"); - - // IdenTrust DST Root CA X3 - // obtained here: https://letsencrypt.org/fr/certificates/ - $server_cert = "-----BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw -TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh -cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 -WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu -ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc -h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ -0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U -A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW -T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH -B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC -B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv -KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn -OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn -jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw -qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI -rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq -hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL -ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ -3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK -NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 -ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur -TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC -jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc -oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq -4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA -mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d -emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= ------END CERTIFICATE-----"; - - $file = $_GET["file"]; - switch($file) { - case "ca.cert.pem": - $content = $server_cert; - $name = "ca.cert.pem"; - $type = "application/x-x509-ca-cert"; - break; - case "cert.pem": - $content = $certificate; - $name = $ldap_user . ".cert.pem"; - $type = "application/x-x509-ca-cert"; - break; - case "key.pem": - $content = $cert_key; - $name = $ldap_user . ".key.pem"; - $type = "application/x-x509-ca-cert"; - break; - case "mirakel"; - foreach ($entries as $entry) { - list($org, $user, $key) = $entry; - if ($key == $_GET["key"]) { break; } - } - $name = $user . ".mirakel"; - $type = "text/plain"; - $content = "username: $user -org: $org -user key: $key -server: $host -client.cert: -$certificate -Client.key: -$cert_key -ca.cert: -$server_cert -"; - break; - default: - die("invalid file name"); - break; - } - - header("Content-Type: $type"); - header('Content-Disposition: attachment; filename="' . $name . '"'); - header('Content-Transfer-Encoding: binary'); - header('Accept-Ranges: bytes'); - header('Cache-Control: private'); - header('Pragma: private'); - echo $content; - exit; -} -?> - -
- Taskwarrior configuration -
- - -For command line interface, download the files, put them near your Taskwarrior -configuration files, and add that to your Taskwarrior configuration: -
-taskd.certificate=/path/to/.cert.pem
-taskd.key=/path/to/.key.pem
-taskd.server=
- 1) {
-  echo "# Chose one of them\n";
-  foreach($entries as $entry) {
-    list($org, $user, $key) = $entry;
-    echo "# taskd.credentials=$org/$user/$key\n";
-  }
-} else { ?>
-taskd.credentials=//
-
-taskd.ca=/path/to/ca.cert.pem
-
-For Mirakel, download and import the file: - -For Android Taskwarrior app, see instructions here. - - - diff --git a/modules/private/vpn/default.nix b/modules/private/vpn/default.nix deleted file mode 100644 index d4b197d..0000000 --- a/modules/private/vpn/default.nix +++ /dev/null @@ -1,65 +0,0 @@ -{ config, pkgs, lib, ... }: -let - cfg = config.myServices.vpn; -in -{ - options.myServices = { - vpn.enable = lib.mkEnableOption "Enable vpn service"; - }; - - config = lib.mkIf cfg.enable { - secrets.keys = { - "tinc/key.priv" = { - user = "root"; - group = "root"; - permissions = "0400"; - text = config.myEnv.vpn.eldiron.privateKey; - }; - "tinc/key.pub" = { - user = "root"; - group = "root"; - permissions = "0400"; - text = config.myEnv.vpn.eldiron.publicKey; - }; - }; - networking.firewall.allowedTCPPorts = [ 655 1194 ]; - system.activationScripts.tinc = let - configFiles = pkgs.runCommand "tinc-files" { - mainInterface = "eth0"; - hostName = "ImmaeEu"; - network = "Immae"; - keyFile = config.secrets.fullPaths."tinc/key.priv"; - } '' - mkdir -p $out - for i in ${./tinc}/*; do - substituteAll $i $out/$(basename $i) - done - ''; - in '' - install -m750 -o root -g root -d /var/lib/tinc/ /var/lib/tinc/Immae - install -m700 -o root -g root -t /var/lib/tinc/Immae ${configFiles}/{host-*,tinc-*} - install -m400 -o root -g root -t /var/lib/tinc/Immae ${configFiles}/tinc.conf - if [ ! -d /var/lib/tinc/Immae/hosts ]; then - ${pkgs.git}/bin/git clone -b master https://git.immae.eu/perso/Immae/Config/tinc/hosts /var/lib/tinc/Immae/hosts - fi - ''; - - systemd.slices.tinc = { - description = "Tinc slice"; - }; - - systemd.services.tinc-Immae = { - description = "Tinc Daemon - Immae"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - path = [ pkgs.tinc pkgs.bashInteractive pkgs.iproute pkgs.gnused pkgs.gawk pkgs.git pkgs.glibc ]; - serviceConfig = { - Slice = "tinc.slice"; - Type = "simple"; - Restart = "always"; - RestartSec = "3"; - ExecStart = "${pkgs.tinc}/bin/tincd -d1 -D -c /var/lib/tinc/Immae --pidfile /run/tinc.Immae.pid"; - }; - }; - }; -} diff --git a/modules/private/vpn/tinc/host-down b/modules/private/vpn/tinc/host-down deleted file mode 100755 index 1e79bd3..0000000 --- a/modules/private/vpn/tinc/host-down +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -SUBDOMAIN=$(echo "$NODE" | sed -e "s/\([A-Z][a-z0-9]*\)/\L\1 /g;" | awk '{ for (i=NF; i>1; i--) printf("%s.",$i); print $1; }') -NODEIPS=`getent hosts ${SUBDOMAIN}.immae.eu | cut -d' ' -f1 | tr "\\n" ' '` -for NODEIP in $NODEIPS; do - ip neigh del proxy $NODEIP dev @mainInterface@ -done diff --git a/modules/private/vpn/tinc/host-up b/modules/private/vpn/tinc/host-up deleted file mode 100755 index 2f7cee2..0000000 --- a/modules/private/vpn/tinc/host-up +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -SUBDOMAIN=$(echo "$NODE" | sed -e "s/\([A-Z][a-z0-9]*\)/\L\1 /g;" | awk '{ for (i=NF; i>1; i--) printf("%s.",$i); print $1; }') -while [ -z "$NODEIPS" ]; do - NODEIPS=`getent hosts ${SUBDOMAIN}.immae.eu | cut -d' ' -f1 | tr "\\n" ' '` - sleep 5 -done -for NODEIP in $NODEIPS; do - ip neigh add proxy $NODEIP dev @mainInterface@ -done -(cd /var/lib/tinc/@network@/hosts && git pull -q origin master) || true diff --git a/modules/private/vpn/tinc/tinc-down b/modules/private/vpn/tinc/tinc-down deleted file mode 100755 index 1cc45c0..0000000 --- a/modules/private/vpn/tinc/tinc-down +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -# This file closes down the tap device. - -echo 0 > /proc/sys/net/ipv6/conf/@mainInterface@/proxy_ndp -echo 0 > /proc/sys/net/ipv6/conf/all/forwarding - -GWIP=`getent hosts gw.vpn.immae.eu | head -n1 | cut -d' ' -f1` - -ip neigh del proxy $GWIP dev eth0 - -ip -6 addr del $GWIP/96 dev $INTERFACE -ip -6 link set $INTERFACE down diff --git a/modules/private/vpn/tinc/tinc-up b/modules/private/vpn/tinc/tinc-up deleted file mode 100755 index 26c1ec3..0000000 --- a/modules/private/vpn/tinc/tinc-up +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -echo 1 > /proc/sys/net/ipv6/conf/@mainInterface@/proxy_ndp -echo 1 > /proc/sys/net/ipv6/conf/all/forwarding - -SUBNET=`getent hosts sn.vpn.immae.eu | head -n1 | cut -d' ' -f1` -GWIP=`getent hosts gw.vpn.immae.eu | head -n1 | cut -d' ' -f1` - -ip -6 link set $INTERFACE up mtu 1280 txqueuelen 1000 - -ip -6 addr add $GWIP/96 dev $INTERFACE -ip -6 route add $SUBNET/80 dev $INTERFACE - -ip neigh add proxy $GWIP dev @mainInterface@ diff --git a/modules/private/vpn/tinc/tinc.conf b/modules/private/vpn/tinc/tinc.conf deleted file mode 100644 index 7a4f103..0000000 --- a/modules/private/vpn/tinc/tinc.conf +++ /dev/null @@ -1,11 +0,0 @@ -BindToAddress = * 655 -BindToAddress = * 1194 - -Name = @hostName@ -Interface = vpn6 - -Mode = switch - -Device = /dev/net/tun -GraphDumpFile = /var/lib/tinc/@network@/tinc_graph -PrivateKeyFile = @keyFile@ diff --git a/modules/private/websites/_www/googleb6d69446ff4ca3e5.html b/modules/private/websites/_www/googleb6d69446ff4ca3e5.html deleted file mode 100644 index ff6dbf3..0000000 --- a/modules/private/websites/_www/googleb6d69446ff4ca3e5.html +++ /dev/null @@ -1 +0,0 @@ -google-site-verification: googleb6d69446ff4ca3e5.html \ No newline at end of file diff --git a/modules/private/websites/_www/index.htm b/modules/private/websites/_www/index.htm deleted file mode 100644 index 0274251..0000000 --- a/modules/private/websites/_www/index.htm +++ /dev/null @@ -1,9 +0,0 @@ - - - - Hello World HTML - - -

It works!

- - diff --git a/modules/private/websites/_www/maintenance_immae.html b/modules/private/websites/_www/maintenance_immae.html deleted file mode 100644 index 90f265f..0000000 --- a/modules/private/websites/_www/maintenance_immae.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - Maintenance - - - - - -
-

Erreur serveur ou maintenance en cours !

-
-

Une mise à jour ou une opération de maintenance est en cours sur le site. Retentez dans quelques instants ou patientez, la page se rechargera automatiquement.

-
-
- -
-

Server error or website in maintenance!

-
-

An update or a maintenance is on track on the website. Please try again in a few seconds or wait, the page will reload automatically.

-
-
- - diff --git a/modules/private/websites/_www/nossl.html b/modules/private/websites/_www/nossl.html deleted file mode 100644 index 4401a80..0000000 --- a/modules/private/websites/_www/nossl.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - No SSL site - - -

No SSL on this site

-

Use for wifi networks with login page that doesn't work well with - https.

- - diff --git a/modules/private/websites/bakeer/cloud.nix b/modules/private/websites/bakeer/cloud.nix deleted file mode 100644 index bf78317..0000000 --- a/modules/private/websites/bakeer/cloud.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.websites.bakeer.cloud; - nextcloud = config.myServices.tools.cloud.farm.package; -in { - options.myServices.websites.bakeer.cloud.enable = lib.mkEnableOption "enable Bakeer’s cloud"; - - config = lib.mkIf cfg.enable { - myServices.tools.cloud.farm.instances = [ "bakeer" ]; - services.websites.env.production.modules = [ "proxy_fcgi" ]; - services.websites.env.production.vhostConfs.bakeer = { - certName = "bakeer"; - certMainHost = "bakeer.immae.eu"; - addToCerts = true; - hosts = ["bakeer.immae.eu" "baxsolution.immae.eu"]; - root = nextcloud; - extraConfig = [ - config.myServices.tools.cloud.farm.vhosts.bakeer - ]; - }; - }; -} - diff --git a/modules/private/websites/capitaines/discourse_static/discourse.png b/modules/private/websites/capitaines/discourse_static/discourse.png deleted file mode 100644 index 91ce42d..0000000 Binary files a/modules/private/websites/capitaines/discourse_static/discourse.png and /dev/null differ diff --git a/modules/private/websites/capitaines/discourse_static/index.html b/modules/private/websites/capitaines/discourse_static/index.html deleted file mode 100644 index 4c2ead0..0000000 --- a/modules/private/websites/capitaines/discourse_static/index.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - This instance is now closed - Discourse - - - -
- Discourse capitaines -

Sorry, this instance is closed now.

-
- - diff --git a/modules/private/websites/capitaines/landing_pages.nix b/modules/private/websites/capitaines/landing_pages.nix deleted file mode 100644 index edba8b9..0000000 --- a/modules/private/websites/capitaines/landing_pages.nix +++ /dev/null @@ -1,57 +0,0 @@ -{ lib, config, ... }: -let - cfg = config.myServices.websites.capitaines.landing_pages; - certName = "capitaines"; - domain = "capitaines.fr"; -in { - options.myServices.websites.capitaines.landing_pages.enable = lib.mkEnableOption "enable Capitaines's landing pages"; - - config = lib.mkIf cfg.enable { - services.websites.env.production.vhostConfs.capitaines_mastodon = rec { - inherit certName; - certMainHost = "mastodon.${domain}"; - hosts = [ certMainHost ]; - root = ./mastodon_static; - extraConfig = [ - '' - ErrorDocument 404 /index.html - - DirectoryIndex index.html - Options Indexes FollowSymLinks MultiViews Includes - Require all granted - - '' - ]; - }; - - services.websites.env.production.vhostConfs.capitaines_discourse = { - inherit certName; - addToCerts = true; - hosts = [ "discourse.${domain}" ]; - root = ./discourse_static; - extraConfig = [ - '' - ErrorDocument 404 /index.html - - DirectoryIndex index.html - Options Indexes FollowSymLinks MultiViews Includes - Require all granted - - '' - ]; - }; - - services.websites.env.production.vhostConfs.capitaines = { - inherit certName; - addToCerts = true; - hosts = [ domain ]; - root = ../_www; - extraConfig = [ '' - - DirectoryIndex index.htm - Require all granted - - '' ]; - }; - }; -} diff --git a/modules/private/websites/capitaines/mastodon_static/index.html b/modules/private/websites/capitaines/mastodon_static/index.html deleted file mode 100644 index fae4152..0000000 --- a/modules/private/websites/capitaines/mastodon_static/index.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - This instance is now closed - Mastodon - - - -
- Mastodon -

Sorry, this instance is closed now.

-
- - diff --git a/modules/private/websites/capitaines/mastodon_static/oops.png b/modules/private/websites/capitaines/mastodon_static/oops.png deleted file mode 100644 index 0abddad..0000000 Binary files a/modules/private/websites/capitaines/mastodon_static/oops.png and /dev/null differ diff --git a/modules/private/websites/chloe/app/default.nix b/modules/private/websites/chloe/app/default.nix deleted file mode 100644 index d23e3e0..0000000 --- a/modules/private/websites/chloe/app/default.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ environment ? "prod" -, varDir ? "/var/lib/chloe_${environment}" -, spip, stdenv, sassc, sources }: -let - siteDir = stdenv.mkDerivation { - version = sources.websites-chloe-app.version; - pname = "chloe"; - src = sources.websites-chloe-app; - buildPhase = '' - make - ''; - installPhase = '' - cp -a . $out - ''; - buildInputs = [ sassc ]; - }; -in -spip.override { - ldap = true; - siteName = "chloe"; - inherit environment siteDir varDir; -} diff --git a/modules/private/websites/chloe/config/chmod.php b/modules/private/websites/chloe/config/chmod.php deleted file mode 100644 index aae16cd..0000000 --- a/modules/private/websites/chloe/config/chmod.php +++ /dev/null @@ -1,4 +0,0 @@ - \ No newline at end of file diff --git a/modules/private/websites/chloe/config/connect.php b/modules/private/websites/chloe/config/connect.php deleted file mode 100644 index 18b0933..0000000 --- a/modules/private/websites/chloe/config/connect.php +++ /dev/null @@ -1,15 +0,0 @@ - diff --git a/modules/private/websites/chloe/config/ldap.php b/modules/private/websites/chloe/config/ldap.php deleted file mode 100644 index 825b7ed..0000000 --- a/modules/private/websites/chloe/config/ldap.php +++ /dev/null @@ -1,9 +0,0 @@ - array('sAMAccountName','uid','login','userid','cn','sn'),'nom' => 'cn','email' => 'mail','bio' => 'description',); -$GLOBALS['ldap_search'] = getenv("SPIP_LDAP_SEARCH"); -?> diff --git a/modules/private/websites/chloe/integration.nix b/modules/private/websites/chloe/integration.nix deleted file mode 100644 index 533568e..0000000 --- a/modules/private/websites/chloe/integration.nix +++ /dev/null @@ -1,104 +0,0 @@ -{ lib, pkgs, config, ... }: -let - apacheUser = config.services.httpd.Inte.user; - apacheGroup = config.services.httpd.Inte.group; - ccfg = config.myEnv.websites.chloe.integration; - webRoot = "/var/lib/ftp/immae/chloe"; - varDir = "/var/lib/ftp/immae/chloe_var"; - cfg = config.myServices.websites.chloe.integration; -in { - options.myServices.websites.chloe.integration.enable = lib.mkEnableOption "enable Chloe's website in integration"; - - config = lib.mkIf cfg.enable { - secrets.keys."websites/chloe/integration" = { - user = apacheUser; - group = apacheGroup; - permissions = "0400"; - text = '' - SetEnv SPIP_CONFIG_DIR "${./config}" - SetEnv SPIP_VAR_DIR "${varDir}" - SetEnv SPIP_SITE "chloe-dev" - SetEnv SPIP_LDAP_BASE "dc=immae,dc=eu" - SetEnv SPIP_LDAP_HOST "ldaps://ldap.immae.eu" - SetEnv SPIP_LDAP_SEARCH_DN "${ccfg.ldap.dn}" - SetEnv SPIP_LDAP_SEARCH_PW "${ccfg.ldap.password}" - SetEnv SPIP_LDAP_SEARCH "${ccfg.ldap.filter}" - SetEnv SPIP_MYSQL_HOST "${ccfg.mysql.host}" - SetEnv SPIP_MYSQL_PORT "${ccfg.mysql.port}" - SetEnv SPIP_MYSQL_DB "${ccfg.mysql.database}" - SetEnv SPIP_MYSQL_USER "${ccfg.mysql.user}" - SetEnv SPIP_MYSQL_PASSWORD "${ccfg.mysql.password}" - ''; - }; - systemd.services.phpfpm-chloe_integration.after = lib.mkAfter [ "mysql.service" ]; - systemd.services.phpfpm-chloe_integration.wants = [ "mysql.service" ]; - services.phpfpm.pools.chloe_integration = { - user = config.services.httpd.Inte.user; - group = config.services.httpd.Inte.group; - settings = { - "listen.owner" = apacheUser; - "listen.group" = apacheGroup; - "php_admin_value[upload_max_filesize]" = "20M"; - "php_admin_value[post_max_size]" = "20M"; - # "php_admin_flag[log_errors]" = "on"; - "php_admin_value[open_basedir]" = "${../../../../pkgs/webapps/spip/spip_mes_options.php}:${./config}:${webRoot}:${varDir}:/tmp"; - "php_admin_value[session.save_path]" = "${varDir}/phpSessions"; - "pm" = "ondemand"; - "pm.max_children" = "5"; - "pm.process_idle_timeout" = "60"; - }; - phpPackage = pkgs.php72; - }; - system.activationScripts.chloe_integration = { - deps = [ "wrappers" ]; - text = '' - install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${varDir} ${varDir}/IMG ${varDir}/tmp ${varDir}/local - install -m 0750 -o ${apacheUser} -g ${apacheGroup} -d ${varDir}/phpSessions - ''; - }; - services.websites.env.integration.modules = [ "proxy_fcgi" ]; - services.websites.env.integration.vhostConfs.chloe_integration = { - certName = "integration"; - addToCerts = true; - hosts = ["test.chc.immae.dev" ]; - root = webRoot; - extraConfig = [ - '' - Include ${config.secrets.fullPaths."websites/chloe/integration"} - - RewriteEngine On - - - SetHandler "proxy:unix:${config.services.phpfpm.pools.chloe_integration.socket}|fcgi://localhost" - - - - DirectoryIndex index.php index.htm index.html - Options -Indexes +FollowSymLinks +MultiViews +Includes - Include ${webRoot}/htaccess.txt - - AllowOverride AuthConfig FileInfo Limit - Require all granted - - - - Require all denied - - - - Require all denied - - - - Use LDAPConnect - Require ldap-group cn=chc.immae.dev,cn=httpd,ou=services,dc=immae,dc=eu - ErrorDocument 401 "" - - '' - ]; - }; - services.websites.env.integration.watchPaths = [ - config.secrets.fullPaths."websites/chloe/integration" - ]; - }; -} diff --git a/modules/private/websites/chloe/production.nix b/modules/private/websites/chloe/production.nix deleted file mode 100644 index 211232c..0000000 --- a/modules/private/websites/chloe/production.nix +++ /dev/null @@ -1,112 +0,0 @@ -{ lib, pkgs, config, ... }: -let - apacheUser = config.services.httpd.Prod.user; - apacheGroup = config.services.httpd.Prod.group; - ccfg = config.myEnv.websites.chloe.production; - app = pkgs.callPackage ./app { - inherit (ccfg) environment; - inherit (pkgs.webapps) spip; - varDir = "/var/lib/chloe_production"; - }; - cfg = config.myServices.websites.chloe.production; -in { - options.myServices.websites.chloe.production.enable = lib.mkEnableOption "enable Chloe's website in production"; - - config = lib.mkIf cfg.enable { - secrets.keys."websites/chloe/production" = { - user = apacheUser; - group = apacheGroup; - permissions = "0400"; - text = '' - SetEnv SPIP_CONFIG_DIR "${./config}" - SetEnv SPIP_VAR_DIR "${app.varDir}" - SetEnv SPIP_SITE "chloe-${app.environment}" - SetEnv SPIP_LDAP_BASE "dc=immae,dc=eu" - SetEnv SPIP_LDAP_HOST "ldaps://ldap.immae.eu" - SetEnv SPIP_LDAP_SEARCH_DN "${ccfg.ldap.dn}" - SetEnv SPIP_LDAP_SEARCH_PW "${ccfg.ldap.password}" - SetEnv SPIP_LDAP_SEARCH "${ccfg.ldap.filter}" - SetEnv SPIP_MYSQL_HOST "${ccfg.mysql.host}" - SetEnv SPIP_MYSQL_PORT "${ccfg.mysql.port}" - SetEnv SPIP_MYSQL_DB "${ccfg.mysql.database}" - SetEnv SPIP_MYSQL_USER "${ccfg.mysql.user}" - SetEnv SPIP_MYSQL_PASSWORD "${ccfg.mysql.password}" - ''; - }; - services.webstats.sites = [ { name = "osteopathe-cc.fr"; } ]; - - systemd.services.phpfpm-chloe_production.after = lib.mkAfter [ "mysql.service" ]; - systemd.services.phpfpm-chloe_production.wants = [ "mysql.service" ]; - services.phpfpm.pools.chloe_production = { - user = config.services.httpd.Prod.user; - group = config.services.httpd.Prod.group; - settings = { - "listen.owner" = apacheUser; - "listen.group" = apacheGroup; - "php_admin_value[upload_max_filesize]" = "20M"; - "php_admin_value[post_max_size]" = "20M"; - # "php_admin_flag[log_errors]" = "on"; - "php_admin_value[open_basedir]" = "${app.spipConfig}:${./config}:${app}:${app.varDir}:/tmp"; - "php_admin_value[session.save_path]" = "${app.varDir}/phpSessions"; - "pm" = "dynamic"; - "pm.max_children" = "20"; - "pm.start_servers" = "2"; - "pm.min_spare_servers" = "1"; - "pm.max_spare_servers" = "3"; - }; - phpPackage = pkgs.php72; - }; - system.activationScripts.chloe_production = { - deps = [ "wrappers" ]; - text = '' - install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${app.varDir} ${app.varDir}/IMG ${app.varDir}/tmp ${app.varDir}/local - install -m 0750 -o ${apacheUser} -g ${apacheGroup} -d ${app.varDir}/phpSessions - ''; - }; - services.websites.env.production.modules = [ "proxy_fcgi" ]; - services.websites.env.production.vhostConfs.chloe = { - certName = "chloe"; - certMainHost = "osteopathe-cc.fr"; - hosts = ["osteopathe-cc.fr" "www.osteopathe-cc.fr" ]; - root = app.webRoot; - extraConfig = [ - '' - Use Stats osteopathe-cc.fr - - RewriteEngine On - RewriteCond "%{HTTP_HOST}" "!^www\.osteopathe-cc\.fr$" [NC] - RewriteRule ^(.+)$ https://www.osteopathe-cc.fr$1 [R=302,L] - - Include ${config.secrets.fullPaths."websites/chloe/production"} - - RewriteEngine On - RewriteRule ^/news.rss /spip.php?page=backend&id_rubrique=1 - - - SetHandler "proxy:unix:${config.services.phpfpm.pools.chloe_production.socket}|fcgi://localhost" - - - - DirectoryIndex index.php index.htm index.html - Options -Indexes +FollowSymLinks +MultiViews +Includes - Include ${app.webRoot}/htaccess.txt - - AllowOverride AuthConfig FileInfo Limit - Require all granted - - - - Require all denied - - - - Require all denied - - '' - ]; - }; - services.websites.env.production.watchPaths = [ - config.secrets.fullPaths."websites/chloe/production" - ]; - }; -} diff --git a/modules/private/websites/cip-ca/sympa.nix b/modules/private/websites/cip-ca/sympa.nix deleted file mode 100644 index bb66fc6..0000000 --- a/modules/private/websites/cip-ca/sympa.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ lib, config, ... }: -let - cfg = config.myServices.websites.cip-ca.sympa; -in -{ - options.myServices.websites.cip-ca.sympa.enable = lib.mkEnableOption "enable cip-ca’s sympa website"; - config = lib.mkIf cfg.enable { - services.websites.env.tools.vhostConfs.cipca_sympa = { - certName = "cip-ca"; - certMainHost = "mail.cip-ca.fr"; - hosts = [ "mail.cip-ca.fr" ]; - root = null; - extraConfig = [ - '' - Alias /static-sympa/ /var/lib/sympa/static_content/ - - Require all granted - AllowOverride none - - - SetHandler "proxy:unix:/run/sympa/wwsympa.socket|fcgi://" - Require all granted - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/commons/adminer.nix b/modules/private/websites/commons/adminer.nix deleted file mode 100644 index eae6a9a..0000000 --- a/modules/private/websites/commons/adminer.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ config, callPackage }: -callPackage ../tools/tools/adminer.nix { - forcePhpSocket = config.services.phpfpm.pools.adminer.socket; -} diff --git a/modules/private/websites/connexionswing/app/default.nix b/modules/private/websites/connexionswing/app/default.nix deleted file mode 100644 index b14b03b..0000000 --- a/modules/private/websites/connexionswing/app/default.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ environment, varDir, secretsPath -, composerEnv, fetchurl, fetchgit, sources }: -let - app = composerEnv.buildPackage ( - import ./php-packages.nix { inherit composerEnv fetchurl fetchgit; } // - rec { - pname = "connexionswing"; - name = "${pname}-${version}"; - version = sources.websites-connexionswing-app.version; - src = sources.websites-connexionswing-app; - noDev = (environment == "prod"); - preInstall = '' - export SYMFONY_ENV="${environment}" - ''; - postInstall = '' - cd $out - ${if environment == "prod" then "php ./bin/console assetic:dump --env=prod --no-debug" else ""} - rm app/config/parameters.yml - ln -sf ${secretsPath} app/config/parameters.yml - rm -rf var/{logs,cache} - ln -sf ${varDir}/var/{logs,cache} var/ - ln -sf ${varDir}/{medias,uploads} web/images/ - ''; - passthru = { - inherit varDir environment; - webRoot = "${app}/web"; - }; - }); -in app diff --git a/modules/private/websites/connexionswing/app/php-packages.nix b/modules/private/websites/connexionswing/app/php-packages.nix deleted file mode 100644 index 10bb737..0000000 --- a/modules/private/websites/connexionswing/app/php-packages.nix +++ /dev/null @@ -1,597 +0,0 @@ -# Generated with composer2nix and adapted to return only the list of -# packages -{ composerEnv, fetchurl, fetchgit ? null }: -{ - packages = { - "behat/transliterator" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "behat-transliterator-826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c"; - src = fetchurl { - url = https://api.github.com/repos/Behat/Transliterator/zipball/826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c; - sha256 = "1mgc9azx79fkrxahji3xwbgqhlcnvh3xk6llqdvhjb7vgzj4bqq0"; - }; - }; - }; - "components/bootstrap" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "components-bootstrap-670295b9d6170a79acc8586a15e729bf24128275"; - src = fetchurl { - url = https://api.github.com/repos/components/bootstrap/zipball/670295b9d6170a79acc8586a15e729bf24128275; - sha256 = "0lcq9cjnywvf1nd8k99flgcf2dmfgyyxzsvcpip8xiibmh5x04p9"; - }; - }; - }; - "components/jquery" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "components-jquery-5dd7297d7603e11e53bdcca2a71074d92de37b8f"; - src = fetchurl { - url = https://api.github.com/repos/components/jquery/zipball/5dd7297d7603e11e53bdcca2a71074d92de37b8f; - sha256 = "1maplw3yic1pzbwwl2amjlivipsi1w0r8bq7i0mmjaqf7wij506i"; - }; - }; - }; - "components/jqueryui" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "components-jqueryui-44ecf3794cc56b65954cc19737234a3119d036cc"; - src = fetchurl { - url = https://api.github.com/repos/components/jqueryui/zipball/44ecf3794cc56b65954cc19737234a3119d036cc; - sha256 = "1y0ppxk44jkxbh38i05sg0zcgk927s5wy6sjngwr5qifibqbcbhk"; - }; - }; - }; - "composer/ca-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "composer-ca-bundle-d2c0a83b7533d6912e8d516756ebd34f893e9169"; - src = fetchurl { - url = https://api.github.com/repos/composer/ca-bundle/zipball/d2c0a83b7533d6912e8d516756ebd34f893e9169; - sha256 = "1as399dzrfbjnifb87j1g5cvrbacyddbay8fv59i56xx1bdq7lwc"; - }; - }; - }; - "doctrine/annotations" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-annotations-54cacc9b81758b14e3ce750f205a393d52339e97"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/annotations/zipball/54cacc9b81758b14e3ce750f205a393d52339e97; - sha256 = "1wi5skihqbcinlkrkr15nmmvqkn2gydqib8xl232abdvfq1q0w24"; - }; - }; - }; - "doctrine/cache" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-cache-eb152c5100571c7a45470ff2a35095ab3f3b900b"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/cache/zipball/eb152c5100571c7a45470ff2a35095ab3f3b900b; - sha256 = "0iq0qqv1smlqz63jhj2fpjy54c5dwfwxyf5c89iky6i0yb81gwyd"; - }; - }; - }; - "doctrine/collections" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-collections-1a4fb7e902202c33cce8c55989b945612943c2ba"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/collections/zipball/1a4fb7e902202c33cce8c55989b945612943c2ba; - sha256 = "0fkiwkx7zbmfnh4p21za807lh1n7g1f4lpgy8y59g4r5krvpl90w"; - }; - }; - }; - "doctrine/common" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-common-4acb8f89626baafede6ee5475bc5844096eba8a9"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/common/zipball/4acb8f89626baafede6ee5475bc5844096eba8a9; - sha256 = "0qjqframvg81z3lwqaj5haanqj9v3dfbj170pxmwlgmrfsbr16zh"; - }; - }; - }; - "doctrine/dbal" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-dbal-729340d8d1eec8f01bff708e12e449a3415af873"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/dbal/zipball/729340d8d1eec8f01bff708e12e449a3415af873; - sha256 = "184p8h0n6mcm0y6vfyh0z6qcxmmf8h5z4vdvxd4ycmx0531lnhj3"; - }; - }; - }; - "doctrine/doctrine-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-doctrine-bundle-703fad32e4c8cbe609caf45a71a1d4266c830f0f"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/DoctrineBundle/zipball/703fad32e4c8cbe609caf45a71a1d4266c830f0f; - sha256 = "0v2f63j22i3im8jbmv7spi8j42fay6dnxjvbxnbwj190ajxl6sdp"; - }; - }; - }; - "doctrine/doctrine-cache-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-doctrine-cache-bundle-4c8e363f96427924e7e519c5b5119b4f54512697"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/4c8e363f96427924e7e519c5b5119b4f54512697; - sha256 = "1irm04iijzq6gziknwyb10a9s0xbzh04xs5i2d6aac86cc29187c"; - }; - }; - }; - "doctrine/doctrine-migrations-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-doctrine-migrations-bundle-a9e506369f931351a2a6dd2aef588a822802b1b7"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/a9e506369f931351a2a6dd2aef588a822802b1b7; - sha256 = "1jgrqsgdwcm2g8rml76qr6b19s1vxfbnrp43qr6n1g9kbx7y9wg9"; - }; - }; - }; - "doctrine/inflector" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-inflector-90b2128806bfde671b6952ab8bea493942c1fdae"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae; - sha256 = "01vmclj3k7xil51jg329fznshh8d07pvm4mr89lvfn1d7fyrq6qw"; - }; - }; - }; - "doctrine/instantiator" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-instantiator-8e884e78f9f0eb1329e445619e04456e64d8051d"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d; - sha256 = "15dcja45rnwya431pcm826l68k1g8f1fabl7rih69alcdyvdlln4"; - }; - }; - }; - "doctrine/lexer" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-lexer-83893c552fd2045dd78aef794c31e694c37c0b8c"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c; - sha256 = "0cyh3vwcl163cx1vrcwmhlh5jg9h47xwiqgzc6rwscxw0ppd1v74"; - }; - }; - }; - "doctrine/migrations" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-migrations-c81147c0f2938a6566594455367e095150547f72"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/migrations/zipball/c81147c0f2938a6566594455367e095150547f72; - sha256 = "0x8hvxbm3f40sx25nq8zlh1kr936pagghzp89l0gdy5bar7cdzi5"; - }; - }; - }; - "doctrine/orm" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-orm-810a7baf81462a5ddf10e8baa8cb94b6eec02754"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/doctrine2/zipball/810a7baf81462a5ddf10e8baa8cb94b6eec02754; - sha256 = "1hmkc7917kgnav9hmlgvlp7qwm3zjj910ci71g9yqwjh6s28wrf1"; - }; - }; - }; - "fig/link-util" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "fig-link-util-1a07821801a148be4add11ab0603e4af55a72fac"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/link-util/zipball/1a07821801a148be4add11ab0603e4af55a72fac; - sha256 = "0ky1pq4a17br5zvcychjghgwr6wpkgp409hdv0ljdk3ks90w5w64"; - }; - }; - }; - "friendsofsymfony/jsrouting-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "friendsofsymfony-jsrouting-bundle-49c1069132dcef371fb526351569deabeb6f0d8e"; - src = fetchurl { - url = https://api.github.com/repos/FriendsOfSymfony/FOSJsRoutingBundle/zipball/49c1069132dcef371fb526351569deabeb6f0d8e; - sha256 = "0ymmxhxbjnzj8bk3zq55vq0xvsaq82348v321gy2jyi90d19p5j7"; - }; - }; - }; - "gedmo/doctrine-extensions" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "gedmo-doctrine-extensions-1e400fbd05b7e5f912f55fe95805450f7d3bed60"; - src = fetchurl { - url = https://api.github.com/repos/Atlantic18/DoctrineExtensions/zipball/1e400fbd05b7e5f912f55fe95805450f7d3bed60; - sha256 = "14hmivynyzc1c9l5kxj9gbwjrkv9m9lrjjx2r1m74wdhi5p0p20v"; - }; - }; - }; - "immae/connexionswing-ckeditor-component" = { - targetDir = ""; - src = fetchgit { - name = "immae-connexionswing-ckeditor-component-3b35bd273a79f6b01fda7a246aed64aca147ea7a"; - url = "https://git.immae.eu/perso/Immae/Projets/packagist/connexionswing-ckeditor-component.git"; - rev = "3b35bd273a79f6b01fda7a246aed64aca147ea7a"; - sha256 = "1w0y6k28ci73n0db9gwvqg7grzvh1z718ys9v1ik8cla7zw83bni"; - }; - }; - "immae/jquery-touchswipe" = { - targetDir = ""; - src = fetchgit { - name = "immae-jquery-touchswipe-3e15949df974d6612d76dc9ee75cd976dbcc2114"; - url = "https://git.immae.eu/perso/Immae/Projets/packagist/jquery-touchswipe.git"; - rev = "3e15949df974d6612d76dc9ee75cd976dbcc2114"; - sha256 = "1pnvki1j3a65cdwwqs0id790ni813lh3r0m7556gdn0hsqa1cc4d"; - }; - }; - "incenteev/composer-parameter-handler" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "incenteev-composer-parameter-handler-933c45a34814f27f2345c11c37d46b3ca7303550"; - src = fetchurl { - url = https://api.github.com/repos/Incenteev/ParameterHandler/zipball/933c45a34814f27f2345c11c37d46b3ca7303550; - sha256 = "1zqdwlcl790kjyz4rkpva35xkfsp8kslds82fzznj0yigkgnbifm"; - }; - }; - }; - "jdorn/sql-formatter" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "jdorn-sql-formatter-64990d96e0959dff8e059dfcdc1af130728d92bc"; - src = fetchurl { - url = https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc; - sha256 = "1dnmkm8mxylvxjwi0bdkzrlklncqx92fa4fwqp5bh2ypj8gaagzi"; - }; - }; - }; - "kriswallsmith/assetic" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "kriswallsmith-assetic-e911c437dbdf006a8f62c2f59b15b2d69a5e0aa1"; - src = fetchurl { - url = https://api.github.com/repos/kriswallsmith/assetic/zipball/e911c437dbdf006a8f62c2f59b15b2d69a5e0aa1; - sha256 = "1dqk4zvx8fgqf8rb81sj9bipl5431jib2b9kcvxyig5fw99irpf8"; - }; - }; - }; - "monolog/monolog" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "monolog-monolog-fd8c787753b3a2ad11bc60c063cff1358a32a3b4"; - src = fetchurl { - url = https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4; - sha256 = "0avf3y8raw23krwdb7kw9qb5bsr5ls4i7qd2vh7hcds3qjixg3h9"; - }; - }; - }; - "ocramius/proxy-manager" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "ocramius-proxy-manager-57e9272ec0e8deccf09421596e0e2252df440e11"; - src = fetchurl { - url = https://api.github.com/repos/Ocramius/ProxyManager/zipball/57e9272ec0e8deccf09421596e0e2252df440e11; - sha256 = "10crhcnhz42b01i6lv6ysgc7awp7yw82p4i2a4sg6bjihw677yps"; - }; - }; - }; - "paragonie/random_compat" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "paragonie-random_compat-258c89a6b97de7dfaf5b8c7607d0478e236b04fb"; - src = fetchurl { - url = https://api.github.com/repos/paragonie/random_compat/zipball/258c89a6b97de7dfaf5b8c7607d0478e236b04fb; - sha256 = "11arrici2mgfj7r847wm423pqrvfj9wn9jcgyxnq4rzyahaxz5l1"; - }; - }; - }; - "psr/cache" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "psr-cache-d11b50ad223250cf17b86e38383413f5a6764bf8"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8; - sha256 = "06i2k3dx3b4lgn9a4v1dlgv8l9wcl4kl7vzhh63lbji0q96hv8qz"; - }; - }; - }; - "psr/container" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "psr-container-b7ce3b176482dbbc1245ebf52b181af44c2cf55f"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f; - sha256 = "0rkz64vgwb0gfi09klvgay4qnw993l1dc03vyip7d7m2zxi6cy4j"; - }; - }; - }; - "psr/link" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "psr-link-eea8e8662d5cd3ae4517c9b864493f59fca95562"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/link/zipball/eea8e8662d5cd3ae4517c9b864493f59fca95562; - sha256 = "091k4p9irkqnmq9b0p792wz1hb7dm4rafpjilw9im9xhsxgkmr13"; - }; - }; - }; - "psr/log" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "psr-log-4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d; - sha256 = "1mlcv17fjw39bjpck176ah1z393b6pnbw3jqhhrblj27c70785md"; - }; - }; - }; - "psr/simple-cache" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "psr-simple-cache-408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b; - sha256 = "1djgzclkamjxi9jy4m9ggfzgq1vqxaga2ip7l3cj88p7rwkzjxgw"; - }; - }; - }; - "ricbra/robots-txt-bundle" = { - targetDir = "Ricbra/Bundle/RobotsTxtBundle"; - src = composerEnv.buildZipPackage { - name = "ricbra-robots-txt-bundle-80d122a708893a762041464890e59a76babd6c22"; - src = fetchurl { - url = https://api.github.com/repos/ricbra/robots-txt-bundle/zipball/80d122a708893a762041464890e59a76babd6c22; - sha256 = "0w3lfzy1ys0bwl3shy4ychldfd711w1p2y13i1az2z2gh731d0ad"; - }; - }; - }; - "robloach/component-installer" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "robloach-component-installer-908a859aa7c4949ba9ad67091e67bac10b66d3d7"; - src = fetchurl { - url = https://api.github.com/repos/RobLoach/component-installer/zipball/908a859aa7c4949ba9ad67091e67bac10b66d3d7; - sha256 = "19y5sv4k338bihzmm8iac6q43r18vxhmbpvrdhz8jn39r51ampq9"; - }; - }; - }; - "sensio/distribution-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "sensio-distribution-bundle-eb6266b3b472e4002538610b28a0a04bcf94891a"; - src = fetchurl { - url = https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/eb6266b3b472e4002538610b28a0a04bcf94891a; - sha256 = "0wyffqj924lz9cv0vbahyngjw1g850v0p34swygzzgp3cr0ank13"; - }; - }; - }; - "sensio/framework-extra-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "sensio-framework-extra-bundle-bb907234df776b68922eb4b25bfa061683597b6a"; - src = fetchurl { - url = https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/bb907234df776b68922eb4b25bfa061683597b6a; - sha256 = "011hcljjcfq5qy4a7mlf0hwqxyb58yci40ini0n5rqandcyk2nck"; - }; - }; - }; - "sensiolabs/security-checker" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "sensiolabs-security-checker-dc270d5fec418cc6ac983671dba5d80ffaffb142"; - src = fetchurl { - url = https://api.github.com/repos/sensiolabs/security-checker/zipball/dc270d5fec418cc6ac983671dba5d80ffaffb142; - sha256 = "0fnshyd6f8j91a7y604nh6sqgscjl48mfa0727g2r4hkdfz8hpd1"; - }; - }; - }; - "swiftmailer/swiftmailer" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "swiftmailer-swiftmailer-7ffc1ea296ed14bf8260b6ef11b80208dbadba91"; - src = fetchurl { - url = https://api.github.com/repos/swiftmailer/swiftmailer/zipball/7ffc1ea296ed14bf8260b6ef11b80208dbadba91; - sha256 = "1vl5pzgvr2yfrj1yfs02mi917b0gr56v76ibi40r51a3346zhp6v"; - }; - }; - }; - "symfony/assetic-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-assetic-bundle-2e0a23a4874838e26de6f025e02fc63328921a4c"; - src = fetchurl { - url = https://api.github.com/repos/symfony/assetic-bundle/zipball/2e0a23a4874838e26de6f025e02fc63328921a4c; - sha256 = "17rxrkyzxa6x5nn7qhhhdgx4z0nlznnq5fifza4wv9znca8bbwyc"; - }; - }; - }; - "symfony/monolog-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-monolog-bundle-8781649349fe418d51d194f8c9d212c0b97c40dd"; - src = fetchurl { - url = https://api.github.com/repos/symfony/monolog-bundle/zipball/8781649349fe418d51d194f8c9d212c0b97c40dd; - sha256 = "0wcqhg1vfdj3mxacr3fxpgqwy1rk9znjg9bmzx4jymk8l16i7bq8"; - }; - }; - }; - "symfony/polyfill-apcu" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-apcu-9b83bd010112ec196410849e840d9b9fefcb15ad"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-apcu/zipball/9b83bd010112ec196410849e840d9b9fefcb15ad; - sha256 = "0iiiqbn0bs0zqc95nz8l1qa5ysy0iifx4f27r9wnhzsh6f1h02mv"; - }; - }; - }; - "symfony/polyfill-intl-icu" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-intl-icu-80ee17ae83c10cd513e5144f91a73607a21edb4e"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/80ee17ae83c10cd513e5144f91a73607a21edb4e; - sha256 = "1hck9bn8zfb1pmx2yccf4w5dd9rbmvwii7hncin6px6nasi6wzvv"; - }; - }; - }; - "symfony/polyfill-mbstring" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-mbstring-3296adf6a6454a050679cde90f95350ad604b171"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171; - sha256 = "02wyx9fjx9lyc5q5d3bnn8aw9xag8im2wqanmbkljwd5vmx9k9b2"; - }; - }; - }; - "symfony/polyfill-php56" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-php56-af98553c84912459db3f636329567809d639a8f6"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-php56/zipball/af98553c84912459db3f636329567809d639a8f6; - sha256 = "1l1ydsd7cq3s97cpgl4fw1qxc2wmv27yfxa3q8ng9p66ypzvkw42"; - }; - }; - }; - "symfony/polyfill-php70" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-php70-77454693d8f10dd23bb24955cffd2d82db1007a6"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-php70/zipball/77454693d8f10dd23bb24955cffd2d82db1007a6; - sha256 = "146d620ca725iqdh7j0dqb99h20d4vs641c9vjy9x4jws3rgj905"; - }; - }; - }; - "symfony/polyfill-util" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-util-1a5ad95d9436cbff3296034fe9f8d586dce3fb3a"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-util/zipball/1a5ad95d9436cbff3296034fe9f8d586dce3fb3a; - sha256 = "0l7w4dlr7y3qijpaiq7hfhbhv1qqz9jjknr1n6k4vrss2a8d1sxk"; - }; - }; - }; - "symfony/swiftmailer-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-swiftmailer-bundle-c4808f5169efc05567be983909d00f00521c53ec"; - src = fetchurl { - url = https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/c4808f5169efc05567be983909d00f00521c53ec; - sha256 = "0jmd3slhb3gf3c3krmk2a9fi4ixdxvqlimdkfpj0sfaaq0115y01"; - }; - }; - }; - "symfony/symfony" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-symfony-4babd75194d45f7a4412560038924f3008c67ef2"; - src = fetchurl { - url = https://api.github.com/repos/symfony/symfony/zipball/4babd75194d45f7a4412560038924f3008c67ef2; - sha256 = "1347qp994yg6k91v5gwdwnn202bz92m0pj4090b59z5nqxh7463d"; - }; - }; - }; - "twig/extensions" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "twig-extensions-d188c76168b853481cc75879ea045bf93d718e9c"; - src = fetchurl { - url = https://api.github.com/repos/twigphp/Twig-extensions/zipball/d188c76168b853481cc75879ea045bf93d718e9c; - sha256 = "0d6wywys5fqzi3m8g8h3sb5phl5y3a7vfc95n214mqp0iwrcmzwm"; - }; - }; - }; - "twig/twig" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "twig-twig-b48680b6eb7d16b5025b9bfc4108d86f6b8af86f"; - src = fetchurl { - url = https://api.github.com/repos/twigphp/Twig/zipball/b48680b6eb7d16b5025b9bfc4108d86f6b8af86f; - sha256 = "1q82f246wq7whl11lx00n0skwmllppvpzg20x6q4frmw44dc6v9a"; - }; - }; - }; - "willdurand/jsonp-callback-validator" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "willdurand-jsonp-callback-validator-1a7d388bb521959e612ef50c5c7b1691b097e909"; - src = fetchurl { - url = https://api.github.com/repos/willdurand/JsonpCallbackValidator/zipball/1a7d388bb521959e612ef50c5c7b1691b097e909; - sha256 = "19ds8f3nbss4b2xvqkcjkcvz0l4c5nhrm8w8yxc8a508r0jmd9in"; - }; - }; - }; - "zendframework/zend-code" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "zendframework-zend-code-95033f061b083e16cdee60530ec260d7d628b887"; - src = fetchurl { - url = https://api.github.com/repos/zendframework/zend-code/zipball/95033f061b083e16cdee60530ec260d7d628b887; - sha256 = "0h77qf267l2sp9wg3n61dpgpf6wh6p5jssy8mrg7vlns2j03f9f5"; - }; - }; - }; - "zendframework/zend-eventmanager" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "zendframework-zend-eventmanager-a5e2583a211f73604691586b8406ff7296a946dd"; - src = fetchurl { - url = https://api.github.com/repos/zendframework/zend-eventmanager/zipball/a5e2583a211f73604691586b8406ff7296a946dd; - sha256 = "08a05gn40hfdy2zhz4gcd3r6q7m7zcaks5kpvb9dx1awgx0pzr8n"; - }; - }; - }; - }; - devPackages = { - "doctrine/data-fixtures" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-data-fixtures-17fa5bfe6ff52e35cb3d9ec37c934a2f4bd1fa2e"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/data-fixtures/zipball/17fa5bfe6ff52e35cb3d9ec37c934a2f4bd1fa2e; - sha256 = "15k7vl58kwh02g0a93rab82ifbgmc91srgminzlkjq5kx8agh7ab"; - }; - }; - }; - "doctrine/doctrine-fixtures-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-doctrine-fixtures-bundle-74b8cc70a4a25b774628ee59f4cdf3623a146273"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/74b8cc70a4a25b774628ee59f4cdf3623a146273; - sha256 = "1bbflq8k6izwqgp9ka2gyb5y96a80b4lnlc5wrgc5gnih7hqidlf"; - }; - }; - }; - "sensio/generator-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "sensio-generator-bundle-28cbaa244bd0816fd8908b93f90380bcd7b67a65"; - src = fetchurl { - url = https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/28cbaa244bd0816fd8908b93f90380bcd7b67a65; - sha256 = "1j09y037xk843q8gcyfmwgy6dmn0h67pd5jnsvhj08h92ssbl0c3"; - }; - }; - }; - "symfony/phpunit-bridge" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-phpunit-bridge-7470518370113785f67a7fd8e6e1667661e88805"; - src = fetchurl { - url = https://api.github.com/repos/symfony/phpunit-bridge/zipball/7470518370113785f67a7fd8e6e1667661e88805; - sha256 = "0jd28ag0wks9sv62rkwsbx68csvdl5gabbz2h01hkqpa23gdkhs9"; - }; - }; - }; - }; -} diff --git a/modules/private/websites/connexionswing/integration.nix b/modules/private/websites/connexionswing/integration.nix deleted file mode 100644 index 9cf2b94..0000000 --- a/modules/private/websites/connexionswing/integration.nix +++ /dev/null @@ -1,141 +0,0 @@ -{ lib, pkgs, config, ... }: -let - secrets = config.myEnv.websites.connexionswing.integration; - webRoot = "/var/lib/ftp/immae/connexionswing/web"; - varDir = "/var/lib/ftp/immae/connexionswing_var"; - cfg = config.myServices.websites.connexionswing.integration; - pcfg = config.services.phpApplication; -in { - options.myServices.websites.connexionswing.integration.enable = lib.mkEnableOption "enable Connexionswing's website in integration"; - - config = lib.mkIf cfg.enable { - services.phpApplication.apps.connexionswing_integration = { - websiteEnv = "integration"; - httpdUser = config.services.httpd.Inte.user; - httpdGroup = config.services.httpd.Inte.group; - inherit webRoot varDir; - varDirPaths = { - "medias" = "0700"; - "uploads" = "0700"; - "var" = "0700"; - }; - app = "/var/lib/ftp/immae/connexionswing"; - serviceDeps = [ "mysql.service" ]; - preStartActions = [ - "./bin/console --env=dev cache:clear --no-warmup" - ]; - phpOpenbasedir = [ "/tmp" "/run/wrappers/bin/sendmail" ]; - phpPool = { - "php_admin_value[upload_max_filesize]" = "20M"; - "php_admin_value[post_max_size]" = "20M"; - #"php_admin_flag[log_errors]" = "on"; - "pm" = "ondemand"; - "pm.max_children" = "5"; - "pm.process_idle_timeout" = "60"; - }; - phpEnv = { - SYMFONY_DEBUG_MODE = "\"yes\""; - }; - phpWatchFiles = [ - config.secrets.fullPaths."websites/connexionswing/integration" - ]; - phpPackage = pkgs.php72; - }; - - secrets.keys."websites/connexionswing/integration" = { - user = config.services.httpd.Inte.user; - group = config.services.httpd.Inte.group; - permissions = "0400"; - text = '' - # This file is auto-generated during the composer install - parameters: - database_host: ${secrets.mysql.host} - database_port: ${secrets.mysql.port} - database_name: ${secrets.mysql.database} - database_user: ${secrets.mysql.user} - database_password: ${secrets.mysql.password} - database_server_version: ${pkgs.mariadb.mysqlVersion} - mailer_transport: sendmail - mailer_host: null - mailer_user: null - mailer_password: null - subscription_email: ${secrets.email} - allow_robots: true - secret: ${secrets.secret} - ''; - }; - - services.websites.env.integration.vhostConfs.connexionswing_integration = { - certName = "integration"; - addToCerts = true; - hosts = ["connexionswing.cs.immae.dev" "sandetludo.cs.immae.dev" ]; - root = webRoot; - extraConfig = [ - '' - - SetHandler "proxy:unix:${pcfg.phpListenPaths.connexionswing_integration}|fcgi://localhost" - - - - Options FollowSymLinks - AllowOverride None - Require all granted - - - - Options FollowSymLinks - AllowOverride None - Require all granted - - - - Use LDAPConnect - Require ldap-group cn=cs.immae.dev,cn=httpd,ou=services,dc=immae,dc=eu - ErrorDocument 401 "" - - - - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride None - Require all granted - - DirectoryIndex app_dev.php - - - Options -MultiViews - - - - RewriteEngine On - - RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ - RewriteRule ^(.*) - [E=BASE:%1] - - # Maintenance script - RewriteCond %{DOCUMENT_ROOT}/maintenance.php -f - RewriteCond %{SCRIPT_FILENAME} !maintenance.php - RewriteRule ^.*$ %{ENV:BASE}/maintenance.php [R=503,L] - ErrorDocument 503 /maintenance.php - - # Sets the HTTP_AUTHORIZATION header removed by Apache - RewriteCond %{HTTP:Authorization} . - RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] - - RewriteCond %{ENV:REDIRECT_STATUS} ^$ - RewriteRule ^app_dev\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L] - - # If the requested filename exists, simply serve it. - # We only want to let Apache serve files and not directories. - RewriteCond %{REQUEST_FILENAME} -f - RewriteRule ^ - [L] - - # Rewrite all other queries to the front controller. - RewriteRule ^ %{ENV:BASE}/app_dev.php [L] - - - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/connexionswing/production.nix b/modules/private/websites/connexionswing/production.nix deleted file mode 100644 index 4b0407f..0000000 --- a/modules/private/websites/connexionswing/production.nix +++ /dev/null @@ -1,110 +0,0 @@ -{ lib, pkgs, config, ... }: -let - secrets = config.myEnv.websites.connexionswing.production; - app = pkgs.callPackage ./app { - composerEnv = pkgs.composerEnv.override { php = pkgs.php72; }; - environment = secrets.environment; - varDir = "/var/lib/connexionswing_production"; - secretsPath = config.secrets.fullPaths."websites/connexionswing/production"; - }; - cfg = config.myServices.websites.connexionswing.production; - pcfg = config.services.phpApplication; -in { - options.myServices.websites.connexionswing.production.enable = lib.mkEnableOption "enable Connexionswing's website in production"; - - config = lib.mkIf cfg.enable { - services.webstats.sites = [ { name = "connexionswing.com"; } ]; - services.phpApplication.apps.connexionswing_production = { - websiteEnv = "production"; - httpdUser = config.services.httpd.Prod.user; - httpdGroup = config.services.httpd.Prod.group; - inherit (app) webRoot varDir; - varDirPaths = { - "medias" = "0700"; - "uploads" = "0700"; - "var" = "0700"; - }; - inherit app; - serviceDeps = [ "mysql.service" ]; - preStartActions = [ - "./bin/console --env=${app.environment} cache:clear --no-warmup" - ]; - phpOpenbasedir = [ "/tmp" "/run/wrappers/bin/sendmail" ]; - phpPool = { - "php_admin_value[upload_max_filesize]" = "20M"; - "php_admin_value[post_max_size]" = "20M"; - #"php_admin_flag[log_errors]" = "on"; - "pm" = "dynamic"; - "pm.max_children" = "20"; - "pm.start_servers" = "2"; - "pm.min_spare_servers" = "1"; - "pm.max_spare_servers" = "3"; - }; - phpWatchFiles = [ - config.secrets.fullPaths."websites/connexionswing/production" - ]; - phpPackage = pkgs.php72; - }; - - secrets.keys."websites/connexionswing/production" = { - user = config.services.httpd.Prod.user; - group = config.services.httpd.Prod.group; - permissions = "0400"; - text = '' - # This file is auto-generated during the composer install - parameters: - database_host: ${secrets.mysql.host} - database_port: ${secrets.mysql.port} - database_name: ${secrets.mysql.database} - database_user: ${secrets.mysql.user} - database_password: ${secrets.mysql.password} - database_server_version: ${pkgs.mariadb.mysqlVersion} - mailer_transport: sendmail - mailer_host: null - mailer_user: null - mailer_password: null - subscription_email: ${secrets.email} - allow_robots: true - secret: ${secrets.secret} - services: - swiftmailer.mailer.default.transport: - class: Swift_SendmailTransport - arguments: ['/run/wrappers/bin/sendmail -bs'] - ''; - }; - - services.websites.env.production.vhostConfs.connexionswing_production = { - certName = "connexionswing"; - certMainHost = "connexionswing.com"; - hosts = ["connexionswing.com" "sandetludo.com" "www.connexionswing.com" "www.sandetludo.com" ]; - root = app.webRoot; - extraConfig = [ - '' - - SetHandler "proxy:unix:${pcfg.phpListenPaths.connexionswing_production}|fcgi://localhost" - - - - Options FollowSymLinks - AllowOverride None - Require all granted - - - - Options FollowSymLinks - AllowOverride None - Require all granted - - - Use Stats connexionswing.com - - - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride All - Require all granted - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/default.nix b/modules/private/websites/default.nix deleted file mode 100644 index 4864034..0000000 --- a/modules/private/websites/default.nix +++ /dev/null @@ -1,324 +0,0 @@ -{ lib, pkgs, config, ... }: -let - www_root = ./_www; - theme_root = pkgs.webapps.apache-theme.theme; - apacheConfig = { - cache = { - # This setting permits to ignore time-based cache for files in the - # nix store: - # If a client requires an If-Modified-Since from timestamp 1, then - # this header is removed, and if the response contains a - # too old Last-Modified tag, then it is removed too - extraConfig = '' - - RequestHeader unset If-Modified-Since - - Header unset Last-Modified "expr=%{LAST_MODIFIED} < 19991231235959" - ''; - }; - gzip = { - modules = [ "deflate" "filter" ]; - extraConfig = '' - AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript - ''; - }; - macros = { - modules = [ "macro" ]; - }; - stats = { - extraConfig = '' - - Alias /webstats ${config.services.webstats.dataDir}/%{domain} - - DirectoryIndex index.html - AllowOverride None - Require all granted - - - Use LDAPConnect - Require ldap-group cn=%{domain},ou=stats,cn=httpd,ou=services,dc=immae,dc=eu - - - ''; - }; - ldap = { - modules = [ "ldap" "authnz_ldap" ]; - extraConfig = '' - - LDAPSharedCacheSize 500000 - LDAPCacheEntries 1024 - LDAPCacheTTL 600 - LDAPOpCacheEntries 1024 - LDAPOpCacheTTL 600 - - - Include ${config.secrets.fullPaths."apache-ldap"} - ''; - }; - global = { - extraConfig = '' - ErrorDocument 500 /maintenance_immae.html - ErrorDocument 501 /maintenance_immae.html - ErrorDocument 502 /maintenance_immae.html - ErrorDocument 503 /maintenance_immae.html - ErrorDocument 504 /maintenance_immae.html - Alias /maintenance_immae.html ${www_root}/maintenance_immae.html - ProxyPass /maintenance_immae.html ! - - AliasMatch "(.*)/googleb6d69446ff4ca3e5.html" ${www_root}/googleb6d69446ff4ca3e5.html - - AllowOverride None - Require all granted - - ''; - }; - apaxy = { - extraConfig = (pkgs.webapps.apache-theme.override { inherit theme_root; }).apacheConfig; - }; - http2 = { - modules = [ "http2" ]; - extraConfig = '' - Protocols h2 http/1.1 - ''; - }; - customLog = { - extraConfig = '' - LogFormat "%{Host}i:%p %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedVhost - ''; - }; - }; - makeModules = lib.lists.flatten (lib.attrsets.mapAttrsToList (n: v: v.modules or []) apacheConfig); - makeExtraConfig = (builtins.filter (x: x != null) (lib.attrsets.mapAttrsToList (n: v: v.extraConfig or null) apacheConfig)); - moomin = let - lines = lib.splitString "\n" (lib.fileContents ./moomin.txt); - pad = width: str: let - padWidth = width - lib.stringLength str; - padding = lib.concatStrings (lib.genList (lib.const "0") padWidth); - in lib.optionalString (padWidth > 0) padding + str; - in - lib.imap0 (i: e: ''Header always set "X-Moomin-${pad 2 (builtins.toString i)}" "${e}"'') lines; -in -{ - options.myServices.websites.enable = lib.mkEnableOption "enable websites"; - - config = lib.mkIf config.myServices.websites.enable { - users.users.wwwrun.extraGroups = [ "keys" ]; - networking.firewall.allowedTCPPorts = [ 80 443 ]; - - secrets.keys."apache-ldap" = { - user = "wwwrun"; - group = "wwwrun"; - permissions = "0400"; - text = '' - - - AuthLDAPURL ldap://ldap.immae.eu:389/dc=immae,dc=eu STARTTLS - AuthLDAPBindDN cn=httpd,ou=services,dc=immae,dc=eu - AuthLDAPBindPassword "${config.myEnv.httpd.ldap.password}" - AuthType Basic - AuthName "Authentification requise (Acces LDAP)" - AuthBasicProvider ldap - - - ''; - }; - - system.activationScripts = { - httpd = '' - install -d -m 0755 /var/lib/acme/acme-challenges - install -d -m 0750 -o wwwrun -g wwwrun /var/lib/php/sessions - ''; - }; - - services.phpfpm = { - phpOptions = '' - session.save_path = "/var/lib/php/sessions" - post_max_size = 20M - ; 15 days (seconds) - session.gc_maxlifetime = 1296000 - ; 30 days (minutes) - session.cache_expire = 43200 - ''; - settings = { - log_level = "notice"; - }; - }; - - services.filesWatcher.httpdProd.paths = [ config.secrets.fullPaths."apache-ldap" ]; - services.filesWatcher.httpdInte.paths = [ config.secrets.fullPaths."apache-ldap" ]; - services.filesWatcher.httpdTools.paths = [ config.secrets.fullPaths."apache-ldap" ]; - - services.websites.env.production = { - enable = true; - adminAddr = "httpd@immae.eu"; - httpdName = "Prod"; - ips = - let ips = config.myEnv.servers.eldiron.ips.production; - in [ips.ip4] ++ (ips.ip6 or []); - modules = makeModules; - extraConfig = makeExtraConfig; - fallbackVhost = { - certName = "eldiron"; - hosts = ["eldiron.immae.eu" ]; - root = www_root; - extraConfig = [ "DirectoryIndex index.htm" ]; - }; - }; - - services.websites.env.integration = { - enable = true; - adminAddr = "httpd@immae.eu"; - httpdName = "Inte"; - ips = - let ips = config.myEnv.servers.eldiron.ips.integration; - in [ips.ip4] ++ (ips.ip6 or []); - modules = makeModules; - extraConfig = makeExtraConfig ++ moomin; - fallbackVhost = { - certName = "eldiron"; - hosts = ["eldiron.immae.eu" ]; - root = www_root; - extraConfig = [ "DirectoryIndex index.htm" ]; - }; - }; - - services.websites.env.tools = { - enable = true; - adminAddr = "httpd@immae.eu"; - httpdName = "Tools"; - ips = - let ips = config.myEnv.servers.eldiron.ips.main; - in [ips.ip4] ++ (ips.ip6 or []); - modules = makeModules; - extraConfig = makeExtraConfig ++ - [ '' - RedirectMatch ^/licen[cs]es?_et_tip(ping)?$ https://www.immae.eu/licences_et_tip.html - RedirectMatch ^/licen[cs]es?_and_tip(ping)?$ https://www.immae.eu/licenses_and_tipping.html - RedirectMatch ^/licen[cs]es?$ https://www.immae.eu/licenses_and_tipping.html - RedirectMatch ^/tip(ping)?$ https://www.immae.eu/licenses_and_tipping.html - RedirectMatch ^/(mentions|mentions_legales|legal)$ https://www.immae.eu/mentions.html - RedirectMatch ^/CGU$ https://www.immae.eu/CGU - '' - ]; - nosslVhost = { - enable = true; - host = "nossl.immae.eu"; - }; - fallbackVhost = { - certName = "eldiron"; - hosts = ["eldiron.immae.eu" ]; - root = www_root; - extraConfig = [ "DirectoryIndex index.htm" ]; - }; - }; - - myServices.websites = { - bakeer.cloud.enable = true; - capitaines.landing_pages.enable = true; - - chloe = { - integration.enable = true; - production.enable = true; - }; - - cip-ca = { - sympa.enable = true; - }; - - connexionswing = { - integration.enable = true; - production.enable = true; - }; - - denise = { - evariste.enable = true; - denisejerome.enable = true; - oms.enable = true; - bingo.enable = true; - aventuriers.enable = true; - production.enable = true; - }; - - emilia = { - moodle.enable = false; - atelierfringant.enable = true; - }; - - florian = { - app.enable = true; - integration.enable = true; - production.enable = true; - }; - - immae = { - production.enable = true; - release.enable = true; - temp.enable = true; - }; - - isabelle = { - aten_integration.enable = true; - aten_production.enable = true; - iridologie.enable = true; - }; - - jerome.naturaloutil.enable = true; - - leila.production.enable = true; - - ludivine = { - integration.enable = true; - production.enable = true; - }; - - nassime.production.enable = true; - - nath.villon.enable = true; - - papa = { - surveillance.enable = true; - maison_bbc.enable = true; - }; - - patrick_fodella = { - ecolyeu.enable = true; - altermondia.enable = true; - }; - - piedsjaloux = { - integration.enable = true; - production.enable = true; - }; - - ressourcerie_banon.production.enable = true; - ressourcerie_banon.cryptpad.enable = true; - ressourcerie_banon.cloud.enable = true; - - richie.production.enable = true; - - syden.peertube.enable = true; - - telio_tortay.production.enable = true; - - tools.assets.enable = true; - tools.cloud.enable = true; - tools.commento.enable = true; - tools.cryptpad.enable = true; - tools.dav.enable = true; - tools.db.enable = true; - tools.diaspora.enable = true; - tools.etherpad-lite.enable = true; - tools.git.enable = true; - tools.mastodon.enable = true; - tools.mediagoblin.enable = true; - tools.peertube.enable = true; - tools.performance.enable = true; - tools.tools.enable = true; - tools.email.enable = true; - tools.stats.enable = false; - - games.codenames.enable = true; - games.terraforming-mars.enable = true; - }; - }; -} diff --git a/modules/private/websites/denise/aventuriers.nix b/modules/private/websites/denise/aventuriers.nix deleted file mode 100644 index 2bbf7bf..0000000 --- a/modules/private/websites/denise/aventuriers.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ lib, config, pkgs, ... }: -let - cfg = config.myServices.websites.denise.aventuriers; - varDir = "/var/lib/buildbot/outputs/denise/aventuriers"; -in { - options.myServices.websites.denise.aventuriers.enable = lib.mkEnableOption "enable Denise's Aventuriers website"; - - config = lib.mkIf cfg.enable { - services.websites.env.production.vhostConfs.denise_aventuriers = { - certName = "denise"; - addToCerts = true; - hosts = [ "aventuriers.syanni.eu" ]; - root = varDir; - extraConfig = [ - '' - - DirectoryIndex aventuriers.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride None - Require all granted - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/denise/bingo.nix b/modules/private/websites/denise/bingo.nix deleted file mode 100644 index 9130462..0000000 --- a/modules/private/websites/denise/bingo.nix +++ /dev/null @@ -1,100 +0,0 @@ -{ lib, config, pkgs, ... }: -let - cfg = config.myServices.websites.denise.bingo; - varDir = "/var/lib/buildbot/outputs/denise/bingo"; - varDirBeta = "/var/lib/buildbot/outputs/denise/bingo_beta"; - socket = "/run/denise_bingo/socket.sock"; - socket_beta = "/run/denise_bingo_beta/socket.sock"; -in { - options.myServices.websites.denise.bingo.enable = lib.mkEnableOption "enable Denise's bingo website"; - - config = lib.mkIf cfg.enable { - services.websites.env.production.vhostConfs.denise_bingo = { - certName = "denise"; - addToCerts = true; - hosts = [ "bingo.syanni.eu" ]; - root = null; - extraConfig = [ - '' - ProxyPreserveHost on - ProxyVia On - ProxyRequests Off - ProxyPassMatch ^/.well-known/acme-challenge ! - ProxyPass / unix://${socket}|http://bingo.syanni.eu/ - ProxyPassReverse / unix://${socket}|http://bingo.syanni.eu/ - '' - ]; - }; - - systemd.services.denise-bingo = { - description = "Denise bingo website"; - after = [ "network.target" ]; - wantedBy = [ "multi-user.target" ]; - - serviceConfig = { - Type = "simple"; - WorkingDirectory = varDir; - ExecStart = let - python = pkgs.python3.withPackages (p: [ p.gunicorn p.flask p.matplotlib p.unidecode ]); - in - "${python}/bin/gunicorn -w4 -p /run/denise_bingo/gunicorn.pid --bind unix:${socket} app:app"; - User = "wwwrun"; - Restart = "always"; - RestartSec = "5s"; - PIDFile = "/run/denise_bingo/gunicorn.pid"; - RuntimeDirectory = "denise_bingo"; - StandardOutput = "journal"; - StandardError = "inherit"; - }; - }; - - security.sudo.extraRules = [ - { - commands = [ - { options = [ "NOPASSWD" ]; command = "${pkgs.systemd}/bin/systemctl restart denise-bingo-beta.service"; } - { options = [ "NOPASSWD" ]; command = "${pkgs.systemd}/bin/systemctl restart denise-bingo.service"; } - ]; - users = ["buildbot"]; - runAs = "root"; - } - ]; - services.websites.env.integration.vhostConfs.denise_bingo_beta = { - certName = "denise"; - addToCerts = true; - hosts = [ "beta.bingo.syanni.eu" ]; - root = null; - extraConfig = [ - '' - ProxyPreserveHost on - ProxyVia On - ProxyRequests Off - ProxyPassMatch ^/.well-known/acme-challenge ! - ProxyPass / unix://${socket_beta}|http://beta.bingo.syanni.eu/ - ProxyPassReverse / unix://${socket_beta}|http://beta.bingo.syanni.eu/ - '' - ]; - }; - - systemd.services.denise-bingo-beta = { - description = "Denise bingo beta website"; - after = [ "network.target" ]; - wantedBy = [ "multi-user.target" ]; - - serviceConfig = { - Type = "simple"; - WorkingDirectory = varDirBeta; - ExecStart = let - python = pkgs.python3.withPackages (p: [ p.gunicorn p.flask ]); - in - "${python}/bin/gunicorn -w4 -p /run/denise_bingo_beta/gunicorn.pid --bind unix:${socket_beta} app:app"; - User = "wwwrun"; - Restart = "always"; - RestartSec = "5s"; - PIDFile = "/run/denise_bingo_beta/gunicorn.pid"; - RuntimeDirectory = "denise_bingo_beta"; - StandardOutput = "journal"; - StandardError = "inherit"; - }; - }; - }; -} diff --git a/modules/private/websites/denise/denisejerome.nix b/modules/private/websites/denise/denisejerome.nix deleted file mode 100644 index a75e591..0000000 --- a/modules/private/websites/denise/denisejerome.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ lib, config, ... }: -let - cfg = config.myServices.websites.denise.denisejerome; - varDir = "/var/lib/ftp/denise/denisejerome"; - env = config.myEnv.websites.denisejerome; -in { - options.myServices.websites.denise.denisejerome.enable = lib.mkEnableOption "enable Denise Jerome's website"; - - config = lib.mkIf cfg.enable { - services.webstats.sites = [ { name = "denisejerome.piedsjaloux.fr"; } ]; - - services.websites.env.production.vhostConfs.denise_denisejerome = { - certName = "denise"; - certMainHost = "denisejerome.piedsjaloux.fr"; - hosts = ["denisejerome.piedsjaloux.fr" ]; - root = varDir; - extraConfig = [ - '' - Use Stats denisejerome.piedsjaloux.fr - - - DirectoryIndex index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride AuthConfig - Require all granted - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/denise/evariste.nix b/modules/private/websites/denise/evariste.nix deleted file mode 100644 index 42f9b2e..0000000 --- a/modules/private/websites/denise/evariste.nix +++ /dev/null @@ -1,104 +0,0 @@ -{ lib, config, pkgs, ... }: -let - cfg = config.myServices.websites.denise.evariste; - nsiVarDir = "/var/lib/ftp/denise/nsievariste"; - stmgVarDir = "/var/lib/ftp/denise/stmgevariste"; - apacheUser = config.services.httpd.Prod.user; - apacheGroup = config.services.httpd.Prod.group; -in { - options.myServices.websites.denise.evariste.enable = lib.mkEnableOption "enable NSI/STMG Evariste website"; - - config = lib.mkIf cfg.enable { - services.webstats.sites = [ - { name = "nsievariste.immae.eu"; } - { name = "stmgevariste.immae.eu"; } - ]; - - services.websites.env.production.modules = [ "proxy_fcgi" ]; - system.activationScripts.denise_evariste = { - deps = [ "httpd" ]; - text = '' - install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/php/sessions/denise_nsievariste - install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/php/sessions/denise_stmgevariste - ''; - }; - services.phpfpm.pools.denise_nsievariste = { - user = apacheUser; - group = apacheGroup; - settings = { - "listen.owner" = apacheUser; - "listen.group" = apacheGroup; - - "pm" = "ondemand"; - "pm.max_children" = "5"; - "pm.process_idle_timeout" = "60"; - - "php_admin_value[open_basedir]" = "/var/lib/php/sessions/denise_nsievariste:${nsiVarDir}:/tmp"; - "php_admin_value[session.save_path]" = "/var/lib/php/sessions/denise_nsievariste"; - }; - phpPackage = pkgs.php72; - }; - services.websites.env.production.vhostConfs.denise_nsievariste = { - certName = "denise_evariste"; - addToCerts = true; - certMainHost = "nsievariste.immae.eu"; - hosts = ["nsievariste.immae.eu" ]; - root = nsiVarDir; - extraConfig = [ - '' - Use Stats nsievariste.immae.eu - - - SetHandler "proxy:unix:${config.services.phpfpm.pools.denise_nsievariste.socket}|fcgi://localhost" - - - - DirectoryIndex index.php index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride None - Require all granted - - '' - ]; - }; - - services.phpfpm.pools.denise_stmgevariste = { - user = apacheUser; - group = apacheGroup; - settings = { - "listen.owner" = apacheUser; - "listen.group" = apacheGroup; - - "pm" = "ondemand"; - "pm.max_children" = "5"; - "pm.process_idle_timeout" = "60"; - - "php_admin_value[open_basedir]" = "/var/lib/php/sessions/denise_stmgevariste:${stmgVarDir}:/tmp"; - "php_admin_value[session.save_path]" = "/var/lib/php/sessions/denise_stmgevariste"; - }; - phpPackage = pkgs.php72; - }; - services.websites.env.production.vhostConfs.denise_stmgevariste = { - certName = "denise_evariste"; - addToCerts = true; - hosts = ["stmgevariste.immae.eu" ]; - root = stmgVarDir; - extraConfig = [ - '' - Use Stats stmgevariste.immae.eu - - - SetHandler "proxy:unix:${config.services.phpfpm.pools.denise_stmgevariste.socket}|fcgi://localhost" - - - - DirectoryIndex index.php index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride None - Require all granted - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/denise/oms.nix b/modules/private/websites/denise/oms.nix deleted file mode 100644 index 2f18037..0000000 --- a/modules/private/websites/denise/oms.nix +++ /dev/null @@ -1,100 +0,0 @@ -{ lib, config, pkgs, ... }: -let - cfg = config.myServices.websites.denise.oms; - varDir = "/var/lib/buildbot/outputs/denise/oms"; - varDirBeta = "/var/lib/buildbot/outputs/denise/oms_beta"; - socket = "/run/denise_oms/socket.sock"; - socket_beta = "/run/denise_oms_beta/socket.sock"; -in { - options.myServices.websites.denise.oms.enable = lib.mkEnableOption "enable Denise's OMS website"; - - config = lib.mkIf cfg.enable { - services.websites.env.production.vhostConfs.denise_oms = { - certName = "denise"; - addToCerts = true; - hosts = [ "oms.syanni.eu" ]; - root = null; - extraConfig = [ - '' - ProxyPreserveHost on - ProxyVia On - ProxyRequests Off - ProxyPassMatch ^/.well-known/acme-challenge ! - ProxyPass / unix://${socket}|http://oms.syanni.eu/ - ProxyPassReverse / unix://${socket}|http://oms.syanni.eu/ - '' - ]; - }; - - systemd.services.denise-oms = { - description = "Denise OMS website"; - after = [ "network.target" ]; - wantedBy = [ "multi-user.target" ]; - - serviceConfig = { - Type = "simple"; - WorkingDirectory = varDir; - ExecStart = let - python = pkgs.python3.withPackages (p: [ p.gunicorn p.flask p.matplotlib p.unidecode ]); - in - "${python}/bin/gunicorn -w4 -p /run/denise_oms/gunicorn.pid --bind unix:${socket} app:app"; - User = "wwwrun"; - Restart = "always"; - RestartSec = "5s"; - PIDFile = "/run/denise_oms/gunicorn.pid"; - RuntimeDirectory = "denise_oms"; - StandardOutput = "journal"; - StandardError = "inherit"; - }; - }; - - security.sudo.extraRules = [ - { - commands = [ - { options = [ "NOPASSWD" ]; command = "${pkgs.systemd}/bin/systemctl restart denise-oms-beta.service"; } - { options = [ "NOPASSWD" ]; command = "${pkgs.systemd}/bin/systemctl restart denise-oms.service"; } - ]; - users = ["buildbot"]; - runAs = "root"; - } - ]; - services.websites.env.integration.vhostConfs.denise_oms_beta = { - certName = "denise"; - addToCerts = true; - hosts = [ "beta.oms.syanni.eu" ]; - root = null; - extraConfig = [ - '' - ProxyPreserveHost on - ProxyVia On - ProxyRequests Off - ProxyPassMatch ^/.well-known/acme-challenge ! - ProxyPass / unix://${socket_beta}|http://beta.oms.syanni.eu/ - ProxyPassReverse / unix://${socket_beta}|http://beta.oms.syanni.eu/ - '' - ]; - }; - - systemd.services.denise-oms-beta = { - description = "Denise OMS beta website"; - after = [ "network.target" ]; - wantedBy = [ "multi-user.target" ]; - - serviceConfig = { - Type = "simple"; - WorkingDirectory = varDirBeta; - ExecStart = let - python = pkgs.python3.withPackages (p: [ p.gunicorn p.flask p.matplotlib p.unidecode ]); - in - "${python}/bin/gunicorn -w4 -p /run/denise_oms_beta/gunicorn.pid --bind unix:${socket_beta} app:app"; - User = "wwwrun"; - Restart = "always"; - RestartSec = "5s"; - PIDFile = "/run/denise_oms_beta/gunicorn.pid"; - RuntimeDirectory = "denise_oms_beta"; - StandardOutput = "journal"; - StandardError = "inherit"; - }; - }; - }; -} diff --git a/modules/private/websites/denise/production.nix b/modules/private/websites/denise/production.nix deleted file mode 100644 index 9b28e9e..0000000 --- a/modules/private/websites/denise/production.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ lib, config, pkgs, ... }: -let - cfg = config.myServices.websites.denise.production; -in { - options.myServices.websites.denise.production.enable = lib.mkEnableOption "enable Denise's website"; - - config = lib.mkIf cfg.enable { - services.websites.env.production.vhostConfs.denise_production = { - certName = "denise"; - addToCerts = true; - hosts = [ "syanni.eu" "www.syanni.eu" ]; - root = ../_www; - extraConfig = [ - '' - - DirectoryIndex index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride AuthConfig - Require all granted - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/emilia/atelierfringant.nix b/modules/private/websites/emilia/atelierfringant.nix deleted file mode 100644 index b47452f..0000000 --- a/modules/private/websites/emilia/atelierfringant.nix +++ /dev/null @@ -1,65 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.websites.emilia.atelierfringant; - varDir = "/var/lib/ftp/emilia/atelierfringant"; - apacheUser = config.services.httpd.Prod.user; - apacheGroup = config.services.httpd.Prod.group; -in { - options.myServices.websites.emilia.atelierfringant.enable = lib.mkEnableOption "enable Émilia's website"; - - config = lib.mkIf cfg.enable { - system.activationScripts.emilia_atelierfringant = { - deps = [ "httpd" ]; - text = '' - install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/ftp/emilia/atelierfringant - install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/php/sessions/emilia - ''; - }; - systemd.services.phpfpm-emilia_atelierfringant.after = lib.mkAfter [ "mysql.service" ]; - systemd.services.phpfpm-emilia_atelierfringant.wants = [ "mysql.service" ]; - services.phpfpm.pools.emilia_atelierfringant = { - user = apacheUser; - group = apacheGroup; - settings = { - "listen.owner" = apacheUser; - "listen.group" = apacheGroup; - - "pm" = "ondemand"; - "pm.max_children" = "5"; - "pm.process_idle_timeout" = "60"; - - "php_admin_value[open_basedir]" = "/var/lib/php/sessions/emilia:${varDir}:/tmp"; - "php_admin_value[session.save_path]" = "/var/lib/php/sessions/emilia"; - }; - phpOptions = config.services.phpfpm.phpOptions + '' - disable_functions = "mail" - ''; - phpPackage = pkgs.php72; - }; - services.websites.env.production.modules = [ "proxy_fcgi" ]; - services.websites.env.production.vhostConfs.emilia_atelierfringant = { - certName = "emilia"; - certMainHost = "atelierfringant.org"; - hosts = ["atelierfringant.org" "www.atelierfringant.org" ]; - root = varDir; - extraConfig = [ - '' - - SetHandler "proxy:unix:${config.services.phpfpm.pools.emilia_atelierfringant.socket}|fcgi://localhost" - - - - AllowOverride None - Require all denied - - - DirectoryIndex index.php index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride all - Require all granted - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/emilia/moodle.nix b/modules/private/websites/emilia/moodle.nix deleted file mode 100644 index 779c460..0000000 --- a/modules/private/websites/emilia/moodle.nix +++ /dev/null @@ -1,65 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.websites.emilia.moodle; - env = config.myEnv.websites.emilia; - varDir = "/var/lib/emilia_moodle"; - siteDir = ./moodle; - # php_admin_value[upload_max_filesize] = 50000000 - # php_admin_value[post_max_size] = 50000000 - configFile = '' - dbtype = 'pgsql'; - $CFG->dblibrary = 'native'; - $CFG->dbhost = '${env.postgresql.host}'; - $CFG->dbname = '${env.postgresql.database}'; - $CFG->dbuser = '${env.postgresql.user}'; - $CFG->dbpass = '${env.postgresql.password}'; - $CFG->prefix = 'mdl_'; - $CFG->dboptions = array ( - 'dbpersist' => 0, - 'dbport' => '${env.postgreesql.port}', - 'dbsocket' => '${env.postgresql.password}', - ); - - $CFG->wwwroot = 'https://www.saison-photo.org'; - $CFG->dataroot = '${varDir}'; - $CFG->admin = 'admin'; - - $CFG->directorypermissions = 02777; - - require_once(__DIR__ . '/lib/setup.php'); - - // There is no php closing tag in this file, - // it is intentional because it prevents trailing whitespace problems! - ''; - apacheUser = config.services.httpd.Prod.user; - apacheGroup = config.services.httpd.Prod.group; -in { - options.myServices.websites.emilia.moodle.enable = lib.mkEnableOption "enable Emilia's website"; - - config = lib.mkIf cfg.enable { - system.activationScripts.emilia_moodle = '' - install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${varDir} - ''; - services.websites.env.production.vhostConfs.emilia_moodle = { - certName = "emilia"; - certMainHost = "saison-photo.org"; - hosts = [ "saison-photo.org" "www.saison-photo.org" ]; - root = siteDir; - extraConfig = [ - '' - - DirectoryIndex pause.html - Options Indexes FollowSymLinks MultiViews Includes - Require all granted - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/emilia/moodle/pause.html b/modules/private/websites/emilia/moodle/pause.html deleted file mode 100644 index 8b99c59..0000000 --- a/modules/private/websites/emilia/moodle/pause.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - Pause - - - - -
-

Site web en pause !

-
-

Le site et les cours de photographie sont actuellement en pause.

-
-
- - diff --git a/modules/private/websites/florian/app.nix b/modules/private/websites/florian/app.nix deleted file mode 100644 index 2df344f..0000000 --- a/modules/private/websites/florian/app.nix +++ /dev/null @@ -1,142 +0,0 @@ -{ lib, pkgs, config, ... }: -let - adminer = pkgs.callPackage ../commons/adminer.nix { inherit config; }; - secrets = config.myEnv.websites.tellesflorian.integration; - webRoot = "/var/lib/ftp/immae/florian/web"; - cfg = config.myServices.websites.florian.app; - pcfg = config.services.phpApplication; -in { - options.myServices.websites.florian.app.enable = lib.mkEnableOption "enable Florian's app in integration"; - - config = lib.mkIf cfg.enable { - services.phpApplication.apps.florian_app = { - websiteEnv = "integration"; - httpdUser = config.services.httpd.Inte.user; - httpdGroup = config.services.httpd.Inte.group; - inherit webRoot; - varDir = "/var/lib/ftp/immae/florian_var"; - varDirPaths = { - "var" = "0700"; - }; - app = "/var/lib/ftp/immae/florian"; - serviceDeps = [ "mysql.service" ]; - preStartActions = [ - "./bin/console --env=dev cache:clear --no-warmup" - ]; - phpOpenbasedir = [ "/tmp" ]; - phpPool = { - "php_admin_value[upload_max_filesize]" = "20M"; - "php_admin_value[post_max_size]" = "20M"; - #"php_admin_flag[log_errors]" = "on"; - "pm" = "ondemand"; - "pm.max_children" = "5"; - "pm.process_idle_timeout" = "60"; - }; - phpEnv = { - SYMFONY_DEBUG_MODE = "\"yes\""; - }; - phpWatchFiles = [ - config.secrets.fullPaths."websites/florian/app" - ]; - phpPackage = pkgs.php72; - }; - - secrets.keys = { - "websites/florian/app_passwords" = { - user = config.services.httpd.Inte.user; - group = config.services.httpd.Inte.group; - permissions = "0400"; - text = '' - invite:${secrets.invite_passwords} - ''; - }; - "websites/florian/app" = { - user = config.services.httpd.Inte.user; - group = config.services.httpd.Inte.group; - permissions = "0400"; - text = '' - # This file is auto-generated during the composer install - parameters: - database_host: ${secrets.mysql.host} - database_port: ${secrets.mysql.port} - database_name: ${secrets.mysql.database} - database_user: ${secrets.mysql.user} - database_password: ${secrets.mysql.password} - mailer_transport: smtp - mailer_host: 127.0.0.1 - mailer_user: null - mailer_password: null - secret: ${secrets.secret} - ''; - }; - }; - - services.websites.env.integration.modules = adminer.apache.modules; - services.websites.env.integration.vhostConfs.florian_app = { - certName = "integration"; - addToCerts = true; - hosts = [ "app.tellesflorian.com" ]; - root = webRoot; - extraConfig = [ - '' - - SetHandler "proxy:unix:${pcfg.phpListenPaths.florian_app}|fcgi://localhost" - - - - AuthBasicProvider file ldap - Use LDAPConnect - Require ldap-group cn=app.tellesflorian.com,cn=httpd,ou=services,dc=immae,dc=eu - - AuthUserFile "${config.secrets.fullPaths."websites/florian/app_passwords"}" - Require user "invite" - - ErrorDocument 401 "" - - - - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride None - Require all granted - - DirectoryIndex app_dev.php - - - Options -MultiViews - - - - RewriteEngine On - - RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ - RewriteRule ^(.*) - [E=BASE:%1] - - # Maintenance script - RewriteCond %{DOCUMENT_ROOT}/maintenance.php -f - RewriteCond %{SCRIPT_FILENAME} !maintenance.php - RewriteRule ^.*$ %{ENV:BASE}/maintenance.php [R=503,L] - ErrorDocument 503 /maintenance.php - - # Sets the HTTP_AUTHORIZATION header removed by Apache - RewriteCond %{HTTP:Authorization} . - RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] - - RewriteCond %{ENV:REDIRECT_STATUS} ^$ - RewriteRule ^app_dev\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L] - - # If the requested filename exists, simply serve it. - # We only want to let Apache serve files and not directories. - RewriteCond %{REQUEST_FILENAME} -f - RewriteRule ^ - [L] - - # Rewrite all other queries to the front controller. - RewriteRule ^ %{ENV:BASE}/app_dev.php [L] - - - - '' - (adminer.apache.vhostConf null) - ]; - }; - }; -} diff --git a/modules/private/websites/florian/app/default.nix b/modules/private/websites/florian/app/default.nix deleted file mode 100644 index 28a7ec1..0000000 --- a/modules/private/websites/florian/app/default.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ environment, varDir, secretsPath -, composerEnv, fetchurl, sources }: -let - app = composerEnv.buildPackage ( - import ./php-packages.nix { inherit composerEnv fetchurl; } // - rec { - version = sources.websites-florian-app.version; - pname = "tellesflorian"; - name = "${pname}-${version}"; - src = sources.websites-florian-app; - noDev = (environment == "prod"); - preInstall = '' - export SYMFONY_ENV="${environment}" - ''; - postInstall = '' - cd $out - rm app/config/parameters.yml - ln -sf ${secretsPath} app/config/parameters.yml - rm -rf var/{logs,cache} - ln -sf ${varDir}/var/{logs,cache,sessions} var/ - ''; - passthru = { - inherit varDir environment; - webRoot = "${app}/web"; - }; - }); -in app diff --git a/modules/private/websites/florian/app/php-packages.nix b/modules/private/websites/florian/app/php-packages.nix deleted file mode 100644 index 0c7e00c..0000000 --- a/modules/private/websites/florian/app/php-packages.nix +++ /dev/null @@ -1,389 +0,0 @@ -# Generated with composer2nix and adapted to return only the list of -# packages -{ composerEnv, fetchurl }: -{ - packages = { - "composer/ca-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "composer-ca-bundle-943b2c4fcad1ef178d16a713c2468bf7e579c288"; - src = fetchurl { - url = https://api.github.com/repos/composer/ca-bundle/zipball/943b2c4fcad1ef178d16a713c2468bf7e579c288; - sha256 = "1gljia7akifp57w4rjzyh1km23kwymmvglz0mgafdgqzczcw0m6w"; - }; - }; - }; - "doctrine/annotations" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-annotations-f25c8aab83e0c3e976fd7d19875f198ccf2f7535"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/annotations/zipball/f25c8aab83e0c3e976fd7d19875f198ccf2f7535; - sha256 = "08vm22fqq8r4bg2fk06y4inqnc8x0yfmsss28w5ra2011x2phq4z"; - }; - }; - }; - "doctrine/cache" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-cache-eb152c5100571c7a45470ff2a35095ab3f3b900b"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/cache/zipball/eb152c5100571c7a45470ff2a35095ab3f3b900b; - sha256 = "0iq0qqv1smlqz63jhj2fpjy54c5dwfwxyf5c89iky6i0yb81gwyd"; - }; - }; - }; - "doctrine/collections" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-collections-6c1e4eef75f310ea1b3e30945e9f06e652128b8a"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/collections/zipball/6c1e4eef75f310ea1b3e30945e9f06e652128b8a; - sha256 = "1dkxr2vjycykpcnnmq68rcnn1ww0kbpizd5pxxm6x9i2ilj8cbn7"; - }; - }; - }; - "doctrine/common" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-common-7bce00698899aa2c06fe7365c76e4d78ddb15fa3"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/common/zipball/7bce00698899aa2c06fe7365c76e4d78ddb15fa3; - sha256 = "12yizcsxsbhhi8hwaik4zalr12n5nxbpld05zygqhx6miyr92jyd"; - }; - }; - }; - "doctrine/dbal" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-dbal-729340d8d1eec8f01bff708e12e449a3415af873"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/dbal/zipball/729340d8d1eec8f01bff708e12e449a3415af873; - sha256 = "184p8h0n6mcm0y6vfyh0z6qcxmmf8h5z4vdvxd4ycmx0531lnhj3"; - }; - }; - }; - "doctrine/doctrine-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-doctrine-bundle-eb6e4fb904a459be28872765ab6e2d246aac7c87"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/DoctrineBundle/zipball/eb6e4fb904a459be28872765ab6e2d246aac7c87; - sha256 = "0kkisgyblc9hf9x3zpbb1wif51fa8mi6svyd44nls38k9k93dp17"; - }; - }; - }; - "doctrine/doctrine-cache-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-doctrine-cache-bundle-9baecbd6bfdd1123b0cf8c1b88fee0170a84ddd1"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/9baecbd6bfdd1123b0cf8c1b88fee0170a84ddd1; - sha256 = "08bqz18vk4673pnm2r2pcph6pdchc36zajnma1p9c6dp21sv7iki"; - }; - }; - }; - "doctrine/inflector" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-inflector-90b2128806bfde671b6952ab8bea493942c1fdae"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae; - sha256 = "01vmclj3k7xil51jg329fznshh8d07pvm4mr89lvfn1d7fyrq6qw"; - }; - }; - }; - "doctrine/instantiator" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-instantiator-8e884e78f9f0eb1329e445619e04456e64d8051d"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d; - sha256 = "15dcja45rnwya431pcm826l68k1g8f1fabl7rih69alcdyvdlln4"; - }; - }; - }; - "doctrine/lexer" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-lexer-83893c552fd2045dd78aef794c31e694c37c0b8c"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c; - sha256 = "0cyh3vwcl163cx1vrcwmhlh5jg9h47xwiqgzc6rwscxw0ppd1v74"; - }; - }; - }; - "doctrine/orm" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-orm-810a7baf81462a5ddf10e8baa8cb94b6eec02754"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/doctrine2/zipball/810a7baf81462a5ddf10e8baa8cb94b6eec02754; - sha256 = "1hmkc7917kgnav9hmlgvlp7qwm3zjj910ci71g9yqwjh6s28wrf1"; - }; - }; - }; - "fig/link-util" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "fig-link-util-1a07821801a148be4add11ab0603e4af55a72fac"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/link-util/zipball/1a07821801a148be4add11ab0603e4af55a72fac; - sha256 = "0ky1pq4a17br5zvcychjghgwr6wpkgp409hdv0ljdk3ks90w5w64"; - }; - }; - }; - "incenteev/composer-parameter-handler" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "incenteev-composer-parameter-handler-933c45a34814f27f2345c11c37d46b3ca7303550"; - src = fetchurl { - url = https://api.github.com/repos/Incenteev/ParameterHandler/zipball/933c45a34814f27f2345c11c37d46b3ca7303550; - sha256 = "1zqdwlcl790kjyz4rkpva35xkfsp8kslds82fzznj0yigkgnbifm"; - }; - }; - }; - "jdorn/sql-formatter" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "jdorn-sql-formatter-64990d96e0959dff8e059dfcdc1af130728d92bc"; - src = fetchurl { - url = https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc; - sha256 = "1dnmkm8mxylvxjwi0bdkzrlklncqx92fa4fwqp5bh2ypj8gaagzi"; - }; - }; - }; - "monolog/monolog" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "monolog-monolog-fd8c787753b3a2ad11bc60c063cff1358a32a3b4"; - src = fetchurl { - url = https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4; - sha256 = "0avf3y8raw23krwdb7kw9qb5bsr5ls4i7qd2vh7hcds3qjixg3h9"; - }; - }; - }; - "paragonie/random_compat" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "paragonie-random_compat-5da4d3c796c275c55f057af5a643ae297d96b4d8"; - src = fetchurl { - url = https://api.github.com/repos/paragonie/random_compat/zipball/5da4d3c796c275c55f057af5a643ae297d96b4d8; - sha256 = "1hp6pin4923c300yi85m7qk04gsrbygv52wv5zm7giyyf0k0g073"; - }; - }; - }; - "psr/cache" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "psr-cache-d11b50ad223250cf17b86e38383413f5a6764bf8"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8; - sha256 = "06i2k3dx3b4lgn9a4v1dlgv8l9wcl4kl7vzhh63lbji0q96hv8qz"; - }; - }; - }; - "psr/container" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "psr-container-b7ce3b176482dbbc1245ebf52b181af44c2cf55f"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f; - sha256 = "0rkz64vgwb0gfi09klvgay4qnw993l1dc03vyip7d7m2zxi6cy4j"; - }; - }; - }; - "psr/link" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "psr-link-eea8e8662d5cd3ae4517c9b864493f59fca95562"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/link/zipball/eea8e8662d5cd3ae4517c9b864493f59fca95562; - sha256 = "091k4p9irkqnmq9b0p792wz1hb7dm4rafpjilw9im9xhsxgkmr13"; - }; - }; - }; - "psr/log" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "psr-log-4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d; - sha256 = "1mlcv17fjw39bjpck176ah1z393b6pnbw3jqhhrblj27c70785md"; - }; - }; - }; - "psr/simple-cache" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "psr-simple-cache-408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b; - sha256 = "1djgzclkamjxi9jy4m9ggfzgq1vqxaga2ip7l3cj88p7rwkzjxgw"; - }; - }; - }; - "sensio/distribution-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "sensio-distribution-bundle-eb6266b3b472e4002538610b28a0a04bcf94891a"; - src = fetchurl { - url = https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/eb6266b3b472e4002538610b28a0a04bcf94891a; - sha256 = "0wyffqj924lz9cv0vbahyngjw1g850v0p34swygzzgp3cr0ank13"; - }; - }; - }; - "sensio/framework-extra-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "sensio-framework-extra-bundle-bf4940572e43af679aaa13be98f3446a1c237bd8"; - src = fetchurl { - url = https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/bf4940572e43af679aaa13be98f3446a1c237bd8; - sha256 = "1kb1n5w3kfc0kf4pslqdx5pgp0g4hmaag0i00wvjj2n3pjfm5lhf"; - }; - }; - }; - "sensiolabs/security-checker" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "sensiolabs-security-checker-dc270d5fec418cc6ac983671dba5d80ffaffb142"; - src = fetchurl { - url = https://api.github.com/repos/sensiolabs/security-checker/zipball/dc270d5fec418cc6ac983671dba5d80ffaffb142; - sha256 = "0fnshyd6f8j91a7y604nh6sqgscjl48mfa0727g2r4hkdfz8hpd1"; - }; - }; - }; - "swiftmailer/swiftmailer" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "swiftmailer-swiftmailer-7ffc1ea296ed14bf8260b6ef11b80208dbadba91"; - src = fetchurl { - url = https://api.github.com/repos/swiftmailer/swiftmailer/zipball/7ffc1ea296ed14bf8260b6ef11b80208dbadba91; - sha256 = "1vl5pzgvr2yfrj1yfs02mi917b0gr56v76ibi40r51a3346zhp6v"; - }; - }; - }; - "symfony/monolog-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-monolog-bundle-8781649349fe418d51d194f8c9d212c0b97c40dd"; - src = fetchurl { - url = https://api.github.com/repos/symfony/monolog-bundle/zipball/8781649349fe418d51d194f8c9d212c0b97c40dd; - sha256 = "0wcqhg1vfdj3mxacr3fxpgqwy1rk9znjg9bmzx4jymk8l16i7bq8"; - }; - }; - }; - "symfony/polyfill-apcu" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-apcu-e8ae2136ddb53dea314df56fcd88e318ab936c00"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-apcu/zipball/e8ae2136ddb53dea314df56fcd88e318ab936c00; - sha256 = "07wdszb9ircnidjk3fp3cvcrggxv3sfm996jzd0a9pm6vfz9hymv"; - }; - }; - }; - "symfony/polyfill-intl-icu" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-intl-icu-254919c03761d46c29291616576ed003f10e91c1"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/254919c03761d46c29291616576ed003f10e91c1; - sha256 = "01yivzv7p55fzrkkyvgd57zpyz82zn1qp0h6nzr77k01rkv3w0ds"; - }; - }; - }; - "symfony/polyfill-mbstring" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-mbstring-78be803ce01e55d3491c1397cf1c64beb9c1b63b"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-mbstring/zipball/78be803ce01e55d3491c1397cf1c64beb9c1b63b; - sha256 = "0cqr8ni6wpbaxa9gyr40y5bsv54pa2g8kdarlfw3qg2rgzmk0yz1"; - }; - }; - }; - "symfony/polyfill-php56" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-php56-ebc999ce5f14204c5150b9bd15f8f04e621409d8"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-php56/zipball/ebc999ce5f14204c5150b9bd15f8f04e621409d8; - sha256 = "0b2j56l6d6rdggx7vr20d527df4pjfp4lgxpglsgbf5912rcyf83"; - }; - }; - }; - "symfony/polyfill-php70" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-php70-3532bfcd8f933a7816f3a0a59682fc404776600f"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-php70/zipball/3532bfcd8f933a7816f3a0a59682fc404776600f; - sha256 = "151m76lc9w0kxnnwk4zdcjlmj7fppibnp8jisgpvvq32ml3fizdi"; - }; - }; - }; - "symfony/polyfill-util" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-util-e17c808ec4228026d4f5a8832afa19be85979563"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-util/zipball/e17c808ec4228026d4f5a8832afa19be85979563; - sha256 = "17sdpdidc0b701f9rippjv1grfci7wrdpy2i1inlwwpr6zy782cq"; - }; - }; - }; - "symfony/swiftmailer-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-swiftmailer-bundle-c4808f5169efc05567be983909d00f00521c53ec"; - src = fetchurl { - url = https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/c4808f5169efc05567be983909d00f00521c53ec; - sha256 = "0jmd3slhb3gf3c3krmk2a9fi4ixdxvqlimdkfpj0sfaaq0115y01"; - }; - }; - }; - "symfony/symfony" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-symfony-874d4d659774d7bab90538072c83ed532dd17dc5"; - src = fetchurl { - url = https://api.github.com/repos/symfony/symfony/zipball/874d4d659774d7bab90538072c83ed532dd17dc5; - sha256 = "02rsn3sc34jh107n576jfbh666k06y44yr7hw61nir0d864k8api"; - }; - }; - }; - "twig/twig" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "twig-twig-9c24f2cd39dc1906b76879e099970b7e53724601"; - src = fetchurl { - url = https://api.github.com/repos/twigphp/Twig/zipball/9c24f2cd39dc1906b76879e099970b7e53724601; - sha256 = "0brfj2lahrrw1322zy6jyd380hjks1ynzzkmq3875a282gzrfkdz"; - }; - }; - }; - }; - devPackages = { - "sensio/generator-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "sensio-generator-bundle-28cbaa244bd0816fd8908b93f90380bcd7b67a65"; - src = fetchurl { - url = https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/28cbaa244bd0816fd8908b93f90380bcd7b67a65; - sha256 = "1j09y037xk843q8gcyfmwgy6dmn0h67pd5jnsvhj08h92ssbl0c3"; - }; - }; - }; - "symfony/phpunit-bridge" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-phpunit-bridge-32b06d2b0babf3216e55acfce42249321a304f03"; - src = fetchurl { - url = https://api.github.com/repos/symfony/phpunit-bridge/zipball/32b06d2b0babf3216e55acfce42249321a304f03; - sha256 = "0vw4q3lvz8gfs0r93ds8yymz8586k0czwa01c7d172rc8x02v0qq"; - }; - }; - }; - }; -} diff --git a/modules/private/websites/florian/integration.nix b/modules/private/websites/florian/integration.nix deleted file mode 100644 index 8ac1f46..0000000 --- a/modules/private/websites/florian/integration.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ lib, pkgs, config, ... }: -let - adminer = pkgs.callPackage ../commons/adminer.nix { inherit config; }; - cfg = config.myServices.websites.florian.integration; - varDir = "/var/lib/ftp/florian/www.ft.immae.dev"; - env = config.myEnv.websites.florian; -in { - options.myServices.websites.florian.integration.enable = lib.mkEnableOption "enable Florian's website integration"; - - config = lib.mkIf cfg.enable { - security.acme.certs."ftp".extraDomains."ft.immae.dev" = null; - - services.websites.env.integration.modules = adminer.apache.modules; - services.websites.env.integration.vhostConfs.florian_integration = { - certName = "integration"; - addToCerts = true; - hosts = [ "www.ft.immae.dev" ]; - root = varDir; - extraConfig = [ - (adminer.apache.vhostConf null) - '' - ServerAdmin ${env.server_admin} - - - DirectoryIndex index.php index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride None - Require all granted - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/florian/production.nix b/modules/private/websites/florian/production.nix deleted file mode 100644 index 1c5ffa6..0000000 --- a/modules/private/websites/florian/production.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ lib, pkgs, config, ... }: -let - adminer = pkgs.callPackage ../commons/adminer.nix { inherit config; }; - cfg = config.myServices.websites.florian.production; - varDir = "/var/lib/ftp/florian/tellesflorian.com"; - env = config.myEnv.websites.florian; -in { - options.myServices.websites.florian.production.enable = lib.mkEnableOption "enable Florian's website production"; - - config = lib.mkIf cfg.enable { - security.acme.certs."ftp".extraDomains."tellesflorian.com" = null; - - services.websites.env.production.modules = adminer.apache.modules; - services.websites.env.production.vhostConfs.florian_production = { - certName = "florian"; - certMainHost = "tellesflorian.com"; - hosts = [ "tellesflorian.com" "www.tellesflorian.com" ]; - root = varDir; - extraConfig = [ - (adminer.apache.vhostConf null) - '' - ServerAdmin ${env.server_admin} - - - DirectoryIndex index.php index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride None - Require all granted - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/immae/chatons/immae-eu.properties b/modules/private/websites/immae/chatons/immae-eu.properties deleted file mode 100644 index 32b2d47..0000000 --- a/modules/private/websites/immae/chatons/immae-eu.properties +++ /dev/null @@ -1,46 +0,0 @@ -# https://framagit.org/chatons/chatonsinfos/-/blob/master/MODELES/organization.properties - -# [File] -file.class = organization -file.protocol = ChatonsInfos-0.1 -file.datetime = 2021-01-11T22:23:00 -file.generator = Immae avec ses doigts - -# [Organisation] -organization.country.name = France -organization.country.code = FR -organization.name = ImmaeEu -organization.description = ImmaeEu est un CHATONS des Alpes Maritimes -organization.website = https://www.immae.eu -organization.logo = https://assets.immae.eu/logo.jpg -organization.socialnetworks.diaspora = https://diaspora.immae.eu/people/1a185f29cc76cb35 -organization.socialnetworks.facebook = https://www.facebook.com/ismael.bouya -organization.socialnetworks.mastodon = https://mastodon.immae.eu/@immae -organization.socialnetworks.peertube = https://peertube.immae.eu/accounts/immae/ -organization.socialnetworks.twitter = https://twitter.com/_immae -organization.chatrooms.xmpp = ismael@immae.fr -organization.chatrooms.irc = immae@freenode -organization.chatrooms.matrix = @immae:matrix.org -organization.owner.name = Ismaël Bouya -organization.owner.website = https://www.immae.eu -organization.owner.logo = https://assets.immae.eu/logo.jpg -organization.contact.url = https://www.immae.eu/contacts_fr.html -organization.contact.email = contact@mail.immae.eu -organization.legal.url = https://www.immae.eu/mentions.html -organization.guide.technical = https://git.immae.eu/cgit/perso/Immae/Config/Nix.git/ -organization.status.level = ACTIVE -organization.status.description = En activité -organization.startdate = 01/01/2019 - -organization.memberof.chatons.startdate = 01/07/2019 -organization.memberof.chatons.status.level = ACTIVE -organization.memberof.chatons.status.description = Participe au collectif - -# [Subs] -# Un lien vers un fichier properties complémentaire (type URL, optionnel, ex. https://www.chapril.org/.well-known/chapril.properties). -subs.etherpad = https://www.immae.eu/.well-known/chatonsinfos/service-etherpad.properties - - -# [Metrics] -#metrics.http.total.2020 = - diff --git a/modules/private/websites/immae/chatons/service-etherpad.properties b/modules/private/websites/immae/chatons/service-etherpad.properties deleted file mode 100644 index cfcab1d..0000000 --- a/modules/private/websites/immae/chatons/service-etherpad.properties +++ /dev/null @@ -1,164 +0,0 @@ -# service.properties - -# [File] -# Classe du fichier (valeur parmi Federation/Organization/Service/Device, obligatoire). -file.class = service - -# Version de l'ontologie utilisée utilisé (type STRING, recommandé). -file.protocol = ChatonsInfos-0.1 - -# Date et horaire de génération du fichier (type DATETIME, recommandé). -file.datetime = 2021-01-04T00:01:00 - -# Nom du générateur du fichier (type STRING, recommandé). Exemple : Florian avec ses doigts -file.generator = Immae avec ses doigts - - -# [Service] -# Nom du service (type STRING, obligatoire). Exemple : Pad Exemple -service.name = Etherpard - -# Description du service (type STRING, recommandé). -service.description = Éditeur de texte collaboratif en temps réel. on peut y écrire simultanément. - -# Lien du site web du service (type URL, recommandé). Exemple : https://pad.exemple.ext -service.website = https://ether.immae.eu - -# Lien du logo du service (type URL, recommandé, ex. https://www.chapril.org/.well-known/statoolinfos/chapril-logo-mini.png. -service.logo = https://ether.immae.eu/favicon.ico - -# Lien de la page web des mentions légales du service (type URL, recommandé). Exemple : https://pad.exemple.ext/cgu.html -service.legal.url = https://www.immae.eu/mentions.html - -# Lien de la documentation web du service (type URL, recommandé). -service.guide.technical = https://git.immae.eu/cgit/perso/Immae/Config/Nix.git/ - -# Lien des aides web pour le service (type URL, recommandé). -service.guide.user = - -# Lien de la page de support du service (type URL, recommandé). Exemple : https://exemple.ext/contact.html -service.contact.url = https://www.immae.eu/contacts_fr.html - -# Courriel du support du service (type EMAIL, recommandé). Exemple : contact@exemple.ext -service.contact.email = contact@mail.immae.eu - -# Date d'ouverture du service (type DATE, recommandé). Exemple : 20/03/2020 -service.startdate = 01/01/2019 - -# Date de fermeture du service (type DATE, optionnel). -service.enddate = - -# Statut du service (un parmi {OK,WARNING,ALERT,ERROR,OVER,VOID}, obligatoire). -service.status.level = OK - -# Description du statut du service (type STRING, optionnel, exemple : mise à jour en cours) -service.status.description = OK - -# Inscriptions requises pour utiliser le service (parmi None;Free;Member;Client, obligatoire). -service.registration = None - -# [Software] -# Nom du logiciel (type STRING, obligatoire). -software.name = Etherpad - -# Lien du site web du logiciel (type URL, recommandé). -software.website = https://etherpad.org/ - -# Lien web vers la licence du logiciel (type URL, obligatoire). -software.license.url = https://github.com/ether/etherpad-lite/blob/develop/LICENSE - -# Nom de la licence du logiciel (type STRING, obligatoire). -software.license.name = Apache License Version 2.0 - -# Version du logiciel (type STRING, recommandé). -software.version = 1.8.3 - -# Lien web vers les sources du logiciel (type URL, recommandé). -software.source.url = https://github.com/ether/etherpad-lite - -# Liste de modules optionnels installés (type VALUES, optionnel, ex. Nextcloud-Calendar,Nextcloud-Talk). -software.modules = ep_align,ep_bookmark,ep_colors,ep_comments_page,ep_cursortrace,ep_delete_empty_pads,ep_embedmedia,ep_font_size,ep_headings2,ep_immae_buttons,ep_ldapauth,ep_line_height,ep_markdown,ep_mypads,ep_page_view,ep_previewimages,ep_ruler,ep_scrollto,ep_set_title_on_pad,ep_subscript_and_superscript,ep_timesliderdiff - - -# [Host] -# Nom de l'hébergeur de la machine qui fait tourner le service, dans le cas d'un auto-hébergement c'est vous ! (type STRING, obligatoire). Exemple : OVH. -host.name = Hetzner - -# Description de l'hébergeur (type STRING, optionnel). -host.description = - -# Type de serveur (un parmi NANO, PHYSICAL, VIRTUAL, SHARED, CLOUD, obligatoire, ex. PHYSICAL). -# NANO : nano-ordinateur (Raspberry Pi, Olimex…) -# PHYSICAL : machine physique -# VIRTUAL : machine virtuelle -# SHARED : hébergement mutualisé -# CLOUD : infrastructure multi-serveurs -host.server.type = PHYSICAL - -# Type d'hébergement (un parmi HOME, HOSTEDBAY, HOSTEDSERVER, OUTSOURCED, obligatoire, ex. HOSTEDSERVER). -# HOME : hébergement à domicile -# HOSTEDBAY : serveur personnel hébergé dans une baie d'un fournisseur -# HOSTEDSERVER : serveur d'un fournisseur -# OUTSOURCED : infrastructure totalement sous-traitée -host.provider.type = HOSTEDSERVER - -# Si vous avez du mal à remplir les champs précédents, ce tableau pourra vous aider : -# NANO PHYSICAL VIRTUAL SHARED CLOUD -# HOME pm pm vm shared cloud -# HOSTEDBAY -- pm vm shared cloud -# HOSTEDSERVER -- pm vm shared cloud -# OUTSOURCED -- -- vps shared cloud -# Légendes : pm : physical machine ; vm : virtual machine ; vps : virtual private server. - -# Pays de l'hébergeur (type STRING, recommandé). Exemple : France -host.country.name = Allemagne - -# Code pays de l'hébergeur (type STRING, recommandé). Exemple : FR -host.country.code = DE - - - -# [Subs] -# Un lien vers un fichier properties complémentaire (type URL, optionnel). Exemple : https:// -subs.foo = - -# [Metrics] -# Nom du métrique (type STRING, recommandé). -metrics.http.total.name = Nombre total de requêtes HTTP - -# Description du métrique (type STRING, recommandé). -metrics.http.total.description = Somme des requêtes HTTP ipv4 et ipv6. - -# Métrique à valeur anuelle (type NUMERIC, optionnel). -metrics.http.total.2020 = - -# Métrique à valeur mensuelle (type MONTHS, optionnel). -metrics.http.total.2020.months= - -# Métrique à valeur hebdomadaire (type WEEKS, optionnel). -metrics.http.total.2020.weeks= - -# Métrique à valeur quotidienne (type DAYS, optionnel). -metrics.http.total.2020.days= - - -# Nom du métrique (type STRING, recommandé). -metrics.visitors.total.name = Nombre total de visiteurs - -# Description du métrique (type STRING, recommandé). -metrics.visitors.total.description = - -# Métrique à valeur anuelle (type NUMERIC, optionnel). -metrics.visitors.total.2020 = - -# Métrique à valeur mensuelle (type MONTHS, optionnel). -metrics.visitors.total.2020.months= - -# Métrique à valeur hebdomadaire (type WEEKS, optionnel). -metrics.visitors.total.2020.weeks= - -# Métrique à valeur quotidienne (type DAYS, optionnel). -metrics.visitors.total.2020.days= - - -# [Metrics spécifiques au service] diff --git a/modules/private/websites/immae/eurl/certificates/2021-certificate.crt b/modules/private/websites/immae/eurl/certificates/2021-certificate.crt deleted file mode 100644 index 671534c..0000000 --- a/modules/private/websites/immae/eurl/certificates/2021-certificate.crt +++ /dev/null @@ -1,23 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDyzCCArOgAwIBAgIUXNW7Lmte+fa5YxI7Gdznl7ZaLPIwDQYJKoZIhvcNAQEL -BQAwdTELMAkGA1UEBhMCRlIxGDAWBgNVBAgMD0FscGVzLU1hcml0aW1lczEPMA0G -A1UEBwwGR3Jhc3NlMRUwEwYDVQQKDAxJbW1hZUV1IEVVUkwxJDAiBgkqhkiG9w0B -CQEWFWNvbnRhY3RAbWFpbC5pbW1hZS5ldTAeFw0yMTAxMTkwMDI5MDlaFw0yMjAx -MTkwMDI5MDlaMHUxCzAJBgNVBAYTAkZSMRgwFgYDVQQIDA9BbHBlcy1NYXJpdGlt -ZXMxDzANBgNVBAcMBkdyYXNzZTEVMBMGA1UECgwMSW1tYWVFdSBFVVJMMSQwIgYJ -KoZIhvcNAQkBFhVjb250YWN0QG1haWwuaW1tYWUuZXUwggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQDeyWKvTu2kuJ2HSgRzZZL6yFNHUXGgcl/q8vlRKFI4 -P0yHwcEwDCaCXquqS09WN99H55aNTjHfnu70dZXogyWHGk4vlaUkGiUoCAYK5tFU -34fzpZuInhBL8nRY0pRV4H2t02jQMyiYowZXTqR86BRocbXZ4TY5EwD/hlrH6iDc -pIlC7cVnWV4J5qXX9fXALbpXseD9PF0/y2tP5dM658jBL9KdW1PqlPGudvB44Z+a -pE8XCXF9PGrVBNN7aPmizOb42scx/2XghX1DYCikiUf8m+FGjidxGlXmj4B6Dukp -b7RxdkY7p97svH91uMQuUvDW5d93ZiatHNeYuAl8yI39AgMBAAGjUzBRMB0GA1Ud -DgQWBBSgsFwzEybKyLF/Bkuz7FA5SwfwPTAfBgNVHSMEGDAWgBSgsFwzEybKyLF/ -Bkuz7FA5SwfwPTAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDX -Wij/gDT+7N/pSSVWImiYoe+/KsAJd0TLs39GJkvW0114RXKINYNU8exNY7rKMVCl -TKePEevSo5CCartNfLXGIr3uqPlR+V3XF6KmyMSiB6k+GukoUtUg2Bp7ESGlpZXi -wkHYclk0NIzxWyUrzNdflxu3gPU278qFMbUIlbdWNsHtrLbpHypelPQ+IaEbNoWV -Q+M8Vg6ifsDmhp7TqFXpIoGa6CIxXuknDOidBpeE9kPjVu0kKrjXQULirNl3eEe6 -H1XUQ7lSdt/l3N1cHTj70x2xIi6fdwPQRqhXILrIuST+C0wpPiqPCv1rfcwh0PvU -mZVZ/+83y3Zuo9lVqkbB ------END CERTIFICATE----- diff --git a/modules/private/websites/immae/matrix/client b/modules/private/websites/immae/matrix/client deleted file mode 100644 index 2769de5..0000000 --- a/modules/private/websites/immae/matrix/client +++ /dev/null @@ -1,8 +0,0 @@ -{ - "m.homeserver": { - "base_url": "https://immae.ems.host" - }, - "m.identity_server": { - "base_url": "https://vector.im" - } -} diff --git a/modules/private/websites/immae/matrix/server b/modules/private/websites/immae/matrix/server deleted file mode 100644 index 449155a..0000000 --- a/modules/private/websites/immae/matrix/server +++ /dev/null @@ -1,3 +0,0 @@ -{ - "m.server": "immae.ems.host:443" -} diff --git a/modules/private/websites/immae/production.nix b/modules/private/websites/immae/production.nix deleted file mode 100644 index 8b4998f..0000000 --- a/modules/private/websites/immae/production.nix +++ /dev/null @@ -1,137 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.websites.immae.production; - varDir = "/var/lib/buildbot/outputs/immae/blog"; - coursDir = "/var/lib/buildbot/outputs/immae/cours"; - rechercheDir = "/var/lib/buildbot/outputs/immae/recherche"; - recettesDir = "/var/lib/buildbot/outputs/immae/recettes"; - historyDir = "/var/lib/buildbot/outputs/immae/history"; - docsDir = "/var/lib/buildbot/outputs/immae/docs/"; - env = config.myEnv.websites.immae; -in { - options.myServices.websites.immae.production.enable = lib.mkEnableOption "enable Immae's website"; - - config = lib.mkIf cfg.enable { - services.webstats.sites = [ { name = "www.immae.eu"; } ]; - - services.websites.env.production.vhostConfs.immae_production = { - certName = "immae"; - addToCerts = true; - certMainHost = "www.immae.eu"; - hosts = [ "www.immae.eu" "immae.eu" ]; - root = varDir; - extraConfig = [ - '' - Use Stats www.immae.eu - Header always set Strict-Transport-Security "max-age=31536000" - - - Header always set Referrer-Policy "strict-origin-when-cross-origin" - RequestHeader set X-Forwarded-Proto "https" - - RewriteRule ^(.*)$ https://mastodon.immae.eu%{REQUEST_URI} [QSA,L] - - - RewriteEngine On - RewriteCond "%{REQUEST_URI}" "!^/.well-known/(webfinger|host-meta)" - RewriteCond "%{HTTP_HOST}" "!^www\.immae\.eu$" [NC] - RewriteRule ^(.+)$ https://www.immae.eu$1 [R=302,L] - - - DirectoryIndex index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride All - Require all granted - - - Alias /.well-known/chatonsinfos ${./chatons} - - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride None - Require all granted - - - Alias /.well-known/matrix ${./matrix} - - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride None - Require all granted - Header always set Access-Control-Allow-Origin "*" - - - Alias /cours ${coursDir} - - DirectoryIndex index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride All - Require all granted - - - Alias /docs ${docsDir} - - DirectoryIndex index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride All - Require all granted - - - Alias /eurl ${./eurl} - - DirectoryIndex index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride None - Require all granted - - - Alias /recherche ${rechercheDir} - - DirectoryIndex index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride All - Require all granted - - - Alias /recettes ${recettesDir} - - DirectoryIndex index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride All - Require all granted - - - Alias /history ${historyDir} - - DirectoryIndex index.html - AllowOverride None - Require all granted - - '' - ]; - }; - - services.websites.env.production.vhostConfs.immae_fr = { - certName = "immae"; - addToCerts = true; - hosts = [ "www.immae.fr" "immae.fr" ]; - root = null; - extraConfig = [ '' - RedirectMatch 301 ^/((?!\.well-known.*$).*)$ https://www.immae.eu/chapeaux/ - '' ]; - }; - - services.websites.env.production.vhostConfs.immae_bouya = { - certName = "immae"; - addToCerts = true; - hosts = [ "bouya.org" "www.bouya.org" ]; - root = rechercheDir; - extraConfig = [ '' - - DirectoryIndex index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride All - Require all granted - - '' ]; - }; - }; -} diff --git a/modules/private/websites/immae/release.nix b/modules/private/websites/immae/release.nix deleted file mode 100644 index d06af87..0000000 --- a/modules/private/websites/immae/release.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.websites.immae.release; - varDir = "/var/lib/ftp/release.immae.eu"; - env = config.myEnv.websites.release; -in { - options.myServices.websites.immae.release.enable = lib.mkEnableOption "enable Release' website"; - - config = lib.mkIf cfg.enable { - services.webstats.sites = [ { name = "release.immae.eu"; } ]; - - services.websites.env.production.vhostConfs.immae_release = { - certName = "immae"; - addToCerts = true; - hosts = [ "release.immae.eu" ]; - root = varDir; - extraConfig = [ - '' - Use Stats release.immae.eu - - Use Apaxy "${varDir}" "title .duplicity-ignore" - - Use LDAPConnect - Options Indexes - AllowOverride All - Require all granted - - - - Use LDAPConnect - Options Indexes FollowSymlinks - AllowOverride None - Require all granted - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/immae/temp.nix b/modules/private/websites/immae/temp.nix deleted file mode 100644 index 19aef1a..0000000 --- a/modules/private/websites/immae/temp.nix +++ /dev/null @@ -1,64 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.websites.immae.temp; - varDir = "/var/lib/immae_temp"; - env = config.myEnv.websites.immae.temp; -in { - options.myServices.websites.immae.temp.enable = lib.mkEnableOption "enable Temp' website"; - - config = lib.mkIf cfg.enable { - services.websites.env.production.vhostConfs.immae_temp = { - certName = "immae"; - addToCerts = true; - hosts = [ "temp.immae.eu" ]; - root = null; - extraConfig = [ '' - ProxyVia On - ProxyRequests Off - ProxyPreserveHost On - ProxyPass / unix:///run/surfer/listen.sock|http://temp.immae.eu/ - ProxyPassReverse / unix:///run/surfer/listen.sock|http://temp.immae.eu/ - - Options FollowSymLinks MultiViews - AllowOverride None - Require all granted - - '' ]; - }; - - secrets.keys."webapps/surfer" = { - permissions = "0400"; - user = "wwwrun"; - group = "wwwrun"; - text = '' - CLOUDRON_LDAP_URL=ldaps://${env.ldap.host} - CLOUDRON_LDAP_USERS_BASE_DN=${env.ldap.base} - TOKENSTORE_FILE=/var/lib/surfer/tokens.json - CLOUDRON_LDAP_BIND_DN=${env.ldap.dn} - CLOUDRON_LDAP_BIND_PASSWORD=${env.ldap.password} - CLOUDRON_LDAP_USERS_BASE_DN=${env.ldap.base} - CLOUDRON_LDAP_FILTER="${env.ldap.filter}" - LISTEN=/run/surfer/listen.sock - ''; - }; - - systemd.services.surfer = { - description = "Surfer"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - - script = '' - exec ${pkgs.webapps.surfer}/bin/surfer-server ${varDir} - ''; - serviceConfig = { - EnvironmentFile = config.secrets.fullPaths."webapps/surfer"; - User = "wwwrun"; - Group = "wwwrun"; - StateDirectory = "surfer"; - RuntimeDirectory = "surfer"; - Type = "simple"; - }; - }; - }; -} - diff --git a/modules/private/websites/isabelle/aten_app/default.nix b/modules/private/websites/isabelle/aten_app/default.nix deleted file mode 100644 index f967b9a..0000000 --- a/modules/private/websites/isabelle/aten_app/default.nix +++ /dev/null @@ -1,61 +0,0 @@ -{ environment ? "prod" -, varDir ? "/var/lib/aten_${environment}" -, composerEnv, fetchgit, runCommand, nodejs-10_x, jq, libsass, python, fetchurl, yarn2nix-moretea, yarn, sources }: -let - yarn2nix-moretea' = yarn2nix-moretea.override({ - yarn = yarn.override({ nodejs = nodejs-10_x; }); - nodejs = nodejs-10_x; - }); - packagesource = sources.websites-isabelle-aten; - packagejson = runCommand "package.json" { buildInputs = [ jq ]; } '' - cat ${packagesource}/package.json | jq -r '.version = "v1.0.0"|.name="aten"' > $out - ''; - yarnModules = yarn2nix-moretea'.mkYarnModules rec { - name = "aten-yarn"; - pname = name; - version = "v1.0.0"; - packageJSON = packagejson; - yarnLock = "${packagesource}/yarn.lock"; - yarnNix = ./yarn-packages.nix; - pkgConfig = { - node-sass = { - buildInputs = [ libsass python ]; - postInstall = let - nodeHeaders = fetchurl { - url = "https://nodejs.org/download/release/v${nodejs-10_x.version}/node-v${nodejs-10_x.version}-headers.tar.gz"; - sha256 = "15hkcbs328d3rc1s14rmky8lh8d3rr86l8k0bia0ggxzwl23lj9c"; - }; - in - '' - node scripts/build.js --tarball=${nodeHeaders} - ''; - }; - }; - }; - app = composerEnv.buildPackage ( - import ./php-packages.nix { inherit composerEnv fetchurl fetchgit; } // - rec { - version = packagesource.version; - pname = "aten"; - name = "${pname}-${version}"; - src = packagesource; - noDev = (environment == "prod"); - preInstall = '' - export SYMFONY_ENV="${environment}" - export APP_ENV="${environment}" - ''; - postInstall = '' - ln -sf ${yarnModules}/node_modules . - yarn run --offline encore production - rm -rf var/{log,cache} - ln -sf ${varDir}/{log,cache} var/ - ''; - buildInputs = [ yarnModules yarn2nix-moretea'.yarn ]; - passthru = { - inherit varDir; - inherit environment; - webRoot = "${app}/public"; - }; - } - ); -in app diff --git a/modules/private/websites/isabelle/aten_app/php-packages.nix b/modules/private/websites/isabelle/aten_app/php-packages.nix deleted file mode 100644 index 3647938..0000000 --- a/modules/private/websites/isabelle/aten_app/php-packages.nix +++ /dev/null @@ -1,740 +0,0 @@ -# Generated with composer2nix and adapted to return only the list of -# packages -{ composerEnv, fetchurl, fetchgit ? null }: -{ - packages = { - "behat/transliterator" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "behat-transliterator-826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c"; - src = fetchurl { - url = https://api.github.com/repos/Behat/Transliterator/zipball/826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c; - sha256 = "1mgc9azx79fkrxahji3xwbgqhlcnvh3xk6llqdvhjb7vgzj4bqq0"; - }; - }; - }; - "doctrine/annotations" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-annotations-c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5; - sha256 = "0b80xpqd3j99xgm0c41kbgy0k6knrfnd29223c93295sb12112g7"; - }; - }; - }; - "doctrine/cache" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-cache-d768d58baee9a4862ca783840eca1b9add7a7f57"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/cache/zipball/d768d58baee9a4862ca783840eca1b9add7a7f57; - sha256 = "1kljhw4gqp12iz88h6ymsrlfir2fis7icn6dffyizfc1csyb4s2i"; - }; - }; - }; - "doctrine/collections" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-collections-a01ee38fcd999f34d9bfbcee59dbda5105449cbf"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/collections/zipball/a01ee38fcd999f34d9bfbcee59dbda5105449cbf; - sha256 = "0d36zc21ka0pdac9xpkxsgf5zzw9gp0m9lk3r3xs5y70j0lkkkis"; - }; - }; - }; - "doctrine/common" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-common-30e33f60f64deec87df728c02b107f82cdafad9d"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/common/zipball/30e33f60f64deec87df728c02b107f82cdafad9d; - sha256 = "0s4vv14ibyx62a9aj3wn5cs2bbxd72fajmfmi8qb5l11gx0375na"; - }; - }; - }; - "doctrine/dbal" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-dbal-22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/dbal/zipball/22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9; - sha256 = "0kbahs699jd8pxf512dgg7arv49dc7qzi3mx8snxqm4h15n5brnj"; - }; - }; - }; - "doctrine/doctrine-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-doctrine-bundle-82d2c63cd09acbde2332f55d9aa7b28aefe4983d"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/DoctrineBundle/zipball/82d2c63cd09acbde2332f55d9aa7b28aefe4983d; - sha256 = "0gzrigv360rp50yxpwidbkf8vlagym0w1if010yz5xcfrz37cpn3"; - }; - }; - }; - "doctrine/doctrine-cache-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-doctrine-cache-bundle-5514c90d9fb595e1095e6d66ebb98ce9ef049927"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/5514c90d9fb595e1095e6d66ebb98ce9ef049927; - sha256 = "04njrfhw4fc2ifacd9h0wd9i14l7ycv3hanbqrw5ilsai02j6asa"; - }; - }; - }; - "doctrine/doctrine-migrations-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-doctrine-migrations-bundle-49fa399181db4bf4f9f725126bd1cb65c4398dce"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/49fa399181db4bf4f9f725126bd1cb65c4398dce; - sha256 = "1a73xjhjrjlvkh8d253kfc2rbxd2h4hwafhv5078dy7rg6x9blyn"; - }; - }; - }; - "doctrine/event-manager" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-event-manager-a520bc093a0170feeb6b14e9d83f3a14452e64b3"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/event-manager/zipball/a520bc093a0170feeb6b14e9d83f3a14452e64b3; - sha256 = "165cxvw4idqj01l63nya2whpdb3fz6ld54rx198b71bzwfrydl88"; - }; - }; - }; - "doctrine/inflector" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-inflector-5527a48b7313d15261292c149e55e26eae771b0a"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a; - sha256 = "0ng6vlwjr8h6hqwa32ynykz1mhlfsff5hirjidlk086ab6njppa5"; - }; - }; - }; - "doctrine/instantiator" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-instantiator-185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda; - sha256 = "1mah9a6mb30qad1zryzjain2dxw29d8h4bjkbcs3srpm3p891msy"; - }; - }; - }; - "doctrine/lexer" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-lexer-83893c552fd2045dd78aef794c31e694c37c0b8c"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c; - sha256 = "0cyh3vwcl163cx1vrcwmhlh5jg9h47xwiqgzc6rwscxw0ppd1v74"; - }; - }; - }; - "doctrine/migrations" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-migrations-215438c0eef3e5f9b7da7d09c6b90756071b43e6"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/migrations/zipball/215438c0eef3e5f9b7da7d09c6b90756071b43e6; - sha256 = "0k6sgw65vji9rgib10mq2m634m41a67inspkrcw4qixig2lnb3ld"; - }; - }; - }; - "doctrine/orm" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-orm-434820973cadf2da2d66e7184be370084cc32ca8"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/orm/zipball/434820973cadf2da2d66e7184be370084cc32ca8; - sha256 = "114fyq8kaf5qzfkp8sdygqflf3z94va1cs5c3scycfpg9cmi4gls"; - }; - }; - }; - "doctrine/persistence" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-persistence-c0f1c17602afc18b4cbd8e1c8125f264c9cf7d38"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/persistence/zipball/c0f1c17602afc18b4cbd8e1c8125f264c9cf7d38; - sha256 = "0xdm5n38rjas1mlyxc15sg1as5h7y012mdb0j9lr6cvphgnaxxv7"; - }; - }; - }; - "doctrine/reflection" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-reflection-02538d3f95e88eb397a5f86274deb2c6175c2ab6"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/reflection/zipball/02538d3f95e88eb397a5f86274deb2c6175c2ab6; - sha256 = "12n9zik4lxb9lx1jf0nbvg9vl9nv958a7z1yjx48scfxd1d1sxjy"; - }; - }; - }; - "gedmo/doctrine-extensions" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "gedmo-doctrine-extensions-87c78ff9fd4b90460386f753d95622f6fbbfcb27"; - src = fetchurl { - url = https://api.github.com/repos/Atlantic18/DoctrineExtensions/zipball/87c78ff9fd4b90460386f753d95622f6fbbfcb27; - sha256 = "1i33xy9s18rncc1fllwi2qi7hrxj8g762fvgl9np7xndxa7kclyb"; - }; - }; - }; - "giggsey/libphonenumber-for-php" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "giggsey-libphonenumber-for-php-a71f260c2efce10ded8af030a20fa13edfb0e9be"; - src = fetchurl { - url = https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/a71f260c2efce10ded8af030a20fa13edfb0e9be; - sha256 = "15id03c1msyhri7j4i63r535g3g56n3x99i8301as63w7m1ybfj5"; - }; - }; - }; - "giggsey/locale" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "giggsey-locale-da6845720b5d104d319d7e84576f54e44dd9e4f5"; - src = fetchurl { - url = https://api.github.com/repos/giggsey/Locale/zipball/da6845720b5d104d319d7e84576f54e44dd9e4f5; - sha256 = "0gc8im06h5l794a0drd74s3inps22jr1zr5wnw0b89m06d4nw42j"; - }; - }; - }; - "jdorn/sql-formatter" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "jdorn-sql-formatter-64990d96e0959dff8e059dfcdc1af130728d92bc"; - src = fetchurl { - url = https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc; - sha256 = "1dnmkm8mxylvxjwi0bdkzrlklncqx92fa4fwqp5bh2ypj8gaagzi"; - }; - }; - }; - "ocramius/package-versions" = { - targetDir = ""; - needsModifyRights = true; - src = composerEnv.buildZipPackage { - name = "ocramius-package-versions-4489d5002c49d55576fa0ba786f42dbb009be46f"; - src = fetchurl { - url = https://api.github.com/repos/Ocramius/PackageVersions/zipball/4489d5002c49d55576fa0ba786f42dbb009be46f; - sha256 = "039c404g9597x45xh04bnn8kmcyknkbnr57yb9s7vf29vfrg4881"; - }; - }; - }; - "ocramius/proxy-manager" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "ocramius-proxy-manager-14b137b06b0f911944132df9d51e445a35920ab1"; - src = fetchurl { - url = https://api.github.com/repos/Ocramius/ProxyManager/zipball/14b137b06b0f911944132df9d51e445a35920ab1; - sha256 = "10y5msgh2jdlw4w075fasv40yq01szjy15m3f0wgc89hlfmqz0sn"; - }; - }; - }; - "opensoft/doctrine-postgres-types" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "opensoft-doctrine-postgres-types-7e69bdfeb2ae61c2f1e90872370cdf0135fb3006"; - src = fetchurl { - url = https://api.github.com/repos/opensoft/doctrine-postgres-types/zipball/7e69bdfeb2ae61c2f1e90872370cdf0135fb3006; - sha256 = "1v9rjq82dxnpnb6bir6irkj54324a02qlybayvq2gf2807241bjj"; - }; - }; - }; - "presta/sitemap-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "presta-sitemap-bundle-16a2c0eae7320e3647013e48026a6a6bd14f75df"; - src = fetchurl { - url = https://api.github.com/repos/prestaconcept/PrestaSitemapBundle/zipball/16a2c0eae7320e3647013e48026a6a6bd14f75df; - sha256 = "1hqh144awazafa2vpv091h9pyqrppbalcvzf9c1n6h387jwwj5l8"; - }; - }; - }; - "psr/cache" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "psr-cache-d11b50ad223250cf17b86e38383413f5a6764bf8"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8; - sha256 = "06i2k3dx3b4lgn9a4v1dlgv8l9wcl4kl7vzhh63lbji0q96hv8qz"; - }; - }; - }; - "psr/container" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "psr-container-b7ce3b176482dbbc1245ebf52b181af44c2cf55f"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f; - sha256 = "0rkz64vgwb0gfi09klvgay4qnw993l1dc03vyip7d7m2zxi6cy4j"; - }; - }; - }; - "psr/log" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "psr-log-6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd; - sha256 = "1i351p3gd1pgjcjxv7mwwkiw79f1xiqr38irq22156h05zlcx80d"; - }; - }; - }; - "psr/simple-cache" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "psr-simple-cache-408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b; - sha256 = "1djgzclkamjxi9jy4m9ggfzgq1vqxaga2ip7l3cj88p7rwkzjxgw"; - }; - }; - }; - "sensio/framework-extra-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "sensio-framework-extra-bundle-1fdf591c4b388e62dbb2579de89c1560b33f865d"; - src = fetchurl { - url = https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/1fdf591c4b388e62dbb2579de89c1560b33f865d; - sha256 = "0hhw3lsvgm78rqphgmdrg2inc9997lwx0290x71hsixk08khnlb1"; - }; - }; - }; - "symfony/asset" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-asset-fb06338fd3762f8615b51a58e5e9299ccca03876"; - src = fetchurl { - url = https://api.github.com/repos/symfony/asset/zipball/fb06338fd3762f8615b51a58e5e9299ccca03876; - sha256 = "19fbnz2h4z5nxzcy8n3bfbcjwgncabwdlxh70qfkr7bswpsxr6p3"; - }; - }; - }; - "symfony/cache" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-cache-5c4b50d6ba4f1c8955c3454444c1e3cfddaaad41"; - src = fetchurl { - url = https://api.github.com/repos/symfony/cache/zipball/5c4b50d6ba4f1c8955c3454444c1e3cfddaaad41; - sha256 = "1wn2rd3n5nj300vsygh60vbjh2k9lh7s9c3ayl614hahrfcfb29s"; - }; - }; - }; - "symfony/config" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-config-005d9a083d03f588677d15391a716b1ac9b887c0"; - src = fetchurl { - url = https://api.github.com/repos/symfony/config/zipball/005d9a083d03f588677d15391a716b1ac9b887c0; - sha256 = "1h20qhkzsl5xwzs3rg1yyaq5yn8rg92krfzmpmfgv7d3jp1v03as"; - }; - }; - }; - "symfony/console" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-console-4dff24e5d01e713818805c1862d2e3f901ee7dd0"; - src = fetchurl { - url = https://api.github.com/repos/symfony/console/zipball/4dff24e5d01e713818805c1862d2e3f901ee7dd0; - sha256 = "016l3hxcbvyxz3kkkynk12gi8949hl3x09dwsh0x5wqikgnp64c2"; - }; - }; - }; - "symfony/contracts" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-contracts-1aa7ab2429c3d594dd70689604b5cf7421254cdf"; - src = fetchurl { - url = https://api.github.com/repos/symfony/contracts/zipball/1aa7ab2429c3d594dd70689604b5cf7421254cdf; - sha256 = "0jhav49lngmrjg4r5kdpmc7lhmasn2fzkmbvhw62l4i1vnm5r5bm"; - }; - }; - }; - "symfony/debug" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-debug-e0a2b92ee0b5b934f973d90c2f58e18af109d276"; - src = fetchurl { - url = https://api.github.com/repos/symfony/debug/zipball/e0a2b92ee0b5b934f973d90c2f58e18af109d276; - sha256 = "0yzyaprsrmbc93gzwr1wdjx05kin7b4hqy5w74zkcxyab09pan7f"; - }; - }; - }; - "symfony/dependency-injection" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-dependency-injection-e4adc57a48d3fa7f394edfffa9e954086d7740e5"; - src = fetchurl { - url = https://api.github.com/repos/symfony/dependency-injection/zipball/e4adc57a48d3fa7f394edfffa9e954086d7740e5; - sha256 = "0g8ssf7qm0jf0anvflp033xwdim9z4g73k3kz1vs3smw4pffl6nv"; - }; - }; - }; - "symfony/doctrine-bridge" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-doctrine-bridge-3466c911438e176c20e1943c529131889432d12f"; - src = fetchurl { - url = https://api.github.com/repos/symfony/doctrine-bridge/zipball/3466c911438e176c20e1943c529131889432d12f; - sha256 = "0qq644z7l9j9fyydlj68p9f43a9i20rnmxy8pkq5sn4r0yn06bb8"; - }; - }; - }; - "symfony/event-dispatcher" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-event-dispatcher-921f49c3158a276d27c0d770a5a347a3b718b328"; - src = fetchurl { - url = https://api.github.com/repos/symfony/event-dispatcher/zipball/921f49c3158a276d27c0d770a5a347a3b718b328; - sha256 = "05i8syqbzhh11cf2i9d64s8b5x41mfsribfa62rvc0mhbqk7ifzf"; - }; - }; - }; - "symfony/filesystem" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-filesystem-2f4c8b999b3b7cadb2a69390b01af70886753710"; - src = fetchurl { - url = https://api.github.com/repos/symfony/filesystem/zipball/2f4c8b999b3b7cadb2a69390b01af70886753710; - sha256 = "1gi14q8gf250a3rzmr6arb08ljpzpfg868vm0z21fgmf0zh0dqr6"; - }; - }; - }; - "symfony/finder" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-finder-e53d477d7b5c4982d0e1bfd2298dbee63d01441d"; - src = fetchurl { - url = https://api.github.com/repos/symfony/finder/zipball/e53d477d7b5c4982d0e1bfd2298dbee63d01441d; - sha256 = "1mpxwgvfqzng36xbdvda6nk1zidyr9dgswccmr4z15k0i9gi0qsj"; - }; - }; - }; - "symfony/flex" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-flex-955774ecf07b10230bb5b44e150ba078b45f68fa"; - src = fetchurl { - url = https://api.github.com/repos/symfony/flex/zipball/955774ecf07b10230bb5b44e150ba078b45f68fa; - sha256 = "069v1s810mq5kqvx68x87lmlz0h9b2kgla1znnibnbh6j6k4qg6d"; - }; - }; - }; - "symfony/form" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-form-5ab767b7732154ca6f45c92e30e081178edf30ad"; - src = fetchurl { - url = https://api.github.com/repos/symfony/form/zipball/5ab767b7732154ca6f45c92e30e081178edf30ad; - sha256 = "1g65a7hl1kk6rpa6q52fyzy6vkjafr3233hi2qiggyp0qys20kcc"; - }; - }; - }; - "symfony/framework-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-framework-bundle-eb32d67140510f04fe9cc5fb9ad38fda09591db1"; - src = fetchurl { - url = https://api.github.com/repos/symfony/framework-bundle/zipball/eb32d67140510f04fe9cc5fb9ad38fda09591db1; - sha256 = "06dpqppwyngq1frww0q0zjs0gj8na0fi67czlhqf2x2lizgz6wjd"; - }; - }; - }; - "symfony/http-foundation" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-http-foundation-1b31f3017fadd8cb05cf2c8aebdbf3b12a943851"; - src = fetchurl { - url = https://api.github.com/repos/symfony/http-foundation/zipball/1b31f3017fadd8cb05cf2c8aebdbf3b12a943851; - sha256 = "0s6mx79gl6sp39bk8213xcdzx4ld5xim38s8lckm7wqnkvx94mfl"; - }; - }; - }; - "symfony/http-kernel" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-http-kernel-b39ceffc0388232c309cbde3a7c3685f2ec0a624"; - src = fetchurl { - url = https://api.github.com/repos/symfony/http-kernel/zipball/b39ceffc0388232c309cbde3a7c3685f2ec0a624; - sha256 = "17rb1hl9r8rlqw1cv9qx2ckvz81g2ylppirq035mya1a848y5ym5"; - }; - }; - }; - "symfony/inflector" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-inflector-f9a637c0359f74404d44cf0da0a3ce53bae0787e"; - src = fetchurl { - url = https://api.github.com/repos/symfony/inflector/zipball/f9a637c0359f74404d44cf0da0a3ce53bae0787e; - sha256 = "1sp1pk716biyplqpakcpq71ik2h2m1bvsz9cfj9zd63y2723xna3"; - }; - }; - }; - "symfony/intl" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-intl-748a1c54903344385f88fef75da293915b16a207"; - src = fetchurl { - url = https://api.github.com/repos/symfony/intl/zipball/748a1c54903344385f88fef75da293915b16a207; - sha256 = "1vwa2n7fglxs8rv1yrbxn6vgizg73asimg794igk27i90xdybfmc"; - }; - }; - }; - "symfony/lts" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-lts-c1affae45b78aee036effa1759237e7fa96d4af2"; - src = fetchurl { - url = https://api.github.com/repos/symfony/lts/zipball/c1affae45b78aee036effa1759237e7fa96d4af2; - sha256 = "0vk9pn4xl7ascvllak0gschdd1w2mxma3ng04j3r1n13zccxc33s"; - }; - }; - }; - "symfony/options-resolver" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-options-resolver-a9c38e8a3da2c03b3e71fdffa6efb0bda51390ba"; - src = fetchurl { - url = https://api.github.com/repos/symfony/options-resolver/zipball/a9c38e8a3da2c03b3e71fdffa6efb0bda51390ba; - sha256 = "1fjjlp09mwkjcxg98bihqlq4miq24k13691051f5p39lcy03zmb3"; - }; - }; - }; - "symfony/orm-pack" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-orm-pack-1b58f752cd917a08c9c8df020781d9c46a2275b1"; - src = fetchurl { - url = https://api.github.com/repos/symfony/orm-pack/zipball/1b58f752cd917a08c9c8df020781d9c46a2275b1; - sha256 = "1sk8jchaw29lmpq76yb24mc1csmifnkvbjdrgjdgqs6x5i39plli"; - }; - }; - }; - "symfony/polyfill-intl-icu" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-intl-icu-f22a90256d577c7ef7efad8df1f0201663d57644"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/f22a90256d577c7ef7efad8df1f0201663d57644; - sha256 = "0x7h8l248l1gc07xmvfixq6p80ifdaa29qympfq3jzfb79k69slq"; - }; - }; - }; - "symfony/polyfill-mbstring" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-mbstring-c79c051f5b3a46be09205c73b80b346e4153e494"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494; - sha256 = "18v2777cky55ah6xi4dh383mp4iddwzmnvx81qd86y1kgfykwhpi"; - }; - }; - }; - "symfony/property-access" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-property-access-b6df4e1849f389468edb36e2e59877d4a8170723"; - src = fetchurl { - url = https://api.github.com/repos/symfony/property-access/zipball/b6df4e1849f389468edb36e2e59877d4a8170723; - sha256 = "16pbnv3x56gp5wxakmbphf3d4igkjyr3v693n3cjm62h72z4dxf3"; - }; - }; - }; - "symfony/routing" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-routing-649460207e77da6c545326c7f53618d23ad2c866"; - src = fetchurl { - url = https://api.github.com/repos/symfony/routing/zipball/649460207e77da6c545326c7f53618d23ad2c866; - sha256 = "1qjkgghs0kp4lk4711d3gx26vvilrrrjbbz02navzfqy4xjrf0sw"; - }; - }; - }; - "symfony/translation" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-translation-c0e2191e9bed845946ab3d99767513b56ca7dcd6"; - src = fetchurl { - url = https://api.github.com/repos/symfony/translation/zipball/c0e2191e9bed845946ab3d99767513b56ca7dcd6; - sha256 = "0gzq7f2izsiam9blha85bzvg7x6zc4f3x3bkwhzma6x6ipjfkla2"; - }; - }; - }; - "symfony/twig-bridge" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-twig-bridge-2e928d6c8244e7f3b32bcfac5814095a83179e60"; - src = fetchurl { - url = https://api.github.com/repos/symfony/twig-bridge/zipball/2e928d6c8244e7f3b32bcfac5814095a83179e60; - sha256 = "1f902j8b0lyqjss9r2mf7j63apv5z8ki57vmcdcw5jlqagbmw1y1"; - }; - }; - }; - "symfony/twig-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-twig-bundle-024820cbb4aeffc4843c4170b69c057fb4840fb3"; - src = fetchurl { - url = https://api.github.com/repos/symfony/twig-bundle/zipball/024820cbb4aeffc4843c4170b69c057fb4840fb3; - sha256 = "1qqfpxw228lc024whpr4j6aa6k9ly290nxz9c9ds826lllg2l1zh"; - }; - }; - }; - "symfony/validator" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-validator-cd35bb14a0e81bd99835e36cac4db1e72ad1939b"; - src = fetchurl { - url = https://api.github.com/repos/symfony/validator/zipball/cd35bb14a0e81bd99835e36cac4db1e72ad1939b; - sha256 = "1809yz483mv5mmrw14v3b371dmjab7i455gxkrqm0z8n0wjdn6i3"; - }; - }; - }; - "symfony/var-exporter" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-var-exporter-a39222e357362424b61dcde50e2f7b5a7d3306db"; - src = fetchurl { - url = https://api.github.com/repos/symfony/var-exporter/zipball/a39222e357362424b61dcde50e2f7b5a7d3306db; - sha256 = "1ys2sc3ivgfxq7kj8cydxqh5179d3niqxsy10lgg18c5a6bsj41j"; - }; - }; - }; - "symfony/webpack-encore-pack" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-webpack-encore-pack-8d7f51379d7ae17aea7cf501d910a11896895ac4"; - src = fetchurl { - url = https://api.github.com/repos/symfony/webpack-encore-pack/zipball/8d7f51379d7ae17aea7cf501d910a11896895ac4; - sha256 = "0k6xavcyihx45dsrm1r2r1lbn7vryy463akz66w4gycx5dcqrw0j"; - }; - }; - }; - "symfony/yaml" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-yaml-c41175c801e3edfda90f32e292619d10c27103d7"; - src = fetchurl { - url = https://api.github.com/repos/symfony/yaml/zipball/c41175c801e3edfda90f32e292619d10c27103d7; - sha256 = "0bh9365mmvzhdk1m0b1xarlg0swx9pv916m7xifcmdrxn67w552p"; - }; - }; - }; - "twig/twig" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "twig-twig-a11dd39f5b6589e14f0ff3b36675d06047c589b1"; - src = fetchurl { - url = https://api.github.com/repos/twigphp/Twig/zipball/a11dd39f5b6589e14f0ff3b36675d06047c589b1; - sha256 = "0rnwam9379gj5m4ik0fh6c81dbr7kwj2b3x1gnmpf6awa5fm261n"; - }; - }; - }; - "zendframework/zend-code" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "zendframework-zend-code-c21db169075c6ec4b342149f446e7b7b724f95eb"; - src = fetchurl { - url = https://api.github.com/repos/zendframework/zend-code/zipball/c21db169075c6ec4b342149f446e7b7b724f95eb; - sha256 = "031mfsahjkl63348020wq05273kvszx0dv2766zmzncnd6fcggw1"; - }; - }; - }; - "zendframework/zend-eventmanager" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "zendframework-zend-eventmanager-a5e2583a211f73604691586b8406ff7296a946dd"; - src = fetchurl { - url = https://api.github.com/repos/zendframework/zend-eventmanager/zipball/a5e2583a211f73604691586b8406ff7296a946dd; - sha256 = "08a05gn40hfdy2zhz4gcd3r6q7m7zcaks5kpvb9dx1awgx0pzr8n"; - }; - }; - }; - }; - devPackages = { - "nikic/php-parser" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "nikic-php-parser-8aae5b59b83bb4d0dbf07b0a835f2680a658f610"; - src = fetchurl { - url = https://api.github.com/repos/nikic/PHP-Parser/zipball/8aae5b59b83bb4d0dbf07b0a835f2680a658f610; - sha256 = "103ix4bsvrwyc4wxh9cqd38xffn25kq3phnpgk8b3z7dqvvr2pss"; - }; - }; - }; - "symfony/dotenv" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-dotenv-97f135ab40f969cbeae27d482ff63acbc33dbe2a"; - src = fetchurl { - url = https://api.github.com/repos/symfony/dotenv/zipball/97f135ab40f969cbeae27d482ff63acbc33dbe2a; - sha256 = "1jwpxb4w0mi5p89k51l1g84hnnj9s8kjl9jsx3xj39hhc3dy44pc"; - }; - }; - }; - "symfony/maker-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-maker-bundle-24b19cccad0c658eca516b35b08668d123fabf92"; - src = fetchurl { - url = https://api.github.com/repos/symfony/maker-bundle/zipball/24b19cccad0c658eca516b35b08668d123fabf92; - sha256 = "1wm17jl3gk0m5ma7nz40y7ryxgm0qncrxcrqdqg5x6afwla85grp"; - }; - }; - }; - "symfony/polyfill-php72" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-php72-9050816e2ca34a8e916c3a0ae8b9c2fccf68b631"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-php72/zipball/9050816e2ca34a8e916c3a0ae8b9c2fccf68b631; - sha256 = "1smd08fw64mf89s9ma099ayfjlz26wrix9hfr6kh5w4d0rzrhmlw"; - }; - }; - }; - "symfony/profiler-pack" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-profiler-pack-99c4370632c2a59bb0444852f92140074ef02209"; - src = fetchurl { - url = https://api.github.com/repos/symfony/profiler-pack/zipball/99c4370632c2a59bb0444852f92140074ef02209; - sha256 = "12xisnrqq6q5l0v8bric0p23bsaxh50x43fq7wn2adnsz24nv9pi"; - }; - }; - }; - "symfony/stopwatch" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-stopwatch-ec076716412274e51f8a7ea675d9515e5c311123"; - src = fetchurl { - url = https://api.github.com/repos/symfony/stopwatch/zipball/ec076716412274e51f8a7ea675d9515e5c311123; - sha256 = "0fzh2bh7lm8f222hk5ihfkpi697babfrz1r0dghlws17hfbgzgax"; - }; - }; - }; - "symfony/var-dumper" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-var-dumper-db61258540350725f4beb6b84006e32398acd120"; - src = fetchurl { - url = https://api.github.com/repos/symfony/var-dumper/zipball/db61258540350725f4beb6b84006e32398acd120; - sha256 = "0pw3hf4mcc1q9miswrjbgr32x0a2dfjvpi16pjzw173xmf79i4iz"; - }; - }; - }; - "symfony/web-profiler-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-web-profiler-bundle-198cb0a6b85346bbab5e1bc74a0eb175b9fa2d08"; - src = fetchurl { - url = https://api.github.com/repos/symfony/web-profiler-bundle/zipball/198cb0a6b85346bbab5e1bc74a0eb175b9fa2d08; - sha256 = "0r4r3zf22860mdx8b2l72ghz8liyi3l39cc1934b2lkh2kghlsi6"; - }; - }; - }; - }; -} diff --git a/modules/private/websites/isabelle/aten_app/yarn-packages.nix b/modules/private/websites/isabelle/aten_app/yarn-packages.nix deleted file mode 100644 index c16d9dc..0000000 --- a/modules/private/websites/isabelle/aten_app/yarn-packages.nix +++ /dev/null @@ -1,7871 +0,0 @@ -{fetchurl, linkFarm}: rec { - offline_cache = linkFarm "offline" packages; - packages = [ - - { - name = "_symfony_webpack_encore___webpack_encore_0.19.0.tgz"; - path = fetchurl { - name = "_symfony_webpack_encore___webpack_encore_0.19.0.tgz"; - url = "https://registry.yarnpkg.com/@symfony/webpack-encore/-/webpack-encore-0.19.0.tgz"; - sha1 = "f0725dbbede5ff9d9fdbd7a07f84accafc83ca14"; - }; - } - - { - name = "_types_node___node_10.5.3.tgz"; - path = fetchurl { - name = "_types_node___node_10.5.3.tgz"; - url = "https://registry.yarnpkg.com/@types/node/-/node-10.5.3.tgz"; - sha1 = "5bcfaf088ad17894232012877669634c06b20cc5"; - }; - } - - { - name = "_types_tapable___tapable_0.2.5.tgz"; - path = fetchurl { - name = "_types_tapable___tapable_0.2.5.tgz"; - url = "https://registry.yarnpkg.com/@types/tapable/-/tapable-0.2.5.tgz"; - sha1 = "2443fc12da514c81346b1a665675559cee21fa75"; - }; - } - - { - name = "_types_uglify_js___uglify_js_3.0.3.tgz"; - path = fetchurl { - name = "_types_uglify_js___uglify_js_3.0.3.tgz"; - url = "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.0.3.tgz"; - sha1 = "801a5ca1dc642861f47c46d14b700ed2d610840b"; - }; - } - - { - name = "_types_webpack___webpack_3.8.14.tgz"; - path = fetchurl { - name = "_types_webpack___webpack_3.8.14.tgz"; - url = "https://registry.yarnpkg.com/@types/webpack/-/webpack-3.8.14.tgz"; - sha1 = "e2bfdf7f604b3f7dc776eaa17446d7f7538f3de7"; - }; - } - - { - name = "abbrev___abbrev_1.1.1.tgz"; - path = fetchurl { - name = "abbrev___abbrev_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz"; - sha1 = "f8f2c887ad10bf67f634f005b6987fed3179aac8"; - }; - } - - { - name = "accepts___accepts_1.3.5.tgz"; - path = fetchurl { - name = "accepts___accepts_1.3.5.tgz"; - url = "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz"; - sha1 = "eb777df6011723a3b14e8a72c0805c8e86746bd2"; - }; - } - - { - name = "acorn_dynamic_import___acorn_dynamic_import_2.0.2.tgz"; - path = fetchurl { - name = "acorn_dynamic_import___acorn_dynamic_import_2.0.2.tgz"; - url = "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz"; - sha1 = "c752bd210bef679501b6c6cb7fc84f8f47158cc4"; - }; - } - - { - name = "acorn___acorn_4.0.13.tgz"; - path = fetchurl { - name = "acorn___acorn_4.0.13.tgz"; - url = "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz"; - sha1 = "105495ae5361d697bd195c825192e1ad7f253787"; - }; - } - - { - name = "acorn___acorn_5.7.1.tgz"; - path = fetchurl { - name = "acorn___acorn_5.7.1.tgz"; - url = "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz"; - sha1 = "f095829297706a7c9776958c0afc8930a9b9d9d8"; - }; - } - - { - name = "adjust_sourcemap_loader___adjust_sourcemap_loader_1.2.0.tgz"; - path = fetchurl { - name = "adjust_sourcemap_loader___adjust_sourcemap_loader_1.2.0.tgz"; - url = "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-1.2.0.tgz"; - sha1 = "e33fde95e50db9f2a802e3647e311d2fc5000c69"; - }; - } - - { - name = "ajv_keywords___ajv_keywords_3.2.0.tgz"; - path = fetchurl { - name = "ajv_keywords___ajv_keywords_3.2.0.tgz"; - url = "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz"; - sha1 = "e86b819c602cf8821ad637413698f1dec021847a"; - }; - } - - { - name = "ajv___ajv_4.11.8.tgz"; - path = fetchurl { - name = "ajv___ajv_4.11.8.tgz"; - url = "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz"; - sha1 = "82ffb02b29e662ae53bdc20af15947706739c536"; - }; - } - - { - name = "ajv___ajv_5.5.2.tgz"; - path = fetchurl { - name = "ajv___ajv_5.5.2.tgz"; - url = "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz"; - sha1 = "73b5eeca3fab653e3d3f9422b341ad42205dc965"; - }; - } - - { - name = "ajv___ajv_6.5.2.tgz"; - path = fetchurl { - name = "ajv___ajv_6.5.2.tgz"; - url = "https://registry.yarnpkg.com/ajv/-/ajv-6.5.2.tgz"; - sha1 = "678495f9b82f7cca6be248dd92f59bff5e1f4360"; - }; - } - - { - name = "align_text___align_text_0.1.4.tgz"; - path = fetchurl { - name = "align_text___align_text_0.1.4.tgz"; - url = "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz"; - sha1 = "0cd90a561093f35d0a99256c22b7069433fad117"; - }; - } - - { - name = "alphanum_sort___alphanum_sort_1.0.2.tgz"; - path = fetchurl { - name = "alphanum_sort___alphanum_sort_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz"; - sha1 = "97a1119649b211ad33691d9f9f486a8ec9fbe0a3"; - }; - } - - { - name = "amdefine___amdefine_1.0.1.tgz"; - path = fetchurl { - name = "amdefine___amdefine_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz"; - sha1 = "4a5282ac164729e93619bcfd3ad151f817ce91f5"; - }; - } - - { - name = "ansi_html___ansi_html_0.0.7.tgz"; - path = fetchurl { - name = "ansi_html___ansi_html_0.0.7.tgz"; - url = "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz"; - sha1 = "813584021962a9e9e6fd039f940d12f56ca7859e"; - }; - } - - { - name = "ansi_regex___ansi_regex_2.1.1.tgz"; - path = fetchurl { - name = "ansi_regex___ansi_regex_2.1.1.tgz"; - url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz"; - sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df"; - }; - } - - { - name = "ansi_regex___ansi_regex_3.0.0.tgz"; - path = fetchurl { - name = "ansi_regex___ansi_regex_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz"; - sha1 = "ed0317c322064f79466c02966bddb605ab37d998"; - }; - } - - { - name = "ansi_styles___ansi_styles_2.2.1.tgz"; - path = fetchurl { - name = "ansi_styles___ansi_styles_2.2.1.tgz"; - url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz"; - sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe"; - }; - } - - { - name = "ansi_styles___ansi_styles_3.2.1.tgz"; - path = fetchurl { - name = "ansi_styles___ansi_styles_3.2.1.tgz"; - url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz"; - sha1 = "41fbb20243e50b12be0f04b8dedbf07520ce841d"; - }; - } - - { - name = "anymatch___anymatch_2.0.0.tgz"; - path = fetchurl { - name = "anymatch___anymatch_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz"; - sha1 = "bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"; - }; - } - - { - name = "aproba___aproba_1.2.0.tgz"; - path = fetchurl { - name = "aproba___aproba_1.2.0.tgz"; - url = "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz"; - sha1 = "6802e6264efd18c790a1b0d517f0f2627bf2c94a"; - }; - } - - { - name = "are_we_there_yet___are_we_there_yet_1.1.5.tgz"; - path = fetchurl { - name = "are_we_there_yet___are_we_there_yet_1.1.5.tgz"; - url = "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz"; - sha1 = "4b35c2944f062a8bfcda66410760350fe9ddfc21"; - }; - } - - { - name = "argparse___argparse_1.0.10.tgz"; - path = fetchurl { - name = "argparse___argparse_1.0.10.tgz"; - url = "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz"; - sha1 = "bcd6791ea5ae09725e17e5ad988134cd40b3d911"; - }; - } - - { - name = "arr_diff___arr_diff_2.0.0.tgz"; - path = fetchurl { - name = "arr_diff___arr_diff_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz"; - sha1 = "8f3b827f955a8bd669697e4a4256ac3ceae356cf"; - }; - } - - { - name = "arr_diff___arr_diff_4.0.0.tgz"; - path = fetchurl { - name = "arr_diff___arr_diff_4.0.0.tgz"; - url = "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz"; - sha1 = "d6461074febfec71e7e15235761a329a5dc7c520"; - }; - } - - { - name = "arr_flatten___arr_flatten_1.1.0.tgz"; - path = fetchurl { - name = "arr_flatten___arr_flatten_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz"; - sha1 = "36048bbff4e7b47e136644316c99669ea5ae91f1"; - }; - } - - { - name = "arr_union___arr_union_3.1.0.tgz"; - path = fetchurl { - name = "arr_union___arr_union_3.1.0.tgz"; - url = "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz"; - sha1 = "e39b09aea9def866a8f206e288af63919bae39c4"; - }; - } - - { - name = "array_find_index___array_find_index_1.0.2.tgz"; - path = fetchurl { - name = "array_find_index___array_find_index_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz"; - sha1 = "df010aa1287e164bbda6f9723b0a96a1ec4187a1"; - }; - } - - { - name = "array_flatten___array_flatten_1.1.1.tgz"; - path = fetchurl { - name = "array_flatten___array_flatten_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz"; - sha1 = "9a5f699051b1e7073328f2a008968b64ea2955d2"; - }; - } - - { - name = "array_flatten___array_flatten_2.1.1.tgz"; - path = fetchurl { - name = "array_flatten___array_flatten_2.1.1.tgz"; - url = "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz"; - sha1 = "426bb9da84090c1838d812c8150af20a8331e296"; - }; - } - - { - name = "array_includes___array_includes_3.0.3.tgz"; - path = fetchurl { - name = "array_includes___array_includes_3.0.3.tgz"; - url = "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz"; - sha1 = "184b48f62d92d7452bb31b323165c7f8bd02266d"; - }; - } - - { - name = "array_union___array_union_1.0.2.tgz"; - path = fetchurl { - name = "array_union___array_union_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz"; - sha1 = "9a34410e4f4e3da23dea375be5be70f24778ec39"; - }; - } - - { - name = "array_uniq___array_uniq_1.0.3.tgz"; - path = fetchurl { - name = "array_uniq___array_uniq_1.0.3.tgz"; - url = "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz"; - sha1 = "af6ac877a25cc7f74e058894753858dfdb24fdb6"; - }; - } - - { - name = "array_unique___array_unique_0.2.1.tgz"; - path = fetchurl { - name = "array_unique___array_unique_0.2.1.tgz"; - url = "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz"; - sha1 = "a1d97ccafcbc2625cc70fadceb36a50c58b01a53"; - }; - } - - { - name = "array_unique___array_unique_0.3.2.tgz"; - path = fetchurl { - name = "array_unique___array_unique_0.3.2.tgz"; - url = "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz"; - sha1 = "a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"; - }; - } - - { - name = "asn1.js___asn1.js_4.10.1.tgz"; - path = fetchurl { - name = "asn1.js___asn1.js_4.10.1.tgz"; - url = "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz"; - sha1 = "b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"; - }; - } - - { - name = "asn1___asn1_0.2.3.tgz"; - path = fetchurl { - name = "asn1___asn1_0.2.3.tgz"; - url = "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz"; - sha1 = "dac8787713c9966849fc8180777ebe9c1ddf3b86"; - }; - } - - { - name = "assert_plus___assert_plus_1.0.0.tgz"; - path = fetchurl { - name = "assert_plus___assert_plus_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz"; - sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"; - }; - } - - { - name = "assert_plus___assert_plus_0.2.0.tgz"; - path = fetchurl { - name = "assert_plus___assert_plus_0.2.0.tgz"; - url = "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz"; - sha1 = "d74e1b87e7affc0db8aadb7021f3fe48101ab234"; - }; - } - - { - name = "assert___assert_1.4.1.tgz"; - path = fetchurl { - name = "assert___assert_1.4.1.tgz"; - url = "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz"; - sha1 = "99912d591836b5a6f5b345c0f07eefc08fc65d91"; - }; - } - - { - name = "assign_symbols___assign_symbols_1.0.0.tgz"; - path = fetchurl { - name = "assign_symbols___assign_symbols_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz"; - sha1 = "59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"; - }; - } - - { - name = "async_each___async_each_1.0.1.tgz"; - path = fetchurl { - name = "async_each___async_each_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz"; - sha1 = "19d386a1d9edc6e7c1c85d388aedbcc56d33602d"; - }; - } - - { - name = "async_foreach___async_foreach_0.1.3.tgz"; - path = fetchurl { - name = "async_foreach___async_foreach_0.1.3.tgz"; - url = "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz"; - sha1 = "36121f845c0578172de419a97dbeb1d16ec34542"; - }; - } - - { - name = "async___async_1.5.2.tgz"; - path = fetchurl { - name = "async___async_1.5.2.tgz"; - url = "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz"; - sha1 = "ec6a61ae56480c0c3cb241c95618e20892f9672a"; - }; - } - - { - name = "async___async_2.6.1.tgz"; - path = fetchurl { - name = "async___async_2.6.1.tgz"; - url = "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz"; - sha1 = "b245a23ca71930044ec53fa46aa00a3e87c6a610"; - }; - } - - { - name = "asynckit___asynckit_0.4.0.tgz"; - path = fetchurl { - name = "asynckit___asynckit_0.4.0.tgz"; - url = "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz"; - sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"; - }; - } - - { - name = "atob___atob_2.1.1.tgz"; - path = fetchurl { - name = "atob___atob_2.1.1.tgz"; - url = "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz"; - sha1 = "ae2d5a729477f289d60dd7f96a6314a22dd6c22a"; - }; - } - - { - name = "autoprefixer___autoprefixer_6.7.7.tgz"; - path = fetchurl { - name = "autoprefixer___autoprefixer_6.7.7.tgz"; - url = "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz"; - sha1 = "1dbd1c835658e35ce3f9984099db00585c782014"; - }; - } - - { - name = "aws_sign2___aws_sign2_0.6.0.tgz"; - path = fetchurl { - name = "aws_sign2___aws_sign2_0.6.0.tgz"; - url = "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz"; - sha1 = "14342dd38dbcc94d0e5b87d763cd63612c0e794f"; - }; - } - - { - name = "aws_sign2___aws_sign2_0.7.0.tgz"; - path = fetchurl { - name = "aws_sign2___aws_sign2_0.7.0.tgz"; - url = "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz"; - sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"; - }; - } - - { - name = "aws4___aws4_1.7.0.tgz"; - path = fetchurl { - name = "aws4___aws4_1.7.0.tgz"; - url = "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz"; - sha1 = "d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289"; - }; - } - - { - name = "babel_code_frame___babel_code_frame_6.26.0.tgz"; - path = fetchurl { - name = "babel_code_frame___babel_code_frame_6.26.0.tgz"; - url = "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz"; - sha1 = "63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"; - }; - } - - { - name = "babel_core___babel_core_6.26.3.tgz"; - path = fetchurl { - name = "babel_core___babel_core_6.26.3.tgz"; - url = "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz"; - sha1 = "b2e2f09e342d0f0c88e2f02e067794125e75c207"; - }; - } - - { - name = "babel_generator___babel_generator_6.26.1.tgz"; - path = fetchurl { - name = "babel_generator___babel_generator_6.26.1.tgz"; - url = "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz"; - sha1 = "1844408d3b8f0d35a404ea7ac180f087a601bd90"; - }; - } - - { - name = "babel_helper_builder_binary_assignment_operator_visitor___babel_helper_builder_binary_assignment_operator_visitor_6.24.1.tgz"; - path = fetchurl { - name = "babel_helper_builder_binary_assignment_operator_visitor___babel_helper_builder_binary_assignment_operator_visitor_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz"; - sha1 = "cce4517ada356f4220bcae8a02c2b346f9a56664"; - }; - } - - { - name = "babel_helper_call_delegate___babel_helper_call_delegate_6.24.1.tgz"; - path = fetchurl { - name = "babel_helper_call_delegate___babel_helper_call_delegate_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz"; - sha1 = "ece6aacddc76e41c3461f88bfc575bd0daa2df8d"; - }; - } - - { - name = "babel_helper_define_map___babel_helper_define_map_6.26.0.tgz"; - path = fetchurl { - name = "babel_helper_define_map___babel_helper_define_map_6.26.0.tgz"; - url = "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz"; - sha1 = "a5f56dab41a25f97ecb498c7ebaca9819f95be5f"; - }; - } - - { - name = "babel_helper_explode_assignable_expression___babel_helper_explode_assignable_expression_6.24.1.tgz"; - path = fetchurl { - name = "babel_helper_explode_assignable_expression___babel_helper_explode_assignable_expression_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz"; - sha1 = "f25b82cf7dc10433c55f70592d5746400ac22caa"; - }; - } - - { - name = "babel_helper_function_name___babel_helper_function_name_6.24.1.tgz"; - path = fetchurl { - name = "babel_helper_function_name___babel_helper_function_name_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz"; - sha1 = "d3475b8c03ed98242a25b48351ab18399d3580a9"; - }; - } - - { - name = "babel_helper_get_function_arity___babel_helper_get_function_arity_6.24.1.tgz"; - path = fetchurl { - name = "babel_helper_get_function_arity___babel_helper_get_function_arity_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz"; - sha1 = "8f7782aa93407c41d3aa50908f89b031b1b6853d"; - }; - } - - { - name = "babel_helper_hoist_variables___babel_helper_hoist_variables_6.24.1.tgz"; - path = fetchurl { - name = "babel_helper_hoist_variables___babel_helper_hoist_variables_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz"; - sha1 = "1ecb27689c9d25513eadbc9914a73f5408be7a76"; - }; - } - - { - name = "babel_helper_optimise_call_expression___babel_helper_optimise_call_expression_6.24.1.tgz"; - path = fetchurl { - name = "babel_helper_optimise_call_expression___babel_helper_optimise_call_expression_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz"; - sha1 = "f7a13427ba9f73f8f4fa993c54a97882d1244257"; - }; - } - - { - name = "babel_helper_regex___babel_helper_regex_6.26.0.tgz"; - path = fetchurl { - name = "babel_helper_regex___babel_helper_regex_6.26.0.tgz"; - url = "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz"; - sha1 = "325c59f902f82f24b74faceed0363954f6495e72"; - }; - } - - { - name = "babel_helper_remap_async_to_generator___babel_helper_remap_async_to_generator_6.24.1.tgz"; - path = fetchurl { - name = "babel_helper_remap_async_to_generator___babel_helper_remap_async_to_generator_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz"; - sha1 = "5ec581827ad723fecdd381f1c928390676e4551b"; - }; - } - - { - name = "babel_helper_replace_supers___babel_helper_replace_supers_6.24.1.tgz"; - path = fetchurl { - name = "babel_helper_replace_supers___babel_helper_replace_supers_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz"; - sha1 = "bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a"; - }; - } - - { - name = "babel_helpers___babel_helpers_6.24.1.tgz"; - path = fetchurl { - name = "babel_helpers___babel_helpers_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz"; - sha1 = "3471de9caec388e5c850e597e58a26ddf37602b2"; - }; - } - - { - name = "babel_loader___babel_loader_7.1.5.tgz"; - path = fetchurl { - name = "babel_loader___babel_loader_7.1.5.tgz"; - url = "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.5.tgz"; - sha1 = "e3ee0cd7394aa557e013b02d3e492bfd07aa6d68"; - }; - } - - { - name = "babel_messages___babel_messages_6.23.0.tgz"; - path = fetchurl { - name = "babel_messages___babel_messages_6.23.0.tgz"; - url = "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz"; - sha1 = "f3cdf4703858035b2a2951c6ec5edf6c62f2630e"; - }; - } - - { - name = "babel_plugin_check_es2015_constants___babel_plugin_check_es2015_constants_6.22.0.tgz"; - path = fetchurl { - name = "babel_plugin_check_es2015_constants___babel_plugin_check_es2015_constants_6.22.0.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz"; - sha1 = "35157b101426fd2ffd3da3f75c7d1e91835bbf8a"; - }; - } - - { - name = "babel_plugin_syntax_async_functions___babel_plugin_syntax_async_functions_6.13.0.tgz"; - path = fetchurl { - name = "babel_plugin_syntax_async_functions___babel_plugin_syntax_async_functions_6.13.0.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz"; - sha1 = "cad9cad1191b5ad634bf30ae0872391e0647be95"; - }; - } - - { - name = "babel_plugin_syntax_exponentiation_operator___babel_plugin_syntax_exponentiation_operator_6.13.0.tgz"; - path = fetchurl { - name = "babel_plugin_syntax_exponentiation_operator___babel_plugin_syntax_exponentiation_operator_6.13.0.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz"; - sha1 = "9ee7e8337290da95288201a6a57f4170317830de"; - }; - } - - { - name = "babel_plugin_syntax_trailing_function_commas___babel_plugin_syntax_trailing_function_commas_6.22.0.tgz"; - path = fetchurl { - name = "babel_plugin_syntax_trailing_function_commas___babel_plugin_syntax_trailing_function_commas_6.22.0.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz"; - sha1 = "ba0360937f8d06e40180a43fe0d5616fff532cf3"; - }; - } - - { - name = "babel_plugin_transform_async_to_generator___babel_plugin_transform_async_to_generator_6.24.1.tgz"; - path = fetchurl { - name = "babel_plugin_transform_async_to_generator___babel_plugin_transform_async_to_generator_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz"; - sha1 = "6536e378aff6cb1d5517ac0e40eb3e9fc8d08761"; - }; - } - - { - name = "babel_plugin_transform_es2015_arrow_functions___babel_plugin_transform_es2015_arrow_functions_6.22.0.tgz"; - path = fetchurl { - name = "babel_plugin_transform_es2015_arrow_functions___babel_plugin_transform_es2015_arrow_functions_6.22.0.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz"; - sha1 = "452692cb711d5f79dc7f85e440ce41b9f244d221"; - }; - } - - { - name = "babel_plugin_transform_es2015_block_scoped_functions___babel_plugin_transform_es2015_block_scoped_functions_6.22.0.tgz"; - path = fetchurl { - name = "babel_plugin_transform_es2015_block_scoped_functions___babel_plugin_transform_es2015_block_scoped_functions_6.22.0.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz"; - sha1 = "bbc51b49f964d70cb8d8e0b94e820246ce3a6141"; - }; - } - - { - name = "babel_plugin_transform_es2015_block_scoping___babel_plugin_transform_es2015_block_scoping_6.26.0.tgz"; - path = fetchurl { - name = "babel_plugin_transform_es2015_block_scoping___babel_plugin_transform_es2015_block_scoping_6.26.0.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz"; - sha1 = "d70f5299c1308d05c12f463813b0a09e73b1895f"; - }; - } - - { - name = "babel_plugin_transform_es2015_classes___babel_plugin_transform_es2015_classes_6.24.1.tgz"; - path = fetchurl { - name = "babel_plugin_transform_es2015_classes___babel_plugin_transform_es2015_classes_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz"; - sha1 = "5a4c58a50c9c9461e564b4b2a3bfabc97a2584db"; - }; - } - - { - name = "babel_plugin_transform_es2015_computed_properties___babel_plugin_transform_es2015_computed_properties_6.24.1.tgz"; - path = fetchurl { - name = "babel_plugin_transform_es2015_computed_properties___babel_plugin_transform_es2015_computed_properties_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz"; - sha1 = "6fe2a8d16895d5634f4cd999b6d3480a308159b3"; - }; - } - - { - name = "babel_plugin_transform_es2015_destructuring___babel_plugin_transform_es2015_destructuring_6.23.0.tgz"; - path = fetchurl { - name = "babel_plugin_transform_es2015_destructuring___babel_plugin_transform_es2015_destructuring_6.23.0.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz"; - sha1 = "997bb1f1ab967f682d2b0876fe358d60e765c56d"; - }; - } - - { - name = "babel_plugin_transform_es2015_duplicate_keys___babel_plugin_transform_es2015_duplicate_keys_6.24.1.tgz"; - path = fetchurl { - name = "babel_plugin_transform_es2015_duplicate_keys___babel_plugin_transform_es2015_duplicate_keys_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz"; - sha1 = "73eb3d310ca969e3ef9ec91c53741a6f1576423e"; - }; - } - - { - name = "babel_plugin_transform_es2015_for_of___babel_plugin_transform_es2015_for_of_6.23.0.tgz"; - path = fetchurl { - name = "babel_plugin_transform_es2015_for_of___babel_plugin_transform_es2015_for_of_6.23.0.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz"; - sha1 = "f47c95b2b613df1d3ecc2fdb7573623c75248691"; - }; - } - - { - name = "babel_plugin_transform_es2015_function_name___babel_plugin_transform_es2015_function_name_6.24.1.tgz"; - path = fetchurl { - name = "babel_plugin_transform_es2015_function_name___babel_plugin_transform_es2015_function_name_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz"; - sha1 = "834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b"; - }; - } - - { - name = "babel_plugin_transform_es2015_literals___babel_plugin_transform_es2015_literals_6.22.0.tgz"; - path = fetchurl { - name = "babel_plugin_transform_es2015_literals___babel_plugin_transform_es2015_literals_6.22.0.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz"; - sha1 = "4f54a02d6cd66cf915280019a31d31925377ca2e"; - }; - } - - { - name = "babel_plugin_transform_es2015_modules_amd___babel_plugin_transform_es2015_modules_amd_6.24.1.tgz"; - path = fetchurl { - name = "babel_plugin_transform_es2015_modules_amd___babel_plugin_transform_es2015_modules_amd_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz"; - sha1 = "3b3e54017239842d6d19c3011c4bd2f00a00d154"; - }; - } - - { - name = "babel_plugin_transform_es2015_modules_commonjs___babel_plugin_transform_es2015_modules_commonjs_6.26.2.tgz"; - path = fetchurl { - name = "babel_plugin_transform_es2015_modules_commonjs___babel_plugin_transform_es2015_modules_commonjs_6.26.2.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz"; - sha1 = "58a793863a9e7ca870bdc5a881117ffac27db6f3"; - }; - } - - { - name = "babel_plugin_transform_es2015_modules_systemjs___babel_plugin_transform_es2015_modules_systemjs_6.24.1.tgz"; - path = fetchurl { - name = "babel_plugin_transform_es2015_modules_systemjs___babel_plugin_transform_es2015_modules_systemjs_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz"; - sha1 = "ff89a142b9119a906195f5f106ecf305d9407d23"; - }; - } - - { - name = "babel_plugin_transform_es2015_modules_umd___babel_plugin_transform_es2015_modules_umd_6.24.1.tgz"; - path = fetchurl { - name = "babel_plugin_transform_es2015_modules_umd___babel_plugin_transform_es2015_modules_umd_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz"; - sha1 = "ac997e6285cd18ed6176adb607d602344ad38468"; - }; - } - - { - name = "babel_plugin_transform_es2015_object_super___babel_plugin_transform_es2015_object_super_6.24.1.tgz"; - path = fetchurl { - name = "babel_plugin_transform_es2015_object_super___babel_plugin_transform_es2015_object_super_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz"; - sha1 = "24cef69ae21cb83a7f8603dad021f572eb278f8d"; - }; - } - - { - name = "babel_plugin_transform_es2015_parameters___babel_plugin_transform_es2015_parameters_6.24.1.tgz"; - path = fetchurl { - name = "babel_plugin_transform_es2015_parameters___babel_plugin_transform_es2015_parameters_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz"; - sha1 = "57ac351ab49caf14a97cd13b09f66fdf0a625f2b"; - }; - } - - { - name = "babel_plugin_transform_es2015_shorthand_properties___babel_plugin_transform_es2015_shorthand_properties_6.24.1.tgz"; - path = fetchurl { - name = "babel_plugin_transform_es2015_shorthand_properties___babel_plugin_transform_es2015_shorthand_properties_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz"; - sha1 = "24f875d6721c87661bbd99a4622e51f14de38aa0"; - }; - } - - { - name = "babel_plugin_transform_es2015_spread___babel_plugin_transform_es2015_spread_6.22.0.tgz"; - path = fetchurl { - name = "babel_plugin_transform_es2015_spread___babel_plugin_transform_es2015_spread_6.22.0.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz"; - sha1 = "d6d68a99f89aedc4536c81a542e8dd9f1746f8d1"; - }; - } - - { - name = "babel_plugin_transform_es2015_sticky_regex___babel_plugin_transform_es2015_sticky_regex_6.24.1.tgz"; - path = fetchurl { - name = "babel_plugin_transform_es2015_sticky_regex___babel_plugin_transform_es2015_sticky_regex_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz"; - sha1 = "00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc"; - }; - } - - { - name = "babel_plugin_transform_es2015_template_literals___babel_plugin_transform_es2015_template_literals_6.22.0.tgz"; - path = fetchurl { - name = "babel_plugin_transform_es2015_template_literals___babel_plugin_transform_es2015_template_literals_6.22.0.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz"; - sha1 = "a84b3450f7e9f8f1f6839d6d687da84bb1236d8d"; - }; - } - - { - name = "babel_plugin_transform_es2015_typeof_symbol___babel_plugin_transform_es2015_typeof_symbol_6.23.0.tgz"; - path = fetchurl { - name = "babel_plugin_transform_es2015_typeof_symbol___babel_plugin_transform_es2015_typeof_symbol_6.23.0.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz"; - sha1 = "dec09f1cddff94b52ac73d505c84df59dcceb372"; - }; - } - - { - name = "babel_plugin_transform_es2015_unicode_regex___babel_plugin_transform_es2015_unicode_regex_6.24.1.tgz"; - path = fetchurl { - name = "babel_plugin_transform_es2015_unicode_regex___babel_plugin_transform_es2015_unicode_regex_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz"; - sha1 = "d38b12f42ea7323f729387f18a7c5ae1faeb35e9"; - }; - } - - { - name = "babel_plugin_transform_exponentiation_operator___babel_plugin_transform_exponentiation_operator_6.24.1.tgz"; - path = fetchurl { - name = "babel_plugin_transform_exponentiation_operator___babel_plugin_transform_exponentiation_operator_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz"; - sha1 = "2ab0c9c7f3098fa48907772bb813fe41e8de3a0e"; - }; - } - - { - name = "babel_plugin_transform_regenerator___babel_plugin_transform_regenerator_6.26.0.tgz"; - path = fetchurl { - name = "babel_plugin_transform_regenerator___babel_plugin_transform_regenerator_6.26.0.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz"; - sha1 = "e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f"; - }; - } - - { - name = "babel_plugin_transform_strict_mode___babel_plugin_transform_strict_mode_6.24.1.tgz"; - path = fetchurl { - name = "babel_plugin_transform_strict_mode___babel_plugin_transform_strict_mode_6.24.1.tgz"; - url = "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz"; - sha1 = "d5faf7aa578a65bbe591cf5edae04a0c67020758"; - }; - } - - { - name = "babel_preset_env___babel_preset_env_1.7.0.tgz"; - path = fetchurl { - name = "babel_preset_env___babel_preset_env_1.7.0.tgz"; - url = "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz"; - sha1 = "dea79fa4ebeb883cd35dab07e260c1c9c04df77a"; - }; - } - - { - name = "babel_register___babel_register_6.26.0.tgz"; - path = fetchurl { - name = "babel_register___babel_register_6.26.0.tgz"; - url = "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz"; - sha1 = "6ed021173e2fcb486d7acb45c6009a856f647071"; - }; - } - - { - name = "babel_runtime___babel_runtime_6.26.0.tgz"; - path = fetchurl { - name = "babel_runtime___babel_runtime_6.26.0.tgz"; - url = "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz"; - sha1 = "965c7058668e82b55d7bfe04ff2337bc8b5647fe"; - }; - } - - { - name = "babel_template___babel_template_6.26.0.tgz"; - path = fetchurl { - name = "babel_template___babel_template_6.26.0.tgz"; - url = "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz"; - sha1 = "de03e2d16396b069f46dd9fff8521fb1a0e35e02"; - }; - } - - { - name = "babel_traverse___babel_traverse_6.26.0.tgz"; - path = fetchurl { - name = "babel_traverse___babel_traverse_6.26.0.tgz"; - url = "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz"; - sha1 = "46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"; - }; - } - - { - name = "babel_types___babel_types_6.26.0.tgz"; - path = fetchurl { - name = "babel_types___babel_types_6.26.0.tgz"; - url = "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz"; - sha1 = "a3b073f94ab49eb6fa55cd65227a334380632497"; - }; - } - - { - name = "babylon___babylon_6.18.0.tgz"; - path = fetchurl { - name = "babylon___babylon_6.18.0.tgz"; - url = "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz"; - sha1 = "af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"; - }; - } - - { - name = "balanced_match___balanced_match_0.4.2.tgz"; - path = fetchurl { - name = "balanced_match___balanced_match_0.4.2.tgz"; - url = "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz"; - sha1 = "cb3f3e3c732dc0f01ee70b403f302e61d7709838"; - }; - } - - { - name = "balanced_match___balanced_match_1.0.0.tgz"; - path = fetchurl { - name = "balanced_match___balanced_match_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz"; - sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767"; - }; - } - - { - name = "base64_js___base64_js_1.3.0.tgz"; - path = fetchurl { - name = "base64_js___base64_js_1.3.0.tgz"; - url = "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz"; - sha1 = "cab1e6118f051095e58b5281aea8c1cd22bfc0e3"; - }; - } - - { - name = "base___base_0.11.2.tgz"; - path = fetchurl { - name = "base___base_0.11.2.tgz"; - url = "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz"; - sha1 = "7bde5ced145b6d551a90db87f83c558b4eb48a8f"; - }; - } - - { - name = "batch___batch_0.6.1.tgz"; - path = fetchurl { - name = "batch___batch_0.6.1.tgz"; - url = "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz"; - sha1 = "dc34314f4e679318093fc760272525f94bf25c16"; - }; - } - - { - name = "bcrypt_pbkdf___bcrypt_pbkdf_1.0.2.tgz"; - path = fetchurl { - name = "bcrypt_pbkdf___bcrypt_pbkdf_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz"; - sha1 = "a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"; - }; - } - - { - name = "big.js___big.js_3.2.0.tgz"; - path = fetchurl { - name = "big.js___big.js_3.2.0.tgz"; - url = "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz"; - sha1 = "a5fc298b81b9e0dca2e458824784b65c52ba588e"; - }; - } - - { - name = "binary_extensions___binary_extensions_1.11.0.tgz"; - path = fetchurl { - name = "binary_extensions___binary_extensions_1.11.0.tgz"; - url = "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz"; - sha1 = "46aa1751fb6a2f93ee5e689bb1087d4b14c6c205"; - }; - } - - { - name = "block_stream___block_stream_0.0.9.tgz"; - path = fetchurl { - name = "block_stream___block_stream_0.0.9.tgz"; - url = "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz"; - sha1 = "13ebfe778a03205cfe03751481ebb4b3300c126a"; - }; - } - - { - name = "bn.js___bn.js_4.11.8.tgz"; - path = fetchurl { - name = "bn.js___bn.js_4.11.8.tgz"; - url = "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz"; - sha1 = "2cde09eb5ee341f484746bb0309b3253b1b1442f"; - }; - } - - { - name = "body_parser___body_parser_1.18.2.tgz"; - path = fetchurl { - name = "body_parser___body_parser_1.18.2.tgz"; - url = "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz"; - sha1 = "87678a19d84b47d859b83199bd59bce222b10454"; - }; - } - - { - name = "bonjour___bonjour_3.5.0.tgz"; - path = fetchurl { - name = "bonjour___bonjour_3.5.0.tgz"; - url = "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz"; - sha1 = "8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"; - }; - } - - { - name = "boolbase___boolbase_1.0.0.tgz"; - path = fetchurl { - name = "boolbase___boolbase_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz"; - sha1 = "68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"; - }; - } - - { - name = "boom___boom_2.10.1.tgz"; - path = fetchurl { - name = "boom___boom_2.10.1.tgz"; - url = "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz"; - sha1 = "39c8918ceff5799f83f9492a848f625add0c766f"; - }; - } - - { - name = "bootstrap___bootstrap_4.1.3.tgz"; - path = fetchurl { - name = "bootstrap___bootstrap_4.1.3.tgz"; - url = "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.1.3.tgz"; - sha1 = "0eb371af2c8448e8c210411d0cb824a6409a12be"; - }; - } - - { - name = "brace_expansion___brace_expansion_1.1.11.tgz"; - path = fetchurl { - name = "brace_expansion___brace_expansion_1.1.11.tgz"; - url = "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz"; - sha1 = "3c7fcbf529d87226f3d2f52b966ff5271eb441dd"; - }; - } - - { - name = "braces___braces_1.8.5.tgz"; - path = fetchurl { - name = "braces___braces_1.8.5.tgz"; - url = "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz"; - sha1 = "ba77962e12dff969d6b76711e914b737857bf6a7"; - }; - } - - { - name = "braces___braces_2.3.2.tgz"; - path = fetchurl { - name = "braces___braces_2.3.2.tgz"; - url = "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz"; - sha1 = "5979fd3f14cd531565e5fa2df1abfff1dfaee729"; - }; - } - - { - name = "brorand___brorand_1.1.0.tgz"; - path = fetchurl { - name = "brorand___brorand_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz"; - sha1 = "12c25efe40a45e3c323eb8675a0a0ce57b22371f"; - }; - } - - { - name = "browserify_aes___browserify_aes_1.2.0.tgz"; - path = fetchurl { - name = "browserify_aes___browserify_aes_1.2.0.tgz"; - url = "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz"; - sha1 = "326734642f403dabc3003209853bb70ad428ef48"; - }; - } - - { - name = "browserify_cipher___browserify_cipher_1.0.1.tgz"; - path = fetchurl { - name = "browserify_cipher___browserify_cipher_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz"; - sha1 = "8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"; - }; - } - - { - name = "browserify_des___browserify_des_1.0.2.tgz"; - path = fetchurl { - name = "browserify_des___browserify_des_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz"; - sha1 = "3af4f1f59839403572f1c66204375f7a7f703e9c"; - }; - } - - { - name = "browserify_rsa___browserify_rsa_4.0.1.tgz"; - path = fetchurl { - name = "browserify_rsa___browserify_rsa_4.0.1.tgz"; - url = "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz"; - sha1 = "21e0abfaf6f2029cf2fafb133567a701d4135524"; - }; - } - - { - name = "browserify_sign___browserify_sign_4.0.4.tgz"; - path = fetchurl { - name = "browserify_sign___browserify_sign_4.0.4.tgz"; - url = "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz"; - sha1 = "aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"; - }; - } - - { - name = "browserify_zlib___browserify_zlib_0.2.0.tgz"; - path = fetchurl { - name = "browserify_zlib___browserify_zlib_0.2.0.tgz"; - url = "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz"; - sha1 = "2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"; - }; - } - - { - name = "browserslist___browserslist_1.7.7.tgz"; - path = fetchurl { - name = "browserslist___browserslist_1.7.7.tgz"; - url = "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz"; - sha1 = "0bd76704258be829b2398bb50e4b62d1a166b0b9"; - }; - } - - { - name = "browserslist___browserslist_3.2.8.tgz"; - path = fetchurl { - name = "browserslist___browserslist_3.2.8.tgz"; - url = "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz"; - sha1 = "b0005361d6471f0f5952797a76fc985f1f978fc6"; - }; - } - - { - name = "buffer_indexof___buffer_indexof_1.1.1.tgz"; - path = fetchurl { - name = "buffer_indexof___buffer_indexof_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz"; - sha1 = "52fabcc6a606d1a00302802648ef68f639da268c"; - }; - } - - { - name = "buffer_xor___buffer_xor_1.0.3.tgz"; - path = fetchurl { - name = "buffer_xor___buffer_xor_1.0.3.tgz"; - url = "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz"; - sha1 = "26e61ed1422fb70dd42e6e36729ed51d855fe8d9"; - }; - } - - { - name = "buffer___buffer_4.9.1.tgz"; - path = fetchurl { - name = "buffer___buffer_4.9.1.tgz"; - url = "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz"; - sha1 = "6d1bb601b07a4efced97094132093027c95bc298"; - }; - } - - { - name = "builtin_modules___builtin_modules_1.1.1.tgz"; - path = fetchurl { - name = "builtin_modules___builtin_modules_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz"; - sha1 = "270f076c5a72c02f5b65a47df94c5fe3a278892f"; - }; - } - - { - name = "builtin_status_codes___builtin_status_codes_3.0.0.tgz"; - path = fetchurl { - name = "builtin_status_codes___builtin_status_codes_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz"; - sha1 = "85982878e21b98e1c66425e03d0174788f569ee8"; - }; - } - - { - name = "bytes___bytes_3.0.0.tgz"; - path = fetchurl { - name = "bytes___bytes_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz"; - sha1 = "d32815404d689699f85a4ea4fa8755dd13a96048"; - }; - } - - { - name = "cache_base___cache_base_1.0.1.tgz"; - path = fetchurl { - name = "cache_base___cache_base_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz"; - sha1 = "0a7f46416831c8b662ee36fe4e7c59d76f666ab2"; - }; - } - - { - name = "camelcase_keys___camelcase_keys_2.1.0.tgz"; - path = fetchurl { - name = "camelcase_keys___camelcase_keys_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz"; - sha1 = "308beeaffdf28119051efa1d932213c91b8f92e7"; - }; - } - - { - name = "camelcase___camelcase_1.2.1.tgz"; - path = fetchurl { - name = "camelcase___camelcase_1.2.1.tgz"; - url = "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz"; - sha1 = "9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"; - }; - } - - { - name = "camelcase___camelcase_2.1.1.tgz"; - path = fetchurl { - name = "camelcase___camelcase_2.1.1.tgz"; - url = "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz"; - sha1 = "7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"; - }; - } - - { - name = "camelcase___camelcase_3.0.0.tgz"; - path = fetchurl { - name = "camelcase___camelcase_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz"; - sha1 = "32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"; - }; - } - - { - name = "camelcase___camelcase_4.1.0.tgz"; - path = fetchurl { - name = "camelcase___camelcase_4.1.0.tgz"; - url = "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz"; - sha1 = "d545635be1e33c542649c69173e5de6acfae34dd"; - }; - } - - { - name = "caniuse_api___caniuse_api_1.6.1.tgz"; - path = fetchurl { - name = "caniuse_api___caniuse_api_1.6.1.tgz"; - url = "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz"; - sha1 = "b534e7c734c4f81ec5fbe8aca2ad24354b962c6c"; - }; - } - - { - name = "caniuse_db___caniuse_db_1.0.30000871.tgz"; - path = fetchurl { - name = "caniuse_db___caniuse_db_1.0.30000871.tgz"; - url = "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000871.tgz"; - sha1 = "f1995c1fe31892649a7605957a80c92518423d4d"; - }; - } - - { - name = "caniuse_lite___caniuse_lite_1.0.30000865.tgz"; - path = fetchurl { - name = "caniuse_lite___caniuse_lite_1.0.30000865.tgz"; - url = "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000865.tgz"; - sha1 = "70026616e8afe6e1442f8bb4e1092987d81a2f25"; - }; - } - - { - name = "caseless___caseless_0.12.0.tgz"; - path = fetchurl { - name = "caseless___caseless_0.12.0.tgz"; - url = "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz"; - sha1 = "1b681c21ff84033c826543090689420d187151dc"; - }; - } - - { - name = "center_align___center_align_0.1.3.tgz"; - path = fetchurl { - name = "center_align___center_align_0.1.3.tgz"; - url = "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz"; - sha1 = "aa0d32629b6ee972200411cbd4461c907bc2b7ad"; - }; - } - - { - name = "chalk___chalk_1.1.3.tgz"; - path = fetchurl { - name = "chalk___chalk_1.1.3.tgz"; - url = "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz"; - sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98"; - }; - } - - { - name = "chalk___chalk_2.4.1.tgz"; - path = fetchurl { - name = "chalk___chalk_2.4.1.tgz"; - url = "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz"; - sha1 = "18c49ab16a037b6eb0152cc83e3471338215b66e"; - }; - } - - { - name = "chokidar___chokidar_2.0.4.tgz"; - path = fetchurl { - name = "chokidar___chokidar_2.0.4.tgz"; - url = "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz"; - sha1 = "356ff4e2b0e8e43e322d18a372460bbcf3accd26"; - }; - } - - { - name = "chownr___chownr_1.0.1.tgz"; - path = fetchurl { - name = "chownr___chownr_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz"; - sha1 = "e2a75042a9551908bebd25b8523d5f9769d79181"; - }; - } - - { - name = "cipher_base___cipher_base_1.0.4.tgz"; - path = fetchurl { - name = "cipher_base___cipher_base_1.0.4.tgz"; - url = "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz"; - sha1 = "8760e4ecc272f4c363532f926d874aae2c1397de"; - }; - } - - { - name = "clap___clap_1.2.3.tgz"; - path = fetchurl { - name = "clap___clap_1.2.3.tgz"; - url = "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz"; - sha1 = "4f36745b32008492557f46412d66d50cb99bce51"; - }; - } - - { - name = "class_utils___class_utils_0.3.6.tgz"; - path = fetchurl { - name = "class_utils___class_utils_0.3.6.tgz"; - url = "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz"; - sha1 = "f93369ae8b9a7ce02fd41faad0ca83033190c463"; - }; - } - - { - name = "clean_webpack_plugin___clean_webpack_plugin_0.1.19.tgz"; - path = fetchurl { - name = "clean_webpack_plugin___clean_webpack_plugin_0.1.19.tgz"; - url = "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-0.1.19.tgz"; - sha1 = "ceda8bb96b00fe168e9b080272960d20fdcadd6d"; - }; - } - - { - name = "cliui___cliui_2.1.0.tgz"; - path = fetchurl { - name = "cliui___cliui_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz"; - sha1 = "4b475760ff80264c762c3a1719032e91c7fea0d1"; - }; - } - - { - name = "cliui___cliui_3.2.0.tgz"; - path = fetchurl { - name = "cliui___cliui_3.2.0.tgz"; - url = "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz"; - sha1 = "120601537a916d29940f934da3b48d585a39213d"; - }; - } - - { - name = "clone_deep___clone_deep_2.0.2.tgz"; - path = fetchurl { - name = "clone_deep___clone_deep_2.0.2.tgz"; - url = "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz"; - sha1 = "00db3a1e173656730d1188c3d6aced6d7ea97713"; - }; - } - - { - name = "clone___clone_1.0.4.tgz"; - path = fetchurl { - name = "clone___clone_1.0.4.tgz"; - url = "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz"; - sha1 = "da309cc263df15994c688ca902179ca3c7cd7c7e"; - }; - } - - { - name = "co___co_4.6.0.tgz"; - path = fetchurl { - name = "co___co_4.6.0.tgz"; - url = "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz"; - sha1 = "6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"; - }; - } - - { - name = "coa___coa_1.0.4.tgz"; - path = fetchurl { - name = "coa___coa_1.0.4.tgz"; - url = "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz"; - sha1 = "a9ef153660d6a86a8bdec0289a5c684d217432fd"; - }; - } - - { - name = "code_point_at___code_point_at_1.1.0.tgz"; - path = fetchurl { - name = "code_point_at___code_point_at_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz"; - sha1 = "0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"; - }; - } - - { - name = "collection_visit___collection_visit_1.0.0.tgz"; - path = fetchurl { - name = "collection_visit___collection_visit_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz"; - sha1 = "4bc0373c164bc3291b4d368c829cf1a80a59dca0"; - }; - } - - { - name = "color_convert___color_convert_1.9.2.tgz"; - path = fetchurl { - name = "color_convert___color_convert_1.9.2.tgz"; - url = "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.2.tgz"; - sha1 = "49881b8fba67df12a96bdf3f56c0aab9e7913147"; - }; - } - - { - name = "color_name___color_name_1.1.1.tgz"; - path = fetchurl { - name = "color_name___color_name_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz"; - sha1 = "4b1415304cf50028ea81643643bd82ea05803689"; - }; - } - - { - name = "color_name___color_name_1.1.3.tgz"; - path = fetchurl { - name = "color_name___color_name_1.1.3.tgz"; - url = "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz"; - sha1 = "a7d0558bd89c42f795dd42328f740831ca53bc25"; - }; - } - - { - name = "color_string___color_string_0.3.0.tgz"; - path = fetchurl { - name = "color_string___color_string_0.3.0.tgz"; - url = "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz"; - sha1 = "27d46fb67025c5c2fa25993bfbf579e47841b991"; - }; - } - - { - name = "color___color_0.11.4.tgz"; - path = fetchurl { - name = "color___color_0.11.4.tgz"; - url = "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz"; - sha1 = "6d7b5c74fb65e841cd48792ad1ed5e07b904d764"; - }; - } - - { - name = "colormin___colormin_1.1.2.tgz"; - path = fetchurl { - name = "colormin___colormin_1.1.2.tgz"; - url = "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz"; - sha1 = "ea2f7420a72b96881a38aae59ec124a6f7298133"; - }; - } - - { - name = "colors___colors_1.1.2.tgz"; - path = fetchurl { - name = "colors___colors_1.1.2.tgz"; - url = "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz"; - sha1 = "168a4701756b6a7f51a12ce0c97bfa28c084ed63"; - }; - } - - { - name = "combined_stream___combined_stream_1.0.6.tgz"; - path = fetchurl { - name = "combined_stream___combined_stream_1.0.6.tgz"; - url = "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz"; - sha1 = "723e7df6e801ac5613113a7e445a9b69cb632818"; - }; - } - - { - name = "commondir___commondir_1.0.1.tgz"; - path = fetchurl { - name = "commondir___commondir_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz"; - sha1 = "ddd800da0c66127393cca5950ea968a3aaf1253b"; - }; - } - - { - name = "component_emitter___component_emitter_1.2.1.tgz"; - path = fetchurl { - name = "component_emitter___component_emitter_1.2.1.tgz"; - url = "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz"; - sha1 = "137918d6d78283f7df7a6b7c5a63e140e69425e6"; - }; - } - - { - name = "compressible___compressible_2.0.14.tgz"; - path = fetchurl { - name = "compressible___compressible_2.0.14.tgz"; - url = "https://registry.yarnpkg.com/compressible/-/compressible-2.0.14.tgz"; - sha1 = "326c5f507fbb055f54116782b969a81b67a29da7"; - }; - } - - { - name = "compression___compression_1.7.3.tgz"; - path = fetchurl { - name = "compression___compression_1.7.3.tgz"; - url = "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz"; - sha1 = "27e0e176aaf260f7f2c2813c3e440adb9f1993db"; - }; - } - - { - name = "concat_map___concat_map_0.0.1.tgz"; - path = fetchurl { - name = "concat_map___concat_map_0.0.1.tgz"; - url = "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz"; - sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b"; - }; - } - - { - name = "connect_history_api_fallback___connect_history_api_fallback_1.5.0.tgz"; - path = fetchurl { - name = "connect_history_api_fallback___connect_history_api_fallback_1.5.0.tgz"; - url = "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz"; - sha1 = "b06873934bc5e344fef611a196a6faae0aee015a"; - }; - } - - { - name = "console_browserify___console_browserify_1.1.0.tgz"; - path = fetchurl { - name = "console_browserify___console_browserify_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz"; - sha1 = "f0241c45730a9fc6323b206dbf38edc741d0bb10"; - }; - } - - { - name = "console_control_strings___console_control_strings_1.1.0.tgz"; - path = fetchurl { - name = "console_control_strings___console_control_strings_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz"; - sha1 = "3d7cf4464db6446ea644bf4b39507f9851008e8e"; - }; - } - - { - name = "constants_browserify___constants_browserify_1.0.0.tgz"; - path = fetchurl { - name = "constants_browserify___constants_browserify_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz"; - sha1 = "c20b96d8c617748aaf1c16021760cd27fcb8cb75"; - }; - } - - { - name = "content_disposition___content_disposition_0.5.2.tgz"; - path = fetchurl { - name = "content_disposition___content_disposition_0.5.2.tgz"; - url = "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz"; - sha1 = "0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"; - }; - } - - { - name = "content_type___content_type_1.0.4.tgz"; - path = fetchurl { - name = "content_type___content_type_1.0.4.tgz"; - url = "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz"; - sha1 = "e138cc75e040c727b1966fe5e5f8c9aee256fe3b"; - }; - } - - { - name = "convert_source_map___convert_source_map_0.3.5.tgz"; - path = fetchurl { - name = "convert_source_map___convert_source_map_0.3.5.tgz"; - url = "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz"; - sha1 = "f1d802950af7dd2631a1febe0596550c86ab3190"; - }; - } - - { - name = "convert_source_map___convert_source_map_1.5.1.tgz"; - path = fetchurl { - name = "convert_source_map___convert_source_map_1.5.1.tgz"; - url = "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz"; - sha1 = "b8278097b9bc229365de5c62cf5fcaed8b5599e5"; - }; - } - - { - name = "cookie_signature___cookie_signature_1.0.6.tgz"; - path = fetchurl { - name = "cookie_signature___cookie_signature_1.0.6.tgz"; - url = "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz"; - sha1 = "e303a882b342cc3ee8ca513a79999734dab3ae2c"; - }; - } - - { - name = "cookie___cookie_0.3.1.tgz"; - path = fetchurl { - name = "cookie___cookie_0.3.1.tgz"; - url = "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz"; - sha1 = "e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"; - }; - } - - { - name = "copy_descriptor___copy_descriptor_0.1.1.tgz"; - path = fetchurl { - name = "copy_descriptor___copy_descriptor_0.1.1.tgz"; - url = "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz"; - sha1 = "676f6eb3c39997c2ee1ac3a924fd6124748f578d"; - }; - } - - { - name = "core_js___core_js_2.5.7.tgz"; - path = fetchurl { - name = "core_js___core_js_2.5.7.tgz"; - url = "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz"; - sha1 = "f972608ff0cead68b841a16a932d0b183791814e"; - }; - } - - { - name = "core_util_is___core_util_is_1.0.2.tgz"; - path = fetchurl { - name = "core_util_is___core_util_is_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz"; - sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7"; - }; - } - - { - name = "create_ecdh___create_ecdh_4.0.3.tgz"; - path = fetchurl { - name = "create_ecdh___create_ecdh_4.0.3.tgz"; - url = "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz"; - sha1 = "c9111b6f33045c4697f144787f9254cdc77c45ff"; - }; - } - - { - name = "create_hash___create_hash_1.2.0.tgz"; - path = fetchurl { - name = "create_hash___create_hash_1.2.0.tgz"; - url = "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz"; - sha1 = "889078af11a63756bcfb59bd221996be3a9ef196"; - }; - } - - { - name = "create_hmac___create_hmac_1.1.7.tgz"; - path = fetchurl { - name = "create_hmac___create_hmac_1.1.7.tgz"; - url = "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz"; - sha1 = "69170c78b3ab957147b2b8b04572e47ead2243ff"; - }; - } - - { - name = "cross_spawn___cross_spawn_3.0.1.tgz"; - path = fetchurl { - name = "cross_spawn___cross_spawn_3.0.1.tgz"; - url = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz"; - sha1 = "1256037ecb9f0c5f79e3d6ef135e30770184b982"; - }; - } - - { - name = "cross_spawn___cross_spawn_5.1.0.tgz"; - path = fetchurl { - name = "cross_spawn___cross_spawn_5.1.0.tgz"; - url = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz"; - sha1 = "e8bd0efee58fcff6f8f94510a0a554bbfa235449"; - }; - } - - { - name = "cryptiles___cryptiles_2.0.5.tgz"; - path = fetchurl { - name = "cryptiles___cryptiles_2.0.5.tgz"; - url = "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz"; - sha1 = "3bdfecdc608147c1c67202fa291e7dca59eaa3b8"; - }; - } - - { - name = "crypto_browserify___crypto_browserify_3.12.0.tgz"; - path = fetchurl { - name = "crypto_browserify___crypto_browserify_3.12.0.tgz"; - url = "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz"; - sha1 = "396cf9f3137f03e4b8e532c58f698254e00f80ec"; - }; - } - - { - name = "css_color_names___css_color_names_0.0.4.tgz"; - path = fetchurl { - name = "css_color_names___css_color_names_0.0.4.tgz"; - url = "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz"; - sha1 = "808adc2e79cf84738069b646cb20ec27beb629e0"; - }; - } - - { - name = "css_loader___css_loader_0.26.4.tgz"; - path = fetchurl { - name = "css_loader___css_loader_0.26.4.tgz"; - url = "https://registry.yarnpkg.com/css-loader/-/css-loader-0.26.4.tgz"; - sha1 = "b61e9e30db94303e6ffc892f10ecd09ad025a1fd"; - }; - } - - { - name = "css_select___css_select_1.2.0.tgz"; - path = fetchurl { - name = "css_select___css_select_1.2.0.tgz"; - url = "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz"; - sha1 = "2b3a110539c5355f1cd8d314623e870b121ec858"; - }; - } - - { - name = "css_selector_tokenizer___css_selector_tokenizer_0.7.0.tgz"; - path = fetchurl { - name = "css_selector_tokenizer___css_selector_tokenizer_0.7.0.tgz"; - url = "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz"; - sha1 = "e6988474ae8c953477bf5e7efecfceccd9cf4c86"; - }; - } - - { - name = "css_what___css_what_2.1.0.tgz"; - path = fetchurl { - name = "css_what___css_what_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz"; - sha1 = "9467d032c38cfaefb9f2d79501253062f87fa1bd"; - }; - } - - { - name = "css___css_2.2.3.tgz"; - path = fetchurl { - name = "css___css_2.2.3.tgz"; - url = "https://registry.yarnpkg.com/css/-/css-2.2.3.tgz"; - sha1 = "f861f4ba61e79bedc962aa548e5780fd95cbc6be"; - }; - } - - { - name = "cssesc___cssesc_0.1.0.tgz"; - path = fetchurl { - name = "cssesc___cssesc_0.1.0.tgz"; - url = "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz"; - sha1 = "c814903e45623371a0477b40109aaafbeeaddbb4"; - }; - } - - { - name = "cssnano___cssnano_3.10.0.tgz"; - path = fetchurl { - name = "cssnano___cssnano_3.10.0.tgz"; - url = "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz"; - sha1 = "4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"; - }; - } - - { - name = "csso___csso_2.3.2.tgz"; - path = fetchurl { - name = "csso___csso_2.3.2.tgz"; - url = "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz"; - sha1 = "ddd52c587033f49e94b71fc55569f252e8ff5f85"; - }; - } - - { - name = "currently_unhandled___currently_unhandled_0.4.1.tgz"; - path = fetchurl { - name = "currently_unhandled___currently_unhandled_0.4.1.tgz"; - url = "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz"; - sha1 = "988df33feab191ef799a61369dd76c17adf957ea"; - }; - } - - { - name = "d___d_1.0.0.tgz"; - path = fetchurl { - name = "d___d_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz"; - sha1 = "754bb5bfe55451da69a58b94d45f4c5b0462d58f"; - }; - } - - { - name = "dashdash___dashdash_1.14.1.tgz"; - path = fetchurl { - name = "dashdash___dashdash_1.14.1.tgz"; - url = "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz"; - sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"; - }; - } - - { - name = "date_now___date_now_0.1.4.tgz"; - path = fetchurl { - name = "date_now___date_now_0.1.4.tgz"; - url = "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz"; - sha1 = "eaf439fd4d4848ad74e5cc7dbef200672b9e345b"; - }; - } - - { - name = "debug___debug_2.6.9.tgz"; - path = fetchurl { - name = "debug___debug_2.6.9.tgz"; - url = "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz"; - sha1 = "5d128515df134ff327e90a4c93f4e077a536341f"; - }; - } - - { - name = "debug___debug_3.1.0.tgz"; - path = fetchurl { - name = "debug___debug_3.1.0.tgz"; - url = "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz"; - sha1 = "5bb5a0672628b64149566ba16819e61518c67261"; - }; - } - - { - name = "decamelize___decamelize_1.2.0.tgz"; - path = fetchurl { - name = "decamelize___decamelize_1.2.0.tgz"; - url = "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz"; - sha1 = "f6534d15148269b20352e7bee26f501f9a191290"; - }; - } - - { - name = "decode_uri_component___decode_uri_component_0.2.0.tgz"; - path = fetchurl { - name = "decode_uri_component___decode_uri_component_0.2.0.tgz"; - url = "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz"; - sha1 = "eb3913333458775cb84cd1a1fae062106bb87545"; - }; - } - - { - name = "deep_equal___deep_equal_1.0.1.tgz"; - path = fetchurl { - name = "deep_equal___deep_equal_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz"; - sha1 = "f5d260292b660e084eff4cdbc9f08ad3247448b5"; - }; - } - - { - name = "deep_extend___deep_extend_0.6.0.tgz"; - path = fetchurl { - name = "deep_extend___deep_extend_0.6.0.tgz"; - url = "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz"; - sha1 = "c4fa7c95404a17a9c3e8ca7e1537312b736330ac"; - }; - } - - { - name = "define_properties___define_properties_1.1.2.tgz"; - path = fetchurl { - name = "define_properties___define_properties_1.1.2.tgz"; - url = "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz"; - sha1 = "83a73f2fea569898fb737193c8f873caf6d45c94"; - }; - } - - { - name = "define_property___define_property_0.2.5.tgz"; - path = fetchurl { - name = "define_property___define_property_0.2.5.tgz"; - url = "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz"; - sha1 = "c35b1ef918ec3c990f9a5bc57be04aacec5c8116"; - }; - } - - { - name = "define_property___define_property_1.0.0.tgz"; - path = fetchurl { - name = "define_property___define_property_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz"; - sha1 = "769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"; - }; - } - - { - name = "define_property___define_property_2.0.2.tgz"; - path = fetchurl { - name = "define_property___define_property_2.0.2.tgz"; - url = "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz"; - sha1 = "d459689e8d654ba77e02a817f8710d702cb16e9d"; - }; - } - - { - name = "defined___defined_1.0.0.tgz"; - path = fetchurl { - name = "defined___defined_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz"; - sha1 = "c98d9bcef75674188e110969151199e39b1fa693"; - }; - } - - { - name = "del___del_3.0.0.tgz"; - path = fetchurl { - name = "del___del_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz"; - sha1 = "53ecf699ffcbcb39637691ab13baf160819766e5"; - }; - } - - { - name = "delayed_stream___delayed_stream_1.0.0.tgz"; - path = fetchurl { - name = "delayed_stream___delayed_stream_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz"; - sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619"; - }; - } - - { - name = "delegates___delegates_1.0.0.tgz"; - path = fetchurl { - name = "delegates___delegates_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz"; - sha1 = "84c6e159b81904fdca59a0ef44cd870d31250f9a"; - }; - } - - { - name = "depd___depd_1.1.1.tgz"; - path = fetchurl { - name = "depd___depd_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz"; - sha1 = "5783b4e1c459f06fa5ca27f991f3d06e7a310359"; - }; - } - - { - name = "depd___depd_1.1.2.tgz"; - path = fetchurl { - name = "depd___depd_1.1.2.tgz"; - url = "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz"; - sha1 = "9bcd52e14c097763e749b274c4346ed2e560b5a9"; - }; - } - - { - name = "des.js___des.js_1.0.0.tgz"; - path = fetchurl { - name = "des.js___des.js_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz"; - sha1 = "c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"; - }; - } - - { - name = "destroy___destroy_1.0.4.tgz"; - path = fetchurl { - name = "destroy___destroy_1.0.4.tgz"; - url = "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz"; - sha1 = "978857442c44749e4206613e37946205826abd80"; - }; - } - - { - name = "detect_indent___detect_indent_4.0.0.tgz"; - path = fetchurl { - name = "detect_indent___detect_indent_4.0.0.tgz"; - url = "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz"; - sha1 = "f76d064352cdf43a1cb6ce619c4ee3a9475de208"; - }; - } - - { - name = "detect_libc___detect_libc_1.0.3.tgz"; - path = fetchurl { - name = "detect_libc___detect_libc_1.0.3.tgz"; - url = "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz"; - sha1 = "fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"; - }; - } - - { - name = "detect_node___detect_node_2.0.3.tgz"; - path = fetchurl { - name = "detect_node___detect_node_2.0.3.tgz"; - url = "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz"; - sha1 = "a2033c09cc8e158d37748fbde7507832bd6ce127"; - }; - } - - { - name = "diffie_hellman___diffie_hellman_5.0.3.tgz"; - path = fetchurl { - name = "diffie_hellman___diffie_hellman_5.0.3.tgz"; - url = "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz"; - sha1 = "40e8ee98f55a2149607146921c63e1ae5f3d2875"; - }; - } - - { - name = "dns_equal___dns_equal_1.0.0.tgz"; - path = fetchurl { - name = "dns_equal___dns_equal_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz"; - sha1 = "b39e7f1da6eb0a75ba9c17324b34753c47e0654d"; - }; - } - - { - name = "dns_packet___dns_packet_1.3.1.tgz"; - path = fetchurl { - name = "dns_packet___dns_packet_1.3.1.tgz"; - url = "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz"; - sha1 = "12aa426981075be500b910eedcd0b47dd7deda5a"; - }; - } - - { - name = "dns_txt___dns_txt_2.0.2.tgz"; - path = fetchurl { - name = "dns_txt___dns_txt_2.0.2.tgz"; - url = "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz"; - sha1 = "b91d806f5d27188e4ab3e7d107d881a1cc4642b6"; - }; - } - - { - name = "dom_converter___dom_converter_0.1.4.tgz"; - path = fetchurl { - name = "dom_converter___dom_converter_0.1.4.tgz"; - url = "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz"; - sha1 = "a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b"; - }; - } - - { - name = "dom_serializer___dom_serializer_0.1.0.tgz"; - path = fetchurl { - name = "dom_serializer___dom_serializer_0.1.0.tgz"; - url = "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz"; - sha1 = "073c697546ce0780ce23be4a28e293e40bc30c82"; - }; - } - - { - name = "domain_browser___domain_browser_1.2.0.tgz"; - path = fetchurl { - name = "domain_browser___domain_browser_1.2.0.tgz"; - url = "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz"; - sha1 = "3d31f50191a6749dd1375a7f522e823d42e54eda"; - }; - } - - { - name = "domelementtype___domelementtype_1.3.0.tgz"; - path = fetchurl { - name = "domelementtype___domelementtype_1.3.0.tgz"; - url = "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz"; - sha1 = "b17aed82e8ab59e52dd9c19b1756e0fc187204c2"; - }; - } - - { - name = "domelementtype___domelementtype_1.1.3.tgz"; - path = fetchurl { - name = "domelementtype___domelementtype_1.1.3.tgz"; - url = "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz"; - sha1 = "bd28773e2642881aec51544924299c5cd822185b"; - }; - } - - { - name = "domhandler___domhandler_2.1.0.tgz"; - path = fetchurl { - name = "domhandler___domhandler_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz"; - sha1 = "d2646f5e57f6c3bab11cf6cb05d3c0acf7412594"; - }; - } - - { - name = "domutils___domutils_1.1.6.tgz"; - path = fetchurl { - name = "domutils___domutils_1.1.6.tgz"; - url = "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz"; - sha1 = "bddc3de099b9a2efacc51c623f28f416ecc57485"; - }; - } - - { - name = "domutils___domutils_1.5.1.tgz"; - path = fetchurl { - name = "domutils___domutils_1.5.1.tgz"; - url = "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz"; - sha1 = "dcd8488a26f563d61079e48c9f7b7e32373682cf"; - }; - } - - { - name = "ecc_jsbn___ecc_jsbn_0.1.1.tgz"; - path = fetchurl { - name = "ecc_jsbn___ecc_jsbn_0.1.1.tgz"; - url = "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz"; - sha1 = "0fc73a9ed5f0d53c38193398523ef7e543777505"; - }; - } - - { - name = "ee_first___ee_first_1.1.1.tgz"; - path = fetchurl { - name = "ee_first___ee_first_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz"; - sha1 = "590c61156b0ae2f4f0255732a158b266bc56b21d"; - }; - } - - { - name = "electron_to_chromium___electron_to_chromium_1.3.52.tgz"; - path = fetchurl { - name = "electron_to_chromium___electron_to_chromium_1.3.52.tgz"; - url = "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.52.tgz"; - sha1 = "d2d9f1270ba4a3b967b831c40ef71fb4d9ab5ce0"; - }; - } - - { - name = "elliptic___elliptic_6.4.0.tgz"; - path = fetchurl { - name = "elliptic___elliptic_6.4.0.tgz"; - url = "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz"; - sha1 = "cac9af8762c85836187003c8dfe193e5e2eae5df"; - }; - } - - { - name = "emojis_list___emojis_list_2.1.0.tgz"; - path = fetchurl { - name = "emojis_list___emojis_list_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz"; - sha1 = "4daa4d9db00f9819880c79fa457ae5b09a1fd389"; - }; - } - - { - name = "encodeurl___encodeurl_1.0.2.tgz"; - path = fetchurl { - name = "encodeurl___encodeurl_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz"; - sha1 = "ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"; - }; - } - - { - name = "enhanced_resolve___enhanced_resolve_3.4.1.tgz"; - path = fetchurl { - name = "enhanced_resolve___enhanced_resolve_3.4.1.tgz"; - url = "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz"; - sha1 = "0421e339fd71419b3da13d129b3979040230476e"; - }; - } - - { - name = "entities___entities_1.1.1.tgz"; - path = fetchurl { - name = "entities___entities_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz"; - sha1 = "6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"; - }; - } - - { - name = "errno___errno_0.1.7.tgz"; - path = fetchurl { - name = "errno___errno_0.1.7.tgz"; - url = "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz"; - sha1 = "4684d71779ad39af177e3f007996f7c67c852618"; - }; - } - - { - name = "error_ex___error_ex_1.3.2.tgz"; - path = fetchurl { - name = "error_ex___error_ex_1.3.2.tgz"; - url = "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz"; - sha1 = "b4ac40648107fdcdcfae242f428bea8a14d4f1bf"; - }; - } - - { - name = "error_stack_parser___error_stack_parser_2.0.2.tgz"; - path = fetchurl { - name = "error_stack_parser___error_stack_parser_2.0.2.tgz"; - url = "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.2.tgz"; - sha1 = "4ae8dbaa2bf90a8b450707b9149dcabca135520d"; - }; - } - - { - name = "es_abstract___es_abstract_1.12.0.tgz"; - path = fetchurl { - name = "es_abstract___es_abstract_1.12.0.tgz"; - url = "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz"; - sha1 = "9dbbdd27c6856f0001421ca18782d786bf8a6165"; - }; - } - - { - name = "es_to_primitive___es_to_primitive_1.1.1.tgz"; - path = fetchurl { - name = "es_to_primitive___es_to_primitive_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz"; - sha1 = "45355248a88979034b6792e19bb81f2b7975dd0d"; - }; - } - - { - name = "es5_ext___es5_ext_0.10.45.tgz"; - path = fetchurl { - name = "es5_ext___es5_ext_0.10.45.tgz"; - url = "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.45.tgz"; - sha1 = "0bfdf7b473da5919d5adf3bd25ceb754fccc3653"; - }; - } - - { - name = "es6_iterator___es6_iterator_2.0.3.tgz"; - path = fetchurl { - name = "es6_iterator___es6_iterator_2.0.3.tgz"; - url = "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz"; - sha1 = "a7de889141a05a94b0854403b2d0a0fbfa98f3b7"; - }; - } - - { - name = "es6_map___es6_map_0.1.5.tgz"; - path = fetchurl { - name = "es6_map___es6_map_0.1.5.tgz"; - url = "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz"; - sha1 = "9136e0503dcc06a301690f0bb14ff4e364e949f0"; - }; - } - - { - name = "es6_set___es6_set_0.1.5.tgz"; - path = fetchurl { - name = "es6_set___es6_set_0.1.5.tgz"; - url = "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz"; - sha1 = "d2b3ec5d4d800ced818db538d28974db0a73ccb1"; - }; - } - - { - name = "es6_symbol___es6_symbol_3.1.1.tgz"; - path = fetchurl { - name = "es6_symbol___es6_symbol_3.1.1.tgz"; - url = "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz"; - sha1 = "bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"; - }; - } - - { - name = "es6_weak_map___es6_weak_map_2.0.2.tgz"; - path = fetchurl { - name = "es6_weak_map___es6_weak_map_2.0.2.tgz"; - url = "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz"; - sha1 = "5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"; - }; - } - - { - name = "escape_html___escape_html_1.0.3.tgz"; - path = fetchurl { - name = "escape_html___escape_html_1.0.3.tgz"; - url = "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz"; - sha1 = "0258eae4d3d0c0974de1c169188ef0051d1d1988"; - }; - } - - { - name = "escape_string_regexp___escape_string_regexp_1.0.5.tgz"; - path = fetchurl { - name = "escape_string_regexp___escape_string_regexp_1.0.5.tgz"; - url = "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"; - sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"; - }; - } - - { - name = "escope___escope_3.6.0.tgz"; - path = fetchurl { - name = "escope___escope_3.6.0.tgz"; - url = "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz"; - sha1 = "e01975e812781a163a6dadfdd80398dc64c889c3"; - }; - } - - { - name = "esprima___esprima_2.7.3.tgz"; - path = fetchurl { - name = "esprima___esprima_2.7.3.tgz"; - url = "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz"; - sha1 = "96e3b70d5779f6ad49cd032673d1c312767ba581"; - }; - } - - { - name = "esrecurse___esrecurse_4.2.1.tgz"; - path = fetchurl { - name = "esrecurse___esrecurse_4.2.1.tgz"; - url = "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz"; - sha1 = "007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"; - }; - } - - { - name = "estraverse___estraverse_4.2.0.tgz"; - path = fetchurl { - name = "estraverse___estraverse_4.2.0.tgz"; - url = "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz"; - sha1 = "0dee3fed31fcd469618ce7342099fc1afa0bdb13"; - }; - } - - { - name = "esutils___esutils_2.0.2.tgz"; - path = fetchurl { - name = "esutils___esutils_2.0.2.tgz"; - url = "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz"; - sha1 = "0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"; - }; - } - - { - name = "etag___etag_1.8.1.tgz"; - path = fetchurl { - name = "etag___etag_1.8.1.tgz"; - url = "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz"; - sha1 = "41ae2eeb65efa62268aebfea83ac7d79299b0887"; - }; - } - - { - name = "event_emitter___event_emitter_0.3.5.tgz"; - path = fetchurl { - name = "event_emitter___event_emitter_0.3.5.tgz"; - url = "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz"; - sha1 = "df8c69eef1647923c7157b9ce83840610b02cc39"; - }; - } - - { - name = "eventemitter3___eventemitter3_3.1.0.tgz"; - path = fetchurl { - name = "eventemitter3___eventemitter3_3.1.0.tgz"; - url = "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz"; - sha1 = "090b4d6cdbd645ed10bf750d4b5407942d7ba163"; - }; - } - - { - name = "events___events_1.1.1.tgz"; - path = fetchurl { - name = "events___events_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz"; - sha1 = "9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"; - }; - } - - { - name = "eventsource___eventsource_0.1.6.tgz"; - path = fetchurl { - name = "eventsource___eventsource_0.1.6.tgz"; - url = "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz"; - sha1 = "0acede849ed7dd1ccc32c811bb11b944d4f29232"; - }; - } - - { - name = "evp_bytestokey___evp_bytestokey_1.0.3.tgz"; - path = fetchurl { - name = "evp_bytestokey___evp_bytestokey_1.0.3.tgz"; - url = "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz"; - sha1 = "7fcbdb198dc71959432efe13842684e0525acb02"; - }; - } - - { - name = "execa___execa_0.7.0.tgz"; - path = fetchurl { - name = "execa___execa_0.7.0.tgz"; - url = "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz"; - sha1 = "944becd34cc41ee32a63a9faf27ad5a65fc59777"; - }; - } - - { - name = "expand_brackets___expand_brackets_0.1.5.tgz"; - path = fetchurl { - name = "expand_brackets___expand_brackets_0.1.5.tgz"; - url = "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz"; - sha1 = "df07284e342a807cd733ac5af72411e581d1177b"; - }; - } - - { - name = "expand_brackets___expand_brackets_2.1.4.tgz"; - path = fetchurl { - name = "expand_brackets___expand_brackets_2.1.4.tgz"; - url = "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz"; - sha1 = "b77735e315ce30f6b6eff0f83b04151a22449622"; - }; - } - - { - name = "expand_range___expand_range_1.8.2.tgz"; - path = fetchurl { - name = "expand_range___expand_range_1.8.2.tgz"; - url = "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz"; - sha1 = "a299effd335fe2721ebae8e257ec79644fc85337"; - }; - } - - { - name = "express___express_4.16.3.tgz"; - path = fetchurl { - name = "express___express_4.16.3.tgz"; - url = "https://registry.yarnpkg.com/express/-/express-4.16.3.tgz"; - sha1 = "6af8a502350db3246ecc4becf6b5a34d22f7ed53"; - }; - } - - { - name = "extend_shallow___extend_shallow_2.0.1.tgz"; - path = fetchurl { - name = "extend_shallow___extend_shallow_2.0.1.tgz"; - url = "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz"; - sha1 = "51af7d614ad9a9f610ea1bafbb989d6b1c56890f"; - }; - } - - { - name = "extend_shallow___extend_shallow_3.0.2.tgz"; - path = fetchurl { - name = "extend_shallow___extend_shallow_3.0.2.tgz"; - url = "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz"; - sha1 = "26a71aaf073b39fb2127172746131c2704028db8"; - }; - } - - { - name = "extend___extend_3.0.2.tgz"; - path = fetchurl { - name = "extend___extend_3.0.2.tgz"; - url = "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz"; - sha1 = "f8b1136b4071fbd8eb140aff858b1019ec2915fa"; - }; - } - - { - name = "extglob___extglob_0.3.2.tgz"; - path = fetchurl { - name = "extglob___extglob_0.3.2.tgz"; - url = "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz"; - sha1 = "2e18ff3d2f49ab2765cec9023f011daa8d8349a1"; - }; - } - - { - name = "extglob___extglob_2.0.4.tgz"; - path = fetchurl { - name = "extglob___extglob_2.0.4.tgz"; - url = "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz"; - sha1 = "ad00fe4dc612a9232e8718711dc5cb5ab0285543"; - }; - } - - { - name = "extract_text_webpack_plugin___extract_text_webpack_plugin_3.0.2.tgz"; - path = fetchurl { - name = "extract_text_webpack_plugin___extract_text_webpack_plugin_3.0.2.tgz"; - url = "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz"; - sha1 = "5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7"; - }; - } - - { - name = "extsprintf___extsprintf_1.3.0.tgz"; - path = fetchurl { - name = "extsprintf___extsprintf_1.3.0.tgz"; - url = "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz"; - sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05"; - }; - } - - { - name = "extsprintf___extsprintf_1.4.0.tgz"; - path = fetchurl { - name = "extsprintf___extsprintf_1.4.0.tgz"; - url = "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz"; - sha1 = "e2689f8f356fad62cca65a3a91c5df5f9551692f"; - }; - } - - { - name = "fast_deep_equal___fast_deep_equal_1.1.0.tgz"; - path = fetchurl { - name = "fast_deep_equal___fast_deep_equal_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz"; - sha1 = "c053477817c86b51daa853c81e059b733d023614"; - }; - } - - { - name = "fast_deep_equal___fast_deep_equal_2.0.1.tgz"; - path = fetchurl { - name = "fast_deep_equal___fast_deep_equal_2.0.1.tgz"; - url = "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz"; - sha1 = "7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"; - }; - } - - { - name = "fast_json_stable_stringify___fast_json_stable_stringify_2.0.0.tgz"; - path = fetchurl { - name = "fast_json_stable_stringify___fast_json_stable_stringify_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz"; - sha1 = "d5142c0caee6b1189f87d3a76111064f86c8bbf2"; - }; - } - - { - name = "fast_levenshtein___fast_levenshtein_2.0.6.tgz"; - path = fetchurl { - name = "fast_levenshtein___fast_levenshtein_2.0.6.tgz"; - url = "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"; - sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917"; - }; - } - - { - name = "fastparse___fastparse_1.1.1.tgz"; - path = fetchurl { - name = "fastparse___fastparse_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz"; - sha1 = "d1e2643b38a94d7583b479060e6c4affc94071f8"; - }; - } - - { - name = "faye_websocket___faye_websocket_0.10.0.tgz"; - path = fetchurl { - name = "faye_websocket___faye_websocket_0.10.0.tgz"; - url = "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz"; - sha1 = "4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"; - }; - } - - { - name = "faye_websocket___faye_websocket_0.11.1.tgz"; - path = fetchurl { - name = "faye_websocket___faye_websocket_0.11.1.tgz"; - url = "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz"; - sha1 = "f0efe18c4f56e4f40afc7e06c719fd5ee6188f38"; - }; - } - - { - name = "file_loader___file_loader_0.10.1.tgz"; - path = fetchurl { - name = "file_loader___file_loader_0.10.1.tgz"; - url = "https://registry.yarnpkg.com/file-loader/-/file-loader-0.10.1.tgz"; - sha1 = "815034119891fc6441fb5a64c11bc93c22ddd842"; - }; - } - - { - name = "filename_regex___filename_regex_2.0.1.tgz"; - path = fetchurl { - name = "filename_regex___filename_regex_2.0.1.tgz"; - url = "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz"; - sha1 = "c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"; - }; - } - - { - name = "fill_range___fill_range_2.2.4.tgz"; - path = fetchurl { - name = "fill_range___fill_range_2.2.4.tgz"; - url = "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz"; - sha1 = "eb1e773abb056dcd8df2bfdf6af59b8b3a936565"; - }; - } - - { - name = "fill_range___fill_range_4.0.0.tgz"; - path = fetchurl { - name = "fill_range___fill_range_4.0.0.tgz"; - url = "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz"; - sha1 = "d544811d428f98eb06a63dc402d2403c328c38f7"; - }; - } - - { - name = "finalhandler___finalhandler_1.1.1.tgz"; - path = fetchurl { - name = "finalhandler___finalhandler_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz"; - sha1 = "eebf4ed840079c83f4249038c9d703008301b105"; - }; - } - - { - name = "find_cache_dir___find_cache_dir_1.0.0.tgz"; - path = fetchurl { - name = "find_cache_dir___find_cache_dir_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz"; - sha1 = "9288e3e9e3cc3748717d39eade17cf71fc30ee6f"; - }; - } - - { - name = "find_up___find_up_1.1.2.tgz"; - path = fetchurl { - name = "find_up___find_up_1.1.2.tgz"; - url = "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz"; - sha1 = "6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"; - }; - } - - { - name = "find_up___find_up_2.1.0.tgz"; - path = fetchurl { - name = "find_up___find_up_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz"; - sha1 = "45d1b7e506c717ddd482775a2b77920a3c0c57a7"; - }; - } - - { - name = "flatten___flatten_1.0.2.tgz"; - path = fetchurl { - name = "flatten___flatten_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz"; - sha1 = "dae46a9d78fbe25292258cc1e780a41d95c03782"; - }; - } - - { - name = "follow_redirects___follow_redirects_1.5.1.tgz"; - path = fetchurl { - name = "follow_redirects___follow_redirects_1.5.1.tgz"; - url = "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.1.tgz"; - sha1 = "67a8f14f5a1f67f962c2c46469c79eaec0a90291"; - }; - } - - { - name = "for_in___for_in_0.1.8.tgz"; - path = fetchurl { - name = "for_in___for_in_0.1.8.tgz"; - url = "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz"; - sha1 = "d8773908e31256109952b1fdb9b3fa867d2775e1"; - }; - } - - { - name = "for_in___for_in_1.0.2.tgz"; - path = fetchurl { - name = "for_in___for_in_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz"; - sha1 = "81068d295a8142ec0ac726c6e2200c30fb6d5e80"; - }; - } - - { - name = "for_own___for_own_0.1.5.tgz"; - path = fetchurl { - name = "for_own___for_own_0.1.5.tgz"; - url = "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz"; - sha1 = "5265c681a4f294dabbf17c9509b6763aa84510ce"; - }; - } - - { - name = "for_own___for_own_1.0.0.tgz"; - path = fetchurl { - name = "for_own___for_own_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz"; - sha1 = "c63332f415cedc4b04dbfe70cf836494c53cb44b"; - }; - } - - { - name = "foreach___foreach_2.0.5.tgz"; - path = fetchurl { - name = "foreach___foreach_2.0.5.tgz"; - url = "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz"; - sha1 = "0bee005018aeb260d0a3af3ae658dd0136ec1b99"; - }; - } - - { - name = "forever_agent___forever_agent_0.6.1.tgz"; - path = fetchurl { - name = "forever_agent___forever_agent_0.6.1.tgz"; - url = "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz"; - sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"; - }; - } - - { - name = "form_data___form_data_2.1.4.tgz"; - path = fetchurl { - name = "form_data___form_data_2.1.4.tgz"; - url = "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz"; - sha1 = "33c183acf193276ecaa98143a69e94bfee1750d1"; - }; - } - - { - name = "form_data___form_data_2.3.2.tgz"; - path = fetchurl { - name = "form_data___form_data_2.3.2.tgz"; - url = "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz"; - sha1 = "4970498be604c20c005d4f5c23aecd21d6b49099"; - }; - } - - { - name = "forwarded___forwarded_0.1.2.tgz"; - path = fetchurl { - name = "forwarded___forwarded_0.1.2.tgz"; - url = "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz"; - sha1 = "98c23dab1175657b8c0573e8ceccd91b0ff18c84"; - }; - } - - { - name = "fragment_cache___fragment_cache_0.2.1.tgz"; - path = fetchurl { - name = "fragment_cache___fragment_cache_0.2.1.tgz"; - url = "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz"; - sha1 = "4290fad27f13e89be7f33799c6bc5a0abfff0d19"; - }; - } - - { - name = "fresh___fresh_0.5.2.tgz"; - path = fetchurl { - name = "fresh___fresh_0.5.2.tgz"; - url = "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz"; - sha1 = "3d8cadd90d976569fa835ab1f8e4b23a105605a7"; - }; - } - - { - name = "friendly_errors_webpack_plugin___friendly_errors_webpack_plugin_1.7.0.tgz"; - path = fetchurl { - name = "friendly_errors_webpack_plugin___friendly_errors_webpack_plugin_1.7.0.tgz"; - url = "https://registry.yarnpkg.com/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0.tgz"; - sha1 = "efc86cbb816224565861a1be7a9d84d0aafea136"; - }; - } - - { - name = "fs_extra___fs_extra_2.1.2.tgz"; - path = fetchurl { - name = "fs_extra___fs_extra_2.1.2.tgz"; - url = "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz"; - sha1 = "046c70163cef9aad46b0e4a7fa467fb22d71de35"; - }; - } - - { - name = "fs_minipass___fs_minipass_1.2.5.tgz"; - path = fetchurl { - name = "fs_minipass___fs_minipass_1.2.5.tgz"; - url = "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz"; - sha1 = "06c277218454ec288df77ada54a03b8702aacb9d"; - }; - } - - { - name = "fs.realpath___fs.realpath_1.0.0.tgz"; - path = fetchurl { - name = "fs.realpath___fs.realpath_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz"; - sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f"; - }; - } - - { - name = "fsevents___fsevents_1.2.4.tgz"; - path = fetchurl { - name = "fsevents___fsevents_1.2.4.tgz"; - url = "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz"; - sha1 = "f41dcb1af2582af3692da36fc55cbd8e1041c426"; - }; - } - - { - name = "fstream___fstream_1.0.11.tgz"; - path = fetchurl { - name = "fstream___fstream_1.0.11.tgz"; - url = "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz"; - sha1 = "5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"; - }; - } - - { - name = "function_bind___function_bind_1.1.1.tgz"; - path = fetchurl { - name = "function_bind___function_bind_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz"; - sha1 = "a56899d3ea3c9bab874bb9773b7c5ede92f4895d"; - }; - } - - { - name = "gauge___gauge_2.7.4.tgz"; - path = fetchurl { - name = "gauge___gauge_2.7.4.tgz"; - url = "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz"; - sha1 = "2c03405c7538c39d7eb37b317022e325fb018bf7"; - }; - } - - { - name = "gaze___gaze_1.1.3.tgz"; - path = fetchurl { - name = "gaze___gaze_1.1.3.tgz"; - url = "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz"; - sha1 = "c441733e13b927ac8c0ff0b4c3b033f28812924a"; - }; - } - - { - name = "get_caller_file___get_caller_file_1.0.3.tgz"; - path = fetchurl { - name = "get_caller_file___get_caller_file_1.0.3.tgz"; - url = "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz"; - sha1 = "f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"; - }; - } - - { - name = "get_stdin___get_stdin_4.0.1.tgz"; - path = fetchurl { - name = "get_stdin___get_stdin_4.0.1.tgz"; - url = "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz"; - sha1 = "b968c6b0a04384324902e8bf1a5df32579a450fe"; - }; - } - - { - name = "get_stream___get_stream_3.0.0.tgz"; - path = fetchurl { - name = "get_stream___get_stream_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz"; - sha1 = "8e943d1358dc37555054ecbe2edb05aa174ede14"; - }; - } - - { - name = "get_value___get_value_2.0.6.tgz"; - path = fetchurl { - name = "get_value___get_value_2.0.6.tgz"; - url = "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz"; - sha1 = "dc15ca1c672387ca76bd37ac0a395ba2042a2c28"; - }; - } - - { - name = "getpass___getpass_0.1.7.tgz"; - path = fetchurl { - name = "getpass___getpass_0.1.7.tgz"; - url = "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz"; - sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa"; - }; - } - - { - name = "glob_base___glob_base_0.3.0.tgz"; - path = fetchurl { - name = "glob_base___glob_base_0.3.0.tgz"; - url = "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz"; - sha1 = "dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"; - }; - } - - { - name = "glob_parent___glob_parent_2.0.0.tgz"; - path = fetchurl { - name = "glob_parent___glob_parent_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz"; - sha1 = "81383d72db054fcccf5336daa902f182f6edbb28"; - }; - } - - { - name = "glob_parent___glob_parent_3.1.0.tgz"; - path = fetchurl { - name = "glob_parent___glob_parent_3.1.0.tgz"; - url = "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz"; - sha1 = "9e6af6299d8d3bd2bd40430832bd113df906c5ae"; - }; - } - - { - name = "glob___glob_6.0.4.tgz"; - path = fetchurl { - name = "glob___glob_6.0.4.tgz"; - url = "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz"; - sha1 = "0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"; - }; - } - - { - name = "glob___glob_7.1.2.tgz"; - path = fetchurl { - name = "glob___glob_7.1.2.tgz"; - url = "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz"; - sha1 = "c19c9df9a028702d678612384a6552404c636d15"; - }; - } - - { - name = "globals___globals_9.18.0.tgz"; - path = fetchurl { - name = "globals___globals_9.18.0.tgz"; - url = "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz"; - sha1 = "aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"; - }; - } - - { - name = "globby___globby_6.1.0.tgz"; - path = fetchurl { - name = "globby___globby_6.1.0.tgz"; - url = "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz"; - sha1 = "f5a6d70e8395e21c858fb0489d64df02424d506c"; - }; - } - - { - name = "globule___globule_1.2.1.tgz"; - path = fetchurl { - name = "globule___globule_1.2.1.tgz"; - url = "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz"; - sha1 = "5dffb1b191f22d20797a9369b49eab4e9839696d"; - }; - } - - { - name = "graceful_fs___graceful_fs_4.1.11.tgz"; - path = fetchurl { - name = "graceful_fs___graceful_fs_4.1.11.tgz"; - url = "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz"; - sha1 = "0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"; - }; - } - - { - name = "handle_thing___handle_thing_1.2.5.tgz"; - path = fetchurl { - name = "handle_thing___handle_thing_1.2.5.tgz"; - url = "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz"; - sha1 = "fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4"; - }; - } - - { - name = "har_schema___har_schema_1.0.5.tgz"; - path = fetchurl { - name = "har_schema___har_schema_1.0.5.tgz"; - url = "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz"; - sha1 = "d263135f43307c02c602afc8fe95970c0151369e"; - }; - } - - { - name = "har_schema___har_schema_2.0.0.tgz"; - path = fetchurl { - name = "har_schema___har_schema_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz"; - sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92"; - }; - } - - { - name = "har_validator___har_validator_4.2.1.tgz"; - path = fetchurl { - name = "har_validator___har_validator_4.2.1.tgz"; - url = "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz"; - sha1 = "33481d0f1bbff600dd203d75812a6a5fba002e2a"; - }; - } - - { - name = "har_validator___har_validator_5.0.3.tgz"; - path = fetchurl { - name = "har_validator___har_validator_5.0.3.tgz"; - url = "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz"; - sha1 = "ba402c266194f15956ef15e0fcf242993f6a7dfd"; - }; - } - - { - name = "has_ansi___has_ansi_2.0.0.tgz"; - path = fetchurl { - name = "has_ansi___has_ansi_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz"; - sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91"; - }; - } - - { - name = "has_flag___has_flag_1.0.0.tgz"; - path = fetchurl { - name = "has_flag___has_flag_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz"; - sha1 = "9d9e793165ce017a00f00418c43f942a7b1d11fa"; - }; - } - - { - name = "has_flag___has_flag_2.0.0.tgz"; - path = fetchurl { - name = "has_flag___has_flag_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz"; - sha1 = "e8207af1cc7b30d446cc70b734b5e8be18f88d51"; - }; - } - - { - name = "has_flag___has_flag_3.0.0.tgz"; - path = fetchurl { - name = "has_flag___has_flag_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz"; - sha1 = "b5d454dc2199ae225699f3467e5a07f3b955bafd"; - }; - } - - { - name = "has_unicode___has_unicode_2.0.1.tgz"; - path = fetchurl { - name = "has_unicode___has_unicode_2.0.1.tgz"; - url = "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz"; - sha1 = "e0e6fe6a28cf51138855e086d1691e771de2a8b9"; - }; - } - - { - name = "has_value___has_value_0.3.1.tgz"; - path = fetchurl { - name = "has_value___has_value_0.3.1.tgz"; - url = "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz"; - sha1 = "7b1f58bada62ca827ec0a2078025654845995e1f"; - }; - } - - { - name = "has_value___has_value_1.0.0.tgz"; - path = fetchurl { - name = "has_value___has_value_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz"; - sha1 = "18b281da585b1c5c51def24c930ed29a0be6b177"; - }; - } - - { - name = "has_values___has_values_0.1.4.tgz"; - path = fetchurl { - name = "has_values___has_values_0.1.4.tgz"; - url = "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz"; - sha1 = "6d61de95d91dfca9b9a02089ad384bff8f62b771"; - }; - } - - { - name = "has_values___has_values_1.0.0.tgz"; - path = fetchurl { - name = "has_values___has_values_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz"; - sha1 = "95b0b63fec2146619a6fe57fe75628d5a39efe4f"; - }; - } - - { - name = "has___has_1.0.3.tgz"; - path = fetchurl { - name = "has___has_1.0.3.tgz"; - url = "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz"; - sha1 = "722d7cbfc1f6aa8241f16dd814e011e1f41e8796"; - }; - } - - { - name = "hash_base___hash_base_3.0.4.tgz"; - path = fetchurl { - name = "hash_base___hash_base_3.0.4.tgz"; - url = "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz"; - sha1 = "5fc8686847ecd73499403319a6b0a3f3f6ae4918"; - }; - } - - { - name = "hash.js___hash.js_1.1.5.tgz"; - path = fetchurl { - name = "hash.js___hash.js_1.1.5.tgz"; - url = "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz"; - sha1 = "e38ab4b85dfb1e0c40fe9265c0e9b54854c23812"; - }; - } - - { - name = "hawk___hawk_3.1.3.tgz"; - path = fetchurl { - name = "hawk___hawk_3.1.3.tgz"; - url = "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz"; - sha1 = "078444bd7c1640b0fe540d2c9b73d59678e8e1c4"; - }; - } - - { - name = "hmac_drbg___hmac_drbg_1.0.1.tgz"; - path = fetchurl { - name = "hmac_drbg___hmac_drbg_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz"; - sha1 = "d2745701025a6c775a6c545793ed502fc0c649a1"; - }; - } - - { - name = "hoek___hoek_2.16.3.tgz"; - path = fetchurl { - name = "hoek___hoek_2.16.3.tgz"; - url = "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz"; - sha1 = "20bb7403d3cea398e91dc4710a8ff1b8274a25ed"; - }; - } - - { - name = "home_or_tmp___home_or_tmp_2.0.0.tgz"; - path = fetchurl { - name = "home_or_tmp___home_or_tmp_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz"; - sha1 = "e36c3f2d2cae7d746a857e38d18d5f32a7882db8"; - }; - } - - { - name = "hosted_git_info___hosted_git_info_2.7.1.tgz"; - path = fetchurl { - name = "hosted_git_info___hosted_git_info_2.7.1.tgz"; - url = "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz"; - sha1 = "97f236977bd6e125408930ff6de3eec6281ec047"; - }; - } - - { - name = "hpack.js___hpack.js_2.1.6.tgz"; - path = fetchurl { - name = "hpack.js___hpack.js_2.1.6.tgz"; - url = "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz"; - sha1 = "87774c0949e513f42e84575b3c45681fade2a0b2"; - }; - } - - { - name = "html_comment_regex___html_comment_regex_1.1.1.tgz"; - path = fetchurl { - name = "html_comment_regex___html_comment_regex_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz"; - sha1 = "668b93776eaae55ebde8f3ad464b307a4963625e"; - }; - } - - { - name = "html_entities___html_entities_1.2.1.tgz"; - path = fetchurl { - name = "html_entities___html_entities_1.2.1.tgz"; - url = "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz"; - sha1 = "0df29351f0721163515dfb9e5543e5f6eed5162f"; - }; - } - - { - name = "htmlparser2___htmlparser2_3.3.0.tgz"; - path = fetchurl { - name = "htmlparser2___htmlparser2_3.3.0.tgz"; - url = "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz"; - sha1 = "cc70d05a59f6542e43f0e685c982e14c924a9efe"; - }; - } - - { - name = "http_deceiver___http_deceiver_1.2.7.tgz"; - path = fetchurl { - name = "http_deceiver___http_deceiver_1.2.7.tgz"; - url = "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz"; - sha1 = "fa7168944ab9a519d337cb0bec7284dc3e723d87"; - }; - } - - { - name = "http_errors___http_errors_1.6.2.tgz"; - path = fetchurl { - name = "http_errors___http_errors_1.6.2.tgz"; - url = "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz"; - sha1 = "0a002cc85707192a7e7946ceedc11155f60ec736"; - }; - } - - { - name = "http_errors___http_errors_1.6.3.tgz"; - path = fetchurl { - name = "http_errors___http_errors_1.6.3.tgz"; - url = "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz"; - sha1 = "8b55680bb4be283a0b5bf4ea2e38580be1d9320d"; - }; - } - - { - name = "http_parser_js___http_parser_js_0.4.13.tgz"; - path = fetchurl { - name = "http_parser_js___http_parser_js_0.4.13.tgz"; - url = "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.13.tgz"; - sha1 = "3bd6d6fde6e3172c9334c3b33b6c193d80fe1137"; - }; - } - - { - name = "http_proxy_middleware___http_proxy_middleware_0.17.4.tgz"; - path = fetchurl { - name = "http_proxy_middleware___http_proxy_middleware_0.17.4.tgz"; - url = "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz"; - sha1 = "642e8848851d66f09d4f124912846dbaeb41b833"; - }; - } - - { - name = "http_proxy___http_proxy_1.17.0.tgz"; - path = fetchurl { - name = "http_proxy___http_proxy_1.17.0.tgz"; - url = "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz"; - sha1 = "7ad38494658f84605e2f6db4436df410f4e5be9a"; - }; - } - - { - name = "http_signature___http_signature_1.1.1.tgz"; - path = fetchurl { - name = "http_signature___http_signature_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz"; - sha1 = "df72e267066cd0ac67fb76adf8e134a8fbcf91bf"; - }; - } - - { - name = "http_signature___http_signature_1.2.0.tgz"; - path = fetchurl { - name = "http_signature___http_signature_1.2.0.tgz"; - url = "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz"; - sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1"; - }; - } - - { - name = "https_browserify___https_browserify_1.0.0.tgz"; - path = fetchurl { - name = "https_browserify___https_browserify_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz"; - sha1 = "ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"; - }; - } - - { - name = "iconv_lite___iconv_lite_0.4.19.tgz"; - path = fetchurl { - name = "iconv_lite___iconv_lite_0.4.19.tgz"; - url = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz"; - sha1 = "f7468f60135f5e5dad3399c0a81be9a1603a082b"; - }; - } - - { - name = "iconv_lite___iconv_lite_0.4.23.tgz"; - path = fetchurl { - name = "iconv_lite___iconv_lite_0.4.23.tgz"; - url = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz"; - sha1 = "297871f63be507adcfbfca715d0cd0eed84e9a63"; - }; - } - - { - name = "icss_replace_symbols___icss_replace_symbols_1.1.0.tgz"; - path = fetchurl { - name = "icss_replace_symbols___icss_replace_symbols_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz"; - sha1 = "06ea6f83679a7749e386cfe1fe812ae5db223ded"; - }; - } - - { - name = "ieee754___ieee754_1.1.12.tgz"; - path = fetchurl { - name = "ieee754___ieee754_1.1.12.tgz"; - url = "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz"; - sha1 = "50bf24e5b9c8bb98af4964c941cdb0918da7b60b"; - }; - } - - { - name = "ignore_walk___ignore_walk_3.0.1.tgz"; - path = fetchurl { - name = "ignore_walk___ignore_walk_3.0.1.tgz"; - url = "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz"; - sha1 = "a83e62e7d272ac0e3b551aaa82831a19b69f82f8"; - }; - } - - { - name = "import_local___import_local_1.0.0.tgz"; - path = fetchurl { - name = "import_local___import_local_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz"; - sha1 = "5e4ffdc03f4fe6c009c6729beb29631c2f8227bc"; - }; - } - - { - name = "in_publish___in_publish_2.0.0.tgz"; - path = fetchurl { - name = "in_publish___in_publish_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz"; - sha1 = "e20ff5e3a2afc2690320b6dc552682a9c7fadf51"; - }; - } - - { - name = "indent_string___indent_string_2.1.0.tgz"; - path = fetchurl { - name = "indent_string___indent_string_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz"; - sha1 = "8e2d48348742121b4a8218b7a137e9a52049dc80"; - }; - } - - { - name = "indexes_of___indexes_of_1.0.1.tgz"; - path = fetchurl { - name = "indexes_of___indexes_of_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz"; - sha1 = "f30f716c8e2bd346c7b67d3df3915566a7c05607"; - }; - } - - { - name = "indexof___indexof_0.0.1.tgz"; - path = fetchurl { - name = "indexof___indexof_0.0.1.tgz"; - url = "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz"; - sha1 = "82dc336d232b9062179d05ab3293a66059fd435d"; - }; - } - - { - name = "inflight___inflight_1.0.6.tgz"; - path = fetchurl { - name = "inflight___inflight_1.0.6.tgz"; - url = "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz"; - sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9"; - }; - } - - { - name = "inherits___inherits_2.0.3.tgz"; - path = fetchurl { - name = "inherits___inherits_2.0.3.tgz"; - url = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz"; - sha1 = "633c2c83e3da42a502f52466022480f4208261de"; - }; - } - - { - name = "inherits___inherits_2.0.1.tgz"; - path = fetchurl { - name = "inherits___inherits_2.0.1.tgz"; - url = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz"; - sha1 = "b17d08d326b4423e568eff719f91b0b1cbdf69f1"; - }; - } - - { - name = "ini___ini_1.3.5.tgz"; - path = fetchurl { - name = "ini___ini_1.3.5.tgz"; - url = "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz"; - sha1 = "eee25f56db1c9ec6085e0c22778083f596abf927"; - }; - } - - { - name = "internal_ip___internal_ip_1.2.0.tgz"; - path = fetchurl { - name = "internal_ip___internal_ip_1.2.0.tgz"; - url = "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz"; - sha1 = "ae9fbf93b984878785d50a8de1b356956058cf5c"; - }; - } - - { - name = "interpret___interpret_1.1.0.tgz"; - path = fetchurl { - name = "interpret___interpret_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz"; - sha1 = "7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"; - }; - } - - { - name = "invariant___invariant_2.2.4.tgz"; - path = fetchurl { - name = "invariant___invariant_2.2.4.tgz"; - url = "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz"; - sha1 = "610f3c92c9359ce1db616e538008d23ff35158e6"; - }; - } - - { - name = "invert_kv___invert_kv_1.0.0.tgz"; - path = fetchurl { - name = "invert_kv___invert_kv_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz"; - sha1 = "104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"; - }; - } - - { - name = "ip___ip_1.1.5.tgz"; - path = fetchurl { - name = "ip___ip_1.1.5.tgz"; - url = "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz"; - sha1 = "bdded70114290828c0a039e72ef25f5aaec4354a"; - }; - } - - { - name = "ipaddr.js___ipaddr.js_1.8.0.tgz"; - path = fetchurl { - name = "ipaddr.js___ipaddr.js_1.8.0.tgz"; - url = "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz"; - sha1 = "eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e"; - }; - } - - { - name = "is_absolute_url___is_absolute_url_2.1.0.tgz"; - path = fetchurl { - name = "is_absolute_url___is_absolute_url_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz"; - sha1 = "50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"; - }; - } - - { - name = "is_accessor_descriptor___is_accessor_descriptor_0.1.6.tgz"; - path = fetchurl { - name = "is_accessor_descriptor___is_accessor_descriptor_0.1.6.tgz"; - url = "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz"; - sha1 = "a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"; - }; - } - - { - name = "is_accessor_descriptor___is_accessor_descriptor_1.0.0.tgz"; - path = fetchurl { - name = "is_accessor_descriptor___is_accessor_descriptor_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz"; - sha1 = "169c2f6d3df1f992618072365c9b0ea1f6878656"; - }; - } - - { - name = "is_arrayish___is_arrayish_0.2.1.tgz"; - path = fetchurl { - name = "is_arrayish___is_arrayish_0.2.1.tgz"; - url = "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz"; - sha1 = "77c99840527aa8ecb1a8ba697b80645a7a926a9d"; - }; - } - - { - name = "is_binary_path___is_binary_path_1.0.1.tgz"; - path = fetchurl { - name = "is_binary_path___is_binary_path_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz"; - sha1 = "75f16642b480f187a711c814161fd3a4a7655898"; - }; - } - - { - name = "is_buffer___is_buffer_1.1.6.tgz"; - path = fetchurl { - name = "is_buffer___is_buffer_1.1.6.tgz"; - url = "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz"; - sha1 = "efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"; - }; - } - - { - name = "is_builtin_module___is_builtin_module_1.0.0.tgz"; - path = fetchurl { - name = "is_builtin_module___is_builtin_module_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz"; - sha1 = "540572d34f7ac3119f8f76c30cbc1b1e037affbe"; - }; - } - - { - name = "is_callable___is_callable_1.1.4.tgz"; - path = fetchurl { - name = "is_callable___is_callable_1.1.4.tgz"; - url = "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz"; - sha1 = "1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"; - }; - } - - { - name = "is_data_descriptor___is_data_descriptor_0.1.4.tgz"; - path = fetchurl { - name = "is_data_descriptor___is_data_descriptor_0.1.4.tgz"; - url = "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz"; - sha1 = "0b5ee648388e2c860282e793f1856fec3f301b56"; - }; - } - - { - name = "is_data_descriptor___is_data_descriptor_1.0.0.tgz"; - path = fetchurl { - name = "is_data_descriptor___is_data_descriptor_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz"; - sha1 = "d84876321d0e7add03990406abbbbd36ba9268c7"; - }; - } - - { - name = "is_date_object___is_date_object_1.0.1.tgz"; - path = fetchurl { - name = "is_date_object___is_date_object_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz"; - sha1 = "9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"; - }; - } - - { - name = "is_descriptor___is_descriptor_0.1.6.tgz"; - path = fetchurl { - name = "is_descriptor___is_descriptor_0.1.6.tgz"; - url = "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz"; - sha1 = "366d8240dde487ca51823b1ab9f07a10a78251ca"; - }; - } - - { - name = "is_descriptor___is_descriptor_1.0.2.tgz"; - path = fetchurl { - name = "is_descriptor___is_descriptor_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz"; - sha1 = "3b159746a66604b04f8c81524ba365c5f14d86ec"; - }; - } - - { - name = "is_dotfile___is_dotfile_1.0.3.tgz"; - path = fetchurl { - name = "is_dotfile___is_dotfile_1.0.3.tgz"; - url = "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz"; - sha1 = "a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"; - }; - } - - { - name = "is_equal_shallow___is_equal_shallow_0.1.3.tgz"; - path = fetchurl { - name = "is_equal_shallow___is_equal_shallow_0.1.3.tgz"; - url = "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz"; - sha1 = "2238098fc221de0bcfa5d9eac4c45d638aa1c534"; - }; - } - - { - name = "is_extendable___is_extendable_0.1.1.tgz"; - path = fetchurl { - name = "is_extendable___is_extendable_0.1.1.tgz"; - url = "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz"; - sha1 = "62b110e289a471418e3ec36a617d472e301dfc89"; - }; - } - - { - name = "is_extendable___is_extendable_1.0.1.tgz"; - path = fetchurl { - name = "is_extendable___is_extendable_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz"; - sha1 = "a7470f9e426733d81bd81e1155264e3a3507cab4"; - }; - } - - { - name = "is_extglob___is_extglob_1.0.0.tgz"; - path = fetchurl { - name = "is_extglob___is_extglob_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz"; - sha1 = "ac468177c4943405a092fc8f29760c6ffc6206c0"; - }; - } - - { - name = "is_extglob___is_extglob_2.1.1.tgz"; - path = fetchurl { - name = "is_extglob___is_extglob_2.1.1.tgz"; - url = "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz"; - sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2"; - }; - } - - { - name = "is_finite___is_finite_1.0.2.tgz"; - path = fetchurl { - name = "is_finite___is_finite_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz"; - sha1 = "cc6677695602be550ef11e8b4aa6305342b6d0aa"; - }; - } - - { - name = "is_fullwidth_code_point___is_fullwidth_code_point_1.0.0.tgz"; - path = fetchurl { - name = "is_fullwidth_code_point___is_fullwidth_code_point_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz"; - sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb"; - }; - } - - { - name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz"; - path = fetchurl { - name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz"; - sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f"; - }; - } - - { - name = "is_glob___is_glob_2.0.1.tgz"; - path = fetchurl { - name = "is_glob___is_glob_2.0.1.tgz"; - url = "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz"; - sha1 = "d096f926a3ded5600f3fdfd91198cb0888c2d863"; - }; - } - - { - name = "is_glob___is_glob_3.1.0.tgz"; - path = fetchurl { - name = "is_glob___is_glob_3.1.0.tgz"; - url = "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz"; - sha1 = "7ba5ae24217804ac70707b96922567486cc3e84a"; - }; - } - - { - name = "is_glob___is_glob_4.0.0.tgz"; - path = fetchurl { - name = "is_glob___is_glob_4.0.0.tgz"; - url = "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz"; - sha1 = "9521c76845cc2610a85203ddf080a958c2ffabc0"; - }; - } - - { - name = "is_number___is_number_2.1.0.tgz"; - path = fetchurl { - name = "is_number___is_number_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz"; - sha1 = "01fcbbb393463a548f2f466cce16dece49db908f"; - }; - } - - { - name = "is_number___is_number_3.0.0.tgz"; - path = fetchurl { - name = "is_number___is_number_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz"; - sha1 = "24fd6201a4782cf50561c810276afc7d12d71195"; - }; - } - - { - name = "is_number___is_number_4.0.0.tgz"; - path = fetchurl { - name = "is_number___is_number_4.0.0.tgz"; - url = "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz"; - sha1 = "0026e37f5454d73e356dfe6564699867c6a7f0ff"; - }; - } - - { - name = "is_path_cwd___is_path_cwd_1.0.0.tgz"; - path = fetchurl { - name = "is_path_cwd___is_path_cwd_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz"; - sha1 = "d225ec23132e89edd38fda767472e62e65f1106d"; - }; - } - - { - name = "is_path_in_cwd___is_path_in_cwd_1.0.1.tgz"; - path = fetchurl { - name = "is_path_in_cwd___is_path_in_cwd_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz"; - sha1 = "5ac48b345ef675339bd6c7a48a912110b241cf52"; - }; - } - - { - name = "is_path_inside___is_path_inside_1.0.1.tgz"; - path = fetchurl { - name = "is_path_inside___is_path_inside_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz"; - sha1 = "8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"; - }; - } - - { - name = "is_plain_obj___is_plain_obj_1.1.0.tgz"; - path = fetchurl { - name = "is_plain_obj___is_plain_obj_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz"; - sha1 = "71a50c8429dfca773c92a390a4a03b39fcd51d3e"; - }; - } - - { - name = "is_plain_object___is_plain_object_2.0.4.tgz"; - path = fetchurl { - name = "is_plain_object___is_plain_object_2.0.4.tgz"; - url = "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz"; - sha1 = "2c163b3fafb1b606d9d17928f05c2a1c38e07677"; - }; - } - - { - name = "is_posix_bracket___is_posix_bracket_0.1.1.tgz"; - path = fetchurl { - name = "is_posix_bracket___is_posix_bracket_0.1.1.tgz"; - url = "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz"; - sha1 = "3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"; - }; - } - - { - name = "is_primitive___is_primitive_2.0.0.tgz"; - path = fetchurl { - name = "is_primitive___is_primitive_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz"; - sha1 = "207bab91638499c07b2adf240a41a87210034575"; - }; - } - - { - name = "is_regex___is_regex_1.0.4.tgz"; - path = fetchurl { - name = "is_regex___is_regex_1.0.4.tgz"; - url = "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz"; - sha1 = "5517489b547091b0930e095654ced25ee97e9491"; - }; - } - - { - name = "is_stream___is_stream_1.1.0.tgz"; - path = fetchurl { - name = "is_stream___is_stream_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz"; - sha1 = "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"; - }; - } - - { - name = "is_svg___is_svg_2.1.0.tgz"; - path = fetchurl { - name = "is_svg___is_svg_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz"; - sha1 = "cf61090da0d9efbcab8722deba6f032208dbb0e9"; - }; - } - - { - name = "is_symbol___is_symbol_1.0.1.tgz"; - path = fetchurl { - name = "is_symbol___is_symbol_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz"; - sha1 = "3cc59f00025194b6ab2e38dbae6689256b660572"; - }; - } - - { - name = "is_typedarray___is_typedarray_1.0.0.tgz"; - path = fetchurl { - name = "is_typedarray___is_typedarray_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz"; - sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a"; - }; - } - - { - name = "is_utf8___is_utf8_0.2.1.tgz"; - path = fetchurl { - name = "is_utf8___is_utf8_0.2.1.tgz"; - url = "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz"; - sha1 = "4b0da1442104d1b336340e80797e865cf39f7d72"; - }; - } - - { - name = "is_windows___is_windows_1.0.2.tgz"; - path = fetchurl { - name = "is_windows___is_windows_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz"; - sha1 = "d1850eb9791ecd18e6182ce12a30f396634bb19d"; - }; - } - - { - name = "is_wsl___is_wsl_1.1.0.tgz"; - path = fetchurl { - name = "is_wsl___is_wsl_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz"; - sha1 = "1f16e4aa22b04d1336b66188a66af3c600c3a66d"; - }; - } - - { - name = "isarray___isarray_0.0.1.tgz"; - path = fetchurl { - name = "isarray___isarray_0.0.1.tgz"; - url = "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz"; - sha1 = "8a18acfca9a8f4177e09abfc6038939b05d1eedf"; - }; - } - - { - name = "isarray___isarray_1.0.0.tgz"; - path = fetchurl { - name = "isarray___isarray_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz"; - sha1 = "bb935d48582cba168c06834957a54a3e07124f11"; - }; - } - - { - name = "isexe___isexe_2.0.0.tgz"; - path = fetchurl { - name = "isexe___isexe_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz"; - sha1 = "e8fbf374dc556ff8947a10dcb0572d633f2cfa10"; - }; - } - - { - name = "isobject___isobject_2.1.0.tgz"; - path = fetchurl { - name = "isobject___isobject_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz"; - sha1 = "f065561096a3f1da2ef46272f815c840d87e0c89"; - }; - } - - { - name = "isobject___isobject_3.0.1.tgz"; - path = fetchurl { - name = "isobject___isobject_3.0.1.tgz"; - url = "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz"; - sha1 = "4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"; - }; - } - - { - name = "isstream___isstream_0.1.2.tgz"; - path = fetchurl { - name = "isstream___isstream_0.1.2.tgz"; - url = "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz"; - sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a"; - }; - } - - { - name = "jquery___jquery_3.3.1.tgz"; - path = fetchurl { - name = "jquery___jquery_3.3.1.tgz"; - url = "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz"; - sha1 = "958ce29e81c9790f31be7792df5d4d95fc57fbca"; - }; - } - - { - name = "js_base64___js_base64_2.4.8.tgz"; - path = fetchurl { - name = "js_base64___js_base64_2.4.8.tgz"; - url = "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.8.tgz"; - sha1 = "57a9b130888f956834aa40c5b165ba59c758f033"; - }; - } - - { - name = "js_tokens___js_tokens_4.0.0.tgz"; - path = fetchurl { - name = "js_tokens___js_tokens_4.0.0.tgz"; - url = "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz"; - sha1 = "19203fb59991df98e3a287050d4647cdeaf32499"; - }; - } - - { - name = "js_tokens___js_tokens_3.0.2.tgz"; - path = fetchurl { - name = "js_tokens___js_tokens_3.0.2.tgz"; - url = "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz"; - sha1 = "9866df395102130e38f7f996bceb65443209c25b"; - }; - } - - { - name = "js_yaml___js_yaml_3.7.0.tgz"; - path = fetchurl { - name = "js_yaml___js_yaml_3.7.0.tgz"; - url = "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz"; - sha1 = "5c967ddd837a9bfdca5f2de84253abe8a1c03b80"; - }; - } - - { - name = "jsbn___jsbn_0.1.1.tgz"; - path = fetchurl { - name = "jsbn___jsbn_0.1.1.tgz"; - url = "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz"; - sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"; - }; - } - - { - name = "jsesc___jsesc_1.3.0.tgz"; - path = fetchurl { - name = "jsesc___jsesc_1.3.0.tgz"; - url = "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz"; - sha1 = "46c3fec8c1892b12b0833db9bc7622176dbab34b"; - }; - } - - { - name = "jsesc___jsesc_0.5.0.tgz"; - path = fetchurl { - name = "jsesc___jsesc_0.5.0.tgz"; - url = "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz"; - sha1 = "e7dee66e35d6fc16f710fe91d5cf69f70f08911d"; - }; - } - - { - name = "json_loader___json_loader_0.5.7.tgz"; - path = fetchurl { - name = "json_loader___json_loader_0.5.7.tgz"; - url = "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz"; - sha1 = "dca14a70235ff82f0ac9a3abeb60d337a365185d"; - }; - } - - { - name = "json_schema_traverse___json_schema_traverse_0.3.1.tgz"; - path = fetchurl { - name = "json_schema_traverse___json_schema_traverse_0.3.1.tgz"; - url = "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz"; - sha1 = "349a6d44c53a51de89b40805c5d5e59b417d3340"; - }; - } - - { - name = "json_schema_traverse___json_schema_traverse_0.4.1.tgz"; - path = fetchurl { - name = "json_schema_traverse___json_schema_traverse_0.4.1.tgz"; - url = "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"; - sha1 = "69f6a87d9513ab8bb8fe63bdb0979c448e684660"; - }; - } - - { - name = "json_schema___json_schema_0.2.3.tgz"; - path = fetchurl { - name = "json_schema___json_schema_0.2.3.tgz"; - url = "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz"; - sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13"; - }; - } - - { - name = "json_stable_stringify___json_stable_stringify_1.0.1.tgz"; - path = fetchurl { - name = "json_stable_stringify___json_stable_stringify_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz"; - sha1 = "9a759d39c5f2ff503fd5300646ed445f88c4f9af"; - }; - } - - { - name = "json_stringify_safe___json_stringify_safe_5.0.1.tgz"; - path = fetchurl { - name = "json_stringify_safe___json_stringify_safe_5.0.1.tgz"; - url = "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz"; - sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"; - }; - } - - { - name = "json3___json3_3.3.2.tgz"; - path = fetchurl { - name = "json3___json3_3.3.2.tgz"; - url = "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz"; - sha1 = "3c0434743df93e2f5c42aee7b19bcb483575f4e1"; - }; - } - - { - name = "json5___json5_0.5.1.tgz"; - path = fetchurl { - name = "json5___json5_0.5.1.tgz"; - url = "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz"; - sha1 = "1eade7acc012034ad84e2396767ead9fa5495821"; - }; - } - - { - name = "jsonfile___jsonfile_2.4.0.tgz"; - path = fetchurl { - name = "jsonfile___jsonfile_2.4.0.tgz"; - url = "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz"; - sha1 = "3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"; - }; - } - - { - name = "jsonify___jsonify_0.0.0.tgz"; - path = fetchurl { - name = "jsonify___jsonify_0.0.0.tgz"; - url = "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz"; - sha1 = "2c74b6ee41d93ca51b7b5aaee8f503631d252a73"; - }; - } - - { - name = "jsprim___jsprim_1.4.1.tgz"; - path = fetchurl { - name = "jsprim___jsprim_1.4.1.tgz"; - url = "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz"; - sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"; - }; - } - - { - name = "killable___killable_1.0.0.tgz"; - path = fetchurl { - name = "killable___killable_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/killable/-/killable-1.0.0.tgz"; - sha1 = "da8b84bd47de5395878f95d64d02f2449fe05e6b"; - }; - } - - { - name = "kind_of___kind_of_3.2.2.tgz"; - path = fetchurl { - name = "kind_of___kind_of_3.2.2.tgz"; - url = "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz"; - sha1 = "31ea21a734bab9bbb0f32466d893aea51e4a3c64"; - }; - } - - { - name = "kind_of___kind_of_4.0.0.tgz"; - path = fetchurl { - name = "kind_of___kind_of_4.0.0.tgz"; - url = "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz"; - sha1 = "20813df3d712928b207378691a45066fae72dd57"; - }; - } - - { - name = "kind_of___kind_of_5.1.0.tgz"; - path = fetchurl { - name = "kind_of___kind_of_5.1.0.tgz"; - url = "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz"; - sha1 = "729c91e2d857b7a419a1f9aa65685c4c33f5845d"; - }; - } - - { - name = "kind_of___kind_of_6.0.2.tgz"; - path = fetchurl { - name = "kind_of___kind_of_6.0.2.tgz"; - url = "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz"; - sha1 = "01146b36a6218e64e58f3a8d66de5d7fc6f6d051"; - }; - } - - { - name = "lazy_cache___lazy_cache_1.0.4.tgz"; - path = fetchurl { - name = "lazy_cache___lazy_cache_1.0.4.tgz"; - url = "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz"; - sha1 = "a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"; - }; - } - - { - name = "lcid___lcid_1.0.0.tgz"; - path = fetchurl { - name = "lcid___lcid_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz"; - sha1 = "308accafa0bc483a3867b4b6f2b9506251d1b835"; - }; - } - - { - name = "load_json_file___load_json_file_1.1.0.tgz"; - path = fetchurl { - name = "load_json_file___load_json_file_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz"; - sha1 = "956905708d58b4bab4c2261b04f59f31c99374c0"; - }; - } - - { - name = "load_json_file___load_json_file_2.0.0.tgz"; - path = fetchurl { - name = "load_json_file___load_json_file_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz"; - sha1 = "7947e42149af80d696cbf797bcaabcfe1fe29ca8"; - }; - } - - { - name = "loader_runner___loader_runner_2.3.0.tgz"; - path = fetchurl { - name = "loader_runner___loader_runner_2.3.0.tgz"; - url = "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz"; - sha1 = "f482aea82d543e07921700d5a46ef26fdac6b8a2"; - }; - } - - { - name = "loader_utils___loader_utils_1.1.0.tgz"; - path = fetchurl { - name = "loader_utils___loader_utils_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz"; - sha1 = "c98aef488bcceda2ffb5e2de646d6a754429f5cd"; - }; - } - - { - name = "locate_path___locate_path_2.0.0.tgz"; - path = fetchurl { - name = "locate_path___locate_path_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz"; - sha1 = "2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"; - }; - } - - { - name = "lodash._baseassign___lodash._baseassign_3.2.0.tgz"; - path = fetchurl { - name = "lodash._baseassign___lodash._baseassign_3.2.0.tgz"; - url = "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz"; - sha1 = "8c38a099500f215ad09e59f1722fd0c52bfe0a4e"; - }; - } - - { - name = "lodash._basecopy___lodash._basecopy_3.0.1.tgz"; - path = fetchurl { - name = "lodash._basecopy___lodash._basecopy_3.0.1.tgz"; - url = "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz"; - sha1 = "8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"; - }; - } - - { - name = "lodash._bindcallback___lodash._bindcallback_3.0.1.tgz"; - path = fetchurl { - name = "lodash._bindcallback___lodash._bindcallback_3.0.1.tgz"; - url = "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz"; - sha1 = "e531c27644cf8b57a99e17ed95b35c748789392e"; - }; - } - - { - name = "lodash._createassigner___lodash._createassigner_3.1.1.tgz"; - path = fetchurl { - name = "lodash._createassigner___lodash._createassigner_3.1.1.tgz"; - url = "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz"; - sha1 = "838a5bae2fdaca63ac22dee8e19fa4e6d6970b11"; - }; - } - - { - name = "lodash._getnative___lodash._getnative_3.9.1.tgz"; - path = fetchurl { - name = "lodash._getnative___lodash._getnative_3.9.1.tgz"; - url = "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz"; - sha1 = "570bc7dede46d61cdcde687d65d3eecbaa3aaff5"; - }; - } - - { - name = "lodash._isiterateecall___lodash._isiterateecall_3.0.9.tgz"; - path = fetchurl { - name = "lodash._isiterateecall___lodash._isiterateecall_3.0.9.tgz"; - url = "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz"; - sha1 = "5203ad7ba425fae842460e696db9cf3e6aac057c"; - }; - } - - { - name = "lodash.assign___lodash.assign_3.2.0.tgz"; - path = fetchurl { - name = "lodash.assign___lodash.assign_3.2.0.tgz"; - url = "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz"; - sha1 = "3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa"; - }; - } - - { - name = "lodash.assign___lodash.assign_4.2.0.tgz"; - path = fetchurl { - name = "lodash.assign___lodash.assign_4.2.0.tgz"; - url = "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz"; - sha1 = "0d99f3ccd7a6d261d19bdaeb9245005d285808e7"; - }; - } - - { - name = "lodash.camelcase___lodash.camelcase_4.3.0.tgz"; - path = fetchurl { - name = "lodash.camelcase___lodash.camelcase_4.3.0.tgz"; - url = "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz"; - sha1 = "b28aa6288a2b9fc651035c7711f65ab6190331a6"; - }; - } - - { - name = "lodash.clonedeep___lodash.clonedeep_4.5.0.tgz"; - path = fetchurl { - name = "lodash.clonedeep___lodash.clonedeep_4.5.0.tgz"; - url = "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz"; - sha1 = "e23f3f9c4f8fbdde872529c1071857a086e5ccef"; - }; - } - - { - name = "lodash.debounce___lodash.debounce_4.0.8.tgz"; - path = fetchurl { - name = "lodash.debounce___lodash.debounce_4.0.8.tgz"; - url = "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz"; - sha1 = "82d79bff30a67c4005ffd5e2515300ad9ca4d7af"; - }; - } - - { - name = "lodash.defaults___lodash.defaults_3.1.2.tgz"; - path = fetchurl { - name = "lodash.defaults___lodash.defaults_3.1.2.tgz"; - url = "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-3.1.2.tgz"; - sha1 = "c7308b18dbf8bc9372d701a73493c61192bd2e2c"; - }; - } - - { - name = "lodash.defaults___lodash.defaults_4.2.0.tgz"; - path = fetchurl { - name = "lodash.defaults___lodash.defaults_4.2.0.tgz"; - url = "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz"; - sha1 = "d09178716ffea4dde9e5fb7b37f6f0802274580c"; - }; - } - - { - name = "lodash.isarguments___lodash.isarguments_3.1.0.tgz"; - path = fetchurl { - name = "lodash.isarguments___lodash.isarguments_3.1.0.tgz"; - url = "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz"; - sha1 = "2f573d85c6a24289ff00663b491c1d338ff3458a"; - }; - } - - { - name = "lodash.isarray___lodash.isarray_3.0.4.tgz"; - path = fetchurl { - name = "lodash.isarray___lodash.isarray_3.0.4.tgz"; - url = "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz"; - sha1 = "79e4eb88c36a8122af86f844aa9bcd851b5fbb55"; - }; - } - - { - name = "lodash.keys___lodash.keys_3.1.2.tgz"; - path = fetchurl { - name = "lodash.keys___lodash.keys_3.1.2.tgz"; - url = "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz"; - sha1 = "4dbc0472b156be50a0b286855d1bd0b0c656098a"; - }; - } - - { - name = "lodash.memoize___lodash.memoize_4.1.2.tgz"; - path = fetchurl { - name = "lodash.memoize___lodash.memoize_4.1.2.tgz"; - url = "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz"; - sha1 = "bcc6c49a42a2840ed997f323eada5ecd182e0bfe"; - }; - } - - { - name = "lodash.mergewith___lodash.mergewith_4.6.1.tgz"; - path = fetchurl { - name = "lodash.mergewith___lodash.mergewith_4.6.1.tgz"; - url = "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz"; - sha1 = "639057e726c3afbdb3e7d42741caa8d6e4335927"; - }; - } - - { - name = "lodash.restparam___lodash.restparam_3.6.1.tgz"; - path = fetchurl { - name = "lodash.restparam___lodash.restparam_3.6.1.tgz"; - url = "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz"; - sha1 = "936a4e309ef330a7645ed4145986c85ae5b20805"; - }; - } - - { - name = "lodash.tail___lodash.tail_4.1.1.tgz"; - path = fetchurl { - name = "lodash.tail___lodash.tail_4.1.1.tgz"; - url = "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz"; - sha1 = "d2333a36d9e7717c8ad2f7cacafec7c32b444664"; - }; - } - - { - name = "lodash.uniq___lodash.uniq_4.5.0.tgz"; - path = fetchurl { - name = "lodash.uniq___lodash.uniq_4.5.0.tgz"; - url = "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz"; - sha1 = "d0225373aeb652adc1bc82e4945339a842754773"; - }; - } - - { - name = "lodash___lodash_4.17.10.tgz"; - path = fetchurl { - name = "lodash___lodash_4.17.10.tgz"; - url = "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz"; - sha1 = "1b7793cf7259ea38fb3661d4d38b3260af8ae4e7"; - }; - } - - { - name = "loglevel___loglevel_1.6.1.tgz"; - path = fetchurl { - name = "loglevel___loglevel_1.6.1.tgz"; - url = "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz"; - sha1 = "e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa"; - }; - } - - { - name = "longest___longest_1.0.1.tgz"; - path = fetchurl { - name = "longest___longest_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz"; - sha1 = "30a0b2da38f73770e8294a0d22e6625ed77d0097"; - }; - } - - { - name = "loose_envify___loose_envify_1.4.0.tgz"; - path = fetchurl { - name = "loose_envify___loose_envify_1.4.0.tgz"; - url = "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz"; - sha1 = "71ee51fa7be4caec1a63839f7e682d8132d30caf"; - }; - } - - { - name = "loud_rejection___loud_rejection_1.6.0.tgz"; - path = fetchurl { - name = "loud_rejection___loud_rejection_1.6.0.tgz"; - url = "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz"; - sha1 = "5b46f80147edee578870f086d04821cf998e551f"; - }; - } - - { - name = "lru_cache___lru_cache_4.1.3.tgz"; - path = fetchurl { - name = "lru_cache___lru_cache_4.1.3.tgz"; - url = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz"; - sha1 = "a1175cf3496dfc8436c156c334b4955992bce69c"; - }; - } - - { - name = "make_dir___make_dir_1.3.0.tgz"; - path = fetchurl { - name = "make_dir___make_dir_1.3.0.tgz"; - url = "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz"; - sha1 = "79c1033b80515bd6d24ec9933e860ca75ee27f0c"; - }; - } - - { - name = "map_cache___map_cache_0.2.2.tgz"; - path = fetchurl { - name = "map_cache___map_cache_0.2.2.tgz"; - url = "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz"; - sha1 = "c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"; - }; - } - - { - name = "map_obj___map_obj_1.0.1.tgz"; - path = fetchurl { - name = "map_obj___map_obj_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz"; - sha1 = "d933ceb9205d82bdcf4886f6742bdc2b4dea146d"; - }; - } - - { - name = "map_visit___map_visit_1.0.0.tgz"; - path = fetchurl { - name = "map_visit___map_visit_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz"; - sha1 = "ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"; - }; - } - - { - name = "math_expression_evaluator___math_expression_evaluator_1.2.17.tgz"; - path = fetchurl { - name = "math_expression_evaluator___math_expression_evaluator_1.2.17.tgz"; - url = "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz"; - sha1 = "de819fdbcd84dccd8fae59c6aeb79615b9d266ac"; - }; - } - - { - name = "math_random___math_random_1.0.1.tgz"; - path = fetchurl { - name = "math_random___math_random_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz"; - sha1 = "8b3aac588b8a66e4975e3cdea67f7bb329601fac"; - }; - } - - { - name = "md5.js___md5.js_1.3.4.tgz"; - path = fetchurl { - name = "md5.js___md5.js_1.3.4.tgz"; - url = "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz"; - sha1 = "e9bdbde94a20a5ac18b04340fc5764d5b09d901d"; - }; - } - - { - name = "media_typer___media_typer_0.3.0.tgz"; - path = fetchurl { - name = "media_typer___media_typer_0.3.0.tgz"; - url = "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz"; - sha1 = "8710d7af0aa626f8fffa1ce00168545263255748"; - }; - } - - { - name = "mem___mem_1.1.0.tgz"; - path = fetchurl { - name = "mem___mem_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz"; - sha1 = "5edd52b485ca1d900fe64895505399a0dfa45f76"; - }; - } - - { - name = "memory_fs___memory_fs_0.4.1.tgz"; - path = fetchurl { - name = "memory_fs___memory_fs_0.4.1.tgz"; - url = "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz"; - sha1 = "3a9a20b8462523e447cfbc7e8bb80ed667bfc552"; - }; - } - - { - name = "meow___meow_3.7.0.tgz"; - path = fetchurl { - name = "meow___meow_3.7.0.tgz"; - url = "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz"; - sha1 = "72cb668b425228290abbfa856892587308a801fb"; - }; - } - - { - name = "merge_descriptors___merge_descriptors_1.0.1.tgz"; - path = fetchurl { - name = "merge_descriptors___merge_descriptors_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz"; - sha1 = "b00aaa556dd8b44568150ec9d1b953f3f90cbb61"; - }; - } - - { - name = "methods___methods_1.1.2.tgz"; - path = fetchurl { - name = "methods___methods_1.1.2.tgz"; - url = "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz"; - sha1 = "5529a4d67654134edcc5266656835b0f851afcee"; - }; - } - - { - name = "micromatch___micromatch_2.3.11.tgz"; - path = fetchurl { - name = "micromatch___micromatch_2.3.11.tgz"; - url = "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz"; - sha1 = "86677c97d1720b363431d04d0d15293bd38c1565"; - }; - } - - { - name = "micromatch___micromatch_3.1.10.tgz"; - path = fetchurl { - name = "micromatch___micromatch_3.1.10.tgz"; - url = "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz"; - sha1 = "70859bc95c9840952f359a068a3fc49f9ecfac23"; - }; - } - - { - name = "miller_rabin___miller_rabin_4.0.1.tgz"; - path = fetchurl { - name = "miller_rabin___miller_rabin_4.0.1.tgz"; - url = "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz"; - sha1 = "f080351c865b0dc562a8462966daa53543c78a4d"; - }; - } - - { - name = "mime_db___mime_db_1.35.0.tgz"; - path = fetchurl { - name = "mime_db___mime_db_1.35.0.tgz"; - url = "https://registry.yarnpkg.com/mime-db/-/mime-db-1.35.0.tgz"; - sha1 = "0569d657466491283709663ad379a99b90d9ab47"; - }; - } - - { - name = "mime_types___mime_types_2.1.19.tgz"; - path = fetchurl { - name = "mime_types___mime_types_2.1.19.tgz"; - url = "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.19.tgz"; - sha1 = "71e464537a7ef81c15f2db9d97e913fc0ff606f0"; - }; - } - - { - name = "mime___mime_1.4.1.tgz"; - path = fetchurl { - name = "mime___mime_1.4.1.tgz"; - url = "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz"; - sha1 = "121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"; - }; - } - - { - name = "mime___mime_1.6.0.tgz"; - path = fetchurl { - name = "mime___mime_1.6.0.tgz"; - url = "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz"; - sha1 = "32cd9e5c64553bd58d19a568af452acff04981b1"; - }; - } - - { - name = "mimic_fn___mimic_fn_1.2.0.tgz"; - path = fetchurl { - name = "mimic_fn___mimic_fn_1.2.0.tgz"; - url = "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz"; - sha1 = "820c86a39334640e99516928bd03fca88057d022"; - }; - } - - { - name = "minimalistic_assert___minimalistic_assert_1.0.1.tgz"; - path = fetchurl { - name = "minimalistic_assert___minimalistic_assert_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz"; - sha1 = "2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"; - }; - } - - { - name = "minimalistic_crypto_utils___minimalistic_crypto_utils_1.0.1.tgz"; - path = fetchurl { - name = "minimalistic_crypto_utils___minimalistic_crypto_utils_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz"; - sha1 = "f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"; - }; - } - - { - name = "minimatch___minimatch_3.0.4.tgz"; - path = fetchurl { - name = "minimatch___minimatch_3.0.4.tgz"; - url = "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz"; - sha1 = "5166e286457f03306064be5497e8dbb0c3d32083"; - }; - } - - { - name = "minimist___minimist_0.0.8.tgz"; - path = fetchurl { - name = "minimist___minimist_0.0.8.tgz"; - url = "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz"; - sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d"; - }; - } - - { - name = "minimist___minimist_1.2.0.tgz"; - path = fetchurl { - name = "minimist___minimist_1.2.0.tgz"; - url = "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz"; - sha1 = "a35008b20f41383eec1fb914f4cd5df79a264284"; - }; - } - - { - name = "minipass___minipass_2.3.3.tgz"; - path = fetchurl { - name = "minipass___minipass_2.3.3.tgz"; - url = "https://registry.yarnpkg.com/minipass/-/minipass-2.3.3.tgz"; - sha1 = "a7dcc8b7b833f5d368759cce544dccb55f50f233"; - }; - } - - { - name = "minizlib___minizlib_1.1.0.tgz"; - path = fetchurl { - name = "minizlib___minizlib_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz"; - sha1 = "11e13658ce46bc3a70a267aac58359d1e0c29ceb"; - }; - } - - { - name = "mixin_deep___mixin_deep_1.3.1.tgz"; - path = fetchurl { - name = "mixin_deep___mixin_deep_1.3.1.tgz"; - url = "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz"; - sha1 = "a49e7268dce1a0d9698e45326c5626df3543d0fe"; - }; - } - - { - name = "mixin_object___mixin_object_2.0.1.tgz"; - path = fetchurl { - name = "mixin_object___mixin_object_2.0.1.tgz"; - url = "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz"; - sha1 = "4fb949441dab182540f1fe035ba60e1947a5e57e"; - }; - } - - { - name = "mkdirp___mkdirp_0.5.1.tgz"; - path = fetchurl { - name = "mkdirp___mkdirp_0.5.1.tgz"; - url = "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz"; - sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903"; - }; - } - - { - name = "ms___ms_2.0.0.tgz"; - path = fetchurl { - name = "ms___ms_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz"; - sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8"; - }; - } - - { - name = "multicast_dns_service_types___multicast_dns_service_types_1.1.0.tgz"; - path = fetchurl { - name = "multicast_dns_service_types___multicast_dns_service_types_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz"; - sha1 = "899f11d9686e5e05cb91b35d5f0e63b773cfc901"; - }; - } - - { - name = "multicast_dns___multicast_dns_6.2.3.tgz"; - path = fetchurl { - name = "multicast_dns___multicast_dns_6.2.3.tgz"; - url = "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz"; - sha1 = "a0ec7bd9055c4282f790c3c82f4e28db3b31b229"; - }; - } - - { - name = "nan___nan_2.10.0.tgz"; - path = fetchurl { - name = "nan___nan_2.10.0.tgz"; - url = "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz"; - sha1 = "96d0cd610ebd58d4b4de9cc0c6828cda99c7548f"; - }; - } - - { - name = "nanomatch___nanomatch_1.2.13.tgz"; - path = fetchurl { - name = "nanomatch___nanomatch_1.2.13.tgz"; - url = "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz"; - sha1 = "b87a8aa4fc0de8fe6be88895b38983ff265bd119"; - }; - } - - { - name = "needle___needle_2.2.1.tgz"; - path = fetchurl { - name = "needle___needle_2.2.1.tgz"; - url = "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz"; - sha1 = "b5e325bd3aae8c2678902fa296f729455d1d3a7d"; - }; - } - - { - name = "negotiator___negotiator_0.6.1.tgz"; - path = fetchurl { - name = "negotiator___negotiator_0.6.1.tgz"; - url = "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz"; - sha1 = "2b327184e8992101177b28563fb5e7102acd0ca9"; - }; - } - - { - name = "neo_async___neo_async_2.5.1.tgz"; - path = fetchurl { - name = "neo_async___neo_async_2.5.1.tgz"; - url = "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.1.tgz"; - sha1 = "acb909e327b1e87ec9ef15f41b8a269512ad41ee"; - }; - } - - { - name = "next_tick___next_tick_1.0.0.tgz"; - path = fetchurl { - name = "next_tick___next_tick_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz"; - sha1 = "ca86d1fe8828169b0120208e3dc8424b9db8342c"; - }; - } - - { - name = "node_forge___node_forge_0.7.5.tgz"; - path = fetchurl { - name = "node_forge___node_forge_0.7.5.tgz"; - url = "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz"; - sha1 = "6c152c345ce11c52f465c2abd957e8639cd674df"; - }; - } - - { - name = "node_gyp___node_gyp_3.7.0.tgz"; - path = fetchurl { - name = "node_gyp___node_gyp_3.7.0.tgz"; - url = "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.7.0.tgz"; - sha1 = "789478e8f6c45e277aa014f3e28f958f286f9203"; - }; - } - - { - name = "node_libs_browser___node_libs_browser_2.1.0.tgz"; - path = fetchurl { - name = "node_libs_browser___node_libs_browser_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz"; - sha1 = "5f94263d404f6e44767d726901fff05478d600df"; - }; - } - - { - name = "node_pre_gyp___node_pre_gyp_0.10.3.tgz"; - path = fetchurl { - name = "node_pre_gyp___node_pre_gyp_0.10.3.tgz"; - url = "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz"; - sha1 = "3070040716afdc778747b61b6887bf78880b80fc"; - }; - } - - { - name = "node_sass___node_sass_4.9.2.tgz"; - path = fetchurl { - name = "node_sass___node_sass_4.9.2.tgz"; - url = "https://registry.yarnpkg.com/node-sass/-/node-sass-4.9.2.tgz"; - sha1 = "5e63fe6bd0f2ae3ac9d6c14ede8620e2b8bdb437"; - }; - } - - { - name = "nopt___nopt_3.0.6.tgz"; - path = fetchurl { - name = "nopt___nopt_3.0.6.tgz"; - url = "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz"; - sha1 = "c6465dbf08abcd4db359317f79ac68a646b28ff9"; - }; - } - - { - name = "nopt___nopt_4.0.1.tgz"; - path = fetchurl { - name = "nopt___nopt_4.0.1.tgz"; - url = "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz"; - sha1 = "d0d4685afd5415193c8c7505602d0d17cd64474d"; - }; - } - - { - name = "normalize_package_data___normalize_package_data_2.4.0.tgz"; - path = fetchurl { - name = "normalize_package_data___normalize_package_data_2.4.0.tgz"; - url = "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz"; - sha1 = "12f95a307d58352075a04907b84ac8be98ac012f"; - }; - } - - { - name = "normalize_path___normalize_path_2.1.1.tgz"; - path = fetchurl { - name = "normalize_path___normalize_path_2.1.1.tgz"; - url = "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz"; - sha1 = "1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"; - }; - } - - { - name = "normalize_range___normalize_range_0.1.2.tgz"; - path = fetchurl { - name = "normalize_range___normalize_range_0.1.2.tgz"; - url = "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz"; - sha1 = "2d10c06bdfd312ea9777695a4d28439456b75942"; - }; - } - - { - name = "normalize_url___normalize_url_1.9.1.tgz"; - path = fetchurl { - name = "normalize_url___normalize_url_1.9.1.tgz"; - url = "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz"; - sha1 = "2cc0d66b31ea23036458436e3620d85954c66c3c"; - }; - } - - { - name = "npm_bundled___npm_bundled_1.0.3.tgz"; - path = fetchurl { - name = "npm_bundled___npm_bundled_1.0.3.tgz"; - url = "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.3.tgz"; - sha1 = "7e71703d973af3370a9591bafe3a63aca0be2308"; - }; - } - - { - name = "npm_packlist___npm_packlist_1.1.11.tgz"; - path = fetchurl { - name = "npm_packlist___npm_packlist_1.1.11.tgz"; - url = "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz"; - sha1 = "84e8c683cbe7867d34b1d357d893ce29e28a02de"; - }; - } - - { - name = "npm_run_path___npm_run_path_2.0.2.tgz"; - path = fetchurl { - name = "npm_run_path___npm_run_path_2.0.2.tgz"; - url = "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz"; - sha1 = "35a9232dfa35d7067b4cb2ddf2357b1871536c5f"; - }; - } - - { - name = "npmlog___npmlog_4.1.2.tgz"; - path = fetchurl { - name = "npmlog___npmlog_4.1.2.tgz"; - url = "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz"; - sha1 = "08a7f2a8bf734604779a9efa4ad5cc717abb954b"; - }; - } - - { - name = "nth_check___nth_check_1.0.1.tgz"; - path = fetchurl { - name = "nth_check___nth_check_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz"; - sha1 = "9929acdf628fc2c41098deab82ac580cf149aae4"; - }; - } - - { - name = "num2fraction___num2fraction_1.2.2.tgz"; - path = fetchurl { - name = "num2fraction___num2fraction_1.2.2.tgz"; - url = "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz"; - sha1 = "6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"; - }; - } - - { - name = "number_is_nan___number_is_nan_1.0.1.tgz"; - path = fetchurl { - name = "number_is_nan___number_is_nan_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz"; - sha1 = "097b602b53422a522c1afb8790318336941a011d"; - }; - } - - { - name = "oauth_sign___oauth_sign_0.8.2.tgz"; - path = fetchurl { - name = "oauth_sign___oauth_sign_0.8.2.tgz"; - url = "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz"; - sha1 = "46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"; - }; - } - - { - name = "object_assign___object_assign_4.1.1.tgz"; - path = fetchurl { - name = "object_assign___object_assign_4.1.1.tgz"; - url = "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz"; - sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863"; - }; - } - - { - name = "object_copy___object_copy_0.1.0.tgz"; - path = fetchurl { - name = "object_copy___object_copy_0.1.0.tgz"; - url = "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz"; - sha1 = "7e7d858b781bd7c991a41ba975ed3812754e998c"; - }; - } - - { - name = "object_keys___object_keys_1.0.12.tgz"; - path = fetchurl { - name = "object_keys___object_keys_1.0.12.tgz"; - url = "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz"; - sha1 = "09c53855377575310cca62f55bb334abff7b3ed2"; - }; - } - - { - name = "object_path___object_path_0.9.2.tgz"; - path = fetchurl { - name = "object_path___object_path_0.9.2.tgz"; - url = "https://registry.yarnpkg.com/object-path/-/object-path-0.9.2.tgz"; - sha1 = "0fd9a74fc5fad1ae3968b586bda5c632bd6c05a5"; - }; - } - - { - name = "object_visit___object_visit_1.0.1.tgz"; - path = fetchurl { - name = "object_visit___object_visit_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz"; - sha1 = "f79c4493af0c5377b59fe39d395e41042dd045bb"; - }; - } - - { - name = "object.omit___object.omit_2.0.1.tgz"; - path = fetchurl { - name = "object.omit___object.omit_2.0.1.tgz"; - url = "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz"; - sha1 = "1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"; - }; - } - - { - name = "object.pick___object.pick_1.3.0.tgz"; - path = fetchurl { - name = "object.pick___object.pick_1.3.0.tgz"; - url = "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz"; - sha1 = "87a10ac4c1694bd2e1cbf53591a66141fb5dd747"; - }; - } - - { - name = "obuf___obuf_1.1.2.tgz"; - path = fetchurl { - name = "obuf___obuf_1.1.2.tgz"; - url = "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz"; - sha1 = "09bea3343d41859ebd446292d11c9d4db619084e"; - }; - } - - { - name = "on_finished___on_finished_2.3.0.tgz"; - path = fetchurl { - name = "on_finished___on_finished_2.3.0.tgz"; - url = "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz"; - sha1 = "20f1336481b083cd75337992a16971aa2d906947"; - }; - } - - { - name = "on_headers___on_headers_1.0.1.tgz"; - path = fetchurl { - name = "on_headers___on_headers_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz"; - sha1 = "928f5d0f470d49342651ea6794b0857c100693f7"; - }; - } - - { - name = "once___once_1.4.0.tgz"; - path = fetchurl { - name = "once___once_1.4.0.tgz"; - url = "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz"; - sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1"; - }; - } - - { - name = "open_iconic___open_iconic_1.1.1.tgz"; - path = fetchurl { - name = "open_iconic___open_iconic_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/open-iconic/-/open-iconic-1.1.1.tgz"; - sha1 = "9dcfc8c7cd3c61cdb4a236b1a347894c97adc0c6"; - }; - } - - { - name = "opn___opn_5.3.0.tgz"; - path = fetchurl { - name = "opn___opn_5.3.0.tgz"; - url = "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz"; - sha1 = "64871565c863875f052cfdf53d3e3cb5adb53b1c"; - }; - } - - { - name = "original___original_1.0.1.tgz"; - path = fetchurl { - name = "original___original_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/original/-/original-1.0.1.tgz"; - sha1 = "b0a53ff42ba997a8c9cd1fb5daaeb42b9d693190"; - }; - } - - { - name = "os_browserify___os_browserify_0.3.0.tgz"; - path = fetchurl { - name = "os_browserify___os_browserify_0.3.0.tgz"; - url = "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz"; - sha1 = "854373c7f5c2315914fc9bfc6bd8238fdda1ec27"; - }; - } - - { - name = "os_homedir___os_homedir_1.0.2.tgz"; - path = fetchurl { - name = "os_homedir___os_homedir_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz"; - sha1 = "ffbc4988336e0e833de0c168c7ef152121aa7fb3"; - }; - } - - { - name = "os_locale___os_locale_1.4.0.tgz"; - path = fetchurl { - name = "os_locale___os_locale_1.4.0.tgz"; - url = "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz"; - sha1 = "20f9f17ae29ed345e8bde583b13d2009803c14d9"; - }; - } - - { - name = "os_locale___os_locale_2.1.0.tgz"; - path = fetchurl { - name = "os_locale___os_locale_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz"; - sha1 = "42bc2900a6b5b8bd17376c8e882b65afccf24bf2"; - }; - } - - { - name = "os_tmpdir___os_tmpdir_1.0.2.tgz"; - path = fetchurl { - name = "os_tmpdir___os_tmpdir_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz"; - sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274"; - }; - } - - { - name = "osenv___osenv_0.1.5.tgz"; - path = fetchurl { - name = "osenv___osenv_0.1.5.tgz"; - url = "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz"; - sha1 = "85cdfafaeb28e8677f416e287592b5f3f49ea410"; - }; - } - - { - name = "p_finally___p_finally_1.0.0.tgz"; - path = fetchurl { - name = "p_finally___p_finally_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz"; - sha1 = "3fbcfb15b899a44123b34b6dcc18b724336a2cae"; - }; - } - - { - name = "p_limit___p_limit_1.3.0.tgz"; - path = fetchurl { - name = "p_limit___p_limit_1.3.0.tgz"; - url = "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz"; - sha1 = "b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"; - }; - } - - { - name = "p_locate___p_locate_2.0.0.tgz"; - path = fetchurl { - name = "p_locate___p_locate_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz"; - sha1 = "20a0103b222a70c8fd39cc2e580680f3dde5ec43"; - }; - } - - { - name = "p_map___p_map_1.2.0.tgz"; - path = fetchurl { - name = "p_map___p_map_1.2.0.tgz"; - url = "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz"; - sha1 = "e4e94f311eabbc8633a1e79908165fca26241b6b"; - }; - } - - { - name = "p_try___p_try_1.0.0.tgz"; - path = fetchurl { - name = "p_try___p_try_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz"; - sha1 = "cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"; - }; - } - - { - name = "pako___pako_1.0.6.tgz"; - path = fetchurl { - name = "pako___pako_1.0.6.tgz"; - url = "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz"; - sha1 = "0101211baa70c4bca4a0f63f2206e97b7dfaf258"; - }; - } - - { - name = "parse_asn1___parse_asn1_5.1.1.tgz"; - path = fetchurl { - name = "parse_asn1___parse_asn1_5.1.1.tgz"; - url = "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz"; - sha1 = "f6bf293818332bd0dab54efb16087724745e6ca8"; - }; - } - - { - name = "parse_glob___parse_glob_3.0.4.tgz"; - path = fetchurl { - name = "parse_glob___parse_glob_3.0.4.tgz"; - url = "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz"; - sha1 = "b2c376cfb11f35513badd173ef0bb6e3a388391c"; - }; - } - - { - name = "parse_json___parse_json_2.2.0.tgz"; - path = fetchurl { - name = "parse_json___parse_json_2.2.0.tgz"; - url = "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz"; - sha1 = "f480f40434ef80741f8469099f8dea18f55a4dc9"; - }; - } - - { - name = "parseurl___parseurl_1.3.2.tgz"; - path = fetchurl { - name = "parseurl___parseurl_1.3.2.tgz"; - url = "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz"; - sha1 = "fc289d4ed8993119460c156253262cdc8de65bf3"; - }; - } - - { - name = "pascalcase___pascalcase_0.1.1.tgz"; - path = fetchurl { - name = "pascalcase___pascalcase_0.1.1.tgz"; - url = "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz"; - sha1 = "b363e55e8006ca6fe21784d2db22bd15d7917f14"; - }; - } - - { - name = "path_browserify___path_browserify_0.0.0.tgz"; - path = fetchurl { - name = "path_browserify___path_browserify_0.0.0.tgz"; - url = "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz"; - sha1 = "a0b870729aae214005b7d5032ec2cbbb0fb4451a"; - }; - } - - { - name = "path_dirname___path_dirname_1.0.2.tgz"; - path = fetchurl { - name = "path_dirname___path_dirname_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz"; - sha1 = "cc33d24d525e099a5388c0336c6e32b9160609e0"; - }; - } - - { - name = "path_exists___path_exists_2.1.0.tgz"; - path = fetchurl { - name = "path_exists___path_exists_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz"; - sha1 = "0feb6c64f0fc518d9a754dd5efb62c7022761f4b"; - }; - } - - { - name = "path_exists___path_exists_3.0.0.tgz"; - path = fetchurl { - name = "path_exists___path_exists_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz"; - sha1 = "ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"; - }; - } - - { - name = "path_is_absolute___path_is_absolute_1.0.1.tgz"; - path = fetchurl { - name = "path_is_absolute___path_is_absolute_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz"; - sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"; - }; - } - - { - name = "path_is_inside___path_is_inside_1.0.2.tgz"; - path = fetchurl { - name = "path_is_inside___path_is_inside_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz"; - sha1 = "365417dede44430d1c11af61027facf074bdfc53"; - }; - } - - { - name = "path_key___path_key_2.0.1.tgz"; - path = fetchurl { - name = "path_key___path_key_2.0.1.tgz"; - url = "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz"; - sha1 = "411cadb574c5a140d3a4b1910d40d80cc9f40b40"; - }; - } - - { - name = "path_to_regexp___path_to_regexp_0.1.7.tgz"; - path = fetchurl { - name = "path_to_regexp___path_to_regexp_0.1.7.tgz"; - url = "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz"; - sha1 = "df604178005f522f15eb4490e7247a1bfaa67f8c"; - }; - } - - { - name = "path_type___path_type_1.1.0.tgz"; - path = fetchurl { - name = "path_type___path_type_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz"; - sha1 = "59c44f7ee491da704da415da5a4070ba4f8fe441"; - }; - } - - { - name = "path_type___path_type_2.0.0.tgz"; - path = fetchurl { - name = "path_type___path_type_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz"; - sha1 = "f012ccb8415b7096fc2daa1054c3d72389594c73"; - }; - } - - { - name = "pbkdf2___pbkdf2_3.0.16.tgz"; - path = fetchurl { - name = "pbkdf2___pbkdf2_3.0.16.tgz"; - url = "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.16.tgz"; - sha1 = "7404208ec6b01b62d85bf83853a8064f8d9c2a5c"; - }; - } - - { - name = "performance_now___performance_now_0.2.0.tgz"; - path = fetchurl { - name = "performance_now___performance_now_0.2.0.tgz"; - url = "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz"; - sha1 = "33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"; - }; - } - - { - name = "performance_now___performance_now_2.1.0.tgz"; - path = fetchurl { - name = "performance_now___performance_now_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz"; - sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"; - }; - } - - { - name = "pify___pify_2.3.0.tgz"; - path = fetchurl { - name = "pify___pify_2.3.0.tgz"; - url = "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz"; - sha1 = "ed141a6ac043a849ea588498e7dca8b15330e90c"; - }; - } - - { - name = "pify___pify_3.0.0.tgz"; - path = fetchurl { - name = "pify___pify_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz"; - sha1 = "e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"; - }; - } - - { - name = "pinkie_promise___pinkie_promise_2.0.1.tgz"; - path = fetchurl { - name = "pinkie_promise___pinkie_promise_2.0.1.tgz"; - url = "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz"; - sha1 = "2135d6dfa7a358c069ac9b178776288228450ffa"; - }; - } - - { - name = "pinkie___pinkie_2.0.4.tgz"; - path = fetchurl { - name = "pinkie___pinkie_2.0.4.tgz"; - url = "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz"; - sha1 = "72556b80cfa0d48a974e80e77248e80ed4f7f870"; - }; - } - - { - name = "pkg_dir___pkg_dir_2.0.0.tgz"; - path = fetchurl { - name = "pkg_dir___pkg_dir_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz"; - sha1 = "f6d5d1109e19d63edf428e0bd57e12777615334b"; - }; - } - - { - name = "pkg_up___pkg_up_1.0.0.tgz"; - path = fetchurl { - name = "pkg_up___pkg_up_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz"; - sha1 = "3e08fb461525c4421624a33b9f7e6d0af5b05a26"; - }; - } - - { - name = "popper.js___popper.js_1.14.4.tgz"; - path = fetchurl { - name = "popper.js___popper.js_1.14.4.tgz"; - url = "https://registry.yarnpkg.com/popper.js/-/popper.js-1.14.4.tgz"; - sha1 = "8eec1d8ff02a5a3a152dd43414a15c7b79fd69b6"; - }; - } - - { - name = "portfinder___portfinder_1.0.13.tgz"; - path = fetchurl { - name = "portfinder___portfinder_1.0.13.tgz"; - url = "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz"; - sha1 = "bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9"; - }; - } - - { - name = "posix_character_classes___posix_character_classes_0.1.1.tgz"; - path = fetchurl { - name = "posix_character_classes___posix_character_classes_0.1.1.tgz"; - url = "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz"; - sha1 = "01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"; - }; - } - - { - name = "postcss_calc___postcss_calc_5.3.1.tgz"; - path = fetchurl { - name = "postcss_calc___postcss_calc_5.3.1.tgz"; - url = "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz"; - sha1 = "77bae7ca928ad85716e2fda42f261bf7c1d65b5e"; - }; - } - - { - name = "postcss_colormin___postcss_colormin_2.2.2.tgz"; - path = fetchurl { - name = "postcss_colormin___postcss_colormin_2.2.2.tgz"; - url = "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz"; - sha1 = "6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b"; - }; - } - - { - name = "postcss_convert_values___postcss_convert_values_2.6.1.tgz"; - path = fetchurl { - name = "postcss_convert_values___postcss_convert_values_2.6.1.tgz"; - url = "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz"; - sha1 = "bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d"; - }; - } - - { - name = "postcss_discard_comments___postcss_discard_comments_2.0.4.tgz"; - path = fetchurl { - name = "postcss_discard_comments___postcss_discard_comments_2.0.4.tgz"; - url = "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz"; - sha1 = "befe89fafd5b3dace5ccce51b76b81514be00e3d"; - }; - } - - { - name = "postcss_discard_duplicates___postcss_discard_duplicates_2.1.0.tgz"; - path = fetchurl { - name = "postcss_discard_duplicates___postcss_discard_duplicates_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz"; - sha1 = "b9abf27b88ac188158a5eb12abcae20263b91932"; - }; - } - - { - name = "postcss_discard_empty___postcss_discard_empty_2.1.0.tgz"; - path = fetchurl { - name = "postcss_discard_empty___postcss_discard_empty_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz"; - sha1 = "d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5"; - }; - } - - { - name = "postcss_discard_overridden___postcss_discard_overridden_0.1.1.tgz"; - path = fetchurl { - name = "postcss_discard_overridden___postcss_discard_overridden_0.1.1.tgz"; - url = "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz"; - sha1 = "8b1eaf554f686fb288cd874c55667b0aa3668d58"; - }; - } - - { - name = "postcss_discard_unused___postcss_discard_unused_2.2.3.tgz"; - path = fetchurl { - name = "postcss_discard_unused___postcss_discard_unused_2.2.3.tgz"; - url = "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz"; - sha1 = "bce30b2cc591ffc634322b5fb3464b6d934f4433"; - }; - } - - { - name = "postcss_filter_plugins___postcss_filter_plugins_2.0.3.tgz"; - path = fetchurl { - name = "postcss_filter_plugins___postcss_filter_plugins_2.0.3.tgz"; - url = "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz"; - sha1 = "82245fdf82337041645e477114d8e593aa18b8ec"; - }; - } - - { - name = "postcss_merge_idents___postcss_merge_idents_2.1.7.tgz"; - path = fetchurl { - name = "postcss_merge_idents___postcss_merge_idents_2.1.7.tgz"; - url = "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz"; - sha1 = "4c5530313c08e1d5b3bbf3d2bbc747e278eea270"; - }; - } - - { - name = "postcss_merge_longhand___postcss_merge_longhand_2.0.2.tgz"; - path = fetchurl { - name = "postcss_merge_longhand___postcss_merge_longhand_2.0.2.tgz"; - url = "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz"; - sha1 = "23d90cd127b0a77994915332739034a1a4f3d658"; - }; - } - - { - name = "postcss_merge_rules___postcss_merge_rules_2.1.2.tgz"; - path = fetchurl { - name = "postcss_merge_rules___postcss_merge_rules_2.1.2.tgz"; - url = "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz"; - sha1 = "d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721"; - }; - } - - { - name = "postcss_message_helpers___postcss_message_helpers_2.0.0.tgz"; - path = fetchurl { - name = "postcss_message_helpers___postcss_message_helpers_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz"; - sha1 = "a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e"; - }; - } - - { - name = "postcss_minify_font_values___postcss_minify_font_values_1.0.5.tgz"; - path = fetchurl { - name = "postcss_minify_font_values___postcss_minify_font_values_1.0.5.tgz"; - url = "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz"; - sha1 = "4b58edb56641eba7c8474ab3526cafd7bbdecb69"; - }; - } - - { - name = "postcss_minify_gradients___postcss_minify_gradients_1.0.5.tgz"; - path = fetchurl { - name = "postcss_minify_gradients___postcss_minify_gradients_1.0.5.tgz"; - url = "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz"; - sha1 = "5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1"; - }; - } - - { - name = "postcss_minify_params___postcss_minify_params_1.2.2.tgz"; - path = fetchurl { - name = "postcss_minify_params___postcss_minify_params_1.2.2.tgz"; - url = "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz"; - sha1 = "ad2ce071373b943b3d930a3fa59a358c28d6f1f3"; - }; - } - - { - name = "postcss_minify_selectors___postcss_minify_selectors_2.1.1.tgz"; - path = fetchurl { - name = "postcss_minify_selectors___postcss_minify_selectors_2.1.1.tgz"; - url = "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz"; - sha1 = "b2c6a98c0072cf91b932d1a496508114311735bf"; - }; - } - - { - name = "postcss_modules_extract_imports___postcss_modules_extract_imports_1.1.0.tgz"; - path = fetchurl { - name = "postcss_modules_extract_imports___postcss_modules_extract_imports_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz"; - sha1 = "b614c9720be6816eaee35fb3a5faa1dba6a05ddb"; - }; - } - - { - name = "postcss_modules_local_by_default___postcss_modules_local_by_default_1.2.0.tgz"; - path = fetchurl { - name = "postcss_modules_local_by_default___postcss_modules_local_by_default_1.2.0.tgz"; - url = "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz"; - sha1 = "f7d80c398c5a393fa7964466bd19500a7d61c069"; - }; - } - - { - name = "postcss_modules_scope___postcss_modules_scope_1.1.0.tgz"; - path = fetchurl { - name = "postcss_modules_scope___postcss_modules_scope_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz"; - sha1 = "d6ea64994c79f97b62a72b426fbe6056a194bb90"; - }; - } - - { - name = "postcss_modules_values___postcss_modules_values_1.3.0.tgz"; - path = fetchurl { - name = "postcss_modules_values___postcss_modules_values_1.3.0.tgz"; - url = "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz"; - sha1 = "ecffa9d7e192518389f42ad0e83f72aec456ea20"; - }; - } - - { - name = "postcss_normalize_charset___postcss_normalize_charset_1.1.1.tgz"; - path = fetchurl { - name = "postcss_normalize_charset___postcss_normalize_charset_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz"; - sha1 = "ef9ee71212d7fe759c78ed162f61ed62b5cb93f1"; - }; - } - - { - name = "postcss_normalize_url___postcss_normalize_url_3.0.8.tgz"; - path = fetchurl { - name = "postcss_normalize_url___postcss_normalize_url_3.0.8.tgz"; - url = "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz"; - sha1 = "108f74b3f2fcdaf891a2ffa3ea4592279fc78222"; - }; - } - - { - name = "postcss_ordered_values___postcss_ordered_values_2.2.3.tgz"; - path = fetchurl { - name = "postcss_ordered_values___postcss_ordered_values_2.2.3.tgz"; - url = "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz"; - sha1 = "eec6c2a67b6c412a8db2042e77fe8da43f95c11d"; - }; - } - - { - name = "postcss_reduce_idents___postcss_reduce_idents_2.4.0.tgz"; - path = fetchurl { - name = "postcss_reduce_idents___postcss_reduce_idents_2.4.0.tgz"; - url = "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz"; - sha1 = "c2c6d20cc958284f6abfbe63f7609bf409059ad3"; - }; - } - - { - name = "postcss_reduce_initial___postcss_reduce_initial_1.0.1.tgz"; - path = fetchurl { - name = "postcss_reduce_initial___postcss_reduce_initial_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz"; - sha1 = "68f80695f045d08263a879ad240df8dd64f644ea"; - }; - } - - { - name = "postcss_reduce_transforms___postcss_reduce_transforms_1.0.4.tgz"; - path = fetchurl { - name = "postcss_reduce_transforms___postcss_reduce_transforms_1.0.4.tgz"; - url = "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz"; - sha1 = "ff76f4d8212437b31c298a42d2e1444025771ae1"; - }; - } - - { - name = "postcss_selector_parser___postcss_selector_parser_2.2.3.tgz"; - path = fetchurl { - name = "postcss_selector_parser___postcss_selector_parser_2.2.3.tgz"; - url = "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz"; - sha1 = "f9437788606c3c9acee16ffe8d8b16297f27bb90"; - }; - } - - { - name = "postcss_svgo___postcss_svgo_2.1.6.tgz"; - path = fetchurl { - name = "postcss_svgo___postcss_svgo_2.1.6.tgz"; - url = "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz"; - sha1 = "b6df18aa613b666e133f08adb5219c2684ac108d"; - }; - } - - { - name = "postcss_unique_selectors___postcss_unique_selectors_2.0.2.tgz"; - path = fetchurl { - name = "postcss_unique_selectors___postcss_unique_selectors_2.0.2.tgz"; - url = "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz"; - sha1 = "981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d"; - }; - } - - { - name = "postcss_value_parser___postcss_value_parser_3.3.0.tgz"; - path = fetchurl { - name = "postcss_value_parser___postcss_value_parser_3.3.0.tgz"; - url = "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz"; - sha1 = "87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15"; - }; - } - - { - name = "postcss_zindex___postcss_zindex_2.2.0.tgz"; - path = fetchurl { - name = "postcss_zindex___postcss_zindex_2.2.0.tgz"; - url = "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz"; - sha1 = "d2109ddc055b91af67fc4cb3b025946639d2af22"; - }; - } - - { - name = "postcss___postcss_5.2.18.tgz"; - path = fetchurl { - name = "postcss___postcss_5.2.18.tgz"; - url = "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz"; - sha1 = "badfa1497d46244f6390f58b319830d9107853c5"; - }; - } - - { - name = "postcss___postcss_6.0.23.tgz"; - path = fetchurl { - name = "postcss___postcss_6.0.23.tgz"; - url = "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz"; - sha1 = "61c82cc328ac60e677645f979054eb98bc0e3324"; - }; - } - - { - name = "prepend_http___prepend_http_1.0.4.tgz"; - path = fetchurl { - name = "prepend_http___prepend_http_1.0.4.tgz"; - url = "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz"; - sha1 = "d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"; - }; - } - - { - name = "preserve___preserve_0.2.0.tgz"; - path = fetchurl { - name = "preserve___preserve_0.2.0.tgz"; - url = "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz"; - sha1 = "815ed1f6ebc65926f865b310c0713bcb3315ce4b"; - }; - } - - { - name = "pretty_error___pretty_error_2.1.1.tgz"; - path = fetchurl { - name = "pretty_error___pretty_error_2.1.1.tgz"; - url = "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz"; - sha1 = "5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"; - }; - } - - { - name = "private___private_0.1.8.tgz"; - path = fetchurl { - name = "private___private_0.1.8.tgz"; - url = "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz"; - sha1 = "2381edb3689f7a53d653190060fcf822d2f368ff"; - }; - } - - { - name = "process_nextick_args___process_nextick_args_2.0.0.tgz"; - path = fetchurl { - name = "process_nextick_args___process_nextick_args_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz"; - sha1 = "a37d732f4271b4ab1ad070d35508e8290788ffaa"; - }; - } - - { - name = "process___process_0.11.10.tgz"; - path = fetchurl { - name = "process___process_0.11.10.tgz"; - url = "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz"; - sha1 = "7332300e840161bda3e69a1d1d91a7d4bc16f182"; - }; - } - - { - name = "proxy_addr___proxy_addr_2.0.4.tgz"; - path = fetchurl { - name = "proxy_addr___proxy_addr_2.0.4.tgz"; - url = "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz"; - sha1 = "ecfc733bf22ff8c6f407fa275327b9ab67e48b93"; - }; - } - - { - name = "prr___prr_1.0.1.tgz"; - path = fetchurl { - name = "prr___prr_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz"; - sha1 = "d3fc114ba06995a45ec6893f484ceb1d78f5f476"; - }; - } - - { - name = "pseudomap___pseudomap_1.0.2.tgz"; - path = fetchurl { - name = "pseudomap___pseudomap_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz"; - sha1 = "f052a28da70e618917ef0a8ac34c1ae5a68286b3"; - }; - } - - { - name = "public_encrypt___public_encrypt_4.0.2.tgz"; - path = fetchurl { - name = "public_encrypt___public_encrypt_4.0.2.tgz"; - url = "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.2.tgz"; - sha1 = "46eb9107206bf73489f8b85b69d91334c6610994"; - }; - } - - { - name = "punycode___punycode_1.3.2.tgz"; - path = fetchurl { - name = "punycode___punycode_1.3.2.tgz"; - url = "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz"; - sha1 = "9653a036fb7c1ee42342f2325cceefea3926c48d"; - }; - } - - { - name = "punycode___punycode_1.4.1.tgz"; - path = fetchurl { - name = "punycode___punycode_1.4.1.tgz"; - url = "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz"; - sha1 = "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"; - }; - } - - { - name = "punycode___punycode_2.1.1.tgz"; - path = fetchurl { - name = "punycode___punycode_2.1.1.tgz"; - url = "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz"; - sha1 = "b58b010ac40c22c5657616c8d2c2c02c7bf479ec"; - }; - } - - { - name = "q___q_1.5.1.tgz"; - path = fetchurl { - name = "q___q_1.5.1.tgz"; - url = "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz"; - sha1 = "7e32f75b41381291d04611f1bf14109ac00651d7"; - }; - } - - { - name = "qs___qs_6.5.1.tgz"; - path = fetchurl { - name = "qs___qs_6.5.1.tgz"; - url = "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz"; - sha1 = "349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"; - }; - } - - { - name = "qs___qs_6.4.0.tgz"; - path = fetchurl { - name = "qs___qs_6.4.0.tgz"; - url = "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz"; - sha1 = "13e26d28ad6b0ffaa91312cd3bf708ed351e7233"; - }; - } - - { - name = "qs___qs_6.5.2.tgz"; - path = fetchurl { - name = "qs___qs_6.5.2.tgz"; - url = "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz"; - sha1 = "cb3ae806e8740444584ef154ce8ee98d403f3e36"; - }; - } - - { - name = "query_string___query_string_4.3.4.tgz"; - path = fetchurl { - name = "query_string___query_string_4.3.4.tgz"; - url = "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz"; - sha1 = "bbb693b9ca915c232515b228b1a02b609043dbeb"; - }; - } - - { - name = "querystring_es3___querystring_es3_0.2.1.tgz"; - path = fetchurl { - name = "querystring_es3___querystring_es3_0.2.1.tgz"; - url = "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz"; - sha1 = "9ec61f79049875707d69414596fd907a4d711e73"; - }; - } - - { - name = "querystring___querystring_0.2.0.tgz"; - path = fetchurl { - name = "querystring___querystring_0.2.0.tgz"; - url = "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz"; - sha1 = "b209849203bb25df820da756e747005878521620"; - }; - } - - { - name = "querystringify___querystringify_2.0.0.tgz"; - path = fetchurl { - name = "querystringify___querystringify_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/querystringify/-/querystringify-2.0.0.tgz"; - sha1 = "fa3ed6e68eb15159457c89b37bc6472833195755"; - }; - } - - { - name = "randomatic___randomatic_3.0.0.tgz"; - path = fetchurl { - name = "randomatic___randomatic_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/randomatic/-/randomatic-3.0.0.tgz"; - sha1 = "d35490030eb4f7578de292ce6dfb04a91a128923"; - }; - } - - { - name = "randombytes___randombytes_2.0.6.tgz"; - path = fetchurl { - name = "randombytes___randombytes_2.0.6.tgz"; - url = "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz"; - sha1 = "d302c522948588848a8d300c932b44c24231da80"; - }; - } - - { - name = "randomfill___randomfill_1.0.4.tgz"; - path = fetchurl { - name = "randomfill___randomfill_1.0.4.tgz"; - url = "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz"; - sha1 = "c92196fc86ab42be983f1bf31778224931d61458"; - }; - } - - { - name = "range_parser___range_parser_1.2.0.tgz"; - path = fetchurl { - name = "range_parser___range_parser_1.2.0.tgz"; - url = "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz"; - sha1 = "f49be6b487894ddc40dcc94a322f611092e00d5e"; - }; - } - - { - name = "raw_body___raw_body_2.3.2.tgz"; - path = fetchurl { - name = "raw_body___raw_body_2.3.2.tgz"; - url = "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz"; - sha1 = "bcd60c77d3eb93cde0050295c3f379389bc88f89"; - }; - } - - { - name = "rc___rc_1.2.8.tgz"; - path = fetchurl { - name = "rc___rc_1.2.8.tgz"; - url = "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz"; - sha1 = "cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"; - }; - } - - { - name = "read_pkg_up___read_pkg_up_1.0.1.tgz"; - path = fetchurl { - name = "read_pkg_up___read_pkg_up_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz"; - sha1 = "9d63c13276c065918d57f002a57f40a1b643fb02"; - }; - } - - { - name = "read_pkg_up___read_pkg_up_2.0.0.tgz"; - path = fetchurl { - name = "read_pkg_up___read_pkg_up_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz"; - sha1 = "6b72a8048984e0c41e79510fd5e9fa99b3b549be"; - }; - } - - { - name = "read_pkg___read_pkg_1.1.0.tgz"; - path = fetchurl { - name = "read_pkg___read_pkg_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz"; - sha1 = "f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"; - }; - } - - { - name = "read_pkg___read_pkg_2.0.0.tgz"; - path = fetchurl { - name = "read_pkg___read_pkg_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz"; - sha1 = "8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"; - }; - } - - { - name = "readable_stream___readable_stream_1.0.34.tgz"; - path = fetchurl { - name = "readable_stream___readable_stream_1.0.34.tgz"; - url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz"; - sha1 = "125820e34bc842d2f2aaafafe4c2916ee32c157c"; - }; - } - - { - name = "readable_stream___readable_stream_2.3.6.tgz"; - path = fetchurl { - name = "readable_stream___readable_stream_2.3.6.tgz"; - url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz"; - sha1 = "b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"; - }; - } - - { - name = "readdirp___readdirp_2.1.0.tgz"; - path = fetchurl { - name = "readdirp___readdirp_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz"; - sha1 = "4ed0ad060df3073300c48440373f72d1cc642d78"; - }; - } - - { - name = "redent___redent_1.0.0.tgz"; - path = fetchurl { - name = "redent___redent_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz"; - sha1 = "cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"; - }; - } - - { - name = "reduce_css_calc___reduce_css_calc_1.3.0.tgz"; - path = fetchurl { - name = "reduce_css_calc___reduce_css_calc_1.3.0.tgz"; - url = "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz"; - sha1 = "747c914e049614a4c9cfbba629871ad1d2927716"; - }; - } - - { - name = "reduce_function_call___reduce_function_call_1.0.2.tgz"; - path = fetchurl { - name = "reduce_function_call___reduce_function_call_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz"; - sha1 = "5a200bf92e0e37751752fe45b0ab330fd4b6be99"; - }; - } - - { - name = "regenerate___regenerate_1.4.0.tgz"; - path = fetchurl { - name = "regenerate___regenerate_1.4.0.tgz"; - url = "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz"; - sha1 = "4a856ec4b56e4077c557589cae85e7a4c8869a11"; - }; - } - - { - name = "regenerator_runtime___regenerator_runtime_0.11.1.tgz"; - path = fetchurl { - name = "regenerator_runtime___regenerator_runtime_0.11.1.tgz"; - url = "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz"; - sha1 = "be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"; - }; - } - - { - name = "regenerator_transform___regenerator_transform_0.10.1.tgz"; - path = fetchurl { - name = "regenerator_transform___regenerator_transform_0.10.1.tgz"; - url = "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz"; - sha1 = "1e4996837231da8b7f3cf4114d71b5691a0680dd"; - }; - } - - { - name = "regex_cache___regex_cache_0.4.4.tgz"; - path = fetchurl { - name = "regex_cache___regex_cache_0.4.4.tgz"; - url = "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz"; - sha1 = "75bdc58a2a1496cec48a12835bc54c8d562336dd"; - }; - } - - { - name = "regex_not___regex_not_1.0.2.tgz"; - path = fetchurl { - name = "regex_not___regex_not_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz"; - sha1 = "1f4ece27e00b0b65e0247a6810e6a85d83a5752c"; - }; - } - - { - name = "regex_parser___regex_parser_2.2.9.tgz"; - path = fetchurl { - name = "regex_parser___regex_parser_2.2.9.tgz"; - url = "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.9.tgz"; - sha1 = "a372f45a248b62976a568037c1b6e60a60599192"; - }; - } - - { - name = "regexpu_core___regexpu_core_1.0.0.tgz"; - path = fetchurl { - name = "regexpu_core___regexpu_core_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz"; - sha1 = "86a763f58ee4d7c2f6b102e4764050de7ed90c6b"; - }; - } - - { - name = "regexpu_core___regexpu_core_2.0.0.tgz"; - path = fetchurl { - name = "regexpu_core___regexpu_core_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz"; - sha1 = "49d038837b8dcf8bfa5b9a42139938e6ea2ae240"; - }; - } - - { - name = "regjsgen___regjsgen_0.2.0.tgz"; - path = fetchurl { - name = "regjsgen___regjsgen_0.2.0.tgz"; - url = "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz"; - sha1 = "6c016adeac554f75823fe37ac05b92d5a4edb1f7"; - }; - } - - { - name = "regjsparser___regjsparser_0.1.5.tgz"; - path = fetchurl { - name = "regjsparser___regjsparser_0.1.5.tgz"; - url = "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz"; - sha1 = "7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"; - }; - } - - { - name = "remove_trailing_separator___remove_trailing_separator_1.1.0.tgz"; - path = fetchurl { - name = "remove_trailing_separator___remove_trailing_separator_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz"; - sha1 = "c24bce2a283adad5bc3f58e0d48249b92379d8ef"; - }; - } - - { - name = "renderkid___renderkid_2.0.1.tgz"; - path = fetchurl { - name = "renderkid___renderkid_2.0.1.tgz"; - url = "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz"; - sha1 = "898cabfc8bede4b7b91135a3ffd323e58c0db319"; - }; - } - - { - name = "repeat_element___repeat_element_1.1.2.tgz"; - path = fetchurl { - name = "repeat_element___repeat_element_1.1.2.tgz"; - url = "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz"; - sha1 = "ef089a178d1483baae4d93eb98b4f9e4e11d990a"; - }; - } - - { - name = "repeat_string___repeat_string_1.6.1.tgz"; - path = fetchurl { - name = "repeat_string___repeat_string_1.6.1.tgz"; - url = "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz"; - sha1 = "8dcae470e1c88abc2d600fff4a776286da75e637"; - }; - } - - { - name = "repeating___repeating_2.0.1.tgz"; - path = fetchurl { - name = "repeating___repeating_2.0.1.tgz"; - url = "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz"; - sha1 = "5214c53a926d3552707527fbab415dbc08d06dda"; - }; - } - - { - name = "request___request_2.87.0.tgz"; - path = fetchurl { - name = "request___request_2.87.0.tgz"; - url = "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz"; - sha1 = "32f00235cd08d482b4d0d68db93a829c0ed5756e"; - }; - } - - { - name = "request___request_2.81.0.tgz"; - path = fetchurl { - name = "request___request_2.81.0.tgz"; - url = "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz"; - sha1 = "c6928946a0e06c5f8d6f8a9333469ffda46298a0"; - }; - } - - { - name = "require_directory___require_directory_2.1.1.tgz"; - path = fetchurl { - name = "require_directory___require_directory_2.1.1.tgz"; - url = "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz"; - sha1 = "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"; - }; - } - - { - name = "require_main_filename___require_main_filename_1.0.1.tgz"; - path = fetchurl { - name = "require_main_filename___require_main_filename_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz"; - sha1 = "97f717b69d48784f5f526a6c5aa8ffdda055a4d1"; - }; - } - - { - name = "requires_port___requires_port_1.0.0.tgz"; - path = fetchurl { - name = "requires_port___requires_port_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz"; - sha1 = "925d2601d39ac485e091cf0da5c6e694dc3dcaff"; - }; - } - - { - name = "resolve_cwd___resolve_cwd_2.0.0.tgz"; - path = fetchurl { - name = "resolve_cwd___resolve_cwd_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz"; - sha1 = "00a9f7387556e27038eae232caa372a6a59b665a"; - }; - } - - { - name = "resolve_from___resolve_from_3.0.0.tgz"; - path = fetchurl { - name = "resolve_from___resolve_from_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz"; - sha1 = "b22c7af7d9d6881bc8b6e653335eebcb0a188748"; - }; - } - - { - name = "resolve_url_loader___resolve_url_loader_2.3.0.tgz"; - path = fetchurl { - name = "resolve_url_loader___resolve_url_loader_2.3.0.tgz"; - url = "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-2.3.0.tgz"; - sha1 = "e1b37034d48f22f8cfb9f04c026faaa070fdaf26"; - }; - } - - { - name = "resolve_url___resolve_url_0.2.1.tgz"; - path = fetchurl { - name = "resolve_url___resolve_url_0.2.1.tgz"; - url = "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz"; - sha1 = "2c637fe77c893afd2a663fe21aa9080068e2052a"; - }; - } - - { - name = "ret___ret_0.1.15.tgz"; - path = fetchurl { - name = "ret___ret_0.1.15.tgz"; - url = "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz"; - sha1 = "b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"; - }; - } - - { - name = "rework_visit___rework_visit_1.0.0.tgz"; - path = fetchurl { - name = "rework_visit___rework_visit_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz"; - sha1 = "9945b2803f219e2f7aca00adb8bc9f640f842c9a"; - }; - } - - { - name = "rework___rework_1.0.1.tgz"; - path = fetchurl { - name = "rework___rework_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/rework/-/rework-1.0.1.tgz"; - sha1 = "30806a841342b54510aa4110850cd48534144aa7"; - }; - } - - { - name = "right_align___right_align_0.1.3.tgz"; - path = fetchurl { - name = "right_align___right_align_0.1.3.tgz"; - url = "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz"; - sha1 = "61339b722fe6a3515689210d24e14c96148613ef"; - }; - } - - { - name = "rimraf___rimraf_2.6.2.tgz"; - path = fetchurl { - name = "rimraf___rimraf_2.6.2.tgz"; - url = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz"; - sha1 = "2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"; - }; - } - - { - name = "ripemd160___ripemd160_2.0.2.tgz"; - path = fetchurl { - name = "ripemd160___ripemd160_2.0.2.tgz"; - url = "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz"; - sha1 = "a1c1a6f624751577ba5d07914cbc92850585890c"; - }; - } - - { - name = "safe_buffer___safe_buffer_5.1.1.tgz"; - path = fetchurl { - name = "safe_buffer___safe_buffer_5.1.1.tgz"; - url = "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz"; - sha1 = "893312af69b2123def71f57889001671eeb2c853"; - }; - } - - { - name = "safe_buffer___safe_buffer_5.1.2.tgz"; - path = fetchurl { - name = "safe_buffer___safe_buffer_5.1.2.tgz"; - url = "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz"; - sha1 = "991ec69d296e0313747d59bdfd2b745c35f8828d"; - }; - } - - { - name = "safe_regex___safe_regex_1.1.0.tgz"; - path = fetchurl { - name = "safe_regex___safe_regex_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz"; - sha1 = "40a3669f3b077d1e943d44629e157dd48023bf2e"; - }; - } - - { - name = "safer_buffer___safer_buffer_2.1.2.tgz"; - path = fetchurl { - name = "safer_buffer___safer_buffer_2.1.2.tgz"; - url = "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz"; - sha1 = "44fa161b0187b9549dd84bb91802f9bd8385cd6a"; - }; - } - - { - name = "sass_graph___sass_graph_2.2.4.tgz"; - path = fetchurl { - name = "sass_graph___sass_graph_2.2.4.tgz"; - url = "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz"; - sha1 = "13fbd63cd1caf0908b9fd93476ad43a51d1e0b49"; - }; - } - - { - name = "sass_loader___sass_loader_7.0.3.tgz"; - path = fetchurl { - name = "sass_loader___sass_loader_7.0.3.tgz"; - url = "https://registry.yarnpkg.com/sass-loader/-/sass-loader-7.0.3.tgz"; - sha1 = "6ca10871a1cc7549f8143db5a9958242c4e4ca2a"; - }; - } - - { - name = "sax___sax_1.2.4.tgz"; - path = fetchurl { - name = "sax___sax_1.2.4.tgz"; - url = "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz"; - sha1 = "2816234e2378bddc4e5354fab5caa895df7100d9"; - }; - } - - { - name = "schema_utils___schema_utils_0.3.0.tgz"; - path = fetchurl { - name = "schema_utils___schema_utils_0.3.0.tgz"; - url = "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz"; - sha1 = "f5877222ce3e931edae039f17eb3716e7137f8cf"; - }; - } - - { - name = "scss_tokenizer___scss_tokenizer_0.2.3.tgz"; - path = fetchurl { - name = "scss_tokenizer___scss_tokenizer_0.2.3.tgz"; - url = "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz"; - sha1 = "8eb06db9a9723333824d3f5530641149847ce5d1"; - }; - } - - { - name = "select_hose___select_hose_2.0.0.tgz"; - path = fetchurl { - name = "select_hose___select_hose_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz"; - sha1 = "625d8658f865af43ec962bfc376a37359a4994ca"; - }; - } - - { - name = "selfsigned___selfsigned_1.10.3.tgz"; - path = fetchurl { - name = "selfsigned___selfsigned_1.10.3.tgz"; - url = "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.3.tgz"; - sha1 = "d628ecf9e3735f84e8bafba936b3cf85bea43823"; - }; - } - - { - name = "semver___semver_5.5.0.tgz"; - path = fetchurl { - name = "semver___semver_5.5.0.tgz"; - url = "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz"; - sha1 = "dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"; - }; - } - - { - name = "semver___semver_5.3.0.tgz"; - path = fetchurl { - name = "semver___semver_5.3.0.tgz"; - url = "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz"; - sha1 = "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"; - }; - } - - { - name = "send___send_0.16.2.tgz"; - path = fetchurl { - name = "send___send_0.16.2.tgz"; - url = "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz"; - sha1 = "6ecca1e0f8c156d141597559848df64730a6bbc1"; - }; - } - - { - name = "serve_index___serve_index_1.9.1.tgz"; - path = fetchurl { - name = "serve_index___serve_index_1.9.1.tgz"; - url = "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz"; - sha1 = "d3768d69b1e7d82e5ce050fff5b453bea12a9239"; - }; - } - - { - name = "serve_static___serve_static_1.13.2.tgz"; - path = fetchurl { - name = "serve_static___serve_static_1.13.2.tgz"; - url = "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz"; - sha1 = "095e8472fd5b46237db50ce486a43f4b86c6cec1"; - }; - } - - { - name = "set_blocking___set_blocking_2.0.0.tgz"; - path = fetchurl { - name = "set_blocking___set_blocking_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz"; - sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7"; - }; - } - - { - name = "set_immediate_shim___set_immediate_shim_1.0.1.tgz"; - path = fetchurl { - name = "set_immediate_shim___set_immediate_shim_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz"; - sha1 = "4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"; - }; - } - - { - name = "set_value___set_value_0.4.3.tgz"; - path = fetchurl { - name = "set_value___set_value_0.4.3.tgz"; - url = "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz"; - sha1 = "7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"; - }; - } - - { - name = "set_value___set_value_2.0.0.tgz"; - path = fetchurl { - name = "set_value___set_value_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz"; - sha1 = "71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"; - }; - } - - { - name = "setimmediate___setimmediate_1.0.5.tgz"; - path = fetchurl { - name = "setimmediate___setimmediate_1.0.5.tgz"; - url = "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz"; - sha1 = "290cbb232e306942d7d7ea9b83732ab7856f8285"; - }; - } - - { - name = "setprototypeof___setprototypeof_1.0.3.tgz"; - path = fetchurl { - name = "setprototypeof___setprototypeof_1.0.3.tgz"; - url = "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz"; - sha1 = "66567e37043eeb4f04d91bd658c0cbefb55b8e04"; - }; - } - - { - name = "setprototypeof___setprototypeof_1.1.0.tgz"; - path = fetchurl { - name = "setprototypeof___setprototypeof_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz"; - sha1 = "d0bd85536887b6fe7c0d818cb962d9d91c54e656"; - }; - } - - { - name = "sha.js___sha.js_2.4.11.tgz"; - path = fetchurl { - name = "sha.js___sha.js_2.4.11.tgz"; - url = "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz"; - sha1 = "37a5cf0b81ecbc6943de109ba2960d1b26584ae7"; - }; - } - - { - name = "shallow_clone___shallow_clone_1.0.0.tgz"; - path = fetchurl { - name = "shallow_clone___shallow_clone_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz"; - sha1 = "4480cd06e882ef68b2ad88a3ea54832e2c48b571"; - }; - } - - { - name = "shebang_command___shebang_command_1.2.0.tgz"; - path = fetchurl { - name = "shebang_command___shebang_command_1.2.0.tgz"; - url = "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz"; - sha1 = "44aac65b695b03398968c39f363fee5deafdf1ea"; - }; - } - - { - name = "shebang_regex___shebang_regex_1.0.0.tgz"; - path = fetchurl { - name = "shebang_regex___shebang_regex_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz"; - sha1 = "da42f49740c0b42db2ca9728571cb190c98efea3"; - }; - } - - { - name = "signal_exit___signal_exit_3.0.2.tgz"; - path = fetchurl { - name = "signal_exit___signal_exit_3.0.2.tgz"; - url = "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz"; - sha1 = "b5fdc08f1287ea1178628e415e25132b73646c6d"; - }; - } - - { - name = "slash___slash_1.0.0.tgz"; - path = fetchurl { - name = "slash___slash_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz"; - sha1 = "c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"; - }; - } - - { - name = "snapdragon_node___snapdragon_node_2.1.1.tgz"; - path = fetchurl { - name = "snapdragon_node___snapdragon_node_2.1.1.tgz"; - url = "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz"; - sha1 = "6c175f86ff14bdb0724563e8f3c1b021a286853b"; - }; - } - - { - name = "snapdragon_util___snapdragon_util_3.0.1.tgz"; - path = fetchurl { - name = "snapdragon_util___snapdragon_util_3.0.1.tgz"; - url = "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz"; - sha1 = "f956479486f2acd79700693f6f7b805e45ab56e2"; - }; - } - - { - name = "snapdragon___snapdragon_0.8.2.tgz"; - path = fetchurl { - name = "snapdragon___snapdragon_0.8.2.tgz"; - url = "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz"; - sha1 = "64922e7c565b0e14204ba1aa7d6964278d25182d"; - }; - } - - { - name = "sntp___sntp_1.0.9.tgz"; - path = fetchurl { - name = "sntp___sntp_1.0.9.tgz"; - url = "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz"; - sha1 = "6541184cc90aeea6c6e7b35e2659082443c66198"; - }; - } - - { - name = "sockjs_client___sockjs_client_1.1.4.tgz"; - path = fetchurl { - name = "sockjs_client___sockjs_client_1.1.4.tgz"; - url = "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz"; - sha1 = "5babe386b775e4cf14e7520911452654016c8b12"; - }; - } - - { - name = "sockjs___sockjs_0.3.19.tgz"; - path = fetchurl { - name = "sockjs___sockjs_0.3.19.tgz"; - url = "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz"; - sha1 = "d976bbe800af7bd20ae08598d582393508993c0d"; - }; - } - - { - name = "sort_keys___sort_keys_1.1.2.tgz"; - path = fetchurl { - name = "sort_keys___sort_keys_1.1.2.tgz"; - url = "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz"; - sha1 = "441b6d4d346798f1b4e49e8920adfba0e543f9ad"; - }; - } - - { - name = "source_list_map___source_list_map_0.1.8.tgz"; - path = fetchurl { - name = "source_list_map___source_list_map_0.1.8.tgz"; - url = "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz"; - sha1 = "c550b2ab5427f6b3f21f5afead88c4f5587b2106"; - }; - } - - { - name = "source_list_map___source_list_map_2.0.0.tgz"; - path = fetchurl { - name = "source_list_map___source_list_map_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz"; - sha1 = "aaa47403f7b245a92fbc97ea08f250d6087ed085"; - }; - } - - { - name = "source_map_resolve___source_map_resolve_0.5.2.tgz"; - path = fetchurl { - name = "source_map_resolve___source_map_resolve_0.5.2.tgz"; - url = "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz"; - sha1 = "72e2cc34095543e43b2c62b2c4c10d4a9054f259"; - }; - } - - { - name = "source_map_support___source_map_support_0.4.18.tgz"; - path = fetchurl { - name = "source_map_support___source_map_support_0.4.18.tgz"; - url = "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz"; - sha1 = "0286a6de8be42641338594e97ccea75f0a2c585f"; - }; - } - - { - name = "source_map_url___source_map_url_0.4.0.tgz"; - path = fetchurl { - name = "source_map_url___source_map_url_0.4.0.tgz"; - url = "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz"; - sha1 = "3e935d7ddd73631b97659956d55128e87b5084a3"; - }; - } - - { - name = "source_map___source_map_0.1.43.tgz"; - path = fetchurl { - name = "source_map___source_map_0.1.43.tgz"; - url = "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz"; - sha1 = "c24bc146ca517c1471f5dacbe2571b2b7f9e3346"; - }; - } - - { - name = "source_map___source_map_0.4.4.tgz"; - path = fetchurl { - name = "source_map___source_map_0.4.4.tgz"; - url = "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz"; - sha1 = "eba4f5da9c0dc999de68032d8b4f76173652036b"; - }; - } - - { - name = "source_map___source_map_0.5.7.tgz"; - path = fetchurl { - name = "source_map___source_map_0.5.7.tgz"; - url = "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz"; - sha1 = "8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"; - }; - } - - { - name = "source_map___source_map_0.6.1.tgz"; - path = fetchurl { - name = "source_map___source_map_0.6.1.tgz"; - url = "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz"; - sha1 = "74722af32e9614e9c287a8d0bbde48b5e2f1a263"; - }; - } - - { - name = "spdx_correct___spdx_correct_3.0.0.tgz"; - path = fetchurl { - name = "spdx_correct___spdx_correct_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz"; - sha1 = "05a5b4d7153a195bc92c3c425b69f3b2a9524c82"; - }; - } - - { - name = "spdx_exceptions___spdx_exceptions_2.1.0.tgz"; - path = fetchurl { - name = "spdx_exceptions___spdx_exceptions_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz"; - sha1 = "2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9"; - }; - } - - { - name = "spdx_expression_parse___spdx_expression_parse_3.0.0.tgz"; - path = fetchurl { - name = "spdx_expression_parse___spdx_expression_parse_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz"; - sha1 = "99e119b7a5da00e05491c9fa338b7904823b41d0"; - }; - } - - { - name = "spdx_license_ids___spdx_license_ids_3.0.0.tgz"; - path = fetchurl { - name = "spdx_license_ids___spdx_license_ids_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz"; - sha1 = "7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87"; - }; - } - - { - name = "spdy_transport___spdy_transport_2.1.0.tgz"; - path = fetchurl { - name = "spdy_transport___spdy_transport_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.1.0.tgz"; - sha1 = "4bbb15aaffed0beefdd56ad61dbdc8ba3e2cb7a1"; - }; - } - - { - name = "spdy___spdy_3.4.7.tgz"; - path = fetchurl { - name = "spdy___spdy_3.4.7.tgz"; - url = "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz"; - sha1 = "42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc"; - }; - } - - { - name = "split_string___split_string_3.1.0.tgz"; - path = fetchurl { - name = "split_string___split_string_3.1.0.tgz"; - url = "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz"; - sha1 = "7cb09dda3a86585705c64b39a6466038682e8fe2"; - }; - } - - { - name = "sprintf_js___sprintf_js_1.0.3.tgz"; - path = fetchurl { - name = "sprintf_js___sprintf_js_1.0.3.tgz"; - url = "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz"; - sha1 = "04e6926f662895354f3dd015203633b857297e2c"; - }; - } - - { - name = "sshpk___sshpk_1.14.2.tgz"; - path = fetchurl { - name = "sshpk___sshpk_1.14.2.tgz"; - url = "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz"; - sha1 = "c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98"; - }; - } - - { - name = "stackframe___stackframe_1.0.4.tgz"; - path = fetchurl { - name = "stackframe___stackframe_1.0.4.tgz"; - url = "https://registry.yarnpkg.com/stackframe/-/stackframe-1.0.4.tgz"; - sha1 = "357b24a992f9427cba6b545d96a14ed2cbca187b"; - }; - } - - { - name = "static_extend___static_extend_0.1.2.tgz"; - path = fetchurl { - name = "static_extend___static_extend_0.1.2.tgz"; - url = "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz"; - sha1 = "60809c39cbff55337226fd5e0b520f341f1fb5c6"; - }; - } - - { - name = "statuses___statuses_1.5.0.tgz"; - path = fetchurl { - name = "statuses___statuses_1.5.0.tgz"; - url = "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz"; - sha1 = "161c7dac177659fd9811f43771fa99381478628c"; - }; - } - - { - name = "statuses___statuses_1.4.0.tgz"; - path = fetchurl { - name = "statuses___statuses_1.4.0.tgz"; - url = "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz"; - sha1 = "bb73d446da2796106efcc1b601a253d6c46bd087"; - }; - } - - { - name = "stdout_stream___stdout_stream_1.4.0.tgz"; - path = fetchurl { - name = "stdout_stream___stdout_stream_1.4.0.tgz"; - url = "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.0.tgz"; - sha1 = "a2c7c8587e54d9427ea9edb3ac3f2cd522df378b"; - }; - } - - { - name = "stream_browserify___stream_browserify_2.0.1.tgz"; - path = fetchurl { - name = "stream_browserify___stream_browserify_2.0.1.tgz"; - url = "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz"; - sha1 = "66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"; - }; - } - - { - name = "stream_http___stream_http_2.8.3.tgz"; - path = fetchurl { - name = "stream_http___stream_http_2.8.3.tgz"; - url = "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz"; - sha1 = "b2d242469288a5a27ec4fe8933acf623de6514fc"; - }; - } - - { - name = "strict_uri_encode___strict_uri_encode_1.1.0.tgz"; - path = fetchurl { - name = "strict_uri_encode___strict_uri_encode_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz"; - sha1 = "279b225df1d582b1f54e65addd4352e18faa0713"; - }; - } - - { - name = "string_width___string_width_1.0.2.tgz"; - path = fetchurl { - name = "string_width___string_width_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz"; - sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"; - }; - } - - { - name = "string_width___string_width_2.1.1.tgz"; - path = fetchurl { - name = "string_width___string_width_2.1.1.tgz"; - url = "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz"; - sha1 = "ab93f27a8dc13d28cac815c462143a6d9012ae9e"; - }; - } - - { - name = "string_decoder___string_decoder_1.1.1.tgz"; - path = fetchurl { - name = "string_decoder___string_decoder_1.1.1.tgz"; - url = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz"; - sha1 = "9cf1611ba62685d7030ae9e4ba34149c3af03fc8"; - }; - } - - { - name = "string_decoder___string_decoder_0.10.31.tgz"; - path = fetchurl { - name = "string_decoder___string_decoder_0.10.31.tgz"; - url = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz"; - sha1 = "62e203bc41766c6c28c9fc84301dab1c5310fa94"; - }; - } - - { - name = "stringstream___stringstream_0.0.6.tgz"; - path = fetchurl { - name = "stringstream___stringstream_0.0.6.tgz"; - url = "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz"; - sha1 = "7880225b0d4ad10e30927d167a1d6f2fd3b33a72"; - }; - } - - { - name = "strip_ansi___strip_ansi_3.0.1.tgz"; - path = fetchurl { - name = "strip_ansi___strip_ansi_3.0.1.tgz"; - url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz"; - sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"; - }; - } - - { - name = "strip_ansi___strip_ansi_4.0.0.tgz"; - path = fetchurl { - name = "strip_ansi___strip_ansi_4.0.0.tgz"; - url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz"; - sha1 = "a8479022eb1ac368a871389b635262c505ee368f"; - }; - } - - { - name = "strip_bom___strip_bom_2.0.0.tgz"; - path = fetchurl { - name = "strip_bom___strip_bom_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz"; - sha1 = "6219a85616520491f35788bdbf1447a99c7e6b0e"; - }; - } - - { - name = "strip_bom___strip_bom_3.0.0.tgz"; - path = fetchurl { - name = "strip_bom___strip_bom_3.0.0.tgz"; - url = "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz"; - sha1 = "2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"; - }; - } - - { - name = "strip_eof___strip_eof_1.0.0.tgz"; - path = fetchurl { - name = "strip_eof___strip_eof_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz"; - sha1 = "bb43ff5598a6eb05d89b59fcd129c983313606bf"; - }; - } - - { - name = "strip_indent___strip_indent_1.0.1.tgz"; - path = fetchurl { - name = "strip_indent___strip_indent_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz"; - sha1 = "0c7962a6adefa7bbd4ac366460a638552ae1a0a2"; - }; - } - - { - name = "strip_json_comments___strip_json_comments_2.0.1.tgz"; - path = fetchurl { - name = "strip_json_comments___strip_json_comments_2.0.1.tgz"; - url = "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz"; - sha1 = "3c531942e908c2697c0ec344858c286c7ca0a60a"; - }; - } - - { - name = "style_loader___style_loader_0.13.2.tgz"; - path = fetchurl { - name = "style_loader___style_loader_0.13.2.tgz"; - url = "https://registry.yarnpkg.com/style-loader/-/style-loader-0.13.2.tgz"; - sha1 = "74533384cf698c7104c7951150b49717adc2f3bb"; - }; - } - - { - name = "summernote___summernote_0.8.10.tgz"; - path = fetchurl { - name = "summernote___summernote_0.8.10.tgz"; - url = "https://registry.yarnpkg.com/summernote/-/summernote-0.8.10.tgz"; - sha1 = "21a5d7f18a3b07500b58b60d5907417a54897520"; - }; - } - - { - name = "supports_color___supports_color_2.0.0.tgz"; - path = fetchurl { - name = "supports_color___supports_color_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz"; - sha1 = "535d045ce6b6363fa40117084629995e9df324c7"; - }; - } - - { - name = "supports_color___supports_color_3.2.3.tgz"; - path = fetchurl { - name = "supports_color___supports_color_3.2.3.tgz"; - url = "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz"; - sha1 = "65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"; - }; - } - - { - name = "supports_color___supports_color_4.5.0.tgz"; - path = fetchurl { - name = "supports_color___supports_color_4.5.0.tgz"; - url = "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz"; - sha1 = "be7a0de484dec5c5cddf8b3d59125044912f635b"; - }; - } - - { - name = "supports_color___supports_color_5.4.0.tgz"; - path = fetchurl { - name = "supports_color___supports_color_5.4.0.tgz"; - url = "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz"; - sha1 = "1c6b337402c2137605efe19f10fec390f6faab54"; - }; - } - - { - name = "svgo___svgo_0.7.2.tgz"; - path = fetchurl { - name = "svgo___svgo_0.7.2.tgz"; - url = "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz"; - sha1 = "9f5772413952135c6fefbf40afe6a4faa88b4bb5"; - }; - } - - { - name = "tapable___tapable_0.2.8.tgz"; - path = fetchurl { - name = "tapable___tapable_0.2.8.tgz"; - url = "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz"; - sha1 = "99372a5c999bf2df160afc0d74bed4f47948cd22"; - }; - } - - { - name = "tar___tar_2.2.1.tgz"; - path = fetchurl { - name = "tar___tar_2.2.1.tgz"; - url = "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz"; - sha1 = "8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"; - }; - } - - { - name = "tar___tar_4.4.4.tgz"; - path = fetchurl { - name = "tar___tar_4.4.4.tgz"; - url = "https://registry.yarnpkg.com/tar/-/tar-4.4.4.tgz"; - sha1 = "ec8409fae9f665a4355cc3b4087d0820232bb8cd"; - }; - } - - { - name = "thunky___thunky_1.0.2.tgz"; - path = fetchurl { - name = "thunky___thunky_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/thunky/-/thunky-1.0.2.tgz"; - sha1 = "a862e018e3fb1ea2ec3fce5d55605cf57f247371"; - }; - } - - { - name = "time_stamp___time_stamp_2.0.0.tgz"; - path = fetchurl { - name = "time_stamp___time_stamp_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz"; - sha1 = "95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357"; - }; - } - - { - name = "timers_browserify___timers_browserify_2.0.10.tgz"; - path = fetchurl { - name = "timers_browserify___timers_browserify_2.0.10.tgz"; - url = "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz"; - sha1 = "1d28e3d2aadf1d5a5996c4e9f95601cd053480ae"; - }; - } - - { - name = "to_arraybuffer___to_arraybuffer_1.0.1.tgz"; - path = fetchurl { - name = "to_arraybuffer___to_arraybuffer_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz"; - sha1 = "7d229b1fcc637e466ca081180836a7aabff83f43"; - }; - } - - { - name = "to_fast_properties___to_fast_properties_1.0.3.tgz"; - path = fetchurl { - name = "to_fast_properties___to_fast_properties_1.0.3.tgz"; - url = "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz"; - sha1 = "b83571fa4d8c25b82e231b06e3a3055de4ca1a47"; - }; - } - - { - name = "to_object_path___to_object_path_0.3.0.tgz"; - path = fetchurl { - name = "to_object_path___to_object_path_0.3.0.tgz"; - url = "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz"; - sha1 = "297588b7b0e7e0ac08e04e672f85c1f4999e17af"; - }; - } - - { - name = "to_regex_range___to_regex_range_2.1.1.tgz"; - path = fetchurl { - name = "to_regex_range___to_regex_range_2.1.1.tgz"; - url = "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz"; - sha1 = "7c80c17b9dfebe599e27367e0d4dd5590141db38"; - }; - } - - { - name = "to_regex___to_regex_3.0.2.tgz"; - path = fetchurl { - name = "to_regex___to_regex_3.0.2.tgz"; - url = "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz"; - sha1 = "13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"; - }; - } - - { - name = "tough_cookie___tough_cookie_2.3.4.tgz"; - path = fetchurl { - name = "tough_cookie___tough_cookie_2.3.4.tgz"; - url = "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz"; - sha1 = "ec60cee38ac675063ffc97a5c18970578ee83655"; - }; - } - - { - name = "trim_newlines___trim_newlines_1.0.0.tgz"; - path = fetchurl { - name = "trim_newlines___trim_newlines_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz"; - sha1 = "5887966bb582a4503a41eb524f7d35011815a613"; - }; - } - - { - name = "trim_right___trim_right_1.0.1.tgz"; - path = fetchurl { - name = "trim_right___trim_right_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz"; - sha1 = "cb2e1203067e0c8de1f614094b9fe45704ea6003"; - }; - } - - { - name = "true_case_path___true_case_path_1.0.2.tgz"; - path = fetchurl { - name = "true_case_path___true_case_path_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.2.tgz"; - sha1 = "7ec91130924766c7f573be3020c34f8fdfd00d62"; - }; - } - - { - name = "tty_browserify___tty_browserify_0.0.0.tgz"; - path = fetchurl { - name = "tty_browserify___tty_browserify_0.0.0.tgz"; - url = "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz"; - sha1 = "a157ba402da24e9bf957f9aa69d524eed42901a6"; - }; - } - - { - name = "tunnel_agent___tunnel_agent_0.6.0.tgz"; - path = fetchurl { - name = "tunnel_agent___tunnel_agent_0.6.0.tgz"; - url = "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz"; - sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd"; - }; - } - - { - name = "tweetnacl___tweetnacl_0.14.5.tgz"; - path = fetchurl { - name = "tweetnacl___tweetnacl_0.14.5.tgz"; - url = "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz"; - sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64"; - }; - } - - { - name = "type_is___type_is_1.6.16.tgz"; - path = fetchurl { - name = "type_is___type_is_1.6.16.tgz"; - url = "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz"; - sha1 = "f89ce341541c672b25ee7ae3c73dee3b2be50194"; - }; - } - - { - name = "uglify_js___uglify_js_2.8.29.tgz"; - path = fetchurl { - name = "uglify_js___uglify_js_2.8.29.tgz"; - url = "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz"; - sha1 = "29c5733148057bb4e1f75df35b7a9cb72e6a59dd"; - }; - } - - { - name = "uglify_to_browserify___uglify_to_browserify_1.0.2.tgz"; - path = fetchurl { - name = "uglify_to_browserify___uglify_to_browserify_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz"; - sha1 = "6e0924d6bda6b5afe349e39a6d632850a0f882b7"; - }; - } - - { - name = "uglifyjs_webpack_plugin___uglifyjs_webpack_plugin_0.4.6.tgz"; - path = fetchurl { - name = "uglifyjs_webpack_plugin___uglifyjs_webpack_plugin_0.4.6.tgz"; - url = "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz"; - sha1 = "b951f4abb6bd617e66f63eb891498e391763e309"; - }; - } - - { - name = "union_value___union_value_1.0.0.tgz"; - path = fetchurl { - name = "union_value___union_value_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz"; - sha1 = "5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"; - }; - } - - { - name = "uniq___uniq_1.0.1.tgz"; - path = fetchurl { - name = "uniq___uniq_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz"; - sha1 = "b31c5ae8254844a3a8281541ce2b04b865a734ff"; - }; - } - - { - name = "uniqs___uniqs_2.0.0.tgz"; - path = fetchurl { - name = "uniqs___uniqs_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz"; - sha1 = "ffede4b36b25290696e6e165d4a59edb998e6b02"; - }; - } - - { - name = "unpipe___unpipe_1.0.0.tgz"; - path = fetchurl { - name = "unpipe___unpipe_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz"; - sha1 = "b2bf4ee8514aae6165b4817829d21b2ef49904ec"; - }; - } - - { - name = "unset_value___unset_value_1.0.0.tgz"; - path = fetchurl { - name = "unset_value___unset_value_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz"; - sha1 = "8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"; - }; - } - - { - name = "upath___upath_1.1.0.tgz"; - path = fetchurl { - name = "upath___upath_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz"; - sha1 = "35256597e46a581db4793d0ce47fa9aebfc9fabd"; - }; - } - - { - name = "uri_js___uri_js_4.2.2.tgz"; - path = fetchurl { - name = "uri_js___uri_js_4.2.2.tgz"; - url = "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz"; - sha1 = "94c540e1ff772956e2299507c010aea6c8838eb0"; - }; - } - - { - name = "urix___urix_0.1.0.tgz"; - path = fetchurl { - name = "urix___urix_0.1.0.tgz"; - url = "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz"; - sha1 = "da937f7a62e21fec1fd18d49b35c2935067a6c72"; - }; - } - - { - name = "url_parse___url_parse_1.4.1.tgz"; - path = fetchurl { - name = "url_parse___url_parse_1.4.1.tgz"; - url = "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.1.tgz"; - sha1 = "4dec9dad3dc8585f862fed461d2e19bbf623df30"; - }; - } - - { - name = "url___url_0.11.0.tgz"; - path = fetchurl { - name = "url___url_0.11.0.tgz"; - url = "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz"; - sha1 = "3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"; - }; - } - - { - name = "use___use_3.1.1.tgz"; - path = fetchurl { - name = "use___use_3.1.1.tgz"; - url = "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz"; - sha1 = "d50c8cac79a19fbc20f2911f56eb973f4e10070f"; - }; - } - - { - name = "util_deprecate___util_deprecate_1.0.2.tgz"; - path = fetchurl { - name = "util_deprecate___util_deprecate_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz"; - sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf"; - }; - } - - { - name = "util___util_0.10.3.tgz"; - path = fetchurl { - name = "util___util_0.10.3.tgz"; - url = "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz"; - sha1 = "7afb1afe50805246489e3db7fe0ed379336ac0f9"; - }; - } - - { - name = "util___util_0.10.4.tgz"; - path = fetchurl { - name = "util___util_0.10.4.tgz"; - url = "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz"; - sha1 = "3aa0125bfe668a4672de58857d3ace27ecb76901"; - }; - } - - { - name = "utila___utila_0.3.3.tgz"; - path = fetchurl { - name = "utila___utila_0.3.3.tgz"; - url = "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz"; - sha1 = "d7e8e7d7e309107092b05f8d9688824d633a4226"; - }; - } - - { - name = "utila___utila_0.4.0.tgz"; - path = fetchurl { - name = "utila___utila_0.4.0.tgz"; - url = "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz"; - sha1 = "8a16a05d445657a3aea5eecc5b12a4fa5379772c"; - }; - } - - { - name = "utils_merge___utils_merge_1.0.1.tgz"; - path = fetchurl { - name = "utils_merge___utils_merge_1.0.1.tgz"; - url = "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz"; - sha1 = "9f95710f50a267947b2ccc124741c1028427e713"; - }; - } - - { - name = "uuid___uuid_3.3.2.tgz"; - path = fetchurl { - name = "uuid___uuid_3.3.2.tgz"; - url = "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz"; - sha1 = "1b4af4955eb3077c501c23872fc6513811587131"; - }; - } - - { - name = "validate_npm_package_license___validate_npm_package_license_3.0.3.tgz"; - path = fetchurl { - name = "validate_npm_package_license___validate_npm_package_license_3.0.3.tgz"; - url = "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz"; - sha1 = "81643bcbef1bdfecd4623793dc4648948ba98338"; - }; - } - - { - name = "vary___vary_1.1.2.tgz"; - path = fetchurl { - name = "vary___vary_1.1.2.tgz"; - url = "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz"; - sha1 = "2299f02c6ded30d4a5961b0b9f74524a18f634fc"; - }; - } - - { - name = "vendors___vendors_1.0.2.tgz"; - path = fetchurl { - name = "vendors___vendors_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz"; - sha1 = "7fcb5eef9f5623b156bcea89ec37d63676f21801"; - }; - } - - { - name = "verror___verror_1.10.0.tgz"; - path = fetchurl { - name = "verror___verror_1.10.0.tgz"; - url = "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz"; - sha1 = "3a105ca17053af55d6e270c1f8288682e18da400"; - }; - } - - { - name = "vm_browserify___vm_browserify_0.0.4.tgz"; - path = fetchurl { - name = "vm_browserify___vm_browserify_0.0.4.tgz"; - url = "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz"; - sha1 = "5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"; - }; - } - - { - name = "watchpack___watchpack_1.6.0.tgz"; - path = fetchurl { - name = "watchpack___watchpack_1.6.0.tgz"; - url = "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz"; - sha1 = "4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00"; - }; - } - - { - name = "wbuf___wbuf_1.7.3.tgz"; - path = fetchurl { - name = "wbuf___wbuf_1.7.3.tgz"; - url = "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz"; - sha1 = "c1d8d149316d3ea852848895cb6a0bfe887b87df"; - }; - } - - { - name = "webpack_chunk_hash___webpack_chunk_hash_0.5.0.tgz"; - path = fetchurl { - name = "webpack_chunk_hash___webpack_chunk_hash_0.5.0.tgz"; - url = "https://registry.yarnpkg.com/webpack-chunk-hash/-/webpack-chunk-hash-0.5.0.tgz"; - sha1 = "1dba38203d73c1e6ab069b6810a5a37402399dec"; - }; - } - - { - name = "webpack_dev_middleware___webpack_dev_middleware_1.12.2.tgz"; - path = fetchurl { - name = "webpack_dev_middleware___webpack_dev_middleware_1.12.2.tgz"; - url = "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz"; - sha1 = "f8fc1120ce3b4fc5680ceecb43d777966b21105e"; - }; - } - - { - name = "webpack_dev_server___webpack_dev_server_2.11.2.tgz"; - path = fetchurl { - name = "webpack_dev_server___webpack_dev_server_2.11.2.tgz"; - url = "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.11.2.tgz"; - sha1 = "1f4f4c78bf1895378f376815910812daf79a216f"; - }; - } - - { - name = "webpack_sources___webpack_sources_1.1.0.tgz"; - path = fetchurl { - name = "webpack_sources___webpack_sources_1.1.0.tgz"; - url = "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz"; - sha1 = "a101ebae59d6507354d71d8013950a3a8b7a5a54"; - }; - } - - { - name = "webpack___webpack_3.12.0.tgz"; - path = fetchurl { - name = "webpack___webpack_3.12.0.tgz"; - url = "https://registry.yarnpkg.com/webpack/-/webpack-3.12.0.tgz"; - sha1 = "3f9e34360370602fcf639e97939db486f4ec0d74"; - }; - } - - { - name = "websocket_driver___websocket_driver_0.7.0.tgz"; - path = fetchurl { - name = "websocket_driver___websocket_driver_0.7.0.tgz"; - url = "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz"; - sha1 = "0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb"; - }; - } - - { - name = "websocket_extensions___websocket_extensions_0.1.3.tgz"; - path = fetchurl { - name = "websocket_extensions___websocket_extensions_0.1.3.tgz"; - url = "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz"; - sha1 = "5d2ff22977003ec687a4b87073dfbbac146ccf29"; - }; - } - - { - name = "whet.extend___whet.extend_0.9.9.tgz"; - path = fetchurl { - name = "whet.extend___whet.extend_0.9.9.tgz"; - url = "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz"; - sha1 = "f877d5bf648c97e5aa542fadc16d6a259b9c11a1"; - }; - } - - { - name = "which_module___which_module_1.0.0.tgz"; - path = fetchurl { - name = "which_module___which_module_1.0.0.tgz"; - url = "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz"; - sha1 = "bba63ca861948994ff307736089e3b96026c2a4f"; - }; - } - - { - name = "which_module___which_module_2.0.0.tgz"; - path = fetchurl { - name = "which_module___which_module_2.0.0.tgz"; - url = "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz"; - sha1 = "d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"; - }; - } - - { - name = "which___which_1.3.1.tgz"; - path = fetchurl { - name = "which___which_1.3.1.tgz"; - url = "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz"; - sha1 = "a45043d54f5805316da8d62f9f50918d3da70b0a"; - }; - } - - { - name = "wide_align___wide_align_1.1.3.tgz"; - path = fetchurl { - name = "wide_align___wide_align_1.1.3.tgz"; - url = "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz"; - sha1 = "ae074e6bdc0c14a431e804e624549c633b000457"; - }; - } - - { - name = "window_size___window_size_0.1.0.tgz"; - path = fetchurl { - name = "window_size___window_size_0.1.0.tgz"; - url = "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz"; - sha1 = "5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"; - }; - } - - { - name = "wordwrap___wordwrap_0.0.2.tgz"; - path = fetchurl { - name = "wordwrap___wordwrap_0.0.2.tgz"; - url = "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz"; - sha1 = "b79669bb42ecb409f83d583cad52ca17eaa1643f"; - }; - } - - { - name = "wrap_ansi___wrap_ansi_2.1.0.tgz"; - path = fetchurl { - name = "wrap_ansi___wrap_ansi_2.1.0.tgz"; - url = "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz"; - sha1 = "d8fc3d284dd05794fe84973caecdd1cf824fdd85"; - }; - } - - { - name = "wrappy___wrappy_1.0.2.tgz"; - path = fetchurl { - name = "wrappy___wrappy_1.0.2.tgz"; - url = "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz"; - sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"; - }; - } - - { - name = "xtend___xtend_4.0.1.tgz"; - path = fetchurl { - name = "xtend___xtend_4.0.1.tgz"; - url = "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz"; - sha1 = "a5c6d532be656e23db820efb943a1f04998d63af"; - }; - } - - { - name = "y18n___y18n_3.2.1.tgz"; - path = fetchurl { - name = "y18n___y18n_3.2.1.tgz"; - url = "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz"; - sha1 = "6d15fba884c08679c0d77e88e7759e811e07fa41"; - }; - } - - { - name = "yallist___yallist_2.1.2.tgz"; - path = fetchurl { - name = "yallist___yallist_2.1.2.tgz"; - url = "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz"; - sha1 = "1c11f9218f076089a47dd512f93c6699a6a81d52"; - }; - } - - { - name = "yallist___yallist_3.0.2.tgz"; - path = fetchurl { - name = "yallist___yallist_3.0.2.tgz"; - url = "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz"; - sha1 = "8452b4bb7e83c7c188d8041c1a837c773d6d8bb9"; - }; - } - - { - name = "yargs_parser___yargs_parser_4.2.1.tgz"; - path = fetchurl { - name = "yargs_parser___yargs_parser_4.2.1.tgz"; - url = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz"; - sha1 = "29cceac0dc4f03c6c87b4a9f217dd18c9f74871c"; - }; - } - - { - name = "yargs_parser___yargs_parser_5.0.0.tgz"; - path = fetchurl { - name = "yargs_parser___yargs_parser_5.0.0.tgz"; - url = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz"; - sha1 = "275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a"; - }; - } - - { - name = "yargs_parser___yargs_parser_7.0.0.tgz"; - path = fetchurl { - name = "yargs_parser___yargs_parser_7.0.0.tgz"; - url = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz"; - sha1 = "8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9"; - }; - } - - { - name = "yargs___yargs_6.6.0.tgz"; - path = fetchurl { - name = "yargs___yargs_6.6.0.tgz"; - url = "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz"; - sha1 = "782ec21ef403345f830a808ca3d513af56065208"; - }; - } - - { - name = "yargs___yargs_7.1.0.tgz"; - path = fetchurl { - name = "yargs___yargs_7.1.0.tgz"; - url = "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz"; - sha1 = "6ba318eb16961727f5d284f8ea003e8d6154d0c8"; - }; - } - - { - name = "yargs___yargs_8.0.2.tgz"; - path = fetchurl { - name = "yargs___yargs_8.0.2.tgz"; - url = "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz"; - sha1 = "6299a9055b1cefc969ff7e79c1d918dceb22c360"; - }; - } - - { - name = "yargs___yargs_3.10.0.tgz"; - path = fetchurl { - name = "yargs___yargs_3.10.0.tgz"; - url = "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz"; - sha1 = "f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"; - }; - } - ]; -} diff --git a/modules/private/websites/isabelle/aten_integration.nix b/modules/private/websites/isabelle/aten_integration.nix deleted file mode 100644 index c55ef92..0000000 --- a/modules/private/websites/isabelle/aten_integration.nix +++ /dev/null @@ -1,91 +0,0 @@ -{ lib, pkgs, config, ... }: -let - secrets = config.myEnv.websites.isabelle.aten_integration; - webRoot = "/var/lib/ftp/immae/aten/public"; - cfg = config.myServices.websites.isabelle.aten_integration; - pcfg = config.services.phpApplication; -in { - options.myServices.websites.isabelle.aten_integration.enable = lib.mkEnableOption "enable Aten's website in integration"; - - config = lib.mkIf cfg.enable { - services.phpApplication.apps.isabelle_aten_integration = { - websiteEnv = "integration"; - httpdUser = config.services.httpd.Inte.user; - httpdGroup = config.services.httpd.Inte.group; - httpdWatchFiles = [ - config.secrets.fullPaths."websites/isabelle/aten_integration" - ]; - inherit webRoot; - varDir = "/var/lib/ftp/immae/aten_var"; - app = "/var/lib/ftp/immae/aten"; - serviceDeps = [ "postgresql.service" ]; - preStartActions = [ - "APP_ENV=dev ./bin/console --env=dev cache:clear --no-warmup" - ]; - phpOpenbasedir = [ "/tmp" ]; - phpPool = { - "php_admin_value[upload_max_filesize]" = "20M"; - "php_admin_value[post_max_size]" = "20M"; - #"php_admin_flag[log_errors]" = "on"; - "pm" = "ondemand"; - "pm.max_children" = "5"; - "pm.process_idle_timeout" = "60"; - }; - phpEnv = { - SYMFONY_DEBUG_MODE = "\"yes\""; - }; - phpPackage = pkgs.php72; - }; - - secrets.keys."websites/isabelle/aten_integration" = { - user = config.services.httpd.Inte.user; - group = config.services.httpd.Inte.group; - permissions = "0400"; - text = let - # cf: - # https://secure.php.net/manual/fr/function.parse-url.php - # vendor/doctrine/dbal/lib/Doctrine/DBAL/DriverManager.php#parseDatabaseUrlQuery - psql_url = with secrets.postgresql; "pdo-pgsql://${user}:${password}@invalid:${port}/${database}?host=${socket}"; - in '' - SetEnv APP_ENV "dev" - SetEnv APP_SECRET "${secrets.secret}" - SetEnv DATABASE_URL "${psql_url}" - ''; - }; - services.websites.env.integration.vhostConfs.isabelle_aten_integration = { - certName = "integration"; - addToCerts = true; - hosts = [ "aten.ic.immae.dev" ]; - root = webRoot; - extraConfig = [ - '' - - SetHandler "proxy:unix:${pcfg.phpListenPaths.isabelle_aten_integration}|fcgi://localhost" - - - Include ${config.secrets.fullPaths."websites/isabelle/aten_integration"} - - - Use LDAPConnect - Require ldap-group cn=ic.immae.dev,cn=httpd,ou=services,dc=immae,dc=eu - ErrorDocument 401 "" - - - - Use LDAPConnect - Require ldap-group cn=ic.immae.dev,cn=httpd,ou=services,dc=immae,dc=eu - ErrorDocument 401 "" - - - - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride All - Require all granted - DirectoryIndex index.php - FallbackResource /index.php - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/isabelle/aten_production.nix b/modules/private/websites/isabelle/aten_production.nix deleted file mode 100644 index 928a815..0000000 --- a/modules/private/websites/isabelle/aten_production.nix +++ /dev/null @@ -1,90 +0,0 @@ -{ lib, pkgs, config, ... }: -let - secrets = config.myEnv.websites.isabelle.aten_production; - app = pkgs.callPackage ./aten_app { - composerEnv = pkgs.composerEnv.override { php = pkgs.php72; }; - environment = secrets.environment; - varDir = "/var/lib/isabelle_aten_production"; - }; - cfg = config.myServices.websites.isabelle.aten_production; - pcfg = config.services.phpApplication; -in { - options.myServices.websites.isabelle.aten_production.enable = lib.mkEnableOption "enable Aten's website in production"; - - config = lib.mkIf cfg.enable { - services.webstats.sites = [ { name = "aten.pro"; } ]; - services.phpApplication.apps.isabelle_aten_production = { - websiteEnv = "production"; - httpdUser = config.services.httpd.Prod.user; - httpdGroup = config.services.httpd.Prod.group; - httpdWatchFiles = [ - config.secrets.fullPaths."websites/isabelle/aten_production" - ]; - inherit (app) webRoot varDir; - inherit app; - serviceDeps = [ "postgresql.service" ]; - preStartActions = [ - "APP_ENV=${app.environment} ./bin/console --env=${app.environment} cache:clear --no-warmup" - ]; - phpOpenbasedir = [ "/tmp" ]; - phpPool = { - "php_admin_value[upload_max_filesize]" = "20M"; - "php_admin_value[post_max_size]" = "20M"; - #"php_admin_flag[log_errors]" = "on"; - "pm" = "dynamic"; - "pm.max_children" = "20"; - "pm.start_servers" = "2"; - "pm.min_spare_servers" = "1"; - "pm.max_spare_servers" = "3"; - }; - phpPackage = pkgs.php72; - }; - - secrets.keys."websites/isabelle/aten_production" = { - user = config.services.httpd.Prod.user; - group = config.services.httpd.Prod.group; - permissions = "0400"; - text = let - # cf: - # https://secure.php.net/manual/fr/function.parse-url.php - # vendor/doctrine/dbal/lib/Doctrine/DBAL/DriverManager.php#parseDatabaseUrlQuery - psql_url = with secrets.postgresql; "pdo-pgsql://${user}:${password}@invalid:${port}/${database}?host=${socket}"; - in '' - SetEnv APP_ENV "${app.environment}" - SetEnv APP_SECRET "${secrets.secret}" - SetEnv DATABASE_URL "${psql_url}" - ''; - }; - services.websites.env.production.vhostConfs.isabelle_aten_production = { - certName = "isabelle"; - certMainHost = "aten.pro"; - hosts = [ "aten.pro" "www.aten.pro" ]; - root = app.webRoot; - extraConfig = [ - '' - - SetHandler "proxy:unix:${pcfg.phpListenPaths.isabelle_aten_production}|fcgi://localhost" - - - Include ${config.secrets.fullPaths."websites/isabelle/aten_production"} - - Use Stats aten.pro - - - Use LDAPConnect - Require ldap-group cn=aten.pro,cn=httpd,ou=services,dc=immae,dc=eu - ErrorDocument 401 "" - - - - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride All - Require all granted - DirectoryIndex index.php - FallbackResource /index.php - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/isabelle/config/chmod.php b/modules/private/websites/isabelle/config/chmod.php deleted file mode 100644 index aae16cd..0000000 --- a/modules/private/websites/isabelle/config/chmod.php +++ /dev/null @@ -1,4 +0,0 @@ - \ No newline at end of file diff --git a/modules/private/websites/isabelle/config/connect.php b/modules/private/websites/isabelle/config/connect.php deleted file mode 100644 index 18b0933..0000000 --- a/modules/private/websites/isabelle/config/connect.php +++ /dev/null @@ -1,15 +0,0 @@ - diff --git a/modules/private/websites/isabelle/config/ldap.php b/modules/private/websites/isabelle/config/ldap.php deleted file mode 100644 index 825b7ed..0000000 --- a/modules/private/websites/isabelle/config/ldap.php +++ /dev/null @@ -1,9 +0,0 @@ - array('sAMAccountName','uid','login','userid','cn','sn'),'nom' => 'cn','email' => 'mail','bio' => 'description',); -$GLOBALS['ldap_search'] = getenv("SPIP_LDAP_SEARCH"); -?> diff --git a/modules/private/websites/isabelle/iridologie.nix b/modules/private/websites/isabelle/iridologie.nix deleted file mode 100644 index cd733c1..0000000 --- a/modules/private/websites/isabelle/iridologie.nix +++ /dev/null @@ -1,113 +0,0 @@ -{ lib, pkgs, config, ... }: -let - icfg = config.myEnv.websites.isabelle.iridologie; - cfg = config.myServices.websites.isabelle.iridologie; - app = pkgs.callPackage ./iridologie_app { - inherit (icfg) environment; - inherit (pkgs.webapps) spip; - varDir = "/var/lib/isabelle_iridologie"; - }; - - apacheUser = config.services.httpd.Prod.user; - apacheGroup = config.services.httpd.Prod.group; - secretsPath = config.secrets.fullPaths."websites/isabelle/iridologie"; -in { - options.myServices.websites.isabelle.iridologie.enable = lib.mkEnableOption "enable Iridologie's website"; - - config = lib.mkIf cfg.enable { - secrets.keys."websites/isabelle/iridologie" = { - user = apacheUser; - group = apacheGroup; - permissions = "0400"; - text = '' - SetEnv SPIP_CONFIG_DIR "${./config}" - SetEnv SPIP_VAR_DIR "${app.varDir}" - SetEnv SPIP_SITE "iridologie-${app.environment}" - SetEnv SPIP_LDAP_BASE "dc=immae,dc=eu" - SetEnv SPIP_LDAP_HOST "ldaps://ldap.immae.eu" - SetEnv SPIP_LDAP_SEARCH_DN "${icfg.ldap.dn}" - SetEnv SPIP_LDAP_SEARCH_PW "${icfg.ldap.password}" - SetEnv SPIP_LDAP_SEARCH "${icfg.ldap.filter}" - SetEnv SPIP_MYSQL_HOST "${icfg.mysql.host}" - SetEnv SPIP_MYSQL_PORT "${icfg.mysql.port}" - SetEnv SPIP_MYSQL_DB "${icfg.mysql.database}" - SetEnv SPIP_MYSQL_USER "${icfg.mysql.user}" - SetEnv SPIP_MYSQL_PASSWORD "${icfg.mysql.password}" - ''; - }; - services.webstats.sites = [ { name = "iridologie.icommandeur.org"; } ]; - - systemd.services.phpfpm-isabelle_iridologie.after = lib.mkAfter [ "mysql.service" ]; - systemd.services.phpfpm-isabelle_iridologie.wants = [ "mysql.service" ]; - services.phpfpm.pools.isabelle_iridologie = { - user = config.services.httpd.Prod.user; - group = config.services.httpd.Prod.group; - settings = { - "listen.owner" = "${apacheUser}"; - "listen.group" = "${apacheGroup}"; - "php_admin_value[upload_max_filesize]" = "20M"; - "php_admin_value[post_max_size]" = "20M"; - #"php_admin_flag[log_errors]" = "on"; - "php_admin_value[open_basedir]" = "${app.spipConfig}:${./config}:${app}:${app.varDir}:/tmp"; - "php_admin_value[session.save_path]" = "${app.varDir}/phpSessions"; - "pm" = "dynamic"; - "pm.max_children" = "20"; - "pm.start_servers" = "2"; - "pm.min_spare_servers" = "1"; - "pm.max_spare_servers" = "3"; - }; - phpPackage = pkgs.php72; - }; - system.activationScripts.isabelle_iridologie = { - deps = [ "wrappers" ]; - text = '' - install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${app.varDir} ${app.varDir}/IMG ${app.varDir}/tmp ${app.varDir}/local - install -m 0750 -o ${apacheUser} -g ${apacheGroup} -d ${app.varDir}/phpSessions - ''; - }; - services.websites.env.production.modules = [ "proxy_fcgi" ]; - services.websites.env.production.vhostConfs.isabelle_iridologie = { - certName = "isabelle"; - addToCerts = true; - hosts = [ "iridologie.icommandeur.org" "icommandeur.org" "www.icommandeur.org" ]; - root = app.webRoot; - extraConfig = [ - '' - RewriteEngine On - RewriteCond "%{HTTP_HOST}" "!^iridologie\.icommandeur\.org$" [NC] - RewriteRule ^(.+)$ https://iridologie.icommandeur.org$1 [R=302,L] - - Include ${secretsPath} - - RewriteEngine On - - - SetHandler "proxy:unix:${config.services.phpfpm.pools.isabelle_iridologie.socket}|fcgi://localhost" - - - - DirectoryIndex index.php index.htm index.html - Options -Indexes +FollowSymLinks +MultiViews +Includes - Include ${app.webRoot}/htaccess.txt - - AllowOverride AuthConfig FileInfo Limit - Require all granted - - - - Require all denied - - - - Require all denied - - - Use Stats iridologie.icommandeur.org - '' - ]; - }; - services.websites.env.production.watchPaths = [ - secretsPath - ]; - }; -} diff --git a/modules/private/websites/isabelle/iridologie_app/default.nix b/modules/private/websites/isabelle/iridologie_app/default.nix deleted file mode 100644 index edb7eef..0000000 --- a/modules/private/websites/isabelle/iridologie_app/default.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ environment ? "prod" -, varDir ? "/var/lib/iridologie_${environment}" -, spip, stdenv, sassc, sources }: -let - siteDir = stdenv.mkDerivation rec { - version = sources.websites-isabelle-iridologie.version; - pname = "iridologie"; - name = "${pname}-${version}"; - src = sources.websites-isabelle-iridologie; - installPhase = '' - cp -a . $out - ''; - }; -in -spip.override { - ldap = true; - siteName = "iridologie"; - inherit environment siteDir varDir; -} diff --git a/modules/private/websites/jerome/naturaloutil.nix b/modules/private/websites/jerome/naturaloutil.nix deleted file mode 100644 index 0974ce3..0000000 --- a/modules/private/websites/jerome/naturaloutil.nix +++ /dev/null @@ -1,97 +0,0 @@ -{ lib, pkgs, config, ... }: -let - adminer = pkgs.callPackage ../commons/adminer.nix { inherit config; }; - cfg = config.myServices.websites.jerome.naturaloutil; - varDir = "/var/lib/ftp/jerome"; - env = config.myEnv.websites.jerome; - apacheUser = config.services.httpd.Prod.user; - apacheGroup = config.services.httpd.Prod.group; - secretsPath = config.secrets.fullPaths."websites/jerome/naturaloutil"; -in { - options.myServices.websites.jerome.naturaloutil.enable = lib.mkEnableOption "enable Jerome Naturaloutil's website"; - - config = lib.mkIf cfg.enable { - services.webstats.sites = [ { name = "naturaloutil.immae.eu"; } ]; - - security.acme.certs."ftp".extraDomains."naturaloutil.immae.eu" = null; - - secrets.keys."websites/jerome/naturaloutil" = { - user = apacheUser; - group = apacheGroup; - permissions = "0400"; - text = '' - ssl_set(NULL, NULL, "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt", NULL, NULL); - '' else ""} - $database = connect_db($db, $mysql_server, $mysql_base, $mysql_user, $mysql_password); - ?> - ''; - }; - system.activationScripts.jerome_naturaloutil = { - deps = [ "httpd" ]; - text = '' - install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/php/sessions/jerome_naturaloutil - ''; - }; - systemd.services.phpfpm-jerome_naturaloutil.after = lib.mkAfter [ "mysql.service" ]; - systemd.services.phpfpm-jerome_naturaloutil.wants = [ "mysql.service" ]; - services.phpfpm.pools.jerome_naturaloutil = { - user = apacheUser; - group = apacheGroup; - settings = { - "listen.owner" = apacheUser; - "listen.group" = apacheGroup; - - "pm" = "ondemand"; - "pm.max_children" = "5"; - "pm.process_idle_timeout" = "60"; - - "php_admin_value[open_basedir]" = "/var/lib/php/sessions/jerome_naturaloutil:${secretsPath}:${varDir}:/tmp"; - "php_admin_value[session.save_path]" = "/var/lib/php/sessions/jerome_naturaloutil"; - }; - phpEnv = { - BDD_CONNECT = secretsPath; - }; - phpPackage = pkgs.php72; - }; - services.websites.env.production.modules = adminer.apache.modules ++ [ "proxy_fcgi" ]; - services.websites.env.production.vhostConfs.jerome_naturaloutil = { - certName = "jerome"; - certMainHost = "naturaloutil.immae.eu"; - hosts = ["naturaloutil.immae.eu" ]; - root = varDir; - extraConfig = [ - (adminer.apache.vhostConf null) - '' - Use Stats naturaloutil.immae.eu - ServerAdmin ${env.server_admin} - ErrorLog "${varDir}/logs/error_log" - CustomLog "${varDir}/logs/access_log" combined - - - SetHandler "proxy:unix:${config.services.phpfpm.pools.jerome_naturaloutil.socket}|fcgi://localhost" - - - - AllowOverride None - Require all denied - - - DirectoryIndex index.php index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride None - Require all granted - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/leila/production.nix b/modules/private/websites/leila/production.nix deleted file mode 100644 index 8385bc7..0000000 --- a/modules/private/websites/leila/production.nix +++ /dev/null @@ -1,114 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.websites.leila.production; - varDir = "/var/lib/ftp/leila"; - apacheUser = config.services.httpd.Prod.user; - apacheGroup = config.services.httpd.Prod.group; -in { - options.myServices.websites.leila.production.enable = lib.mkEnableOption "enable Leila's websites in production"; - - config = lib.mkIf cfg.enable { - services.phpfpm.pools.leila = { - user = apacheUser; - group = apacheGroup; - settings = { - "listen.owner" = apacheUser; - "listen.group" = apacheGroup; - - "pm" = "ondemand"; - "pm.max_children" = "5"; - "pm.process_idle_timeout" = "60"; - - "php_admin_value[open_basedir]" = "${varDir}:/tmp"; - "php_admin_value[max_execution_time]" = "1800"; - }; - phpOptions = config.services.phpfpm.phpOptions + '' - disable_functions = "mail" - ''; - phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [ all.imagick ]); - phpEnv = { - PATH = lib.makeBinPath [ pkgs.imagemagick ]; - }; - }; - - services.webstats.sites = [ - { name = "leila.bouya.org"; } - { name = "chorale.leila.bouya.org"; } - { name = "syrwennecreation.bouya.org"; } - ]; - - services.websites.env.production.modules = [ "proxy_fcgi" ]; - services.websites.env.production.vhostConfs.leila_chorale = { - certName = "leila"; - addToCerts = true; - hosts = [ "chorale.leila.bouya.org" "chorale-vocanta.fr.nf" "www.chorale-vocanta.fr.nf" ]; - root = "${varDir}/Chorale"; - extraConfig = [ - '' - Use Stats chorale.leila.bouya.org - - DirectoryIndex index.php index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride None - - Use LDAPConnect - Require ldap-group cn=chorale.leila.bouya.org,cn=httpd,ou=services,dc=immae,dc=eu - - - SetHandler "proxy:unix:${config.services.phpfpm.pools.leila.socket}|fcgi://localhost" - - - '' - ]; - }; - services.websites.env.production.vhostConfs.leila_syrwenne = { - certName = "leila"; - addToCerts = true; - hosts = [ "syrwennecreation.bouya.org" ]; - root = "${varDir}/Syrwennecreation"; - extraConfig = [ - '' - Use Stats syrwennecreation.bouya.org - - DirectoryIndex index.php index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride None - - - SetHandler "proxy:unix:${config.services.phpfpm.pools.leila.socket}|fcgi://localhost" - - - '' - ]; - }; - services.websites.env.production.vhostConfs.leila = { - certName = "leila"; - certMainHost = "leila.bouya.org"; - hosts = [ "leila.bouya.org" ]; - root = varDir; - extraConfig = [ - '' - Use Stats leila.bouya.org - - DirectoryIndex index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride None - - Use LDAPConnect - Require ldap-group cn=chorale.leila.bouya.org,cn=httpd,ou=services,dc=immae,dc=eu - - - SetHandler "proxy:unix:${config.services.phpfpm.pools.leila.socket}|fcgi://localhost" - - - - DirectoryIndex index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride None - Require all granted - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/ludivine/app/default.nix b/modules/private/websites/ludivine/app/default.nix deleted file mode 100644 index 323b6e0..0000000 --- a/modules/private/websites/ludivine/app/default.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ environment, varDir, secretsPath -, composerEnv, fetchurl, fetchgit, imagemagick, sass, ruby, sources }: -let - app = composerEnv.buildPackage ( - import ./php-packages.nix { inherit composerEnv fetchurl fetchgit; } // - rec { - name = "${pname}-${version}"; - pname = "ludivinecassal"; - version = sources.websites-ludivine-app.version; - src = sources.websites-ludivine-app; - noDev = (environment == "prod"); - preInstall = '' - export SYMFONY_ENV="${environment}" - cp app/config/parameters.yml.dist app/config/parameters.yml - cat >> app/config/parameters.yml < - SetHandler "proxy:unix:${pcfg.phpListenPaths.ludivine_integration}|fcgi://localhost" - - - - Use LDAPConnect - Require ldap-group cn=lc.immae.dev,cn=httpd,ou=services,dc=immae,dc=eu - ErrorDocument 401 "" - - - - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride None - Require all granted - - DirectoryIndex app_dev.php - - - Options -MultiViews - - - - RewriteEngine On - - RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ - RewriteRule ^(.*) - [E=BASE:%1] - - # Maintenance script - RewriteCond %{DOCUMENT_ROOT}/maintenance.php -f - RewriteCond %{SCRIPT_FILENAME} !maintenance.php - RewriteRule ^.*$ %{ENV:BASE}/maintenance.php [R=503,L] - ErrorDocument 503 /maintenance.php - - # Sets the HTTP_AUTHORIZATION header removed by Apache - RewriteCond %{HTTP:Authorization} . - RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] - - RewriteCond %{ENV:REDIRECT_STATUS} ^$ - RewriteRule ^app_dev\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L] - - # If the requested filename exists, simply serve it. - # We only want to let Apache serve files and not directories. - RewriteCond %{REQUEST_FILENAME} -f - RewriteRule ^ - [L] - - # Rewrite all other queries to the front controller. - RewriteRule ^ %{ENV:BASE}/app_dev.php [L] - - - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/ludivine/production.nix b/modules/private/websites/ludivine/production.nix deleted file mode 100644 index 7a18b88..0000000 --- a/modules/private/websites/ludivine/production.nix +++ /dev/null @@ -1,116 +0,0 @@ -{ lib, pkgs, config, ... }: -let - secrets = config.myEnv.websites.ludivine.production; - app = pkgs.callPackage ./app { - composerEnv = pkgs.composerEnv.override { php = pkgs.php72; }; - environment = secrets.environment; - varDir = "/var/lib/ludivine_production"; - secretsPath = config.secrets.fullPaths."websites/ludivine/production"; - }; - pcfg = config.services.phpApplication; - cfg = config.myServices.websites.ludivine.production; -in { - options.myServices.websites.ludivine.production.enable = lib.mkEnableOption "enable Ludivine's website in production"; - - config = lib.mkIf cfg.enable { - services.webstats.sites = [ { name = "ludivinecassal.com"; } ]; - services.phpApplication.apps.ludivine_production = { - websiteEnv = "production"; - httpdUser = config.services.httpd.Prod.user; - httpdGroup = config.services.httpd.Prod.group; - inherit (app) webRoot varDir; - varDirPaths = { - "tmp" = "0700"; - }; - inherit app; - serviceDeps = [ "mysql.service" ]; - preStartActions = [ - "./bin/console --env=${app.environment} cache:clear --no-warmup" - ]; - phpOpenbasedir = [ "/tmp" ]; - phpPool = { - "php_admin_value[upload_max_filesize]" = "20M"; - "php_admin_value[post_max_size]" = "20M"; - #"php_admin_flag[log_errors]" = "on"; - "pm" = "dynamic"; - "pm.max_children" = "20"; - "pm.start_servers" = "2"; - "pm.min_spare_servers" = "1"; - "pm.max_spare_servers" = "3"; - }; - phpWatchFiles = [ - config.secrets.fullPaths."websites/ludivine/production" - ]; - phpEnv = { - PATH = lib.makeBinPath [ - # below ones don't need to be in the PATH but they’re used in - # secrets - pkgs.imagemagick pkgs.sass pkgs.ruby - ]; - }; - phpPackage = pkgs.php72; - }; - - secrets.keys."websites/ludivine/production" = { - user = config.services.httpd.Prod.user; - group = config.services.httpd.Prod.group; - permissions = "0400"; - text = '' - # This file is auto-generated during the composer install - parameters: - database_host: ${secrets.mysql.host} - database_port: ${secrets.mysql.port} - database_name: ${secrets.mysql.database} - database_user: ${secrets.mysql.user} - database_password: ${secrets.mysql.password} - database_server_version: ${pkgs.mariadb.mysqlVersion} - mailer_transport: smtp - mailer_host: 127.0.0.1 - mailer_user: null - mailer_password: null - secret: ${secrets.secret} - ldap_host: ldap.immae.eu - ldap_port: 636 - ldap_version: 3 - ldap_ssl: true - ldap_tls: false - ldap_user_bind: 'uid={username},ou=users,dc=immae,dc=eu' - ldap_base_dn: 'dc=immae,dc=eu' - ldap_search_dn: '${secrets.ldap.dn}' - ldap_search_password: '${secrets.ldap.password}' - ldap_search_filter: '${secrets.ldap.filter}' - leapt_im: - binary_path: ${pkgs.imagemagick}/bin - assetic: - sass: ${pkgs.sass}/bin/sass - ruby: ${pkgs.ruby}/bin/ruby - ''; - }; - - services.websites.env.production.vhostConfs.ludivine_production = { - certName = "ludivine"; - certMainHost = "ludivinecassal.com"; - hosts = ["ludivinecassal.com" "www.ludivinecassal.com" ]; - root = app.webRoot; - extraConfig = [ - '' - RewriteEngine on - RewriteCond "%{HTTP_HOST}" "!^ludivinecassal\.com$" [NC] - RewriteRule ^(.+)$ https://ludivinecassal.com$1 [R=302,L] - - - SetHandler "proxy:unix:${pcfg.phpListenPaths.ludivine_production}|fcgi://localhost" - - - Use Stats ludivinecassal.com - - - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride All - Require all granted - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/moomin.txt b/modules/private/websites/moomin.txt deleted file mode 100644 index 036fb1c..0000000 --- a/modules/private/websites/moomin.txt +++ /dev/null @@ -1,16 +0,0 @@ -⠀⠀⠀⠀⠀⠀⠀⢠⢦⡀⠀⡰⣩⠃ -⠀⠀⠀⠀⠀⠀⠀⠘⣄⠙⠍⠁⠙⠦⡀ -⠀⠀⠀⠀⠀⠀⠀⠀⡎⠀⠀⡠⠄⠔⠊⠉⠒⠒⠒⢄ -⠀⠀⠀⠀⠀⠀⠀⢀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢈⠆ -⠀⠀⢠⢤⠜⡆⠀⢸⠀⠰⣄⠀⠀⠀⠀⠀⠀⠀⣠⠎ -⠀⠀⠱⠤⡁⠈⠑⠇⠀⠀⠀⠉⠒⠤⠤⠄⢖⠊⠀⡐⠧⣄⣀ -⠀⠀⠀⠀⠘⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⡉⠀⣀⣨⡷ -⠀⠀⠀⠀⠀⠈⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢱⠜⠁ -⠀⠀⠀⠀⠀⠀⢇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣸⠱⡀ -⠀⠀⠀⠀⠀⠀⠸⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠁⠀⣣ -⠀⠀⠀⠀⠀⠀⠀⠑⣄⠀⠀⠀⠀⠀⠀⠀⢀⣠⣀⠴⠊⠁ -⠰⢍⢒⢄⠀⠀⠀⠀⢸⢳⢆⠀⠀⠀⠰⡖⠋⠁ -⠀⠳⠴⣙⢄⠀⢀⡠⣣⠃⠈⠑⢤⡄⠀⡸⠂ -⠀⠀⠀⠀⠑⠋⠓⠊⠁⠀⠀⠀⠓⠒⠉ -Credentials: https://twitter.com/thingskatedid/status/1278274012754309120 -Credentials: https://gist.github.com/katef/09581d7c84eddf784508fa430f6ef47a diff --git a/modules/private/websites/nassime/production.nix b/modules/private/websites/nassime/production.nix deleted file mode 100644 index 1179351..0000000 --- a/modules/private/websites/nassime/production.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.websites.nassime.production; - varDir = "/var/lib/ftp/nassime"; - env = config.myEnv.websites.nassime; - domain = "nassime.bouya.org"; -in { - options.myServices.websites.nassime.production.enable = lib.mkEnableOption "enable Nassime's website"; - - config = lib.mkIf cfg.enable { - services.webstats.sites = [ { name = domain; } ]; - - security.acme.certs."ftp".extraDomains."${domain}" = null; - - services.websites.env.production.vhostConfs.nassime = { - certName = "nassime"; - certMainHost = domain; - hosts = [ domain ]; - root = varDir; - extraConfig = [ - '' - Use Stats ${domain} - ServerAdmin ${env.server_admin} - - - DirectoryIndex index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride None - Require all granted - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/nath/villon.nix b/modules/private/websites/nath/villon.nix deleted file mode 100644 index 57a1df5..0000000 --- a/modules/private/websites/nath/villon.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.websites.nath.villon; - varDir = "/var/lib/ftp/nath"; - env = config.myEnv.websites.nath; - domain = "sntvillon.immae.eu"; - apacheUser = config.services.httpd.Prod.user; - apacheGroup = config.services.httpd.Prod.group; -in { - options.myServices.websites.nath.villon.enable = lib.mkEnableOption "enable Nath's website"; - - config = lib.mkIf cfg.enable { - services.webstats.sites = [ { name = domain; } ]; - - system.activationScripts.nath_villon = { - deps = [ "users" ]; - text = '' - install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${varDir} - ''; - }; - security.acme.certs."ftp".extraDomains."${domain}" = null; - - services.websites.env.production.vhostConfs.nath_villon = { - certName = "nath"; - certMainHost = domain; - hosts = [ domain ]; - root = varDir; - extraConfig = [ - '' - Use Stats ${domain} - - - DirectoryIndex index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride None - Require all granted - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/papa/maison_bbc.nix b/modules/private/websites/papa/maison_bbc.nix deleted file mode 100644 index 3eb736e..0000000 --- a/modules/private/websites/papa/maison_bbc.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ lib, config, ... }: -let - cfg = config.myServices.websites.papa.maison_bbc; -in { - options.myServices.websites.papa.maison_bbc.enable = lib.mkEnableOption "enable Papa Maison bbc website"; - - config = lib.mkIf cfg.enable { - services.webstats.sites = [ { name = "maison.bbc.bouya.org"; } ]; - - services.websites.env.production.vhostConfs.papa_maison_bbc = { - certName = "papa"; - addToCerts = true; - hosts = [ "maison.bbc.bouya.org" ]; - root = ./maison_bbc_static; - extraConfig = [ - '' - ErrorDocument 404 /index.html - - DirectoryIndex index.htm index.html - AllowOverride None - Require all granted - - '' - ]; - }; - }; -} - diff --git a/modules/private/websites/papa/maison_bbc_static/data.json b/modules/private/websites/papa/maison_bbc_static/data.json deleted file mode 100644 index 1784d27..0000000 --- a/modules/private/websites/papa/maison_bbc_static/data.json +++ /dev/null @@ -1,4101 +0,0 @@ -{ - "mean_consumption": { - "data": [ - { - "x": "2010-01-01 00:00:00", - "y": 0 - }, - { - "x": "2012-06-01 00:00:00", - "y": 0.3 - }, - { - "x": "2012-07-01 00:00:00", - "y": 0.3 - }, - { - "x": "2012-08-01 00:00:00", - "y": 0.5 - }, - { - "x": "2012-09-01 00:00:00", - "y": 0.4 - }, - { - "x": "2012-10-01 00:00:00", - "y": 0.4 - }, - { - "x": "2012-11-01 00:00:00", - "y": 0.5 - }, - { - "x": "2012-12-01 00:00:00", - "y": 0.5 - }, - { - "x": "2013-01-01 00:00:00", - "y": 0.5 - }, - { - "x": "2013-02-01 00:00:00", - "y": 0.4 - }, - { - "x": "2013-03-01 00:00:00", - "y": 0.6 - }, - { - "x": "2013-04-01 00:00:00", - "y": 0.5 - }, - { - "x": "2013-05-01 00:00:00", - "y": 0.5 - }, - { - "x": "2013-06-01 00:00:00", - "y": 0.4 - }, - { - "x": "2013-07-01 00:00:00", - "y": 0.5 - }, - { - "x": "2013-08-01 00:00:00", - "y": 0.4 - }, - { - "x": "2013-09-01 00:00:00", - "y": 0.5 - }, - { - "x": "2013-10-01 00:00:00", - "y": 0.5 - }, - { - "x": "2013-11-01 00:00:00", - "y": 0.6 - }, - { - "x": "2013-12-01 00:00:00", - "y": 0.6 - }, - { - "x": "2014-01-01 00:00:00", - "y": 0.6 - }, - { - "x": "2014-02-01 00:00:00", - "y": 0.5 - }, - { - "x": "2014-03-01 00:00:00", - "y": 0.6 - }, - { - "x": "2014-04-01 00:00:00", - "y": 0.5 - }, - { - "x": "2014-05-01 00:00:00", - "y": 0.6 - }, - { - "x": "2014-10-01 00:00:00", - "y": 0.7 - }, - { - "x": "2014-12-01 00:00:00", - "y": 8.1 - }, - { - "x": "2015-01-01 00:00:00", - "y": 8.8 - }, - { - "x": "2015-02-01 00:00:00", - "y": 8.2 - }, - { - "x": "2015-03-01 00:00:00", - "y": 7.2 - }, - { - "x": "2015-04-01 00:00:00", - "y": 1.2 - }, - { - "x": "2015-05-01 00:00:00", - "y": 0.6 - }, - { - "x": "2015-06-01 00:00:00", - "y": 0.6 - }, - { - "x": "2015-07-01 00:00:00", - "y": 0.5 - }, - { - "x": "2015-08-01 00:00:00", - "y": 0.6 - }, - { - "x": "2015-09-01 00:00:00", - "y": 0.5 - }, - { - "x": "2016-02-01 00:00:00", - "y": 0 - }, - { - "x": "2016-03-01 00:00:00", - "y": 0 - }, - { - "x": "2016-04-01 00:00:00", - "y": 0 - }, - { - "x": "2016-05-01 00:00:00", - "y": 0 - }, - { - "x": "2016-06-01 00:00:00", - "y": 0 - }, - { - "x": "2016-07-01 00:00:00", - "y": 0 - }, - { - "x": "2016-08-01 00:00:00", - "y": 0 - }, - { - "x": "2016-09-01 00:00:00", - "y": 0 - }, - { - "x": "2017-04-01 00:00:00", - "y": 0.4 - }, - { - "x": "2017-05-01 00:00:00", - "y": 0.5 - }, - { - "x": "2017-06-01 00:00:00", - "y": 0.4 - }, - { - "x": "2017-07-01 00:00:00", - "y": 0.6 - }, - { - "x": "2017-08-01 00:00:00", - "y": 0.4 - }, - { - "x": "2017-09-01 00:00:00", - "y": 0.5 - }, - { - "x": "2017-10-01 00:00:00", - "y": 0.4 - }, - { - "x": "2017-11-01 00:00:00", - "y": 0.5 - }, - { - "x": "2017-12-01 00:00:00", - "y": 0.6 - }, - { - "x": "2018-01-01 00:00:00", - "y": 0.6 - }, - { - "x": "2018-02-01 00:00:00", - "y": 0.6 - }, - { - "x": "2018-03-01 00:00:00", - "y": 0.6 - }, - { - "x": "2018-04-01 00:00:00", - "y": 0.5 - }, - { - "x": "2018-05-01 00:00:00", - "y": 0.4 - }, - { - "x": "2018-06-01 00:00:00", - "y": 0.5 - }, - { - "x": "2018-07-01 00:00:00", - "y": 0.5 - }, - { - "x": "2018-08-01 00:00:00", - "y": 0.8 - }, - { - "x": "2019-03-01 00:00:00", - "y": 0.6 - }, - { - "x": "2019-04-01 00:00:00", - "y": 0.6 - }, - { - "x": "2019-05-01 00:00:00", - "y": 0.4 - }, - { - "x": "2019-06-01 00:00:00", - "y": 0.4 - }, - { - "x": "2019-07-01 00:00:00", - "y": 0.4 - }, - { - "x": "2019-08-01 00:00:00", - "y": 0.6 - }, - { - "x": "2020-03-01 00:00:00", - "y": 0.5 - }, - { - "x": "2020-04-01 00:00:00", - "y": 0.5 - }, - { - "x": "2020-05-01 00:00:00", - "y": 0.5 - } - ], - "name": "Consommation moyenne", - "unit": "kW", - "hide": false - }, - "total_consumption": { - "data": [ - { - "x": "2010-01-01 00:00:00", - "y": 74.8 - }, - { - "x": "2012-08-01 00:00:00", - "y": 629 - }, - { - "x": "2012-09-01 00:00:00", - "y": 859.3 - }, - { - "x": "2012-10-01 00:00:00", - "y": 1150.7 - }, - { - "x": "2012-11-01 00:00:00", - "y": 1440.1 - }, - { - "x": "2012-12-01 00:00:00", - "y": 1829.6 - }, - { - "x": "2013-01-01 00:00:00", - "y": 2218.6 - }, - { - "x": "2013-02-01 00:00:00", - "y": 468.7 - }, - { - "x": "2013-03-01 00:00:00", - "y": 2924.1 - }, - { - "x": "2013-04-01 00:00:00", - "y": -3217.1 - }, - { - "x": "2013-05-01 00:00:00", - "y": -2847.2 - }, - { - "x": "2013-06-01 00:00:00", - "y": 224.6 - }, - { - "x": "2013-07-01 00:00:00", - "y": 536.5 - }, - { - "x": "2013-08-01 00:00:00", - "y": 882 - }, - { - "x": "2013-09-01 00:00:00", - "y": 1207.7 - }, - { - "x": "2013-10-01 00:00:00", - "y": 1565.4 - }, - { - "x": "2013-11-01 00:00:00", - "y": 1924.1 - }, - { - "x": "2013-12-01 00:00:00", - "y": 2323.5 - }, - { - "x": "2014-01-01 00:00:00", - "y": 2754.8 - }, - { - "x": "2014-02-01 00:00:00", - "y": 3176.7 - }, - { - "x": "2014-03-01 00:00:00", - "y": 3530.1 - }, - { - "x": "2014-04-01 00:00:00", - "y": 3975 - }, - { - "x": "2014-05-01 00:00:00", - "y": 4364.8 - }, - { - "x": "2014-10-01 00:00:00", - "y": 1485.8 - }, - { - "x": "2014-12-01 00:00:00", - "y": 9.3 - }, - { - "x": "2015-01-01 00:00:00", - "y": 6 - }, - { - "x": "2015-02-01 00:00:00", - "y": 10 - }, - { - "x": "2015-03-01 00:00:00", - "y": 10.9 - }, - { - "x": "2015-04-01 00:00:00", - "y": 13.1 - }, - { - "x": "2015-05-01 00:00:00", - "y": 1.6 - }, - { - "x": "2015-06-01 00:00:00", - "y": 2.1 - }, - { - "x": "2015-07-01 00:00:00", - "y": 2.8 - }, - { - "x": "2015-08-01 00:00:00", - "y": 2.2 - }, - { - "x": "2015-09-01 00:00:00", - "y": 2.8 - }, - { - "x": "2016-02-01 00:00:00", - "y": 0 - }, - { - "x": "2016-03-01 00:00:00", - "y": 2.1 - }, - { - "x": "2016-04-01 00:00:00", - "y": 43.2 - }, - { - "x": "2016-05-01 00:00:00", - "y": 78.6 - }, - { - "x": "2016-06-01 00:00:00", - "y": 118.2 - }, - { - "x": "2016-07-01 00:00:00", - "y": 155.2 - }, - { - "x": "2016-08-01 00:00:00", - "y": 203.1 - }, - { - "x": "2016-09-01 00:00:00", - "y": 213.7 - }, - { - "x": "2017-04-01 00:00:00", - "y": 4567.8 - }, - { - "x": "2017-05-01 00:00:00", - "y": 46.2 - }, - { - "x": "2017-06-01 00:00:00", - "y": 404.3 - }, - { - "x": "2017-07-01 00:00:00", - "y": 711.3 - }, - { - "x": "2017-08-01 00:00:00", - "y": 1098.7 - }, - { - "x": "2017-09-01 00:00:00", - "y": 1365.4 - }, - { - "x": "2017-10-01 00:00:00", - "y": 1705.3 - }, - { - "x": "2017-11-01 00:00:00", - "y": 2041.5 - }, - { - "x": "2017-12-01 00:00:00", - "y": 2400.8 - }, - { - "x": "2018-01-01 00:00:00", - "y": 2816.8 - }, - { - "x": "2018-02-01 00:00:00", - "y": 3236.5 - }, - { - "x": "2018-03-01 00:00:00", - "y": 3610 - }, - { - "x": "2018-04-01 00:00:00", - "y": 4047.8 - }, - { - "x": "2018-05-01 00:00:00", - "y": 4447.2 - }, - { - "x": "2018-06-01 00:00:00", - "y": 4704.1 - }, - { - "x": "2018-07-01 00:00:00", - "y": 260.9 - }, - { - "x": "2018-08-01 00:00:00", - "y": 502.7 - }, - { - "x": "2019-03-01 00:00:00", - "y": 896.9 - }, - { - "x": "2019-04-01 00:00:00", - "y": 1268.4 - }, - { - "x": "2019-05-01 00:00:00", - "y": 1625.5 - }, - { - "x": "2019-06-01 00:00:00", - "y": 1944.8 - }, - { - "x": "2019-07-01 00:00:00", - "y": 2256.8 - }, - { - "x": "2019-08-01 00:00:00", - "y": 2714.7 - }, - { - "x": "2020-03-01 00:00:00", - "y": 314.9 - }, - { - "x": "2020-04-01 00:00:00", - "y": 679.7 - }, - { - "x": "2020-05-01 00:00:00", - "y": 1084.7 - } - ], - "name": "Consommation totale", - "unit": "kWh", - "hide": false - }, - "Chambre_RDC_temperature": { - "data": [ - { - "x": "2012-06-01 00:00:00", - "y": 22.3 - }, - { - "x": "2012-07-01 00:00:00", - "y": 22.7 - }, - { - "x": "2012-08-01 00:00:00", - "y": 25.1 - }, - { - "x": "2012-09-01 00:00:00", - "y": 22.6 - }, - { - "x": "2012-10-01 00:00:00", - "y": 20.7 - }, - { - "x": "2012-11-01 00:00:00", - "y": 18 - }, - { - "x": "2012-12-01 00:00:00", - "y": 20 - }, - { - "x": "2013-01-01 00:00:00", - "y": 20.1 - }, - { - "x": "2013-02-01 00:00:00", - "y": 15.6 - }, - { - "x": "2013-03-01 00:00:00", - "y": 20.3 - }, - { - "x": "2013-04-01 00:00:00", - "y": 18.1 - }, - { - "x": "2013-05-01 00:00:00", - "y": 21.5 - }, - { - "x": "2013-06-01 00:00:00", - "y": 22.3 - }, - { - "x": "2013-07-01 00:00:00", - "y": 25.1 - }, - { - "x": "2013-08-01 00:00:00", - "y": 22.7 - }, - { - "x": "2013-09-01 00:00:00", - "y": 22.7 - }, - { - "x": "2013-10-01 00:00:00", - "y": 21.4 - }, - { - "x": "2013-11-01 00:00:00", - "y": 20.3 - }, - { - "x": "2013-12-01 00:00:00", - "y": 20.4 - }, - { - "x": "2014-01-01 00:00:00", - "y": 20.5 - }, - { - "x": "2014-02-01 00:00:00", - "y": 19.8 - }, - { - "x": "2014-03-01 00:00:00", - "y": 20.6 - }, - { - "x": "2014-04-01 00:00:00", - "y": 21.3 - }, - { - "x": "2014-05-01 00:00:00", - "y": 21.9 - }, - { - "x": "2014-06-01 00:00:00", - "y": 25 - }, - { - "x": "2014-10-01 00:00:00", - "y": 22.4 - }, - { - "x": "2014-11-01 00:00:00", - "y": 20.6 - }, - { - "x": "2014-12-01 00:00:00", - "y": 18.2 - }, - { - "x": "2015-01-01 00:00:00", - "y": 20 - }, - { - "x": "2015-02-01 00:00:00", - "y": 20 - }, - { - "x": "2015-03-01 00:00:00", - "y": 19.6 - }, - { - "x": "2015-04-01 00:00:00", - "y": 21.4 - }, - { - "x": "2015-05-01 00:00:00", - "y": 20.4 - }, - { - "x": "2015-06-01 00:00:00", - "y": 24.2 - }, - { - "x": "2015-07-01 00:00:00", - "y": 24.5 - }, - { - "x": "2015-08-01 00:00:00", - "y": 23.6 - }, - { - "x": "2015-09-01 00:00:00", - "y": 22.2 - }, - { - "x": "2015-10-01 00:00:00", - "y": 20.9 - }, - { - "x": "2015-11-01 00:00:00", - "y": 20.6 - }, - { - "x": "2015-12-01 00:00:00", - "y": 19.5 - }, - { - "x": "2016-01-01 00:00:00", - "y": 19.8 - }, - { - "x": "2016-02-01 00:00:00", - "y": 20.4 - }, - { - "x": "2016-03-01 00:00:00", - "y": 19.8 - }, - { - "x": "2016-04-01 00:00:00", - "y": 19.5 - }, - { - "x": "2016-05-01 00:00:00", - "y": 21.3 - }, - { - "x": "2016-06-01 00:00:00", - "y": 22.9 - }, - { - "x": "2016-07-01 00:00:00", - "y": 24.4 - }, - { - "x": "2016-08-01 00:00:00", - "y": 24 - }, - { - "x": "2016-09-01 00:00:00", - "y": 23.5 - }, - { - "x": "2017-03-01 00:00:00", - "y": 21.1 - }, - { - "x": "2017-04-01 00:00:00", - "y": 20.6 - }, - { - "x": "2017-05-01 00:00:00", - "y": 22.2 - }, - { - "x": "2017-06-01 00:00:00", - "y": 23.7 - }, - { - "x": "2017-07-01 00:00:00", - "y": 23.9 - }, - { - "x": "2017-08-01 00:00:00", - "y": 23.4 - }, - { - "x": "2017-09-01 00:00:00", - "y": 22.9 - }, - { - "x": "2017-10-01 00:00:00", - "y": 22 - }, - { - "x": "2017-11-01 00:00:00", - "y": 19.7 - }, - { - "x": "2017-12-01 00:00:00", - "y": 20 - }, - { - "x": "2018-01-01 00:00:00", - "y": 20 - }, - { - "x": "2018-02-01 00:00:00", - "y": 20.2 - }, - { - "x": "2018-03-01 00:00:00", - "y": 19.9 - }, - { - "x": "2018-04-01 00:00:00", - "y": 21.1 - }, - { - "x": "2018-05-01 00:00:00", - "y": 22.3 - }, - { - "x": "2018-06-01 00:00:00", - "y": 23.5 - }, - { - "x": "2018-07-01 00:00:00", - "y": 23.8 - }, - { - "x": "2018-08-01 00:00:00", - "y": 23.5 - }, - { - "x": "2019-03-01 00:00:00", - "y": 21.7 - }, - { - "x": "2019-04-01 00:00:00", - "y": 21.7 - }, - { - "x": "2019-05-01 00:00:00", - "y": 21.7 - }, - { - "x": "2019-06-01 00:00:00", - "y": 23.6 - }, - { - "x": "2019-07-01 00:00:00", - "y": 24.4 - }, - { - "x": "2019-08-01 00:00:00", - "y": 23.3 - }, - { - "x": "2020-03-01 00:00:00", - "y": 22 - } - ], - "name": "Chambre_RDC", - "unit": "°C", - "hide": false - }, - "Exterieure_temperature": { - "data": [ - { - "x": "2012-06-01 00:00:00", - "y": 18.6 - }, - { - "x": "2012-07-01 00:00:00", - "y": 20.2 - }, - { - "x": "2012-08-01 00:00:00", - "y": 24.7 - }, - { - "x": "2012-09-01 00:00:00", - "y": 23.2 - }, - { - "x": "2012-10-01 00:00:00", - "y": 21.7 - }, - { - "x": "2012-11-01 00:00:00", - "y": 13.3 - }, - { - "x": "2012-12-01 00:00:00", - "y": 6.1 - }, - { - "x": "2013-01-01 00:00:00", - "y": 3.3 - }, - { - "x": "2013-02-01 00:00:00", - "y": 1.9 - }, - { - "x": "2013-03-01 00:00:00", - "y": 6.6 - }, - { - "x": "2013-04-01 00:00:00", - "y": 10.2 - }, - { - "x": "2013-05-01 00:00:00", - "y": 11.2 - }, - { - "x": "2013-06-01 00:00:00", - "y": 16.9 - }, - { - "x": "2013-07-01 00:00:00", - "y": 28.9 - }, - { - "x": "2013-10-01 00:00:00", - "y": 16.9 - }, - { - "x": "2013-11-01 00:00:00", - "y": 5.9 - }, - { - "x": "2013-12-01 00:00:00", - "y": 4.5 - }, - { - "x": "2014-01-01 00:00:00", - "y": 6.9 - }, - { - "x": "2014-02-01 00:00:00", - "y": 6.8 - }, - { - "x": "2014-03-01 00:00:00", - "y": 8.3 - }, - { - "x": "2014-04-01 00:00:00", - "y": 11.6 - }, - { - "x": "2014-05-01 00:00:00", - "y": 12 - }, - { - "x": "2014-06-01 00:00:00", - "y": 17.3 - }, - { - "x": "2014-10-01 00:00:00", - "y": 13.5 - }, - { - "x": "2014-11-01 00:00:00", - "y": 9.9 - }, - { - "x": "2014-12-01 00:00:00", - "y": 4.5 - }, - { - "x": "2015-01-01 00:00:00", - "y": 4.4 - }, - { - "x": "2015-02-01 00:00:00", - "y": 4.4 - }, - { - "x": "2015-03-01 00:00:00", - "y": 7.7 - }, - { - "x": "2015-04-01 00:00:00", - "y": 12.4 - }, - { - "x": "2015-05-01 00:00:00", - "y": 14.1 - }, - { - "x": "2015-06-01 00:00:00", - "y": 18.8 - }, - { - "x": "2015-07-01 00:00:00", - "y": 21.5 - }, - { - "x": "2015-08-01 00:00:00", - "y": 20.7 - }, - { - "x": "2015-09-01 00:00:00", - "y": 14.3 - }, - { - "x": "2015-10-01 00:00:00", - "y": 10.4 - }, - { - "x": "2015-11-01 00:00:00", - "y": 9.3 - }, - { - "x": "2015-12-01 00:00:00", - "y": 7.7 - }, - { - "x": "2016-01-01 00:00:00", - "y": 6 - }, - { - "x": "2016-02-01 00:00:00", - "y": 5.6 - }, - { - "x": "2016-03-01 00:00:00", - "y": 6.6 - }, - { - "x": "2016-04-01 00:00:00", - "y": 9.6 - }, - { - "x": "2016-05-01 00:00:00", - "y": 14.5 - }, - { - "x": "2016-06-01 00:00:00", - "y": 17.9 - }, - { - "x": "2016-07-01 00:00:00", - "y": 21.3 - }, - { - "x": "2016-08-01 00:00:00", - "y": 20.4 - }, - { - "x": "2017-03-01 00:00:00", - "y": 14.2 - }, - { - "x": "2017-04-01 00:00:00", - "y": 9.7 - }, - { - "x": "2017-05-01 00:00:00", - "y": 16.8 - }, - { - "x": "2017-06-01 00:00:00", - "y": 23.9 - }, - { - "x": "2017-07-01 00:00:00", - "y": 21.4 - }, - { - "x": "2017-08-01 00:00:00", - "y": 20.7 - }, - { - "x": "2017-09-01 00:00:00", - "y": 15.8 - }, - { - "x": "2017-10-01 00:00:00", - "y": 14.2 - }, - { - "x": "2017-11-01 00:00:00", - "y": 7.5 - }, - { - "x": "2017-12-01 00:00:00", - "y": 4.2 - }, - { - "x": "2018-03-01 00:00:00", - "y": 10.2 - }, - { - "x": "2018-04-01 00:00:00", - "y": 17.6 - }, - { - "x": "2018-05-01 00:00:00", - "y": 16.1 - }, - { - "x": "2018-06-01 00:00:00", - "y": 22.4 - }, - { - "x": "2018-07-01 00:00:00", - "y": 30 - }, - { - "x": "2018-08-01 00:00:00", - "y": 19.8 - } - ], - "name": "Exterieure", - "unit": "°C", - "hide": false - }, - "Sejour_temperature": { - "data": [ - { - "x": "2012-06-01 00:00:00", - "y": 22.8 - }, - { - "x": "2012-07-01 00:00:00", - "y": 23 - }, - { - "x": "2012-08-01 00:00:00", - "y": 25.3 - }, - { - "x": "2012-09-01 00:00:00", - "y": 23.3 - }, - { - "x": "2012-10-01 00:00:00", - "y": 21.7 - }, - { - "x": "2012-11-01 00:00:00", - "y": 19.9 - }, - { - "x": "2012-12-01 00:00:00", - "y": 20.1 - }, - { - "x": "2013-01-01 00:00:00", - "y": 20 - }, - { - "x": "2013-02-01 00:00:00", - "y": 15.8 - }, - { - "x": "2013-03-01 00:00:00", - "y": 20.5 - }, - { - "x": "2013-04-01 00:00:00", - "y": 20.8 - }, - { - "x": "2013-05-01 00:00:00", - "y": 20.9 - }, - { - "x": "2013-06-01 00:00:00", - "y": 22 - }, - { - "x": "2013-07-01 00:00:00", - "y": 25 - }, - { - "x": "2013-08-01 00:00:00", - "y": 22.7 - }, - { - "x": "2013-09-01 00:00:00", - "y": 22.9 - }, - { - "x": "2013-10-01 00:00:00", - "y": 21.5 - }, - { - "x": "2013-11-01 00:00:00", - "y": 20.3 - }, - { - "x": "2013-12-01 00:00:00", - "y": 20.7 - }, - { - "x": "2014-01-01 00:00:00", - "y": 20.6 - }, - { - "x": "2014-02-01 00:00:00", - "y": 19.9 - }, - { - "x": "2014-03-01 00:00:00", - "y": 21.2 - }, - { - "x": "2014-04-01 00:00:00", - "y": 21.7 - }, - { - "x": "2014-05-01 00:00:00", - "y": 22.3 - }, - { - "x": "2014-06-01 00:00:00", - "y": 25.6 - }, - { - "x": "2014-10-01 00:00:00", - "y": 22.8 - }, - { - "x": "2014-11-01 00:00:00", - "y": 20.9 - }, - { - "x": "2014-12-01 00:00:00", - "y": 18 - }, - { - "x": "2015-01-01 00:00:00", - "y": 20 - }, - { - "x": "2015-02-01 00:00:00", - "y": 20 - }, - { - "x": "2015-03-01 00:00:00", - "y": 19.6 - }, - { - "x": "2015-04-01 00:00:00", - "y": 21.8 - }, - { - "x": "2015-05-01 00:00:00", - "y": 20.5 - }, - { - "x": "2015-06-01 00:00:00", - "y": 24.4 - }, - { - "x": "2015-07-01 00:00:00", - "y": 21.6 - }, - { - "x": "2015-08-01 00:00:00", - "y": 23.9 - }, - { - "x": "2015-09-01 00:00:00", - "y": 23.1 - }, - { - "x": "2015-10-01 00:00:00", - "y": 21.4 - }, - { - "x": "2015-11-01 00:00:00", - "y": 21.1 - }, - { - "x": "2015-12-01 00:00:00", - "y": 20.1 - }, - { - "x": "2016-01-01 00:00:00", - "y": 20.1 - }, - { - "x": "2016-02-01 00:00:00", - "y": 20.3 - }, - { - "x": "2016-03-01 00:00:00", - "y": 20.2 - }, - { - "x": "2016-04-01 00:00:00", - "y": 19.7 - }, - { - "x": "2016-05-01 00:00:00", - "y": 21.6 - }, - { - "x": "2016-06-01 00:00:00", - "y": 23.2 - }, - { - "x": "2016-07-01 00:00:00", - "y": 24.7 - }, - { - "x": "2016-08-01 00:00:00", - "y": 24.5 - }, - { - "x": "2016-09-01 00:00:00", - "y": 23.7 - }, - { - "x": "2017-03-01 00:00:00", - "y": 21.7 - }, - { - "x": "2017-04-01 00:00:00", - "y": 21 - }, - { - "x": "2017-05-01 00:00:00", - "y": 22.6 - }, - { - "x": "2017-06-01 00:00:00", - "y": 24 - }, - { - "x": "2017-07-01 00:00:00", - "y": 24.3 - }, - { - "x": "2017-08-01 00:00:00", - "y": 23.7 - }, - { - "x": "2017-09-01 00:00:00", - "y": 23.3 - }, - { - "x": "2017-10-01 00:00:00", - "y": 22.6 - }, - { - "x": "2017-11-01 00:00:00", - "y": 20.3 - }, - { - "x": "2017-12-01 00:00:00", - "y": 19.9 - }, - { - "x": "2018-01-01 00:00:00", - "y": 19.9 - }, - { - "x": "2018-02-01 00:00:00", - "y": 19.9 - }, - { - "x": "2018-03-01 00:00:00", - "y": 20.3 - }, - { - "x": "2018-04-01 00:00:00", - "y": 21.6 - }, - { - "x": "2018-05-01 00:00:00", - "y": 22.6 - }, - { - "x": "2018-06-01 00:00:00", - "y": 23.8 - }, - { - "x": "2018-07-01 00:00:00", - "y": 23.9 - }, - { - "x": "2018-08-01 00:00:00", - "y": 23.7 - }, - { - "x": "2019-03-01 00:00:00", - "y": 23.3 - }, - { - "x": "2019-04-01 00:00:00", - "y": 22.7 - }, - { - "x": "2019-05-01 00:00:00", - "y": 22.2 - }, - { - "x": "2019-06-01 00:00:00", - "y": 23.8 - }, - { - "x": "2019-07-01 00:00:00", - "y": 24.6 - }, - { - "x": "2019-08-01 00:00:00", - "y": 23.3 - }, - { - "x": "2020-03-01 00:00:00", - "y": 23.5 - } - ], - "name": "Sejour", - "unit": "°C", - "hide": false - }, - "Garage_temperature": { - "data": [ - { - "x": "2012-06-01 00:00:00", - "y": 20.2 - }, - { - "x": "2012-07-01 00:00:00", - "y": 19.4 - }, - { - "x": "2012-08-01 00:00:00", - "y": 22.2 - }, - { - "x": "2012-09-01 00:00:00", - "y": 17 - }, - { - "x": "2012-10-01 00:00:00", - "y": 13.8 - }, - { - "x": "2012-11-01 00:00:00", - "y": 9.2 - }, - { - "x": "2012-12-01 00:00:00", - "y": 7.6 - }, - { - "x": "2013-01-01 00:00:00", - "y": 5.3 - }, - { - "x": "2013-02-01 00:00:00", - "y": 3.4 - }, - { - "x": "2013-03-01 00:00:00", - "y": 7.3 - }, - { - "x": "2013-04-01 00:00:00", - "y": 10.7 - }, - { - "x": "2013-05-01 00:00:00", - "y": 12.4 - }, - { - "x": "2013-06-01 00:00:00", - "y": 17.2 - }, - { - "x": "2013-07-01 00:00:00", - "y": 23 - }, - { - "x": "2013-08-01 00:00:00", - "y": 20.2 - }, - { - "x": "2013-09-01 00:00:00", - "y": 17.1 - }, - { - "x": "2013-10-01 00:00:00", - "y": 14.5 - }, - { - "x": "2013-11-01 00:00:00", - "y": 8.2 - }, - { - "x": "2013-12-01 00:00:00", - "y": 5.9 - }, - { - "x": "2014-01-01 00:00:00", - "y": 7.9 - }, - { - "x": "2014-02-01 00:00:00", - "y": 7.6 - }, - { - "x": "2014-03-01 00:00:00", - "y": 9 - }, - { - "x": "2014-04-01 00:00:00", - "y": 12.6 - }, - { - "x": "2014-05-01 00:00:00", - "y": 14.2 - }, - { - "x": "2014-06-01 00:00:00", - "y": 21.5 - }, - { - "x": "2014-10-01 00:00:00", - "y": 14.6 - }, - { - "x": "2014-11-01 00:00:00", - "y": 11.2 - }, - { - "x": "2014-12-01 00:00:00", - "y": 6.7 - }, - { - "x": "2015-01-01 00:00:00", - "y": 6.3 - }, - { - "x": "2015-02-01 00:00:00", - "y": 5.1 - }, - { - "x": "2015-03-01 00:00:00", - "y": 8.6 - }, - { - "x": "2015-04-01 00:00:00", - "y": 13.3 - }, - { - "x": "2015-05-01 00:00:00", - "y": 14.2 - }, - { - "x": "2015-06-01 00:00:00", - "y": 20.9 - }, - { - "x": "2015-07-01 00:00:00", - "y": 23.2 - }, - { - "x": "2015-08-01 00:00:00", - "y": 21.8 - }, - { - "x": "2015-09-01 00:00:00", - "y": 16.3 - }, - { - "x": "2015-10-01 00:00:00", - "y": 12.5 - }, - { - "x": "2015-11-01 00:00:00", - "y": 10.8 - }, - { - "x": "2015-12-01 00:00:00", - "y": 7.5 - }, - { - "x": "2016-02-01 00:00:00", - "y": 55.6 - }, - { - "x": "2016-03-01 00:00:00", - "y": 8 - }, - { - "x": "2016-04-01 00:00:00", - "y": 11.4 - }, - { - "x": "2016-05-01 00:00:00", - "y": 15.2 - }, - { - "x": "2016-06-01 00:00:00", - "y": 18.5 - }, - { - "x": "2016-07-01 00:00:00", - "y": 21.3 - }, - { - "x": "2016-08-01 00:00:00", - "y": 22.6 - }, - { - "x": "2016-09-01 00:00:00", - "y": 18.8 - }, - { - "x": "2017-03-01 00:00:00", - "y": 15.2 - }, - { - "x": "2017-04-01 00:00:00", - "y": 11.5 - }, - { - "x": "2017-05-01 00:00:00", - "y": 16.7 - }, - { - "x": "2017-06-01 00:00:00", - "y": 21.7 - }, - { - "x": "2017-07-01 00:00:00", - "y": 21.5 - }, - { - "x": "2017-08-01 00:00:00", - "y": 21.1 - }, - { - "x": "2017-09-01 00:00:00", - "y": 16.4 - }, - { - "x": "2017-10-01 00:00:00", - "y": 14.2 - }, - { - "x": "2017-11-01 00:00:00", - "y": 9 - }, - { - "x": "2017-12-01 00:00:00", - "y": 7 - }, - { - "x": "2018-01-01 00:00:00", - "y": 9.3 - }, - { - "x": "2018-02-01 00:00:00", - "y": 4 - }, - { - "x": "2018-03-01 00:00:00", - "y": 9.4 - }, - { - "x": "2018-04-01 00:00:00", - "y": 12.9 - }, - { - "x": "2019-03-01 00:00:00", - "y": 13.9 - }, - { - "x": "2019-04-01 00:00:00", - "y": 14.1 - }, - { - "x": "2019-05-01 00:00:00", - "y": 16.4 - }, - { - "x": "2019-06-01 00:00:00", - "y": 24 - }, - { - "x": "2019-07-01 00:00:00", - "y": 24.2 - }, - { - "x": "2020-03-01 00:00:00", - "y": 21.3 - }, - { - "x": "2020-05-01 00:00:00", - "y": 21 - } - ], - "name": "Garage", - "unit": "°C", - "hide": true - }, - "Soufflage_temperature": { - "data": [ - { - "x": "2012-06-01 00:00:00", - "y": 22 - }, - { - "x": "2012-07-01 00:00:00", - "y": 22.3 - }, - { - "x": "2012-08-01 00:00:00", - "y": 24.1 - }, - { - "x": "2012-09-01 00:00:00", - "y": 20.7 - }, - { - "x": "2012-10-01 00:00:00", - "y": 18.1 - }, - { - "x": "2012-11-01 00:00:00", - "y": 14.6 - }, - { - "x": "2012-12-01 00:00:00", - "y": 16.5 - }, - { - "x": "2013-01-01 00:00:00", - "y": 16.7 - }, - { - "x": "2013-02-01 00:00:00", - "y": 13.4 - }, - { - "x": "2013-03-01 00:00:00", - "y": 18.2 - }, - { - "x": "2013-04-01 00:00:00", - "y": 19.8 - }, - { - "x": "2013-05-01 00:00:00", - "y": 20.4 - }, - { - "x": "2013-06-01 00:00:00", - "y": 22.7 - }, - { - "x": "2013-07-01 00:00:00", - "y": 24.9 - }, - { - "x": "2013-08-01 00:00:00", - "y": 22.8 - }, - { - "x": "2013-09-01 00:00:00", - "y": 22.3 - }, - { - "x": "2013-10-01 00:00:00", - "y": 20.2 - }, - { - "x": "2013-11-01 00:00:00", - "y": 17 - }, - { - "x": "2013-12-01 00:00:00", - "y": 17.8 - }, - { - "x": "2014-01-01 00:00:00", - "y": 18.3 - }, - { - "x": "2014-02-01 00:00:00", - "y": 17.8 - }, - { - "x": "2014-03-01 00:00:00", - "y": 19.1 - }, - { - "x": "2014-04-01 00:00:00", - "y": 20.7 - }, - { - "x": "2014-11-01 00:00:00", - "y": 24.1 - }, - { - "x": "2014-12-01 00:00:00", - "y": 6.6 - }, - { - "x": "2015-01-01 00:00:00", - "y": 6.4 - }, - { - "x": "2015-02-01 00:00:00", - "y": 4.8 - }, - { - "x": "2015-03-01 00:00:00", - "y": 9.9 - }, - { - "x": "2015-04-01 00:00:00", - "y": 15.3 - }, - { - "x": "2015-05-01 00:00:00", - "y": 15.8 - }, - { - "x": "2015-06-01 00:00:00", - "y": 20.1 - }, - { - "x": "2015-07-01 00:00:00", - "y": 21.8 - }, - { - "x": "2015-08-01 00:00:00", - "y": 21.9 - }, - { - "x": "2015-09-01 00:00:00", - "y": 17.1 - }, - { - "x": "2015-10-01 00:00:00", - "y": 13.2 - }, - { - "x": "2015-11-01 00:00:00", - "y": 12.8 - }, - { - "x": "2015-12-01 00:00:00", - "y": 11.1 - }, - { - "x": "2016-01-01 00:00:00", - "y": 11.7 - }, - { - "x": "2016-02-01 00:00:00", - "y": 11.3 - }, - { - "x": "2017-03-01 00:00:00", - "y": 24.2 - }, - { - "x": "2017-04-01 00:00:00", - "y": 18.5 - }, - { - "x": "2017-05-01 00:00:00", - "y": 22.2 - }, - { - "x": "2017-06-01 00:00:00", - "y": 24.2 - }, - { - "x": "2017-07-01 00:00:00", - "y": 23.8 - }, - { - "x": "2017-08-01 00:00:00", - "y": 23 - }, - { - "x": "2017-09-01 00:00:00", - "y": 20.9 - }, - { - "x": "2017-10-01 00:00:00", - "y": 19.3 - }, - { - "x": "2017-11-01 00:00:00", - "y": 14.6 - }, - { - "x": "2017-12-01 00:00:00", - "y": 14.9 - }, - { - "x": "2018-01-01 00:00:00", - "y": 16.4 - }, - { - "x": "2018-02-01 00:00:00", - "y": 13.5 - }, - { - "x": "2018-03-01 00:00:00", - "y": 14.7 - } - ], - "name": "Soufflage", - "unit": "°C", - "hide": true - }, - "Mezzanine_temperature": { - "data": [ - { - "x": "2012-06-01 00:00:00", - "y": 23.3 - }, - { - "x": "2012-07-01 00:00:00", - "y": 23.5 - }, - { - "x": "2012-08-01 00:00:00", - "y": 25.9 - }, - { - "x": "2012-09-01 00:00:00", - "y": 23.1 - }, - { - "x": "2012-10-01 00:00:00", - "y": 21.5 - }, - { - "x": "2012-11-01 00:00:00", - "y": 19.7 - }, - { - "x": "2012-12-01 00:00:00", - "y": 19.4 - }, - { - "x": "2013-01-01 00:00:00", - "y": 19 - }, - { - "x": "2013-02-01 00:00:00", - "y": 15.3 - }, - { - "x": "2013-03-01 00:00:00", - "y": 19.9 - }, - { - "x": "2013-04-01 00:00:00", - "y": 20.5 - }, - { - "x": "2013-05-01 00:00:00", - "y": 20.8 - }, - { - "x": "2013-06-01 00:00:00", - "y": 22.2 - }, - { - "x": "2013-07-01 00:00:00", - "y": 25.7 - }, - { - "x": "2013-08-01 00:00:00", - "y": 23.1 - }, - { - "x": "2013-09-01 00:00:00", - "y": 23 - }, - { - "x": "2013-10-01 00:00:00", - "y": 21.5 - }, - { - "x": "2013-11-01 00:00:00", - "y": 19.5 - }, - { - "x": "2013-12-01 00:00:00", - "y": 20 - }, - { - "x": "2014-01-01 00:00:00", - "y": 20 - }, - { - "x": "2014-02-01 00:00:00", - "y": 19.6 - }, - { - "x": "2014-03-01 00:00:00", - "y": 21.1 - }, - { - "x": "2014-04-01 00:00:00", - "y": 21.6 - }, - { - "x": "2014-05-01 00:00:00", - "y": 22.3 - }, - { - "x": "2014-06-01 00:00:00", - "y": 25.9 - }, - { - "x": "2015-09-01 00:00:00", - "y": 22.7 - }, - { - "x": "2015-10-01 00:00:00", - "y": 21.3 - }, - { - "x": "2015-11-01 00:00:00", - "y": 20.9 - }, - { - "x": "2015-12-01 00:00:00", - "y": 19.9 - }, - { - "x": "2016-01-01 00:00:00", - "y": 19.6 - }, - { - "x": "2016-02-01 00:00:00", - "y": 17.6 - }, - { - "x": "2016-03-01 00:00:00", - "y": 19.9 - }, - { - "x": "2016-04-01 00:00:00", - "y": 19.5 - }, - { - "x": "2016-05-01 00:00:00", - "y": 21.6 - }, - { - "x": "2016-06-01 00:00:00", - "y": 23.5 - }, - { - "x": "2016-07-01 00:00:00", - "y": 25.4 - }, - { - "x": "2016-08-01 00:00:00", - "y": 25.1 - }, - { - "x": "2016-09-01 00:00:00", - "y": 24.2 - }, - { - "x": "2017-03-01 00:00:00", - "y": 21.8 - }, - { - "x": "2017-04-01 00:00:00", - "y": 20.6 - }, - { - "x": "2017-05-01 00:00:00", - "y": 22.8 - }, - { - "x": "2017-06-01 00:00:00", - "y": 24.9 - }, - { - "x": "2017-07-01 00:00:00", - "y": 24.9 - }, - { - "x": "2017-08-01 00:00:00", - "y": 24.2 - }, - { - "x": "2017-09-01 00:00:00", - "y": 23.2 - }, - { - "x": "2019-03-01 00:00:00", - "y": 22.7 - }, - { - "x": "2019-04-01 00:00:00", - "y": 22.6 - }, - { - "x": "2019-05-01 00:00:00", - "y": 22.2 - }, - { - "x": "2019-06-01 00:00:00", - "y": 24.4 - }, - { - "x": "2019-07-01 00:00:00", - "y": 25.6 - }, - { - "x": "2019-08-01 00:00:00", - "y": 23.9 - } - ], - "name": "Mezzanine", - "unit": "°C", - "hide": false - }, - "Extraction_temperature": { - "data": [ - { - "x": "2012-06-01 00:00:00", - "y": 22 - }, - { - "x": "2012-07-01 00:00:00", - "y": 22.4 - }, - { - "x": "2012-08-01 00:00:00", - "y": 24.6 - }, - { - "x": "2012-09-01 00:00:00", - "y": 21.7 - }, - { - "x": "2012-10-01 00:00:00", - "y": 19.2 - }, - { - "x": "2012-11-01 00:00:00", - "y": 17.3 - }, - { - "x": "2012-12-01 00:00:00", - "y": 18.4 - }, - { - "x": "2013-01-01 00:00:00", - "y": 20.3 - }, - { - "x": "2013-02-01 00:00:00", - "y": 16.2 - }, - { - "x": "2013-03-01 00:00:00", - "y": 20.8 - }, - { - "x": "2013-04-01 00:00:00", - "y": 21.4 - }, - { - "x": "2013-05-01 00:00:00", - "y": 21.7 - }, - { - "x": "2013-06-01 00:00:00", - "y": 22.7 - }, - { - "x": "2013-07-01 00:00:00", - "y": 25.5 - }, - { - "x": "2013-08-01 00:00:00", - "y": 22.7 - }, - { - "x": "2013-09-01 00:00:00", - "y": 22.7 - }, - { - "x": "2013-10-01 00:00:00", - "y": 21.3 - }, - { - "x": "2013-11-01 00:00:00", - "y": 19.3 - }, - { - "x": "2013-12-01 00:00:00", - "y": 20.6 - }, - { - "x": "2014-11-01 00:00:00", - "y": 20.8 - }, - { - "x": "2014-12-01 00:00:00", - "y": 18.8 - }, - { - "x": "2015-01-01 00:00:00", - "y": -90.2 - }, - { - "x": "2017-03-01 00:00:00", - "y": 24 - }, - { - "x": "2017-04-01 00:00:00", - "y": 20.4 - }, - { - "x": "2017-05-01 00:00:00", - "y": 22.7 - }, - { - "x": "2017-06-01 00:00:00", - "y": 24.4 - }, - { - "x": "2017-07-01 00:00:00", - "y": 24.7 - }, - { - "x": "2017-08-01 00:00:00", - "y": 23.7 - }, - { - "x": "2017-09-01 00:00:00", - "y": 22.8 - }, - { - "x": "2017-10-01 00:00:00", - "y": 21.8 - }, - { - "x": "2017-11-01 00:00:00", - "y": 17.9 - } - ], - "name": "Extraction", - "unit": "°C", - "hide": true - }, - "Bureau_temperature": { - "data": [ - { - "x": "2012-08-01 00:00:00", - "y": 26 - }, - { - "x": "2012-09-01 00:00:00", - "y": 26.3 - }, - { - "x": "2012-10-01 00:00:00", - "y": 24.8 - }, - { - "x": "2012-11-01 00:00:00", - "y": 24.4 - }, - { - "x": "2012-12-01 00:00:00", - "y": 23.6 - }, - { - "x": "2013-01-01 00:00:00", - "y": 23.9 - }, - { - "x": "2013-02-01 00:00:00", - "y": 18 - }, - { - "x": "2013-03-01 00:00:00", - "y": 23.2 - }, - { - "x": "2013-04-01 00:00:00", - "y": 22.6 - }, - { - "x": "2013-05-01 00:00:00", - "y": 22.7 - }, - { - "x": "2013-06-01 00:00:00", - "y": 22.6 - }, - { - "x": "2013-07-01 00:00:00", - "y": 26.1 - }, - { - "x": "2013-08-01 00:00:00", - "y": 23.9 - }, - { - "x": "2013-09-01 00:00:00", - "y": 23.5 - }, - { - "x": "2013-10-01 00:00:00", - "y": 22.2 - }, - { - "x": "2013-11-01 00:00:00", - "y": 23.7 - }, - { - "x": "2013-12-01 00:00:00", - "y": 23.9 - }, - { - "x": "2014-01-01 00:00:00", - "y": 23.5 - }, - { - "x": "2014-02-01 00:00:00", - "y": 22.7 - }, - { - "x": "2014-03-01 00:00:00", - "y": 22.8 - }, - { - "x": "2014-04-01 00:00:00", - "y": 22.9 - }, - { - "x": "2014-05-01 00:00:00", - "y": 23.6 - }, - { - "x": "2014-06-01 00:00:00", - "y": 27 - }, - { - "x": "2014-10-01 00:00:00", - "y": 24 - }, - { - "x": "2014-11-01 00:00:00", - "y": 22.5 - }, - { - "x": "2014-12-01 00:00:00", - "y": 20.9 - }, - { - "x": "2015-01-01 00:00:00", - "y": 23.5 - }, - { - "x": "2015-02-01 00:00:00", - "y": 23.7 - }, - { - "x": "2015-03-01 00:00:00", - "y": 22.4 - }, - { - "x": "2015-04-01 00:00:00", - "y": 23.3 - }, - { - "x": "2015-05-01 00:00:00", - "y": 23.2 - }, - { - "x": "2015-06-01 00:00:00", - "y": 26 - }, - { - "x": "2015-07-01 00:00:00", - "y": 26.3 - }, - { - "x": "2015-08-01 00:00:00", - "y": 24.3 - }, - { - "x": "2015-09-01 00:00:00", - "y": 23.7 - }, - { - "x": "2015-10-01 00:00:00", - "y": 22.6 - }, - { - "x": "2015-11-01 00:00:00", - "y": 22.5 - }, - { - "x": "2015-12-01 00:00:00", - "y": 22 - }, - { - "x": "2016-01-01 00:00:00", - "y": 22.8 - }, - { - "x": "2016-02-01 00:00:00", - "y": 20.8 - }, - { - "x": "2016-03-01 00:00:00", - "y": 22.8 - }, - { - "x": "2016-04-01 00:00:00", - "y": 22.1 - }, - { - "x": "2016-05-01 00:00:00", - "y": 23.1 - }, - { - "x": "2016-06-01 00:00:00", - "y": 24.4 - }, - { - "x": "2016-07-01 00:00:00", - "y": 26.3 - }, - { - "x": "2016-08-01 00:00:00", - "y": 26 - }, - { - "x": "2016-09-01 00:00:00", - "y": 24.9 - }, - { - "x": "2017-03-01 00:00:00", - "y": 22.9 - }, - { - "x": "2017-04-01 00:00:00", - "y": 23.9 - }, - { - "x": "2017-05-01 00:00:00", - "y": 24.6 - }, - { - "x": "2017-06-01 00:00:00", - "y": 25.2 - }, - { - "x": "2017-07-01 00:00:00", - "y": 33.8 - }, - { - "x": "2017-08-01 00:00:00", - "y": 38.6 - }, - { - "x": "2017-09-01 00:00:00", - "y": 35.3 - }, - { - "x": "2017-10-01 00:00:00", - "y": 35.2 - }, - { - "x": "2017-11-01 00:00:00", - "y": 36.2 - }, - { - "x": "2017-12-01 00:00:00", - "y": 24.3 - }, - { - "x": "2018-01-01 00:00:00", - "y": 23.6 - }, - { - "x": "2018-02-01 00:00:00", - "y": 24.6 - }, - { - "x": "2018-03-01 00:00:00", - "y": 22.7 - }, - { - "x": "2018-04-01 00:00:00", - "y": 24.8 - }, - { - "x": "2018-05-01 00:00:00", - "y": 26.1 - }, - { - "x": "2018-06-01 00:00:00", - "y": 26.5 - }, - { - "x": "2018-07-01 00:00:00", - "y": 30 - }, - { - "x": "2018-08-01 00:00:00", - "y": 27.5 - }, - { - "x": "2019-03-01 00:00:00", - "y": 25.3 - }, - { - "x": "2019-04-01 00:00:00", - "y": 26.1 - }, - { - "x": "2019-05-01 00:00:00", - "y": 25.2 - }, - { - "x": "2019-06-01 00:00:00", - "y": 27.3 - }, - { - "x": "2019-07-01 00:00:00", - "y": 30.2 - }, - { - "x": "2019-08-01 00:00:00", - "y": 25.6 - }, - { - "x": "2020-03-01 00:00:00", - "y": 36 - }, - { - "x": "2020-04-01 00:00:00", - "y": 35.2 - }, - { - "x": "2020-05-01 00:00:00", - "y": 37.4 - } - ], - "name": "Bureau", - "unit": "°C", - "hide": false - }, - "Temp_Nord_temperature": { - "data": [ - { - "x": "2012-08-01 00:00:00", - "y": 22.9 - }, - { - "x": "2012-09-01 00:00:00", - "y": 15.4 - }, - { - "x": "2012-10-01 00:00:00", - "y": 12.8 - }, - { - "x": "2012-11-01 00:00:00", - "y": 8.5 - }, - { - "x": "2012-12-01 00:00:00", - "y": 18.1 - }, - { - "x": "2013-01-01 00:00:00", - "y": 22 - }, - { - "x": "2013-02-01 00:00:00", - "y": 16.8 - }, - { - "x": "2013-03-01 00:00:00", - "y": 21.2 - }, - { - "x": "2013-04-01 00:00:00", - "y": 21.3 - }, - { - "x": "2013-05-01 00:00:00", - "y": 21.9 - }, - { - "x": "2013-06-01 00:00:00", - "y": 22.7 - }, - { - "x": "2013-07-01 00:00:00", - "y": 26.2 - }, - { - "x": "2013-08-01 00:00:00", - "y": 24.5 - }, - { - "x": "2013-09-01 00:00:00", - "y": 23.6 - }, - { - "x": "2013-10-01 00:00:00", - "y": 22 - }, - { - "x": "2013-11-01 00:00:00", - "y": 22.5 - }, - { - "x": "2013-12-01 00:00:00", - "y": 22.7 - }, - { - "x": "2014-01-01 00:00:00", - "y": 22.5 - }, - { - "x": "2014-02-01 00:00:00", - "y": 20.7 - }, - { - "x": "2014-03-01 00:00:00", - "y": 21.5 - }, - { - "x": "2014-04-01 00:00:00", - "y": 22.4 - }, - { - "x": "2014-05-01 00:00:00", - "y": 23.4 - }, - { - "x": "2014-06-01 00:00:00", - "y": 26.8 - }, - { - "x": "2014-10-01 00:00:00", - "y": 23.7 - }, - { - "x": "2014-11-01 00:00:00", - "y": 22.1 - }, - { - "x": "2014-12-01 00:00:00", - "y": 19.2 - } - ], - "name": "Temp_Nord", - "unit": "°C", - "hide": true - }, - "Chambre_RDC_hygrometrie": { - "data": [ - { - "x": "2012-06-01 00:00:00", - "y": 63 - }, - { - "x": "2012-07-01 00:00:00", - "y": 59 - }, - { - "x": "2012-08-01 00:00:00", - "y": 56 - }, - { - "x": "2012-09-01 00:00:00", - "y": 54 - }, - { - "x": "2012-10-01 00:00:00", - "y": 59 - }, - { - "x": "2012-11-01 00:00:00", - "y": 67 - }, - { - "x": "2012-12-01 00:00:00", - "y": 62 - }, - { - "x": "2013-01-01 00:00:00", - "y": 46 - }, - { - "x": "2013-02-01 00:00:00", - "y": 42 - }, - { - "x": "2013-03-01 00:00:00", - "y": 44 - }, - { - "x": "2013-04-01 00:00:00", - "y": 47 - }, - { - "x": "2013-05-01 00:00:00", - "y": 50 - }, - { - "x": "2013-06-01 00:00:00", - "y": 56 - }, - { - "x": "2013-07-01 00:00:00", - "y": 60 - }, - { - "x": "2013-08-01 00:00:00", - "y": 59 - }, - { - "x": "2013-09-01 00:00:00", - "y": 59 - }, - { - "x": "2013-10-01 00:00:00", - "y": 62 - }, - { - "x": "2013-11-01 00:00:00", - "y": 49 - }, - { - "x": "2013-12-01 00:00:00", - "y": 45 - }, - { - "x": "2014-01-01 00:00:00", - "y": 52 - }, - { - "x": "2014-02-01 00:00:00", - "y": 48 - }, - { - "x": "2014-03-01 00:00:00", - "y": 47 - }, - { - "x": "2014-04-01 00:00:00", - "y": 48 - }, - { - "x": "2014-05-01 00:00:00", - "y": 53 - }, - { - "x": "2014-06-01 00:00:00", - "y": 63 - }, - { - "x": "2014-10-01 00:00:00", - "y": 57 - }, - { - "x": "2014-11-01 00:00:00", - "y": 56 - }, - { - "x": "2014-12-01 00:00:00", - "y": 47 - }, - { - "x": "2015-01-01 00:00:00", - "y": 47 - }, - { - "x": "2015-02-01 00:00:00", - "y": 43 - }, - { - "x": "2015-03-01 00:00:00", - "y": 47 - }, - { - "x": "2015-04-01 00:00:00", - "y": 47 - }, - { - "x": "2015-05-01 00:00:00", - "y": 46 - }, - { - "x": "2015-06-01 00:00:00", - "y": 56 - }, - { - "x": "2015-07-01 00:00:00", - "y": 54 - }, - { - "x": "2015-08-01 00:00:00", - "y": 59 - }, - { - "x": "2015-09-01 00:00:00", - "y": 54 - }, - { - "x": "2015-10-01 00:00:00", - "y": 57 - }, - { - "x": "2015-11-01 00:00:00", - "y": 59 - }, - { - "x": "2015-12-01 00:00:00", - "y": 63 - }, - { - "x": "2016-01-01 00:00:00", - "y": 64 - }, - { - "x": "2016-02-01 00:00:00", - "y": 59 - }, - { - "x": "2016-03-01 00:00:00", - "y": 55 - }, - { - "x": "2016-04-01 00:00:00", - "y": 53 - }, - { - "x": "2016-05-01 00:00:00", - "y": 52 - }, - { - "x": "2016-06-01 00:00:00", - "y": 61 - }, - { - "x": "2016-07-01 00:00:00", - "y": 58 - }, - { - "x": "2016-08-01 00:00:00", - "y": 52 - }, - { - "x": "2016-09-01 00:00:00", - "y": 54 - }, - { - "x": "2017-03-01 00:00:00", - "y": 56 - }, - { - "x": "2017-04-01 00:00:00", - "y": 51 - }, - { - "x": "2017-05-01 00:00:00", - "y": 58 - }, - { - "x": "2017-06-01 00:00:00", - "y": 60 - }, - { - "x": "2017-07-01 00:00:00", - "y": 60 - }, - { - "x": "2017-08-01 00:00:00", - "y": 59 - }, - { - "x": "2017-09-01 00:00:00", - "y": 55 - }, - { - "x": "2017-10-01 00:00:00", - "y": 54 - }, - { - "x": "2017-11-01 00:00:00", - "y": 60 - }, - { - "x": "2017-12-01 00:00:00", - "y": 49 - }, - { - "x": "2018-01-01 00:00:00", - "y": 51 - }, - { - "x": "2018-02-01 00:00:00", - "y": 43 - }, - { - "x": "2018-03-01 00:00:00", - "y": 44 - }, - { - "x": "2018-04-01 00:00:00", - "y": 49 - }, - { - "x": "2018-05-01 00:00:00", - "y": 59 - }, - { - "x": "2018-06-01 00:00:00", - "y": 61 - }, - { - "x": "2018-07-01 00:00:00", - "y": 56 - }, - { - "x": "2018-08-01 00:00:00", - "y": 51 - }, - { - "x": "2019-03-01 00:00:00", - "y": 41 - }, - { - "x": "2019-04-01 00:00:00", - "y": 43 - }, - { - "x": "2019-05-01 00:00:00", - "y": 50 - }, - { - "x": "2019-06-01 00:00:00", - "y": 57 - }, - { - "x": "2019-07-01 00:00:00", - "y": 52 - }, - { - "x": "2019-08-01 00:00:00", - "y": 48 - }, - { - "x": "2020-03-01 00:00:00", - "y": 51 - } - ], - "name": "Chambre_RDC", - "unit": "%", - "hide": false - }, - "Exterieure_hygrometrie": { - "data": [ - { - "x": "2012-06-01 00:00:00", - "y": 63 - }, - { - "x": "2012-07-01 00:00:00", - "y": 59 - }, - { - "x": "2012-08-01 00:00:00", - "y": 50 - }, - { - "x": "2012-09-01 00:00:00", - "y": 49 - }, - { - "x": "2012-10-01 00:00:00", - "y": 53 - }, - { - "x": "2012-11-01 00:00:00", - "y": 69 - }, - { - "x": "2012-12-01 00:00:00", - "y": 82 - }, - { - "x": "2013-01-01 00:00:00", - "y": 85 - }, - { - "x": "2013-02-01 00:00:00", - "y": 80 - }, - { - "x": "2013-03-01 00:00:00", - "y": 72 - }, - { - "x": "2013-04-01 00:00:00", - "y": 67 - }, - { - "x": "2013-05-01 00:00:00", - "y": 74 - }, - { - "x": "2013-06-01 00:00:00", - "y": 70 - }, - { - "x": "2013-07-01 00:00:00", - "y": 40 - }, - { - "x": "2013-10-01 00:00:00", - "y": 75 - }, - { - "x": "2013-11-01 00:00:00", - "y": 84 - }, - { - "x": "2013-12-01 00:00:00", - "y": 74 - }, - { - "x": "2014-01-01 00:00:00", - "y": 79 - }, - { - "x": "2014-02-01 00:00:00", - "y": 74 - }, - { - "x": "2014-03-01 00:00:00", - "y": 65 - }, - { - "x": "2014-04-01 00:00:00", - "y": 66 - }, - { - "x": "2014-05-01 00:00:00", - "y": 67 - }, - { - "x": "2014-06-01 00:00:00", - "y": 68 - }, - { - "x": "2014-10-01 00:00:00", - "y": 76 - }, - { - "x": "2014-11-01 00:00:00", - "y": 79 - }, - { - "x": "2014-12-01 00:00:00", - "y": 82 - }, - { - "x": "2015-01-01 00:00:00", - "y": 81 - }, - { - "x": "2015-02-01 00:00:00", - "y": 70 - }, - { - "x": "2015-03-01 00:00:00", - "y": 69 - }, - { - "x": "2015-04-01 00:00:00", - "y": 60 - }, - { - "x": "2015-05-01 00:00:00", - "y": 82 - }, - { - "x": "2015-06-01 00:00:00", - "y": 68 - }, - { - "x": "2015-07-01 00:00:00", - "y": 55 - }, - { - "x": "2015-08-01 00:00:00", - "y": 59 - }, - { - "x": "2015-09-01 00:00:00", - "y": 65 - }, - { - "x": "2015-10-01 00:00:00", - "y": 74 - }, - { - "x": "2015-11-01 00:00:00", - "y": 75 - }, - { - "x": "2015-12-01 00:00:00", - "y": 69 - }, - { - "x": "2016-01-01 00:00:00", - "y": 78 - }, - { - "x": "2016-02-01 00:00:00", - "y": 76 - }, - { - "x": "2016-03-01 00:00:00", - "y": 67 - }, - { - "x": "2016-04-01 00:00:00", - "y": 67 - }, - { - "x": "2016-05-01 00:00:00", - "y": 64 - }, - { - "x": "2016-06-01 00:00:00", - "y": 68 - }, - { - "x": "2016-07-01 00:00:00", - "y": 54 - }, - { - "x": "2016-08-01 00:00:00", - "y": 48 - }, - { - "x": "2017-03-01 00:00:00", - "y": 49 - }, - { - "x": "2017-04-01 00:00:00", - "y": 46 - }, - { - "x": "2017-05-01 00:00:00", - "y": 48 - }, - { - "x": "2017-06-01 00:00:00", - "y": 41 - }, - { - "x": "2017-07-01 00:00:00", - "y": 48 - }, - { - "x": "2017-08-01 00:00:00", - "y": 62 - }, - { - "x": "2017-09-01 00:00:00", - "y": 54 - }, - { - "x": "2017-10-01 00:00:00", - "y": 56 - }, - { - "x": "2017-11-01 00:00:00", - "y": 59 - }, - { - "x": "2017-12-01 00:00:00", - "y": 62 - }, - { - "x": "2018-03-01 00:00:00", - "y": 50 - }, - { - "x": "2018-04-01 00:00:00", - "y": 41 - }, - { - "x": "2018-05-01 00:00:00", - "y": 61 - }, - { - "x": "2018-06-01 00:00:00", - "y": 43 - }, - { - "x": "2018-07-01 00:00:00", - "y": 35 - }, - { - "x": "2018-08-01 00:00:00", - "y": 37 - } - ], - "name": "Exterieure", - "unit": "%", - "hide": false - }, - "Sejour_hygrometrie": { - "data": [ - { - "x": "2012-06-01 00:00:00", - "y": 60 - }, - { - "x": "2012-07-01 00:00:00", - "y": 57 - }, - { - "x": "2012-08-01 00:00:00", - "y": 54 - }, - { - "x": "2012-09-01 00:00:00", - "y": 52 - }, - { - "x": "2012-10-01 00:00:00", - "y": 55 - }, - { - "x": "2012-11-01 00:00:00", - "y": 63 - }, - { - "x": "2012-12-01 00:00:00", - "y": 61 - }, - { - "x": "2013-01-01 00:00:00", - "y": 45 - }, - { - "x": "2013-02-01 00:00:00", - "y": 41 - }, - { - "x": "2013-03-01 00:00:00", - "y": 43 - }, - { - "x": "2013-04-01 00:00:00", - "y": 45 - }, - { - "x": "2013-05-01 00:00:00", - "y": 52 - }, - { - "x": "2013-06-01 00:00:00", - "y": 57 - }, - { - "x": "2013-07-01 00:00:00", - "y": 60 - }, - { - "x": "2013-08-01 00:00:00", - "y": 58 - }, - { - "x": "2013-09-01 00:00:00", - "y": 56 - }, - { - "x": "2013-10-01 00:00:00", - "y": 60 - }, - { - "x": "2013-11-01 00:00:00", - "y": 48 - }, - { - "x": "2013-12-01 00:00:00", - "y": 44 - }, - { - "x": "2014-01-01 00:00:00", - "y": 51 - }, - { - "x": "2014-02-01 00:00:00", - "y": 46 - }, - { - "x": "2014-03-01 00:00:00", - "y": 44 - }, - { - "x": "2014-04-01 00:00:00", - "y": 45 - }, - { - "x": "2014-05-01 00:00:00", - "y": 49 - }, - { - "x": "2014-06-01 00:00:00", - "y": 61 - }, - { - "x": "2014-10-01 00:00:00", - "y": 54 - }, - { - "x": "2014-11-01 00:00:00", - "y": 52 - }, - { - "x": "2014-12-01 00:00:00", - "y": 46 - }, - { - "x": "2015-01-01 00:00:00", - "y": 46 - }, - { - "x": "2015-02-01 00:00:00", - "y": 41 - }, - { - "x": "2015-03-01 00:00:00", - "y": 45 - }, - { - "x": "2015-04-01 00:00:00", - "y": 44 - }, - { - "x": "2015-05-01 00:00:00", - "y": 47 - }, - { - "x": "2015-06-01 00:00:00", - "y": 54 - }, - { - "x": "2015-07-01 00:00:00", - "y": 53 - }, - { - "x": "2015-08-01 00:00:00", - "y": 55 - }, - { - "x": "2015-09-01 00:00:00", - "y": 49 - }, - { - "x": "2015-10-01 00:00:00", - "y": 54 - }, - { - "x": "2015-11-01 00:00:00", - "y": 55 - }, - { - "x": "2015-12-01 00:00:00", - "y": 59 - }, - { - "x": "2016-01-01 00:00:00", - "y": 63 - }, - { - "x": "2016-02-01 00:00:00", - "y": 60 - }, - { - "x": "2016-03-01 00:00:00", - "y": 52 - }, - { - "x": "2016-04-01 00:00:00", - "y": 50 - }, - { - "x": "2016-05-01 00:00:00", - "y": 48 - }, - { - "x": "2016-06-01 00:00:00", - "y": 57 - }, - { - "x": "2016-07-01 00:00:00", - "y": 55 - }, - { - "x": "2016-08-01 00:00:00", - "y": 49 - }, - { - "x": "2016-09-01 00:00:00", - "y": 51 - }, - { - "x": "2017-03-01 00:00:00", - "y": 51 - }, - { - "x": "2017-04-01 00:00:00", - "y": 47 - }, - { - "x": "2017-05-01 00:00:00", - "y": 54 - }, - { - "x": "2017-06-01 00:00:00", - "y": 57 - }, - { - "x": "2017-07-01 00:00:00", - "y": 57 - }, - { - "x": "2017-08-01 00:00:00", - "y": 57 - }, - { - "x": "2017-09-01 00:00:00", - "y": 52 - }, - { - "x": "2017-10-01 00:00:00", - "y": 50 - }, - { - "x": "2017-11-01 00:00:00", - "y": 56 - }, - { - "x": "2017-12-01 00:00:00", - "y": 47 - }, - { - "x": "2018-01-01 00:00:00", - "y": 50 - }, - { - "x": "2018-02-01 00:00:00", - "y": 41 - }, - { - "x": "2018-03-01 00:00:00", - "y": 41 - }, - { - "x": "2018-04-01 00:00:00", - "y": 46 - }, - { - "x": "2018-05-01 00:00:00", - "y": 56 - }, - { - "x": "2018-06-01 00:00:00", - "y": 58 - }, - { - "x": "2018-07-01 00:00:00", - "y": 54 - }, - { - "x": "2018-08-01 00:00:00", - "y": 48 - }, - { - "x": "2019-03-01 00:00:00", - "y": 36 - }, - { - "x": "2019-04-01 00:00:00", - "y": 39 - }, - { - "x": "2019-05-01 00:00:00", - "y": 46 - }, - { - "x": "2019-06-01 00:00:00", - "y": 54 - }, - { - "x": "2019-07-01 00:00:00", - "y": 49 - }, - { - "x": "2019-08-01 00:00:00", - "y": 45 - }, - { - "x": "2020-03-01 00:00:00", - "y": 45 - } - ], - "name": "Sejour", - "unit": "%", - "hide": false - }, - "Soufflage_hygrometrie": { - "data": [ - { - "x": "2012-06-01 00:00:00", - "y": 64 - }, - { - "x": "2012-07-01 00:00:00", - "y": 59 - }, - { - "x": "2012-08-01 00:00:00", - "y": 58 - }, - { - "x": "2012-09-01 00:00:00", - "y": 60 - }, - { - "x": "2012-10-01 00:00:00", - "y": 71 - }, - { - "x": "2012-11-01 00:00:00", - "y": 84 - }, - { - "x": "2012-12-01 00:00:00", - "y": 66 - }, - { - "x": "2013-01-01 00:00:00", - "y": 40 - }, - { - "x": "2013-02-01 00:00:00", - "y": 41 - }, - { - "x": "2013-03-01 00:00:00", - "y": 38 - }, - { - "x": "2013-04-01 00:00:00", - "y": 39 - }, - { - "x": "2013-05-01 00:00:00", - "y": 43 - }, - { - "x": "2013-06-01 00:00:00", - "y": 50 - }, - { - "x": "2013-07-01 00:00:00", - "y": 57 - }, - { - "x": "2013-08-01 00:00:00", - "y": 58 - }, - { - "x": "2013-09-01 00:00:00", - "y": 55 - }, - { - "x": "2013-10-01 00:00:00", - "y": 57 - }, - { - "x": "2013-11-01 00:00:00", - "y": 47 - }, - { - "x": "2013-12-01 00:00:00", - "y": 40 - }, - { - "x": "2014-01-01 00:00:00", - "y": 48 - }, - { - "x": "2014-02-01 00:00:00", - "y": 40 - }, - { - "x": "2014-03-01 00:00:00", - "y": 37 - }, - { - "x": "2014-04-01 00:00:00", - "y": 45 - }, - { - "x": "2014-11-01 00:00:00", - "y": 47 - }, - { - "x": "2014-12-01 00:00:00", - "y": 82 - }, - { - "x": "2015-01-01 00:00:00", - "y": 84 - }, - { - "x": "2015-02-01 00:00:00", - "y": 78 - }, - { - "x": "2015-03-01 00:00:00", - "y": 72 - }, - { - "x": "2015-04-01 00:00:00", - "y": 54 - }, - { - "x": "2015-05-01 00:00:00", - "y": 75 - }, - { - "x": "2015-06-01 00:00:00", - "y": 72 - }, - { - "x": "2015-07-01 00:00:00", - "y": 60 - }, - { - "x": "2015-08-01 00:00:00", - "y": 61 - }, - { - "x": "2015-09-01 00:00:00", - "y": 61 - }, - { - "x": "2015-10-01 00:00:00", - "y": 80 - }, - { - "x": "2015-11-01 00:00:00", - "y": 88 - }, - { - "x": "2015-12-01 00:00:00", - "y": 90 - }, - { - "x": "2016-01-01 00:00:00", - "y": 96 - }, - { - "x": "2016-02-01 00:00:00", - "y": 97 - }, - { - "x": "2017-03-01 00:00:00", - "y": 68 - }, - { - "x": "2017-04-01 00:00:00", - "y": 64 - }, - { - "x": "2017-05-01 00:00:00", - "y": 71 - }, - { - "x": "2017-06-01 00:00:00", - "y": 73 - }, - { - "x": "2017-07-01 00:00:00", - "y": 74 - }, - { - "x": "2017-08-01 00:00:00", - "y": 76 - }, - { - "x": "2017-09-01 00:00:00", - "y": 72 - }, - { - "x": "2017-10-01 00:00:00", - "y": 72 - }, - { - "x": "2017-11-01 00:00:00", - "y": 82 - }, - { - "x": "2017-12-01 00:00:00", - "y": 67 - }, - { - "x": "2018-01-01 00:00:00", - "y": 72 - }, - { - "x": "2018-02-01 00:00:00", - "y": 57 - }, - { - "x": "2018-03-01 00:00:00", - "y": 59 - } - ], - "name": "Soufflage", - "unit": "%", - "hide": true - }, - "Mezzanine_hygrometrie": { - "data": [ - { - "x": "2012-06-01 00:00:00", - "y": 59 - }, - { - "x": "2012-07-01 00:00:00", - "y": 56 - }, - { - "x": "2012-08-01 00:00:00", - "y": 52 - }, - { - "x": "2012-09-01 00:00:00", - "y": 52 - }, - { - "x": "2012-10-01 00:00:00", - "y": 56 - }, - { - "x": "2012-11-01 00:00:00", - "y": 64 - }, - { - "x": "2012-12-01 00:00:00", - "y": 64 - }, - { - "x": "2013-01-01 00:00:00", - "y": 49 - }, - { - "x": "2013-02-01 00:00:00", - "y": 43 - }, - { - "x": "2013-03-01 00:00:00", - "y": 45 - }, - { - "x": "2013-04-01 00:00:00", - "y": 46 - }, - { - "x": "2013-05-01 00:00:00", - "y": 53 - }, - { - "x": "2013-06-01 00:00:00", - "y": 57 - }, - { - "x": "2013-07-01 00:00:00", - "y": 58 - }, - { - "x": "2013-08-01 00:00:00", - "y": 57 - }, - { - "x": "2013-09-01 00:00:00", - "y": 57 - }, - { - "x": "2013-10-01 00:00:00", - "y": 61 - }, - { - "x": "2013-11-01 00:00:00", - "y": 51 - }, - { - "x": "2013-12-01 00:00:00", - "y": 45 - }, - { - "x": "2014-01-01 00:00:00", - "y": 54 - }, - { - "x": "2014-02-01 00:00:00", - "y": 48 - }, - { - "x": "2014-03-01 00:00:00", - "y": 45 - }, - { - "x": "2014-04-01 00:00:00", - "y": 46 - }, - { - "x": "2014-05-01 00:00:00", - "y": 50 - }, - { - "x": "2014-06-01 00:00:00", - "y": 60 - }, - { - "x": "2015-09-01 00:00:00", - "y": 52 - }, - { - "x": "2015-10-01 00:00:00", - "y": 55 - }, - { - "x": "2015-11-01 00:00:00", - "y": 57 - }, - { - "x": "2015-12-01 00:00:00", - "y": 60 - }, - { - "x": "2016-01-01 00:00:00", - "y": 66 - }, - { - "x": "2016-02-01 00:00:00", - "y": 65 - }, - { - "x": "2016-03-01 00:00:00", - "y": 55 - }, - { - "x": "2016-04-01 00:00:00", - "y": 51 - }, - { - "x": "2016-05-01 00:00:00", - "y": 50 - }, - { - "x": "2016-06-01 00:00:00", - "y": 58 - }, - { - "x": "2016-07-01 00:00:00", - "y": 55 - }, - { - "x": "2016-08-01 00:00:00", - "y": 49 - }, - { - "x": "2016-09-01 00:00:00", - "y": 52 - }, - { - "x": "2017-03-01 00:00:00", - "y": 54 - }, - { - "x": "2017-04-01 00:00:00", - "y": 50 - }, - { - "x": "2017-05-01 00:00:00", - "y": 55 - }, - { - "x": "2017-06-01 00:00:00", - "y": 55 - }, - { - "x": "2017-07-01 00:00:00", - "y": 57 - }, - { - "x": "2017-08-01 00:00:00", - "y": 56 - }, - { - "x": "2017-09-01 00:00:00", - "y": 54 - }, - { - "x": "2019-03-01 00:00:00", - "y": 39 - }, - { - "x": "2019-04-01 00:00:00", - "y": 40 - }, - { - "x": "2019-05-01 00:00:00", - "y": 48 - }, - { - "x": "2019-06-01 00:00:00", - "y": 53 - }, - { - "x": "2019-07-01 00:00:00", - "y": 48 - }, - { - "x": "2019-08-01 00:00:00", - "y": 46 - } - ], - "name": "Mezzanine", - "unit": "%", - "hide": false - }, - "Extraction_hygrometrie": { - "data": [ - { - "x": "2012-06-01 00:00:00", - "y": 64 - }, - { - "x": "2012-07-01 00:00:00", - "y": 60 - }, - { - "x": "2012-08-01 00:00:00", - "y": 56 - }, - { - "x": "2012-09-01 00:00:00", - "y": 59 - }, - { - "x": "2012-10-01 00:00:00", - "y": 65 - }, - { - "x": "2012-11-01 00:00:00", - "y": 77 - }, - { - "x": "2012-12-01 00:00:00", - "y": 62 - }, - { - "x": "2013-01-01 00:00:00", - "y": 43 - }, - { - "x": "2013-02-01 00:00:00", - "y": 40 - }, - { - "x": "2013-03-01 00:00:00", - "y": 40 - }, - { - "x": "2013-04-01 00:00:00", - "y": 42 - }, - { - "x": "2013-05-01 00:00:00", - "y": 45 - }, - { - "x": "2013-06-01 00:00:00", - "y": 52 - }, - { - "x": "2013-07-01 00:00:00", - "y": 57 - }, - { - "x": "2013-08-01 00:00:00", - "y": 57 - }, - { - "x": "2013-09-01 00:00:00", - "y": 55 - }, - { - "x": "2013-10-01 00:00:00", - "y": 58 - }, - { - "x": "2013-11-01 00:00:00", - "y": 47 - }, - { - "x": "2013-12-01 00:00:00", - "y": 39 - }, - { - "x": "2014-11-01 00:00:00", - "y": 55 - }, - { - "x": "2014-12-01 00:00:00", - "y": 47 - }, - { - "x": "2015-01-01 00:00:00", - "y": 89 - }, - { - "x": "2017-03-01 00:00:00", - "y": 50 - }, - { - "x": "2017-04-01 00:00:00", - "y": 50 - }, - { - "x": "2017-05-01 00:00:00", - "y": 56 - }, - { - "x": "2017-06-01 00:00:00", - "y": 59 - }, - { - "x": "2017-07-01 00:00:00", - "y": 58 - }, - { - "x": "2017-08-01 00:00:00", - "y": 60 - }, - { - "x": "2017-09-01 00:00:00", - "y": 55 - }, - { - "x": "2017-10-01 00:00:00", - "y": 54 - }, - { - "x": "2017-11-01 00:00:00", - "y": 57 - } - ], - "name": "Extraction", - "unit": "%", - "hide": true - } -} diff --git a/modules/private/websites/papa/maison_bbc_static/favicon.ico b/modules/private/websites/papa/maison_bbc_static/favicon.ico deleted file mode 100644 index 03990f9..0000000 Binary files a/modules/private/websites/papa/maison_bbc_static/favicon.ico and /dev/null differ diff --git a/modules/private/websites/papa/maison_bbc_static/index.html b/modules/private/websites/papa/maison_bbc_static/index.html deleted file mode 100644 index 78c318c..0000000 --- a/modules/private/websites/papa/maison_bbc_static/index.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - Pause - - - - - - - - -
-

Site web en pause !

-
- -

Le site est actuellement en pause.

-
-

Données historiques

-
- - - - -
- -
- - - - diff --git a/modules/private/websites/papa/maison_bbc_static/lamaison.png b/modules/private/websites/papa/maison_bbc_static/lamaison.png deleted file mode 100644 index dad243c..0000000 Binary files a/modules/private/websites/papa/maison_bbc_static/lamaison.png and /dev/null differ diff --git a/modules/private/websites/papa/surveillance.nix b/modules/private/websites/papa/surveillance.nix deleted file mode 100644 index a8e5149..0000000 --- a/modules/private/websites/papa/surveillance.nix +++ /dev/null @@ -1,50 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.websites.papa.surveillance; - varDir = "/var/lib/ftp/papa"; - apacheUser = config.services.httpd.Prod.user; -in { - options.myServices.websites.papa.surveillance.enable = lib.mkEnableOption "enable Papa surveillance's website"; - - config = lib.mkIf cfg.enable { - security.acme.certs."ftp".extraDomains."surveillance.maison.bbc.bouya.org" = null; - - services.cron = { - systemCronJobs = let - script = pkgs.writeScript "cleanup-papa" '' - #!${pkgs.stdenv.shell} - d=$(date -d "7 days ago" +%Y%m%d) - for i in /var/lib/ftp/papa/*/20[0-9][0-9][0-9][0-9][0-9][0-9]; do - if [ "$d" -gt $(basename $i) ]; then - rm -rf "$i" - fi - done - ''; - in - [ - '' - 0 6 * * * ${apacheUser} ${script} - '' - ]; - }; - - services.websites.env.production.vhostConfs.papa_surveillance = { - certName = "papa"; - certMainHost = "surveillance.maison.bbc.bouya.org"; - hosts = [ "surveillance.maison.bbc.bouya.org" ]; - root = varDir; - extraConfig = [ - '' - Use Apaxy "${varDir}" "title .duplicity-ignore" - - Use LDAPConnect - Options Indexes - AllowOverride None - Require ldap-group cn=surveillance.maison.bbc.bouya.org,cn=httpd,ou=services,dc=immae,dc=eu - - '' - ]; - }; - }; -} - diff --git a/modules/private/websites/patrick_fodella/altermondia.nix b/modules/private/websites/patrick_fodella/altermondia.nix deleted file mode 100644 index 2a41aa3..0000000 --- a/modules/private/websites/patrick_fodella/altermondia.nix +++ /dev/null @@ -1,73 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.websites.patrick_fodella.altermondia; - varDir = "/var/lib/ftp/patrick_fodella/altermondia"; - apacheUser = config.services.httpd.Prod.user; - apacheGroup = config.services.httpd.Prod.group; -in { - options.myServices.websites.patrick_fodella.altermondia.enable = lib.mkEnableOption "enable Patrick Fodella Altermondia's website"; - - config = lib.mkIf cfg.enable { - services.webstats.sites = [ { name = "altermondia.org"; } ]; - - system.activationScripts.patrick_fodella_altermondia = { - deps = [ "httpd" ]; - text = '' - install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/php/sessions/patrick_fodella_altermondia - ''; - }; - systemd.services.phpfpm-patrick_fodella_altermondia.after = lib.mkAfter [ "mysql.service" ]; - systemd.services.phpfpm-patrick_fodella_altermondia.wants = [ "mysql.service" ]; - services.phpfpm.pools.patrick_fodella_altermondia = { - user = apacheUser; - group = apacheGroup; - settings = { - "listen.owner" = apacheUser; - "listen.group" = apacheGroup; - - "pm" = "ondemand"; - "pm.max_children" = "5"; - "pm.process_idle_timeout" = "60"; - - "php_admin_value[open_basedir]" = "/var/lib/php/sessions/patrick_fodella_altermondia:${varDir}:/tmp"; - "php_admin_value[session.save_path]" = "/var/lib/php/sessions/patrick_fodella_altermondia"; - }; - phpOptions = config.services.phpfpm.phpOptions + '' - disable_functions = "mail" - ''; - phpPackage = pkgs.php72; - }; - services.websites.env.production.modules = [ "proxy_fcgi" ]; - services.websites.env.production.vhostConfs.patrick_fodella_altermondia = { - certName = "patrick_fodella"; - addToCerts = true; - hosts = ["altermondia.org" "www.altermondia.org" ]; - root = varDir; - extraConfig = [ - '' - Use Stats altermondia.org - - RewriteEngine on - RewriteCond "%{HTTP_HOST}" "!^altermondia\.org$" [NC] - RewriteRule ^(.+)$ https://altermondia.org$1 [R=302,L] - - - SetHandler "proxy:unix:${config.services.phpfpm.pools.patrick_fodella_altermondia.socket}|fcgi://localhost" - - - - AllowOverride None - Require all denied - - - DirectoryIndex index.php index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride all - Require all granted - - '' - ]; - }; - }; -} - diff --git a/modules/private/websites/patrick_fodella/ecolyeu.nix b/modules/private/websites/patrick_fodella/ecolyeu.nix deleted file mode 100644 index 00dab76..0000000 --- a/modules/private/websites/patrick_fodella/ecolyeu.nix +++ /dev/null @@ -1,72 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.websites.patrick_fodella.ecolyeu; - varDir = "/var/lib/ftp/patrick_fodella/ecolyeu_pessicart"; - apacheUser = config.services.httpd.Prod.user; - apacheGroup = config.services.httpd.Prod.group; -in { - options.myServices.websites.patrick_fodella.ecolyeu.enable = lib.mkEnableOption "enable Patrick Fodella Ecolyeu's website"; - - config = lib.mkIf cfg.enable { - services.webstats.sites = [ { name = "ecolyeu-pessicart-nice.fr"; } ]; - - system.activationScripts.patrick_fodella_ecolyeu = { - deps = [ "httpd" ]; - text = '' - install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/php/sessions/patrick_fodella_ecolyeu - ''; - }; - systemd.services.phpfpm-patrick_fodella_ecolyeu.after = lib.mkAfter [ "mysql.service" ]; - systemd.services.phpfpm-patrick_fodella_ecolyeu.wants = [ "mysql.service" ]; - services.phpfpm.pools.patrick_fodella_ecolyeu = { - user = apacheUser; - group = apacheGroup; - settings = { - "listen.owner" = apacheUser; - "listen.group" = apacheGroup; - - "pm" = "ondemand"; - "pm.max_children" = "5"; - "pm.process_idle_timeout" = "60"; - - "php_admin_value[open_basedir]" = "/var/lib/php/sessions/patrick_fodella_ecolyeu:${varDir}:/tmp"; - "php_admin_value[session.save_path]" = "/var/lib/php/sessions/patrick_fodella_ecolyeu"; - }; - phpOptions = config.services.phpfpm.phpOptions + '' - disable_functions = "mail" - ''; - phpPackage = pkgs.php72; - }; - services.websites.env.production.modules = [ "proxy_fcgi" ]; - services.websites.env.production.vhostConfs.patrick_fodella_ecolyeu = { - certName = "patrick_fodella"; - certMainHost = "ecolyeu-pessicart-nice.fr"; - hosts = ["ecolyeu-pessicart-nice.fr" "www.ecolyeu-pessicart-nice.fr" ]; - root = varDir; - extraConfig = [ - '' - Use Stats ecolyeu-pessicart-nice.fr - - RewriteEngine on - RewriteCond "%{HTTP_HOST}" "!^www\.ecolyeu-pessicart-nice\.fr$" [NC] - RewriteRule ^(.+)$ https://www.ecolyeu-pessicart-nice.fr$1 [R=302,L] - - - SetHandler "proxy:unix:${config.services.phpfpm.pools.patrick_fodella_ecolyeu.socket}|fcgi://localhost" - - - - AllowOverride None - Require all denied - - - DirectoryIndex index.php index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride all - Require all granted - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/piedsjaloux/app/default.nix b/modules/private/websites/piedsjaloux/app/default.nix deleted file mode 100644 index 4525a18..0000000 --- a/modules/private/websites/piedsjaloux/app/default.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ environment, varDir, secretsPath -, composerEnv, fetchurl, fetchgit, sources }: -let - app = composerEnv.buildPackage ( - import ./php-packages.nix { inherit composerEnv fetchurl fetchgit; } // - rec { - version = sources.websites-piedsjaloux-app.version; - pname = "piedsjaloux"; - name = "${pname}-${version}"; - src = sources.websites-piedsjaloux-app; - noDev = (environment == "prod"); - preInstall = '' - export SYMFONY_ENV="${environment}" - ''; - # /!\ miniatures and data need to be in the same physical dir due to a - # bug in leapt.im (searches for data/../miniatures) - postInstall = '' - cd $out - rm app/config/parameters.yml - ln -sf ${secretsPath} app/config/parameters.yml - rm -rf var/{logs,cache,data,miniatures,tmp} - ln -sf ${varDir}/{logs,cache,data,miniatures,tmp} var/ - ''; - passthru = { - inherit varDir environment secretsPath; - webRoot = "${app}/web"; - }; - }); -in app diff --git a/modules/private/websites/piedsjaloux/app/php-packages.nix b/modules/private/websites/piedsjaloux/app/php-packages.nix deleted file mode 100644 index 7b99936..0000000 --- a/modules/private/websites/piedsjaloux/app/php-packages.nix +++ /dev/null @@ -1,1009 +0,0 @@ -# Generated with composer2nix and adapted to return only the list of -# packages -{ composerEnv, fetchurl, fetchgit ? null }: -{ - packages = { - "behat/transliterator" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "behat-transliterator-826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c"; - src = fetchurl { - url = https://api.github.com/repos/Behat/Transliterator/zipball/826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c; - sha256 = "1mgc9azx79fkrxahji3xwbgqhlcnvh3xk6llqdvhjb7vgzj4bqq0"; - }; - }; - }; - "components/bootstrap" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "components-bootstrap-5d60b2efd3159e1a9e203901849b3493c5aac61f"; - src = fetchurl { - url = https://api.github.com/repos/components/bootstrap/zipball/5d60b2efd3159e1a9e203901849b3493c5aac61f; - sha256 = "0jdyxl86dr2lf8az1vby84i7kdn1qcqkp8fy60rs18gav0aqp4fg"; - }; - }; - }; - "components/jquery" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "components-jquery-459648cda77875519c5da3ae1dd0ed5d170aa649"; - src = fetchurl { - url = https://api.github.com/repos/components/jquery/zipball/459648cda77875519c5da3ae1dd0ed5d170aa649; - sha256 = "04jv8yifhwx0cpkw3y3ng0bs2dv77pzrdd640p59rjxwba6r1lbb"; - }; - }; - }; - "components/jqueryui" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "components-jqueryui-c34f8dbf3ba57b3784b93f26119f436c0e8288e1"; - src = fetchurl { - url = https://api.github.com/repos/components/jqueryui/zipball/c34f8dbf3ba57b3784b93f26119f436c0e8288e1; - sha256 = "00nkg6z8g6l3jysyzsfmfxhxqcdsd3jfqib28j8kn2frzx508xv9"; - }; - }; - }; - "composer/ca-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "composer-ca-bundle-8afa52cd417f4ec417b4bfe86b68106538a87660"; - src = fetchurl { - url = https://api.github.com/repos/composer/ca-bundle/zipball/8afa52cd417f4ec417b4bfe86b68106538a87660; - sha256 = "18b0gq29frjf4yhl4sl3i3zbz6zr3qjgsjb8cjdhz65vpb50581p"; - }; - }; - }; - "container-interop/container-interop" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "container-interop-container-interop-79cbf1341c22ec75643d841642dd5d6acd83bdb8"; - src = fetchurl { - url = https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8; - sha256 = "1pxm461g5flcq50yabr01nw8w17n3g7klpman9ps3im4z0604m52"; - }; - }; - }; - "dmishh/settings-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "dmishh-settings-bundle-0ee48b015691694a8dcbd3ee654d33386e7bf478"; - src = fetchurl { - url = https://api.github.com/repos/dmishh/SettingsBundle/zipball/0ee48b015691694a8dcbd3ee654d33386e7bf478; - sha256 = "0m2fw5shvnkqlz0nm27ggpmkipfh377y1hjsw343zv1nn72nxfqf"; - }; - }; - }; - "doctrine/annotations" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-annotations-c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5; - sha256 = "0b80xpqd3j99xgm0c41kbgy0k6knrfnd29223c93295sb12112g7"; - }; - }; - }; - "doctrine/cache" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-cache-d768d58baee9a4862ca783840eca1b9add7a7f57"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/cache/zipball/d768d58baee9a4862ca783840eca1b9add7a7f57; - sha256 = "1kljhw4gqp12iz88h6ymsrlfir2fis7icn6dffyizfc1csyb4s2i"; - }; - }; - }; - "doctrine/collections" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-collections-a01ee38fcd999f34d9bfbcee59dbda5105449cbf"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/collections/zipball/a01ee38fcd999f34d9bfbcee59dbda5105449cbf; - sha256 = "0d36zc21ka0pdac9xpkxsgf5zzw9gp0m9lk3r3xs5y70j0lkkkis"; - }; - }; - }; - "doctrine/common" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-common-30e33f60f64deec87df728c02b107f82cdafad9d"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/common/zipball/30e33f60f64deec87df728c02b107f82cdafad9d; - sha256 = "0s4vv14ibyx62a9aj3wn5cs2bbxd72fajmfmi8qb5l11gx0375na"; - }; - }; - }; - "doctrine/dbal" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-dbal-22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/dbal/zipball/22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9; - sha256 = "0kbahs699jd8pxf512dgg7arv49dc7qzi3mx8snxqm4h15n5brnj"; - }; - }; - }; - "doctrine/doctrine-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-doctrine-bundle-82d2c63cd09acbde2332f55d9aa7b28aefe4983d"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/DoctrineBundle/zipball/82d2c63cd09acbde2332f55d9aa7b28aefe4983d; - sha256 = "0gzrigv360rp50yxpwidbkf8vlagym0w1if010yz5xcfrz37cpn3"; - }; - }; - }; - "doctrine/doctrine-cache-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-doctrine-cache-bundle-5514c90d9fb595e1095e6d66ebb98ce9ef049927"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/5514c90d9fb595e1095e6d66ebb98ce9ef049927; - sha256 = "04njrfhw4fc2ifacd9h0wd9i14l7ycv3hanbqrw5ilsai02j6asa"; - }; - }; - }; - "doctrine/doctrine-migrations-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-doctrine-migrations-bundle-49fa399181db4bf4f9f725126bd1cb65c4398dce"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/49fa399181db4bf4f9f725126bd1cb65c4398dce; - sha256 = "1a73xjhjrjlvkh8d253kfc2rbxd2h4hwafhv5078dy7rg6x9blyn"; - }; - }; - }; - "doctrine/event-manager" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-event-manager-a520bc093a0170feeb6b14e9d83f3a14452e64b3"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/event-manager/zipball/a520bc093a0170feeb6b14e9d83f3a14452e64b3; - sha256 = "165cxvw4idqj01l63nya2whpdb3fz6ld54rx198b71bzwfrydl88"; - }; - }; - }; - "doctrine/inflector" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-inflector-5527a48b7313d15261292c149e55e26eae771b0a"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a; - sha256 = "0ng6vlwjr8h6hqwa32ynykz1mhlfsff5hirjidlk086ab6njppa5"; - }; - }; - }; - "doctrine/instantiator" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-instantiator-185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda; - sha256 = "1mah9a6mb30qad1zryzjain2dxw29d8h4bjkbcs3srpm3p891msy"; - }; - }; - }; - "doctrine/lexer" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-lexer-83893c552fd2045dd78aef794c31e694c37c0b8c"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c; - sha256 = "0cyh3vwcl163cx1vrcwmhlh5jg9h47xwiqgzc6rwscxw0ppd1v74"; - }; - }; - }; - "doctrine/migrations" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-migrations-215438c0eef3e5f9b7da7d09c6b90756071b43e6"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/migrations/zipball/215438c0eef3e5f9b7da7d09c6b90756071b43e6; - sha256 = "0k6sgw65vji9rgib10mq2m634m41a67inspkrcw4qixig2lnb3ld"; - }; - }; - }; - "doctrine/orm" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-orm-434820973cadf2da2d66e7184be370084cc32ca8"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/orm/zipball/434820973cadf2da2d66e7184be370084cc32ca8; - sha256 = "114fyq8kaf5qzfkp8sdygqflf3z94va1cs5c3scycfpg9cmi4gls"; - }; - }; - }; - "doctrine/persistence" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-persistence-c0f1c17602afc18b4cbd8e1c8125f264c9cf7d38"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/persistence/zipball/c0f1c17602afc18b4cbd8e1c8125f264c9cf7d38; - sha256 = "0xdm5n38rjas1mlyxc15sg1as5h7y012mdb0j9lr6cvphgnaxxv7"; - }; - }; - }; - "doctrine/reflection" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-reflection-02538d3f95e88eb397a5f86274deb2c6175c2ab6"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/reflection/zipball/02538d3f95e88eb397a5f86274deb2c6175c2ab6; - sha256 = "12n9zik4lxb9lx1jf0nbvg9vl9nv958a7z1yjx48scfxd1d1sxjy"; - }; - }; - }; - "eko/feedbundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "eko-feedbundle-d4e626616d9ccf6527212d3bdda15f9af3838e4f"; - src = fetchurl { - url = https://api.github.com/repos/eko/FeedBundle/zipball/d4e626616d9ccf6527212d3bdda15f9af3838e4f; - sha256 = "145f4mq2bpsdayaiqmgz1asmjx2is4v327h2ny2wp03knnkjvnfq"; - }; - }; - }; - "fig/link-util" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "fig-link-util-1a07821801a148be4add11ab0603e4af55a72fac"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/link-util/zipball/1a07821801a148be4add11ab0603e4af55a72fac; - sha256 = "0ky1pq4a17br5zvcychjghgwr6wpkgp409hdv0ljdk3ks90w5w64"; - }; - }; - }; - "gedmo/doctrine-extensions" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "gedmo-doctrine-extensions-87c78ff9fd4b90460386f753d95622f6fbbfcb27"; - src = fetchurl { - url = https://api.github.com/repos/Atlantic18/DoctrineExtensions/zipball/87c78ff9fd4b90460386f753d95622f6fbbfcb27; - sha256 = "1i33xy9s18rncc1fllwi2qi7hrxj8g762fvgl9np7xndxa7kclyb"; - }; - }; - }; - "gregwar/captcha" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "gregwar-captcha-cf953dd79748406e0292cea8c565399681e4d345"; - src = fetchurl { - url = https://api.github.com/repos/Gregwar/Captcha/zipball/cf953dd79748406e0292cea8c565399681e4d345; - sha256 = "153m7bkhs3drxk0jfbq67a8vr1m13g7isc4ck44k5hyfzpcazb5i"; - }; - }; - }; - "gregwar/captcha-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "gregwar-captcha-bundle-c2d5468556890dd25e0b53bd345fc205562c86f7"; - src = fetchurl { - url = https://api.github.com/repos/Gregwar/CaptchaBundle/zipball/c2d5468556890dd25e0b53bd345fc205562c86f7; - sha256 = "04wcvqq457h6v7mzmrar946swd9akk27fmfig4qj8hpxzj250cgk"; - }; - }; - }; - "helios-ag/fm-bbcode-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "helios-ag-fm-bbcode-bundle-d88ff5ca6c0ab71ec094d5a7d56b0bc8bc100363"; - src = fetchurl { - url = https://api.github.com/repos/helios-ag/FMBbCodeBundle/zipball/d88ff5ca6c0ab71ec094d5a7d56b0bc8bc100363; - sha256 = "13g9ddd2p3nf1vrbkf6l00qdqz89rq6d8l20p68dmiy7mb6kpynl"; - }; - }; - }; - "immae/piedsjaloux-ckeditor-component" = { - targetDir = ""; - src = fetchgit { - name = "immae-piedsjaloux-ckeditor-component-9946db9daaa76448d0e43247472cdedd2a5ea22a"; - url = "https://git.immae.eu/perso/Immae/Projets/packagist/piedsjaloux-ckeditor-component.git"; - rev = "9946db9daaa76448d0e43247472cdedd2a5ea22a"; - sha256 = "183rgl23li3bqsynfmvv2s7jvlmqf6a5pskgrcxlaxcrr0d09n8c"; - }; - }; - "incenteev/composer-parameter-handler" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "incenteev-composer-parameter-handler-933c45a34814f27f2345c11c37d46b3ca7303550"; - src = fetchurl { - url = https://api.github.com/repos/Incenteev/ParameterHandler/zipball/933c45a34814f27f2345c11c37d46b3ca7303550; - sha256 = "1zqdwlcl790kjyz4rkpva35xkfsp8kslds82fzznj0yigkgnbifm"; - }; - }; - }; - "jdorn/sql-formatter" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "jdorn-sql-formatter-64990d96e0959dff8e059dfcdc1af130728d92bc"; - src = fetchurl { - url = https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc; - sha256 = "1dnmkm8mxylvxjwi0bdkzrlklncqx92fa4fwqp5bh2ypj8gaagzi"; - }; - }; - }; - "kriswallsmith/assetic" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "kriswallsmith-assetic-e911c437dbdf006a8f62c2f59b15b2d69a5e0aa1"; - src = fetchurl { - url = https://api.github.com/repos/kriswallsmith/assetic/zipball/e911c437dbdf006a8f62c2f59b15b2d69a5e0aa1; - sha256 = "1dqk4zvx8fgqf8rb81sj9bipl5431jib2b9kcvxyig5fw99irpf8"; - }; - }; - }; - "leapt/im-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "leapt-im-bundle-83442778d118f6edb537b93f9746c3a97e56c3d1"; - src = fetchurl { - url = https://api.github.com/repos/leapt/im-bundle/zipball/83442778d118f6edb537b93f9746c3a97e56c3d1; - sha256 = "1gm4ih3v1j0xjm7mrpspd3yacdwvbqgag22cyqmix0hc9hw3pc6a"; - }; - }; - }; - "luxifer/doctrine-functions" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "luxifer-doctrine-functions-e1c0bb1a5cb002d9fc82d8b32a5da28c02d34c6c"; - src = fetchurl { - url = https://api.github.com/repos/luxifer/doctrine-functions/zipball/e1c0bb1a5cb002d9fc82d8b32a5da28c02d34c6c; - sha256 = "1sw4826nvs5q0y2na9m26rbxfiaw0kfqwhky7x7apicgx5adqfa9"; - }; - }; - }; - "mjohnson/decoda" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "mjohnson-decoda-8cd0928b78a4bf5ade48b80c934370fc1f5f84a1"; - src = fetchurl { - url = https://api.github.com/repos/milesj/decoda/zipball/8cd0928b78a4bf5ade48b80c934370fc1f5f84a1; - sha256 = "0wcxz9yirz4zir06xvnlchqgppmyasymak06gn46jn6v6c9dsykc"; - }; - }; - }; - "monolog/monolog" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "monolog-monolog-bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266"; - src = fetchurl { - url = https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266; - sha256 = "0h3nnxjf2bdh7nmpqnpij99lqv6bw13r2bx83d8vn5zvblwg5png"; - }; - }; - }; - "ocramius/package-versions" = { - targetDir = ""; - needsModifyRights = true; - src = composerEnv.buildZipPackage { - name = "ocramius-package-versions-4489d5002c49d55576fa0ba786f42dbb009be46f"; - src = fetchurl { - url = https://api.github.com/repos/Ocramius/PackageVersions/zipball/4489d5002c49d55576fa0ba786f42dbb009be46f; - sha256 = "039c404g9597x45xh04bnn8kmcyknkbnr57yb9s7vf29vfrg4881"; - }; - }; - }; - "ocramius/proxy-manager" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "ocramius-proxy-manager-14b137b06b0f911944132df9d51e445a35920ab1"; - src = fetchurl { - url = https://api.github.com/repos/Ocramius/ProxyManager/zipball/14b137b06b0f911944132df9d51e445a35920ab1; - sha256 = "10y5msgh2jdlw4w075fasv40yq01szjy15m3f0wgc89hlfmqz0sn"; - }; - }; - }; - "paragonie/random_compat" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "paragonie-random_compat-84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95"; - src = fetchurl { - url = https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95; - sha256 = "03nsccdvcb79l64b7lsmx0n8ldf5z3v8niqr7bpp6wg401qp9p09"; - }; - }; - }; - "psr/cache" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "psr-cache-d11b50ad223250cf17b86e38383413f5a6764bf8"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8; - sha256 = "06i2k3dx3b4lgn9a4v1dlgv8l9wcl4kl7vzhh63lbji0q96hv8qz"; - }; - }; - }; - "psr/container" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "psr-container-b7ce3b176482dbbc1245ebf52b181af44c2cf55f"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f; - sha256 = "0rkz64vgwb0gfi09klvgay4qnw993l1dc03vyip7d7m2zxi6cy4j"; - }; - }; - }; - "psr/link" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "psr-link-eea8e8662d5cd3ae4517c9b864493f59fca95562"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/link/zipball/eea8e8662d5cd3ae4517c9b864493f59fca95562; - sha256 = "091k4p9irkqnmq9b0p792wz1hb7dm4rafpjilw9im9xhsxgkmr13"; - }; - }; - }; - "psr/log" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "psr-log-6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd; - sha256 = "1i351p3gd1pgjcjxv7mwwkiw79f1xiqr38irq22156h05zlcx80d"; - }; - }; - }; - "psr/simple-cache" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "psr-simple-cache-408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"; - src = fetchurl { - url = https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b; - sha256 = "1djgzclkamjxi9jy4m9ggfzgq1vqxaga2ip7l3cj88p7rwkzjxgw"; - }; - }; - }; - "robloach/component-installer" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "robloach-component-installer-908a859aa7c4949ba9ad67091e67bac10b66d3d7"; - src = fetchurl { - url = https://api.github.com/repos/RobLoach/component-installer/zipball/908a859aa7c4949ba9ad67091e67bac10b66d3d7; - sha256 = "19y5sv4k338bihzmm8iac6q43r18vxhmbpvrdhz8jn39r51ampq9"; - }; - }; - }; - "sensio/distribution-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "sensio-distribution-bundle-59eac70f15f97ee945924948a6f5e2f6f86b7a4b"; - src = fetchurl { - url = https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/59eac70f15f97ee945924948a6f5e2f6f86b7a4b; - sha256 = "05mj4c0ahwg6l2wipyqfyyjjp1m2vvl7ymp61nvwv7zhvqacvljs"; - }; - }; - }; - "sensio/framework-extra-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "sensio-framework-extra-bundle-bb907234df776b68922eb4b25bfa061683597b6a"; - src = fetchurl { - url = https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/bb907234df776b68922eb4b25bfa061683597b6a; - sha256 = "011hcljjcfq5qy4a7mlf0hwqxyb58yci40ini0n5rqandcyk2nck"; - }; - }; - }; - "sensiolabs/security-checker" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "sensiolabs-security-checker-46be3f58adac13084497961e10eed9a7fb4d44d1"; - src = fetchurl { - url = https://api.github.com/repos/sensiolabs/security-checker/zipball/46be3f58adac13084497961e10eed9a7fb4d44d1; - sha256 = "1caqf3hdfsajj9nb8fpinvs6apv90g1srwxcyxdnr6a8d6g0p6qi"; - }; - }; - }; - "swiftmailer/swiftmailer" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "swiftmailer-swiftmailer-181b89f18a90f8925ef805f950d47a7190e9b950"; - src = fetchurl { - url = https://api.github.com/repos/swiftmailer/swiftmailer/zipball/181b89f18a90f8925ef805f950d47a7190e9b950; - sha256 = "0hkmawv3bhbqdavy4wxqhzajg5zqd7chsi8w27y2zdi5r35az75d"; - }; - }; - }; - "symfony/assetic-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-assetic-bundle-2e0a23a4874838e26de6f025e02fc63328921a4c"; - src = fetchurl { - url = https://api.github.com/repos/symfony/assetic-bundle/zipball/2e0a23a4874838e26de6f025e02fc63328921a4c; - sha256 = "17rxrkyzxa6x5nn7qhhhdgx4z0nlznnq5fifza4wv9znca8bbwyc"; - }; - }; - }; - "symfony/monolog-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-monolog-bundle-572e143afc03419a75ab002c80a2fd99299195ff"; - src = fetchurl { - url = https://api.github.com/repos/symfony/monolog-bundle/zipball/572e143afc03419a75ab002c80a2fd99299195ff; - sha256 = "0g8icydnwfbqcbc56pqyc8bv1vp31331w0r75r3hqh225p2j1nd7"; - }; - }; - }; - "symfony/polyfill-apcu" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-apcu-19e1b73bf255265ad0b568f81766ae2a3266d8d2"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-apcu/zipball/19e1b73bf255265ad0b568f81766ae2a3266d8d2; - sha256 = "0jg33c81kwkpxk0b18jkslz9jkbkxl5k48h6m5b33dm63p1fj05r"; - }; - }; - }; - "symfony/polyfill-ctype" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-ctype-e3d826245268269cd66f8326bd8bc066687b4a19"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19; - sha256 = "16md0qmy5jvvl7lc6n6r5hxjdr5i30vl6n9rpkm4b11rh2nqh7mh"; - }; - }; - }; - "symfony/polyfill-intl-icu" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-intl-icu-f22a90256d577c7ef7efad8df1f0201663d57644"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/f22a90256d577c7ef7efad8df1f0201663d57644; - sha256 = "0x7h8l248l1gc07xmvfixq6p80ifdaa29qympfq3jzfb79k69slq"; - }; - }; - }; - "symfony/polyfill-mbstring" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-mbstring-c79c051f5b3a46be09205c73b80b346e4153e494"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494; - sha256 = "18v2777cky55ah6xi4dh383mp4iddwzmnvx81qd86y1kgfykwhpi"; - }; - }; - }; - "symfony/polyfill-php56" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-php56-ff208829fe1aa48ab9af356992bb7199fed551af"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-php56/zipball/ff208829fe1aa48ab9af356992bb7199fed551af; - sha256 = "0vmpiwakc7hpbr6jwpk7cqcy41ybgwl6jkn3q8c4ryxynknn5hfk"; - }; - }; - }; - "symfony/polyfill-php70" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-php70-6b88000cdd431cd2e940caa2cb569201f3f84224"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-php70/zipball/6b88000cdd431cd2e940caa2cb569201f3f84224; - sha256 = "08h77r1i2q4pwdd0yk3pfhqqgk0z7gwmkzmvykx9bfv1z7a0h8ik"; - }; - }; - }; - "symfony/polyfill-util" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-polyfill-util-3b58903eae668d348a7126f999b0da0f2f93611c"; - src = fetchurl { - url = https://api.github.com/repos/symfony/polyfill-util/zipball/3b58903eae668d348a7126f999b0da0f2f93611c; - sha256 = "00bb5mgljk6d54nyvd4gmc7mbzfr4b4q7h3rxmv8rzq613wcjp3i"; - }; - }; - }; - "symfony/swiftmailer-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-swiftmailer-bundle-c4808f5169efc05567be983909d00f00521c53ec"; - src = fetchurl { - url = https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/c4808f5169efc05567be983909d00f00521c53ec; - sha256 = "0jmd3slhb3gf3c3krmk2a9fi4ixdxvqlimdkfpj0sfaaq0115y01"; - }; - }; - }; - "symfony/symfony" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-symfony-f6b8ddc362b1cf3fb06548693c3adbb736092412"; - src = fetchurl { - url = https://api.github.com/repos/symfony/symfony/zipball/f6b8ddc362b1cf3fb06548693c3adbb736092412; - sha256 = "0ip7k5xf34w4p1zvv2nkv4nyik3asidk3zlgzyc1v57429z0f28q"; - }; - }; - }; - "twig/extensions" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "twig-extensions-57873c8b0c1be51caa47df2cdb824490beb16202"; - src = fetchurl { - url = https://api.github.com/repos/twigphp/Twig-extensions/zipball/57873c8b0c1be51caa47df2cdb824490beb16202; - sha256 = "1sjajjd6vnczvdrl9b8zhzr06l5dflzqiwg9d33d92q8gli4j7jn"; - }; - }; - }; - "twig/twig" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "twig-twig-a11dd39f5b6589e14f0ff3b36675d06047c589b1"; - src = fetchurl { - url = https://api.github.com/repos/twigphp/Twig/zipball/a11dd39f5b6589e14f0ff3b36675d06047c589b1; - sha256 = "0rnwam9379gj5m4ik0fh6c81dbr7kwj2b3x1gnmpf6awa5fm261n"; - }; - }; - }; - "zendframework/zend-code" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "zendframework-zend-code-c21db169075c6ec4b342149f446e7b7b724f95eb"; - src = fetchurl { - url = https://api.github.com/repos/zendframework/zend-code/zipball/c21db169075c6ec4b342149f446e7b7b724f95eb; - sha256 = "031mfsahjkl63348020wq05273kvszx0dv2766zmzncnd6fcggw1"; - }; - }; - }; - "zendframework/zend-escaper" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "zendframework-zend-escaper-31d8aafae982f9568287cb4dce987e6aff8fd074"; - src = fetchurl { - url = https://api.github.com/repos/zendframework/zend-escaper/zipball/31d8aafae982f9568287cb4dce987e6aff8fd074; - sha256 = "16gwqh9zpclc3fmf89cf738mxfh36ar3wdf9i0wvby0g0nhknkd7"; - }; - }; - }; - "zendframework/zend-eventmanager" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "zendframework-zend-eventmanager-a5e2583a211f73604691586b8406ff7296a946dd"; - src = fetchurl { - url = https://api.github.com/repos/zendframework/zend-eventmanager/zipball/a5e2583a211f73604691586b8406ff7296a946dd; - sha256 = "08a05gn40hfdy2zhz4gcd3r6q7m7zcaks5kpvb9dx1awgx0pzr8n"; - }; - }; - }; - "zendframework/zend-feed" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "zendframework-zend-feed-6641f4cf3f4586c63f83fd70b6d19966025c8888"; - src = fetchurl { - url = https://api.github.com/repos/zendframework/zend-feed/zipball/6641f4cf3f4586c63f83fd70b6d19966025c8888; - sha256 = "0wl2pf4cq0snlp3gbl2ia662i48yils464qlfqf7gdmbn1ryzcpi"; - }; - }; - }; - "zendframework/zend-http" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "zendframework-zend-http-2c8aed3d25522618573194e7cc51351f8cd4a45b"; - src = fetchurl { - url = https://api.github.com/repos/zendframework/zend-http/zipball/2c8aed3d25522618573194e7cc51351f8cd4a45b; - sha256 = "1vy6b24ihwv1g08hjnw4pd7c5171g866jnlr3j6fg0xqv79s4dn9"; - }; - }; - }; - "zendframework/zend-loader" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "zendframework-zend-loader-78f11749ea340f6ca316bca5958eef80b38f9b6c"; - src = fetchurl { - url = https://api.github.com/repos/zendframework/zend-loader/zipball/78f11749ea340f6ca316bca5958eef80b38f9b6c; - sha256 = "056zp0xchc4ckijg969im5him3j4cji6hsy26fiaycwprniaqdmg"; - }; - }; - }; - "zendframework/zend-servicemanager" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "zendframework-zend-servicemanager-a1ed6140d0d3ee803fec96582593ed024950067b"; - src = fetchurl { - url = https://api.github.com/repos/zendframework/zend-servicemanager/zipball/a1ed6140d0d3ee803fec96582593ed024950067b; - sha256 = "0s3aplkilrd8b18xh55h9m1yvnp9b6vnlgby4gqhqv8npnxxqir9"; - }; - }; - }; - "zendframework/zend-stdlib" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "zendframework-zend-stdlib-66536006722aff9e62d1b331025089b7ec71c065"; - src = fetchurl { - url = https://api.github.com/repos/zendframework/zend-stdlib/zipball/66536006722aff9e62d1b331025089b7ec71c065; - sha256 = "0cl0lcgqb5aja6iijp0wrclxra57imwsmhkfpahdl2bsgs1inf2f"; - }; - }; - }; - "zendframework/zend-uri" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "zendframework-zend-uri-3b6463645c6766f78ce537c70cb4fdabee1e725f"; - src = fetchurl { - url = https://api.github.com/repos/zendframework/zend-uri/zipball/3b6463645c6766f78ce537c70cb4fdabee1e725f; - sha256 = "0zkb88y9qbgshm8ys5yjxhz6a7fhxl7waygwn37pqsbvz74mbbvp"; - }; - }; - }; - "zendframework/zend-validator" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "zendframework-zend-validator-f0789b4c4c099afdd2ecc58cc209a26c64bd4f17"; - src = fetchurl { - url = https://api.github.com/repos/zendframework/zend-validator/zipball/f0789b4c4c099afdd2ecc58cc209a26c64bd4f17; - sha256 = "1lwxbr3jlldll4ccw5cn2ny1cbzh279mnfz7m1djqc8qnw16c8jl"; - }; - }; - }; - }; - devPackages = { - "doctrine/data-fixtures" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-data-fixtures-3a1e2c3c600e615a2dffe56d4ca0875cc5233e0a"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/data-fixtures/zipball/3a1e2c3c600e615a2dffe56d4ca0875cc5233e0a; - sha256 = "0wbxhy7hq17laqgnq9x9ygysv0n1kn7s4x3v89pk7iy622pil3sm"; - }; - }; - }; - "doctrine/doctrine-fixtures-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "doctrine-doctrine-fixtures-bundle-74b8cc70a4a25b774628ee59f4cdf3623a146273"; - src = fetchurl { - url = https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/74b8cc70a4a25b774628ee59f4cdf3623a146273; - sha256 = "1bbflq8k6izwqgp9ka2gyb5y96a80b4lnlc5wrgc5gnih7hqidlf"; - }; - }; - }; - "fzaninotto/faker" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "fzaninotto-faker-d0190b156bcca848d401fb80f31f504f37141c8d"; - src = fetchurl { - url = https://api.github.com/repos/fzaninotto/Faker/zipball/d0190b156bcca848d401fb80f31f504f37141c8d; - sha256 = "1x7xrxw14x7b0iq7sxi9ynswk8ljga62i77ch7xip4dwgq1dypvi"; - }; - }; - }; - "league/factory-muffin" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "league-factory-muffin-316ed2bac70178567f995d877b831804c9c58d5a"; - src = fetchurl { - url = https://api.github.com/repos/thephpleague/factory-muffin/zipball/316ed2bac70178567f995d877b831804c9c58d5a; - sha256 = "1fxh0hsqifmnhgkwyd460x3w9wn74369lmak3f1m24mn2asiynxq"; - }; - }; - }; - "league/factory-muffin-faker" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "league-factory-muffin-faker-30dbd11bb6be03b47e52bd60006ae198d20ab426"; - src = fetchurl { - url = https://api.github.com/repos/thephpleague/factory-muffin-faker/zipball/30dbd11bb6be03b47e52bd60006ae198d20ab426; - sha256 = "0dsimjdnsmzdd4vwjzw1gz1bb4zlhmv66g3fc9k4nj5bqch6mny1"; - }; - }; - }; - "mikey179/vfsStream" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "mikey179-vfsStream-d5fec95f541d4d71c4823bb5e30cf9b9e5b96145"; - src = fetchurl { - url = https://github.com/bovigo/vfsStream/archive/v1.6.5.zip; - sha256 = "16vi7ci8nxq5hxnzzjmmia73gdm55qcwn006c6hgdwa3i58dnr4l"; - }; - }; - }; - "phpdocumentor/reflection-common" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "phpdocumentor-reflection-common-21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"; - src = fetchurl { - url = https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6; - sha256 = "1yaf1zg9lnkfnq2ndpviv0hg5bza9vjvv5l4wgcn25lx1p8a94w2"; - }; - }; - }; - "phpdocumentor/reflection-docblock" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "phpdocumentor-reflection-docblock-94fd0001232e47129dd3504189fa1c7225010d08"; - src = fetchurl { - url = https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08; - sha256 = "03zvxqb5n9ddvysj8mjdwf59h7sagj5x5z15nhs7mqpcky1w388x"; - }; - }; - }; - "phpdocumentor/type-resolver" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "phpdocumentor-type-resolver-9c977708995954784726e25d0cd1dddf4e65b0f7"; - src = fetchurl { - url = https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7; - sha256 = "0h888r2iy2290yp9i3fij8wd5b7960yi7yn1rwh26x1xxd83n2mb"; - }; - }; - }; - "phpspec/prophecy" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "phpspec-prophecy-4ba436b55987b4bf311cb7c6ba82aa528aac0a06"; - src = fetchurl { - url = https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06; - sha256 = "0sz9fg8r4yvpgrhsh6qaic3p89pafdj8bdf4izbcccq6mdhclxn6"; - }; - }; - }; - "phpunit/php-code-coverage" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "phpunit-php-code-coverage-eabf68b476ac7d0f73793aada060f1c1a9bf8979"; - src = fetchurl { - url = https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979; - sha256 = "0xfkf2kaqrid0ajr8qfh3qnpiqqddl0cmmdy6hd7l9y7ziy6qz8d"; - }; - }; - }; - "phpunit/php-file-iterator" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "phpunit-php-file-iterator-730b01bc3e867237eaac355e06a36b85dd93a8b4"; - src = fetchurl { - url = https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4; - sha256 = "0kbg907g9hrx7pv8v0wnf4ifqywdgvigq6y6z00lyhgd0b8is060"; - }; - }; - }; - "phpunit/php-text-template" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "phpunit-php-text-template-31f8b717e51d9a2afca6c9f046f5d69fc27c8686"; - src = fetchurl { - url = https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686; - sha256 = "1y03m38qqvsbvyakd72v4dram81dw3swyn5jpss153i5nmqr4p76"; - }; - }; - }; - "phpunit/php-timer" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "phpunit-php-timer-3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"; - src = fetchurl { - url = https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f; - sha256 = "1j04r0hqzrv6m1jk5nb92k2nnana72nscqpfk3rgv3fzrrv69ljr"; - }; - }; - }; - "phpunit/php-token-stream" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "phpunit-php-token-stream-1ce90ba27c42e4e44e6d8458241466380b51fa16"; - src = fetchurl { - url = https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16; - sha256 = "0j1v83m268cddhyzi8qvqfzhpz12hrm3dyw6skyqvljdp7l9x6lk"; - }; - }; - }; - "phpunit/phpunit" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "phpunit-phpunit-46023de9a91eec7dfb06cc56cb4e260017298517"; - src = fetchurl { - url = https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517; - sha256 = "0mxhgcmc575hw3n7czindgqiha8jhdi4p19h883vf15fg6xf5iv6"; - }; - }; - }; - "phpunit/phpunit-mock-objects" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "phpunit-phpunit-mock-objects-ac8e7a3db35738d56ee9a76e78a4e03d97628983"; - src = fetchurl { - url = https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983; - sha256 = "0s7nyyafdqw2hp7wsd2mxnjxpk26630vv3wii6hcdb0q8xy8r78i"; - }; - }; - }; - "sebastian/comparator" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "sebastian-comparator-2b7424b55f5047b47ac6e5ccb20b2aea4011d9be"; - src = fetchurl { - url = https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be; - sha256 = "0ymarxgnr8b3iy0w18h5z13iiv0ja17vjryryzfcwlqqhlc6w7iq"; - }; - }; - }; - "sebastian/diff" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "sebastian-diff-7f066a26a962dbe58ddea9f72a4e82874a3975a4"; - src = fetchurl { - url = https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4; - sha256 = "1ppx21vjj79z6d584ryq451k7kvdc511awmqjkj9g4vxj1s1h3j6"; - }; - }; - }; - "sebastian/environment" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "sebastian-environment-be2c607e43ce4c89ecd60e75c6a85c126e754aea"; - src = fetchurl { - url = https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea; - sha256 = "0gzgnk847kf18krq4ybbi2knzj7i0kdghsdlj6qynzzrlf7idij0"; - }; - }; - }; - "sebastian/exporter" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "sebastian-exporter-42c4c2eec485ee3e159ec9884f95b431287edde4"; - src = fetchurl { - url = https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4; - sha256 = "1p5mc4lqwxn79v06jjlgqxynblywcxw2mkhbf6r4jlz0bsrqafxn"; - }; - }; - }; - "sebastian/global-state" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "sebastian-global-state-bc37d50fea7d017d3d340f230811c9f1d7280af4"; - src = fetchurl { - url = https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4; - sha256 = "0y1x16mf9q38s7rlc7k2s6sxn2ccxmyk1q5zgh24hr4yp035f0pb"; - }; - }; - }; - "sebastian/recursion-context" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "sebastian-recursion-context-b19cc3298482a335a95f3016d2f8a6950f0fbcd7"; - src = fetchurl { - url = https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7; - sha256 = "1i9xdv55nkg1yy5q4lmpq1jsjif69hjrwmr1zha6b5qjf6ivlvjm"; - }; - }; - }; - "sebastian/version" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "sebastian-version-58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"; - src = fetchurl { - url = https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6; - sha256 = "1s71b6ss29pcsm0120myriwnzla1kpj13f3f739c7k1wfm69h4wz"; - }; - }; - }; - "sensio/generator-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "sensio-generator-bundle-28cbaa244bd0816fd8908b93f90380bcd7b67a65"; - src = fetchurl { - url = https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/28cbaa244bd0816fd8908b93f90380bcd7b67a65; - sha256 = "1j09y037xk843q8gcyfmwgy6dmn0h67pd5jnsvhj08h92ssbl0c3"; - }; - }; - }; - "symfony/phpunit-bridge" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "symfony-phpunit-bridge-2155067dfc73e0e77dbc26f236af17e4df552de5"; - src = fetchurl { - url = https://api.github.com/repos/symfony/phpunit-bridge/zipball/2155067dfc73e0e77dbc26f236af17e4df552de5; - sha256 = "1fhqyhvns69pkv086d1sp918bakqq9pk9d16nzck2s4pfdf097pj"; - }; - }; - }; - "webmozart/assert" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "webmozart-assert-83e253c8e0be5b0257b881e1827274667c5c17a9"; - src = fetchurl { - url = https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9; - sha256 = "04w7rrjy43k93376an7xhnxqn2ibbw5fra7rqky7j1dl1f0hkn6d"; - }; - }; - }; - }; -} diff --git a/modules/private/websites/piedsjaloux/integration.nix b/modules/private/websites/piedsjaloux/integration.nix deleted file mode 100644 index 3502964..0000000 --- a/modules/private/websites/piedsjaloux/integration.nix +++ /dev/null @@ -1,135 +0,0 @@ -{ lib, pkgs, config, ... }: -let - secrets = config.myEnv.websites.piedsjaloux.integration; - webRoot = "/var/lib/ftp/immae/piedsjaloux/web"; - cfg = config.myServices.websites.piedsjaloux.integration; - pcfg = config.services.phpApplication; - texlive = pkgs.texlive.combine { inherit (pkgs.texlive) attachfile preprint scheme-small; }; -in { - options.myServices.websites.piedsjaloux.integration.enable = lib.mkEnableOption "enable PiedsJaloux's website in integration"; - - config = lib.mkIf cfg.enable { - services.phpApplication.apps.piedsjaloux_integration = { - websiteEnv = "integration"; - httpdUser = config.services.httpd.Inte.user; - httpdGroup = config.services.httpd.Inte.group; - inherit webRoot; - varDir = "/var/lib/ftp/immae/piedsjaloux_var"; - varDirPaths = { - "tmp" = "0700"; - }; - app = "/var/lib/ftp/immae/piedsjaloux"; - serviceDeps = [ "mysql.service" ]; - preStartActions = [ - "./bin/console --env=dev cache:clear --no-warmup" - ]; - phpOpenbasedir = [ "/tmp" ]; - phpPool = { - "php_admin_value[upload_max_filesize]" = "20M"; - "php_admin_value[post_max_size]" = "20M"; - #"php_admin_flag[log_errors]" = "on"; - "pm" = "ondemand"; - "pm.max_children" = "5"; - "pm.process_idle_timeout" = "60"; - }; - phpEnv = { - PATH = lib.makeBinPath [ - pkgs.apg pkgs.unzip - # below ones don't need to be in the PATH but they’re used in - # secrets - pkgs.imagemagick texlive - ]; - SYMFONY_DEBUG_MODE = "\"yes\""; - }; - phpWatchFiles = [ - config.secrets.fullPaths."websites/piedsjaloux/integration" - ]; - phpPackage = pkgs.php72; - }; - - secrets.keys."websites/piedsjaloux/integration" = { - user = config.services.httpd.Inte.user; - group = config.services.httpd.Inte.group; - permissions = "0400"; - text = '' - # This file is auto-generated during the composer install - parameters: - database_host: ${secrets.mysql.host} - database_port: ${secrets.mysql.port} - database_name: ${secrets.mysql.database} - database_user: ${secrets.mysql.user} - database_password: ${secrets.mysql.password} - database_server_version: ${pkgs.mariadb.mysqlVersion} - mailer_transport: smtp - mailer_host: 127.0.0.1 - mailer_user: null - mailer_password: null - secret: ${secrets.secret} - pdflatex: "${texlive}/bin/pdflatex" - leapt_im: - binary_path: ${pkgs.imagemagick}/bin - ''; - }; - - services.websites.env.integration.vhostConfs.piedsjaloux_integration = { - certName = "integration"; - addToCerts = true; - hosts = [ "test.pj.immae.dev" ]; - root = webRoot; - extraConfig = [ - '' - - SetHandler "proxy:unix:${pcfg.phpListenPaths.piedsjaloux_integration}|fcgi://localhost" - - - - Use LDAPConnect - Require ldap-group cn=pj.immae.dev,cn=httpd,ou=services,dc=immae,dc=eu - ErrorDocument 401 "" - - - - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride None - Require all granted - - DirectoryIndex app_dev.php - - - Options -MultiViews - - - - RewriteEngine On - - RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ - RewriteRule ^(.*) - [E=BASE:%1] - - # Maintenance script - RewriteCond %{DOCUMENT_ROOT}/maintenance.php -f - RewriteCond %{SCRIPT_FILENAME} !maintenance.php - RewriteRule ^.*$ %{ENV:BASE}/maintenance.php [R=503,L] - ErrorDocument 503 /maintenance.php - - # Sets the HTTP_AUTHORIZATION header removed by Apache - RewriteCond %{HTTP:Authorization} . - RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] - - RewriteCond %{ENV:REDIRECT_STATUS} ^$ - RewriteRule ^app_dev\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L] - - # If the requested filename exists, simply serve it. - # We only want to let Apache serve files and not directories. - RewriteCond %{REQUEST_FILENAME} -f - RewriteRule ^ - [L] - - # Rewrite all other queries to the front controller. - RewriteRule ^ %{ENV:BASE}/app_dev.php [L] - - - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/piedsjaloux/production.nix b/modules/private/websites/piedsjaloux/production.nix deleted file mode 100644 index 422c7f0..0000000 --- a/modules/private/websites/piedsjaloux/production.nix +++ /dev/null @@ -1,106 +0,0 @@ -{ lib, pkgs, config, ... }: -let - secrets = config.myEnv.websites.piedsjaloux.production; - app = pkgs.callPackage ./app { - composerEnv = pkgs.composerEnv.override { php = pkgs.php72; }; - environment = secrets.environment; - varDir = "/var/lib/piedsjaloux_production"; - secretsPath = config.secrets.fullPaths."websites/piedsjaloux/production"; - }; - cfg = config.myServices.websites.piedsjaloux.production; - pcfg = config.services.phpApplication; - texlive = pkgs.texlive.combine { inherit (pkgs.texlive) attachfile preprint scheme-small; }; -in { - options.myServices.websites.piedsjaloux.production.enable = lib.mkEnableOption "enable PiedsJaloux's website in production"; - - config = lib.mkIf cfg.enable { - services.webstats.sites = [ { name = "piedsjaloux.fr"; } ]; - services.phpApplication.apps.piedsjaloux_production = { - websiteEnv = "production"; - httpdUser = config.services.httpd.Prod.user; - httpdGroup = config.services.httpd.Prod.group; - inherit (app) webRoot varDir; - varDirPaths = { - "tmp" = "0700"; - }; - inherit app; - serviceDeps = [ "mysql.service" ]; - preStartActions = [ - "./bin/console --env=${app.environment} cache:clear --no-warmup" - ]; - phpOpenbasedir = [ "/tmp" ]; - phpPool = { - "php_admin_value[upload_max_filesize]" = "20M"; - "php_admin_value[post_max_size]" = "20M"; - #"php_admin_flag[log_errors]" = "on"; - "pm" = "dynamic"; - "pm.max_children" = "20"; - "pm.start_servers" = "2"; - "pm.min_spare_servers" = "1"; - "pm.max_spare_servers" = "3"; - }; - phpEnv = { - PATH = lib.makeBinPath [ - pkgs.apg pkgs.unzip - # below ones don't need to be in the PATH but they’re used in - # secrets - pkgs.imagemagick texlive - ]; - }; - phpWatchFiles = [ - app.secretsPath - ]; - phpPackage = pkgs.php72; - }; - - secrets.keys."websites/piedsjaloux/production" = { - user = config.services.httpd.Prod.user; - group = config.services.httpd.Prod.group; - permissions = "0400"; - text = '' - # This file is auto-generated during the composer install - parameters: - database_host: ${secrets.mysql.host} - database_port: ${secrets.mysql.port} - database_name: ${secrets.mysql.database} - database_user: ${secrets.mysql.user} - database_password: ${secrets.mysql.password} - database_server_version: ${pkgs.mariadb.mysqlVersion} - mailer_transport: smtp - mailer_host: 127.0.0.1 - mailer_user: null - mailer_password: null - secret: ${secrets.secret} - pdflatex: "${texlive}/bin/pdflatex" - leapt_im: - binary_path: ${pkgs.imagemagick}/bin - ''; - }; - - services.websites.env.production.vhostConfs.piedsjaloux_production = { - certName = "piedsjaloux"; - certMainHost = "piedsjaloux.fr"; - hosts = [ "piedsjaloux.fr" "www.piedsjaloux.fr" ]; - root = app.webRoot; - extraConfig = [ - '' - RewriteEngine on - RewriteCond "%{HTTP_HOST}" "!^www.piedsjaloux\.fr$" [NC] - RewriteRule ^(.+)$ https://www.piedsjaloux.fr$1 [R=302,L] - - - SetHandler "proxy:unix:${pcfg.phpListenPaths.piedsjaloux_production}|fcgi://localhost" - - - Use Stats piedsjaloux.fr - - - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride All - Require all granted - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/ressourcerie_banon/cloud.nix b/modules/private/websites/ressourcerie_banon/cloud.nix deleted file mode 100644 index 5179218..0000000 --- a/modules/private/websites/ressourcerie_banon/cloud.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.websites.ressourcerie_banon.cloud; - nextcloud = config.myServices.tools.cloud.farm.package; -in { - options.myServices.websites.ressourcerie_banon.cloud.enable = lib.mkEnableOption "enable Ressourcerie Banon’s cloud"; - - config = lib.mkIf cfg.enable { - myServices.tools.cloud.farm.instances = [ "ressourcerie_banon" ]; - services.websites.env.production.modules = [ "proxy_fcgi" ]; - services.websites.env.production.vhostConfs.ressourcerie_banon_cloud = { - certName = "ressourcerie_banon"; - addToCerts = true; - hosts = ["cloud.le-garage-autonome.org"]; - root = nextcloud; - extraConfig = [ config.myServices.tools.cloud.farm.vhosts.ressourcerie_banon ]; - }; - }; -} - diff --git a/modules/private/websites/ressourcerie_banon/cryptpad.nix b/modules/private/websites/ressourcerie_banon/cryptpad.nix deleted file mode 100644 index 7aea728..0000000 --- a/modules/private/websites/ressourcerie_banon/cryptpad.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.websites.ressourcerie_banon.cryptpad; - envCfg = config.myEnv.tools.cryptpad.ressourcerie_banon; - port = envCfg.port; - configFile = pkgs.writeText "config.js" '' - // ${pkgs.cryptpad}/lib/node_modules/cryptpad/config/config.example.js - module.exports = { - httpUnsafeOrigin: 'https://${domain}', - httpPort: ${toString port}, - adminEmail: '${envCfg.email}', - filePath: './datastore/', - archivePath: './data/archive', - pinPath: './data/pins', - taskPath: './data/tasks', - blockPath: './block', - blobPath: './blob', - blobStagingPath: './data/blobstage', - decreePath: './data/decrees', - logPath: './data/logs', - logToStdout: false, - logLevel: 'info', - logFeedback: false, - verbose: false, - inactiveTime: false, - adminKeys: ${builtins.toJSON envCfg.admins}, - }; - ''; - domain = "pad.le-garage-autonome.org"; -in { - options.myServices.websites.ressourcerie_banon.cryptpad.enable = lib.mkEnableOption "Enable Ressourcerie Banon’s cryptpad"; - - config = lib.mkIf cfg.enable { - myServices.tools.cryptpad.farm.hosts.ressourcerie_banon = { - inherit domain port; - config = configFile; - }; - services.websites.env.production.modules = [ "proxy_wstunnel" ]; - services.websites.env.production.vhostConfs.ressourcerie_banon_cryptpad = { - certName = "ressourcerie_banon"; - addToCerts = true; - hosts = [domain]; - root = config.myServices.tools.cryptpad.farm.vhostRoots.ressourcerie_banon; - extraConfig = [ - config.myServices.tools.cryptpad.farm.vhosts.ressourcerie_banon - ]; - }; - }; -} diff --git a/modules/private/websites/ressourcerie_banon/production.nix b/modules/private/websites/ressourcerie_banon/production.nix deleted file mode 100644 index fa00d92..0000000 --- a/modules/private/websites/ressourcerie_banon/production.nix +++ /dev/null @@ -1,70 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.websites.ressourcerie_banon.production; - varDir = "/var/lib/ftp/ressourcerie_banon"; - apacheUser = config.services.httpd.Prod.user; - apacheGroup = config.services.httpd.Prod.group; -in { - options.myServices.websites.ressourcerie_banon.production.enable = lib.mkEnableOption "enable Ressourcerie Banon's website"; - - config = lib.mkIf cfg.enable { - services.webstats.sites = [ { name = "ressourcerie-banon.org"; } ]; - - system.activationScripts.ressourcerie_banon = { - deps = [ "httpd" ]; - text = '' - install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/php/sessions/ressourcerie_banon - ''; - }; - systemd.services.phpfpm-ressourcerie_banon.after = lib.mkAfter [ "mysql.service" ]; - systemd.services.phpfpm-ressourcerie_banon.wants = [ "mysql.service" ]; - services.phpfpm.pools.ressourcerie_banon = { - user = apacheUser; - group = apacheGroup; - settings = { - "listen.owner" = apacheUser; - "listen.group" = apacheGroup; - - "pm" = "ondemand"; - "pm.max_children" = "5"; - "pm.process_idle_timeout" = "60"; - - "php_admin_value[open_basedir]" = "/var/lib/php/sessions/ressourcerie_banon:${varDir}:/tmp"; - "php_admin_value[session.save_path]" = "/var/lib/php/sessions/ressourcerie_banon"; - }; - phpOptions = config.services.phpfpm.phpOptions + '' - disable_functions = "mail" - ''; - phpPackage = pkgs.php72; - }; - services.websites.env.production.modules = [ "proxy_fcgi" ]; - services.websites.env.production.vhostConfs.ressourcerie_banon = { - certName = "ressourcerie_banon"; - certMainHost = "ressourcerie-banon.org"; - hosts = ["ressourcerie-banon.org" "www.ressourcerie-banon.org" "ressourcerie-sault.org" "www.ressourcerie-sault.org" "le-garage-autonome.org" - "www.le-garage-autonome.org"]; - root = varDir; - extraConfig = [ - '' - Use Stats ressourcerie-banon.org - - RewriteEngine on - RewriteCond "%{HTTP_HOST}" "!^ressourcerie-banon\.org$" [NC] - RewriteRule ^(.+)$ https://ressourcerie-banon.org$1 [R=302,L] - - - SetHandler "proxy:unix:${config.services.phpfpm.pools.ressourcerie_banon.socket}|fcgi://localhost" - - - - DirectoryIndex index.php index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride all - Require all granted - - '' - ]; - }; - }; -} - diff --git a/modules/private/websites/richie/production.nix b/modules/private/websites/richie/production.nix deleted file mode 100644 index a548cff..0000000 --- a/modules/private/websites/richie/production.nix +++ /dev/null @@ -1,106 +0,0 @@ -{ lib, config, pkgs, ... }: -let - cfg = config.myServices.websites.richie.production; - vardir = "/var/lib/richie_production"; - richieSrc = pkgs.stdenv.mkDerivation rec { - version = pkgs.sources.websites-richie-app.version; - pname = "richie"; - name = "${pname}-${version}"; - src = pkgs.sources.websites-richie-app; - phases = "installPhase"; - installPhase = '' - cp -a $src $out - chmod -R u+w $out - ln -sf ${vardir}/files $out/ - ln -sf ${vardir}/drapeaux $out/images/ - ln -sf ${vardir}/photos $out/ - sed -i "s@localedef --list-archive@localedef --list-archive /run/current-system/sw/lib/locale/locale-archive@" $out/admin/parametres.php - ''; - }; - secretPath = config.secrets.fullPaths."websites/richie/production"; - apacheUser = config.services.httpd.Prod.user; - apacheGroup = config.services.httpd.Prod.group; -in -{ - options.myServices.websites.richie.production.enable = lib.mkEnableOption "enable Richie's website"; - config = lib.mkIf cfg.enable { - services.webstats.sites = [ { name = "europe-richie.org"; } ]; - - secrets.keys."websites/richie/production" = { - user = apacheUser; - group = apacheGroup; - permissions = "0400"; - text = with config.myEnv.websites.richie; '' - Auth('${smtp_mailer.user}', '${smtp_mailer.password}'); - ?> - ''; - }; - system.activationScripts.richie_production = { - deps = [ "httpd" ]; - text = '' - install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/php/sessions/richie_production - install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${vardir} - ''; - }; - services.phpfpm.pools.richie_production = { - user = apacheUser; - group = apacheGroup; - settings = { - "listen.owner" = apacheUser; - "listen.group" = apacheGroup; - - "pm" = "ondemand"; - "pm.max_children" = "5"; - "pm.process_idle_timeout" = "60"; - - "php_admin_value[open_basedir]" = "${vardir}:/var/lib/php/sessions/richie_production:${secretPath}:${richieSrc}:/tmp"; - "php_admin_value[session.save_path]" = "/var/lib/php/sessions/richie_production"; - }; - phpEnv = { - PATH = "/run/current-system/sw/bin:${lib.makeBinPath [ pkgs.imagemagick ]}"; - BDD_CONNECT = secretPath; - }; - phpOptions = config.services.phpfpm.phpOptions + '' - date.timezone = 'Europe/Paris' - ''; - phpPackage = pkgs.php72; - }; - services.websites.env.production.modules = [ "proxy_fcgi" ]; - services.websites.env.production.vhostConfs.richie_production = { - certName = "richie"; - addToCerts = true; - certMainHost = "europe-richie.org"; - hosts = [ "europe-richie.org" "www.europe-richie.org" ]; - root = richieSrc; - extraConfig = [ - '' - Use Stats europe-richie.org - ErrorDocument 404 /404.html - - Require all denied - - - DirectoryIndex index.php index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride None - Require all granted - - - SetHandler "proxy:unix:${config.services.phpfpm.pools.richie_production.socket}|fcgi://localhost" - - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/syden/peertube.nix b/modules/private/websites/syden/peertube.nix deleted file mode 100644 index 64d4a5d..0000000 --- a/modules/private/websites/syden/peertube.nix +++ /dev/null @@ -1,132 +0,0 @@ -{ lib, pkgs, config, ... }: -let - scfg = config.myServices.websites.syden.peertube; - name = "peertube"; - dataDir = "/var/lib/syden_peertube"; - package = (pkgs.mylibs.flakeCompat ../../../../flakes/private/peertube).packages.x86_64-linux.peertube_syden; - env = config.myEnv.tools.syden_peertube; -in -{ - options.myServices.websites.syden.peertube.enable = lib.mkEnableOption "enable Syden's website"; - - config = lib.mkIf scfg.enable { - users.users.peertube = { - uid = config.ids.uids.peertube; - group = "peertube"; - description = "Peertube user"; - useDefaultShell = true; - extraGroups = [ "keys" ]; - }; - users.groups.peertube.gid = config.ids.gids.peertube; - - secrets.keys."websites/syden/peertube" = { - user = "peertube"; - group = "peertube"; - permissions = "0640"; - text = '' - listen: - hostname: 'localhost' - port: ${toString env.listenPort} - webserver: - https: true - hostname: 'record-links.immae.eu' - port: 443 - database: - hostname: '${env.postgresql.socket}' - port: 5432 - suffix: '_syden' - username: '${env.postgresql.user}' - password: '${env.postgresql.password}' - pool: - max: 5 - redis: - socket: '${env.redis.socket}' - auth: null - db: ${env.redis.db} - smtp: - transport: sendmail - sendmail: '/run/wrappers/bin/sendmail' - from_address: 'peertube@tools.immae.eu' - storage: - tmp: '${dataDir}/storage/tmp/' - avatars: '${dataDir}/storage/avatars/' - videos: '${dataDir}/storage/videos/' - streaming_playlists: '${dataDir}/storage/streaming-playlists/' - redundancy: '${dataDir}/storage/videos/' - logs: '${dataDir}/storage/logs/' - previews: '${dataDir}/storage/previews/' - thumbnails: '${dataDir}/storage/thumbnails/' - torrents: '${dataDir}/storage/torrents/' - captions: '${dataDir}/storage/captions/' - cache: '${dataDir}/storage/cache/' - plugins: '${dataDir}/storage/plugins/' - client_overrides: '${dataDir}/storage/client-overrides/' - ''; - }; - - services.filesWatcher.syden_peertube = { - restart = true; - paths = [ config.secrets.fullPaths."websites/syden/peertube" ]; - }; - - systemd.services.syden_peertube = { - description = "Peertube"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" "postgresql.service" ]; - wants = [ "postgresql.service" ]; - - environment.NODE_CONFIG_DIR = "${dataDir}/config"; - environment.NODE_ENV = "production"; - environment.HOME = package; - - path = [ pkgs.nodejs pkgs.bashInteractive pkgs.ffmpeg pkgs.openssl ]; - - script = '' - install -m 0750 -d ${dataDir}/config - ln -sf ${config.secrets.fullPaths."websites/syden/peertube"} ${dataDir}/config/production.yaml - ln -sf ${package}/config/default.yaml ${dataDir}/config/default.yaml - exec npm run start - ''; - - serviceConfig = { - User = "peertube"; - Group = "peertube"; - WorkingDirectory = package; - StateDirectory = "syden_peertube"; - StateDirectoryMode = 0750; - PrivateTmp = true; - ProtectHome = true; - ProtectControlGroups = true; - Restart = "always"; - Type = "simple"; - TimeoutSec = 60; - }; - - unitConfig.RequiresMountsFor = dataDir; - }; - - services.websites.env.production.vhostConfs.syden_peertube = { - certName = "syden"; - addToCerts = true; - certMainHost = "record-links.immae.eu"; - hosts = [ "record-links.immae.eu" ]; - root = null; - extraConfig = [ '' - RewriteEngine On - - RewriteCond %{REQUEST_URI} ^/socket.io [NC] - RewriteCond %{QUERY_STRING} transport=websocket [NC] - RewriteRule /(.*) ws://localhost:${toString env.listenPort}/$1 [P,NE,QSA,L] - - RewriteCond %{REQUEST_URI} ^/tracker/socket [NC] - RewriteRule /(.*) ws://localhost:${toString env.listenPort}/$1 [P,NE,QSA,L] - - ProxyPass / http://localhost:${toString env.listenPort}/ - ProxyPassReverse / http://localhost:${toString env.listenPort}/ - - ProxyPreserveHost On - RequestHeader set X-Real-IP %{REMOTE_ADDR}s - '' ]; - }; - }; -} diff --git a/modules/private/websites/telio_tortay/production.nix b/modules/private/websites/telio_tortay/production.nix deleted file mode 100644 index 16eca74..0000000 --- a/modules/private/websites/telio_tortay/production.nix +++ /dev/null @@ -1,81 +0,0 @@ -{ lib, pkgs, config, ... }: -let - adminer = pkgs.callPackage ../commons/adminer.nix { inherit config; }; - cfg = config.myServices.websites.telio_tortay.production; - varDir = "/var/lib/ftp/telio_tortay"; - env = config.myEnv.websites.telio_tortay; - apacheUser = config.services.httpd.Prod.user; - apacheGroup = config.services.httpd.Prod.group; -in { - options.myServices.websites.telio_tortay.production.enable = lib.mkEnableOption "enable Telio Tortay's website"; - - config = lib.mkIf cfg.enable { - services.webstats.sites = [ { name = "telio-tortay.immae.eu"; } ]; - - security.acme.certs."ftp".extraDomains."telio-tortay.immae.eu" = null; - - system.activationScripts.telio_tortay = { - deps = [ "httpd" ]; - text = '' - install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/ftp/telio_tortay/logs - install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/php/sessions/telio_tortay - ''; - }; - systemd.services.phpfpm-telio_tortay.after = lib.mkAfter [ "mysql.service" ]; - systemd.services.phpfpm-telio_tortay.wants = [ "mysql.service" ]; - services.phpfpm.pools.telio_tortay = { - user = apacheUser; - group = apacheGroup; - settings = { - "listen.owner" = apacheUser; - "listen.group" = apacheGroup; - - "pm" = "ondemand"; - "pm.max_children" = "5"; - "pm.process_idle_timeout" = "60"; - - "php_admin_value[open_basedir]" = "/var/lib/php/sessions/telio_tortay:${varDir}:/tmp"; - "php_admin_value[session.save_path]" = "/var/lib/php/sessions/telio_tortay"; - }; - phpOptions = config.services.phpfpm.phpOptions + '' - disable_functions = "mail" - ''; - phpPackage = pkgs.php72; - }; - services.websites.env.production.modules = adminer.apache.modules ++ [ "proxy_fcgi" ]; - services.websites.env.production.vhostConfs.telio_tortay = { - certName = "telio_tortay"; - certMainHost = "telio-tortay.immae.eu"; - hosts = ["telio-tortay.immae.eu" "realistesmedia.fr" "www.realistesmedia.fr" ]; - root = varDir; - extraConfig = [ - (adminer.apache.vhostConf null) - '' - Use Stats telio-tortay.immae.eu - ServerAdmin ${env.server_admin} - ErrorLog "${varDir}/logs/error_log" - CustomLog "${varDir}/logs/access_log" combined - - - SetHandler "proxy:unix:${config.services.phpfpm.pools.telio_tortay.socket}|fcgi://localhost" - - - - AllowOverride None - Require all denied - - - AllowOverride None - Require all denied - - - DirectoryIndex index.php index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride all - Require all granted - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/tools/assets/default.nix b/modules/private/websites/tools/assets/default.nix deleted file mode 100644 index 0eb476d..0000000 --- a/modules/private/websites/tools/assets/default.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.websites.tools.assets; - assets_urls = lib.mapAttrs (k: v: pkgs.fetchurl v) config.myEnv.tools.assets; - assets = pkgs.runCommand "assets" {} ('' - mkdir -p $out - cp -a ${./static}/* $out/ - '' + builtins.concatStringsSep "\n" - (lib.mapAttrsToList (k: v: '' - install -D -m644 -T ${v} $out/${k} - '') assets_urls)); -in -{ - options.myServices.websites.tools.assets = { - enable = lib.mkEnableOption "Enable assets website"; - }; - config = lib.mkIf cfg.enable { - services.websites.env.tools.vhostConfs.assets = { - certName = "eldiron"; - addToCerts = true; - hosts = [ "assets.immae.eu" ]; - root = assets; - extraConfig = [ - '' - Use Apaxy "${assets}" "title" - - Options Indexes FollowSymlinks - AllowOverride None - Require all granted - Header always set Last-Modified "Tue, 01 Jan 2020 00:00:00 GMT" - Header always set Cache-Control "public, max-age=31536000, immutable" - Header always set Access-Control-Allow-Origin "*" - Header always set Access-Control-Expose-Headers "*" - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/tools/assets/static/favicon.png b/modules/private/websites/tools/assets/static/favicon.png deleted file mode 100644 index 1caf5a4..0000000 Binary files a/modules/private/websites/tools/assets/static/favicon.png and /dev/null differ diff --git a/modules/private/websites/tools/assets/static/logger.png b/modules/private/websites/tools/assets/static/logger.png deleted file mode 100644 index d9579fb..0000000 Binary files a/modules/private/websites/tools/assets/static/logger.png and /dev/null differ diff --git a/modules/private/websites/tools/assets/static/logger.txt b/modules/private/websites/tools/assets/static/logger.txt deleted file mode 100644 index 50dccc6..0000000 --- a/modules/private/websites/tools/assets/static/logger.txt +++ /dev/null @@ -1,3 +0,0 @@ -Downloaded from https://commons.wikimedia.org/wiki/File:Ghost2.svg -Licence Creative Commons Attribution-Share Alike 4.0 International -https://creativecommons.org/licenses/by-sa/4.0/deed.en diff --git a/modules/private/websites/tools/assets/static/logo.jpg b/modules/private/websites/tools/assets/static/logo.jpg deleted file mode 100644 index a89172d..0000000 Binary files a/modules/private/websites/tools/assets/static/logo.jpg and /dev/null differ diff --git a/modules/private/websites/tools/assets/static/logo.txt b/modules/private/websites/tools/assets/static/logo.txt deleted file mode 100644 index 327e62a..0000000 --- a/modules/private/websites/tools/assets/static/logo.txt +++ /dev/null @@ -1,7 +0,0 @@ -size: 2 -dpi: 72 -background: white -plot_type: fullcolor -center: "whole" -whitespace: 0.5 -format: jpg diff --git a/modules/private/websites/tools/assets/static/logo_big.jpg b/modules/private/websites/tools/assets/static/logo_big.jpg deleted file mode 100644 index 45448f2..0000000 Binary files a/modules/private/websites/tools/assets/static/logo_big.jpg and /dev/null differ diff --git a/modules/private/websites/tools/assets/static/logo_big.txt b/modules/private/websites/tools/assets/static/logo_big.txt deleted file mode 100644 index ce92c09..0000000 --- a/modules/private/websites/tools/assets/static/logo_big.txt +++ /dev/null @@ -1,7 +0,0 @@ -size: 4 -dpi: 72 -background: white -plot_type: fullcolor -center: "whole" -whitespace: 0.5 -format: jpg diff --git a/modules/private/websites/tools/assets/static/logo_center.jpg b/modules/private/websites/tools/assets/static/logo_center.jpg deleted file mode 100644 index 6b177e0..0000000 Binary files a/modules/private/websites/tools/assets/static/logo_center.jpg and /dev/null differ diff --git a/modules/private/websites/tools/assets/static/logo_center.txt b/modules/private/websites/tools/assets/static/logo_center.txt deleted file mode 100644 index 60a8f1c..0000000 --- a/modules/private/websites/tools/assets/static/logo_center.txt +++ /dev/null @@ -1,8 +0,0 @@ -size: 4 -dpi: 72 -background: white -plot_type: fullcolor -center: "center" -whitespace: 0.5 -format: jpg - diff --git a/modules/private/websites/tools/assets/static/monitoring.png b/modules/private/websites/tools/assets/static/monitoring.png deleted file mode 100644 index 0024fee..0000000 Binary files a/modules/private/websites/tools/assets/static/monitoring.png and /dev/null differ diff --git a/modules/private/websites/tools/assets/static/monitoring.txt b/modules/private/websites/tools/assets/static/monitoring.txt deleted file mode 100644 index 9f3e13a..0000000 --- a/modules/private/websites/tools/assets/static/monitoring.txt +++ /dev/null @@ -1,3 +0,0 @@ -Downloaded from https://commons.wikimedia.org/wiki/File:Magnifying_Glass2.svg -Licence Creative Commons CC0 1.0 Universal Public Domain Dedication -https://creativecommons.org/publicdomain/zero/1.0/deed.en diff --git a/modules/private/websites/tools/assets/static/photos/ct.jpg b/modules/private/websites/tools/assets/static/photos/ct.jpg deleted file mode 100644 index ab7876b..0000000 Binary files a/modules/private/websites/tools/assets/static/photos/ct.jpg and /dev/null differ diff --git a/modules/private/websites/tools/assets/static/photos/fretlink.jpg b/modules/private/websites/tools/assets/static/photos/fretlink.jpg deleted file mode 100644 index c941e1d..0000000 Binary files a/modules/private/websites/tools/assets/static/photos/fretlink.jpg and /dev/null differ diff --git a/modules/private/websites/tools/assets/static/photos/raton.jpg b/modules/private/websites/tools/assets/static/photos/raton.jpg deleted file mode 100644 index a859e1c..0000000 Binary files a/modules/private/websites/tools/assets/static/photos/raton.jpg and /dev/null differ diff --git a/modules/private/websites/tools/cloud/default.nix b/modules/private/websites/tools/cloud/default.nix deleted file mode 100644 index 44163de..0000000 --- a/modules/private/websites/tools/cloud/default.nix +++ /dev/null @@ -1,184 +0,0 @@ -{ lib, pkgs, config, ... }: -let - nextcloud = pkgs.webapps.nextcloud.withApps (a: [ - a.apporder a.audioplayer a.bookmarks a.calendar a.carnet a.contacts - a.cookbook a.deck a.extract a.files_markdown a.files_readmemd - a.flowupload a.gpxedit a.gpxpod a.keeweb a.maps a.metadata a.music - a.notes a.ocsms a.passman a.polls a.spreed a.tasks - ]); - env = config.myEnv.tools.nextcloud; - varDir = "/var/lib/nextcloud"; - cfg = config.myServices.websites.tools.cloud; - phpFpm = rec { - basedir = builtins.concatStringsSep ":" ([ nextcloud varDir ] ++ nextcloud.apps); - pool = { - "listen.owner" = "wwwrun"; - "listen.group" = "wwwrun"; - "pm" = "ondemand"; - "pm.max_children" = "60"; - "pm.process_idle_timeout" = "60"; - - "php_admin_value[output_buffering]" = "0"; - "php_admin_value[max_execution_time]" = "1800"; - "php_admin_value[zend_extension]" = "opcache"; - #already enabled by default? - #"php_value[opcache.enable]" = "1"; - "php_value[opcache.enable_cli]" = "1"; - "php_value[opcache.interned_strings_buffer]" = "8"; - "php_value[opcache.max_accelerated_files]" = "10000"; - "php_value[opcache.memory_consumption]" = "128"; - "php_value[opcache.save_comments]" = "1"; - "php_value[opcache.revalidate_freq]" = "1"; - "php_admin_value[memory_limit]" = "512M"; - - "php_admin_value[open_basedir]" = "/run/wrappers/bin/sendmail:${basedir}:/proc/meminfo:/dev/urandom:/proc/self/fd:/tmp"; - "php_admin_value[session.save_path]" = "${varDir}/phpSessions"; - }; - }; -in { - options.myServices.websites.tools.cloud = { - enable = lib.mkEnableOption "enable cloud website"; - }; - - config = lib.mkIf cfg.enable { - services.websites.env.tools.modules = [ "proxy_fcgi" ]; - - services.websites.env.tools.vhostConfs.cloud = { - certName = "eldiron"; - addToCerts = true; - hosts = ["cloud.immae.eu" ]; - root = nextcloud; - extraConfig = [ - '' - SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 - - AcceptPathInfo On - DirectoryIndex index.php - Options FollowSymlinks - Require all granted - AllowOverride all - - - Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload" - - - CGIPassAuth on - SetHandler "proxy:unix:${config.services.phpfpm.pools.nextcloud.socket}|fcgi://localhost" - - - - '' - ]; - }; - - secrets.keys."webapps/tools-nextcloud" = { - user = "wwwrun"; - group = "wwwrun"; - permissions = "0600"; - # This file is not actually included, see activationScript below - text = '' - '${env.instance_id}', - 'datadirectory' => '/var/lib/nextcloud/', - 'passwordsalt' => '${env.password_salt}', - 'debug' => false, - 'dbtype' => 'pgsql', - 'version' => implode($OC_Version, '.'), - 'dbname' => '${env.postgresql.database}', - 'dbhost' => '${env.postgresql.socket}', - 'dbtableprefix' => 'oc_', - 'dbuser' => '${env.postgresql.user}', - 'dbpassword' => '${env.postgresql.password}', - 'installed' => true, - 'maxZipInputSize' => 0, - 'allowZipDownload' => true, - 'forcessl' => true, - 'theme' => ${"''"}, - 'maintenance' => false, - 'trusted_domains' => - array ( - 0 => 'cloud.immae.eu', - ), - 'secret' => '${env.secret}', - 'appstoreenabled' => false, - 'appstore.experimental.enabled' => true, - 'loglevel' => 2, - 'trashbin_retention_obligation' => 'auto', - 'htaccess.RewriteBase' => '/', - 'mail_smtpmode' => 'sendmail', - 'mail_smtphost' => '127.0.0.1', - 'mail_smtpname' => ''', - 'mail_smtppassword' => ''', - 'mail_from_address' => 'nextcloud', - 'mail_smtpauth' => false, - 'mail_domain' => 'tools.immae.eu', - 'memcache.local' => '\\OC\\Memcache\\APCu', - 'memcache.locking' => '\\OC\\Memcache\\Redis', - 'filelocking.enabled' => true, - 'redis' => - array ( - 'host' => '${env.redis.socket}', - 'port' => 0, - 'dbindex' => ${env.redis.db}, - ), - 'overwrite.cli.url' => 'https://cloud.immae.eu', - 'ldapIgnoreNamingRules' => false, - 'ldapProviderFactory' => '\\OCA\\User_LDAP\\LDAPProviderFactory', - 'has_rebuilt_cache' => true, - ); - ''; - }; - users.users.root.packages = let - occ = pkgs.writeScriptBin "nextcloud-occ" '' - #! ${pkgs.stdenv.shell} - cd ${nextcloud} - NEXTCLOUD_CONFIG_DIR="${nextcloud}/config" \ - exec \ - sudo -E -u wwwrun ${pkgs.php74}/bin/php \ - -c ${pkgs.php74}/etc/php.ini \ - occ $* - ''; - in [ occ ]; - - system.activationScripts.nextcloud = { - deps = [ "secrets" ]; - text = let - confs = lib.attrsets.mapAttrs (n: v: pkgs.writeText "${n}.json" (builtins.toJSON v)) nextcloud.otherConfig; - in - '' - install -m 0755 -o wwwrun -g wwwrun -d ${varDir} - install -m 0750 -o wwwrun -g wwwrun -d ${varDir}/phpSessions - ${builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (n: v: - "install -D -m 0644 -o wwwrun -g wwwrun -T ${v} ${varDir}/config/${n}.json" - ) confs)} - #install -D -m 0600 -o wwwrun -g wwwrun -T ${config.secrets.fullPaths."webapps/tools-nextcloud"} ${varDir}/config/config.php - ''; - }; - - services.phpfpm.pools.nextcloud = { - user = "wwwrun"; - group = "wwwrun"; - settings = phpFpm.pool; - phpPackage = pkgs.php74.withExtensions({ enabled, all }: enabled ++ [ all.redis all.apcu all.opcache ]); - }; - - services.cron = { - enable = true; - systemCronJobs = let - script = pkgs.writeScriptBin "nextcloud-cron" '' - #! ${pkgs.stdenv.shell} - export LOCALE_ARCHIVE=/run/current-system/sw/lib/locale/locale-archive - export PATH=/run/wrappers/bin:$PATH - ${pkgs.php74}/bin/php -d memory_limit=2048M -f ${nextcloud}/cron.php - ''; - in [ - '' - */15 * * * * wwwrun ${script}/bin/nextcloud-cron - '' - ]; - }; - }; -} diff --git a/modules/private/websites/tools/cloud/farm.nix b/modules/private/websites/tools/cloud/farm.nix deleted file mode 100644 index 7be774c..0000000 --- a/modules/private/websites/tools/cloud/farm.nix +++ /dev/null @@ -1,123 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.tools.cloud.farm; - apacheUser = config.services.httpd.Prod.user; - apacheGroup = config.services.httpd.Prod.group; - nextcloud = (pkgs.webapps.nextcloud.override { varDir = null; }).withApps (a: [ - a.apporder a.audioplayer a.bookmarks a.calendar a.carnet a.contacts - a.cookbook a.deck a.extract a.files_markdown a.files_readmemd - a.flowupload a.gpxedit a.gpxpod a.impersonate a.keeweb a.maps - a.metadata a.music a.notes a.ocsms a.passman a.polls a.spreed - a.tasks - ]); - toVardir = name: "/var/lib/nextcloud_farm/${name}"; - varDirs = map toVardir cfg.instances; - phpBaseDir = builtins.concatStringsSep ":" ([ nextcloud ] ++ varDirs ++ nextcloud.apps); - toVhost = name: '' - SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 - SetEnv NEXTCLOUD_CONFIG_DIR "${toVardir name}" - - AcceptPathInfo On - DirectoryIndex index.php - Options FollowSymlinks - Require all granted - AllowOverride all - - - Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload" - - - CGIPassAuth on - SetHandler "proxy:unix:${config.services.phpfpm.pools.nextcloud_farm.socket}|fcgi://localhost" - - - - ''; -in -{ - options.myServices.tools.cloud.farm = { - instances = lib.mkOption { - description = "Instances names for the nextcloud Farm"; - default = []; - type = lib.types.listOf lib.types.str; - }; - vhosts = lib.mkOption { - description = "Instance vhosts configs"; - readOnly = true; - type = lib.types.attrsOf lib.types.str; - default = lib.genAttrs cfg.instances toVhost; - }; - package = lib.mkOption { - description = "Nextcloud derivation"; - readOnly = true; - type = lib.types.package; - default = nextcloud; - }; - }; - - config = lib.mkIf (builtins.length cfg.instances > 0) { - system.activationScripts.cloud_farm_vardirs = { - deps = [ "httpd" ]; - text = '' - install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${builtins.concatStringsSep " " varDirs} - install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/nextcloud_farm/phpSessions - ''; - }; - systemd.services.phpfpm-nextcloud_farm.after = lib.mkAfter [ "postgresql.service" ]; - systemd.services.phpfpm-nextcloud_farm.wants = [ "postgresql.service" ]; - services.phpfpm.pools.nextcloud_farm = { - user = apacheUser; - group = apacheGroup; - settings = { - "listen.owner" = apacheUser; - "listen.group" = apacheGroup; - "pm" = "ondemand"; - "pm.max_children" = "60"; - "pm.process_idle_timeout" = "60"; - - "php_admin_value[output_buffering]" = "0"; - "php_admin_value[max_execution_time]" = "1800"; - "php_admin_value[zend_extension]" = "opcache"; - #already enabled by default? - #"php_value[opcache.enable]" = "1"; - "php_value[opcache.enable_cli]" = "1"; - "php_value[opcache.interned_strings_buffer]" = "8"; - "php_value[opcache.max_accelerated_files]" = "10000"; - "php_value[opcache.memory_consumption]" = "128"; - "php_value[opcache.save_comments]" = "1"; - "php_value[opcache.revalidate_freq]" = "1"; - "php_admin_value[memory_limit]" = "512M"; - - "php_admin_value[open_basedir]" = "/run/wrappers/bin/sendmail:${phpBaseDir}:/proc/meminfo:/dev/urandom:/proc/self/fd:/tmp"; - "php_admin_value[session.save_path]" = "/var/lib/nextcloud_farm/phpSessions"; - }; - phpPackage = pkgs.php74.withExtensions({ enabled, all }: enabled ++ [ all.redis all.apcu all.opcache ]); - }; - users.users.root.packages = let - toOcc = name: pkgs.writeScriptBin "nextcloud-occ-${name}" '' - #! ${pkgs.stdenv.shell} - cd ${nextcloud} - NEXTCLOUD_CONFIG_DIR="${toVardir name}" \ - exec \ - sudo -E -u wwwrun ${pkgs.php74}/bin/php \ - -c ${pkgs.php74}/etc/php.ini \ - occ $* - ''; - in map toOcc cfg.instances; - services.cron = { - enable = true; - systemCronJobs = let - toScript = name: pkgs.writeScriptBin "nextcloud-cron" '' - #! ${pkgs.stdenv.shell} - export LOCALE_ARCHIVE=/run/current-system/sw/lib/locale/locale-archive - export PATH=/run/wrappers/bin:$PATH - export NEXTCLOUD_CONFIG_DIR="${toVardir name}" - ${pkgs.php74}/bin/php -d memory_limit=512M -f ${nextcloud}/cron.php - ''; - toLine = name: '' - */15 * * * * wwwrun ${toScript name}/bin/nextcloud-cron - ''; - in map toLine cfg.instances; - }; - }; -} diff --git a/modules/private/websites/tools/commento/default.nix b/modules/private/websites/tools/commento/default.nix deleted file mode 100644 index c36255b..0000000 --- a/modules/private/websites/tools/commento/default.nix +++ /dev/null @@ -1,59 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.websites.tools.commento; - env = config.myEnv.tools.commento; - webPort = "${host}:${port}"; - port = toString env.listenPort; - host = "localhost"; - postgresql_url = "postgres://${env.postgresql.user}:${env.postgresql.password}@localhost:${env.postgresql.port}/${env.postgresql.database}?sslmode=disable"; -in -{ - options.myServices.websites.tools.commento = { - enable = lib.mkEnableOption "Enable commento website"; - }; - config = lib.mkIf cfg.enable { - secrets.keys = { - "commento/env" = { - permissions = "0400"; - text = '' - COMMENTO_ORIGIN=https://commento.immae.eu/ - COMMENTO_PORT=${port} - COMMENTO_POSTGRES=${postgresql_url} - COMMENTO_FORBID_NEW_OWNERS=true - COMMENTO_BIND_ADDRESS=${host} - COMMENTO_GZIP_STATIC=true - COMMENTO_SMTP_HOST=${env.smtp.host} - COMMENTO_SMTP_PORT=${env.smtp.port} - COMMENTO_SMTP_USERNAME=${env.smtp.email} - COMMENTO_SMTP_PASSWORD=${env.smtp.password} - COMMENTO_SMTP_FROM_ADDRESS=${env.smtp.email} - ''; - }; - }; - - services.websites.env.tools.vhostConfs.commento = { - certName = "eldiron"; - addToCerts = true; - hosts = [ "commento.immae.eu" ]; - root = null; - extraConfig = [ - '' - ProxyPass / http://${webPort}/ - ProxyPassReverse / http://${webPort}/ - ProxyPreserveHost On - '' - ]; - }; - systemd.services.commento = { - description = "Commento"; - wantedBy = [ "multi-user.target" ]; - requires = ["postgresql.service"]; - after = ["network.target" "postgresql.service"]; - serviceConfig = { - User = "wwwrun"; - ExecStart = "${pkgs.commento}/commento"; - EnvironmentFile = config.secrets.fullPaths."commento/env"; - }; - }; - }; -} diff --git a/modules/private/websites/tools/cryptpad/default.nix b/modules/private/websites/tools/cryptpad/default.nix deleted file mode 100644 index 69b9877..0000000 --- a/modules/private/websites/tools/cryptpad/default.nix +++ /dev/null @@ -1,50 +0,0 @@ -{ config, pkgs, lib, ... }: -let - cfg = config.myServices.websites.tools.cryptpad; - envCfg = config.myEnv.tools.cryptpad.immaeEu; - domain = "cryptpad.immae.eu"; - port = envCfg.port; - configFile = pkgs.writeText "config.js" '' - // ${pkgs.cryptpad}/lib/node_modules/cryptpad/config/config.example.js - module.exports = { - httpUnsafeOrigin: 'https://${domain}', - httpPort: ${toString port}, - adminEmail: '${envCfg.email}', - filePath: './datastore/', - archivePath: './data/archive', - pinPath: './data/pins', - taskPath: './data/tasks', - blockPath: './block', - blobPath: './blob', - blobStagingPath: './data/blobstage', - decreePath: './data/decrees', - logPath: './data/logs', - logToStdout: false, - logLevel: 'info', - logFeedback: false, - verbose: false, - inactiveTime: false, - maxUploadSize: 100 * 1024 * 1024, - adminKeys: ${builtins.toJSON envCfg.admins}, - }; - ''; -in -{ - options.myServices.websites.tools.cryptpad.enable = lib.mkEnableOption "Enable Cryptpad"; - config = lib.mkIf cfg.enable { - myServices.tools.cryptpad.farm.hosts.immaeEu = { - inherit domain port; - config = configFile; - }; - services.websites.env.tools.modules = [ "proxy_wstunnel" ]; - services.websites.env.tools.vhostConfs.cryptpad = { - certName = "eldiron"; - addToCerts = true; - hosts = [domain]; - root = config.myServices.tools.cryptpad.farm.vhostRoots.immaeEu; - extraConfig = [ - config.myServices.tools.cryptpad.farm.vhosts.immaeEu - ]; - }; - }; -} diff --git a/modules/private/websites/tools/cryptpad/farm.nix b/modules/private/websites/tools/cryptpad/farm.nix deleted file mode 100644 index b35f348..0000000 --- a/modules/private/websites/tools/cryptpad/farm.nix +++ /dev/null @@ -1,180 +0,0 @@ -{ pkgs, config, lib, ... }: -let - cfg = config.myServices.tools.cryptpad.farm; - toService = name: - let - inherit (cfg.hosts.${name}) package config; - in { - description = "Cryptpad ${name} Service"; - wantedBy = [ "multi-user.target" ]; - after = [ "networking.target" ]; - serviceConfig = { - User = "cryptpad"; - Group = "cryptpad"; - Environment = [ - "CRYPTPAD_CONFIG=${config}" - "HOME=%S/cryptpad/${name}" - ]; - ExecStart = "${package}/bin/cryptpad"; - PrivateTmp = true; - Restart = "always"; - StateDirectory = "cryptpad/${name}"; - WorkingDirectory = "%S/cryptpad/${name}"; - }; - }; - toVhostRoot = name: "${cfg.hosts.${name}.package}/lib/node_modules/cryptpad"; - toVhost = name: - let - inherit (cfg.hosts.${name}) package domain port; - api_domain = domain; - files_domain = domain; - in '' - RewriteEngine On - - Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" - Header set X-XSS-Protection "1; mode=block" - Header set X-Content-Type-Options "nosniff" - Header set Access-Control-Allow-Origin "*" - Header set Permissions-Policy "interest-cohort=()" - - Header set Cross-Origin-Resource-Policy "cross-origin" - - Header set Cross-Origin-Opener-Policy "same-origin" - - Header set Cross-Origin-Embedder-Policy "require-corp" - - ErrorDocument 404 /customize.dist/404.html - - - Header set Cache-Control "max-age=31536000" - - - Header set Cache-Control "no-cache" - - - SetEnv styleSrc "'unsafe-inline' 'self' ${domain}" - SetEnv connectSrc "'self' https://${domain} ${domain} https://${api_domain} blob: wss://${api_domain} ${api_domain} ${files_domain}" - SetEnv fontSrc "'self' data: ${domain}" - SetEnv imgSrc "'self' data: * blob: ${domain}" - SetEnv frameSrc "'self' blob:" - SetEnv mediaSrc "'self' data: * blob: ${domain}" - SetEnv childSrc "https://${domain}" - SetEnv workerSrc "https://${domain}" - SetEnv scriptSrc "'self' 'unsafe-eval' 'unsafe-inline' resource: ${domain}" - - Header set Content-Security-Policy "default-src 'none'; child-src %{childSrc}e; worker-src %{workerSrc}e; media-src %{mediaSrc}e; style-src %{styleSrc}e; script-src %{scriptSrc}e; connect-src %{connectSrc}e; font-src %{fontSrc}e; img-src %{imgSrc}e; frame-src %{frameSrc}e;" - - RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC] - RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC] - RewriteRule .* ws://localhost:${toString port}%{REQUEST_URI} [P,NE,QSA,L] - - RewriteRule ^/customize/(.*)$ /customize.dist/$1 [L] - - ProxyPassMatch "^/(api/(config|broadcast).*)$" "http://localhost:${toString port}/$1" - ProxyPassReverse /api http://localhost:${toString port}/api - ProxyPreserveHost On - RequestHeader set X-Real-IP %{REMOTE_ADDR}s - - Alias /blob /var/lib/cryptpad/${name}/blob - - Require all granted - AllowOverride None - - Alias /block /var/lib/cryptpad/${name}/block - - Require all granted - AllowOverride None - - - Header set Cache-Control "max-age=31536000" - Header set Access-Control-Allow-Origin "*" - Header set Access-Control-Allow-Methods "GET, POST, OPTIONS" - Header set Access-Control-Allow-Headers "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Content-Length" - Header set Access-Control-Expose-Headers "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Content-Length" - - RewriteCond %{REQUEST_METHOD} OPTIONS - RewriteRule ^(.*)$ $1 [R=204,L] - - - - Header set Cache-Control "max-age=0" - - - RewriteRule ^/(register|login|settings|user|pad|drive|poll|slide|code|whiteboard|file|media|profile|contacts|todo|filepicker|debug|kanban|sheet|support|admin|notifications|teams|calendar|presentation|doc)$ $1/ [R=302,L] - - RewriteCond %{DOCUMENT_ROOT}/www/%{REQUEST_URI} -f - RewriteRule (.*) /www/$1 [L] - - RewriteCond %{DOCUMENT_ROOT}/www/%{REQUEST_URI}/index.html -f - RewriteRule (.*) /www/$1/index.html [L] - - RewriteCond %{DOCUMENT_ROOT}/customize.dist/%{REQUEST_URI} -f - RewriteRule (.*) /customize.dist/$1 [L] - - - AllowOverride None - Require all granted - DirectoryIndex index.html - - - AllowOverride None - Require all granted - DirectoryIndex index.html - - ''; -in -{ - options.myServices.tools.cryptpad.farm = { - hosts = lib.mkOption { - default = {}; - description = "Hosts to install"; - type = lib.types.attrsOf (lib.types.submodule { - options = { - port = lib.mkOption { - type = lib.types.port; - }; - package = lib.mkOption { - type = lib.types.package; - description = "Cryptpad package to use"; - default = pkgs.cryptpad; - }; - domain = lib.mkOption { - type = lib.types.str; - description = "Domain for main host"; - }; - config = lib.mkOption { - type = lib.types.path; - description = "Path to configuration"; - }; - }; - }); - }; - vhosts = lib.mkOption { - description = "Instance vhosts configs"; - readOnly = true; - type = lib.types.attrsOf lib.types.str; - default = lib.genAttrs (builtins.attrNames cfg.hosts) toVhost; - }; - vhostRoots = lib.mkOption { - description = "Instance vhosts document roots"; - readOnly = true; - type = lib.types.attrsOf lib.types.path; - default = lib.genAttrs (builtins.attrNames cfg.hosts) toVhostRoot; - }; - }; - config = { - users.users = lib.optionalAttrs (cfg.hosts != {}) { - cryptpad = { - uid = config.ids.uids.cryptpad; - group = "cryptpad"; - description = "Cryptpad user"; - }; - }; - users.groups = lib.optionalAttrs (cfg.hosts != {}) { - cryptpad = { - gid = config.ids.gids.cryptpad; - }; - }; - systemd.services = lib.listToAttrs (map (n: lib.nameValuePair "cryptpad-${n}" (toService n)) (builtins.attrNames cfg.hosts)); - }; -} diff --git a/modules/private/websites/tools/dav/davical.nix b/modules/private/websites/tools/dav/davical.nix deleted file mode 100644 index bc5ecf6..0000000 --- a/modules/private/websites/tools/dav/davical.nix +++ /dev/null @@ -1,133 +0,0 @@ -{ stdenv, fetchurl, gettext, writeText, env, awl, davical, config }: -rec { - activationScript = { - deps = [ "httpd" ]; - text = '' - install -m 0755 -o ${apache.user} -g ${apache.group} -d /var/lib/php/sessions/davical - ''; - }; - keys."webapps/dav-davical" = { - user = apache.user; - group = apache.group; - permissions = "0400"; - text = '' - pg_connect[] = "dbname=${env.postgresql.database} user=${env.postgresql.user} host=${env.postgresql.socket} password=${env.postgresql.password}"; - - $c->readonly_webdav_collections = false; - - $c->admin_email ='davical@tools.immae.eu'; - - $c->restrict_setup_to_admin = true; - - $c->collections_always_exist = false; - - $c->external_refresh = 60; - - $c->enable_scheduling = true; - - $c->iMIP = (object) array("send_email" => true); - - $c->authenticate_hook['optional'] = false; - $c->authenticate_hook['call'] = 'LDAP_check'; - $c->authenticate_hook['config'] = array( - 'host' => '${env.ldap.host}', - 'port' => '389', - 'startTLS' => 'yes', - 'bindDN'=> '${env.ldap.dn}', - 'passDN'=> '${env.ldap.password}', - 'protocolVersion' => '3', - 'baseDNUsers'=> array('ou=users,${env.ldap.base}', 'ou=group_users,${env.ldap.base}'), - 'filterUsers' => '${env.ldap.filter}', - 'baseDNGroups' => 'ou=groups,${env.ldap.base}', - 'filterGroups' => 'memberOf=cn=groups,${env.ldap.dn}', - 'mapping_field' => array( - "username" => "uid", - "fullname" => "cn", - "email" => "mail", - "modified" => "modifyTimestamp", - ), - 'format_updated'=> array('Y' => array(0,4),'m' => array(4,2),'d'=> array(6,2),'H' => array(8,2),'M'=>array(10,2),'S' => array(12,2)), - /** used to set default value for all users, will be overcharged by ldap if defined also in mapping_field **/ - // 'default_value' => array("date_format_type" => "E","locale" => "fr_FR"), - 'group_mapping_field' => array( - "username" => "cn", - "updated" => "modifyTimestamp", - "fullname" => "givenName", - "displayname" => "givenName", - "members" => "memberUid", - "email" => "mail", - ), - ); - - $c->do_not_sync_from_ldap = array('admin' => true); - include('drivers_ldap.php'); - ''; - }; - webapp = davical.override { davical_config = config.secrets.fullPaths."webapps/dav-davical"; }; - webRoot = "${webapp}/htdocs"; - apache = rec { - user = "wwwrun"; - group = "wwwrun"; - modules = [ "proxy_fcgi" ]; - root = webRoot; - vhostConf = socket: '' - Alias /davical "${root}" - Alias /caldav.php "${root}/caldav.php" - - DirectoryIndex index.php index.html - AcceptPathInfo On - AllowOverride None - Require all granted - - - CGIPassAuth on - SetHandler "proxy:unix:${socket}|fcgi://localhost" - - - RewriteEngine On - - Header unset Access-Control-Allow-Origin - Header unset Access-Control-Allow-Methods - Header unset Access-Control-Allow-Headers - Header unset Access-Control-Allow-Credentials - Header unset Access-Control-Expose-Headers - - Header always set Access-Control-Allow-Origin "*" - Header always set Access-Control-Allow-Methods "GET,POST,OPTIONS,PROPFIND,PROPPATCH,REPORT,PUT,MOVE,DELETE,LOCK,UNLOCK" - Header always set Access-Control-Allow-Headers "User-Agent,Authorization,Content-type,Depth,If-match,If-None-Match,Lock-Token,Timeout,Destination,Overwrite,Prefer,X-client,X-Requested-With" - Header always set Access-Control-Allow-Credentials false - Header always set Access-Control-Expose-Headers "Etag,Preference-Applied" - - RewriteCond %{HTTP:Access-Control-Request-Method} !^$ - RewriteCond %{REQUEST_METHOD} OPTIONS - RewriteRule ^(.*)$ $1 [R=200,L] - - - ''; - }; - phpFpm = rec { - serviceDeps = [ "postgresql.service" "openldap.service" ]; - basedir = builtins.concatStringsSep ":" [ webapp config.secrets.fullPaths."webapps/dav-davical" awl ]; - pool = { - "listen.owner" = apache.user; - "listen.group" = apache.group; - "pm" = "dynamic"; - "pm.max_children" = "60"; - "pm.start_servers" = "2"; - "pm.min_spare_servers" = "1"; - "pm.max_spare_servers" = "10"; - - # Needed to avoid clashes in browser cookies (same domain) - "php_value[session.name]" = "DavicalPHPSESSID"; - "php_admin_value[open_basedir]" = "${basedir}:/tmp:/var/lib/php/sessions/davical"; - "php_admin_value[include_path]" = "${awl}/inc:${webapp}/inc"; - "php_admin_value[session.save_path]" = "/var/lib/php/sessions/davical"; - "php_flag[magic_quotes_gpc]" = "Off"; - "php_flag[register_globals]" = "Off"; - "php_admin_value[error_reporting]" = "E_ALL & ~E_NOTICE"; - "php_admin_value[default_charset]" = "utf-8"; - "php_flag[magic_quotes_runtime]" = "Off"; - }; - }; -} diff --git a/modules/private/websites/tools/dav/default.nix b/modules/private/websites/tools/dav/default.nix deleted file mode 100644 index b3aa03d..0000000 --- a/modules/private/websites/tools/dav/default.nix +++ /dev/null @@ -1,55 +0,0 @@ -{ lib, pkgs, config, ... }: -let - infcloud = rec { - root = pkgs.webapps.infcloud; - vhostConf = '' - Alias /carddavmate ${root} - Alias /caldavzap ${root} - Alias /infcloud ${root} - - AllowOverride All - Options FollowSymlinks - Require all granted - DirectoryIndex index.html - - ''; - }; - davical = pkgs.callPackage ./davical.nix { - env = config.myEnv.tools.davical; - inherit (pkgs.webapps) davical awl; - inherit config; - }; - - cfg = config.myServices.websites.tools.dav; -in { - options.myServices.websites.tools.dav = { - enable = lib.mkEnableOption "enable dav website"; - }; - - config = lib.mkIf cfg.enable { - system.activationScripts.davical = davical.activationScript; - secrets.keys = davical.keys; - services.websites.env.tools.modules = davical.apache.modules; - - services.websites.env.tools.vhostConfs.dav = { - certName = "eldiron"; - addToCerts = true; - hosts = ["dav.immae.eu" ]; - root = ./www; - extraConfig = [ - infcloud.vhostConf - (davical.apache.vhostConf config.services.phpfpm.pools.davical.socket) - ]; - }; - - services.phpfpm.pools = { - davical = { - user = config.services.httpd.Tools.user; - group = config.services.httpd.Tools.group; - settings = davical.phpFpm.pool; - phpPackage = pkgs.php72; - }; - }; - }; -} - diff --git a/modules/private/websites/tools/dav/www/index.html b/modules/private/websites/tools/dav/www/index.html deleted file mode 100644 index 91c25ba..0000000 --- a/modules/private/websites/tools/dav/www/index.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - Dav configuration - - - -

- Dav configuration: -

    -
  • Server: https://dav.immae.eu/caldav.php -
  • -
-

-

Clients: -

-

- - - diff --git a/modules/private/websites/tools/db/default.nix b/modules/private/websites/tools/db/default.nix deleted file mode 100644 index fc8d989..0000000 --- a/modules/private/websites/tools/db/default.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ lib, pkgs, config, ... }: -let - adminer = pkgs.callPackage ../../commons/adminer.nix { inherit config; }; - - cfg = config.myServices.websites.tools.db; -in { - options.myServices.websites.tools.db = { - enable = lib.mkEnableOption "enable database's website"; - }; - - config = lib.mkIf cfg.enable { - services.websites.env.tools.modules = adminer.apache.modules; - services.websites.env.tools.vhostConfs.db-1 = { - certName = "eldiron"; - addToCerts = true; - hosts = ["db-1.immae.eu" ]; - root = null; - extraConfig = [ (adminer.apache.vhostConf null) ]; - }; - }; -} diff --git a/modules/private/websites/tools/diaspora/default.nix b/modules/private/websites/tools/diaspora/default.nix deleted file mode 100644 index 3a115ed..0000000 --- a/modules/private/websites/tools/diaspora/default.nix +++ /dev/null @@ -1,185 +0,0 @@ -{ lib, pkgs, config, ... }: -let - env = config.myEnv.tools.diaspora; - root = "${dcfg.workdir}/public/"; - cfg = config.myServices.websites.tools.diaspora; - dcfg = config.services.diaspora; -in { - options.myServices.websites.tools.diaspora = { - enable = lib.mkEnableOption "enable diaspora's website"; - }; - - config = lib.mkIf cfg.enable { - users.users.diaspora.extraGroups = [ "keys" ]; - - secrets.keys = { - "webapps/diaspora" = { - isDir = true; - user = "diaspora"; - group = "diaspora"; - permissions = "0500"; - }; - "webapps/diaspora/diaspora.yml" = { - user = "diaspora"; - group = "diaspora"; - permissions = "0400"; - text = '' - configuration: - environment: - url: "https://diaspora.immae.eu/" - certificate_authorities: '${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt' - redis: 'redis://${env.redis.host}:${env.redis.port}/${env.redis.db}' - sidekiq: - s3: - assets: - logging: - logrotate: - debug: - server: - listen: '${dcfg.sockets.rails}' - rails_environment: 'production' - chat: - server: - bosh: - log: - map: - mapbox: - privacy: - piwik: - statistics: - camo: - settings: - enable_registrations: false - welcome_message: - invitations: - open: false - paypal_donations: - community_spotlight: - captcha: - enable: false - terms: - maintenance: - remove_old_users: - default_metas: - csp: - services: - twitter: - tumblr: - wordpress: - mail: - enable: true - sender_address: 'diaspora@tools.immae.eu' - method: 'sendmail' - smtp: - sendmail: - location: '/run/wrappers/bin/sendmail' - admins: - account: "ismael" - podmin_email: 'diaspora@tools.immae.eu' - relay: - outbound: - inbound: - ldap: - enable: true - host: ${env.ldap.host} - port: 636 - only_ldap: true - mail_attribute: mail - skip_email_confirmation: true - use_bind_dn: true - bind_dn: "${env.ldap.dn}" - bind_pw: "${env.ldap.password}" - search_base: "${env.ldap.base}" - search_filter: "${env.ldap.filter}" - production: - environment: - development: - environment: - ''; - }; - "webapps/diaspora/database.yml" = { - user = "diaspora"; - group = "diaspora"; - permissions = "0400"; - text = '' - postgresql: &postgresql - adapter: postgresql - host: "${env.postgresql.socket}" - port: "${env.postgresql.port}" - username: "${env.postgresql.user}" - password: "${env.postgresql.password}" - encoding: unicode - common: &common - <<: *postgresql - combined: &combined - <<: *common - development: - <<: *combined - database: diaspora_development - production: - <<: *combined - database: ${env.postgresql.database} - test: - <<: *combined - database: "diaspora_test" - integration1: - <<: *combined - database: diaspora_integration1 - integration2: - <<: *combined - database: diaspora_integration2 - ''; - }; - "webapps/diaspora/secret_token.rb" = { - user = "diaspora"; - group = "diaspora"; - permissions = "0400"; - text = '' - Diaspora::Application.config.secret_key_base = '${env.secret_token}' - ''; - }; - }; - - services.diaspora = { - enable = true; - package = pkgs.webapps.diaspora.override { ldap = true; }; - dataDir = "/var/lib/diaspora_immae"; - adminEmail = "diaspora@tools.immae.eu"; - configDir = config.secrets.fullPaths."webapps/diaspora"; - }; - - services.filesWatcher.diaspora = { - restart = true; - paths = [ dcfg.configDir ]; - }; - - services.websites.env.tools.modules = [ - "headers" "proxy" "proxy_http" - ]; - services.websites.env.tools.vhostConfs.diaspora = { - certName = "eldiron"; - addToCerts = true; - hosts = [ "diaspora.immae.eu" ]; - root = root; - extraConfig = [ '' - RewriteEngine On - RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f - RewriteRule ^/(.*)$ unix://${dcfg.sockets.rails}|http://diaspora.immae.eu/%{REQUEST_URI} [P,NE,QSA,L] - - ProxyRequests Off - ProxyVia On - ProxyPreserveHost On - RequestHeader set X_FORWARDED_PROTO https - - - Require all granted - - - - Require all granted - Options -MultiViews - - '' ]; - }; - }; -} diff --git a/modules/private/websites/tools/ether/default.nix b/modules/private/websites/tools/ether/default.nix deleted file mode 100644 index 0539095..0000000 --- a/modules/private/websites/tools/ether/default.nix +++ /dev/null @@ -1,216 +0,0 @@ -{ lib, pkgs, config, ... }: -let - env = config.myEnv.tools.etherpad-lite; - cfg = config.myServices.websites.tools.etherpad-lite; - # Make sure we’re not rebuilding whole libreoffice just because of a - # dependency - libreoffice = (import { overlays = []; }).libreoffice-fresh; - ecfg = config.services.etherpad-lite; -in { - options.myServices.websites.tools.etherpad-lite = { - enable = lib.mkEnableOption "enable etherpad's website"; - }; - - config = lib.mkIf cfg.enable { - secrets.keys = { - "webapps/tools-etherpad-apikey" = { - permissions = "0400"; - text = env.api_key; - }; - "webapps/tools-etherpad-sessionkey" = { - permissions = "0400"; - text = env.session_key; - }; - "webapps/tools-etherpad" = { - permissions = "0400"; - text = '' - { - "title": "Etherpad", - "favicon": "favicon.ico", - "skinName": "colibris", - "skinVariants": "dark-toolbar light-background super-light-editor full-width-editor", - - "ip": "", - "port" : "${ecfg.sockets.node}", - "showSettingsInAdminPage" : false, - "dbType" : "postgres", - "dbSettings" : { - "user" : "${env.postgresql.user}", - "host" : "${env.postgresql.socket}", - "password": "${env.postgresql.password}", - "database": "${env.postgresql.database}", - "charset" : "utf8mb4" - }, - - "defaultPadText" : "Welcome to Etherpad!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nGet involved with Etherpad at http:\/\/etherpad.org\n", - "padOptions": { - "noColors": false, - "showControls": true, - "showChat": true, - "showLineNumbers": true, - "useMonospaceFont": false, - "userName": false, - "userColor": false, - "rtl": false, - "alwaysShowChat": false, - "chatAndUsers": false, - "lang": "fr" - }, - - "suppressErrorsInPadText" : false, - "requireSession" : false, - "editOnly" : false, - "sessionNoPassword" : false, - "minify" : true, - "maxAge" : 21600, - "abiword" : null, - "soffice" : "${libreoffice}/bin/soffice", - "tidyHtml" : "", - "allowUnknownFileEnds" : true, - "requireAuthentication" : false, - "requireAuthorization" : false, - "trustProxy" : false, - "disableIPlogging" : false, - "automaticReconnectionTimeout" : 0, - "scrollWhenFocusLineIsOutOfViewport": { - "percentage": { - "editionAboveViewport": 0, - "editionBelowViewport": 0 - }, - "duration": 0, - "scrollWhenCaretIsInTheLastLineOfViewport": false, - "percentageToScrollWhenUserPressesArrowUp": 0 - }, - "users": { - "admin": { - "password": "${env.adminPassword}", - "is_admin": true - }, - "ldapauth": { - "hash": "invalid", - "url": "ldaps://${env.ldap.host}", - "accountBase": "${env.ldap.base}", - "accountPattern": "${env.ldap.filter}", - "displayNameAttribute": "cn", - "searchDN": "${env.ldap.dn}", - "searchPWD": "${env.ldap.password}", - "groupSearchBase": "${env.ldap.base}", - "groupAttribute": "member", - "groupAttributeIsDN": true, - "searchScope": "sub", - "groupSearch": "${env.ldap.group_filter}", - "anonymousReadonly": false - } - }, - "ep_mypads": { - "warning": "This hash is stored in database, changing anything here will not have any consequence", - "ldap": { - "url": "ldaps://${env.ldap.host}", - "bindDN": "${env.ldap.dn}", - "bindCredentials": "${env.ldap.password}", - "searchBase": "${env.ldap.base}", - "searchFilter": "${env.ldap.filter}", - "properties": { - "login": "uid", - "email": "mail", - "firstname": "givenName", - "lastname": "sn" - }, - "defaultLang": "fr" - } - }, - "ep_comments_page": { - "displayCommentAsIcon": true, - "highlightSelectedText": true - }, - "socketTransportProtocols" : ["xhr-polling", "jsonp-polling", "htmlfile"], - "loadTest": false, - "indentationOnNewLine": false, - "toolbar": { - "left": [ - ["bold", "italic", "underline", "strikethrough"], - ["orderedlist", "unorderedlist", "indent", "outdent"], - ["undo", "redo"], - ["clearauthorship"] - ], - "right": [ - ["importexport", "timeslider", "savedrevision"], - ["settings", "embed"], - ["showusers"] - ], - "timeslider": [ - ["timeslider_export", "timeslider_returnToPad"] - ] - }, - "loglevel": "INFO", - "logconfig" : { "appenders": [ { "type": "console" } ] } - } - ''; - }; - }; - services.etherpad-lite = { - enable = true; - package = pkgs.webapps.etherpad-lite.withModules (p: [ - p.ep_align p.ep_bookmark p.ep_colors p.ep_comments_page - p.ep_cursortrace p.ep_delete_empty_pads p.ep_embedmedia - p.ep_font_size p.ep_headings2 p.ep_immae_buttons p.ep_ldapauth - p.ep_line_height p.ep_markdown p.ep_mypads p.ep_page_view - p.ep_previewimages p.ep_ruler p.ep_scrollto - p.ep_set_title_on_pad p.ep_subscript_and_superscript - p.ep_timesliderdiff - ]); - modules = []; - sessionKeyFile = config.secrets.fullPaths."webapps/tools-etherpad-sessionkey"; - apiKeyFile = config.secrets.fullPaths."webapps/tools-etherpad-apikey"; - configFile = config.secrets.fullPaths."webapps/tools-etherpad"; - }; - - systemd.services.etherpad-lite.serviceConfig.SupplementaryGroups = "keys"; - # Needed so that they get in the closure - systemd.services.etherpad-lite.path = [ libreoffice pkgs.html-tidy ]; - - services.filesWatcher.etherpad-lite = { - restart = true; - paths = [ ecfg.sessionKeyFile ecfg.apiKeyFile ecfg.configFile ]; - }; - - services.websites.env.tools.modules = [ - "headers" "proxy" "proxy_http" "proxy_wstunnel" - ]; - services.websites.env.tools.vhostConfs.etherpad-lite = { - certName = "eldiron"; - addToCerts = true; - hosts = [ "ether.immae.eu" ]; - root = null; - extraConfig = [ '' - Header always set Strict-Transport-Security "max-age=31536000; includeSubdomains;" - RequestHeader set X-Forwarded-Proto "https" - - RewriteEngine On - - RewriteMap redirects "txt:${pkgs.writeText "redirects.txt" config.myEnv.tools.etherpad-lite.redirects}" - RewriteCond %{QUERY_STRING} "!noredirect" - RewriteCond %{REQUEST_URI} "^(.*)$" - RewriteCond ''${redirects:$1|Unknown} "!Unknown" - RewriteRule "^(.*)$" ''${redirects:$1} [L,NE,R=301,QSD] - - RewriteCond %{REQUEST_URI} ^/socket.io [NC] - RewriteCond %{QUERY_STRING} transport=websocket [NC] - RewriteRule /(.*) unix://${ecfg.sockets.node}|ws://ether.immae.eu/$1 [P,NE,QSA,L] - - - ProxyVia On - ProxyRequests Off - ProxyPreserveHost On - ProxyPass / unix://${ecfg.sockets.node}|http://ether.immae.eu/ - ProxyPassReverse / unix://${ecfg.sockets.node}|http://ether.immae.eu/ - - Options FollowSymLinks MultiViews - AllowOverride None - Require all granted - - - '' ]; - }; - }; -} diff --git a/modules/private/websites/tools/games/codenames/codenames.patch b/modules/private/websites/tools/games/codenames/codenames.patch deleted file mode 100644 index 9faf069..0000000 --- a/modules/private/websites/tools/games/codenames/codenames.patch +++ /dev/null @@ -1,8306 +0,0 @@ -diff --git a/elm.json b/elm.json -index a0d276b..1b73a46 100644 ---- a/elm.json -+++ b/elm.json -@@ -3,7 +3,7 @@ - "source-directories": [ - "src" - ], -- "elm-version": "0.19.0", -+ "elm-version": "0.19.1", - "dependencies": { - "direct": { - "elm/browser": "1.0.1", -@@ -15,12 +15,11 @@ - "perzanko/elm-loading": "2.0.4" - }, - "indirect": { -- "Skinney/murmur3": "2.0.8", - "elm/bytes": "1.0.8", - "elm/file": "1.0.5", - "elm/time": "1.0.0", - "elm/virtual-dom": "1.0.2", -- "rtfeldman/elm-css": "16.0.1", -+ "rtfeldman/elm-css": "16.1.0", - "rtfeldman/elm-hex": "1.0.0" - } - }, -@@ -32,4 +31,4 @@ - "elm/random": "1.0.0" - } - } --} -\ No newline at end of file -+} -diff --git a/package-lock.json b/package-lock.json -index 778b061..05a22ab 100644 ---- a/package-lock.json -+++ b/package-lock.json -@@ -4,196 +4,7963 @@ - "lockfileVersion": 1, - "requires": true, - "dependencies": { -+ "@babel/code-frame": { -+ "version": "7.0.0", -+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", -+ "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", -+ "dev": true, -+ "requires": { -+ "@babel/highlight": "^7.0.0" -+ } -+ }, -+ "@babel/core": { -+ "version": "7.3.4", -+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.3.4.tgz", -+ "integrity": "sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA==", -+ "dev": true, -+ "requires": { -+ "@babel/code-frame": "^7.0.0", -+ "@babel/generator": "^7.3.4", -+ "@babel/helpers": "^7.2.0", -+ "@babel/parser": "^7.3.4", -+ "@babel/template": "^7.2.2", -+ "@babel/traverse": "^7.3.4", -+ "@babel/types": "^7.3.4", -+ "convert-source-map": "^1.1.0", -+ "debug": "^4.1.0", -+ "json5": "^2.1.0", -+ "lodash": "^4.17.11", -+ "resolve": "^1.3.2", -+ "semver": "^5.4.1", -+ "source-map": "^0.5.0" -+ }, -+ "dependencies": { -+ "json5": { -+ "version": "2.1.3", -+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", -+ "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", -+ "dev": true, -+ "requires": { -+ "minimist": "^1.2.5" -+ } -+ }, -+ "source-map": { -+ "version": "0.5.7", -+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", -+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", -+ "dev": true -+ } -+ } -+ }, -+ "@babel/generator": { -+ "version": "7.3.4", -+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz", -+ "integrity": "sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==", -+ "dev": true, -+ "requires": { -+ "@babel/types": "^7.3.4", -+ "jsesc": "^2.5.1", -+ "lodash": "^4.17.11", -+ "source-map": "^0.5.0", -+ "trim-right": "^1.0.1" -+ }, -+ "dependencies": { -+ "source-map": { -+ "version": "0.5.7", -+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", -+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", -+ "dev": true -+ } -+ } -+ }, -+ "@babel/helper-annotate-as-pure": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz", -+ "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==", -+ "dev": true, -+ "requires": { -+ "@babel/types": "^7.8.3" -+ }, -+ "dependencies": { -+ "@babel/types": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", -+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-validator-identifier": "^7.9.5", -+ "lodash": "^4.17.13", -+ "to-fast-properties": "^2.0.0" -+ } -+ } -+ } -+ }, -+ "@babel/helper-builder-binary-assignment-operator-visitor": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz", -+ "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-explode-assignable-expression": "^7.8.3", -+ "@babel/types": "^7.8.3" -+ }, -+ "dependencies": { -+ "@babel/types": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", -+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-validator-identifier": "^7.9.5", -+ "lodash": "^4.17.13", -+ "to-fast-properties": "^2.0.0" -+ } -+ } -+ } -+ }, -+ "@babel/helper-builder-react-jsx": { -+ "version": "7.9.0", -+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz", -+ "integrity": "sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-annotate-as-pure": "^7.8.3", -+ "@babel/types": "^7.9.0" -+ }, -+ "dependencies": { -+ "@babel/types": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", -+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-validator-identifier": "^7.9.5", -+ "lodash": "^4.17.13", -+ "to-fast-properties": "^2.0.0" -+ } -+ } -+ } -+ }, -+ "@babel/helper-create-regexp-features-plugin": { -+ "version": "7.8.8", -+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz", -+ "integrity": "sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-annotate-as-pure": "^7.8.3", -+ "@babel/helper-regex": "^7.8.3", -+ "regexpu-core": "^4.7.0" -+ } -+ }, -+ "@babel/helper-define-map": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz", -+ "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-function-name": "^7.8.3", -+ "@babel/types": "^7.8.3", -+ "lodash": "^4.17.13" -+ }, -+ "dependencies": { -+ "@babel/types": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", -+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-validator-identifier": "^7.9.5", -+ "lodash": "^4.17.13", -+ "to-fast-properties": "^2.0.0" -+ } -+ } -+ } -+ }, -+ "@babel/helper-explode-assignable-expression": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz", -+ "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==", -+ "dev": true, -+ "requires": { -+ "@babel/traverse": "^7.8.3", -+ "@babel/types": "^7.8.3" -+ }, -+ "dependencies": { -+ "@babel/code-frame": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", -+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", -+ "dev": true, -+ "requires": { -+ "@babel/highlight": "^7.8.3" -+ } -+ }, -+ "@babel/generator": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz", -+ "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==", -+ "dev": true, -+ "requires": { -+ "@babel/types": "^7.9.5", -+ "jsesc": "^2.5.1", -+ "lodash": "^4.17.13", -+ "source-map": "^0.5.0" -+ } -+ }, -+ "@babel/parser": { -+ "version": "7.9.4", -+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", -+ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", -+ "dev": true -+ }, -+ "@babel/traverse": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz", -+ "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==", -+ "dev": true, -+ "requires": { -+ "@babel/code-frame": "^7.8.3", -+ "@babel/generator": "^7.9.5", -+ "@babel/helper-function-name": "^7.9.5", -+ "@babel/helper-split-export-declaration": "^7.8.3", -+ "@babel/parser": "^7.9.0", -+ "@babel/types": "^7.9.5", -+ "debug": "^4.1.0", -+ "globals": "^11.1.0", -+ "lodash": "^4.17.13" -+ } -+ }, -+ "@babel/types": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", -+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-validator-identifier": "^7.9.5", -+ "lodash": "^4.17.13", -+ "to-fast-properties": "^2.0.0" -+ } -+ }, -+ "source-map": { -+ "version": "0.5.7", -+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", -+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", -+ "dev": true -+ } -+ } -+ }, -+ "@babel/helper-function-name": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", -+ "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-get-function-arity": "^7.8.3", -+ "@babel/template": "^7.8.3", -+ "@babel/types": "^7.9.5" -+ }, -+ "dependencies": { -+ "@babel/code-frame": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", -+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", -+ "dev": true, -+ "requires": { -+ "@babel/highlight": "^7.8.3" -+ } -+ }, -+ "@babel/parser": { -+ "version": "7.9.4", -+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", -+ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", -+ "dev": true -+ }, -+ "@babel/template": { -+ "version": "7.8.6", -+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", -+ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", -+ "dev": true, -+ "requires": { -+ "@babel/code-frame": "^7.8.3", -+ "@babel/parser": "^7.8.6", -+ "@babel/types": "^7.8.6" -+ } -+ }, -+ "@babel/types": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", -+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-validator-identifier": "^7.9.5", -+ "lodash": "^4.17.13", -+ "to-fast-properties": "^2.0.0" -+ } -+ } -+ } -+ }, -+ "@babel/helper-get-function-arity": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", -+ "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", -+ "dev": true, -+ "requires": { -+ "@babel/types": "^7.8.3" -+ }, -+ "dependencies": { -+ "@babel/types": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", -+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-validator-identifier": "^7.9.5", -+ "lodash": "^4.17.13", -+ "to-fast-properties": "^2.0.0" -+ } -+ } -+ } -+ }, -+ "@babel/helper-hoist-variables": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz", -+ "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==", -+ "dev": true, -+ "requires": { -+ "@babel/types": "^7.8.3" -+ }, -+ "dependencies": { -+ "@babel/types": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", -+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-validator-identifier": "^7.9.5", -+ "lodash": "^4.17.13", -+ "to-fast-properties": "^2.0.0" -+ } -+ } -+ } -+ }, -+ "@babel/helper-member-expression-to-functions": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", -+ "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", -+ "dev": true, -+ "requires": { -+ "@babel/types": "^7.8.3" -+ }, -+ "dependencies": { -+ "@babel/types": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", -+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-validator-identifier": "^7.9.5", -+ "lodash": "^4.17.13", -+ "to-fast-properties": "^2.0.0" -+ } -+ } -+ } -+ }, -+ "@babel/helper-module-imports": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", -+ "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", -+ "dev": true, -+ "requires": { -+ "@babel/types": "^7.8.3" -+ }, -+ "dependencies": { -+ "@babel/types": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", -+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-validator-identifier": "^7.9.5", -+ "lodash": "^4.17.13", -+ "to-fast-properties": "^2.0.0" -+ } -+ } -+ } -+ }, -+ "@babel/helper-module-transforms": { -+ "version": "7.9.0", -+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", -+ "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-module-imports": "^7.8.3", -+ "@babel/helper-replace-supers": "^7.8.6", -+ "@babel/helper-simple-access": "^7.8.3", -+ "@babel/helper-split-export-declaration": "^7.8.3", -+ "@babel/template": "^7.8.6", -+ "@babel/types": "^7.9.0", -+ "lodash": "^4.17.13" -+ }, -+ "dependencies": { -+ "@babel/code-frame": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", -+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", -+ "dev": true, -+ "requires": { -+ "@babel/highlight": "^7.8.3" -+ } -+ }, -+ "@babel/parser": { -+ "version": "7.9.4", -+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", -+ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", -+ "dev": true -+ }, -+ "@babel/template": { -+ "version": "7.8.6", -+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", -+ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", -+ "dev": true, -+ "requires": { -+ "@babel/code-frame": "^7.8.3", -+ "@babel/parser": "^7.8.6", -+ "@babel/types": "^7.8.6" -+ } -+ }, -+ "@babel/types": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", -+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-validator-identifier": "^7.9.5", -+ "lodash": "^4.17.13", -+ "to-fast-properties": "^2.0.0" -+ } -+ } -+ } -+ }, -+ "@babel/helper-optimise-call-expression": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", -+ "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", -+ "dev": true, -+ "requires": { -+ "@babel/types": "^7.8.3" -+ }, -+ "dependencies": { -+ "@babel/types": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", -+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-validator-identifier": "^7.9.5", -+ "lodash": "^4.17.13", -+ "to-fast-properties": "^2.0.0" -+ } -+ } -+ } -+ }, -+ "@babel/helper-plugin-utils": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", -+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", -+ "dev": true -+ }, -+ "@babel/helper-regex": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz", -+ "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==", -+ "dev": true, -+ "requires": { -+ "lodash": "^4.17.13" -+ } -+ }, -+ "@babel/helper-remap-async-to-generator": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz", -+ "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-annotate-as-pure": "^7.8.3", -+ "@babel/helper-wrap-function": "^7.8.3", -+ "@babel/template": "^7.8.3", -+ "@babel/traverse": "^7.8.3", -+ "@babel/types": "^7.8.3" -+ }, -+ "dependencies": { -+ "@babel/code-frame": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", -+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", -+ "dev": true, -+ "requires": { -+ "@babel/highlight": "^7.8.3" -+ } -+ }, -+ "@babel/generator": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz", -+ "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==", -+ "dev": true, -+ "requires": { -+ "@babel/types": "^7.9.5", -+ "jsesc": "^2.5.1", -+ "lodash": "^4.17.13", -+ "source-map": "^0.5.0" -+ } -+ }, -+ "@babel/parser": { -+ "version": "7.9.4", -+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", -+ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", -+ "dev": true -+ }, -+ "@babel/template": { -+ "version": "7.8.6", -+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", -+ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", -+ "dev": true, -+ "requires": { -+ "@babel/code-frame": "^7.8.3", -+ "@babel/parser": "^7.8.6", -+ "@babel/types": "^7.8.6" -+ } -+ }, -+ "@babel/traverse": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz", -+ "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==", -+ "dev": true, -+ "requires": { -+ "@babel/code-frame": "^7.8.3", -+ "@babel/generator": "^7.9.5", -+ "@babel/helper-function-name": "^7.9.5", -+ "@babel/helper-split-export-declaration": "^7.8.3", -+ "@babel/parser": "^7.9.0", -+ "@babel/types": "^7.9.5", -+ "debug": "^4.1.0", -+ "globals": "^11.1.0", -+ "lodash": "^4.17.13" -+ } -+ }, -+ "@babel/types": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", -+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-validator-identifier": "^7.9.5", -+ "lodash": "^4.17.13", -+ "to-fast-properties": "^2.0.0" -+ } -+ }, -+ "source-map": { -+ "version": "0.5.7", -+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", -+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", -+ "dev": true -+ } -+ } -+ }, -+ "@babel/helper-replace-supers": { -+ "version": "7.8.6", -+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz", -+ "integrity": "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-member-expression-to-functions": "^7.8.3", -+ "@babel/helper-optimise-call-expression": "^7.8.3", -+ "@babel/traverse": "^7.8.6", -+ "@babel/types": "^7.8.6" -+ }, -+ "dependencies": { -+ "@babel/code-frame": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", -+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", -+ "dev": true, -+ "requires": { -+ "@babel/highlight": "^7.8.3" -+ } -+ }, -+ "@babel/generator": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz", -+ "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==", -+ "dev": true, -+ "requires": { -+ "@babel/types": "^7.9.5", -+ "jsesc": "^2.5.1", -+ "lodash": "^4.17.13", -+ "source-map": "^0.5.0" -+ } -+ }, -+ "@babel/parser": { -+ "version": "7.9.4", -+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", -+ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", -+ "dev": true -+ }, -+ "@babel/traverse": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz", -+ "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==", -+ "dev": true, -+ "requires": { -+ "@babel/code-frame": "^7.8.3", -+ "@babel/generator": "^7.9.5", -+ "@babel/helper-function-name": "^7.9.5", -+ "@babel/helper-split-export-declaration": "^7.8.3", -+ "@babel/parser": "^7.9.0", -+ "@babel/types": "^7.9.5", -+ "debug": "^4.1.0", -+ "globals": "^11.1.0", -+ "lodash": "^4.17.13" -+ } -+ }, -+ "@babel/types": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", -+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-validator-identifier": "^7.9.5", -+ "lodash": "^4.17.13", -+ "to-fast-properties": "^2.0.0" -+ } -+ }, -+ "source-map": { -+ "version": "0.5.7", -+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", -+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", -+ "dev": true -+ } -+ } -+ }, -+ "@babel/helper-simple-access": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", -+ "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", -+ "dev": true, -+ "requires": { -+ "@babel/template": "^7.8.3", -+ "@babel/types": "^7.8.3" -+ }, -+ "dependencies": { -+ "@babel/code-frame": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", -+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", -+ "dev": true, -+ "requires": { -+ "@babel/highlight": "^7.8.3" -+ } -+ }, -+ "@babel/parser": { -+ "version": "7.9.4", -+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", -+ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", -+ "dev": true -+ }, -+ "@babel/template": { -+ "version": "7.8.6", -+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", -+ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", -+ "dev": true, -+ "requires": { -+ "@babel/code-frame": "^7.8.3", -+ "@babel/parser": "^7.8.6", -+ "@babel/types": "^7.8.6" -+ } -+ }, -+ "@babel/types": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", -+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-validator-identifier": "^7.9.5", -+ "lodash": "^4.17.13", -+ "to-fast-properties": "^2.0.0" -+ } -+ } -+ } -+ }, -+ "@babel/helper-split-export-declaration": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", -+ "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", -+ "dev": true, -+ "requires": { -+ "@babel/types": "^7.8.3" -+ }, -+ "dependencies": { -+ "@babel/types": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", -+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-validator-identifier": "^7.9.5", -+ "lodash": "^4.17.13", -+ "to-fast-properties": "^2.0.0" -+ } -+ } -+ } -+ }, -+ "@babel/helper-validator-identifier": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", -+ "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", -+ "dev": true -+ }, -+ "@babel/helper-wrap-function": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", -+ "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-function-name": "^7.8.3", -+ "@babel/template": "^7.8.3", -+ "@babel/traverse": "^7.8.3", -+ "@babel/types": "^7.8.3" -+ }, -+ "dependencies": { -+ "@babel/code-frame": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", -+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", -+ "dev": true, -+ "requires": { -+ "@babel/highlight": "^7.8.3" -+ } -+ }, -+ "@babel/generator": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz", -+ "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==", -+ "dev": true, -+ "requires": { -+ "@babel/types": "^7.9.5", -+ "jsesc": "^2.5.1", -+ "lodash": "^4.17.13", -+ "source-map": "^0.5.0" -+ } -+ }, -+ "@babel/parser": { -+ "version": "7.9.4", -+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", -+ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", -+ "dev": true -+ }, -+ "@babel/template": { -+ "version": "7.8.6", -+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", -+ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", -+ "dev": true, -+ "requires": { -+ "@babel/code-frame": "^7.8.3", -+ "@babel/parser": "^7.8.6", -+ "@babel/types": "^7.8.6" -+ } -+ }, -+ "@babel/traverse": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz", -+ "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==", -+ "dev": true, -+ "requires": { -+ "@babel/code-frame": "^7.8.3", -+ "@babel/generator": "^7.9.5", -+ "@babel/helper-function-name": "^7.9.5", -+ "@babel/helper-split-export-declaration": "^7.8.3", -+ "@babel/parser": "^7.9.0", -+ "@babel/types": "^7.9.5", -+ "debug": "^4.1.0", -+ "globals": "^11.1.0", -+ "lodash": "^4.17.13" -+ } -+ }, -+ "@babel/types": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", -+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-validator-identifier": "^7.9.5", -+ "lodash": "^4.17.13", -+ "to-fast-properties": "^2.0.0" -+ } -+ }, -+ "source-map": { -+ "version": "0.5.7", -+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", -+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", -+ "dev": true -+ } -+ } -+ }, -+ "@babel/helpers": { -+ "version": "7.9.2", -+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz", -+ "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==", -+ "dev": true, -+ "requires": { -+ "@babel/template": "^7.8.3", -+ "@babel/traverse": "^7.9.0", -+ "@babel/types": "^7.9.0" -+ }, -+ "dependencies": { -+ "@babel/code-frame": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", -+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", -+ "dev": true, -+ "requires": { -+ "@babel/highlight": "^7.8.3" -+ } -+ }, -+ "@babel/generator": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz", -+ "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==", -+ "dev": true, -+ "requires": { -+ "@babel/types": "^7.9.5", -+ "jsesc": "^2.5.1", -+ "lodash": "^4.17.13", -+ "source-map": "^0.5.0" -+ } -+ }, -+ "@babel/parser": { -+ "version": "7.9.4", -+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", -+ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", -+ "dev": true -+ }, -+ "@babel/template": { -+ "version": "7.8.6", -+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", -+ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", -+ "dev": true, -+ "requires": { -+ "@babel/code-frame": "^7.8.3", -+ "@babel/parser": "^7.8.6", -+ "@babel/types": "^7.8.6" -+ } -+ }, -+ "@babel/traverse": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz", -+ "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==", -+ "dev": true, -+ "requires": { -+ "@babel/code-frame": "^7.8.3", -+ "@babel/generator": "^7.9.5", -+ "@babel/helper-function-name": "^7.9.5", -+ "@babel/helper-split-export-declaration": "^7.8.3", -+ "@babel/parser": "^7.9.0", -+ "@babel/types": "^7.9.5", -+ "debug": "^4.1.0", -+ "globals": "^11.1.0", -+ "lodash": "^4.17.13" -+ } -+ }, -+ "@babel/types": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", -+ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-validator-identifier": "^7.9.5", -+ "lodash": "^4.17.13", -+ "to-fast-properties": "^2.0.0" -+ } -+ }, -+ "source-map": { -+ "version": "0.5.7", -+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", -+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", -+ "dev": true -+ } -+ } -+ }, -+ "@babel/highlight": { -+ "version": "7.9.0", -+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", -+ "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-validator-identifier": "^7.9.0", -+ "chalk": "^2.0.0", -+ "js-tokens": "^4.0.0" -+ } -+ }, -+ "@babel/parser": { -+ "version": "7.3.4", -+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz", -+ "integrity": "sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==", -+ "dev": true -+ }, -+ "@babel/plugin-proposal-async-generator-functions": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz", -+ "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.3", -+ "@babel/helper-remap-async-to-generator": "^7.8.3", -+ "@babel/plugin-syntax-async-generators": "^7.8.0" -+ } -+ }, -+ "@babel/plugin-proposal-json-strings": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz", -+ "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.3", -+ "@babel/plugin-syntax-json-strings": "^7.8.0" -+ } -+ }, -+ "@babel/plugin-proposal-object-rest-spread": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.5.tgz", -+ "integrity": "sha512-VP2oXvAf7KCYTthbUHwBlewbl1Iq059f6seJGsxMizaCdgHIeczOr7FBqELhSqfkIl04Fi8okzWzl63UKbQmmg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.3", -+ "@babel/plugin-syntax-object-rest-spread": "^7.8.0", -+ "@babel/plugin-transform-parameters": "^7.9.5" -+ } -+ }, -+ "@babel/plugin-proposal-optional-catch-binding": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz", -+ "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.3", -+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" -+ } -+ }, -+ "@babel/plugin-proposal-unicode-property-regex": { -+ "version": "7.8.8", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz", -+ "integrity": "sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-create-regexp-features-plugin": "^7.8.8", -+ "@babel/helper-plugin-utils": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-syntax-async-generators": { -+ "version": "7.8.4", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", -+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.0" -+ } -+ }, -+ "@babel/plugin-syntax-flow": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.8.3.tgz", -+ "integrity": "sha512-innAx3bUbA0KSYj2E2MNFSn9hiCeowOFLxlsuhXzw8hMQnzkDomUr9QCD7E9VF60NmnG1sNTuuv6Qf4f8INYsg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-syntax-json-strings": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", -+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.0" -+ } -+ }, -+ "@babel/plugin-syntax-jsx": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz", -+ "integrity": "sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-syntax-object-rest-spread": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", -+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.0" -+ } -+ }, -+ "@babel/plugin-syntax-optional-catch-binding": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", -+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.0" -+ } -+ }, -+ "@babel/plugin-transform-arrow-functions": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz", -+ "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-transform-async-to-generator": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz", -+ "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-module-imports": "^7.8.3", -+ "@babel/helper-plugin-utils": "^7.8.3", -+ "@babel/helper-remap-async-to-generator": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-transform-block-scoped-functions": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz", -+ "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-transform-block-scoping": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz", -+ "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.3", -+ "lodash": "^4.17.13" -+ } -+ }, -+ "@babel/plugin-transform-classes": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz", -+ "integrity": "sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-annotate-as-pure": "^7.8.3", -+ "@babel/helper-define-map": "^7.8.3", -+ "@babel/helper-function-name": "^7.9.5", -+ "@babel/helper-optimise-call-expression": "^7.8.3", -+ "@babel/helper-plugin-utils": "^7.8.3", -+ "@babel/helper-replace-supers": "^7.8.6", -+ "@babel/helper-split-export-declaration": "^7.8.3", -+ "globals": "^11.1.0" -+ } -+ }, -+ "@babel/plugin-transform-computed-properties": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz", -+ "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-transform-destructuring": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz", -+ "integrity": "sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-transform-dotall-regex": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz", -+ "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-create-regexp-features-plugin": "^7.8.3", -+ "@babel/helper-plugin-utils": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-transform-duplicate-keys": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz", -+ "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-transform-exponentiation-operator": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz", -+ "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3", -+ "@babel/helper-plugin-utils": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-transform-flow-strip-types": { -+ "version": "7.3.4", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.3.4.tgz", -+ "integrity": "sha512-PmQC9R7DwpBFA+7ATKMyzViz3zCaMNouzZMPZN2K5PnbBbtL3AXFYTkDk+Hey5crQq2A90UG5Uthz0mel+XZrA==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.0.0", -+ "@babel/plugin-syntax-flow": "^7.2.0" -+ } -+ }, -+ "@babel/plugin-transform-for-of": { -+ "version": "7.9.0", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz", -+ "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-transform-function-name": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz", -+ "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-function-name": "^7.8.3", -+ "@babel/helper-plugin-utils": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-transform-literals": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz", -+ "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-transform-modules-amd": { -+ "version": "7.9.0", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz", -+ "integrity": "sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-module-transforms": "^7.9.0", -+ "@babel/helper-plugin-utils": "^7.8.3", -+ "babel-plugin-dynamic-import-node": "^2.3.0" -+ } -+ }, -+ "@babel/plugin-transform-modules-commonjs": { -+ "version": "7.2.0", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz", -+ "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-module-transforms": "^7.1.0", -+ "@babel/helper-plugin-utils": "^7.0.0", -+ "@babel/helper-simple-access": "^7.1.0" -+ } -+ }, -+ "@babel/plugin-transform-modules-systemjs": { -+ "version": "7.9.0", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz", -+ "integrity": "sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-hoist-variables": "^7.8.3", -+ "@babel/helper-module-transforms": "^7.9.0", -+ "@babel/helper-plugin-utils": "^7.8.3", -+ "babel-plugin-dynamic-import-node": "^2.3.0" -+ } -+ }, -+ "@babel/plugin-transform-modules-umd": { -+ "version": "7.9.0", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz", -+ "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-module-transforms": "^7.9.0", -+ "@babel/helper-plugin-utils": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-transform-named-capturing-groups-regex": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", -+ "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-create-regexp-features-plugin": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-transform-new-target": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz", -+ "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-transform-object-super": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz", -+ "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.3", -+ "@babel/helper-replace-supers": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-transform-parameters": { -+ "version": "7.9.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz", -+ "integrity": "sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-get-function-arity": "^7.8.3", -+ "@babel/helper-plugin-utils": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-transform-react-jsx": { -+ "version": "7.3.0", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz", -+ "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-builder-react-jsx": "^7.3.0", -+ "@babel/helper-plugin-utils": "^7.0.0", -+ "@babel/plugin-syntax-jsx": "^7.2.0" -+ } -+ }, -+ "@babel/plugin-transform-regenerator": { -+ "version": "7.8.7", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz", -+ "integrity": "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==", -+ "dev": true, -+ "requires": { -+ "regenerator-transform": "^0.14.2" -+ } -+ }, -+ "@babel/plugin-transform-shorthand-properties": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz", -+ "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-transform-spread": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz", -+ "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-transform-sticky-regex": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz", -+ "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.3", -+ "@babel/helper-regex": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-transform-template-literals": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz", -+ "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-annotate-as-pure": "^7.8.3", -+ "@babel/helper-plugin-utils": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-transform-typeof-symbol": { -+ "version": "7.8.4", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz", -+ "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-transform-unicode-regex": { -+ "version": "7.8.3", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz", -+ "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-create-regexp-features-plugin": "^7.8.3", -+ "@babel/helper-plugin-utils": "^7.8.3" -+ } -+ }, -+ "@babel/preset-env": { -+ "version": "7.3.4", -+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.4.tgz", -+ "integrity": "sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-module-imports": "^7.0.0", -+ "@babel/helper-plugin-utils": "^7.0.0", -+ "@babel/plugin-proposal-async-generator-functions": "^7.2.0", -+ "@babel/plugin-proposal-json-strings": "^7.2.0", -+ "@babel/plugin-proposal-object-rest-spread": "^7.3.4", -+ "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", -+ "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", -+ "@babel/plugin-syntax-async-generators": "^7.2.0", -+ "@babel/plugin-syntax-json-strings": "^7.2.0", -+ "@babel/plugin-syntax-object-rest-spread": "^7.2.0", -+ "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", -+ "@babel/plugin-transform-arrow-functions": "^7.2.0", -+ "@babel/plugin-transform-async-to-generator": "^7.3.4", -+ "@babel/plugin-transform-block-scoped-functions": "^7.2.0", -+ "@babel/plugin-transform-block-scoping": "^7.3.4", -+ "@babel/plugin-transform-classes": "^7.3.4", -+ "@babel/plugin-transform-computed-properties": "^7.2.0", -+ "@babel/plugin-transform-destructuring": "^7.2.0", -+ "@babel/plugin-transform-dotall-regex": "^7.2.0", -+ "@babel/plugin-transform-duplicate-keys": "^7.2.0", -+ "@babel/plugin-transform-exponentiation-operator": "^7.2.0", -+ "@babel/plugin-transform-for-of": "^7.2.0", -+ "@babel/plugin-transform-function-name": "^7.2.0", -+ "@babel/plugin-transform-literals": "^7.2.0", -+ "@babel/plugin-transform-modules-amd": "^7.2.0", -+ "@babel/plugin-transform-modules-commonjs": "^7.2.0", -+ "@babel/plugin-transform-modules-systemjs": "^7.3.4", -+ "@babel/plugin-transform-modules-umd": "^7.2.0", -+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0", -+ "@babel/plugin-transform-new-target": "^7.0.0", -+ "@babel/plugin-transform-object-super": "^7.2.0", -+ "@babel/plugin-transform-parameters": "^7.2.0", -+ "@babel/plugin-transform-regenerator": "^7.3.4", -+ "@babel/plugin-transform-shorthand-properties": "^7.2.0", -+ "@babel/plugin-transform-spread": "^7.2.0", -+ "@babel/plugin-transform-sticky-regex": "^7.2.0", -+ "@babel/plugin-transform-template-literals": "^7.2.0", -+ "@babel/plugin-transform-typeof-symbol": "^7.2.0", -+ "@babel/plugin-transform-unicode-regex": "^7.2.0", -+ "browserslist": "^4.3.4", -+ "invariant": "^2.2.2", -+ "js-levenshtein": "^1.1.3", -+ "semver": "^5.3.0" -+ } -+ }, -+ "@babel/runtime": { -+ "version": "7.3.4", -+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.4.tgz", -+ "integrity": "sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g==", -+ "dev": true, -+ "requires": { -+ "regenerator-runtime": "^0.12.0" -+ }, -+ "dependencies": { -+ "regenerator-runtime": { -+ "version": "0.12.1", -+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", -+ "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", -+ "dev": true -+ } -+ } -+ }, -+ "@babel/template": { -+ "version": "7.2.2", -+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", -+ "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", -+ "dev": true, -+ "requires": { -+ "@babel/code-frame": "^7.0.0", -+ "@babel/parser": "^7.2.2", -+ "@babel/types": "^7.2.2" -+ } -+ }, -+ "@babel/traverse": { -+ "version": "7.3.4", -+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz", -+ "integrity": "sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==", -+ "dev": true, -+ "requires": { -+ "@babel/code-frame": "^7.0.0", -+ "@babel/generator": "^7.3.4", -+ "@babel/helper-function-name": "^7.1.0", -+ "@babel/helper-split-export-declaration": "^7.0.0", -+ "@babel/parser": "^7.3.4", -+ "@babel/types": "^7.3.4", -+ "debug": "^4.1.0", -+ "globals": "^11.1.0", -+ "lodash": "^4.17.11" -+ } -+ }, -+ "@babel/types": { -+ "version": "7.3.4", -+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz", -+ "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==", -+ "dev": true, -+ "requires": { -+ "esutils": "^2.0.2", -+ "lodash": "^4.17.11", -+ "to-fast-properties": "^2.0.0" -+ } -+ }, -+ "@iarna/toml": { -+ "version": "2.2.5", -+ "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", -+ "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", -+ "dev": true -+ }, -+ "@mrmlnc/readdir-enhanced": { -+ "version": "2.2.1", -+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", -+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", -+ "dev": true, -+ "requires": { -+ "call-me-maybe": "^1.0.1", -+ "glob-to-regexp": "^0.3.0" -+ } -+ }, -+ "@nodelib/fs.stat": { -+ "version": "1.1.3", -+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", -+ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", -+ "dev": true -+ }, -+ "@parcel/fs": { -+ "version": "1.11.0", -+ "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-1.11.0.tgz", -+ "integrity": "sha512-86RyEqULbbVoeo8OLcv+LQ1Vq2PKBAvWTU9fCgALxuCTbbs5Ppcvll4Vr+Ko1AnmMzja/k++SzNAwJfeQXVlpA==", -+ "dev": true, -+ "requires": { -+ "@parcel/utils": "^1.11.0", -+ "mkdirp": "^0.5.1", -+ "rimraf": "^2.6.2" -+ } -+ }, -+ "@parcel/logger": { -+ "version": "1.11.1", -+ "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-1.11.1.tgz", -+ "integrity": "sha512-9NF3M6UVeP2udOBDILuoEHd8VrF4vQqoWHEafymO1pfSoOMfxrSJZw1MfyAAIUN/IFp9qjcpDCUbDZB+ioVevA==", -+ "dev": true, -+ "requires": { -+ "@parcel/workers": "^1.11.0", -+ "chalk": "^2.1.0", -+ "grapheme-breaker": "^0.3.2", -+ "ora": "^2.1.0", -+ "strip-ansi": "^4.0.0" -+ } -+ }, -+ "@parcel/utils": { -+ "version": "1.11.0", -+ "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-1.11.0.tgz", -+ "integrity": "sha512-cA3p4jTlaMeOtAKR/6AadanOPvKeg8VwgnHhOyfi0yClD0TZS/hi9xu12w4EzA/8NtHu0g6o4RDfcNjqN8l1AQ==", -+ "dev": true -+ }, -+ "@parcel/watcher": { -+ "version": "1.12.1", -+ "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-1.12.1.tgz", -+ "integrity": "sha512-od+uCtCxC/KoNQAIE1vWx1YTyKYY+7CTrxBJPRh3cDWw/C0tCtlBMVlrbplscGoEpt6B27KhJDCv82PBxOERNA==", -+ "dev": true, -+ "requires": { -+ "@parcel/utils": "^1.11.0", -+ "chokidar": "^2.1.5" -+ } -+ }, -+ "@parcel/workers": { -+ "version": "1.11.0", -+ "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-1.11.0.tgz", -+ "integrity": "sha512-USSjRAAQYsZFlv43FUPdD+jEGML5/8oLF0rUzPQTtK4q9kvaXr49F5ZplyLz5lox78cLZ0TxN2bIDQ1xhOkulQ==", -+ "dev": true, -+ "requires": { -+ "@parcel/utils": "^1.11.0", -+ "physical-cpu-count": "^2.0.0" -+ } -+ }, -+ "@types/q": { -+ "version": "1.5.2", -+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", -+ "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", -+ "dev": true -+ }, -+ "abab": { -+ "version": "2.0.3", -+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", -+ "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==", -+ "dev": true -+ }, -+ "abbrev": { -+ "version": "1.1.1", -+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", -+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", -+ "dev": true -+ }, -+ "acorn": { -+ "version": "7.1.1", -+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", -+ "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", -+ "dev": true -+ }, -+ "acorn-globals": { -+ "version": "4.3.4", -+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", -+ "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", -+ "dev": true, -+ "requires": { -+ "acorn": "^6.0.1", -+ "acorn-walk": "^6.0.1" -+ }, -+ "dependencies": { -+ "acorn": { -+ "version": "6.4.1", -+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", -+ "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", -+ "dev": true -+ } -+ } -+ }, -+ "acorn-walk": { -+ "version": "6.2.0", -+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", -+ "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", -+ "dev": true -+ }, -+ "ajv": { -+ "version": "6.12.2", -+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", -+ "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", -+ "requires": { -+ "fast-deep-equal": "^3.1.1", -+ "fast-json-stable-stringify": "^2.0.0", -+ "json-schema-traverse": "^0.4.1", -+ "uri-js": "^4.2.2" -+ } -+ }, -+ "alphanum-sort": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", -+ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", -+ "dev": true -+ }, -+ "ansi-regex": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", -+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", -+ "dev": true -+ }, -+ "ansi-styles": { -+ "version": "3.2.1", -+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", -+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", -+ "dev": true, -+ "requires": { -+ "color-convert": "^1.9.0" -+ } -+ }, -+ "ansi-to-html": { -+ "version": "0.6.14", -+ "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.14.tgz", -+ "integrity": "sha512-7ZslfB1+EnFSDO5Ju+ue5Y6It19DRnZXWv8jrGHgIlPna5Mh4jz7BV5jCbQneXNFurQcKoolaaAjHtgSBfOIuA==", -+ "dev": true, -+ "requires": { -+ "entities": "^1.1.2" -+ }, -+ "dependencies": { -+ "entities": { -+ "version": "1.1.2", -+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", -+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", -+ "dev": true -+ } -+ } -+ }, -+ "anymatch": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", -+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", -+ "dev": true, -+ "requires": { -+ "micromatch": "^3.1.4", -+ "normalize-path": "^2.1.1" -+ }, -+ "dependencies": { -+ "normalize-path": { -+ "version": "2.1.1", -+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", -+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", -+ "dev": true, -+ "requires": { -+ "remove-trailing-separator": "^1.0.1" -+ } -+ } -+ } -+ }, -+ "argparse": { -+ "version": "1.0.10", -+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", -+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", -+ "dev": true, -+ "requires": { -+ "sprintf-js": "~1.0.2" -+ } -+ }, -+ "arr-diff": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", -+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", -+ "dev": true -+ }, -+ "arr-flatten": { -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", -+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", -+ "dev": true -+ }, -+ "arr-union": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", -+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", -+ "dev": true -+ }, -+ "array-equal": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", -+ "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", -+ "dev": true -+ }, -+ "array-unique": { -+ "version": "0.3.2", -+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", -+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", -+ "dev": true -+ }, -+ "asn1": { -+ "version": "0.2.4", -+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", -+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", -+ "requires": { -+ "safer-buffer": "~2.1.0" -+ } -+ }, -+ "asn1.js": { -+ "version": "4.10.1", -+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", -+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", -+ "dev": true, -+ "requires": { -+ "bn.js": "^4.0.0", -+ "inherits": "^2.0.1", -+ "minimalistic-assert": "^1.0.0" -+ } -+ }, -+ "assert": { -+ "version": "1.5.0", -+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", -+ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", -+ "dev": true, -+ "requires": { -+ "object-assign": "^4.1.1", -+ "util": "0.10.3" -+ }, -+ "dependencies": { -+ "inherits": { -+ "version": "2.0.1", -+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", -+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", -+ "dev": true -+ }, -+ "util": { -+ "version": "0.10.3", -+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", -+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", -+ "dev": true, -+ "requires": { -+ "inherits": "2.0.1" -+ } -+ } -+ } -+ }, -+ "assert-plus": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", -+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" -+ }, -+ "assign-symbols": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", -+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", -+ "dev": true -+ }, -+ "async-each": { -+ "version": "1.0.3", -+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", -+ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", -+ "dev": true -+ }, -+ "async-limiter": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", -+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", -+ "dev": true -+ }, -+ "asynckit": { -+ "version": "0.4.0", -+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", -+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" -+ }, -+ "atob": { -+ "version": "2.1.2", -+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", -+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", -+ "dev": true -+ }, -+ "aws-sign2": { -+ "version": "0.7.0", -+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", -+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" -+ }, -+ "aws4": { -+ "version": "1.9.1", -+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", -+ "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" -+ }, -+ "babel-plugin-dynamic-import-node": { -+ "version": "2.3.3", -+ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", -+ "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", -+ "dev": true, -+ "requires": { -+ "object.assign": "^4.1.0" -+ } -+ }, -+ "babel-runtime": { -+ "version": "6.26.0", -+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", -+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", -+ "dev": true, -+ "requires": { -+ "core-js": "^2.4.0", -+ "regenerator-runtime": "^0.11.0" -+ }, -+ "dependencies": { -+ "regenerator-runtime": { -+ "version": "0.11.1", -+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", -+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", -+ "dev": true -+ } -+ } -+ }, -+ "babel-types": { -+ "version": "6.26.0", -+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", -+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", -+ "dev": true, -+ "requires": { -+ "babel-runtime": "^6.26.0", -+ "esutils": "^2.0.2", -+ "lodash": "^4.17.4", -+ "to-fast-properties": "^1.0.3" -+ }, -+ "dependencies": { -+ "to-fast-properties": { -+ "version": "1.0.3", -+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", -+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", -+ "dev": true -+ } -+ } -+ }, -+ "babylon-walk": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/babylon-walk/-/babylon-walk-1.0.2.tgz", -+ "integrity": "sha1-OxWl3btIKni0zpwByLoYFwLZ1s4=", -+ "dev": true, -+ "requires": { -+ "babel-runtime": "^6.11.6", -+ "babel-types": "^6.15.0", -+ "lodash.clone": "^4.5.0" -+ } -+ }, - "balanced-match": { - "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", -- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", -+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", -+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", -+ "dev": true -+ }, -+ "base": { -+ "version": "0.11.2", -+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", -+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", -+ "dev": true, -+ "requires": { -+ "cache-base": "^1.0.1", -+ "class-utils": "^0.3.5", -+ "component-emitter": "^1.2.1", -+ "define-property": "^1.0.0", -+ "isobject": "^3.0.1", -+ "mixin-deep": "^1.2.0", -+ "pascalcase": "^0.1.1" -+ }, -+ "dependencies": { -+ "define-property": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", -+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", -+ "dev": true, -+ "requires": { -+ "is-descriptor": "^1.0.0" -+ } -+ }, -+ "is-accessor-descriptor": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", -+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", -+ "dev": true, -+ "requires": { -+ "kind-of": "^6.0.0" -+ } -+ }, -+ "is-data-descriptor": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", -+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", -+ "dev": true, -+ "requires": { -+ "kind-of": "^6.0.0" -+ } -+ }, -+ "is-descriptor": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", -+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", -+ "dev": true, -+ "requires": { -+ "is-accessor-descriptor": "^1.0.0", -+ "is-data-descriptor": "^1.0.0", -+ "kind-of": "^6.0.2" -+ } -+ } -+ } -+ }, -+ "base64-js": { -+ "version": "1.3.1", -+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", -+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", -+ "dev": true -+ }, -+ "bcrypt-pbkdf": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", -+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", -+ "requires": { -+ "tweetnacl": "^0.14.3" -+ } -+ }, -+ "binary-extensions": { -+ "version": "1.13.1", -+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", -+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", -+ "dev": true -+ }, -+ "bindings": { -+ "version": "1.5.0", -+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", -+ "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", -+ "dev": true, -+ "requires": { -+ "file-uri-to-path": "1.0.0" -+ } -+ }, -+ "bn.js": { -+ "version": "4.11.8", -+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", -+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", -+ "dev": true -+ }, -+ "boolbase": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", -+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", -+ "dev": true -+ }, -+ "brace-expansion": { -+ "version": "1.1.11", -+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", -+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", -+ "dev": true, -+ "requires": { -+ "balanced-match": "^1.0.0", -+ "concat-map": "0.0.1" -+ } -+ }, -+ "braces": { -+ "version": "2.3.2", -+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", -+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", -+ "dev": true, -+ "requires": { -+ "arr-flatten": "^1.1.0", -+ "array-unique": "^0.3.2", -+ "extend-shallow": "^2.0.1", -+ "fill-range": "^4.0.0", -+ "isobject": "^3.0.1", -+ "repeat-element": "^1.1.2", -+ "snapdragon": "^0.8.1", -+ "snapdragon-node": "^2.0.1", -+ "split-string": "^3.0.2", -+ "to-regex": "^3.0.1" -+ }, -+ "dependencies": { -+ "extend-shallow": { -+ "version": "2.0.1", -+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", -+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", -+ "dev": true, -+ "requires": { -+ "is-extendable": "^0.1.0" -+ } -+ } -+ } -+ }, -+ "brfs": { -+ "version": "1.6.1", -+ "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", -+ "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==", -+ "dev": true, -+ "requires": { -+ "quote-stream": "^1.0.1", -+ "resolve": "^1.1.5", -+ "static-module": "^2.2.0", -+ "through2": "^2.0.0" -+ } -+ }, -+ "brorand": { -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", -+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", -+ "dev": true -+ }, -+ "browser-process-hrtime": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", -+ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", -+ "dev": true -+ }, -+ "browserify-aes": { -+ "version": "1.2.0", -+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", -+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", -+ "dev": true, -+ "requires": { -+ "buffer-xor": "^1.0.3", -+ "cipher-base": "^1.0.0", -+ "create-hash": "^1.1.0", -+ "evp_bytestokey": "^1.0.3", -+ "inherits": "^2.0.1", -+ "safe-buffer": "^5.0.1" -+ } -+ }, -+ "browserify-cipher": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", -+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", -+ "dev": true, -+ "requires": { -+ "browserify-aes": "^1.0.4", -+ "browserify-des": "^1.0.0", -+ "evp_bytestokey": "^1.0.0" -+ } -+ }, -+ "browserify-des": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", -+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", -+ "dev": true, -+ "requires": { -+ "cipher-base": "^1.0.1", -+ "des.js": "^1.0.0", -+ "inherits": "^2.0.1", -+ "safe-buffer": "^5.1.2" -+ } -+ }, -+ "browserify-rsa": { -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", -+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", -+ "dev": true, -+ "requires": { -+ "bn.js": "^4.1.0", -+ "randombytes": "^2.0.1" -+ } -+ }, -+ "browserify-sign": { -+ "version": "4.0.4", -+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", -+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", -+ "dev": true, -+ "requires": { -+ "bn.js": "^4.1.1", -+ "browserify-rsa": "^4.0.0", -+ "create-hash": "^1.1.0", -+ "create-hmac": "^1.1.2", -+ "elliptic": "^6.0.0", -+ "inherits": "^2.0.1", -+ "parse-asn1": "^5.0.0" -+ } -+ }, -+ "browserify-zlib": { -+ "version": "0.2.0", -+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", -+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", -+ "dev": true, -+ "requires": { -+ "pako": "~1.0.5" -+ }, -+ "dependencies": { -+ "pako": { -+ "version": "1.0.11", -+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", -+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", -+ "dev": true -+ } -+ } -+ }, -+ "browserslist": { -+ "version": "4.12.0", -+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz", -+ "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==", -+ "dev": true, -+ "requires": { -+ "caniuse-lite": "^1.0.30001043", -+ "electron-to-chromium": "^1.3.413", -+ "node-releases": "^1.1.53", -+ "pkg-up": "^2.0.0" -+ } -+ }, -+ "buffer": { -+ "version": "4.9.2", -+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", -+ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", -+ "dev": true, -+ "requires": { -+ "base64-js": "^1.0.2", -+ "ieee754": "^1.1.4", -+ "isarray": "^1.0.0" -+ } -+ }, -+ "buffer-equal": { -+ "version": "0.0.1", -+ "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", -+ "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=", -+ "dev": true -+ }, -+ "buffer-from": { -+ "version": "1.1.1", -+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", -+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", -+ "dev": true -+ }, -+ "buffer-xor": { -+ "version": "1.0.3", -+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", -+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", -+ "dev": true -+ }, -+ "builtin-status-codes": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", -+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", -+ "dev": true -+ }, -+ "cache-base": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", -+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", -+ "dev": true, -+ "requires": { -+ "collection-visit": "^1.0.0", -+ "component-emitter": "^1.2.1", -+ "get-value": "^2.0.6", -+ "has-value": "^1.0.0", -+ "isobject": "^3.0.1", -+ "set-value": "^2.0.0", -+ "to-object-path": "^0.3.0", -+ "union-value": "^1.0.0", -+ "unset-value": "^1.0.0" -+ } -+ }, -+ "call-me-maybe": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", -+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", -+ "dev": true -+ }, -+ "caller-callsite": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", -+ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", -+ "dev": true, -+ "requires": { -+ "callsites": "^2.0.0" -+ } -+ }, -+ "caller-path": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", -+ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", -+ "dev": true, -+ "requires": { -+ "caller-callsite": "^2.0.0" -+ } -+ }, -+ "callsites": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", -+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", -+ "dev": true -+ }, -+ "camelcase": { -+ "version": "5.3.1", -+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", -+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", -+ "dev": true -+ }, -+ "caniuse-api": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", -+ "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", -+ "dev": true, -+ "requires": { -+ "browserslist": "^4.0.0", -+ "caniuse-lite": "^1.0.0", -+ "lodash.memoize": "^4.1.2", -+ "lodash.uniq": "^4.5.0" -+ } -+ }, -+ "caniuse-lite": { -+ "version": "1.0.30001048", -+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001048.tgz", -+ "integrity": "sha512-g1iSHKVxornw0K8LG9LLdf+Fxnv7T1Z+mMsf0/YYLclQX4Cd522Ap0Lrw6NFqHgezit78dtyWxzlV2Xfc7vgRg==", -+ "dev": true -+ }, -+ "caseless": { -+ "version": "0.12.0", -+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", -+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" -+ }, -+ "chalk": { -+ "version": "2.4.2", -+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", -+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", -+ "dev": true, -+ "requires": { -+ "ansi-styles": "^3.2.1", -+ "escape-string-regexp": "^1.0.5", -+ "supports-color": "^5.3.0" -+ }, -+ "dependencies": { -+ "supports-color": { -+ "version": "5.5.0", -+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", -+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", -+ "dev": true, -+ "requires": { -+ "has-flag": "^3.0.0" -+ } -+ } -+ } -+ }, -+ "chokidar": { -+ "version": "2.1.8", -+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", -+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", -+ "dev": true, -+ "requires": { -+ "anymatch": "^2.0.0", -+ "async-each": "^1.0.1", -+ "braces": "^2.3.2", -+ "fsevents": "^1.2.7", -+ "glob-parent": "^3.1.0", -+ "inherits": "^2.0.3", -+ "is-binary-path": "^1.0.0", -+ "is-glob": "^4.0.0", -+ "normalize-path": "^3.0.0", -+ "path-is-absolute": "^1.0.0", -+ "readdirp": "^2.2.1", -+ "upath": "^1.1.1" -+ }, -+ "dependencies": { -+ "fsevents": { -+ "version": "1.2.12", -+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", -+ "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "bindings": "^1.5.0", -+ "nan": "^2.12.1", -+ "node-pre-gyp": "*" -+ }, -+ "dependencies": { -+ "abbrev": { -+ "version": "1.1.1", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "ansi-regex": { -+ "version": "2.1.1", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "aproba": { -+ "version": "1.2.0", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "are-we-there-yet": { -+ "version": "1.1.5", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "delegates": "^1.0.0", -+ "readable-stream": "^2.0.6" -+ } -+ }, -+ "balanced-match": { -+ "version": "1.0.0", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "brace-expansion": { -+ "version": "1.1.11", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "balanced-match": "^1.0.0", -+ "concat-map": "0.0.1" -+ } -+ }, -+ "chownr": { -+ "version": "1.1.4", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "code-point-at": { -+ "version": "1.1.0", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "concat-map": { -+ "version": "0.0.1", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "console-control-strings": { -+ "version": "1.1.0", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "core-util-is": { -+ "version": "1.0.2", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "debug": { -+ "version": "3.2.6", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "ms": "^2.1.1" -+ } -+ }, -+ "deep-extend": { -+ "version": "0.6.0", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "delegates": { -+ "version": "1.0.0", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "detect-libc": { -+ "version": "1.0.3", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "fs-minipass": { -+ "version": "1.2.7", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "minipass": "^2.6.0" -+ } -+ }, -+ "fs.realpath": { -+ "version": "1.0.0", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "gauge": { -+ "version": "2.7.4", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "aproba": "^1.0.3", -+ "console-control-strings": "^1.0.0", -+ "has-unicode": "^2.0.0", -+ "object-assign": "^4.1.0", -+ "signal-exit": "^3.0.0", -+ "string-width": "^1.0.1", -+ "strip-ansi": "^3.0.1", -+ "wide-align": "^1.1.0" -+ } -+ }, -+ "glob": { -+ "version": "7.1.6", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "fs.realpath": "^1.0.0", -+ "inflight": "^1.0.4", -+ "inherits": "2", -+ "minimatch": "^3.0.4", -+ "once": "^1.3.0", -+ "path-is-absolute": "^1.0.0" -+ } -+ }, -+ "has-unicode": { -+ "version": "2.0.1", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "iconv-lite": { -+ "version": "0.4.24", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "safer-buffer": ">= 2.1.2 < 3" -+ } -+ }, -+ "ignore-walk": { -+ "version": "3.0.3", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "minimatch": "^3.0.4" -+ } -+ }, -+ "inflight": { -+ "version": "1.0.6", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "once": "^1.3.0", -+ "wrappy": "1" -+ } -+ }, -+ "inherits": { -+ "version": "2.0.4", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "ini": { -+ "version": "1.3.5", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "is-fullwidth-code-point": { -+ "version": "1.0.0", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "number-is-nan": "^1.0.0" -+ } -+ }, -+ "isarray": { -+ "version": "1.0.0", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "minimatch": { -+ "version": "3.0.4", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "brace-expansion": "^1.1.7" -+ } -+ }, -+ "minimist": { -+ "version": "1.2.5", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "minipass": { -+ "version": "2.9.0", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "safe-buffer": "^5.1.2", -+ "yallist": "^3.0.0" -+ } -+ }, -+ "minizlib": { -+ "version": "1.3.3", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "minipass": "^2.9.0" -+ } -+ }, -+ "mkdirp": { -+ "version": "0.5.3", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "minimist": "^1.2.5" -+ } -+ }, -+ "ms": { -+ "version": "2.1.2", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "needle": { -+ "version": "2.3.3", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "debug": "^3.2.6", -+ "iconv-lite": "^0.4.4", -+ "sax": "^1.2.4" -+ } -+ }, -+ "node-pre-gyp": { -+ "version": "0.14.0", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "detect-libc": "^1.0.2", -+ "mkdirp": "^0.5.1", -+ "needle": "^2.2.1", -+ "nopt": "^4.0.1", -+ "npm-packlist": "^1.1.6", -+ "npmlog": "^4.0.2", -+ "rc": "^1.2.7", -+ "rimraf": "^2.6.1", -+ "semver": "^5.3.0", -+ "tar": "^4.4.2" -+ } -+ }, -+ "nopt": { -+ "version": "4.0.3", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "abbrev": "1", -+ "osenv": "^0.1.4" -+ } -+ }, -+ "npm-bundled": { -+ "version": "1.1.1", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "npm-normalize-package-bin": "^1.0.1" -+ } -+ }, -+ "npm-normalize-package-bin": { -+ "version": "1.0.1", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "npm-packlist": { -+ "version": "1.4.8", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "ignore-walk": "^3.0.1", -+ "npm-bundled": "^1.0.1", -+ "npm-normalize-package-bin": "^1.0.1" -+ } -+ }, -+ "npmlog": { -+ "version": "4.1.2", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "are-we-there-yet": "~1.1.2", -+ "console-control-strings": "~1.1.0", -+ "gauge": "~2.7.3", -+ "set-blocking": "~2.0.0" -+ } -+ }, -+ "number-is-nan": { -+ "version": "1.0.1", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "object-assign": { -+ "version": "4.1.1", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "once": { -+ "version": "1.4.0", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "wrappy": "1" -+ } -+ }, -+ "os-homedir": { -+ "version": "1.0.2", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "os-tmpdir": { -+ "version": "1.0.2", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "osenv": { -+ "version": "0.1.5", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "os-homedir": "^1.0.0", -+ "os-tmpdir": "^1.0.0" -+ } -+ }, -+ "path-is-absolute": { -+ "version": "1.0.1", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "process-nextick-args": { -+ "version": "2.0.1", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "rc": { -+ "version": "1.2.8", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "deep-extend": "^0.6.0", -+ "ini": "~1.3.0", -+ "minimist": "^1.2.0", -+ "strip-json-comments": "~2.0.1" -+ } -+ }, -+ "readable-stream": { -+ "version": "2.3.7", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "core-util-is": "~1.0.0", -+ "inherits": "~2.0.3", -+ "isarray": "~1.0.0", -+ "process-nextick-args": "~2.0.0", -+ "safe-buffer": "~5.1.1", -+ "string_decoder": "~1.1.1", -+ "util-deprecate": "~1.0.1" -+ } -+ }, -+ "rimraf": { -+ "version": "2.7.1", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "glob": "^7.1.3" -+ } -+ }, -+ "safe-buffer": { -+ "version": "5.1.2", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "safer-buffer": { -+ "version": "2.1.2", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "sax": { -+ "version": "1.2.4", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "semver": { -+ "version": "5.7.1", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "set-blocking": { -+ "version": "2.0.0", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "signal-exit": { -+ "version": "3.0.2", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "string-width": { -+ "version": "1.0.2", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "code-point-at": "^1.0.0", -+ "is-fullwidth-code-point": "^1.0.0", -+ "strip-ansi": "^3.0.0" -+ } -+ }, -+ "string_decoder": { -+ "version": "1.1.1", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "safe-buffer": "~5.1.0" -+ } -+ }, -+ "strip-ansi": { -+ "version": "3.0.1", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "ansi-regex": "^2.0.0" -+ } -+ }, -+ "strip-json-comments": { -+ "version": "2.0.1", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "tar": { -+ "version": "4.4.13", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "chownr": "^1.1.1", -+ "fs-minipass": "^1.2.5", -+ "minipass": "^2.8.6", -+ "minizlib": "^1.2.1", -+ "mkdirp": "^0.5.0", -+ "safe-buffer": "^5.1.2", -+ "yallist": "^3.0.3" -+ } -+ }, -+ "util-deprecate": { -+ "version": "1.0.2", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "wide-align": { -+ "version": "1.1.3", -+ "bundled": true, -+ "dev": true, -+ "optional": true, -+ "requires": { -+ "string-width": "^1.0.2 || 2" -+ } -+ }, -+ "wrappy": { -+ "version": "1.0.2", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ }, -+ "yallist": { -+ "version": "3.1.1", -+ "bundled": true, -+ "dev": true, -+ "optional": true -+ } -+ } -+ } -+ } -+ }, -+ "cipher-base": { -+ "version": "1.0.4", -+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", -+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", -+ "dev": true, -+ "requires": { -+ "inherits": "^2.0.1", -+ "safe-buffer": "^5.0.1" -+ } -+ }, -+ "class-utils": { -+ "version": "0.3.6", -+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", -+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", -+ "dev": true, -+ "requires": { -+ "arr-union": "^3.1.0", -+ "define-property": "^0.2.5", -+ "isobject": "^3.0.0", -+ "static-extend": "^0.1.1" -+ }, -+ "dependencies": { -+ "define-property": { -+ "version": "0.2.5", -+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", -+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", -+ "dev": true, -+ "requires": { -+ "is-descriptor": "^0.1.0" -+ } -+ } -+ } -+ }, -+ "cli-cursor": { -+ "version": "2.1.0", -+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", -+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", -+ "dev": true, -+ "requires": { -+ "restore-cursor": "^2.0.0" -+ } -+ }, -+ "cli-spinners": { -+ "version": "1.3.1", -+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", -+ "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", -+ "dev": true -+ }, -+ "cliui": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", -+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", -+ "dev": true, -+ "requires": { -+ "string-width": "^3.1.0", -+ "strip-ansi": "^5.2.0", -+ "wrap-ansi": "^5.1.0" -+ }, -+ "dependencies": { -+ "ansi-regex": { -+ "version": "4.1.0", -+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", -+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", -+ "dev": true -+ }, -+ "strip-ansi": { -+ "version": "5.2.0", -+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", -+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", -+ "dev": true, -+ "requires": { -+ "ansi-regex": "^4.1.0" -+ } -+ } -+ } -+ }, -+ "clone": { -+ "version": "2.1.2", -+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", -+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", -+ "dev": true -+ }, -+ "clones": { -+ "version": "1.2.0", -+ "resolved": "https://registry.npmjs.org/clones/-/clones-1.2.0.tgz", -+ "integrity": "sha512-FXDYw4TjR8wgPZYui2LeTqWh1BLpfQ8lB6upMtlpDF6WlOOxghmTTxWyngdKTgozqBgKnHbTVwTE+hOHqAykuQ==", -+ "dev": true -+ }, -+ "coa": { -+ "version": "2.0.2", -+ "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", -+ "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", -+ "dev": true, -+ "requires": { -+ "@types/q": "^1.5.1", -+ "chalk": "^2.4.1", -+ "q": "^1.1.2" -+ } -+ }, -+ "collection-visit": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", -+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", -+ "dev": true, -+ "requires": { -+ "map-visit": "^1.0.0", -+ "object-visit": "^1.0.0" -+ } -+ }, -+ "color": { -+ "version": "3.1.2", -+ "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", -+ "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", -+ "dev": true, -+ "requires": { -+ "color-convert": "^1.9.1", -+ "color-string": "^1.5.2" -+ } -+ }, -+ "color-convert": { -+ "version": "1.9.3", -+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", -+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", -+ "dev": true, -+ "requires": { -+ "color-name": "1.1.3" -+ } -+ }, -+ "color-name": { -+ "version": "1.1.3", -+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", -+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", -+ "dev": true -+ }, -+ "color-string": { -+ "version": "1.5.3", -+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", -+ "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", -+ "dev": true, -+ "requires": { -+ "color-name": "^1.0.0", -+ "simple-swizzle": "^0.2.2" -+ } -+ }, -+ "combined-stream": { -+ "version": "1.0.8", -+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", -+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", -+ "requires": { -+ "delayed-stream": "~1.0.0" -+ } -+ }, -+ "command-exists": { -+ "version": "1.2.9", -+ "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", -+ "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", -+ "dev": true -+ }, -+ "commander": { -+ "version": "2.20.3", -+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", -+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", -+ "dev": true -+ }, -+ "component-emitter": { -+ "version": "1.3.0", -+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", -+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", -+ "dev": true -+ }, -+ "concat-map": { -+ "version": "0.0.1", -+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", -+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", -+ "dev": true -+ }, -+ "concat-stream": { -+ "version": "1.6.2", -+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", -+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", -+ "dev": true, -+ "requires": { -+ "buffer-from": "^1.0.0", -+ "inherits": "^2.0.3", -+ "readable-stream": "^2.2.2", -+ "typedarray": "^0.0.6" -+ } -+ }, -+ "config-chain": { -+ "version": "1.1.12", -+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", -+ "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", -+ "dev": true, -+ "requires": { -+ "ini": "^1.3.4", -+ "proto-list": "~1.2.1" -+ } -+ }, -+ "console-browserify": { -+ "version": "1.2.0", -+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", -+ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", -+ "dev": true -+ }, -+ "constants-browserify": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", -+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", -+ "dev": true -+ }, -+ "convert-source-map": { -+ "version": "1.7.0", -+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", -+ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", -+ "dev": true, -+ "requires": { -+ "safe-buffer": "~5.1.1" -+ } -+ }, -+ "copy-descriptor": { -+ "version": "0.1.1", -+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", -+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", -+ "dev": true -+ }, -+ "core-js": { -+ "version": "2.6.11", -+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", -+ "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", -+ "dev": true -+ }, -+ "core-util-is": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", -+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" -+ }, -+ "cosmiconfig": { -+ "version": "5.2.1", -+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", -+ "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", -+ "dev": true, -+ "requires": { -+ "import-fresh": "^2.0.0", -+ "is-directory": "^0.3.1", -+ "js-yaml": "^3.13.1", -+ "parse-json": "^4.0.0" -+ } -+ }, -+ "create-ecdh": { -+ "version": "4.0.3", -+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", -+ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", -+ "dev": true, -+ "requires": { -+ "bn.js": "^4.1.0", -+ "elliptic": "^6.0.0" -+ } -+ }, -+ "create-hash": { -+ "version": "1.2.0", -+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", -+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", -+ "dev": true, -+ "requires": { -+ "cipher-base": "^1.0.1", -+ "inherits": "^2.0.1", -+ "md5.js": "^1.3.4", -+ "ripemd160": "^2.0.1", -+ "sha.js": "^2.4.0" -+ } -+ }, -+ "create-hmac": { -+ "version": "1.1.7", -+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", -+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", -+ "dev": true, -+ "requires": { -+ "cipher-base": "^1.0.3", -+ "create-hash": "^1.1.0", -+ "inherits": "^2.0.1", -+ "ripemd160": "^2.0.0", -+ "safe-buffer": "^5.0.1", -+ "sha.js": "^2.4.8" -+ } -+ }, -+ "cross-spawn": { -+ "version": "6.0.5", -+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", -+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", -+ "dev": true, -+ "requires": { -+ "nice-try": "^1.0.4", -+ "path-key": "^2.0.1", -+ "semver": "^5.5.0", -+ "shebang-command": "^1.2.0", -+ "which": "^1.2.9" -+ } -+ }, -+ "crypto-browserify": { -+ "version": "3.12.0", -+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", -+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", -+ "dev": true, -+ "requires": { -+ "browserify-cipher": "^1.0.0", -+ "browserify-sign": "^4.0.0", -+ "create-ecdh": "^4.0.0", -+ "create-hash": "^1.1.0", -+ "create-hmac": "^1.1.0", -+ "diffie-hellman": "^5.0.0", -+ "inherits": "^2.0.1", -+ "pbkdf2": "^3.0.3", -+ "public-encrypt": "^4.0.0", -+ "randombytes": "^2.0.0", -+ "randomfill": "^1.0.3" -+ } -+ }, -+ "css-color-names": { -+ "version": "0.0.4", -+ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", -+ "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", -+ "dev": true -+ }, -+ "css-declaration-sorter": { -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", -+ "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", -+ "dev": true, -+ "requires": { -+ "postcss": "^7.0.1", -+ "timsort": "^0.3.0" -+ } -+ }, -+ "css-modules-loader-core": { -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz", -+ "integrity": "sha1-WQhmgpShvs0mGuCkziGwtVHyHRY=", -+ "dev": true, -+ "requires": { -+ "icss-replace-symbols": "1.1.0", -+ "postcss": "6.0.1", -+ "postcss-modules-extract-imports": "1.1.0", -+ "postcss-modules-local-by-default": "1.2.0", -+ "postcss-modules-scope": "1.1.0", -+ "postcss-modules-values": "1.3.0" -+ }, -+ "dependencies": { -+ "ansi-regex": { -+ "version": "2.1.1", -+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", -+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", -+ "dev": true -+ }, -+ "ansi-styles": { -+ "version": "2.2.1", -+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", -+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", -+ "dev": true -+ }, -+ "chalk": { -+ "version": "1.1.3", -+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", -+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", -+ "dev": true, -+ "requires": { -+ "ansi-styles": "^2.2.1", -+ "escape-string-regexp": "^1.0.2", -+ "has-ansi": "^2.0.0", -+ "strip-ansi": "^3.0.0", -+ "supports-color": "^2.0.0" -+ }, -+ "dependencies": { -+ "supports-color": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", -+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", -+ "dev": true -+ } -+ } -+ }, -+ "has-flag": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", -+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", -+ "dev": true -+ }, -+ "postcss": { -+ "version": "6.0.1", -+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", -+ "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", -+ "dev": true, -+ "requires": { -+ "chalk": "^1.1.3", -+ "source-map": "^0.5.6", -+ "supports-color": "^3.2.3" -+ } -+ }, -+ "source-map": { -+ "version": "0.5.7", -+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", -+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", -+ "dev": true -+ }, -+ "strip-ansi": { -+ "version": "3.0.1", -+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", -+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", -+ "dev": true, -+ "requires": { -+ "ansi-regex": "^2.0.0" -+ } -+ }, -+ "supports-color": { -+ "version": "3.2.3", -+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", -+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", -+ "dev": true, -+ "requires": { -+ "has-flag": "^1.0.0" -+ } -+ } -+ } -+ }, -+ "css-select": { -+ "version": "2.1.0", -+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", -+ "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", -+ "dev": true, -+ "requires": { -+ "boolbase": "^1.0.0", -+ "css-what": "^3.2.1", -+ "domutils": "^1.7.0", -+ "nth-check": "^1.0.2" -+ } -+ }, -+ "css-select-base-adapter": { -+ "version": "0.1.1", -+ "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", -+ "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", -+ "dev": true -+ }, -+ "css-selector-tokenizer": { -+ "version": "0.7.2", -+ "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz", -+ "integrity": "sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw==", -+ "dev": true, -+ "requires": { -+ "cssesc": "^3.0.0", -+ "fastparse": "^1.1.2", -+ "regexpu-core": "^4.6.0" -+ } -+ }, -+ "css-tree": { -+ "version": "1.0.0-alpha.37", -+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", -+ "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", -+ "dev": true, -+ "requires": { -+ "mdn-data": "2.0.4", -+ "source-map": "^0.6.1" -+ } -+ }, -+ "css-what": { -+ "version": "3.2.1", -+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz", -+ "integrity": "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==", -+ "dev": true -+ }, -+ "cssesc": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", -+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", -+ "dev": true -+ }, -+ "cssnano": { -+ "version": "4.1.10", -+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", -+ "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", -+ "dev": true, -+ "requires": { -+ "cosmiconfig": "^5.0.0", -+ "cssnano-preset-default": "^4.0.7", -+ "is-resolvable": "^1.0.0", -+ "postcss": "^7.0.0" -+ } -+ }, -+ "cssnano-preset-default": { -+ "version": "4.0.7", -+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", -+ "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", -+ "dev": true, -+ "requires": { -+ "css-declaration-sorter": "^4.0.1", -+ "cssnano-util-raw-cache": "^4.0.1", -+ "postcss": "^7.0.0", -+ "postcss-calc": "^7.0.1", -+ "postcss-colormin": "^4.0.3", -+ "postcss-convert-values": "^4.0.1", -+ "postcss-discard-comments": "^4.0.2", -+ "postcss-discard-duplicates": "^4.0.2", -+ "postcss-discard-empty": "^4.0.1", -+ "postcss-discard-overridden": "^4.0.1", -+ "postcss-merge-longhand": "^4.0.11", -+ "postcss-merge-rules": "^4.0.3", -+ "postcss-minify-font-values": "^4.0.2", -+ "postcss-minify-gradients": "^4.0.2", -+ "postcss-minify-params": "^4.0.2", -+ "postcss-minify-selectors": "^4.0.2", -+ "postcss-normalize-charset": "^4.0.1", -+ "postcss-normalize-display-values": "^4.0.2", -+ "postcss-normalize-positions": "^4.0.2", -+ "postcss-normalize-repeat-style": "^4.0.2", -+ "postcss-normalize-string": "^4.0.2", -+ "postcss-normalize-timing-functions": "^4.0.2", -+ "postcss-normalize-unicode": "^4.0.1", -+ "postcss-normalize-url": "^4.0.1", -+ "postcss-normalize-whitespace": "^4.0.2", -+ "postcss-ordered-values": "^4.1.2", -+ "postcss-reduce-initial": "^4.0.3", -+ "postcss-reduce-transforms": "^4.0.2", -+ "postcss-svgo": "^4.0.2", -+ "postcss-unique-selectors": "^4.0.1" -+ } -+ }, -+ "cssnano-util-get-arguments": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", -+ "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", -+ "dev": true -+ }, -+ "cssnano-util-get-match": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", -+ "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", -+ "dev": true -+ }, -+ "cssnano-util-raw-cache": { -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", -+ "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", -+ "dev": true, -+ "requires": { -+ "postcss": "^7.0.0" -+ } -+ }, -+ "cssnano-util-same-parent": { -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", -+ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", -+ "dev": true -+ }, -+ "csso": { -+ "version": "4.0.3", -+ "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", -+ "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", -+ "dev": true, -+ "requires": { -+ "css-tree": "1.0.0-alpha.39" -+ }, -+ "dependencies": { -+ "css-tree": { -+ "version": "1.0.0-alpha.39", -+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", -+ "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", -+ "dev": true, -+ "requires": { -+ "mdn-data": "2.0.6", -+ "source-map": "^0.6.1" -+ } -+ }, -+ "mdn-data": { -+ "version": "2.0.6", -+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", -+ "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", -+ "dev": true -+ } -+ } -+ }, -+ "cssom": { -+ "version": "0.3.8", -+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", -+ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", -+ "dev": true -+ }, -+ "cssstyle": { -+ "version": "1.4.0", -+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", -+ "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", -+ "dev": true, -+ "requires": { -+ "cssom": "0.3.x" -+ } -+ }, -+ "dashdash": { -+ "version": "1.14.1", -+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", -+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", -+ "requires": { -+ "assert-plus": "^1.0.0" -+ } -+ }, -+ "data-urls": { -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", -+ "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", -+ "dev": true, -+ "requires": { -+ "abab": "^2.0.0", -+ "whatwg-mimetype": "^2.2.0", -+ "whatwg-url": "^7.0.0" -+ } -+ }, -+ "deasync": { -+ "version": "0.1.19", -+ "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.19.tgz", -+ "integrity": "sha512-oh3MRktfnPlLysCPpBpKZZzb4cUC/p0aA3SyRGp15lN30juJBTo/CiD0d4fR+f1kBtUQoJj1NE9RPNWQ7BQ9Mg==", -+ "dev": true, -+ "requires": { -+ "bindings": "^1.5.0", -+ "node-addon-api": "^1.7.1" -+ } -+ }, -+ "debug": { -+ "version": "4.1.1", -+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", -+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", -+ "dev": true, -+ "requires": { -+ "ms": "^2.1.1" -+ } -+ }, -+ "decamelize": { -+ "version": "1.2.0", -+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", -+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", -+ "dev": true -+ }, -+ "decode-uri-component": { -+ "version": "0.2.0", -+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", -+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", -+ "dev": true -+ }, -+ "deep-is": { -+ "version": "0.1.3", -+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", -+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", -+ "dev": true -+ }, -+ "defaults": { -+ "version": "1.0.3", -+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", -+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", -+ "dev": true, -+ "requires": { -+ "clone": "^1.0.2" -+ }, -+ "dependencies": { -+ "clone": { -+ "version": "1.0.4", -+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", -+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", -+ "dev": true -+ } -+ } -+ }, -+ "define-properties": { -+ "version": "1.1.3", -+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", -+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", -+ "dev": true, -+ "requires": { -+ "object-keys": "^1.0.12" -+ } -+ }, -+ "define-property": { -+ "version": "2.0.2", -+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", -+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", -+ "dev": true, -+ "requires": { -+ "is-descriptor": "^1.0.2", -+ "isobject": "^3.0.1" -+ }, -+ "dependencies": { -+ "is-accessor-descriptor": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", -+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", -+ "dev": true, -+ "requires": { -+ "kind-of": "^6.0.0" -+ } -+ }, -+ "is-data-descriptor": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", -+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", -+ "dev": true, -+ "requires": { -+ "kind-of": "^6.0.0" -+ } -+ }, -+ "is-descriptor": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", -+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", -+ "dev": true, -+ "requires": { -+ "is-accessor-descriptor": "^1.0.0", -+ "is-data-descriptor": "^1.0.0", -+ "kind-of": "^6.0.2" -+ } -+ } -+ } -+ }, -+ "delayed-stream": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", -+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" -+ }, -+ "depd": { -+ "version": "1.1.2", -+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", -+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", -+ "dev": true -+ }, -+ "des.js": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", -+ "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", -+ "dev": true, -+ "requires": { -+ "inherits": "^2.0.1", -+ "minimalistic-assert": "^1.0.0" -+ } -+ }, -+ "destroy": { -+ "version": "1.0.4", -+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", -+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", -+ "dev": true -+ }, -+ "diffie-hellman": { -+ "version": "5.0.3", -+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", -+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", -+ "dev": true, -+ "requires": { -+ "bn.js": "^4.1.0", -+ "miller-rabin": "^4.0.0", -+ "randombytes": "^2.0.0" -+ } -+ }, -+ "dom-serializer": { -+ "version": "0.2.2", -+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", -+ "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", -+ "dev": true, -+ "requires": { -+ "domelementtype": "^2.0.1", -+ "entities": "^2.0.0" -+ }, -+ "dependencies": { -+ "domelementtype": { -+ "version": "2.0.1", -+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", -+ "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", -+ "dev": true -+ } -+ } -+ }, -+ "domain-browser": { -+ "version": "1.2.0", -+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", -+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", -+ "dev": true -+ }, -+ "domelementtype": { -+ "version": "1.3.1", -+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", -+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", -+ "dev": true -+ }, -+ "domexception": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", -+ "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", -+ "dev": true, -+ "requires": { -+ "webidl-conversions": "^4.0.2" -+ } -+ }, -+ "domhandler": { -+ "version": "2.4.2", -+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", -+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", -+ "dev": true, -+ "requires": { -+ "domelementtype": "1" -+ } -+ }, -+ "domutils": { -+ "version": "1.7.0", -+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", -+ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", -+ "dev": true, -+ "requires": { -+ "dom-serializer": "0", -+ "domelementtype": "1" -+ } -+ }, -+ "dot-prop": { -+ "version": "5.2.0", -+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", -+ "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", -+ "dev": true, -+ "requires": { -+ "is-obj": "^2.0.0" -+ } -+ }, -+ "dotenv": { -+ "version": "5.0.1", -+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", -+ "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==", -+ "dev": true -+ }, -+ "dotenv-expand": { -+ "version": "4.2.0", -+ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz", -+ "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=", -+ "dev": true -+ }, -+ "duplexer2": { -+ "version": "0.1.4", -+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", -+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", -+ "dev": true, -+ "requires": { -+ "readable-stream": "^2.0.2" -+ } -+ }, -+ "ecc-jsbn": { -+ "version": "0.1.2", -+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", -+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", -+ "requires": { -+ "jsbn": "~0.1.0", -+ "safer-buffer": "^2.1.0" -+ } -+ }, -+ "editorconfig": { -+ "version": "0.15.3", -+ "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", -+ "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", -+ "dev": true, -+ "requires": { -+ "commander": "^2.19.0", -+ "lru-cache": "^4.1.5", -+ "semver": "^5.6.0", -+ "sigmund": "^1.0.1" -+ } -+ }, -+ "ee-first": { -+ "version": "1.1.1", -+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", -+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", -+ "dev": true -+ }, -+ "electron-to-chromium": { -+ "version": "1.3.418", -+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.418.tgz", -+ "integrity": "sha512-i2QrQtHes5fK/F9QGG5XacM5WKEuR322fxTYF9e8O9Gu0mc0WmjjwGpV8c7Htso6Zf2Di18lc3SIPxmMeRFBug==", -+ "dev": true -+ }, -+ "elliptic": { -+ "version": "6.5.2", -+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", -+ "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", -+ "dev": true, -+ "requires": { -+ "bn.js": "^4.4.0", -+ "brorand": "^1.0.1", -+ "hash.js": "^1.0.0", -+ "hmac-drbg": "^1.0.0", -+ "inherits": "^2.0.1", -+ "minimalistic-assert": "^1.0.0", -+ "minimalistic-crypto-utils": "^1.0.0" -+ } -+ }, -+ "elm-hot": { -+ "version": "1.1.1", -+ "resolved": "https://registry.npmjs.org/elm-hot/-/elm-hot-1.1.1.tgz", -+ "integrity": "sha512-ZHjoHd2Ev6riNXNQirj3J+GKKXXwedAUikfFBYzlVL/+3CdGs96cpZ7nhAk4c5l//Qa9ymltrqX36mOlr0pPFA==", -+ "dev": true -+ }, -+ "emoji-regex": { -+ "version": "7.0.3", -+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", -+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", -+ "dev": true -+ }, -+ "encodeurl": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", -+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", -+ "dev": true -+ }, -+ "entities": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", -+ "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", -+ "dev": true -+ }, -+ "error-ex": { -+ "version": "1.3.2", -+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", -+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", -+ "dev": true, -+ "requires": { -+ "is-arrayish": "^0.2.1" -+ } -+ }, -+ "es-abstract": { -+ "version": "1.17.5", -+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", -+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", -+ "dev": true, -+ "requires": { -+ "es-to-primitive": "^1.2.1", -+ "function-bind": "^1.1.1", -+ "has": "^1.0.3", -+ "has-symbols": "^1.0.1", -+ "is-callable": "^1.1.5", -+ "is-regex": "^1.0.5", -+ "object-inspect": "^1.7.0", -+ "object-keys": "^1.1.1", -+ "object.assign": "^4.1.0", -+ "string.prototype.trimleft": "^2.1.1", -+ "string.prototype.trimright": "^2.1.1" -+ } -+ }, -+ "es-to-primitive": { -+ "version": "1.2.1", -+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", -+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", -+ "dev": true, -+ "requires": { -+ "is-callable": "^1.1.4", -+ "is-date-object": "^1.0.1", -+ "is-symbol": "^1.0.2" -+ } -+ }, -+ "escape-html": { -+ "version": "1.0.3", -+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", -+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", -+ "dev": true -+ }, -+ "escape-string-regexp": { -+ "version": "1.0.5", -+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", -+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", -+ "dev": true -+ }, -+ "escodegen": { -+ "version": "1.9.1", -+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", -+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", -+ "dev": true, -+ "requires": { -+ "esprima": "^3.1.3", -+ "estraverse": "^4.2.0", -+ "esutils": "^2.0.2", -+ "optionator": "^0.8.1", -+ "source-map": "~0.6.1" -+ }, -+ "dependencies": { -+ "esprima": { -+ "version": "3.1.3", -+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", -+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", -+ "dev": true -+ } -+ } -+ }, -+ "esprima": { -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", -+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", -+ "dev": true -+ }, -+ "estraverse": { -+ "version": "4.3.0", -+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", -+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", -+ "dev": true -+ }, -+ "esutils": { -+ "version": "2.0.3", -+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", -+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", -+ "dev": true -+ }, -+ "etag": { -+ "version": "1.8.1", -+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", -+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", -+ "dev": true -+ }, -+ "events": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", -+ "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==", -+ "dev": true -+ }, -+ "evp_bytestokey": { -+ "version": "1.0.3", -+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", -+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", -+ "dev": true, -+ "requires": { -+ "md5.js": "^1.3.4", -+ "safe-buffer": "^5.1.1" -+ } -+ }, -+ "expand-brackets": { -+ "version": "2.1.4", -+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", -+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", -+ "dev": true, -+ "requires": { -+ "debug": "^2.3.3", -+ "define-property": "^0.2.5", -+ "extend-shallow": "^2.0.1", -+ "posix-character-classes": "^0.1.0", -+ "regex-not": "^1.0.0", -+ "snapdragon": "^0.8.1", -+ "to-regex": "^3.0.1" -+ }, -+ "dependencies": { -+ "debug": { -+ "version": "2.6.9", -+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", -+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", -+ "dev": true, -+ "requires": { -+ "ms": "2.0.0" -+ } -+ }, -+ "define-property": { -+ "version": "0.2.5", -+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", -+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", -+ "dev": true, -+ "requires": { -+ "is-descriptor": "^0.1.0" -+ } -+ }, -+ "extend-shallow": { -+ "version": "2.0.1", -+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", -+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", -+ "dev": true, -+ "requires": { -+ "is-extendable": "^0.1.0" -+ } -+ }, -+ "ms": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", -+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", -+ "dev": true -+ } -+ } -+ }, -+ "extend": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", -+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" -+ }, -+ "extend-shallow": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", -+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", -+ "dev": true, -+ "requires": { -+ "assign-symbols": "^1.0.0", -+ "is-extendable": "^1.0.1" -+ }, -+ "dependencies": { -+ "is-extendable": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", -+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", -+ "dev": true, -+ "requires": { -+ "is-plain-object": "^2.0.4" -+ } -+ } -+ } -+ }, -+ "extglob": { -+ "version": "2.0.4", -+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", -+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", -+ "dev": true, -+ "requires": { -+ "array-unique": "^0.3.2", -+ "define-property": "^1.0.0", -+ "expand-brackets": "^2.1.4", -+ "extend-shallow": "^2.0.1", -+ "fragment-cache": "^0.2.1", -+ "regex-not": "^1.0.0", -+ "snapdragon": "^0.8.1", -+ "to-regex": "^3.0.1" -+ }, -+ "dependencies": { -+ "define-property": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", -+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", -+ "dev": true, -+ "requires": { -+ "is-descriptor": "^1.0.0" -+ } -+ }, -+ "extend-shallow": { -+ "version": "2.0.1", -+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", -+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", -+ "dev": true, -+ "requires": { -+ "is-extendable": "^0.1.0" -+ } -+ }, -+ "is-accessor-descriptor": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", -+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", -+ "dev": true, -+ "requires": { -+ "kind-of": "^6.0.0" -+ } -+ }, -+ "is-data-descriptor": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", -+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", -+ "dev": true, -+ "requires": { -+ "kind-of": "^6.0.0" -+ } -+ }, -+ "is-descriptor": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", -+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", -+ "dev": true, -+ "requires": { -+ "is-accessor-descriptor": "^1.0.0", -+ "is-data-descriptor": "^1.0.0", -+ "kind-of": "^6.0.2" -+ } -+ } -+ } -+ }, -+ "extsprintf": { -+ "version": "1.3.0", -+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", -+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" -+ }, -+ "falafel": { -+ "version": "2.2.4", -+ "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.4.tgz", -+ "integrity": "sha512-0HXjo8XASWRmsS0X1EkhwEMZaD3Qvp7FfURwjLKjG1ghfRm/MGZl2r4cWUTv41KdNghTw4OUMmVtdGQp3+H+uQ==", -+ "dev": true, -+ "requires": { -+ "acorn": "^7.1.1", -+ "foreach": "^2.0.5", -+ "isarray": "^2.0.1", -+ "object-keys": "^1.0.6" -+ }, -+ "dependencies": { -+ "isarray": { -+ "version": "2.0.5", -+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", -+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", -+ "dev": true -+ } -+ } -+ }, -+ "fast-deep-equal": { -+ "version": "3.1.1", -+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", -+ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" -+ }, -+ "fast-glob": { -+ "version": "2.2.7", -+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", -+ "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", -+ "dev": true, -+ "requires": { -+ "@mrmlnc/readdir-enhanced": "^2.2.1", -+ "@nodelib/fs.stat": "^1.1.2", -+ "glob-parent": "^3.1.0", -+ "is-glob": "^4.0.0", -+ "merge2": "^1.2.3", -+ "micromatch": "^3.1.10" -+ } -+ }, -+ "fast-json-stable-stringify": { -+ "version": "2.1.0", -+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", -+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" -+ }, -+ "fast-levenshtein": { -+ "version": "2.0.6", -+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", -+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", -+ "dev": true -+ }, -+ "fastparse": { -+ "version": "1.1.2", -+ "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", -+ "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", -+ "dev": true -+ }, -+ "file-uri-to-path": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", -+ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", -+ "dev": true -+ }, -+ "filesize": { -+ "version": "3.6.1", -+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", -+ "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", -+ "dev": true -+ }, -+ "fill-range": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", -+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", -+ "dev": true, -+ "requires": { -+ "extend-shallow": "^2.0.1", -+ "is-number": "^3.0.0", -+ "repeat-string": "^1.6.1", -+ "to-regex-range": "^2.1.0" -+ }, -+ "dependencies": { -+ "extend-shallow": { -+ "version": "2.0.1", -+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", -+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", -+ "dev": true, -+ "requires": { -+ "is-extendable": "^0.1.0" -+ } -+ } -+ } -+ }, -+ "find-elm-dependencies": { -+ "version": "2.0.2", -+ "resolved": "https://registry.npmjs.org/find-elm-dependencies/-/find-elm-dependencies-2.0.2.tgz", -+ "integrity": "sha512-nM5UCbccD1G8CGK2GsM7ykG3ksOAl9E+34jiDfl07CAl2OPnLpBVWY2hlxEmIkSBfdJjSopEowWHrO0cI8RhxQ==", -+ "dev": true, -+ "requires": { -+ "firstline": "1.2.0", -+ "lodash": "4.17.15" -+ } -+ }, -+ "find-up": { -+ "version": "2.1.0", -+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", -+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", -+ "dev": true, -+ "requires": { -+ "locate-path": "^2.0.0" -+ } -+ }, -+ "firstline": { -+ "version": "1.2.0", -+ "resolved": "https://registry.npmjs.org/firstline/-/firstline-1.2.0.tgz", -+ "integrity": "sha1-yfSIbn9/vwr8EtcZQdzgaxkq6gU=", -+ "dev": true -+ }, -+ "for-in": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", -+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", -+ "dev": true -+ }, -+ "foreach": { -+ "version": "2.0.5", -+ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", -+ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", -+ "dev": true -+ }, -+ "forever-agent": { -+ "version": "0.6.1", -+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", -+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" -+ }, -+ "form-data": { -+ "version": "2.3.3", -+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", -+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", -+ "requires": { -+ "asynckit": "^0.4.0", -+ "combined-stream": "^1.0.6", -+ "mime-types": "^2.1.12" -+ } -+ }, -+ "fragment-cache": { -+ "version": "0.2.1", -+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", -+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", -+ "dev": true, -+ "requires": { -+ "map-cache": "^0.2.2" -+ } -+ }, -+ "fresh": { -+ "version": "0.5.2", -+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", -+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", -+ "dev": true -+ }, -+ "fs.realpath": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", -+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", -+ "dev": true -+ }, -+ "function-bind": { -+ "version": "1.1.1", -+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", -+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", -+ "dev": true -+ }, -+ "get-caller-file": { -+ "version": "2.0.5", -+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", -+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", -+ "dev": true -+ }, -+ "get-port": { -+ "version": "3.2.0", -+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", -+ "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", -+ "dev": true -+ }, -+ "get-value": { -+ "version": "2.0.6", -+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", -+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", -+ "dev": true -+ }, -+ "getpass": { -+ "version": "0.1.7", -+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", -+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", -+ "requires": { -+ "assert-plus": "^1.0.0" -+ } -+ }, -+ "glob": { -+ "version": "7.1.4", -+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", -+ "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", -+ "dev": true, -+ "requires": { -+ "fs.realpath": "^1.0.0", -+ "inflight": "^1.0.4", -+ "inherits": "2", -+ "minimatch": "^3.0.4", -+ "once": "^1.3.0", -+ "path-is-absolute": "^1.0.0" -+ } -+ }, -+ "glob-parent": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", -+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", -+ "dev": true, -+ "requires": { -+ "is-glob": "^3.1.0", -+ "path-dirname": "^1.0.0" -+ }, -+ "dependencies": { -+ "is-glob": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", -+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", -+ "dev": true, -+ "requires": { -+ "is-extglob": "^2.1.0" -+ } -+ } -+ } -+ }, -+ "glob-to-regexp": { -+ "version": "0.3.0", -+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", -+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", -+ "dev": true -+ }, -+ "globals": { -+ "version": "11.12.0", -+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", -+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", -+ "dev": true -+ }, -+ "graceful-fs": { -+ "version": "4.2.3", -+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", -+ "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", -+ "dev": true -+ }, -+ "grapheme-breaker": { -+ "version": "0.3.2", -+ "resolved": "https://registry.npmjs.org/grapheme-breaker/-/grapheme-breaker-0.3.2.tgz", -+ "integrity": "sha1-W55reMODJFLSuiuxy4MPlidkEKw=", -+ "dev": true, -+ "requires": { -+ "brfs": "^1.2.0", -+ "unicode-trie": "^0.3.1" -+ } -+ }, -+ "har-schema": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", -+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" -+ }, -+ "har-validator": { -+ "version": "5.1.3", -+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", -+ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", -+ "requires": { -+ "ajv": "^6.5.5", -+ "har-schema": "^2.0.0" -+ } -+ }, -+ "has": { -+ "version": "1.0.3", -+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", -+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", -+ "dev": true, -+ "requires": { -+ "function-bind": "^1.1.1" -+ } -+ }, -+ "has-ansi": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", -+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", -+ "dev": true, -+ "requires": { -+ "ansi-regex": "^2.0.0" -+ }, -+ "dependencies": { -+ "ansi-regex": { -+ "version": "2.1.1", -+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", -+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", -+ "dev": true -+ } -+ } -+ }, -+ "has-flag": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", -+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", -+ "dev": true -+ }, -+ "has-symbols": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", -+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", -+ "dev": true -+ }, -+ "has-value": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", -+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", -+ "dev": true, -+ "requires": { -+ "get-value": "^2.0.6", -+ "has-values": "^1.0.0", -+ "isobject": "^3.0.0" -+ } -+ }, -+ "has-values": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", -+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", -+ "dev": true, -+ "requires": { -+ "is-number": "^3.0.0", -+ "kind-of": "^4.0.0" -+ }, -+ "dependencies": { -+ "kind-of": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", -+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", -+ "dev": true, -+ "requires": { -+ "is-buffer": "^1.1.5" -+ } -+ } -+ } -+ }, -+ "hash-base": { -+ "version": "3.0.4", -+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", -+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", -+ "dev": true, -+ "requires": { -+ "inherits": "^2.0.1", -+ "safe-buffer": "^5.0.1" -+ } -+ }, -+ "hash.js": { -+ "version": "1.1.7", -+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", -+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", -+ "dev": true, -+ "requires": { -+ "inherits": "^2.0.3", -+ "minimalistic-assert": "^1.0.1" -+ } -+ }, -+ "hex-color-regex": { -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", -+ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", -+ "dev": true -+ }, -+ "hmac-drbg": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", -+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", -+ "dev": true, -+ "requires": { -+ "hash.js": "^1.0.3", -+ "minimalistic-assert": "^1.0.0", -+ "minimalistic-crypto-utils": "^1.0.1" -+ } -+ }, -+ "hsl-regex": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", -+ "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", -+ "dev": true -+ }, -+ "hsla-regex": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", -+ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", -+ "dev": true -+ }, -+ "html-comment-regex": { -+ "version": "1.1.2", -+ "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", -+ "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", -+ "dev": true -+ }, -+ "html-encoding-sniffer": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", -+ "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", -+ "dev": true, -+ "requires": { -+ "whatwg-encoding": "^1.0.1" -+ } -+ }, -+ "html-tags": { -+ "version": "1.2.0", -+ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-1.2.0.tgz", -+ "integrity": "sha1-x43mW1Zjqll5id0rerSSANfk25g=", -+ "dev": true -+ }, -+ "htmlnano": { -+ "version": "0.2.5", -+ "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-0.2.5.tgz", -+ "integrity": "sha512-X1iPSwXG/iF9bVs+/obt2n6F64uH0ETkA8zp7qFDmLW9/+A6ueHGeb/+qD67T21qUY22owZPMdawljN50ajkqA==", -+ "dev": true, -+ "requires": { -+ "cssnano": "^4.1.10", -+ "normalize-html-whitespace": "^1.0.0", -+ "posthtml": "^0.12.0", -+ "posthtml-render": "^1.1.5", -+ "purgecss": "^1.4.0", -+ "svgo": "^1.3.2", -+ "terser": "^4.3.9", -+ "uncss": "^0.17.2" -+ }, -+ "dependencies": { -+ "posthtml": { -+ "version": "0.12.3", -+ "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.12.3.tgz", -+ "integrity": "sha512-Fbpi95+JJyR0tqU7pUy1zTSQFjAsluuwB9pJ1h0jtnGk7n/O2TBtP5nDl9rV0JVACjQ1Lm5wSp4ppChr8u3MhA==", -+ "dev": true, -+ "requires": { -+ "posthtml-parser": "^0.4.2", -+ "posthtml-render": "^1.2.2" -+ } -+ }, -+ "terser": { -+ "version": "4.6.12", -+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.12.tgz", -+ "integrity": "sha512-fnIwuaKjFPANG6MAixC/k1TDtnl1YlPLUlLVIxxGZUn1gfUx2+l3/zGNB72wya+lgsb50QBi2tUV75RiODwnww==", -+ "dev": true, -+ "requires": { -+ "commander": "^2.20.0", -+ "source-map": "~0.6.1", -+ "source-map-support": "~0.5.12" -+ } -+ } -+ } -+ }, -+ "htmlparser2": { -+ "version": "3.10.1", -+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", -+ "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", -+ "dev": true, -+ "requires": { -+ "domelementtype": "^1.3.1", -+ "domhandler": "^2.3.0", -+ "domutils": "^1.5.1", -+ "entities": "^1.1.1", -+ "inherits": "^2.0.1", -+ "readable-stream": "^3.1.1" -+ }, -+ "dependencies": { -+ "entities": { -+ "version": "1.1.2", -+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", -+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", -+ "dev": true -+ }, -+ "readable-stream": { -+ "version": "3.6.0", -+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", -+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", -+ "dev": true, -+ "requires": { -+ "inherits": "^2.0.3", -+ "string_decoder": "^1.1.1", -+ "util-deprecate": "^1.0.1" -+ } -+ } -+ } -+ }, -+ "http-errors": { -+ "version": "1.7.3", -+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", -+ "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", -+ "dev": true, -+ "requires": { -+ "depd": "~1.1.2", -+ "inherits": "2.0.4", -+ "setprototypeof": "1.1.1", -+ "statuses": ">= 1.5.0 < 2", -+ "toidentifier": "1.0.0" -+ } -+ }, -+ "http-signature": { -+ "version": "1.2.0", -+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", -+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", -+ "requires": { -+ "assert-plus": "^1.0.0", -+ "jsprim": "^1.2.2", -+ "sshpk": "^1.7.0" -+ } -+ }, -+ "https-browserify": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", -+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", -+ "dev": true -+ }, -+ "iconv-lite": { -+ "version": "0.4.24", -+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", -+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", -+ "dev": true, -+ "requires": { -+ "safer-buffer": ">= 2.1.2 < 3" -+ } -+ }, -+ "icss-replace-symbols": { -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", -+ "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", -+ "dev": true -+ }, -+ "ieee754": { -+ "version": "1.1.13", -+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", -+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", -+ "dev": true -+ }, -+ "import-fresh": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", -+ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", -+ "dev": true, -+ "requires": { -+ "caller-path": "^2.0.0", -+ "resolve-from": "^3.0.0" -+ } -+ }, -+ "indexes-of": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", -+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", -+ "dev": true -+ }, -+ "inflight": { -+ "version": "1.0.6", -+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", -+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", -+ "dev": true, -+ "requires": { -+ "once": "^1.3.0", -+ "wrappy": "1" -+ } -+ }, -+ "inherits": { -+ "version": "2.0.4", -+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", -+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", -+ "dev": true -+ }, -+ "ini": { -+ "version": "1.3.5", -+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", -+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", -+ "dev": true -+ }, -+ "invariant": { -+ "version": "2.2.4", -+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", -+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", -+ "dev": true, -+ "requires": { -+ "loose-envify": "^1.0.0" -+ } -+ }, -+ "is-absolute-url": { -+ "version": "2.1.0", -+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", -+ "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", -+ "dev": true -+ }, -+ "is-accessor-descriptor": { -+ "version": "0.1.6", -+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", -+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", -+ "dev": true, -+ "requires": { -+ "kind-of": "^3.0.2" -+ }, -+ "dependencies": { -+ "kind-of": { -+ "version": "3.2.2", -+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", -+ "dev": true, -+ "requires": { -+ "is-buffer": "^1.1.5" -+ } -+ } -+ } -+ }, -+ "is-arrayish": { -+ "version": "0.2.1", -+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", -+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", -+ "dev": true -+ }, -+ "is-binary-path": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", -+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", -+ "dev": true, -+ "requires": { -+ "binary-extensions": "^1.0.0" -+ } -+ }, -+ "is-buffer": { -+ "version": "1.1.6", -+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", -+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", -+ "dev": true -+ }, -+ "is-callable": { -+ "version": "1.1.5", -+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", -+ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", -+ "dev": true -+ }, -+ "is-color-stop": { -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", -+ "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", -+ "dev": true, -+ "requires": { -+ "css-color-names": "^0.0.4", -+ "hex-color-regex": "^1.1.0", -+ "hsl-regex": "^1.0.0", -+ "hsla-regex": "^1.0.0", -+ "rgb-regex": "^1.0.1", -+ "rgba-regex": "^1.0.0" -+ } -+ }, -+ "is-data-descriptor": { -+ "version": "0.1.4", -+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", -+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", -+ "dev": true, -+ "requires": { -+ "kind-of": "^3.0.2" -+ }, -+ "dependencies": { -+ "kind-of": { -+ "version": "3.2.2", -+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", -+ "dev": true, -+ "requires": { -+ "is-buffer": "^1.1.5" -+ } -+ } -+ } -+ }, -+ "is-date-object": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", -+ "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", -+ "dev": true -+ }, -+ "is-descriptor": { -+ "version": "0.1.6", -+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", -+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", -+ "dev": true, -+ "requires": { -+ "is-accessor-descriptor": "^0.1.6", -+ "is-data-descriptor": "^0.1.4", -+ "kind-of": "^5.0.0" -+ }, -+ "dependencies": { -+ "kind-of": { -+ "version": "5.1.0", -+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", -+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", -+ "dev": true -+ } -+ } -+ }, -+ "is-directory": { -+ "version": "0.3.1", -+ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", -+ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", -+ "dev": true -+ }, -+ "is-extendable": { -+ "version": "0.1.1", -+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", -+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", -+ "dev": true -+ }, -+ "is-extglob": { -+ "version": "2.1.1", -+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", -+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", -+ "dev": true -+ }, -+ "is-fullwidth-code-point": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", -+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", -+ "dev": true -+ }, -+ "is-glob": { -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", -+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", -+ "dev": true, -+ "requires": { -+ "is-extglob": "^2.1.1" -+ } -+ }, -+ "is-html": { -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/is-html/-/is-html-1.1.0.tgz", -+ "integrity": "sha1-4E8cGNOUhRETlvmgJz6rUa8hhGQ=", -+ "dev": true, -+ "requires": { -+ "html-tags": "^1.0.0" -+ } -+ }, -+ "is-number": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", -+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", -+ "dev": true, -+ "requires": { -+ "kind-of": "^3.0.2" -+ }, -+ "dependencies": { -+ "kind-of": { -+ "version": "3.2.2", -+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", -+ "dev": true, -+ "requires": { -+ "is-buffer": "^1.1.5" -+ } -+ } -+ } -+ }, -+ "is-obj": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", -+ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", -+ "dev": true -+ }, -+ "is-plain-object": { -+ "version": "2.0.4", -+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", -+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", -+ "dev": true, -+ "requires": { -+ "isobject": "^3.0.1" -+ } -+ }, -+ "is-regex": { -+ "version": "1.0.5", -+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", -+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", -+ "dev": true, -+ "requires": { -+ "has": "^1.0.3" -+ } -+ }, -+ "is-resolvable": { -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", -+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", -+ "dev": true -+ }, -+ "is-svg": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", -+ "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", -+ "dev": true, -+ "requires": { -+ "html-comment-regex": "^1.1.0" -+ } -+ }, -+ "is-symbol": { -+ "version": "1.0.3", -+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", -+ "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", -+ "dev": true, -+ "requires": { -+ "has-symbols": "^1.0.1" -+ } -+ }, -+ "is-typedarray": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", -+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" -+ }, -+ "is-url": { -+ "version": "1.2.4", -+ "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", -+ "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", -+ "dev": true -+ }, -+ "is-windows": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", -+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", -+ "dev": true -+ }, -+ "is-wsl": { -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", -+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", -+ "dev": true -+ }, -+ "isarray": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", -+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", -+ "dev": true -+ }, -+ "isexe": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", -+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", -+ "dev": true -+ }, -+ "isobject": { -+ "version": "3.0.1", -+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", -+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", -+ "dev": true -+ }, -+ "isstream": { -+ "version": "0.1.2", -+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", -+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" -+ }, -+ "js-beautify": { -+ "version": "1.11.0", -+ "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.11.0.tgz", -+ "integrity": "sha512-a26B+Cx7USQGSWnz9YxgJNMmML/QG2nqIaL7VVYPCXbqiKz8PN0waSNvroMtvAK6tY7g/wPdNWGEP+JTNIBr6A==", -+ "dev": true, -+ "requires": { -+ "config-chain": "^1.1.12", -+ "editorconfig": "^0.15.3", -+ "glob": "^7.1.3", -+ "mkdirp": "~1.0.3", -+ "nopt": "^4.0.3" -+ }, -+ "dependencies": { -+ "mkdirp": { -+ "version": "1.0.4", -+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", -+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", -+ "dev": true -+ } -+ } -+ }, -+ "js-levenshtein": { -+ "version": "1.1.6", -+ "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", -+ "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", -+ "dev": true -+ }, -+ "js-tokens": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", -+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", -+ "dev": true -+ }, -+ "js-yaml": { -+ "version": "3.13.1", -+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", -+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", -+ "dev": true, -+ "requires": { -+ "argparse": "^1.0.7", -+ "esprima": "^4.0.0" -+ } -+ }, -+ "jsbn": { -+ "version": "0.1.1", -+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", -+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" -+ }, -+ "jsdom": { -+ "version": "14.1.0", -+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz", -+ "integrity": "sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==", -+ "dev": true, -+ "requires": { -+ "abab": "^2.0.0", -+ "acorn": "^6.0.4", -+ "acorn-globals": "^4.3.0", -+ "array-equal": "^1.0.0", -+ "cssom": "^0.3.4", -+ "cssstyle": "^1.1.1", -+ "data-urls": "^1.1.0", -+ "domexception": "^1.0.1", -+ "escodegen": "^1.11.0", -+ "html-encoding-sniffer": "^1.0.2", -+ "nwsapi": "^2.1.3", -+ "parse5": "5.1.0", -+ "pn": "^1.1.0", -+ "request": "^2.88.0", -+ "request-promise-native": "^1.0.5", -+ "saxes": "^3.1.9", -+ "symbol-tree": "^3.2.2", -+ "tough-cookie": "^2.5.0", -+ "w3c-hr-time": "^1.0.1", -+ "w3c-xmlserializer": "^1.1.2", -+ "webidl-conversions": "^4.0.2", -+ "whatwg-encoding": "^1.0.5", -+ "whatwg-mimetype": "^2.3.0", -+ "whatwg-url": "^7.0.0", -+ "ws": "^6.1.2", -+ "xml-name-validator": "^3.0.0" -+ }, -+ "dependencies": { -+ "acorn": { -+ "version": "6.4.1", -+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", -+ "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", -+ "dev": true -+ }, -+ "escodegen": { -+ "version": "1.14.1", -+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz", -+ "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==", -+ "dev": true, -+ "requires": { -+ "esprima": "^4.0.1", -+ "estraverse": "^4.2.0", -+ "esutils": "^2.0.2", -+ "optionator": "^0.8.1", -+ "source-map": "~0.6.1" -+ } -+ }, -+ "ws": { -+ "version": "6.2.1", -+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", -+ "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", -+ "dev": true, -+ "requires": { -+ "async-limiter": "~1.0.0" -+ } -+ } -+ } -+ }, -+ "jsesc": { -+ "version": "2.5.2", -+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", -+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", -+ "dev": true -+ }, -+ "json-parse-better-errors": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", -+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", -+ "dev": true -+ }, -+ "json-schema": { -+ "version": "0.2.3", -+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", -+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" -+ }, -+ "json-schema-traverse": { -+ "version": "0.4.1", -+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", -+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" -+ }, -+ "json-stringify-safe": { -+ "version": "5.0.1", -+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", -+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" -+ }, -+ "json5": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", -+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", -+ "dev": true, -+ "requires": { -+ "minimist": "^1.2.0" -+ } -+ }, -+ "jsprim": { -+ "version": "1.4.1", -+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", -+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", -+ "requires": { -+ "assert-plus": "1.0.0", -+ "extsprintf": "1.3.0", -+ "json-schema": "0.2.3", -+ "verror": "1.10.0" -+ } -+ }, -+ "kind-of": { -+ "version": "6.0.3", -+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", -+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", -+ "dev": true -+ }, -+ "levn": { -+ "version": "0.3.0", -+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", -+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", -+ "dev": true, -+ "requires": { -+ "prelude-ls": "~1.1.2", -+ "type-check": "~0.3.2" -+ } -+ }, -+ "locate-path": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", -+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", -+ "dev": true, -+ "requires": { -+ "p-locate": "^2.0.0", -+ "path-exists": "^3.0.0" -+ } -+ }, -+ "lodash": { -+ "version": "4.17.15", -+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", -+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", -+ "dev": true -+ }, -+ "lodash.clone": { -+ "version": "4.5.0", -+ "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", -+ "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=", -+ "dev": true -+ }, -+ "lodash.memoize": { -+ "version": "4.1.2", -+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", -+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", -+ "dev": true -+ }, -+ "lodash.sortby": { -+ "version": "4.7.0", -+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", -+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", -+ "dev": true -+ }, -+ "lodash.uniq": { -+ "version": "4.5.0", -+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", -+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", -+ "dev": true -+ }, -+ "log-symbols": { -+ "version": "2.2.0", -+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", -+ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", -+ "dev": true, -+ "requires": { -+ "chalk": "^2.0.1" -+ } -+ }, -+ "loose-envify": { -+ "version": "1.4.0", -+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", -+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", -+ "dev": true, -+ "requires": { -+ "js-tokens": "^3.0.0 || ^4.0.0" -+ } -+ }, -+ "lru-cache": { -+ "version": "4.1.5", -+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", -+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", -+ "dev": true, -+ "requires": { -+ "pseudomap": "^1.0.2", -+ "yallist": "^2.1.2" -+ } -+ }, -+ "magic-string": { -+ "version": "0.22.5", -+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", -+ "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", -+ "dev": true, -+ "requires": { -+ "vlq": "^0.2.2" -+ } -+ }, -+ "map-cache": { -+ "version": "0.2.2", -+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", -+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", -+ "dev": true -+ }, -+ "map-visit": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", -+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", -+ "dev": true, -+ "requires": { -+ "object-visit": "^1.0.0" -+ } -+ }, -+ "md5.js": { -+ "version": "1.3.5", -+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", -+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", -+ "dev": true, -+ "requires": { -+ "hash-base": "^3.0.0", -+ "inherits": "^2.0.1", -+ "safe-buffer": "^5.1.2" -+ } -+ }, -+ "mdn-data": { -+ "version": "2.0.4", -+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", -+ "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", -+ "dev": true -+ }, -+ "merge-source-map": { -+ "version": "1.0.4", -+ "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", -+ "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=", -+ "dev": true, -+ "requires": { -+ "source-map": "^0.5.6" -+ }, -+ "dependencies": { -+ "source-map": { -+ "version": "0.5.7", -+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", -+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", -+ "dev": true -+ } -+ } -+ }, -+ "merge2": { -+ "version": "1.3.0", -+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", -+ "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", -+ "dev": true -+ }, -+ "micromatch": { -+ "version": "3.1.10", -+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", -+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", -+ "dev": true, -+ "requires": { -+ "arr-diff": "^4.0.0", -+ "array-unique": "^0.3.2", -+ "braces": "^2.3.1", -+ "define-property": "^2.0.2", -+ "extend-shallow": "^3.0.2", -+ "extglob": "^2.0.4", -+ "fragment-cache": "^0.2.1", -+ "kind-of": "^6.0.2", -+ "nanomatch": "^1.2.9", -+ "object.pick": "^1.3.0", -+ "regex-not": "^1.0.0", -+ "snapdragon": "^0.8.1", -+ "to-regex": "^3.0.2" -+ } -+ }, -+ "miller-rabin": { -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", -+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", -+ "dev": true, -+ "requires": { -+ "bn.js": "^4.0.0", -+ "brorand": "^1.0.1" -+ } -+ }, -+ "mime": { -+ "version": "1.6.0", -+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", -+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", -+ "dev": true -+ }, -+ "mime-db": { -+ "version": "1.44.0", -+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", -+ "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" -+ }, -+ "mime-types": { -+ "version": "2.1.27", -+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", -+ "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", -+ "requires": { -+ "mime-db": "1.44.0" -+ } -+ }, -+ "mimic-fn": { -+ "version": "1.2.0", -+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", -+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", -+ "dev": true -+ }, -+ "minimalistic-assert": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", -+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", -+ "dev": true -+ }, -+ "minimalistic-crypto-utils": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", -+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", -+ "dev": true -+ }, -+ "minimatch": { -+ "version": "3.0.4", -+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", -+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", -+ "dev": true, -+ "requires": { -+ "brace-expansion": "^1.1.7" -+ } -+ }, -+ "minimist": { -+ "version": "1.2.5", -+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", -+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", -+ "dev": true -+ }, -+ "mixin-deep": { -+ "version": "1.3.2", -+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", -+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", -+ "dev": true, -+ "requires": { -+ "for-in": "^1.0.2", -+ "is-extendable": "^1.0.1" -+ }, -+ "dependencies": { -+ "is-extendable": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", -+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", -+ "dev": true, -+ "requires": { -+ "is-plain-object": "^2.0.4" -+ } -+ } -+ } -+ }, -+ "mkdirp": { -+ "version": "0.5.5", -+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", -+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", -+ "dev": true, -+ "requires": { -+ "minimist": "^1.2.5" -+ } -+ }, -+ "ms": { -+ "version": "2.1.2", -+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", -+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", -+ "dev": true -+ }, -+ "nan": { -+ "version": "2.14.1", -+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", -+ "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", -+ "dev": true, -+ "optional": true -+ }, -+ "nanomatch": { -+ "version": "1.2.13", -+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", -+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", -+ "dev": true, -+ "requires": { -+ "arr-diff": "^4.0.0", -+ "array-unique": "^0.3.2", -+ "define-property": "^2.0.2", -+ "extend-shallow": "^3.0.2", -+ "fragment-cache": "^0.2.1", -+ "is-windows": "^1.0.2", -+ "kind-of": "^6.0.2", -+ "object.pick": "^1.3.0", -+ "regex-not": "^1.0.0", -+ "snapdragon": "^0.8.1", -+ "to-regex": "^3.0.1" -+ } -+ }, -+ "nice-try": { -+ "version": "1.0.5", -+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", -+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", -+ "dev": true -+ }, -+ "node-addon-api": { -+ "version": "1.7.1", -+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.1.tgz", -+ "integrity": "sha512-2+DuKodWvwRTrCfKOeR24KIc5unKjOh8mz17NCzVnHWfjAdDqbfbjqh7gUT+BkXBRQM52+xCHciKWonJ3CbJMQ==", -+ "dev": true -+ }, -+ "node-elm-compiler": { -+ "version": "5.0.4", -+ "resolved": "https://registry.npmjs.org/node-elm-compiler/-/node-elm-compiler-5.0.4.tgz", -+ "integrity": "sha512-VQsT8QSierYGkHzRed+b4MnccQVF1+qPHunE8jBoU7jD6YpuRqCDPzEoC2zfyEJS80qVnlMZrqobLnyjzX9lJg==", -+ "dev": true, -+ "requires": { -+ "cross-spawn": "6.0.5", -+ "find-elm-dependencies": "2.0.2", -+ "lodash": "4.17.15", -+ "temp": "^0.9.0" -+ } -+ }, -+ "node-forge": { -+ "version": "0.7.6", -+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz", -+ "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==", -+ "dev": true -+ }, -+ "node-libs-browser": { -+ "version": "2.2.1", -+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", -+ "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", -+ "dev": true, -+ "requires": { -+ "assert": "^1.1.1", -+ "browserify-zlib": "^0.2.0", -+ "buffer": "^4.3.0", -+ "console-browserify": "^1.1.0", -+ "constants-browserify": "^1.0.0", -+ "crypto-browserify": "^3.11.0", -+ "domain-browser": "^1.1.1", -+ "events": "^3.0.0", -+ "https-browserify": "^1.0.0", -+ "os-browserify": "^0.3.0", -+ "path-browserify": "0.0.1", -+ "process": "^0.11.10", -+ "punycode": "^1.2.4", -+ "querystring-es3": "^0.2.0", -+ "readable-stream": "^2.3.3", -+ "stream-browserify": "^2.0.1", -+ "stream-http": "^2.7.2", -+ "string_decoder": "^1.0.0", -+ "timers-browserify": "^2.0.4", -+ "tty-browserify": "0.0.0", -+ "url": "^0.11.0", -+ "util": "^0.11.0", -+ "vm-browserify": "^1.0.1" -+ }, -+ "dependencies": { -+ "punycode": { -+ "version": "1.4.1", -+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", -+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", -+ "dev": true -+ } -+ } -+ }, -+ "node-releases": { -+ "version": "1.1.53", -+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz", -+ "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==", -+ "dev": true -+ }, -+ "nopt": { -+ "version": "4.0.3", -+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", -+ "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", -+ "dev": true, -+ "requires": { -+ "abbrev": "1", -+ "osenv": "^0.1.4" -+ } -+ }, -+ "normalize-html-whitespace": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/normalize-html-whitespace/-/normalize-html-whitespace-1.0.0.tgz", -+ "integrity": "sha512-9ui7CGtOOlehQu0t/OhhlmDyc71mKVlv+4vF+me4iZLPrNtRL2xoquEdfZxasC/bdQi/Hr3iTrpyRKIG+ocabA==", -+ "dev": true -+ }, -+ "normalize-path": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", -+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", -+ "dev": true -+ }, -+ "normalize-url": { -+ "version": "3.3.0", -+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", -+ "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", -+ "dev": true -+ }, -+ "nth-check": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", -+ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", -+ "dev": true, -+ "requires": { -+ "boolbase": "~1.0.0" -+ } -+ }, -+ "nwsapi": { -+ "version": "2.2.0", -+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", -+ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", -+ "dev": true -+ }, -+ "oauth-sign": { -+ "version": "0.9.0", -+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", -+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" -+ }, -+ "object-assign": { -+ "version": "4.1.1", -+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", -+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", -+ "dev": true -+ }, -+ "object-copy": { -+ "version": "0.1.0", -+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", -+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", -+ "dev": true, -+ "requires": { -+ "copy-descriptor": "^0.1.0", -+ "define-property": "^0.2.5", -+ "kind-of": "^3.0.3" -+ }, -+ "dependencies": { -+ "define-property": { -+ "version": "0.2.5", -+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", -+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", -+ "dev": true, -+ "requires": { -+ "is-descriptor": "^0.1.0" -+ } -+ }, -+ "kind-of": { -+ "version": "3.2.2", -+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", -+ "dev": true, -+ "requires": { -+ "is-buffer": "^1.1.5" -+ } -+ } -+ } -+ }, -+ "object-inspect": { -+ "version": "1.7.0", -+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", -+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", -+ "dev": true -+ }, -+ "object-keys": { -+ "version": "1.1.1", -+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", -+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", -+ "dev": true -+ }, -+ "object-visit": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", -+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", -+ "dev": true, -+ "requires": { -+ "isobject": "^3.0.0" -+ } -+ }, -+ "object.assign": { -+ "version": "4.1.0", -+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", -+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", -+ "dev": true, -+ "requires": { -+ "define-properties": "^1.1.2", -+ "function-bind": "^1.1.1", -+ "has-symbols": "^1.0.0", -+ "object-keys": "^1.0.11" -+ } -+ }, -+ "object.getownpropertydescriptors": { -+ "version": "2.1.0", -+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", -+ "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", -+ "dev": true, -+ "requires": { -+ "define-properties": "^1.1.3", -+ "es-abstract": "^1.17.0-next.1" -+ } -+ }, -+ "object.pick": { -+ "version": "1.3.0", -+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", -+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", -+ "dev": true, -+ "requires": { -+ "isobject": "^3.0.1" -+ } -+ }, -+ "object.values": { -+ "version": "1.1.1", -+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", -+ "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", -+ "dev": true, -+ "requires": { -+ "define-properties": "^1.1.3", -+ "es-abstract": "^1.17.0-next.1", -+ "function-bind": "^1.1.1", -+ "has": "^1.0.3" -+ } -+ }, -+ "on-finished": { -+ "version": "2.3.0", -+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", -+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", -+ "dev": true, -+ "requires": { -+ "ee-first": "1.1.1" -+ } -+ }, -+ "once": { -+ "version": "1.4.0", -+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", -+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", -+ "dev": true, -+ "requires": { -+ "wrappy": "1" -+ } -+ }, -+ "onetime": { -+ "version": "2.0.1", -+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", -+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", -+ "dev": true, -+ "requires": { -+ "mimic-fn": "^1.0.0" -+ } -+ }, -+ "opn": { -+ "version": "5.5.0", -+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", -+ "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", -+ "dev": true, -+ "requires": { -+ "is-wsl": "^1.1.0" -+ } -+ }, -+ "optionator": { -+ "version": "0.8.3", -+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", -+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", -+ "dev": true, -+ "requires": { -+ "deep-is": "~0.1.3", -+ "fast-levenshtein": "~2.0.6", -+ "levn": "~0.3.0", -+ "prelude-ls": "~1.1.2", -+ "type-check": "~0.3.2", -+ "word-wrap": "~1.2.3" -+ } -+ }, -+ "ora": { -+ "version": "2.1.0", -+ "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz", -+ "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==", -+ "dev": true, -+ "requires": { -+ "chalk": "^2.3.1", -+ "cli-cursor": "^2.1.0", -+ "cli-spinners": "^1.1.0", -+ "log-symbols": "^2.2.0", -+ "strip-ansi": "^4.0.0", -+ "wcwidth": "^1.0.1" -+ } -+ }, -+ "os-browserify": { -+ "version": "0.3.0", -+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", -+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", -+ "dev": true -+ }, -+ "os-homedir": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", -+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", -+ "dev": true -+ }, -+ "os-tmpdir": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", -+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", -+ "dev": true -+ }, -+ "osenv": { -+ "version": "0.1.5", -+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", -+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", -+ "dev": true, -+ "requires": { -+ "os-homedir": "^1.0.0", -+ "os-tmpdir": "^1.0.0" -+ } -+ }, -+ "p-limit": { -+ "version": "1.3.0", -+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", -+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", -+ "dev": true, -+ "requires": { -+ "p-try": "^1.0.0" -+ } -+ }, -+ "p-locate": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", -+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", -+ "dev": true, -+ "requires": { -+ "p-limit": "^1.1.0" -+ } -+ }, -+ "p-try": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", -+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", -+ "dev": true -+ }, -+ "pako": { -+ "version": "0.2.9", -+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", -+ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", -+ "dev": true -+ }, -+ "parcel-bundler": { -+ "version": "1.12.3", -+ "resolved": "https://registry.npmjs.org/parcel-bundler/-/parcel-bundler-1.12.3.tgz", -+ "integrity": "sha512-8bq6lj0hhQeGxD9f9xEkFMXQ3d8TIlf2+isKxoi9bciB0KVEILRGllaPkUgp++5t0anToBh9+tG6ZyInXOC1/A==", -+ "dev": true, -+ "requires": { -+ "@babel/code-frame": "^7.0.0 <7.4.0", -+ "@babel/core": "^7.0.0 <7.4.0", -+ "@babel/generator": "^7.0.0 <7.4.0", -+ "@babel/parser": "^7.0.0 <7.4.0", -+ "@babel/plugin-transform-flow-strip-types": "^7.0.0 <7.4.0", -+ "@babel/plugin-transform-modules-commonjs": "^7.0.0 <7.4.0", -+ "@babel/plugin-transform-react-jsx": "^7.0.0 <7.4.0", -+ "@babel/preset-env": "^7.0.0 <7.4.0", -+ "@babel/runtime": "^7.0.0 <7.4.0", -+ "@babel/template": "^7.0.0 <7.4.0", -+ "@babel/traverse": "^7.0.0 <7.4.0", -+ "@babel/types": "^7.0.0 <7.4.0", -+ "@iarna/toml": "^2.2.0", -+ "@parcel/fs": "^1.11.0", -+ "@parcel/logger": "^1.11.0", -+ "@parcel/utils": "^1.11.0", -+ "@parcel/watcher": "^1.12.0", -+ "@parcel/workers": "^1.11.0", -+ "ansi-to-html": "^0.6.4", -+ "babylon-walk": "^1.0.2", -+ "browserslist": "^4.1.0", -+ "chalk": "^2.1.0", -+ "clone": "^2.1.1", -+ "command-exists": "^1.2.6", -+ "commander": "^2.11.0", -+ "cross-spawn": "^6.0.4", -+ "css-modules-loader-core": "^1.1.0", -+ "cssnano": "^4.0.0", -+ "deasync": "^0.1.14", -+ "dotenv": "^5.0.0", -+ "dotenv-expand": "^4.2.0", -+ "fast-glob": "^2.2.2", -+ "filesize": "^3.6.0", -+ "get-port": "^3.2.0", -+ "htmlnano": "^0.2.2", -+ "is-glob": "^4.0.0", -+ "is-url": "^1.2.2", -+ "js-yaml": "^3.10.0", -+ "json5": "^1.0.1", -+ "micromatch": "^3.0.4", -+ "mkdirp": "^0.5.1", -+ "node-forge": "^0.7.1", -+ "node-libs-browser": "^2.0.0", -+ "opn": "^5.1.0", -+ "postcss": "^7.0.11", -+ "postcss-value-parser": "^3.3.1", -+ "posthtml": "^0.11.2", -+ "posthtml-parser": "^0.4.0", -+ "posthtml-render": "^1.1.3", -+ "resolve": "^1.4.0", -+ "semver": "^5.4.1", -+ "serialize-to-js": "^1.1.1", -+ "serve-static": "^1.12.4", -+ "source-map": "0.6.1", -+ "terser": "^3.7.3", -+ "v8-compile-cache": "^2.0.0", -+ "ws": "^5.1.1" -+ }, -+ "dependencies": { -+ "postcss-value-parser": { -+ "version": "3.3.1", -+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", -+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", -+ "dev": true -+ } -+ } -+ }, -+ "parse-asn1": { -+ "version": "5.1.5", -+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", -+ "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", -+ "dev": true, -+ "requires": { -+ "asn1.js": "^4.0.0", -+ "browserify-aes": "^1.0.0", -+ "create-hash": "^1.1.0", -+ "evp_bytestokey": "^1.0.0", -+ "pbkdf2": "^3.0.3", -+ "safe-buffer": "^5.1.1" -+ } -+ }, -+ "parse-json": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", -+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", -+ "dev": true, -+ "requires": { -+ "error-ex": "^1.3.1", -+ "json-parse-better-errors": "^1.0.1" -+ } -+ }, -+ "parse5": { -+ "version": "5.1.0", -+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", -+ "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", -+ "dev": true -+ }, -+ "parseurl": { -+ "version": "1.3.3", -+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", -+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", -+ "dev": true -+ }, -+ "pascalcase": { -+ "version": "0.1.1", -+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", -+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", -+ "dev": true -+ }, -+ "path-browserify": { -+ "version": "0.0.1", -+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", -+ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", -+ "dev": true -+ }, -+ "path-dirname": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", -+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", -+ "dev": true -+ }, -+ "path-exists": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", -+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", -+ "dev": true -+ }, -+ "path-is-absolute": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", -+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", -+ "dev": true -+ }, -+ "path-key": { -+ "version": "2.0.1", -+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", -+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", -+ "dev": true -+ }, -+ "path-parse": { -+ "version": "1.0.6", -+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", -+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", -+ "dev": true -+ }, -+ "pbkdf2": { -+ "version": "3.0.17", -+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", -+ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", -+ "dev": true, -+ "requires": { -+ "create-hash": "^1.1.2", -+ "create-hmac": "^1.1.4", -+ "ripemd160": "^2.0.1", -+ "safe-buffer": "^5.0.1", -+ "sha.js": "^2.4.8" -+ } -+ }, -+ "performance-now": { -+ "version": "2.1.0", -+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", -+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" -+ }, -+ "physical-cpu-count": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz", -+ "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=", -+ "dev": true -+ }, -+ "pkg-up": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", -+ "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", -+ "dev": true, -+ "requires": { -+ "find-up": "^2.1.0" -+ } -+ }, -+ "pn": { -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", -+ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", -+ "dev": true -+ }, -+ "posix-character-classes": { -+ "version": "0.1.1", -+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", -+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", -+ "dev": true -+ }, -+ "postcss": { -+ "version": "7.0.27", -+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", -+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", -+ "dev": true, -+ "requires": { -+ "chalk": "^2.4.2", -+ "source-map": "^0.6.1", -+ "supports-color": "^6.1.0" -+ } -+ }, -+ "postcss-calc": { -+ "version": "7.0.2", -+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz", -+ "integrity": "sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==", -+ "dev": true, -+ "requires": { -+ "postcss": "^7.0.27", -+ "postcss-selector-parser": "^6.0.2", -+ "postcss-value-parser": "^4.0.2" -+ } -+ }, -+ "postcss-colormin": { -+ "version": "4.0.3", -+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", -+ "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", -+ "dev": true, -+ "requires": { -+ "browserslist": "^4.0.0", -+ "color": "^3.0.0", -+ "has": "^1.0.0", -+ "postcss": "^7.0.0", -+ "postcss-value-parser": "^3.0.0" -+ }, -+ "dependencies": { -+ "postcss-value-parser": { -+ "version": "3.3.1", -+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", -+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", -+ "dev": true -+ } -+ } -+ }, -+ "postcss-convert-values": { -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", -+ "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", -+ "dev": true, -+ "requires": { -+ "postcss": "^7.0.0", -+ "postcss-value-parser": "^3.0.0" -+ }, -+ "dependencies": { -+ "postcss-value-parser": { -+ "version": "3.3.1", -+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", -+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", -+ "dev": true -+ } -+ } -+ }, -+ "postcss-discard-comments": { -+ "version": "4.0.2", -+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", -+ "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", -+ "dev": true, -+ "requires": { -+ "postcss": "^7.0.0" -+ } -+ }, -+ "postcss-discard-duplicates": { -+ "version": "4.0.2", -+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", -+ "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", -+ "dev": true, -+ "requires": { -+ "postcss": "^7.0.0" -+ } -+ }, -+ "postcss-discard-empty": { -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", -+ "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", -+ "dev": true, -+ "requires": { -+ "postcss": "^7.0.0" -+ } -+ }, -+ "postcss-discard-overridden": { -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", -+ "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", -+ "dev": true, -+ "requires": { -+ "postcss": "^7.0.0" -+ } -+ }, -+ "postcss-merge-longhand": { -+ "version": "4.0.11", -+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", -+ "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", -+ "dev": true, -+ "requires": { -+ "css-color-names": "0.0.4", -+ "postcss": "^7.0.0", -+ "postcss-value-parser": "^3.0.0", -+ "stylehacks": "^4.0.0" -+ }, -+ "dependencies": { -+ "postcss-value-parser": { -+ "version": "3.3.1", -+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", -+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", -+ "dev": true -+ } -+ } -+ }, -+ "postcss-merge-rules": { -+ "version": "4.0.3", -+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", -+ "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", -+ "dev": true, -+ "requires": { -+ "browserslist": "^4.0.0", -+ "caniuse-api": "^3.0.0", -+ "cssnano-util-same-parent": "^4.0.0", -+ "postcss": "^7.0.0", -+ "postcss-selector-parser": "^3.0.0", -+ "vendors": "^1.0.0" -+ }, -+ "dependencies": { -+ "postcss-selector-parser": { -+ "version": "3.1.2", -+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", -+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", -+ "dev": true, -+ "requires": { -+ "dot-prop": "^5.2.0", -+ "indexes-of": "^1.0.1", -+ "uniq": "^1.0.1" -+ } -+ } -+ } -+ }, -+ "postcss-minify-font-values": { -+ "version": "4.0.2", -+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", -+ "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", -+ "dev": true, -+ "requires": { -+ "postcss": "^7.0.0", -+ "postcss-value-parser": "^3.0.0" -+ }, -+ "dependencies": { -+ "postcss-value-parser": { -+ "version": "3.3.1", -+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", -+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", -+ "dev": true -+ } -+ } -+ }, -+ "postcss-minify-gradients": { -+ "version": "4.0.2", -+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", -+ "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", -+ "dev": true, -+ "requires": { -+ "cssnano-util-get-arguments": "^4.0.0", -+ "is-color-stop": "^1.0.0", -+ "postcss": "^7.0.0", -+ "postcss-value-parser": "^3.0.0" -+ }, -+ "dependencies": { -+ "postcss-value-parser": { -+ "version": "3.3.1", -+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", -+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", -+ "dev": true -+ } -+ } -+ }, -+ "postcss-minify-params": { -+ "version": "4.0.2", -+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", -+ "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", -+ "dev": true, -+ "requires": { -+ "alphanum-sort": "^1.0.0", -+ "browserslist": "^4.0.0", -+ "cssnano-util-get-arguments": "^4.0.0", -+ "postcss": "^7.0.0", -+ "postcss-value-parser": "^3.0.0", -+ "uniqs": "^2.0.0" -+ }, -+ "dependencies": { -+ "postcss-value-parser": { -+ "version": "3.3.1", -+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", -+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", -+ "dev": true -+ } -+ } -+ }, -+ "postcss-minify-selectors": { -+ "version": "4.0.2", -+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", -+ "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", -+ "dev": true, -+ "requires": { -+ "alphanum-sort": "^1.0.0", -+ "has": "^1.0.0", -+ "postcss": "^7.0.0", -+ "postcss-selector-parser": "^3.0.0" -+ }, -+ "dependencies": { -+ "postcss-selector-parser": { -+ "version": "3.1.2", -+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", -+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", -+ "dev": true, -+ "requires": { -+ "dot-prop": "^5.2.0", -+ "indexes-of": "^1.0.1", -+ "uniq": "^1.0.1" -+ } -+ } -+ } -+ }, -+ "postcss-modules-extract-imports": { -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", -+ "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", -+ "dev": true, -+ "requires": { -+ "postcss": "^6.0.1" -+ }, -+ "dependencies": { -+ "postcss": { -+ "version": "6.0.23", -+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", -+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", -+ "dev": true, -+ "requires": { -+ "chalk": "^2.4.1", -+ "source-map": "^0.6.1", -+ "supports-color": "^5.4.0" -+ } -+ }, -+ "supports-color": { -+ "version": "5.5.0", -+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", -+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", -+ "dev": true, -+ "requires": { -+ "has-flag": "^3.0.0" -+ } -+ } -+ } -+ }, -+ "postcss-modules-local-by-default": { -+ "version": "1.2.0", -+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", -+ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", -+ "dev": true, -+ "requires": { -+ "css-selector-tokenizer": "^0.7.0", -+ "postcss": "^6.0.1" -+ }, -+ "dependencies": { -+ "postcss": { -+ "version": "6.0.23", -+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", -+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", -+ "dev": true, -+ "requires": { -+ "chalk": "^2.4.1", -+ "source-map": "^0.6.1", -+ "supports-color": "^5.4.0" -+ } -+ }, -+ "supports-color": { -+ "version": "5.5.0", -+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", -+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", -+ "dev": true, -+ "requires": { -+ "has-flag": "^3.0.0" -+ } -+ } -+ } -+ }, -+ "postcss-modules-scope": { -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", -+ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", -+ "dev": true, -+ "requires": { -+ "css-selector-tokenizer": "^0.7.0", -+ "postcss": "^6.0.1" -+ }, -+ "dependencies": { -+ "postcss": { -+ "version": "6.0.23", -+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", -+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", -+ "dev": true, -+ "requires": { -+ "chalk": "^2.4.1", -+ "source-map": "^0.6.1", -+ "supports-color": "^5.4.0" -+ } -+ }, -+ "supports-color": { -+ "version": "5.5.0", -+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", -+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", -+ "dev": true, -+ "requires": { -+ "has-flag": "^3.0.0" -+ } -+ } -+ } -+ }, -+ "postcss-modules-values": { -+ "version": "1.3.0", -+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", -+ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", -+ "dev": true, -+ "requires": { -+ "icss-replace-symbols": "^1.1.0", -+ "postcss": "^6.0.1" -+ }, -+ "dependencies": { -+ "postcss": { -+ "version": "6.0.23", -+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", -+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", -+ "dev": true, -+ "requires": { -+ "chalk": "^2.4.1", -+ "source-map": "^0.6.1", -+ "supports-color": "^5.4.0" -+ } -+ }, -+ "supports-color": { -+ "version": "5.5.0", -+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", -+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", -+ "dev": true, -+ "requires": { -+ "has-flag": "^3.0.0" -+ } -+ } -+ } -+ }, -+ "postcss-normalize-charset": { -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", -+ "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", -+ "dev": true, -+ "requires": { -+ "postcss": "^7.0.0" -+ } -+ }, -+ "postcss-normalize-display-values": { -+ "version": "4.0.2", -+ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", -+ "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", -+ "dev": true, -+ "requires": { -+ "cssnano-util-get-match": "^4.0.0", -+ "postcss": "^7.0.0", -+ "postcss-value-parser": "^3.0.0" -+ }, -+ "dependencies": { -+ "postcss-value-parser": { -+ "version": "3.3.1", -+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", -+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", -+ "dev": true -+ } -+ } -+ }, -+ "postcss-normalize-positions": { -+ "version": "4.0.2", -+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", -+ "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", -+ "dev": true, -+ "requires": { -+ "cssnano-util-get-arguments": "^4.0.0", -+ "has": "^1.0.0", -+ "postcss": "^7.0.0", -+ "postcss-value-parser": "^3.0.0" -+ }, -+ "dependencies": { -+ "postcss-value-parser": { -+ "version": "3.3.1", -+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", -+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", -+ "dev": true -+ } -+ } -+ }, -+ "postcss-normalize-repeat-style": { -+ "version": "4.0.2", -+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", -+ "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", -+ "dev": true, -+ "requires": { -+ "cssnano-util-get-arguments": "^4.0.0", -+ "cssnano-util-get-match": "^4.0.0", -+ "postcss": "^7.0.0", -+ "postcss-value-parser": "^3.0.0" -+ }, -+ "dependencies": { -+ "postcss-value-parser": { -+ "version": "3.3.1", -+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", -+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", -+ "dev": true -+ } -+ } -+ }, -+ "postcss-normalize-string": { -+ "version": "4.0.2", -+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", -+ "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", -+ "dev": true, -+ "requires": { -+ "has": "^1.0.0", -+ "postcss": "^7.0.0", -+ "postcss-value-parser": "^3.0.0" -+ }, -+ "dependencies": { -+ "postcss-value-parser": { -+ "version": "3.3.1", -+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", -+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", -+ "dev": true -+ } -+ } -+ }, -+ "postcss-normalize-timing-functions": { -+ "version": "4.0.2", -+ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", -+ "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", -+ "dev": true, -+ "requires": { -+ "cssnano-util-get-match": "^4.0.0", -+ "postcss": "^7.0.0", -+ "postcss-value-parser": "^3.0.0" -+ }, -+ "dependencies": { -+ "postcss-value-parser": { -+ "version": "3.3.1", -+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", -+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", -+ "dev": true -+ } -+ } -+ }, -+ "postcss-normalize-unicode": { -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", -+ "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", -+ "dev": true, -+ "requires": { -+ "browserslist": "^4.0.0", -+ "postcss": "^7.0.0", -+ "postcss-value-parser": "^3.0.0" -+ }, -+ "dependencies": { -+ "postcss-value-parser": { -+ "version": "3.3.1", -+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", -+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", -+ "dev": true -+ } -+ } -+ }, -+ "postcss-normalize-url": { -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", -+ "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", -+ "dev": true, -+ "requires": { -+ "is-absolute-url": "^2.0.0", -+ "normalize-url": "^3.0.0", -+ "postcss": "^7.0.0", -+ "postcss-value-parser": "^3.0.0" -+ }, -+ "dependencies": { -+ "postcss-value-parser": { -+ "version": "3.3.1", -+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", -+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", -+ "dev": true -+ } -+ } -+ }, -+ "postcss-normalize-whitespace": { -+ "version": "4.0.2", -+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", -+ "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", -+ "dev": true, -+ "requires": { -+ "postcss": "^7.0.0", -+ "postcss-value-parser": "^3.0.0" -+ }, -+ "dependencies": { -+ "postcss-value-parser": { -+ "version": "3.3.1", -+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", -+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", -+ "dev": true -+ } -+ } -+ }, -+ "postcss-ordered-values": { -+ "version": "4.1.2", -+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", -+ "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", -+ "dev": true, -+ "requires": { -+ "cssnano-util-get-arguments": "^4.0.0", -+ "postcss": "^7.0.0", -+ "postcss-value-parser": "^3.0.0" -+ }, -+ "dependencies": { -+ "postcss-value-parser": { -+ "version": "3.3.1", -+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", -+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", -+ "dev": true -+ } -+ } -+ }, -+ "postcss-reduce-initial": { -+ "version": "4.0.3", -+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", -+ "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", -+ "dev": true, -+ "requires": { -+ "browserslist": "^4.0.0", -+ "caniuse-api": "^3.0.0", -+ "has": "^1.0.0", -+ "postcss": "^7.0.0" -+ } -+ }, -+ "postcss-reduce-transforms": { -+ "version": "4.0.2", -+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", -+ "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", -+ "dev": true, -+ "requires": { -+ "cssnano-util-get-match": "^4.0.0", -+ "has": "^1.0.0", -+ "postcss": "^7.0.0", -+ "postcss-value-parser": "^3.0.0" -+ }, -+ "dependencies": { -+ "postcss-value-parser": { -+ "version": "3.3.1", -+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", -+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", -+ "dev": true -+ } -+ } -+ }, -+ "postcss-selector-parser": { -+ "version": "6.0.2", -+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", -+ "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", -+ "dev": true, -+ "requires": { -+ "cssesc": "^3.0.0", -+ "indexes-of": "^1.0.1", -+ "uniq": "^1.0.1" -+ } -+ }, -+ "postcss-svgo": { -+ "version": "4.0.2", -+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", -+ "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", -+ "dev": true, -+ "requires": { -+ "is-svg": "^3.0.0", -+ "postcss": "^7.0.0", -+ "postcss-value-parser": "^3.0.0", -+ "svgo": "^1.0.0" -+ }, -+ "dependencies": { -+ "postcss-value-parser": { -+ "version": "3.3.1", -+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", -+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", -+ "dev": true -+ } -+ } -+ }, -+ "postcss-unique-selectors": { -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", -+ "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", -+ "dev": true, -+ "requires": { -+ "alphanum-sort": "^1.0.0", -+ "postcss": "^7.0.0", -+ "uniqs": "^2.0.0" -+ } -+ }, -+ "postcss-value-parser": { -+ "version": "4.0.3", -+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz", -+ "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==", -+ "dev": true -+ }, -+ "posthtml": { -+ "version": "0.11.6", -+ "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.11.6.tgz", -+ "integrity": "sha512-C2hrAPzmRdpuL3iH0TDdQ6XCc9M7Dcc3zEW5BLerY65G4tWWszwv6nG/ksi6ul5i2mx22ubdljgktXCtNkydkw==", -+ "dev": true, -+ "requires": { -+ "posthtml-parser": "^0.4.1", -+ "posthtml-render": "^1.1.5" -+ } -+ }, -+ "posthtml-parser": { -+ "version": "0.4.2", -+ "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.4.2.tgz", -+ "integrity": "sha512-BUIorsYJTvS9UhXxPTzupIztOMVNPa/HtAm9KHni9z6qEfiJ1bpOBL5DfUOL9XAc3XkLIEzBzpph+Zbm4AdRAg==", -+ "dev": true, -+ "requires": { -+ "htmlparser2": "^3.9.2" -+ } -+ }, -+ "posthtml-render": { -+ "version": "1.2.2", -+ "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.2.2.tgz", -+ "integrity": "sha512-MbIXTWwAfJ9qET6Zl29UNwJcDJEEz9Zkr5oDhiujitJa7YBJwEpbkX2cmuklCDxubTMoRWpid3q8DrSyGnUUzQ==", -+ "dev": true -+ }, -+ "prelude-ls": { -+ "version": "1.1.2", -+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", -+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", -+ "dev": true -+ }, -+ "private": { -+ "version": "0.1.8", -+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", -+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", -+ "dev": true -+ }, -+ "process": { -+ "version": "0.11.10", -+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", -+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", -+ "dev": true -+ }, -+ "process-nextick-args": { -+ "version": "2.0.1", -+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", -+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", -+ "dev": true -+ }, -+ "proto-list": { -+ "version": "1.2.4", -+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", -+ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", -+ "dev": true -+ }, -+ "pseudomap": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", -+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", -+ "dev": true -+ }, -+ "psl": { -+ "version": "1.8.0", -+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", -+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" -+ }, -+ "public-encrypt": { -+ "version": "4.0.3", -+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", -+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", -+ "dev": true, -+ "requires": { -+ "bn.js": "^4.1.0", -+ "browserify-rsa": "^4.0.0", -+ "create-hash": "^1.1.0", -+ "parse-asn1": "^5.0.0", -+ "randombytes": "^2.0.1", -+ "safe-buffer": "^5.1.2" -+ } -+ }, -+ "punycode": { -+ "version": "2.1.1", -+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", -+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" -+ }, -+ "purgecss": { -+ "version": "1.4.2", -+ "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-1.4.2.tgz", -+ "integrity": "sha512-hkOreFTgiyMHMmC2BxzdIw5DuC6kxAbP/gGOGd3MEsF3+5m69rIvUEPaxrnoUtfODTFKe9hcXjGwC6jcjoyhOw==", -+ "dev": true, -+ "requires": { -+ "glob": "^7.1.3", -+ "postcss": "^7.0.14", -+ "postcss-selector-parser": "^6.0.0", -+ "yargs": "^14.0.0" -+ } -+ }, -+ "q": { -+ "version": "1.5.1", -+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", -+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", -+ "dev": true -+ }, -+ "qs": { -+ "version": "6.5.2", -+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", -+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" -+ }, -+ "querystring": { -+ "version": "0.2.0", -+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", -+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", -+ "dev": true -+ }, -+ "querystring-es3": { -+ "version": "0.2.1", -+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", -+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", -+ "dev": true -+ }, -+ "quote-stream": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", -+ "integrity": "sha1-hJY/jJwmuULhU/7rU6rnRlK34LI=", -+ "dev": true, -+ "requires": { -+ "buffer-equal": "0.0.1", -+ "minimist": "^1.1.3", -+ "through2": "^2.0.0" -+ } -+ }, -+ "randombytes": { -+ "version": "2.1.0", -+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", -+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", -+ "dev": true, -+ "requires": { -+ "safe-buffer": "^5.1.0" -+ } -+ }, -+ "randomfill": { -+ "version": "1.0.4", -+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", -+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", -+ "dev": true, -+ "requires": { -+ "randombytes": "^2.0.5", -+ "safe-buffer": "^5.1.0" -+ } -+ }, -+ "range-parser": { -+ "version": "1.2.1", -+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", -+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", -+ "dev": true -+ }, -+ "readable-stream": { -+ "version": "2.3.7", -+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", -+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", -+ "dev": true, -+ "requires": { -+ "core-util-is": "~1.0.0", -+ "inherits": "~2.0.3", -+ "isarray": "~1.0.0", -+ "process-nextick-args": "~2.0.0", -+ "safe-buffer": "~5.1.1", -+ "string_decoder": "~1.1.1", -+ "util-deprecate": "~1.0.1" -+ } -+ }, -+ "readdirp": { -+ "version": "2.2.1", -+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", -+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", -+ "dev": true, -+ "requires": { -+ "graceful-fs": "^4.1.11", -+ "micromatch": "^3.1.10", -+ "readable-stream": "^2.0.2" -+ } -+ }, -+ "regenerate": { -+ "version": "1.4.0", -+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", -+ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", -+ "dev": true -+ }, -+ "regenerate-unicode-properties": { -+ "version": "8.2.0", -+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", -+ "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", -+ "dev": true, -+ "requires": { -+ "regenerate": "^1.4.0" -+ } -+ }, -+ "regenerator-runtime": { -+ "version": "0.13.5", -+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", -+ "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", -+ "dev": true -+ }, -+ "regenerator-transform": { -+ "version": "0.14.4", -+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", -+ "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", -+ "dev": true, -+ "requires": { -+ "@babel/runtime": "^7.8.4", -+ "private": "^0.1.8" -+ }, -+ "dependencies": { -+ "@babel/runtime": { -+ "version": "7.9.2", -+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", -+ "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", -+ "dev": true, -+ "requires": { -+ "regenerator-runtime": "^0.13.4" -+ } -+ } -+ } -+ }, -+ "regex-not": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", -+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", -+ "dev": true, -+ "requires": { -+ "extend-shallow": "^3.0.2", -+ "safe-regex": "^1.1.0" -+ } -+ }, -+ "regexpu-core": { -+ "version": "4.7.0", -+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", -+ "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", -+ "dev": true, -+ "requires": { -+ "regenerate": "^1.4.0", -+ "regenerate-unicode-properties": "^8.2.0", -+ "regjsgen": "^0.5.1", -+ "regjsparser": "^0.6.4", -+ "unicode-match-property-ecmascript": "^1.0.4", -+ "unicode-match-property-value-ecmascript": "^1.2.0" -+ } -+ }, -+ "regjsgen": { -+ "version": "0.5.1", -+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", -+ "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", -+ "dev": true -+ }, -+ "regjsparser": { -+ "version": "0.6.4", -+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", -+ "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", -+ "dev": true, -+ "requires": { -+ "jsesc": "~0.5.0" -+ }, -+ "dependencies": { -+ "jsesc": { -+ "version": "0.5.0", -+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", -+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", -+ "dev": true -+ } -+ } -+ }, -+ "remove-trailing-separator": { -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", -+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", -+ "dev": true -+ }, -+ "repeat-element": { -+ "version": "1.1.3", -+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", -+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", -+ "dev": true -+ }, -+ "repeat-string": { -+ "version": "1.6.1", -+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", -+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", -+ "dev": true -+ }, -+ "request": { -+ "version": "2.88.2", -+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", -+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", -+ "requires": { -+ "aws-sign2": "~0.7.0", -+ "aws4": "^1.8.0", -+ "caseless": "~0.12.0", -+ "combined-stream": "~1.0.6", -+ "extend": "~3.0.2", -+ "forever-agent": "~0.6.1", -+ "form-data": "~2.3.2", -+ "har-validator": "~5.1.3", -+ "http-signature": "~1.2.0", -+ "is-typedarray": "~1.0.0", -+ "isstream": "~0.1.2", -+ "json-stringify-safe": "~5.0.1", -+ "mime-types": "~2.1.19", -+ "oauth-sign": "~0.9.0", -+ "performance-now": "^2.1.0", -+ "qs": "~6.5.2", -+ "safe-buffer": "^5.1.2", -+ "tough-cookie": "~2.5.0", -+ "tunnel-agent": "^0.6.0", -+ "uuid": "^3.3.2" -+ } -+ }, -+ "request-promise-core": { -+ "version": "1.1.3", -+ "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", -+ "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", -+ "dev": true, -+ "requires": { -+ "lodash": "^4.17.15" -+ } -+ }, -+ "request-promise-native": { -+ "version": "1.0.8", -+ "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", -+ "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", -+ "dev": true, -+ "requires": { -+ "request-promise-core": "1.1.3", -+ "stealthy-require": "^1.1.1", -+ "tough-cookie": "^2.3.3" -+ } -+ }, -+ "require-directory": { -+ "version": "2.1.1", -+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", -+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", -+ "dev": true -+ }, -+ "require-main-filename": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", -+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", -+ "dev": true -+ }, -+ "resolve": { -+ "version": "1.17.0", -+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", -+ "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", -+ "dev": true, -+ "requires": { -+ "path-parse": "^1.0.6" -+ } -+ }, -+ "resolve-from": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", -+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", -+ "dev": true -+ }, -+ "resolve-url": { -+ "version": "0.2.1", -+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", -+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", -+ "dev": true -+ }, -+ "restore-cursor": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", -+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", -+ "dev": true, -+ "requires": { -+ "onetime": "^2.0.0", -+ "signal-exit": "^3.0.2" -+ } -+ }, -+ "ret": { -+ "version": "0.1.15", -+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", -+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", -+ "dev": true -+ }, -+ "rgb-regex": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", -+ "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", -+ "dev": true -+ }, -+ "rgba-regex": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", -+ "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", -+ "dev": true -+ }, -+ "rimraf": { -+ "version": "2.6.3", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", -+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", -+ "dev": true, -+ "requires": { -+ "glob": "^7.1.3" -+ } -+ }, -+ "ripemd160": { -+ "version": "2.0.2", -+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", -+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", -+ "dev": true, -+ "requires": { -+ "hash-base": "^3.0.0", -+ "inherits": "^2.0.1" -+ } -+ }, -+ "safe-buffer": { -+ "version": "5.1.2", -+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", -+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" -+ }, -+ "safe-regex": { -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", -+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", -+ "dev": true, -+ "requires": { -+ "ret": "~0.1.10" -+ } -+ }, -+ "safer-buffer": { -+ "version": "2.1.2", -+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", -+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" -+ }, -+ "safer-eval": { -+ "version": "1.3.6", -+ "resolved": "https://registry.npmjs.org/safer-eval/-/safer-eval-1.3.6.tgz", -+ "integrity": "sha512-DN9tBsZgtUOHODzSfO1nGCLhZtxc7Qq/d8/2SNxQZ9muYXZspSh1fO7HOsrf4lcelBNviAJLCxB/ggmG+jV1aw==", -+ "dev": true, -+ "requires": { -+ "clones": "^1.2.0" -+ } -+ }, -+ "sax": { -+ "version": "1.2.4", -+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", -+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", -+ "dev": true -+ }, -+ "saxes": { -+ "version": "3.1.11", -+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", -+ "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", -+ "dev": true, -+ "requires": { -+ "xmlchars": "^2.1.1" -+ } -+ }, -+ "semver": { -+ "version": "5.7.1", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", -+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", -+ "dev": true -+ }, -+ "send": { -+ "version": "0.17.1", -+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", -+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", -+ "dev": true, -+ "requires": { -+ "debug": "2.6.9", -+ "depd": "~1.1.2", -+ "destroy": "~1.0.4", -+ "encodeurl": "~1.0.2", -+ "escape-html": "~1.0.3", -+ "etag": "~1.8.1", -+ "fresh": "0.5.2", -+ "http-errors": "~1.7.2", -+ "mime": "1.6.0", -+ "ms": "2.1.1", -+ "on-finished": "~2.3.0", -+ "range-parser": "~1.2.1", -+ "statuses": "~1.5.0" -+ }, -+ "dependencies": { -+ "debug": { -+ "version": "2.6.9", -+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", -+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", -+ "dev": true, -+ "requires": { -+ "ms": "2.0.0" -+ }, -+ "dependencies": { -+ "ms": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", -+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", -+ "dev": true -+ } -+ } -+ }, -+ "ms": { -+ "version": "2.1.1", -+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", -+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", -+ "dev": true -+ } -+ } -+ }, -+ "serialize-to-js": { -+ "version": "1.2.2", -+ "resolved": "https://registry.npmjs.org/serialize-to-js/-/serialize-to-js-1.2.2.tgz", -+ "integrity": "sha512-mUc8vA5iJghe+O+3s0YDGFLMJcqitVFk787YKiv8a4sf6RX5W0u81b+gcHrp15O0fFa010dRBVZvwcKXOWsL9Q==", -+ "dev": true, -+ "requires": { -+ "js-beautify": "^1.8.9", -+ "safer-eval": "^1.3.0" -+ } -+ }, -+ "serve-static": { -+ "version": "1.14.1", -+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", -+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", -+ "dev": true, -+ "requires": { -+ "encodeurl": "~1.0.2", -+ "escape-html": "~1.0.3", -+ "parseurl": "~1.3.3", -+ "send": "0.17.1" -+ } -+ }, -+ "set-blocking": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", -+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", -+ "dev": true -+ }, -+ "set-value": { -+ "version": "2.0.1", -+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", -+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", -+ "dev": true, -+ "requires": { -+ "extend-shallow": "^2.0.1", -+ "is-extendable": "^0.1.1", -+ "is-plain-object": "^2.0.3", -+ "split-string": "^3.0.1" -+ }, -+ "dependencies": { -+ "extend-shallow": { -+ "version": "2.0.1", -+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", -+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", -+ "dev": true, -+ "requires": { -+ "is-extendable": "^0.1.0" -+ } -+ } -+ } -+ }, -+ "setimmediate": { -+ "version": "1.0.5", -+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", -+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", -+ "dev": true -+ }, -+ "setprototypeof": { -+ "version": "1.1.1", -+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", -+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", -+ "dev": true -+ }, -+ "sha.js": { -+ "version": "2.4.11", -+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", -+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", -+ "dev": true, -+ "requires": { -+ "inherits": "^2.0.1", -+ "safe-buffer": "^5.0.1" -+ } -+ }, -+ "shallow-copy": { -+ "version": "0.0.1", -+ "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", -+ "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=", -+ "dev": true -+ }, -+ "shebang-command": { -+ "version": "1.2.0", -+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", -+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", -+ "dev": true, -+ "requires": { -+ "shebang-regex": "^1.0.0" -+ } -+ }, -+ "shebang-regex": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", -+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", -+ "dev": true -+ }, -+ "sigmund": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", -+ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", -+ "dev": true -+ }, -+ "signal-exit": { -+ "version": "3.0.3", -+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", -+ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", -+ "dev": true -+ }, -+ "simple-swizzle": { -+ "version": "0.2.2", -+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", -+ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", -+ "dev": true, -+ "requires": { -+ "is-arrayish": "^0.3.1" -+ }, -+ "dependencies": { -+ "is-arrayish": { -+ "version": "0.3.2", -+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", -+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", -+ "dev": true -+ } -+ } -+ }, -+ "snapdragon": { -+ "version": "0.8.2", -+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", -+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", -+ "dev": true, -+ "requires": { -+ "base": "^0.11.1", -+ "debug": "^2.2.0", -+ "define-property": "^0.2.5", -+ "extend-shallow": "^2.0.1", -+ "map-cache": "^0.2.2", -+ "source-map": "^0.5.6", -+ "source-map-resolve": "^0.5.0", -+ "use": "^3.1.0" -+ }, -+ "dependencies": { -+ "debug": { -+ "version": "2.6.9", -+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", -+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", -+ "dev": true, -+ "requires": { -+ "ms": "2.0.0" -+ } -+ }, -+ "define-property": { -+ "version": "0.2.5", -+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", -+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", -+ "dev": true, -+ "requires": { -+ "is-descriptor": "^0.1.0" -+ } -+ }, -+ "extend-shallow": { -+ "version": "2.0.1", -+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", -+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", -+ "dev": true, -+ "requires": { -+ "is-extendable": "^0.1.0" -+ } -+ }, -+ "ms": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", -+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", -+ "dev": true -+ }, -+ "source-map": { -+ "version": "0.5.7", -+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", -+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", -+ "dev": true -+ } -+ } -+ }, -+ "snapdragon-node": { -+ "version": "2.1.1", -+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", -+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", -+ "dev": true, -+ "requires": { -+ "define-property": "^1.0.0", -+ "isobject": "^3.0.0", -+ "snapdragon-util": "^3.0.1" -+ }, -+ "dependencies": { -+ "define-property": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", -+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", -+ "dev": true, -+ "requires": { -+ "is-descriptor": "^1.0.0" -+ } -+ }, -+ "is-accessor-descriptor": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", -+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", -+ "dev": true, -+ "requires": { -+ "kind-of": "^6.0.0" -+ } -+ }, -+ "is-data-descriptor": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", -+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", -+ "dev": true, -+ "requires": { -+ "kind-of": "^6.0.0" -+ } -+ }, -+ "is-descriptor": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", -+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", -+ "dev": true, -+ "requires": { -+ "is-accessor-descriptor": "^1.0.0", -+ "is-data-descriptor": "^1.0.0", -+ "kind-of": "^6.0.2" -+ } -+ } -+ } -+ }, -+ "snapdragon-util": { -+ "version": "3.0.1", -+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", -+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", -+ "dev": true, -+ "requires": { -+ "kind-of": "^3.2.0" -+ }, -+ "dependencies": { -+ "kind-of": { -+ "version": "3.2.2", -+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", -+ "dev": true, -+ "requires": { -+ "is-buffer": "^1.1.5" -+ } -+ } -+ } -+ }, -+ "source-map": { -+ "version": "0.6.1", -+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", -+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", -+ "dev": true -+ }, -+ "source-map-resolve": { -+ "version": "0.5.3", -+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", -+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", -+ "dev": true, -+ "requires": { -+ "atob": "^2.1.2", -+ "decode-uri-component": "^0.2.0", -+ "resolve-url": "^0.2.1", -+ "source-map-url": "^0.4.0", -+ "urix": "^0.1.0" -+ } -+ }, -+ "source-map-support": { -+ "version": "0.5.19", -+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", -+ "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", -+ "dev": true, -+ "requires": { -+ "buffer-from": "^1.0.0", -+ "source-map": "^0.6.0" -+ } -+ }, -+ "source-map-url": { -+ "version": "0.4.0", -+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", -+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", -+ "dev": true -+ }, -+ "split-string": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", -+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", -+ "dev": true, -+ "requires": { -+ "extend-shallow": "^3.0.0" -+ } -+ }, -+ "sprintf-js": { -+ "version": "1.0.3", -+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", -+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", -+ "dev": true -+ }, -+ "sshpk": { -+ "version": "1.16.1", -+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", -+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", -+ "requires": { -+ "asn1": "~0.2.3", -+ "assert-plus": "^1.0.0", -+ "bcrypt-pbkdf": "^1.0.0", -+ "dashdash": "^1.12.0", -+ "ecc-jsbn": "~0.1.1", -+ "getpass": "^0.1.1", -+ "jsbn": "~0.1.0", -+ "safer-buffer": "^2.0.2", -+ "tweetnacl": "~0.14.0" -+ } -+ }, -+ "stable": { -+ "version": "0.1.8", -+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", -+ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", -+ "dev": true -+ }, -+ "static-eval": { -+ "version": "2.0.5", -+ "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.5.tgz", -+ "integrity": "sha512-nNbV6LbGtMBgv7e9LFkt5JV8RVlRsyJrphfAt9tOtBBW/SfnzZDf2KnS72an8e434A+9e/BmJuTxeGPvrAK7KA==", -+ "dev": true, -+ "requires": { -+ "escodegen": "^1.11.1" -+ }, -+ "dependencies": { -+ "escodegen": { -+ "version": "1.14.1", -+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz", -+ "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==", -+ "dev": true, -+ "requires": { -+ "esprima": "^4.0.1", -+ "estraverse": "^4.2.0", -+ "esutils": "^2.0.2", -+ "optionator": "^0.8.1", -+ "source-map": "~0.6.1" -+ } -+ } -+ } -+ }, -+ "static-extend": { -+ "version": "0.1.2", -+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", -+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", -+ "dev": true, -+ "requires": { -+ "define-property": "^0.2.5", -+ "object-copy": "^0.1.0" -+ }, -+ "dependencies": { -+ "define-property": { -+ "version": "0.2.5", -+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", -+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", -+ "dev": true, -+ "requires": { -+ "is-descriptor": "^0.1.0" -+ } -+ } -+ } -+ }, -+ "static-module": { -+ "version": "2.2.5", -+ "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz", -+ "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==", -+ "dev": true, -+ "requires": { -+ "concat-stream": "~1.6.0", -+ "convert-source-map": "^1.5.1", -+ "duplexer2": "~0.1.4", -+ "escodegen": "~1.9.0", -+ "falafel": "^2.1.0", -+ "has": "^1.0.1", -+ "magic-string": "^0.22.4", -+ "merge-source-map": "1.0.4", -+ "object-inspect": "~1.4.0", -+ "quote-stream": "~1.0.2", -+ "readable-stream": "~2.3.3", -+ "shallow-copy": "~0.0.1", -+ "static-eval": "^2.0.0", -+ "through2": "~2.0.3" -+ }, -+ "dependencies": { -+ "object-inspect": { -+ "version": "1.4.1", -+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz", -+ "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==", -+ "dev": true -+ } -+ } -+ }, -+ "statuses": { -+ "version": "1.5.0", -+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", -+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", -+ "dev": true -+ }, -+ "stealthy-require": { -+ "version": "1.1.1", -+ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", -+ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", -+ "dev": true -+ }, -+ "stream-browserify": { -+ "version": "2.0.2", -+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", -+ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", -+ "dev": true, -+ "requires": { -+ "inherits": "~2.0.1", -+ "readable-stream": "^2.0.2" -+ } -+ }, -+ "stream-http": { -+ "version": "2.8.3", -+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", -+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", -+ "dev": true, -+ "requires": { -+ "builtin-status-codes": "^3.0.0", -+ "inherits": "^2.0.1", -+ "readable-stream": "^2.3.6", -+ "to-arraybuffer": "^1.0.0", -+ "xtend": "^4.0.0" -+ } -+ }, -+ "string-width": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", -+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", -+ "dev": true, -+ "requires": { -+ "emoji-regex": "^7.0.1", -+ "is-fullwidth-code-point": "^2.0.0", -+ "strip-ansi": "^5.1.0" -+ }, -+ "dependencies": { -+ "ansi-regex": { -+ "version": "4.1.0", -+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", -+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", -+ "dev": true -+ }, -+ "strip-ansi": { -+ "version": "5.2.0", -+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", -+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", -+ "dev": true, -+ "requires": { -+ "ansi-regex": "^4.1.0" -+ } -+ } -+ } -+ }, -+ "string.prototype.trimend": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", -+ "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", -+ "dev": true, -+ "requires": { -+ "define-properties": "^1.1.3", -+ "es-abstract": "^1.17.5" -+ } -+ }, -+ "string.prototype.trimleft": { -+ "version": "2.1.2", -+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", -+ "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", -+ "dev": true, -+ "requires": { -+ "define-properties": "^1.1.3", -+ "es-abstract": "^1.17.5", -+ "string.prototype.trimstart": "^1.0.0" -+ } -+ }, -+ "string.prototype.trimright": { -+ "version": "2.1.2", -+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", -+ "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", -+ "dev": true, -+ "requires": { -+ "define-properties": "^1.1.3", -+ "es-abstract": "^1.17.5", -+ "string.prototype.trimend": "^1.0.0" -+ } -+ }, -+ "string.prototype.trimstart": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", -+ "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", -+ "dev": true, -+ "requires": { -+ "define-properties": "^1.1.3", -+ "es-abstract": "^1.17.5" -+ } -+ }, -+ "string_decoder": { -+ "version": "1.1.1", -+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", -+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", -+ "dev": true, -+ "requires": { -+ "safe-buffer": "~5.1.0" -+ } -+ }, -+ "strip-ansi": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", -+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", -+ "dev": true, -+ "requires": { -+ "ansi-regex": "^3.0.0" -+ } -+ }, -+ "stylehacks": { -+ "version": "4.0.3", -+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", -+ "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", -+ "dev": true, -+ "requires": { -+ "browserslist": "^4.0.0", -+ "postcss": "^7.0.0", -+ "postcss-selector-parser": "^3.0.0" -+ }, -+ "dependencies": { -+ "postcss-selector-parser": { -+ "version": "3.1.2", -+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", -+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", -+ "dev": true, -+ "requires": { -+ "dot-prop": "^5.2.0", -+ "indexes-of": "^1.0.1", -+ "uniq": "^1.0.1" -+ } -+ } -+ } -+ }, -+ "supports-color": { -+ "version": "6.1.0", -+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", -+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", -+ "dev": true, -+ "requires": { -+ "has-flag": "^3.0.0" -+ } -+ }, -+ "svgo": { -+ "version": "1.3.2", -+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", -+ "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", -+ "dev": true, -+ "requires": { -+ "chalk": "^2.4.1", -+ "coa": "^2.0.2", -+ "css-select": "^2.0.0", -+ "css-select-base-adapter": "^0.1.1", -+ "css-tree": "1.0.0-alpha.37", -+ "csso": "^4.0.2", -+ "js-yaml": "^3.13.1", -+ "mkdirp": "~0.5.1", -+ "object.values": "^1.1.0", -+ "sax": "~1.2.4", -+ "stable": "^0.1.8", -+ "unquote": "~1.1.1", -+ "util.promisify": "~1.0.0" -+ } -+ }, -+ "symbol-tree": { -+ "version": "3.2.4", -+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", -+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", -+ "dev": true -+ }, -+ "temp": { -+ "version": "0.9.0", -+ "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.0.tgz", -+ "integrity": "sha512-YfUhPQCJoNQE5N+FJQcdPz63O3x3sdT4Xju69Gj4iZe0lBKOtnAMi0SLj9xKhGkcGhsxThvTJ/usxtFPo438zQ==", -+ "dev": true, -+ "requires": { -+ "rimraf": "~2.6.2" -+ } -+ }, -+ "terser": { -+ "version": "3.17.0", -+ "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", -+ "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", -+ "dev": true, -+ "requires": { -+ "commander": "^2.19.0", -+ "source-map": "~0.6.1", -+ "source-map-support": "~0.5.10" -+ } -+ }, -+ "through2": { -+ "version": "2.0.5", -+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", -+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", -+ "dev": true, -+ "requires": { -+ "readable-stream": "~2.3.6", -+ "xtend": "~4.0.1" -+ } -+ }, -+ "timers-browserify": { -+ "version": "2.0.11", -+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", -+ "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", -+ "dev": true, -+ "requires": { -+ "setimmediate": "^1.0.4" -+ } -+ }, -+ "timsort": { -+ "version": "0.3.0", -+ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", -+ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", -+ "dev": true -+ }, -+ "tiny-inflate": { -+ "version": "1.0.3", -+ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", -+ "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", -+ "dev": true -+ }, -+ "to-arraybuffer": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", -+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", -+ "dev": true -+ }, -+ "to-fast-properties": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", -+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", -+ "dev": true -+ }, -+ "to-object-path": { -+ "version": "0.3.0", -+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", -+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", -+ "dev": true, -+ "requires": { -+ "kind-of": "^3.0.2" -+ }, -+ "dependencies": { -+ "kind-of": { -+ "version": "3.2.2", -+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", -+ "dev": true, -+ "requires": { -+ "is-buffer": "^1.1.5" -+ } -+ } -+ } -+ }, -+ "to-regex": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", -+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", -+ "dev": true, -+ "requires": { -+ "define-property": "^2.0.2", -+ "extend-shallow": "^3.0.2", -+ "regex-not": "^1.0.2", -+ "safe-regex": "^1.1.0" -+ } -+ }, -+ "to-regex-range": { -+ "version": "2.1.1", -+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", -+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", -+ "dev": true, -+ "requires": { -+ "is-number": "^3.0.0", -+ "repeat-string": "^1.6.1" -+ } -+ }, -+ "toidentifier": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", -+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, -- "brace-expansion": { -- "version": "1.1.11", -- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", -- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", -+ "tough-cookie": { -+ "version": "2.5.0", -+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", -+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", -+ "requires": { -+ "psl": "^1.1.28", -+ "punycode": "^2.1.1" -+ } -+ }, -+ "tr46": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", -+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { -- "balanced-match": "^1.0.0", -- "concat-map": "0.0.1" -+ "punycode": "^2.1.0" - } - }, -- "concat-map": { -- "version": "0.0.1", -- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", -- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", -+ "trim-right": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", -+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, -- "cross-spawn": { -- "version": "6.0.5", -- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", -- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", -+ "tty-browserify": { -+ "version": "0.0.0", -+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", -+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", -+ "dev": true -+ }, -+ "tunnel-agent": { -+ "version": "0.6.0", -+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", -+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", -+ "requires": { -+ "safe-buffer": "^5.0.1" -+ } -+ }, -+ "tweetnacl": { -+ "version": "0.14.5", -+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", -+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" -+ }, -+ "type-check": { -+ "version": "0.3.2", -+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", -+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { -- "nice-try": "^1.0.4", -- "path-key": "^2.0.1", -- "semver": "^5.5.0", -- "shebang-command": "^1.2.0", -- "which": "^1.2.9" -+ "prelude-ls": "~1.1.2" - } - }, -- "elm-hot": { -- "version": "1.1.1", -- "resolved": "https://registry.npmjs.org/elm-hot/-/elm-hot-1.1.1.tgz", -- "integrity": "sha512-ZHjoHd2Ev6riNXNQirj3J+GKKXXwedAUikfFBYzlVL/+3CdGs96cpZ7nhAk4c5l//Qa9ymltrqX36mOlr0pPFA==", -+ "typedarray": { -+ "version": "0.0.6", -+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", -+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, -- "find-elm-dependencies": { -- "version": "2.0.2", -- "resolved": "https://registry.npmjs.org/find-elm-dependencies/-/find-elm-dependencies-2.0.2.tgz", -- "integrity": "sha512-nM5UCbccD1G8CGK2GsM7ykG3ksOAl9E+34jiDfl07CAl2OPnLpBVWY2hlxEmIkSBfdJjSopEowWHrO0cI8RhxQ==", -+ "uncss": { -+ "version": "0.17.3", -+ "resolved": "https://registry.npmjs.org/uncss/-/uncss-0.17.3.tgz", -+ "integrity": "sha512-ksdDWl81YWvF/X14fOSw4iu8tESDHFIeyKIeDrK6GEVTQvqJc1WlOEXqostNwOCi3qAj++4EaLsdAgPmUbEyog==", - "dev": true, - "requires": { -- "firstline": "1.2.0", -- "lodash": "4.17.15" -+ "commander": "^2.20.0", -+ "glob": "^7.1.4", -+ "is-absolute-url": "^3.0.1", -+ "is-html": "^1.1.0", -+ "jsdom": "^14.1.0", -+ "lodash": "^4.17.15", -+ "postcss": "^7.0.17", -+ "postcss-selector-parser": "6.0.2", -+ "request": "^2.88.0" -+ }, -+ "dependencies": { -+ "is-absolute-url": { -+ "version": "3.0.3", -+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", -+ "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", -+ "dev": true -+ } - } - }, -- "firstline": { -+ "unicode-canonical-property-names-ecmascript": { -+ "version": "1.0.4", -+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", -+ "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", -+ "dev": true -+ }, -+ "unicode-match-property-ecmascript": { -+ "version": "1.0.4", -+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", -+ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", -+ "dev": true, -+ "requires": { -+ "unicode-canonical-property-names-ecmascript": "^1.0.4", -+ "unicode-property-aliases-ecmascript": "^1.0.4" -+ } -+ }, -+ "unicode-match-property-value-ecmascript": { - "version": "1.2.0", -- "resolved": "https://registry.npmjs.org/firstline/-/firstline-1.2.0.tgz", -- "integrity": "sha1-yfSIbn9/vwr8EtcZQdzgaxkq6gU=", -+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", -+ "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true - }, -- "fs.realpath": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", -- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", -+ "unicode-property-aliases-ecmascript": { -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", -+ "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true - }, -- "glob": { -- "version": "7.1.4", -- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", -- "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", -+ "unicode-trie": { -+ "version": "0.3.1", -+ "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz", -+ "integrity": "sha1-1nHd3YkQGgi6w3tqUWEBBgIFIIU=", - "dev": true, - "requires": { -- "fs.realpath": "^1.0.0", -- "inflight": "^1.0.4", -- "inherits": "2", -- "minimatch": "^3.0.4", -- "once": "^1.3.0", -- "path-is-absolute": "^1.0.0" -+ "pako": "^0.2.5", -+ "tiny-inflate": "^1.0.0" - } - }, -- "inflight": { -- "version": "1.0.6", -- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", -- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", -+ "union-value": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", -+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { -- "once": "^1.3.0", -- "wrappy": "1" -+ "arr-union": "^3.1.0", -+ "get-value": "^2.0.6", -+ "is-extendable": "^0.1.1", -+ "set-value": "^2.0.1" - } - }, -- "inherits": { -- "version": "2.0.4", -- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", -- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", -+ "uniq": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", -+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, -- "isexe": { -+ "uniqs": { - "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", -- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", -+ "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", -+ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", - "dev": true - }, -- "lodash": { -- "version": "4.17.15", -- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", -- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", -+ "unquote": { -+ "version": "1.1.1", -+ "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", -+ "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", - "dev": true - }, -- "minimatch": { -- "version": "3.0.4", -- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", -- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", -+ "unset-value": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", -+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { -- "brace-expansion": "^1.1.7" -+ "has-value": "^0.3.1", -+ "isobject": "^3.0.0" -+ }, -+ "dependencies": { -+ "has-value": { -+ "version": "0.3.1", -+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", -+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", -+ "dev": true, -+ "requires": { -+ "get-value": "^2.0.3", -+ "has-values": "^0.1.4", -+ "isobject": "^2.0.0" -+ }, -+ "dependencies": { -+ "isobject": { -+ "version": "2.1.0", -+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", -+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", -+ "dev": true, -+ "requires": { -+ "isarray": "1.0.0" -+ } -+ } -+ } -+ }, -+ "has-values": { -+ "version": "0.1.4", -+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", -+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", -+ "dev": true -+ } - } - }, -- "nice-try": { -- "version": "1.0.5", -- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", -- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", -+ "upath": { -+ "version": "1.2.0", -+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", -+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, -- "node-elm-compiler": { -- "version": "5.0.4", -- "resolved": "https://registry.npmjs.org/node-elm-compiler/-/node-elm-compiler-5.0.4.tgz", -- "integrity": "sha512-VQsT8QSierYGkHzRed+b4MnccQVF1+qPHunE8jBoU7jD6YpuRqCDPzEoC2zfyEJS80qVnlMZrqobLnyjzX9lJg==", -+ "uri-js": { -+ "version": "4.2.2", -+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", -+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", -+ "requires": { -+ "punycode": "^2.1.0" -+ } -+ }, -+ "urix": { -+ "version": "0.1.0", -+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", -+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", -+ "dev": true -+ }, -+ "url": { -+ "version": "0.11.0", -+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", -+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { -- "cross-spawn": "6.0.5", -- "find-elm-dependencies": "2.0.2", -- "lodash": "4.17.15", -- "temp": "^0.9.0" -+ "punycode": "1.3.2", -+ "querystring": "0.2.0" -+ }, -+ "dependencies": { -+ "punycode": { -+ "version": "1.3.2", -+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", -+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", -+ "dev": true -+ } - } - }, -- "once": { -- "version": "1.4.0", -- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", -- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", -+ "use": { -+ "version": "3.1.1", -+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", -+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", -+ "dev": true -+ }, -+ "util": { -+ "version": "0.11.1", -+ "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", -+ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { -- "wrappy": "1" -+ "inherits": "2.0.3" -+ }, -+ "dependencies": { -+ "inherits": { -+ "version": "2.0.3", -+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", -+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", -+ "dev": true -+ } - } - }, -- "path-is-absolute": { -+ "util-deprecate": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", -+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", -+ "dev": true -+ }, -+ "util.promisify": { - "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", -- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", -+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", -+ "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", -+ "dev": true, -+ "requires": { -+ "define-properties": "^1.1.3", -+ "es-abstract": "^1.17.2", -+ "has-symbols": "^1.0.1", -+ "object.getownpropertydescriptors": "^2.1.0" -+ } -+ }, -+ "uuid": { -+ "version": "3.4.0", -+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", -+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" -+ }, -+ "v8-compile-cache": { -+ "version": "2.1.0", -+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", -+ "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", - "dev": true - }, -- "path-key": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", -- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", -+ "vendors": { -+ "version": "1.0.4", -+ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", -+ "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", - "dev": true - }, -- "rimraf": { -- "version": "2.6.3", -- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", -- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", -+ "verror": { -+ "version": "1.10.0", -+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", -+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", -+ "requires": { -+ "assert-plus": "^1.0.0", -+ "core-util-is": "1.0.2", -+ "extsprintf": "^1.2.0" -+ } -+ }, -+ "vlq": { -+ "version": "0.2.3", -+ "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", -+ "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", -+ "dev": true -+ }, -+ "vm-browserify": { -+ "version": "1.1.2", -+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", -+ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", -+ "dev": true -+ }, -+ "w3c-hr-time": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", -+ "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { -- "glob": "^7.1.3" -+ "browser-process-hrtime": "^1.0.0" - } - }, -- "semver": { -- "version": "5.7.1", -- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", -- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", -+ "w3c-xmlserializer": { -+ "version": "1.1.2", -+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", -+ "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", -+ "dev": true, -+ "requires": { -+ "domexception": "^1.0.1", -+ "webidl-conversions": "^4.0.2", -+ "xml-name-validator": "^3.0.0" -+ } -+ }, -+ "wcwidth": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", -+ "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", -+ "dev": true, -+ "requires": { -+ "defaults": "^1.0.3" -+ } -+ }, -+ "webidl-conversions": { -+ "version": "4.0.2", -+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", -+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, -- "shebang-command": { -- "version": "1.2.0", -- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", -- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", -+ "whatwg-encoding": { -+ "version": "1.0.5", -+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", -+ "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { -- "shebang-regex": "^1.0.0" -+ "iconv-lite": "0.4.24" - } - }, -- "shebang-regex": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", -- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", -+ "whatwg-mimetype": { -+ "version": "2.3.0", -+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", -+ "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, -- "temp": { -- "version": "0.9.0", -- "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.0.tgz", -- "integrity": "sha512-YfUhPQCJoNQE5N+FJQcdPz63O3x3sdT4Xju69Gj4iZe0lBKOtnAMi0SLj9xKhGkcGhsxThvTJ/usxtFPo438zQ==", -+ "whatwg-url": { -+ "version": "7.1.0", -+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", -+ "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { -- "rimraf": "~2.6.2" -+ "lodash.sortby": "^4.7.0", -+ "tr46": "^1.0.1", -+ "webidl-conversions": "^4.0.2" - } - }, - "which": { -@@ -205,11 +7972,164 @@ - "isexe": "^2.0.0" - } - }, -+ "which-module": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", -+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", -+ "dev": true -+ }, -+ "word-wrap": { -+ "version": "1.2.3", -+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", -+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", -+ "dev": true -+ }, -+ "wrap-ansi": { -+ "version": "5.1.0", -+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", -+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", -+ "dev": true, -+ "requires": { -+ "ansi-styles": "^3.2.0", -+ "string-width": "^3.0.0", -+ "strip-ansi": "^5.0.0" -+ }, -+ "dependencies": { -+ "ansi-regex": { -+ "version": "4.1.0", -+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", -+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", -+ "dev": true -+ }, -+ "strip-ansi": { -+ "version": "5.2.0", -+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", -+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", -+ "dev": true, -+ "requires": { -+ "ansi-regex": "^4.1.0" -+ } -+ } -+ } -+ }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true -+ }, -+ "ws": { -+ "version": "5.2.2", -+ "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", -+ "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", -+ "dev": true, -+ "requires": { -+ "async-limiter": "~1.0.0" -+ } -+ }, -+ "xml-name-validator": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", -+ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", -+ "dev": true -+ }, -+ "xmlchars": { -+ "version": "2.2.0", -+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", -+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", -+ "dev": true -+ }, -+ "xtend": { -+ "version": "4.0.2", -+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", -+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", -+ "dev": true -+ }, -+ "y18n": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", -+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", -+ "dev": true -+ }, -+ "yallist": { -+ "version": "2.1.2", -+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", -+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", -+ "dev": true -+ }, -+ "yargs": { -+ "version": "14.2.3", -+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", -+ "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", -+ "dev": true, -+ "requires": { -+ "cliui": "^5.0.0", -+ "decamelize": "^1.2.0", -+ "find-up": "^3.0.0", -+ "get-caller-file": "^2.0.1", -+ "require-directory": "^2.1.1", -+ "require-main-filename": "^2.0.0", -+ "set-blocking": "^2.0.0", -+ "string-width": "^3.0.0", -+ "which-module": "^2.0.0", -+ "y18n": "^4.0.0", -+ "yargs-parser": "^15.0.1" -+ }, -+ "dependencies": { -+ "find-up": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", -+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", -+ "dev": true, -+ "requires": { -+ "locate-path": "^3.0.0" -+ } -+ }, -+ "locate-path": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", -+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", -+ "dev": true, -+ "requires": { -+ "p-locate": "^3.0.0", -+ "path-exists": "^3.0.0" -+ } -+ }, -+ "p-limit": { -+ "version": "2.3.0", -+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", -+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", -+ "dev": true, -+ "requires": { -+ "p-try": "^2.0.0" -+ } -+ }, -+ "p-locate": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", -+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", -+ "dev": true, -+ "requires": { -+ "p-limit": "^2.0.0" -+ } -+ }, -+ "p-try": { -+ "version": "2.2.0", -+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", -+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", -+ "dev": true -+ } -+ } -+ }, -+ "yargs-parser": { -+ "version": "15.0.1", -+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", -+ "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", -+ "dev": true, -+ "requires": { -+ "camelcase": "^5.0.0", -+ "decamelize": "^1.2.0" -+ } - } - } - } -diff --git a/src/Api.elm b/src/Api.elm -index 82e5f6c..bd8c516 100644 ---- a/src/Api.elm -+++ b/src/Api.elm -@@ -36,7 +36,7 @@ init url = - { url | host = "api.codenamesgreen.com", path = "", query = Nothing, fragment = Nothing } - - _ -> -- { url | host = "api." ++ url.host, path = "", query = Nothing, fragment = Nothing } -+ { url | host = url.host, path = "/api", query = Nothing, fragment = Nothing } - in - { baseUrl = baseUrl } - -@@ -80,7 +80,7 @@ type alias Index = - - endpointUrl : Url.Url -> String -> String - endpointUrl baseUrl path = -- { baseUrl | path = path } -+ { baseUrl | path = baseUrl.path ++ path } - |> Url.toString - - diff --git a/modules/private/websites/tools/games/codenames/default.nix b/modules/private/websites/tools/games/codenames/default.nix deleted file mode 100644 index 25eb62d..0000000 --- a/modules/private/websites/tools/games/codenames/default.nix +++ /dev/null @@ -1,50 +0,0 @@ -{ config, lib, pkgs, ... }: -let - greenapid = pkgs.callPackage ./greenapid.nix {}; - frontend = pkgs.callPackage ./frontend.nix { nodeEnv = pkgs.callPackage pkgs.mylibs.nodeEnv {}; }; - wordlists = pkgs.runCommand "wordlists" {} '' - mkdir -p $out - cp -r ${./wordlists} $out/wordlists - ''; - cfg = config.myServices.websites.games.codenames; -in -{ - options.myServices.websites.games.codenames.enable = lib.mkEnableOption "Enable Codenames game"; - config = lib.mkIf cfg.enable { - systemd.services.codenames_api = { - description = "Api for codenames game"; - wantedBy = [ "multi-user.target" ]; - script = "${greenapid}/bin/greenapid"; - postStart = '' - sleep 5; - chown :wwwrun /run/codenamesgreen/socket.sock - chmod g+w /run/codenamesgreen/socket.sock - ''; - serviceConfig = { - User = "codenames"; - DynamicUser = true; - SupplementaryGroups = [ "wwwrun" ]; - Type = "simple"; - RuntimeDirectory = "codenamesgreen"; - WorkingDirectory = builtins.toString wordlists; - }; - }; - - services.websites.env.tools.vhostConfs.games_codenames = { - certName = "games"; - certMainHost = "games.immae.eu"; - hosts = [ "codenames.games.immae.eu" ]; - root = frontend; - extraConfig = [ - '' - ProxyPass /api/ unix:///run/codenamesgreen/socket.sock|http://codenames.games.immae.eu/ - ProxyPassReverse /api/ unix:///run/codenamesgreen/socket.sock|http://codenames.games.immae.eu/ - - - FallbackResource index.html - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/tools/games/codenames/deps.nix b/modules/private/websites/tools/games/codenames/deps.nix deleted file mode 100644 index fddec2e..0000000 --- a/modules/private/websites/tools/games/codenames/deps.nix +++ /dev/null @@ -1,11 +0,0 @@ -[ - { - goPackagePath = "github.com/jbowens/dictionary"; - fetch = { - type = "git"; - url = "https://github.com/jbowens/dictionary"; - rev = "229cf68df1a675e7a2462c4028d7df4abfd98854"; - sha256 = "0gyg3xcx4xqx6w8id2dq5s280mdfhs6yc9flg2jbj8jff040s28w"; - }; - } -] diff --git a/modules/private/websites/tools/games/codenames/elm-srcs.nix b/modules/private/websites/tools/games/codenames/elm-srcs.nix deleted file mode 100644 index 031e7ff..0000000 --- a/modules/private/websites/tools/games/codenames/elm-srcs.nix +++ /dev/null @@ -1,77 +0,0 @@ -{ - - "elm/json" = { - sha256 = "0kjwrz195z84kwywaxhhlnpl3p251qlbm5iz6byd6jky2crmyqyh"; - version = "1.1.3"; - }; - - "perzanko/elm-loading" = { - sha256 = "0fs7ly4jib4gwhh157g91hgjryqja096i6jhbsq7qb4k4r3c5l80"; - version = "2.0.4"; - }; - - "elm/html" = { - sha256 = "1n3gpzmpqqdsldys4ipgyl1zacn0kbpc3g4v3hdpiyfjlgh8bf3k"; - version = "1.0.0"; - }; - - "elm/browser" = { - sha256 = "1zlmx672glg7fdgkvh5jm47y85pv7pdfr5mkhg6x7ar6k000vyka"; - version = "1.0.1"; - }; - - "elm/core" = { - sha256 = "1l0qdbczw91kzz8sx5d5zwz9x662bspy7p21dsr3f2rigxiix2as"; - version = "1.0.2"; - }; - - "elm/url" = { - sha256 = "0av8x5syid40sgpl5vd7pry2rq0q4pga28b4yykn9gd9v12rs3l4"; - version = "1.0.0"; - }; - - "elm/http" = { - sha256 = "008bs76mnp48b4dw8qwjj4fyvzbxvlrl4xpa2qh1gg2kfwyw56v1"; - version = "2.0.0"; - }; - - "elm/bytes" = { - sha256 = "02ywbf52akvxclpxwj9n04jydajcbsbcbsnjs53yjc5lwck3abwj"; - version = "1.0.8"; - }; - - "elm/file" = { - sha256 = "1rljcb41dl97myidyjih2yliyzddkr2m7n74x7gg46rcw4jl0ny8"; - version = "1.0.5"; - }; - - "rtfeldman/elm-hex" = { - sha256 = "1y0aa16asvwdqmgbskh5iba6psp43lkcjjw9mgzj3gsrg33lp00d"; - version = "1.0.0"; - }; - - "rtfeldman/elm-css" = { - sha256 = "0nxiyxyw3kw55whkpwhrcgc0dr6a8zlm2nqvsaqdw6mzkykg0ba6"; - version = "16.1.0"; - }; - - "elm/time" = { - sha256 = "0vch7i86vn0x8b850w1p69vplll1bnbkp8s383z7pinyg94cm2z1"; - version = "1.0.0"; - }; - - "elm/virtual-dom" = { - sha256 = "0q1v5gi4g336bzz1lgwpn5b1639lrn63d8y6k6pimcyismp2i1yg"; - version = "1.0.2"; - }; - - "elm-explorations/test" = { - sha256 = "0rpynrm9irgzyynd1bws0xspww5lnwv7w7998750jb8kcrw39h0n"; - version = "1.0.0"; - }; - - "elm/random" = { - sha256 = "138n2455wdjwa657w6sjq18wx2r0k60ibpc4frhbqr50sncxrfdl"; - version = "1.0.0"; - }; -} diff --git a/modules/private/websites/tools/games/codenames/frontend.nix b/modules/private/websites/tools/games/codenames/frontend.nix deleted file mode 100644 index 0f29070..0000000 --- a/modules/private/websites/tools/games/codenames/frontend.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ callPackage, runCommand, nodejs, utillinux, nodeEnv, nodePackages, elmPackages }: -let - codenamesgreen_packages = callPackage ./node-packages.nix { inherit nodeEnv; }; -in -runCommand "frontend" { - buildInputs = [ - nodejs utillinux nodePackages.parcel-bundler elmPackages.elm - ]; -} '' - cp -a ${codenamesgreen_packages.package}/lib/node_modules/codenamesgreen . - chmod -R u+w codenamesgreen - cd codenamesgreen - ${elmPackages.fetchElmDeps { - elmPackages = import ./elm-srcs.nix; - registryDat = ./registry.dat; - elmVersion = elmPackages.elm.version; - }} - npx parcel build src/index.html - cp -a dist $out - cp -R src/images $out - cp src/robots.txt $out -'' diff --git a/modules/private/websites/tools/games/codenames/greenapid.nix b/modules/private/websites/tools/games/codenames/greenapid.nix deleted file mode 100644 index 52bda3b..0000000 --- a/modules/private/websites/tools/games/codenames/greenapid.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ buildGoPackage, fetchFromGitHub, socket ? "/run/codenamesgreen/socket.sock" }: -buildGoPackage rec { - pname = "greenapid"; - version = "master-6d014d0"; - - goPackagePath = "github.com/jbowens/codenamesgreen"; - subPackages = [ "cmd/greenapid" ]; - - src = fetchFromGitHub { - owner = "jbowens"; - repo = "codenamesgreen"; - rev = "6d014d0df14bee72495e01f12885ef31cba3bd6b"; - sha256 = "0bkaf52rnjw792q0755in4k5jbcrmgq06cl03fdl6zdr8kq2mhm0"; - }; - - patches = [ ./greenapid.patch ]; - goDeps = ./deps.nix; -} diff --git a/modules/private/websites/tools/games/codenames/greenapid.patch b/modules/private/websites/tools/games/codenames/greenapid.patch deleted file mode 100644 index 21a9fad..0000000 --- a/modules/private/websites/tools/games/codenames/greenapid.patch +++ /dev/null @@ -1,39 +0,0 @@ -diff --git a/cmd/greenapid/main.go b/cmd/greenapid/main.go -index 86499e9..1589323 100644 ---- a/cmd/greenapid/main.go -+++ b/cmd/greenapid/main.go -@@ -1,6 +1,7 @@ - package main - - import ( -+ "net" - "net/http" - - "github.com/jbowens/codenamesgreen/gameapi" -@@ -13,6 +14,12 @@ func main() { - } - - h := gameapi.Handler(wordLists) -- err = http.ListenAndServe(":8080", h) -+ server := &http.Server{Handler: h} -+ ln, err := net.Listen("unix", "/run/codenamesgreen/socket.sock") -+ if err != nil { -+ panic(err) -+ } -+ -+ err = server.Serve(ln) - panic(err) - } -diff --git a/gameapi/handler.go b/gameapi/handler.go -index d67cf94..108e7e1 100644 ---- a/gameapi/handler.go -+++ b/gameapi/handler.go -@@ -101,7 +101,7 @@ func (h *handler) handleIndex(rw http.ResponseWriter, req *http.Request) { - for { - w1 := strings.ToLower(h.allWords[h.rand.Int63n(int64(len(h.allWords)))]) - w2 := strings.ToLower(h.allWords[h.rand.Int63n(int64(len(h.allWords)))]) -- id := fmt.Sprintf("%s-%s", w1, w2) -+ id = fmt.Sprintf("%s-%s", w1, w2) - if _, ok := h.games[id]; !ok { - break - } diff --git a/modules/private/websites/tools/games/codenames/node-packages.nix b/modules/private/websites/tools/games/codenames/node-packages.nix deleted file mode 100644 index 02595c5..0000000 --- a/modules/private/websites/tools/games/codenames/node-packages.nix +++ /dev/null @@ -1,7621 +0,0 @@ -# This file has been generated by node2nix 1.8.0. Do not edit! - -{nodeEnv, fetchurl, fetchgit, fetchFromGitHub, runCommand, globalBuildInputs ? []}: - -let - sources = { - "@babel/code-frame-7.0.0" = { - name = "_at_babel_slash_code-frame"; - packageName = "@babel/code-frame"; - version = "7.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz"; - sha512 = "OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA=="; - }; - }; - "@babel/code-frame-7.8.3" = { - name = "_at_babel_slash_code-frame"; - packageName = "@babel/code-frame"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz"; - sha512 = "a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g=="; - }; - }; - "@babel/core-7.3.4" = { - name = "_at_babel_slash_core"; - packageName = "@babel/core"; - version = "7.3.4"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/core/-/core-7.3.4.tgz"; - sha512 = "jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA=="; - }; - }; - "@babel/generator-7.3.4" = { - name = "_at_babel_slash_generator"; - packageName = "@babel/generator"; - version = "7.3.4"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz"; - sha512 = "8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg=="; - }; - }; - "@babel/generator-7.9.5" = { - name = "_at_babel_slash_generator"; - packageName = "@babel/generator"; - version = "7.9.5"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz"; - sha512 = "GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ=="; - }; - }; - "@babel/helper-annotate-as-pure-7.8.3" = { - name = "_at_babel_slash_helper-annotate-as-pure"; - packageName = "@babel/helper-annotate-as-pure"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz"; - sha512 = "6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw=="; - }; - }; - "@babel/helper-builder-binary-assignment-operator-visitor-7.8.3" = { - name = "_at_babel_slash_helper-builder-binary-assignment-operator-visitor"; - packageName = "@babel/helper-builder-binary-assignment-operator-visitor"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz"; - sha512 = "5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw=="; - }; - }; - "@babel/helper-builder-react-jsx-7.9.0" = { - name = "_at_babel_slash_helper-builder-react-jsx"; - packageName = "@babel/helper-builder-react-jsx"; - version = "7.9.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz"; - sha512 = "weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw=="; - }; - }; - "@babel/helper-create-regexp-features-plugin-7.8.8" = { - name = "_at_babel_slash_helper-create-regexp-features-plugin"; - packageName = "@babel/helper-create-regexp-features-plugin"; - version = "7.8.8"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz"; - sha512 = "LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg=="; - }; - }; - "@babel/helper-define-map-7.8.3" = { - name = "_at_babel_slash_helper-define-map"; - packageName = "@babel/helper-define-map"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz"; - sha512 = "PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g=="; - }; - }; - "@babel/helper-explode-assignable-expression-7.8.3" = { - name = "_at_babel_slash_helper-explode-assignable-expression"; - packageName = "@babel/helper-explode-assignable-expression"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz"; - sha512 = "N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw=="; - }; - }; - "@babel/helper-function-name-7.9.5" = { - name = "_at_babel_slash_helper-function-name"; - packageName = "@babel/helper-function-name"; - version = "7.9.5"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz"; - sha512 = "JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw=="; - }; - }; - "@babel/helper-get-function-arity-7.8.3" = { - name = "_at_babel_slash_helper-get-function-arity"; - packageName = "@babel/helper-get-function-arity"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz"; - sha512 = "FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA=="; - }; - }; - "@babel/helper-hoist-variables-7.8.3" = { - name = "_at_babel_slash_helper-hoist-variables"; - packageName = "@babel/helper-hoist-variables"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz"; - sha512 = "ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg=="; - }; - }; - "@babel/helper-member-expression-to-functions-7.8.3" = { - name = "_at_babel_slash_helper-member-expression-to-functions"; - packageName = "@babel/helper-member-expression-to-functions"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz"; - sha512 = "fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA=="; - }; - }; - "@babel/helper-module-imports-7.8.3" = { - name = "_at_babel_slash_helper-module-imports"; - packageName = "@babel/helper-module-imports"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz"; - sha512 = "R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg=="; - }; - }; - "@babel/helper-module-transforms-7.9.0" = { - name = "_at_babel_slash_helper-module-transforms"; - packageName = "@babel/helper-module-transforms"; - version = "7.9.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz"; - sha512 = "0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA=="; - }; - }; - "@babel/helper-optimise-call-expression-7.8.3" = { - name = "_at_babel_slash_helper-optimise-call-expression"; - packageName = "@babel/helper-optimise-call-expression"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz"; - sha512 = "Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ=="; - }; - }; - "@babel/helper-plugin-utils-7.8.3" = { - name = "_at_babel_slash_helper-plugin-utils"; - packageName = "@babel/helper-plugin-utils"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz"; - sha512 = "j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="; - }; - }; - "@babel/helper-regex-7.8.3" = { - name = "_at_babel_slash_helper-regex"; - packageName = "@babel/helper-regex"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz"; - sha512 = "BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ=="; - }; - }; - "@babel/helper-remap-async-to-generator-7.8.3" = { - name = "_at_babel_slash_helper-remap-async-to-generator"; - packageName = "@babel/helper-remap-async-to-generator"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz"; - sha512 = "kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA=="; - }; - }; - "@babel/helper-replace-supers-7.8.6" = { - name = "_at_babel_slash_helper-replace-supers"; - packageName = "@babel/helper-replace-supers"; - version = "7.8.6"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz"; - sha512 = "PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA=="; - }; - }; - "@babel/helper-simple-access-7.8.3" = { - name = "_at_babel_slash_helper-simple-access"; - packageName = "@babel/helper-simple-access"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz"; - sha512 = "VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw=="; - }; - }; - "@babel/helper-split-export-declaration-7.8.3" = { - name = "_at_babel_slash_helper-split-export-declaration"; - packageName = "@babel/helper-split-export-declaration"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz"; - sha512 = "3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA=="; - }; - }; - "@babel/helper-validator-identifier-7.9.5" = { - name = "_at_babel_slash_helper-validator-identifier"; - packageName = "@babel/helper-validator-identifier"; - version = "7.9.5"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz"; - sha512 = "/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g=="; - }; - }; - "@babel/helper-wrap-function-7.8.3" = { - name = "_at_babel_slash_helper-wrap-function"; - packageName = "@babel/helper-wrap-function"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz"; - sha512 = "LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ=="; - }; - }; - "@babel/helpers-7.9.2" = { - name = "_at_babel_slash_helpers"; - packageName = "@babel/helpers"; - version = "7.9.2"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz"; - sha512 = "JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA=="; - }; - }; - "@babel/highlight-7.9.0" = { - name = "_at_babel_slash_highlight"; - packageName = "@babel/highlight"; - version = "7.9.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz"; - sha512 = "lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ=="; - }; - }; - "@babel/parser-7.3.4" = { - name = "_at_babel_slash_parser"; - packageName = "@babel/parser"; - version = "7.3.4"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz"; - sha512 = "tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ=="; - }; - }; - "@babel/parser-7.9.4" = { - name = "_at_babel_slash_parser"; - packageName = "@babel/parser"; - version = "7.9.4"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz"; - sha512 = "bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA=="; - }; - }; - "@babel/plugin-proposal-async-generator-functions-7.8.3" = { - name = "_at_babel_slash_plugin-proposal-async-generator-functions"; - packageName = "@babel/plugin-proposal-async-generator-functions"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz"; - sha512 = "NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw=="; - }; - }; - "@babel/plugin-proposal-json-strings-7.8.3" = { - name = "_at_babel_slash_plugin-proposal-json-strings"; - packageName = "@babel/plugin-proposal-json-strings"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz"; - sha512 = "KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q=="; - }; - }; - "@babel/plugin-proposal-object-rest-spread-7.9.5" = { - name = "_at_babel_slash_plugin-proposal-object-rest-spread"; - packageName = "@babel/plugin-proposal-object-rest-spread"; - version = "7.9.5"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.5.tgz"; - sha512 = "VP2oXvAf7KCYTthbUHwBlewbl1Iq059f6seJGsxMizaCdgHIeczOr7FBqELhSqfkIl04Fi8okzWzl63UKbQmmg=="; - }; - }; - "@babel/plugin-proposal-optional-catch-binding-7.8.3" = { - name = "_at_babel_slash_plugin-proposal-optional-catch-binding"; - packageName = "@babel/plugin-proposal-optional-catch-binding"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz"; - sha512 = "0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw=="; - }; - }; - "@babel/plugin-proposal-unicode-property-regex-7.8.8" = { - name = "_at_babel_slash_plugin-proposal-unicode-property-regex"; - packageName = "@babel/plugin-proposal-unicode-property-regex"; - version = "7.8.8"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz"; - sha512 = "EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A=="; - }; - }; - "@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-flow-7.8.3" = { - name = "_at_babel_slash_plugin-syntax-flow"; - packageName = "@babel/plugin-syntax-flow"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.8.3.tgz"; - sha512 = "innAx3bUbA0KSYj2E2MNFSn9hiCeowOFLxlsuhXzw8hMQnzkDomUr9QCD7E9VF60NmnG1sNTuuv6Qf4f8INYsg=="; - }; - }; - "@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-jsx-7.8.3" = { - name = "_at_babel_slash_plugin-syntax-jsx"; - packageName = "@babel/plugin-syntax-jsx"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz"; - sha512 = "WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A=="; - }; - }; - "@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-transform-arrow-functions-7.8.3" = { - name = "_at_babel_slash_plugin-transform-arrow-functions"; - packageName = "@babel/plugin-transform-arrow-functions"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz"; - sha512 = "0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg=="; - }; - }; - "@babel/plugin-transform-async-to-generator-7.8.3" = { - name = "_at_babel_slash_plugin-transform-async-to-generator"; - packageName = "@babel/plugin-transform-async-to-generator"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz"; - sha512 = "imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ=="; - }; - }; - "@babel/plugin-transform-block-scoped-functions-7.8.3" = { - name = "_at_babel_slash_plugin-transform-block-scoped-functions"; - packageName = "@babel/plugin-transform-block-scoped-functions"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz"; - sha512 = "vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg=="; - }; - }; - "@babel/plugin-transform-block-scoping-7.8.3" = { - name = "_at_babel_slash_plugin-transform-block-scoping"; - packageName = "@babel/plugin-transform-block-scoping"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz"; - sha512 = "pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w=="; - }; - }; - "@babel/plugin-transform-classes-7.9.5" = { - name = "_at_babel_slash_plugin-transform-classes"; - packageName = "@babel/plugin-transform-classes"; - version = "7.9.5"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz"; - sha512 = "x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg=="; - }; - }; - "@babel/plugin-transform-computed-properties-7.8.3" = { - name = "_at_babel_slash_plugin-transform-computed-properties"; - packageName = "@babel/plugin-transform-computed-properties"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz"; - sha512 = "O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA=="; - }; - }; - "@babel/plugin-transform-destructuring-7.9.5" = { - name = "_at_babel_slash_plugin-transform-destructuring"; - packageName = "@babel/plugin-transform-destructuring"; - version = "7.9.5"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz"; - sha512 = "j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q=="; - }; - }; - "@babel/plugin-transform-dotall-regex-7.8.3" = { - name = "_at_babel_slash_plugin-transform-dotall-regex"; - packageName = "@babel/plugin-transform-dotall-regex"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz"; - sha512 = "kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw=="; - }; - }; - "@babel/plugin-transform-duplicate-keys-7.8.3" = { - name = "_at_babel_slash_plugin-transform-duplicate-keys"; - packageName = "@babel/plugin-transform-duplicate-keys"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz"; - sha512 = "s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ=="; - }; - }; - "@babel/plugin-transform-exponentiation-operator-7.8.3" = { - name = "_at_babel_slash_plugin-transform-exponentiation-operator"; - packageName = "@babel/plugin-transform-exponentiation-operator"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz"; - sha512 = "zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ=="; - }; - }; - "@babel/plugin-transform-flow-strip-types-7.3.4" = { - name = "_at_babel_slash_plugin-transform-flow-strip-types"; - packageName = "@babel/plugin-transform-flow-strip-types"; - version = "7.3.4"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.3.4.tgz"; - sha512 = "PmQC9R7DwpBFA+7ATKMyzViz3zCaMNouzZMPZN2K5PnbBbtL3AXFYTkDk+Hey5crQq2A90UG5Uthz0mel+XZrA=="; - }; - }; - "@babel/plugin-transform-for-of-7.9.0" = { - name = "_at_babel_slash_plugin-transform-for-of"; - packageName = "@babel/plugin-transform-for-of"; - version = "7.9.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz"; - sha512 = "lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ=="; - }; - }; - "@babel/plugin-transform-function-name-7.8.3" = { - name = "_at_babel_slash_plugin-transform-function-name"; - packageName = "@babel/plugin-transform-function-name"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz"; - sha512 = "rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ=="; - }; - }; - "@babel/plugin-transform-literals-7.8.3" = { - name = "_at_babel_slash_plugin-transform-literals"; - packageName = "@babel/plugin-transform-literals"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz"; - sha512 = "3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A=="; - }; - }; - "@babel/plugin-transform-modules-amd-7.9.0" = { - name = "_at_babel_slash_plugin-transform-modules-amd"; - packageName = "@babel/plugin-transform-modules-amd"; - version = "7.9.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz"; - sha512 = "vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q=="; - }; - }; - "@babel/plugin-transform-modules-commonjs-7.2.0" = { - name = "_at_babel_slash_plugin-transform-modules-commonjs"; - packageName = "@babel/plugin-transform-modules-commonjs"; - version = "7.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz"; - sha512 = "V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ=="; - }; - }; - "@babel/plugin-transform-modules-systemjs-7.9.0" = { - name = "_at_babel_slash_plugin-transform-modules-systemjs"; - packageName = "@babel/plugin-transform-modules-systemjs"; - version = "7.9.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz"; - sha512 = "FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ=="; - }; - }; - "@babel/plugin-transform-modules-umd-7.9.0" = { - name = "_at_babel_slash_plugin-transform-modules-umd"; - packageName = "@babel/plugin-transform-modules-umd"; - version = "7.9.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz"; - sha512 = "uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ=="; - }; - }; - "@babel/plugin-transform-named-capturing-groups-regex-7.8.3" = { - name = "_at_babel_slash_plugin-transform-named-capturing-groups-regex"; - packageName = "@babel/plugin-transform-named-capturing-groups-regex"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz"; - sha512 = "f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw=="; - }; - }; - "@babel/plugin-transform-new-target-7.8.3" = { - name = "_at_babel_slash_plugin-transform-new-target"; - packageName = "@babel/plugin-transform-new-target"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz"; - sha512 = "QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw=="; - }; - }; - "@babel/plugin-transform-object-super-7.8.3" = { - name = "_at_babel_slash_plugin-transform-object-super"; - packageName = "@babel/plugin-transform-object-super"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz"; - sha512 = "57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ=="; - }; - }; - "@babel/plugin-transform-parameters-7.9.5" = { - name = "_at_babel_slash_plugin-transform-parameters"; - packageName = "@babel/plugin-transform-parameters"; - version = "7.9.5"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz"; - sha512 = "0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA=="; - }; - }; - "@babel/plugin-transform-react-jsx-7.3.0" = { - name = "_at_babel_slash_plugin-transform-react-jsx"; - packageName = "@babel/plugin-transform-react-jsx"; - version = "7.3.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz"; - sha512 = "a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg=="; - }; - }; - "@babel/plugin-transform-regenerator-7.8.7" = { - name = "_at_babel_slash_plugin-transform-regenerator"; - packageName = "@babel/plugin-transform-regenerator"; - version = "7.8.7"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz"; - sha512 = "TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA=="; - }; - }; - "@babel/plugin-transform-shorthand-properties-7.8.3" = { - name = "_at_babel_slash_plugin-transform-shorthand-properties"; - packageName = "@babel/plugin-transform-shorthand-properties"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz"; - sha512 = "I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w=="; - }; - }; - "@babel/plugin-transform-spread-7.8.3" = { - name = "_at_babel_slash_plugin-transform-spread"; - packageName = "@babel/plugin-transform-spread"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz"; - sha512 = "CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g=="; - }; - }; - "@babel/plugin-transform-sticky-regex-7.8.3" = { - name = "_at_babel_slash_plugin-transform-sticky-regex"; - packageName = "@babel/plugin-transform-sticky-regex"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz"; - sha512 = "9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw=="; - }; - }; - "@babel/plugin-transform-template-literals-7.8.3" = { - name = "_at_babel_slash_plugin-transform-template-literals"; - packageName = "@babel/plugin-transform-template-literals"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz"; - sha512 = "820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ=="; - }; - }; - "@babel/plugin-transform-typeof-symbol-7.8.4" = { - name = "_at_babel_slash_plugin-transform-typeof-symbol"; - packageName = "@babel/plugin-transform-typeof-symbol"; - version = "7.8.4"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz"; - sha512 = "2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg=="; - }; - }; - "@babel/plugin-transform-unicode-regex-7.8.3" = { - name = "_at_babel_slash_plugin-transform-unicode-regex"; - packageName = "@babel/plugin-transform-unicode-regex"; - version = "7.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz"; - sha512 = "+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw=="; - }; - }; - "@babel/preset-env-7.3.4" = { - name = "_at_babel_slash_preset-env"; - packageName = "@babel/preset-env"; - version = "7.3.4"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.4.tgz"; - sha512 = "2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA=="; - }; - }; - "@babel/runtime-7.3.4" = { - name = "_at_babel_slash_runtime"; - packageName = "@babel/runtime"; - version = "7.3.4"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.4.tgz"; - sha512 = "IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g=="; - }; - }; - "@babel/runtime-7.9.2" = { - name = "_at_babel_slash_runtime"; - packageName = "@babel/runtime"; - version = "7.9.2"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz"; - sha512 = "NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q=="; - }; - }; - "@babel/template-7.2.2" = { - name = "_at_babel_slash_template"; - packageName = "@babel/template"; - version = "7.2.2"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz"; - sha512 = "zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g=="; - }; - }; - "@babel/template-7.8.6" = { - name = "_at_babel_slash_template"; - packageName = "@babel/template"; - version = "7.8.6"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz"; - sha512 = "zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg=="; - }; - }; - "@babel/traverse-7.3.4" = { - name = "_at_babel_slash_traverse"; - packageName = "@babel/traverse"; - version = "7.3.4"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz"; - sha512 = "TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ=="; - }; - }; - "@babel/traverse-7.9.5" = { - name = "_at_babel_slash_traverse"; - packageName = "@babel/traverse"; - version = "7.9.5"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz"; - sha512 = "c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ=="; - }; - }; - "@babel/types-7.3.4" = { - name = "_at_babel_slash_types"; - packageName = "@babel/types"; - version = "7.3.4"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz"; - sha512 = "WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ=="; - }; - }; - "@babel/types-7.9.5" = { - name = "_at_babel_slash_types"; - packageName = "@babel/types"; - version = "7.9.5"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz"; - sha512 = "XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg=="; - }; - }; - "@iarna/toml-2.2.5" = { - name = "_at_iarna_slash_toml"; - packageName = "@iarna/toml"; - version = "2.2.5"; - src = fetchurl { - url = "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz"; - sha512 = "trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg=="; - }; - }; - "@mrmlnc/readdir-enhanced-2.2.1" = { - name = "_at_mrmlnc_slash_readdir-enhanced"; - packageName = "@mrmlnc/readdir-enhanced"; - version = "2.2.1"; - src = fetchurl { - url = "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz"; - sha512 = "bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g=="; - }; - }; - "@nodelib/fs.stat-1.1.3" = { - name = "_at_nodelib_slash_fs.stat"; - packageName = "@nodelib/fs.stat"; - version = "1.1.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz"; - sha512 = "shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw=="; - }; - }; - "@parcel/fs-1.11.0" = { - name = "_at_parcel_slash_fs"; - packageName = "@parcel/fs"; - version = "1.11.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@parcel/fs/-/fs-1.11.0.tgz"; - sha512 = "86RyEqULbbVoeo8OLcv+LQ1Vq2PKBAvWTU9fCgALxuCTbbs5Ppcvll4Vr+Ko1AnmMzja/k++SzNAwJfeQXVlpA=="; - }; - }; - "@parcel/logger-1.11.1" = { - name = "_at_parcel_slash_logger"; - packageName = "@parcel/logger"; - version = "1.11.1"; - src = fetchurl { - url = "https://registry.npmjs.org/@parcel/logger/-/logger-1.11.1.tgz"; - sha512 = "9NF3M6UVeP2udOBDILuoEHd8VrF4vQqoWHEafymO1pfSoOMfxrSJZw1MfyAAIUN/IFp9qjcpDCUbDZB+ioVevA=="; - }; - }; - "@parcel/utils-1.11.0" = { - name = "_at_parcel_slash_utils"; - packageName = "@parcel/utils"; - version = "1.11.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@parcel/utils/-/utils-1.11.0.tgz"; - sha512 = "cA3p4jTlaMeOtAKR/6AadanOPvKeg8VwgnHhOyfi0yClD0TZS/hi9xu12w4EzA/8NtHu0g6o4RDfcNjqN8l1AQ=="; - }; - }; - "@parcel/watcher-1.12.1" = { - name = "_at_parcel_slash_watcher"; - packageName = "@parcel/watcher"; - version = "1.12.1"; - src = fetchurl { - url = "https://registry.npmjs.org/@parcel/watcher/-/watcher-1.12.1.tgz"; - sha512 = "od+uCtCxC/KoNQAIE1vWx1YTyKYY+7CTrxBJPRh3cDWw/C0tCtlBMVlrbplscGoEpt6B27KhJDCv82PBxOERNA=="; - }; - }; - "@parcel/workers-1.11.0" = { - name = "_at_parcel_slash_workers"; - packageName = "@parcel/workers"; - version = "1.11.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@parcel/workers/-/workers-1.11.0.tgz"; - sha512 = "USSjRAAQYsZFlv43FUPdD+jEGML5/8oLF0rUzPQTtK4q9kvaXr49F5ZplyLz5lox78cLZ0TxN2bIDQ1xhOkulQ=="; - }; - }; - "@types/q-1.5.2" = { - name = "_at_types_slash_q"; - packageName = "@types/q"; - version = "1.5.2"; - src = fetchurl { - url = "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz"; - sha512 = "ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw=="; - }; - }; - "abab-2.0.3" = { - name = "abab"; - packageName = "abab"; - version = "2.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz"; - sha512 = "tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg=="; - }; - }; - "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=="; - }; - }; - "acorn-6.4.1" = { - name = "acorn"; - packageName = "acorn"; - version = "6.4.1"; - src = fetchurl { - url = "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz"; - sha512 = "ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA=="; - }; - }; - "acorn-7.1.1" = { - name = "acorn"; - packageName = "acorn"; - version = "7.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz"; - sha512 = "add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg=="; - }; - }; - "acorn-globals-4.3.4" = { - name = "acorn-globals"; - packageName = "acorn-globals"; - version = "4.3.4"; - src = fetchurl { - url = "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz"; - sha512 = "clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A=="; - }; - }; - "acorn-walk-6.2.0" = { - name = "acorn-walk"; - packageName = "acorn-walk"; - version = "6.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz"; - sha512 = "7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA=="; - }; - }; - "ajv-6.12.2" = { - name = "ajv"; - packageName = "ajv"; - version = "6.12.2"; - src = fetchurl { - url = "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz"; - sha512 = "k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ=="; - }; - }; - "alphanum-sort-1.0.2" = { - name = "alphanum-sort"; - packageName = "alphanum-sort"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz"; - sha1 = "97a1119649b211ad33691d9f9f486a8ec9fbe0a3"; - }; - }; - "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-3.0.0" = { - name = "ansi-regex"; - packageName = "ansi-regex"; - version = "3.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz"; - sha1 = "ed0317c322064f79466c02966bddb605ab37d998"; - }; - }; - "ansi-regex-4.1.0" = { - name = "ansi-regex"; - packageName = "ansi-regex"; - version = "4.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz"; - sha512 = "1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="; - }; - }; - "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-to-html-0.6.14" = { - name = "ansi-to-html"; - packageName = "ansi-to-html"; - version = "0.6.14"; - src = fetchurl { - url = "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.14.tgz"; - sha512 = "7ZslfB1+EnFSDO5Ju+ue5Y6It19DRnZXWv8jrGHgIlPna5Mh4jz7BV5jCbQneXNFurQcKoolaaAjHtgSBfOIuA=="; - }; - }; - "anymatch-2.0.0" = { - name = "anymatch"; - packageName = "anymatch"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz"; - sha512 = "5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw=="; - }; - }; - "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=="; - }; - }; - "arr-diff-4.0.0" = { - name = "arr-diff"; - packageName = "arr-diff"; - version = "4.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz"; - sha1 = "d6461074febfec71e7e15235761a329a5dc7c520"; - }; - }; - "arr-flatten-1.1.0" = { - name = "arr-flatten"; - packageName = "arr-flatten"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz"; - sha512 = "L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="; - }; - }; - "arr-union-3.1.0" = { - name = "arr-union"; - packageName = "arr-union"; - version = "3.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz"; - sha1 = "e39b09aea9def866a8f206e288af63919bae39c4"; - }; - }; - "array-equal-1.0.0" = { - name = "array-equal"; - packageName = "array-equal"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz"; - sha1 = "8c2a5ef2472fd9ea742b04c77a75093ba2757c93"; - }; - }; - "array-unique-0.3.2" = { - name = "array-unique"; - packageName = "array-unique"; - version = "0.3.2"; - src = fetchurl { - url = "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz"; - sha1 = "a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"; - }; - }; - "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-4.10.1" = { - name = "asn1.js"; - packageName = "asn1.js"; - version = "4.10.1"; - src = fetchurl { - url = "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz"; - sha512 = "p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw=="; - }; - }; - "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"; - }; - }; - "assign-symbols-1.0.0" = { - name = "assign-symbols"; - packageName = "assign-symbols"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz"; - sha1 = "59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"; - }; - }; - "async-each-1.0.3" = { - name = "async-each"; - packageName = "async-each"; - version = "1.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz"; - sha512 = "z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ=="; - }; - }; - "async-limiter-1.0.1" = { - name = "async-limiter"; - packageName = "async-limiter"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz"; - sha512 = "csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="; - }; - }; - "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=="; - }; - }; - "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.9.1" = { - name = "aws4"; - packageName = "aws4"; - version = "1.9.1"; - src = fetchurl { - url = "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz"; - sha512 = "wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug=="; - }; - }; - "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-runtime-6.26.0" = { - name = "babel-runtime"; - packageName = "babel-runtime"; - version = "6.26.0"; - src = fetchurl { - url = "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz"; - sha1 = "965c7058668e82b55d7bfe04ff2337bc8b5647fe"; - }; - }; - "babel-types-6.26.0" = { - name = "babel-types"; - packageName = "babel-types"; - version = "6.26.0"; - src = fetchurl { - url = "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz"; - sha1 = "a3b073f94ab49eb6fa55cd65227a334380632497"; - }; - }; - "babylon-walk-1.0.2" = { - name = "babylon-walk"; - packageName = "babylon-walk"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/babylon-walk/-/babylon-walk-1.0.2.tgz"; - sha1 = "3b15a5ddbb482a78b4ce9c01c8ba181702d9d6ce"; - }; - }; - "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"; - }; - }; - "base-0.11.2" = { - name = "base"; - packageName = "base"; - version = "0.11.2"; - src = fetchurl { - url = "https://registry.npmjs.org/base/-/base-0.11.2.tgz"; - sha512 = "5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg=="; - }; - }; - "base64-js-1.3.1" = { - name = "base64-js"; - packageName = "base64-js"; - version = "1.3.1"; - src = fetchurl { - url = "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz"; - sha512 = "mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="; - }; - }; - "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"; - }; - }; - "binary-extensions-1.13.1" = { - name = "binary-extensions"; - packageName = "binary-extensions"; - version = "1.13.1"; - src = fetchurl { - url = "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz"; - sha512 = "Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw=="; - }; - }; - "bindings-1.5.0" = { - name = "bindings"; - packageName = "bindings"; - version = "1.5.0"; - src = fetchurl { - url = "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz"; - sha512 = "p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="; - }; - }; - "bn.js-4.11.8" = { - name = "bn.js"; - packageName = "bn.js"; - version = "4.11.8"; - src = fetchurl { - url = "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz"; - sha512 = "ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="; - }; - }; - "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"; - }; - }; - "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-2.3.2" = { - name = "braces"; - packageName = "braces"; - version = "2.3.2"; - src = fetchurl { - url = "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz"; - sha512 = "aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w=="; - }; - }; - "brfs-1.6.1" = { - name = "brfs"; - packageName = "brfs"; - version = "1.6.1"; - src = fetchurl { - url = "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz"; - sha512 = "OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ=="; - }; - }; - "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-process-hrtime-1.0.0" = { - name = "browser-process-hrtime"; - packageName = "browser-process-hrtime"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz"; - sha512 = "9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="; - }; - }; - "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.0.1" = { - name = "browserify-rsa"; - packageName = "browserify-rsa"; - version = "4.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz"; - sha1 = "21e0abfaf6f2029cf2fafb133567a701d4135524"; - }; - }; - "browserify-sign-4.0.4" = { - name = "browserify-sign"; - packageName = "browserify-sign"; - version = "4.0.4"; - src = fetchurl { - url = "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz"; - sha1 = "aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"; - }; - }; - "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.12.0" = { - name = "browserslist"; - packageName = "browserslist"; - version = "4.12.0"; - src = fetchurl { - url = "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz"; - sha512 = "UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg=="; - }; - }; - "buffer-4.9.2" = { - name = "buffer"; - packageName = "buffer"; - version = "4.9.2"; - src = fetchurl { - url = "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz"; - sha512 = "xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg=="; - }; - }; - "buffer-equal-0.0.1" = { - name = "buffer-equal"; - packageName = "buffer-equal"; - version = "0.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz"; - sha1 = "91bc74b11ea405bc916bc6aa908faafa5b4aac4b"; - }; - }; - "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-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"; - }; - }; - "cache-base-1.0.1" = { - name = "cache-base"; - packageName = "cache-base"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz"; - sha512 = "AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ=="; - }; - }; - "call-me-maybe-1.0.1" = { - name = "call-me-maybe"; - packageName = "call-me-maybe"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz"; - sha1 = "26d208ea89e37b5cbde60250a15f031c16a4d66b"; - }; - }; - "caller-callsite-2.0.0" = { - name = "caller-callsite"; - packageName = "caller-callsite"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz"; - sha1 = "847e0fce0a223750a9a027c54b33731ad3154134"; - }; - }; - "caller-path-2.0.0" = { - name = "caller-path"; - packageName = "caller-path"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz"; - sha1 = "468f83044e369ab2010fac5f06ceee15bb2cb1f4"; - }; - }; - "callsites-2.0.0" = { - name = "callsites"; - packageName = "callsites"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz"; - sha1 = "06eb84f00eea413da86affefacbffb36093b3c50"; - }; - }; - "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-api-3.0.0" = { - name = "caniuse-api"; - packageName = "caniuse-api"; - version = "3.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz"; - sha512 = "bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw=="; - }; - }; - "caniuse-lite-1.0.30001048" = { - name = "caniuse-lite"; - packageName = "caniuse-lite"; - version = "1.0.30001048"; - src = fetchurl { - url = "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001048.tgz"; - sha512 = "g1iSHKVxornw0K8LG9LLdf+Fxnv7T1Z+mMsf0/YYLclQX4Cd522Ap0Lrw6NFqHgezit78dtyWxzlV2Xfc7vgRg=="; - }; - }; - "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=="; - }; - }; - "chokidar-2.1.8" = { - name = "chokidar"; - packageName = "chokidar"; - version = "2.1.8"; - src = fetchurl { - url = "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz"; - sha512 = "ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg=="; - }; - }; - "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=="; - }; - }; - "class-utils-0.3.6" = { - name = "class-utils"; - packageName = "class-utils"; - version = "0.3.6"; - src = fetchurl { - url = "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz"; - sha512 = "qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg=="; - }; - }; - "cli-cursor-2.1.0" = { - name = "cli-cursor"; - packageName = "cli-cursor"; - version = "2.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz"; - sha1 = "b35dac376479facc3e94747d41d0d0f5238ffcb5"; - }; - }; - "cli-spinners-1.3.1" = { - name = "cli-spinners"; - packageName = "cli-spinners"; - version = "1.3.1"; - src = fetchurl { - url = "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz"; - sha512 = "1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg=="; - }; - }; - "cliui-5.0.0" = { - name = "cliui"; - packageName = "cliui"; - version = "5.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz"; - sha512 = "PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA=="; - }; - }; - "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-2.1.2" = { - name = "clone"; - packageName = "clone"; - version = "2.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz"; - sha1 = "1b7f4b9f591f1e8f83670401600345a02887435f"; - }; - }; - "clones-1.2.0" = { - name = "clones"; - packageName = "clones"; - version = "1.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/clones/-/clones-1.2.0.tgz"; - sha512 = "FXDYw4TjR8wgPZYui2LeTqWh1BLpfQ8lB6upMtlpDF6WlOOxghmTTxWyngdKTgozqBgKnHbTVwTE+hOHqAykuQ=="; - }; - }; - "coa-2.0.2" = { - name = "coa"; - packageName = "coa"; - version = "2.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz"; - sha512 = "q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA=="; - }; - }; - "collection-visit-1.0.0" = { - name = "collection-visit"; - packageName = "collection-visit"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz"; - sha1 = "4bc0373c164bc3291b4d368c829cf1a80a59dca0"; - }; - }; - "color-3.1.2" = { - name = "color"; - packageName = "color"; - version = "3.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/color/-/color-3.1.2.tgz"; - sha512 = "vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg=="; - }; - }; - "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-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-string-1.5.3" = { - name = "color-string"; - packageName = "color-string"; - version = "1.5.3"; - src = fetchurl { - url = "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz"; - sha512 = "dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw=="; - }; - }; - "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=="; - }; - }; - "command-exists-1.2.9" = { - name = "command-exists"; - packageName = "command-exists"; - version = "1.2.9"; - src = fetchurl { - url = "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz"; - sha512 = "LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w=="; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - "config-chain-1.1.12" = { - name = "config-chain"; - packageName = "config-chain"; - version = "1.1.12"; - src = fetchurl { - url = "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz"; - sha512 = "a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA=="; - }; - }; - "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=="; - }; - }; - "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"; - }; - }; - "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=="; - }; - }; - "copy-descriptor-0.1.1" = { - name = "copy-descriptor"; - packageName = "copy-descriptor"; - version = "0.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz"; - sha1 = "676f6eb3c39997c2ee1ac3a924fd6124748f578d"; - }; - }; - "core-js-2.6.11" = { - name = "core-js"; - packageName = "core-js"; - version = "2.6.11"; - src = fetchurl { - url = "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz"; - sha512 = "5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="; - }; - }; - "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"; - }; - }; - "cosmiconfig-5.2.1" = { - name = "cosmiconfig"; - packageName = "cosmiconfig"; - version = "5.2.1"; - src = fetchurl { - url = "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz"; - sha512 = "H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA=="; - }; - }; - "create-ecdh-4.0.3" = { - name = "create-ecdh"; - packageName = "create-ecdh"; - version = "4.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz"; - sha512 = "GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw=="; - }; - }; - "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=="; - }; - }; - "cross-spawn-6.0.5" = { - name = "cross-spawn"; - packageName = "cross-spawn"; - version = "6.0.5"; - src = fetchurl { - url = "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz"; - sha512 = "eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ=="; - }; - }; - "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-color-names-0.0.4" = { - name = "css-color-names"; - packageName = "css-color-names"; - version = "0.0.4"; - src = fetchurl { - url = "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz"; - sha1 = "808adc2e79cf84738069b646cb20ec27beb629e0"; - }; - }; - "css-declaration-sorter-4.0.1" = { - name = "css-declaration-sorter"; - packageName = "css-declaration-sorter"; - version = "4.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz"; - sha512 = "BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA=="; - }; - }; - "css-modules-loader-core-1.1.0" = { - name = "css-modules-loader-core"; - packageName = "css-modules-loader-core"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz"; - sha1 = "5908668294a1becd261ae0a4ce21b0b551f21d16"; - }; - }; - "css-select-2.1.0" = { - name = "css-select"; - packageName = "css-select"; - version = "2.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz"; - sha512 = "Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ=="; - }; - }; - "css-select-base-adapter-0.1.1" = { - name = "css-select-base-adapter"; - packageName = "css-select-base-adapter"; - version = "0.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz"; - sha512 = "jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w=="; - }; - }; - "css-selector-tokenizer-0.7.2" = { - name = "css-selector-tokenizer"; - packageName = "css-selector-tokenizer"; - version = "0.7.2"; - src = fetchurl { - url = "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz"; - sha512 = "yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw=="; - }; - }; - "css-tree-1.0.0-alpha.37" = { - name = "css-tree"; - packageName = "css-tree"; - version = "1.0.0-alpha.37"; - src = fetchurl { - url = "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz"; - sha512 = "DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg=="; - }; - }; - "css-tree-1.0.0-alpha.39" = { - name = "css-tree"; - packageName = "css-tree"; - version = "1.0.0-alpha.39"; - src = fetchurl { - url = "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz"; - sha512 = "7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA=="; - }; - }; - "css-what-3.2.1" = { - name = "css-what"; - packageName = "css-what"; - version = "3.2.1"; - src = fetchurl { - url = "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz"; - sha512 = "WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw=="; - }; - }; - "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=="; - }; - }; - "cssnano-4.1.10" = { - name = "cssnano"; - packageName = "cssnano"; - version = "4.1.10"; - src = fetchurl { - url = "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz"; - sha512 = "5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ=="; - }; - }; - "cssnano-preset-default-4.0.7" = { - name = "cssnano-preset-default"; - packageName = "cssnano-preset-default"; - version = "4.0.7"; - src = fetchurl { - url = "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz"; - sha512 = "x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA=="; - }; - }; - "cssnano-util-get-arguments-4.0.0" = { - name = "cssnano-util-get-arguments"; - packageName = "cssnano-util-get-arguments"; - version = "4.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz"; - sha1 = "ed3a08299f21d75741b20f3b81f194ed49cc150f"; - }; - }; - "cssnano-util-get-match-4.0.0" = { - name = "cssnano-util-get-match"; - packageName = "cssnano-util-get-match"; - version = "4.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz"; - sha1 = "c0e4ca07f5386bb17ec5e52250b4f5961365156d"; - }; - }; - "cssnano-util-raw-cache-4.0.1" = { - name = "cssnano-util-raw-cache"; - packageName = "cssnano-util-raw-cache"; - version = "4.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz"; - sha512 = "qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA=="; - }; - }; - "cssnano-util-same-parent-4.0.1" = { - name = "cssnano-util-same-parent"; - packageName = "cssnano-util-same-parent"; - version = "4.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz"; - sha512 = "WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q=="; - }; - }; - "csso-4.0.3" = { - name = "csso"; - packageName = "csso"; - version = "4.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz"; - sha512 = "NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ=="; - }; - }; - "cssom-0.3.8" = { - name = "cssom"; - packageName = "cssom"; - version = "0.3.8"; - src = fetchurl { - url = "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz"; - sha512 = "b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="; - }; - }; - "cssstyle-1.4.0" = { - name = "cssstyle"; - packageName = "cssstyle"; - version = "1.4.0"; - src = fetchurl { - url = "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz"; - sha512 = "GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA=="; - }; - }; - "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"; - }; - }; - "data-urls-1.1.0" = { - name = "data-urls"; - packageName = "data-urls"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz"; - sha512 = "YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ=="; - }; - }; - "deasync-0.1.19" = { - name = "deasync"; - packageName = "deasync"; - version = "0.1.19"; - src = fetchurl { - url = "https://registry.npmjs.org/deasync/-/deasync-0.1.19.tgz"; - sha512 = "oh3MRktfnPlLysCPpBpKZZzb4cUC/p0aA3SyRGp15lN30juJBTo/CiD0d4fR+f1kBtUQoJj1NE9RPNWQ7BQ9Mg=="; - }; - }; - "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-4.1.1" = { - name = "debug"; - packageName = "debug"; - version = "4.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz"; - sha512 = "pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw=="; - }; - }; - "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"; - }; - }; - "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"; - }; - }; - "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-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=="; - }; - }; - "define-property-0.2.5" = { - name = "define-property"; - packageName = "define-property"; - version = "0.2.5"; - src = fetchurl { - url = "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz"; - sha1 = "c35b1ef918ec3c990f9a5bc57be04aacec5c8116"; - }; - }; - "define-property-1.0.0" = { - name = "define-property"; - packageName = "define-property"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz"; - sha1 = "769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"; - }; - }; - "define-property-2.0.2" = { - name = "define-property"; - packageName = "define-property"; - version = "2.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz"; - sha512 = "jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ=="; - }; - }; - "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"; - }; - }; - "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"; - }; - }; - "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"; - }; - }; - "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=="; - }; - }; - "dom-serializer-0.2.2" = { - name = "dom-serializer"; - packageName = "dom-serializer"; - version = "0.2.2"; - src = fetchurl { - url = "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz"; - sha512 = "2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g=="; - }; - }; - "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-1.3.1" = { - name = "domelementtype"; - packageName = "domelementtype"; - version = "1.3.1"; - src = fetchurl { - url = "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz"; - sha512 = "BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="; - }; - }; - "domelementtype-2.0.1" = { - name = "domelementtype"; - packageName = "domelementtype"; - version = "2.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz"; - sha512 = "5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ=="; - }; - }; - "domexception-1.0.1" = { - name = "domexception"; - packageName = "domexception"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz"; - sha512 = "raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug=="; - }; - }; - "domhandler-2.4.2" = { - name = "domhandler"; - packageName = "domhandler"; - version = "2.4.2"; - src = fetchurl { - url = "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz"; - sha512 = "JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA=="; - }; - }; - "domutils-1.7.0" = { - name = "domutils"; - packageName = "domutils"; - version = "1.7.0"; - src = fetchurl { - url = "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz"; - sha512 = "Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg=="; - }; - }; - "dot-prop-5.2.0" = { - name = "dot-prop"; - packageName = "dot-prop"; - version = "5.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz"; - sha512 = "uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A=="; - }; - }; - "dotenv-5.0.1" = { - name = "dotenv"; - packageName = "dotenv"; - version = "5.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz"; - sha512 = "4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow=="; - }; - }; - "dotenv-expand-4.2.0" = { - name = "dotenv-expand"; - packageName = "dotenv-expand"; - version = "4.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz"; - sha1 = "def1f1ca5d6059d24a766e587942c21106ce1275"; - }; - }; - "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"; - }; - }; - "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"; - }; - }; - "editorconfig-0.15.3" = { - name = "editorconfig"; - packageName = "editorconfig"; - version = "0.15.3"; - src = fetchurl { - url = "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz"; - sha512 = "M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g=="; - }; - }; - "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.3.418" = { - name = "electron-to-chromium"; - packageName = "electron-to-chromium"; - version = "1.3.418"; - src = fetchurl { - url = "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.418.tgz"; - sha512 = "i2QrQtHes5fK/F9QGG5XacM5WKEuR322fxTYF9e8O9Gu0mc0WmjjwGpV8c7Htso6Zf2Di18lc3SIPxmMeRFBug=="; - }; - }; - "elliptic-6.5.2" = { - name = "elliptic"; - packageName = "elliptic"; - version = "6.5.2"; - src = fetchurl { - url = "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz"; - sha512 = "f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw=="; - }; - }; - "elm-hot-1.1.1" = { - name = "elm-hot"; - packageName = "elm-hot"; - version = "1.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/elm-hot/-/elm-hot-1.1.1.tgz"; - sha512 = "ZHjoHd2Ev6riNXNQirj3J+GKKXXwedAUikfFBYzlVL/+3CdGs96cpZ7nhAk4c5l//Qa9ymltrqX36mOlr0pPFA=="; - }; - }; - "emoji-regex-7.0.3" = { - name = "emoji-regex"; - packageName = "emoji-regex"; - version = "7.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz"; - sha512 = "CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="; - }; - }; - "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"; - }; - }; - "entities-1.1.2" = { - name = "entities"; - packageName = "entities"; - version = "1.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz"; - sha512 = "f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="; - }; - }; - "entities-2.0.0" = { - name = "entities"; - packageName = "entities"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz"; - sha512 = "D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw=="; - }; - }; - "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.17.5" = { - name = "es-abstract"; - packageName = "es-abstract"; - version = "1.17.5"; - src = fetchurl { - url = "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz"; - sha512 = "BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg=="; - }; - }; - "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=="; - }; - }; - "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.1" = { - name = "escodegen"; - packageName = "escodegen"; - version = "1.14.1"; - src = fetchurl { - url = "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz"; - sha512 = "Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ=="; - }; - }; - "escodegen-1.9.1" = { - name = "escodegen"; - packageName = "escodegen"; - version = "1.9.1"; - src = fetchurl { - url = "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz"; - sha512 = "6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q=="; - }; - }; - "esprima-3.1.3" = { - name = "esprima"; - packageName = "esprima"; - version = "3.1.3"; - src = fetchurl { - url = "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz"; - sha1 = "fdca51cee6133895e3c88d535ce49dbff62a4633"; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - "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"; - }; - }; - "events-3.1.0" = { - name = "events"; - packageName = "events"; - version = "3.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/events/-/events-3.1.0.tgz"; - sha512 = "Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg=="; - }; - }; - "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=="; - }; - }; - "expand-brackets-2.1.4" = { - name = "expand-brackets"; - packageName = "expand-brackets"; - version = "2.1.4"; - src = fetchurl { - url = "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz"; - sha1 = "b77735e315ce30f6b6eff0f83b04151a22449622"; - }; - }; - "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=="; - }; - }; - "extend-shallow-2.0.1" = { - name = "extend-shallow"; - packageName = "extend-shallow"; - version = "2.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz"; - sha1 = "51af7d614ad9a9f610ea1bafbb989d6b1c56890f"; - }; - }; - "extend-shallow-3.0.2" = { - name = "extend-shallow"; - packageName = "extend-shallow"; - version = "3.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz"; - sha1 = "26a71aaf073b39fb2127172746131c2704028db8"; - }; - }; - "extglob-2.0.4" = { - name = "extglob"; - packageName = "extglob"; - version = "2.0.4"; - src = fetchurl { - url = "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz"; - sha512 = "Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw=="; - }; - }; - "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=="; - }; - }; - "fast-deep-equal-3.1.1" = { - name = "fast-deep-equal"; - packageName = "fast-deep-equal"; - version = "3.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz"; - sha512 = "8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA=="; - }; - }; - "fast-glob-2.2.7" = { - name = "fast-glob"; - packageName = "fast-glob"; - version = "2.2.7"; - src = fetchurl { - url = "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz"; - sha512 = "g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw=="; - }; - }; - "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"; - }; - }; - "fastparse-1.1.2" = { - name = "fastparse"; - packageName = "fastparse"; - version = "1.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz"; - sha512 = "483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ=="; - }; - }; - "file-uri-to-path-1.0.0" = { - name = "file-uri-to-path"; - packageName = "file-uri-to-path"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz"; - sha512 = "0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="; - }; - }; - "filesize-3.6.1" = { - name = "filesize"; - packageName = "filesize"; - version = "3.6.1"; - src = fetchurl { - url = "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz"; - sha512 = "7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg=="; - }; - }; - "fill-range-4.0.0" = { - name = "fill-range"; - packageName = "fill-range"; - version = "4.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz"; - sha1 = "d544811d428f98eb06a63dc402d2403c328c38f7"; - }; - }; - "find-elm-dependencies-2.0.2" = { - name = "find-elm-dependencies"; - packageName = "find-elm-dependencies"; - version = "2.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/find-elm-dependencies/-/find-elm-dependencies-2.0.2.tgz"; - sha512 = "nM5UCbccD1G8CGK2GsM7ykG3ksOAl9E+34jiDfl07CAl2OPnLpBVWY2hlxEmIkSBfdJjSopEowWHrO0cI8RhxQ=="; - }; - }; - "find-up-2.1.0" = { - name = "find-up"; - packageName = "find-up"; - version = "2.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz"; - sha1 = "45d1b7e506c717ddd482775a2b77920a3c0c57a7"; - }; - }; - "find-up-3.0.0" = { - name = "find-up"; - packageName = "find-up"; - version = "3.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz"; - sha512 = "1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg=="; - }; - }; - "firstline-1.2.0" = { - name = "firstline"; - packageName = "firstline"; - version = "1.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/firstline/-/firstline-1.2.0.tgz"; - sha1 = "c9f4886e7f7fbf0afc12d71941dce06b192aea05"; - }; - }; - "for-in-1.0.2" = { - name = "for-in"; - packageName = "for-in"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz"; - sha1 = "81068d295a8142ec0ac726c6e2200c30fb6d5e80"; - }; - }; - "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=="; - }; - }; - "fragment-cache-0.2.1" = { - name = "fragment-cache"; - packageName = "fragment-cache"; - version = "0.2.1"; - src = fetchurl { - url = "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz"; - sha1 = "4290fad27f13e89be7f33799c6bc5a0abfff0d19"; - }; - }; - "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"; - }; - }; - "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"; - }; - }; - "fsevents-1.2.12" = { - name = "fsevents"; - packageName = "fsevents"; - version = "1.2.12"; - src = fetchurl { - url = "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz"; - sha512 = "Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q=="; - }; - }; - "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=="; - }; - }; - "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-port-3.2.0" = { - name = "get-port"; - packageName = "get-port"; - version = "3.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz"; - sha1 = "dd7ce7de187c06c8bf353796ac71e099f0980ebc"; - }; - }; - "get-value-2.0.6" = { - name = "get-value"; - packageName = "get-value"; - version = "2.0.6"; - src = fetchurl { - url = "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz"; - sha1 = "dc15ca1c672387ca76bd37ac0a395ba2042a2c28"; - }; - }; - "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.1.4" = { - name = "glob"; - packageName = "glob"; - version = "7.1.4"; - src = fetchurl { - url = "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz"; - sha512 = "hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A=="; - }; - }; - "glob-parent-3.1.0" = { - name = "glob-parent"; - packageName = "glob-parent"; - version = "3.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz"; - sha1 = "9e6af6299d8d3bd2bd40430832bd113df906c5ae"; - }; - }; - "glob-to-regexp-0.3.0" = { - name = "glob-to-regexp"; - packageName = "glob-to-regexp"; - version = "0.3.0"; - src = fetchurl { - url = "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz"; - sha1 = "8c5a1494d2066c570cc3bfe4496175acc4d502ab"; - }; - }; - "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=="; - }; - }; - "graceful-fs-4.2.3" = { - name = "graceful-fs"; - packageName = "graceful-fs"; - version = "4.2.3"; - src = fetchurl { - url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz"; - sha512 = "a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="; - }; - }; - "grapheme-breaker-0.3.2" = { - name = "grapheme-breaker"; - packageName = "grapheme-breaker"; - version = "0.3.2"; - src = fetchurl { - url = "https://registry.npmjs.org/grapheme-breaker/-/grapheme-breaker-0.3.2.tgz"; - sha1 = "5b9e6b78c3832452d2ba2bb1cb830f96276410ac"; - }; - }; - "har-schema-2.0.0" = { - name = "har-schema"; - packageName = "har-schema"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz"; - sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92"; - }; - }; - "har-validator-5.1.3" = { - name = "har-validator"; - packageName = "har-validator"; - version = "5.1.3"; - src = fetchurl { - url = "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz"; - sha512 = "sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g=="; - }; - }; - "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-flag-1.0.0" = { - name = "has-flag"; - packageName = "has-flag"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz"; - sha1 = "9d9e793165ce017a00f00418c43f942a7b1d11fa"; - }; - }; - "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-symbols-1.0.1" = { - name = "has-symbols"; - packageName = "has-symbols"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz"; - sha512 = "PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="; - }; - }; - "has-value-0.3.1" = { - name = "has-value"; - packageName = "has-value"; - version = "0.3.1"; - src = fetchurl { - url = "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz"; - sha1 = "7b1f58bada62ca827ec0a2078025654845995e1f"; - }; - }; - "has-value-1.0.0" = { - name = "has-value"; - packageName = "has-value"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz"; - sha1 = "18b281da585b1c5c51def24c930ed29a0be6b177"; - }; - }; - "has-values-0.1.4" = { - name = "has-values"; - packageName = "has-values"; - version = "0.1.4"; - src = fetchurl { - url = "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz"; - sha1 = "6d61de95d91dfca9b9a02089ad384bff8f62b771"; - }; - }; - "has-values-1.0.0" = { - name = "has-values"; - packageName = "has-values"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz"; - sha1 = "95b0b63fec2146619a6fe57fe75628d5a39efe4f"; - }; - }; - "hash-base-3.0.4" = { - name = "hash-base"; - packageName = "hash-base"; - version = "3.0.4"; - src = fetchurl { - url = "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz"; - sha1 = "5fc8686847ecd73499403319a6b0a3f3f6ae4918"; - }; - }; - "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=="; - }; - }; - "hex-color-regex-1.1.0" = { - name = "hex-color-regex"; - packageName = "hex-color-regex"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz"; - sha512 = "l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ=="; - }; - }; - "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"; - }; - }; - "hsl-regex-1.0.0" = { - name = "hsl-regex"; - packageName = "hsl-regex"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz"; - sha1 = "d49330c789ed819e276a4c0d272dffa30b18fe6e"; - }; - }; - "hsla-regex-1.0.0" = { - name = "hsla-regex"; - packageName = "hsla-regex"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz"; - sha1 = "c1ce7a3168c8c6614033a4b5f7877f3b225f9c38"; - }; - }; - "html-comment-regex-1.1.2" = { - name = "html-comment-regex"; - packageName = "html-comment-regex"; - version = "1.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz"; - sha512 = "P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ=="; - }; - }; - "html-encoding-sniffer-1.0.2" = { - name = "html-encoding-sniffer"; - packageName = "html-encoding-sniffer"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz"; - sha512 = "71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw=="; - }; - }; - "html-tags-1.2.0" = { - name = "html-tags"; - packageName = "html-tags"; - version = "1.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/html-tags/-/html-tags-1.2.0.tgz"; - sha1 = "c78de65b5663aa597989dd2b7ab49200d7e4db98"; - }; - }; - "htmlnano-0.2.5" = { - name = "htmlnano"; - packageName = "htmlnano"; - version = "0.2.5"; - src = fetchurl { - url = "https://registry.npmjs.org/htmlnano/-/htmlnano-0.2.5.tgz"; - sha512 = "X1iPSwXG/iF9bVs+/obt2n6F64uH0ETkA8zp7qFDmLW9/+A6ueHGeb/+qD67T21qUY22owZPMdawljN50ajkqA=="; - }; - }; - "htmlparser2-3.10.1" = { - name = "htmlparser2"; - packageName = "htmlparser2"; - version = "3.10.1"; - src = fetchurl { - url = "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz"; - sha512 = "IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ=="; - }; - }; - "http-errors-1.7.3" = { - name = "http-errors"; - packageName = "http-errors"; - version = "1.7.3"; - src = fetchurl { - url = "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz"; - sha512 = "ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw=="; - }; - }; - "http-signature-1.2.0" = { - name = "http-signature"; - packageName = "http-signature"; - version = "1.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz"; - sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1"; - }; - }; - "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"; - }; - }; - "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=="; - }; - }; - "icss-replace-symbols-1.1.0" = { - name = "icss-replace-symbols"; - packageName = "icss-replace-symbols"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz"; - sha1 = "06ea6f83679a7749e386cfe1fe812ae5db223ded"; - }; - }; - "ieee754-1.1.13" = { - name = "ieee754"; - packageName = "ieee754"; - version = "1.1.13"; - src = fetchurl { - url = "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz"; - sha512 = "4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="; - }; - }; - "import-fresh-2.0.0" = { - name = "import-fresh"; - packageName = "import-fresh"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz"; - sha1 = "d81355c15612d386c61f9ddd3922d4304822a546"; - }; - }; - "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"; - }; - }; - "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-1.3.5" = { - name = "ini"; - packageName = "ini"; - version = "1.3.5"; - src = fetchurl { - url = "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz"; - sha512 = "RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="; - }; - }; - "invariant-2.2.4" = { - name = "invariant"; - packageName = "invariant"; - version = "2.2.4"; - src = fetchurl { - url = "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz"; - sha512 = "phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA=="; - }; - }; - "is-absolute-url-2.1.0" = { - name = "is-absolute-url"; - packageName = "is-absolute-url"; - version = "2.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz"; - sha1 = "50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"; - }; - }; - "is-absolute-url-3.0.3" = { - name = "is-absolute-url"; - packageName = "is-absolute-url"; - version = "3.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz"; - sha512 = "opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q=="; - }; - }; - "is-accessor-descriptor-0.1.6" = { - name = "is-accessor-descriptor"; - packageName = "is-accessor-descriptor"; - version = "0.1.6"; - src = fetchurl { - url = "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz"; - sha1 = "a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"; - }; - }; - "is-accessor-descriptor-1.0.0" = { - name = "is-accessor-descriptor"; - packageName = "is-accessor-descriptor"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz"; - sha512 = "m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ=="; - }; - }; - "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-arrayish-0.3.2" = { - name = "is-arrayish"; - packageName = "is-arrayish"; - version = "0.3.2"; - src = fetchurl { - url = "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz"; - sha512 = "eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="; - }; - }; - "is-binary-path-1.0.1" = { - name = "is-binary-path"; - packageName = "is-binary-path"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz"; - sha1 = "75f16642b480f187a711c814161fd3a4a7655898"; - }; - }; - "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-callable-1.1.5" = { - name = "is-callable"; - packageName = "is-callable"; - version = "1.1.5"; - src = fetchurl { - url = "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz"; - sha512 = "ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q=="; - }; - }; - "is-color-stop-1.1.0" = { - name = "is-color-stop"; - packageName = "is-color-stop"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz"; - sha1 = "cfff471aee4dd5c9e158598fbe12967b5cdad345"; - }; - }; - "is-data-descriptor-0.1.4" = { - name = "is-data-descriptor"; - packageName = "is-data-descriptor"; - version = "0.1.4"; - src = fetchurl { - url = "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz"; - sha1 = "0b5ee648388e2c860282e793f1856fec3f301b56"; - }; - }; - "is-data-descriptor-1.0.0" = { - name = "is-data-descriptor"; - packageName = "is-data-descriptor"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz"; - sha512 = "jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ=="; - }; - }; - "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-descriptor-0.1.6" = { - name = "is-descriptor"; - packageName = "is-descriptor"; - version = "0.1.6"; - src = fetchurl { - url = "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz"; - sha512 = "avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg=="; - }; - }; - "is-descriptor-1.0.2" = { - name = "is-descriptor"; - packageName = "is-descriptor"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz"; - sha512 = "2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg=="; - }; - }; - "is-directory-0.3.1" = { - name = "is-directory"; - packageName = "is-directory"; - version = "0.3.1"; - src = fetchurl { - url = "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz"; - sha1 = "61339b6f2475fc772fd9c9d83f5c8575dc154ae1"; - }; - }; - "is-extendable-0.1.1" = { - name = "is-extendable"; - packageName = "is-extendable"; - version = "0.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz"; - sha1 = "62b110e289a471418e3ec36a617d472e301dfc89"; - }; - }; - "is-extendable-1.0.1" = { - name = "is-extendable"; - packageName = "is-extendable"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz"; - sha512 = "arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA=="; - }; - }; - "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-2.0.0" = { - name = "is-fullwidth-code-point"; - packageName = "is-fullwidth-code-point"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz"; - sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f"; - }; - }; - "is-glob-3.1.0" = { - name = "is-glob"; - packageName = "is-glob"; - version = "3.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz"; - sha1 = "7ba5ae24217804ac70707b96922567486cc3e84a"; - }; - }; - "is-glob-4.0.1" = { - name = "is-glob"; - packageName = "is-glob"; - version = "4.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz"; - sha512 = "5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg=="; - }; - }; - "is-html-1.1.0" = { - name = "is-html"; - packageName = "is-html"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/is-html/-/is-html-1.1.0.tgz"; - sha1 = "e04f1c18d39485111396f9a0273eab51af218464"; - }; - }; - "is-number-3.0.0" = { - name = "is-number"; - packageName = "is-number"; - version = "3.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz"; - sha1 = "24fd6201a4782cf50561c810276afc7d12d71195"; - }; - }; - "is-obj-2.0.0" = { - name = "is-obj"; - packageName = "is-obj"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz"; - sha512 = "drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="; - }; - }; - "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.0.5" = { - name = "is-regex"; - packageName = "is-regex"; - version = "1.0.5"; - src = fetchurl { - url = "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz"; - sha512 = "vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ=="; - }; - }; - "is-resolvable-1.1.0" = { - name = "is-resolvable"; - packageName = "is-resolvable"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz"; - sha512 = "qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg=="; - }; - }; - "is-svg-3.0.0" = { - name = "is-svg"; - packageName = "is-svg"; - version = "3.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz"; - sha512 = "gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ=="; - }; - }; - "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-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-url-1.2.4" = { - name = "is-url"; - packageName = "is-url"; - version = "1.2.4"; - src = fetchurl { - url = "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz"; - sha512 = "ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="; - }; - }; - "is-windows-1.0.2" = { - name = "is-windows"; - packageName = "is-windows"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz"; - sha512 = "eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="; - }; - }; - "is-wsl-1.1.0" = { - name = "is-wsl"; - packageName = "is-wsl"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz"; - sha1 = "1f16e4aa22b04d1336b66188a66af3c600c3a66d"; - }; - }; - "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=="; - }; - }; - "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-2.1.0" = { - name = "isobject"; - packageName = "isobject"; - version = "2.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz"; - sha1 = "f065561096a3f1da2ef46272f815c840d87e0c89"; - }; - }; - "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"; - }; - }; - "js-beautify-1.11.0" = { - name = "js-beautify"; - packageName = "js-beautify"; - version = "1.11.0"; - src = fetchurl { - url = "https://registry.npmjs.org/js-beautify/-/js-beautify-1.11.0.tgz"; - sha512 = "a26B+Cx7USQGSWnz9YxgJNMmML/QG2nqIaL7VVYPCXbqiKz8PN0waSNvroMtvAK6tY7g/wPdNWGEP+JTNIBr6A=="; - }; - }; - "js-levenshtein-1.1.6" = { - name = "js-levenshtein"; - packageName = "js-levenshtein"; - version = "1.1.6"; - src = fetchurl { - url = "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz"; - sha512 = "X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g=="; - }; - }; - "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.13.1" = { - name = "js-yaml"; - packageName = "js-yaml"; - version = "3.13.1"; - src = fetchurl { - url = "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz"; - sha512 = "YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw=="; - }; - }; - "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"; - }; - }; - "jsdom-14.1.0" = { - name = "jsdom"; - packageName = "jsdom"; - version = "14.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz"; - sha512 = "O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng=="; - }; - }; - "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-schema-0.2.3" = { - name = "json-schema"; - packageName = "json-schema"; - version = "0.2.3"; - src = fetchurl { - url = "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz"; - sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13"; - }; - }; - "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-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.1.3" = { - name = "json5"; - packageName = "json5"; - version = "2.1.3"; - src = fetchurl { - url = "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz"; - sha512 = "KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA=="; - }; - }; - "jsprim-1.4.1" = { - name = "jsprim"; - packageName = "jsprim"; - version = "1.4.1"; - src = fetchurl { - url = "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz"; - sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"; - }; - }; - "kind-of-3.2.2" = { - name = "kind-of"; - packageName = "kind-of"; - version = "3.2.2"; - src = fetchurl { - url = "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz"; - sha1 = "31ea21a734bab9bbb0f32466d893aea51e4a3c64"; - }; - }; - "kind-of-4.0.0" = { - name = "kind-of"; - packageName = "kind-of"; - version = "4.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz"; - sha1 = "20813df3d712928b207378691a45066fae72dd57"; - }; - }; - "kind-of-5.1.0" = { - name = "kind-of"; - packageName = "kind-of"; - version = "5.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz"; - sha512 = "NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="; - }; - }; - "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=="; - }; - }; - "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"; - }; - }; - "locate-path-2.0.0" = { - name = "locate-path"; - packageName = "locate-path"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz"; - sha1 = "2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"; - }; - }; - "locate-path-3.0.0" = { - name = "locate-path"; - packageName = "locate-path"; - version = "3.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz"; - sha512 = "7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A=="; - }; - }; - "lodash-4.17.15" = { - name = "lodash"; - packageName = "lodash"; - version = "4.17.15"; - src = fetchurl { - url = "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz"; - sha512 = "8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="; - }; - }; - "lodash.clone-4.5.0" = { - name = "lodash.clone"; - packageName = "lodash.clone"; - version = "4.5.0"; - src = fetchurl { - url = "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz"; - sha1 = "195870450f5a13192478df4bc3d23d2dea1907b6"; - }; - }; - "lodash.memoize-4.1.2" = { - name = "lodash.memoize"; - packageName = "lodash.memoize"; - version = "4.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz"; - sha1 = "bcc6c49a42a2840ed997f323eada5ecd182e0bfe"; - }; - }; - "lodash.sortby-4.7.0" = { - name = "lodash.sortby"; - packageName = "lodash.sortby"; - version = "4.7.0"; - src = fetchurl { - url = "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz"; - sha1 = "edd14c824e2cc9c1e0b0a1b42bb5210516a42438"; - }; - }; - "lodash.uniq-4.5.0" = { - name = "lodash.uniq"; - packageName = "lodash.uniq"; - version = "4.5.0"; - src = fetchurl { - url = "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz"; - sha1 = "d0225373aeb652adc1bc82e4945339a842754773"; - }; - }; - "log-symbols-2.2.0" = { - name = "log-symbols"; - packageName = "log-symbols"; - version = "2.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz"; - sha512 = "VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg=="; - }; - }; - "loose-envify-1.4.0" = { - name = "loose-envify"; - packageName = "loose-envify"; - version = "1.4.0"; - src = fetchurl { - url = "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz"; - sha512 = "lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="; - }; - }; - "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=="; - }; - }; - "magic-string-0.22.5" = { - name = "magic-string"; - packageName = "magic-string"; - version = "0.22.5"; - src = fetchurl { - url = "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz"; - sha512 = "oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w=="; - }; - }; - "map-cache-0.2.2" = { - name = "map-cache"; - packageName = "map-cache"; - version = "0.2.2"; - src = fetchurl { - url = "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz"; - sha1 = "c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"; - }; - }; - "map-visit-1.0.0" = { - name = "map-visit"; - packageName = "map-visit"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz"; - sha1 = "ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"; - }; - }; - "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=="; - }; - }; - "mdn-data-2.0.4" = { - name = "mdn-data"; - packageName = "mdn-data"; - version = "2.0.4"; - src = fetchurl { - url = "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz"; - sha512 = "iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA=="; - }; - }; - "mdn-data-2.0.6" = { - name = "mdn-data"; - packageName = "mdn-data"; - version = "2.0.6"; - src = fetchurl { - url = "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz"; - sha512 = "rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA=="; - }; - }; - "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"; - }; - }; - "merge2-1.3.0" = { - name = "merge2"; - packageName = "merge2"; - version = "1.3.0"; - src = fetchurl { - url = "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz"; - sha512 = "2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw=="; - }; - }; - "micromatch-3.1.10" = { - name = "micromatch"; - packageName = "micromatch"; - version = "3.1.10"; - src = fetchurl { - url = "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz"; - sha512 = "MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg=="; - }; - }; - "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-db-1.44.0" = { - name = "mime-db"; - packageName = "mime-db"; - version = "1.44.0"; - src = fetchurl { - url = "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz"; - sha512 = "/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="; - }; - }; - "mime-types-2.1.27" = { - name = "mime-types"; - packageName = "mime-types"; - version = "2.1.27"; - src = fetchurl { - url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz"; - sha512 = "JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w=="; - }; - }; - "mimic-fn-1.2.0" = { - name = "mimic-fn"; - packageName = "mimic-fn"; - version = "1.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz"; - sha512 = "jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="; - }; - }; - "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=="; - }; - }; - "mixin-deep-1.3.2" = { - name = "mixin-deep"; - packageName = "mixin-deep"; - version = "1.3.2"; - src = fetchurl { - url = "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz"; - sha512 = "WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA=="; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - "nan-2.14.1" = { - name = "nan"; - packageName = "nan"; - version = "2.14.1"; - src = fetchurl { - url = "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz"; - sha512 = "isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw=="; - }; - }; - "nanomatch-1.2.13" = { - name = "nanomatch"; - packageName = "nanomatch"; - version = "1.2.13"; - src = fetchurl { - url = "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz"; - sha512 = "fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA=="; - }; - }; - "nice-try-1.0.5" = { - name = "nice-try"; - packageName = "nice-try"; - version = "1.0.5"; - src = fetchurl { - url = "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz"; - sha512 = "1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="; - }; - }; - "node-addon-api-1.7.1" = { - name = "node-addon-api"; - packageName = "node-addon-api"; - version = "1.7.1"; - src = fetchurl { - url = "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.1.tgz"; - sha512 = "2+DuKodWvwRTrCfKOeR24KIc5unKjOh8mz17NCzVnHWfjAdDqbfbjqh7gUT+BkXBRQM52+xCHciKWonJ3CbJMQ=="; - }; - }; - "node-elm-compiler-5.0.4" = { - name = "node-elm-compiler"; - packageName = "node-elm-compiler"; - version = "5.0.4"; - src = fetchurl { - url = "https://registry.npmjs.org/node-elm-compiler/-/node-elm-compiler-5.0.4.tgz"; - sha512 = "VQsT8QSierYGkHzRed+b4MnccQVF1+qPHunE8jBoU7jD6YpuRqCDPzEoC2zfyEJS80qVnlMZrqobLnyjzX9lJg=="; - }; - }; - "node-forge-0.7.6" = { - name = "node-forge"; - packageName = "node-forge"; - version = "0.7.6"; - src = fetchurl { - url = "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz"; - sha512 = "sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw=="; - }; - }; - "node-libs-browser-2.2.1" = { - name = "node-libs-browser"; - packageName = "node-libs-browser"; - version = "2.2.1"; - src = fetchurl { - url = "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz"; - sha512 = "h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q=="; - }; - }; - "node-releases-1.1.53" = { - name = "node-releases"; - packageName = "node-releases"; - version = "1.1.53"; - src = fetchurl { - url = "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz"; - sha512 = "wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ=="; - }; - }; - "nopt-4.0.3" = { - name = "nopt"; - packageName = "nopt"; - version = "4.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz"; - sha512 = "CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg=="; - }; - }; - "normalize-html-whitespace-1.0.0" = { - name = "normalize-html-whitespace"; - packageName = "normalize-html-whitespace"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/normalize-html-whitespace/-/normalize-html-whitespace-1.0.0.tgz"; - sha512 = "9ui7CGtOOlehQu0t/OhhlmDyc71mKVlv+4vF+me4iZLPrNtRL2xoquEdfZxasC/bdQi/Hr3iTrpyRKIG+ocabA=="; - }; - }; - "normalize-path-2.1.1" = { - name = "normalize-path"; - packageName = "normalize-path"; - version = "2.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz"; - sha1 = "1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"; - }; - }; - "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-url-3.3.0" = { - name = "normalize-url"; - packageName = "normalize-url"; - version = "3.3.0"; - src = fetchurl { - url = "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz"; - sha512 = "U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg=="; - }; - }; - "nth-check-1.0.2" = { - name = "nth-check"; - packageName = "nth-check"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz"; - sha512 = "WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg=="; - }; - }; - "nwsapi-2.2.0" = { - name = "nwsapi"; - packageName = "nwsapi"; - version = "2.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz"; - sha512 = "h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ=="; - }; - }; - "oauth-sign-0.9.0" = { - name = "oauth-sign"; - packageName = "oauth-sign"; - version = "0.9.0"; - src = fetchurl { - url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz"; - sha512 = "fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="; - }; - }; - "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-copy-0.1.0" = { - name = "object-copy"; - packageName = "object-copy"; - version = "0.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz"; - sha1 = "7e7d858b781bd7c991a41ba975ed3812754e998c"; - }; - }; - "object-inspect-1.4.1" = { - name = "object-inspect"; - packageName = "object-inspect"; - version = "1.4.1"; - src = fetchurl { - url = "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz"; - sha512 = "wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw=="; - }; - }; - "object-inspect-1.7.0" = { - name = "object-inspect"; - packageName = "object-inspect"; - version = "1.7.0"; - src = fetchurl { - url = "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz"; - sha512 = "a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw=="; - }; - }; - "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-visit-1.0.1" = { - name = "object-visit"; - packageName = "object-visit"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz"; - sha1 = "f79c4493af0c5377b59fe39d395e41042dd045bb"; - }; - }; - "object.assign-4.1.0" = { - name = "object.assign"; - packageName = "object.assign"; - version = "4.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz"; - sha512 = "exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w=="; - }; - }; - "object.getownpropertydescriptors-2.1.0" = { - name = "object.getownpropertydescriptors"; - packageName = "object.getownpropertydescriptors"; - version = "2.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz"; - sha512 = "Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg=="; - }; - }; - "object.pick-1.3.0" = { - name = "object.pick"; - packageName = "object.pick"; - version = "1.3.0"; - src = fetchurl { - url = "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz"; - sha1 = "87a10ac4c1694bd2e1cbf53591a66141fb5dd747"; - }; - }; - "object.values-1.1.1" = { - name = "object.values"; - packageName = "object.values"; - version = "1.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz"; - sha512 = "WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA=="; - }; - }; - "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"; - }; - }; - "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-2.0.1" = { - name = "onetime"; - packageName = "onetime"; - version = "2.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz"; - sha1 = "067428230fd67443b2794b22bba528b6867962d4"; - }; - }; - "opn-5.5.0" = { - name = "opn"; - packageName = "opn"; - version = "5.5.0"; - src = fetchurl { - url = "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz"; - sha512 = "PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA=="; - }; - }; - "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-2.1.0" = { - name = "ora"; - packageName = "ora"; - version = "2.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz"; - sha512 = "hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA=="; - }; - }; - "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-homedir-1.0.2" = { - name = "os-homedir"; - packageName = "os-homedir"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz"; - sha1 = "ffbc4988336e0e833de0c168c7ef152121aa7fb3"; - }; - }; - "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"; - }; - }; - "osenv-0.1.5" = { - name = "osenv"; - packageName = "osenv"; - version = "0.1.5"; - src = fetchurl { - url = "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz"; - sha512 = "0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g=="; - }; - }; - "p-limit-1.3.0" = { - name = "p-limit"; - packageName = "p-limit"; - version = "1.3.0"; - src = fetchurl { - url = "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz"; - sha512 = "vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q=="; - }; - }; - "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-locate-2.0.0" = { - name = "p-locate"; - packageName = "p-locate"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz"; - sha1 = "20a0103b222a70c8fd39cc2e580680f3dde5ec43"; - }; - }; - "p-locate-3.0.0" = { - name = "p-locate"; - packageName = "p-locate"; - version = "3.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz"; - sha512 = "x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ=="; - }; - }; - "p-try-1.0.0" = { - name = "p-try"; - packageName = "p-try"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz"; - sha1 = "cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"; - }; - }; - "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=="; - }; - }; - "pako-0.2.9" = { - name = "pako"; - packageName = "pako"; - version = "0.2.9"; - src = fetchurl { - url = "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz"; - sha1 = "f3f7522f4ef782348da8161bad9ecfd51bf83a75"; - }; - }; - "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=="; - }; - }; - "parcel-bundler-1.12.3" = { - name = "parcel-bundler"; - packageName = "parcel-bundler"; - version = "1.12.3"; - src = fetchurl { - url = "https://registry.npmjs.org/parcel-bundler/-/parcel-bundler-1.12.3.tgz"; - sha512 = "8bq6lj0hhQeGxD9f9xEkFMXQ3d8TIlf2+isKxoi9bciB0KVEILRGllaPkUgp++5t0anToBh9+tG6ZyInXOC1/A=="; - }; - }; - "parse-asn1-5.1.5" = { - name = "parse-asn1"; - packageName = "parse-asn1"; - version = "5.1.5"; - src = fetchurl { - url = "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz"; - sha512 = "jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ=="; - }; - }; - "parse-json-4.0.0" = { - name = "parse-json"; - packageName = "parse-json"; - version = "4.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz"; - sha1 = "be35f5425be1f7f6c747184f98a788cb99477ee0"; - }; - }; - "parse5-5.1.0" = { - name = "parse5"; - packageName = "parse5"; - version = "5.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz"; - sha512 = "fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ=="; - }; - }; - "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=="; - }; - }; - "pascalcase-0.1.1" = { - name = "pascalcase"; - packageName = "pascalcase"; - version = "0.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz"; - sha1 = "b363e55e8006ca6fe21784d2db22bd15d7917f14"; - }; - }; - "path-browserify-0.0.1" = { - name = "path-browserify"; - packageName = "path-browserify"; - version = "0.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz"; - sha512 = "BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ=="; - }; - }; - "path-dirname-1.0.2" = { - name = "path-dirname"; - packageName = "path-dirname"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz"; - sha1 = "cc33d24d525e099a5388c0336c6e32b9160609e0"; - }; - }; - "path-exists-3.0.0" = { - name = "path-exists"; - packageName = "path-exists"; - version = "3.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz"; - sha1 = "ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"; - }; - }; - "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-2.0.1" = { - name = "path-key"; - packageName = "path-key"; - version = "2.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz"; - sha1 = "411cadb574c5a140d3a4b1910d40d80cc9f40b40"; - }; - }; - "path-parse-1.0.6" = { - name = "path-parse"; - packageName = "path-parse"; - version = "1.0.6"; - src = fetchurl { - url = "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz"; - sha512 = "GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="; - }; - }; - "pbkdf2-3.0.17" = { - name = "pbkdf2"; - packageName = "pbkdf2"; - version = "3.0.17"; - src = fetchurl { - url = "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz"; - sha512 = "U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA=="; - }; - }; - "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"; - }; - }; - "physical-cpu-count-2.0.0" = { - name = "physical-cpu-count"; - packageName = "physical-cpu-count"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz"; - sha1 = "18de2f97e4bf7a9551ad7511942b5496f7aba660"; - }; - }; - "pkg-up-2.0.0" = { - name = "pkg-up"; - packageName = "pkg-up"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz"; - sha1 = "c819ac728059a461cab1c3889a2be3c49a004d7f"; - }; - }; - "pn-1.1.0" = { - name = "pn"; - packageName = "pn"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz"; - sha512 = "2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA=="; - }; - }; - "posix-character-classes-0.1.1" = { - name = "posix-character-classes"; - packageName = "posix-character-classes"; - version = "0.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz"; - sha1 = "01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"; - }; - }; - "postcss-6.0.1" = { - name = "postcss"; - packageName = "postcss"; - version = "6.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz"; - sha1 = "000dbd1f8eef217aa368b9a212c5fc40b2a8f3f2"; - }; - }; - "postcss-6.0.23" = { - name = "postcss"; - packageName = "postcss"; - version = "6.0.23"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz"; - sha512 = "soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag=="; - }; - }; - "postcss-7.0.27" = { - name = "postcss"; - packageName = "postcss"; - version = "7.0.27"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz"; - sha512 = "WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ=="; - }; - }; - "postcss-calc-7.0.2" = { - name = "postcss-calc"; - packageName = "postcss-calc"; - version = "7.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz"; - sha512 = "rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ=="; - }; - }; - "postcss-colormin-4.0.3" = { - name = "postcss-colormin"; - packageName = "postcss-colormin"; - version = "4.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz"; - sha512 = "WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw=="; - }; - }; - "postcss-convert-values-4.0.1" = { - name = "postcss-convert-values"; - packageName = "postcss-convert-values"; - version = "4.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz"; - sha512 = "Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ=="; - }; - }; - "postcss-discard-comments-4.0.2" = { - name = "postcss-discard-comments"; - packageName = "postcss-discard-comments"; - version = "4.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz"; - sha512 = "RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg=="; - }; - }; - "postcss-discard-duplicates-4.0.2" = { - name = "postcss-discard-duplicates"; - packageName = "postcss-discard-duplicates"; - version = "4.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz"; - sha512 = "ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ=="; - }; - }; - "postcss-discard-empty-4.0.1" = { - name = "postcss-discard-empty"; - packageName = "postcss-discard-empty"; - version = "4.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz"; - sha512 = "B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w=="; - }; - }; - "postcss-discard-overridden-4.0.1" = { - name = "postcss-discard-overridden"; - packageName = "postcss-discard-overridden"; - version = "4.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz"; - sha512 = "IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg=="; - }; - }; - "postcss-merge-longhand-4.0.11" = { - name = "postcss-merge-longhand"; - packageName = "postcss-merge-longhand"; - version = "4.0.11"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz"; - sha512 = "alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw=="; - }; - }; - "postcss-merge-rules-4.0.3" = { - name = "postcss-merge-rules"; - packageName = "postcss-merge-rules"; - version = "4.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz"; - sha512 = "U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ=="; - }; - }; - "postcss-minify-font-values-4.0.2" = { - name = "postcss-minify-font-values"; - packageName = "postcss-minify-font-values"; - version = "4.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz"; - sha512 = "j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg=="; - }; - }; - "postcss-minify-gradients-4.0.2" = { - name = "postcss-minify-gradients"; - packageName = "postcss-minify-gradients"; - version = "4.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz"; - sha512 = "qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q=="; - }; - }; - "postcss-minify-params-4.0.2" = { - name = "postcss-minify-params"; - packageName = "postcss-minify-params"; - version = "4.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz"; - sha512 = "G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg=="; - }; - }; - "postcss-minify-selectors-4.0.2" = { - name = "postcss-minify-selectors"; - packageName = "postcss-minify-selectors"; - version = "4.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz"; - sha512 = "D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g=="; - }; - }; - "postcss-modules-extract-imports-1.1.0" = { - name = "postcss-modules-extract-imports"; - packageName = "postcss-modules-extract-imports"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz"; - sha1 = "b614c9720be6816eaee35fb3a5faa1dba6a05ddb"; - }; - }; - "postcss-modules-local-by-default-1.2.0" = { - name = "postcss-modules-local-by-default"; - packageName = "postcss-modules-local-by-default"; - version = "1.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz"; - sha1 = "f7d80c398c5a393fa7964466bd19500a7d61c069"; - }; - }; - "postcss-modules-scope-1.1.0" = { - name = "postcss-modules-scope"; - packageName = "postcss-modules-scope"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz"; - sha1 = "d6ea64994c79f97b62a72b426fbe6056a194bb90"; - }; - }; - "postcss-modules-values-1.3.0" = { - name = "postcss-modules-values"; - packageName = "postcss-modules-values"; - version = "1.3.0"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz"; - sha1 = "ecffa9d7e192518389f42ad0e83f72aec456ea20"; - }; - }; - "postcss-normalize-charset-4.0.1" = { - name = "postcss-normalize-charset"; - packageName = "postcss-normalize-charset"; - version = "4.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz"; - sha512 = "gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g=="; - }; - }; - "postcss-normalize-display-values-4.0.2" = { - name = "postcss-normalize-display-values"; - packageName = "postcss-normalize-display-values"; - version = "4.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz"; - sha512 = "3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ=="; - }; - }; - "postcss-normalize-positions-4.0.2" = { - name = "postcss-normalize-positions"; - packageName = "postcss-normalize-positions"; - version = "4.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz"; - sha512 = "Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA=="; - }; - }; - "postcss-normalize-repeat-style-4.0.2" = { - name = "postcss-normalize-repeat-style"; - packageName = "postcss-normalize-repeat-style"; - version = "4.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz"; - sha512 = "qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q=="; - }; - }; - "postcss-normalize-string-4.0.2" = { - name = "postcss-normalize-string"; - packageName = "postcss-normalize-string"; - version = "4.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz"; - sha512 = "RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA=="; - }; - }; - "postcss-normalize-timing-functions-4.0.2" = { - name = "postcss-normalize-timing-functions"; - packageName = "postcss-normalize-timing-functions"; - version = "4.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz"; - sha512 = "acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A=="; - }; - }; - "postcss-normalize-unicode-4.0.1" = { - name = "postcss-normalize-unicode"; - packageName = "postcss-normalize-unicode"; - version = "4.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz"; - sha512 = "od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg=="; - }; - }; - "postcss-normalize-url-4.0.1" = { - name = "postcss-normalize-url"; - packageName = "postcss-normalize-url"; - version = "4.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz"; - sha512 = "p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA=="; - }; - }; - "postcss-normalize-whitespace-4.0.2" = { - name = "postcss-normalize-whitespace"; - packageName = "postcss-normalize-whitespace"; - version = "4.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz"; - sha512 = "tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA=="; - }; - }; - "postcss-ordered-values-4.1.2" = { - name = "postcss-ordered-values"; - packageName = "postcss-ordered-values"; - version = "4.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz"; - sha512 = "2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw=="; - }; - }; - "postcss-reduce-initial-4.0.3" = { - name = "postcss-reduce-initial"; - packageName = "postcss-reduce-initial"; - version = "4.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz"; - sha512 = "gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA=="; - }; - }; - "postcss-reduce-transforms-4.0.2" = { - name = "postcss-reduce-transforms"; - packageName = "postcss-reduce-transforms"; - version = "4.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz"; - sha512 = "EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg=="; - }; - }; - "postcss-selector-parser-3.1.2" = { - name = "postcss-selector-parser"; - packageName = "postcss-selector-parser"; - version = "3.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz"; - sha512 = "h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA=="; - }; - }; - "postcss-selector-parser-6.0.2" = { - name = "postcss-selector-parser"; - packageName = "postcss-selector-parser"; - version = "6.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz"; - sha512 = "36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg=="; - }; - }; - "postcss-svgo-4.0.2" = { - name = "postcss-svgo"; - packageName = "postcss-svgo"; - version = "4.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz"; - sha512 = "C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw=="; - }; - }; - "postcss-unique-selectors-4.0.1" = { - name = "postcss-unique-selectors"; - packageName = "postcss-unique-selectors"; - version = "4.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz"; - sha512 = "+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg=="; - }; - }; - "postcss-value-parser-3.3.1" = { - name = "postcss-value-parser"; - packageName = "postcss-value-parser"; - version = "3.3.1"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz"; - sha512 = "pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="; - }; - }; - "postcss-value-parser-4.0.3" = { - name = "postcss-value-parser"; - packageName = "postcss-value-parser"; - version = "4.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz"; - sha512 = "N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg=="; - }; - }; - "posthtml-0.11.6" = { - name = "posthtml"; - packageName = "posthtml"; - version = "0.11.6"; - src = fetchurl { - url = "https://registry.npmjs.org/posthtml/-/posthtml-0.11.6.tgz"; - sha512 = "C2hrAPzmRdpuL3iH0TDdQ6XCc9M7Dcc3zEW5BLerY65G4tWWszwv6nG/ksi6ul5i2mx22ubdljgktXCtNkydkw=="; - }; - }; - "posthtml-0.12.3" = { - name = "posthtml"; - packageName = "posthtml"; - version = "0.12.3"; - src = fetchurl { - url = "https://registry.npmjs.org/posthtml/-/posthtml-0.12.3.tgz"; - sha512 = "Fbpi95+JJyR0tqU7pUy1zTSQFjAsluuwB9pJ1h0jtnGk7n/O2TBtP5nDl9rV0JVACjQ1Lm5wSp4ppChr8u3MhA=="; - }; - }; - "posthtml-parser-0.4.2" = { - name = "posthtml-parser"; - packageName = "posthtml-parser"; - version = "0.4.2"; - src = fetchurl { - url = "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.4.2.tgz"; - sha512 = "BUIorsYJTvS9UhXxPTzupIztOMVNPa/HtAm9KHni9z6qEfiJ1bpOBL5DfUOL9XAc3XkLIEzBzpph+Zbm4AdRAg=="; - }; - }; - "posthtml-render-1.2.2" = { - name = "posthtml-render"; - packageName = "posthtml-render"; - version = "1.2.2"; - src = fetchurl { - url = "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.2.2.tgz"; - sha512 = "MbIXTWwAfJ9qET6Zl29UNwJcDJEEz9Zkr5oDhiujitJa7YBJwEpbkX2cmuklCDxubTMoRWpid3q8DrSyGnUUzQ=="; - }; - }; - "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"; - }; - }; - "private-0.1.8" = { - name = "private"; - packageName = "private"; - version = "0.1.8"; - src = fetchurl { - url = "https://registry.npmjs.org/private/-/private-0.1.8.tgz"; - sha512 = "VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="; - }; - }; - "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=="; - }; - }; - "proto-list-1.2.4" = { - name = "proto-list"; - packageName = "proto-list"; - version = "1.2.4"; - src = fetchurl { - url = "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz"; - sha1 = "212d5bfe1318306a420f6402b8e26ff39647a849"; - }; - }; - "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"; - }; - }; - "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=="; - }; - }; - "purgecss-1.4.2" = { - name = "purgecss"; - packageName = "purgecss"; - version = "1.4.2"; - src = fetchurl { - url = "https://registry.npmjs.org/purgecss/-/purgecss-1.4.2.tgz"; - sha512 = "hkOreFTgiyMHMmC2BxzdIw5DuC6kxAbP/gGOGd3MEsF3+5m69rIvUEPaxrnoUtfODTFKe9hcXjGwC6jcjoyhOw=="; - }; - }; - "q-1.5.1" = { - name = "q"; - packageName = "q"; - version = "1.5.1"; - src = fetchurl { - url = "https://registry.npmjs.org/q/-/q-1.5.1.tgz"; - sha1 = "7e32f75b41381291d04611f1bf14109ac00651d7"; - }; - }; - "qs-6.5.2" = { - name = "qs"; - packageName = "qs"; - version = "6.5.2"; - src = fetchurl { - url = "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz"; - sha512 = "N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="; - }; - }; - "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"; - }; - }; - "quote-stream-1.0.2" = { - name = "quote-stream"; - packageName = "quote-stream"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz"; - sha1 = "84963f8c9c26b942e153feeb53aae74652b7e0b2"; - }; - }; - "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=="; - }; - }; - "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-2.2.1" = { - name = "readdirp"; - packageName = "readdirp"; - version = "2.2.1"; - src = fetchurl { - url = "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz"; - sha512 = "1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ=="; - }; - }; - "regenerate-1.4.0" = { - name = "regenerate"; - packageName = "regenerate"; - version = "1.4.0"; - src = fetchurl { - url = "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz"; - sha512 = "1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg=="; - }; - }; - "regenerate-unicode-properties-8.2.0" = { - name = "regenerate-unicode-properties"; - packageName = "regenerate-unicode-properties"; - version = "8.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz"; - sha512 = "F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA=="; - }; - }; - "regenerator-runtime-0.11.1" = { - name = "regenerator-runtime"; - packageName = "regenerator-runtime"; - version = "0.11.1"; - src = fetchurl { - url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz"; - sha512 = "MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="; - }; - }; - "regenerator-runtime-0.12.1" = { - name = "regenerator-runtime"; - packageName = "regenerator-runtime"; - version = "0.12.1"; - src = fetchurl { - url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz"; - sha512 = "odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg=="; - }; - }; - "regenerator-runtime-0.13.5" = { - name = "regenerator-runtime"; - packageName = "regenerator-runtime"; - version = "0.13.5"; - src = fetchurl { - url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz"; - sha512 = "ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="; - }; - }; - "regenerator-transform-0.14.4" = { - name = "regenerator-transform"; - packageName = "regenerator-transform"; - version = "0.14.4"; - src = fetchurl { - url = "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz"; - sha512 = "EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw=="; - }; - }; - "regex-not-1.0.2" = { - name = "regex-not"; - packageName = "regex-not"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz"; - sha512 = "J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A=="; - }; - }; - "regexpu-core-4.7.0" = { - name = "regexpu-core"; - packageName = "regexpu-core"; - version = "4.7.0"; - src = fetchurl { - url = "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz"; - sha512 = "TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ=="; - }; - }; - "regjsgen-0.5.1" = { - name = "regjsgen"; - packageName = "regjsgen"; - version = "0.5.1"; - src = fetchurl { - url = "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz"; - sha512 = "5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg=="; - }; - }; - "regjsparser-0.6.4" = { - name = "regjsparser"; - packageName = "regjsparser"; - version = "0.6.4"; - src = fetchurl { - url = "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz"; - sha512 = "64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw=="; - }; - }; - "remove-trailing-separator-1.1.0" = { - name = "remove-trailing-separator"; - packageName = "remove-trailing-separator"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz"; - sha1 = "c24bce2a283adad5bc3f58e0d48249b92379d8ef"; - }; - }; - "repeat-element-1.1.3" = { - name = "repeat-element"; - packageName = "repeat-element"; - version = "1.1.3"; - src = fetchurl { - url = "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz"; - sha512 = "ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="; - }; - }; - "repeat-string-1.6.1" = { - name = "repeat-string"; - packageName = "repeat-string"; - version = "1.6.1"; - src = fetchurl { - url = "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz"; - sha1 = "8dcae470e1c88abc2d600fff4a776286da75e637"; - }; - }; - "request-2.88.2" = { - name = "request"; - packageName = "request"; - version = "2.88.2"; - src = fetchurl { - url = "https://registry.npmjs.org/request/-/request-2.88.2.tgz"; - sha512 = "MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw=="; - }; - }; - "request-promise-core-1.1.3" = { - name = "request-promise-core"; - packageName = "request-promise-core"; - version = "1.1.3"; - src = fetchurl { - url = "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz"; - sha512 = "QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ=="; - }; - }; - "request-promise-native-1.0.8" = { - name = "request-promise-native"; - packageName = "request-promise-native"; - version = "1.0.8"; - src = fetchurl { - url = "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz"; - sha512 = "dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ=="; - }; - }; - "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-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=="; - }; - }; - "resolve-1.17.0" = { - name = "resolve"; - packageName = "resolve"; - version = "1.17.0"; - src = fetchurl { - url = "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz"; - sha512 = "ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w=="; - }; - }; - "resolve-from-3.0.0" = { - name = "resolve-from"; - packageName = "resolve-from"; - version = "3.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz"; - sha1 = "b22c7af7d9d6881bc8b6e653335eebcb0a188748"; - }; - }; - "resolve-url-0.2.1" = { - name = "resolve-url"; - packageName = "resolve-url"; - version = "0.2.1"; - src = fetchurl { - url = "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz"; - sha1 = "2c637fe77c893afd2a663fe21aa9080068e2052a"; - }; - }; - "restore-cursor-2.0.0" = { - name = "restore-cursor"; - packageName = "restore-cursor"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz"; - sha1 = "9f7ee287f82fd326d4fd162923d62129eee0dfaf"; - }; - }; - "ret-0.1.15" = { - name = "ret"; - packageName = "ret"; - version = "0.1.15"; - src = fetchurl { - url = "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz"; - sha512 = "TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="; - }; - }; - "rgb-regex-1.0.1" = { - name = "rgb-regex"; - packageName = "rgb-regex"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz"; - sha1 = "c0e0d6882df0e23be254a475e8edd41915feaeb1"; - }; - }; - "rgba-regex-1.0.0" = { - name = "rgba-regex"; - packageName = "rgba-regex"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz"; - sha1 = "43374e2e2ca0968b0ef1523460b7d730ff22eeb3"; - }; - }; - "rimraf-2.6.3" = { - name = "rimraf"; - packageName = "rimraf"; - version = "2.6.3"; - src = fetchurl { - url = "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz"; - sha512 = "mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA=="; - }; - }; - "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-regex-1.1.0" = { - name = "safe-regex"; - packageName = "safe-regex"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz"; - sha1 = "40a3669f3b077d1e943d44629e157dd48023bf2e"; - }; - }; - "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=="; - }; - }; - "safer-eval-1.3.6" = { - name = "safer-eval"; - packageName = "safer-eval"; - version = "1.3.6"; - src = fetchurl { - url = "https://registry.npmjs.org/safer-eval/-/safer-eval-1.3.6.tgz"; - sha512 = "DN9tBsZgtUOHODzSfO1nGCLhZtxc7Qq/d8/2SNxQZ9muYXZspSh1fO7HOsrf4lcelBNviAJLCxB/ggmG+jV1aw=="; - }; - }; - "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=="; - }; - }; - "saxes-3.1.11" = { - name = "saxes"; - packageName = "saxes"; - version = "3.1.11"; - src = fetchurl { - url = "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz"; - sha512 = "Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g=="; - }; - }; - "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=="; - }; - }; - "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-to-js-1.2.2" = { - name = "serialize-to-js"; - packageName = "serialize-to-js"; - version = "1.2.2"; - src = fetchurl { - url = "https://registry.npmjs.org/serialize-to-js/-/serialize-to-js-1.2.2.tgz"; - sha512 = "mUc8vA5iJghe+O+3s0YDGFLMJcqitVFk787YKiv8a4sf6RX5W0u81b+gcHrp15O0fFa010dRBVZvwcKXOWsL9Q=="; - }; - }; - "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"; - }; - }; - "set-value-2.0.1" = { - name = "set-value"; - packageName = "set-value"; - version = "2.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz"; - sha512 = "JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw=="; - }; - }; - "setimmediate-1.0.5" = { - name = "setimmediate"; - packageName = "setimmediate"; - version = "1.0.5"; - src = fetchurl { - url = "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz"; - sha1 = "290cbb232e306942d7d7ea9b83732ab7856f8285"; - }; - }; - "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-copy-0.0.1" = { - name = "shallow-copy"; - packageName = "shallow-copy"; - version = "0.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz"; - sha1 = "415f42702d73d810330292cc5ee86eae1a11a170"; - }; - }; - "shebang-command-1.2.0" = { - name = "shebang-command"; - packageName = "shebang-command"; - version = "1.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz"; - sha1 = "44aac65b695b03398968c39f363fee5deafdf1ea"; - }; - }; - "shebang-regex-1.0.0" = { - name = "shebang-regex"; - packageName = "shebang-regex"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz"; - sha1 = "da42f49740c0b42db2ca9728571cb190c98efea3"; - }; - }; - "sigmund-1.0.1" = { - name = "sigmund"; - packageName = "sigmund"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz"; - sha1 = "3ff21f198cad2175f9f3b781853fd94d0d19b590"; - }; - }; - "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-swizzle-0.2.2" = { - name = "simple-swizzle"; - packageName = "simple-swizzle"; - version = "0.2.2"; - src = fetchurl { - url = "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz"; - sha1 = "a4da6b635ffcccca33f70d17cb92592de95e557a"; - }; - }; - "snapdragon-0.8.2" = { - name = "snapdragon"; - packageName = "snapdragon"; - version = "0.8.2"; - src = fetchurl { - url = "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz"; - sha512 = "FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg=="; - }; - }; - "snapdragon-node-2.1.1" = { - name = "snapdragon-node"; - packageName = "snapdragon-node"; - version = "2.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz"; - sha512 = "O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw=="; - }; - }; - "snapdragon-util-3.0.1" = { - name = "snapdragon-util"; - packageName = "snapdragon-util"; - version = "3.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz"; - sha512 = "mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ=="; - }; - }; - "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-resolve-0.5.3" = { - name = "source-map-resolve"; - packageName = "source-map-resolve"; - version = "0.5.3"; - src = fetchurl { - url = "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz"; - sha512 = "Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw=="; - }; - }; - "source-map-support-0.5.19" = { - name = "source-map-support"; - packageName = "source-map-support"; - version = "0.5.19"; - src = fetchurl { - url = "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz"; - sha512 = "Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw=="; - }; - }; - "source-map-url-0.4.0" = { - name = "source-map-url"; - packageName = "source-map-url"; - version = "0.4.0"; - src = fetchurl { - url = "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz"; - sha1 = "3e935d7ddd73631b97659956d55128e87b5084a3"; - }; - }; - "split-string-3.1.0" = { - name = "split-string"; - packageName = "split-string"; - version = "3.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz"; - sha512 = "NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw=="; - }; - }; - "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=="; - }; - }; - "stable-0.1.8" = { - name = "stable"; - packageName = "stable"; - version = "0.1.8"; - src = fetchurl { - url = "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz"; - sha512 = "ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w=="; - }; - }; - "static-eval-2.0.5" = { - name = "static-eval"; - packageName = "static-eval"; - version = "2.0.5"; - src = fetchurl { - url = "https://registry.npmjs.org/static-eval/-/static-eval-2.0.5.tgz"; - sha512 = "nNbV6LbGtMBgv7e9LFkt5JV8RVlRsyJrphfAt9tOtBBW/SfnzZDf2KnS72an8e434A+9e/BmJuTxeGPvrAK7KA=="; - }; - }; - "static-extend-0.1.2" = { - name = "static-extend"; - packageName = "static-extend"; - version = "0.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz"; - sha1 = "60809c39cbff55337226fd5e0b520f341f1fb5c6"; - }; - }; - "static-module-2.2.5" = { - name = "static-module"; - packageName = "static-module"; - version = "2.2.5"; - src = fetchurl { - url = "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz"; - sha512 = "D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ=="; - }; - }; - "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"; - }; - }; - "stealthy-require-1.1.1" = { - name = "stealthy-require"; - packageName = "stealthy-require"; - version = "1.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz"; - sha1 = "35b09875b4ff49f26a777e509b3090a3226bf24b"; - }; - }; - "stream-browserify-2.0.2" = { - name = "stream-browserify"; - packageName = "stream-browserify"; - version = "2.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz"; - sha512 = "nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg=="; - }; - }; - "stream-http-2.8.3" = { - name = "stream-http"; - packageName = "stream-http"; - version = "2.8.3"; - src = fetchurl { - url = "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz"; - sha512 = "+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw=="; - }; - }; - "string-width-3.1.0" = { - name = "string-width"; - packageName = "string-width"; - version = "3.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz"; - sha512 = "vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w=="; - }; - }; - "string.prototype.trimend-1.0.1" = { - name = "string.prototype.trimend"; - packageName = "string.prototype.trimend"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz"; - sha512 = "LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g=="; - }; - }; - "string.prototype.trimleft-2.1.2" = { - name = "string.prototype.trimleft"; - packageName = "string.prototype.trimleft"; - version = "2.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz"; - sha512 = "gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw=="; - }; - }; - "string.prototype.trimright-2.1.2" = { - name = "string.prototype.trimright"; - packageName = "string.prototype.trimright"; - version = "2.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz"; - sha512 = "ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg=="; - }; - }; - "string.prototype.trimstart-1.0.1" = { - name = "string.prototype.trimstart"; - packageName = "string.prototype.trimstart"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz"; - sha512 = "XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw=="; - }; - }; - "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-4.0.0" = { - name = "strip-ansi"; - packageName = "strip-ansi"; - version = "4.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz"; - sha1 = "a8479022eb1ac368a871389b635262c505ee368f"; - }; - }; - "strip-ansi-5.2.0" = { - name = "strip-ansi"; - packageName = "strip-ansi"; - version = "5.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz"; - sha512 = "DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA=="; - }; - }; - "stylehacks-4.0.3" = { - name = "stylehacks"; - packageName = "stylehacks"; - version = "4.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz"; - sha512 = "7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g=="; - }; - }; - "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-3.2.3" = { - name = "supports-color"; - packageName = "supports-color"; - version = "3.2.3"; - src = fetchurl { - url = "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz"; - sha1 = "65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"; - }; - }; - "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-6.1.0" = { - name = "supports-color"; - packageName = "supports-color"; - version = "6.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz"; - sha512 = "qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ=="; - }; - }; - "svgo-1.3.2" = { - name = "svgo"; - packageName = "svgo"; - version = "1.3.2"; - src = fetchurl { - url = "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz"; - sha512 = "yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw=="; - }; - }; - "symbol-tree-3.2.4" = { - name = "symbol-tree"; - packageName = "symbol-tree"; - version = "3.2.4"; - src = fetchurl { - url = "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz"; - sha512 = "9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="; - }; - }; - "temp-0.9.0" = { - name = "temp"; - packageName = "temp"; - version = "0.9.0"; - src = fetchurl { - url = "https://registry.npmjs.org/temp/-/temp-0.9.0.tgz"; - sha512 = "YfUhPQCJoNQE5N+FJQcdPz63O3x3sdT4Xju69Gj4iZe0lBKOtnAMi0SLj9xKhGkcGhsxThvTJ/usxtFPo438zQ=="; - }; - }; - "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.6.12" = { - name = "terser"; - packageName = "terser"; - version = "4.6.12"; - src = fetchurl { - url = "https://registry.npmjs.org/terser/-/terser-4.6.12.tgz"; - sha512 = "fnIwuaKjFPANG6MAixC/k1TDtnl1YlPLUlLVIxxGZUn1gfUx2+l3/zGNB72wya+lgsb50QBi2tUV75RiODwnww=="; - }; - }; - "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=="; - }; - }; - "timers-browserify-2.0.11" = { - name = "timers-browserify"; - packageName = "timers-browserify"; - version = "2.0.11"; - src = fetchurl { - url = "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz"; - sha512 = "60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ=="; - }; - }; - "timsort-0.3.0" = { - name = "timsort"; - packageName = "timsort"; - version = "0.3.0"; - src = fetchurl { - url = "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz"; - sha1 = "405411a8e7e6339fe64db9a234de11dc31e02bd4"; - }; - }; - "tiny-inflate-1.0.3" = { - name = "tiny-inflate"; - packageName = "tiny-inflate"; - version = "1.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz"; - sha512 = "pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="; - }; - }; - "to-arraybuffer-1.0.1" = { - name = "to-arraybuffer"; - packageName = "to-arraybuffer"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz"; - sha1 = "7d229b1fcc637e466ca081180836a7aabff83f43"; - }; - }; - "to-fast-properties-1.0.3" = { - name = "to-fast-properties"; - packageName = "to-fast-properties"; - version = "1.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz"; - sha1 = "b83571fa4d8c25b82e231b06e3a3055de4ca1a47"; - }; - }; - "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-object-path-0.3.0" = { - name = "to-object-path"; - packageName = "to-object-path"; - version = "0.3.0"; - src = fetchurl { - url = "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz"; - sha1 = "297588b7b0e7e0ac08e04e672f85c1f4999e17af"; - }; - }; - "to-regex-3.0.2" = { - name = "to-regex"; - packageName = "to-regex"; - version = "3.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz"; - sha512 = "FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw=="; - }; - }; - "to-regex-range-2.1.1" = { - name = "to-regex-range"; - packageName = "to-regex-range"; - version = "2.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz"; - sha1 = "7c80c17b9dfebe599e27367e0d4dd5590141db38"; - }; - }; - "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=="; - }; - }; - "tough-cookie-2.5.0" = { - name = "tough-cookie"; - packageName = "tough-cookie"; - version = "2.5.0"; - src = fetchurl { - url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz"; - sha512 = "nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g=="; - }; - }; - "tr46-1.0.1" = { - name = "tr46"; - packageName = "tr46"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz"; - sha1 = "a8b13fd6bfd2489519674ccde55ba3693b706d09"; - }; - }; - "trim-right-1.0.1" = { - name = "trim-right"; - packageName = "trim-right"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz"; - sha1 = "cb2e1203067e0c8de1f614094b9fe45704ea6003"; - }; - }; - "tty-browserify-0.0.0" = { - name = "tty-browserify"; - packageName = "tty-browserify"; - version = "0.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz"; - sha1 = "a157ba402da24e9bf957f9aa69d524eed42901a6"; - }; - }; - "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-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"; - }; - }; - "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"; - }; - }; - "uncss-0.17.3" = { - name = "uncss"; - packageName = "uncss"; - version = "0.17.3"; - src = fetchurl { - url = "https://registry.npmjs.org/uncss/-/uncss-0.17.3.tgz"; - sha512 = "ksdDWl81YWvF/X14fOSw4iu8tESDHFIeyKIeDrK6GEVTQvqJc1WlOEXqostNwOCi3qAj++4EaLsdAgPmUbEyog=="; - }; - }; - "unicode-canonical-property-names-ecmascript-1.0.4" = { - name = "unicode-canonical-property-names-ecmascript"; - packageName = "unicode-canonical-property-names-ecmascript"; - version = "1.0.4"; - src = fetchurl { - url = "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz"; - sha512 = "jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ=="; - }; - }; - "unicode-match-property-ecmascript-1.0.4" = { - name = "unicode-match-property-ecmascript"; - packageName = "unicode-match-property-ecmascript"; - version = "1.0.4"; - src = fetchurl { - url = "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz"; - sha512 = "L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg=="; - }; - }; - "unicode-match-property-value-ecmascript-1.2.0" = { - name = "unicode-match-property-value-ecmascript"; - packageName = "unicode-match-property-value-ecmascript"; - version = "1.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz"; - sha512 = "wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ=="; - }; - }; - "unicode-property-aliases-ecmascript-1.1.0" = { - name = "unicode-property-aliases-ecmascript"; - packageName = "unicode-property-aliases-ecmascript"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz"; - sha512 = "PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg=="; - }; - }; - "unicode-trie-0.3.1" = { - name = "unicode-trie"; - packageName = "unicode-trie"; - version = "0.3.1"; - src = fetchurl { - url = "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz"; - sha1 = "d671dddd89101a08bac37b6a5161010602052085"; - }; - }; - "union-value-1.0.1" = { - name = "union-value"; - packageName = "union-value"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz"; - sha512 = "tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg=="; - }; - }; - "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"; - }; - }; - "uniqs-2.0.0" = { - name = "uniqs"; - packageName = "uniqs"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz"; - sha1 = "ffede4b36b25290696e6e165d4a59edb998e6b02"; - }; - }; - "unquote-1.1.1" = { - name = "unquote"; - packageName = "unquote"; - version = "1.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz"; - sha1 = "8fded7324ec6e88a0ff8b905e7c098cdc086d544"; - }; - }; - "unset-value-1.0.0" = { - name = "unset-value"; - packageName = "unset-value"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz"; - sha1 = "8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"; - }; - }; - "upath-1.2.0" = { - name = "upath"; - packageName = "upath"; - version = "1.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz"; - sha512 = "aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="; - }; - }; - "uri-js-4.2.2" = { - name = "uri-js"; - packageName = "uri-js"; - version = "4.2.2"; - src = fetchurl { - url = "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz"; - sha512 = "KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ=="; - }; - }; - "urix-0.1.0" = { - name = "urix"; - packageName = "urix"; - version = "0.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz"; - sha1 = "da937f7a62e21fec1fd18d49b35c2935067a6c72"; - }; - }; - "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"; - }; - }; - "use-3.1.1" = { - name = "use"; - packageName = "use"; - version = "3.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/use/-/use-3.1.1.tgz"; - sha512 = "cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="; - }; - }; - "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.11.1" = { - name = "util"; - packageName = "util"; - version = "0.11.1"; - src = fetchurl { - url = "https://registry.npmjs.org/util/-/util-0.11.1.tgz"; - sha512 = "HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ=="; - }; - }; - "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"; - }; - }; - "util.promisify-1.0.1" = { - name = "util.promisify"; - packageName = "util.promisify"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz"; - sha512 = "g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA=="; - }; - }; - "uuid-3.4.0" = { - name = "uuid"; - packageName = "uuid"; - version = "3.4.0"; - src = fetchurl { - url = "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz"; - sha512 = "HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="; - }; - }; - "v8-compile-cache-2.1.0" = { - name = "v8-compile-cache"; - packageName = "v8-compile-cache"; - version = "2.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz"; - sha512 = "usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g=="; - }; - }; - "vendors-1.0.4" = { - name = "vendors"; - packageName = "vendors"; - version = "1.0.4"; - src = fetchurl { - url = "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz"; - sha512 = "/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w=="; - }; - }; - "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"; - }; - }; - "vlq-0.2.3" = { - name = "vlq"; - packageName = "vlq"; - version = "0.2.3"; - src = fetchurl { - url = "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz"; - sha512 = "DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow=="; - }; - }; - "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=="; - }; - }; - "w3c-hr-time-1.0.2" = { - name = "w3c-hr-time"; - packageName = "w3c-hr-time"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz"; - sha512 = "z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ=="; - }; - }; - "w3c-xmlserializer-1.1.2" = { - name = "w3c-xmlserializer"; - packageName = "w3c-xmlserializer"; - version = "1.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz"; - sha512 = "p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg=="; - }; - }; - "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"; - }; - }; - "webidl-conversions-4.0.2" = { - name = "webidl-conversions"; - packageName = "webidl-conversions"; - version = "4.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz"; - sha512 = "YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="; - }; - }; - "whatwg-encoding-1.0.5" = { - name = "whatwg-encoding"; - packageName = "whatwg-encoding"; - version = "1.0.5"; - src = fetchurl { - url = "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz"; - sha512 = "b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw=="; - }; - }; - "whatwg-mimetype-2.3.0" = { - name = "whatwg-mimetype"; - packageName = "whatwg-mimetype"; - version = "2.3.0"; - src = fetchurl { - url = "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz"; - sha512 = "M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g=="; - }; - }; - "whatwg-url-7.1.0" = { - name = "whatwg-url"; - packageName = "whatwg-url"; - version = "7.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz"; - sha512 = "WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg=="; - }; - }; - "which-1.3.1" = { - name = "which"; - packageName = "which"; - version = "1.3.1"; - src = fetchurl { - url = "https://registry.npmjs.org/which/-/which-1.3.1.tgz"; - sha512 = "HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ=="; - }; - }; - "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"; - }; - }; - "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-5.1.0" = { - name = "wrap-ansi"; - packageName = "wrap-ansi"; - version = "5.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz"; - sha512 = "QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q=="; - }; - }; - "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-5.2.2" = { - name = "ws"; - packageName = "ws"; - version = "5.2.2"; - src = fetchurl { - url = "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz"; - sha512 = "jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA=="; - }; - }; - "ws-6.2.1" = { - name = "ws"; - packageName = "ws"; - version = "6.2.1"; - src = fetchurl { - url = "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz"; - sha512 = "GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA=="; - }; - }; - "xml-name-validator-3.0.0" = { - name = "xml-name-validator"; - packageName = "xml-name-validator"; - version = "3.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz"; - sha512 = "A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw=="; - }; - }; - "xmlchars-2.2.0" = { - name = "xmlchars"; - packageName = "xmlchars"; - version = "2.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz"; - sha512 = "JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="; - }; - }; - "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.0" = { - name = "y18n"; - packageName = "y18n"; - version = "4.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz"; - sha512 = "r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="; - }; - }; - "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"; - }; - }; - "yargs-14.2.3" = { - name = "yargs"; - packageName = "yargs"; - version = "14.2.3"; - src = fetchurl { - url = "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz"; - sha512 = "ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg=="; - }; - }; - "yargs-parser-15.0.1" = { - name = "yargs-parser"; - packageName = "yargs-parser"; - version = "15.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz"; - sha512 = "0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw=="; - }; - }; - }; - args = { - name = "codenamesgreen"; - packageName = "codenamesgreen"; - version = "1.0.0"; - src = let - upstream = fetchFromGitHub { - owner = "jbowens"; - repo = "codenamesgreen"; - rev = "6d014d0df14bee72495e01f12885ef31cba3bd6b"; - sha256 = "0bkaf52rnjw792q0755in4k5jbcrmgq06cl03fdl6zdr8kq2mhm0"; - }; - in - runCommand "codenamesgreen-src" {} '' - cp -a ${upstream} $out - chmod -R u+w $out - cd $out - patch -p1 < ${./codenames.patch} - ''; - dependencies = [ - sources."@babel/code-frame-7.0.0" - (sources."@babel/core-7.3.4" // { - dependencies = [ - sources."json5-2.1.3" - sources."source-map-0.5.7" - ]; - }) - (sources."@babel/generator-7.3.4" // { - dependencies = [ - sources."source-map-0.5.7" - ]; - }) - (sources."@babel/helper-annotate-as-pure-7.8.3" // { - dependencies = [ - sources."@babel/types-7.9.5" - ]; - }) - (sources."@babel/helper-builder-binary-assignment-operator-visitor-7.8.3" // { - dependencies = [ - sources."@babel/types-7.9.5" - ]; - }) - (sources."@babel/helper-builder-react-jsx-7.9.0" // { - dependencies = [ - sources."@babel/types-7.9.5" - ]; - }) - sources."@babel/helper-create-regexp-features-plugin-7.8.8" - (sources."@babel/helper-define-map-7.8.3" // { - dependencies = [ - sources."@babel/types-7.9.5" - ]; - }) - (sources."@babel/helper-explode-assignable-expression-7.8.3" // { - dependencies = [ - sources."@babel/code-frame-7.8.3" - sources."@babel/generator-7.9.5" - sources."@babel/parser-7.9.4" - sources."@babel/traverse-7.9.5" - sources."@babel/types-7.9.5" - sources."source-map-0.5.7" - ]; - }) - (sources."@babel/helper-function-name-7.9.5" // { - dependencies = [ - sources."@babel/code-frame-7.8.3" - sources."@babel/parser-7.9.4" - sources."@babel/template-7.8.6" - sources."@babel/types-7.9.5" - ]; - }) - (sources."@babel/helper-get-function-arity-7.8.3" // { - dependencies = [ - sources."@babel/types-7.9.5" - ]; - }) - (sources."@babel/helper-hoist-variables-7.8.3" // { - dependencies = [ - sources."@babel/types-7.9.5" - ]; - }) - (sources."@babel/helper-member-expression-to-functions-7.8.3" // { - dependencies = [ - sources."@babel/types-7.9.5" - ]; - }) - (sources."@babel/helper-module-imports-7.8.3" // { - dependencies = [ - sources."@babel/types-7.9.5" - ]; - }) - (sources."@babel/helper-module-transforms-7.9.0" // { - dependencies = [ - sources."@babel/code-frame-7.8.3" - sources."@babel/parser-7.9.4" - sources."@babel/template-7.8.6" - sources."@babel/types-7.9.5" - ]; - }) - (sources."@babel/helper-optimise-call-expression-7.8.3" // { - dependencies = [ - sources."@babel/types-7.9.5" - ]; - }) - sources."@babel/helper-plugin-utils-7.8.3" - sources."@babel/helper-regex-7.8.3" - (sources."@babel/helper-remap-async-to-generator-7.8.3" // { - dependencies = [ - sources."@babel/code-frame-7.8.3" - sources."@babel/generator-7.9.5" - sources."@babel/parser-7.9.4" - sources."@babel/template-7.8.6" - sources."@babel/traverse-7.9.5" - sources."@babel/types-7.9.5" - sources."source-map-0.5.7" - ]; - }) - (sources."@babel/helper-replace-supers-7.8.6" // { - dependencies = [ - sources."@babel/code-frame-7.8.3" - sources."@babel/generator-7.9.5" - sources."@babel/parser-7.9.4" - sources."@babel/traverse-7.9.5" - sources."@babel/types-7.9.5" - sources."source-map-0.5.7" - ]; - }) - (sources."@babel/helper-simple-access-7.8.3" // { - dependencies = [ - sources."@babel/code-frame-7.8.3" - sources."@babel/parser-7.9.4" - sources."@babel/template-7.8.6" - sources."@babel/types-7.9.5" - ]; - }) - (sources."@babel/helper-split-export-declaration-7.8.3" // { - dependencies = [ - sources."@babel/types-7.9.5" - ]; - }) - sources."@babel/helper-validator-identifier-7.9.5" - (sources."@babel/helper-wrap-function-7.8.3" // { - dependencies = [ - sources."@babel/code-frame-7.8.3" - sources."@babel/generator-7.9.5" - sources."@babel/parser-7.9.4" - sources."@babel/template-7.8.6" - sources."@babel/traverse-7.9.5" - sources."@babel/types-7.9.5" - sources."source-map-0.5.7" - ]; - }) - (sources."@babel/helpers-7.9.2" // { - dependencies = [ - sources."@babel/code-frame-7.8.3" - sources."@babel/generator-7.9.5" - sources."@babel/parser-7.9.4" - sources."@babel/template-7.8.6" - sources."@babel/traverse-7.9.5" - sources."@babel/types-7.9.5" - sources."source-map-0.5.7" - ]; - }) - sources."@babel/highlight-7.9.0" - sources."@babel/parser-7.3.4" - sources."@babel/plugin-proposal-async-generator-functions-7.8.3" - sources."@babel/plugin-proposal-json-strings-7.8.3" - sources."@babel/plugin-proposal-object-rest-spread-7.9.5" - sources."@babel/plugin-proposal-optional-catch-binding-7.8.3" - sources."@babel/plugin-proposal-unicode-property-regex-7.8.8" - sources."@babel/plugin-syntax-async-generators-7.8.4" - sources."@babel/plugin-syntax-flow-7.8.3" - sources."@babel/plugin-syntax-json-strings-7.8.3" - sources."@babel/plugin-syntax-jsx-7.8.3" - sources."@babel/plugin-syntax-object-rest-spread-7.8.3" - sources."@babel/plugin-syntax-optional-catch-binding-7.8.3" - sources."@babel/plugin-transform-arrow-functions-7.8.3" - sources."@babel/plugin-transform-async-to-generator-7.8.3" - sources."@babel/plugin-transform-block-scoped-functions-7.8.3" - sources."@babel/plugin-transform-block-scoping-7.8.3" - sources."@babel/plugin-transform-classes-7.9.5" - sources."@babel/plugin-transform-computed-properties-7.8.3" - sources."@babel/plugin-transform-destructuring-7.9.5" - sources."@babel/plugin-transform-dotall-regex-7.8.3" - sources."@babel/plugin-transform-duplicate-keys-7.8.3" - sources."@babel/plugin-transform-exponentiation-operator-7.8.3" - sources."@babel/plugin-transform-flow-strip-types-7.3.4" - sources."@babel/plugin-transform-for-of-7.9.0" - sources."@babel/plugin-transform-function-name-7.8.3" - sources."@babel/plugin-transform-literals-7.8.3" - sources."@babel/plugin-transform-modules-amd-7.9.0" - sources."@babel/plugin-transform-modules-commonjs-7.2.0" - sources."@babel/plugin-transform-modules-systemjs-7.9.0" - sources."@babel/plugin-transform-modules-umd-7.9.0" - sources."@babel/plugin-transform-named-capturing-groups-regex-7.8.3" - sources."@babel/plugin-transform-new-target-7.8.3" - sources."@babel/plugin-transform-object-super-7.8.3" - sources."@babel/plugin-transform-parameters-7.9.5" - sources."@babel/plugin-transform-react-jsx-7.3.0" - sources."@babel/plugin-transform-regenerator-7.8.7" - sources."@babel/plugin-transform-shorthand-properties-7.8.3" - sources."@babel/plugin-transform-spread-7.8.3" - sources."@babel/plugin-transform-sticky-regex-7.8.3" - sources."@babel/plugin-transform-template-literals-7.8.3" - sources."@babel/plugin-transform-typeof-symbol-7.8.4" - sources."@babel/plugin-transform-unicode-regex-7.8.3" - sources."@babel/preset-env-7.3.4" - (sources."@babel/runtime-7.3.4" // { - dependencies = [ - sources."regenerator-runtime-0.12.1" - ]; - }) - sources."@babel/template-7.2.2" - sources."@babel/traverse-7.3.4" - sources."@babel/types-7.3.4" - sources."@iarna/toml-2.2.5" - sources."@mrmlnc/readdir-enhanced-2.2.1" - sources."@nodelib/fs.stat-1.1.3" - sources."@parcel/fs-1.11.0" - sources."@parcel/logger-1.11.1" - sources."@parcel/utils-1.11.0" - sources."@parcel/watcher-1.12.1" - sources."@parcel/workers-1.11.0" - sources."@types/q-1.5.2" - sources."abab-2.0.3" - sources."abbrev-1.1.1" - sources."acorn-7.1.1" - (sources."acorn-globals-4.3.4" // { - dependencies = [ - sources."acorn-6.4.1" - ]; - }) - sources."acorn-walk-6.2.0" - sources."ajv-6.12.2" - sources."alphanum-sort-1.0.2" - sources."ansi-regex-3.0.0" - sources."ansi-styles-3.2.1" - (sources."ansi-to-html-0.6.14" // { - dependencies = [ - sources."entities-1.1.2" - ]; - }) - (sources."anymatch-2.0.0" // { - dependencies = [ - sources."normalize-path-2.1.1" - ]; - }) - sources."argparse-1.0.10" - sources."arr-diff-4.0.0" - sources."arr-flatten-1.1.0" - sources."arr-union-3.1.0" - sources."array-equal-1.0.0" - sources."array-unique-0.3.2" - sources."asn1-0.2.4" - sources."asn1.js-4.10.1" - (sources."assert-1.5.0" // { - dependencies = [ - sources."inherits-2.0.1" - sources."util-0.10.3" - ]; - }) - sources."assert-plus-1.0.0" - sources."assign-symbols-1.0.0" - sources."async-each-1.0.3" - sources."async-limiter-1.0.1" - sources."asynckit-0.4.0" - sources."atob-2.1.2" - sources."aws-sign2-0.7.0" - sources."aws4-1.9.1" - sources."babel-plugin-dynamic-import-node-2.3.3" - (sources."babel-runtime-6.26.0" // { - dependencies = [ - sources."regenerator-runtime-0.11.1" - ]; - }) - (sources."babel-types-6.26.0" // { - dependencies = [ - sources."to-fast-properties-1.0.3" - ]; - }) - sources."babylon-walk-1.0.2" - sources."balanced-match-1.0.0" - (sources."base-0.11.2" // { - dependencies = [ - sources."define-property-1.0.0" - sources."is-accessor-descriptor-1.0.0" - sources."is-data-descriptor-1.0.0" - sources."is-descriptor-1.0.2" - ]; - }) - sources."base64-js-1.3.1" - sources."bcrypt-pbkdf-1.0.2" - sources."binary-extensions-1.13.1" - sources."bindings-1.5.0" - sources."bn.js-4.11.8" - sources."boolbase-1.0.0" - sources."brace-expansion-1.1.11" - (sources."braces-2.3.2" // { - dependencies = [ - sources."extend-shallow-2.0.1" - ]; - }) - sources."brfs-1.6.1" - sources."brorand-1.1.0" - sources."browser-process-hrtime-1.0.0" - sources."browserify-aes-1.2.0" - sources."browserify-cipher-1.0.1" - sources."browserify-des-1.0.2" - sources."browserify-rsa-4.0.1" - sources."browserify-sign-4.0.4" - (sources."browserify-zlib-0.2.0" // { - dependencies = [ - sources."pako-1.0.11" - ]; - }) - sources."browserslist-4.12.0" - sources."buffer-4.9.2" - sources."buffer-equal-0.0.1" - sources."buffer-from-1.1.1" - sources."buffer-xor-1.0.3" - sources."builtin-status-codes-3.0.0" - sources."cache-base-1.0.1" - sources."call-me-maybe-1.0.1" - sources."caller-callsite-2.0.0" - sources."caller-path-2.0.0" - sources."callsites-2.0.0" - sources."camelcase-5.3.1" - sources."caniuse-api-3.0.0" - sources."caniuse-lite-1.0.30001048" - sources."caseless-0.12.0" - (sources."chalk-2.4.2" // { - dependencies = [ - sources."supports-color-5.5.0" - ]; - }) - (sources."chokidar-2.1.8" // { - dependencies = [ - sources."fsevents-1.2.12" - ]; - }) - sources."cipher-base-1.0.4" - (sources."class-utils-0.3.6" // { - dependencies = [ - sources."define-property-0.2.5" - ]; - }) - sources."cli-cursor-2.1.0" - sources."cli-spinners-1.3.1" - (sources."cliui-5.0.0" // { - dependencies = [ - sources."ansi-regex-4.1.0" - sources."strip-ansi-5.2.0" - ]; - }) - sources."clone-2.1.2" - sources."clones-1.2.0" - sources."coa-2.0.2" - sources."collection-visit-1.0.0" - sources."color-3.1.2" - sources."color-convert-1.9.3" - sources."color-name-1.1.3" - sources."color-string-1.5.3" - sources."combined-stream-1.0.8" - sources."command-exists-1.2.9" - sources."commander-2.20.3" - sources."component-emitter-1.3.0" - sources."concat-map-0.0.1" - sources."concat-stream-1.6.2" - sources."config-chain-1.1.12" - sources."console-browserify-1.2.0" - sources."constants-browserify-1.0.0" - sources."convert-source-map-1.7.0" - sources."copy-descriptor-0.1.1" - sources."core-js-2.6.11" - sources."core-util-is-1.0.2" - sources."cosmiconfig-5.2.1" - sources."create-ecdh-4.0.3" - sources."create-hash-1.2.0" - sources."create-hmac-1.1.7" - sources."cross-spawn-6.0.5" - sources."crypto-browserify-3.12.0" - sources."css-color-names-0.0.4" - sources."css-declaration-sorter-4.0.1" - (sources."css-modules-loader-core-1.1.0" // { - dependencies = [ - sources."ansi-regex-2.1.1" - sources."ansi-styles-2.2.1" - (sources."chalk-1.1.3" // { - dependencies = [ - sources."supports-color-2.0.0" - ]; - }) - sources."has-flag-1.0.0" - sources."postcss-6.0.1" - sources."source-map-0.5.7" - sources."strip-ansi-3.0.1" - sources."supports-color-3.2.3" - ]; - }) - sources."css-select-2.1.0" - sources."css-select-base-adapter-0.1.1" - sources."css-selector-tokenizer-0.7.2" - sources."css-tree-1.0.0-alpha.37" - sources."css-what-3.2.1" - sources."cssesc-3.0.0" - sources."cssnano-4.1.10" - sources."cssnano-preset-default-4.0.7" - sources."cssnano-util-get-arguments-4.0.0" - sources."cssnano-util-get-match-4.0.0" - sources."cssnano-util-raw-cache-4.0.1" - sources."cssnano-util-same-parent-4.0.1" - (sources."csso-4.0.3" // { - dependencies = [ - sources."css-tree-1.0.0-alpha.39" - sources."mdn-data-2.0.6" - ]; - }) - sources."cssom-0.3.8" - sources."cssstyle-1.4.0" - sources."dashdash-1.14.1" - sources."data-urls-1.1.0" - sources."deasync-0.1.19" - sources."debug-4.1.1" - sources."decamelize-1.2.0" - sources."decode-uri-component-0.2.0" - sources."deep-is-0.1.3" - (sources."defaults-1.0.3" // { - dependencies = [ - sources."clone-1.0.4" - ]; - }) - sources."define-properties-1.1.3" - (sources."define-property-2.0.2" // { - dependencies = [ - sources."is-accessor-descriptor-1.0.0" - sources."is-data-descriptor-1.0.0" - sources."is-descriptor-1.0.2" - ]; - }) - sources."delayed-stream-1.0.0" - sources."depd-1.1.2" - sources."des.js-1.0.1" - sources."destroy-1.0.4" - sources."diffie-hellman-5.0.3" - (sources."dom-serializer-0.2.2" // { - dependencies = [ - sources."domelementtype-2.0.1" - ]; - }) - sources."domain-browser-1.2.0" - sources."domelementtype-1.3.1" - sources."domexception-1.0.1" - sources."domhandler-2.4.2" - sources."domutils-1.7.0" - sources."dot-prop-5.2.0" - sources."dotenv-5.0.1" - sources."dotenv-expand-4.2.0" - sources."duplexer2-0.1.4" - sources."ecc-jsbn-0.1.2" - sources."editorconfig-0.15.3" - sources."ee-first-1.1.1" - sources."electron-to-chromium-1.3.418" - sources."elliptic-6.5.2" - sources."elm-hot-1.1.1" - sources."emoji-regex-7.0.3" - sources."encodeurl-1.0.2" - sources."entities-2.0.0" - sources."error-ex-1.3.2" - sources."es-abstract-1.17.5" - sources."es-to-primitive-1.2.1" - sources."escape-html-1.0.3" - sources."escape-string-regexp-1.0.5" - (sources."escodegen-1.9.1" // { - dependencies = [ - sources."esprima-3.1.3" - ]; - }) - sources."esprima-4.0.1" - sources."estraverse-4.3.0" - sources."esutils-2.0.3" - sources."etag-1.8.1" - sources."events-3.1.0" - sources."evp_bytestokey-1.0.3" - (sources."expand-brackets-2.1.4" // { - dependencies = [ - sources."debug-2.6.9" - sources."define-property-0.2.5" - sources."extend-shallow-2.0.1" - sources."ms-2.0.0" - ]; - }) - sources."extend-3.0.2" - (sources."extend-shallow-3.0.2" // { - dependencies = [ - sources."is-extendable-1.0.1" - ]; - }) - (sources."extglob-2.0.4" // { - dependencies = [ - sources."define-property-1.0.0" - sources."extend-shallow-2.0.1" - sources."is-accessor-descriptor-1.0.0" - sources."is-data-descriptor-1.0.0" - sources."is-descriptor-1.0.2" - ]; - }) - sources."extsprintf-1.3.0" - (sources."falafel-2.2.4" // { - dependencies = [ - sources."isarray-2.0.5" - ]; - }) - sources."fast-deep-equal-3.1.1" - sources."fast-glob-2.2.7" - sources."fast-json-stable-stringify-2.1.0" - sources."fast-levenshtein-2.0.6" - sources."fastparse-1.1.2" - sources."file-uri-to-path-1.0.0" - sources."filesize-3.6.1" - (sources."fill-range-4.0.0" // { - dependencies = [ - sources."extend-shallow-2.0.1" - ]; - }) - sources."find-elm-dependencies-2.0.2" - sources."find-up-2.1.0" - sources."firstline-1.2.0" - sources."for-in-1.0.2" - sources."foreach-2.0.5" - sources."forever-agent-0.6.1" - sources."form-data-2.3.3" - sources."fragment-cache-0.2.1" - sources."fresh-0.5.2" - sources."fs.realpath-1.0.0" - sources."function-bind-1.1.1" - sources."get-caller-file-2.0.5" - sources."get-port-3.2.0" - sources."get-value-2.0.6" - sources."getpass-0.1.7" - sources."glob-7.1.4" - (sources."glob-parent-3.1.0" // { - dependencies = [ - sources."is-glob-3.1.0" - ]; - }) - sources."glob-to-regexp-0.3.0" - sources."globals-11.12.0" - sources."graceful-fs-4.2.3" - sources."grapheme-breaker-0.3.2" - sources."har-schema-2.0.0" - sources."har-validator-5.1.3" - sources."has-1.0.3" - (sources."has-ansi-2.0.0" // { - dependencies = [ - sources."ansi-regex-2.1.1" - ]; - }) - sources."has-flag-3.0.0" - sources."has-symbols-1.0.1" - sources."has-value-1.0.0" - (sources."has-values-1.0.0" // { - dependencies = [ - sources."kind-of-4.0.0" - ]; - }) - sources."hash-base-3.0.4" - sources."hash.js-1.1.7" - sources."hex-color-regex-1.1.0" - sources."hmac-drbg-1.0.1" - sources."hsl-regex-1.0.0" - sources."hsla-regex-1.0.0" - sources."html-comment-regex-1.1.2" - sources."html-encoding-sniffer-1.0.2" - sources."html-tags-1.2.0" - (sources."htmlnano-0.2.5" // { - dependencies = [ - sources."posthtml-0.12.3" - sources."terser-4.6.12" - ]; - }) - (sources."htmlparser2-3.10.1" // { - dependencies = [ - sources."entities-1.1.2" - sources."readable-stream-3.6.0" - ]; - }) - sources."http-errors-1.7.3" - sources."http-signature-1.2.0" - sources."https-browserify-1.0.0" - sources."iconv-lite-0.4.24" - sources."icss-replace-symbols-1.1.0" - sources."ieee754-1.1.13" - sources."import-fresh-2.0.0" - sources."indexes-of-1.0.1" - sources."inflight-1.0.6" - sources."inherits-2.0.4" - sources."ini-1.3.5" - sources."invariant-2.2.4" - sources."is-absolute-url-2.1.0" - (sources."is-accessor-descriptor-0.1.6" // { - dependencies = [ - sources."kind-of-3.2.2" - ]; - }) - sources."is-arrayish-0.2.1" - sources."is-binary-path-1.0.1" - sources."is-buffer-1.1.6" - sources."is-callable-1.1.5" - sources."is-color-stop-1.1.0" - (sources."is-data-descriptor-0.1.4" // { - dependencies = [ - sources."kind-of-3.2.2" - ]; - }) - sources."is-date-object-1.0.2" - (sources."is-descriptor-0.1.6" // { - dependencies = [ - sources."kind-of-5.1.0" - ]; - }) - sources."is-directory-0.3.1" - sources."is-extendable-0.1.1" - sources."is-extglob-2.1.1" - sources."is-fullwidth-code-point-2.0.0" - sources."is-glob-4.0.1" - sources."is-html-1.1.0" - (sources."is-number-3.0.0" // { - dependencies = [ - sources."kind-of-3.2.2" - ]; - }) - sources."is-obj-2.0.0" - sources."is-plain-object-2.0.4" - sources."is-regex-1.0.5" - sources."is-resolvable-1.1.0" - sources."is-svg-3.0.0" - sources."is-symbol-1.0.3" - sources."is-typedarray-1.0.0" - sources."is-url-1.2.4" - sources."is-windows-1.0.2" - sources."is-wsl-1.1.0" - sources."isarray-1.0.0" - sources."isexe-2.0.0" - sources."isobject-3.0.1" - sources."isstream-0.1.2" - (sources."js-beautify-1.11.0" // { - dependencies = [ - sources."mkdirp-1.0.4" - ]; - }) - sources."js-levenshtein-1.1.6" - sources."js-tokens-4.0.0" - sources."js-yaml-3.13.1" - sources."jsbn-0.1.1" - (sources."jsdom-14.1.0" // { - dependencies = [ - sources."acorn-6.4.1" - sources."escodegen-1.14.1" - sources."ws-6.2.1" - ]; - }) - sources."jsesc-2.5.2" - sources."json-parse-better-errors-1.0.2" - sources."json-schema-0.2.3" - sources."json-schema-traverse-0.4.1" - sources."json-stringify-safe-5.0.1" - sources."json5-1.0.1" - sources."jsprim-1.4.1" - sources."kind-of-6.0.3" - sources."levn-0.3.0" - sources."locate-path-2.0.0" - sources."lodash-4.17.15" - sources."lodash.clone-4.5.0" - sources."lodash.memoize-4.1.2" - sources."lodash.sortby-4.7.0" - sources."lodash.uniq-4.5.0" - sources."log-symbols-2.2.0" - sources."loose-envify-1.4.0" - sources."lru-cache-4.1.5" - sources."magic-string-0.22.5" - sources."map-cache-0.2.2" - sources."map-visit-1.0.0" - sources."md5.js-1.3.5" - sources."mdn-data-2.0.4" - (sources."merge-source-map-1.0.4" // { - dependencies = [ - sources."source-map-0.5.7" - ]; - }) - sources."merge2-1.3.0" - sources."micromatch-3.1.10" - sources."miller-rabin-4.0.1" - sources."mime-1.6.0" - sources."mime-db-1.44.0" - sources."mime-types-2.1.27" - sources."mimic-fn-1.2.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."mixin-deep-1.3.2" // { - dependencies = [ - sources."is-extendable-1.0.1" - ]; - }) - sources."mkdirp-0.5.5" - sources."ms-2.1.2" - sources."nan-2.14.1" - sources."nanomatch-1.2.13" - sources."nice-try-1.0.5" - sources."node-addon-api-1.7.1" - sources."node-elm-compiler-5.0.4" - sources."node-forge-0.7.6" - (sources."node-libs-browser-2.2.1" // { - dependencies = [ - sources."punycode-1.4.1" - ]; - }) - sources."node-releases-1.1.53" - sources."nopt-4.0.3" - sources."normalize-html-whitespace-1.0.0" - sources."normalize-path-3.0.0" - sources."normalize-url-3.3.0" - sources."nth-check-1.0.2" - sources."nwsapi-2.2.0" - sources."oauth-sign-0.9.0" - sources."object-assign-4.1.1" - (sources."object-copy-0.1.0" // { - dependencies = [ - sources."define-property-0.2.5" - sources."kind-of-3.2.2" - ]; - }) - sources."object-inspect-1.7.0" - sources."object-keys-1.1.1" - sources."object-visit-1.0.1" - sources."object.assign-4.1.0" - sources."object.getownpropertydescriptors-2.1.0" - sources."object.pick-1.3.0" - sources."object.values-1.1.1" - sources."on-finished-2.3.0" - sources."once-1.4.0" - sources."onetime-2.0.1" - sources."opn-5.5.0" - sources."optionator-0.8.3" - sources."ora-2.1.0" - sources."os-browserify-0.3.0" - sources."os-homedir-1.0.2" - sources."os-tmpdir-1.0.2" - sources."osenv-0.1.5" - sources."p-limit-1.3.0" - sources."p-locate-2.0.0" - sources."p-try-1.0.0" - sources."pako-0.2.9" - (sources."parcel-bundler-1.12.3" // { - dependencies = [ - sources."postcss-value-parser-3.3.1" - ]; - }) - sources."parse-asn1-5.1.5" - sources."parse-json-4.0.0" - sources."parse5-5.1.0" - sources."parseurl-1.3.3" - sources."pascalcase-0.1.1" - sources."path-browserify-0.0.1" - sources."path-dirname-1.0.2" - sources."path-exists-3.0.0" - sources."path-is-absolute-1.0.1" - sources."path-key-2.0.1" - sources."path-parse-1.0.6" - sources."pbkdf2-3.0.17" - sources."performance-now-2.1.0" - sources."physical-cpu-count-2.0.0" - sources."pkg-up-2.0.0" - sources."pn-1.1.0" - sources."posix-character-classes-0.1.1" - sources."postcss-7.0.27" - sources."postcss-calc-7.0.2" - (sources."postcss-colormin-4.0.3" // { - dependencies = [ - sources."postcss-value-parser-3.3.1" - ]; - }) - (sources."postcss-convert-values-4.0.1" // { - dependencies = [ - sources."postcss-value-parser-3.3.1" - ]; - }) - sources."postcss-discard-comments-4.0.2" - sources."postcss-discard-duplicates-4.0.2" - sources."postcss-discard-empty-4.0.1" - sources."postcss-discard-overridden-4.0.1" - (sources."postcss-merge-longhand-4.0.11" // { - dependencies = [ - sources."postcss-value-parser-3.3.1" - ]; - }) - (sources."postcss-merge-rules-4.0.3" // { - dependencies = [ - sources."postcss-selector-parser-3.1.2" - ]; - }) - (sources."postcss-minify-font-values-4.0.2" // { - dependencies = [ - sources."postcss-value-parser-3.3.1" - ]; - }) - (sources."postcss-minify-gradients-4.0.2" // { - dependencies = [ - sources."postcss-value-parser-3.3.1" - ]; - }) - (sources."postcss-minify-params-4.0.2" // { - dependencies = [ - sources."postcss-value-parser-3.3.1" - ]; - }) - (sources."postcss-minify-selectors-4.0.2" // { - dependencies = [ - sources."postcss-selector-parser-3.1.2" - ]; - }) - (sources."postcss-modules-extract-imports-1.1.0" // { - dependencies = [ - sources."postcss-6.0.23" - sources."supports-color-5.5.0" - ]; - }) - (sources."postcss-modules-local-by-default-1.2.0" // { - dependencies = [ - sources."postcss-6.0.23" - sources."supports-color-5.5.0" - ]; - }) - (sources."postcss-modules-scope-1.1.0" // { - dependencies = [ - sources."postcss-6.0.23" - sources."supports-color-5.5.0" - ]; - }) - (sources."postcss-modules-values-1.3.0" // { - dependencies = [ - sources."postcss-6.0.23" - sources."supports-color-5.5.0" - ]; - }) - sources."postcss-normalize-charset-4.0.1" - (sources."postcss-normalize-display-values-4.0.2" // { - dependencies = [ - sources."postcss-value-parser-3.3.1" - ]; - }) - (sources."postcss-normalize-positions-4.0.2" // { - dependencies = [ - sources."postcss-value-parser-3.3.1" - ]; - }) - (sources."postcss-normalize-repeat-style-4.0.2" // { - dependencies = [ - sources."postcss-value-parser-3.3.1" - ]; - }) - (sources."postcss-normalize-string-4.0.2" // { - dependencies = [ - sources."postcss-value-parser-3.3.1" - ]; - }) - (sources."postcss-normalize-timing-functions-4.0.2" // { - dependencies = [ - sources."postcss-value-parser-3.3.1" - ]; - }) - (sources."postcss-normalize-unicode-4.0.1" // { - dependencies = [ - sources."postcss-value-parser-3.3.1" - ]; - }) - (sources."postcss-normalize-url-4.0.1" // { - dependencies = [ - sources."postcss-value-parser-3.3.1" - ]; - }) - (sources."postcss-normalize-whitespace-4.0.2" // { - dependencies = [ - sources."postcss-value-parser-3.3.1" - ]; - }) - (sources."postcss-ordered-values-4.1.2" // { - dependencies = [ - sources."postcss-value-parser-3.3.1" - ]; - }) - sources."postcss-reduce-initial-4.0.3" - (sources."postcss-reduce-transforms-4.0.2" // { - dependencies = [ - sources."postcss-value-parser-3.3.1" - ]; - }) - sources."postcss-selector-parser-6.0.2" - (sources."postcss-svgo-4.0.2" // { - dependencies = [ - sources."postcss-value-parser-3.3.1" - ]; - }) - sources."postcss-unique-selectors-4.0.1" - sources."postcss-value-parser-4.0.3" - sources."posthtml-0.11.6" - sources."posthtml-parser-0.4.2" - sources."posthtml-render-1.2.2" - sources."prelude-ls-1.1.2" - sources."private-0.1.8" - sources."process-0.11.10" - sources."process-nextick-args-2.0.1" - sources."proto-list-1.2.4" - sources."pseudomap-1.0.2" - sources."psl-1.8.0" - sources."public-encrypt-4.0.3" - sources."punycode-2.1.1" - sources."purgecss-1.4.2" - sources."q-1.5.1" - sources."qs-6.5.2" - sources."querystring-0.2.0" - sources."querystring-es3-0.2.1" - sources."quote-stream-1.0.2" - sources."randombytes-2.1.0" - sources."randomfill-1.0.4" - sources."range-parser-1.2.1" - sources."readable-stream-2.3.7" - sources."readdirp-2.2.1" - sources."regenerate-1.4.0" - sources."regenerate-unicode-properties-8.2.0" - sources."regenerator-runtime-0.13.5" - (sources."regenerator-transform-0.14.4" // { - dependencies = [ - sources."@babel/runtime-7.9.2" - ]; - }) - sources."regex-not-1.0.2" - sources."regexpu-core-4.7.0" - sources."regjsgen-0.5.1" - (sources."regjsparser-0.6.4" // { - dependencies = [ - sources."jsesc-0.5.0" - ]; - }) - sources."remove-trailing-separator-1.1.0" - sources."repeat-element-1.1.3" - sources."repeat-string-1.6.1" - sources."request-2.88.2" - sources."request-promise-core-1.1.3" - sources."request-promise-native-1.0.8" - sources."require-directory-2.1.1" - sources."require-main-filename-2.0.0" - sources."resolve-1.17.0" - sources."resolve-from-3.0.0" - sources."resolve-url-0.2.1" - sources."restore-cursor-2.0.0" - sources."ret-0.1.15" - sources."rgb-regex-1.0.1" - sources."rgba-regex-1.0.0" - sources."rimraf-2.6.3" - sources."ripemd160-2.0.2" - sources."safe-buffer-5.1.2" - sources."safe-regex-1.1.0" - sources."safer-buffer-2.1.2" - sources."safer-eval-1.3.6" - sources."sax-1.2.4" - sources."saxes-3.1.11" - sources."semver-5.7.1" - (sources."send-0.17.1" // { - dependencies = [ - (sources."debug-2.6.9" // { - dependencies = [ - sources."ms-2.0.0" - ]; - }) - sources."ms-2.1.1" - ]; - }) - sources."serialize-to-js-1.2.2" - sources."serve-static-1.14.1" - sources."set-blocking-2.0.0" - (sources."set-value-2.0.1" // { - dependencies = [ - sources."extend-shallow-2.0.1" - ]; - }) - sources."setimmediate-1.0.5" - sources."setprototypeof-1.1.1" - sources."sha.js-2.4.11" - sources."shallow-copy-0.0.1" - sources."shebang-command-1.2.0" - sources."shebang-regex-1.0.0" - sources."sigmund-1.0.1" - sources."signal-exit-3.0.3" - (sources."simple-swizzle-0.2.2" // { - dependencies = [ - sources."is-arrayish-0.3.2" - ]; - }) - (sources."snapdragon-0.8.2" // { - dependencies = [ - sources."debug-2.6.9" - sources."define-property-0.2.5" - sources."extend-shallow-2.0.1" - sources."ms-2.0.0" - sources."source-map-0.5.7" - ]; - }) - (sources."snapdragon-node-2.1.1" // { - dependencies = [ - sources."define-property-1.0.0" - sources."is-accessor-descriptor-1.0.0" - sources."is-data-descriptor-1.0.0" - sources."is-descriptor-1.0.2" - ]; - }) - (sources."snapdragon-util-3.0.1" // { - dependencies = [ - sources."kind-of-3.2.2" - ]; - }) - sources."source-map-0.6.1" - sources."source-map-resolve-0.5.3" - sources."source-map-support-0.5.19" - sources."source-map-url-0.4.0" - sources."split-string-3.1.0" - sources."sprintf-js-1.0.3" - sources."sshpk-1.16.1" - sources."stable-0.1.8" - (sources."static-eval-2.0.5" // { - dependencies = [ - sources."escodegen-1.14.1" - ]; - }) - (sources."static-extend-0.1.2" // { - dependencies = [ - sources."define-property-0.2.5" - ]; - }) - (sources."static-module-2.2.5" // { - dependencies = [ - sources."object-inspect-1.4.1" - ]; - }) - sources."statuses-1.5.0" - sources."stealthy-require-1.1.1" - sources."stream-browserify-2.0.2" - sources."stream-http-2.8.3" - (sources."string-width-3.1.0" // { - dependencies = [ - sources."ansi-regex-4.1.0" - sources."strip-ansi-5.2.0" - ]; - }) - sources."string.prototype.trimend-1.0.1" - sources."string.prototype.trimleft-2.1.2" - sources."string.prototype.trimright-2.1.2" - sources."string.prototype.trimstart-1.0.1" - sources."string_decoder-1.1.1" - sources."strip-ansi-4.0.0" - (sources."stylehacks-4.0.3" // { - dependencies = [ - sources."postcss-selector-parser-3.1.2" - ]; - }) - sources."supports-color-6.1.0" - sources."svgo-1.3.2" - sources."symbol-tree-3.2.4" - sources."temp-0.9.0" - sources."terser-3.17.0" - sources."through2-2.0.5" - sources."timers-browserify-2.0.11" - sources."timsort-0.3.0" - sources."tiny-inflate-1.0.3" - sources."to-arraybuffer-1.0.1" - sources."to-fast-properties-2.0.0" - (sources."to-object-path-0.3.0" // { - dependencies = [ - sources."kind-of-3.2.2" - ]; - }) - sources."to-regex-3.0.2" - sources."to-regex-range-2.1.1" - sources."toidentifier-1.0.0" - sources."tough-cookie-2.5.0" - sources."tr46-1.0.1" - sources."trim-right-1.0.1" - sources."tty-browserify-0.0.0" - sources."tunnel-agent-0.6.0" - sources."tweetnacl-0.14.5" - sources."type-check-0.3.2" - sources."typedarray-0.0.6" - (sources."uncss-0.17.3" // { - dependencies = [ - sources."is-absolute-url-3.0.3" - ]; - }) - sources."unicode-canonical-property-names-ecmascript-1.0.4" - sources."unicode-match-property-ecmascript-1.0.4" - sources."unicode-match-property-value-ecmascript-1.2.0" - sources."unicode-property-aliases-ecmascript-1.1.0" - sources."unicode-trie-0.3.1" - sources."union-value-1.0.1" - sources."uniq-1.0.1" - sources."uniqs-2.0.0" - sources."unquote-1.1.1" - (sources."unset-value-1.0.0" // { - dependencies = [ - (sources."has-value-0.3.1" // { - dependencies = [ - sources."isobject-2.1.0" - ]; - }) - sources."has-values-0.1.4" - ]; - }) - sources."upath-1.2.0" - sources."uri-js-4.2.2" - sources."urix-0.1.0" - (sources."url-0.11.0" // { - dependencies = [ - sources."punycode-1.3.2" - ]; - }) - sources."use-3.1.1" - (sources."util-0.11.1" // { - dependencies = [ - sources."inherits-2.0.3" - ]; - }) - sources."util-deprecate-1.0.2" - sources."util.promisify-1.0.1" - sources."uuid-3.4.0" - sources."v8-compile-cache-2.1.0" - sources."vendors-1.0.4" - sources."verror-1.10.0" - sources."vlq-0.2.3" - sources."vm-browserify-1.1.2" - sources."w3c-hr-time-1.0.2" - sources."w3c-xmlserializer-1.1.2" - sources."wcwidth-1.0.1" - sources."webidl-conversions-4.0.2" - sources."whatwg-encoding-1.0.5" - sources."whatwg-mimetype-2.3.0" - sources."whatwg-url-7.1.0" - sources."which-1.3.1" - sources."which-module-2.0.0" - sources."word-wrap-1.2.3" - (sources."wrap-ansi-5.1.0" // { - dependencies = [ - sources."ansi-regex-4.1.0" - sources."strip-ansi-5.2.0" - ]; - }) - sources."wrappy-1.0.2" - sources."ws-5.2.2" - sources."xml-name-validator-3.0.0" - sources."xmlchars-2.2.0" - sources."xtend-4.0.2" - sources."y18n-4.0.0" - sources."yallist-2.1.2" - (sources."yargs-14.2.3" // { - dependencies = [ - sources."find-up-3.0.0" - sources."locate-path-3.0.0" - sources."p-limit-2.3.0" - sources."p-locate-3.0.0" - sources."p-try-2.2.0" - ]; - }) - sources."yargs-parser-15.0.1" - ]; - buildInputs = globalBuildInputs; - meta = { - license = "MIT"; - }; - production = false; - bypassCache = true; - reconstructLock = false; - }; -in -{ - args = args; - sources = sources; - tarball = nodeEnv.buildNodeSourceDist args; - package = nodeEnv.buildNodePackage args; - shell = nodeEnv.buildNodeShell args; -} diff --git a/modules/private/websites/tools/games/codenames/registry.dat b/modules/private/websites/tools/games/codenames/registry.dat deleted file mode 100644 index a8585a8..0000000 Binary files a/modules/private/websites/tools/games/codenames/registry.dat and /dev/null differ diff --git a/modules/private/websites/tools/games/codenames/shell.nix b/modules/private/websites/tools/games/codenames/shell.nix deleted file mode 100644 index 053696b..0000000 --- a/modules/private/websites/tools/games/codenames/shell.nix +++ /dev/null @@ -1,50 +0,0 @@ -{ pkgs ? import {} }: with pkgs; -let - greenapid = callPackage ./greenapid.nix {}; - frontend = callPackage ./frontend.nix {}; - nginx_conf = writeText "nginx.conf" '' - pid ./nginx.pid; - error_log stderr; - daemon off; - events { - } - http { - include ${mailcap}/etc/nginx/mime.types; - server { - listen 0.0.0.0:8081; - listen [::]:8081; - location /api/ { - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header Host $host; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_pass http://127.0.0.1:8080/; - } - location / { - root ${frontend}; - try_files $uri $uri/ /index.html; - } - } - } - ''; -in -pkgs.mkShell { - buildInputs = [ - greenapid - frontend - python2 - nginx - ]; - shellHook = '' - greenapid & - pid=$! - - finish() { - kill $pid; - } - - trap finish EXIT - - nginx -c ${nginx_conf} -p ./nginx/ - exit - ''; -} diff --git a/modules/private/websites/tools/games/codenames/wordlists/french.txt b/modules/private/websites/tools/games/codenames/wordlists/french.txt deleted file mode 100644 index 462ddc4..0000000 --- a/modules/private/websites/tools/games/codenames/wordlists/french.txt +++ /dev/null @@ -1,694 +0,0 @@ -ACCIDENT -ACHAT -ACNÉ -ACTION -ADOLESCENT -AFRIQUE -AIGUILLE -ALLUMER -ALPES -ALPHABET -ALTITUDE -AMÉRIQUE -AMI -AMOUR -AMPOULE -ANNIVERSAIRE -APPÉTIT -ARAIGNÉE -ARBRE -ARC -ARC-EN-CIEL -ARGENT -ARME -ARMÉE -ASCENSEUR -ASIE -ASSIS -ASTRONAUTE -ATCHOUM -ATHLÈTE -ATLANTIDE -AUBE -AUSTRALIE -AVEC -AVENTURE -AVION -AVOCAT -BAC -BAGUETTE -BAIN -BAISER -BALAI -BALLE -BALLON -BAMBOU -BANANE -BANNIR -BARBE -BARRIÈRE -BAS -BASKET -BATEAU -BÂTON -BATTERIE -BÉBÉ -BEETHOVEN -BÊTE -BIBERON -BIÈRE -BLANC -BLÉ -BLEU -BOB -BOISSON -BOÎTE -BOMBE -BONBON -BONNET -BORD -BORDEAUX -BOTTE -BOUE -BOUGIE -BOULE -BOUTEILLE -BOUTON -BRANCHE -BRAS -BRAVO -BRETAGNE -BRISE -BROSSE -BRUIT -BRUME -BRUN -BÛCHE -BULLE -BUREAU -BUT -CABANE -CABINE -CACHER -CADEAU -CAFARD -CAFÉ -CAISSE -CALCULER -CALME -CAMÉRA -CAMION -CAMPING -CANADA -CANARD -CANETTE -CANINE -CAP -CAPITALISME -CAR -CAROTTE -CARRÉ -CARTE -CARTON -CASQUE -CASSER -CASSETTE -CAUCHEMAR -CAUSE -CEINTURE -CELLULE -CERCLE -CHAÎNE -CHAIR -CHAISE -CHAMP -CHAMPION -CHANT -CHAPEAU -CHARBON -CHARGE -CHASSE -CHAT -CHÂTEAU -CHAUD -CHAUSSURE -CHAUVE -CHEF -CHEMISE -CHÊNE -CHER -CHEVAL -CHEVALIER -CHEVEU -CHIEN -CHIFFRE -CHINE -CHOCOLAT -CHÔMAGE -CIEL -CIL -CINÉMA -CIRE -CIRQUE -CITRON -CLÉ -CLOU -CLOWN -COACH -COCCINELLE -CODE -CŒUR -COL -COLLE -COLLINE -COLONNE -CÔNE -CONFORT -CONTINU -CONTRE -CONVERSATION -COPAIN -COQ -COQUILLAGE -CORBEAU -CORDE -CORPS -CÔTE -COUDE -COULOIR -COUP -COUR -COURANT -COURRIER -COURS -COURSE -COURT -COUTEAU -COUVERT -COUVERTURE -COWBOY -CRAC -CRAYON -CRÈME -CRITIQUE -CROCHET -CROIX -CROÛTE -CUILLÈRE -CUIR -CUISINE -CULOTTE -CYCLE -DARD -DÉ -DEBOUT -DÉFAUT -DEHORS -DÉMOCRATIE -DENT -DENTISTE -DESSIN -DEVOIR -DIAMANT -DICTIONNAIRE -DIEU -DINOSAURE -DISCOURS -DISQUE -DIX -DOCTEUR -DOIGT -DOMINO -DORMIR -DROIT -EAU -ÉCHEC -ÉCHELLE -ÉCLAIR -ÉCOLE -ÉCRAN -ÉCRASER -ÉCRIT -ÉGLISE -ÉGOUT -ÉLECTRICITÉ -ÉLÉPHANT -ÉLÈVE -ELFE -EMPREINTE -ENCEINTE -ÉPICE -ÉPINE -ERREUR -ESPACE -ESPION -ESSENCE -ÉTAT -ÉTÉ -ÉTOILE -ÉTRANGER -ÉVENTAIL -ÉVOLUTION -EXPLOSION -EXTENSION -FACE -FAN -FARCE -FATIGUE -FAUTEUIL -FEMME -FENÊTRE -FER -FÊTE -FEU -FEUILLE -FIDÈLE -FIL -FILLE -FLAMME -FLÈCHE -FLEUR -FLEUVE -FOND -FOOTBALL -FORÊT -FORGER -FOUDRE -FOUET -FOUR -FOURMI -FROID -FROMAGE -FRONT -FRUIT -FUIR -FUTUR -GARÇON -GÂTEAU -GAUCHE -GAZ -GAZON -GEL -GENOU -GLACE -GOMME -GORGE -GOUTTE -GRAND -GRÈCE -GRENOUILLE -GRIPPE -GRIS -GROS -GROUPE -GUITARE -HASARD -HAUT -HÉLICOPTÈRE -HERBE -HEUREUX -HISTOIRE -HIVER -HÔTEL -HUGO -HUILE -HUMIDE -HUMOUR -INDICE -INTERNET -INVITER -ITALIE -JACQUES -JAMBE -JAMBON -JARDIN -JAUNE -JEAN -JEANNE -JET -JEU -JOGGING -JOUR -JOURNAL -JUPITER -KILO -KIWI -LAINE -LAIT -LANGUE -LAPIN -LATIN -LAVER -LECTEUR -LÉGER -LENT -LETTRE -LIEN -LIGNE -LINGE -LION -LIT -LIVRE -LOI -LONG -LOUIS -LOUP -LUMIÈRE -LUNDI -LUNE -LUNETTE -MACHINE -MACHO -MAIN -MAISON -MAÎTRESSE -MAL -MALADIE -MAMAN -MAMMOUTH -MANGER -MARAIS -MARC -MARCHE -MARIAGE -MARIE -MARIÉE -MARQUE -MARSEILLE -MASSE -MER -MESSE -MÈTRE -MÉTRO -MIAOU -MICRO -MIEUX -MILLE -MINE -MIROIR -MODERNE -MOITIÉ -MONDE -MONSTRE -MONTAGNE -MONTRE -MORT -MOTEUR -MOTO -MOU -MOUCHE -MOULIN -MOUSTACHE -MOUTON -MUR -MUSCLE -MUSIQUE -MYSTÈRE -NAGE -NATURE -NEIGE -NEUTRE -NEW YORK -NEZ -NID -NINJA -NIVEAU -NOËL -NŒUD -NOIR -NOUS -NUAGE -NUIT -NUMÉRO -ŒIL -ŒUF -OISEAU -OLYMPIQUE -OMBRE -ONGLE -OR -ORAL -ORANGE -ORDINATEUR -ORDRE -ORDURE -OREILLE -ORGANE -ORGUEIL -OURS -OUTIL -OUVERT -OVALE -PAIN -PALAIS -PANNEAU -PANTALON -PANTIN -PAPA -PAPIER -PAPILLON -PARADIS -PARC -PARIS -PAROLE -PARTIE -PASSE -PÂTE -PATIN -PATTE -PAUL -PAYER -PÊCHE -PEINTURE -PENDULE -PENSER -PERSONNE -PETIT -PEUR -PHILOSOPHE -PHOTO -PHRASE -PIANO -PIÈCE -PIED -PIERRE -PILE -PILOTE -PINCE -PIOCHE -PION -PIRATE -PIRE -PISCINE -PLACE -PLAFOND -PLAGE -PLAIE -PLAN -PLANCHE -PLANÈTE -PLANTE -PLASTIQUE -PLAT -PLOMB -PLONGER -PLUIE -POCHE -POÈTE -POIDS -POING -POINT -POIVRE -POLICE -POLITIQUE -POLLEN -POLO -POMME -POMPE -PONT -POPULATION -PORT -PORTE -PORTEFEUILLE -POSITIF -POSTE -POUBELLE -POULE -POUPÉE -POUSSER -POUSSIÈRE -POUVOIR -PRÉHISTOIRE -PREMIER -PRÉSENT -PRESSE -PRIER -PRINCESSE -PRISE -PRIVÉ -PROFESSEUR -PSYCHOLOGIE -PUBLIC -PULL -PUNK -PUZZLE -PYJAMA -QUATRE -QUINZE -RACE -RADIO -RAISIN -RAP -RAYÉ -RAYON -RÉFLÉCHIR -REINE -REPAS -REPTILE -REQUIN -RÊVE -RICHE -RIDEAU -RIEN -RIRE -ROBINET -ROCHE -ROI -ROND -ROSE -ROUE -ROUGE -ROUILLE -ROUX -RUSSIE -SABLE -SABRE -SAC -SAIN -SAISON -SALE -SALLE -SALUT -SAMU -SANDWICH -SANG -SAPIN -SATELLITE -SAUMON -SAUT -SAVOIR -SCHTROUMPF -SCIENCE -SCOUT -SEC -SEINE -SEL -SEPT -SERPENT -SERRER -SEXE -SHAMPOOING -SIÈCLE -SIÈGE -SIESTE -SILHOUETTE -SIRÈNE -SKI -SOLEIL -SOMMEIL -SON -SONNER -SORCIÈRE -SOURD -SOURIS -SPORT -STAR -STATION -STYLO -SUR -SURFACE -SUSHI -SWING -TABLEAU -TACHE -TAILLE -TANTE -TAPIS -TARD -TAXI -TÉLÉPHONE -TÉLÉVISION -TEMPLE -TEMPS -TENNIS -TÊTE -THÉ -TIGRE -TINTIN -TISSU -TITRE -TOAST -TOILETTE -TOKYO -TOMBE -TON -TOP -TOUCHE -TOUJOURS -TOUR -TOURNOI -TOUT -TRACE -TRAIN -TRAÎNER -TRANSPORT -TRAVAIL -TRÉSOR -TRIANGLE -TRISTE -TRÔNE -TROUPEAU -TSAR -TUBE -TUER -TUPPERWARE -TUYAU -TWITTER -TYPE -UNIVERSITÉ -VACHE -VAGUE -VAISSELLE -VALEUR -VER -VERDICT -VERRE -VERS -VERT -VESTE -VIANDE -VIDE -VIE -VIEUX -VILLE -VIN -VINGT -VIOLON -VIPÈRE -VISION -VITE -VIVE -VŒU -VOILE -VOISIN -VOITURE -VOL -VOLUME -VOTE -VOULOIR -VOYAGE -ZEN -ZÉRO -ZODIAQUE -ZONE -ZOO diff --git a/modules/private/websites/tools/games/terraforming-mars/default.nix b/modules/private/websites/tools/games/terraforming-mars/default.nix deleted file mode 100644 index 0df5363..0000000 --- a/modules/private/websites/tools/games/terraforming-mars/default.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ config, lib, pkgs, ... }: -let - cfg = config.myServices.websites.games.terraforming-mars; - terraforming-mars = pkgs.callPackage ./terraforming-mars.nix {}; -in -{ - options.myServices.websites.games.terraforming-mars.enable = lib.mkEnableOption "Enable Terraforming mars game"; - config = lib.mkIf cfg.enable { - systemd.services.terraforming-mars = { - path = [ pkgs.nodejs pkgs.bashInteractive ]; - description = "Terraforming mars game"; - wantedBy = [ "multi-user.target" ]; - script = '' - export PORT=/run/terraforming-mars/socket.sock - export NODE_ENV=production - mkdir -p /var/lib/terraforming-mars/db - npm run start - ''; - postStart = '' - sleep 5; - chown :wwwrun /run/terraforming-mars/socket.sock - chmod g+w /run/terraforming-mars/socket.sock - ''; - serviceConfig = { - User = "terraformingmars"; - DynamicUser = true; - SupplementaryGroups = [ "wwwrun" ]; - Type = "simple"; - WorkingDirectory = terraforming-mars; - RuntimeDirectory = "terraforming-mars"; - StateDirectory = "terraforming-mars"; - }; - }; - - services.websites.env.tools.vhostConfs.games_terraforming-mars = { - certName = "games"; - certMainHost = "games.immae.eu"; - hosts = [ "terraforming-mars.games.immae.eu" ]; - root = null; - extraConfig = [ - '' - ProxyPass / unix:///run/terraforming-mars/socket.sock|http://terraforming-mars.games.immae.eu/ - ProxyPassReverse / unix:///run/terraforming-mars/socket.sock|http://terraforming-mars.games.immae.eu/ - '' - ]; - }; - }; -} diff --git a/modules/private/websites/tools/games/terraforming-mars/node-packages.nix b/modules/private/websites/tools/games/terraforming-mars/node-packages.nix deleted file mode 100644 index e5fac49..0000000 --- a/modules/private/websites/tools/games/terraforming-mars/node-packages.nix +++ /dev/null @@ -1,4353 +0,0 @@ -# This file has been generated by node2nix 1.8.0. Do not edit! - -{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? [], src}: - -let - sources = { - "@babel/code-frame-7.12.13" = { - name = "_at_babel_slash_code-frame"; - packageName = "@babel/code-frame"; - version = "7.12.13"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz"; - sha512 = "HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g=="; - }; - }; - "@babel/helper-validator-identifier-7.12.11" = { - name = "_at_babel_slash_helper-validator-identifier"; - packageName = "@babel/helper-validator-identifier"; - version = "7.12.11"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz"; - sha512 = "np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="; - }; - }; - "@babel/highlight-7.13.10" = { - name = "_at_babel_slash_highlight"; - packageName = "@babel/highlight"; - version = "7.13.10"; - src = fetchurl { - url = "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz"; - sha512 = "5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg=="; - }; - }; - "@discoveryjs/json-ext-0.5.2" = { - name = "_at_discoveryjs_slash_json-ext"; - packageName = "@discoveryjs/json-ext"; - version = "0.5.2"; - src = fetchurl { - url = "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz"; - sha512 = "HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg=="; - }; - }; - "@nodelib/fs.scandir-2.1.4" = { - name = "_at_nodelib_slash_fs.scandir"; - packageName = "@nodelib/fs.scandir"; - version = "2.1.4"; - src = fetchurl { - url = "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz"; - sha512 = "33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA=="; - }; - }; - "@nodelib/fs.stat-2.0.4" = { - name = "_at_nodelib_slash_fs.stat"; - packageName = "@nodelib/fs.stat"; - version = "2.0.4"; - src = fetchurl { - url = "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz"; - sha512 = "IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q=="; - }; - }; - "@nodelib/fs.walk-1.2.6" = { - name = "_at_nodelib_slash_fs.walk"; - packageName = "@nodelib/fs.walk"; - version = "1.2.6"; - src = fetchurl { - url = "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz"; - sha512 = "8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow=="; - }; - }; - "@types/eslint-7.2.10" = { - name = "_at_types_slash_eslint"; - packageName = "@types/eslint"; - version = "7.2.10"; - src = fetchurl { - url = "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz"; - sha512 = "kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ=="; - }; - }; - "@types/eslint-scope-3.7.0" = { - name = "_at_types_slash_eslint-scope"; - packageName = "@types/eslint-scope"; - version = "3.7.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz"; - sha512 = "O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw=="; - }; - }; - "@types/estree-0.0.46" = { - name = "_at_types_slash_estree"; - packageName = "@types/estree"; - version = "0.0.46"; - src = fetchurl { - url = "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz"; - sha512 = "laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg=="; - }; - }; - "@types/json-schema-7.0.7" = { - name = "_at_types_slash_json-schema"; - packageName = "@types/json-schema"; - version = "7.0.7"; - src = fetchurl { - url = "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz"; - sha512 = "cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA=="; - }; - }; - "@types/node-10.17.58" = { - name = "_at_types_slash_node"; - packageName = "@types/node"; - version = "10.17.58"; - src = fetchurl { - url = "https://registry.npmjs.org/@types/node/-/node-10.17.58.tgz"; - sha512 = "Dn5RBxLohjdHFj17dVVw3rtrZAeXeWg+LQfvxDIW/fdPkSiuQk7h3frKMYtsQhtIW42wkErDcy9UMVxhGW4O7w=="; - }; - }; - "@types/pg-7.14.11" = { - name = "_at_types_slash_pg"; - packageName = "@types/pg"; - version = "7.14.11"; - src = fetchurl { - url = "https://registry.npmjs.org/@types/pg/-/pg-7.14.11.tgz"; - sha512 = "EnZkZ1OMw9DvNfQkn2MTJrwKmhJYDEs5ujWrPfvseWNoI95N8B4HzU/Ltrq5ZfYxDX/Zg8mTzwr6UAyTjjFvXA=="; - }; - }; - "@types/sqlite3-3.1.7" = { - name = "_at_types_slash_sqlite3"; - packageName = "@types/sqlite3"; - version = "3.1.7"; - src = fetchurl { - url = "https://registry.npmjs.org/@types/sqlite3/-/sqlite3-3.1.7.tgz"; - sha512 = "8FHV/8Uzd7IwdHm5mvmF2Aif4aC/gjrt4axWD9SmfaxITnOjtOhCbOSTuqv/VbH1uq0QrwlaTj9aTz3gmR6u4w=="; - }; - }; - "@typescript-eslint/eslint-plugin-4.22.0" = { - name = "_at_typescript-eslint_slash_eslint-plugin"; - packageName = "@typescript-eslint/eslint-plugin"; - version = "4.22.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.22.0.tgz"; - sha512 = "U8SP9VOs275iDXaL08Ln1Fa/wLXfj5aTr/1c0t0j6CdbOnxh+TruXu1p4I0NAvdPBQgoPjHsgKn28mOi0FzfoA=="; - }; - }; - "@typescript-eslint/experimental-utils-4.22.0" = { - name = "_at_typescript-eslint_slash_experimental-utils"; - packageName = "@typescript-eslint/experimental-utils"; - version = "4.22.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.22.0.tgz"; - sha512 = "xJXHHl6TuAxB5AWiVrGhvbGL8/hbiCQ8FiWwObO3r0fnvBdrbWEDy1hlvGQOAWc6qsCWuWMKdVWlLAEMpxnddg=="; - }; - }; - "@typescript-eslint/parser-4.22.0" = { - name = "_at_typescript-eslint_slash_parser"; - packageName = "@typescript-eslint/parser"; - version = "4.22.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.22.0.tgz"; - sha512 = "z/bGdBJJZJN76nvAY9DkJANYgK3nlRstRRi74WHm3jjgf2I8AglrSY+6l7ogxOmn55YJ6oKZCLLy+6PW70z15Q=="; - }; - }; - "@typescript-eslint/scope-manager-4.22.0" = { - name = "_at_typescript-eslint_slash_scope-manager"; - packageName = "@typescript-eslint/scope-manager"; - version = "4.22.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.22.0.tgz"; - sha512 = "OcCO7LTdk6ukawUM40wo61WdeoA7NM/zaoq1/2cs13M7GyiF+T4rxuA4xM+6LeHWjWbss7hkGXjFDRcKD4O04Q=="; - }; - }; - "@typescript-eslint/types-4.22.0" = { - name = "_at_typescript-eslint_slash_types"; - packageName = "@typescript-eslint/types"; - version = "4.22.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.22.0.tgz"; - sha512 = "sW/BiXmmyMqDPO2kpOhSy2Py5w6KvRRsKZnV0c4+0nr4GIcedJwXAq+RHNK4lLVEZAJYFltnnk1tJSlbeS9lYA=="; - }; - }; - "@typescript-eslint/typescript-estree-4.22.0" = { - name = "_at_typescript-eslint_slash_typescript-estree"; - packageName = "@typescript-eslint/typescript-estree"; - version = "4.22.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.22.0.tgz"; - sha512 = "TkIFeu5JEeSs5ze/4NID+PIcVjgoU3cUQUIZnH3Sb1cEn1lBo7StSV5bwPuJQuoxKXlzAObjYTilOEKRuhR5yg=="; - }; - }; - "@typescript-eslint/visitor-keys-4.22.0" = { - name = "_at_typescript-eslint_slash_visitor-keys"; - packageName = "@typescript-eslint/visitor-keys"; - version = "4.22.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.22.0.tgz"; - sha512 = "nnMu4F+s4o0sll6cBSsTeVsT4cwxB7zECK3dFxzEjPBii9xLpq4yqqsy/FU5zMfan6G60DKZSCXAa3sHJZrcYw=="; - }; - }; - "@webassemblyjs/ast-1.11.0" = { - name = "_at_webassemblyjs_slash_ast"; - packageName = "@webassemblyjs/ast"; - version = "1.11.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz"; - sha512 = "kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg=="; - }; - }; - "@webassemblyjs/floating-point-hex-parser-1.11.0" = { - name = "_at_webassemblyjs_slash_floating-point-hex-parser"; - packageName = "@webassemblyjs/floating-point-hex-parser"; - version = "1.11.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz"; - sha512 = "Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA=="; - }; - }; - "@webassemblyjs/helper-api-error-1.11.0" = { - name = "_at_webassemblyjs_slash_helper-api-error"; - packageName = "@webassemblyjs/helper-api-error"; - version = "1.11.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz"; - sha512 = "baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w=="; - }; - }; - "@webassemblyjs/helper-buffer-1.11.0" = { - name = "_at_webassemblyjs_slash_helper-buffer"; - packageName = "@webassemblyjs/helper-buffer"; - version = "1.11.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz"; - sha512 = "u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA=="; - }; - }; - "@webassemblyjs/helper-numbers-1.11.0" = { - name = "_at_webassemblyjs_slash_helper-numbers"; - packageName = "@webassemblyjs/helper-numbers"; - version = "1.11.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz"; - sha512 = "DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ=="; - }; - }; - "@webassemblyjs/helper-wasm-bytecode-1.11.0" = { - name = "_at_webassemblyjs_slash_helper-wasm-bytecode"; - packageName = "@webassemblyjs/helper-wasm-bytecode"; - version = "1.11.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz"; - sha512 = "MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA=="; - }; - }; - "@webassemblyjs/helper-wasm-section-1.11.0" = { - name = "_at_webassemblyjs_slash_helper-wasm-section"; - packageName = "@webassemblyjs/helper-wasm-section"; - version = "1.11.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz"; - sha512 = "3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew=="; - }; - }; - "@webassemblyjs/ieee754-1.11.0" = { - name = "_at_webassemblyjs_slash_ieee754"; - packageName = "@webassemblyjs/ieee754"; - version = "1.11.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz"; - sha512 = "KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA=="; - }; - }; - "@webassemblyjs/leb128-1.11.0" = { - name = "_at_webassemblyjs_slash_leb128"; - packageName = "@webassemblyjs/leb128"; - version = "1.11.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz"; - sha512 = "aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g=="; - }; - }; - "@webassemblyjs/utf8-1.11.0" = { - name = "_at_webassemblyjs_slash_utf8"; - packageName = "@webassemblyjs/utf8"; - version = "1.11.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz"; - sha512 = "A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw=="; - }; - }; - "@webassemblyjs/wasm-edit-1.11.0" = { - name = "_at_webassemblyjs_slash_wasm-edit"; - packageName = "@webassemblyjs/wasm-edit"; - version = "1.11.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz"; - sha512 = "JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ=="; - }; - }; - "@webassemblyjs/wasm-gen-1.11.0" = { - name = "_at_webassemblyjs_slash_wasm-gen"; - packageName = "@webassemblyjs/wasm-gen"; - version = "1.11.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz"; - sha512 = "BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ=="; - }; - }; - "@webassemblyjs/wasm-opt-1.11.0" = { - name = "_at_webassemblyjs_slash_wasm-opt"; - packageName = "@webassemblyjs/wasm-opt"; - version = "1.11.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz"; - sha512 = "tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg=="; - }; - }; - "@webassemblyjs/wasm-parser-1.11.0" = { - name = "_at_webassemblyjs_slash_wasm-parser"; - packageName = "@webassemblyjs/wasm-parser"; - version = "1.11.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz"; - sha512 = "6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw=="; - }; - }; - "@webassemblyjs/wast-printer-1.11.0" = { - name = "_at_webassemblyjs_slash_wast-printer"; - packageName = "@webassemblyjs/wast-printer"; - version = "1.11.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz"; - sha512 = "Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ=="; - }; - }; - "@webpack-cli/configtest-1.0.2" = { - name = "_at_webpack-cli_slash_configtest"; - packageName = "@webpack-cli/configtest"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.2.tgz"; - sha512 = "3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA=="; - }; - }; - "@webpack-cli/info-1.2.3" = { - name = "_at_webpack-cli_slash_info"; - packageName = "@webpack-cli/info"; - version = "1.2.3"; - src = fetchurl { - url = "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.3.tgz"; - sha512 = "lLek3/T7u40lTqzCGpC6CAbY6+vXhdhmwFRxZLMnRm6/sIF/7qMpT8MocXCRQfz0JAh63wpbXLMnsQ5162WS7Q=="; - }; - }; - "@webpack-cli/serve-1.3.1" = { - name = "_at_webpack-cli_slash_serve"; - packageName = "@webpack-cli/serve"; - version = "1.3.1"; - src = fetchurl { - url = "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.1.tgz"; - sha512 = "0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw=="; - }; - }; - "@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=="; - }; - }; - "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=="; - }; - }; - "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.1.1" = { - name = "acorn"; - packageName = "acorn"; - version = "8.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/acorn/-/acorn-8.1.1.tgz"; - sha512 = "xYiIVjNuqtKXMxlRMDc6mZUhXehod4a3gbZ1qRlM7icK4EbxUFNLhWoPblCvFtB2Y9CIqHP3CF/rdxLItaQv8g=="; - }; - }; - "acorn-jsx-5.3.1" = { - name = "acorn-jsx"; - packageName = "acorn-jsx"; - version = "5.3.1"; - src = fetchurl { - url = "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz"; - sha512 = "K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng=="; - }; - }; - "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-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=="; - }; - }; - "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.2" = { - name = "ansi-escapes"; - packageName = "ansi-escapes"; - version = "4.3.2"; - src = fetchurl { - url = "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz"; - sha512 = "gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="; - }; - }; - "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-3.0.0" = { - name = "ansi-regex"; - packageName = "ansi-regex"; - version = "3.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz"; - sha1 = "ed0317c322064f79466c02966bddb605ab37d998"; - }; - }; - "ansi-regex-4.1.0" = { - name = "ansi-regex"; - packageName = "ansi-regex"; - version = "4.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz"; - sha512 = "1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="; - }; - }; - "ansi-regex-5.0.0" = { - name = "ansi-regex"; - packageName = "ansi-regex"; - version = "5.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz"; - sha512 = "bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="; - }; - }; - "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=="; - }; - }; - "aproba-1.2.0" = { - name = "aproba"; - packageName = "aproba"; - version = "1.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz"; - sha512 = "Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="; - }; - }; - "are-we-there-yet-1.1.5" = { - name = "are-we-there-yet"; - packageName = "are-we-there-yet"; - version = "1.1.5"; - src = fetchurl { - url = "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz"; - sha512 = "5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w=="; - }; - }; - "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-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=="; - }; - }; - "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=="; - }; - }; - "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"; - }; - }; - "astral-regex-1.0.0" = { - name = "astral-regex"; - packageName = "astral-regex"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz"; - sha512 = "+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg=="; - }; - }; - "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"; - }; - }; - "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=="; - }; - }; - "balanced-match-1.0.2" = { - name = "balanced-match"; - packageName = "balanced-match"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"; - sha512 = "3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="; - }; - }; - "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"; - }; - }; - "block-stream-0.0.9" = { - name = "block-stream"; - packageName = "block-stream"; - version = "0.0.9"; - src = fetchurl { - url = "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz"; - sha1 = "13ebfe778a03205cfe03751481ebb4b3300c126a"; - }; - }; - "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=="; - }; - }; - "browserslist-4.16.4" = { - name = "browserslist"; - packageName = "browserslist"; - version = "4.16.4"; - src = fetchurl { - url = "https://registry.npmjs.org/browserslist/-/browserslist-4.16.4.tgz"; - sha512 = "d7rCxYV8I9kj41RH8UKYnvDYCRENUlHRgyXy/Rhr/1BaeLGfiCptEdFE8MIrvGfWbBFNjVYx76SQWvNX1j+/cQ=="; - }; - }; - "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-writer-2.0.0" = { - name = "buffer-writer"; - packageName = "buffer-writer"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz"; - sha512 = "a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw=="; - }; - }; - "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=="; - }; - }; - "caniuse-lite-1.0.30001209" = { - name = "caniuse-lite"; - packageName = "caniuse-lite"; - version = "1.0.30001209"; - src = fetchurl { - url = "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001209.tgz"; - sha512 = "2Ktt4OeRM7EM/JaOZjuLzPYAIqmbwQMNnYbgooT+icoRGrKOyAxA1xhlnotBD1KArRSPsuJp3TdYcZYrL7qNxA=="; - }; - }; - "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-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=="; - }; - }; - "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=="; - }; - }; - "chownr-1.1.4" = { - name = "chownr"; - packageName = "chownr"; - version = "1.1.4"; - src = fetchurl { - url = "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz"; - sha512 = "jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="; - }; - }; - "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=="; - }; - }; - "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-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=="; - }; - }; - "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=="; - }; - }; - "code-point-at-1.1.0" = { - name = "code-point-at"; - packageName = "code-point-at"; - version = "1.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz"; - sha1 = "0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"; - }; - }; - "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=="; - }; - }; - "colorette-1.2.2" = { - name = "colorette"; - packageName = "colorette"; - version = "1.2.2"; - src = fetchurl { - url = "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz"; - sha512 = "MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w=="; - }; - }; - "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=="; - }; - }; - "commander-7.2.0" = { - name = "commander"; - packageName = "commander"; - version = "7.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz"; - sha512 = "QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="; - }; - }; - "compression-webpack-plugin-7.1.2" = { - name = "compression-webpack-plugin"; - packageName = "compression-webpack-plugin"; - version = "7.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-7.1.2.tgz"; - sha512 = "9DKNW6ILLjx+bNBoviHDgLx6swBhWWH9ApClC9sTH2NoFfQM47BapQfovCm9zjD9v1uZwInF5a925FB9ErGQeQ=="; - }; - }; - "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"; - }; - }; - "config-chain-1.1.12" = { - name = "config-chain"; - packageName = "config-chain"; - version = "1.1.12"; - src = fetchurl { - url = "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz"; - sha512 = "a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA=="; - }; - }; - "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"; - }; - }; - "console-stamp-3.0.0-rc4.2" = { - name = "console-stamp"; - packageName = "console-stamp"; - version = "3.0.0-rc4.2"; - src = fetchurl { - url = "https://registry.npmjs.org/console-stamp/-/console-stamp-3.0.0-rc4.2.tgz"; - sha512 = "ncGYdZsfDbBYYiaPXr9NHfZbSSkoVzYyh8nHji9/3ovw35Jn4ozo0btcirtfIznXT4xNgBQW+IyTVLISnNumdQ=="; - }; - }; - "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=="; - }; - }; - "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"; - }; - }; - "cross-spawn-6.0.5" = { - name = "cross-spawn"; - packageName = "cross-spawn"; - version = "6.0.5"; - src = fetchurl { - url = "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz"; - sha512 = "eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ=="; - }; - }; - "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=="; - }; - }; - "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"; - }; - }; - "dateformat-3.0.3" = { - name = "dateformat"; - packageName = "dateformat"; - version = "3.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz"; - sha512 = "jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q=="; - }; - }; - "de-indent-1.0.2" = { - name = "de-indent"; - packageName = "de-indent"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz"; - sha1 = "b2038e846dc33baa5796128d0804b455b8c1e21d"; - }; - }; - "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.1" = { - name = "debug"; - packageName = "debug"; - version = "4.3.1"; - src = fetchurl { - url = "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz"; - sha512 = "doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ=="; - }; - }; - "deep-extend-0.6.0" = { - name = "deep-extend"; - packageName = "deep-extend"; - version = "0.6.0"; - src = fetchurl { - url = "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz"; - sha512 = "LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="; - }; - }; - "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"; - }; - }; - "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"; - }; - }; - "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"; - }; - }; - "detect-libc-1.0.3" = { - name = "detect-libc"; - packageName = "detect-libc"; - version = "1.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz"; - sha1 = "fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"; - }; - }; - "dialog-polyfill-0.5.6" = { - name = "dialog-polyfill"; - packageName = "dialog-polyfill"; - version = "0.5.6"; - src = fetchurl { - url = "https://registry.npmjs.org/dialog-polyfill/-/dialog-polyfill-0.5.6.tgz"; - sha512 = "ZbVDJI9uvxPAKze6z146rmfUZjBqNEwcnFTVamQzXH+svluiV7swmVIGr7miwADgfgt1G2JQIytypM9fbyhX4w=="; - }; - }; - "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=="; - }; - }; - "doctrine-3.0.0" = { - name = "doctrine"; - packageName = "doctrine"; - version = "3.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz"; - sha512 = "yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="; - }; - }; - "dotenv-8.2.0" = { - name = "dotenv"; - packageName = "dotenv"; - version = "8.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz"; - sha512 = "8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw=="; - }; - }; - "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"; - }; - }; - "editorconfig-0.15.3" = { - name = "editorconfig"; - packageName = "editorconfig"; - version = "0.15.3"; - src = fetchurl { - url = "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz"; - sha512 = "M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g=="; - }; - }; - "electron-to-chromium-1.3.717" = { - name = "electron-to-chromium"; - packageName = "electron-to-chromium"; - version = "1.3.717"; - src = fetchurl { - url = "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.717.tgz"; - sha512 = "OfzVPIqD1MkJ7fX+yTl2nKyOE4FReeVfMCzzxQS+Kp43hZYwHwThlGP+EGIZRXJsxCM7dqo8Y65NOX/HP12iXQ=="; - }; - }; - "emoji-regex-7.0.3" = { - name = "emoji-regex"; - packageName = "emoji-regex"; - version = "7.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz"; - sha512 = "CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="; - }; - }; - "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=="; - }; - }; - "enhanced-resolve-5.7.0" = { - name = "enhanced-resolve"; - packageName = "enhanced-resolve"; - version = "5.7.0"; - src = fetchurl { - url = "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz"; - sha512 = "6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw=="; - }; - }; - "enquirer-2.3.6" = { - name = "enquirer"; - packageName = "enquirer"; - version = "2.3.6"; - src = fetchurl { - url = "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz"; - sha512 = "yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg=="; - }; - }; - "envinfo-7.8.1" = { - name = "envinfo"; - packageName = "envinfo"; - version = "7.8.1"; - src = fetchurl { - url = "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz"; - sha512 = "/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw=="; - }; - }; - "errno-0.1.8" = { - name = "errno"; - packageName = "errno"; - version = "0.1.8"; - src = fetchurl { - url = "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz"; - sha512 = "dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A=="; - }; - }; - "es-module-lexer-0.4.1" = { - name = "es-module-lexer"; - packageName = "es-module-lexer"; - version = "0.4.1"; - src = fetchurl { - url = "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz"; - sha512 = "ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA=="; - }; - }; - "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-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"; - }; - }; - "eslint-6.8.0" = { - name = "eslint"; - packageName = "eslint"; - version = "6.8.0"; - src = fetchurl { - url = "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz"; - sha512 = "K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig=="; - }; - }; - "eslint-config-google-0.14.0" = { - name = "eslint-config-google"; - packageName = "eslint-config-google"; - version = "0.14.0"; - src = fetchurl { - url = "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz"; - sha512 = "WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw=="; - }; - }; - "eslint-plugin-vue-6.2.2" = { - name = "eslint-plugin-vue"; - packageName = "eslint-plugin-vue"; - version = "6.2.2"; - src = fetchurl { - url = "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz"; - sha512 = "Nhc+oVAHm0uz/PkJAWscwIT4ijTrK5fqNqz9QB1D35SbbuMG1uB6Yr5AJpvPSWg+WOw7nYNswerYh0kOk64gqQ=="; - }; - }; - "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=="; - }; - }; - "eslint-utils-1.4.3" = { - name = "eslint-utils"; - packageName = "eslint-utils"; - version = "1.4.3"; - src = fetchurl { - url = "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz"; - sha512 = "fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q=="; - }; - }; - "eslint-utils-2.1.0" = { - name = "eslint-utils"; - packageName = "eslint-utils"; - version = "2.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz"; - sha512 = "w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg=="; - }; - }; - "eslint-visitor-keys-1.3.0" = { - name = "eslint-visitor-keys"; - packageName = "eslint-visitor-keys"; - version = "1.3.0"; - src = fetchurl { - url = "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz"; - sha512 = "6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="; - }; - }; - "eslint-visitor-keys-2.0.0" = { - name = "eslint-visitor-keys"; - packageName = "eslint-visitor-keys"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz"; - sha512 = "QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ=="; - }; - }; - "espree-6.2.1" = { - name = "espree"; - packageName = "espree"; - version = "6.2.1"; - src = fetchurl { - url = "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz"; - sha512 = "ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw=="; - }; - }; - "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=="; - }; - }; - "esquery-1.4.0" = { - name = "esquery"; - packageName = "esquery"; - version = "1.4.0"; - src = fetchurl { - url = "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz"; - sha512 = "cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w=="; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - "execa-5.0.0" = { - name = "execa"; - packageName = "execa"; - version = "5.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz"; - sha512 = "ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ=="; - }; - }; - "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"; - }; - }; - "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.5" = { - name = "fast-glob"; - packageName = "fast-glob"; - version = "3.2.5"; - src = fetchurl { - url = "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz"; - sha512 = "2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg=="; - }; - }; - "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"; - }; - }; - "fastest-levenshtein-1.0.12" = { - name = "fastest-levenshtein"; - packageName = "fastest-levenshtein"; - version = "1.0.12"; - src = fetchurl { - url = "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz"; - sha512 = "On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow=="; - }; - }; - "fastq-1.11.0" = { - name = "fastq"; - packageName = "fastq"; - version = "1.11.0"; - src = fetchurl { - url = "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz"; - sha512 = "7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g=="; - }; - }; - "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=="; - }; - }; - "file-entry-cache-5.0.1" = { - name = "file-entry-cache"; - packageName = "file-entry-cache"; - version = "5.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz"; - sha512 = "bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g=="; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - "flat-cache-2.0.1" = { - name = "flat-cache"; - packageName = "flat-cache"; - version = "2.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz"; - sha512 = "LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA=="; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - "fs-minipass-1.2.7" = { - name = "fs-minipass"; - packageName = "fs-minipass"; - version = "1.2.7"; - src = fetchurl { - url = "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz"; - sha512 = "GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA=="; - }; - }; - "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"; - }; - }; - "fstream-1.0.12" = { - name = "fstream"; - packageName = "fstream"; - version = "1.0.12"; - src = fetchurl { - url = "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz"; - sha512 = "WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg=="; - }; - }; - "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=="; - }; - }; - "functional-red-black-tree-1.0.1" = { - name = "functional-red-black-tree"; - packageName = "functional-red-black-tree"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz"; - sha1 = "1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"; - }; - }; - "gauge-2.7.4" = { - name = "gauge"; - packageName = "gauge"; - version = "2.7.4"; - src = fetchurl { - url = "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz"; - sha1 = "2c03405c7538c39d7eb37b317022e325fb018bf7"; - }; - }; - "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.1.6" = { - name = "glob"; - packageName = "glob"; - version = "7.1.6"; - src = fetchurl { - url = "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz"; - sha512 = "LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA=="; - }; - }; - "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-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-12.4.0" = { - name = "globals"; - packageName = "globals"; - version = "12.4.0"; - src = fetchurl { - url = "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz"; - sha512 = "BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg=="; - }; - }; - "globby-11.0.3" = { - name = "globby"; - packageName = "globby"; - version = "11.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz"; - sha512 = "ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg=="; - }; - }; - "graceful-fs-4.2.6" = { - name = "graceful-fs"; - packageName = "graceful-fs"; - version = "4.2.6"; - src = fetchurl { - url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz"; - sha512 = "nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ=="; - }; - }; - "har-schema-2.0.0" = { - name = "har-schema"; - packageName = "har-schema"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz"; - sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92"; - }; - }; - "har-validator-5.1.5" = { - name = "har-validator"; - packageName = "har-validator"; - version = "5.1.5"; - src = fetchurl { - url = "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz"; - sha512 = "nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w=="; - }; - }; - "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-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-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"; - }; - }; - "he-1.2.0" = { - name = "he"; - packageName = "he"; - version = "1.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/he/-/he-1.2.0.tgz"; - sha512 = "F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="; - }; - }; - "http-signature-1.2.0" = { - name = "http-signature"; - packageName = "http-signature"; - version = "1.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz"; - sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1"; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - "ignore-4.0.6" = { - name = "ignore"; - packageName = "ignore"; - version = "4.0.6"; - src = fetchurl { - url = "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz"; - sha512 = "cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="; - }; - }; - "ignore-5.1.8" = { - name = "ignore"; - packageName = "ignore"; - version = "5.1.8"; - src = fetchurl { - url = "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz"; - sha512 = "BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw=="; - }; - }; - "ignore-walk-3.0.3" = { - name = "ignore-walk"; - packageName = "ignore-walk"; - version = "3.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz"; - sha512 = "m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw=="; - }; - }; - "image-size-0.5.5" = { - name = "image-size"; - packageName = "image-size"; - version = "0.5.5"; - src = fetchurl { - url = "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz"; - sha1 = "09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"; - }; - }; - "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=="; - }; - }; - "import-local-3.0.2" = { - name = "import-local"; - packageName = "import-local"; - version = "3.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz"; - sha512 = "vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA=="; - }; - }; - "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"; - }; - }; - "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.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-1.3.8" = { - name = "ini"; - packageName = "ini"; - version = "1.3.8"; - src = fetchurl { - url = "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz"; - sha512 = "JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="; - }; - }; - "inquirer-7.3.3" = { - name = "inquirer"; - packageName = "inquirer"; - version = "7.3.3"; - src = fetchurl { - url = "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz"; - sha512 = "JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA=="; - }; - }; - "interpret-2.2.0" = { - name = "interpret"; - packageName = "interpret"; - version = "2.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz"; - sha512 = "Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw=="; - }; - }; - "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-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-1.0.0" = { - name = "is-fullwidth-code-point"; - packageName = "is-fullwidth-code-point"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz"; - sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb"; - }; - }; - "is-fullwidth-code-point-2.0.0" = { - name = "is-fullwidth-code-point"; - packageName = "is-fullwidth-code-point"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz"; - sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f"; - }; - }; - "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-glob-4.0.1" = { - name = "is-glob"; - packageName = "is-glob"; - version = "4.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz"; - sha512 = "5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg=="; - }; - }; - "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-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-stream-2.0.0" = { - name = "is-stream"; - packageName = "is-stream"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz"; - sha512 = "XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw=="; - }; - }; - "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-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=="; - }; - }; - "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"; - }; - }; - "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"; - }; - }; - "jest-worker-26.6.2" = { - name = "jest-worker"; - packageName = "jest-worker"; - version = "26.6.2"; - src = fetchurl { - url = "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz"; - sha512 = "KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ=="; - }; - }; - "js-beautify-1.13.13" = { - name = "js-beautify"; - packageName = "js-beautify"; - version = "1.13.13"; - src = fetchurl { - url = "https://registry.npmjs.org/js-beautify/-/js-beautify-1.13.13.tgz"; - sha512 = "oH+nc0U5mOAqX8M5JO1J0Pw/7Q35sAdOsM5W3i87pir9Ntx6P/5Gx1xLNoK+MGyvHk4rqqRCE4Oq58H6xl2W7A=="; - }; - }; - "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.1" = { - name = "js-yaml"; - packageName = "js-yaml"; - version = "3.14.1"; - src = fetchurl { - url = "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz"; - sha512 = "okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g=="; - }; - }; - "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"; - }; - }; - "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-schema-0.2.3" = { - name = "json-schema"; - packageName = "json-schema"; - version = "0.2.3"; - src = fetchurl { - url = "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz"; - sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13"; - }; - }; - "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-stable-stringify-without-jsonify-1.0.1" = { - name = "json-stable-stringify-without-jsonify"; - packageName = "json-stable-stringify-without-jsonify"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz"; - sha1 = "9db7b59496ad3f3cfef30a75142d2d930ad72651"; - }; - }; - "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"; - }; - }; - "jsprim-1.4.1" = { - name = "jsprim"; - packageName = "jsprim"; - version = "1.4.1"; - src = fetchurl { - url = "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz"; - sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"; - }; - }; - "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=="; - }; - }; - "less-3.13.1" = { - name = "less"; - packageName = "less"; - version = "3.13.1"; - src = fetchurl { - url = "https://registry.npmjs.org/less/-/less-3.13.1.tgz"; - sha512 = "SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw=="; - }; - }; - "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"; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - "make-dir-2.1.0" = { - name = "make-dir"; - packageName = "make-dir"; - version = "2.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz"; - sha512 = "LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA=="; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - "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.47.0" = { - name = "mime-db"; - packageName = "mime-db"; - version = "1.47.0"; - src = fetchurl { - url = "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz"; - sha512 = "QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw=="; - }; - }; - "mime-types-2.1.30" = { - name = "mime-types"; - packageName = "mime-types"; - version = "2.1.30"; - src = fetchurl { - url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz"; - sha512 = "crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg=="; - }; - }; - "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=="; - }; - }; - "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-2.9.0" = { - name = "minipass"; - packageName = "minipass"; - version = "2.9.0"; - src = fetchurl { - url = "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz"; - sha512 = "wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg=="; - }; - }; - "minizlib-1.3.3" = { - name = "minizlib"; - packageName = "minizlib"; - version = "1.3.3"; - src = fetchurl { - url = "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz"; - sha512 = "6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q=="; - }; - }; - "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=="; - }; - }; - "mnemonist-0.38.3" = { - name = "mnemonist"; - packageName = "mnemonist"; - version = "0.38.3"; - src = fetchurl { - url = "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.3.tgz"; - sha512 = "2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw=="; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - "native-request-1.0.8" = { - name = "native-request"; - packageName = "native-request"; - version = "1.0.8"; - src = fetchurl { - url = "https://registry.npmjs.org/native-request/-/native-request-1.0.8.tgz"; - sha512 = "vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag=="; - }; - }; - "natural-compare-1.4.0" = { - name = "natural-compare"; - packageName = "natural-compare"; - version = "1.4.0"; - src = fetchurl { - url = "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"; - sha1 = "4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"; - }; - }; - "needle-2.6.0" = { - name = "needle"; - packageName = "needle"; - version = "2.6.0"; - src = fetchurl { - url = "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz"; - sha512 = "KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg=="; - }; - }; - "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=="; - }; - }; - "nice-try-1.0.5" = { - name = "nice-try"; - packageName = "nice-try"; - version = "1.0.5"; - src = fetchurl { - url = "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz"; - sha512 = "1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="; - }; - }; - "node-addon-api-3.1.0" = { - name = "node-addon-api"; - packageName = "node-addon-api"; - version = "3.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz"; - sha512 = "flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw=="; - }; - }; - "node-gyp-3.8.0" = { - name = "node-gyp"; - packageName = "node-gyp"; - version = "3.8.0"; - src = fetchurl { - url = "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz"; - sha512 = "3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA=="; - }; - }; - "node-pre-gyp-0.11.0" = { - name = "node-pre-gyp"; - packageName = "node-pre-gyp"; - version = "0.11.0"; - src = fetchurl { - url = "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz"; - sha512 = "TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q=="; - }; - }; - "node-releases-1.1.71" = { - name = "node-releases"; - packageName = "node-releases"; - version = "1.1.71"; - src = fetchurl { - url = "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz"; - sha512 = "zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg=="; - }; - }; - "nopt-3.0.6" = { - name = "nopt"; - packageName = "nopt"; - version = "3.0.6"; - src = fetchurl { - url = "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz"; - sha1 = "c6465dbf08abcd4db359317f79ac68a646b28ff9"; - }; - }; - "nopt-4.0.3" = { - name = "nopt"; - packageName = "nopt"; - version = "4.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz"; - sha512 = "CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg=="; - }; - }; - "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=="; - }; - }; - "npm-bundled-1.1.1" = { - name = "npm-bundled"; - packageName = "npm-bundled"; - version = "1.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz"; - sha512 = "gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA=="; - }; - }; - "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-packlist-1.4.8" = { - name = "npm-packlist"; - packageName = "npm-packlist"; - version = "1.4.8"; - src = fetchurl { - url = "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz"; - sha512 = "5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A=="; - }; - }; - "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-4.1.2" = { - name = "npmlog"; - packageName = "npmlog"; - version = "4.1.2"; - src = fetchurl { - url = "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz"; - sha512 = "2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg=="; - }; - }; - "number-is-nan-1.0.1" = { - name = "number-is-nan"; - packageName = "number-is-nan"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz"; - sha1 = "097b602b53422a522c1afb8790318336941a011d"; - }; - }; - "oauth-sign-0.9.0" = { - name = "oauth-sign"; - packageName = "oauth-sign"; - version = "0.9.0"; - src = fetchurl { - url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz"; - sha512 = "fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="; - }; - }; - "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"; - }; - }; - "obliterator-1.6.1" = { - name = "obliterator"; - packageName = "obliterator"; - version = "1.6.1"; - src = fetchurl { - url = "https://registry.npmjs.org/obliterator/-/obliterator-1.6.1.tgz"; - sha512 = "9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig=="; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - "os-homedir-1.0.2" = { - name = "os-homedir"; - packageName = "os-homedir"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz"; - sha1 = "ffbc4988336e0e833de0c168c7ef152121aa7fb3"; - }; - }; - "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"; - }; - }; - "osenv-0.1.5" = { - name = "osenv"; - packageName = "osenv"; - version = "0.1.5"; - src = fetchurl { - url = "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz"; - sha512 = "0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g=="; - }; - }; - "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-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=="; - }; - }; - "packet-reader-1.0.0" = { - name = "packet-reader"; - packageName = "packet-reader"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz"; - sha512 = "HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ=="; - }; - }; - "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=="; - }; - }; - "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-2.0.1" = { - name = "path-key"; - packageName = "path-key"; - version = "2.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz"; - sha1 = "411cadb574c5a140d3a4b1910d40d80cc9f40b40"; - }; - }; - "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.6" = { - name = "path-parse"; - packageName = "path-parse"; - version = "1.0.6"; - src = fetchurl { - url = "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz"; - sha512 = "GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="; - }; - }; - "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=="; - }; - }; - "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"; - }; - }; - "pg-8.6.0" = { - name = "pg"; - packageName = "pg"; - version = "8.6.0"; - src = fetchurl { - url = "https://registry.npmjs.org/pg/-/pg-8.6.0.tgz"; - sha512 = "qNS9u61lqljTDFvmk/N66EeGq3n6Ujzj0FFyNMGQr6XuEv4tgNTXvJQTfJdcvGit5p5/DWPu+wj920hAJFI+QQ=="; - }; - }; - "pg-connection-string-2.5.0" = { - name = "pg-connection-string"; - packageName = "pg-connection-string"; - version = "2.5.0"; - src = fetchurl { - url = "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz"; - sha512 = "r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ=="; - }; - }; - "pg-int8-1.0.1" = { - name = "pg-int8"; - packageName = "pg-int8"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz"; - sha512 = "WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="; - }; - }; - "pg-pool-3.3.0" = { - name = "pg-pool"; - packageName = "pg-pool"; - version = "3.3.0"; - src = fetchurl { - url = "https://registry.npmjs.org/pg-pool/-/pg-pool-3.3.0.tgz"; - sha512 = "0O5huCql8/D6PIRFAlmccjphLYWC+JIzvUhSzXSpGaf+tjTZc4nn+Lr7mLXBbFJfvwbP0ywDv73EiaBsxn7zdg=="; - }; - }; - "pg-protocol-1.5.0" = { - name = "pg-protocol"; - packageName = "pg-protocol"; - version = "1.5.0"; - src = fetchurl { - url = "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz"; - sha512 = "muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ=="; - }; - }; - "pg-types-2.2.0" = { - name = "pg-types"; - packageName = "pg-types"; - version = "2.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz"; - sha512 = "qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA=="; - }; - }; - "pgpass-1.0.4" = { - name = "pgpass"; - packageName = "pgpass"; - version = "1.0.4"; - src = fetchurl { - url = "https://registry.npmjs.org/pgpass/-/pgpass-1.0.4.tgz"; - sha512 = "YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w=="; - }; - }; - "picomatch-2.2.3" = { - name = "picomatch"; - packageName = "picomatch"; - version = "2.2.3"; - src = fetchurl { - url = "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz"; - sha512 = "KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg=="; - }; - }; - "pify-4.0.1" = { - name = "pify"; - packageName = "pify"; - version = "4.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz"; - sha512 = "uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="; - }; - }; - "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=="; - }; - }; - "postgres-array-2.0.0" = { - name = "postgres-array"; - packageName = "postgres-array"; - version = "2.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz"; - sha512 = "VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="; - }; - }; - "postgres-bytea-1.0.0" = { - name = "postgres-bytea"; - packageName = "postgres-bytea"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz"; - sha1 = "027b533c0aa890e26d172d47cf9ccecc521acd35"; - }; - }; - "postgres-date-1.0.7" = { - name = "postgres-date"; - packageName = "postgres-date"; - version = "1.0.7"; - src = fetchurl { - url = "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz"; - sha512 = "suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q=="; - }; - }; - "postgres-interval-1.2.0" = { - name = "postgres-interval"; - packageName = "postgres-interval"; - version = "1.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz"; - sha512 = "9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ=="; - }; - }; - "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"; - }; - }; - "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=="; - }; - }; - "progress-2.0.3" = { - name = "progress"; - packageName = "progress"; - version = "2.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz"; - sha512 = "7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="; - }; - }; - "proto-list-1.2.4" = { - name = "proto-list"; - packageName = "proto-list"; - version = "1.2.4"; - src = fetchurl { - url = "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz"; - sha1 = "212d5bfe1318306a420f6402b8e26ff39647a849"; - }; - }; - "prr-1.0.1" = { - name = "prr"; - packageName = "prr"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz"; - sha1 = "d3fc114ba06995a45ec6893f484ceb1d78f5f476"; - }; - }; - "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"; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - "qs-6.5.2" = { - name = "qs"; - packageName = "qs"; - version = "6.5.2"; - src = fetchurl { - url = "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz"; - sha512 = "N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="; - }; - }; - "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=="; - }; - }; - "rc-1.2.8" = { - name = "rc"; - packageName = "rc"; - version = "1.2.8"; - src = fetchurl { - url = "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz"; - sha512 = "y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="; - }; - }; - "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=="; - }; - }; - "rechoir-0.7.0" = { - name = "rechoir"; - packageName = "rechoir"; - version = "0.7.0"; - src = fetchurl { - url = "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz"; - sha512 = "ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q=="; - }; - }; - "regexpp-2.0.1" = { - name = "regexpp"; - packageName = "regexpp"; - version = "2.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz"; - sha512 = "lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw=="; - }; - }; - "regexpp-3.1.0" = { - name = "regexpp"; - packageName = "regexpp"; - version = "3.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz"; - sha512 = "ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q=="; - }; - }; - "request-2.88.2" = { - name = "request"; - packageName = "request"; - version = "2.88.2"; - src = fetchurl { - url = "https://registry.npmjs.org/request/-/request-2.88.2.tgz"; - sha512 = "MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw=="; - }; - }; - "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-cwd-3.0.0" = { - name = "resolve-cwd"; - packageName = "resolve-cwd"; - version = "3.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz"; - sha512 = "OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg=="; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - "rimraf-2.6.3" = { - name = "rimraf"; - packageName = "rimraf"; - version = "2.6.3"; - src = fetchurl { - url = "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz"; - sha512 = "mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA=="; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - "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-3.0.0" = { - name = "schema-utils"; - packageName = "schema-utils"; - version = "3.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz"; - sha512 = "6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA=="; - }; - }; - "semver-5.3.0" = { - name = "semver"; - packageName = "semver"; - version = "5.3.0"; - src = fetchurl { - url = "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz"; - sha1 = "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"; - }; - }; - "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.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=="; - }; - }; - "serialize-javascript-5.0.1" = { - name = "serialize-javascript"; - packageName = "serialize-javascript"; - version = "5.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz"; - sha512 = "SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA=="; - }; - }; - "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"; - }; - }; - "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=="; - }; - }; - "shebang-command-1.2.0" = { - name = "shebang-command"; - packageName = "shebang-command"; - version = "1.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz"; - sha1 = "44aac65b695b03398968c39f363fee5deafdf1ea"; - }; - }; - "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-1.0.0" = { - name = "shebang-regex"; - packageName = "shebang-regex"; - version = "1.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz"; - sha1 = "da42f49740c0b42db2ca9728571cb190c98efea3"; - }; - }; - "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=="; - }; - }; - "sigmund-1.0.1" = { - name = "sigmund"; - packageName = "sigmund"; - version = "1.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz"; - sha1 = "3ff21f198cad2175f9f3b781853fd94d0d19b590"; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - "slice-ansi-2.1.0" = { - name = "slice-ansi"; - packageName = "slice-ansi"; - version = "2.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz"; - sha512 = "Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ=="; - }; - }; - "source-list-map-2.0.1" = { - name = "source-list-map"; - packageName = "source-list-map"; - version = "2.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz"; - sha512 = "qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw=="; - }; - }; - "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-support-0.5.19" = { - name = "source-map-support"; - packageName = "source-map-support"; - version = "0.5.19"; - src = fetchurl { - url = "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz"; - sha512 = "Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw=="; - }; - }; - "spectre.css-0.5.9" = { - name = "spectre.css"; - packageName = "spectre.css"; - version = "0.5.9"; - src = fetchurl { - url = "https://registry.npmjs.org/spectre.css/-/spectre.css-0.5.9.tgz"; - sha512 = "9jUqwZmCnvflrxFGcK+ize43TvjwDjqMwZPVubEtSIHzvinH0TBUESm1LcOJx3Ur7bdPaeOHQIjOqBl1Y5kLFw=="; - }; - }; - "split2-3.2.2" = { - name = "split2"; - packageName = "split2"; - version = "3.2.2"; - src = fetchurl { - url = "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz"; - sha512 = "9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg=="; - }; - }; - "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"; - }; - }; - "sqlite3-5.0.2" = { - name = "sqlite3"; - packageName = "sqlite3"; - version = "5.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.2.tgz"; - sha512 = "1SdTNo+BVU211Xj1csWa8lV6KM0CtucDwRyA0VHl91wEH1Mgh7RxUpI4rVvG7OhHrzCSGaVyW5g8vKvlrk9DJA=="; - }; - }; - "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=="; - }; - }; - "string-width-1.0.2" = { - name = "string-width"; - packageName = "string-width"; - version = "1.0.2"; - src = fetchurl { - url = "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz"; - sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"; - }; - }; - "string-width-2.1.1" = { - name = "string-width"; - packageName = "string-width"; - version = "2.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz"; - sha512 = "nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw=="; - }; - }; - "string-width-3.1.0" = { - name = "string-width"; - packageName = "string-width"; - version = "3.1.0"; - src = fetchurl { - url = "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz"; - sha512 = "vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w=="; - }; - }; - "string-width-4.2.2" = { - name = "string-width"; - packageName = "string-width"; - version = "4.2.2"; - src = fetchurl { - url = "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz"; - sha512 = "XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA=="; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - "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-4.0.0" = { - name = "strip-ansi"; - packageName = "strip-ansi"; - version = "4.0.0"; - src = fetchurl { - url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz"; - sha1 = "a8479022eb1ac368a871389b635262c505ee368f"; - }; - }; - "strip-ansi-5.2.0" = { - name = "strip-ansi"; - packageName = "strip-ansi"; - version = "5.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz"; - sha512 = "DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA=="; - }; - }; - "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-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=="; - }; - }; - "strip-json-comments-2.0.1" = { - name = "strip-json-comments"; - packageName = "strip-json-comments"; - version = "2.0.1"; - src = fetchurl { - url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz"; - sha1 = "3c531942e908c2697c0ec344858c286c7ca0a60a"; - }; - }; - "strip-json-comments-3.1.1" = { - name = "strip-json-comments"; - packageName = "strip-json-comments"; - version = "3.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"; - sha512 = "6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="; - }; - }; - "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=="; - }; - }; - "table-5.4.6" = { - name = "table"; - packageName = "table"; - version = "5.4.6"; - src = fetchurl { - url = "https://registry.npmjs.org/table/-/table-5.4.6.tgz"; - sha512 = "wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug=="; - }; - }; - "tapable-2.2.0" = { - name = "tapable"; - packageName = "tapable"; - version = "2.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz"; - sha512 = "FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw=="; - }; - }; - "tar-2.2.2" = { - name = "tar"; - packageName = "tar"; - version = "2.2.2"; - src = fetchurl { - url = "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz"; - sha512 = "FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA=="; - }; - }; - "tar-4.4.13" = { - name = "tar"; - packageName = "tar"; - version = "4.4.13"; - src = fetchurl { - url = "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz"; - sha512 = "w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA=="; - }; - }; - "terser-5.6.1" = { - name = "terser"; - packageName = "terser"; - version = "5.6.1"; - src = fetchurl { - url = "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz"; - sha512 = "yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw=="; - }; - }; - "terser-webpack-plugin-5.1.1" = { - name = "terser-webpack-plugin"; - packageName = "terser-webpack-plugin"; - version = "5.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz"; - sha512 = "5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q=="; - }; - }; - "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"; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - "tough-cookie-2.5.0" = { - name = "tough-cookie"; - packageName = "tough-cookie"; - version = "2.5.0"; - src = fetchurl { - url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz"; - sha512 = "nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g=="; - }; - }; - "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=="; - }; - }; - "tsutils-3.21.0" = { - name = "tsutils"; - packageName = "tsutils"; - version = "3.21.0"; - src = fetchurl { - url = "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz"; - sha512 = "mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA=="; - }; - }; - "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-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.21.3" = { - name = "type-fest"; - packageName = "type-fest"; - version = "0.21.3"; - src = fetchurl { - url = "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz"; - sha512 = "t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="; - }; - }; - "type-fest-0.8.1" = { - name = "type-fest"; - packageName = "type-fest"; - version = "0.8.1"; - src = fetchurl { - url = "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz"; - sha512 = "4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="; - }; - }; - "typescript-4.2.4" = { - name = "typescript"; - packageName = "typescript"; - version = "4.2.4"; - src = fetchurl { - url = "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz"; - sha512 = "V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg=="; - }; - }; - "uri-js-4.4.1" = { - name = "uri-js"; - packageName = "uri-js"; - version = "4.4.1"; - src = fetchurl { - url = "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz"; - sha512 = "7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="; - }; - }; - "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"; - }; - }; - "uuid-3.4.0" = { - name = "uuid"; - packageName = "uuid"; - version = "3.4.0"; - src = fetchurl { - url = "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz"; - sha512 = "HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="; - }; - }; - "v8-compile-cache-2.3.0" = { - name = "v8-compile-cache"; - packageName = "v8-compile-cache"; - version = "2.3.0"; - src = fetchurl { - url = "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz"; - sha512 = "l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA=="; - }; - }; - "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"; - }; - }; - "vue-2.6.10" = { - name = "vue"; - packageName = "vue"; - version = "2.6.10"; - src = fetchurl { - url = "https://registry.npmjs.org/vue/-/vue-2.6.10.tgz"; - sha512 = "ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ=="; - }; - }; - "vue-eslint-parser-7.6.0" = { - name = "vue-eslint-parser"; - packageName = "vue-eslint-parser"; - version = "7.6.0"; - src = fetchurl { - url = "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.6.0.tgz"; - sha512 = "QXxqH8ZevBrtiZMZK0LpwaMfevQi9UL7lY6Kcp+ogWHC88AuwUPwwCIzkOUc1LR4XsYAt/F9yHXAB/QoD17QXA=="; - }; - }; - "vue-template-compiler-2.6.10" = { - name = "vue-template-compiler"; - packageName = "vue-template-compiler"; - version = "2.6.10"; - src = fetchurl { - url = "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.10.tgz"; - sha512 = "jVZkw4/I/HT5ZMvRnhv78okGusqe0+qH2A0Em0Cp8aq78+NK9TII263CDVz2QXZsIT+yyV/gZc/j/vlwa+Epyg=="; - }; - }; - "watchpack-2.1.1" = { - name = "watchpack"; - packageName = "watchpack"; - version = "2.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz"; - sha512 = "Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw=="; - }; - }; - "webpack-5.33.2" = { - name = "webpack"; - packageName = "webpack"; - version = "5.33.2"; - src = fetchurl { - url = "https://registry.npmjs.org/webpack/-/webpack-5.33.2.tgz"; - sha512 = "X4b7F1sYBmJx8mlh2B7mV5szEkE0jYNJ2y3akgAP0ERi0vLCG1VvdsIxt8lFd4st6SUy0lf7W0CCQS566MBpJg=="; - }; - }; - "webpack-cli-4.6.0" = { - name = "webpack-cli"; - packageName = "webpack-cli"; - version = "4.6.0"; - src = fetchurl { - url = "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.6.0.tgz"; - sha512 = "9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA=="; - }; - }; - "webpack-merge-5.7.3" = { - name = "webpack-merge"; - packageName = "webpack-merge"; - version = "5.7.3"; - src = fetchurl { - url = "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz"; - sha512 = "6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA=="; - }; - }; - "webpack-sources-2.2.0" = { - name = "webpack-sources"; - packageName = "webpack-sources"; - version = "2.2.0"; - src = fetchurl { - url = "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz"; - sha512 = "bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w=="; - }; - }; - "which-1.3.1" = { - name = "which"; - packageName = "which"; - version = "1.3.1"; - src = fetchurl { - url = "https://registry.npmjs.org/which/-/which-1.3.1.tgz"; - sha512 = "HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ=="; - }; - }; - "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=="; - }; - }; - "wide-align-1.1.3" = { - name = "wide-align"; - packageName = "wide-align"; - version = "1.1.3"; - src = fetchurl { - url = "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz"; - sha512 = "QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA=="; - }; - }; - "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=="; - }; - }; - "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"; - }; - }; - "write-1.0.3" = { - name = "write"; - packageName = "write"; - version = "1.0.3"; - src = fetchurl { - url = "https://registry.npmjs.org/write/-/write-1.0.3.tgz"; - sha512 = "/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig=="; - }; - }; - "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=="; - }; - }; - "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-3.1.1" = { - name = "yallist"; - packageName = "yallist"; - version = "3.1.1"; - src = fetchurl { - url = "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz"; - sha512 = "a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - }; - args = { - name = "terraforming-mars"; - packageName = "terraforming-mars"; - version = "1.0.0"; - inherit src; - dependencies = [ - sources."@babel/code-frame-7.12.13" - sources."@babel/helper-validator-identifier-7.12.11" - sources."@babel/highlight-7.13.10" - sources."@discoveryjs/json-ext-0.5.2" - sources."@nodelib/fs.scandir-2.1.4" - sources."@nodelib/fs.stat-2.0.4" - sources."@nodelib/fs.walk-1.2.6" - sources."@types/eslint-7.2.10" - sources."@types/eslint-scope-3.7.0" - sources."@types/estree-0.0.46" - sources."@types/json-schema-7.0.7" - sources."@types/node-10.17.58" - sources."@types/pg-7.14.11" - sources."@types/sqlite3-3.1.7" - sources."@typescript-eslint/eslint-plugin-4.22.0" - sources."@typescript-eslint/experimental-utils-4.22.0" - sources."@typescript-eslint/parser-4.22.0" - sources."@typescript-eslint/scope-manager-4.22.0" - sources."@typescript-eslint/types-4.22.0" - sources."@typescript-eslint/typescript-estree-4.22.0" - sources."@typescript-eslint/visitor-keys-4.22.0" - sources."@webassemblyjs/ast-1.11.0" - sources."@webassemblyjs/floating-point-hex-parser-1.11.0" - sources."@webassemblyjs/helper-api-error-1.11.0" - sources."@webassemblyjs/helper-buffer-1.11.0" - sources."@webassemblyjs/helper-numbers-1.11.0" - sources."@webassemblyjs/helper-wasm-bytecode-1.11.0" - sources."@webassemblyjs/helper-wasm-section-1.11.0" - sources."@webassemblyjs/ieee754-1.11.0" - sources."@webassemblyjs/leb128-1.11.0" - sources."@webassemblyjs/utf8-1.11.0" - sources."@webassemblyjs/wasm-edit-1.11.0" - sources."@webassemblyjs/wasm-gen-1.11.0" - sources."@webassemblyjs/wasm-opt-1.11.0" - sources."@webassemblyjs/wasm-parser-1.11.0" - sources."@webassemblyjs/wast-printer-1.11.0" - sources."@webpack-cli/configtest-1.0.2" - sources."@webpack-cli/info-1.2.3" - sources."@webpack-cli/serve-1.3.1" - sources."@xtuc/ieee754-1.2.0" - sources."@xtuc/long-4.2.2" - sources."abbrev-1.1.1" - sources."acorn-7.4.1" - sources."acorn-jsx-5.3.1" - sources."ajv-6.12.6" - sources."ajv-keywords-3.5.2" - sources."ansi-colors-4.1.1" - (sources."ansi-escapes-4.3.2" // { - dependencies = [ - sources."type-fest-0.21.3" - ]; - }) - sources."ansi-regex-4.1.0" - sources."ansi-styles-3.2.1" - sources."aproba-1.2.0" - (sources."are-we-there-yet-1.1.5" // { - dependencies = [ - sources."readable-stream-2.3.7" - sources."string_decoder-1.1.1" - ]; - }) - sources."argparse-1.0.10" - sources."array-union-2.1.0" - sources."asn1-0.2.4" - sources."assert-plus-1.0.0" - sources."astral-regex-1.0.0" - sources."asynckit-0.4.0" - sources."aws-sign2-0.7.0" - sources."aws4-1.11.0" - sources."balanced-match-1.0.2" - sources."bcrypt-pbkdf-1.0.2" - sources."block-stream-0.0.9" - sources."brace-expansion-1.1.11" - sources."braces-3.0.2" - sources."browserslist-4.16.4" - sources."buffer-from-1.1.1" - sources."buffer-writer-2.0.0" - sources."callsites-3.1.0" - sources."caniuse-lite-1.0.30001209" - sources."caseless-0.12.0" - sources."chalk-2.4.2" - sources."chardet-0.7.0" - sources."chownr-1.1.4" - sources."chrome-trace-event-1.0.3" - sources."cli-cursor-3.1.0" - sources."cli-width-3.0.0" - (sources."clone-deep-4.0.1" // { - dependencies = [ - sources."kind-of-6.0.3" - ]; - }) - sources."code-point-at-1.1.0" - sources."color-convert-1.9.3" - sources."color-name-1.1.3" - sources."colorette-1.2.2" - sources."combined-stream-1.0.8" - sources."commander-2.20.3" - sources."compression-webpack-plugin-7.1.2" - sources."concat-map-0.0.1" - sources."config-chain-1.1.12" - sources."console-control-strings-1.1.0" - sources."console-stamp-3.0.0-rc4.2" - sources."copy-anything-2.0.3" - sources."core-util-is-1.0.2" - (sources."cross-spawn-6.0.5" // { - dependencies = [ - sources."semver-5.7.1" - ]; - }) - sources."dashdash-1.14.1" - sources."dateformat-3.0.3" - sources."de-indent-1.0.2" - sources."debug-4.3.1" - sources."deep-extend-0.6.0" - sources."deep-is-0.1.3" - sources."delayed-stream-1.0.0" - sources."delegates-1.0.0" - sources."detect-libc-1.0.3" - sources."dialog-polyfill-0.5.6" - sources."dir-glob-3.0.1" - sources."doctrine-3.0.0" - sources."dotenv-8.2.0" - sources."ecc-jsbn-0.1.2" - (sources."editorconfig-0.15.3" // { - dependencies = [ - sources."semver-5.7.1" - ]; - }) - sources."electron-to-chromium-1.3.717" - sources."emoji-regex-8.0.0" - sources."enhanced-resolve-5.7.0" - sources."enquirer-2.3.6" - sources."envinfo-7.8.1" - sources."errno-0.1.8" - sources."es-module-lexer-0.4.1" - sources."escalade-3.1.1" - sources."escape-string-regexp-1.0.5" - (sources."eslint-6.8.0" // { - dependencies = [ - sources."eslint-utils-1.4.3" - sources."eslint-visitor-keys-1.3.0" - sources."regexpp-2.0.1" - sources."semver-6.3.0" - ]; - }) - sources."eslint-config-google-0.14.0" - (sources."eslint-plugin-vue-6.2.2" // { - dependencies = [ - sources."semver-5.7.1" - ]; - }) - sources."eslint-scope-5.1.1" - (sources."eslint-utils-2.1.0" // { - dependencies = [ - sources."eslint-visitor-keys-1.3.0" - ]; - }) - sources."eslint-visitor-keys-2.0.0" - (sources."espree-6.2.1" // { - dependencies = [ - sources."eslint-visitor-keys-1.3.0" - ]; - }) - sources."esprima-4.0.1" - (sources."esquery-1.4.0" // { - dependencies = [ - sources."estraverse-5.2.0" - ]; - }) - (sources."esrecurse-4.3.0" // { - dependencies = [ - sources."estraverse-5.2.0" - ]; - }) - sources."estraverse-4.3.0" - sources."esutils-2.0.3" - sources."events-3.3.0" - (sources."execa-5.0.0" // { - dependencies = [ - sources."cross-spawn-7.0.3" - sources."is-stream-2.0.0" - sources."path-key-3.1.1" - sources."shebang-command-2.0.0" - sources."shebang-regex-3.0.0" - sources."which-2.0.2" - ]; - }) - sources."extend-3.0.2" - sources."external-editor-3.1.0" - sources."extsprintf-1.3.0" - sources."fast-deep-equal-3.1.3" - sources."fast-glob-3.2.5" - sources."fast-json-stable-stringify-2.1.0" - sources."fast-levenshtein-2.0.6" - sources."fastest-levenshtein-1.0.12" - sources."fastq-1.11.0" - sources."figures-3.2.0" - sources."file-entry-cache-5.0.1" - sources."fill-range-7.0.1" - sources."flat-cache-2.0.1" - sources."flatted-2.0.2" - sources."forever-agent-0.6.1" - sources."form-data-2.3.3" - sources."fs-minipass-1.2.7" - sources."fs.realpath-1.0.0" - sources."fstream-1.0.12" - sources."function-bind-1.1.1" - sources."functional-red-black-tree-1.0.1" - (sources."gauge-2.7.4" // { - dependencies = [ - sources."ansi-regex-2.1.1" - sources."is-fullwidth-code-point-1.0.0" - sources."string-width-1.0.2" - sources."strip-ansi-3.0.1" - ]; - }) - sources."get-stream-6.0.1" - sources."getpass-0.1.7" - sources."glob-7.1.6" - sources."glob-parent-5.1.2" - sources."glob-to-regexp-0.4.1" - sources."globals-12.4.0" - (sources."globby-11.0.3" // { - dependencies = [ - sources."ignore-5.1.8" - ]; - }) - sources."graceful-fs-4.2.6" - sources."har-schema-2.0.0" - sources."har-validator-5.1.5" - sources."has-1.0.3" - sources."has-flag-3.0.0" - sources."has-unicode-2.0.1" - sources."he-1.2.0" - sources."http-signature-1.2.0" - sources."human-signals-2.1.0" - sources."iconv-lite-0.4.24" - sources."ignore-4.0.6" - sources."ignore-walk-3.0.3" - sources."image-size-0.5.5" - sources."import-fresh-3.3.0" - (sources."import-local-3.0.2" // { - dependencies = [ - sources."find-up-4.1.0" - sources."locate-path-5.0.0" - sources."p-limit-2.3.0" - sources."p-locate-4.1.0" - sources."pkg-dir-4.2.0" - ]; - }) - sources."imurmurhash-0.1.4" - sources."inflight-1.0.6" - sources."inherits-2.0.4" - sources."ini-1.3.8" - (sources."inquirer-7.3.3" // { - dependencies = [ - sources."ansi-regex-5.0.0" - 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."strip-ansi-6.0.0" - sources."supports-color-7.2.0" - ]; - }) - sources."interpret-2.2.0" - sources."is-core-module-2.2.0" - sources."is-extglob-2.1.1" - sources."is-fullwidth-code-point-3.0.0" - sources."is-glob-4.0.1" - sources."is-number-7.0.0" - sources."is-plain-object-2.0.4" - sources."is-typedarray-1.0.0" - sources."is-what-3.14.1" - sources."isarray-1.0.0" - sources."isexe-2.0.0" - sources."isobject-3.0.1" - sources."isstream-0.1.2" - (sources."jest-worker-26.6.2" // { - dependencies = [ - sources."has-flag-4.0.0" - sources."supports-color-7.2.0" - ]; - }) - (sources."js-beautify-1.13.13" // { - dependencies = [ - sources."mkdirp-1.0.4" - ]; - }) - sources."js-tokens-4.0.0" - sources."js-yaml-3.14.1" - sources."jsbn-0.1.1" - sources."json-parse-better-errors-1.0.2" - sources."json-schema-0.2.3" - sources."json-schema-traverse-0.4.1" - sources."json-stable-stringify-without-jsonify-1.0.1" - sources."json-stringify-safe-5.0.1" - sources."jsprim-1.4.1" - sources."less-3.13.1" - sources."levn-0.3.0" - sources."loader-runner-4.2.0" - sources."lodash-4.17.21" - sources."lru-cache-4.1.5" - (sources."make-dir-2.1.0" // { - dependencies = [ - sources."semver-5.7.1" - ]; - }) - sources."merge-stream-2.0.0" - sources."merge2-1.4.1" - sources."micromatch-4.0.4" - sources."mime-1.6.0" - sources."mime-db-1.47.0" - sources."mime-types-2.1.30" - sources."mimic-fn-2.1.0" - sources."minimatch-3.0.4" - sources."minimist-1.2.5" - (sources."minipass-2.9.0" // { - dependencies = [ - sources."yallist-3.1.1" - ]; - }) - sources."minizlib-1.3.3" - sources."mkdirp-0.5.5" - sources."mnemonist-0.38.3" - sources."ms-2.1.2" - sources."mute-stream-0.0.8" - sources."native-request-1.0.8" - sources."natural-compare-1.4.0" - (sources."needle-2.6.0" // { - dependencies = [ - sources."debug-3.2.7" - ]; - }) - sources."neo-async-2.6.2" - sources."nice-try-1.0.5" - sources."node-addon-api-3.1.0" - (sources."node-gyp-3.8.0" // { - dependencies = [ - sources."nopt-3.0.6" - sources."semver-5.3.0" - ]; - }) - (sources."node-pre-gyp-0.11.0" // { - dependencies = [ - sources."nopt-4.0.3" - sources."semver-5.7.1" - sources."tar-4.4.13" - sources."yallist-3.1.1" - ]; - }) - sources."node-releases-1.1.71" - sources."nopt-5.0.0" - sources."npm-bundled-1.1.1" - sources."npm-normalize-package-bin-1.0.1" - sources."npm-packlist-1.4.8" - (sources."npm-run-path-4.0.1" // { - dependencies = [ - sources."path-key-3.1.1" - ]; - }) - sources."npmlog-4.1.2" - sources."number-is-nan-1.0.1" - sources."oauth-sign-0.9.0" - sources."object-assign-4.1.1" - sources."obliterator-1.6.1" - sources."once-1.4.0" - sources."onetime-5.1.2" - sources."optionator-0.8.3" - sources."os-homedir-1.0.2" - sources."os-tmpdir-1.0.2" - sources."osenv-0.1.5" - sources."p-limit-3.1.0" - sources."p-try-2.2.0" - sources."packet-reader-1.0.0" - sources."parent-module-1.0.1" - sources."path-exists-4.0.0" - sources."path-is-absolute-1.0.1" - sources."path-key-2.0.1" - sources."path-parse-1.0.6" - sources."path-type-4.0.0" - sources."performance-now-2.1.0" - sources."pg-8.6.0" - sources."pg-connection-string-2.5.0" - sources."pg-int8-1.0.1" - sources."pg-pool-3.3.0" - sources."pg-protocol-1.5.0" - sources."pg-types-2.2.0" - sources."pgpass-1.0.4" - sources."picomatch-2.2.3" - sources."pify-4.0.1" - sources."postgres-array-2.0.0" - sources."postgres-bytea-1.0.0" - sources."postgres-date-1.0.7" - sources."postgres-interval-1.2.0" - sources."prelude-ls-1.1.2" - sources."process-nextick-args-2.0.1" - sources."progress-2.0.3" - sources."proto-list-1.2.4" - sources."prr-1.0.1" - sources."pseudomap-1.0.2" - sources."psl-1.8.0" - sources."punycode-2.1.1" - sources."qs-6.5.2" - sources."queue-microtask-1.2.3" - sources."randombytes-2.1.0" - (sources."rc-1.2.8" // { - dependencies = [ - sources."strip-json-comments-2.0.1" - ]; - }) - sources."readable-stream-3.6.0" - sources."rechoir-0.7.0" - sources."regexpp-3.1.0" - (sources."request-2.88.2" // { - dependencies = [ - sources."tough-cookie-2.5.0" - ]; - }) - sources."resolve-1.20.0" - (sources."resolve-cwd-3.0.0" // { - dependencies = [ - sources."resolve-from-5.0.0" - ]; - }) - sources."resolve-from-4.0.0" - sources."restore-cursor-3.1.0" - sources."reusify-1.0.4" - sources."rimraf-2.6.3" - sources."run-async-2.4.1" - sources."run-parallel-1.2.0" - sources."rxjs-6.6.7" - sources."safe-buffer-5.1.2" - sources."safer-buffer-2.1.2" - sources."sax-1.2.4" - sources."schema-utils-3.0.0" - (sources."semver-7.3.5" // { - dependencies = [ - sources."lru-cache-6.0.0" - sources."yallist-4.0.0" - ]; - }) - sources."serialize-javascript-5.0.1" - sources."set-blocking-2.0.0" - (sources."shallow-clone-3.0.1" // { - dependencies = [ - sources."kind-of-6.0.3" - ]; - }) - sources."shebang-command-1.2.0" - sources."shebang-regex-1.0.0" - sources."sigmund-1.0.1" - sources."signal-exit-3.0.3" - sources."slash-3.0.0" - (sources."slice-ansi-2.1.0" // { - dependencies = [ - sources."is-fullwidth-code-point-2.0.0" - ]; - }) - sources."source-list-map-2.0.1" - sources."source-map-0.6.1" - sources."source-map-support-0.5.19" - sources."spectre.css-0.5.9" - sources."split2-3.2.2" - sources."sprintf-js-1.0.3" - sources."sqlite3-5.0.2" - sources."sshpk-1.16.1" - (sources."string-width-4.2.2" // { - dependencies = [ - sources."ansi-regex-5.0.0" - sources."strip-ansi-6.0.0" - ]; - }) - (sources."string_decoder-1.3.0" // { - dependencies = [ - sources."safe-buffer-5.2.1" - ]; - }) - sources."strip-ansi-5.2.0" - sources."strip-final-newline-2.0.0" - sources."strip-json-comments-3.1.1" - sources."supports-color-5.5.0" - (sources."table-5.4.6" // { - dependencies = [ - sources."emoji-regex-7.0.3" - sources."is-fullwidth-code-point-2.0.0" - sources."string-width-3.1.0" - ]; - }) - sources."tapable-2.2.0" - sources."tar-2.2.2" - (sources."terser-5.6.1" // { - dependencies = [ - sources."source-map-0.7.3" - ]; - }) - sources."terser-webpack-plugin-5.1.1" - sources."text-table-0.2.0" - sources."through-2.3.8" - sources."tmp-0.0.33" - sources."to-regex-range-5.0.1" - sources."tslib-1.14.1" - sources."tsutils-3.21.0" - sources."tunnel-agent-0.6.0" - sources."tweetnacl-0.14.5" - sources."type-check-0.3.2" - sources."type-fest-0.8.1" - sources."typescript-4.2.4" - sources."uri-js-4.4.1" - sources."util-deprecate-1.0.2" - sources."uuid-3.4.0" - sources."v8-compile-cache-2.3.0" - sources."verror-1.10.0" - sources."vue-2.6.10" - (sources."vue-eslint-parser-7.6.0" // { - dependencies = [ - sources."eslint-visitor-keys-1.3.0" - ]; - }) - sources."vue-template-compiler-2.6.10" - sources."watchpack-2.1.1" - (sources."webpack-5.33.2" // { - dependencies = [ - sources."acorn-8.1.1" - ]; - }) - (sources."webpack-cli-4.6.0" // { - dependencies = [ - sources."commander-7.2.0" - ]; - }) - sources."webpack-merge-5.7.3" - sources."webpack-sources-2.2.0" - sources."which-1.3.1" - (sources."wide-align-1.1.3" // { - dependencies = [ - sources."ansi-regex-3.0.0" - sources."is-fullwidth-code-point-2.0.0" - sources."string-width-2.1.1" - sources."strip-ansi-4.0.0" - ]; - }) - sources."wildcard-2.0.0" - sources."word-wrap-1.2.3" - sources."wrappy-1.0.2" - sources."write-1.0.3" - sources."xtend-4.0.2" - sources."yallist-2.1.2" - sources."yocto-queue-0.1.0" - ]; - buildInputs = globalBuildInputs; - meta = { - description = "Terraforming Mars Game"; - homepage = "https://github.com/bafolts/terraforming-mars#readme"; - license = "ISC"; - }; - production = true; - bypassCache = true; - reconstructLock = false; - }; -in -{ - args = args; - sources = sources; - tarball = nodeEnv.buildNodeSourceDist args; - package = nodeEnv.buildNodePackage args; - shell = nodeEnv.buildNodeShell args; -} diff --git a/modules/private/websites/tools/games/terraforming-mars/terraforming-mars.nix b/modules/private/websites/tools/games/terraforming-mars/terraforming-mars.nix deleted file mode 100644 index 502a553..0000000 --- a/modules/private/websites/tools/games/terraforming-mars/terraforming-mars.nix +++ /dev/null @@ -1,36 +0,0 @@ -{ fetchgit, runCommand, callPackage, mylibs, nodePackages, nodejs, git }: -let - source = fetchgit { - url = "https://github.com/bafolts/terraforming-mars"; - rev = "25b3f80e276cc0c1fc283a78b6ae94b13c545ab6"; - sha256 = "03xcwvxv2mlmswngklzqp3lf30hgkvdilqq7p1z4h8xmy50cy12k"; - leaveDotGit = true; - fetchSubmodules = true; - }; - patchedSource = runCommand "patch-source" {} '' - cp -r ${source} $out - chmod -R u+w $out - sed -i -e 's/"lockfileVersion": 2,/"lockfileVersion": 1,/' $out/package-lock.json - ''; - packages = callPackage ./node-packages.nix { - src = patchedSource; - nodeEnv = callPackage mylibs.nodeEnv {}; - globalBuildInputs = [ nodePackages.node-pre-gyp ]; - }; - terraforming-mars = runCommand "terraforming-mars" { - buildInputs = [ nodejs git ]; - } '' - cp -r ${source} ./source - chmod -R u+w source - cd source - ln -s ${packages.package}/lib/node_modules/terraforming-mars/node_modules . - npm run build - mkdir $out - cp -a build $out/ - cp -a assets $out/ - cp package.json $out/ - ln -s ${packages.package}/lib/node_modules/terraforming-mars/node_modules $out - ln -s /var/lib/terraforming-mars/db $out/db - ''; -in - terraforming-mars diff --git a/modules/private/websites/tools/git/default.nix b/modules/private/websites/tools/git/default.nix deleted file mode 100644 index 8f611ee..0000000 --- a/modules/private/websites/tools/git/default.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ lib, pkgs, config, ... }: -let - mantisbt = pkgs.callPackage ./mantisbt.nix { - inherit (pkgs.webapps) mantisbt_2 mantisbt_2-plugins; - env = config.myEnv.tools.mantisbt; - inherit config; - }; - gitweb = pkgs.callPackage ./gitweb.nix { - gitoliteDir = config.myServices.gitolite.gitoliteDir; - }; - - cfg = config.myServices.websites.tools.git; -in { - options.myServices.websites.tools.git = { - enable = lib.mkEnableOption "enable git's website"; - }; - - config = lib.mkIf cfg.enable { - secrets.keys = mantisbt.keys; - services.websites.env.tools.modules = - gitweb.apache.modules ++ - mantisbt.apache.modules; - - system.activationScripts.mantisbt = mantisbt.activationScript; - services.websites.env.tools.vhostConfs.git = { - certName = "eldiron"; - addToCerts = true; - hosts = ["git.immae.eu" ]; - root = gitweb.apache.root; - extraConfig = [ - gitweb.apache.vhostConf - (mantisbt.apache.vhostConf config.services.phpfpm.pools.mantisbt.socket) - '' - RewriteEngine on - RewriteCond %{REQUEST_URI} ^/releases - RewriteRule /releases(.*) https://release.immae.eu$1 [P,L] - '' - ]; - }; - services.phpfpm.pools = { - mantisbt = { - user = config.services.httpd.Tools.user; - group = config.services.httpd.Tools.group; - settings = mantisbt.phpFpm.pool; - phpPackage = pkgs.php72; - }; - }; - }; -} diff --git a/modules/private/websites/tools/git/gitweb.nix b/modules/private/websites/tools/git/gitweb.nix deleted file mode 100644 index ff34da5..0000000 --- a/modules/private/websites/tools/git/gitweb.nix +++ /dev/null @@ -1,119 +0,0 @@ -{ gitweb, writeText, stdenv, coreutils, writeScript, gitolite, git, cgit, gitoliteDir, mailcap, highlight }: -rec { - varDir = gitoliteDir; - config = writeText "gitweb.conf" '' - $git_temp = "/tmp"; - - # The directories where your projects are. Must not end with a - # slash. - $projectroot = "${varDir}/repositories"; - - $projects_list = "${varDir}/projects.list"; - $strict_export = "true"; - - # Base URLs for links displayed in the web interface. - our @git_base_url_list = qw(ssh://gitolite@git.immae.eu https://git.immae.eu); - - $feature{'blame'}{'default'} = [1]; - $feature{'avatar'}{'default'} = ['gravatar']; - $feature{'highlight'}{'default'} = [1]; - - @stylesheets = ("gitweb-theme/gitweb.css"); - $logo = "gitweb-theme/git-logo.png"; - $favicon = "gitweb-theme/git-favicon.png"; - $javascript = "gitweb-theme/gitweb.js"; - $logo_url = "https://git.immae.eu/"; - $projects_list_group_categories = "true"; - $projects_list_description_width = 60; - $project_list_default_category = "__Others__"; - $highlight_bin = "${highlight}/bin/highlight"; - ''; - aboutFilter = writeScript "about-filter.sh" '' - #!${stdenv.shell} - - if [ -f "$CGIT_REPO_PATH/README.html" ]; then - cat "$CGIT_REPO_PATH/README.html" - else - ${cgit}/lib/cgit/filters/about-formatting.sh "$@" - fi - ''; - cgitConfig = writeText "cgitrc" '' - css=/cgit-css/cgit.css - logo=/cgit-css/cgit.png - favicon=/cgit-css/favicon.ico - - root-title=Immae’s git - root-desc=To go back to the old interface: https://git.immae.eu/?old - readme=:README.md - readme=:readme.md - readme=:README - readme=:DOCUMENTATION.md - about-filter=${aboutFilter} - #${cgit}/lib/cgit/filters/about-formatting.sh - source-filter=${cgit}/lib/cgit/filters/syntax-highlighting.py - - enable-blame=1 - enable-index-links=1 - enable-commit-graph=1 - enable-log-filecount=1 - enable-log-linecount=1 - - enable-html-serving=1 - # Allow using gitweb.* keys - enable-git-config=1 - - side-by-side-diffs=1 - snapshots=tar.gz tar.zst zip - mimetype-file=${mailcap}/etc/mime.types - - section=__Others__ - clone-url=ssh://gitolite@git.immae.eu/$CGIT_REPO_URL https://git.immae.eu/$CGIT_REPO_URL - #section-from-path=1 - project-list=${varDir}/projects.list - scan-path=${varDir}/repositories - ''; - apache = rec { - user = "wwwrun"; - group = "wwwrun"; - modules = [ "cgid" ]; - root = gitweb; - vhostConf = '' - SetEnv GIT_PROJECT_ROOT ${varDir}/repositories/ - ScriptAliasMatch \ - "(?x)^/(.*/(HEAD | \ - info/refs | \ - objects/(info/[^/]+ | \ - [0-9a-f]{2}/[0-9a-f]{38} | \ - pack/pack-[0-9a-f]{40}\.(pack|idx)) | \ - git-(upload|receive)-pack))$" \ - ${git}/libexec/git-core/git-http-backend/$1 - - - Require all granted - - - DirectoryIndex gitweb.cgi - Require all granted - AllowOverride None - Options ExecCGI FollowSymLinks - - SetHandler cgi-script - SetEnv GITWEB_CONFIG "${config}" - - - - SetEnv CGIT_CONFIG ${cgitConfig} - ScriptAlias /cgit "${cgit}/cgit/cgit.cgi/" - Alias /cgit-css "${cgit}/cgit" - - AllowOverride None - Options ExecCGI FollowSymlinks - Require all granted - - - RewriteEngine On - RewriteCond %{QUERY_STRING} ^$ - RewriteRule ^/?$ /cgit [L,R=302] - ''; - }; -} diff --git a/modules/private/websites/tools/git/mantisbt.nix b/modules/private/websites/tools/git/mantisbt.nix deleted file mode 100644 index 2ef76af..0000000 --- a/modules/private/websites/tools/git/mantisbt.nix +++ /dev/null @@ -1,91 +0,0 @@ -{ env, mantisbt_2, mantisbt_2-plugins, config }: -rec { - activationScript = { - deps = [ "httpd" ]; - text = '' - install -m 0755 -o ${apache.user} -g ${apache.group} -d /var/lib/php/sessions/mantisbt - ''; - }; - keys."webapps/tools-mantisbt" = { - user = apache.user; - group = apache.group; - permissions = "0400"; - text = '' - - DirectoryIndex index.php - - SetHandler "proxy:unix:${socket}|fcgi://localhost" - - - AllowOverride All - SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 - Options FollowSymlinks - Require all granted - - - #Reenable during upgrade - Require all denied - - ''; - }; - phpFpm = rec { - serviceDeps = [ "postgresql.service" "openldap.service" ]; - basedir = builtins.concatStringsSep ":" ( - [ webRoot config.secrets.fullPaths."webapps/tools-mantisbt" ] - ++ webRoot.plugins); - pool = { - "listen.owner" = apache.user; - "listen.group" = apache.group; - "pm" = "ondemand"; - "pm.max_children" = "60"; - "pm.process_idle_timeout" = "60"; - - "php_admin_value[upload_max_filesize]" = "5000000"; - - "php_admin_value[open_basedir]" = "${basedir}:/tmp:/var/lib/php/sessions/mantisbt"; - "php_admin_value[session.save_path]" = "/var/lib/php/sessions/mantisbt"; - }; - }; -} diff --git a/modules/private/websites/tools/im/default.nix b/modules/private/websites/tools/im/default.nix deleted file mode 100644 index 94dc4f8..0000000 --- a/modules/private/websites/tools/im/default.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ config, lib, pkgs, ... }: -let - cfg = config.myServices.websites.tools.im; -in -{ - options.myServices.websites.tools.im = { - enable = lib.mkEnableOption "enable im website"; - }; - - config = lib.mkIf cfg.enable { - services.websites.env.tools.vhostConfs.im = { - certName = "eldiron"; - addToCerts = true; - hosts = ["im.immae.fr"]; - root = ./www; - extraConfig = [ - '' - Alias /glowing-bear ${pkgs.glowing-bear} - Alias /converse ${./www}/converse.html - ProxyPreserveHost On - - ProxyPass http://localhost:5280/bosh - ProxyPassReverse http://localhost:5280/bosh - - - ProxyPass ws://localhost:5280/ws - - ProxyPass /upload http://localhost:5280/upload - ProxyPassReverse /upload http://localhost:5280/upload - ProxyPass /admin http://localhost:5280/admin - ProxyPassReverse /admin http://localhost:5280/admin - ProxyPass /api http://localhost:5280/api - ProxyPassReverse /api http://localhost:5280/api - - AllowOverride none - Require all granted - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/tools/im/www/converse.html b/modules/private/websites/tools/im/www/converse.html deleted file mode 100644 index 936dde4..0000000 --- a/modules/private/websites/tools/im/www/converse.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - Converse - - - - - - - - - - - - - - - - - - diff --git a/modules/private/websites/tools/im/www/index.html b/modules/private/websites/tools/im/www/index.html deleted file mode 100644 index 90c5458..0000000 --- a/modules/private/websites/tools/im/www/index.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - Instant messaging configuration (Jabber/XMPP) - - - -

- Pre-configured clients: -

-

-

- Technical details: -

    -
  • HTTP-bind/BOSH access (XEP-0124 / XEP-0206): https://im.immae.fr/bosh
  • -
  • WS access (RFC 7395): wss://im.immae.fr/ws
  • -
-

- - diff --git a/modules/private/websites/tools/mail/default.nix b/modules/private/websites/tools/mail/default.nix deleted file mode 100644 index 390f7ad..0000000 --- a/modules/private/websites/tools/mail/default.nix +++ /dev/null @@ -1,79 +0,0 @@ -{ lib, pkgs, config, ... }: -let - roundcubemail = pkgs.callPackage ./roundcubemail.nix { - inherit (pkgs.webapps) roundcubemail; - env = config.myEnv.tools.roundcubemail; - inherit config; - }; - rainloop = pkgs.callPackage ./rainloop.nix { - rainloop = pkgs.rainloop-community; - }; - cfg = config.myServices.websites.tools.email; - pcfg = config.services.phpfpm.pools; -in -{ - options.myServices.websites.tools.email = { - enable = lib.mkEnableOption "enable email website"; - }; - - imports = [ - ./mta-sts.nix - ]; - - config = lib.mkIf cfg.enable { - secrets.keys = roundcubemail.keys; - - services.websites.env.tools.modules = - [ "proxy_fcgi" ] - ++ rainloop.apache.modules - ++ roundcubemail.apache.modules; - - services.websites.env.tools.vhostConfs.mail = { - certName = "mail"; - addToCerts = true; - hosts = ["mail.immae.eu"]; - root = ./www; - extraConfig = [ - (rainloop.apache.vhostConf pcfg.rainloop.socket) - (roundcubemail.apache.vhostConf pcfg.roundcubemail.socket) - '' - - Require all granted - Options -Indexes - - '' - ]; - }; - systemd.services = { - phpfpm-rainloop = { - after = lib.mkAfter rainloop.phpFpm.serviceDeps; - wants = rainloop.phpFpm.serviceDeps; - }; - phpfpm-roundcubemail = { - after = lib.mkAfter roundcubemail.phpFpm.serviceDeps; - wants = roundcubemail.phpFpm.serviceDeps; - }; - }; - - services.phpfpm.pools.roundcubemail = { - user = "wwwrun"; - group = "wwwrun"; - settings = roundcubemail.phpFpm.pool; - phpOptions = config.services.phpfpm.phpOptions + '' - date.timezone = 'CET' - ''; - phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [ all.imagick ]); - }; - services.phpfpm.pools.rainloop = { - user = "wwwrun"; - group = "wwwrun"; - settings = rainloop.phpFpm.pool; - phpPackage = pkgs.php72; - }; - system.activationScripts = { - roundcubemail = roundcubemail.activationScript; - rainloop = rainloop.activationScript; - }; - }; - -} diff --git a/modules/private/websites/tools/mail/mta-sts.nix b/modules/private/websites/tools/mail/mta-sts.nix deleted file mode 100644 index 77ba2d4..0000000 --- a/modules/private/websites/tools/mail/mta-sts.nix +++ /dev/null @@ -1,54 +0,0 @@ -{ lib, pkgs, config, ... }: -let - domains = (lib.remove null (lib.flatten (map - (zone: map - (e: if e.receive - then { - domain = "${e.domain}${lib.optionalString (e.domain != "") "."}${zone.name}"; - mail = zone.name; - } - else null - ) - (zone.withEmail or []) - ) - config.myEnv.dns.masterZones - ))); - mxes = lib.mapAttrsToList - (n: v: v.mx.subdomain) - (lib.attrsets.filterAttrs (n: v: v.mx.enable) config.myEnv.servers); - # FIXME: increase the id number in modules/private/dns.nix when this - # file change (date -u +'%Y%m%d%H%M%S'Z) - file = domain: pkgs.writeText "mta-sts-${domain.domain}.txt" ( - builtins.concatStringsSep "\r\n" ([ "version: STSv1" "mode: testing" ] - ++ (map (v: "mx: ${v}.${domain.mail}") mxes) - ++ [ "max_age: 604800" ] - )); - root = pkgs.runCommand "mta-sts_root" {} '' - mkdir -p $out - ${builtins.concatStringsSep "\n" (map (d: - "cp ${file d} $out/${d.domain}.txt" - ) domains)} - ''; - cfg = config.myServices.websites.tools.email; -in -{ - config = lib.mkIf cfg.enable { - services.websites.env.tools.vhostConfs.mta_sts = { - certName = "mail"; - addToCerts = true; - hosts = ["mta-sts.mail.immae.eu"] ++ map (v: "mta-sts.${v.domain}") domains; - root = root; - extraConfig = [ - '' - RewriteEngine on - RewriteCond %{HTTP_HOST} ^mta-sts.(.*)$ - RewriteRule ^/.well-known/mta-sts.txt$ %{DOCUMENT_ROOT}/%1.txt [L] - - Require all granted - Options -Indexes - - '' - ]; - }; - }; -} diff --git a/modules/private/websites/tools/mail/rainloop.nix b/modules/private/websites/tools/mail/rainloop.nix deleted file mode 100644 index 20e43a1..0000000 --- a/modules/private/websites/tools/mail/rainloop.nix +++ /dev/null @@ -1,54 +0,0 @@ -{ lib, rainloop, writeText, stdenv, fetchurl }: -rec { - varDir = "/var/lib/rainloop"; - activationScript = { - deps = [ "wrappers" ]; - text = '' - install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} - install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions - install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/data - ''; - }; - webRoot = rainloop.override { dataPath = "${varDir}/data"; }; - apache = rec { - user = "wwwrun"; - group = "wwwrun"; - modules = [ "proxy_fcgi" ]; - root = webRoot; - vhostConf = socket: '' - Alias /rainloop "${root}" - - DirectoryIndex index.php - AllowOverride All - Options -FollowSymlinks - Require all granted - - - SetHandler "proxy:unix:${socket}|fcgi://localhost" - - - - - Require all denied - - ''; - }; - phpFpm = rec { - serviceDeps = [ "postgresql.service" ]; - basedir = builtins.concatStringsSep ":" [ webRoot varDir ]; - pool = { - "listen.owner" = apache.user; - "listen.group" = apache.group; - "pm" = "ondemand"; - "pm.max_children" = "60"; - "pm.process_idle_timeout" = "60"; - - # Needed to avoid clashes in browser cookies (same domain) - "php_value[session.name]" = "RainloopPHPSESSID"; - "php_admin_value[upload_max_filesize]" = "200M"; - "php_admin_value[post_max_size]" = "200M"; - "php_admin_value[open_basedir]" = "${basedir}:/tmp"; - "php_admin_value[session.save_path]" = "${varDir}/phpSessions"; - }; - }; -} diff --git a/modules/private/websites/tools/mail/roundcubemail.nix b/modules/private/websites/tools/mail/roundcubemail.nix deleted file mode 100644 index 2661b55..0000000 --- a/modules/private/websites/tools/mail/roundcubemail.nix +++ /dev/null @@ -1,118 +0,0 @@ -{ env, roundcubemail, apacheHttpd, config }: -rec { - varDir = "/var/lib/roundcubemail"; - activationScript = { - deps = [ "wrappers" ]; - text = '' - install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ - ${varDir}/cache ${varDir}/logs - install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions - ''; - }; - keys."webapps/tools-roundcube" = { - user = apache.user; - group = apache.group; - permissions = "0400"; - text = - let - psql_url = with env.postgresql; "pgsql://${user}:${password}@unix(${socket}:${port})/${database}"; - in '' - "mail.immae.eu" - ); - $config['imap_conn_options'] = array("ssl" => array("verify_peer" => false)); - $config['smtp_server'] = 'tls://smtp.immae.eu'; - $config['smtp_port'] = '587'; - $config['managesieve_host'] = 'imap.immae.eu'; - $config['managesieve_port'] = '4190'; - $config['managesieve_usetls'] = true; - $config['managesieve_conn_options'] = array("ssl" => array("verify_peer" => false)); - - $config['imap_cache'] = 'db'; - $config['messages_cache'] = 'db'; - - $config['support_url'] = '''; - - $config['des_key'] = '${env.secret}'; - - $config['skin'] = 'elastic'; - $config['plugins'] = array( - 'attachment_reminder', - 'emoticons', - 'filesystem_attachments', - 'hide_blockquote', - 'identicon', - 'identity_select', - 'jqueryui', - 'markasjunk', - 'managesieve', - 'newmail_notifier', - 'vcard_attachments', - 'zipdownload', - - 'automatic_addressbook', - 'message_highlight', - 'carddav', - // Ne marche pas ?: 'ident_switch', - // Ne marche pas ?: 'thunderbird_labels', - ); - - $config['language'] = 'fr_FR'; - - $config['drafts_mbox'] = 'Drafts'; - $config['junk_mbox'] = 'Junk'; - $config['sent_mbox'] = 'Sent'; - $config['trash_mbox'] = 'Trash'; - $config['default_folders'] = array('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash'); - $config['draft_autosave'] = 60; - $config['enable_installer'] = false; - $config['log_driver'] = 'file'; - $config['temp_dir'] = '${varDir}/cache'; - $config['mime_types'] = '${apacheHttpd}/conf/mime.types'; - ''; - }; - webRoot = (roundcubemail.override { roundcube_config = config.secrets.fullPaths."webapps/tools-roundcube"; }).withPlugins (p: [ p.automatic_addressbook p.carddav p.contextmenu p.contextmenu_folder p.html5_notifier p.ident_switch p.message_highlight p.thunderbird_labels ]); - apache = rec { - user = "wwwrun"; - group = "wwwrun"; - modules = [ "proxy_fcgi" ]; - root = webRoot; - vhostConf = socket: '' - Alias /roundcube "${root}" - - DirectoryIndex index.php - AllowOverride All - Options FollowSymlinks - Require all granted - - - SetHandler "proxy:unix:${socket}|fcgi://localhost" - - - ''; - }; - phpFpm = rec { - serviceDeps = [ "postgresql.service" ]; - basedir = builtins.concatStringsSep ":" ( - [ webRoot config.secrets.fullPaths."webapps/tools-roundcube" varDir ] - ++ webRoot.plugins - ++ webRoot.skins); - pool = { - "listen.owner" = apache.user; - "listen.group" = apache.group; - "pm" = "ondemand"; - "pm.max_children" = "60"; - "pm.process_idle_timeout" = "60"; - - # Needed to avoid clashes in browser cookies (same domain) - "php_value[session.name]" = "RoundcubemailPHPSESSID"; - "php_admin_value[upload_max_filesize]" = "200M"; - "php_admin_value[post_max_size]" = "200M"; - "php_admin_value[open_basedir]" = "${basedir}:${apacheHttpd}/conf/mime.types:/tmp"; - "php_admin_value[session.save_path]" = "${varDir}/phpSessions"; - }; - }; -} diff --git a/modules/private/websites/tools/mail/www/index.html b/modules/private/websites/tools/mail/www/index.html deleted file mode 100644 index 88b0ebd..0000000 --- a/modules/private/websites/tools/mail/www/index.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - E-mail configuration - - - -

- Email configuration. For automatic configuration in your smart e-mail - client, use login@mail.immae.eu. If it - doesn’t work, the details are there: -

    -
  • IMAP: imap.immae.eu -
      -
    • No unencrypted access
    • -
    • STARTTLS: 143
    • -
    • SSL: 993
    • -
    -
  • -
  • POP3: pop3.immae.eu -
      -
    • No unencrypted access
    • -
    • STARTTLS: 110
    • -
    • SSL: 995
    • -
    -
  • -
  • SMTP: smtp.immae.eu -
      -
    • No unencrypted access
    • -
    • STARTTLS: 587
    • -
    • SSL: 465
    • -
    -
  • -
  • Sieve: imap.immae.eu -
      -
    • No unencrypted access
    • -
    • STARTTLS: 4190
    • -
    -
  • -
-

-

Webmails: -

-

- - - diff --git a/modules/private/websites/tools/mastodon/default.nix b/modules/private/websites/tools/mastodon/default.nix deleted file mode 100644 index 173a4b8..0000000 --- a/modules/private/websites/tools/mastodon/default.nix +++ /dev/null @@ -1,136 +0,0 @@ -{ lib, pkgs, config, ... }: -let - env = config.myEnv.tools.mastodon; - root = "${mcfg.workdir}/public/"; - cfg = config.myServices.websites.tools.mastodon; - mcfg = config.services.mastodon; -in { - options.myServices.websites.tools.mastodon = { - enable = lib.mkEnableOption "enable mastodon's website"; - }; - - config = lib.mkIf cfg.enable { - secrets.keys."webapps/tools-mastodon" = { - user = "mastodon"; - group = "mastodon"; - permissions = "0400"; - text = '' - REDIS_HOST=${env.redis.host} - REDIS_PORT=${env.redis.port} - REDIS_DB=${env.redis.db} - DB_HOST=${env.postgresql.socket} - DB_USER=${env.postgresql.user} - DB_NAME=${env.postgresql.database} - DB_PASS=${env.postgresql.password} - DB_PORT=${env.postgresql.port} - - LOCAL_DOMAIN=mastodon.immae.eu - LOCAL_HTTPS=true - ALTERNATE_DOMAINS=immae.eu - - PAPERCLIP_SECRET=${env.paperclip_secret} - SECRET_KEY_BASE=${env.secret_key_base} - OTP_SECRET=${env.otp_secret} - - VAPID_PRIVATE_KEY=${env.vapid.private} - VAPID_PUBLIC_KEY=${env.vapid.public} - - SMTP_DELIVERY_METHOD=sendmail - SMTP_FROM_ADDRESS=mastodon@tools.immae.eu - SENDMAIL_LOCATION="/run/wrappers/bin/sendmail" - PAPERCLIP_ROOT_PATH=${mcfg.dataDir} - - STREAMING_CLUSTER_NUM=1 - - RAILS_LOG_LEVEL=warn - - # LDAP authentication (optional) - LDAP_ENABLED=true - LDAP_HOST=${env.ldap.host} - LDAP_PORT=636 - LDAP_METHOD=simple_tls - LDAP_BASE="${env.ldap.base}" - LDAP_BIND_DN="${env.ldap.dn}" - LDAP_PASSWORD="${env.ldap.password}" - LDAP_UID="uid" - LDAP_SEARCH_FILTER="${env.ldap.filter}" - ''; - }; - services.mastodon = { - enable = true; - configFile = config.secrets.fullPaths."webapps/tools-mastodon"; - socketsPrefix = "live_immae"; - dataDir = "/var/lib/mastodon_immae"; - }; - services.filesWatcher.mastodon-streaming = { - restart = true; - paths = [ mcfg.configFile ]; - }; - services.filesWatcher.mastodon-web = { - restart = true; - paths = [ mcfg.configFile ]; - }; - services.filesWatcher.mastodon-sidekiq = { - restart = true; - paths = [ mcfg.configFile ]; - }; - - - services.websites.env.tools.modules = [ - "headers" "proxy" "proxy_wstunnel" "proxy_http" - ]; - services.websites.env.tools.vhostConfs.mastodon = { - certName = "eldiron"; - addToCerts = true; - hosts = ["mastodon.immae.eu" ]; - root = root; - extraConfig = [ '' - Header always set Referrer-Policy "strict-origin-when-cross-origin" - Header always set Strict-Transport-Security "max-age=31536000" - - - Header always set Cache-Control "public, max-age=31536000, immutable" - Require all granted - - - ProxyPreserveHost On - RequestHeader set X-Forwarded-Proto "https" - - RewriteEngine On - - ProxyPass /500.html ! - ProxyPass /sw.js ! - ProxyPass /embed.js ! - ProxyPass /robots.txt ! - ProxyPass /manifest.json ! - ProxyPass /browserconfig.xml ! - ProxyPass /mask-icon.svg ! - ProxyPassMatch ^(/.*\.(png|ico|gif)$) ! - ProxyPassMatch ^/(assets|avatars|emoji|headers|packs|sounds|system|.well-known/acme-challenge) ! - - RewriteRule ^/api/v1/streaming/(.+)$ unix://${mcfg.sockets.node}|http://mastodon.immae.eu/api/v1/streaming/$1 [P,NE,QSA,L] - RewriteRule ^/api/v1/streaming/$ unix://${mcfg.sockets.node}|ws://mastodon.immae.eu/ [P,NE,QSA,L] - ProxyPass / unix://${mcfg.sockets.rails}|http://mastodon.immae.eu/ - ProxyPassReverse / unix://${mcfg.sockets.rails}|http://mastodon.immae.eu/ - - Alias /system ${mcfg.dataDir} - - - Require all granted - Options -MultiViews - - - - Require all granted - Options -MultiViews +FollowSymlinks - - - ErrorDocument 500 /500.html - ErrorDocument 501 /500.html - ErrorDocument 502 /500.html - ErrorDocument 503 /500.html - ErrorDocument 504 /500.html - '' ]; - }; - }; -} diff --git a/modules/private/websites/tools/mgoblin/default.nix b/modules/private/websites/tools/mgoblin/default.nix deleted file mode 100644 index 1e5f5a0..0000000 --- a/modules/private/websites/tools/mgoblin/default.nix +++ /dev/null @@ -1,134 +0,0 @@ -{ lib, pkgs, config, ... }: -let - env = config.myEnv.tools.mediagoblin; - cfg = config.myServices.websites.tools.mediagoblin; - mcfg = config.services.mediagoblin; -in { - options.myServices.websites.tools.mediagoblin = { - enable = lib.mkEnableOption "enable mediagoblin's website"; - }; - - config = lib.mkIf cfg.enable { - secrets.keys."webapps/tools-mediagoblin" = { - user = "mediagoblin"; - group = "mediagoblin"; - permissions = "0400"; - text = - let - psql_url = with env.postgresql; "postgresql://${user}:${password}@:${port}/${database}?host=${socket}"; - redis_url = with env.redis; "redis+socket://${socket}?virtual_host=${db}"; - in - '' - [DEFAULT] - data_basedir = "${mcfg.dataDir}" - - [mediagoblin] - direct_remote_path = /mgoblin_static/ - email_sender_address = "mediagoblin@tools.immae.eu" - - #sql_engine = sqlite:///%(data_basedir)s/mediagoblin.db - sql_engine = ${psql_url} - - email_debug_mode = false - allow_registration = false - allow_reporting = true - - theme = airymodified - - user_privilege_scheme = "uploader,commenter,reporter" - - # We need to redefine them here since we override data_basedir - # cf /usr/share/webapps/mediagoblin/mediagoblin/config_spec.ini - workbench_path = %(data_basedir)s/media/workbench - crypto_path = %(data_basedir)s/crypto - theme_install_dir = %(data_basedir)s/themes/ - theme_linked_assets_dir = %(data_basedir)s/theme_static/ - plugin_linked_assets_dir = %(data_basedir)s/plugin_static/ - - [storage:queuestore] - base_dir = %(data_basedir)s/media/queue - - [storage:publicstore] - base_dir = %(data_basedir)s/media/public - base_url = /mgoblin_media/ - - [celery] - CELERY_RESULT_DBURI = ${redis_url} - BROKER_URL = ${redis_url} - CELERYD_CONCURRENCY = 1 - - [plugins] - [[mediagoblin.plugins.geolocation]] - [[mediagoblin.plugins.ldap]] - [[[immae.eu]]] - LDAP_SERVER_URI = 'ldaps://${env.ldap.host}:636' - LDAP_SEARCH_BASE = '${env.ldap.base}' - LDAP_BIND_DN = '${env.ldap.dn}' - LDAP_BIND_PW = '${env.ldap.password}' - LDAP_SEARCH_FILTER = '${env.ldap.filter}' - EMAIL_SEARCH_FIELD = 'mail' - [[mediagoblin.plugins.basicsearch]] - [[mediagoblin.plugins.piwigo]] - [[mediagoblin.plugins.processing_info]] - [[mediagoblin.media_types.image]] - [[mediagoblin.media_types.video]] - ''; - }; - - users.users.mediagoblin.extraGroups = [ "keys" ]; - - services.mediagoblin = { - enable = true; - package = pkgs.webapps.mediagoblin.withPlugins (p: [p.basicsearch]); - configFile = config.secrets.fullPaths."webapps/tools-mediagoblin"; - }; - services.filesWatcher.mediagoblin-web = { - restart = true; - paths = [ mcfg.configFile ]; - }; - services.filesWatcher.mediagoblin-celeryd = { - restart = true; - paths = [ mcfg.configFile ]; - }; - - services.websites.env.tools.modules = [ - "proxy" "proxy_http" - ]; - users.users.wwwrun.extraGroups = [ "mediagoblin" ]; - services.websites.env.tools.vhostConfs.mgoblin = { - certName = "eldiron"; - addToCerts = true; - hosts = ["mgoblin.immae.eu" ]; - root = null; - extraConfig = [ '' - Alias /mgoblin_media ${mcfg.dataDir}/media/public - - Options -Indexes +FollowSymLinks +MultiViews +Includes - Require all granted - - - Alias /theme_static ${mcfg.dataDir}/theme_static - - Options -Indexes +FollowSymLinks +MultiViews +Includes - Require all granted - - - Alias /plugin_static ${mcfg.dataDir}/plugin_static - - Options -Indexes +FollowSymLinks +MultiViews +Includes - Require all granted - - - ProxyPreserveHost on - ProxyVia On - ProxyRequests Off - ProxyPass /mgoblin_media ! - ProxyPass /theme_static ! - ProxyPass /plugin_static ! - ProxyPassMatch ^/.well-known/acme-challenge ! - ProxyPass / unix://${mcfg.sockets.paster}|http://mgoblin.immae.eu/ - ProxyPassReverse / unix://${mcfg.sockets.paster}|http://mgoblin.immae.eu/ - '' ]; - }; - }; -} diff --git a/modules/private/websites/tools/peertube/default.nix b/modules/private/websites/tools/peertube/default.nix deleted file mode 100644 index 68c992f..0000000 --- a/modules/private/websites/tools/peertube/default.nix +++ /dev/null @@ -1,94 +0,0 @@ -{ lib, pkgs, config, ... }: -let - env = config.myEnv.tools.peertube; - cfg = config.myServices.websites.tools.peertube; - pcfg = config.services.peertube; -in { - options.myServices.websites.tools.peertube = { - enable = lib.mkEnableOption "enable Peertube's website"; - }; - - config = lib.mkIf cfg.enable { - services.peertube = { - enable = true; - configFile = config.secrets.fullPaths."webapps/tools-peertube"; - }; - users.users.peertube.extraGroups = [ "keys" ]; - - secrets.keys."webapps/tools-peertube" = { - user = "peertube"; - group = "peertube"; - permissions = "0640"; - text = '' - listen: - hostname: 'localhost' - port: ${toString config.myEnv.ports.peertube} - webserver: - https: true - hostname: 'peertube.immae.eu' - port: 443 - database: - hostname: '${env.postgresql.socket}' - port: 5432 - suffix: '_prod' - username: '${env.postgresql.user}' - password: '${env.postgresql.password}' - pool: - max: 5 - redis: - socket: '${env.redis.socket}' - auth: null - db: ${env.redis.db} - smtp: - transport: sendmail - sendmail: '/run/wrappers/bin/sendmail' - from_address: 'peertube@tools.immae.eu' - storage: - tmp: '${pcfg.dataDir}/storage/tmp/' - avatars: '${pcfg.dataDir}/storage/avatars/' - videos: '${pcfg.dataDir}/storage/videos/' - streaming_playlists: '${pcfg.dataDir}/storage/streaming-playlists/' - redundancy: '${pcfg.dataDir}/storage/videos/' - logs: '${pcfg.dataDir}/storage/logs/' - previews: '${pcfg.dataDir}/storage/previews/' - thumbnails: '${pcfg.dataDir}/storage/thumbnails/' - torrents: '${pcfg.dataDir}/storage/torrents/' - captions: '${pcfg.dataDir}/storage/captions/' - cache: '${pcfg.dataDir}/storage/cache/' - plugins: '${pcfg.dataDir}/storage/plugins/' - client_overrides: '${pcfg.dataDir}/storage/client-overrides/' - ''; - }; - - services.websites.env.tools.modules = [ - "headers" "proxy" "proxy_http" "proxy_wstunnel" - ]; - services.filesWatcher.peertube = { - restart = true; - paths = [ pcfg.configFile ]; - }; - - services.websites.env.tools.vhostConfs.peertube = { - certName = "eldiron"; - addToCerts = true; - hosts = [ "peertube.immae.eu" ]; - root = null; - extraConfig = [ '' - RewriteEngine On - - RewriteCond %{REQUEST_URI} ^/socket.io [NC] - RewriteCond %{QUERY_STRING} transport=websocket [NC] - RewriteRule /(.*) ws://localhost:${toString env.listenPort}/$1 [P,NE,QSA,L] - - RewriteCond %{REQUEST_URI} ^/tracker/socket [NC] - RewriteRule /(.*) ws://localhost:${toString env.listenPort}/$1 [P,NE,QSA,L] - - ProxyPass / http://localhost:${toString env.listenPort}/ - ProxyPassReverse / http://localhost:${toString env.listenPort}/ - - ProxyPreserveHost On - RequestHeader set X-Real-IP %{REMOTE_ADDR}s - '' ]; - }; - }; -} diff --git a/modules/private/websites/tools/performance/default.nix b/modules/private/websites/tools/performance/default.nix deleted file mode 100644 index 5715ff0..0000000 --- a/modules/private/websites/tools/performance/default.nix +++ /dev/null @@ -1,88 +0,0 @@ -{ pkgs, lib, config, ... }: -let - env = config.myEnv.tools.status_engine; - package = pkgs.status_engine.interface.override({ config_file = config.secrets.fullPaths."status_engine_ui"; }); - apacheRoot = "${package}/public"; - cfg = config.myServices.websites.tools.performance; -in -{ - options.myServices.websites.tools.performance = { - enable = lib.mkEnableOption "Enable performance website"; - }; - - config = lib.mkIf cfg.enable { - secrets.keys = { - status_engine_ui = { - permissions = "0400"; - user = "wwwrun"; - group = "wwwrun"; - text = '' - allow_anonymous: 0 - anonymous_can_submit_commands: 0 - urls_without_login: - - login - - loginstate - auth_type: ldap - ldap_server: ${env.ldap.host} - ldap_use_ssl: 1 - ldap_port: 636 - ldap_bind_dn: ${env.ldap.dn} - ldap_bind_password: ${env.ldap.password} - ldap_base_dn: ${env.ldap.base} - ldap_filter: "${env.ldap.filter}" - ldap_attribute: - - memberOf - use_crate: 0 - use_mysql: 1 - mysql: - host: 127.0.0.1 - port: ${env.mysql.port} - username: ${env.mysql.user} - password: ${env.mysql.password} - database: ${env.mysql.database} - display_perfdata: 1 - perfdata_backend: mysql - ''; - }; - }; - - services.websites.env.tools.modules = [ "proxy_fcgi" ]; - - services.websites.env.tools.vhostConfs.performance = { - certName = "eldiron"; - addToCerts = true; - hosts = [ "performance.immae.eu" ]; - root = apacheRoot; - extraConfig = [ - '' - - DirectoryIndex index.html - AllowOverride None - Require all granted - - SetHandler "proxy:unix:${config.services.phpfpm.pools.status_engine.socket}|fcgi://localhost" - - - '' - ]; - }; - - services.phpfpm.pools.status_engine = { - user = "wwwrun"; - group = "wwwrun"; - settings = { - "listen.owner" = "wwwrun"; - "listen.group" = "wwwrun"; - "pm" = "dynamic"; - "pm.max_children" = "60"; - "pm.start_servers" = "2"; - "pm.min_spare_servers" = "1"; - "pm.max_spare_servers" = "10"; - - "php_admin_value[open_basedir]" = "${package}:/tmp:${config.secrets.fullPaths."status_engine_ui"}"; - }; - phpPackage = pkgs.php74; - }; - - }; -} diff --git a/modules/private/websites/tools/stats/default.nix b/modules/private/websites/tools/stats/default.nix deleted file mode 100644 index 71e31a3..0000000 --- a/modules/private/websites/tools/stats/default.nix +++ /dev/null @@ -1,51 +0,0 @@ -{ config, lib, pkgs, ... }: -let - cfg = config.myServices.websites.tools.stats; - myCfg = config.myEnv.tools.umami; -in -{ - options.myServices.websites.tools.stats.enable = lib.mkEnableOption "Enable stats site"; - config = lib.mkIf cfg.enable { - secrets.keys = { - "uami/env" = { - permission = "0400"; - text = '' - PORT=${toString myCfg.listenPort} - HOSTNAME=127.0.0.1 - DATABASE_URL=postgresql://${myCfg.postgresql.user}:${myCfg.postgresql.password}@localhost:${myCfg.postgresql.port}/${myCfg.postgresql.database}?sslmode=disable&host=${myCfg.postgresql.socket} - HASH_SALT=${myCfg.hashSalt} - ''; - }; - }; - - services.websites.env.tools.vhostConfs.stats = { - certName = "eldiron"; - addToCerts = true; - hosts = [ "stats.immae.eu" ]; - root = null; - extraConfig = [ - '' - ProxyPass / http://localhost:${toString myCfg.listenPort}/ - ProxyPassReverse / http://localhost:${toString myCfg.listenPort}/ - ProxyPreserveHost On - '' - ]; - }; - systemd.services.umami = { - description = "Umami service"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - wants = [ "postgresql.service" ]; - path = [ pkgs.nodejs pkgs.bashInteractive ]; - serviceConfig = { - Type = "simple"; - User = "umami"; - Group = "umami"; - DynamicUser = true; - SupplementaryGroups = [ "keys" ]; - ExecStart = "${pkgs.umami}/bin/umami"; - EnvironmentFile = config.secrets.fullPaths."umami/env"; - }; - }; - }; -} diff --git a/modules/private/websites/tools/tools/adminer.nix b/modules/private/websites/tools/tools/adminer.nix deleted file mode 100644 index c280684..0000000 --- a/modules/private/websites/tools/tools/adminer.nix +++ /dev/null @@ -1,46 +0,0 @@ -{ webapps, php74, myPhpPackages, lib, forcePhpSocket ? null }: -rec { - activationScript = { - deps = [ "httpd" ]; - text = '' - install -m 0755 -o ${apache.user} -g ${apache.group} -d /var/lib/php/sessions/adminer - ''; - }; - webRoot = webapps.adminer; - phpFpm = rec { - user = apache.user; - group = apache.group; - phpPackage = php74.withExtensions ({ enabled, all }: (lib.remove all.mysqli enabled) ++ [myPhpPackages.mysqli_pam]); - settings = { - "listen.owner" = apache.user; - "listen.group" = apache.group; - "pm" = "ondemand"; - "pm.max_children" = "5"; - "pm.process_idle_timeout" = "60"; - #"php_admin_flag[log_errors]" = "on"; - # Needed to avoid clashes in browser cookies (same domain) - "php_value[session.name]" = "AdminerPHPSESSID"; - "php_admin_value[open_basedir]" = "${webRoot}:/tmp:/var/lib/php/sessions/adminer"; - "php_admin_value[session.save_path]" = "/var/lib/php/sessions/adminer"; - }; - }; - apache = rec { - user = "wwwrun"; - group = "wwwrun"; - modules = [ "proxy_fcgi" ]; - root = webRoot; - vhostConf = socket: '' - Alias /adminer ${webRoot} - - DirectoryIndex index.php - - SetHandler "proxy:unix:${if forcePhpSocket != null then forcePhpSocket else socket}|fcgi://localhost" - - - Use LDAPConnect - Require ldap-group cn=users,cn=mysql,cn=pam,ou=services,dc=immae,dc=eu - Require ldap-group cn=users,cn=postgresql,cn=pam,ou=services,dc=immae,dc=eu - - ''; - }; -} diff --git a/modules/private/websites/tools/tools/csp_reports.nix b/modules/private/websites/tools/tools/csp_reports.nix deleted file mode 100644 index 9b3f0cf..0000000 --- a/modules/private/websites/tools/tools/csp_reports.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ env }: -rec { - keys."webapps/tools-csp-reports.conf" = { - user = "wwwrun"; - group = "wwwrun"; - permissions = "0400"; - text = with env.postgresql; '' - env[CSP_REPORT_URI] = "host=${socket} dbname=${database} user=${user} password=${password}" - ''; - }; -} diff --git a/modules/private/websites/tools/tools/default.nix b/modules/private/websites/tools/tools/default.nix deleted file mode 100644 index 90fcbe1..0000000 --- a/modules/private/websites/tools/tools/default.nix +++ /dev/null @@ -1,429 +0,0 @@ -{ lib, pkgs, config, ... }: -let - flakeCompat = import ../../../../../lib/flake-compat.nix; - - adminer = pkgs.callPackage ./adminer.nix {}; - ympd = pkgs.callPackage ./ympd.nix { - env = config.myEnv.tools.ympd; - }; - ttrss = pkgs.callPackage ./ttrss.nix { - inherit (pkgs.webapps) ttrss ttrss-plugins; - env = config.myEnv.tools.ttrss; - php = pkgs.php72; - inherit config; - }; - kanboard = pkgs.callPackage ./kanboard.nix { - inherit config; - env = config.myEnv.tools.kanboard; - }; - wallabag = pkgs.callPackage ./wallabag.nix { - wallabag = pkgs.webapps.wallabag.override { - composerEnv = pkgs.composerEnv.override { - php = pkgs.php73.withExtensions({ enabled, all }: enabled ++ [all.tidy]); - }; - }; - env = config.myEnv.tools.wallabag; - inherit config; - }; - yourls = pkgs.callPackage ./yourls.nix { - inherit (pkgs.webapps) yourls yourls-plugins; - env = config.myEnv.tools.yourls; - inherit config; - }; - rompr = pkgs.callPackage ./rompr.nix { - inherit (pkgs.webapps) rompr; - env = config.myEnv.tools.rompr; - }; - shaarli = pkgs.callPackage ./shaarli.nix { - env = config.myEnv.tools.shaarli; - inherit config; - }; - dokuwiki = pkgs.callPackage ./dokuwiki.nix { - inherit (pkgs.webapps) dokuwiki dokuwiki-plugins; - }; - ldap = pkgs.callPackage ./ldap.nix { - inherit (pkgs.webapps) phpldapadmin; - env = config.myEnv.tools.phpldapadmin; - inherit config; - }; - grocy = pkgs.callPackage ./grocy.nix { - grocy = pkgs.webapps.grocy.override { composerEnv = pkgs.composerEnv.override { php = pkgs.php72; }; }; - }; - phpbb = pkgs.callPackage ./phpbb.nix { - phpbb = (pkgs.webapps.phpbb.withLangs (l: [ l.fr ])).withExts (e: [ - e.alfredoramos.markdown e.davidiq.mailinglist e.dmzx.mchat - e.empteintesduweb.monitoranswers e.lr94.autosubscribe - e.phpbbmodders.adduser ]); - }; - webhooks = pkgs.callPackage ./webhooks.nix { - env = config.myEnv.tools.webhooks; - }; - dmarc-reports = pkgs.callPackage ./dmarc_reports.nix { - env = config.myEnv.tools.dmarc_reports; - inherit config; - }; - csp-reports = pkgs.callPackage ./csp_reports.nix { - env = config.myEnv.tools.csp_reports; - }; - - landing = pkgs.callPackage ./landing.nix {}; - - cfg = config.myServices.websites.tools.tools; - pcfg = config.services.phpfpm.pools; -in { - imports = - builtins.attrValues (flakeCompat ../../../../../flakes/private/paste).nixosModules; - - options.myServices.websites.tools.tools = { - enable = lib.mkEnableOption "enable tools website"; - }; - - config = lib.mkIf cfg.enable { - secrets.keys = - kanboard.keys - // ldap.keys - // shaarli.keys - // ttrss.keys - // wallabag.keys - // yourls.keys - // dmarc-reports.keys - // csp-reports.keys - // webhooks.keys; - - services.websites.env.tools.modules = - [ "proxy_fcgi" ] - ++ adminer.apache.modules - ++ ympd.apache.modules - ++ ttrss.apache.modules - ++ wallabag.apache.modules - ++ yourls.apache.modules - ++ rompr.apache.modules - ++ shaarli.apache.modules - ++ dokuwiki.apache.modules - ++ dmarc-reports.apache.modules - ++ phpbb.apache.modules - ++ ldap.apache.modules - ++ kanboard.apache.modules; - - services.websites.env.integration.vhostConfs.devtools = { - certName = "integration"; - certMainHost = "tools.immae.dev"; - addToCerts = true; - hosts = [ "tools.immae.dev" ]; - root = "/var/lib/ftp/immae/devtools"; - extraConfig = [ - '' - Use Apaxy "/var/lib/ftp/immae/devtools" "title" - Timeout 600 - ProxyTimeout 600 - Header always set Content-Security-Policy-Report-Only "${config.myEnv.tools.csp_reports.policies.inline}" - - DirectoryIndex index.php index.htm index.html - AllowOverride all - Require all granted - - SetHandler "proxy:unix:${pcfg.devtools.socket}|fcgi://localhost" - - - '' - ]; - }; - - services.websites.env.tools.vhostConfs.tools = { - certName = "eldiron"; - addToCerts = true; - hosts = ["tools.immae.eu" ]; - root = landing; - extraConfig = [ - '' - RedirectMatch 301 ^/vpn(.*)$ https://vpn.immae.eu$1 - RedirectMatch 301 ^/roundcube(.*)$ https://mail.immae.eu/roundcube$1 - RedirectMatch 301 ^/jappix(.*)$ https://im.immae.fr/converse - - - DirectoryIndex index.html - AllowOverride None - Require all granted - - - SetHandler "proxy:unix:${pcfg.tools.socket}|fcgi://localhost" - - - '' - (adminer.apache.vhostConf pcfg.adminer.socket) - ympd.apache.vhostConf - (ttrss.apache.vhostConf pcfg.ttrss.socket) - (wallabag.apache.vhostConf pcfg.wallabag.socket) - (yourls.apache.vhostConf pcfg.yourls.socket) - (rompr.apache.vhostConf pcfg.rompr.socket) - (shaarli.apache.vhostConf pcfg.shaarli.socket) - (dokuwiki.apache.vhostConf pcfg.dokuwiki.socket) - (ldap.apache.vhostConf pcfg.ldap.socket) - (kanboard.apache.vhostConf pcfg.kanboard.socket) - (grocy.apache.vhostConf pcfg.grocy.socket) - (phpbb.apache.vhostConf pcfg.phpbb.socket) - (dmarc-reports.apache.vhostConf pcfg.dmarc-reports.socket) - '' - - ProxyPass unix://${config.services.paste.sockets.gunicorn}|http://tools.immae.eu/paste/ - ProxyPassReverse unix://${config.services.paste.sockets.gunicorn}|http://tools.immae.eu/paste/ - ProxyPreserveHost on - - - ProxyPass unix://${config.services.paste.sockets.gunicorn}|http://tools.immae.eu/paste/ - ProxyPassReverse unix://${config.services.paste.sockets.gunicorn}|http://tools.immae.eu/paste/ - ProxyPreserveHost on - - - Alias /BIP39 /var/lib/buildbot/outputs/immae/bip39 - - DirectoryIndex index.html - AllowOverride None - Require all granted - - - Alias /webhooks ${config.secrets.fullPaths."webapps/webhooks"} - - Options -Indexes - Require all granted - AllowOverride None - - SetHandler "proxy:unix:${pcfg.tools.socket}|fcgi://localhost" - - - '' - ]; - }; - - services.websites.env.tools.vhostConfs.outils = { - certName = "eldiron"; - addToCerts = true; - hosts = [ "outils.immae.eu" ]; - root = null; - extraConfig = [ - '' - RedirectMatch 301 ^/mediagoblin(.*)$ https://mgoblin.immae.eu$1 - - RedirectMatch 301 ^/ether(.*)$ https://ether.immae.eu$1 - - RedirectMatch 301 ^/nextcloud(.*)$ https://cloud.immae.eu$1 - RedirectMatch 301 ^/owncloud(.*)$ https://cloud.immae.eu$1 - - RedirectMatch 301 ^/carddavmate(.*)$ https://dav.immae.eu/infcloud$1 - RedirectMatch 301 ^/caldavzap(.*)$ https://dav.immae.eu/infcloud$1 - RedirectMatch 301 ^/caldav.php(.*)$ https://dav.immae.eu/caldav.php$1 - RedirectMatch 301 ^/davical(.*)$ https://dav.immae.eu/davical$1 - - RedirectMatch 301 ^/taskweb(.*)$ https://task.immae.eu/taskweb$1 - - RedirectMatch 301 ^/roundcube(.*)$ https://mail.immae.eu/roundcube$1 - - RedirectMatch 301 ^/jappix(.*)$ https://im.immae.fr/converse - - RedirectMatch 301 ^/vpn(.*)$ https://vpn.immae.eu$1 - - RedirectMatch 301 ^/(.*)$ https://tools.immae.eu/$1 - '' - ]; - }; - - systemd.services = { - phpfpm-dokuwiki = { - after = lib.mkAfter dokuwiki.phpFpm.serviceDeps; - wants = dokuwiki.phpFpm.serviceDeps; - }; - phpfpm-phpbb = { - after = lib.mkAfter phpbb.phpFpm.serviceDeps; - wants = phpbb.phpFpm.serviceDeps; - }; - phpfpm-kanboard = { - after = lib.mkAfter kanboard.phpFpm.serviceDeps; - wants = kanboard.phpFpm.serviceDeps; - }; - phpfpm-ldap = { - after = lib.mkAfter ldap.phpFpm.serviceDeps; - wants = ldap.phpFpm.serviceDeps; - }; - phpfpm-shaarli = { - after = lib.mkAfter shaarli.phpFpm.serviceDeps; - wants = shaarli.phpFpm.serviceDeps; - }; - phpfpm-ttrss = { - after = lib.mkAfter ttrss.phpFpm.serviceDeps; - wants = ttrss.phpFpm.serviceDeps; - }; - phpfpm-wallabag = { - after = lib.mkAfter wallabag.phpFpm.serviceDeps; - wants = wallabag.phpFpm.serviceDeps; - preStart = lib.mkAfter wallabag.phpFpm.preStart; - }; - phpfpm-yourls = { - after = lib.mkAfter yourls.phpFpm.serviceDeps; - wants = yourls.phpFpm.serviceDeps; - }; - ympd = { - description = "Standalone MPD Web GUI written in C"; - wantedBy = [ "multi-user.target" ]; - script = '' - export MPD_PASSWORD=$(cat ${config.secrets.fullPaths."mpd"}) - ${pkgs.ympd}/bin/ympd --host ${ympd.config.host} --port ${toString ympd.config.port} --webport ${ympd.config.webPort} --user nobody - ''; - }; - tt-rss = { - description = "Tiny Tiny RSS feeds update daemon"; - serviceConfig = { - User = "wwwrun"; - ExecStart = "${pkgs.php72}/bin/php ${ttrss.webRoot}/update.php --daemon"; - StandardOutput = "syslog"; - StandardError = "syslog"; - PermissionsStartOnly = true; - }; - - wantedBy = [ "multi-user.target" ]; - requires = ["postgresql.service"]; - after = ["network.target" "postgresql.service"]; - }; - }; - - services.filesWatcher.ympd = { - restart = true; - paths = [ config.secrets.fullPaths."mpd" ]; - }; - - services.phpfpm.pools = { - tools = { - user = "wwwrun"; - group = "wwwrun"; - settings = { - "listen.owner" = "wwwrun"; - "listen.group" = "wwwrun"; - "pm" = "dynamic"; - "pm.max_children" = "60"; - "pm.start_servers" = "2"; - "pm.min_spare_servers" = "1"; - "pm.max_spare_servers" = "10"; - - # Needed to avoid clashes in browser cookies (same domain) - "php_value[session.name]" = "ToolsPHPSESSID"; - "php_admin_value[open_basedir]" = builtins.concatStringsSep ":" [ - "/run/wrappers/bin/sendmail" landing "/tmp" - config.secrets.fullPaths."webapps/webhooks" - ]; - "include" = config.secrets.fullPaths."webapps/tools-csp-reports.conf"; - }; - phpEnv = { - CONTACT_EMAIL = config.myEnv.tools.contact; - }; - phpPackage = pkgs.php72; - }; - devtools = { - user = "wwwrun"; - group = "wwwrun"; - settings = { - "listen.owner" = "wwwrun"; - "listen.group" = "wwwrun"; - "pm" = "dynamic"; - "pm.max_children" = "60"; - "pm.start_servers" = "2"; - "pm.min_spare_servers" = "1"; - "pm.max_spare_servers" = "10"; - - "php_admin_value[open_basedir]" = "/run/wrappers/bin/sendmail:/var/lib/ftp/immae/devtools:/tmp"; - }; - phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.mysqli all.redis all.apcu all.opcache ]); - }; - adminer = adminer.phpFpm; - ttrss = { - user = "wwwrun"; - group = "wwwrun"; - settings = ttrss.phpFpm.pool; - phpPackage = pkgs.php72; - }; - wallabag = { - user = "wwwrun"; - group = "wwwrun"; - settings = wallabag.phpFpm.pool; - phpPackage = pkgs.php73.withExtensions({ enabled, all }: enabled ++ [all.tidy]); - }; - yourls = { - user = "wwwrun"; - group = "wwwrun"; - settings = yourls.phpFpm.pool; - phpPackage = pkgs.php72; - }; - rompr = { - user = "wwwrun"; - group = "wwwrun"; - settings = rompr.phpFpm.pool; - phpPackage = pkgs.php72; - }; - shaarli = { - user = "wwwrun"; - group = "wwwrun"; - settings = shaarli.phpFpm.pool; - phpPackage = pkgs.php72; - }; - dmarc-reports = { - user = "wwwrun"; - group = "wwwrun"; - settings = dmarc-reports.phpFpm.pool; - phpEnv = dmarc-reports.phpFpm.phpEnv; - phpPackage = pkgs.php72; - }; - dokuwiki = { - user = "wwwrun"; - group = "wwwrun"; - settings = dokuwiki.phpFpm.pool; - phpPackage = pkgs.php72; - }; - phpbb = { - user = "wwwrun"; - group = "wwwrun"; - settings = phpbb.phpFpm.pool; - phpPackage = pkgs.php72; - }; - ldap = { - user = "wwwrun"; - group = "wwwrun"; - settings = ldap.phpFpm.pool; - phpPackage = pkgs.php72; - }; - kanboard = { - user = "wwwrun"; - group = "wwwrun"; - settings = kanboard.phpFpm.pool; - phpPackage = pkgs.php72; - }; - grocy = { - user = "wwwrun"; - group = "wwwrun"; - settings = grocy.phpFpm.pool; - phpPackage = pkgs.php72; - }; - }; - - system.activationScripts = { - adminer = adminer.activationScript; - grocy = grocy.activationScript; - ttrss = ttrss.activationScript; - wallabag = wallabag.activationScript; - yourls = yourls.activationScript; - rompr = rompr.activationScript; - shaarli = shaarli.activationScript; - dokuwiki = dokuwiki.activationScript; - phpbb = phpbb.activationScript; - kanboard = kanboard.activationScript; - ldap = ldap.activationScript; - }; - - services.websites.env.tools.watchPaths = [ - config.secrets.fullPaths."webapps/tools-shaarli" - ]; - services.filesWatcher.phpfpm-wallabag = { - restart = true; - paths = [ config.secrets.fullPaths."webapps/tools-wallabag" ]; - }; - - }; -} - diff --git a/modules/private/websites/tools/tools/dmarc_reports.nix b/modules/private/websites/tools/tools/dmarc_reports.nix deleted file mode 100644 index 8a77b13..0000000 --- a/modules/private/websites/tools/tools/dmarc_reports.nix +++ /dev/null @@ -1,59 +0,0 @@ -{ env, config }: -rec { - keys."webapps/tools-dmarc-reports.php" = { - user = "wwwrun"; - group = "wwwrun"; - permissions = "0400"; - text = '' - - ''; - }; - webRoot = ./dmarc_reports; - apache = rec { - user = "wwwrun"; - group = "wwwrun"; - modules = [ "proxy_fcgi" ]; - root = webRoot; - vhostConf = socket: '' - Alias /dmarc-reports "${root}" - - DirectoryIndex index.html - - SetHandler "proxy:unix:${socket}|fcgi://localhost" - - - AllowOverride None - Options +FollowSymlinks - - SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 - Use LDAPConnect - Require all granted - Require ldap-attribute uid=immae - - ''; - }; - phpFpm = rec { - basedir = builtins.concatStringsSep ":" - [ webRoot config.secrets.fullPaths."webapps/tools-dmarc-reports.php" ]; - pool = { - "listen.owner" = apache.user; - "listen.group" = apache.group; - "pm" = "ondemand"; - "pm.max_children" = "60"; - "pm.process_idle_timeout" = "60"; - - # Needed to avoid clashes in browser cookies (same domain) - "php_admin_value[open_basedir]" = "${basedir}:/tmp"; - }; - phpEnv = { - SECRETS_FILE = config.secrets.fullPaths."webapps/tools-dmarc-reports.php"; - }; - }; -} diff --git a/modules/private/websites/tools/tools/dmarc_reports/api.php b/modules/private/websites/tools/tools/dmarc_reports/api.php deleted file mode 100644 index 850f9ce..0000000 --- a/modules/private/websites/tools/tools/dmarc_reports/api.php +++ /dev/null @@ -1,122 +0,0 @@ - "ok", -); -$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname, $dbport); - -function error_die($text, $number) { - http_response_code("500"); - $message = array( - "status" => "error", - "message" => $text, - "code" => $number - ); - - die(json_encode($message)); -} - -$anonymous = isset($_GET['anonymous']) && $_GET['anonymous']; -function maybe_anonymize($string, $long = false) { - global $anonymous_key; - global $anonymous; - if ($anonymous) { - if ($long) { - return md5($anonymous_key . ":" . $string); - } else { - return substr(md5($anonymous_key . ":" . $string), 0, 6); - } - } else { - return $string; - } -} - -if (!$anonymous && (!isset($_SERVER['HTTP_AUTHORIZATION']) || $_SERVER['HTTP_AUTHORIZATION'] === "")) { - header('WWW-Authenticate: Basic realm="Immae"'); - header('HTTP/1.0 401 Unauthorized'); - echo "You need to be authenticated to access private information"; - exit; -} - -if ($mysqli->connect_errno) { - error_die($mysqli->connect_error, $mysqli->connect_errno); -} - -if (!isset($_GET['serial'])) { - $response["domains"] = array(); - $query = $mysqli->query("SELECT DISTINCT domain FROM `report` ORDER BY domain"); - if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); } - while($row = $query->fetch_assoc()) { - $response["domains"][] = maybe_anonymize($row['domain']); - } - - $response["orgs"] = array(); - $query = $mysqli->query("SELECT DISTINCT org FROM `report` ORDER BY org"); - if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); } - while($row = $query->fetch_assoc()) { - $response["orgs"][] = maybe_anonymize($row['org']); - } - - $response["dates"] = array(); - $query = $mysqli->query("SELECT DISTINCT DISTINCT year(mindate) as year, month(mindate) as month FROM `report` ORDER BY year DESC,month DESC"); - if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); } - while($row = $query->fetch_assoc()) { - $response["dates"][] = sprintf( "%'.04d-%'.02d", $row['year'], $row['month'] ); - } - - $response["summaries"] = array(); - if (isset($_GET['errors_only'])) { - $where = " WHERE (spfresult != 'pass' or dkimresult != 'pass')"; - } else { - $where = ""; - } - - $sql = "SELECT report.* , sum(rptrecord.rcount) AS rcount, MIN(rptrecord.dkimresult) AS dkimresult, MIN(rptrecord.spfresult) AS spfresult FROM report LEFT JOIN (SELECT rcount, COALESCE(dkimresult, 'neutral') AS dkimresult, COALESCE(spfresult, 'neutral') AS spfresult, serial FROM rptrecord) AS rptrecord ON report.serial = rptrecord.serial$where GROUP BY serial ORDER BY mindate ASC, maxdate ASC, org"; - $query = $mysqli->query($sql); - if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); } - while($row = $query->fetch_assoc()) { - $wanted_keys = array( - 'domain', 'org', 'reportid', 'mindate', 'maxdate', 'rcount', 'serial', 'policy_adkim', 'policy_aspf', 'policy_none', 'policy_sp', 'policy_pct', 'spfresult', 'dkimresult' - ); - $row = array_intersect_key($row, array_fill_keys($wanted_keys, '1')); - $row["domain"] = maybe_anonymize($row["domain"]); - $row["org"] = maybe_anonymize($row["org"]); - $row["reportid"] = maybe_anonymize($row["reportid"], true); - $response["summaries"][] = $row; - } -} else { - $response["rptrecord"] = []; - $sql = $mysqli->prepare("SELECT * FROM rptrecord where serial = ?"); - $sql->bind_param("s", $_GET["serial"]); - $sql->execute(); - $query = $sql->get_result(); - if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); } - while($row = $query->fetch_assoc()) { - if ($row['ip']) { - $ip = long2ip($row['ip']); - $host = gethostbyaddr($ip); - } elseif ( $row['ip6'] ) { - $ip = inet_ntop($row['ip6']); - $host = gethostbyaddr($ip); - } else { - $ip = "-"; - $host = "-"; - } - $wanted_keys = array( - 'ip', 'host', 'rcount', 'disposition', 'reason', 'dkimdomain', 'dkimresult', 'spfdomain', 'spfresult' - ); - $row = array_intersect_key($row, array_fill_keys($wanted_keys, '1')); - $row['ip'] = maybe_anonymize($ip); - $row['host'] = maybe_anonymize($host); - $row['dkimdomain'] = maybe_anonymize($row['dkimdomain']); - $row['spfdomain'] = maybe_anonymize($row['spfdomain']); - $response["rptrecord"][] = $row; - } -} - -header("Content-Type: application/json"); - -echo json_encode($response, JSON_PRETTY_PRINT); -?> diff --git a/modules/private/websites/tools/tools/dmarc_reports/app.js b/modules/private/websites/tools/tools/dmarc_reports/app.js deleted file mode 100644 index 8e8a6c4..0000000 --- a/modules/private/websites/tools/tools/dmarc_reports/app.js +++ /dev/null @@ -1,103 +0,0 @@ -const app = new Vue({ - el: '#app', - data: { - info: null, - summaries: null, - selectedSummary: null, - filterGreen: true, - filterDomain: null, - filterOrg: null, - //filterDate: (new Date()).toISOString().substring(0, 7), - filterDate: null, - reverse: true, - anonymous: true, - }, - created: async function () { - let that = this; - - if ('anonymous' in localStorage) { - this.anonymous = JSON.parse(localStorage.anonymous); - } - this.fetchAll(); - }, - methods: { - fetchAll: async function() { - try { - this.info = await this.getInfo(); - this.summaries = this.info.summaries; - } catch (error) { - this.info = null; - this.summaries = null; - } - }, - toggleAnonymous: function() { - this.anonymous = !this.anonymous; - localStorage.anonymous = this.anonymous; - this.fetchAll(); - }, - filtered: function () { - let that = this; - let filtered = this.summaries.filter(function (summary) { - return (!that.filterGreen || that.getColor(summary) !== "lime") - && (!that.filterDomain || summary.domain === that.filterDomain) - && (!that.filterOrg || summary.org === that.filterOrg) - && (!that.filterDate || that.inDates(summary)); - }); - if (this.reverse) { - return filtered.reverse(); - } else { - return filtered; - } - }, - toggle: async function(summary) { - if (this.selectedSummary && this.selectedSummary.serial === summary.serial) { - this.selectedSummary = null; - } else { - if (!summary.details) { - summary.details = await this.getDetails(summary.serial); - } - this.selectedSummary = summary; - } - }, - inDates: function(summary) { - if (!this.filterDate) { return true; } - - let mindate = (new Date(summary.mindate)).toISOString().substring(0, 7); - let maxdate = (new Date(summary.maxdate)).toISOString().substring(0, 7); - - return mindate === this.filterDate || maxdate === this.filterDate; - }, - printDate: function (date) { - return (new Date(date)).toISOString().replace("T", " ").replace(/\..*Z$/, " UTC"); - }, - getColor: function (element) { - if (element.dkimresult === "fail" && element.spfresult === "fail") { - return "red"; - } else if (element.dkimresult === "fail" || element.spfresult === "fail") { - return "orange"; - } else if (element.dkimresult === "pass" && element.spfresult === "pass") { - return "lime"; - } else { - return "yellow"; - } - }, - getInfo: function (event) { - let anonymous = this.anonymous ? "anonymous=1" : ""; - return fetch(`api.php?${anonymous}`).then(function (response) { - if (response.status != 200) { return; } - return response.text().then(function (body) { - return JSON.parse(body); - }); - }); - }, - getDetails: function (serial) { - let anonymous = this.anonymous ? "&anonymous=1" : ""; - return fetch(`api.php?serial=${serial}${anonymous}`).then(function (response) { - if (response.status != 200) { return; } - return response.text().then(function (body) { - return JSON.parse(body); - }); - }); - } - } -}); diff --git a/modules/private/websites/tools/tools/dmarc_reports/default.css b/modules/private/websites/tools/tools/dmarc_reports/default.css deleted file mode 100644 index 9e0c63f..0000000 --- a/modules/private/websites/tools/tools/dmarc_reports/default.css +++ /dev/null @@ -1,130 +0,0 @@ -h1 { - text-align: center; -} - -p.warninginfo { - text-align: center; -} - -table.reportlist { - margin: 2em auto 2em auto; - border-collapse: collapse; - clear: both; -} - -table.reportlist td, table.reportlist th { - padding:3px; -} - -table.reportlist thead { - border-top: 1px solid grey; - border-bottom: 1px solid grey; - -} -table.reportlist tbody tr:first-child td { - padding-top: 10px; -} -table.reportlist tr.sum { - border-top: 1px solid grey; -} -table.reportlist tr.selected { - background-color: lightgrey; -} -.reportdesc { - font-weight: bold; - width: 90%; - margin-left: auto; - margin-right: auto; -} - -tr.summaryrow { - cursor: pointer; -} - -tr.summaryrow:hover, tr.summaryrow.selected { - background-color: lightgray; - border-left: 1px solid lightgray; -} - -td.reportcell { - border-bottom: 1px solid lightgray; - border-left: 1px solid lightgray; - border-right: 1px solid lightgray; -} - -table.reportdata { - margin: 0px auto 0px auto; - border-collapse: separate; - border-spacing: 2px; -} - -table.reportdata tr th, table.reportdata tr td { - text-align: center; - padding: 3px; -} - -table.reportdata tr.red { - background-color: #FF0000; -} - -table.reportdata tr.orange { - background-color: #FFA500; -} - -table.reportdata tr.lime { - background-color: #00FF00; -} - -table.reportdata tr.yellow { - background-color: #FFFF00; -} - -.optionblock { - background: lightgrey; - padding: 0.4em; - float: right; - margin: auto 2em 1em auto; - white-space: nowrap; -} - -.optionlabel { - font-weight: bold; - float: left; clear: left; - margin-right: 1em; -} - -.options { - font-size: 70%; - text-align: right; - border: none; - width: 97%; - padding: 0.4em; -} - -.center { - text-align:center; -} - -.circle_lime:before { - content: ' \25CF'; - font-size: 25px; - color: #00FF00; -} - -.circle_red:before { - content: ' \25CF'; - font-size: 25px; - color: #FF0000; -} - -.circle_yellow:before { - content: ' \25CF'; - font-size: 25px; - color: #FFFF00; -} - -.circle_orange:before { - content: ' \25CF'; - font-size: 25px; - color: #FFA500; -} diff --git a/modules/private/websites/tools/tools/dmarc_reports/index.html b/modules/private/websites/tools/tools/dmarc_reports/index.html deleted file mode 100644 index 0afc82f..0000000 --- a/modules/private/websites/tools/tools/dmarc_reports/index.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - Dmarc reports - - - - -
-
-
- Anonymize - - -
- -
- -

DMARC Reports

-

- No information could be fetched. If in non-anonymous mode you need to be logged-in -

- - - - - - - - - - - - - - - -
Start DateEnd DateDomainReporting OrganizationReport IDMessages
-
- - - - - - diff --git a/modules/private/websites/tools/tools/dokuwiki.nix b/modules/private/websites/tools/tools/dokuwiki.nix deleted file mode 100644 index aee495a..0000000 --- a/modules/private/websites/tools/tools/dokuwiki.nix +++ /dev/null @@ -1,56 +0,0 @@ -{ lib, stdenv, dokuwiki, dokuwiki-plugins }: -rec { - varDir = "/var/lib/dokuwiki"; - activationScript = { - deps = [ "wrappers" ]; - text = '' - if [ ! -d ${varDir} ]; then - install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ - ${varDir}/animals - cp -a ${webRoot}/conf.dist ${varDir}/conf - cp -a ${webRoot}/data.dist ${varDir}/data - cp -a ${webRoot}/ - chown -R ${apache.user}:${apache.user} ${varDir}/config ${varDir}/data - chmod -R 755 ${varDir}/config ${varDir}/data - fi - install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions - ''; - }; - webRoot = dokuwiki.withPlugins (p: [ p.farmer p.todo ]); - apache = rec { - user = "wwwrun"; - group = "wwwrun"; - modules = [ "proxy_fcgi" ]; - root = webRoot; - vhostConf = socket: '' - Alias /dokuwiki "${root}" - - DirectoryIndex index.php - - SetHandler "proxy:unix:${socket}|fcgi://localhost" - - - AllowOverride All - Options +FollowSymlinks - Require all granted - - ''; - }; - phpFpm = rec { - serviceDeps = [ "openldap.service" ]; - basedir = builtins.concatStringsSep ":" ( - [ webRoot varDir ] ++ webRoot.plugins); - pool = { - "listen.owner" = apache.user; - "listen.group" = apache.group; - "pm" = "ondemand"; - "pm.max_children" = "60"; - "pm.process_idle_timeout" = "60"; - - # Needed to avoid clashes in browser cookies (same domain) - "php_value[session.name]" = "DokuwikiPHPSESSID"; - "php_admin_value[open_basedir]" = "${basedir}:/tmp"; - "php_admin_value[session.save_path]" = "${varDir}/phpSessions"; - }; - }; -} diff --git a/modules/private/websites/tools/tools/grocy.nix b/modules/private/websites/tools/tools/grocy.nix deleted file mode 100644 index 3c45261..0000000 --- a/modules/private/websites/tools/tools/grocy.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ lib, stdenv, grocy }: -rec { - varDir = "/var/lib/grocy"; - activationScript = { - deps = [ "wrappers" ]; - text = '' - install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir}/data - install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions - ''; - }; - webRoot = grocy.webRoot; - apache = rec { - user = "wwwrun"; - group = "wwwrun"; - modules = [ "proxy_fcgi" ]; - root = webRoot; - vhostConf = socket: '' - Alias /grocy "${root}" - - DirectoryIndex index.php - - SetHandler "proxy:unix:${socket}|fcgi://localhost" - - - AllowOverride All - Options +FollowSymlinks - Require all granted - - ''; - }; - phpFpm = rec { - basedir = builtins.concatStringsSep ":" ( - [ grocy grocy.yarnModules varDir ]); - pool = { - "listen.owner" = apache.user; - "listen.group" = apache.group; - "pm" = "ondemand"; - "pm.max_children" = "60"; - "pm.process_idle_timeout" = "60"; - - # Needed to avoid clashes in browser cookies (same domain) - "php_value[session.name]" = "grocyPHPSESSID"; - "php_admin_value[open_basedir]" = "${basedir}:/tmp"; - "php_admin_value[session.save_path]" = "${varDir}/phpSessions"; - }; - }; -} - diff --git a/modules/private/websites/tools/tools/kanboard.nix b/modules/private/websites/tools/tools/kanboard.nix deleted file mode 100644 index 4809a42..0000000 --- a/modules/private/websites/tools/tools/kanboard.nix +++ /dev/null @@ -1,80 +0,0 @@ -{ env, kanboard, config }: -rec { - varDir = "/var/lib/kanboard"; - activationScript = { - deps = [ "wrappers" ]; - text = '' - install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir}/data - install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions - install -TDm644 ${webRoot}/dataold/.htaccess ${varDir}/data/.htaccess - install -TDm644 ${webRoot}/dataold/web.config ${varDir}/data/web.config - ''; - }; - keys."webapps/tools-kanboard" = { - user = apache.user; - group = apache.group; - permissions = "0400"; - text = '' - - ''; - }; - webRoot = kanboard { kanboard_config = config.secrets.fullPaths."webapps/tools-kanboard"; }; - apache = rec { - user = "wwwrun"; - group = "wwwrun"; - modules = [ "proxy_fcgi" ]; - root = webRoot; - vhostConf = socket: '' - Alias /kanboard "${root}" - - DirectoryIndex index.php - AllowOverride All - Options FollowSymlinks - Require all granted - - - SetHandler "proxy:unix:${socket}|fcgi://localhost" - - - - Require all denied - - ''; - }; - phpFpm = rec { - serviceDeps = [ "postgresql.service" "openldap.service" ]; - basedir = builtins.concatStringsSep ":" [ webRoot varDir config.secrets.fullPaths."webapps/tools-kanboard" ]; - pool = { - "listen.owner" = apache.user; - "listen.group" = apache.group; - "pm" = "ondemand"; - "pm.max_children" = "60"; - "pm.process_idle_timeout" = "60"; - - # Needed to avoid clashes in browser cookies (same domain) - "php_value[session.name]" = "KanboardPHPSESSID"; - "php_admin_value[open_basedir]" = "${basedir}:/tmp"; - "php_admin_value[session.save_path]" = "${varDir}/phpSessions"; - }; - }; -} diff --git a/modules/private/websites/tools/tools/landing.nix b/modules/private/websites/tools/tools/landing.nix deleted file mode 100644 index 2acc323..0000000 --- a/modules/private/websites/tools/tools/landing.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ sources, stdenv, yarn2nix-moretea }: -let - yarnModules = yarn2nix-moretea.mkYarnModules rec { - name = "landing"; - pname = name; - version = "v1.0.0"; - packageJSON = "${sources.webapps-landing}/package.json"; - yarnLock = "${sources.webapps-landing}/yarn.lock"; - yarnNix = ./landing/yarn-packages.nix; - }; -in - stdenv.mkDerivation rec { - pname = "landing"; - version = "v1.0.0"; - src = sources.webapps-landing; - - buildInputs = [ yarnModules yarn2nix-moretea.yarn ]; - configurePhase = '' - ln -s ${yarnModules}/node_modules . - ''; - buildPhase = '' - yarn build - ''; - installPhase = '' - cp -a dist $out - cp ${./landing}/*.php $out/ - ln -s service-worker.js $out/worker.js - ''; - } diff --git a/modules/private/websites/tools/tools/landing/ldap_password.php b/modules/private/websites/tools/tools/landing/ldap_password.php deleted file mode 100644 index b6079e5..0000000 --- a/modules/private/websites/tools/tools/landing/ldap_password.php +++ /dev/null @@ -1,140 +0,0 @@ - - * @website: http://technology.mattrude.com/2010/11/ldap-php-change-password-webpage/ - * - * - * GNU GENERAL PUBLIC LICENSE - * Version 2, June 1991 - * - * Copyright (C) 1989, 1991 Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * Everyone is permitted to copy and distribute verbatim copies - * of this license document, but changing it is not allowed. - */ - -$message = array(); -$message_css = ""; - -function changePassword($user,$oldPassword,$newPassword,$newPasswordCnf){ - global $message; - global $message_css; - - $server = "ldaps://ldap.immae.eu"; - - error_reporting(0); - $con = ldap_connect($server); - ldap_set_option($con, LDAP_OPT_PROTOCOL_VERSION, 3); - - $user_dn = "uid=$user,ou=users,dc=immae,dc=eu"; - - if (ldap_bind($con, $user_dn, $oldPassword) === false) { - $user_dn = "uid=$user,ou=group_users,dc=immae,dc=eu"; - if (ldap_bind($con, $user_dn, $oldPassword) === false) { - $message[] = "Error E101 - Current Username or Password is wrong."; - return false; - } - } - if ($newPassword != $newPasswordCnf ) { - $message[] = "Error E102 - Your New passwords do not match!"; - return false; - } - if (strlen($newPassword) < 6 ) { - $message[] = "Error E103 - Your new password is too short.
Your password must be at least 6 characters long."; - return false; - } - - $salt = substr(str_shuffle(str_repeat('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',4)),0,4); - $encoded_newPassword = "{SSHA}" . base64_encode(pack("H*", sha1($newPassword.$salt)).$salt); - - $user_search = ldap_search($con,"dc=immae,dc=eu","(uid=$user)"); - $auth_entry = ldap_first_entry($con, $user_search); - - $mail_addresses = ldap_get_values($con, $auth_entry, "mail"); - $given_names = ldap_get_values($con, $auth_entry, "givenName"); - $mail_address = $mail_addresses[0]; - $first_name = $given_names[0]; - - /* And Finally, Change the password */ - $entry = array(); - $entry["userPassword"] = "$encoded_newPassword"; - - if (ldap_modify($con,$user_dn,$entry) === false){ - $error = ldap_error($con); - $errno = ldap_errno($con); - $message[] = "E201 - Your password cannot be changed, please contact the administrator."; - $message[] = "$errno - $error"; - } else { - $message_css = "yes"; - mail($mail_address,"Password change notice","Dear $first_name, -Your password on https://tools.immae.eu/ldap_password.php for account $user was just changed. -If you did not make this change, please contact me. -If you were the one who changed your password, you may disregard this message. - -Thanks --- -Immae / Ismaël", "From: " . getenv("CONTACT_EMAIL")); - $message[] = "The password for $user has been changed.
An informational email has been sent to $mail_address.
Your new password is now fully active."; - } -} - -?> - - - -Password Change Page - - - - - - -
-
-

Password Change Page

-'; - changePassword($_POST['username'],$_POST['oldPassword'],$_POST['newPassword1'],$_POST['newPassword2']); - global $message_css; - if ($message_css == "yes") { - echo '
'; - } else { - echo '
'; - $message[] = "Your password was not changed."; - } - foreach ( $message as $one ) { echo "

$one

"; } - ?>
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
-
- -
-
-
-
- - diff --git a/modules/private/websites/tools/tools/landing/ldap_ssh_keys.php b/modules/private/websites/tools/tools/landing/ldap_ssh_keys.php deleted file mode 100644 index 259e28d..0000000 --- a/modules/private/websites/tools/tools/landing/ldap_ssh_keys.php +++ /dev/null @@ -1,348 +0,0 @@ - - - - ImmaeEu Account - - - - - - -
-

Gestion des clés SSH

- $apps, - 'public_key' => $publicKey, - 'comment' => $comment, - ]; - } - - return $keys; -} - -function pushLdapInfos($keys) -{ - $con = doConnect(); - if (!isset($_SESSION["user_dn"])) - return false; - - return ldap_mod_replace($con, $_SESSION["user_dn"], array("immaeSshKey" => $keys)); -} - - -// Script -if (isset($_POST['deconnexion'])) { - $_SESSION = []; -} - -if (isset($_POST['sauvegarder'])) { - $editedKeys = []; - $errors = false; - $keysToSave = []; - foreach($_POST['keys'] as $id => $key) { - $editedKeys[$id] = $key; - if (!checkSshKey($key['public_key'])) { - $editedKeys[$id]['error'] = true; - $errors = true; - } - - if (!isset($key['apps'])) { - $editedKeys[$id]['apps'] = $key['apps'] = []; - - } - foreach ($key['apps'] as $app) { - if (!in_array($app, apps)) { - die("integrity"); - } - } - - if (!isset($editedKeys[$id]['error']) || $editedKeys[$id]['error'] !== true) { - $keysToSave[] = implode('|', $key['apps']) . ' ' . $key['public_key'] . ' ' . $key['comment']; - } - } - - if (!$errors) { - $successSave = pushLdapInfos($keysToSave); - } -} - -$loginErrors = ""; -if (isset($_POST['login'])) { - if (empty($_POST['username']) || empty($_POST['password'])) { - $loginErrors = "Le nom d'utilisateur et le mot de passe sont requis."; - } elseif (!checkLogin($_POST['username'], $_POST['password'])) { - $loginErrors = "Identifiants incorrects."; - } else { - $_SESSION['login'] = $_POST['username']; - } -} - -if (isUserLogged()) : - $keys = isset($editedKeys) ? $editedKeys : getLdapInfo(); -?> -

Connecté en tant que

- -
- -
- - -

Clés enregistrées avec succès.

- - -
- - - $sshKey) : - ?> - - - - - - - - - - - - - - - - - - - -
Description
>
- - - -
- - -
- - -
-

Login

- - -

- - - - - - - - - -
- -
- - - - diff --git a/modules/private/websites/tools/tools/landing/myip.php b/modules/private/websites/tools/tools/landing/myip.php deleted file mode 100644 index 9ec1c6c..0000000 --- a/modules/private/websites/tools/tools/landing/myip.php +++ /dev/null @@ -1 +0,0 @@ - diff --git a/modules/private/websites/tools/tools/landing/node-packages.nix b/modules/private/websites/tools/tools/landing/node-packages.nix deleted file mode 100644 index 9ebf254..0000000 --- a/modules/private/websites/tools/tools/landing/node-packages.nix +++ /dev/null @@ -1,130 +0,0 @@ -# This file has been generated by node2nix 1.8.0. Do not edit! - -{nodeEnv, fetchurl, fetchgit, src, globalBuildInputs ? []}: - -let - sources = { - "@fortawesome/fontawesome-free-5.13.1" = { - name = "_at_fortawesome_slash_fontawesome-free"; - packageName = "@fortawesome/fontawesome-free"; - version = "5.13.1"; - src = fetchurl { - url = "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.13.1.tgz"; - sha512 = "D819f34FLHeBN/4xvw0HR0u7U2G7RqjPSggXqf7LktsxWQ48VAfGwvMrhcVuaZV2fF069c/619RdgCCms0DHhw=="; - }; - }; - "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=="; - }; - }; - "bulma-0.8.2" = { - name = "bulma"; - packageName = "bulma"; - version = "0.8.2"; - src = fetchurl { - url = "https://registry.npmjs.org/bulma/-/bulma-0.8.2.tgz"; - sha512 = "vMM/ijYSxX+Sm+nD7Lmc1UgWDy2JcL2nTKqwgEqXuOMU+IGALbXd5MLt/BcjBAPLIx36TtzhzBcSnOP974gcqA=="; - }; - }; - "core-js-3.6.5" = { - name = "core-js"; - packageName = "core-js"; - version = "3.6.5"; - src = fetchurl { - url = "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz"; - sha512 = "vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA=="; - }; - }; - "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=="; - }; - }; - "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=="; - }; - }; - "lodash.merge-4.6.2" = { - name = "lodash.merge"; - packageName = "lodash.merge"; - version = "4.6.2"; - src = fetchurl { - url = "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz"; - sha512 = "0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="; - }; - }; - "register-service-worker-1.7.1" = { - name = "register-service-worker"; - packageName = "register-service-worker"; - version = "1.7.1"; - src = fetchurl { - url = "https://registry.npmjs.org/register-service-worker/-/register-service-worker-1.7.1.tgz"; - sha512 = "IdTfUZ4u8iJL8o1w8es8l6UMGPmkwHolUdT+UmM1UypC80IB4KbpuIlvwWVj8UDS7eJwkEYRcKRgfRX+oTmJsw=="; - }; - }; - "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"; - }; - }; - "vue-2.6.11" = { - name = "vue"; - packageName = "vue"; - version = "2.6.11"; - src = fetchurl { - url = "https://registry.npmjs.org/vue/-/vue-2.6.11.tgz"; - sha512 = "VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ=="; - }; - }; - }; - args = { - name = "homer"; - packageName = "homer"; - version = "20.06.1"; - inherit src; - dependencies = [ - sources."@fortawesome/fontawesome-free-5.13.1" - sources."argparse-1.0.10" - sources."bulma-0.8.2" - sources."core-js-3.6.5" - sources."esprima-4.0.1" - sources."js-yaml-3.14.0" - sources."lodash.merge-4.6.2" - sources."register-service-worker-1.7.1" - sources."sprintf-js-1.0.3" - sources."vue-2.6.11" - ]; - buildInputs = globalBuildInputs; - meta = { - license = "Apache-2.0"; - }; - production = true; - bypassCache = true; - reconstructLock = true; - }; -in -{ - args = args; - sources = sources; - tarball = nodeEnv.buildNodeSourceDist args; - package = nodeEnv.buildNodePackage args; - shell = nodeEnv.buildNodeShell args; -} diff --git a/modules/private/websites/tools/tools/landing/report_csp_violation.php b/modules/private/websites/tools/tools/landing/report_csp_violation.php deleted file mode 100644 index 30140b2..0000000 --- a/modules/private/websites/tools/tools/landing/report_csp_violation.php +++ /dev/null @@ -1,22 +0,0 @@ -custom->appearance['show_clear_password'] = true; - $config->custom->appearance['hide_template_warning'] = true; - $config->custom->appearance['theme'] = "tango"; - $config->custom->appearance['minimalMode'] = false; - $config->custom->appearance['tree'] = 'AJAXTree'; - - $servers = new Datastore(); - - $servers->newServer('ldap_pla'); - $servers->setValue('server','name','Immae’s LDAP'); - $servers->setValue('server','host','ldaps://${env.ldap.host}'); - $servers->setValue('login','auth_type','cookie'); - $servers->setValue('login','bind_id','${env.ldap.dn}'); - $servers->setValue('login','bind_pass','${env.ldap.password}'); - $servers->setValue('appearance','pla_password_hash','ssha'); - $servers->setValue('login','attr','uid'); - $servers->setValue('login','fallback_dn',true); - ''; - }; - webRoot = phpldapadmin.override { config = config.secrets.fullPaths."webapps/tools-ldap"; }; - apache = rec { - user = "wwwrun"; - group = "wwwrun"; - modules = [ "proxy_fcgi" ]; - root = "${webRoot}/htdocs"; - vhostConf = socket: '' - Alias /ldap "${root}" - - DirectoryIndex index.php - - SetHandler "proxy:unix:${socket}|fcgi://localhost" - - - AllowOverride None - Require all granted - - ''; - }; - phpFpm = rec { - serviceDeps = [ "openldap.service" ]; - basedir = builtins.concatStringsSep ":" [ webRoot config.secrets.fullPaths."webapps/tools-ldap" ]; - pool = { - "listen.owner" = apache.user; - "listen.group" = apache.group; - "pm" = "ondemand"; - "pm.max_children" = "60"; - "pm.process_idle_timeout" = "60"; - - # Needed to avoid clashes in browser cookies (same domain) - "php_value[session.name]" = "LdapPHPSESSID"; - "php_admin_value[open_basedir]" = "${basedir}:/tmp:/var/lib/php/sessions/phpldapadmin"; - "php_admin_value[session.save_path]" = "/var/lib/php/sessions/phpldapadmin"; - }; - }; -} diff --git a/modules/private/websites/tools/tools/phpbb.nix b/modules/private/websites/tools/tools/phpbb.nix deleted file mode 100644 index 77845c3..0000000 --- a/modules/private/websites/tools/tools/phpbb.nix +++ /dev/null @@ -1,55 +0,0 @@ -{ lib, phpbb, gnused }: -rec { - varDir = "/var/lib/phpbb"; - activationScript = { - deps = [ "wrappers" ]; - text = '' - if [ ! -d ${varDir} ]; then - install -m 0755 -o ${apache.user} -g ${apache.user} -d ${varDir} - cp -a ${phpbb}/vars/* ${varDir} - chown -R ${apache.user}:${apache.user} ${varDir} - fi - install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions - ''; - }; - webRoot = phpbb; - apache = rec { - user = "wwwrun"; - group = "wwwrun"; - modules = [ "proxy_fcgi" ]; - root = webRoot; - vhostConf = socket: '' - Alias /forum "${root}" - - DirectoryIndex index.php - - SetHandler "proxy:unix:${socket}|fcgi://localhost" - - - AllowOverride All - Options FollowSymlinks - Require all granted - - # add instal to the list after install - - Require all denied - - ''; - }; - phpFpm = rec { - serviceDeps = [ "postgresql.service" ]; - basedir = builtins.concatStringsSep ":" [ "/run/wrappers/bin/sendmail" phpbb varDir ]; - pool = { - "listen.owner" = apache.user; - "listen.group" = apache.group; - "pm" = "ondemand"; - "pm.max_children" = "60"; - "pm.process_idle_timeout" = "60"; - - # Needed to avoid clashes in browser cookies (same domain) - "php_value[session.name]" = "PhpBBPHPSESSID"; - "php_admin_value[open_basedir]" = "${basedir}:/tmp"; - "php_admin_value[session.save_path]" = "${varDir}/phpSessions"; - }; - }; -} diff --git a/modules/private/websites/tools/tools/rompr.nix b/modules/private/websites/tools/tools/rompr.nix deleted file mode 100644 index e80d6b2..0000000 --- a/modules/private/websites/tools/tools/rompr.nix +++ /dev/null @@ -1,72 +0,0 @@ -{ lib, env, rompr }: -rec { - varDir = "/var/lib/rompr"; - activationScript = '' - install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ - ${varDir}/prefs ${varDir}/albumart ${varDir}/phpSessions - ''; - webRoot = rompr; - apache = rec { - user = "wwwrun"; - group = "wwwrun"; - modules = [ "headers" "mime" "proxy_fcgi" ]; - root = webRoot; - vhostConf = socket: '' - Alias /rompr ${root} - - - Options Indexes FollowSymLinks - DirectoryIndex index.php - AllowOverride all - Require all granted - Order allow,deny - Allow from all - ErrorDocument 404 /rompr/404.php - AddType image/x-icon .ico - - - SetHandler "proxy:unix:${socket}|fcgi://localhost" - - - - - Header Set Cache-Control "max-age=0, no-store" - Header Set Cache-Control "no-cache, must-revalidate" - - - - Header Set Cache-Control "max-age=0, no-store" - Header Set Cache-Control "no-cache, must-revalidate" - - - - Use LDAPConnect - Require ldap-group cn=users,cn=mpd,ou=services,dc=immae,dc=eu - - ''; - }; - phpFpm = rec { - basedir = builtins.concatStringsSep ":" [ webRoot varDir ]; - pool = { - "listen.owner" = apache.user; - "listen.group" = apache.group; - "pm" = "ondemand"; - "pm.max_children" = "60"; - "pm.process_idle_timeout" = "60"; - - # Needed to avoid clashes in browser cookies (same domain) - "php_value[session.name]" = "RomprPHPSESSID"; - "php_admin_value[open_basedir]" = "${basedir}:/tmp"; - "php_admin_value[session.save_path]" = "${varDir}/phpSessions"; - "php_flag[magic_quotes_gpc]" = "Off"; - "php_flag[track_vars]" = "On"; - "php_flag[register_globals]" = "Off"; - "php_admin_flag[allow_url_fopen]" = "On"; - "php_value[include_path]" = "${webRoot}"; - "php_admin_value[upload_tmp_dir]" = "${varDir}/prefs"; - "php_admin_value[post_max_size]" = "32M"; - "php_admin_value[upload_max_filesize]" = "32M"; - "php_admin_value[memory_limit]" = "256M"; - }; - }; -} diff --git a/modules/private/websites/tools/tools/shaarli.nix b/modules/private/websites/tools/tools/shaarli.nix deleted file mode 100644 index d128465..0000000 --- a/modules/private/websites/tools/tools/shaarli.nix +++ /dev/null @@ -1,66 +0,0 @@ -{ lib, env, stdenv, fetchurl, shaarli, config }: -let - varDir = "/var/lib/shaarli"; -in rec { - activationScript = '' - install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ - ${varDir}/cache ${varDir}/pagecache ${varDir}/tmp ${varDir}/data \ - ${varDir}/phpSessions - ''; - webRoot = shaarli varDir; - apache = rec { - user = "wwwrun"; - group = "wwwrun"; - modules = [ "proxy_fcgi" "rewrite" "env" ]; - root = webRoot; - vhostConf = socket: '' - Alias /Shaarli "${root}" - - Include ${config.secrets.fullPaths."webapps/tools-shaarli"} - - Header set Access-Control-Allow-Origin "*" - Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" - Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization, Client-Security-Token, Accept-Encoding" - - - DirectoryIndex index.php index.htm index.html - Options Indexes FollowSymLinks MultiViews Includes - AllowOverride All - Require all granted - - SetHandler "proxy:unix:${socket}|fcgi://localhost" - - - ''; - }; - keys."webapps/tools-shaarli" = { - user = apache.user; - group = apache.group; - permissions = "0400"; - text = '' - SetEnv SHAARLI_LDAP_PASSWORD "${env.ldap.password}" - SetEnv SHAARLI_LDAP_DN "${env.ldap.dn}" - SetEnv SHAARLI_LDAP_HOST "ldaps://${env.ldap.host}" - SetEnv SHAARLI_LDAP_BASE "${env.ldap.base}" - SetEnv SHAARLI_LDAP_FILTER "${env.ldap.filter}" - ''; - }; - phpFpm = rec { - serviceDeps = [ "openldap.service" ]; - basedir = builtins.concatStringsSep ":" [ webRoot varDir ]; - pool = { - "listen.owner" = apache.user; - "listen.group" = apache.group; - "pm" = "ondemand"; - "pm.max_children" = "60"; - "pm.process_idle_timeout" = "60"; - - # Needed to avoid clashes in browser cookies (same domain) - "php_value[session.name]" = "ShaarliPHPSESSID"; - "php_admin_value[open_basedir]" = "${basedir}:/tmp"; - "php_admin_value[session.save_path]" = "${varDir}/phpSessions"; - "php_admin_value[upload_max_filesize]" = "200M"; - "php_admin_value[post_max_size]" = "200M"; - }; - }; -} diff --git a/modules/private/websites/tools/tools/ttrss.nix b/modules/private/websites/tools/tools/ttrss.nix deleted file mode 100644 index 1dc99ed..0000000 --- a/modules/private/websites/tools/tools/ttrss.nix +++ /dev/null @@ -1,129 +0,0 @@ -{ php, env, ttrss, ttrss-plugins, config }: -rec { - varDir = "/var/lib/ttrss"; - activationScript = { - deps = [ "wrappers" ]; - text = '' - install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ - ${varDir}/lock ${varDir}/cache ${varDir}/feed-icons - install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir}/cache/export/ \ - ${varDir}/cache/feeds/ \ - ${varDir}/cache/images/ \ - ${varDir}/cache/js/ \ - ${varDir}/cache/simplepie/ \ - ${varDir}/cache/upload/ - touch ${varDir}/feed-icons/index.html - install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions - ''; - }; - keys."webapps/tools-ttrss" = { - user = apache.user; - group = apache.group; - permissions = "0400"; - text = '' - - DirectoryIndex index.php - - SetHandler "proxy:unix:${socket}|fcgi://localhost" - - - AllowOverride All - Options FollowSymlinks - Require all granted - - ''; - }; - phpFpm = rec { - serviceDeps = [ "postgresql.service" "openldap.service" ]; - basedir = builtins.concatStringsSep ":" ( - [ webRoot config.secrets.fullPaths."webapps/tools-ttrss" varDir ] - ++ webRoot.plugins); - pool = { - "listen.owner" = apache.user; - "listen.group" = apache.group; - "pm" = "ondemand"; - "pm.max_children" = "60"; - "pm.process_idle_timeout" = "60"; - - # Needed to avoid clashes in browser cookies (same domain) - "php_value[session.name]" = "TtrssPHPSESSID"; - "php_admin_value[open_basedir]" = "${basedir}:/tmp"; - "php_admin_value[session.save_path]" = "${varDir}/phpSessions"; - }; - }; -} diff --git a/modules/private/websites/tools/tools/wallabag.nix b/modules/private/websites/tools/tools/wallabag.nix deleted file mode 100644 index 0ebdb0b..0000000 --- a/modules/private/websites/tools/tools/wallabag.nix +++ /dev/null @@ -1,142 +0,0 @@ -{ env, wallabag, mylibs, config }: -rec { - varDir = "/var/lib/wallabag"; - keys."webapps/tools-wallabag" = { - user = apache.user; - group = apache.group; - permissions = "0400"; - text = '' - # This file is auto-generated during the composer install - parameters: - database_driver: pdo_pgsql - database_driver_class: Wallabag\CoreBundle\Doctrine\DBAL\Driver\CustomPostgreSQLDriver - database_host: ${env.postgresql.socket} - database_port: ${env.postgresql.port} - database_name: ${env.postgresql.database} - database_user: ${env.postgresql.user} - database_password: ${env.postgresql.password} - database_path: null - database_table_prefix: wallabag_ - database_socket: null - database_charset: utf8 - domain_name: https://tools.immae.eu/wallabag - mailer_transport: sendmail - mailer_host: 127.0.0.1 - mailer_user: null - mailer_password: null - locale: fr - secret: ${env.secret} - twofactor_auth: true - twofactor_sender: wallabag@tools.immae.eu - fosuser_registration: false - fosuser_confirmation: true - from_email: wallabag@tools.immae.eu - rss_limit: 50 - rabbitmq_host: localhost - rabbitmq_port: 5672 - rabbitmq_user: guest - rabbitmq_password: guest - rabbitmq_prefetch_count: 10 - redis_scheme: unix - redis_host: null - redis_port: null - redis_path: ${env.redis.socket} - redis_password: null - sites_credentials: { } - ldap_enabled: true - ldap_host: ${env.ldap.host} - ldap_port: 636 - ldap_tls: false - ldap_ssl: true - ldap_bind_requires_dn: true - ldap_base: '${env.ldap.base}' - ldap_manager_dn: '${env.ldap.dn}' - ldap_manager_pw: ${env.ldap.password} - ldap_filter: '${env.ldap.filter}' - ldap_admin_filter: '${env.ldap.admin_filter}' - ldap_username_attribute: uid - ldap_email_attribute: mail - ldap_name_attribute: cn - ldap_enabled_attribute: null - services: - swiftmailer.mailer.default.transport: - class: Swift_SendmailTransport - arguments: ['/run/wrappers/bin/sendmail -bs'] - ''; - }; - webappDir = wallabag.override { ldap = true; wallabag_config = config.secrets.fullPaths."webapps/tools-wallabag"; }; - activationScript = '' - install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ - ${varDir}/var ${varDir}/data/db ${varDir}/assets/images - ''; - webRoot = "${webappDir}/web"; - # Domain migration: Table wallabag_entry contains whole - # https://tools.immae.eu/wallabag domain name in preview_picture - apache = rec { - user = "wwwrun"; - group = "wwwrun"; - modules = [ "proxy_fcgi" ]; - root = webRoot; - vhostConf = socket: '' - Alias /wallabag "${root}" - - AllowOverride None - Require all granted - # For OAuth (apps) - CGIPassAuth On - - - SetHandler "proxy:unix:${socket}|fcgi://localhost" - - - - Options -MultiViews - RewriteEngine On - RewriteCond %{REQUEST_FILENAME} !-f - RewriteRule ^(.*)$ app.php [QSA,L] - - - - - RewriteEngine Off - - - - AllowOverride None - Require all granted - - ''; - }; - phpFpm = rec { - preStart = '' - if [ ! -f "${varDir}/currentWebappDir" -o \ - ! -f "${varDir}/currentKey" -o \ - "${webappDir}" != "$(cat ${varDir}/currentWebappDir 2>/dev/null)" ] \ - || ! sha512sum -c --status ${varDir}/currentKey; then - pushd ${webappDir} > /dev/null - /run/wrappers/bin/sudo -u wwwrun ./bin/console --env=prod cache:clear - rm -rf /var/lib/wallabag/var/cache/pro_ - /run/wrappers/bin/sudo -u wwwrun ./bin/console --env=prod doctrine:migrations:migrate --no-interaction - popd > /dev/null - echo -n "${webappDir}" > ${varDir}/currentWebappDir - sha512sum ${config.secrets.fullPaths."webapps/tools-wallabag"} > ${varDir}/currentKey - fi - ''; - serviceDeps = [ "postgresql.service" "openldap.service" ]; - basedir = builtins.concatStringsSep ":" [ webappDir config.secrets.fullPaths."webapps/tools-wallabag" varDir ]; - pool = { - "listen.owner" = apache.user; - "listen.group" = apache.group; - "pm" = "dynamic"; - "pm.max_children" = "60"; - "pm.start_servers" = "2"; - "pm.min_spare_servers" = "1"; - "pm.max_spare_servers" = "10"; - - # Needed to avoid clashes in browser cookies (same domain) - "php_value[session.name]" = "WallabagPHPSESSID"; - "php_admin_value[open_basedir]" = "/run/wrappers/bin/sendmail:${basedir}:/tmp"; - "php_value[max_execution_time]" = "300"; - }; - }; -} diff --git a/modules/private/websites/tools/tools/webhooks.nix b/modules/private/websites/tools/tools/webhooks.nix deleted file mode 100644 index 785e22b..0000000 --- a/modules/private/websites/tools/tools/webhooks.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ lib, env }: -{ - keys = lib.attrsets.mapAttrs' (k: v: - lib.nameValuePair "webapps/webhooks/${k}.php" { - user = "wwwrun"; - group = "wwwrun"; - permissions = "0400"; - text = v; - }) env // { - "webapps/webhooks" = { - isDir = true; - user = "wwwrun"; - group = "wwwrun"; - permissions = "0500"; - }; - }; -} diff --git a/modules/private/websites/tools/tools/ympd.nix b/modules/private/websites/tools/tools/ympd.nix deleted file mode 100644 index 531b1a9..0000000 --- a/modules/private/websites/tools/tools/ympd.nix +++ /dev/null @@ -1,40 +0,0 @@ -{ env }: -let - ympd = rec { - config = { - webPort = "localhost:${toString env.listenPort}"; - host = env.mpd.host; - port = env.mpd.port; - }; - apache = { - modules = [ - "proxy_wstunnel" - ]; - vhostConf = '' - - Use LDAPConnect - Require ldap-group cn=users,cn=mpd,ou=services,dc=immae,dc=eu - - - RedirectMatch permanent "^/mpd$" "/mpd/" - - ProxyPass http://${config.webPort}/ - ProxyPassReverse http://${config.webPort}/ - ProxyPreserveHost on - - - ProxyPass ws://${config.webPort}/ws - - - ProxyPass unix:///run/mpd/mp3.sock|http://tools.immae.eu/mpd/mp3 - ProxyPassReverse unix:///run/mpd/mp3.sock|http://tools.immae.eu/mpd/mp3 - - - ProxyPass unix:///run/mpd/ogg.sock|http://tools.immae.eu/mpd/ogg - ProxyPassReverse unix:///run/mpd/ogg.sock|http://tools.immae.eu/mpd/ogg - - ''; - }; - }; -in - ympd diff --git a/modules/private/websites/tools/tools/yourls.nix b/modules/private/websites/tools/tools/yourls.nix deleted file mode 100644 index 3717520..0000000 --- a/modules/private/websites/tools/tools/yourls.nix +++ /dev/null @@ -1,86 +0,0 @@ -{ env, yourls, yourls-plugins, config }: -rec { - activationScript = { - deps = [ "httpd" ]; - text = '' - install -m 0755 -o ${apache.user} -g ${apache.group} -d /var/lib/php/sessions/yourls - ''; - }; - keys."webapps/tools-yourls" = { - user = apache.user; - group = apache.group; - permissions = "0400"; - text = '' - - - SetHandler "proxy:unix:${socket}|fcgi://localhost" - - - AllowOverride None - Require all granted - - RewriteEngine On - RewriteBase /url/ - RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule ^.*$ /url/yourls-loader.php [L] - - DirectoryIndex index.php - - ''; - }; - phpFpm = rec { - serviceDeps = [ "mysql.service" "openldap.service" ]; - basedir = builtins.concatStringsSep ":" ( - [ webRoot config.secrets.fullPaths."webapps/tools-yourls" ] - ++ webRoot.plugins); - pool = { - "listen.owner" = apache.user; - "listen.group" = apache.group; - "pm" = "ondemand"; - "pm.max_children" = "60"; - "pm.process_idle_timeout" = "60"; - - # Needed to avoid clashes in browser cookies (same domain) - "php_value[session.name]" = "YourlsPHPSESSID"; - "php_admin_value[open_basedir]" = "${basedir}:/tmp:/var/lib/php/sessions/yourls"; - "php_admin_value[session.save_path]" = "/var/lib/php/sessions/yourls"; - }; - }; -} diff --git a/modules/private/websites/tools/vpn/default.nix b/modules/private/websites/tools/vpn/default.nix deleted file mode 100644 index 9cd499b..0000000 --- a/modules/private/websites/tools/vpn/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ lib, pkgs, config, ... }: -let - cfg = config.myServices.vpn; -in { - config = lib.mkIf cfg.enable { - services.websites.env.tools.vhostConfs.vpn = { - certName = "eldiron"; - addToCerts = true; - hosts = [ "vpn.immae.eu" ]; - root = ./www; - }; - }; -} diff --git a/modules/private/websites/tools/vpn/www/index.html b/modules/private/websites/tools/vpn/www/index.html deleted file mode 100644 index fc2618a..0000000 --- a/modules/private/websites/tools/vpn/www/index.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - VPN configuration - - - - - -
-

Installation

-
    -
  • Installer tinc
  • -
  • Créer un fichier /etc/tinc/Immae/tinc.conf sur ce modèle, en remplaçant la ligne A choisir par un nom de la forme DomaineMachine. La machine sera accessible par machine.domaine.immae.eu par la suite -
    -Name = A choisir
    -Mode = switch
    -Interface = vpn6
    -ConnectTo = ImmaeEu
    -
    -# The tap device tinc will use.
    -# Default is /dev/tap0 for ethertap or FreeBSD,
    -# /dev/tun0 for Solaris and OpenBSD,
    -# and /dev/net/tun for Linux tun/tap device.
    -Device = /dev/net/tun
    -LocalDiscovery = yes
    -
    -
  • -
  • Vérifier l'existence du device indiqué à la ligne "Device" dans le système. -
    ls /dev/net/tun
    -
  • -
  • Si tinc tourne déjà, l'arrêter !!
  • -
  • Générer les clés : -
    tincd -K -n Immae
    - Stocker la clé privée dans /etc/tinc/Immae/rsa_key.priv et la clé publique dans un autre dossier
    - (pas /etc/tinc/Immae/hosts/ comme proposé par défaut).
    - L'endroit importe peu, elle ne sera pas conservée.
  • -
  • M'envoyer le nom choisi dans tinc.conf, et la clé publique
  • -
  • Cloner le dépôt des hôtes du réseau -
    -cd /etc/tinc/Immae
    -git clone https://git.immae.eu/perso/Immae/Config/tinc/hosts
    -
    -
  • -
  • Une fois que j'ai confirmé avoir reçu la clé : -
    -cd /etc/tinc/Immae/hosts
    -git pull origin master
    -
    -
  • -
  • Uniquement pour Debian/Ubuntu: Ajouter Immae dans /etc/tinc/nets.boot (créer le fichier si nécessaire).
  • -
  • Selon le système, démarrer tinc : -
    -/etc/init.d/tinc start
    -
    - ou -
    -systemctl enable tincd@Immae.service
    -systemctl start tincd@Immae.service
    -
    -
  • -
- -

Choix d'ip

-
    -
  • Choisir une ip : 2001:aaaa:b:cccc:d::xxxx:yyyy/96 (le préfixe 2001:aaaa:b:cccc:d est imposé). Choix uniquement sur le yyyy (n'importe quel nombre entre 1 et ffff), le xxxx est dépendant du domaine
  • -
  • M'envoyer le choix de l'ip
  • - -
  • Si on veut éviter de passer systématiquement par le serveur immae.eu (Par - défaut linux préfère l'ipv6 dès qu'il en a possibilité), modifier le fichier - /etc/gai.conf. Quelques lignes à décommenter, tout est déjà dans le fichier : -
    -(...)
    -#
    -precedence  ::1/128       50
    -precedence  ::/0          40
    -precedence  2002::/16     30
    -precedence ::/96          20
    -#precedence ::ffff:0:0/96  10
    -#
    -#    For sites which prefer IPv4 connections change the last line to
    -#
    -precedence ::ffff:0:0/96  100
    -(...)
    -
    -
  • -
-
- - diff --git a/modules/private/websites/tools/vpn/www/style.css b/modules/private/websites/tools/vpn/www/style.css deleted file mode 100644 index b177fec..0000000 --- a/modules/private/websites/tools/vpn/www/style.css +++ /dev/null @@ -1,61 +0,0 @@ -* { - margin:0; - padding:0; - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing: border-box; -} - -html { - min-height:100%; - border-top:10px solid #ECEEF1; - border-bottom:10px solid #ECEEF1; - color:#61666c; - font-weight:400; - font-size:1em; - font-family:'Open Sans', sans-serif; - line-height:2em; -} -body { - padding:20px; - -webkit-backface-visibility:hidden; -} -code { - font-family:consolas,monospace; -} -a { - color:#61666c; - text-decoration:none; -} -a, img { - border:none; - outline:none -} -a:hover { - color:#2a2a2a; -} - -.instructions { - margin:0 auto; - padding-top:20px; - max-width:80%; -} - -.instructions a { - text-decoration: underline; -} - -.instructions h2 { - margin-top: 10px; -} -.instructions em.important:before { - content: "⚠ Important ⚠ "; - color: red; -} -.instructions pre { - width: 50em; - padding: 10px 15px; - display: table; - border: 1px inset black; - line-height: 1em; -} diff --git a/modules/webapps/diaspora.nix b/modules/webapps/diaspora.nix deleted file mode 100644 index d9e9989..0000000 --- a/modules/webapps/diaspora.nix +++ /dev/null @@ -1,173 +0,0 @@ -{ lib, pkgs, config, ... }: -let - name = "diaspora"; - cfg = config.services.diaspora; - - uid = config.ids.uids.diaspora; - gid = config.ids.gids.diaspora; -in -{ - options.services.diaspora = { - enable = lib.mkEnableOption "Enable Diaspora’s service"; - user = lib.mkOption { - type = lib.types.str; - default = name; - description = "User account under which Diaspora runs"; - }; - group = lib.mkOption { - type = lib.types.str; - default = name; - description = "Group under which Diaspora runs"; - }; - adminEmail = lib.mkOption { - type = lib.types.str; - example = "admin@example.com"; - description = "Admin e-mail for Diaspora"; - }; - dataDir = lib.mkOption { - type = lib.types.path; - default = "/var/lib/${name}"; - description = '' - The directory where Diaspora stores its data. - ''; - }; - socketsDir = lib.mkOption { - type = lib.types.path; - default = "/run/${name}"; - description = '' - The directory where Diaspora puts runtime files and sockets. - ''; - }; - configDir = lib.mkOption { - type = lib.types.path; - description = '' - The configuration path for Diaspora. - ''; - }; - package = lib.mkOption { - type = lib.types.package; - default = pkgs.webapps.diaspora; - description = '' - Diaspora package to use. - ''; - }; - # Output variables - systemdStateDirectory = lib.mkOption { - type = lib.types.str; - # Use ReadWritePaths= instead if varDir is outside of /var/lib - default = assert lib.strings.hasPrefix "/var/lib/" cfg.dataDir; - lib.strings.removePrefix "/var/lib/" cfg.dataDir; - description = '' - Adjusted Diaspora data directory for systemd - ''; - readOnly = true; - }; - systemdRuntimeDirectory = lib.mkOption { - type = lib.types.str; - # Use ReadWritePaths= instead if socketsDir is outside of /run - default = assert lib.strings.hasPrefix "/run/" cfg.socketsDir; - lib.strings.removePrefix "/run/" cfg.socketsDir; - description = '' - Adjusted Diaspora sockets directory for systemd - ''; - readOnly = true; - }; - workdir = lib.mkOption { - type = lib.types.package; - default = cfg.package.override { - varDir = cfg.dataDir; - podmin_email = cfg.adminEmail; - config_dir = cfg.configDir; - }; - description = '' - Adjusted diaspora package with overriden values - ''; - readOnly = true; - }; - sockets = lib.mkOption { - type = lib.types.attrsOf lib.types.path; - default = { - rails = "${cfg.socketsDir}/diaspora.sock"; - eye = "${cfg.socketsDir}/eye.sock"; - }; - readOnly = true; - description = '' - Diaspora sockets - ''; - }; - pids = lib.mkOption { - type = lib.types.attrsOf lib.types.path; - default = { - eye = "${cfg.socketsDir}/eye.pid"; - }; - readOnly = true; - description = '' - Diaspora pids - ''; - }; - }; - - config = lib.mkIf cfg.enable { - users.users = lib.optionalAttrs (cfg.user == name) { - "${name}" = { - inherit uid; - group = cfg.group; - description = "Diaspora user"; - home = cfg.dataDir; - packages = [ cfg.workdir.gems pkgs.nodejs cfg.workdir.gems.ruby ]; - useDefaultShell = true; - }; - }; - users.groups = lib.optionalAttrs (cfg.group == name) { - "${name}" = { - inherit gid; - }; - }; - - systemd.services.diaspora = { - description = "Diaspora"; - wantedBy = [ "multi-user.target" ]; - after = [ - "network.target" "redis.service" "postgresql.service" - ]; - wants = [ - "redis.service" "postgresql.service" - ]; - - environment.RAILS_ENV = "production"; - environment.BUNDLE_PATH = "${cfg.workdir.gems}/${cfg.workdir.gems.ruby.gemPath}"; - environment.BUNDLE_GEMFILE = "${cfg.workdir.gems.confFiles}/Gemfile"; - environment.EYE_SOCK = cfg.sockets.eye; - environment.EYE_PID = cfg.pids.eye; - - path = [ cfg.workdir.gems pkgs.nodejs cfg.workdir.gems.ruby pkgs.curl pkgs.which pkgs.gawk ]; - - preStart = '' - install -m 0755 -d ${cfg.dataDir}/uploads ${cfg.dataDir}/tmp ${cfg.dataDir}/log - install -m 0700 -d ${cfg.dataDir}/tmp/pids - if [ ! -f ${cfg.dataDir}/schedule.yml ]; then - echo "{}" > ${cfg.dataDir}/schedule.yml - fi - ./bin/bundle exec rails db:migrate - ''; - - script = '' - exec ${cfg.workdir}/script/server - ''; - - serviceConfig = { - User = cfg.user; - PrivateTmp = true; - Restart = "always"; - Type = "simple"; - WorkingDirectory = cfg.workdir; - StateDirectory = cfg.systemdStateDirectory; - RuntimeDirectory = cfg.systemdRuntimeDirectory; - StandardInput = "null"; - KillMode = "control-group"; - }; - - unitConfig.RequiresMountsFor = cfg.dataDir; - }; - }; -} diff --git a/modules/webapps/etherpad-lite.nix b/modules/webapps/etherpad-lite.nix deleted file mode 100644 index 2e09952..0000000 --- a/modules/webapps/etherpad-lite.nix +++ /dev/null @@ -1,162 +0,0 @@ -{ lib, pkgs, config, ... }: -let - name = "etherpad-lite"; - cfg = config.services.etherpad-lite; - - uid = config.ids.uids.etherpad-lite; - gid = config.ids.gids.etherpad-lite; -in -{ - options.services.etherpad-lite = { - enable = lib.mkEnableOption "Enable Etherpad lite’s service"; - user = lib.mkOption { - type = lib.types.str; - default = name; - description = "User account under which Etherpad lite runs"; - }; - group = lib.mkOption { - type = lib.types.str; - default = name; - description = "Group under which Etherpad lite runs"; - }; - dataDir = lib.mkOption { - type = lib.types.path; - default = "/var/lib/${name}"; - description = '' - The directory where Etherpad lite stores its data. - ''; - }; - socketsDir = lib.mkOption { - type = lib.types.path; - default = "/run/${name}"; - description = '' - The directory where Etherpad lite stores its sockets. - ''; - }; - configFile = lib.mkOption { - type = lib.types.path; - description = '' - The config file path for Etherpad lite. - ''; - }; - sessionKeyFile = lib.mkOption { - type = lib.types.path; - description = '' - The Session key file path for Etherpad lite. - ''; - }; - apiKeyFile = lib.mkOption { - type = lib.types.path; - description = '' - The API key file path for Etherpad lite. - ''; - }; - package = lib.mkOption { - type = lib.types.package; - default = pkgs.webapps.etherpad-lite; - description = '' - Etherpad lite package to use. - ''; - example = lib.literalExample '' - pkgs.webapps.etherpad-lite.withModules (p: [ p.ep_align ]); - ''; - }; - modules = lib.mkOption { - type = lib.types.listOf lib.types.package; - default = []; - description = '' - Etherpad lite modules to use. - DEPRECATED: use package directly - ''; - }; - # Output variables - workdir = lib.mkOption { - type = lib.types.package; - default = cfg.package.withModules (_: cfg.modules); - description = '' - Adjusted Etherpad lite package with plugins - ''; - readOnly = true; - }; - systemdStateDirectory = lib.mkOption { - type = lib.types.str; - # Use ReadWritePaths= instead if varDir is outside of /var/lib - default = assert lib.strings.hasPrefix "/var/lib/" cfg.dataDir; - lib.strings.removePrefix "/var/lib/" cfg.dataDir; - description = '' - Adjusted Etherpad lite data directory for systemd - ''; - readOnly = true; - }; - systemdRuntimeDirectory = lib.mkOption { - type = lib.types.str; - # Use ReadWritePaths= instead if socketsDir is outside of /run - default = assert lib.strings.hasPrefix "/run/" cfg.socketsDir; - lib.strings.removePrefix "/run/" cfg.socketsDir; - description = '' - Adjusted Etherpad lite sockets directory for systemd - ''; - readOnly = true; - }; - sockets = lib.mkOption { - type = lib.types.attrsOf lib.types.path; - default = { - node = "${cfg.socketsDir}/etherpad-lite.sock"; - }; - readOnly = true; - description = '' - Etherpad lite sockets - ''; - }; - }; - - config = lib.mkIf cfg.enable { - systemd.services.etherpad-lite = { - description = "Etherpad-lite"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" "postgresql.service" ]; - wants = [ "postgresql.service" ]; - - environment.NODE_ENV = "production"; - environment.HOME = cfg.workdir; - - path = [ pkgs.nodejs ]; - - script = '' - exec ${pkgs.nodejs}/bin/node ${cfg.workdir}/src/node/server.js \ - --sessionkey ${cfg.sessionKeyFile} \ - --apikey ${cfg.apiKeyFile} \ - --settings ${cfg.configFile} - ''; - - postStart = '' - while [ ! -S ${cfg.sockets.node} ]; do - sleep 0.5 - done - chmod a+w ${cfg.sockets.node} - ''; - serviceConfig = { - DynamicUser = true; - User = cfg.user; - Group = cfg.group; - WorkingDirectory = cfg.workdir; - PrivateTmp = true; - NoNewPrivileges = true; - PrivateDevices = true; - ProtectHome = true; - ProtectControlGroups = true; - ProtectKernelModules = true; - Restart = "always"; - Type = "simple"; - TimeoutSec = 60; - RuntimeDirectory = cfg.systemdRuntimeDirectory; - StateDirectory= cfg.systemdStateDirectory; - ExecStartPre = [ - "+${pkgs.coreutils}/bin/install -d -m 0755 -o ${cfg.user} -g ${cfg.group} ${cfg.dataDir}/ep_initialized" - "+${pkgs.coreutils}/bin/chown -R ${cfg.user}:${cfg.group} ${cfg.dataDir} ${cfg.configFile} ${cfg.sessionKeyFile} ${cfg.apiKeyFile}" - ]; - }; - }; - - }; -} diff --git a/modules/webapps/mastodon.nix b/modules/webapps/mastodon.nix deleted file mode 100644 index df2dbb2..0000000 --- a/modules/webapps/mastodon.nix +++ /dev/null @@ -1,265 +0,0 @@ -{ lib, pkgs, config, ... }: -let - name = "mastodon"; - cfg = config.services.mastodon; - - uid = config.ids.uids.mastodon; - gid = config.ids.gids.mastodon; -in -{ - options.services.mastodon = { - enable = lib.mkEnableOption "Enable Mastodon’s service"; - user = lib.mkOption { - type = lib.types.str; - default = name; - description = "User account under which Mastodon runs"; - }; - group = lib.mkOption { - type = lib.types.str; - default = name; - description = "Group under which Mastodon runs"; - }; - dataDir = lib.mkOption { - type = lib.types.path; - default = "/var/lib/${name}"; - description = '' - The directory where Mastodon stores its data. - ''; - }; - socketsPrefix = lib.mkOption { - type = lib.types.str; - default = "live"; - description = '' - The prefix to use for Mastodon sockets. - ''; - }; - socketsDir = lib.mkOption { - type = lib.types.path; - default = "/run/${name}"; - description = '' - The directory where Mastodon puts runtime files and sockets. - ''; - }; - configFile = lib.mkOption { - type = lib.types.path; - description = '' - The configuration file path for Mastodon. - ''; - }; - package = lib.mkOption { - type = lib.types.package; - default = pkgs.webapps.mastodon; - description = '' - Mastodon package to use. - ''; - }; - # Output variables - workdir = lib.mkOption { - type = lib.types.package; - default = cfg.package.override { varDir = cfg.dataDir; }; - description = '' - Adjusted mastodon package with overriden varDir - ''; - readOnly = true; - }; - systemdStateDirectory = lib.mkOption { - type = lib.types.str; - # Use ReadWritePaths= instead if varDir is outside of /var/lib - default = assert lib.strings.hasPrefix "/var/lib/" cfg.dataDir; - lib.strings.removePrefix "/var/lib/" cfg.dataDir; - description = '' - Adjusted Mastodon data directory for systemd - ''; - readOnly = true; - }; - systemdRuntimeDirectory = lib.mkOption { - type = lib.types.str; - # Use ReadWritePaths= instead if socketsDir is outside of /run - default = assert lib.strings.hasPrefix "/run/" cfg.socketsDir; - lib.strings.removePrefix "/run/" cfg.socketsDir; - description = '' - Adjusted Mastodon sockets directory for systemd - ''; - readOnly = true; - }; - sockets = lib.mkOption { - type = lib.types.attrsOf lib.types.path; - default = { - node = "${cfg.socketsDir}/${cfg.socketsPrefix}_node.sock"; - rails = "${cfg.socketsDir}/${cfg.socketsPrefix}_puma.sock"; - }; - readOnly = true; - description = '' - Mastodon sockets - ''; - }; - }; - - config = lib.mkIf cfg.enable { - users.users = lib.optionalAttrs (cfg.user == name) { - "${name}" = { - inherit uid; - group = cfg.group; - description = "Mastodon user"; - home = cfg.dataDir; - useDefaultShell = true; - }; - }; - users.groups = lib.optionalAttrs (cfg.group == name) { - "${name}" = { - inherit gid; - }; - }; - - systemd.slices.mastodon = { - description = "Mastodon slice"; - }; - - systemd.services.mastodon-streaming = { - description = "Mastodon Streaming"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" "mastodon-web.service" ]; - - environment.NODE_ENV = "production"; - environment.SOCKET = cfg.sockets.node; - - path = [ pkgs.nodejs pkgs.bashInteractive ]; - - script = '' - exec npm run start - ''; - - postStart = '' - while [ ! -S $SOCKET ]; do - sleep 0.5 - done - chmod a+w $SOCKET - ''; - - postStop = '' - rm $SOCKET - ''; - - serviceConfig = { - Slice = "mastodon.slice"; - User = cfg.user; - EnvironmentFile = cfg.configFile; - PrivateTmp = true; - Restart = "always"; - TimeoutSec = 15; - Type = "simple"; - WorkingDirectory = cfg.workdir; - StateDirectory = cfg.systemdStateDirectory; - RuntimeDirectory = cfg.systemdRuntimeDirectory; - RuntimeDirectoryPreserve = "yes"; - }; - - unitConfig.RequiresMountsFor = cfg.dataDir; - }; - - systemd.services.mastodon-web = { - description = "Mastodon Web app"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - - environment.RAILS_ENV = "production"; - environment.BUNDLE_PATH = "${cfg.workdir.gems}/${cfg.workdir.gems.ruby.gemPath}"; - environment.BUNDLE_GEMFILE = "${cfg.workdir.gems.confFiles}/Gemfile"; - environment.SOCKET = cfg.sockets.rails; - - path = [ cfg.workdir.gems cfg.workdir.gems.ruby pkgs.file pkgs.imagemagick ]; - - preStart = '' - install -m 0755 -d ${cfg.dataDir}/tmp/cache - ./bin/bundle exec rails db:migrate - ''; - - script = '' - exec ./bin/bundle exec puma -C config/puma.rb - ''; - - postStart = '' - exec ./bin/tootctl cache clear - ''; - serviceConfig = { - Slice = "mastodon.slice"; - User = cfg.user; - EnvironmentFile = cfg.configFile; - PrivateTmp = true; - Restart = "always"; - TimeoutSec = 60; - Type = "simple"; - WorkingDirectory = cfg.workdir; - StateDirectory = cfg.systemdStateDirectory; - RuntimeDirectory = cfg.systemdRuntimeDirectory; - RuntimeDirectoryPreserve = "yes"; - }; - - unitConfig.RequiresMountsFor = cfg.dataDir; - }; - - systemd.services.mastodon-cleanup = { - description = "Cleanup mastodon"; - startAt = "daily"; - restartIfChanged = false; - - environment.RAILS_ENV = "production"; - environment.BUNDLE_PATH = "${cfg.workdir.gems}/${cfg.workdir.gems.ruby.gemPath}"; - environment.BUNDLE_GEMFILE = "${cfg.workdir.gems.confFiles}/Gemfile"; - environment.SOCKET = cfg.sockets.rails; - - path = [ cfg.workdir.gems cfg.workdir.gems.ruby pkgs.file ]; - - script = '' - exec ./bin/tootctl media remove --days 30 - ''; - - serviceConfig = { - User = cfg.user; - EnvironmentFile = cfg.configFile; - PrivateTmp = true; - Type = "oneshot"; - WorkingDirectory = cfg.workdir; - StateDirectory = cfg.systemdStateDirectory; - RuntimeDirectory = cfg.systemdRuntimeDirectory; - RuntimeDirectoryPreserve = "yes"; - }; - - unitConfig.RequiresMountsFor = cfg.dataDir; - }; - - systemd.services.mastodon-sidekiq = { - description = "Mastodon Sidekiq"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" "mastodon-web.service" ]; - - environment.RAILS_ENV="production"; - environment.BUNDLE_PATH = "${cfg.workdir.gems}/${cfg.workdir.gems.ruby.gemPath}"; - environment.BUNDLE_GEMFILE = "${cfg.workdir.gems.confFiles}/Gemfile"; - environment.DB_POOL="5"; - - path = [ cfg.workdir.gems cfg.workdir.gems.ruby pkgs.imagemagick pkgs.ffmpeg pkgs.file ]; - - script = '' - exec ./bin/bundle exec sidekiq -c 5 -q default -q mailers -q pull -q push - ''; - - serviceConfig = { - Slice = "mastodon.slice"; - User = cfg.user; - EnvironmentFile = cfg.configFile; - PrivateTmp = true; - Restart = "always"; - TimeoutSec = 15; - Type = "simple"; - WorkingDirectory = cfg.workdir; - StateDirectory = cfg.systemdStateDirectory; - RuntimeDirectory = cfg.systemdRuntimeDirectory; - RuntimeDirectoryPreserve = "yes"; - }; - - unitConfig.RequiresMountsFor = cfg.dataDir; - }; - - }; -} diff --git a/modules/webapps/mediagoblin.nix b/modules/webapps/mediagoblin.nix deleted file mode 100644 index 3fe5e38..0000000 --- a/modules/webapps/mediagoblin.nix +++ /dev/null @@ -1,231 +0,0 @@ -{ lib, pkgs, config, ... }: -let - name = "mediagoblin"; - cfg = config.services.mediagoblin; - - uid = config.ids.uids.mediagoblin; - gid = config.ids.gids.mediagoblin; - - paste_local = pkgs.writeText "paste_local.ini" '' - [DEFAULT] - debug = false - - [pipeline:main] - pipeline = mediagoblin - - [app:mediagoblin] - use = egg:mediagoblin#app - config = ${cfg.configFile} ${cfg.package}/mediagoblin.ini - /mgoblin_static = ${cfg.package}/mediagoblin/static - - [loggers] - keys = root - - [handlers] - keys = console - - [formatters] - keys = generic - - [logger_root] - level = INFO - handlers = console - - [handler_console] - class = StreamHandler - args = (sys.stderr,) - level = NOTSET - formatter = generic - - [formatter_generic] - format = %(levelname)-7.7s [%(name)s] %(message)s - - [filter:errors] - use = egg:mediagoblin#errors - debug = false - - [server:main] - use = egg:waitress#main - unix_socket = ${cfg.sockets.paster} - unix_socket_perms = 777 - url_scheme = https - ''; -in -{ - options.services.mediagoblin = { - enable = lib.mkEnableOption "Enable Mediagoblin’s service"; - user = lib.mkOption { - type = lib.types.str; - default = name; - description = "User account under which Mediagoblin runs"; - }; - group = lib.mkOption { - type = lib.types.str; - default = name; - description = "Group under which Mediagoblin runs"; - }; - dataDir = lib.mkOption { - type = lib.types.path; - default = "/var/lib/${name}"; - description = '' - The directory where Mediagoblin stores its data. - ''; - }; - socketsDir = lib.mkOption { - type = lib.types.path; - default = "/run/${name}"; - description = '' - The directory where Mediagoblin puts runtime files and sockets. - ''; - }; - configFile = lib.mkOption { - type = lib.types.path; - description = '' - The configuration file path for Mediagoblin. - ''; - }; - package = lib.mkOption { - type = lib.types.package; - default = pkgs.webapps.mediagoblin; - example = lib.literalExample '' - pkgs.webapps.mediagoblin.withPlugins (p: [p.basicsearch]) - ''; - description = '' - Mediagoblin package to use. - ''; - }; - systemdStateDirectory = lib.mkOption { - type = lib.types.str; - # Use ReadWritePaths= instead if varDir is outside of /var/lib - default = assert lib.strings.hasPrefix "/var/lib/" cfg.dataDir; - lib.strings.removePrefix "/var/lib/" cfg.dataDir; - description = '' - Adjusted Mediagoblin data directory for systemd - ''; - readOnly = true; - }; - systemdRuntimeDirectory = lib.mkOption { - type = lib.types.str; - # Use ReadWritePaths= instead if socketsDir is outside of /run - default = assert lib.strings.hasPrefix "/run/" cfg.socketsDir; - lib.strings.removePrefix "/run/" cfg.socketsDir; - description = '' - Adjusted Mediagoblin sockets directory for systemd - ''; - readOnly = true; - }; - sockets = lib.mkOption { - type = lib.types.attrsOf lib.types.path; - default = { - paster = "${cfg.socketsDir}/mediagoblin.sock"; - }; - readOnly = true; - description = '' - Mediagoblin sockets - ''; - }; - pids = lib.mkOption { - type = lib.types.attrsOf lib.types.path; - default = { - paster = "${cfg.socketsDir}/mediagoblin.pid"; - celery = "${cfg.socketsDir}/mediagoblin-celeryd.pid"; - }; - readOnly = true; - description = '' - Mediagoblin pid files - ''; - }; - }; - - config = lib.mkIf cfg.enable { - users.users = lib.optionalAttrs (cfg.user == name) { - "${name}" = { - inherit uid; - group = cfg.group; - description = "Mediagoblin user"; - home = cfg.dataDir; - useDefaultShell = true; - }; - }; - users.groups = lib.optionalAttrs (cfg.group == name) { - "${name}" = { - inherit gid; - }; - }; - - systemd.slices.mediagoblin = { - description = "Mediagoblin slice"; - }; - systemd.services.mediagoblin-web = { - description = "Mediagoblin service"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - wants = [ "postgresql.service" "redis.service" ]; - - environment.SCRIPT_NAME = "/mediagoblin/"; - - script = '' - exec ./bin/paster serve \ - ${paste_local} \ - --pid-file=${cfg.pids.paster} - ''; - preStop = '' - exec ./bin/paster serve \ - --pid-file=${cfg.pids.paster} \ - ${paste_local} stop - ''; - preStart = '' - if [ -d ${cfg.dataDir}/plugin_static/ ]; then - rm ${cfg.dataDir}/plugin_static/coreplugin_basic_auth - ln -sf ${cfg.package}/mediagoblin/plugins/basic_auth/static ${cfg.dataDir}/plugin_static/coreplugin_basic_auth - fi - ./bin/gmg -cf ${cfg.configFile} dbupdate - ''; - - serviceConfig = { - Slice = "mediagoblin.slice"; - User = cfg.user; - PrivateTmp = true; - Restart = "always"; - TimeoutSec = 15; - Type = "simple"; - WorkingDirectory = cfg.package; - RuntimeDirectory = cfg.systemdRuntimeDirectory; - StateDirectory= cfg.systemdStateDirectory; - PIDFile = cfg.pids.paster; - }; - - unitConfig.RequiresMountsFor = cfg.dataDir; - }; - - systemd.services.mediagoblin-celeryd = { - description = "Mediagoblin service"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" "mediagoblin-web.service" ]; - - environment.MEDIAGOBLIN_CONFIG = cfg.configFile; - environment.CELERY_CONFIG_MODULE = "mediagoblin.init.celery.from_celery"; - - script = '' - exec ./bin/celery worker \ - --logfile=${cfg.dataDir}/celery.log \ - --loglevel=INFO - ''; - - serviceConfig = { - Slice = "mediagoblin.slice"; - User = cfg.user; - PrivateTmp = true; - Restart = "always"; - TimeoutSec = 60; - Type = "simple"; - WorkingDirectory = cfg.package; - RuntimeDirectory = cfg.systemdRuntimeDirectory; - StateDirectory= cfg.systemdStateDirectory; - PIDFile = cfg.pids.celery; - }; - - unitConfig.RequiresMountsFor = cfg.dataDir; - }; - }; -} diff --git a/modules/webapps/webstats/default.nix b/modules/webapps/webstats/default.nix deleted file mode 100644 index e873af2..0000000 --- a/modules/webapps/webstats/default.nix +++ /dev/null @@ -1,80 +0,0 @@ -{ lib, pkgs, config, ... }: -let - name = "goaccess"; - cfg = config.services.webstats; -in { - options.services.webstats = { - dataDir = lib.mkOption { - type = lib.types.path; - default = "/var/lib/${name}"; - description = '' - The directory where Goaccess stores its data. - ''; - }; - sites = lib.mkOption { - type = lib.types.listOf (lib.types.submodule { - options = { - conf = lib.mkOption { - type = lib.types.nullOr lib.types.path; - default = null; - description = '' - use custom goaccess configuration file instead of the - default one. - ''; - }; - name = lib.mkOption { - type = lib.types.str; - description = '' - Domain name. Corresponds to the Apache file name and the - folder name in which the state will be saved. - ''; - }; - }; - }); - default = []; - description = "Sites to generate stats"; - }; - }; - - config = lib.mkIf (builtins.length cfg.sites > 0) { - users.users.root.packages = [ - pkgs.goaccess - ]; - - services.cron = { - enable = true; - systemCronJobs = let - stats = domain: conf: let - config = if builtins.isNull conf - then pkgs.runCommand "goaccess.conf" { - dbPath = "${cfg.dataDir}/${domain}"; - } "substituteAll ${./goaccess.conf} $out" - else conf; - d = pkgs.writeScriptBin "stats-${domain}" '' - #!${pkgs.stdenv.shell} - set -e - shopt -s nullglob - TMPFILE=$(mktemp) - trap "rm -f $TMPFILE" EXIT - - mkdir -p ${cfg.dataDir}/${domain} - for i in /var/log/httpd/access-${domain}*.gz; do - zcat "$i" >> $TMPFILE - done - cat /var/log/httpd/access-${domain}.log > $TMPFILE - ${pkgs.goaccess}/bin/goaccess $TMPFILE --no-progress -o ${cfg.dataDir}/${domain}/index.html -p ${config} - ''; - in "${d}/bin/stats-${domain}"; - allStats = sites: pkgs.writeScript "stats" '' - #!${pkgs.stdenv.shell} - - mkdir -p ${cfg.dataDir} - ${builtins.concatStringsSep "\n" (map (v: stats v.name v.conf) sites)} - ''; - in - [ - "5 0 * * * root ${allStats cfg.sites}" - ]; - }; - }; -} diff --git a/modules/webapps/webstats/goaccess.conf b/modules/webapps/webstats/goaccess.conf deleted file mode 100644 index c6c244a..0000000 --- a/modules/webapps/webstats/goaccess.conf +++ /dev/null @@ -1,100 +0,0 @@ -time-format %H:%M:%S -date-format %d/%b/%Y - -log-format VCOMBINED -#= %v:%^ %h %^[%d:%t %^] "%r" %s %b "%R" "%u" - -html-prefs {"theme":"bright","layout":"vertical"} - -# old -exclude-ip 188.165.209.148 -exclude-ip 178.33.252.96 -exclude-ip 2001:41d0:2:9c94::1 -exclude-ip 2001:41d0:2:9c94:: -# eldiron -exclude-ip 176.9.151.89 -exclude-ip 2a01:4f8:160:3445:: -# monitoring-1 -exclude-ip 95.216.164.150 -exclude-ip 2a01:4f9:c010:1c95:: - -no-query-string true - -persist true -restore true -db-path @dbPath@ - -ignore-panel REFERRERS -ignore-panel KEYPHRASES - -static-file .css -static-file .js -static-file .jpg -static-file .png -static-file .gif -static-file .ico -static-file .jpeg -static-file .pdf -static-file .csv -static-file .mpeg -static-file .mpg -static-file .swf -static-file .woff -static-file .woff2 -static-file .xls -static-file .xlsx -static-file .doc -static-file .docx -static-file .ppt -static-file .pptx -static-file .txt -static-file .zip -static-file .ogg -static-file .mp3 -static-file .mp4 -static-file .exe -static-file .iso -static-file .gz -static-file .rar -static-file .svg -static-file .bmp -static-file .tar -static-file .tgz -static-file .tiff -static-file .tif -static-file .ttf -static-file .flv -#static-file .less -#static-file .ac3 -#static-file .avi -#static-file .bz2 -#static-file .class -#static-file .cue -#static-file .dae -#static-file .dat -#static-file .dts -#static-file .ejs -#static-file .eot -#static-file .eps -#static-file .img -#static-file .jar -#static-file .map -#static-file .mid -#static-file .midi -#static-file .ogv -#static-file .webm -#static-file .mkv -#static-file .odp -#static-file .ods -#static-file .odt -#static-file .otf -#static-file .pict -#static-file .pls -#static-file .ps -#static-file .qt -#static-file .rm -#static-file .svgz -#static-file .wav -#static-file .webp - - diff --git a/modules/websites/default.nix b/modules/websites/default.nix deleted file mode 100644 index 6658c66..0000000 --- a/modules/websites/default.nix +++ /dev/null @@ -1,281 +0,0 @@ -{ lib, config, pkgs, ... }: with lib; -let - cfg = config.services.websites; -in -{ - options.services.websites = with types; { - certs = mkOption { - description = "Default websites configuration for certificates as accepted by acme"; - }; - env = mkOption { - default = {}; - description = "Each type of website to enable will target a distinct httpd server"; - type = attrsOf (submodule { - options = { - enable = mkEnableOption "Enable websites of this type"; - adminAddr = mkOption { - type = str; - description = "Admin e-mail address of the instance"; - }; - httpdName = mkOption { - type = str; - description = "Name of the httpd instance to assign this type to"; - }; - ips = mkOption { - type = listOf str; - default = []; - description = "ips to listen to"; - }; - modules = mkOption { - type = listOf str; - default = []; - description = "Additional modules to load in Apache"; - }; - extraConfig = mkOption { - type = listOf lines; - default = []; - description = "Additional configuration to append to Apache"; - }; - nosslVhost = mkOption { - description = "A default nossl vhost for captive portals"; - default = {}; - type = submodule { - options = { - enable = mkEnableOption "Add default no-ssl vhost for this instance"; - host = mkOption { - type = str; - description = "The hostname to use for this vhost"; - }; - root = mkOption { - type = path; - default = ./nosslVhost; - description = "The root folder to serve"; - }; - indexFile = mkOption { - type = str; - default = "index.html"; - description = "The index file to show."; - }; - }; - }; - }; - fallbackVhost = mkOption { - description = "The fallback vhost that will be defined as first vhost in Apache"; - type = submodule { - options = { - certName = mkOption { type = str; }; - hosts = mkOption { type = listOf str; }; - root = mkOption { type = nullOr path; }; - forceSSL = mkOption { - type = bool; - default = true; - description = '' - Automatically create a corresponding non-ssl vhost - that will only redirect to the ssl version - ''; - }; - extraConfig = mkOption { type = listOf lines; default = []; }; - }; - }; - }; - vhostNoSSLConfs = mkOption { - default = {}; - description = "List of no ssl vhosts to define for Apache"; - type = attrsOf (submodule { - options = { - hosts = mkOption { type = listOf str; }; - root = mkOption { type = nullOr path; }; - extraConfig = mkOption { type = listOf lines; default = []; }; - }; - }); - }; - vhostConfs = mkOption { - default = {}; - description = "List of vhosts to define for Apache"; - type = attrsOf (submodule { - options = { - certName = mkOption { type = str; }; - addToCerts = mkOption { - type = bool; - default = false; - description = "Use these to certificates. Is ignored (considered true) if certMainHost is not null"; - }; - certMainHost = mkOption { - type = nullOr str; - description = "Use that host as 'main host' for acme certs"; - default = null; - }; - hosts = mkOption { type = listOf str; }; - root = mkOption { type = nullOr path; }; - forceSSL = mkOption { - type = bool; - default = true; - description = '' - Automatically create a corresponding non-ssl vhost - that will only redirect to the ssl version - ''; - }; - extraConfig = mkOption { type = listOf lines; default = []; }; - }; - }); - }; - watchPaths = mkOption { - type = listOf str; - default = []; - description = '' - Paths to watch that should trigger a reload of httpd - ''; - }; - }; - }); - }; - }; - - config.services.httpd = let - nosslVhost = ips: cfg: { - listen = map (ip: { inherit ip; port = 80; }) ips; - hostName = cfg.host; - logFormat = "combinedVhost"; - documentRoot = cfg.root; - extraConfig = '' - - DirectoryIndex ${cfg.indexFile} - AllowOverride None - Require all granted - - RewriteEngine on - RewriteRule ^/(.+) / [L] - - ''; - }; - toVhost = ips: vhostConf: { - forceSSL = vhostConf.forceSSL or true; - useACMEHost = vhostConf.certName; - logFormat = "combinedVhost"; - listen = if vhostConf.forceSSL - then lists.flatten (map (ip: [{ inherit ip; port = 443; ssl = true; } { inherit ip; port = 80; }]) ips) - else map (ip: { inherit ip; port = 443; ssl = true; }) ips; - hostName = builtins.head vhostConf.hosts; - serverAliases = builtins.tail vhostConf.hosts or []; - documentRoot = vhostConf.root; - extraConfig = builtins.concatStringsSep "\n" vhostConf.extraConfig; - }; - toVhostNoSSL = ips: vhostConf: { - logFormat = "combinedVhost"; - listen = map (ip: { inherit ip; port = 80; }) ips; - hostName = builtins.head vhostConf.hosts; - serverAliases = builtins.tail vhostConf.hosts or []; - documentRoot = vhostConf.root; - extraConfig = builtins.concatStringsSep "\n" vhostConf.extraConfig; - }; - in attrsets.mapAttrs' (name: icfg: attrsets.nameValuePair - icfg.httpdName (mkIf icfg.enable { - enable = true; - logPerVirtualHost = true; - multiProcessingModule = "worker"; - # https://ssl-config.mozilla.org/#server=apache&version=2.4.41&config=intermediate&openssl=1.0.2t&guideline=5.4 - # test with https://www.ssllabs.com/ssltest/analyze.html?d=www.immae.eu&s=176.9.151.154&latest - sslProtocols = "all -SSLv3 -TLSv1 -TLSv1.1"; - sslCiphers = builtins.concatStringsSep ":" [ - "ECDHE-ECDSA-AES128-GCM-SHA256" "ECDHE-RSA-AES128-GCM-SHA256" - "ECDHE-ECDSA-AES256-GCM-SHA384" "ECDHE-RSA-AES256-GCM-SHA384" - "ECDHE-ECDSA-CHACHA20-POLY1305" "ECDHE-RSA-CHACHA20-POLY1305" - "DHE-RSA-AES128-GCM-SHA256" "DHE-RSA-AES256-GCM-SHA384" - ]; - inherit (icfg) adminAddr; - logFormat = "combinedVhost"; - extraModules = lists.unique icfg.modules; - extraConfig = builtins.concatStringsSep "\n" icfg.extraConfig; - - virtualHosts = with attrsets; { - ___fallbackVhost = toVhost icfg.ips icfg.fallbackVhost; - } // (optionalAttrs icfg.nosslVhost.enable { - nosslVhost = nosslVhost icfg.ips icfg.nosslVhost; - }) // (mapAttrs' (n: v: nameValuePair ("nossl_" + n) (toVhostNoSSL icfg.ips v)) icfg.vhostNoSSLConfs) - // (mapAttrs' (n: v: nameValuePair ("ssl_" + n) (toVhost icfg.ips v)) icfg.vhostConfs); - }) - ) cfg.env; - - config.services.filesWatcher = attrsets.mapAttrs' (name: icfg: attrsets.nameValuePair - "httpd${icfg.httpdName}" { - paths = icfg.watchPaths; - waitTime = 5; - } - ) cfg.env; - - config.security.acme.certs = let - typesToManage = attrsets.filterAttrs (k: v: v.enable) cfg.env; - flatVhosts = lists.flatten (attrsets.mapAttrsToList (k: v: - attrValues v.vhostConfs - ) typesToManage); - groupedCerts = attrsets.filterAttrs - (_: group: builtins.any (v: v.addToCerts || !isNull v.certMainHost) group) - (lists.groupBy (v: v.certName) flatVhosts); - groupToDomain = group: - let - nonNull = builtins.filter (v: !isNull v.certMainHost) group; - domains = lists.unique (map (v: v.certMainHost) nonNull); - in - if builtins.length domains == 0 - then null - else assert (builtins.length domains == 1); (elemAt domains 0); - extraDomains = group: - let - mainDomain = groupToDomain group; - in - lists.remove mainDomain ( - lists.unique ( - lists.flatten (map (c: optionals (c.addToCerts || !isNull c.certMainHost) c.hosts) group) - ) - ); - in attrsets.mapAttrs (k: g: - if (!isNull (groupToDomain g)) - then cfg.certs // { - domain = groupToDomain g; - extraDomains = builtins.listToAttrs ( - map (d: attrsets.nameValuePair d null) (extraDomains g)); - } - else { - extraDomains = builtins.listToAttrs ( - map (d: attrsets.nameValuePair d null) (extraDomains g)); - } - ) groupedCerts; - - config.systemd.services = let - package = httpdName: config.services.httpd.${httpdName}.package.out; - cfgFile = httpdName: config.services.httpd.${httpdName}.configFile; - serviceChange = attrsets.mapAttrs' (name: icfg: - attrsets.nameValuePair - "httpd${icfg.httpdName}" { - stopIfChanged = false; - serviceConfig.ExecStart = - lib.mkForce "@${package icfg.httpdName}/bin/httpd httpd -f /etc/httpd/httpd_${icfg.httpdName}.conf"; - serviceConfig.ExecStop = - lib.mkForce "${package icfg.httpdName}/bin/httpd -f /etc/httpd/httpd_${icfg.httpdName}.conf -k graceful-stop"; - serviceConfig.ExecReload = - lib.mkForce "${package icfg.httpdName}/bin/httpd -f /etc/httpd/httpd_${icfg.httpdName}.conf -k graceful"; - } - ) cfg.env; - serviceReload = attrsets.mapAttrs' (name: icfg: - attrsets.nameValuePair - "httpd${icfg.httpdName}-config-reload" { - wants = [ "httpd${icfg.httpdName}.service" ]; - wantedBy = [ "multi-user.target" ]; - restartTriggers = [ (cfgFile icfg.httpdName) ]; - # commented, because can cause extra delays during activate for this config: - # services.nginx.virtualHosts."_".locations."/".proxyPass = "http://blabla:3000"; - # stopIfChanged = false; - serviceConfig.Type = "oneshot"; - serviceConfig.TimeoutSec = 60; - script = '' - if ${pkgs.systemd}/bin/systemctl -q is-active httpd${icfg.httpdName}.service ; then - ${package icfg.httpdName}/bin/httpd -f /etc/httpd/httpd_${icfg.httpdName}.conf -t && \ - ${pkgs.systemd}/bin/systemctl reload httpd${icfg.httpdName}.service - fi - ''; - serviceConfig.RemainAfterExit = true; - } - ) cfg.env; - in - serviceChange // serviceReload; -} diff --git a/modules/websites/httpd-service-builder.nix b/modules/websites/httpd-service-builder.nix deleted file mode 100644 index 1f7488d..0000000 --- a/modules/websites/httpd-service-builder.nix +++ /dev/null @@ -1,735 +0,0 @@ -# to help backporting this builder should stay as close as possible to -# nixos/modules/services/web-servers/apache-httpd/default.nix -{ httpdName, withUsers ? true }: -{ config, lib, pkgs, ... }: - -with lib; - -let - - cfg = config.services.httpd."${httpdName}"; - - runtimeDir = "/run/httpd_${httpdName}"; - - pkg = cfg.package.out; - - httpdConf = cfg.configFile; - - php = cfg.phpPackage.override { apacheHttpd = pkg.dev; /* otherwise it only gets .out */ }; - - phpMajorVersion = lib.versions.major (lib.getVersion php); - - mod_perl = pkgs.apacheHttpdPackages.mod_perl.override { apacheHttpd = pkg; }; - - vhosts = attrValues cfg.virtualHosts; - - mkListenInfo = hostOpts: - if hostOpts.listen != [] then hostOpts.listen - else ( - optional (hostOpts.onlySSL || hostOpts.addSSL || hostOpts.forceSSL) { ip = "*"; port = 443; ssl = true; } ++ - optional (!hostOpts.onlySSL) { ip = "*"; port = 80; ssl = false; } - ); - - listenInfo = unique (concatMap mkListenInfo vhosts); - - enableHttp2 = any (vhost: vhost.http2) vhosts; - enableSSL = any (listen: listen.ssl) listenInfo; - enableUserDir = any (vhost: vhost.enableUserDir) vhosts; - - # NOTE: generally speaking order of modules is very important - modules = - [ # required apache modules our httpd service cannot run without - "authn_core" "authz_core" - "log_config" - "mime" "autoindex" "negotiation" "dir" - "alias" "rewrite" - "unixd" "slotmem_shm" "socache_shmcb" - "mpm_${cfg.multiProcessingModule}" - ] - ++ (if cfg.multiProcessingModule == "prefork" then [ "cgi" ] else [ "cgid" ]) - ++ optional enableHttp2 "http2" - ++ optional enableSSL "ssl" - ++ optional enableUserDir "userdir" - ++ optional cfg.enableMellon { name = "auth_mellon"; path = "${pkgs.apacheHttpdPackages.mod_auth_mellon}/modules/mod_auth_mellon.so"; } - ++ optional cfg.enablePHP { name = "php${phpMajorVersion}"; path = "${php}/modules/libphp${phpMajorVersion}.so"; } - ++ optional cfg.enablePerl { name = "perl"; path = "${mod_perl}/modules/mod_perl.so"; } - ++ cfg.extraModules; - - loggingConf = (if cfg.logFormat != "none" then '' - ErrorLog ${cfg.logDir}/error.log - - LogLevel notice - - LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined - LogFormat "%h %l %u %t \"%r\" %>s %b" common - LogFormat "%{Referer}i -> %U" referer - LogFormat "%{User-agent}i" agent - - CustomLog ${cfg.logDir}/access.log ${cfg.logFormat} - '' else '' - ErrorLog /dev/null - ''); - - - browserHacks = '' - - BrowserMatch "Mozilla/2" nokeepalive - BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0 - BrowserMatch "RealPlayer 4\.0" force-response-1.0 - BrowserMatch "Java/1\.0" force-response-1.0 - BrowserMatch "JDK/1\.0" force-response-1.0 - BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully - BrowserMatch "^WebDrive" redirect-carefully - BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully - BrowserMatch "^gnome-vfs" redirect-carefully - - ''; - - - sslConf = '' - - SSLSessionCache shmcb:${runtimeDir}/ssl_scache(512000) - - Mutex posixsem - - SSLRandomSeed startup builtin - SSLRandomSeed connect builtin - - SSLProtocol ${cfg.sslProtocols} - SSLCipherSuite ${cfg.sslCiphers} - SSLHonorCipherOrder on - - ''; - - - mimeConf = '' - TypesConfig ${pkg}/conf/mime.types - - AddType application/x-x509-ca-cert .crt - AddType application/x-pkcs7-crl .crl - AddType application/x-httpd-php .php .phtml - - - MIMEMagicFile ${pkg}/conf/magic - - ''; - - mkVHostConf = hostOpts: - let - adminAddr = if hostOpts.adminAddr != null then hostOpts.adminAddr else cfg.adminAddr; - listen = filter (listen: !listen.ssl) (mkListenInfo hostOpts); - listenSSL = filter (listen: listen.ssl) (mkListenInfo hostOpts); - - useACME = hostOpts.enableACME || hostOpts.useACMEHost != null; - sslCertDir = - if hostOpts.enableACME then config.security.acme.certs.${hostOpts.hostName}.directory - else if hostOpts.useACMEHost != null then config.security.acme.certs.${hostOpts.useACMEHost}.directory - else abort "This case should never happen."; - - sslServerCert = if useACME then "${sslCertDir}/full.pem" else hostOpts.sslServerCert; - sslServerKey = if useACME then "${sslCertDir}/key.pem" else hostOpts.sslServerKey; - sslServerChain = if useACME then "${sslCertDir}/fullchain.pem" else hostOpts.sslServerChain; - - acmeChallenge = optionalString useACME '' - Alias /.well-known/acme-challenge/ "${hostOpts.acmeRoot}/.well-known/acme-challenge/" - - AllowOverride None - Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec - Require method GET POST OPTIONS - Require all granted - - ''; - in - optionalString (listen != []) '' - - ServerName ${hostOpts.hostName} - ${concatMapStrings (alias: "ServerAlias ${alias}\n") hostOpts.serverAliases} - ServerAdmin ${adminAddr} - - SSLEngine off - - ${acmeChallenge} - ${if hostOpts.forceSSL then '' - - RewriteEngine on - RewriteCond %{REQUEST_URI} !^/.well-known/acme-challenge [NC] - RewriteCond %{HTTPS} off - RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} - - '' else mkVHostCommonConf hostOpts} - - '' + - optionalString (listenSSL != []) '' - - ServerName ${hostOpts.hostName} - ${concatMapStrings (alias: "ServerAlias ${alias}\n") hostOpts.serverAliases} - ServerAdmin ${adminAddr} - SSLEngine on - SSLCertificateFile ${sslServerCert} - SSLCertificateKeyFile ${sslServerKey} - ${optionalString hostOpts.http2 "Protocols h2 h2c http/1.1"} - ${acmeChallenge} - ${mkVHostCommonConf hostOpts} - - '' - ; - - mkVHostCommonConf = hostOpts: - let - documentRoot = if hostOpts.documentRoot != null - then hostOpts.documentRoot - else pkgs.runCommand "empty" { preferLocalBuild = true; } "mkdir -p $out" - ; - - mkLocations = locations: concatStringsSep "\n" (map (config: '' - - ${optionalString (config.proxyPass != null) '' - - ProxyPass ${config.proxyPass} - ProxyPassReverse ${config.proxyPass} - - ''} - ${optionalString (config.index != null) '' - - DirectoryIndex ${config.index} - - ''} - ${optionalString (config.alias != null) '' - - Alias "${config.alias}" - - ''} - ${config.extraConfig} - - '') (sortProperties (mapAttrsToList (k: v: v // { location = k; }) locations))); - in - '' - ${optionalString cfg.logPerVirtualHost '' - ErrorLog ${cfg.logDir}/error-${hostOpts.hostName}.log - CustomLog ${cfg.logDir}/access-${hostOpts.hostName}.log ${hostOpts.logFormat} - ''} - - ${optionalString (hostOpts.robotsEntries != "") '' - Alias /robots.txt ${pkgs.writeText "robots.txt" hostOpts.robotsEntries} - ''} - - DocumentRoot "${documentRoot}" - - - Options Indexes FollowSymLinks - AllowOverride None - Require all granted - - - ${optionalString hostOpts.enableUserDir '' - UserDir public_html - UserDir disabled root - - AllowOverride FileInfo AuthConfig Limit Indexes - Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec - - Require all granted - - - Require all denied - - - ''} - - ${optionalString (hostOpts.globalRedirect != null && hostOpts.globalRedirect != "") '' - RedirectPermanent / ${hostOpts.globalRedirect} - ''} - - ${ - let makeDirConf = elem: '' - Alias ${elem.urlPath} ${elem.dir}/ - - Options +Indexes - Require all granted - AllowOverride All - - ''; - in concatMapStrings makeDirConf hostOpts.servedDirs - } - - ${mkLocations hostOpts.locations} - ${hostOpts.extraConfig} - '' - ; - - - confFile = pkgs.writeText "httpd.conf" '' - - ServerRoot ${pkg} - ServerName ${config.networking.hostName} - DefaultRuntimeDir ${runtimeDir}/runtime - - PidFile ${runtimeDir}/httpd.pid - - ${optionalString (cfg.multiProcessingModule != "prefork") '' - # mod_cgid requires this. - ScriptSock ${runtimeDir}/cgisock - ''} - - - MaxClients ${toString cfg.maxClients} - MaxRequestsPerChild ${toString cfg.maxRequestsPerChild} - - - ${let - toStr = listen: "Listen ${listen.ip}:${toString listen.port} ${if listen.ssl then "https" else "http"}"; - uniqueListen = uniqList {inputList = map toStr listenInfo;}; - in concatStringsSep "\n" uniqueListen - } - - User ${cfg.user} - Group ${cfg.group} - - ${let - mkModule = module: - if isString module then { name = module; path = "${pkg}/modules/mod_${module}.so"; } - else if isAttrs module then { inherit (module) name path; } - else throw "Expecting either a string or attribute set including a name and path."; - in - concatMapStringsSep "\n" (module: "LoadModule ${module.name}_module ${module.path}") (unique (map mkModule modules)) - } - - AddHandler type-map var - - - Require all denied - - - ${mimeConf} - ${loggingConf} - ${browserHacks} - - Include ${pkg}/conf/extra/httpd-default.conf - Include ${pkg}/conf/extra/httpd-autoindex.conf - Include ${pkg}/conf/extra/httpd-multilang-errordoc.conf - Include ${pkg}/conf/extra/httpd-languages.conf - - TraceEnable off - - ${sslConf} - - # Fascist default - deny access to everything. - - Options FollowSymLinks - AllowOverride None - Require all denied - - - ${cfg.extraConfig} - - ${concatMapStringsSep "\n" mkVHostConf vhosts} - ''; - - # Generate the PHP configuration file. Should probably be factored - # out into a separate module. - phpIni = pkgs.runCommand "php.ini" - { options = cfg.phpOptions; - preferLocalBuild = true; - } - '' - cat ${php}/etc/php.ini > $out - echo "$options" >> $out - ''; - -in - - -{ - - imports = [ - (mkRemovedOptionModule [ "services" "httpd" httpdName "extraSubservices" ] "Most existing subservices have been ported to the NixOS module system. Please update your configuration accordingly.") - (mkRemovedOptionModule [ "services" "httpd" httpdName "stateDir" ] "The httpd module now uses /run/httpd as a runtime directory.") - - # virtualHosts options - (mkRemovedOptionModule [ "services" "httpd" httpdName "documentRoot" ] "Please define a virtual host using `services.httpd.virtualHosts`.") - (mkRemovedOptionModule [ "services" "httpd" httpdName "enableSSL" ] "Please define a virtual host using `services.httpd.virtualHosts`.") - (mkRemovedOptionModule [ "services" "httpd" httpdName "enableUserDir" ] "Please define a virtual host using `services.httpd.virtualHosts`.") - (mkRemovedOptionModule [ "services" "httpd" httpdName "globalRedirect" ] "Please define a virtual host using `services.httpd.virtualHosts`.") - (mkRemovedOptionModule [ "services" "httpd" httpdName "hostName" ] "Please define a virtual host using `services.httpd.virtualHosts`.") - (mkRemovedOptionModule [ "services" "httpd" httpdName "listen" ] "Please define a virtual host using `services.httpd.virtualHosts`.") - (mkRemovedOptionModule [ "services" "httpd" httpdName "robotsEntries" ] "Please define a virtual host using `services.httpd.virtualHosts`.") - (mkRemovedOptionModule [ "services" "httpd" httpdName "servedDirs" ] "Please define a virtual host using `services.httpd.virtualHosts`.") - (mkRemovedOptionModule [ "services" "httpd" httpdName "servedFiles" ] "Please define a virtual host using `services.httpd.virtualHosts`.") - (mkRemovedOptionModule [ "services" "httpd" httpdName "serverAliases" ] "Please define a virtual host using `services.httpd.virtualHosts`.") - (mkRemovedOptionModule [ "services" "httpd" httpdName "sslServerCert" ] "Please define a virtual host using `services.httpd.virtualHosts`.") - (mkRemovedOptionModule [ "services" "httpd" httpdName "sslServerChain" ] "Please define a virtual host using `services.httpd.virtualHosts`.") - (mkRemovedOptionModule [ "services" "httpd" httpdName "sslServerKey" ] "Please define a virtual host using `services.httpd.virtualHosts`.") - ]; - - # interface - - options = { - - services.httpd."${httpdName}" = { - - enable = mkEnableOption "the Apache HTTP Server"; - - package = mkOption { - type = types.package; - default = pkgs.apacheHttpd; - defaultText = "pkgs.apacheHttpd"; - description = '' - Overridable attribute of the Apache HTTP Server package to use. - ''; - }; - - configFile = mkOption { - type = types.path; - default = confFile; - defaultText = "confFile"; - example = literalExample ''pkgs.writeText "httpd.conf" "# my custom config file ..."''; - description = '' - Override the configuration file used by Apache. By default, - NixOS generates one automatically. - ''; - }; - - extraConfig = mkOption { - type = types.lines; - default = ""; - description = '' - Configuration lines appended to the generated Apache - configuration file. Note that this mechanism will not work - when is overridden. - ''; - }; - - extraModules = mkOption { - type = types.listOf types.unspecified; - default = []; - example = literalExample '' - [ - "proxy_connect" - { name = "jk"; path = "''${pkgs.tomcat_connectors}/modules/mod_jk.so"; } - ] - ''; - description = '' - Additional Apache modules to be used. These can be - specified as a string in the case of modules distributed - with Apache, or as an attribute set specifying the - name and path of the - module. - ''; - }; - - adminAddr = mkOption { - type = types.str; - example = "admin@example.org"; - description = "E-mail address of the server administrator."; - }; - - logFormat = mkOption { - type = types.str; - default = "common"; - example = "combined"; - description = '' - Log format for log files. Possible values are: combined, common, referer, agent. - See for more details. - ''; - }; - - logPerVirtualHost = mkOption { - type = types.bool; - default = true; - description = '' - If enabled, each virtual host gets its own - access.log and - error.log, namely suffixed by the - of the virtual host. - ''; - }; - - user = mkOption { - type = types.str; - default = "wwwrun"; - description = '' - User account under which httpd runs. - ''; - }; - - group = mkOption { - type = types.str; - default = "wwwrun"; - description = '' - Group under which httpd runs. - ''; - }; - - logDir = mkOption { - type = types.path; - default = "/var/log/httpd"; - description = '' - Directory for Apache's log files. It is created automatically. - ''; - }; - - virtualHosts = mkOption { - type = with types; attrsOf (submodule (import )); - default = { - localhost = { - documentRoot = "${pkg}/htdocs"; - }; - }; - example = literalExample '' - { - "foo.example.com" = { - forceSSL = true; - documentRoot = "/var/www/foo.example.com" - }; - "bar.example.com" = { - addSSL = true; - documentRoot = "/var/www/bar.example.com"; - }; - } - ''; - description = '' - Specification of the virtual hosts served by Apache. Each - element should be an attribute set specifying the - configuration of the virtual host. - ''; - }; - - enableMellon = mkOption { - type = types.bool; - default = false; - description = "Whether to enable the mod_auth_mellon module."; - }; - - enablePHP = mkOption { - type = types.bool; - default = false; - description = "Whether to enable the PHP module."; - }; - - phpPackage = mkOption { - type = types.package; - default = pkgs.php; - defaultText = "pkgs.php"; - description = '' - Overridable attribute of the PHP package to use. - ''; - }; - - enablePerl = mkOption { - type = types.bool; - default = false; - description = "Whether to enable the Perl module (mod_perl)."; - }; - - phpOptions = mkOption { - type = types.lines; - default = ""; - example = - '' - date.timezone = "CET" - ''; - description = '' - Options appended to the PHP configuration file php.ini. - ''; - }; - - multiProcessingModule = mkOption { - type = types.enum [ "event" "prefork" "worker" ]; - default = "prefork"; - example = "worker"; - description = - '' - Multi-processing module to be used by Apache. Available - modules are prefork (the default; - handles each request in a separate child process), - worker (hybrid approach that starts a - number of child processes each running a number of - threads) and event (a recent variant of - worker that handles persistent - connections more efficiently). - ''; - }; - - maxClients = mkOption { - type = types.int; - default = 150; - example = 8; - description = "Maximum number of httpd processes (prefork)"; - }; - - maxRequestsPerChild = mkOption { - type = types.int; - default = 0; - example = 500; - description = '' - Maximum number of httpd requests answered per httpd child (prefork), 0 means unlimited. - ''; - }; - - sslCiphers = mkOption { - type = types.str; - default = "HIGH:!aNULL:!MD5:!EXP"; - description = "Cipher Suite available for negotiation in SSL proxy handshake."; - }; - - sslProtocols = mkOption { - type = types.str; - default = "All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1"; - example = "All -SSLv2 -SSLv3"; - description = "Allowed SSL/TLS protocol versions."; - }; - }; - - }; - - # implementation - - config = mkIf cfg.enable { - - assertions = [ - { - assertion = all (hostOpts: !hostOpts.enableSSL) vhosts; - message = '' - The option `services.httpd.virtualHosts..enableSSL` no longer has any effect; please remove it. - Select one of `services.httpd.virtualHosts..addSSL`, `services.httpd.virtualHosts..forceSSL`, - or `services.httpd.virtualHosts..onlySSL`. - ''; - } - { - assertion = all (hostOpts: with hostOpts; !(addSSL && onlySSL) && !(forceSSL && onlySSL) && !(addSSL && forceSSL)) vhosts; - message = '' - Options `services.httpd.virtualHosts..addSSL`, - `services.httpd.virtualHosts..onlySSL` and `services.httpd.virtualHosts..forceSSL` - are mutually exclusive. - ''; - } - { - assertion = all (hostOpts: !(hostOpts.enableACME && hostOpts.useACMEHost != null)) vhosts; - message = '' - Options `services.httpd.virtualHosts..enableACME` and - `services.httpd.virtualHosts..useACMEHost` are mutually exclusive. - ''; - } - ]; - - warnings = - mapAttrsToList (name: hostOpts: '' - Using config.services.httpd.virtualHosts."${name}".servedFiles is deprecated and will become unsupported in a future release. Your configuration will continue to work as is but please migrate your configuration to config.services.httpd.virtualHosts."${name}".locations before the 20.09 release of NixOS. - '') (filterAttrs (name: hostOpts: hostOpts.servedFiles != []) cfg.virtualHosts); - - users.users = optionalAttrs (withUsers && cfg.user == "wwwrun") { - wwwrun = { - group = cfg.group; - description = "Apache httpd user"; - uid = config.ids.uids.wwwrun; - }; - }; - - users.groups = optionalAttrs (withUsers && cfg.group == "wwwrun") { - wwwrun.gid = config.ids.gids.wwwrun; - }; - - security.acme.certs = mapAttrs (name: hostOpts: { - user = cfg.user; - group = mkDefault cfg.group; - email = if hostOpts.adminAddr != null then hostOpts.adminAddr else cfg.adminAddr; - webroot = hostOpts.acmeRoot; - extraDomains = genAttrs hostOpts.serverAliases (alias: null); - postRun = "systemctl reload httpd.service"; - }) (filterAttrs (name: hostOpts: hostOpts.enableACME) cfg.virtualHosts); - - environment.systemPackages = [ pkg ]; - - # required for "apachectl configtest" - environment.etc."httpd/httpd_${httpdName}.conf".source = httpdConf; - - services.httpd."${httpdName}" = { phpOptions = - '' - ; Needed for PHP's mail() function. - sendmail_path = sendmail -t -i - - ; Don't advertise PHP - expose_php = off - '' + optionalString (config.time.timeZone != null) '' - - ; Apparently PHP doesn't use $TZ. - date.timezone = "${config.time.timeZone}" - ''; - - extraModules = mkBefore [ - # HTTP authentication mechanisms: basic and digest. - "auth_basic" "auth_digest" - - # Authentication: is the user who he claims to be? - "authn_file" "authn_dbm" "authn_anon" - - # Authorization: is the user allowed access? - "authz_user" "authz_groupfile" "authz_host" - - # Other modules. - "ext_filter" "include" "env" "mime_magic" - "cern_meta" "expires" "headers" "usertrack" "setenvif" - "dav" "status" "asis" "info" "dav_fs" - "vhost_alias" "imagemap" "actions" "speling" - "proxy" "proxy_http" - "cache" "cache_disk" - - # For compatibility with old configurations, the new module mod_access_compat is provided. - "access_compat" - ]; - }; - - systemd.tmpfiles.rules = - let - svc = config.systemd.services."httpd${httpdName}".serviceConfig; - in - [ - "d '${cfg.logDir}' 0700 ${svc.User} ${svc.Group}" - "Z '${cfg.logDir}' - ${svc.User} ${svc.Group}" - ]; - - systemd.services."httpd${httpdName}" = - let - vhostsACME = filter (hostOpts: hostOpts.enableACME) vhosts; - in - { description = "Apache HTTPD"; - - wantedBy = [ "multi-user.target" ]; - wants = concatLists (map (hostOpts: [ "acme-${hostOpts.hostName}.service" "acme-selfsigned-${hostOpts.hostName}.service" ]) vhostsACME); - after = [ "network.target" "fs.target" ] ++ map (hostOpts: "acme-selfsigned-${hostOpts.hostName}.service") vhostsACME; - - path = - [ pkg pkgs.coreutils pkgs.gnugrep ] - ++ optional cfg.enablePHP pkgs.system-sendmail; # Needed for PHP's mail() function. - - environment = - optionalAttrs cfg.enablePHP { PHPRC = phpIni; } - // optionalAttrs cfg.enableMellon { LD_LIBRARY_PATH = "${pkgs.xmlsec}/lib"; }; - - preStart = - '' - # Get rid of old semaphores. These tend to accumulate across - # server restarts, eventually preventing it from restarting - # successfully. - for i in $(${pkgs.utillinux}/bin/ipcs -s | grep ' ${cfg.user} ' | cut -f2 -d ' '); do - ${pkgs.utillinux}/bin/ipcrm -s $i - done - ''; - - serviceConfig = { - ExecStart = "@${pkg}/bin/httpd httpd -f ${httpdConf}"; - ExecStop = "${pkg}/bin/httpd -f ${httpdConf} -k graceful-stop"; - ExecReload = "${pkg}/bin/httpd -f ${httpdConf} -k graceful"; - User = "root"; - Group = cfg.group; - Type = "forking"; - PIDFile = "${runtimeDir}/httpd.pid"; - Restart = "always"; - RestartSec = "5s"; - RuntimeDirectory = "httpd_${httpdName} httpd_${httpdName}/runtime"; - RuntimeDirectoryMode = "0750"; - }; - }; - - }; -} diff --git a/modules/websites/httpd-service-builder.patch b/modules/websites/httpd-service-builder.patch deleted file mode 100644 index f0ad836..0000000 --- a/modules/websites/httpd-service-builder.patch +++ /dev/null @@ -1,150 +0,0 @@ ---- /nix/store/xj651aslybfsma20hpbi5nznfcffq8ky-nixexprs.tar.xz/nixos/modules/services/web-servers/apache-httpd/default.nix 1970-01-01 01:00:01.000000000 +0100 -+++ modules/websites/httpd-service-builder.nix 2020-04-04 03:08:29.068490345 +0200 -@@ -1,12 +1,15 @@ -+# to help backporting this builder should stay as close as possible to -+# nixos/modules/services/web-servers/apache-httpd/default.nix -+{ httpdName, withUsers ? true }: - { config, lib, pkgs, ... }: - - with lib; - - let - -- cfg = config.services.httpd; -+ cfg = config.services.httpd."${httpdName}"; - -- runtimeDir = "/run/httpd"; -+ runtimeDir = "/run/httpd_${httpdName}"; - - pkg = cfg.package.out; - -@@ -318,13 +321,6 @@ - Require all denied - - -- # But do allow access to files in the store so that we don't have -- # to generate clauses for every generated file that we -- # want to serve. -- -- Require all granted -- -- - ${cfg.extraConfig} - - ${concatMapStringsSep "\n" mkVHostConf vhosts} -@@ -347,30 +343,30 @@ - { - - imports = [ -- (mkRemovedOptionModule [ "services" "httpd" "extraSubservices" ] "Most existing subservices have been ported to the NixOS module system. Please update your configuration accordingly.") -- (mkRemovedOptionModule [ "services" "httpd" "stateDir" ] "The httpd module now uses /run/httpd as a runtime directory.") -+ (mkRemovedOptionModule [ "services" "httpd" httpdName "extraSubservices" ] "Most existing subservices have been ported to the NixOS module system. Please update your configuration accordingly.") -+ (mkRemovedOptionModule [ "services" "httpd" httpdName "stateDir" ] "The httpd module now uses /run/httpd as a runtime directory.") - - # virtualHosts options -- (mkRemovedOptionModule [ "services" "httpd" "documentRoot" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -- (mkRemovedOptionModule [ "services" "httpd" "enableSSL" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -- (mkRemovedOptionModule [ "services" "httpd" "enableUserDir" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -- (mkRemovedOptionModule [ "services" "httpd" "globalRedirect" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -- (mkRemovedOptionModule [ "services" "httpd" "hostName" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -- (mkRemovedOptionModule [ "services" "httpd" "listen" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -- (mkRemovedOptionModule [ "services" "httpd" "robotsEntries" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -- (mkRemovedOptionModule [ "services" "httpd" "servedDirs" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -- (mkRemovedOptionModule [ "services" "httpd" "servedFiles" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -- (mkRemovedOptionModule [ "services" "httpd" "serverAliases" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -- (mkRemovedOptionModule [ "services" "httpd" "sslServerCert" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -- (mkRemovedOptionModule [ "services" "httpd" "sslServerChain" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -- (mkRemovedOptionModule [ "services" "httpd" "sslServerKey" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -+ (mkRemovedOptionModule [ "services" "httpd" httpdName "documentRoot" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -+ (mkRemovedOptionModule [ "services" "httpd" httpdName "enableSSL" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -+ (mkRemovedOptionModule [ "services" "httpd" httpdName "enableUserDir" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -+ (mkRemovedOptionModule [ "services" "httpd" httpdName "globalRedirect" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -+ (mkRemovedOptionModule [ "services" "httpd" httpdName "hostName" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -+ (mkRemovedOptionModule [ "services" "httpd" httpdName "listen" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -+ (mkRemovedOptionModule [ "services" "httpd" httpdName "robotsEntries" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -+ (mkRemovedOptionModule [ "services" "httpd" httpdName "servedDirs" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -+ (mkRemovedOptionModule [ "services" "httpd" httpdName "servedFiles" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -+ (mkRemovedOptionModule [ "services" "httpd" httpdName "serverAliases" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -+ (mkRemovedOptionModule [ "services" "httpd" httpdName "sslServerCert" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -+ (mkRemovedOptionModule [ "services" "httpd" httpdName "sslServerChain" ] "Please define a virtual host using `services.httpd.virtualHosts`.") -+ (mkRemovedOptionModule [ "services" "httpd" httpdName "sslServerKey" ] "Please define a virtual host using `services.httpd.virtualHosts`.") - ]; - - # interface - - options = { - -- services.httpd = { -+ services.httpd."${httpdName}" = { - - enable = mkEnableOption "the Apache HTTP Server"; - -@@ -622,7 +618,7 @@ - Using config.services.httpd.virtualHosts."${name}".servedFiles is deprecated and will become unsupported in a future release. Your configuration will continue to work as is but please migrate your configuration to config.services.httpd.virtualHosts."${name}".locations before the 20.09 release of NixOS. - '') (filterAttrs (name: hostOpts: hostOpts.servedFiles != []) cfg.virtualHosts); - -- users.users = optionalAttrs (cfg.user == "wwwrun") { -+ users.users = optionalAttrs (withUsers && cfg.user == "wwwrun") { - wwwrun = { - group = cfg.group; - description = "Apache httpd user"; -@@ -630,7 +626,7 @@ - }; - }; - -- users.groups = optionalAttrs (cfg.group == "wwwrun") { -+ users.groups = optionalAttrs (withUsers && cfg.group == "wwwrun") { - wwwrun.gid = config.ids.gids.wwwrun; - }; - -@@ -646,9 +642,9 @@ - environment.systemPackages = [ pkg ]; - - # required for "apachectl configtest" -- environment.etc."httpd/httpd.conf".source = httpdConf; -+ environment.etc."httpd/httpd_${httpdName}.conf".source = httpdConf; - -- services.httpd.phpOptions = -+ services.httpd."${httpdName}" = { phpOptions = - '' - ; Needed for PHP's mail() function. - sendmail_path = sendmail -t -i -@@ -661,7 +657,7 @@ - date.timezone = "${config.time.timeZone}" - ''; - -- services.httpd.extraModules = mkBefore [ -+ extraModules = mkBefore [ - # HTTP authentication mechanisms: basic and digest. - "auth_basic" "auth_digest" - -@@ -682,17 +678,18 @@ - # For compatibility with old configurations, the new module mod_access_compat is provided. - "access_compat" - ]; -+ }; - - systemd.tmpfiles.rules = - let -- svc = config.systemd.services.httpd.serviceConfig; -+ svc = config.systemd.services."httpd${httpdName}".serviceConfig; - in - [ - "d '${cfg.logDir}' 0700 ${svc.User} ${svc.Group}" - "Z '${cfg.logDir}' - ${svc.User} ${svc.Group}" - ]; - -- systemd.services.httpd = -+ systemd.services."httpd${httpdName}" = - let - vhostsACME = filter (hostOpts: hostOpts.enableACME) vhosts; - in -@@ -730,7 +727,7 @@ - PIDFile = "${runtimeDir}/httpd.pid"; - Restart = "always"; - RestartSec = "5s"; -- RuntimeDirectory = "httpd httpd/runtime"; -+ RuntimeDirectory = "httpd_${httpdName} httpd_${httpdName}/runtime"; - RuntimeDirectoryMode = "0750"; - }; - }; diff --git a/modules/websites/nosslVhost/index.html b/modules/websites/nosslVhost/index.html deleted file mode 100644 index 4401a80..0000000 --- a/modules/websites/nosslVhost/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - No SSL site - - -

No SSL on this site

-

Use for wifi networks with login page that doesn't work well with - https.

- - diff --git a/modules/websites/php-application.nix b/modules/websites/php-application.nix deleted file mode 100644 index 3a43a45..0000000 --- a/modules/websites/php-application.nix +++ /dev/null @@ -1,224 +0,0 @@ -{ lib, config, pkgs, ... }: -with lib; -let - cfg = config.services.phpApplication; - cfgByEnv = lists.groupBy (x: x.websiteEnv) (builtins.attrValues cfg.apps); -in -{ - options = with types; { - services.phpApplication.apps = mkOption { - default = {}; - description = '' - php applications to define - ''; - type = attrsOf (submodule { - options = { - varDir = mkOption { - type = nullOr path; - description = '' - Path to application’s vardir. - ''; - }; - varDirPaths = mkOption { - type = attrsOf str; - default = {}; - description = '' - Map of additional folders => mode to create under varDir - ''; - }; - mode = mkOption { - type = str; - default = "0700"; - description = '' - Mode to apply to the vardir - ''; - }; - phpSession = mkOption { - type = bool; - default = true; - description = "Handle phpsession files separately in vardir"; - }; - phpListen = mkOption { - type = nullOr str; - default = null; - description = "Name of the socket to listen to. Defaults to app name if null"; - }; - phpPool = mkOption { - type = attrsOf str; - default = {}; - description = "Pool configuration to append"; - }; - phpEnv = mkOption { - type = attrsOf str; - default = {}; - description = "Pool environment to append"; - }; - phpPackage = mkOption { - type = attrsOf str; - default = pkgs.php; - description = "Php package to use"; - }; - phpOptions = mkOption { - type = lines; - default = ""; - description = "php configuration to append"; - }; - phpOpenbasedir = mkOption { - type = listOf path; - default = []; - description = '' - paths to add to php open_basedir configuration in addition to app and vardir - ''; - }; - phpWatchFiles = mkOption { - type = listOf path; - default = []; - description = '' - Path to other files to watch to trigger preStart scripts - ''; - }; - websiteEnv = mkOption { - type = str; - description = '' - website instance name to use - ''; - }; - httpdUser = mkOption { - type = str; - default = config.services.httpd.user; - description = '' - httpd user to run the prestart scripts as. - ''; - }; - httpdGroup = mkOption { - type = str; - default = config.services.httpd.group; - description = '' - httpd group to run the prestart scripts as. - ''; - }; - httpdWatchFiles = mkOption { - type = listOf path; - default = []; - description = '' - Path to other files to watch to trigger httpd reload - ''; - }; - app = mkOption { - type = path; - description = '' - Path to application root - ''; - }; - webRoot = mkOption { - type = nullOr path; - description = '' - Path to the web root path of the application. May differ from the application itself (usually a subdirectory) - ''; - }; - preStartActions = mkOption { - type = listOf str; - default = []; - description = '' - List of actions to run as apache user at preStart when - whatchFiles or app dir changed. - ''; - }; - serviceDeps = mkOption { - type = listOf str; - default = []; - description = '' - List of systemd services this application depends on - ''; - }; - }; - }); - }; - # Read-only variables - services.phpApplication.phpListenPaths = mkOption { - type = attrsOf path; - default = attrsets.mapAttrs' (name: icfg: attrsets.nameValuePair - name config.services.phpfpm.pools."${name}".socket - ) cfg.apps; - readOnly = true; - description = '' - Full paths to listen for php - ''; - }; - }; - - config = { - services.websites.env = attrsets.mapAttrs' (name: cfgs: attrsets.nameValuePair - name { - modules = [ "proxy_fcgi" ]; - watchPaths = builtins.concatLists (map (c: c.httpdWatchFiles) cfgs); - } - ) cfgByEnv; - - services.phpfpm.pools = attrsets.mapAttrs' (name: icfg: attrsets.nameValuePair - name { - user = icfg.httpdUser; - group = icfg.httpdUser; - settings = { - "listen.owner" = icfg.httpdUser; - "listen.group" = icfg.httpdGroup; - "php_admin_value[open_basedir]" = builtins.concatStringsSep ":" ([icfg.app icfg.varDir] ++ icfg.phpWatchFiles ++ icfg.phpOpenbasedir); - } - // optionalAttrs (icfg.phpSession) { "php_admin_value[session.save_path]" = "${icfg.varDir}/phpSessions"; } - // icfg.phpPool; - phpOptions = config.services.phpfpm.phpOptions + icfg.phpOptions; - inherit (icfg) phpEnv phpPackage; - } - ) cfg.apps; - - services.filesWatcher = attrsets.mapAttrs' (name: icfg: attrsets.nameValuePair - "phpfpm-${name}" { - restart = true; - paths = icfg.phpWatchFiles; - } - ) (attrsets.filterAttrs (n: v: builtins.length v.phpWatchFiles > 0) cfg.apps); - - systemd.services = attrsets.mapAttrs' (name: icfg: attrsets.nameValuePair - "phpfpm-${name}" { - after = lib.mkAfter icfg.serviceDeps; - wants = icfg.serviceDeps; - preStart = lib.mkAfter (optionalString (!isNull icfg.varDir) '' - watchFilesChanged() { - ${optionalString (builtins.length icfg.phpWatchFiles == 0) "return 1"} - [ ! -f "${icfg.varDir}"/watchedFiles ] \ - || ! sha512sum -c --status ${icfg.varDir}/watchedFiles - } - appDirChanged() { - [ ! -f "${icfg.varDir}/currentWebappDir" -o \ - "${icfg.app}" != "$(cat ${icfg.varDir}/currentWebappDir 2>/dev/null)" ] - } - updateWatchFiles() { - ${optionalString (builtins.length icfg.phpWatchFiles == 0) "return 0"} - sha512sum ${builtins.concatStringsSep " " icfg.phpWatchFiles} > ${icfg.varDir}/watchedFiles - } - - if watchFilesChanged || appDirChanged; then - pushd ${icfg.app} > /dev/null - ${builtins.concatStringsSep "\n " (map (c: "/run/wrappers/bin/sudo -u ${icfg.httpdUser} ${c}") icfg.preStartActions) } - popd > /dev/null - echo -n "${icfg.app}" > ${icfg.varDir}/currentWebappDir - updateWatchFiles - fi - ''); - } - ) cfg.apps; - - system.activationScripts = attrsets.mapAttrs' (name: icfg: attrsets.nameValuePair - name { - deps = []; - text = optionalString (!isNull icfg.varDir) '' - install -m ${icfg.mode} -o ${icfg.httpdUser} -g ${icfg.httpdGroup} -d ${icfg.varDir} - '' + optionalString (icfg.phpSession) '' - install -m 0700 -o ${icfg.httpdUser} -g ${icfg.httpdGroup} -d ${icfg.varDir}/phpSessions - '' + builtins.concatStringsSep "\n" (attrsets.mapAttrsToList (n: v: '' - install -m ${v} -o ${icfg.httpdUser} -g ${icfg.httpdGroup} -d ${icfg.varDir}/${n} - '') icfg.varDirPaths); - } - ) cfg.apps; - }; -} diff --git a/modules/zrepl.nix b/modules/zrepl.nix deleted file mode 100644 index 5bcc17b..0000000 --- a/modules/zrepl.nix +++ /dev/null @@ -1,45 +0,0 @@ -{ config, lib, pkgs, ... }: -let - cfg = config.services.zrepl; -in -{ - options = { - services.zrepl = { - enable = lib.mkEnableOption "Enable the zrepl daemon"; - - config = lib.mkOption { - type = lib.types.lines; - default = ""; - description = "Configuration"; - }; - }; - }; - - config = lib.mkIf cfg.enable { - secrets.keys = { - "zrepl/zrepl.yml" = { - permissions = "0400"; - text = cfg.config; - user = config.systemd.services.zrepl.serviceConfig.User or "root"; - group = config.systemd.services.zrepl.serviceConfig.Group or "root"; - }; - }; - services.filesWatcher.zrepl = { - restart = true; - paths = [ config.secrets.fullPaths."zrepl/zrepl.yml" ]; - }; - systemd.services.zrepl = { - description = "zrepl daemon"; - wantedBy = [ "multi-user.target" ]; - path = [ pkgs.zfs pkgs.openssh ]; - serviceConfig = { - ExecStart = - let configFile = config.secrets.fullPaths."zrepl/zrepl.yml"; - in "${pkgs.zrepl}/bin/zrepl daemon --config ${configFile}"; - Type = "simple"; - RuntimeDirectory= "zrepl"; - RuntimeDirectoryMode= "0700"; - }; - }; - }; -} -- cgit v1.2.3