From 25aed59709e9bcda3b7927e2af4e010a07ab5b1a Mon Sep 17 00:00:00 2001 From: Chris Krenn Date: Thu, 25 Mar 2021 21:35:32 -0700 Subject: [PATCH 01/49] seems to be working --- config/Dockerfile | 7 + config/README.md | 18 +++ config/config.js | 55 +++++++ config/development.yaml | 22 +++ config/env_all.yaml | 282 +++++++++++++++++++++++++++++++++ config/export_config.js | 13 ++ config/package.json | 16 ++ config/schema.yaml | 327 +++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 27 ++++ server/package-lock.json | 132 +++++++++++----- server/package.json | 2 + server/src/server.js | 13 +- 12 files changed, 878 insertions(+), 36 deletions(-) create mode 100644 config/Dockerfile create mode 100644 config/README.md create mode 100644 config/config.js create mode 100644 config/development.yaml create mode 100644 config/env_all.yaml create mode 100644 config/export_config.js create mode 100644 config/package.json create mode 100644 config/schema.yaml diff --git a/config/Dockerfile b/config/Dockerfile new file mode 100644 index 0000000000..1508770741 --- /dev/null +++ b/config/Dockerfile @@ -0,0 +1,7 @@ +FROM busybox + +WORKDIR /config + +COPY . . + +CMD echo "copied config files" diff --git a/config/README.md b/config/README.md new file mode 100644 index 0000000000..d78bf12999 --- /dev/null +++ b/config/README.md @@ -0,0 +1,18 @@ +# Configuration files and variables for polis +* Currently, configuration variables live in many different files. +* The goal is to use [`node-convict`](https://github.com/mozilla/node-convict) to manage configurations +* The defaults for all variables in `config/schema.yaml` are currently for development builds. +* Configurations for backend services (e.g. `server` & `math` are mounted onto a docker volume (`/app/config`) so that they can be updated and reread without a full restart. + - Resolved configuration variables are also written to `export_config.json` so that they can be easily used by `clojure`, `python`, etc. +* Configurations for front-end services (e.g. `client-admin`, `client-participation` & `client-report`) are copied into each directory with the `config/copy_config.sh` script. Running `make init` in the root directory will install a git hook that will automatically run `config/copy_config.sh` before each commit. +* Some config variables seem to be redundant and will be merged later: + - `primary_polis_url` & `SERVICE_URL` +* Some config variables can not be easily be managed by `node-convict`: + - `GIT_HASH` +* Work in progress: + - Build server and config from scratch + - Test whether docker config volume will override `server/config` directory + - Write code to read json config into math + - Write code to allow math to run in docker or locally + + diff --git a/config/config.js b/config/config.js new file mode 100644 index 0000000000..6908014715 --- /dev/null +++ b/config/config.js @@ -0,0 +1,55 @@ +// Copyright (C) 2012-present, The Authors. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License, version 3, as published by the Free Software Foundation. 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 Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . + +"use strict"; + +console.log('starting config.js') + +const convict = require('convict'); +const fs = require('fs'); +const yaml = require('js-yaml'); + +convict.addParser({ extension: ['yml', 'yaml'], parse: yaml.safeLoad }); + +// for additional validation options, use the following: +// convict.addFormat(require('convict-format-with-validator').ipaddress); + +'use strict'; + +// Define a schema + +try { + // the next line only works with docker-compose + console.log('reading schema') + let fileContents = fs.readFileSync('/app/config/schema.yaml', 'utf8'); + let schema = yaml.safeLoad(fileContents); + var config = convict(schema); +} catch (e) { + console.log(e); +} + +console.log('default aws_region:' + config.get('aws_region')); + +// Load environment dependent configuration +var env = config.get('env'); +config.loadFile('/app/config/' + env + '.yaml'); +var now = new Date(); +console.log('config aws_region:' + config.get('aws_region') + " @ " + now.toUTCString()); + +const path = '/app/config/config_private.yaml'; + +try { + if (fs.existsSync(path)) { + config.loadFile(path); + } +} catch(err) { + console.error(err) +} + +// Perform validation +config.validate({allowed: 'strict'}); + +module.exports = config; + + +console.log('finishing config.js') + diff --git a/config/development.yaml b/config/development.yaml new file mode 100644 index 0000000000..56a4b49f03 --- /dev/null +++ b/config/development.yaml @@ -0,0 +1,22 @@ +# Precedence order (https://www.npmjs.com/package/convict) +# When merging configuration values from different sources, Convict follows precedence rules. The order, from lowest to highest, for config.loadFile(file) and config.load(json) is: + +# Default value +# File or json set in function argument +# Environment variables (only used when env property is set in schema) +# Command line arguments (only used when arg property is set in schema) + +# for easy json/yaml conversion: https://www.json2yaml.com/ + +aws_region: us-north-14 + +# aws_access_key_id: +# doc: aws_access_key_id +# default: NA +# env: AWS_ACCESS_KEY_ID +# sensitive: true +# aws_secret_access_key: +# doc: aws_secret_access_key +# default: NA +# env: AWS_SECRET_ACCESS_KEY +# sensitive: true diff --git a/config/env_all.yaml b/config/env_all.yaml new file mode 100644 index 0000000000..cec6a094f3 --- /dev/null +++ b/config/env_all.yaml @@ -0,0 +1,282 @@ +database_url: + doc: database_url + default: postgres://postgres:oiPorg3Nrz0yqDLE@postgres:5432/polis-dev + env: DATABASE_URL + +webserver_username: + doc: webserver_username + default: ws-user + env: WEBSERVER_USERNAME + +webserver_pass: + doc: webserver_pass + default: ws-passPOSTGRES_DB=polis-dev + env: WEBSERVER_PASS + +postgres_password: + doc: postgres_password + default: oiPorg3Nrz0yqDLE + env: POSTGRES_PASSWORD + +postgres_user: + doc: postgres_user + default: postgres# For admin functionality, fill this out + env: POSTGRES_USER + +admin_emails: + doc: admin_emails + default: [] + env: ADMIN_EMAILS + +admin_email_data_export: + doc: admin_email_data_export + default: "" + env: ADMIN_EMAIL_DATA_EXPORT + +admin_email_data_export_test: + doc: admin_email_data_export_test + default: "" + env: ADMIN_EMAIL_DATA_EXPORT_TEST + +admin_email_email_test: + doc: admin_email_email_test + default: "" + env: ADMIN_EMAIL_EMAIL_TEST + +admin_uids: + doc: admin_uids + default: [] + env: ADMIN_UIDS + + +database_for_reads_name: + doc: database_for_reads_name + default: DATABASE_URL + env: DATABASE_FOR_READS_NAME + +database_url: + doc: database_url + default: postgres://postgres:oiPorg3Nrz0yqDLE@postgres:5432/polis-dev + env: DATABASE_URL + + +webserver_username: + doc: webserver_username + default: ws-user + env: WEBSERVER_USERNAME + +webserver_pass: + doc: webserver_pass + default: ws-pass + env: WEBSERVER_PASS + +stripe_secret_key: + doc: stripe_secret_key + default: sk_test_NFBDEThkpHCYBzXPJuBlY8TW + env: STRIPE_SECRET_KEY + + +dev_mode: + doc: dev_mode + default: true + env: DEV_MODE + +disable_intercom: + doc: disable_intercom + default: true + env: DISABLE_INTERCOM + +domain_override: + doc: domain_override + default: localhost:5000 + env: DOMAIN_OVERRIDE + +# Options: prod, preprod, dev +math_env: + doc: math_env ex. prod, preprod, dev + default: dev + env: MATH_ENV + +port: + doc: port + default: 5000 + env: PORT + + +should_use_translation_api: + doc: should_use_translation_api + default: false + env: SHOULD_USE_TRANSLATION_API + +google_credentials_base64: + doc: google_credentials_base64 + default: xxxxxxxxxxxxxxxxxxxxxxx... + env: GOOGLE_CREDENTIALS_BASE64 + +google_creds_stringified: + doc: google_creds_stringified + default: xxxxxxxxxxxxxxxxxxxxxxx... + env: GOOGLE_CREDS_STRINGIFIED + + +static_files_admindash_port: + doc: static_files_admindash_port + default: 8080 + env: STATIC_FILES_ADMINDASH_PORT + +static_files_host: + doc: static_files_host + default: file-server + env: STATIC_FILES_HOST + +static_files_port: + doc: static_files_port + default: 8080 + env: STATIC_FILES_PORT + + +aws_region: + doc: aws_region + default: us-east-1 + env: AWS_REGION + + +# Options: maildev, aws-ses, mailgun +# Example: `aws-ses,mailgun` would try sending via AWS SES first, and fallback to Mailgun on error. +email_transport_types: + doc: email_transport_types ex. maildev, aws-ses, mailgun + default: maildev + env: EMAIL_TRANSPORT_TYPES + +polis_from_address: + doc: polis_from_address + default: "Example " + env: POLIS_FROM_ADDRESS + +database_url: + doc: database_url + default: postgres://postgres:oiPorg3Nrz0yqDLE@postgres:5432/polis-dev + env: DATABASE_URL + +webserver_username: + doc: webserver_username + default: ws-user + env: WEBSERVER_USERNAME + +webserver_pass: + doc: webserver_pass + default: ws-passPOSTGRES_DB=polis-dev + env: WEBSERVER_PASS + +postgres_password: + doc: postgres_password + default: oiPorg3Nrz0yqDLE + env: POSTGRES_PASSWORD + +postgres_user: + doc: postgres_user + default: postgres# For admin functionality, fill this out + env: POSTGRES_USER + +admin_emails: + doc: admin_emails + default: [] + env: ADMIN_EMAILS + +admin_email_data_export: + doc: admin_email_data_export + default: "" + env: ADMIN_EMAIL_DATA_EXPORT + +admin_email_data_export_test: + doc: admin_email_data_export_test + default: "" + env: ADMIN_EMAIL_DATA_EXPORT_TEST + +admin_email_email_test: + doc: admin_email_email_test + default: "" + env: ADMIN_EMAIL_EMAIL_TEST + +admin_uids: + doc: admin_uids + default: [] + env: ADMIN_UIDS + + +database_for_reads_name: + doc: database_for_reads_name + default: DATABASE_URL + env: DATABASE_FOR_READS_NAME + +database_url: + doc: database_url + default: postgres://postgres:oiPorg3Nrz0yqDLE@postgres:5432/polis-dev + env: DATABASE_URL + + +webserver_username: + doc: webserver_username + default: ws-user + env: WEBSERVER_USERNAME + +webserver_pass: + doc: webserver_pass + default: ws-pass + env: WEBSERVER_PASS + +stripe_secret_key: + doc: stripe_secret_key + default: sk_test_NFBDEThkpHCYBzXPJuBlY8TW + env: STRIPE_SECRET_KEY + + +dev_mode: + doc: dev_mode + default: true + env: DEV_MODE + +disable_intercom: + doc: disable_intercom + default: true + env: DISABLE_INTERCOM + +domain_override: + doc: domain_override + default: localhost:5000 + env: DOMAIN_OVERRIDE + +# Options: prod, preprod, dev +math_env: + doc: math_env + default: dev + env: MATH_ENV + +port: + doc: port + default: 5000 + env: PORT + + + +static_files_admindash_port: + doc: static_files_admindash_port + default: 8080 + env: STATIC_FILES_ADMINDASH_PORT + +static_files_host: + doc: static_files_host + default: file-server + env: STATIC_FILES_HOST + +static_files_port: + doc: static_files_port + default: 8080 + env: STATIC_FILES_PORT + + +aws_region: + doc: aws_region + default: us-east-1 + env: AWS_REGION + diff --git a/config/export_config.js b/config/export_config.js new file mode 100644 index 0000000000..3bb17095ac --- /dev/null +++ b/config/export_config.js @@ -0,0 +1,13 @@ +// Copyright (C) 2012-present, The Authors. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License, version 3, as published by the Free Software Foundation. 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 Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . + +"use strict"; + +let POLIS_ROOT = process.env.POLIS_ROOT + +var config = require(POLIS_ROOT + '/config/config.js'); +const fs = require('fs'); + +console.log('export_config aws_region:' + config.get('aws_region')); + +let data = JSON.stringify(config.getProperties(), null, 2); +fs.writeFileSync('export_config.json', data); diff --git a/config/package.json b/config/package.json new file mode 100644 index 0000000000..2ddf7e3698 --- /dev/null +++ b/config/package.json @@ -0,0 +1,16 @@ +{ + "name": "polisconfig", + "version": "1.0.0", + "description": "", + "main": "export_config.js", + "scripts": { + "start": "node export_config.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "convict": "6.0.0", + "js-yaml": "3.14.0" + } +} diff --git a/config/schema.yaml b/config/schema.yaml new file mode 100644 index 0000000000..b291be21e8 --- /dev/null +++ b/config/schema.yaml @@ -0,0 +1,327 @@ +# Precedence order (https://www.npmjs.com/package/convict) +# When merging configuration values from different sources, Convict follows precedence rules. The order, from lowest to highest, for config.loadFile(file) and config.load(json) is: + +# Default value +# File or json set in function argument +# Environment variables (only used when env property is set in schema) +# Command line arguments (only used when arg property is set in schema) + +# for easy json/yaml conversion: https://www.json2yaml.com/ + +# NOTE: Please be careful when chosing defaults for undefined +# environment variables. "undefined" is recommended + +# @TODO: update all formats (https://www.npmjs.com/package/convict) + +# The defaults for all variables below are currently for development builds. + +env: + doc: The application environment + format: + - production + - development + - test + default: development + env: NODE_ENV + +# for server +aws_access_key_id: + tag: api + doc: aws_access_key_id + default: undefined + env: AWS_ACCESS_KEY_ID + sensitive: true +aws_secret_access_key: + doc: aws_secret_access_key + default: undefined + env: AWS_SECRET_ACCESS_KEY + sensitive: true +aws_region: + doc: aws_region + default: us-east-1 + env: AWS_REGION +dev_mode: + doc: dev_mode + default: true + env: DEV_MODE +aws_s3_api_version: + doc: aws_s3_api_version + default: 2006-03-01 + env: AWS_S3_API_VERSION +stripe_client_id: + doc: stripe_client_id + default: undefined + env: STRIPE_CLIENT_ID +stripe_secret_key: + doc: stripe_secret_key + default: sk_test_NFBDEThkpHCYBzXPJuBlY8TW + env: STRIPE_SECRET_KEY +database_url: + doc: database_url + default: postgres://postgres:oiPorg3Nrz0yqDLE@postgres:5432/polis-dev + env: DATABASE_URL +database_for_reads_url: + doc: database_for_reads_url (often is the same as database_url) + default: postgres://postgres:oiPorg3Nrz0yqDLE@postgres:5432/polis-dev + env: DATABASE_FOR_READS_URL +slack_api_token: + doc: slack_api_token + default: undefined + env: SLACK_API_TOKEN +polis_slack_app_client_id: + doc: polis_slack_app_client_id + default: X + env: POLIS_SLACK_APP_CLIENT_ID +polis_slack_app_client_secret: + doc: polis_slack_app_client_secret + default: X + env: POLIS_SLACK_APP_CLIENT_SECRET +disable_plans: + doc: disable_plans + default: true + env: DISABLE_PLANS +disable_intercom: + doc: disable_intercom + default: true + env: DISABLE_INTERCOM +intercom_access_token: + doc: intercom_access_token + default: undefined + env: INTERCOM_ACCESS_TOKEN +should_use_translation_api: + doc: should_use_translation_api + default: false + env: SHOULD_USE_TRANSLATION_API +google_api_key: + doc: google_api_key + default: undefined + env: GOOGLE_API_KEY + +google_creds_stringified: + doc: google_creds_stringified + default: X + env: GOOGLE_CREDS_STRINGIFIED +admin_emails: + doc: admin_emails + default: [] + env: ADMIN_EMAILS +admin_uids: + doc: admin_uids + default: [] + env: ADMIN_UIDS +admin_email_data_export: + doc: admin_email_data_export + default: '' + env: ADMIN_EMAIL_DATA_EXPORT +admin_email_data_export_test: + doc: admin_email_data_export_test + default: '' + env: ADMIN_EMAIL_DATA_EXPORT_TEST +admin_email_email_test: + doc: admin_email_email_test + default: '' + env: ADMIN_EMAIL_EMAIL_TEST +polis_from_address: + doc: polis_from_address + default: '' + env: POLIS_FROM_ADDRESS +akismet_antispam_api_key: + doc: akismet_antispam_api_key (ex. a1a11111aa11) + format: String + default: '' + env: AKISMET_ANTISPAM_API_KEY +akismet_root_url: + doc: akismet_root_url + default: https://pol.is + env: AKISMET_ROOT_URL +domain_override: + doc: domain_override + default: '' + env: DOMAIN_OVERRIDE +encryption_password_00001: + doc: encryption_password_00001 + default: c9336642-2024-43a8-99cd-77ee38e82a9c + env: ENCRYPTION_PASSWORD_00001 +backfill_comment_lang_detection: + doc: backfill_comment_lang_detection + default: false + env: BACKFILL_COMMENT_LANG_DETECTION +domain_whitelist_item_01: + doc: domain_whitelist_item_01 + default: '' + env: DOMAIN_WHITELIST_ITEM_01 +domain_whitelist_item_02: + doc: domain_whitelist_item_02 + default: '' + env: DOMAIN_WHITELIST_ITEM_02 +domain_whitelist_item_03: + doc: domain_whitelist_item_03 + default: '' + env: DOMAIN_WHITELIST_ITEM_03 +domain_whitelist_item_04: + doc: domain_whitelist_item_04 + default: '' + env: DOMAIN_WHITELIST_ITEM_04 +domain_whitelist_item_05: + doc: domain_whitelist_item_05 + default: '' + env: DOMAIN_WHITELIST_ITEM_05 +domain_whitelist_item_06: + doc: domain_whitelist_item_06 + default: '' + env: DOMAIN_WHITELIST_ITEM_06 +domain_whitelist_item_07: + doc: domain_whitelist_item_07 + default: '' + env: DOMAIN_WHITELIST_ITEM_07 +domain_whitelist_item_08: + doc: domain_whitelist_item_08 + default: '' + env: DOMAIN_WHITELIST_ITEM_08 +cache_math_results: + doc: cache_math_results + default: false + env: CACHE_MATH_RESULTS +math_env: + doc: math_env + default: dev + env: MATH_ENV +run_periodic_export_tests: + doc: run_periodic_export_tests + default: false + env: RUN_PERIODIC_EXPORT_TESTS +maxmind_userid: + doc: maxmind_userid + default: undefined + env: MAXMIND_USERID +maxmind_licensekey: + doc: maxmind_licensekey + default: undefined + env: MAXMIND_LICENSEKEY +primary_polis_url: + doc: primary_polis_url + default: pol.is + env: PRIMARY_POLIS_URL +webserver_pass: + doc: webserver_pass + default: 8a7157439f50 + env: WEBSERVER_PASS +webserver_username: + doc: webserver_username + default: f4c19337e502 + env: WEBSERVER_USERNAME +twitter_consumer_key: + doc: twitter_consumer_key + default: undefined + env: TWITTER_CONSUMER_KEY +twitter_consumer_secret: + doc: twitter_consumer_secret + default: undefined + env: TWITTER_CONSUMER_SECRET +service_hostname: + doc: service_hostname + default: undefined + env: SERVICE_HOSTNAME +static_files_port: + doc: static_files_port + default: 8080 + env: STATIC_FILES_PORT +static_files_admindash_port: + doc: static_files_admindash_port + default: 8080 + env: STATIC_FILES_ADMINDASH_PORT +static_files_report_port: + doc: static_files_report_port + default: 8080 + env: STATIC_FILES_REPORT_PORT +static_files_host: + doc: static_files_host + default: file-server + env: STATIC_FILES_HOST + +# for sendEmailSesMailgun +mailgun_api_key: + doc: mailgun_api_key + default: undefined + env: MAILGUN_API_KEY + +aws_ses_api_version: + doc: aws_s3_api_version + default: 2010-12-01 + env: AWS_S3_API_VERSION +# config.get('aws_ses_api_version') + +# polis.config +domainWhitelist: + doc: domainWhitelist + default: + - ^localhost$ + - ^192\\.168\\.1\\.141$ + - ^192\\.168\\.1\\.140$ + - ^pol\\.is + - .+\\.pol\\.is$ + - ^xip\\.io$ + - .+\\.xip\\.io$ + env: DOMAIN_WHITELIST + +uploader: + doc: uploader for compiled static javascript + format: + - local + - s3 + - scp + default: local + env: UPLOADER + +service_url: + doc: Point to a polisServer instance (local recommended for dev) + default: http://localhost:5000 + env: SERVICE_URL + +client_participation_port: + doc: Note that this must match the participation client port specified in polisServer instance + default: 5001 + env: CLIENT_PARTICIPATION_PORT + +fb_app_id: + doc: must register with facebook and get a facebook app id to use the facebook auth features + default: 661042417336977 + env: FB_APP_ID + +local_output_path: + doc: Uploader settings local + default: ./build + env: LOCAL_OUTPUT_PATH + +s3_bucket_prod: + doc: uploader settings s3 + default: pol.is + env: S3_BUCKET_PROD + +s3_bucket_preprod: + doc: uploader settings s3 + default: preprod.pol.is + env: S3_BUCKET_PREPROD + +scp_subdir_preprod: + doc: uploader settings scp + default: preprod + env: SCP_SUBDIR_PREPROD + +scp_subdir_prod: + doc: uploader settings scp + default: prod + env: SCP_SUBDIR_PROD + +port: + doc: port + default: 5000 + env: PORT + +# Options: maildev, aws-ses, mailgun +# Example: `aws-ses,mailgun` would try sending via AWS SES first, and fallback to Mailgun on error. +email_transport_types: + doc: email_transport_types ex. maildev, aws-ses, mailgun + default: maildev + env: EMAIL_TRANSPORT_TYPES + diff --git a/docker-compose.yml b/docker-compose.yml index 0f6716758e..a5e819aa1c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,3 +1,5 @@ +# @TTD: sort networks/volumes consistently (network first) + # before running docker-compose up for the first time, # either do a pull: # docker-compose pull @@ -13,12 +15,16 @@ # to stop: # docker-compose down +## TODO: add config container + version: "3.1" services: server: container_name: polis-server env_file: ./server/docker-dev.env + environment: + - POLIS_ROOT=/app/ image: polisdemo/server:dev build: context: ./server @@ -28,6 +34,8 @@ services: - "file-server" networks: - "polis-dev" + volumes: + - "config:/app/config" ports: - "5000:5000" @@ -39,6 +47,8 @@ services: - "postgres" build: context: ./math + volumes: + - "config:/config" networks: - "polis-dev" @@ -46,6 +56,8 @@ services: container_name: polis-postgres env_file: ./server/docker-db-dev.env image: polisdemo/postgres:dev + depends_on: + - "config" restart: always build: context: ./server @@ -54,6 +66,7 @@ services: - "polis-dev" volumes: - "backups:/backups" + - "config:/config" - "postgres:/var/lib/postgresql/data" nginx-proxy: @@ -66,6 +79,8 @@ services: - "server" networks: - "polis-dev" + volumes: + - "config:/config" ports: - "80:80" - "443:443" @@ -82,6 +97,8 @@ services: - "client-report" networks: - "polis-dev" + volumes: + - "config:/config" ports: - "8080:8080" @@ -119,9 +136,19 @@ services: # SMTP port - "25:25" + config: + build: + context: ./config + dockerfile: Dockerfile + volumes: + - "config:/config" + networks: polis-dev: volumes: backups: postgres: + config: + # We hardcode this machine name so it won't vary depending on git dir name. + name: polis_config diff --git a/server/package-lock.json b/server/package-lock.json index 2ba7cd1a65..2651ef7abc 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -44,7 +44,7 @@ }, "@sinonjs/formatio": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", "integrity": "sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg==", "requires": { "samsam": "1.3.0" @@ -256,12 +256,12 @@ }, "ansi-regex": { "version": "2.1.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "ansi-styles": { "version": "2.2.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" }, "aproba": { @@ -278,14 +278,22 @@ "readable-stream": "^2.0.6" } }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, "array-uniq": { "version": "1.0.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" }, "arrify": { "version": "1.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" }, "asn1": { @@ -645,6 +653,11 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, "capture-stack-trace": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", @@ -657,7 +670,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { "ansi-styles": "^2.2.1", @@ -674,7 +687,7 @@ }, "co": { "version": "4.6.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, "code-point-at": { @@ -684,7 +697,7 @@ }, "colors": { "version": "1.0.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" }, "combined-stream": { @@ -757,9 +770,18 @@ "bluebird": "^3.1.1" } }, + "convict": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/convict/-/convict-6.0.0.tgz", + "integrity": "sha512-osfPkv5yjVoZqrTWBXuh/ABGpFoaJplbt0WXr0CodR4CSWt8UnzY4PSUyRz/+5BX5YUtWcToG29Kr0B6xhdIMg==", + "requires": { + "lodash.clonedeep": "^4.5.0", + "yargs-parser": "^18.1.3" + } + }, "core-util-is": { "version": "1.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "create-error-class": { @@ -790,7 +812,7 @@ }, "cycle": { "version": "1.0.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" }, "dashdash": { @@ -808,12 +830,17 @@ }, "debug": { "version": "2.6.9", - "resolved": false, - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -890,7 +917,7 @@ }, "ee-first": { "version": "1.1.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "end-of-stream": { @@ -921,7 +948,7 @@ }, "escape-string-regexp": { "version": "1.0.5", - "resolved": false, + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { @@ -2653,7 +2680,7 @@ }, "eyes": { "version": "0.1.8", - "resolved": false, + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" }, "fast-deep-equal": { @@ -2783,7 +2810,7 @@ "gcp-metadata": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-0.3.1.tgz", - "integrity": "sha1-MTgURW58PQ7rj4sISzNXnohvgpo=", + "integrity": "sha512-5kJPX/RXuqoLmHiOOgkSDk/LI0QaXpEvZ3pvQP4ifjGGDKZKVSOjL/GcDjXA5kLxppFCOjmmsu0Uoop9d1upaQ==", "requires": { "extend": "^3.0.0", "retry-request": "^3.0.0" @@ -2796,7 +2823,7 @@ }, "generate-object-property": { "version": "1.2.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", "requires": { "is-property": "^1.0.0" @@ -2857,7 +2884,7 @@ "google-auto-auth": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/google-auto-auth/-/google-auto-auth-0.7.2.tgz", - "integrity": "sha1-v5NS1cSgiXvzH9nEkQKLdl++px4=", + "integrity": "sha512-ux2n2AE2g3+vcLXwL4dP/M12SFMRX5dzCzBfhAEkTeAB7dpyGdOIEj7nmUx0BHKaCcUQrRWg9kT63X/Mmtk1+A==", "requires": { "async": "^2.3.0", "gcp-metadata": "^0.3.0", @@ -2886,7 +2913,7 @@ "gtoken": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-1.2.3.tgz", - "integrity": "sha1-VQlXG4r9QyLhJM9mz2gRUoTEdtg=", + "integrity": "sha512-wQAJflfoqSgMWrSBk9Fg86q+sd6s7y6uJhIvvIPz++RElGlMtEqsdAR2oWwZ/WTEtp7P9xFbJRrT976oRgzJ/w==", "requires": { "google-p12-pem": "^0.1.0", "jws": "^3.0.0", @@ -2910,7 +2937,7 @@ }, "has-ansi": { "version": "2.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { "ansi-regex": "^2.0.0" @@ -3158,7 +3185,7 @@ }, "is-property": { "version": "1.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" }, "is-stream": { @@ -3178,12 +3205,12 @@ }, "isarray": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isstream": { "version": "0.1.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "jmespath": { @@ -3191,6 +3218,22 @@ "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + } + } + }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", @@ -3284,6 +3327,11 @@ "resolved": false, "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -3480,7 +3528,7 @@ }, "ms": { "version": "2.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "needle": { @@ -3648,7 +3696,7 @@ }, "on-finished": { "version": "2.3.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "requires": { "ee-first": "1.1.1" @@ -3661,7 +3709,7 @@ }, "once": { "version": "1.4.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { "wrappy": "1" @@ -3965,12 +4013,12 @@ }, "pinkie": { "version": "2.0.4", - "resolved": false, + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" }, "pinkie-promise": { "version": "2.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "requires": { "pinkie": "^2.0.0" @@ -4529,6 +4577,11 @@ } } }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, "sql": { "version": "0.34.0", "resolved": "https://registry.npmjs.org/sql/-/sql-0.34.0.tgz", @@ -4567,7 +4620,7 @@ }, "stack-trace": { "version": "0.0.10", - "resolved": false, + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, "statuses": { @@ -4618,7 +4671,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { "ansi-regex": "^2.0.0" @@ -4651,7 +4704,7 @@ }, "supports-color": { "version": "2.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" }, "tar": { @@ -4682,7 +4735,7 @@ }, "through": { "version": "2.3.8", - "resolved": false, + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { @@ -4746,7 +4799,7 @@ }, "typedarray": { "version": "0.0.6", - "resolved": false, + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "ultron": { @@ -4787,7 +4840,7 @@ }, "util-deprecate": { "version": "1.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "uuid": { @@ -4881,7 +4934,7 @@ }, "wrappy": { "version": "1.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { @@ -4924,6 +4977,15 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } } diff --git a/server/package.json b/server/package.json index 20217695db..4f6856e024 100644 --- a/server/package.json +++ b/server/package.json @@ -24,12 +24,14 @@ "bluebird": "3.5.0", "boolean": "^0.1.3", "connect-timeout": "1.9.0", + "convict": "6.0.0", "eslint": "2.13.1", "express": "3.21.2", "fb": "1.0.2", "http-proxy": "1.18.1", "intercom-client": "2.9.4", "intercom.io": "1.5.0", + "js-yaml": "3.14.0", "lru-cache": "3.0.0", "mimelib": "0.2.19", "nodemailer": "^6.4.6", diff --git a/server/src/server.js b/server/src/server.js index c417390087..ce434e5bc7 100644 --- a/server/src/server.js +++ b/server/src/server.js @@ -2,11 +2,22 @@ "use strict"; +let POLIS_ROOT = process.env.POLIS_ROOT +var config = require(POLIS_ROOT + 'config/config.js'); + +// keep these lines to help with debugging conversion +// from process.env to config.get +// console.log("process.env >>"+process.env.GOOGLE_API_KEY+"<<") +// console.log("config.get >>"+config.get('google_api_key')+"<<") + const Config = require('./config'); const akismetLib = require('akismet'); const AWS = require('aws-sdk'); -AWS.config.set('region', process.env.AWS_REGION); +AWS.config.set('region', config.get('aws_region')); +AWS.config.set('accessKeyId', config.get('aws_access_key_id')); +AWS.config.set('secretAccessKey', config.get('aws_secret_access_key')); + const badwords = require('badwords/object'); const Promise = require('bluebird'); const http = require('http'); From 32e220e5262011c615e3af7709cc304e3d61e1ba Mon Sep 17 00:00:00 2001 From: Chris Krenn Date: Sat, 17 Apr 2021 19:02:50 -0700 Subject: [PATCH 02/49] fixed sk.js --- client-participation/js/strings/sk.js | 14 +- .../polis/client-participation/embeds.spec.js | 156 ---------- .../client-participation/integration.spec.js | 273 ------------------ 3 files changed, 7 insertions(+), 436 deletions(-) delete mode 100644 e2e/cypress/integration/polis/client-participation/embeds.spec.js delete mode 100644 e2e/cypress/integration/polis/client-participation/integration.spec.js diff --git a/client-participation/js/strings/sk.js b/client-participation/js/strings/sk.js index 36665d0fb3..38cec30573 100644 --- a/client-participation/js/strings/sk.js +++ b/client-participation/js/strings/sk.js @@ -30,7 +30,7 @@ s.info = "Info"; s.addPolisToYourSite = ""; s.privacy = "Súkromie"; s.TOS = "TOS"; -s.writePrompt = "Zdieľajte váš názor, či návrh na riešenie..."; +s.writePrompt = "Zdieľajte váš názor, či návrh na riešenie problému..."; s.anonPerson = "Anonym"; s.helpWhatAmISeeingTitle = "Čo vidím?"; s.helpWhatAmISeeing = "Ľudia, ktorí hlasovali podobne sú zoskupení v skupinách nižšie. Kliknite na konkrétnu skupinu pre zobrazenie ich názorov a postojov."; @@ -59,7 +59,7 @@ s.pctDisagreedOfGroup = "{{pct}}% zo skupiny {{group}} nesúhlasilo"; s.pctDisagreedLong = "{{pct}}% zo všetkých hlasujúcich o tomto výroku {{comment_id}} nesúhlasilo."; s.pctAgreedOfGroupLong = "{{pct}}% zo skupiny {{group}}, ktorí hlasovali za výrok {{comment_id}} súhlasilo."; s.pctDisagreedOfGroupLong = "{{pct}}% zo skupiny {{group}}, ktorí hlasovali za výrok {{comment_id}} nesúhlasilo."; -s.commentSent = "Výrok úspešne pridaný! Váš názor a to ako ste hlasovali uvidia len ostatní účastníci."; +s.commentSent = "Výrok úspešne pridaný! Váš názor a to, ako ste hlasovali uvidia ostatní účastníci diskusie."; s.commentSendFailed = "Chyba pri zadaní výroku."; s.commentSendFailedEmpty = "Chyba pri zadaní výroku - Políčko pre výrok nemôže byť prázdne."; s.commentSendFailedTooLong = "Chyba pri zadaní výroku - Výrok príliš dlhý."; @@ -77,18 +77,18 @@ s.connectToVotePrompt = "Pridaj svoju identitu pre hlasovanie. Na vašu časovú s.tip = "Tip:"; s.commentWritingTipsHintsHeader = "Tipy pre písanie výrokov"; s.tipCharLimit = "Výroky sú limitované na {{char_limit}} znakov."; -s.tipCommentsRandom = "Návrhy sú zobrazované náhodne a neodpovedáte priamo na výroky ostatných účastníkov."; -s.tipOneIdea = "Rozložte dlhé výroky obsahujúce viacero myšlienok. Ostatným úšatníkom sa tak bude ľahšie hlasovať o vašom výroku."; +s.tipCommentsRandom = "Návrhy sú zobrazované náhodne. Vaše návrhy sú všeobecné a nepredstavujú odpoveď na výroky ostatných účastníkov."; +s.tipOneIdea = "Rozložte dlhé výroky obsahujúce viacero myšlienok. Ostatným účatníkom sa tak bude ľahšie hlasovať o vašom výroku."; s.tipNoQuestions = 'Výroky by nemali byť v podobe otázok. Účastníci budú hlasovať "súhlasím" alebo "nesúhlasím" o vašich výrokoch.'; s.commentTooLongByChars = "Limit dĺžky výroku presiahnutý o {{CHARACTERS_COUNT}} znakov."; s.notSentSinceDemo = "(not really, this is a demo)"; s.submitComment = "Zdieľať"; s.tipStarred = "Označené ako dôležité."; -s.participantHelpWelcomeText = "Vitajte v novom druhu online diskusie - hlasujte o ostatných návrhoch a zdieľajte vaše názory. Len tak dospejeme ku konsenzu"; +s.participantHelpWelcomeText = "Vitajte v novom druhu online diskusie - hlasujte o návrhoch a pridajte svoje vlastné. Len tak sa priblížime ku konsenzu"; s.participantHelpGroupsText = "Účastníci, ktorí hlasovali podobne sú zoskupení. Kliknite na skupinu pre zobrazenie názorov, ktoré zdieľajú. ...ďalšie"; s.participantHelpGroupsNotYetText = "Vizualizácia sa zobrazí keď 7 účastníkov začalo hlasovať"; -s.helpWhatAreGroupsDetail = "

You've probably seen 'recommended products' on Amazon, or 'recommended movies' on Netflix. Each of those services uses statistics to group the user with people who buy and watch similar things, then show them things that those people bought or watched.

When a user votes on statements, they are grouped with people who voted like they did! You can see those groups below. Each is made up of people who have similar opinions. There are fascinating insights to discover in each conversation. Go ahead - click a group to see what brought them together and what makes them unique!

"; -s.socialConnectPrompt = "Optionally connect to see friends and people you follow in the visualization."; +s.helpWhatAreGroupsDetail = '

Pravdepodobne ste už videli "odporúčané produkty" na Amazone, alebo "odporúčané filmy" na Netflixe. Všetky tieto internetové služby využívajú štatistiku na zoskupenie uživateľov, ktorí kupujú, či sledujú podobné veci. Tieto služby im následne odporúčajú produkty, ktoré si ľudia z ich skupiny už kúpili, či pozreli.

Keď účastník konverzácie hlasuje o jednotlivých komentároch, tak algoritmus ho zoskupí s účastníkmi, ktorí hlasovali podobne. Grafické vyobrazenie týchto skupín môžte vidieť nižšie. Každá skupina je zložená z ľudí, kotrí majú podobný názor na problematiku. Práve to nám umožňuje viesť konštruktívnu diskusiu a zistiť unikátne poznatky. Neváhajte, kliknite na ľubovolnú skupinu nižšie a zistite čo nás rozdeľuje a čo spája.

'; +s.socialConnectPrompt = "Môžte si pripojiť svoj účet, aby ste vo vizualizácii videli vašich priateľov a ľudí, ktorých sledujete."; s.connectFbButton = "Pripojte sa s Facebookom"; s.connectTwButton = "Pripojte sa s Twitterom"; s.polis_err_reg_fb_verification_email_sent = "Prosím, verifikujte váš mail a následne sa sem vráťte pre pokračovanie."; diff --git a/e2e/cypress/integration/polis/client-participation/embeds.spec.js b/e2e/cypress/integration/polis/client-participation/embeds.spec.js deleted file mode 100644 index ff7c3ed998..0000000000 --- a/e2e/cypress/integration/polis/client-participation/embeds.spec.js +++ /dev/null @@ -1,156 +0,0 @@ -describe('Embedded Conversations', () => { - // This test requires overriding client-admin/embed.html with - // e2e/cypress/fixtures/html/embeds.html - const POLIS_DOMAIN = Cypress.config().baseUrl.replace('https://', '') - const CONVO_DESCRIPTION = 'This is dummy description for embed tests.' - const CONVO_TOPIC = 'Embed test topic' - - beforeEach(function () { - cy.createConvo('moderator').then(() => { - cy.seedComment('Seed statement 1', this.convoId) - cy.get('[data-test-id="description"]').type(CONVO_DESCRIPTION).blur() - cy.get('[data-test-id="topic"]').type(CONVO_TOPIC).blur() - }) - }) - - it('renders a default embed', function () { - cy.logout() - cy.visit(`${Cypress.config().baseUrl}/embed.html?polisDomain=${POLIS_DOMAIN}&data-conversation_id=${this.convoId}`) - cy.enter(`#polis_${this.convoId}`).then(cyframe => { - cyframe().find('div[data-view-name="root"]').as('iframe') - cyframe().find('#readReactView').as('vote-widget') - cyframe().find('#comment_form_textarea').as('comment-widget') - cyframe().find('#helpTextWelcome').as('vote-help') - cyframe().find('.POLIS_HEADLINE').as('headline') - cyframe().find('svg.svgCenter').as('footer-logo') - cyframe().find('#vis_section').as('vis') - }) - - cy.get('@iframe').should('be.visible') - cy.get('@vote-widget').should('be.visible') - cy.get('@comment-widget').should('be.visible') - cy.get('@vote-help').should('be.visible') - cy.get('@headline').should('contain', CONVO_DESCRIPTION) - cy.get('@footer-logo').should('be.visible') - cy.get('@headline').should('contain', CONVO_TOPIC) - // TODO add full votes to check this - //cy.get('@vis').should('be.visible') - }) - - it('hides voting when user-can-vote (ucv) is OFF', function () { - cy.logout() - cy.visit(`${Cypress.config().baseUrl}/embed.html?polisDomain=${POLIS_DOMAIN}&data-conversation_id=${this.convoId}&data-ucv=false`) - cy.enter(`#polis_${this.convoId}`).then(cyframe => { - cyframe().find('div[data-view-name="root"]').as('iframe') - cyframe().find('#readReactView').as('vote-widget') - }) - - cy.get('@iframe').should('be.visible') - cy.get('@vote-widget').should('not.be.visible') - }) - - it('hides commenting when user-can-write (ucw) is OFF', function () { - cy.logout() - cy.visit(`${Cypress.config().baseUrl}/embed.html?polisDomain=${POLIS_DOMAIN}&data-conversation_id=${this.convoId}&data-ucw=false`) - cy.enter(`#polis_${this.convoId}`).then(cyframe => { - cyframe().find('div[data-view-name="root"]').as('iframe') - cyframe().find('#comment_form_textarea').as('comment-widget') - }) - - cy.get('@iframe').should('be.visible') - cy.get('@comment-widget').should('not.be.visible') - }) - - it('hides help text when user-can-see-help (ucsh) is OFF', function () { - cy.logout() - cy.visit(`${Cypress.config().baseUrl}/embed.html?polisDomain=${POLIS_DOMAIN}&data-conversation_id=${this.convoId}&data-ucsh=false`) - cy.enter(`#polis_${this.convoId}`).then(cyframe => { - cyframe().find('div[data-view-name="root"]').as('iframe') - cyframe().find('#helpTextWelcome').as('vote-help') - }) - - cy.get('@iframe').should('be.visible') - cy.get('@vote-help').should('not.be.visible') - }) - - it('hides description when user-can-see-description (ucsd) is OFF', function () { - cy.logout() - cy.visit(`${Cypress.config().baseUrl}/embed.html?polisDomain=${POLIS_DOMAIN}&data-conversation_id=${this.convoId}&data-ucsd=false`) - cy.enter(`#polis_${this.convoId}`).then(cyframe => { - cyframe().find('div[data-view-name="root"]').as('iframe') - cyframe().find('.POLIS_HEADLINE').as('headline') - }) - - cy.get('@iframe').should('be.visible') - cy.get('@headline').should('not.contain', CONVO_DESCRIPTION) - }) - - // Seems convo owner needs special permission to disable branding. - it.skip('hides footer when user-can-see-footer (ucsf) is OFF', function () { - cy.logout() - cy.visit(`${Cypress.config().baseUrl}/embed.html?polisDomain=${POLIS_DOMAIN}&data-conversation_id=${this.convoId}&data-ucsf=false`) - cy.enter(`#polis_${this.convoId}`).then(cyframe => { - cyframe().find('div[data-view-name="root"]').as('iframe') - cyframe().find('svg.svgCenter').as('footer-logo') - }) - - cy.get('@iframe').should('be.visible') - cy.get('@footer-logo').should('not.be.visible') - }) - - it('hides vis when user-can-see-vis (ucsv) is OFF', function () { - cy.logout() - cy.visit(`${Cypress.config().baseUrl}/embed.html?polisDomain=${POLIS_DOMAIN}&data-conversation_id=${this.convoId}&data-ucsv=false`) - cy.enter(`#polis_${this.convoId}`).then(cyframe => { - cyframe().find('div[data-view-name="root"]').as('iframe') - cyframe().find('#vis_section').as('vis') - }) - - cy.get('@iframe').should('be.visible') - cy.get('@vis').should('not.be.visible') - }) - - it('hides topic when user-can-see-topic (ucst) is OFF', function () { - cy.logout() - cy.visit(`${Cypress.config().baseUrl}/embed.html?polisDomain=${POLIS_DOMAIN}&data-conversation_id=${this.convoId}&data-ucst=false`) - cy.enter(`#polis_${this.convoId}`).then(cyframe => { - cyframe().find('div[data-view-name="root"]').as('iframe') - cyframe().find('.POLIS_HEADLINE').as('headline') - }) - - cy.get('@iframe').should('be.visible') - cy.get('@headline').should('not.contain', CONVO_TOPIC) - }) - // TODO: test other data-* params - // - data-x_name - // - data-x_profile_image_url - // See: https://roamresearch.com/#/app/polis-methods/page/hwRb6tXIA - - // This is currently broken and has a pending PR to fix. - // TODO fix later - it.skip('creates xid when provided', function () { - cy.logout() - cy.visit(`${Cypress.config().baseUrl}/embed.html?polisDomain=${POLIS_DOMAIN}&data-conversation_id=${this.convoId}`) - cy.enter(`#polis_${this.convoId}`).then(cyframe => { - cyframe().find('div[data-view-name="root"]').as('iframe') - cy.get('@iframe').should('be.visible') - }) - cy.task('dbQuery', { - sql: ` - `, - values: [ - ], - }) - }) - - it.skip('does not create xid when not provided', function () { - cy.logout() - cy.visit(`${Cypress.config().baseUrl}/embed.html?polisDomain=${POLIS_DOMAIN}&data-conversation_id=${this.convoId}&xid=foobar`) - cy.enter(`#polis_${this.convoId}`).then(cyframe => { - cyframe().find('div[data-view-name="root"]').as('iframe') - cy.get('@iframe').should('be.visible') - }) - }) - - // TODO: test postMessage events -}) diff --git a/e2e/cypress/integration/polis/client-participation/integration.spec.js b/e2e/cypress/integration/polis/client-participation/integration.spec.js deleted file mode 100644 index c97ccd3f2b..0000000000 --- a/e2e/cypress/integration/polis/client-participation/integration.spec.js +++ /dev/null @@ -1,273 +0,0 @@ -describe('Integrated Conversations', () => { - // This test requires overriding client-admin/embed.html with - // e2e/cypress/fixtures/html/embeds.html - const POLIS_DOMAIN = Cypress.config().baseUrl.replace('https://', '') - const CONVO_DESCRIPTION = 'This is dummy description for embed tests.' - const CONVO_TOPIC = 'Integration test topic' - const CONVO_DEFAULTS = { - topic: null, - description: null, - - vis_type: 0, - write_type: 1, - help_type: 1, - subscribe_type: 1, - auth_opt_fb: null, - auth_opt_tw: null, - - strict_moderation: false, - auth_needed_to_write: null, - auth_needed_to_vote: null, - } - - before(function () { - cy.login('moderator') - cy.visit('/integrate') - cy.get('pre').invoke('text').then((snippet) => { - const reSiteId = /'(polis_site_id_[a-zA-Z0-9]+)'/gm - const match = reSiteId.exec(snippet) - cy.wrap(match[1]).as('siteId') - }) - }) - - beforeEach(function () { - // xip.io is maybe throttling these fast tests. - cy.wait(500) - }) - - it('creates a convo with defaults', function () { - cy.logout() - const pageId = Math.floor(Date.now() / 1000) - const integrationUrl = `${Cypress.config().baseUrl}/embed.html?polisDomain=${POLIS_DOMAIN}&data-page_id=${pageId}&data-site_id=${this.siteId}` - cy.visit(integrationUrl) - cy.enter(`#polis_${this.siteId}_${pageId}`).then(cyframe => { - cyframe().find('div[data-view-name="root"]').as('iframe') - cy.get('@iframe').should('be.visible') - }) - - cy.login('moderator') - cy.request('GET', Cypress.config().apiPath + '/conversations?include_all_conversations_i_am_in=true') - .then(resp => { - const mostRecentConvo = resp.body.shift() - for (const [field, val] of Object.entries(CONVO_DEFAULTS)) { - cy.wrap(mostRecentConvo).its(field).should('equal', val) - } - cy.wrap(mostRecentConvo).its('parent_url').should('equal', integrationUrl) - - // Ensure integration url also showing in UI locations. - cy.visit(`/m/${mostRecentConvo.conversation_id}/share`) - cy.get('*[data-test-id="embed-page"]').should('contain', integrationUrl) - cy.visit('/') - cy.get('*[data-test-id="embed-page"]').first().should('contain', integrationUrl) - }) - }) - - it('creates a convo with topic', function () { - cy.logout() - const pageId = Math.floor(Date.now() / 1000) - const integrationUrl = `${Cypress.config().baseUrl}/embed.html?polisDomain=${POLIS_DOMAIN}&data-page_id=${pageId}&data-site_id=${this.siteId}&data-topic=${CONVO_TOPIC}` - cy.visit(integrationUrl) - cy.enter(`#polis_${this.siteId}_${pageId}`).then(cyframe => { - cyframe().find('div[data-view-name="root"]').as('iframe') - cy.get('@iframe').should('be.visible') - }) - - cy.login('moderator') - cy.request('GET', Cypress.config().apiPath + '/conversations?include_all_conversations_i_am_in=true') - .then(resp => { - const mostRecentConvo = resp.body.shift() - cy.wrap(mostRecentConvo).its('topic').should('equal', CONVO_TOPIC) - }) - }) - - // Feature doesn't yet exist yet. - // See: https://github.com/pol-is/polis/issues/315 - it.skip('creates a convo with description', function () { - cy.logout() - const pageId = Math.floor(Date.now() / 1000) - const integrationUrl = `${Cypress.config().baseUrl}/embed.html?polisDomain=${POLIS_DOMAIN}&data-page_id=${pageId}&data-site_id=${this.siteId}&data-topic=${CONVO_DESCRIPTION}` - cy.visit(integrationUrl) - cy.enter(`#polis_${this.siteId}_${pageId}`).then(cyframe => { - cyframe().find('div[data-view-name="root"]').as('iframe') - cy.get('@iframe').should('be.visible') - }) - - cy.login('moderator') - cy.request('GET', Cypress.config().apiPath + '/conversations?include_all_conversations_i_am_in=true') - .then(resp => { - const mostRecentConvo = resp.body.shift() - cy.wrap(mostRecentConvo).its('description').should('equal', CONVO_DESCRIPTION) - }) - }) - - it('creates a convo with vis enabled', function () { - cy.logout() - const pageId = Math.floor(Date.now() / 1000) - const integrationUrl = `${Cypress.config().baseUrl}/embed.html?polisDomain=${POLIS_DOMAIN}&data-page_id=${pageId}&data-site_id=${this.siteId}&data-show_vis=true` - cy.visit(integrationUrl) - cy.enter(`#polis_${this.siteId}_${pageId}`).then(cyframe => { - cyframe().find('div[data-view-name="root"]').as('iframe') - cy.get('@iframe').should('be.visible') - }) - - cy.login('moderator') - cy.request('GET', Cypress.config().apiPath + '/conversations?include_all_conversations_i_am_in=true') - .then(resp => { - const mostRecentConvo = resp.body.shift() - cy.wrap(mostRecentConvo).its('vis_type').should('equal', 1) - }) - }) - - // Not working - it.skip('creates a convo with top comments style vis', function () { - cy.logout() - const pageId = Math.floor(Date.now() / 1000) - const integrationUrl = `${Cypress.config().baseUrl}/embed.html?polisDomain=${POLIS_DOMAIN}&data-page_id=${pageId}&data-site_id=${this.siteId}&data-vis_type=2` - cy.visit(integrationUrl) - cy.enter(`#polis_${this.siteId}_${pageId}`).then(cyframe => { - cyframe().find('div[data-view-name="root"]').as('iframe') - cy.get('@iframe').should('be.visible') - }) - - cy.login('moderator') - cy.request('GET', Cypress.config().apiPath + '/conversations?include_all_conversations_i_am_in=true') - .then(resp => { - const mostRecentConvo = resp.body.shift() - cy.wrap(mostRecentConvo).its('vis_type').should('equal', 2) - }) - }) - - it.skip('creates a convo with commenting disabled', function () { - cy.logout() - const pageId = Math.floor(Date.now() / 1000) - const integrationUrl = `${Cypress.config().baseUrl}/embed.html?polisDomain=${POLIS_DOMAIN}&data-page_id=${pageId}&data-site_id=${this.siteId}&data-write_type=0` - cy.visit(integrationUrl) - cy.enter(`#polis_${this.siteId}_${pageId}`).then(cyframe => { - cyframe().find('div[data-view-name="root"]').as('iframe') - cy.get('@iframe').should('be.visible') - }) - - cy.login('moderator') - cy.request('GET', Cypress.config().apiPath + '/conversations?include_all_conversations_i_am_in=true') - .then(resp => { - const mostRecentConvo = resp.body.shift() - cy.wrap(mostRecentConvo).its('write_type').should('equal', 0) - }) - }) - - // Doesn't seem to work right now. - it.skip('creates a convo with help disabled', function () { - cy.logout() - const pageId = Math.floor(Date.now() / 1000) - const integrationUrl = `${Cypress.config().baseUrl}/embed.html?polisDomain=${POLIS_DOMAIN}&data-page_id=${pageId}&data-site_id=${this.siteId}&data-help_type=0` - cy.visit(integrationUrl) - cy.enter(`#polis_${this.siteId}_${pageId}`).then(cyframe => { - cyframe().find('div[data-view-name="root"]').as('iframe') - cy.get('@iframe').should('be.visible') - }) - - cy.login('moderator') - cy.request('GET', Cypress.config().apiPath + '/conversations?include_all_conversations_i_am_in=true') - .then(resp => { - const mostRecentConvo = resp.body.shift() - cy.wrap(mostRecentConvo).its('help_type').should('equal', 0) - }) - }) - - // Doesn't seem to work right now. - it.skip('creates a convo with new comment subscriptions disabled', function () { - cy.logout() - const pageId = Math.floor(Date.now() / 1000) - const integrationUrl = `${Cypress.config().baseUrl}/embed.html?polisDomain=${POLIS_DOMAIN}&data-page_id=${pageId}&data-site_id=${this.siteId}&data-subscribe_type=0` - cy.visit(integrationUrl) - cy.enter(`#polis_${this.siteId}_${pageId}`).then(cyframe => { - cyframe().find('div[data-view-name="root"]').as('iframe') - cy.get('@iframe').should('be.visible') - }) - - cy.login('moderator') - cy.request('GET', Cypress.config().apiPath + '/conversations?include_all_conversations_i_am_in=true') - .then(resp => { - const mostRecentConvo = resp.body.shift() - cy.wrap(mostRecentConvo).its('subscribe_type').should('equal', 0) - }) - }) - - it('creates a convo with login required to vote', function () { - cy.logout() - const pageId = Math.floor(Date.now() / 1000) - const integrationUrl = `${Cypress.config().baseUrl}/embed.html?polisDomain=${POLIS_DOMAIN}&data-page_id=${pageId}&data-site_id=${this.siteId}&data-auth_needed_to_vote=true` - cy.visit(integrationUrl) - cy.enter(`#polis_${this.siteId}_${pageId}`).then(cyframe => { - cyframe().find('div[data-view-name="root"]').as('iframe') - cy.get('@iframe').should('be.visible') - }) - - cy.login('moderator') - cy.request('GET', Cypress.config().apiPath + '/conversations?include_all_conversations_i_am_in=true') - .then(resp => { - const mostRecentConvo = resp.body.shift() - cy.wrap(mostRecentConvo).its('auth_needed_to_vote').should('equal', true) - }) - }) - - it('creates a convo with login required to comment', function () { - cy.logout() - const pageId = Math.floor(Date.now() / 1000) - const integrationUrl = `${Cypress.config().baseUrl}/embed.html?polisDomain=${POLIS_DOMAIN}&data-page_id=${pageId}&data-site_id=${this.siteId}&data-auth_needed_to_write=true` - cy.visit(integrationUrl) - cy.enter(`#polis_${this.siteId}_${pageId}`).then(cyframe => { - cyframe().find('div[data-view-name="root"]').as('iframe') - cy.get('@iframe').should('be.visible') - }) - - cy.login('moderator') - cy.request('GET', Cypress.config().apiPath + '/conversations?include_all_conversations_i_am_in=true') - .then(resp => { - const mostRecentConvo = resp.body.shift() - cy.wrap(mostRecentConvo).its('auth_needed_to_write').should('equal', true) - }) - }) - - it('creates a convo with facebook login button enabled', function () { - cy.logout() - const pageId = Math.floor(Date.now() / 1000) - const integrationUrl = `${Cypress.config().baseUrl}/embed.html?polisDomain=${POLIS_DOMAIN}&data-page_id=${pageId}&data-site_id=${this.siteId}&data-auth_opt_fb=true` - cy.visit(integrationUrl) - cy.enter(`#polis_${this.siteId}_${pageId}`).then(cyframe => { - cyframe().find('div[data-view-name="root"]').as('iframe') - cy.get('@iframe').should('be.visible') - }) - - cy.login('moderator') - cy.request('GET', Cypress.config().apiPath + '/conversations?include_all_conversations_i_am_in=true') - .then(resp => { - const mostRecentConvo = resp.body.shift() - cy.wrap(mostRecentConvo).its('auth_opt_fb').should('equal', true) - }) - }) - - it('creates a convo with twitter login button enabled', function () { - cy.logout() - const pageId = Math.floor(Date.now() / 1000) - const integrationUrl = `${Cypress.config().baseUrl}/embed.html?polisDomain=${POLIS_DOMAIN}&data-page_id=${pageId}&data-site_id=${this.siteId}&data-auth_opt_tw=true` - cy.visit(integrationUrl) - cy.enter(`#polis_${this.siteId}_${pageId}`).then(cyframe => { - cyframe().find('div[data-view-name="root"]').as('iframe') - cy.get('@iframe').should('be.visible') - }) - - cy.login('moderator') - cy.request('GET', Cypress.config().apiPath + '/conversations?include_all_conversations_i_am_in=true') - .then(resp => { - const mostRecentConvo = resp.body.shift() - cy.wrap(mostRecentConvo).its('auth_opt_tw').should('equal', true) - }) - }) - - // deprecated data-* params: - // - data-show_share - bool. sets socialbtn_type from 0 to 1. not in ui. no apparent effect. - // - data-auth_opt_allow_3rdparty - bool. no apparent effect. - // - data-dwok. (domain whitelist override key) unsure. - // - data-bg_white - bool. toggles bgcolor db value, but no effect in ui. -}) From 619364b678d3fa6630a5fe4f5c0864be9712880f Mon Sep 17 00:00:00 2001 From: Chris Krenn Date: Tue, 14 Dec 2021 17:47:38 +0000 Subject: [PATCH 03/49] disabled mailserver; everything else seems to be working --- README-convict.md | 16 ++++++++++++++++ docker-compose.yml | 18 +++++++++--------- e2e/package.json | 1 + 3 files changed, 26 insertions(+), 9 deletions(-) create mode 100644 README-convict.md diff --git a/README-convict.md b/README-convict.md new file mode 100644 index 0000000000..a43b15f510 --- /dev/null +++ b/README-convict.md @@ -0,0 +1,16 @@ +# after login + +cd polis +sudo docker-compose ps # current docker status +sudo docker-compose up --build -d # rebuild what is necessary, start apps and detach +sudo docker-compose down # stop apps + +# docker-compose reads docker-compose.yml file from current directory + +# for testing: +cd e2e +npm run e2e:headless + + +sudo reboot # reboot whole GCP server + diff --git a/docker-compose.yml b/docker-compose.yml index b86bedb001..c137ee4828 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -128,15 +128,15 @@ services: args: GIT_HASH: "${GIT_HASH}" - maildev: - image: maildev/maildev:1.1.0 - networks: - - "polis-net" - ports: - # User interface - - "1080:80" - # SMTP port - - "25:25" + # maildev: + # image: maildev/maildev:1.1.0 + # networks: + # - "polis-net" + # ports: + # # User interface + # - "1080:80" + # # SMTP port + # - "25:25" config: build: diff --git a/e2e/package.json b/e2e/package.json index 39c1adf5c1..be2623446d 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -8,6 +8,7 @@ "lint": "eslint .", "lint:fix": "eslint --fix .", "test": "npm run e2e:all", + "e2e:headless": "cypress run --spec 'cypress/integration/polis/**'", "e2e:all": "cypress run --spec 'cypress/integration/polis/**' --browser=chrome", "e2e:minimal": "cypress run --spec '**/polis/**/!(*.secrets).spec.js,!**/embeds.spec.js' --browser=chrome", "e2e:standalone": "cypress run --spec '**/polis/**/!(*.secrets).spec.js' --browser=chrome", From d63e02c8e538f982768ad692873447ccad04d528 Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Wed, 15 Dec 2021 17:21:25 +0100 Subject: [PATCH 04/49] Changed process.env to config.get in app.js --- server/app.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/server/app.js b/server/app.js index 8cf3aa9a9c..47d84109a7 100644 --- a/server/app.js +++ b/server/app.js @@ -19,6 +19,8 @@ var helpersInitialized = new Promise(function(resolve, reject) { resolve(server.initializePolisHelpers()); }); +var config = require(POLIS_ROOT + 'config/config.js'); + helpersInitialized.then(function(o) { @@ -1439,9 +1441,9 @@ helpersInitialized.then(function(o) { app.get(/^\/[^(api\/)]?.*/, proxy); } - app.listen(process.env.PORT); + app.listen(config.get('port')); - winston.log("info", 'started on port ' + process.env.PORT); + winston.log("info", 'started on port ' + config.get('port')); }, function(err) { console.error("failed to init server"); From 06ea1b0fa3cc7e4cc0f0d1a1fe47cfa59ef032b6 Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Wed, 15 Dec 2021 18:07:47 +0100 Subject: [PATCH 05/49] Fix usage of config in app.js --- server/app.js | 1 + 1 file changed, 1 insertion(+) diff --git a/server/app.js b/server/app.js index 47d84109a7..b49ad2887a 100644 --- a/server/app.js +++ b/server/app.js @@ -19,6 +19,7 @@ var helpersInitialized = new Promise(function(resolve, reject) { resolve(server.initializePolisHelpers()); }); +let POLIS_ROOT = process.env.POLIS_ROOT var config = require(POLIS_ROOT + 'config/config.js'); From 71083e561292469a202cb2e136ba0313c2b58a29 Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Thu, 16 Dec 2021 16:14:10 +0100 Subject: [PATCH 06/49] Change process.env to config.get in server.js --- server/src/server.js | 134 +++++++++++++++++++++---------------------- 1 file changed, 67 insertions(+), 67 deletions(-) diff --git a/server/src/server.js b/server/src/server.js index 28d86a69d2..d10fc100e8 100644 --- a/server/src/server.js +++ b/server/src/server.js @@ -43,12 +43,12 @@ const OAuth = require("oauth"); // }); // const postmark = require("postmark")(process.env.POSTMARK_API_KEY); const querystring = require("querystring"); -const devMode = isTrue(process.env.DEV_MODE); +const devMode = isTrue(config.get('dev_mode')); const replaceStream = require("replacestream"); const responseTime = require("response-time"); const request = require("request-promise"); // includes Request, but adds promise methods const s3Client = new AWS.S3({ apiVersion: "2006-03-01" }); -const stripe = require("stripe")(process.env.STRIPE_SECRET_KEY); +const stripe = require("stripe")(config.get('stripe_secret_key')); const LruCache = require("lru-cache"); const timeout = require("connect-timeout"); const zlib = require("zlib"); @@ -100,7 +100,7 @@ const SQL = require("./db/sql"); // # Slack setup var WebClient = require("@slack/client").WebClient; -var web = new WebClient(process.env.SLACK_API_TOKEN); +var web = new WebClient(config.get('slack_api_token')); // const winston = require("winston"); // # notifications const winston = console; @@ -111,8 +111,8 @@ const sendTextEmailWithBackupOnly = emailSenders.sendTextEmailWithBackupOnly; const resolveWith = (x) => { return Promise.resolve(x); }; -const intercomClient = !isTrue(process.env.DISABLE_INTERCOM) - ? new IntercomOfficial.Client({ token: process.env.INTERCOM_ACCESS_TOKEN }) +const intercomClient = !isTrue(config.get('disable_intercom')) + ? new IntercomOfficial.Client({ token: config.get('intercom_access_token') }) : { leads: { create: resolveWith({ body: { user_id: "null_intercom_user_id" } }), @@ -166,15 +166,15 @@ Promise.onPossiblyUnhandledRejection(function (err) { // throw err; // not throwing since we're printing stack traces anyway }); -const adminEmailDataExport = process.env.ADMIN_EMAIL_DATA_EXPORT || ""; -const adminEmailDataExportTest = process.env.ADMIN_EMAIL_DATA_EXPORT_TEST || ""; -const adminEmailEmailTest = process.env.ADMIN_EMAIL_EMAIL_TEST || ""; +const adminEmailDataExport = config.get('admin_email_data_export') || ""; +const adminEmailDataExportTest = config.get('admin_email_data_export_test') || ""; +const adminEmailEmailTest = config.get('admin_email_email_test') || ""; -const admin_emails = process.env.ADMIN_EMAILS - ? JSON.parse(process.env.ADMIN_EMAILS) +const admin_emails = config.get('admin_emails') + ? JSON.parse(config.get('admin_emails')) : []; -const polisDevs = process.env.ADMIN_UIDS - ? JSON.parse(process.env.ADMIN_UIDS) +const polisDevs = config.get('admin_uids') + ? JSON.parse(config.get('admin_uids')) : []; function isPolisDev(uid) { console.log("polisDevs", polisDevs); @@ -220,11 +220,11 @@ setInterval(function () { // state: '3(#0/!~' // }); // // END GITHUB OAUTH2 -const POLIS_FROM_ADDRESS = process.env.POLIS_FROM_ADDRESS; +const POLIS_FROM_ADDRESS = config.get('polis_from_address'); const akismet = akismetLib.client({ blog: "https://pol.is", // required: your root level url - apiKey: process.env.AKISMET_ANTISPAM_API_KEY, + apiKey: config.get('akismet_antispam_api_key'), }); akismet.verifyKey(function (err, verified) { @@ -637,7 +637,7 @@ function initializePolisHelpers() { const detectLanguage = Comment.detectLanguage; - if (isTrue(process.env.BACKFILL_COMMENT_LANG_DETECTION)) { + if (isTrue(config.get('backfill_comment_lang_detection'))) { pgQueryP("select tid, txt, zid from comments where lang is null;", []).then( (comments) => { let i = 0; @@ -1166,14 +1166,14 @@ function initializePolisHelpers() { let whitelistedDomains = [ "pol.is", - process.env.DOMAIN_WHITELIST_ITEM_01, - process.env.DOMAIN_WHITELIST_ITEM_02, - process.env.DOMAIN_WHITELIST_ITEM_03, - process.env.DOMAIN_WHITELIST_ITEM_04, - process.env.DOMAIN_WHITELIST_ITEM_05, - process.env.DOMAIN_WHITELIST_ITEM_06, - process.env.DOMAIN_WHITELIST_ITEM_07, - process.env.DOMAIN_WHITELIST_ITEM_08, + config.get('domain_whitelist_item_01'), + config.get('domain_whitelist_item_02'), + config.get('domain_whitelist_item_03'), + config.get('domain_whitelist_item_04'), + config.get('domain_whitelist_item_05'), + config.get('domain_whitelist_item_06'), + config.get('domain_whitelist_item_07'), + config.get('domain_whitelist_item_08'), "localhost:5001", "localhost:5002", "canvas.instructure.com", // LTI @@ -1344,7 +1344,7 @@ function initializePolisHelpers() { } res.status(200).json({}); } - let pcaCacheSize = process.env.CACHE_MATH_RESULTS === "true" ? 300 : 1; + let pcaCacheSize = config.get('cache_math_results') === "true" ? 300 : 1; let pcaCache = new LruCache({ max: pcaCacheSize, }); @@ -1615,7 +1615,7 @@ function initializePolisHelpers() { return pgQueryP_readOnly( "select * from math_main where zid = ($1) and math_env = ($2);", - [zid, process.env.MATH_ENV] + [zid, config.get('math_env')] ).then((rows) => { let queryEnd = Date.now(); let queryDuration = queryEnd - queryStart; @@ -1625,7 +1625,7 @@ function initializePolisHelpers() { INFO("mathpoll related; after cache miss, unable to find data for", { zid, math_tick, - math_env: process.env.MATH_ENV, + math_env: config.get('math_env'), }); return null; } @@ -1806,7 +1806,7 @@ function initializePolisHelpers() { function handle_POST_math_update(req, res) { let zid = req.p.zid; let uid = req.p.uid; - let math_env = process.env.MATH_ENV; + let math_env = config.get('math_env'); let math_update_type = req.p.math_update_type; isModerator(zid, uid).then((hasPermission) => { @@ -1835,7 +1835,7 @@ function initializePolisHelpers() { function handle_GET_math_correlationMatrix(req, res) { let rid = req.p.rid; - let math_env = process.env.MATH_ENV; + let math_env = config.get('math_env'); let math_tick = req.p.math_tick; console.log(req.p); @@ -1931,9 +1931,9 @@ function initializePolisHelpers() { ); } if ( - process.env.RUN_PERIODIC_EXPORT_TESTS && + config.get('run_periodic_export_tests') && !devMode && - process.env.MATH_ENV === "preprod" + config.get('math_env') === "preprod" ) { let runExportTest = () => { let math_env = "prod"; @@ -1975,7 +1975,7 @@ function initializePolisHelpers() { getUserInfoForUid2(req.p.uid) .then((user) => { return doAddDataExportTask( - process.env.MATH_ENV, + config.get('math_env'), user.email, req.p.zid, req.p.unixTimestamp * 1000, @@ -1996,7 +1996,7 @@ function initializePolisHelpers() { function handle_GET_dataExport_results(req, res) { var url = s3Client.getSignedUrl("getObject", { Bucket: "polis-datadump", - Key: process.env.MATH_ENV + "/" + req.p.filename, + Key: config.get('math_env') + "/" + req.p.filename, Expires: 60 * 60 * 24 * 7, }); res.redirect(url); @@ -2010,7 +2010,7 @@ function initializePolisHelpers() { math_tick = math_tick || -1; return pgQueryP_readOnly( "select * from math_bidtopid where zid = ($1) and math_env = ($2);", - [zid, process.env.MATH_ENV] + [zid, config.get('math_env')] ).then((rows) => { if (zid === 12480) { console.log("bidToPid", rows[0].data); @@ -2265,14 +2265,14 @@ function initializePolisHelpers() { // const state = req.p.state; console.log("handle_POST_auth_slack_redirect_uri 1"); - console.log(process.env.POLIS_SLACK_APP_CLIENT_ID); + console.log(config.get('polis_slack_app_client_id')); request .get( "https://slack.com/api/oauth.access?" + querystring.stringify({ - client_id: process.env.POLIS_SLACK_APP_CLIENT_ID, - client_secret: process.env.POLIS_SLACK_APP_CLIENT_SECRET, + client_id: config.get('polis_slack_app_client_id'), + client_secret: config.get('polis_slack_app_client_secret'), code: code, redirect_uri: getServerNameWithProtocol(req) + @@ -3058,8 +3058,8 @@ Feel free to reply to this email if you need help.`; ); } function populateGeoIpInfo(zid, uid, ipAddress) { - var userId = process.env.MAXMIND_USERID; - var licenseKey = process.env.MAXMIND_LICENSEKEY; + var userId = config.get('maxmind_userid'); + var licenseKey = config.get('maxmind_licensekey'); var url = "https://geoip.maxmind.com/geoip/v2.1/city/"; var contentType = @@ -4093,7 +4093,7 @@ Email verified! You can close this tab or hit the back button. let server = "http://localhost:5000"; if (!devMode) { - server = "https://" + process.env.PRIMARY_POLIS_URL; + server = "https://" + config.get('primary_polis_url'); } return server + "/" + path + "?" + paramsToStringSortedByName(params); } @@ -4108,7 +4108,7 @@ Email verified! You can close this tab or hit the back button. let server = "http://localhost:5000"; if (!devMode) { - server = "https://" + process.env.PRIMARY_POLIS_URL; + server = "https://" + config.get('primary_polis_url'); } return server + "/" + path + "?" + paramsToStringSortedByName(params); } @@ -9445,7 +9445,7 @@ Email verified! You can close this tab or hit the back button. res.send("https://pol.is/settings/enterprise/" + encodeParams(o)); } function handle_GET_stripe_account_connect(req, res) { - var stripe_client_id = process.env.STRIPE_CLIENT_ID; + var stripe_client_id = config.get('stripe_client_id'); var stripeUrl = "https://connect.stripe.com/oauth/authorize?response_type=code&client_id=" + @@ -9484,9 +9484,9 @@ Email verified! You can close this tab or hit the back button. url: "https://connect.stripe.com/oauth/token", form: { grant_type: "authorization_code", - client_id: process.env.STRIPE_CLIENT_ID, + client_id: config.get('stripe_client_id'), code: code, - client_secret: process.env.STRIPE_SECRET_KEY, + client_secret: config.get('stripe_secret_key'), }, }, function (err, r, body) { @@ -9849,8 +9849,8 @@ Email verified! You can close this tab or hit the back button. function handle_POST_notifyTeam(req, res) { if ( - req.p.webserver_pass !== process.env.WEBSERVER_PASS || - req.p.webserver_username !== process.env.WEBSERVER_USERNAME + req.p.webserver_pass !== config.get('webserver_pass') || + req.p.webserver_username !== config.get('webserver_username') ) { return fail(res, 403, "polis_err_notifyTeam_auth"); } @@ -9867,13 +9867,13 @@ Email verified! You can close this tab or hit the back button. function handle_POST_sendEmailExportReady(req, res) { if ( - req.p.webserver_pass !== process.env.WEBSERVER_PASS || - req.p.webserver_username !== process.env.WEBSERVER_USERNAME + req.p.webserver_pass !== config.get('webserver_pass') || + req.p.webserver_username !== config.get('webserver_username') ) { return fail(res, 403, "polis_err_sending_export_link_to_email_auth"); } - const domain = process.env.PRIMARY_POLIS_URL; + const domain = config.get('primary_polis_url'); const email = req.p.email; const subject = "Polis data export for conversation pol.is/" + req.p.conversation_id; @@ -9910,8 +9910,8 @@ Thanks for using Polis! let oauth = new OAuth.OAuth( "https://api.twitter.com/oauth/request_token", // null "https://api.twitter.com/oauth/access_token", // null - process.env.TWITTER_CONSUMER_KEY, //'your application consumer key', - process.env.TWITTER_CONSUMER_SECRET, //'your application secret', + config.get('twitter_consumer_key'), //'your application consumer key', + config.get('twitter_consumer_secret'), //'your application secret', "1.0A", null, "HMAC-SHA1" @@ -9965,8 +9965,8 @@ Thanks for using Polis! let oauth = new OAuth.OAuth( "https://api.twitter.com/oauth/request_token", // null "https://api.twitter.com/oauth/access_token", // null - process.env.TWITTER_CONSUMER_KEY, //'your application consumer key', - process.env.TWITTER_CONSUMER_SECRET, //'your application secret', + config.get('twitter_consumer_key'), //'your application consumer key', + config.get('twitter_consumer_secret'), //'your application secret', "1.0A", null, "HMAC-SHA1" @@ -10017,8 +10017,8 @@ Thanks for using Polis! let oauth = new OAuth.OAuth( "https://api.twitter.com/oauth/request_token", // null "https://api.twitter.com/oauth/access_token", // null - process.env.TWITTER_CONSUMER_KEY, //'your application consumer key', - process.env.TWITTER_CONSUMER_SECRET, //'your application secret', + config.get('twitter_consumer_key'), //'your application consumer key', + config.get('twitter_consumer_secret'), //'your application secret', "1.0A", null, "HMAC-SHA1" @@ -10061,8 +10061,8 @@ Thanks for using Polis! let oauth = new OAuth.OAuth( "https://api.twitter.com/oauth/request_token", // null "https://api.twitter.com/oauth/access_token", // null - process.env.TWITTER_CONSUMER_KEY, //'your application consumer key', - process.env.TWITTER_CONSUMER_SECRET, //'your application secret', + config.get('twitter_consumer_key'), //'your application consumer key', + config.get('twitter_consumer_secret'), //'your application secret', "1.0A", null, "HMAC-SHA1" @@ -10131,8 +10131,8 @@ Thanks for using Polis! let oauth = new OAuth.OAuth( "https://api.twitter.com/oauth/request_token", // null "https://api.twitter.com/oauth/access_token", // null - process.env.TWITTER_CONSUMER_KEY, //'your application consumer key', - process.env.TWITTER_CONSUMER_SECRET, //'your application secret', + config.get('twitter_consumer_key'), //'your application consumer key', + config.get('twitter_consumer_secret'), //'your application secret', "1.0A", null, "HMAC-SHA1" @@ -11021,7 +11021,7 @@ Thanks for using Polis! } function geoCodeWithGoogleApi(locationString) { - let googleApiKey = process.env.GOOGLE_API_KEY; + let googleApiKey = config.get('google_api_key'); let address = encodeURI(locationString); return new Promise(function (resolve, reject) { @@ -13439,7 +13439,7 @@ CREATE TABLE slack_user_invites ( let hostname = buildStaticHostname(req, res); if (!hostname) { let host = req.headers.host || ""; - let re = new RegExp(process.env.SERVICE_HOSTNAME + "$"); + let re = new RegExp(config.get('service_hostname') + "$"); if (host.match(re)) { // don't alert for this, it's probably DNS related // TODO_SEO what should we return? @@ -13468,7 +13468,7 @@ CREATE TABLE slack_user_invites ( // // }); // getStaticFile("./unsupportedBrowser.html", res); // } else { - let port = process.env.STATIC_FILES_PORT; + let port = config.get('static_files_port'); // set the host header too, since S3 will look at that (or the routing proxy will patch up the request.. not sure which) req.headers.host = hostname; routingProxy.web(req, res, { @@ -13482,14 +13482,14 @@ CREATE TABLE slack_user_invites ( function buildStaticHostname(req, res) { if (devMode || domainOverride) { - return process.env.STATIC_FILES_HOST; + return config.get('static_files_host'); } else { let origin = req.headers.host; if (!whitelistedBuckets[origin]) { if (hasWhitelistMatches(origin)) { // Use the prod bucket for non pol.is domains return ( - whitelistedBuckets["pol.is"] + "." + process.env.STATIC_FILES_HOST + whitelistedBuckets["pol.is"] + "." + config.get('static_files_host') ); } else { console.error( @@ -13501,7 +13501,7 @@ CREATE TABLE slack_user_invites ( } } origin = whitelistedBuckets[origin]; - return origin + "." + process.env.STATIC_FILES_HOST; + return origin + "." + config.get('static_files_host'); } } @@ -13638,9 +13638,9 @@ CREATE TABLE slack_user_invites ( } // serve up index.html in response to anything starting with a number - let hostname = process.env.STATIC_FILES_HOST; - let portForParticipationFiles = process.env.STATIC_FILES_PORT; - let portForAdminFiles = process.env.STATIC_FILES_ADMINDASH_PORT; + let hostname = config.get('static_files_host'); + let portForParticipationFiles = config.get('static_files_port'); + let portForAdminFiles = config.get('static_files_admindash_port'); let fetchUnsupportedBrowserPage = makeFileFetcher( hostname, portForParticipationFiles, From 4308da52651f00c8ed9d6337fdc3fbf64ee9e1ba Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Thu, 16 Dec 2021 17:55:11 +0100 Subject: [PATCH 07/49] Fix server.js --- server/src/server.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/server.js b/server/src/server.js index d10fc100e8..bca8ed3862 100644 --- a/server/src/server.js +++ b/server/src/server.js @@ -170,10 +170,10 @@ const adminEmailDataExport = config.get('admin_email_data_export') || ""; const adminEmailDataExportTest = config.get('admin_email_data_export_test') || ""; const adminEmailEmailTest = config.get('admin_email_email_test') || ""; -const admin_emails = config.get('admin_emails') +const admin_emails = config.get('admin_emails').length !== 0 ? JSON.parse(config.get('admin_emails')) : []; -const polisDevs = config.get('admin_uids') +const polisDevs = config.get('admin_uids').length !== 0 ? JSON.parse(config.get('admin_uids')) : []; function isPolisDev(uid) { From f69b0ee61bd0a22cf902ffeae70d2aabeb45d641 Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Fri, 17 Dec 2021 17:28:26 +0100 Subject: [PATCH 08/49] Change process.env to config.get where possible --- client-report/dev-server.js | 4 +++- client-report/server.js | 5 ++++- server/src/comment.js | 5 ++++- server/src/db/pg-query.js | 7 +++++-- server/src/email/senders.js | 14 +++++++++----- server/src/session.js | 7 +++++-- server/src/utils/cookies.js | 5 ++++- 7 files changed, 34 insertions(+), 13 deletions(-) diff --git a/client-report/dev-server.js b/client-report/dev-server.js index 632b931883..3da05870cd 100644 --- a/client-report/dev-server.js +++ b/client-report/dev-server.js @@ -5,6 +5,8 @@ var express = require("express"); var webpack = require("webpack"); var config = require("./webpack.config.dev"); var request = require("request"); +let POLIS_ROOT = process.env.POLIS_ROOT +var globalConfig = require(POLIS_ROOT + 'config/config.js'); var app = express(); var compiler = webpack(config); @@ -26,7 +28,7 @@ app.use(require("webpack-hot-middleware")(compiler)); -const serviceUrl = process.env.SERVICE_URL ? process.env.SERVICE_URL : "https://preprod.pol.is"; +const serviceUrl = globalConfig.get('service_url') ? globalConfig.get('service_url') : "https://preprod.pol.is"; console.log("SERVICE_URL:", serviceUrl); diff --git a/client-report/server.js b/client-report/server.js index 415fdb884a..e9f3a1cdc8 100644 --- a/client-report/server.js +++ b/client-report/server.js @@ -3,8 +3,11 @@ var path = require("path"); var express = require("express"); +let POLIS_ROOT = process.env.POLIS_ROOT +var config = require(POLIS_ROOT + 'config/config.js'); + var app = express(); -app.set('port', process.env.PORT || 8080); +app.set('port', config.get('port') || 8080); app.use('/data', express.static('data')) app.use('/dist', express.static('dist')) diff --git a/server/src/comment.js b/server/src/comment.js index ad19310693..eca27006ef 100644 --- a/server/src/comment.js +++ b/server/src/comment.js @@ -9,7 +9,10 @@ const Translate = require("@google-cloud/translate"); const isTrue = require("boolean"); const Utils = require("./utils/common"); -const useTranslateApi = isTrue(process.env.SHOULD_USE_TRANSLATION_API); +let POLIS_ROOT = process.env.POLIS_ROOT +var config = require(POLIS_ROOT + 'config/config.js'); + +const useTranslateApi = isTrue(config.get('should_use_translation_api')); let translateClient = null; if (useTranslateApi) { // Tell translation library where to find credentials, and write them to disk. diff --git a/server/src/db/pg-query.js b/server/src/db/pg-query.js index dce920d6f6..2e30a2077c 100644 --- a/server/src/db/pg-query.js +++ b/server/src/db/pg-query.js @@ -3,6 +3,9 @@ const Config = require("../config"); const yell = require("../log").yell; const MPromise = require("../utils/metered").MPromise; +let POLIS_ROOT = process.env.POLIS_ROOT +var config = require(POLIS_ROOT + 'config/config.js'); + // # DB Connections // // heroku pg standard plan has 120 connections @@ -18,12 +21,12 @@ const pgnative = require("pg").native; //.native, // native provides ssl (needed const parsePgConnectionString = require("pg-connection-string").parse; const usingReplica = - process.env.DATABASE_URL !== process.env[process.env.DATABASE_FOR_READS_NAME]; +config.get('database_url') !== process.env[process.env.DATABASE_FOR_READS_NAME]; const poolSize = Config.isDevMode() ? 2 : usingReplica ? 3 : 12; // not sure how many of these config options we really need anymore const pgConnection = Object.assign( - parsePgConnectionString(process.env.DATABASE_URL), + parsePgConnectionString(config.get('database_url')), { max: poolSize, isReadOnly: false, diff --git a/server/src/email/senders.js b/server/src/email/senders.js index 722d8942e6..8e606d8faa 100644 --- a/server/src/email/senders.js +++ b/server/src/email/senders.js @@ -4,11 +4,15 @@ const fs = require("fs"); const nodemailer = require("nodemailer"); const AWS = require("aws-sdk"); -AWS.config.set("region", process.env.AWS_REGION); + +let POLIS_ROOT = process.env.POLIS_ROOT +var config = require(POLIS_ROOT + 'config/config.js'); + +AWS.config.set("region", config.get('aws_region')); function sendTextEmailWithBackup(sender, recipient, subject, text) { - const transportTypes = process.env.EMAIL_TRANSPORT_TYPES - ? process.env.EMAIL_TRANSPORT_TYPES.split(",") + const transportTypes = config.get('email_transport_types') + ? config.get('email_transport_types').split(",") : ["aws-ses", "mailgun"]; if (transportTypes.length < 2) { new Error("No backup email transport available."); @@ -38,7 +42,7 @@ function getMailOptions(transportType) { // This forces fake credentials if envvars unset, so error is caught // in auth and failover works without crashing server process. // TODO: Suppress error thrown by mailgun library when unset. - api_key: process.env.MAILGUN_API_KEY || "unset-value", + api_key: config.get('mailgun_api_key') || "unset-value", domain: process.env.MAILGUN_DOMAIN || "unset-value", }, }; @@ -59,7 +63,7 @@ function sendTextEmail( recipient, subject, text, - transportTypes = process.env.EMAIL_TRANSPORT_TYPES, + transportTypes = config.get('email_transport_types'), priority = 1 ) { // Exit if empty string passed. diff --git a/server/src/session.js b/server/src/session.js index cc2683a210..ad95e654bd 100644 --- a/server/src/session.js +++ b/server/src/session.js @@ -2,9 +2,12 @@ const crypto = require("crypto"); const LruCache = require("lru-cache"); const pg = require("./db/pg-query"); +let POLIS_ROOT = process.env.POLIS_ROOT +var config = require(POLIS_ROOT + 'config/config.js'); + function encrypt(text) { const algorithm = "aes-256-ctr"; - const password = process.env.ENCRYPTION_PASSWORD_00001; + const password = config.get('encryption_password_00001'); const cipher = crypto.createCipher(algorithm, password); var crypted = cipher.update(text, "utf8", "hex"); crypted += cipher.final("hex"); @@ -13,7 +16,7 @@ function encrypt(text) { function decrypt(text) { const algorithm = "aes-256-ctr"; - const password = process.env.ENCRYPTION_PASSWORD_00001; + const password = config.get('encryption_password_00001'); const decipher = crypto.createDecipher(algorithm, password); var dec = decipher.update(text, "hex", "utf8"); dec += decipher.final("utf8"); diff --git a/server/src/utils/cookies.js b/server/src/utils/cookies.js index 4d0f6fdcc4..1b470fdd55 100644 --- a/server/src/utils/cookies.js +++ b/server/src/utils/cookies.js @@ -2,6 +2,9 @@ const _ = require("underscore"); const User = require("../user"); const Session = require("../session"); +let POLIS_ROOT = process.env.POLIS_ROOT +var config = require(POLIS_ROOT + 'config/config.js'); + const COOKIES = { COOKIE_TEST: "ct", HAS_EMAIL: "e", @@ -111,7 +114,7 @@ function setCookieTestCookie(req, res, setOnPolisDomain) { function shouldSetCookieOnPolisDomain(req) { // FIXME domainOverride - let setOnPolisDomain = !(process.env.DOMAIN_OVERRIDE || null); + let setOnPolisDomain = !(config.get('domain_override') || null); let origin = req.headers.origin || ""; if (setOnPolisDomain && origin.match(/^http:\/\/localhost:[0-9]{4}/)) { setOnPolisDomain = false; From edfcdf2bbecd6c9c593374fd1ad62a5c1ed39f08 Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Sun, 19 Dec 2021 11:38:29 +0100 Subject: [PATCH 09/49] Migrate from polis.config.template.js to yaml --- client-admin/dev-server.js | 13 +++--- client-admin/gulpfile.js | 39 ++++++++-------- client-admin/polis.config.template.js | 37 --------------- client-participation/gulpfile.js | 45 ++++++++++--------- client-participation/polis.config.template.js | 45 ------------------- client-report/gulpfile.js | 21 ++++----- client-report/polis.config.template.js | 18 -------- 7 files changed, 61 insertions(+), 157 deletions(-) delete mode 100644 client-admin/polis.config.template.js delete mode 100644 client-participation/polis.config.template.js delete mode 100644 client-report/polis.config.template.js diff --git a/client-admin/dev-server.js b/client-admin/dev-server.js index cbf2cc2895..d95e77fcef 100644 --- a/client-admin/dev-server.js +++ b/client-admin/dev-server.js @@ -11,7 +11,8 @@ var request = require("request"); var app = express(); var compiler = webpack(config); -var polisConfig = require("./polis.config"); +let POLIS_ROOT = process.env.POLIS_ROOT +var config = require(POLIS_ROOT + 'config/config.js'); app.use( require("webpack-dev-middleware")(compiler, { @@ -20,7 +21,7 @@ app.use( }) ); -const serviceUrl = polisConfig.SERVICE_URL ? polisConfig.SERVICE_URL : "https://pol.is"; +const serviceUrl = config.get('service_url') ? config.get('service_url') : "https://pol.is"; console.log("SERVICE_URL:", serviceUrl); function proxy(req, res) { @@ -58,10 +59,10 @@ app.get(/^\/embed\/?$/, function (req, res) { app.get("*", function (req, res) { var html = fs.readFileSync(path.join(__dirname, "index.html"), { encoding: "utf8" }); - html = html.replace("<%= fbAppId %>", polisConfig.FB_APP_ID); - html = html.replace("<%= useIntercom %>", !isTrue(polisConfig.DISABLE_INTERCOM)); - html = html.replace("<%= usePlans %>", !isTrue(polisConfig.DISABLE_PLANS)); - var domainWhitelist = '["' + polisConfig.domainWhitelist.join('","') + '"]'; + html = html.replace("<%= fbAppId %>", config.get('fb_app_id')); + html = html.replace("<%= useIntercom %>", !isTrue(config.get('disable_intercom'))); + html = html.replace("<%= usePlans %>", !isTrue(config.get('disable_plans'))); + var domainWhitelist = '["' + config.get('domainWhitelist').join('","') + '"]'; html = html.replace("<%= domainWhitelist %>", domainWhitelist); res.set({ diff --git a/client-admin/gulpfile.js b/client-admin/gulpfile.js index 3dbdde86b7..365202f471 100644 --- a/client-admin/gulpfile.js +++ b/client-admin/gulpfile.js @@ -13,9 +13,10 @@ var rimraf = require("rimraf"); var runSequence = require("run-sequence"); var scp = require("gulp-scp2"); -var polisConfig = require("./polis.config"); +let POLIS_ROOT = process.env.POLIS_ROOT +var config = require(POLIS_ROOT + 'config/config.js'); -console.log("Uploader: " + polisConfig.UPLOADER); +console.log("Uploader: " + config.get('uploader')); const staticFilesPrefix = "cached"; const baseDistRoot = "dist"; @@ -78,11 +79,11 @@ gulp.task("index", [], function () { ); html = html.replace("NULL_VERSION", versionString); - html = html.replace("<%= fbAppId %>", polisConfig.FB_APP_ID); - html = html.replace("<%= useIntercom %>", !isTrue(polisConfig.DISABLE_INTERCOM)); - html = html.replace("<%= usePlans %>", !isTrue(polisConfig.DISABLE_PLANS)); + html = html.replace("<%= fbAppId %>", config.get('fb_app_id')); + html = html.replace("<%= useIntercom %>", !isTrue(config.get('disable_intercom'))); + html = html.replace("<%= usePlans %>", !isTrue(config.get('disable_plans'))); - var domainWhitelist = '["' + polisConfig.domainWhitelist.join('","') + '"]'; + var domainWhitelist = '["' + config.get('domainWhitelist').join('","') + '"]'; html = html.replace("<%= domainWhitelist %>", domainWhitelist); // index goes to the root of the dist folder. @@ -129,8 +130,8 @@ gulp.task("404", [], function () { gulp.task("preprodConfig", function () { preprodMode = true; minified = true; - scpSubdir = polisConfig.SCP_SUBDIR_PREPROD; - s3Subdir = polisConfig.S3_BUCKET_PREPROD; + scpSubdir = config.get('scp_subdir_preprod'); + s3Subdir = config.get('s3_bucket_preprod'); }); gulp.task("unminifiedConfig", function () { @@ -140,8 +141,8 @@ gulp.task("unminifiedConfig", function () { gulp.task("prodConfig", function () { prodMode = true; minified = true; - scpSubdir = polisConfig.SCP_SUBDIR_PROD; - s3Subdir = polisConfig.S3_BUCKET_PROD; + scpSubdir = config.get('scp_subdir_prod'); + s3Subdir = config.get('s3_bucket_prod'); }); gulp.task("configureForProduction", function (callback) { @@ -220,12 +221,12 @@ gulp.task("dist", ["configureForProduction"], function (callback) { gulp.task("deploy_TO_PRODUCTION", ["prodConfig", "dist"], function () { var uploader; - if ("s3" === polisConfig.UPLOADER) { + if ("s3" === config.get('uploader')) { uploader = s3uploader({ bucket: s3Subdir, }); } - if ("scp" === polisConfig.UPLOADER) { + if ("scp" === config.get('uploader')) { uploader = scpUploader({ // subdir: "cached", watch: function (client) { @@ -235,7 +236,7 @@ gulp.task("deploy_TO_PRODUCTION", ["prodConfig", "dist"], function () { }, }); } - if ('local' === polisConfig.UPLOADER) { + if ('local' === config.get('uploader')) { uploader = localUploader uploader.needsHeadersJson = true } @@ -244,12 +245,12 @@ gulp.task("deploy_TO_PRODUCTION", ["prodConfig", "dist"], function () { function doUpload() { var uploader; - if ("s3" === polisConfig.UPLOADER) { + if ("s3" === config.get('uploader')) { uploader = s3uploader({ bucket: s3Subdir, }); } - if ("scp" === polisConfig.UPLOADER) { + if ("scp" === config.get('uploader')) { uploader = scpUploader({ // subdir: "cached", watch: function (client) { @@ -259,7 +260,7 @@ function doUpload() { }, }); } - if ('local' === polisConfig.UPLOADER) { + if ('local' === config.get('uploader')) { uploader = localUploader uploader.needsHeadersJson = true } @@ -272,19 +273,19 @@ gulp.task("deployPreprodUnminified", ["preprodConfig", "unminifiedConfig", "dist gulp.task("fontsPreprod", ["preprodConfig"], function () { return deployFonts({ - bucket: polisConfig.S3_BUCKET_PREPROD, + bucket: config.get('s3_bucket_preprod'), }); }); gulp.task("fontsProd", ["prodConfig"], function () { return deployFonts({ - bucket: polisConfig.S3_BUCKET_PROD, + bucket: config.get('s3_bucket_prod'), }); }); function localUploader(params) { params.subdir = params.subdir || '' - return gulp.dest(path.join(polisConfig.LOCAL_OUTPUT_PATH, params.subdir)) + return gulp.dest(path.join(config.get('local_output_path'), params.subdir)) } function s3uploader(params) { diff --git a/client-admin/polis.config.template.js b/client-admin/polis.config.template.js deleted file mode 100644 index 90cfa90b52..0000000000 --- a/client-admin/polis.config.template.js +++ /dev/null @@ -1,37 +0,0 @@ - -module.exports = { - - domainWhitelist: [ - // local ports - "^localhost$", - "^127\\.0\\.0\\.1$", - "^192\\.168\\.1\\.140$", - // sample configuration for main pol.is deployment - "^pol\\.is", - ".+\\.pol\\.is$", - // These allow for local ip routing for remote dev deployment - "^(n|ssl)ip\\.io$", - ".+\\.(n|ssl)ip\\.io$", - ], - - DISABLE_INTERCOM: true, - DISABLE_PLANS: true, - - FB_APP_ID: '661042417336977', - - //SERVICE_URL: 'http://localhost:5000', - SERVICE_URL: 'https://preprod.pol.is', - - UPLOADER: 'local', // alt: s3, scp - - // Uploader settings: local - LOCAL_OUTPUT_PATH: './build', - - // Uploader settings: s3 - S3_BUCKET_PROD: 'pol.is', - S3_BUCKET_PREPROD: 'preprod.pol.is', - - // Uploader settings: scp - SCP_SUBDIR_PREPROD: 'preprod', - SCP_SUBDIR_PROD: 'prod', -}; diff --git a/client-participation/gulpfile.js b/client-participation/gulpfile.js index bcaafa0dfb..ac5affcc09 100644 --- a/client-participation/gulpfile.js +++ b/client-participation/gulpfile.js @@ -50,9 +50,10 @@ var spawn = require("child_process").spawn; var Stream = require("stream"); var url = require("url"); -var polisConfig = require("./polis.config"); +let POLIS_ROOT = process.env.POLIS_ROOT +var config = require(POLIS_ROOT + 'config/config.js'); -console.log("Uploader: " + polisConfig.UPLOADER); +console.log("Uploader: " + config.get('uploader')); // WARNING: useJsHint gets mutated in watch builds var useJsHint = true; @@ -108,7 +109,7 @@ function prepPathForTemplate(path) { gulp.task("connect", [], function () { function proxyToPreprod(req, response) { var x = request( - (polisConfig.SERVICE_URL || "https://preprod.pol.is") + req.originalUrl + (config.get('service_url') || "https://preprod.pol.is") + req.originalUrl ); x.on("error", function (err) { response.status(500).end(); @@ -232,8 +233,8 @@ gulp.task("connect", [], function () { app.use(/^\/wimp$/, express.static(path.join(destRootBase, "wimp.html"))); app.use(/^\/try$/, express.static(path.join(destRootBase, "try.html"))); - app.listen(polisConfig.PORT); - console.log("listening on localhost:" + polisConfig.PORT); + app.listen(config.get('port')); + console.log("listening on localhost:" + config.get('port')); }); function getGitHash() { @@ -285,7 +286,7 @@ gulp.task("embedJs", function () { ]) .pipe( template({ - polisHostName: polisConfig.SERVICE_HOSTNAME || "pol.is", + polisHostName: config.get('service_hostname') || "pol.is", }) ) // .pipe(template({ @@ -298,15 +299,15 @@ gulp.task("embedJs", function () { gulp.task("index", [], function () { var s = gulp.src("index.html"); var basepath = prepPathForTemplate(destRootRest); - var domainWhitelist = '["' + polisConfig.domainWhitelist.join('","') + '"]'; + var domainWhitelist = '["' + config.get('domainWhitelist').join('","') + '"]'; if (devMode) { s = s.pipe( template({ basepath: basepath, basepath_visbundle: basepath_visbundle_dev, d3Filename: "d3.js", - fbAppId: polisConfig.FB_APP_ID, - useIntercom: !isTrue(polisConfig.DISABLE_INTERCOM), + fbAppId: config.get('fb_app_id'), + useIntercom: !isTrue(config.get('disable_intercom')), versionString: versionString, domainWhitelist: domainWhitelist, }) @@ -318,8 +319,8 @@ gulp.task("index", [], function () { basepath: basepath, // proxy through server (cached by cloudflare, and easier than choosing a bucket for preprod, etc) basepath_visbundle: basepath, d3Filename: "d3.min.js", - fbAppId: polisConfig.FB_APP_ID, - useIntercom: !isTrue(polisConfig.DISABLE_INTERCOM), + fbAppId: config.get('fb_app_id'), + useIntercom: !isTrue(config.get('disable_intercom')), versionString: versionString, domainWhitelist: domainWhitelist, }) @@ -656,15 +657,15 @@ gulp.task("scriptsD3v4", function () { gulp.task("preprodConfig", function () { preprodMode = true; minified = true; - scpSubdir = polisConfig.SCP_SUBDIR_PREPROD; - s3Subdir = polisConfig.S3_BUCKET_PREPROD; + scpSubdir = config.get('scp_subdir_preprod'); + s3Subdir = config.get('s3_bucket_preprod'); }); gulp.task("prodConfig", function () { prodMode = true; minified = true; - scpSubdir = polisConfig.SCP_SUBDIR_PROD; - s3Subdir = polisConfig.S3_BUCKET_PROD; + scpSubdir = config.get('scp_subdir_prod'); + s3Subdir = config.get('s3_bucket_prod'); }); gulp.task("unminifiedConfig", function () { @@ -790,12 +791,12 @@ gulp.task("deploy_TO_PRODUCTION", ["prodConfig", "dist"], function () { notifySlackOfDeployment("prod"); var uploader; - if ("s3" === polisConfig.UPLOADER) { + if ("s3" === config.get('uploader')) { uploader = s3uploader({ bucket: s3Subdir, }); } - if ("scp" === polisConfig.UPLOADER) { + if ("scp" === config.get('uploader')) { uploader = scpUploader({ // TODO needs to upload as prod somehow. // subdir: "cached", @@ -806,7 +807,7 @@ gulp.task("deploy_TO_PRODUCTION", ["prodConfig", "dist"], function () { }, }); } - if ("local" === polisConfig.UPLOADER) { + if ("local" === config.get('uploader')) { uploader = localUploader; uploader.needsHeadersJson = true; } @@ -817,12 +818,12 @@ function doUpload() { notifySlackOfDeployment("preprod"); var uploader; - if ("s3" === polisConfig.UPLOADER) { + if ("s3" === config.get('uploader')) { uploader = s3uploader({ bucket: s3Subdir, }); } - if ("scp" === polisConfig.UPLOADER) { + if ("scp" === config.get('uploader')) { uploader = scpUploader({ // TODO needs to upload as PREprod somehow. // subdir: "cached", @@ -833,7 +834,7 @@ function doUpload() { }, }); } - if ("local" === polisConfig.UPLOADER) { + if ("local" === config.get('uploader')) { uploader = localUploader; uploader.needsHeadersJson = true; } @@ -857,7 +858,7 @@ gulp.task("deploySurvey", ["prodConfig", "dist"], function () { function localUploader(params) { params.subdir = params.subdir || ""; - return gulp.dest(path.join(polisConfig.LOCAL_OUTPUT_PATH, params.subdir)); + return gulp.dest(path.join(config.get('local_output_path'), params.subdir)); } function s3uploader(params) { diff --git a/client-participation/polis.config.template.js b/client-participation/polis.config.template.js deleted file mode 100644 index ec6ea1de81..0000000000 --- a/client-participation/polis.config.template.js +++ /dev/null @@ -1,45 +0,0 @@ -module.exports = { - domainWhitelist: [ - // local ports - "^localhost$", - "^127\\.0\\.0\\.1$", - "^192\\.168\\.1\\.140$", - // sample configuration for main pol.is deployment - "^pol\\.is", - ".+\\.pol\\.is$", - // These allow for local ip routing for remote dev deployment - "^(n|ssl)ip\\.io$", - ".+\\.(n|ssl)ip\\.io$", - ], - - // Point to a polisServer instance (local recommended for dev) - //SERVICE_URL: "http://localhost:5000", // local server; recommended for dev - SERVICE_URL: "http:localhost:5000", - - // Used for setting appropriate hostname for embedding. - //SERVICE_HOSTNAME: "123.45.67.89.sslip.io", - SERVICE_HOSTNAME: "localhost", - - // Note that this must match the participation client port specified in polisServer instance - PORT: 5001, - - DISABLE_INTERCOM: true, - - // must register with facebook and get a facebook app id to use the facebook auth features - FB_APP_ID: "661042417336977", - - // For data exports - - UPLOADER: "local", // alt: s3, scp - - // Uploader settings: local - LOCAL_OUTPUT_PATH: "./build", - - // Uploader settings: s3 - S3_BUCKET_PROD: "pol.is", - S3_BUCKET_PREPROD: "preprod.pol.is", - - // Uploader settings: scp - SCP_SUBDIR_PREPROD: "preprod", - SCP_SUBDIR_PROD: "prod", -}; diff --git a/client-report/gulpfile.js b/client-report/gulpfile.js index 09e4358cc4..f9ca7c04f4 100644 --- a/client-report/gulpfile.js +++ b/client-report/gulpfile.js @@ -14,9 +14,10 @@ var rimraf = require("rimraf"); var runSequence = require('run-sequence'); var scp = require('gulp-scp2'); -var polisConfig = require('./polis.config'); +let POLIS_ROOT = process.env.POLIS_ROOT +var config = require(POLIS_ROOT + 'config/config.js'); -console.log("Uploader: " + polisConfig.UPLOADER); +console.log("Uploader: " + config.get('uploader')); const staticFilesPrefix = "cached"; const baseDistRoot = "dist"; @@ -88,14 +89,14 @@ gulp.task('index', [ gulp.task("preprodConfig", function() { preprodMode = true; - scpSubdir = polisConfig.SCP_SUBDIR_PREPROD; - s3Subdir = polisConfig.S3_BUCKET_PREPROD; + scpSubdir = config.get('scp_subdir_preprod'); + s3Subdir = config.get('s3_bucket_preprod'); }); gulp.task("prodConfig", function() { prodMode = true; - scpSubdir = polisConfig.SCP_SUBDIR_PROD; - s3Subdir = polisConfig.S3_BUCKET_PROD; + scpSubdir = config.get('scp_subdir_prod'); + s3Subdir = config.get('s3_bucket_prod'); }); @@ -165,7 +166,7 @@ gulp.task('dist', [ function localUploader(params) { params.subdir = params.subdir || '' - return gulp.dest(path.join(polisConfig.LOCAL_OUTPUT_PATH, params.subdir)) + return gulp.dest(path.join(config.get('local_output_path'), params.subdir)) } function s3uploader(params) { @@ -324,12 +325,12 @@ function deploy(uploader) { function doUpload() { var uploader; - if ('s3' === polisConfig.UPLOADER) { + if ('s3' === config.get('uploader')) { uploader = s3uploader({ bucket: s3Subdir, }); } - if ('scp' === polisConfig.UPLOADER) { + if ('scp' === config.get('uploader')) { uploader = scpUploader({ // subdir: "cached", watch: function(client) { @@ -339,7 +340,7 @@ function doUpload() { }, }); } - if ('local' === polisConfig.UPLOADER) { + if ('local' === config.get('uploader')) { uploader = localUploader uploader.needsHeadersJson = true } diff --git a/client-report/polis.config.template.js b/client-report/polis.config.template.js deleted file mode 100644 index 495655bf76..0000000000 --- a/client-report/polis.config.template.js +++ /dev/null @@ -1,18 +0,0 @@ -module.exports = { - - //SERVICE_URL: 'http://localhost:5000', - SERVICE_URL: 'https://preprod.pol.is', - - UPLOADER: 'local', // alt: s3, scp - - // Uploader settings: local - LOCAL_OUTPUT_PATH: './build', - - // Uploader settings: s3 - S3_BUCKET_PROD: 'pol.is', - S3_BUCKET_PREPROD: 'preprod.pol.is', - - // Uploader settings: scp - SCP_SUBDIR_PREPROD: 'preprod', - SCP_SUBDIR_PROD: 'prod', -}; From df7b2a050dd0af67c667f7361e24f38da48c1d12 Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Sun, 19 Dec 2021 11:42:59 +0100 Subject: [PATCH 10/49] Remove handling of polis.config.js in dockerfile --- client-admin/Dockerfile | 4 ---- client-participation/Dockerfile | 4 ---- client-report/Dockerfile | 4 ---- 3 files changed, 12 deletions(-) diff --git a/client-admin/Dockerfile b/client-admin/Dockerfile index 00001a1f04..d7174dcf06 100644 --- a/client-admin/Dockerfile +++ b/client-admin/Dockerfile @@ -8,9 +8,5 @@ RUN apk add git --no-cache COPY package*.json ./ RUN npm install -COPY polis.config.template.js polis.config.js -# If polis.config.js exists on host, will override template here. -COPY . . - ARG GIT_HASH RUN npm run deploy:prod diff --git a/client-participation/Dockerfile b/client-participation/Dockerfile index 1a8899cdce..ddb154c2af 100644 --- a/client-participation/Dockerfile +++ b/client-participation/Dockerfile @@ -19,10 +19,6 @@ RUN npm ci RUN apk del .build -COPY polis.config.template.js polis.config.js -# If polis.config.js exists on host, will override template here. -COPY . . - ARG GIT_HASH ARG BABEL_ENV=production diff --git a/client-report/Dockerfile b/client-report/Dockerfile index b98a3dcd37..b981736b5f 100644 --- a/client-report/Dockerfile +++ b/client-report/Dockerfile @@ -8,9 +8,5 @@ RUN apk add git --no-cache COPY package*.json ./ RUN npm ci -COPY polis.config.template.js polis.config.js -# If polis.config.js exists on host, will override template here. -COPY . . - ARG GIT_HASH RUN npm run deploy:prod From 7401a36a11be82d39feca022c9d86a7a9b08e9a1 Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Sun, 19 Dec 2021 11:56:30 +0100 Subject: [PATCH 11/49] Fix in build process --- client-admin/Dockerfile | 2 ++ client-admin/gulpfile.js | 3 +-- client-participation/Dockerfile | 2 ++ client-participation/gulpfile.js | 3 +-- client-report/Dockerfile | 2 ++ client-report/gulpfile.js | 3 +-- 6 files changed, 9 insertions(+), 6 deletions(-) diff --git a/client-admin/Dockerfile b/client-admin/Dockerfile index d7174dcf06..1c43d27ecc 100644 --- a/client-admin/Dockerfile +++ b/client-admin/Dockerfile @@ -8,5 +8,7 @@ RUN apk add git --no-cache COPY package*.json ./ RUN npm install +COPY . . + ARG GIT_HASH RUN npm run deploy:prod diff --git a/client-admin/gulpfile.js b/client-admin/gulpfile.js index 365202f471..6a5c33cba4 100644 --- a/client-admin/gulpfile.js +++ b/client-admin/gulpfile.js @@ -13,8 +13,7 @@ var rimraf = require("rimraf"); var runSequence = require("run-sequence"); var scp = require("gulp-scp2"); -let POLIS_ROOT = process.env.POLIS_ROOT -var config = require(POLIS_ROOT + 'config/config.js'); +var config = require('../config/config.js'); console.log("Uploader: " + config.get('uploader')); diff --git a/client-participation/Dockerfile b/client-participation/Dockerfile index ddb154c2af..df73279cbd 100644 --- a/client-participation/Dockerfile +++ b/client-participation/Dockerfile @@ -19,6 +19,8 @@ RUN npm ci RUN apk del .build +COPY . . + ARG GIT_HASH ARG BABEL_ENV=production diff --git a/client-participation/gulpfile.js b/client-participation/gulpfile.js index ac5affcc09..d3e73c156e 100644 --- a/client-participation/gulpfile.js +++ b/client-participation/gulpfile.js @@ -50,8 +50,7 @@ var spawn = require("child_process").spawn; var Stream = require("stream"); var url = require("url"); -let POLIS_ROOT = process.env.POLIS_ROOT -var config = require(POLIS_ROOT + 'config/config.js'); +var config = require('../config/config.js'); console.log("Uploader: " + config.get('uploader')); diff --git a/client-report/Dockerfile b/client-report/Dockerfile index b981736b5f..abc15454cf 100644 --- a/client-report/Dockerfile +++ b/client-report/Dockerfile @@ -8,5 +8,7 @@ RUN apk add git --no-cache COPY package*.json ./ RUN npm ci +COPY . . + ARG GIT_HASH RUN npm run deploy:prod diff --git a/client-report/gulpfile.js b/client-report/gulpfile.js index f9ca7c04f4..5c6d397196 100644 --- a/client-report/gulpfile.js +++ b/client-report/gulpfile.js @@ -14,8 +14,7 @@ var rimraf = require("rimraf"); var runSequence = require('run-sequence'); var scp = require('gulp-scp2'); -let POLIS_ROOT = process.env.POLIS_ROOT -var config = require(POLIS_ROOT + 'config/config.js'); +var config = require('../config/config.js'); console.log("Uploader: " + config.get('uploader')); From b0b0bd3c09cff21bb3eb37f3c9115dd13e8d75a7 Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Sun, 19 Dec 2021 14:07:38 +0100 Subject: [PATCH 12/49] Fix import of config in gulpfiles --- client-admin/gulpfile.js | 3 ++- client-participation/gulpfile.js | 3 ++- client-report/gulpfile.js | 3 ++- docker-compose.yml | 6 ++++++ 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/client-admin/gulpfile.js b/client-admin/gulpfile.js index 6a5c33cba4..365202f471 100644 --- a/client-admin/gulpfile.js +++ b/client-admin/gulpfile.js @@ -13,7 +13,8 @@ var rimraf = require("rimraf"); var runSequence = require("run-sequence"); var scp = require("gulp-scp2"); -var config = require('../config/config.js'); +let POLIS_ROOT = process.env.POLIS_ROOT +var config = require(POLIS_ROOT + 'config/config.js'); console.log("Uploader: " + config.get('uploader')); diff --git a/client-participation/gulpfile.js b/client-participation/gulpfile.js index d3e73c156e..ac5affcc09 100644 --- a/client-participation/gulpfile.js +++ b/client-participation/gulpfile.js @@ -50,7 +50,8 @@ var spawn = require("child_process").spawn; var Stream = require("stream"); var url = require("url"); -var config = require('../config/config.js'); +let POLIS_ROOT = process.env.POLIS_ROOT +var config = require(POLIS_ROOT + 'config/config.js'); console.log("Uploader: " + config.get('uploader')); diff --git a/client-report/gulpfile.js b/client-report/gulpfile.js index 5c6d397196..f9ca7c04f4 100644 --- a/client-report/gulpfile.js +++ b/client-report/gulpfile.js @@ -14,7 +14,8 @@ var rimraf = require("rimraf"); var runSequence = require('run-sequence'); var scp = require('gulp-scp2'); -var config = require('../config/config.js'); +let POLIS_ROOT = process.env.POLIS_ROOT +var config = require(POLIS_ROOT + 'config/config.js'); console.log("Uploader: " + config.get('uploader')); diff --git a/docker-compose.yml b/docker-compose.yml index c137ee4828..a4556e0f0a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -106,6 +106,8 @@ services: client-participation: container_name: polis-client-participation + environment: + - POLIS_ROOT=/app/ image: compdem/polis-client-participation:${TAG} build: context: ./client-participation @@ -114,6 +116,8 @@ services: client-admin: container_name: polis-client-admin + environment: + - POLIS_ROOT=/app/ image: compdem/polis-client-admin:${TAG} build: context: ./client-admin @@ -122,6 +126,8 @@ services: client-report: container_name: polis-client-report + environment: + - POLIS_ROOT=/app/ image: compdem/polis-client-report:${TAG} build: context: ./client-report From 5639cf6b6a62bdb196aed7370225b5d336bca5da Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Sun, 19 Dec 2021 14:44:31 +0100 Subject: [PATCH 13/49] Added separate yaml config file to client-* --- client-admin/config/config.js | 55 +++++++++++++++++++++ client-admin/config/schema.yaml | 65 +++++++++++++++++++++++++ client-admin/gulpfile.js | 3 +- client-participation/config/config.js | 55 +++++++++++++++++++++ client-participation/config/schema.yaml | 65 +++++++++++++++++++++++++ client-participation/gulpfile.js | 3 +- client-report/config/config.js | 55 +++++++++++++++++++++ client-report/config/schema.yaml | 65 +++++++++++++++++++++++++ client-report/gulpfile.js | 3 +- 9 files changed, 363 insertions(+), 6 deletions(-) create mode 100644 client-admin/config/config.js create mode 100644 client-admin/config/schema.yaml create mode 100644 client-participation/config/config.js create mode 100644 client-participation/config/schema.yaml create mode 100644 client-report/config/config.js create mode 100644 client-report/config/schema.yaml diff --git a/client-admin/config/config.js b/client-admin/config/config.js new file mode 100644 index 0000000000..6908014715 --- /dev/null +++ b/client-admin/config/config.js @@ -0,0 +1,55 @@ +// Copyright (C) 2012-present, The Authors. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License, version 3, as published by the Free Software Foundation. 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 Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . + +"use strict"; + +console.log('starting config.js') + +const convict = require('convict'); +const fs = require('fs'); +const yaml = require('js-yaml'); + +convict.addParser({ extension: ['yml', 'yaml'], parse: yaml.safeLoad }); + +// for additional validation options, use the following: +// convict.addFormat(require('convict-format-with-validator').ipaddress); + +'use strict'; + +// Define a schema + +try { + // the next line only works with docker-compose + console.log('reading schema') + let fileContents = fs.readFileSync('/app/config/schema.yaml', 'utf8'); + let schema = yaml.safeLoad(fileContents); + var config = convict(schema); +} catch (e) { + console.log(e); +} + +console.log('default aws_region:' + config.get('aws_region')); + +// Load environment dependent configuration +var env = config.get('env'); +config.loadFile('/app/config/' + env + '.yaml'); +var now = new Date(); +console.log('config aws_region:' + config.get('aws_region') + " @ " + now.toUTCString()); + +const path = '/app/config/config_private.yaml'; + +try { + if (fs.existsSync(path)) { + config.loadFile(path); + } +} catch(err) { + console.error(err) +} + +// Perform validation +config.validate({allowed: 'strict'}); + +module.exports = config; + + +console.log('finishing config.js') + diff --git a/client-admin/config/schema.yaml b/client-admin/config/schema.yaml new file mode 100644 index 0000000000..c2bea1785a --- /dev/null +++ b/client-admin/config/schema.yaml @@ -0,0 +1,65 @@ +domainWhitelist: + doc: domainWhitelist + default: + - ^localhost$ + - ^192\\.168\\.1\\.141$ + - ^192\\.168\\.1\\.140$ + - ^pol\\.is + - .+\\.pol\\.is$ + - ^xip\\.io$ + - .+\\.xip\\.io$ + env: DOMAIN_WHITELIST + +uploader: + doc: uploader for compiled static javascript + format: + - local + - s3 + - scp + default: local + env: UPLOADER + +service_url: + doc: Point to a polisServer instance (local recommended for dev) + default: http://localhost:5000 + env: SERVICE_URL + +client_participation_port: + doc: Note that this must match the participation client port specified in polisServer instance + default: 5001 + env: CLIENT_PARTICIPATION_PORT + +fb_app_id: + doc: must register with facebook and get a facebook app id to use the facebook auth features + default: 661042417336977 + env: FB_APP_ID + +local_output_path: + doc: Uploader settings local + default: ./build + env: LOCAL_OUTPUT_PATH + +s3_bucket_prod: + doc: uploader settings s3 + default: pol.is + env: S3_BUCKET_PROD + +s3_bucket_preprod: + doc: uploader settings s3 + default: preprod.pol.is + env: S3_BUCKET_PREPROD + +scp_subdir_preprod: + doc: uploader settings scp + default: preprod + env: SCP_SUBDIR_PREPROD + +scp_subdir_prod: + doc: uploader settings scp + default: prod + env: SCP_SUBDIR_PROD + +port: + doc: port + default: 5000 + env: PORT \ No newline at end of file diff --git a/client-admin/gulpfile.js b/client-admin/gulpfile.js index 365202f471..747208e72e 100644 --- a/client-admin/gulpfile.js +++ b/client-admin/gulpfile.js @@ -13,8 +13,7 @@ var rimraf = require("rimraf"); var runSequence = require("run-sequence"); var scp = require("gulp-scp2"); -let POLIS_ROOT = process.env.POLIS_ROOT -var config = require(POLIS_ROOT + 'config/config.js'); +var config = require(__dirname + 'config/config.js'); console.log("Uploader: " + config.get('uploader')); diff --git a/client-participation/config/config.js b/client-participation/config/config.js new file mode 100644 index 0000000000..6908014715 --- /dev/null +++ b/client-participation/config/config.js @@ -0,0 +1,55 @@ +// Copyright (C) 2012-present, The Authors. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License, version 3, as published by the Free Software Foundation. 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 Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . + +"use strict"; + +console.log('starting config.js') + +const convict = require('convict'); +const fs = require('fs'); +const yaml = require('js-yaml'); + +convict.addParser({ extension: ['yml', 'yaml'], parse: yaml.safeLoad }); + +// for additional validation options, use the following: +// convict.addFormat(require('convict-format-with-validator').ipaddress); + +'use strict'; + +// Define a schema + +try { + // the next line only works with docker-compose + console.log('reading schema') + let fileContents = fs.readFileSync('/app/config/schema.yaml', 'utf8'); + let schema = yaml.safeLoad(fileContents); + var config = convict(schema); +} catch (e) { + console.log(e); +} + +console.log('default aws_region:' + config.get('aws_region')); + +// Load environment dependent configuration +var env = config.get('env'); +config.loadFile('/app/config/' + env + '.yaml'); +var now = new Date(); +console.log('config aws_region:' + config.get('aws_region') + " @ " + now.toUTCString()); + +const path = '/app/config/config_private.yaml'; + +try { + if (fs.existsSync(path)) { + config.loadFile(path); + } +} catch(err) { + console.error(err) +} + +// Perform validation +config.validate({allowed: 'strict'}); + +module.exports = config; + + +console.log('finishing config.js') + diff --git a/client-participation/config/schema.yaml b/client-participation/config/schema.yaml new file mode 100644 index 0000000000..c2bea1785a --- /dev/null +++ b/client-participation/config/schema.yaml @@ -0,0 +1,65 @@ +domainWhitelist: + doc: domainWhitelist + default: + - ^localhost$ + - ^192\\.168\\.1\\.141$ + - ^192\\.168\\.1\\.140$ + - ^pol\\.is + - .+\\.pol\\.is$ + - ^xip\\.io$ + - .+\\.xip\\.io$ + env: DOMAIN_WHITELIST + +uploader: + doc: uploader for compiled static javascript + format: + - local + - s3 + - scp + default: local + env: UPLOADER + +service_url: + doc: Point to a polisServer instance (local recommended for dev) + default: http://localhost:5000 + env: SERVICE_URL + +client_participation_port: + doc: Note that this must match the participation client port specified in polisServer instance + default: 5001 + env: CLIENT_PARTICIPATION_PORT + +fb_app_id: + doc: must register with facebook and get a facebook app id to use the facebook auth features + default: 661042417336977 + env: FB_APP_ID + +local_output_path: + doc: Uploader settings local + default: ./build + env: LOCAL_OUTPUT_PATH + +s3_bucket_prod: + doc: uploader settings s3 + default: pol.is + env: S3_BUCKET_PROD + +s3_bucket_preprod: + doc: uploader settings s3 + default: preprod.pol.is + env: S3_BUCKET_PREPROD + +scp_subdir_preprod: + doc: uploader settings scp + default: preprod + env: SCP_SUBDIR_PREPROD + +scp_subdir_prod: + doc: uploader settings scp + default: prod + env: SCP_SUBDIR_PROD + +port: + doc: port + default: 5000 + env: PORT \ No newline at end of file diff --git a/client-participation/gulpfile.js b/client-participation/gulpfile.js index ac5affcc09..664fed2817 100644 --- a/client-participation/gulpfile.js +++ b/client-participation/gulpfile.js @@ -50,8 +50,7 @@ var spawn = require("child_process").spawn; var Stream = require("stream"); var url = require("url"); -let POLIS_ROOT = process.env.POLIS_ROOT -var config = require(POLIS_ROOT + 'config/config.js'); +var config = require(__dirname + 'config/config.js'); console.log("Uploader: " + config.get('uploader')); diff --git a/client-report/config/config.js b/client-report/config/config.js new file mode 100644 index 0000000000..6908014715 --- /dev/null +++ b/client-report/config/config.js @@ -0,0 +1,55 @@ +// Copyright (C) 2012-present, The Authors. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License, version 3, as published by the Free Software Foundation. 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 Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . + +"use strict"; + +console.log('starting config.js') + +const convict = require('convict'); +const fs = require('fs'); +const yaml = require('js-yaml'); + +convict.addParser({ extension: ['yml', 'yaml'], parse: yaml.safeLoad }); + +// for additional validation options, use the following: +// convict.addFormat(require('convict-format-with-validator').ipaddress); + +'use strict'; + +// Define a schema + +try { + // the next line only works with docker-compose + console.log('reading schema') + let fileContents = fs.readFileSync('/app/config/schema.yaml', 'utf8'); + let schema = yaml.safeLoad(fileContents); + var config = convict(schema); +} catch (e) { + console.log(e); +} + +console.log('default aws_region:' + config.get('aws_region')); + +// Load environment dependent configuration +var env = config.get('env'); +config.loadFile('/app/config/' + env + '.yaml'); +var now = new Date(); +console.log('config aws_region:' + config.get('aws_region') + " @ " + now.toUTCString()); + +const path = '/app/config/config_private.yaml'; + +try { + if (fs.existsSync(path)) { + config.loadFile(path); + } +} catch(err) { + console.error(err) +} + +// Perform validation +config.validate({allowed: 'strict'}); + +module.exports = config; + + +console.log('finishing config.js') + diff --git a/client-report/config/schema.yaml b/client-report/config/schema.yaml new file mode 100644 index 0000000000..c2bea1785a --- /dev/null +++ b/client-report/config/schema.yaml @@ -0,0 +1,65 @@ +domainWhitelist: + doc: domainWhitelist + default: + - ^localhost$ + - ^192\\.168\\.1\\.141$ + - ^192\\.168\\.1\\.140$ + - ^pol\\.is + - .+\\.pol\\.is$ + - ^xip\\.io$ + - .+\\.xip\\.io$ + env: DOMAIN_WHITELIST + +uploader: + doc: uploader for compiled static javascript + format: + - local + - s3 + - scp + default: local + env: UPLOADER + +service_url: + doc: Point to a polisServer instance (local recommended for dev) + default: http://localhost:5000 + env: SERVICE_URL + +client_participation_port: + doc: Note that this must match the participation client port specified in polisServer instance + default: 5001 + env: CLIENT_PARTICIPATION_PORT + +fb_app_id: + doc: must register with facebook and get a facebook app id to use the facebook auth features + default: 661042417336977 + env: FB_APP_ID + +local_output_path: + doc: Uploader settings local + default: ./build + env: LOCAL_OUTPUT_PATH + +s3_bucket_prod: + doc: uploader settings s3 + default: pol.is + env: S3_BUCKET_PROD + +s3_bucket_preprod: + doc: uploader settings s3 + default: preprod.pol.is + env: S3_BUCKET_PREPROD + +scp_subdir_preprod: + doc: uploader settings scp + default: preprod + env: SCP_SUBDIR_PREPROD + +scp_subdir_prod: + doc: uploader settings scp + default: prod + env: SCP_SUBDIR_PROD + +port: + doc: port + default: 5000 + env: PORT \ No newline at end of file diff --git a/client-report/gulpfile.js b/client-report/gulpfile.js index f9ca7c04f4..adf2bff658 100644 --- a/client-report/gulpfile.js +++ b/client-report/gulpfile.js @@ -14,8 +14,7 @@ var rimraf = require("rimraf"); var runSequence = require('run-sequence'); var scp = require('gulp-scp2'); -let POLIS_ROOT = process.env.POLIS_ROOT -var config = require(POLIS_ROOT + 'config/config.js'); +var config = require(__dirname + 'config/config.js'); console.log("Uploader: " + config.get('uploader')); From a477ba15c6f883ec1c4dce1d703afd9bbdc98467 Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Sun, 19 Dec 2021 14:45:41 +0100 Subject: [PATCH 14/49] Fix in config file path in gulpfile --- client-admin/gulpfile.js | 2 +- client-participation/gulpfile.js | 2 +- client-report/gulpfile.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client-admin/gulpfile.js b/client-admin/gulpfile.js index 747208e72e..7f043a0134 100644 --- a/client-admin/gulpfile.js +++ b/client-admin/gulpfile.js @@ -13,7 +13,7 @@ var rimraf = require("rimraf"); var runSequence = require("run-sequence"); var scp = require("gulp-scp2"); -var config = require(__dirname + 'config/config.js'); +var config = require(__dirname + '/config/config.js'); console.log("Uploader: " + config.get('uploader')); diff --git a/client-participation/gulpfile.js b/client-participation/gulpfile.js index 664fed2817..209fdd83db 100644 --- a/client-participation/gulpfile.js +++ b/client-participation/gulpfile.js @@ -50,7 +50,7 @@ var spawn = require("child_process").spawn; var Stream = require("stream"); var url = require("url"); -var config = require(__dirname + 'config/config.js'); +var config = require(__dirname + '/config/config.js'); console.log("Uploader: " + config.get('uploader')); diff --git a/client-report/gulpfile.js b/client-report/gulpfile.js index adf2bff658..03dc5621f6 100644 --- a/client-report/gulpfile.js +++ b/client-report/gulpfile.js @@ -14,7 +14,7 @@ var rimraf = require("rimraf"); var runSequence = require('run-sequence'); var scp = require('gulp-scp2'); -var config = require(__dirname + 'config/config.js'); +var config = require(__dirname + '/config/config.js'); console.log("Uploader: " + config.get('uploader')); From 0038801e679592e7c2f0a6709640d03a4c213fcd Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Sun, 19 Dec 2021 14:47:56 +0100 Subject: [PATCH 15/49] Added node-convict to package.json --- client-admin/package.json | 1 + client-participation/package.json | 1 + client-report/package.json | 1 + 3 files changed, 3 insertions(+) diff --git a/client-admin/package.json b/client-admin/package.json index b2b89724a3..1b92b17be8 100644 --- a/client-admin/package.json +++ b/client-admin/package.json @@ -9,6 +9,7 @@ "build:webpack_unminified": "npm run clean && NODE_ENV=development webpack --config webpack.config.unminified.js", "build": "npm run build:webpack", "build-debug": "npm run build:webpack_unminified", + "convict": "6.0.0", "deploy:prod": "node gulpfile.js deploy_TO_PRODUCTION", "deploy:preprod": "node gulpfile.js deployPreprod", "start": "./x", diff --git a/client-participation/package.json b/client-participation/package.json index 9cfd413763..34c344678b 100644 --- a/client-participation/package.json +++ b/client-participation/package.json @@ -18,6 +18,7 @@ "bootstrap-sass": "^3.4.1", "brain": "~0.6.3", "combine-css": "0.0.2", + "convict": "6.0.0", "d3": "^3.5.17", "d3-force": "^1.2.1", "d3-tip": "^0.6.7", diff --git a/client-report/package.json b/client-report/package.json index a4e58ba42c..fee01b8516 100644 --- a/client-report/package.json +++ b/client-report/package.json @@ -6,6 +6,7 @@ "clean": "rimraf dist", "build:webpack": "NODE_ENV=production webpack --config webpack.config.js", "build": "npm run clean && npm run build:webpack", + "convict": "6.0.0", "deploy:preprod": "gulp deployPreprod", "deploy:prod": "gulp deploy_TO_PRODUCTION", "start": "node dev-server.js", From 1cbdb96234f6ba7dae7e5955d01014df2e9005fd Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Sun, 19 Dec 2021 15:20:27 +0100 Subject: [PATCH 16/49] Added convict to package-lock.json --- client-participation/package-lock.json | 30 ++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/client-participation/package-lock.json b/client-participation/package-lock.json index c1552cef9f..b02072302a 100644 --- a/client-participation/package-lock.json +++ b/client-participation/package-lock.json @@ -2397,6 +2397,15 @@ "safe-buffer": "~5.1.1" } }, + "convict": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/convict/-/convict-6.0.0.tgz", + "integrity": "sha512-osfPkv5yjVoZqrTWBXuh/ABGpFoaJplbt0WXr0CodR4CSWt8UnzY4PSUyRz/+5BX5YUtWcToG29Kr0B6xhdIMg==", + "requires": { + "lodash.clonedeep": "^4.5.0", + "yargs-parser": "^18.1.3" + } + }, "cookie": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.2.tgz", @@ -7523,6 +7532,11 @@ "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=" }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, "lodash.defaults": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-2.4.1.tgz", @@ -12703,6 +12717,22 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + } + } + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", From cb457c917abd94b1059dbc301e8c70a40bf6e2f9 Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Sun, 19 Dec 2021 15:25:04 +0100 Subject: [PATCH 17/49] Added js-yaml to package.json --- client-participation/package-lock.json | 27 ++++++++++++++++++++++++++ client-participation/package.json | 1 + 2 files changed, 28 insertions(+) diff --git a/client-participation/package-lock.json b/client-participation/package-lock.json index b02072302a..48e477c7a7 100644 --- a/client-participation/package-lock.json +++ b/client-participation/package-lock.json @@ -789,6 +789,14 @@ "readable-stream": "^2.0.6" } }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, "arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", @@ -3468,6 +3476,11 @@ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "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==" + }, "esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -6994,6 +7007,15 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "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", @@ -10334,6 +10356,11 @@ "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=" + }, "ssh2": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-0.3.6.tgz", diff --git a/client-participation/package.json b/client-participation/package.json index 34c344678b..b03d6cd70f 100644 --- a/client-participation/package.json +++ b/client-participation/package.json @@ -36,6 +36,7 @@ "handlebones": "github:pol-is/handlebones#master", "hull.js": "^0.2.10", "jquery": "~1.11", + "js-yaml": "3.14.0", "lodash": "4.17.21", "map-stream": "~0.1.0", "markdown": "^0.5.0", From ebb4a400a2cbf442477bb545ad16e2a8d2767be1 Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Sun, 19 Dec 2021 15:35:02 +0100 Subject: [PATCH 18/49] Bug fixes in yaml config --- client-participation/config/development.yaml | 22 ++++++++++ client-participation/config/schema.yaml | 14 +++++++ client-participation/gulpfile.js | 42 ++++++++++---------- 3 files changed, 57 insertions(+), 21 deletions(-) create mode 100644 client-participation/config/development.yaml diff --git a/client-participation/config/development.yaml b/client-participation/config/development.yaml new file mode 100644 index 0000000000..56a4b49f03 --- /dev/null +++ b/client-participation/config/development.yaml @@ -0,0 +1,22 @@ +# Precedence order (https://www.npmjs.com/package/convict) +# When merging configuration values from different sources, Convict follows precedence rules. The order, from lowest to highest, for config.loadFile(file) and config.load(json) is: + +# Default value +# File or json set in function argument +# Environment variables (only used when env property is set in schema) +# Command line arguments (only used when arg property is set in schema) + +# for easy json/yaml conversion: https://www.json2yaml.com/ + +aws_region: us-north-14 + +# aws_access_key_id: +# doc: aws_access_key_id +# default: NA +# env: AWS_ACCESS_KEY_ID +# sensitive: true +# aws_secret_access_key: +# doc: aws_secret_access_key +# default: NA +# env: AWS_SECRET_ACCESS_KEY +# sensitive: true diff --git a/client-participation/config/schema.yaml b/client-participation/config/schema.yaml index c2bea1785a..458b5ac658 100644 --- a/client-participation/config/schema.yaml +++ b/client-participation/config/schema.yaml @@ -1,3 +1,17 @@ +env: + doc: The application environment + format: + - production + - development + - test + default: development + env: NODE_ENV + +aws_region: + doc: aws_region + default: us-east-1 + env: AWS_REGION + domainWhitelist: doc: domainWhitelist default: diff --git a/client-participation/gulpfile.js b/client-participation/gulpfile.js index 209fdd83db..f5d3ba018d 100644 --- a/client-participation/gulpfile.js +++ b/client-participation/gulpfile.js @@ -50,9 +50,9 @@ var spawn = require("child_process").spawn; var Stream = require("stream"); var url = require("url"); -var config = require(__dirname + '/config/config.js'); +var yaml_config = require(__dirname + '/config/config.js'); -console.log("Uploader: " + config.get('uploader')); +console.log("Uploader: " + yaml_config.get('uploader')); // WARNING: useJsHint gets mutated in watch builds var useJsHint = true; @@ -108,7 +108,7 @@ function prepPathForTemplate(path) { gulp.task("connect", [], function () { function proxyToPreprod(req, response) { var x = request( - (config.get('service_url') || "https://preprod.pol.is") + req.originalUrl + (yaml_config.get('service_url') || "https://preprod.pol.is") + req.originalUrl ); x.on("error", function (err) { response.status(500).end(); @@ -232,8 +232,8 @@ gulp.task("connect", [], function () { app.use(/^\/wimp$/, express.static(path.join(destRootBase, "wimp.html"))); app.use(/^\/try$/, express.static(path.join(destRootBase, "try.html"))); - app.listen(config.get('port')); - console.log("listening on localhost:" + config.get('port')); + app.listen(yaml_config.get('port')); + console.log("listening on localhost:" + yaml_config.get('port')); }); function getGitHash() { @@ -285,7 +285,7 @@ gulp.task("embedJs", function () { ]) .pipe( template({ - polisHostName: config.get('service_hostname') || "pol.is", + polisHostName: yaml_config.get('service_hostname') || "pol.is", }) ) // .pipe(template({ @@ -298,14 +298,14 @@ gulp.task("embedJs", function () { gulp.task("index", [], function () { var s = gulp.src("index.html"); var basepath = prepPathForTemplate(destRootRest); - var domainWhitelist = '["' + config.get('domainWhitelist').join('","') + '"]'; + var domainWhitelist = '["' + yaml_config.get('domainWhitelist').join('","') + '"]'; if (devMode) { s = s.pipe( template({ basepath: basepath, basepath_visbundle: basepath_visbundle_dev, d3Filename: "d3.js", - fbAppId: config.get('fb_app_id'), + fbAppId: yaml_config.get('fb_app_id'), useIntercom: !isTrue(config.get('disable_intercom')), versionString: versionString, domainWhitelist: domainWhitelist, @@ -318,8 +318,8 @@ gulp.task("index", [], function () { basepath: basepath, // proxy through server (cached by cloudflare, and easier than choosing a bucket for preprod, etc) basepath_visbundle: basepath, d3Filename: "d3.min.js", - fbAppId: config.get('fb_app_id'), - useIntercom: !isTrue(config.get('disable_intercom')), + fbAppId: yaml_config.get('fb_app_id'), + useIntercom: !isTrue(yaml_config.get('disable_intercom')), versionString: versionString, domainWhitelist: domainWhitelist, }) @@ -656,15 +656,15 @@ gulp.task("scriptsD3v4", function () { gulp.task("preprodConfig", function () { preprodMode = true; minified = true; - scpSubdir = config.get('scp_subdir_preprod'); - s3Subdir = config.get('s3_bucket_preprod'); + scpSubdir = yaml_config.get('scp_subdir_preprod'); + s3Subdir = yaml_config.get('s3_bucket_preprod'); }); gulp.task("prodConfig", function () { prodMode = true; minified = true; - scpSubdir = config.get('scp_subdir_prod'); - s3Subdir = config.get('s3_bucket_prod'); + scpSubdir = yaml_config.get('scp_subdir_prod'); + s3Subdir = yaml_config.get('s3_bucket_prod'); }); gulp.task("unminifiedConfig", function () { @@ -790,12 +790,12 @@ gulp.task("deploy_TO_PRODUCTION", ["prodConfig", "dist"], function () { notifySlackOfDeployment("prod"); var uploader; - if ("s3" === config.get('uploader')) { + if ("s3" === yaml_config.get('uploader')) { uploader = s3uploader({ bucket: s3Subdir, }); } - if ("scp" === config.get('uploader')) { + if ("scp" === yaml_config.get('uploader')) { uploader = scpUploader({ // TODO needs to upload as prod somehow. // subdir: "cached", @@ -806,7 +806,7 @@ gulp.task("deploy_TO_PRODUCTION", ["prodConfig", "dist"], function () { }, }); } - if ("local" === config.get('uploader')) { + if ("local" === yaml_config.get('uploader')) { uploader = localUploader; uploader.needsHeadersJson = true; } @@ -817,12 +817,12 @@ function doUpload() { notifySlackOfDeployment("preprod"); var uploader; - if ("s3" === config.get('uploader')) { + if ("s3" === yaml_config.get('uploader')) { uploader = s3uploader({ bucket: s3Subdir, }); } - if ("scp" === config.get('uploader')) { + if ("scp" === yaml_config.get('uploader')) { uploader = scpUploader({ // TODO needs to upload as PREprod somehow. // subdir: "cached", @@ -833,7 +833,7 @@ function doUpload() { }, }); } - if ("local" === config.get('uploader')) { + if ("local" === yaml_config.get('uploader')) { uploader = localUploader; uploader.needsHeadersJson = true; } @@ -857,7 +857,7 @@ gulp.task("deploySurvey", ["prodConfig", "dist"], function () { function localUploader(params) { params.subdir = params.subdir || ""; - return gulp.dest(path.join(config.get('local_output_path'), params.subdir)); + return gulp.dest(path.join(yaml_config.get('local_output_path'), params.subdir)); } function s3uploader(params) { From e590c29709c2fbbbfc344f694abc4d3d6c39dbb5 Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Sun, 19 Dec 2021 15:47:29 +0100 Subject: [PATCH 19/49] Fixes in yaml config files --- client-admin/config/development.yaml | 22 ++++++++++++++++++++++ client-admin/config/schema.yaml | 25 ++++++++++++++++++++++++- client-participation/config/schema.yaml | 11 ++++++++++- client-report/config/development.yaml | 22 ++++++++++++++++++++++ client-report/config/schema.yaml | 25 ++++++++++++++++++++++++- 5 files changed, 102 insertions(+), 3 deletions(-) create mode 100644 client-admin/config/development.yaml create mode 100644 client-report/config/development.yaml diff --git a/client-admin/config/development.yaml b/client-admin/config/development.yaml new file mode 100644 index 0000000000..56a4b49f03 --- /dev/null +++ b/client-admin/config/development.yaml @@ -0,0 +1,22 @@ +# Precedence order (https://www.npmjs.com/package/convict) +# When merging configuration values from different sources, Convict follows precedence rules. The order, from lowest to highest, for config.loadFile(file) and config.load(json) is: + +# Default value +# File or json set in function argument +# Environment variables (only used when env property is set in schema) +# Command line arguments (only used when arg property is set in schema) + +# for easy json/yaml conversion: https://www.json2yaml.com/ + +aws_region: us-north-14 + +# aws_access_key_id: +# doc: aws_access_key_id +# default: NA +# env: AWS_ACCESS_KEY_ID +# sensitive: true +# aws_secret_access_key: +# doc: aws_secret_access_key +# default: NA +# env: AWS_SECRET_ACCESS_KEY +# sensitive: true diff --git a/client-admin/config/schema.yaml b/client-admin/config/schema.yaml index c2bea1785a..b6096ab215 100644 --- a/client-admin/config/schema.yaml +++ b/client-admin/config/schema.yaml @@ -1,3 +1,17 @@ +env: + doc: The application environment + format: + - production + - development + - test + default: development + env: NODE_ENV + +aws_region: + doc: aws_region + default: us-east-1 + env: AWS_REGION + domainWhitelist: doc: domainWhitelist default: @@ -62,4 +76,13 @@ scp_subdir_prod: port: doc: port default: 5000 - env: PORT \ No newline at end of file + env: PORT + +service_hostname: + doc: service_hostname + default: undefined + env: SERVICE_HOSTNAME +disable_intercom: + doc: disable_intercom + default: true + env: DISABLE_INTERCOM \ No newline at end of file diff --git a/client-participation/config/schema.yaml b/client-participation/config/schema.yaml index 458b5ac658..b6096ab215 100644 --- a/client-participation/config/schema.yaml +++ b/client-participation/config/schema.yaml @@ -76,4 +76,13 @@ scp_subdir_prod: port: doc: port default: 5000 - env: PORT \ No newline at end of file + env: PORT + +service_hostname: + doc: service_hostname + default: undefined + env: SERVICE_HOSTNAME +disable_intercom: + doc: disable_intercom + default: true + env: DISABLE_INTERCOM \ No newline at end of file diff --git a/client-report/config/development.yaml b/client-report/config/development.yaml new file mode 100644 index 0000000000..56a4b49f03 --- /dev/null +++ b/client-report/config/development.yaml @@ -0,0 +1,22 @@ +# Precedence order (https://www.npmjs.com/package/convict) +# When merging configuration values from different sources, Convict follows precedence rules. The order, from lowest to highest, for config.loadFile(file) and config.load(json) is: + +# Default value +# File or json set in function argument +# Environment variables (only used when env property is set in schema) +# Command line arguments (only used when arg property is set in schema) + +# for easy json/yaml conversion: https://www.json2yaml.com/ + +aws_region: us-north-14 + +# aws_access_key_id: +# doc: aws_access_key_id +# default: NA +# env: AWS_ACCESS_KEY_ID +# sensitive: true +# aws_secret_access_key: +# doc: aws_secret_access_key +# default: NA +# env: AWS_SECRET_ACCESS_KEY +# sensitive: true diff --git a/client-report/config/schema.yaml b/client-report/config/schema.yaml index c2bea1785a..b6096ab215 100644 --- a/client-report/config/schema.yaml +++ b/client-report/config/schema.yaml @@ -1,3 +1,17 @@ +env: + doc: The application environment + format: + - production + - development + - test + default: development + env: NODE_ENV + +aws_region: + doc: aws_region + default: us-east-1 + env: AWS_REGION + domainWhitelist: doc: domainWhitelist default: @@ -62,4 +76,13 @@ scp_subdir_prod: port: doc: port default: 5000 - env: PORT \ No newline at end of file + env: PORT + +service_hostname: + doc: service_hostname + default: undefined + env: SERVICE_HOSTNAME +disable_intercom: + doc: disable_intercom + default: true + env: DISABLE_INTERCOM \ No newline at end of file From c1c9f0c0f79ce028fff2060829e25c2a107def5d Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Sun, 19 Dec 2021 15:53:33 +0100 Subject: [PATCH 20/49] Updated dependencies for client-admin --- client-admin/package-lock.json | 54 +++++++++++++++++++++------------- client-admin/package.json | 2 ++ 2 files changed, 36 insertions(+), 20 deletions(-) diff --git a/client-admin/package-lock.json b/client-admin/package-lock.json index a748561b73..002c7b378b 100644 --- a/client-admin/package-lock.json +++ b/client-admin/package-lock.json @@ -5086,7 +5086,6 @@ "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" } @@ -5773,6 +5772,11 @@ "get-intrinsic": "^1.0.0" } }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, "camelcase-css": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", @@ -6065,6 +6069,15 @@ "safe-buffer": "~5.1.1" } }, + "convict": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/convict/-/convict-6.0.0.tgz", + "integrity": "sha512-osfPkv5yjVoZqrTWBXuh/ABGpFoaJplbt0WXr0CodR4CSWt8UnzY4PSUyRz/+5BX5YUtWcToG29Kr0B6xhdIMg==", + "requires": { + "lodash.clonedeep": "^4.5.0", + "yargs-parser": "^18.1.3" + } + }, "cookie": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", @@ -6341,8 +6354,7 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, "decode-uri-component": { "version": "0.2.0", @@ -7315,8 +7327,7 @@ "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 + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { "version": "1.4.0", @@ -9647,10 +9658,9 @@ "integrity": "sha1-eZA/VWPud4zBFi5tzxoAJ8l/nLU=" }, "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -10069,6 +10079,11 @@ "lodash._objecttypes": "~2.4.1" } }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -11418,15 +11433,6 @@ "integrity": "sha512-K5J34NKeGyJvVVHUg4cAWDhtVYzT7UIRE9GbFyqHNZd61Pr0DHNTMsgoID7IVDmKc0QaLswYwKaNR2apbUJvkg==", "dev": true }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, "pretty-hrtime": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", @@ -13051,8 +13057,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "ssh2": { "version": "0.3.6", @@ -15011,6 +15016,15 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/client-admin/package.json b/client-admin/package.json index 1b92b17be8..818c0aef56 100644 --- a/client-admin/package.json +++ b/client-admin/package.json @@ -59,8 +59,10 @@ }, "dependencies": { "boolean": "^3.0.2", + "convict": "6.0.0", "d3-scale": "^3.2.3", "jquery": "^2.1.4", + "js-yaml": "3.14.0", "lodash": "^4.17.21", "prop-types": "^15.7.2", "react": "^16.14.0", From 2f30f9713fc4dd00d5a4c9b45704a749fb54d686 Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Sun, 19 Dec 2021 15:58:37 +0100 Subject: [PATCH 21/49] Fix in yaml config for client-amdin --- client-admin/config/schema.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client-admin/config/schema.yaml b/client-admin/config/schema.yaml index b6096ab215..95fcbd0fd7 100644 --- a/client-admin/config/schema.yaml +++ b/client-admin/config/schema.yaml @@ -82,6 +82,10 @@ service_hostname: doc: service_hostname default: undefined env: SERVICE_HOSTNAME +disable_plans: + doc: disable_plans + default: true + env: DISABLE_PLANS disable_intercom: doc: disable_intercom default: true From a96fac80e897ad4f7249d501c2462060483d4aca Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Sun, 19 Dec 2021 16:04:40 +0100 Subject: [PATCH 22/49] Updated dependencies for client-report --- client-report/package.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client-report/package.json b/client-report/package.json index fee01b8516..a54cbecdcc 100644 --- a/client-report/package.json +++ b/client-report/package.json @@ -46,12 +46,14 @@ }, "dependencies": { "color": "^0.7.3", + "convict": "6.0.0", "d3": "^4.6.0", "d3-contour": "^1.1.1", "d3-scale-chromatic": "^1.1.1", "history": "^1.12.5", "hull.js": "^0.2.10", "jquery": "^2.1.4", + "js-yaml": "3.14.0", "lodash": "4.17.21", "moment": "^2.14.1", "moment-range": "^2.2.0", From 7b8cd57155bdbdbc7de5d8b1e63435a529014746 Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Sun, 19 Dec 2021 16:07:33 +0100 Subject: [PATCH 23/49] Fix in package-lock.json for client-report --- client-report/package-lock.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/client-report/package-lock.json b/client-report/package-lock.json index b9afddfe38..27c99e7de2 100644 --- a/client-report/package-lock.json +++ b/client-report/package-lock.json @@ -1343,6 +1343,15 @@ "safe-buffer": "~5.1.1" } }, + "convict": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/convict/-/convict-6.0.0.tgz", + "integrity": "sha512-osfPkv5yjVoZqrTWBXuh/ABGpFoaJplbt0WXr0CodR4CSWt8UnzY4PSUyRz/+5BX5YUtWcToG29Kr0B6xhdIMg==", + "requires": { + "lodash.clonedeep": "^4.5.0", + "yargs-parser": "^18.1.3" + } + }, "cookie": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", From eddbeb25f9ab9ec5a619de8ec563fdb5cff758a5 Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Sun, 19 Dec 2021 16:16:32 +0100 Subject: [PATCH 24/49] Updated dependencies for client-report --- client-report/package-lock.json | 2977 ++++++++++++++++--------------- client-report/package.json | 3 +- 2 files changed, 1499 insertions(+), 1481 deletions(-) diff --git a/client-report/package-lock.json b/client-report/package-lock.json index 27c99e7de2..d22b4a9b9c 100644 --- a/client-report/package-lock.json +++ b/client-report/package-lock.json @@ -10,7 +10,7 @@ "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=", "dev": true, "requires": { - "mime-types": "~2.1.24", + "mime-types": "2.1.27", "negotiator": "0.6.2" } }, @@ -26,7 +26,7 @@ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, "requires": { - "acorn": "^3.0.4" + "acorn": "3.3.0" }, "dependencies": { "acorn": { @@ -48,10 +48,10 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", "integrity": "sha1-xinF7O0XuvMUQ3kY0tqIyZ1ZWM0=", "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" + "fast-deep-equal": "3.1.1", + "fast-json-stable-stringify": "2.1.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" } }, "ajv-keywords": { @@ -66,9 +66,9 @@ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" }, "dependencies": { "kind-of": { @@ -77,7 +77,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -88,7 +88,7 @@ "integrity": "sha1-x1iICGF1cgNKrmJICvJrHU0cs80=", "dev": true, "requires": { - "stable": "~0.1.3" + "stable": "0.1.8" } }, "amdefine": { @@ -142,8 +142,8 @@ "integrity": "sha1-VT3Lj5HjyImEXf26NMd3IbkLnXo=", "dev": true, "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" + "micromatch": "2.3.11", + "normalize-path": "2.1.1" }, "dependencies": { "arr-diff": { @@ -152,7 +152,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "^1.0.1" + "arr-flatten": "1.1.0" } }, "array-unique": { @@ -167,9 +167,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.3" } }, "expand-brackets": { @@ -178,7 +178,7 @@ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "^0.1.0" + "is-posix-bracket": "0.1.1" } }, "extglob": { @@ -187,7 +187,7 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } }, "is-extglob": { @@ -202,7 +202,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } }, "kind-of": { @@ -211,7 +211,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } }, "micromatch": { @@ -220,19 +220,19 @@ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" } } } @@ -246,10 +246,9 @@ "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", - "dev": true, + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "requires": { - "sprintf-js": "~1.0.2" + "sprintf-js": "1.0.3" } }, "arr-diff": { @@ -328,7 +327,7 @@ "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", "dev": true, "requires": { - "safer-buffer": "~2.1.0" + "safer-buffer": "2.1.2" } }, "assert": { @@ -337,7 +336,7 @@ "integrity": "sha1-VcEJqvbgrv2z3EtxJAxwv1dLGOs=", "dev": true, "requires": { - "object-assign": "^4.1.1", + "object-assign": "4.1.1", "util": "0.10.3" }, "dependencies": { @@ -426,52 +425,52 @@ "integrity": "sha1-H8ruedfmG3ULALjlT238nQr4ZVg=", "dev": true, "requires": { - "babel-plugin-constant-folding": "^1.0.1", - "babel-plugin-dead-code-elimination": "^1.0.2", - "babel-plugin-eval": "^1.0.1", - "babel-plugin-inline-environment-variables": "^1.0.1", - "babel-plugin-jscript": "^1.0.4", - "babel-plugin-member-expression-literals": "^1.0.1", - "babel-plugin-property-literals": "^1.0.1", - "babel-plugin-proto-to-assign": "^1.0.3", - "babel-plugin-react-constant-elements": "^1.0.3", - "babel-plugin-react-display-name": "^1.0.3", - "babel-plugin-remove-console": "^1.0.1", - "babel-plugin-remove-debugger": "^1.0.1", - "babel-plugin-runtime": "^1.0.7", - "babel-plugin-undeclared-variables-check": "^1.0.2", - "babel-plugin-undefined-to-void": "^1.1.6", - "babylon": "^5.8.38", - "bluebird": "^2.9.33", - "chalk": "^1.0.0", - "convert-source-map": "^1.1.0", - "core-js": "^1.0.0", - "debug": "^2.1.1", - "detect-indent": "^3.0.0", - "esutils": "^2.0.0", - "fs-readdir-recursive": "^0.1.0", - "globals": "^6.4.0", - "home-or-tmp": "^1.0.0", - "is-integer": "^1.0.4", + "babel-plugin-constant-folding": "1.0.1", + "babel-plugin-dead-code-elimination": "1.0.2", + "babel-plugin-eval": "1.0.1", + "babel-plugin-inline-environment-variables": "1.0.1", + "babel-plugin-jscript": "1.0.4", + "babel-plugin-member-expression-literals": "1.0.1", + "babel-plugin-property-literals": "1.0.1", + "babel-plugin-proto-to-assign": "1.0.4", + "babel-plugin-react-constant-elements": "1.0.3", + "babel-plugin-react-display-name": "1.0.3", + "babel-plugin-remove-console": "1.0.1", + "babel-plugin-remove-debugger": "1.0.1", + "babel-plugin-runtime": "1.0.7", + "babel-plugin-undeclared-variables-check": "1.0.2", + "babel-plugin-undefined-to-void": "1.1.6", + "babylon": "5.8.38", + "bluebird": "2.11.0", + "chalk": "1.1.3", + "convert-source-map": "1.7.0", + "core-js": "1.2.7", + "debug": "2.6.9", + "detect-indent": "3.0.1", + "esutils": "2.0.3", + "fs-readdir-recursive": "0.1.2", + "globals": "6.4.1", + "home-or-tmp": "1.0.0", + "is-integer": "1.0.7", "js-tokens": "1.0.1", - "json5": "^0.4.0", - "lodash": "^3.10.0", - "minimatch": "^2.0.3", - "output-file-sync": "^1.1.0", - "path-exists": "^1.0.0", - "path-is-absolute": "^1.0.0", - "private": "^0.1.6", + "json5": "0.4.0", + "lodash": "3.10.1", + "minimatch": "2.0.10", + "output-file-sync": "1.1.2", + "path-exists": "1.0.0", + "path-is-absolute": "1.0.1", + "private": "0.1.8", "regenerator": "0.8.40", - "regexpu": "^1.3.0", - "repeating": "^1.1.2", - "resolve": "^1.1.6", - "shebang-regex": "^1.0.0", - "slash": "^1.0.0", - "source-map": "^0.5.0", - "source-map-support": "^0.2.10", - "to-fast-properties": "^1.0.0", - "trim-right": "^1.0.0", - "try-resolve": "^1.0.0" + "regexpu": "1.3.0", + "repeating": "1.1.3", + "resolve": "1.17.0", + "shebang-regex": "1.0.0", + "slash": "1.0.0", + "source-map": "0.5.7", + "source-map-support": "0.2.10", + "to-fast-properties": "1.0.3", + "trim-right": "1.0.1", + "try-resolve": "1.0.1" }, "dependencies": { "js-tokens": { @@ -498,7 +497,7 @@ "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", "dev": true, "requires": { - "is-finite": "^1.0.0" + "is-finite": "1.1.0" } } } @@ -509,10 +508,10 @@ "integrity": "sha1-T3nnpPWHns8D9Iyxb1UqNV/MMbI=", "dev": true, "requires": { - "acorn-to-esprima": "^1.0.5", - "babel-core": "^5.8.33", - "lodash.assign": "^3.2.0", - "lodash.pick": "^3.1.0" + "acorn-to-esprima": "1.0.7", + "babel-core": "5.8.38", + "lodash.assign": "3.2.0", + "lodash.pick": "3.1.0" }, "dependencies": { "lodash.pick": { @@ -521,11 +520,11 @@ "integrity": "sha1-8lKoVbIEa2G805BLJvdr0u/GVVA=", "dev": true, "requires": { - "lodash._baseflatten": "^3.0.0", - "lodash._bindcallback": "^3.0.0", - "lodash._pickbyarray": "^3.0.0", - "lodash._pickbycallback": "^3.0.0", - "lodash.restparam": "^3.0.0" + "lodash._baseflatten": "3.1.4", + "lodash._bindcallback": "3.0.1", + "lodash._pickbyarray": "3.0.2", + "lodash._pickbycallback": "3.0.0", + "lodash.restparam": "3.6.1" } } } @@ -536,9 +535,9 @@ "integrity": "sha1-d/4o2OYNDwVrHBvKJbhJTNqrnHY=", "dev": true, "requires": { - "babel-core": "^5.4.0", - "loader-utils": "^0.2.9", - "object-assign": "^3.0.0" + "babel-core": "5.8.38", + "loader-utils": "0.2.17", + "object-assign": "3.0.0" } }, "babel-plugin-constant-folding": { @@ -589,7 +588,7 @@ "integrity": "sha1-xJ56/QL1d7xNoF6i3wAiUM980SM=", "dev": true, "requires": { - "lodash": "^3.9.3" + "lodash": "3.10.1" }, "dependencies": { "lodash": { @@ -618,7 +617,7 @@ "integrity": "sha1-leJDgnoQkLuLbpP+fG9W+1wjsPs=", "dev": true, "requires": { - "path-parse": "^1.0.5" + "path-parse": "1.0.7" } }, "babel-plugin-remove-console": { @@ -645,7 +644,7 @@ "integrity": "sha1-XPGqU52BP/ZOmWQSkK9iCWX2Xe4=", "dev": true, "requires": { - "leven": "^1.0.2" + "leven": "1.0.2" } }, "babel-plugin-undefined-to-void": { @@ -659,7 +658,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-5.8.38.tgz", "integrity": "sha1-HAsC62MxL18If/IEUIJ7QlydTBk=", "requires": { - "core-js": "^1.0.0" + "core-js": "1.2.7" } }, "babylon": { @@ -679,13 +678,13 @@ "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", "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" + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.3.0", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.2", + "pascalcase": "0.1.1" }, "dependencies": { "define-property": { @@ -694,7 +693,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "is-accessor-descriptor": { @@ -703,7 +702,7 @@ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.3" } }, "is-data-descriptor": { @@ -712,7 +711,7 @@ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.3" } }, "is-descriptor": { @@ -721,9 +720,9 @@ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.3" } } } @@ -739,7 +738,7 @@ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "requires": { - "tweetnacl": "^0.14.3" + "tweetnacl": "0.14.5" } }, "beeper": { @@ -783,15 +782,15 @@ "dev": true, "requires": { "bytes": "3.1.0", - "content-type": "~1.0.4", + "content-type": "1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "1.1.2", "http-errors": "1.7.2", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", + "on-finished": "2.3.0", "qs": "6.7.0", "raw-body": "2.4.0", - "type-is": "~1.6.17" + "type-is": "1.6.18" }, "dependencies": { "qs": { @@ -817,7 +816,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -827,16 +826,16 @@ "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", "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" + "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.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" }, "dependencies": { "extend-shallow": { @@ -845,7 +844,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -862,7 +861,7 @@ "integrity": "sha1-BnFJtmjfMcS1hTPgLQHoBthgjiw=", "dev": true, "requires": { - "inherits": "^2.0.1" + "inherits": "2.0.4" } }, "browserify-zlib": { @@ -871,7 +870,7 @@ "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", "dev": true, "requires": { - "pako": "~0.2.0" + "pako": "0.2.9" } }, "buffer": { @@ -880,9 +879,9 @@ "integrity": "sha1-Iw6tNEACmIZEhBqwJEr4xEu+Pvg=", "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "base64-js": "1.3.1", + "ieee754": "1.1.13", + "isarray": "1.0.0" }, "dependencies": { "isarray": { @@ -917,15 +916,15 @@ "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", "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" + "collection-visit": "1.0.0", + "component-emitter": "1.3.0", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.1", + "to-object-path": "0.3.0", + "union-value": "1.0.1", + "unset-value": "1.0.0" } }, "caller-path": { @@ -934,7 +933,7 @@ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "dev": true, "requires": { - "callsites": "^0.2.0" + "callsites": "0.2.0" } }, "callsites": { @@ -955,8 +954,8 @@ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" + "camelcase": "2.1.1", + "map-obj": "1.0.1" } }, "caseless": { @@ -970,8 +969,8 @@ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "dev": true, "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" + "align-text": "0.1.4", + "lazy-cache": "1.0.4" } }, "chalk": { @@ -980,11 +979,11 @@ "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" + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" } }, "cheerio": { @@ -992,22 +991,22 @@ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash.assignin": "^4.0.9", - "lodash.bind": "^4.1.4", - "lodash.defaults": "^4.0.1", - "lodash.filter": "^4.4.0", - "lodash.flatten": "^4.2.0", - "lodash.foreach": "^4.3.0", - "lodash.map": "^4.4.0", - "lodash.merge": "^4.4.0", - "lodash.pick": "^4.2.1", - "lodash.reduce": "^4.4.0", - "lodash.reject": "^4.4.0", - "lodash.some": "^4.4.0" + "css-select": "1.2.0", + "dom-serializer": "0.1.1", + "entities": "1.1.2", + "htmlparser2": "3.10.1", + "lodash.assignin": "4.2.0", + "lodash.bind": "4.2.1", + "lodash.defaults": "4.2.0", + "lodash.filter": "4.6.0", + "lodash.flatten": "4.4.0", + "lodash.foreach": "4.5.0", + "lodash.map": "4.6.0", + "lodash.merge": "4.6.2", + "lodash.pick": "4.4.0", + "lodash.reduce": "4.6.0", + "lodash.reject": "4.6.0", + "lodash.some": "4.6.0" }, "dependencies": { "lodash.defaults": { @@ -1023,15 +1022,15 @@ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "dev": true, "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" + "anymatch": "1.3.2", + "async-each": "1.0.3", + "fsevents": "1.2.13", + "glob-parent": "2.0.0", + "inherits": "2.0.4", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.2.1" }, "dependencies": { "is-extglob": { @@ -1046,7 +1045,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } } } @@ -1063,10 +1062,10 @@ "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", "dev": true, "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" }, "dependencies": { "define-property": { @@ -1075,7 +1074,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -1091,7 +1090,7 @@ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "dev": true, "requires": { - "restore-cursor": "^1.0.1" + "restore-cursor": "1.0.1" } }, "cli-width": { @@ -1106,8 +1105,8 @@ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", + "center-align": "0.1.3", + "right-align": "0.1.3", "wordwrap": "0.0.2" } }, @@ -1146,8 +1145,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "map-visit": "1.0.0", + "object-visit": "1.0.1" } }, "color": { @@ -1155,8 +1154,8 @@ "resolved": "https://registry.npmjs.org/color/-/color-0.7.3.tgz", "integrity": "sha1-qzrkvGy4z62110nEDzSuoIgQT4k=", "requires": { - "color-convert": "0.5.x", - "color-string": "0.2.x" + "color-convert": "0.5.3", + "color-string": "0.2.4" } }, "color-convert": { @@ -1174,7 +1173,7 @@ "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.2.4.tgz", "integrity": "sha1-Ih/2QjT3Gqo+E7yMfoyV883Y+Bo=", "requires": { - "color-name": "1.0.x" + "color-name": "1.0.1" } }, "color-support": { @@ -1188,7 +1187,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "1.0.0" } }, "commander": { @@ -1202,15 +1201,15 @@ "integrity": "sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=", "dev": true, "requires": { - "commander": "^2.5.0", - "detective": "^4.3.1", - "glob": "^5.0.15", - "graceful-fs": "^4.1.2", - "iconv-lite": "^0.4.5", - "mkdirp": "^0.5.0", - "private": "^0.1.6", - "q": "^1.1.2", - "recast": "^0.11.17" + "commander": "2.20.3", + "detective": "4.7.1", + "glob": "5.0.15", + "graceful-fs": "4.2.4", + "iconv-lite": "0.4.24", + "mkdirp": "0.5.5", + "private": "0.1.8", + "q": "1.5.1", + "recast": "0.11.23" }, "dependencies": { "esprima": { @@ -1225,11 +1224,11 @@ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "inflight": "1.0.6", + "inherits": "2.0.4", + "minimatch": "2.0.10", + "once": "1.3.3", + "path-is-absolute": "1.0.1" } }, "graceful-fs": { @@ -1245,9 +1244,9 @@ "dev": true, "requires": { "ast-types": "0.9.6", - "esprima": "~3.1.0", - "private": "~0.1.5", - "source-map": "~0.5.0" + "esprima": "3.1.3", + "private": "0.1.8", + "source-map": "0.5.7" } } } @@ -1269,10 +1268,10 @@ "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "buffer-from": "1.1.1", + "inherits": "2.0.4", + "readable-stream": "2.3.7", + "typedarray": "0.0.6" }, "dependencies": { "isarray": { @@ -1287,13 +1286,13 @@ "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", "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" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "string_decoder": { @@ -1302,7 +1301,7 @@ "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } } } @@ -1340,7 +1339,7 @@ "integrity": "sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI=", "dev": true, "requires": { - "safe-buffer": "~5.1.1" + "safe-buffer": "5.1.2" } }, "convict": { @@ -1348,8 +1347,24 @@ "resolved": "https://registry.npmjs.org/convict/-/convict-6.0.0.tgz", "integrity": "sha512-osfPkv5yjVoZqrTWBXuh/ABGpFoaJplbt0WXr0CodR4CSWt8UnzY4PSUyRz/+5BX5YUtWcToG29Kr0B6xhdIMg==", "requires": { - "lodash.clonedeep": "^4.5.0", - "yargs-parser": "^18.1.3" + "lodash.clonedeep": "4.5.0", + "yargs-parser": "18.1.3" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "5.3.1", + "decamelize": "1.2.0" + } + } } }, "cookie": { @@ -1385,9 +1400,9 @@ "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz", "integrity": "sha1-LXMjf7P5cK5uvgEanmb0bbyoADY=", "requires": { - "fbjs": "^0.8.9", - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" + "fbjs": "0.8.17", + "loose-envify": "1.4.0", + "object-assign": "4.1.1" }, "dependencies": { "object-assign": { @@ -1414,10 +1429,10 @@ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", + "boolbase": "1.0.0", + "css-what": "2.1.3", "domutils": "1.5.1", - "nth-check": "~1.0.1" + "nth-check": "1.0.2" } }, "css-what": { @@ -1431,7 +1446,7 @@ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { - "array-find-index": "^1.0.1" + "array-find-index": "1.0.2" } }, "d": { @@ -1440,8 +1455,8 @@ "integrity": "sha1-hpgJU3LVjb7jRv/Qxwk/mfj561o=", "dev": true, "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "es5-ext": "0.10.53", + "type": "1.2.0" } }, "d3": { @@ -1496,11 +1511,11 @@ "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.4.tgz", "integrity": "sha1-AMLyOAGfJPbAoZSibUGhUw/+e8Q=", "requires": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" + "d3-dispatch": "1.0.3", + "d3-drag": "1.2.1", + "d3-interpolate": "1.1.6", + "d3-selection": "1.3.0", + "d3-transition": "1.1.1" } }, "d3-chord": { @@ -1508,8 +1523,8 @@ "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.4.tgz", "integrity": "sha1-fexPC6iG9xP+ERxF92NBT290yiw=", "requires": { - "d3-array": "1", - "d3-path": "1" + "d3-array": "1.2.1", + "d3-path": "1.0.5" } }, "d3-collection": { @@ -1527,7 +1542,7 @@ "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", "integrity": "sha1-ZSqs1QDSJkyzQjzuENtp9vWb6tM=", "requires": { - "d3-array": "^1.1.1" + "d3-array": "1.2.1" } }, "d3-dispatch": { @@ -1540,8 +1555,8 @@ "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.1.tgz", "integrity": "sha1-343UxQL7SQ/HRiBGqK2YpcR5KC0=", "requires": { - "d3-dispatch": "1", - "d3-selection": "1" + "d3-dispatch": "1.0.3", + "d3-selection": "1.3.0" } }, "d3-dsv": { @@ -1549,9 +1564,9 @@ "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.8.tgz", "integrity": "sha1-kH4kDVezhmGNxWRous/na/GXZK4=", "requires": { - "commander": "2", - "iconv-lite": "0.4", - "rw": "1" + "commander": "2.20.3", + "iconv-lite": "0.4.24", + "rw": "1.3.3" } }, "d3-ease": { @@ -1564,10 +1579,10 @@ "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.1.0.tgz", "integrity": "sha1-zr88aU8QePzD1Nr45Wey+9cNTqM=", "requires": { - "d3-collection": "1", - "d3-dispatch": "1", - "d3-quadtree": "1", - "d3-timer": "1" + "d3-collection": "1.0.4", + "d3-dispatch": "1.0.3", + "d3-quadtree": "1.0.3", + "d3-timer": "1.0.7" } }, "d3-format": { @@ -1580,7 +1595,7 @@ "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.9.1.tgz", "integrity": "sha1-FX47D5FzedD3O+v/875Tf0n6c1Y=", "requires": { - "d3-array": "1" + "d3-array": "1.2.1" } }, "d3-hexbin": { @@ -1598,7 +1613,7 @@ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.1.6.tgz", "integrity": "sha1-LPOVriOBgE3wiqG/dmt/l7X2j7Y=", "requires": { - "d3-color": "1" + "d3-color": "1.0.3" } }, "d3-path": { @@ -1631,10 +1646,10 @@ "resolved": "https://registry.npmjs.org/d3-request/-/d3-request-1.0.6.tgz", "integrity": "sha1-oQRKnvTsKMgkFxyTefrm15R0sZ8=", "requires": { - "d3-collection": "1", - "d3-dispatch": "1", - "d3-dsv": "1", - "xmlhttprequest": "1" + "d3-collection": "1.0.4", + "d3-dispatch": "1.0.3", + "d3-dsv": "1.0.8", + "xmlhttprequest": "1.8.0" } }, "d3-sankey": { @@ -1642,9 +1657,9 @@ "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.7.1.tgz", "integrity": "sha1-0imDImj8aaf+yEgD6WwiVqYUxSE=", "requires": { - "d3-array": "1", - "d3-collection": "1", - "d3-shape": "^1.2.0" + "d3-array": "1.2.1", + "d3-collection": "1.0.4", + "d3-shape": "1.2.0" } }, "d3-scale": { @@ -1652,13 +1667,13 @@ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.7.tgz", "integrity": "sha1-+pAySz6op3ZCK9BHKvqwslKglF0=", "requires": { - "d3-array": "^1.2.0", - "d3-collection": "1", - "d3-color": "1", - "d3-format": "1", - "d3-interpolate": "1", - "d3-time": "1", - "d3-time-format": "2" + "d3-array": "1.2.1", + "d3-collection": "1.0.4", + "d3-color": "1.0.3", + "d3-format": "1.2.2", + "d3-interpolate": "1.1.6", + "d3-time": "1.0.8", + "d3-time-format": "2.1.1" } }, "d3-scale-chromatic": { @@ -1666,8 +1681,8 @@ "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", "integrity": "sha1-VOMz/HghL0ObFGQftVgB3YETWpg=", "requires": { - "d3-color": "1", - "d3-interpolate": "1" + "d3-color": "1.0.3", + "d3-interpolate": "1.1.6" } }, "d3-selection": { @@ -1680,7 +1695,7 @@ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.2.0.tgz", "integrity": "sha1-RdAVOPBkuv0F6j1tLLdI/YxB93c=", "requires": { - "d3-path": "1" + "d3-path": "1.0.5" } }, "d3-time": { @@ -1693,7 +1708,7 @@ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.1.tgz", "integrity": "sha1-hbfN+8n/yhh/FNPEVv/aJoCBuzE=", "requires": { - "d3-time": "1" + "d3-time": "1.0.8" } }, "d3-timer": { @@ -1706,12 +1721,12 @@ "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.1.1.tgz", "integrity": "sha1-2O+Jw7hIc1sGDlSjmzKq66pCEDk=", "requires": { - "d3-color": "1", - "d3-dispatch": "1", - "d3-ease": "1", - "d3-interpolate": "1", - "d3-selection": "^1.1.0", - "d3-timer": "1" + "d3-color": "1.0.3", + "d3-dispatch": "1.0.3", + "d3-ease": "1.0.3", + "d3-interpolate": "1.1.6", + "d3-selection": "1.3.0", + "d3-timer": "1.0.7" } }, "d3-voronoi": { @@ -1724,11 +1739,11 @@ "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.7.1.tgz", "integrity": "sha1-AvQ7PD4ttU82RYLX5KI2zMVQa2M=", "requires": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" + "d3-dispatch": "1.0.3", + "d3-drag": "1.2.1", + "d3-interpolate": "1.1.6", + "d3-selection": "1.3.0", + "d3-transition": "1.1.1" } }, "dashdash": { @@ -1736,7 +1751,7 @@ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" } }, "dateformat": { @@ -1757,8 +1772,7 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, "decode-uri-component": { "version": "0.2.0", @@ -1776,12 +1790,12 @@ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", "integrity": "sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o=", "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" + "is-arguments": "1.0.4", + "is-date-object": "1.0.2", + "is-regex": "1.0.5", + "object-is": "1.1.2", + "object-keys": "1.1.1", + "regexp.prototype.flags": "1.3.0" } }, "deep-is": { @@ -1796,7 +1810,7 @@ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, "requires": { - "clone": "^1.0.2" + "clone": "1.0.4" } }, "define-properties": { @@ -1804,7 +1818,7 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=", "requires": { - "object-keys": "^1.0.12" + "object-keys": "1.1.1" } }, "define-property": { @@ -1813,8 +1827,8 @@ "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", "dev": true, "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "is-descriptor": "1.0.2", + "isobject": "3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -1823,7 +1837,7 @@ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.3" } }, "is-data-descriptor": { @@ -1832,7 +1846,7 @@ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.3" } }, "is-descriptor": { @@ -1841,9 +1855,9 @@ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.3" } } } @@ -1860,16 +1874,16 @@ "integrity": "sha1-siYJ8sehG6ej2xFoBcE5scr/qdI=", "dev": true, "requires": { - "alter": "~0.2.0", - "ast-traverse": "~0.1.1", - "breakable": "~1.0.0", - "esprima-fb": "~15001.1001.0-dev-harmony-fb", - "simple-fmt": "~0.1.0", - "simple-is": "~0.2.0", - "stringmap": "~0.2.2", - "stringset": "~0.2.1", - "tryor": "~0.1.2", - "yargs": "~3.27.0" + "alter": "0.2.0", + "ast-traverse": "0.1.1", + "breakable": "1.0.0", + "esprima-fb": "15001.1001.0-dev-harmony-fb", + "simple-fmt": "0.1.0", + "simple-is": "0.2.0", + "stringmap": "0.2.2", + "stringset": "0.2.1", + "tryor": "0.1.2", + "yargs": "3.27.0" } }, "delayed-stream": { @@ -1907,9 +1921,9 @@ "integrity": "sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U=", "dev": true, "requires": { - "get-stdin": "^4.0.1", - "minimist": "^1.1.0", - "repeating": "^1.1.0" + "get-stdin": "4.0.1", + "minimist": "1.2.5", + "repeating": "1.1.3" }, "dependencies": { "repeating": { @@ -1918,7 +1932,7 @@ "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", "dev": true, "requires": { - "is-finite": "^1.0.0" + "is-finite": "1.1.0" } } } @@ -1929,8 +1943,8 @@ "integrity": "sha1-DspzFDOEQv67bWXaVMELscgrJG4=", "dev": true, "requires": { - "acorn": "^5.2.1", - "defined": "^1.0.0" + "acorn": "5.7.4", + "defined": "1.0.0" } }, "doctrine": { @@ -1939,8 +1953,8 @@ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" + "esutils": "2.0.3", + "isarray": "1.0.0" }, "dependencies": { "isarray": { @@ -1956,8 +1970,8 @@ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", "integrity": "sha1-HsQFnihLq+027sKUHUqXChic58A=", "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "domelementtype": "1.3.1", + "entities": "1.1.2" } }, "dom-walk": { @@ -1981,7 +1995,7 @@ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", "integrity": "sha1-iAUJfpM9ZehVRvcm1g9euItE+AM=", "requires": { - "domelementtype": "1" + "domelementtype": "1.3.1" } }, "domutils": { @@ -1989,8 +2003,8 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "0.1.1", + "domelementtype": "1.3.1" } }, "duplexer": { @@ -2005,7 +2019,7 @@ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", "dev": true, "requires": { - "readable-stream": "~1.1.9" + "readable-stream": "1.1.14" } }, "ecc-jsbn": { @@ -2013,8 +2027,8 @@ "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" + "jsbn": "0.1.1", + "safer-buffer": "2.1.2" } }, "ee-first": { @@ -2040,7 +2054,7 @@ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "requires": { - "iconv-lite": "~0.4.13" + "iconv-lite": "0.4.24" } }, "end-of-stream": { @@ -2049,7 +2063,7 @@ "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", "dev": true, "requires": { - "once": "~1.3.0" + "once": "1.3.3" } }, "enhanced-resolve": { @@ -2058,9 +2072,9 @@ "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.2.0", - "tapable": "^0.1.8" + "graceful-fs": "4.2.4", + "memory-fs": "0.2.0", + "tapable": "0.1.10" }, "dependencies": { "graceful-fs": { @@ -2087,16 +2101,16 @@ "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-2.9.1.tgz", "integrity": "sha1-B9XOaRJBJA+4F78sSxjW5TAkDfY=", "requires": { - "cheerio": "^0.22.0", - "function.prototype.name": "^1.0.0", - "is-subset": "^0.1.1", - "lodash": "^4.17.4", - "object-is": "^1.0.1", - "object.assign": "^4.0.4", - "object.entries": "^1.0.4", - "object.values": "^1.0.4", - "prop-types": "^15.5.10", - "uuid": "^3.0.1" + "cheerio": "0.22.0", + "function.prototype.name": "1.1.2", + "is-subset": "0.1.1", + "lodash": "4.17.15", + "object-is": "1.1.2", + "object.assign": "4.1.0", + "object.entries": "1.1.1", + "object.values": "1.1.1", + "prop-types": "15.7.2", + "uuid": "3.4.0" }, "dependencies": { "lodash": { @@ -2112,7 +2126,7 @@ "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", "dev": true, "requires": { - "prr": "~1.0.1" + "prr": "1.0.1" } }, "error-ex": { @@ -2121,7 +2135,7 @@ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { - "is-arrayish": "^0.2.1" + "is-arrayish": "0.2.1" } }, "error-stack-parser": { @@ -2130,7 +2144,7 @@ "integrity": "sha1-4Oc7k+QXE40c18C3RrGkoUhUwpI=", "dev": true, "requires": { - "stackframe": "^0.3.1" + "stackframe": "0.3.1" } }, "es-abstract": { @@ -2138,17 +2152,17 @@ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", "integrity": "sha1-2MnR1myJgfuSAOIlHXme7pJ3Suk=", "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": "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.2", + "string.prototype.trimright": "2.1.2" } }, "es-to-primitive": { @@ -2156,9 +2170,9 @@ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=", "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "1.1.5", + "is-date-object": "1.0.2", + "is-symbol": "1.0.3" } }, "es5-ext": { @@ -2167,9 +2181,9 @@ "integrity": "sha1-k8WjrP2+8nUiCtcmRK0C7hg2jeE=", "dev": true, "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.3", + "next-tick": "1.0.0" } }, "es6-iterator": { @@ -2178,9 +2192,9 @@ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "dev": true, "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "d": "1.0.1", + "es5-ext": "0.10.53", + "es6-symbol": "3.1.3" } }, "es6-map": { @@ -2189,12 +2203,12 @@ "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" + "d": "1.0.1", + "es5-ext": "0.10.53", + "es6-iterator": "2.0.3", + "es6-set": "0.1.5", + "es6-symbol": "3.1.3", + "event-emitter": "0.3.5" } }, "es6-promise": { @@ -2209,11 +2223,11 @@ "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", + "d": "1.0.1", + "es5-ext": "0.10.53", + "es6-iterator": "2.0.3", "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" + "event-emitter": "0.3.5" }, "dependencies": { "es6-symbol": { @@ -2222,8 +2236,8 @@ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14" + "d": "1.0.1", + "es5-ext": "0.10.53" } } } @@ -2234,8 +2248,8 @@ "integrity": "sha1-utXTwbzawoJp9MszHkMceKxwXRg=", "dev": true, "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" + "d": "1.0.1", + "ext": "1.4.0" } }, "es6-weak-map": { @@ -2244,10 +2258,10 @@ "integrity": "sha1-ttofFswswNm+Q+a9v8Xn383zHVM=", "dev": true, "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" + "d": "1.0.1", + "es5-ext": "0.10.53", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.3" } }, "escape-html": { @@ -2268,10 +2282,10 @@ "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", "dev": true, "requires": { - "es6-map": "^0.1.3", - "es6-weak-map": "^2.0.1", - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "es6-map": "0.1.5", + "es6-weak-map": "2.0.3", + "esrecurse": "4.2.1", + "estraverse": "4.3.0" } }, "eslint": { @@ -2280,39 +2294,39 @@ "integrity": "sha1-IvyfeA6lvKEwb6srbTM2sPpix1Q=", "dev": true, "requires": { - "chalk": "^1.1.3", - "concat-stream": "^1.4.6", - "debug": "^2.1.1", - "doctrine": "^1.2.2", - "escope": "^3.6.0", - "espree": "^3.1.6", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "glob": "^7.0.3", - "globals": "^9.2.0", - "ignore": "^3.1.5", - "imurmurhash": "^0.1.4", - "inquirer": "^0.12.0", - "is-my-json-valid": "^2.10.0", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.5.1", - "json-stable-stringify": "^1.0.0", - "levn": "^0.3.0", - "lodash": "^4.0.0", - "mkdirp": "^0.5.0", - "natural-compare": "^1.4.0", - "optionator": "^0.8.1", - "path-is-inside": "^1.0.1", - "pluralize": "^1.2.1", - "progress": "^1.1.8", - "require-uncached": "^1.0.2", - "shelljs": "^0.6.0", - "strip-bom": "^3.0.0", - "strip-json-comments": "~1.0.1", - "table": "^3.7.8", - "text-table": "~0.2.0", - "user-home": "^2.0.0" + "chalk": "1.1.3", + "concat-stream": "1.6.2", + "debug": "2.6.9", + "doctrine": "1.5.0", + "escope": "3.6.0", + "espree": "3.5.4", + "estraverse": "4.3.0", + "esutils": "2.0.3", + "file-entry-cache": "2.0.0", + "glob": "7.1.6", + "globals": "9.18.0", + "ignore": "3.3.10", + "imurmurhash": "0.1.4", + "inquirer": "0.12.0", + "is-my-json-valid": "2.20.0", + "is-resolvable": "1.1.0", + "js-yaml": "3.14.0", + "json-stable-stringify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.21", + "mkdirp": "0.5.5", + "natural-compare": "1.4.0", + "optionator": "0.8.3", + "path-is-inside": "1.0.2", + "pluralize": "1.2.1", + "progress": "1.1.8", + "require-uncached": "1.0.3", + "shelljs": "0.6.1", + "strip-bom": "3.0.0", + "strip-json-comments": "1.0.4", + "table": "3.8.3", + "text-table": "0.2.0", + "user-home": "2.0.0" }, "dependencies": { "globals": { @@ -2333,7 +2347,7 @@ "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", "dev": true, "requires": { - "os-homedir": "^1.0.0" + "os-homedir": "1.0.2" } } } @@ -2362,10 +2376,15 @@ "integrity": "sha1-sPRHGHyKi+2US4FaZgvd9d610ac=", "dev": true, "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" + "acorn": "5.7.4", + "acorn-jsx": "3.0.1" } }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, "esprima-fb": { "version": "15001.1001.0-dev-harmony-fb", "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", @@ -2378,7 +2397,7 @@ "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", "dev": true, "requires": { - "estraverse": "^4.1.0" + "estraverse": "4.3.0" } }, "estraverse": { @@ -2405,8 +2424,8 @@ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14" + "d": "1.0.1", + "es5-ext": "0.10.53" } }, "event-stream": { @@ -2415,13 +2434,13 @@ "integrity": "sha1-A4u7LqnqkDhbJvvBhU0LU58qvqM=", "dev": true, "requires": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.0.3", + "duplexer": "0.1.1", + "from": "0.1.7", + "map-stream": "0.0.7", "pause-stream": "0.0.11", - "split": "0.2", - "stream-combiner": "~0.0.3", - "through": "~2.3.1" + "split": "0.2.10", + "stream-combiner": "0.0.4", + "through": "2.3.8" } }, "events": { @@ -2447,13 +2466,13 @@ "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" + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -2462,7 +2481,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -2471,7 +2490,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -2482,7 +2501,7 @@ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "fill-range": "^2.1.0" + "fill-range": "2.2.4" }, "dependencies": { "fill-range": { @@ -2491,11 +2510,11 @@ "integrity": "sha1-6x53OrsFbc2N8r/favWbizqTZWU=", "dev": true, "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "3.1.1", + "repeat-element": "1.1.3", + "repeat-string": "1.6.1" } }, "is-number": { @@ -2504,7 +2523,7 @@ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "isarray": { @@ -2528,7 +2547,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -2539,7 +2558,7 @@ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "dev": true, "requires": { - "homedir-polyfill": "^1.0.1" + "homedir-polyfill": "1.0.3" } }, "express": { @@ -2548,36 +2567,36 @@ "integrity": "sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ=", "dev": true, "requires": { - "accepts": "~1.3.7", + "accepts": "1.3.7", "array-flatten": "1.1.1", "body-parser": "1.19.0", "content-disposition": "0.5.3", - "content-type": "~1.0.4", + "content-type": "1.0.4", "cookie": "0.4.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.2", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", + "proxy-addr": "2.0.6", "qs": "6.7.0", - "range-parser": "~1.2.1", + "range-parser": "1.2.1", "safe-buffer": "5.1.2", "send": "0.17.1", "serve-static": "1.14.1", "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", + "statuses": "1.5.0", + "type-is": "1.6.18", "utils-merge": "1.0.1", - "vary": "~1.1.2" + "vary": "1.1.2" }, "dependencies": { "qs": { @@ -2594,7 +2613,7 @@ "integrity": "sha1-ia56BxWPedNVF4gpBDJAd+Q3kkQ=", "dev": true, "requires": { - "type": "^2.0.0" + "type": "2.0.0" }, "dependencies": { "type": { @@ -2616,8 +2635,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" }, "dependencies": { "is-extendable": { @@ -2626,7 +2645,7 @@ "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } } } @@ -2637,14 +2656,14 @@ "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", "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" + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -2653,7 +2672,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "extend-shallow": { @@ -2662,7 +2681,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "is-accessor-descriptor": { @@ -2671,7 +2690,7 @@ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.3" } }, "is-data-descriptor": { @@ -2680,7 +2699,7 @@ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.3" } }, "is-descriptor": { @@ -2689,9 +2708,9 @@ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.3" } } } @@ -2707,10 +2726,10 @@ "integrity": "sha1-28GRVPVYaQFQojlToK29A1vkX8c=", "dev": true, "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" + "ansi-gray": "0.1.1", + "color-support": "1.1.3", + "parse-node-version": "1.0.1", + "time-stamp": "1.1.0" } }, "fast-deep-equal": { @@ -2734,13 +2753,13 @@ "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" + "core-js": "1.2.7", + "isomorphic-fetch": "2.2.1", + "loose-envify": "1.4.0", + "object-assign": "4.1.1", + "promise": "7.3.1", + "setimmediate": "1.0.5", + "ua-parser-js": "0.7.28" }, "dependencies": { "object-assign": { @@ -2756,8 +2775,8 @@ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" }, "dependencies": { "object-assign": { @@ -2774,8 +2793,8 @@ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" + "flat-cache": "1.3.4", + "object-assign": "4.1.1" }, "dependencies": { "object-assign": { @@ -2805,10 +2824,10 @@ "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" + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" }, "dependencies": { "extend-shallow": { @@ -2817,7 +2836,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -2829,12 +2848,12 @@ "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.3", + "statuses": "1.5.0", + "unpipe": "1.0.0" } }, "find-index": { @@ -2849,8 +2868,8 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" } }, "findup-sync": { @@ -2859,10 +2878,10 @@ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", "dev": true, "requires": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" + "detect-file": "1.0.0", + "is-glob": "3.1.0", + "micromatch": "3.1.10", + "resolve-dir": "1.0.1" } }, "fined": { @@ -2871,11 +2890,11 @@ "integrity": "sha1-0AvszxqitHXRbUI7Aji3E6LEo3s=", "dev": true, "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" + "expand-tilde": "2.0.2", + "is-plain-object": "2.0.4", + "object.defaults": "1.1.0", + "object.pick": "1.3.0", + "parse-filepath": "1.0.2" } }, "first-chunk-stream": { @@ -2896,10 +2915,10 @@ "integrity": "sha1-LC73dSXMKSkAff/6HdMUqpyd7m8=", "dev": true, "requires": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" + "circular-json": "0.3.3", + "graceful-fs": "4.2.4", + "rimraf": "2.6.3", + "write": "0.2.1" }, "dependencies": { "graceful-fs": { @@ -2914,7 +2933,7 @@ "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=", "dev": true, "requires": { - "glob": "^7.1.3" + "glob": "7.1.6" } } } @@ -2931,7 +2950,7 @@ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "dev": true, "requires": { - "for-in": "^1.0.1" + "for-in": "1.0.2" } }, "forever-agent": { @@ -2944,9 +2963,9 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=", "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "asynckit": "0.4.0", + "combined-stream": "1.0.8", + "mime-types": "2.1.27" } }, "forwarded": { @@ -2961,7 +2980,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "^0.2.2" + "map-cache": "0.2.2" } }, "fresh": { @@ -2994,8 +3013,8 @@ "dev": true, "optional": true, "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" + "bindings": "1.5.0", + "nan": "2.14.1" } }, "function-bind": { @@ -3008,9 +3027,9 @@ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.2.tgz", "integrity": "sha1-XN9518BdtAFZHf3oPjtwxRI+mkU=", "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "functions-have-names": "^1.2.0" + "define-properties": "1.1.3", + "es-abstract": "1.17.5", + "functions-have-names": "1.2.1" } }, "functions-have-names": { @@ -3024,7 +3043,7 @@ "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", "dev": true, "requires": { - "globule": "~0.1.0" + "globule": "0.1.0" } }, "generate-function": { @@ -3033,7 +3052,7 @@ "integrity": "sha1-8GlhdpDBDIaOc7hGV0Z2T5fDR58=", "dev": true, "requires": { - "is-property": "^1.0.2" + "is-property": "1.0.2" } }, "generate-object-property": { @@ -3042,7 +3061,7 @@ "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", "dev": true, "requires": { - "is-property": "^1.0.0" + "is-property": "1.0.2" } }, "get-stdin": { @@ -3062,7 +3081,7 @@ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" } }, "glob": { @@ -3071,12 +3090,12 @@ "integrity": "sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=", "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" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.4", + "minimatch": "3.0.4", + "once": "1.3.3", + "path-is-absolute": "1.0.1" }, "dependencies": { "minimatch": { @@ -3085,7 +3104,7 @@ "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } } } @@ -3096,8 +3115,8 @@ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" + "glob-parent": "2.0.0", + "is-glob": "2.0.1" }, "dependencies": { "is-extglob": { @@ -3112,7 +3131,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } } } @@ -3123,7 +3142,7 @@ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "is-glob": "^2.0.0" + "is-glob": "2.0.1" }, "dependencies": { "is-extglob": { @@ -3138,7 +3157,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } } } @@ -3149,12 +3168,12 @@ "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", "dev": true, "requires": { - "glob": "^4.3.1", - "glob2base": "^0.0.12", - "minimatch": "^2.0.1", - "ordered-read-streams": "^0.1.0", - "through2": "^0.6.1", - "unique-stream": "^1.0.0" + "glob": "4.5.3", + "glob2base": "0.0.12", + "minimatch": "2.0.10", + "ordered-read-streams": "0.1.0", + "through2": "0.6.5", + "unique-stream": "1.0.0" }, "dependencies": { "glob": { @@ -3163,10 +3182,10 @@ "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", "dev": true, "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^2.0.1", - "once": "^1.3.0" + "inflight": "1.0.6", + "inherits": "2.0.4", + "minimatch": "2.0.10", + "once": "1.3.3" } }, "readable-stream": { @@ -3175,10 +3194,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", + "core-util-is": "1.0.2", + "inherits": "2.0.4", "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "string_decoder": "0.10.31" } }, "through2": { @@ -3187,8 +3206,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" + "readable-stream": "1.0.34", + "xtend": "4.0.2" } } } @@ -3199,7 +3218,7 @@ "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", "dev": true, "requires": { - "gaze": "^0.5.1" + "gaze": "0.5.2" } }, "glob2base": { @@ -3208,7 +3227,7 @@ "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", "dev": true, "requires": { - "find-index": "^0.1.1" + "find-index": "0.1.1" } }, "global": { @@ -3216,8 +3235,8 @@ "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", "integrity": "sha1-PnsQUXkAajI+1xqvyj6cV6XMZAY=", "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" + "min-document": "2.19.0", + "process": "0.11.10" } }, "global-modules": { @@ -3226,9 +3245,9 @@ "integrity": "sha1-bXcPDrUjrHgWTXK15xqIdyZcw+o=", "dev": true, "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" + "global-prefix": "1.0.2", + "is-windows": "1.0.2", + "resolve-dir": "1.0.1" } }, "global-prefix": { @@ -3237,11 +3256,11 @@ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", "dev": true, "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" + "expand-tilde": "2.0.2", + "homedir-polyfill": "1.0.3", + "ini": "1.3.8", + "is-windows": "1.0.2", + "which": "1.3.1" } }, "globals": { @@ -3256,9 +3275,9 @@ "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", "dev": true, "requires": { - "glob": "~3.1.21", - "lodash": "~1.0.1", - "minimatch": "~0.2.11" + "glob": "3.1.21", + "lodash": "1.0.2", + "minimatch": "0.2.14" }, "dependencies": { "glob": { @@ -3267,9 +3286,9 @@ "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", "dev": true, "requires": { - "graceful-fs": "~1.2.0", - "inherits": "1", - "minimatch": "~0.2.11" + "graceful-fs": "1.2.3", + "inherits": "1.0.2", + "minimatch": "0.2.14" } }, "graceful-fs": { @@ -3296,8 +3315,8 @@ "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", "dev": true, "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" + "lru-cache": "2.7.3", + "sigmund": "1.0.1" } } } @@ -3308,7 +3327,7 @@ "integrity": "sha1-LX3XAr7aIus7/634gGltpthGMT8=", "dev": true, "requires": { - "sparkles": "^1.0.0" + "sparkles": "1.0.1" } }, "graceful-fs": { @@ -3317,7 +3336,7 @@ "integrity": "sha1-ADSUfOntaV7IqwuFS8kZ6Csf+u8=", "dev": true, "requires": { - "natives": "^1.1.3" + "natives": "1.1.6" } }, "gulp": { @@ -3326,19 +3345,19 @@ "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", "dev": true, "requires": { - "archy": "^1.0.0", - "chalk": "^1.0.0", - "deprecated": "^0.0.1", - "gulp-util": "^3.0.0", - "interpret": "^1.0.0", - "liftoff": "^2.1.0", - "minimist": "^1.1.0", - "orchestrator": "^0.3.0", - "pretty-hrtime": "^1.0.0", - "semver": "^4.1.0", - "tildify": "^1.0.0", - "v8flags": "^2.0.2", - "vinyl-fs": "^0.3.0" + "archy": "1.0.0", + "chalk": "1.1.3", + "deprecated": "0.0.1", + "gulp-util": "3.0.8", + "interpret": "1.2.0", + "liftoff": "2.5.0", + "minimist": "1.2.5", + "orchestrator": "0.3.8", + "pretty-hrtime": "1.0.3", + "semver": "4.3.6", + "tildify": "1.2.0", + "v8flags": "2.1.1", + "vinyl-fs": "0.3.14" } }, "gulp-gzip": { @@ -3347,8 +3366,8 @@ "integrity": "sha1-HrYkpKp1vtJ7vwxZpDsr6HLVeRQ=", "dev": true, "requires": { - "clone": "~0.1.11", - "event-stream": "~3.0.16" + "clone": "0.1.19", + "event-stream": "3.0.20" }, "dependencies": { "clone": { @@ -3365,18 +3384,17 @@ "integrity": "sha1-VSxBIE5RAXZNenr0NqaWpcJ1pJM=", "dev": true, "requires": { - "map-stream": ">=0.0.4" + "map-stream": "0.0.7" } }, "gulp-s3": { "version": "github:pol-is/gulp-s3#847e2b372204b4ceeccb0e9b567f28ff00e7fa1d", - "from": "github:pol-is/gulp-s3#master", "dev": true, "requires": { - "async": "^3.2.1", - "event-stream": "*", - "gulp-util": "~2.2.6", - "knox": "^0.9.2" + "async": "3.2.1", + "event-stream": "3.0.20", + "gulp-util": "2.2.20", + "knox": "0.9.2" }, "dependencies": { "ansi-regex": { @@ -3397,11 +3415,11 @@ "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", "dev": true, "requires": { - "ansi-styles": "^1.1.0", - "escape-string-regexp": "^1.0.0", - "has-ansi": "^0.1.0", - "strip-ansi": "^0.3.0", - "supports-color": "^0.2.0" + "ansi-styles": "1.1.0", + "escape-string-regexp": "1.0.5", + "has-ansi": "0.1.0", + "strip-ansi": "0.3.0", + "supports-color": "0.2.0" } }, "dateformat": { @@ -3410,8 +3428,8 @@ "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", "dev": true, "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.3.0" + "get-stdin": "4.0.1", + "meow": "3.7.0" } }, "debug": { @@ -3429,14 +3447,14 @@ "integrity": "sha1-1xRuVyiRC9jwR6awseVJvCLb1kw=", "dev": true, "requires": { - "chalk": "^0.5.0", - "dateformat": "^1.0.7-1.2.3", - "lodash._reinterpolate": "^2.4.1", - "lodash.template": "^2.4.1", - "minimist": "^0.2.0", - "multipipe": "^0.1.0", - "through2": "^0.5.0", - "vinyl": "^0.2.1" + "chalk": "0.5.1", + "dateformat": "1.0.12", + "lodash._reinterpolate": "2.4.1", + "lodash.template": "2.4.1", + "minimist": "0.2.1", + "multipipe": "0.1.2", + "through2": "0.5.1", + "vinyl": "0.2.3" } }, "has-ansi": { @@ -3445,7 +3463,7 @@ "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", "dev": true, "requires": { - "ansi-regex": "^0.2.0" + "ansi-regex": "0.2.1" } }, "knox": { @@ -3454,11 +3472,11 @@ "integrity": "sha1-NzZZNmniTwJP2vcjtqHcSv2DmnE=", "dev": true, "requires": { - "debug": "^1.0.2", - "mime": "*", - "once": "^1.3.0", - "stream-counter": "^1.0.0", - "xml2js": "^0.4.4" + "debug": "1.0.5", + "mime": "1.6.0", + "once": "1.3.3", + "stream-counter": "1.0.0", + "xml2js": "0.4.23" } }, "lodash._reinterpolate": { @@ -3473,9 +3491,9 @@ "integrity": "sha1-LOEsXghNsKV92l5dHu659dF1o7Q=", "dev": true, "requires": { - "lodash._escapehtmlchar": "~2.4.1", - "lodash._reunescapedhtml": "~2.4.1", - "lodash.keys": "~2.4.1" + "lodash._escapehtmlchar": "2.4.1", + "lodash._reunescapedhtml": "2.4.1", + "lodash.keys": "2.4.1" } }, "lodash.keys": { @@ -3484,9 +3502,9 @@ "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", "dev": true, "requires": { - "lodash._isnative": "~2.4.1", - "lodash._shimkeys": "~2.4.1", - "lodash.isobject": "~2.4.1" + "lodash._isnative": "2.4.1", + "lodash._shimkeys": "2.4.1", + "lodash.isobject": "2.4.1" } }, "lodash.template": { @@ -3495,13 +3513,13 @@ "integrity": "sha1-nmEQB+32KRKal0qzxIuBez4c8g0=", "dev": true, "requires": { - "lodash._escapestringchar": "~2.4.1", - "lodash._reinterpolate": "~2.4.1", - "lodash.defaults": "~2.4.1", - "lodash.escape": "~2.4.1", - "lodash.keys": "~2.4.1", - "lodash.templatesettings": "~2.4.1", - "lodash.values": "~2.4.1" + "lodash._escapestringchar": "2.4.1", + "lodash._reinterpolate": "2.4.1", + "lodash.defaults": "2.4.1", + "lodash.escape": "2.4.1", + "lodash.keys": "2.4.1", + "lodash.templatesettings": "2.4.1", + "lodash.values": "2.4.1" } }, "lodash.templatesettings": { @@ -3510,8 +3528,8 @@ "integrity": "sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=", "dev": true, "requires": { - "lodash._reinterpolate": "~2.4.1", - "lodash.escape": "~2.4.1" + "lodash._reinterpolate": "2.4.1", + "lodash.escape": "2.4.1" } }, "minimist": { @@ -3526,10 +3544,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", + "core-util-is": "1.0.2", + "inherits": "2.0.4", "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "string_decoder": "0.10.31" } }, "strip-ansi": { @@ -3538,7 +3556,7 @@ "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", "dev": true, "requires": { - "ansi-regex": "^0.2.1" + "ansi-regex": "0.2.1" } }, "supports-color": { @@ -3553,8 +3571,8 @@ "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=", "dev": true, "requires": { - "readable-stream": "~1.0.17", - "xtend": "~3.0.0" + "readable-stream": "1.0.34", + "xtend": "3.0.0" } }, "vinyl": { @@ -3563,7 +3581,7 @@ "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=", "dev": true, "requires": { - "clone-stats": "~0.0.1" + "clone-stats": "0.0.1" } }, "xtend": { @@ -3580,9 +3598,9 @@ "integrity": "sha1-NhXJtZt8oUK/qEDFCqqZdayOeBY=", "dev": true, "requires": { - "debug": "~2.2.0", - "scp2": "~0.2.2", - "through2": "~2.0.0" + "debug": "2.2.0", + "scp2": "0.2.2", + "through2": "2.0.5" }, "dependencies": { "asn1": { @@ -3612,10 +3630,10 @@ "integrity": "sha1-aVxQvdTi+1xdNwsJHziNNwfikac=", "dev": true, "requires": { - "graceful-fs": "^3.0.2", - "inherits": "2", - "minimatch": "^1.0.0", - "once": "^1.3.0" + "graceful-fs": "3.0.12", + "inherits": "2.0.4", + "minimatch": "1.0.0", + "once": "1.3.3" } }, "lodash": { @@ -3630,8 +3648,8 @@ "integrity": "sha1-4N0hILSeG3JM6NcUxSCCKpQ4V20=", "dev": true, "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" + "lru-cache": "2.7.3", + "sigmund": "1.0.1" } }, "ms": { @@ -3646,10 +3664,10 @@ "integrity": "sha1-a2eYPCA1fO/QfwFlABoW1xDZEHg=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", + "core-util-is": "1.0.2", + "inherits": "2.0.4", "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "string_decoder": "0.10.31" } }, "scp2": { @@ -3658,10 +3676,10 @@ "integrity": "sha1-A6caLOV6LfWtYF32dYxgXzifv1c=", "dev": true, "requires": { - "async": "~0.9.0", - "glob": "~4.0.6", - "lodash": "~2.4.1", - "ssh2": "~0.3.6" + "async": "0.9.2", + "glob": "4.0.6", + "lodash": "2.4.2", + "ssh2": "0.3.6" } }, "ssh2": { @@ -3683,24 +3701,24 @@ "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", "dev": true, "requires": { - "array-differ": "^1.0.0", - "array-uniq": "^1.0.2", - "beeper": "^1.0.0", - "chalk": "^1.0.0", - "dateformat": "^2.0.0", - "fancy-log": "^1.1.0", - "gulplog": "^1.0.0", - "has-gulplog": "^0.1.0", - "lodash._reescape": "^3.0.0", - "lodash._reevaluate": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.template": "^3.0.0", - "minimist": "^1.1.0", - "multipipe": "^0.1.2", - "object-assign": "^3.0.0", + "array-differ": "1.0.0", + "array-uniq": "1.0.3", + "beeper": "1.1.1", + "chalk": "1.1.3", + "dateformat": "2.2.0", + "fancy-log": "1.3.3", + "gulplog": "1.0.0", + "has-gulplog": "0.1.0", + "lodash._reescape": "3.0.0", + "lodash._reevaluate": "3.0.0", + "lodash._reinterpolate": "3.0.0", + "lodash.template": "3.6.2", + "minimist": "1.2.5", + "multipipe": "0.1.2", + "object-assign": "3.0.0", "replace-ext": "0.0.1", - "through2": "^2.0.0", - "vinyl": "^0.5.0" + "through2": "2.0.5", + "vinyl": "0.5.3" } }, "gulplog": { @@ -3709,7 +3727,7 @@ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", "dev": true, "requires": { - "glogg": "^1.0.0" + "glogg": "1.0.2" } }, "har-schema": { @@ -3722,8 +3740,8 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", "integrity": "sha1-HvievT5JllV2de7ZiTEQ3DUPoIA=", "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" + "ajv": "6.12.2", + "har-schema": "2.0.0" } }, "has": { @@ -3731,7 +3749,7 @@ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", "requires": { - "function-bind": "^1.1.1" + "function-bind": "1.1.1" } }, "has-ansi": { @@ -3740,7 +3758,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "has-flag": { @@ -3755,7 +3773,7 @@ "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", "dev": true, "requires": { - "sparkles": "^1.0.0" + "sparkles": "1.0.1" } }, "has-symbols": { @@ -3769,9 +3787,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" } }, "has-values": { @@ -3780,8 +3798,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "is-number": "3.0.0", + "kind-of": "4.0.0" }, "dependencies": { "kind-of": { @@ -3790,7 +3808,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -3800,10 +3818,10 @@ "resolved": "https://registry.npmjs.org/history/-/history-1.17.0.tgz", "integrity": "sha1-xUg8qlodH+oAoafY0ZuHQBZxHSk=", "requires": { - "deep-equal": "^1.0.0", - "invariant": "^2.0.0", - "query-string": "^3.0.0", - "warning": "^2.0.0" + "deep-equal": "1.1.1", + "invariant": "2.2.4", + "query-string": "3.0.3", + "warning": "2.1.0" }, "dependencies": { "query-string": { @@ -3811,7 +3829,7 @@ "resolved": "https://registry.npmjs.org/query-string/-/query-string-3.0.3.tgz", "integrity": "sha1-ri4UtNBQcdTpuetIc8NbDc1C5jg=", "requires": { - "strict-uri-encode": "^1.0.0" + "strict-uri-encode": "1.1.0" } } } @@ -3826,7 +3844,7 @@ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", "integrity": "sha1-7OCsr3HWLClpwuxZ/v9CpLGoW0U=", "requires": { - "react-is": "^16.7.0" + "react-is": "16.13.1" } }, "home-or-tmp": { @@ -3835,8 +3853,8 @@ "integrity": "sha1-S58eQIAMPlDGwn94FnavzOcfOYU=", "dev": true, "requires": { - "os-tmpdir": "^1.0.1", - "user-home": "^1.1.1" + "os-tmpdir": "1.0.2", + "user-home": "1.1.1" } }, "homedir-polyfill": { @@ -3845,7 +3863,7 @@ "integrity": "sha1-dDKYzvTlrz4ZQWH7rcwhUdOgWOg=", "dev": true, "requires": { - "parse-passwd": "^1.0.0" + "parse-passwd": "1.0.0" } }, "hosted-git-info": { @@ -3865,12 +3883,12 @@ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", "integrity": "sha1-vWedw/WYl7ajS7EHSchVu1OpOS8=", "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" + "domelementtype": "1.3.1", + "domhandler": "2.4.2", + "domutils": "1.5.1", + "entities": "1.1.2", + "inherits": "2.0.4", + "readable-stream": "3.6.0" }, "dependencies": { "readable-stream": { @@ -3878,9 +3896,9 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "inherits": "2.0.4", + "string_decoder": "1.3.0", + "util-deprecate": "1.0.2" } }, "safe-buffer": { @@ -3893,7 +3911,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4=", "requires": { - "safe-buffer": "~5.2.0" + "safe-buffer": "5.2.0" } } } @@ -3904,10 +3922,10 @@ "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=", "dev": true, "requires": { - "depd": "~1.1.2", + "depd": "1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", + "statuses": "1.5.0", "toidentifier": "1.0.0" }, "dependencies": { @@ -3924,9 +3942,9 @@ "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" + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.16.1" } }, "https-browserify": { @@ -3945,7 +3963,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": "2.1.2" } }, "ieee754": { @@ -3972,7 +3990,7 @@ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, "requires": { - "repeating": "^2.0.0" + "repeating": "2.0.1" } }, "indexof": { @@ -3986,8 +4004,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.3.3", + "wrappy": "1.0.2" } }, "inherits": { @@ -4011,8 +4029,8 @@ "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-1.0.4.tgz", "integrity": "sha1-hJ9lc3Olz72BQc/dsBPfb2jG3zk=", "requires": { - "bowser": "^1.0.0", - "inline-style-prefix-all": "^2.0.2" + "bowser": "1.9.4", + "inline-style-prefix-all": "2.0.2" } }, "inquirer": { @@ -4021,19 +4039,19 @@ "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", "dev": true, "requires": { - "ansi-escapes": "^1.1.0", - "ansi-regex": "^2.0.0", - "chalk": "^1.0.0", - "cli-cursor": "^1.0.1", - "cli-width": "^2.0.0", - "figures": "^1.3.5", - "lodash": "^4.3.0", - "readline2": "^1.0.1", - "run-async": "^0.1.0", - "rx-lite": "^3.1.2", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" + "ansi-escapes": "1.4.0", + "ansi-regex": "2.1.1", + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-width": "2.2.1", + "figures": "1.7.0", + "lodash": "4.17.21", + "readline2": "1.0.1", + "run-async": "0.1.0", + "rx-lite": "3.1.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "through": "2.3.8" } }, "interpret": { @@ -4047,7 +4065,7 @@ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=", "requires": { - "loose-envify": "^1.0.0" + "loose-envify": "1.4.0" } }, "invert-kv": { @@ -4068,8 +4086,8 @@ "integrity": "sha1-OV4a6EsR8mrReV5zwXN45IowFXY=", "dev": true, "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" + "is-relative": "1.0.0", + "is-windows": "1.0.2" } }, "is-accessor-descriptor": { @@ -4078,7 +4096,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -4087,7 +4105,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -4109,7 +4127,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "1.13.1" } }, "is-buffer": { @@ -4129,7 +4147,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -4138,7 +4156,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -4154,9 +4172,9 @@ "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" }, "dependencies": { "kind-of": { @@ -4179,7 +4197,7 @@ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { - "is-primitive": "^2.0.0" + "is-primitive": "2.0.0" } }, "is-extendable": { @@ -4206,7 +4224,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "is-glob": { @@ -4215,7 +4233,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "is-extglob": "2.1.1" } }, "is-integer": { @@ -4224,7 +4242,7 @@ "integrity": "sha1-a96Bqs3feLZZtmKdYpytxRqIbVw=", "dev": true, "requires": { - "is-finite": "^1.0.0" + "is-finite": "1.1.0" } }, "is-my-ip-valid": { @@ -4239,11 +4257,11 @@ "integrity": "sha1-E0Wm/KPo2u/BDQ+ncGf1TO2v1Zo=", "dev": true, "requires": { - "generate-function": "^2.0.0", - "generate-object-property": "^1.1.0", - "is-my-ip-valid": "^1.0.0", - "jsonpointer": "^4.0.0", - "xtend": "^4.0.0" + "generate-function": "2.3.1", + "generate-object-property": "1.2.0", + "is-my-ip-valid": "1.0.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.2" } }, "is-number": { @@ -4252,7 +4270,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -4261,7 +4279,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -4272,7 +4290,7 @@ "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", "dev": true, "requires": { - "isobject": "^3.0.1" + "isobject": "3.0.1" } }, "is-posix-bracket": { @@ -4298,7 +4316,7 @@ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", "integrity": "sha1-OdWJo1i/GJZ/cmlnEguPwa7XTq4=", "requires": { - "has": "^1.0.3" + "has": "1.0.3" } }, "is-relative": { @@ -4307,7 +4325,7 @@ "integrity": "sha1-obtpNc6MXboei5dUubLcwCDiJg0=", "dev": true, "requires": { - "is-unc-path": "^1.0.0" + "is-unc-path": "1.0.0" } }, "is-resolvable": { @@ -4331,7 +4349,7 @@ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", "integrity": "sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc=", "requires": { - "has-symbols": "^1.0.1" + "has-symbols": "1.0.1" } }, "is-typedarray": { @@ -4345,7 +4363,7 @@ "integrity": "sha1-1zHoiY7QkKEsNSrS6u1Qla0yLJ0=", "dev": true, "requires": { - "unc-path-regex": "^0.1.2" + "unc-path-regex": "0.1.2" } }, "is-utf8": { @@ -4383,8 +4401,8 @@ "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" + "node-fetch": "1.7.3", + "whatwg-fetch": "0.10.1" } }, "isstream": { @@ -4403,21 +4421,12 @@ "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=" }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha1-r/FRswv9+o5J4F2iLnQV6d+jeEc=", - "dev": true, + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", - "dev": true - } + "argparse": "1.0.10", + "esprima": "4.0.1" } }, "jsbn": { @@ -4453,7 +4462,7 @@ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "dev": true, "requires": { - "jsonify": "~0.0.0" + "jsonify": "0.0.0" } }, "json-stringify-safe": { @@ -4498,14 +4507,13 @@ }, "knox": { "version": "git://github.com/caremerge/knox.git#b1e031c209b3c17cab622a458e87728c1ee88cbd", - "from": "git://github.com/caremerge/knox.git#b1e031c209b3c17cab622a458e87728c1ee88cbd", "dev": true, "requires": { - "debug": "^2.2.0", + "debug": "2.6.9", "mime": "1.4.0", - "once": "^1.3.0", - "stream-counter": "^1.0.0", - "xml2js": "^0.4.4" + "once": "1.3.3", + "stream-counter": "1.0.0", + "xml2js": "0.4.23" }, "dependencies": { "mime": { @@ -4528,7 +4536,7 @@ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { - "invert-kv": "^1.0.0" + "invert-kv": "1.0.0" } }, "leven": { @@ -4543,8 +4551,8 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "prelude-ls": "1.1.2", + "type-check": "0.3.2" } }, "liftoff": { @@ -4553,14 +4561,14 @@ "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", "dev": true, "requires": { - "extend": "^3.0.0", - "findup-sync": "^2.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" + "extend": "3.0.2", + "findup-sync": "2.0.0", + "fined": "1.2.0", + "flagged-respawn": "1.0.1", + "is-plain-object": "2.0.4", + "object.map": "1.0.1", + "rechoir": "0.6.2", + "resolve": "1.17.0" } }, "load-json-file": { @@ -4569,11 +4577,11 @@ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "graceful-fs": "4.2.8", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" }, "dependencies": { "graceful-fs": { @@ -4588,7 +4596,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "^0.2.0" + "is-utf8": "0.2.1" } } } @@ -4599,10 +4607,10 @@ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", "dev": true, "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" }, "dependencies": { "json5": { @@ -4635,8 +4643,8 @@ "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", "dev": true, "requires": { - "lodash._basecopy": "^3.0.0", - "lodash.keys": "^3.0.0" + "lodash._basecopy": "3.0.1", + "lodash.keys": "3.1.2" } }, "lodash._basecopy": { @@ -4651,8 +4659,8 @@ "integrity": "sha1-B3D/gBMa9uNPO1EXlqe6UhTmX/c=", "dev": true, "requires": { - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" } }, "lodash._basefor": { @@ -4685,9 +4693,9 @@ "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", "dev": true, "requires": { - "lodash._bindcallback": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash.restparam": "^3.0.0" + "lodash._bindcallback": "3.0.1", + "lodash._isiterateecall": "3.0.9", + "lodash.restparam": "3.6.1" } }, "lodash._escapehtmlchar": { @@ -4696,7 +4704,7 @@ "integrity": "sha1-32fDu2t+jh6DGrSL+geVuSr+iZ0=", "dev": true, "requires": { - "lodash._htmlescapes": "~2.4.1" + "lodash._htmlescapes": "2.4.1" } }, "lodash._escapestringchar": { @@ -4747,8 +4755,8 @@ "integrity": "sha1-/2G5oBens699MObFPeKK+hm4dQo=", "dev": true, "requires": { - "lodash._basefor": "^3.0.0", - "lodash.keysin": "^3.0.0" + "lodash._basefor": "3.0.3", + "lodash.keysin": "3.0.8" } }, "lodash._reescape": { @@ -4775,8 +4783,8 @@ "integrity": "sha1-dHxPxAED6zu4oJduVx96JlnpO6c=", "dev": true, "requires": { - "lodash._htmlescapes": "~2.4.1", - "lodash.keys": "~2.4.1" + "lodash._htmlescapes": "2.4.1", + "lodash.keys": "2.4.1" }, "dependencies": { "lodash.keys": { @@ -4785,9 +4793,9 @@ "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", "dev": true, "requires": { - "lodash._isnative": "~2.4.1", - "lodash._shimkeys": "~2.4.1", - "lodash.isobject": "~2.4.1" + "lodash._isnative": "2.4.1", + "lodash._shimkeys": "2.4.1", + "lodash.isobject": "2.4.1" } } } @@ -4804,7 +4812,7 @@ "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=", "dev": true, "requires": { - "lodash._objecttypes": "~2.4.1" + "lodash._objecttypes": "2.4.1" } }, "lodash.assign": { @@ -4813,9 +4821,9 @@ "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", "dev": true, "requires": { - "lodash._baseassign": "^3.0.0", - "lodash._createassigner": "^3.0.0", - "lodash.keys": "^3.0.0" + "lodash._baseassign": "3.2.0", + "lodash._createassigner": "3.1.1", + "lodash.keys": "3.1.2" } }, "lodash.assignin": { @@ -4828,6 +4836,11 @@ "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -4839,8 +4852,8 @@ "integrity": "sha1-p+iIXwXmiFEUS24SqPNngCa8TFQ=", "dev": true, "requires": { - "lodash._objecttypes": "~2.4.1", - "lodash.keys": "~2.4.1" + "lodash._objecttypes": "2.4.1", + "lodash.keys": "2.4.1" }, "dependencies": { "lodash.keys": { @@ -4849,9 +4862,9 @@ "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", "dev": true, "requires": { - "lodash._isnative": "~2.4.1", - "lodash._shimkeys": "~2.4.1", - "lodash.isobject": "~2.4.1" + "lodash._isnative": "2.4.1", + "lodash._shimkeys": "2.4.1", + "lodash.isobject": "2.4.1" } } } @@ -4862,7 +4875,7 @@ "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", "dev": true, "requires": { - "lodash._root": "^3.0.0" + "lodash._root": "3.0.1" } }, "lodash.filter": { @@ -4903,7 +4916,7 @@ "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=", "dev": true, "requires": { - "lodash._objecttypes": "~2.4.1" + "lodash._objecttypes": "2.4.1" } }, "lodash.keys": { @@ -4912,9 +4925,9 @@ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", "dev": true, "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" } }, "lodash.keysin": { @@ -4923,8 +4936,8 @@ "integrity": "sha1-IsRJPrvtsUJ5YqVLRFssinZ/tH8=", "dev": true, "requires": { - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" } }, "lodash.map": { @@ -4969,15 +4982,15 @@ "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", "dev": true, "requires": { - "lodash._basecopy": "^3.0.0", - "lodash._basetostring": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0", - "lodash.keys": "^3.0.0", - "lodash.restparam": "^3.0.0", - "lodash.templatesettings": "^3.0.0" + "lodash._basecopy": "3.0.1", + "lodash._basetostring": "3.0.1", + "lodash._basevalues": "3.0.0", + "lodash._isiterateecall": "3.0.9", + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0", + "lodash.keys": "3.1.2", + "lodash.restparam": "3.6.1", + "lodash.templatesettings": "3.1.1" } }, "lodash.templatesettings": { @@ -4986,8 +4999,8 @@ "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", "dev": true, "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0" + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0" } }, "lodash.values": { @@ -4996,7 +5009,7 @@ "integrity": "sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ=", "dev": true, "requires": { - "lodash.keys": "~2.4.1" + "lodash.keys": "2.4.1" }, "dependencies": { "lodash.keys": { @@ -5005,9 +5018,9 @@ "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", "dev": true, "requires": { - "lodash._isnative": "~2.4.1", - "lodash._shimkeys": "~2.4.1", - "lodash.isobject": "~2.4.1" + "lodash._isnative": "2.4.1", + "lodash._shimkeys": "2.4.1", + "lodash.isobject": "2.4.1" } } } @@ -5023,7 +5036,7 @@ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=", "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" + "js-tokens": "4.0.0" } }, "loud-rejection": { @@ -5032,8 +5045,8 @@ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.3" } }, "lower-case": { @@ -5053,7 +5066,7 @@ "integrity": "sha1-KbM/MSqo9UfEpeSQ9Wr87JkTOtY=", "dev": true, "requires": { - "kind-of": "^6.0.2" + "kind-of": "6.0.3" } }, "map-cache": { @@ -5080,7 +5093,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "^1.0.0" + "object-visit": "1.0.1" } }, "math-random": { @@ -5101,8 +5114,8 @@ "integrity": "sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=", "dev": true, "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "errno": "0.1.7", + "readable-stream": "2.3.7" }, "dependencies": { "isarray": { @@ -5117,13 +5130,13 @@ "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", "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" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "string_decoder": { @@ -5132,7 +5145,7 @@ "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } } } @@ -5143,16 +5156,16 @@ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.5", + "normalize-package-data": "2.5.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" }, "dependencies": { "object-assign": { @@ -5181,19 +5194,19 @@ "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", "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" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.3", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" } }, "mime": { @@ -5220,7 +5233,7 @@ "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", "requires": { - "dom-walk": "^0.1.0" + "dom-walk": "0.1.2" } }, "minimatch": { @@ -5229,7 +5242,7 @@ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", "dev": true, "requires": { - "brace-expansion": "^1.0.0" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -5244,8 +5257,8 @@ "integrity": "sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=", "dev": true, "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "for-in": "1.0.2", + "is-extendable": "1.0.1" }, "dependencies": { "is-extendable": { @@ -5254,7 +5267,7 @@ "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } } } @@ -5265,7 +5278,7 @@ "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=", "dev": true, "requires": { - "minimist": "^1.2.5" + "minimist": "1.2.5" } }, "moment": { @@ -5312,17 +5325,17 @@ "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", "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" + "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.3", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" } }, "natives": { @@ -5354,7 +5367,7 @@ "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=", "requires": { - "lower-case": "^1.1.1" + "lower-case": "1.1.4" } }, "node-fetch": { @@ -5362,8 +5375,8 @@ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", "integrity": "sha1-mA9vcthSEaU0fGsrwYxbhMPrR+8=", "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" + "encoding": "0.1.12", + "is-stream": "1.1.0" } }, "node-libs-browser": { @@ -5372,28 +5385,28 @@ "integrity": "sha1-PicsCBnjCJNeJmdECNevDhSRuDs=", "dev": true, "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.1.4", - "buffer": "^4.9.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", + "assert": "1.5.0", + "browserify-zlib": "0.1.4", + "buffer": "4.9.2", + "console-browserify": "1.2.0", + "constants-browserify": "1.0.0", "crypto-browserify": "3.3.0", - "domain-browser": "^1.1.1", - "events": "^1.0.0", + "domain-browser": "1.2.0", + "events": "1.1.1", "https-browserify": "0.0.1", - "os-browserify": "^0.2.0", + "os-browserify": "0.2.1", "path-browserify": "0.0.0", - "process": "^0.11.0", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.0.5", - "stream-browserify": "^2.0.1", - "stream-http": "^2.3.1", - "string_decoder": "^0.10.25", - "timers-browserify": "^2.0.2", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.7", + "stream-browserify": "2.0.2", + "stream-http": "2.8.3", + "string_decoder": "0.10.31", + "timers-browserify": "2.0.11", "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.10.3", + "url": "0.11.0", + "util": "0.10.4", "vm-browserify": "0.0.4" }, "dependencies": { @@ -5415,13 +5428,13 @@ "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", "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" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" }, "dependencies": { "string_decoder": { @@ -5430,7 +5443,7 @@ "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } } } @@ -5443,10 +5456,10 @@ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "2.8.9", + "resolve": "1.17.0", + "semver": "4.3.6", + "validate-npm-package-license": "3.0.4" } }, "normalize-path": { @@ -5455,7 +5468,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "^1.0.1" + "remove-trailing-separator": "1.1.0" } }, "nth-check": { @@ -5463,7 +5476,7 @@ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", "integrity": "sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw=", "requires": { - "boolbase": "~1.0.0" + "boolbase": "1.0.0" } }, "number-is-nan": { @@ -5488,9 +5501,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" }, "dependencies": { "define-property": { @@ -5499,7 +5512,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "kind-of": { @@ -5508,7 +5521,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -5523,8 +5536,8 @@ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", "integrity": "sha1-xdLof/nhGfeLegiEQVGeLuwVc7Y=", "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "define-properties": "1.1.3", + "es-abstract": "1.17.5" } }, "object-keys": { @@ -5538,7 +5551,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "^3.0.0" + "isobject": "3.0.1" } }, "object.assign": { @@ -5546,10 +5559,10 @@ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", "integrity": "sha1-lovxEA15Vrs8oIbwBvhGs7xACNo=", "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "define-properties": "1.1.3", + "function-bind": "1.1.1", + "has-symbols": "1.0.1", + "object-keys": "1.1.1" } }, "object.defaults": { @@ -5558,10 +5571,10 @@ "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", "dev": true, "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" + "array-each": "1.0.1", + "array-slice": "1.1.0", + "for-own": "1.0.0", + "isobject": "3.0.1" } }, "object.entries": { @@ -5569,10 +5582,10 @@ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.1.tgz", "integrity": "sha1-7hzwQVPeArsJP+wzaDkA9XzlOZs=", "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" + "define-properties": "1.1.3", + "es-abstract": "1.17.5", + "function-bind": "1.1.1", + "has": "1.0.3" } }, "object.map": { @@ -5581,8 +5594,8 @@ "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", "dev": true, "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" + "for-own": "1.0.0", + "make-iterator": "1.0.1" } }, "object.omit": { @@ -5591,8 +5604,8 @@ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" + "for-own": "0.1.5", + "is-extendable": "0.1.1" }, "dependencies": { "for-own": { @@ -5601,7 +5614,7 @@ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { - "for-in": "^1.0.1" + "for-in": "1.0.2" } } } @@ -5612,7 +5625,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "^3.0.1" + "isobject": "3.0.1" } }, "object.values": { @@ -5620,10 +5633,10 @@ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", "integrity": "sha1-aKmezeNWt+kpWjxeDOMdyMlT3l4=", "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" + "define-properties": "1.1.3", + "es-abstract": "1.17.5", + "function-bind": "1.1.1", + "has": "1.0.3" } }, "on-finished": { @@ -5640,7 +5653,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "onetime": { @@ -5655,8 +5668,8 @@ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" + "minimist": "0.0.10", + "wordwrap": "0.0.2" }, "dependencies": { "minimist": { @@ -5673,12 +5686,12 @@ "integrity": "sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU=", "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" + "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" } }, "orchestrator": { @@ -5687,9 +5700,9 @@ "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", "dev": true, "requires": { - "end-of-stream": "~0.1.5", - "sequencify": "~0.0.7", - "stream-consume": "~0.1.0" + "end-of-stream": "0.1.5", + "sequencify": "0.0.7", + "stream-consume": "0.1.1" } }, "ordered-read-streams": { @@ -5716,7 +5729,7 @@ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, "requires": { - "lcid": "^1.0.0" + "lcid": "1.0.0" } }, "os-tmpdir": { @@ -5731,9 +5744,9 @@ "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", "dev": true, "requires": { - "graceful-fs": "^4.1.4", - "mkdirp": "^0.5.1", - "object-assign": "^4.1.0" + "graceful-fs": "4.2.4", + "mkdirp": "0.5.5", + "object-assign": "4.1.1" }, "dependencies": { "graceful-fs": { @@ -5762,9 +5775,9 @@ "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", "dev": true, "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" + "is-absolute": "1.0.0", + "map-cache": "0.2.2", + "path-root": "0.1.1" } }, "parse-glob": { @@ -5773,10 +5786,10 @@ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" }, "dependencies": { "is-extglob": { @@ -5791,7 +5804,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } } } @@ -5802,7 +5815,7 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "^1.2.0" + "error-ex": "1.3.2" } }, "parse-node-version": { @@ -5841,7 +5854,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "^2.0.0" + "pinkie-promise": "2.0.1" } }, "path-is-absolute": { @@ -5867,7 +5880,7 @@ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", "dev": true, "requires": { - "path-root-regex": "^0.1.0" + "path-root-regex": "0.1.2" } }, "path-root-regex": { @@ -5888,9 +5901,9 @@ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "graceful-fs": "4.2.8", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" }, "dependencies": { "graceful-fs": { @@ -5907,7 +5920,7 @@ "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", "dev": true, "requires": { - "through": "~2.3" + "through": "2.3.8" } }, "pbkdf2-compat": { @@ -5939,7 +5952,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "^2.0.0" + "pinkie": "2.0.4" } }, "pluralize": { @@ -6000,7 +6013,7 @@ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", "requires": { - "asap": "~2.0.3" + "asap": "2.0.6" } }, "prop-types": { @@ -6008,9 +6021,9 @@ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", "integrity": "sha1-UsQedbjIfnK52TYOAga5ncv/psU=", "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" + "loose-envify": "1.4.0", + "object-assign": "4.1.1", + "react-is": "16.13.1" }, "dependencies": { "object-assign": { @@ -6026,7 +6039,7 @@ "integrity": "sha1-/cIzZQVEfT8vLGOO0nLK9hS7sr8=", "dev": true, "requires": { - "forwarded": "~0.1.2", + "forwarded": "0.1.2", "ipaddr.js": "1.9.1" } }, @@ -6062,8 +6075,8 @@ "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", "requires": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" }, "dependencies": { "object-assign": { @@ -6090,10 +6103,10 @@ "resolved": "https://registry.npmjs.org/radium/-/radium-0.18.1.tgz", "integrity": "sha1-oB25tMbmNk3jsC1Zdq3yjQuYNR0=", "requires": { - "array-find": "^1.0.0", - "exenv": "^1.2.0", - "inline-style-prefixer": "^1.0.3", - "rimraf": "^2.4.0" + "array-find": "1.0.0", + "exenv": "1.2.2", + "inline-style-prefixer": "1.0.4", + "rimraf": "2.7.1" } }, "raf": { @@ -6101,7 +6114,7 @@ "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", "integrity": "sha1-B0LpmkplUvRF1z4+4DKK8P8e3jk=", "requires": { - "performance-now": "^2.1.0" + "performance-now": "2.1.0" }, "dependencies": { "performance-now": { @@ -6117,9 +6130,9 @@ "integrity": "sha1-t3bvxZN1mE42xTey9RofCv8Noe0=", "dev": true, "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" + "is-number": "4.0.0", + "kind-of": "6.0.3", + "math-random": "1.0.4" }, "dependencies": { "is-number": { @@ -6153,9 +6166,9 @@ "resolved": "https://registry.npmjs.org/react/-/react-15.3.1.tgz", "integrity": "sha1-94UB7YwuxubjHDIjZS6X8TadK9Y=", "requires": { - "fbjs": "^0.8.4", - "loose-envify": "^1.1.0", - "object-assign": "^4.1.0" + "fbjs": "0.8.17", + "loose-envify": "1.4.0", + "object-assign": "4.1.1" }, "dependencies": { "object-assign": { @@ -6175,9 +6188,9 @@ "resolved": "https://registry.npmjs.org/react-autosuggest/-/react-autosuggest-3.9.0.tgz", "integrity": "sha1-KoAK/Gnea1WAFUlC5XYWiy65T7k=", "requires": { - "react-autowhatever": "^4.1.0", - "react-redux": "^4.4.5", - "redux": "^3.5.1" + "react-autowhatever": "4.3.0", + "react-redux": "4.4.10", + "redux": "3.7.2" } }, "react-autowhatever": { @@ -6185,8 +6198,8 @@ "resolved": "https://registry.npmjs.org/react-autowhatever/-/react-autowhatever-4.3.0.tgz", "integrity": "sha1-vxkZcm2dSMMKrr3kgnTrDupept8=", "requires": { - "react-themeable": "^1.0.1", - "section-iterator": "^2.0.0" + "react-themeable": "1.1.0", + "section-iterator": "2.0.0" } }, "react-codemirror": { @@ -6194,9 +6207,9 @@ "resolved": "https://registry.npmjs.org/react-codemirror/-/react-codemirror-0.2.6.tgz", "integrity": "sha1-5x41cXzm7/rmjfHb8rWnW4SkT4Q=", "requires": { - "classnames": "^2.2.3", - "codemirror": "^5.13.4", - "lodash.debounce": "^4.0.4" + "classnames": "2.2.6", + "codemirror": "5.61.0", + "lodash.debounce": "4.0.8" } }, "react-datepicker": { @@ -6204,10 +6217,10 @@ "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-0.29.0.tgz", "integrity": "sha1-y21/ZZQ9q15jCbyYR+GGooqXNGM=", "requires": { - "classnames": "^2.2.1", - "moment": "^2.13.0", - "react-onclickoutside": "^4.8.0", - "tether": "^1.3.2" + "classnames": "2.2.6", + "moment": "2.25.3", + "react-onclickoutside": "4.9.0", + "tether": "1.4.7" } }, "react-deep-force-update": { @@ -6226,7 +6239,7 @@ "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-2.2.6.tgz", "integrity": "sha1-OoBuEPLaa6v+pBNr5lEOibDXaQE=", "requires": { - "classnames": "^2.2.5" + "classnames": "2.2.6" } }, "react-fontawesome": { @@ -6239,9 +6252,9 @@ "resolved": "https://registry.npmjs.org/react-grid-layout/-/react-grid-layout-0.13.9.tgz", "integrity": "sha1-W6Kc3A5kIjYvRtmkkEfrsk4OKT4=", "requires": { - "lodash.isequal": "^4.0.0", - "react-draggable": "^2.1.1", - "react-resizable": "^1.4.0" + "lodash.isequal": "4.5.0", + "react-draggable": "2.2.6", + "react-resizable": "1.10.1" } }, "react-input-autosize": { @@ -6249,7 +6262,7 @@ "resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-2.2.2.tgz", "integrity": "sha1-/KpwIFaOwga8BL429Oto5kfE2MI=", "requires": { - "prop-types": "^15.5.8" + "prop-types": "15.7.2" } }, "react-is": { @@ -6262,8 +6275,8 @@ "resolved": "https://registry.npmjs.org/react-json-tree/-/react-json-tree-0.1.9.tgz", "integrity": "sha1-SXy87seVbciAZbkqRwSRC334cps=", "requires": { - "babel-runtime": "^5.8.20", - "react-mixin": "^1.7.0" + "babel-runtime": "5.8.38", + "react-mixin": "1.7.0" } }, "react-mixin": { @@ -6271,8 +6284,8 @@ "resolved": "https://registry.npmjs.org/react-mixin/-/react-mixin-1.7.0.tgz", "integrity": "sha1-OMIsPrAgZPCPLCWHimDaw+lW9Ew=", "requires": { - "object-assign": "^2.0.0", - "smart-mixin": "^1.2.0" + "object-assign": "2.1.1", + "smart-mixin": "1.2.1" }, "dependencies": { "object-assign": { @@ -6287,9 +6300,9 @@ "resolved": "https://registry.npmjs.org/react-motion/-/react-motion-0.5.2.tgz", "integrity": "sha1-DdOmnkETFlZ5J5F8ZiZVG6BgcxY=", "requires": { - "performance-now": "^0.2.0", - "prop-types": "^15.5.8", - "raf": "^3.1.0" + "performance-now": "0.2.0", + "prop-types": "15.7.2", + "raf": "3.4.1" } }, "react-onclickoutside": { @@ -6297,7 +6310,7 @@ "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-4.9.0.tgz", "integrity": "sha1-KQjDE24kQQK+peVDeoOKUo1dKZU=", "requires": { - "object-assign": "^4.0.1" + "object-assign": "4.1.1" }, "dependencies": { "object-assign": { @@ -6313,8 +6326,8 @@ "integrity": "sha1-nb/Z2SdSjDqp9ETkVYw3gwq4wmo=", "dev": true, "requires": { - "lodash": "^4.6.1", - "react-deep-force-update": "^1.0.0" + "lodash": "4.17.21", + "react-deep-force-update": "1.1.2" } }, "react-redux": { @@ -6322,12 +6335,12 @@ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-4.4.10.tgz", "integrity": "sha1-rVe9HbAMLQqn25krNgzmPdC4DsU=", "requires": { - "create-react-class": "^15.5.1", - "hoist-non-react-statics": "^3.3.0", - "invariant": "^2.0.0", - "lodash": "^4.17.11", - "loose-envify": "^1.4.0", - "prop-types": "^15.7.2" + "create-react-class": "15.6.3", + "hoist-non-react-statics": "3.3.2", + "invariant": "2.2.4", + "lodash": "4.17.15", + "loose-envify": "1.4.0", + "prop-types": "15.7.2" }, "dependencies": { "lodash": { @@ -6342,8 +6355,8 @@ "resolved": "https://registry.npmjs.org/react-resizable/-/react-resizable-1.10.1.tgz", "integrity": "sha1-8MLPHYOzRwuHZ2zm1rArvj9NjNQ=", "requires": { - "prop-types": "15.x", - "react-draggable": "^4.0.3" + "prop-types": "15.7.2", + "react-draggable": "4.3.1" }, "dependencies": { "react-draggable": { @@ -6351,8 +6364,8 @@ "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.3.1.tgz", "integrity": "sha1-+cDNzyJ57Ft5xltwzf2TYdgvqe4=", "requires": { - "classnames": "^2.2.5", - "prop-types": "^15.6.0" + "classnames": "2.2.6", + "prop-types": "15.7.2" } } } @@ -6362,11 +6375,11 @@ "resolved": "https://registry.npmjs.org/react-router/-/react-router-2.6.0.tgz", "integrity": "sha1-L9umq54Za+Z8JsG21CO1zqBW/tg=", "requires": { - "history": "^2.1.2", - "hoist-non-react-statics": "^1.2.0", - "invariant": "^2.2.1", - "loose-envify": "^1.2.0", - "warning": "^3.0.0" + "history": "2.1.2", + "hoist-non-react-statics": "1.2.0", + "invariant": "2.2.4", + "loose-envify": "1.4.0", + "warning": "3.0.0" }, "dependencies": { "history": { @@ -6374,10 +6387,10 @@ "resolved": "https://registry.npmjs.org/history/-/history-2.1.2.tgz", "integrity": "sha1-SqLeiXoOSGfkU5hDvm7Nsphr/ew=", "requires": { - "deep-equal": "^1.0.0", - "invariant": "^2.0.0", - "query-string": "^3.0.0", - "warning": "^2.0.0" + "deep-equal": "1.1.1", + "invariant": "2.2.4", + "query-string": "3.0.3", + "warning": "2.1.0" }, "dependencies": { "warning": { @@ -6385,7 +6398,7 @@ "resolved": "https://registry.npmjs.org/warning/-/warning-2.1.0.tgz", "integrity": "sha1-ISINnGOvx3qMkhEeARr3Bc4MaQE=", "requires": { - "loose-envify": "^1.0.0" + "loose-envify": "1.4.0" } } } @@ -6400,7 +6413,7 @@ "resolved": "https://registry.npmjs.org/query-string/-/query-string-3.0.3.tgz", "integrity": "sha1-ri4UtNBQcdTpuetIc8NbDc1C5jg=", "requires": { - "strict-uri-encode": "^1.0.0" + "strict-uri-encode": "1.1.0" } }, "warning": { @@ -6408,7 +6421,7 @@ "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", "requires": { - "loose-envify": "^1.0.0" + "loose-envify": "1.4.0" } } } @@ -6418,9 +6431,9 @@ "resolved": "https://registry.npmjs.org/react-select/-/react-select-1.3.0.tgz", "integrity": "sha1-GCitW/fz5CqDXH4tjLE7XCBxSHY=", "requires": { - "classnames": "^2.2.4", - "prop-types": "^15.5.8", - "react-input-autosize": "^2.1.2" + "classnames": "2.2.6", + "prop-types": "15.7.2", + "react-input-autosize": "2.2.2" } }, "react-sidebar": { @@ -6433,8 +6446,8 @@ "resolved": "https://registry.npmjs.org/react-svg-pan-zoom/-/react-svg-pan-zoom-2.18.0.tgz", "integrity": "sha1-HwM9nbHIK5u0lOIZYjcnb2lOesk=", "requires": { - "prop-types": "^15.6.2", - "transformation-matrix": "^1.12.0" + "prop-types": "15.7.2", + "transformation-matrix": "1.15.3" } }, "react-tap-event-plugin": { @@ -6442,7 +6455,7 @@ "resolved": "https://registry.npmjs.org/react-tap-event-plugin/-/react-tap-event-plugin-0.2.2.tgz", "integrity": "sha1-T28leFFlT2wrHCE6HT/yGzU65OE=", "requires": { - "fbjs": "^0.2.1" + "fbjs": "0.2.1" }, "dependencies": { "fbjs": { @@ -6450,9 +6463,9 @@ "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.2.1.tgz", "integrity": "sha1-YiBhYwpD4R+EUBe5BEqqZI7T9zE=", "requires": { - "core-js": "^1.0.0", - "promise": "^7.0.3", - "whatwg-fetch": "^0.9.0" + "core-js": "1.2.7", + "promise": "7.3.1", + "whatwg-fetch": "0.9.0" } }, "whatwg-fetch": { @@ -6467,7 +6480,7 @@ "resolved": "https://registry.npmjs.org/react-themeable/-/react-themeable-1.1.0.tgz", "integrity": "sha1-fURm3ZsrX6dQWHJ4JenxUro3mg4=", "requires": { - "object-assign": "^3.0.0" + "object-assign": "3.0.0" } }, "react-throttle": { @@ -6475,11 +6488,11 @@ "resolved": "https://registry.npmjs.org/react-throttle/-/react-throttle-0.3.0.tgz", "integrity": "sha1-i3HtlfBmAtHgv1F3vvC2nAnm1Lk=", "requires": { - "enzyme": "^2.3.0", - "lodash": "^4.2.1", - "react": "^15.0.2", - "react-addons-test-utils": "^15.0.2", - "react-dom": "^15.0.2" + "enzyme": "2.9.1", + "lodash": "4.17.21", + "react": "15.3.1", + "react-addons-test-utils": "15.6.2", + "react-dom": "15.6.2" }, "dependencies": { "object-assign": { @@ -6492,10 +6505,10 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.2.tgz", "integrity": "sha1-Qc+t9pO3V/rycIRDodH9WgK+9zA=", "requires": { - "fbjs": "^0.8.9", - "loose-envify": "^1.1.0", - "object-assign": "^4.1.0", - "prop-types": "^15.5.10" + "fbjs": "0.8.17", + "loose-envify": "1.4.0", + "object-assign": "4.1.1", + "prop-types": "15.7.2" } } } @@ -6512,8 +6525,8 @@ "integrity": "sha1-4aQL0Krvxy6N/Xp82gmvhQZjl7s=", "dev": true, "requires": { - "global": "^4.3.0", - "react-proxy": "^1.1.7" + "global": "4.4.0", + "react-proxy": "1.1.8" } }, "react-vis": { @@ -6521,24 +6534,24 @@ "resolved": "https://registry.npmjs.org/react-vis/-/react-vis-1.11.7.tgz", "integrity": "sha1-kJkCrwAViJXRTaGt/h0NwARSKP8=", "requires": { - "d3-array": "^1.2.0", - "d3-collection": "^1.0.3", - "d3-color": "^1.0.3", - "d3-contour": "^1.1.0", - "d3-format": "^1.2.0", - "d3-geo": "^1.6.4", - "d3-hexbin": "^0.2.2", - "d3-hierarchy": "^1.1.4", - "d3-interpolate": "^1.1.4", - "d3-sankey": "^0.7.1", - "d3-scale": "^1.0.5", - "d3-shape": "^1.1.0", - "d3-voronoi": "^1.1.2", - "deep-equal": "^1.0.1", - "global": "^4.3.1", + "d3-array": "1.2.1", + "d3-collection": "1.0.4", + "d3-color": "1.0.3", + "d3-contour": "1.3.2", + "d3-format": "1.2.2", + "d3-geo": "1.9.1", + "d3-hexbin": "0.2.2", + "d3-hierarchy": "1.1.5", + "d3-interpolate": "1.1.6", + "d3-sankey": "0.7.1", + "d3-scale": "1.0.7", + "d3-shape": "1.2.0", + "d3-voronoi": "1.1.2", + "deep-equal": "1.1.1", + "global": "4.4.0", "hoek": "4.2.1", - "prop-types": "^15.5.8", - "react-motion": "^0.5.2" + "prop-types": "15.7.2", + "react-motion": "0.5.2" } }, "read-pkg": { @@ -6547,9 +6560,9 @@ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "load-json-file": "1.1.0", + "normalize-package-data": "2.5.0", + "path-type": "1.1.0" } }, "read-pkg-up": { @@ -6558,8 +6571,8 @@ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" + "find-up": "1.1.2", + "read-pkg": "1.1.0" } }, "readable-stream": { @@ -6568,10 +6581,10 @@ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", + "core-util-is": "1.0.2", + "inherits": "2.0.4", "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "string_decoder": "0.10.31" } }, "readdirp": { @@ -6580,9 +6593,9 @@ "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "graceful-fs": "4.2.4", + "micromatch": "3.1.10", + "readable-stream": "2.3.7" }, "dependencies": { "graceful-fs": { @@ -6603,13 +6616,13 @@ "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", "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" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "string_decoder": { @@ -6618,7 +6631,7 @@ "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } } } @@ -6629,8 +6642,8 @@ "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", "mute-stream": "0.0.5" } }, @@ -6641,9 +6654,9 @@ "dev": true, "requires": { "ast-types": "0.8.12", - "esprima-fb": "~15001.1001.0-dev-harmony-fb", - "private": "~0.1.5", - "source-map": "~0.5.0" + "esprima-fb": "15001.1001.0-dev-harmony-fb", + "private": "0.1.8", + "source-map": "0.5.7" }, "dependencies": { "ast-types": { @@ -6660,7 +6673,7 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "^1.1.6" + "resolve": "1.17.0" } }, "redbox-react": { @@ -6669,8 +6682,8 @@ "integrity": "sha1-o+ASvMyKmBbAga/gZUsdY3lVgbo=", "dev": true, "requires": { - "error-stack-parser": "^1.2.0", - "object-assign": "^4.0.1" + "error-stack-parser": "1.3.6", + "object-assign": "4.1.1" }, "dependencies": { "object-assign": { @@ -6687,8 +6700,8 @@ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "dev": true, "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" + "indent-string": "2.1.0", + "strip-indent": "1.0.1" } }, "redux": { @@ -6696,10 +6709,10 @@ "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", "integrity": "sha1-BrcxIyFZAdJdBlvjQusCa8HIU3s=", "requires": { - "lodash": "^4.2.1", - "lodash-es": "^4.2.1", - "loose-envify": "^1.1.0", - "symbol-observable": "^1.0.3" + "lodash": "4.17.21", + "lodash-es": "4.17.15", + "loose-envify": "1.4.0", + "symbol-observable": "1.2.0" } }, "redux-devtools": { @@ -6707,10 +6720,10 @@ "resolved": "https://registry.npmjs.org/redux-devtools/-/redux-devtools-2.1.5.tgz", "integrity": "sha1-cKMZWAl+4fqEbug/pjp3jxAvWac=", "requires": { - "react-json-tree": "^0.1.9", - "react-mixin": "^1.7.0", - "react-redux": "^3.0.0", - "redux": "^2.0.0 || ^3.0.0" + "react-json-tree": "0.1.9", + "react-mixin": "1.7.0", + "react-redux": "3.1.2", + "redux": "3.7.2" }, "dependencies": { "hoist-non-react-statics": { @@ -6723,8 +6736,8 @@ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-3.1.2.tgz", "integrity": "sha1-KoiLEk6dARRIU2EqzuGfgdSYqDY=", "requires": { - "hoist-non-react-statics": "^1.0.3", - "invariant": "^2.0.0" + "hoist-non-react-statics": "1.2.0", + "invariant": "2.2.4" } } } @@ -6742,7 +6755,7 @@ "resolved": "https://registry.npmjs.org/redux-router/-/redux-router-1.0.0.tgz", "integrity": "sha1-PBZ240Qb7FD+jZJFfAF8tjaZM08=", "requires": { - "deep-equal": "^1.0.1" + "deep-equal": "1.1.1" } }, "redux-thunk": { @@ -6762,12 +6775,12 @@ "integrity": "sha1-oORXxY69uuV1yfjNdRJ+k3VkNdg=", "dev": true, "requires": { - "commoner": "~0.10.3", - "defs": "~1.1.0", - "esprima-fb": "~15001.1001.0-dev-harmony-fb", - "private": "~0.1.5", + "commoner": "0.10.8", + "defs": "1.1.1", + "esprima-fb": "15001.1001.0-dev-harmony-fb", + "private": "0.1.8", "recast": "0.10.33", - "through": "~2.3.8" + "through": "2.3.8" } }, "regex-cache": { @@ -6776,7 +6789,7 @@ "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=", "dev": true, "requires": { - "is-equal-shallow": "^0.1.3" + "is-equal-shallow": "0.1.3" } }, "regex-not": { @@ -6785,8 +6798,8 @@ "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", "dev": true, "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" } }, "regexp.prototype.flags": { @@ -6794,8 +6807,8 @@ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", "integrity": "sha1-erqJs8E6ZFCdq888qNn7ub31y3U=", "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" + "define-properties": "1.1.3", + "es-abstract": "1.17.5" } }, "regexpu": { @@ -6804,11 +6817,11 @@ "integrity": "sha1-5TTcmRqeWEYFDJjebX3UpVyeoW0=", "dev": true, "requires": { - "esprima": "^2.6.0", - "recast": "^0.10.10", - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" + "esprima": "2.7.3", + "recast": "0.10.33", + "regenerate": "1.4.0", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" }, "dependencies": { "esprima": { @@ -6831,7 +6844,7 @@ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { - "jsesc": "~0.5.0" + "jsesc": "0.5.0" } }, "remove-trailing-separator": { @@ -6858,7 +6871,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "^1.0.0" + "is-finite": "1.1.0" } }, "replace-ext": { @@ -6872,26 +6885,26 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM=", "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" + "aws-sign2": "0.7.0", + "aws4": "1.9.1", + "caseless": "0.12.0", + "combined-stream": "1.0.8", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.3.3", + "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.27", + "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.4.0" }, "dependencies": { "performance-now": { @@ -6907,8 +6920,8 @@ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true, "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" + "caller-path": "0.1.0", + "resolve-from": "1.0.1" } }, "resolve": { @@ -6917,7 +6930,7 @@ "integrity": "sha1-sllBtUloIxzC0bt2p5y38sC/hEQ=", "dev": true, "requires": { - "path-parse": "^1.0.6" + "path-parse": "1.0.7" } }, "resolve-dir": { @@ -6926,8 +6939,8 @@ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", "dev": true, "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" + "expand-tilde": "2.0.2", + "global-modules": "1.0.0" } }, "resolve-from": { @@ -6948,8 +6961,8 @@ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "dev": true, "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" + "exit-hook": "1.1.1", + "onetime": "1.1.0" } }, "ret": { @@ -6964,7 +6977,7 @@ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "dev": true, "requires": { - "align-text": "^0.1.1" + "align-text": "0.1.4" } }, "rimraf": { @@ -6972,7 +6985,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", "requires": { - "glob": "^7.1.3" + "glob": "7.1.6" }, "dependencies": { "glob": { @@ -6980,12 +6993,12 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=", "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" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.4", + "minimatch": "3.0.4", + "once": "1.3.3", + "path-is-absolute": "1.0.1" } }, "minimatch": { @@ -6993,7 +7006,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } } } @@ -7010,7 +7023,7 @@ "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", "dev": true, "requires": { - "once": "^1.3.0" + "once": "1.3.3" } }, "run-sequence": { @@ -7019,7 +7032,7 @@ "integrity": "sha1-pdegnRs4vsjoxV3JQILTrmAWpiM=", "dev": true, "requires": { - "chalk": "*" + "chalk": "1.1.3" } }, "rw": { @@ -7044,7 +7057,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "~0.1.10" + "ret": "0.1.15" } }, "safer-buffer": { @@ -7064,10 +7077,10 @@ "integrity": "sha1-ZO50vDaF86TGKQ8tqMHjtO75Lo0=", "dev": true, "requires": { - "async": "~0.9.0", - "glob": "~7.0.3", - "lodash": "~4.11.1", - "ssh2": "~0.4.10" + "async": "0.9.2", + "glob": "7.0.6", + "lodash": "4.11.2", + "ssh2": "0.4.15" }, "dependencies": { "async": { @@ -7082,12 +7095,12 @@ "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.2", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.4", + "minimatch": "3.0.4", + "once": "1.3.3", + "path-is-absolute": "1.0.1" } }, "lodash": { @@ -7102,7 +7115,7 @@ "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } } } @@ -7125,18 +7138,18 @@ "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", + "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", + "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" + "on-finished": "2.3.0", + "range-parser": "1.2.1", + "statuses": "1.5.0" }, "dependencies": { "ms": { @@ -7159,9 +7172,9 @@ "integrity": "sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk=", "dev": true, "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.3", "send": "0.17.1" } }, @@ -7171,10 +7184,10 @@ "integrity": "sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" }, "dependencies": { "extend-shallow": { @@ -7183,7 +7196,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -7264,14 +7277,14 @@ "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", "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" + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.3", + "use": "3.1.1" }, "dependencies": { "define-property": { @@ -7280,7 +7293,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -7289,7 +7302,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -7300,9 +7313,9 @@ "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", "dev": true, "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" }, "dependencies": { "define-property": { @@ -7311,7 +7324,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "is-accessor-descriptor": { @@ -7320,7 +7333,7 @@ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.3" } }, "is-data-descriptor": { @@ -7329,7 +7342,7 @@ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.3" } }, "is-descriptor": { @@ -7338,9 +7351,9 @@ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.3" } } } @@ -7351,7 +7364,7 @@ "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", "dev": true, "requires": { - "kind-of": "^3.2.0" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -7360,7 +7373,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -7383,11 +7396,11 @@ "integrity": "sha1-GQhmvs51U+H48mei7oLGBrVQmho=", "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" + "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": { @@ -7405,7 +7418,7 @@ "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", "dev": true, "requires": { - "amdefine": ">=0.0.4" + "amdefine": "1.0.1" } } } @@ -7428,8 +7441,8 @@ "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "spdx-expression-parse": "3.0.1", + "spdx-license-ids": "3.0.10" } }, "spdx-exceptions": { @@ -7444,8 +7457,8 @@ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "spdx-exceptions": "2.3.0", + "spdx-license-ids": "3.0.10" } }, "spdx-license-ids": { @@ -7460,7 +7473,7 @@ "integrity": "sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc=", "dev": true, "requires": { - "through": "2" + "through": "2.3.8" } }, "split-string": { @@ -7469,14 +7482,13 @@ "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", "dev": true, "requires": { - "extend-shallow": "^3.0.0" + "extend-shallow": "3.0.2" } }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "ssh2": { "version": "0.4.15", @@ -7484,8 +7496,8 @@ "integrity": "sha1-B8b0EG2fe26m5N9jbGxT8fmBf/g=", "dev": true, "requires": { - "readable-stream": "~1.0.0", - "ssh2-streams": "~0.0.22" + "readable-stream": "1.0.34", + "ssh2-streams": "0.0.23" }, "dependencies": { "readable-stream": { @@ -7494,10 +7506,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", + "core-util-is": "1.0.2", + "inherits": "2.0.4", "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "string_decoder": "0.10.31" } } } @@ -7508,9 +7520,9 @@ "integrity": "sha1-ru8wgxu1/Er2qj9tCiYaQTUxYSs=", "dev": true, "requires": { - "asn1": "~0.2.0", - "readable-stream": "~1.0.0", - "streamsearch": "~0.1.2" + "asn1": "0.2.4", + "readable-stream": "1.0.34", + "streamsearch": "0.1.2" }, "dependencies": { "readable-stream": { @@ -7519,10 +7531,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", + "core-util-is": "1.0.2", + "inherits": "2.0.4", "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "string_decoder": "0.10.31" } } } @@ -7532,15 +7544,15 @@ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=", "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" + "asn1": "0.2.4", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.2", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.2", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "safer-buffer": "2.1.2", + "tweetnacl": "0.14.5" }, "dependencies": { "asn1": { @@ -7548,7 +7560,7 @@ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", "requires": { - "safer-buffer": "~2.1.0" + "safer-buffer": "2.1.2" } } } @@ -7571,8 +7583,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" + "define-property": "0.2.5", + "object-copy": "0.1.0" }, "dependencies": { "define-property": { @@ -7581,7 +7593,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -7598,8 +7610,8 @@ "integrity": "sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs=", "dev": true, "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" + "inherits": "2.0.4", + "readable-stream": "2.3.7" }, "dependencies": { "isarray": { @@ -7614,13 +7626,13 @@ "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", "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" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "string_decoder": { @@ -7629,7 +7641,7 @@ "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } } } @@ -7640,7 +7652,7 @@ "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", "dev": true, "requires": { - "duplexer": "~0.1.1" + "duplexer": "0.1.1" } }, "stream-consume": { @@ -7661,11 +7673,11 @@ "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", "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" + "builtin-status-codes": "3.0.0", + "inherits": "2.0.4", + "readable-stream": "2.3.7", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.2" }, "dependencies": { "isarray": { @@ -7680,13 +7692,13 @@ "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", "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" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "string_decoder": { @@ -7695,7 +7707,7 @@ "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } } } @@ -7717,9 +7729,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "string.prototype.trimend": { @@ -7727,8 +7739,8 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", "integrity": "sha1-hYEqa4R6wAInD1gIFGBkyZX7aRM=", "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "define-properties": "1.1.3", + "es-abstract": "1.17.5" } }, "string.prototype.trimleft": { @@ -7736,9 +7748,9 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", "integrity": "sha1-RAiqLl1t3QyagHObCH+8BnwDs8w=", "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimstart": "^1.0.0" + "define-properties": "1.1.3", + "es-abstract": "1.17.5", + "string.prototype.trimstart": "1.0.1" } }, "string.prototype.trimright": { @@ -7746,9 +7758,9 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", "integrity": "sha1-x28c7zDyG7rYr+uNsVEUls+w8qM=", "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimend": "^1.0.0" + "define-properties": "1.1.3", + "es-abstract": "1.17.5", + "string.prototype.trimend": "1.0.1" } }, "string.prototype.trimstart": { @@ -7756,8 +7768,8 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", "integrity": "sha1-FK9tnzSwU/fPyJty+PLuFLkDmlQ=", "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "define-properties": "1.1.3", + "es-abstract": "1.17.5" } }, "string_decoder": { @@ -7784,7 +7796,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "strip-bom": { @@ -7793,8 +7805,8 @@ "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", "dev": true, "requires": { - "first-chunk-stream": "^1.0.0", - "is-utf8": "^0.2.0" + "first-chunk-stream": "1.0.0", + "is-utf8": "0.2.1" } }, "strip-indent": { @@ -7803,7 +7815,7 @@ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "dev": true, "requires": { - "get-stdin": "^4.0.1" + "get-stdin": "4.0.1" } }, "strip-json-comments": { @@ -7842,12 +7854,12 @@ "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", "dev": true, "requires": { - "ajv": "^4.7.0", - "ajv-keywords": "^1.0.0", - "chalk": "^1.1.1", - "lodash": "^4.0.0", + "ajv": "4.11.8", + "ajv-keywords": "1.5.1", + "chalk": "1.1.3", + "lodash": "4.17.21", "slice-ansi": "0.0.4", - "string-width": "^2.0.0" + "string-width": "2.1.1" }, "dependencies": { "ajv": { @@ -7856,8 +7868,8 @@ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", "dev": true, "requires": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" + "co": "4.6.0", + "json-stable-stringify": "1.0.1" } }, "ansi-regex": { @@ -7878,8 +7890,8 @@ "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" } }, "strip-ansi": { @@ -7888,7 +7900,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "3.0.0" } } } @@ -7922,8 +7934,8 @@ "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=", "dev": true, "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "readable-stream": "2.3.7", + "xtend": "4.0.2" }, "dependencies": { "isarray": { @@ -7938,13 +7950,13 @@ "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", "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" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "string_decoder": { @@ -7953,7 +7965,7 @@ "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } } } @@ -7964,7 +7976,7 @@ "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", "dev": true, "requires": { - "os-homedir": "^1.0.0" + "os-homedir": "1.0.2" } }, "time-stamp": { @@ -7979,7 +7991,7 @@ "integrity": "sha1-gAsfPu4nLlvFPuRloE0OgEwxIR8=", "dev": true, "requires": { - "setimmediate": "^1.0.4" + "setimmediate": "1.0.5" } }, "title-case": { @@ -7987,8 +7999,8 @@ "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", "integrity": "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=", "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.0.3" + "no-case": "2.3.2", + "upper-case": "1.1.3" } }, "to-arraybuffer": { @@ -8009,7 +8021,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -8018,7 +8030,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -8029,10 +8041,10 @@ "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", "dev": true, "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" } }, "to-regex-range": { @@ -8041,8 +8053,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "3.0.0", + "repeat-string": "1.6.1" } }, "toidentifier": { @@ -8056,8 +8068,8 @@ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha1-zZ+yoKodWhK0c72fuW+j3P9lreI=", "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "psl": "1.8.0", + "punycode": "2.1.1" } }, "transformation-matrix": { @@ -8100,7 +8112,7 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { - "safe-buffer": "^5.0.1" + "safe-buffer": "5.1.2" } }, "tweetnacl": { @@ -8120,7 +8132,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "prelude-ls": "1.1.2" } }, "type-is": { @@ -8130,7 +8142,7 @@ "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "mime-types": "2.1.27" } }, "typedarray": { @@ -8150,10 +8162,10 @@ "integrity": "sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=", "dev": true, "requires": { - "async": "~0.2.6", - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" + "async": "0.2.10", + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" }, "dependencies": { "async": { @@ -8180,9 +8192,9 @@ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "dev": true, "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", "window-size": "0.1.0" } } @@ -8206,10 +8218,10 @@ "integrity": "sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc=", "dev": true, "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "2.0.1" } }, "unique-stream": { @@ -8230,8 +8242,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" + "has-value": "0.3.1", + "isobject": "3.0.1" }, "dependencies": { "has-value": { @@ -8240,9 +8252,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" }, "dependencies": { "isobject": { @@ -8280,7 +8292,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", "requires": { - "punycode": "^2.1.0" + "punycode": "2.1.1" } }, "urix": { @@ -8358,7 +8370,7 @@ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", "dev": true, "requires": { - "user-home": "^1.1.1" + "user-home": "1.1.1" } }, "validate-npm-package-license": { @@ -8367,8 +8379,8 @@ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "spdx-correct": "3.1.1", + "spdx-expression-parse": "3.0.1" } }, "vary": { @@ -8382,9 +8394,9 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { - "assert-plus": "^1.0.0", + "assert-plus": "1.0.0", "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "extsprintf": "1.3.0" } }, "victory": { @@ -8392,9 +8404,9 @@ "resolved": "https://registry.npmjs.org/victory/-/victory-0.21.5.tgz", "integrity": "sha1-8xxhI/Yg13fzzYe/yc9bwq9zhHA=", "requires": { - "victory-chart": "^21.6.1", - "victory-core": "^17.2.5", - "victory-pie": "^11.4.2" + "victory-chart": "21.6.2", + "victory-core": "17.2.7", + "victory-pie": "11.4.2" } }, "victory-chart": { @@ -8402,9 +8414,9 @@ "resolved": "https://registry.npmjs.org/victory-chart/-/victory-chart-21.6.2.tgz", "integrity": "sha1-dibzkhIqwROGzrLG0s6rGdKJXFI=", "requires": { - "d3-voronoi": "^1.1.2", - "lodash": "^4.17.4", - "victory-core": "^17.1.0" + "d3-voronoi": "1.1.2", + "lodash": "4.17.15", + "victory-core": "17.2.7" }, "dependencies": { "lodash": { @@ -8419,12 +8431,12 @@ "resolved": "https://registry.npmjs.org/victory-core/-/victory-core-17.2.7.tgz", "integrity": "sha1-uYsjWI/xACg8qJI3L4xxXO9TR1E=", "requires": { - "d3-ease": "^1.0.0", - "d3-interpolate": "^1.1.1", - "d3-scale": "^1.0.0", - "d3-shape": "^1.2.0", - "d3-timer": "^1.0.0", - "lodash": "^4.17.4" + "d3-ease": "1.0.3", + "d3-interpolate": "1.1.6", + "d3-scale": "1.0.7", + "d3-shape": "1.2.0", + "d3-timer": "1.0.7", + "lodash": "4.17.15" }, "dependencies": { "lodash": { @@ -8439,9 +8451,9 @@ "resolved": "https://registry.npmjs.org/victory-pie/-/victory-pie-11.4.2.tgz", "integrity": "sha1-MzciaWvqK5c/y1QgGXchxbAhCd4=", "requires": { - "d3-shape": "^1.0.0", - "lodash": "^4.17.4", - "victory-core": "^17.0.0" + "d3-shape": "1.2.0", + "lodash": "4.17.15", + "victory-core": "17.2.7" }, "dependencies": { "lodash": { @@ -8457,8 +8469,8 @@ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", "dev": true, "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", + "clone": "1.0.4", + "clone-stats": "0.0.1", "replace-ext": "0.0.1" } }, @@ -8468,14 +8480,14 @@ "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", "dev": true, "requires": { - "defaults": "^1.0.0", - "glob-stream": "^3.1.5", - "glob-watcher": "^0.0.6", - "graceful-fs": "^3.0.0", - "mkdirp": "^0.5.0", - "strip-bom": "^1.0.0", - "through2": "^0.6.1", - "vinyl": "^0.4.0" + "defaults": "1.0.3", + "glob-stream": "3.1.18", + "glob-watcher": "0.0.6", + "graceful-fs": "3.0.12", + "mkdirp": "0.5.5", + "strip-bom": "1.0.0", + "through2": "0.6.5", + "vinyl": "0.4.6" }, "dependencies": { "clone": { @@ -8490,10 +8502,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", + "core-util-is": "1.0.2", + "inherits": "2.0.4", "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "string_decoder": "0.10.31" } }, "through2": { @@ -8502,8 +8514,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" + "readable-stream": "1.0.34", + "xtend": "4.0.2" } }, "vinyl": { @@ -8512,8 +8524,8 @@ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", "dev": true, "requires": { - "clone": "^0.2.0", - "clone-stats": "^0.0.1" + "clone": "0.2.0", + "clone-stats": "0.0.1" } } } @@ -8532,7 +8544,7 @@ "resolved": "https://registry.npmjs.org/warning/-/warning-2.1.0.tgz", "integrity": "sha1-ISINnGOvx3qMkhEeARr3Bc4MaQE=", "requires": { - "loose-envify": "^1.0.0" + "loose-envify": "1.4.0" } }, "watchpack": { @@ -8541,9 +8553,9 @@ "integrity": "sha1-Yuqkq15bo1/fwBgnVibjwPXj+ws=", "dev": true, "requires": { - "async": "^0.9.0", - "chokidar": "^1.0.0", - "graceful-fs": "^4.1.2" + "async": "0.9.2", + "chokidar": "1.7.0", + "graceful-fs": "4.2.4" }, "dependencies": { "async": { @@ -8566,21 +8578,21 @@ "integrity": "sha1-T/MfU9sDM55VFkqdRo7gMklo/pg=", "dev": true, "requires": { - "acorn": "^3.0.0", - "async": "^1.3.0", - "clone": "^1.0.2", - "enhanced-resolve": "~0.9.0", - "interpret": "^0.6.4", - "loader-utils": "^0.2.11", - "memory-fs": "~0.3.0", - "mkdirp": "~0.5.0", - "node-libs-browser": "^0.7.0", - "optimist": "~0.6.0", - "supports-color": "^3.1.0", - "tapable": "~0.1.8", - "uglify-js": "~2.7.3", - "watchpack": "^0.2.1", - "webpack-core": "~0.6.9" + "acorn": "3.3.0", + "async": "1.5.2", + "clone": "1.0.4", + "enhanced-resolve": "0.9.1", + "interpret": "0.6.6", + "loader-utils": "0.2.17", + "memory-fs": "0.3.0", + "mkdirp": "0.5.5", + "node-libs-browser": "0.7.0", + "optimist": "0.6.1", + "supports-color": "3.2.3", + "tapable": "0.1.10", + "uglify-js": "2.7.5", + "watchpack": "0.2.9", + "webpack-core": "0.6.9" }, "dependencies": { "acorn": { @@ -8607,7 +8619,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "^1.0.0" + "has-flag": "1.0.0" } } } @@ -8618,8 +8630,8 @@ "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=", "dev": true, "requires": { - "source-list-map": "~0.1.7", - "source-map": "~0.4.1" + "source-list-map": "0.1.8", + "source-map": "0.4.4" }, "dependencies": { "source-map": { @@ -8628,7 +8640,7 @@ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { - "amdefine": ">=0.0.4" + "amdefine": "1.0.1" } } } @@ -8639,11 +8651,11 @@ "integrity": "sha1-+PwRIM47T8VoDO7LQ9d3lmshEF4=", "dev": true, "requires": { - "memory-fs": "~0.4.1", - "mime": "^1.5.0", - "path-is-absolute": "^1.0.0", - "range-parser": "^1.0.3", - "time-stamp": "^2.0.0" + "memory-fs": "0.4.1", + "mime": "1.6.0", + "path-is-absolute": "1.0.1", + "range-parser": "1.2.1", + "time-stamp": "2.2.0" }, "dependencies": { "isarray": { @@ -8658,8 +8670,8 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "errno": "0.1.7", + "readable-stream": "2.3.7" } }, "readable-stream": { @@ -8668,13 +8680,13 @@ "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", "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" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "string_decoder": { @@ -8683,7 +8695,7 @@ "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } }, "time-stamp": { @@ -8701,9 +8713,9 @@ "dev": true, "requires": { "ansi-html": "0.0.7", - "html-entities": "^1.2.0", - "querystring": "^0.2.0", - "strip-ansi": "^3.0.0" + "html-entities": "1.3.1", + "querystring": "0.2.0", + "strip-ansi": "3.0.1" } }, "whatwg-fetch": { @@ -8717,7 +8729,7 @@ "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", "dev": true, "requires": { - "isexe": "^2.0.0" + "isexe": "2.0.0" } }, "window-size": { @@ -8749,7 +8761,7 @@ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "dev": true, "requires": { - "mkdirp": "^0.5.1" + "mkdirp": "0.5.5" } }, "xml2js": { @@ -8758,8 +8770,8 @@ "integrity": "sha1-oMaVFnUkIesqx1juTUzPWIQ+rGY=", "dev": true, "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" + "sax": "1.2.4", + "xmlbuilder": "11.0.1" } }, "xmlbuilder": { @@ -8791,12 +8803,12 @@ "integrity": "sha1-ISBUaTFuk5Ex1Z8toMbX+YIh6kA=", "dev": true, "requires": { - "camelcase": "^1.2.1", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "os-locale": "^1.4.0", - "window-size": "^0.1.2", - "y18n": "^3.2.0" + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "os-locale": "1.4.0", + "window-size": "0.1.4", + "y18n": "3.2.1" }, "dependencies": { "camelcase": { @@ -8806,6 +8818,11 @@ "dev": true } } + }, + "yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==" } } } diff --git a/client-report/package.json b/client-report/package.json index a54cbecdcc..139b1d5f3f 100644 --- a/client-report/package.json +++ b/client-report/package.json @@ -84,6 +84,7 @@ "svg-text-wrap": "0.0.1", "title-case": "^2.1.0", "victory": "^0.21.3", - "whatwg-fetch": "^0.10.1" + "whatwg-fetch": "^0.10.1", + "yargs-parser": "^21.0.0" } } From 40961ed0ba2b2212d83d56a9bc769e6a8603cf95 Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Tue, 21 Dec 2021 17:16:30 +0100 Subject: [PATCH 25/49] Add config volume to client-* --- client-admin/gulpfile.js | 3 ++- client-participation/gulpfile.js | 3 ++- client-report/gulpfile.js | 3 ++- docker-compose.yml | 12 ++++++++++++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/client-admin/gulpfile.js b/client-admin/gulpfile.js index 7f043a0134..365202f471 100644 --- a/client-admin/gulpfile.js +++ b/client-admin/gulpfile.js @@ -13,7 +13,8 @@ var rimraf = require("rimraf"); var runSequence = require("run-sequence"); var scp = require("gulp-scp2"); -var config = require(__dirname + '/config/config.js'); +let POLIS_ROOT = process.env.POLIS_ROOT +var config = require(POLIS_ROOT + 'config/config.js'); console.log("Uploader: " + config.get('uploader')); diff --git a/client-participation/gulpfile.js b/client-participation/gulpfile.js index f5d3ba018d..de091d8639 100644 --- a/client-participation/gulpfile.js +++ b/client-participation/gulpfile.js @@ -50,7 +50,8 @@ var spawn = require("child_process").spawn; var Stream = require("stream"); var url = require("url"); -var yaml_config = require(__dirname + '/config/config.js'); +let POLIS_ROOT = process.env.POLIS_ROOT +var yaml_config = require(POLIS_ROOT + 'config/config.js'); console.log("Uploader: " + yaml_config.get('uploader')); diff --git a/client-report/gulpfile.js b/client-report/gulpfile.js index 03dc5621f6..f9ca7c04f4 100644 --- a/client-report/gulpfile.js +++ b/client-report/gulpfile.js @@ -14,7 +14,8 @@ var rimraf = require("rimraf"); var runSequence = require('run-sequence'); var scp = require('gulp-scp2'); -var config = require(__dirname + '/config/config.js'); +let POLIS_ROOT = process.env.POLIS_ROOT +var config = require(POLIS_ROOT + 'config/config.js'); console.log("Uploader: " + config.get('uploader')); diff --git a/docker-compose.yml b/docker-compose.yml index a4556e0f0a..5a4743a19c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -109,30 +109,42 @@ services: environment: - POLIS_ROOT=/app/ image: compdem/polis-client-participation:${TAG} + depends_on: + - "postgres" build: context: ./client-participation args: GIT_HASH: "${GIT_HASH}" + volumes: + - "config:/app/config" client-admin: container_name: polis-client-admin environment: - POLIS_ROOT=/app/ image: compdem/polis-client-admin:${TAG} + depends_on: + - "postgres" build: context: ./client-admin args: GIT_HASH: "${GIT_HASH}" + volumes: + - "config:/app/config" client-report: container_name: polis-client-report environment: - POLIS_ROOT=/app/ image: compdem/polis-client-report:${TAG} + depends_on: + - "postgres" build: context: ./client-report args: GIT_HASH: "${GIT_HASH}" + volumes: + - "config:/app/config" # maildev: # image: maildev/maildev:1.1.0 From 019cb6b316f631308408d778795b5494b356d715 Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Tue, 21 Dec 2021 18:10:14 +0100 Subject: [PATCH 26/49] Dependency for client-* updated to config --- docker-compose.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 5a4743a19c..82c14eed52 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -110,7 +110,7 @@ services: - POLIS_ROOT=/app/ image: compdem/polis-client-participation:${TAG} depends_on: - - "postgres" + - "config" build: context: ./client-participation args: @@ -124,7 +124,7 @@ services: - POLIS_ROOT=/app/ image: compdem/polis-client-admin:${TAG} depends_on: - - "postgres" + - "config" build: context: ./client-admin args: @@ -138,7 +138,7 @@ services: - POLIS_ROOT=/app/ image: compdem/polis-client-report:${TAG} depends_on: - - "postgres" + - "config" build: context: ./client-report args: From c9e551c62154dff38ae3610ce4bb4bdd6a6a74a5 Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Tue, 21 Dec 2021 19:54:52 +0100 Subject: [PATCH 27/49] Fix for using the env variable in gulpfile.js --- client-admin/config/config.js | 55 ------------ client-admin/config/development.yaml | 22 ----- client-admin/config/schema.yaml | 92 -------------------- client-admin/package.json | 2 +- client-participation/config/config.js | 55 ------------ client-participation/config/development.yaml | 22 ----- client-participation/config/schema.yaml | 88 ------------------- client-participation/package.json | 2 +- client-report/config/config.js | 55 ------------ client-report/config/development.yaml | 22 ----- client-report/config/schema.yaml | 88 ------------------- client-report/package.json | 2 +- docker-compose.yml | 6 -- 13 files changed, 3 insertions(+), 508 deletions(-) delete mode 100644 client-admin/config/config.js delete mode 100644 client-admin/config/development.yaml delete mode 100644 client-admin/config/schema.yaml delete mode 100644 client-participation/config/config.js delete mode 100644 client-participation/config/development.yaml delete mode 100644 client-participation/config/schema.yaml delete mode 100644 client-report/config/config.js delete mode 100644 client-report/config/development.yaml delete mode 100644 client-report/config/schema.yaml diff --git a/client-admin/config/config.js b/client-admin/config/config.js deleted file mode 100644 index 6908014715..0000000000 --- a/client-admin/config/config.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (C) 2012-present, The Authors. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License, version 3, as published by the Free Software Foundation. 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 Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . - -"use strict"; - -console.log('starting config.js') - -const convict = require('convict'); -const fs = require('fs'); -const yaml = require('js-yaml'); - -convict.addParser({ extension: ['yml', 'yaml'], parse: yaml.safeLoad }); - -// for additional validation options, use the following: -// convict.addFormat(require('convict-format-with-validator').ipaddress); - -'use strict'; - -// Define a schema - -try { - // the next line only works with docker-compose - console.log('reading schema') - let fileContents = fs.readFileSync('/app/config/schema.yaml', 'utf8'); - let schema = yaml.safeLoad(fileContents); - var config = convict(schema); -} catch (e) { - console.log(e); -} - -console.log('default aws_region:' + config.get('aws_region')); - -// Load environment dependent configuration -var env = config.get('env'); -config.loadFile('/app/config/' + env + '.yaml'); -var now = new Date(); -console.log('config aws_region:' + config.get('aws_region') + " @ " + now.toUTCString()); - -const path = '/app/config/config_private.yaml'; - -try { - if (fs.existsSync(path)) { - config.loadFile(path); - } -} catch(err) { - console.error(err) -} - -// Perform validation -config.validate({allowed: 'strict'}); - -module.exports = config; - - -console.log('finishing config.js') - diff --git a/client-admin/config/development.yaml b/client-admin/config/development.yaml deleted file mode 100644 index 56a4b49f03..0000000000 --- a/client-admin/config/development.yaml +++ /dev/null @@ -1,22 +0,0 @@ -# Precedence order (https://www.npmjs.com/package/convict) -# When merging configuration values from different sources, Convict follows precedence rules. The order, from lowest to highest, for config.loadFile(file) and config.load(json) is: - -# Default value -# File or json set in function argument -# Environment variables (only used when env property is set in schema) -# Command line arguments (only used when arg property is set in schema) - -# for easy json/yaml conversion: https://www.json2yaml.com/ - -aws_region: us-north-14 - -# aws_access_key_id: -# doc: aws_access_key_id -# default: NA -# env: AWS_ACCESS_KEY_ID -# sensitive: true -# aws_secret_access_key: -# doc: aws_secret_access_key -# default: NA -# env: AWS_SECRET_ACCESS_KEY -# sensitive: true diff --git a/client-admin/config/schema.yaml b/client-admin/config/schema.yaml deleted file mode 100644 index 95fcbd0fd7..0000000000 --- a/client-admin/config/schema.yaml +++ /dev/null @@ -1,92 +0,0 @@ -env: - doc: The application environment - format: - - production - - development - - test - default: development - env: NODE_ENV - -aws_region: - doc: aws_region - default: us-east-1 - env: AWS_REGION - -domainWhitelist: - doc: domainWhitelist - default: - - ^localhost$ - - ^192\\.168\\.1\\.141$ - - ^192\\.168\\.1\\.140$ - - ^pol\\.is - - .+\\.pol\\.is$ - - ^xip\\.io$ - - .+\\.xip\\.io$ - env: DOMAIN_WHITELIST - -uploader: - doc: uploader for compiled static javascript - format: - - local - - s3 - - scp - default: local - env: UPLOADER - -service_url: - doc: Point to a polisServer instance (local recommended for dev) - default: http://localhost:5000 - env: SERVICE_URL - -client_participation_port: - doc: Note that this must match the participation client port specified in polisServer instance - default: 5001 - env: CLIENT_PARTICIPATION_PORT - -fb_app_id: - doc: must register with facebook and get a facebook app id to use the facebook auth features - default: 661042417336977 - env: FB_APP_ID - -local_output_path: - doc: Uploader settings local - default: ./build - env: LOCAL_OUTPUT_PATH - -s3_bucket_prod: - doc: uploader settings s3 - default: pol.is - env: S3_BUCKET_PROD - -s3_bucket_preprod: - doc: uploader settings s3 - default: preprod.pol.is - env: S3_BUCKET_PREPROD - -scp_subdir_preprod: - doc: uploader settings scp - default: preprod - env: SCP_SUBDIR_PREPROD - -scp_subdir_prod: - doc: uploader settings scp - default: prod - env: SCP_SUBDIR_PROD - -port: - doc: port - default: 5000 - env: PORT - -service_hostname: - doc: service_hostname - default: undefined - env: SERVICE_HOSTNAME -disable_plans: - doc: disable_plans - default: true - env: DISABLE_PLANS -disable_intercom: - doc: disable_intercom - default: true - env: DISABLE_INTERCOM \ No newline at end of file diff --git a/client-admin/package.json b/client-admin/package.json index 818c0aef56..8fe6f88151 100644 --- a/client-admin/package.json +++ b/client-admin/package.json @@ -10,7 +10,7 @@ "build": "npm run build:webpack", "build-debug": "npm run build:webpack_unminified", "convict": "6.0.0", - "deploy:prod": "node gulpfile.js deploy_TO_PRODUCTION", + "deploy:prod": "POLIS_ROOT=/app/ node gulpfile.js deploy_TO_PRODUCTION", "deploy:preprod": "node gulpfile.js deployPreprod", "start": "./x", "lint": "eslint src", diff --git a/client-participation/config/config.js b/client-participation/config/config.js deleted file mode 100644 index 6908014715..0000000000 --- a/client-participation/config/config.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (C) 2012-present, The Authors. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License, version 3, as published by the Free Software Foundation. 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 Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . - -"use strict"; - -console.log('starting config.js') - -const convict = require('convict'); -const fs = require('fs'); -const yaml = require('js-yaml'); - -convict.addParser({ extension: ['yml', 'yaml'], parse: yaml.safeLoad }); - -// for additional validation options, use the following: -// convict.addFormat(require('convict-format-with-validator').ipaddress); - -'use strict'; - -// Define a schema - -try { - // the next line only works with docker-compose - console.log('reading schema') - let fileContents = fs.readFileSync('/app/config/schema.yaml', 'utf8'); - let schema = yaml.safeLoad(fileContents); - var config = convict(schema); -} catch (e) { - console.log(e); -} - -console.log('default aws_region:' + config.get('aws_region')); - -// Load environment dependent configuration -var env = config.get('env'); -config.loadFile('/app/config/' + env + '.yaml'); -var now = new Date(); -console.log('config aws_region:' + config.get('aws_region') + " @ " + now.toUTCString()); - -const path = '/app/config/config_private.yaml'; - -try { - if (fs.existsSync(path)) { - config.loadFile(path); - } -} catch(err) { - console.error(err) -} - -// Perform validation -config.validate({allowed: 'strict'}); - -module.exports = config; - - -console.log('finishing config.js') - diff --git a/client-participation/config/development.yaml b/client-participation/config/development.yaml deleted file mode 100644 index 56a4b49f03..0000000000 --- a/client-participation/config/development.yaml +++ /dev/null @@ -1,22 +0,0 @@ -# Precedence order (https://www.npmjs.com/package/convict) -# When merging configuration values from different sources, Convict follows precedence rules. The order, from lowest to highest, for config.loadFile(file) and config.load(json) is: - -# Default value -# File or json set in function argument -# Environment variables (only used when env property is set in schema) -# Command line arguments (only used when arg property is set in schema) - -# for easy json/yaml conversion: https://www.json2yaml.com/ - -aws_region: us-north-14 - -# aws_access_key_id: -# doc: aws_access_key_id -# default: NA -# env: AWS_ACCESS_KEY_ID -# sensitive: true -# aws_secret_access_key: -# doc: aws_secret_access_key -# default: NA -# env: AWS_SECRET_ACCESS_KEY -# sensitive: true diff --git a/client-participation/config/schema.yaml b/client-participation/config/schema.yaml deleted file mode 100644 index b6096ab215..0000000000 --- a/client-participation/config/schema.yaml +++ /dev/null @@ -1,88 +0,0 @@ -env: - doc: The application environment - format: - - production - - development - - test - default: development - env: NODE_ENV - -aws_region: - doc: aws_region - default: us-east-1 - env: AWS_REGION - -domainWhitelist: - doc: domainWhitelist - default: - - ^localhost$ - - ^192\\.168\\.1\\.141$ - - ^192\\.168\\.1\\.140$ - - ^pol\\.is - - .+\\.pol\\.is$ - - ^xip\\.io$ - - .+\\.xip\\.io$ - env: DOMAIN_WHITELIST - -uploader: - doc: uploader for compiled static javascript - format: - - local - - s3 - - scp - default: local - env: UPLOADER - -service_url: - doc: Point to a polisServer instance (local recommended for dev) - default: http://localhost:5000 - env: SERVICE_URL - -client_participation_port: - doc: Note that this must match the participation client port specified in polisServer instance - default: 5001 - env: CLIENT_PARTICIPATION_PORT - -fb_app_id: - doc: must register with facebook and get a facebook app id to use the facebook auth features - default: 661042417336977 - env: FB_APP_ID - -local_output_path: - doc: Uploader settings local - default: ./build - env: LOCAL_OUTPUT_PATH - -s3_bucket_prod: - doc: uploader settings s3 - default: pol.is - env: S3_BUCKET_PROD - -s3_bucket_preprod: - doc: uploader settings s3 - default: preprod.pol.is - env: S3_BUCKET_PREPROD - -scp_subdir_preprod: - doc: uploader settings scp - default: preprod - env: SCP_SUBDIR_PREPROD - -scp_subdir_prod: - doc: uploader settings scp - default: prod - env: SCP_SUBDIR_PROD - -port: - doc: port - default: 5000 - env: PORT - -service_hostname: - doc: service_hostname - default: undefined - env: SERVICE_HOSTNAME -disable_intercom: - doc: disable_intercom - default: true - env: DISABLE_INTERCOM \ No newline at end of file diff --git a/client-participation/package.json b/client-participation/package.json index b03d6cd70f..d39597d88e 100644 --- a/client-participation/package.json +++ b/client-participation/package.json @@ -7,7 +7,7 @@ "start": "gulp", "build:prod": "gulp prodBuildNoDeploy", "deploy:preprod": "gulp deployPreprod", - "deploy:prod": "gulp deploy_TO_PRODUCTION", + "deploy:prod": "POLIS_ROOT=/app/ gulp deploy_TO_PRODUCTION", "deploy:preprod:unminified": "gulp deployPreprodUnminified" }, "dependencies": { diff --git a/client-report/config/config.js b/client-report/config/config.js deleted file mode 100644 index 6908014715..0000000000 --- a/client-report/config/config.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (C) 2012-present, The Authors. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License, version 3, as published by the Free Software Foundation. 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 Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . - -"use strict"; - -console.log('starting config.js') - -const convict = require('convict'); -const fs = require('fs'); -const yaml = require('js-yaml'); - -convict.addParser({ extension: ['yml', 'yaml'], parse: yaml.safeLoad }); - -// for additional validation options, use the following: -// convict.addFormat(require('convict-format-with-validator').ipaddress); - -'use strict'; - -// Define a schema - -try { - // the next line only works with docker-compose - console.log('reading schema') - let fileContents = fs.readFileSync('/app/config/schema.yaml', 'utf8'); - let schema = yaml.safeLoad(fileContents); - var config = convict(schema); -} catch (e) { - console.log(e); -} - -console.log('default aws_region:' + config.get('aws_region')); - -// Load environment dependent configuration -var env = config.get('env'); -config.loadFile('/app/config/' + env + '.yaml'); -var now = new Date(); -console.log('config aws_region:' + config.get('aws_region') + " @ " + now.toUTCString()); - -const path = '/app/config/config_private.yaml'; - -try { - if (fs.existsSync(path)) { - config.loadFile(path); - } -} catch(err) { - console.error(err) -} - -// Perform validation -config.validate({allowed: 'strict'}); - -module.exports = config; - - -console.log('finishing config.js') - diff --git a/client-report/config/development.yaml b/client-report/config/development.yaml deleted file mode 100644 index 56a4b49f03..0000000000 --- a/client-report/config/development.yaml +++ /dev/null @@ -1,22 +0,0 @@ -# Precedence order (https://www.npmjs.com/package/convict) -# When merging configuration values from different sources, Convict follows precedence rules. The order, from lowest to highest, for config.loadFile(file) and config.load(json) is: - -# Default value -# File or json set in function argument -# Environment variables (only used when env property is set in schema) -# Command line arguments (only used when arg property is set in schema) - -# for easy json/yaml conversion: https://www.json2yaml.com/ - -aws_region: us-north-14 - -# aws_access_key_id: -# doc: aws_access_key_id -# default: NA -# env: AWS_ACCESS_KEY_ID -# sensitive: true -# aws_secret_access_key: -# doc: aws_secret_access_key -# default: NA -# env: AWS_SECRET_ACCESS_KEY -# sensitive: true diff --git a/client-report/config/schema.yaml b/client-report/config/schema.yaml deleted file mode 100644 index b6096ab215..0000000000 --- a/client-report/config/schema.yaml +++ /dev/null @@ -1,88 +0,0 @@ -env: - doc: The application environment - format: - - production - - development - - test - default: development - env: NODE_ENV - -aws_region: - doc: aws_region - default: us-east-1 - env: AWS_REGION - -domainWhitelist: - doc: domainWhitelist - default: - - ^localhost$ - - ^192\\.168\\.1\\.141$ - - ^192\\.168\\.1\\.140$ - - ^pol\\.is - - .+\\.pol\\.is$ - - ^xip\\.io$ - - .+\\.xip\\.io$ - env: DOMAIN_WHITELIST - -uploader: - doc: uploader for compiled static javascript - format: - - local - - s3 - - scp - default: local - env: UPLOADER - -service_url: - doc: Point to a polisServer instance (local recommended for dev) - default: http://localhost:5000 - env: SERVICE_URL - -client_participation_port: - doc: Note that this must match the participation client port specified in polisServer instance - default: 5001 - env: CLIENT_PARTICIPATION_PORT - -fb_app_id: - doc: must register with facebook and get a facebook app id to use the facebook auth features - default: 661042417336977 - env: FB_APP_ID - -local_output_path: - doc: Uploader settings local - default: ./build - env: LOCAL_OUTPUT_PATH - -s3_bucket_prod: - doc: uploader settings s3 - default: pol.is - env: S3_BUCKET_PROD - -s3_bucket_preprod: - doc: uploader settings s3 - default: preprod.pol.is - env: S3_BUCKET_PREPROD - -scp_subdir_preprod: - doc: uploader settings scp - default: preprod - env: SCP_SUBDIR_PREPROD - -scp_subdir_prod: - doc: uploader settings scp - default: prod - env: SCP_SUBDIR_PROD - -port: - doc: port - default: 5000 - env: PORT - -service_hostname: - doc: service_hostname - default: undefined - env: SERVICE_HOSTNAME -disable_intercom: - doc: disable_intercom - default: true - env: DISABLE_INTERCOM \ No newline at end of file diff --git a/client-report/package.json b/client-report/package.json index 139b1d5f3f..1886b08b84 100644 --- a/client-report/package.json +++ b/client-report/package.json @@ -8,7 +8,7 @@ "build": "npm run clean && npm run build:webpack", "convict": "6.0.0", "deploy:preprod": "gulp deployPreprod", - "deploy:prod": "gulp deploy_TO_PRODUCTION", + "deploy:prod": "POLIS_ROOT=/app/ gulp deploy_TO_PRODUCTION", "start": "node dev-server.js", "lint": "eslint src", "postinstall": "npm run build" diff --git a/docker-compose.yml b/docker-compose.yml index 82c14eed52..651c30b43f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -106,8 +106,6 @@ services: client-participation: container_name: polis-client-participation - environment: - - POLIS_ROOT=/app/ image: compdem/polis-client-participation:${TAG} depends_on: - "config" @@ -120,8 +118,6 @@ services: client-admin: container_name: polis-client-admin - environment: - - POLIS_ROOT=/app/ image: compdem/polis-client-admin:${TAG} depends_on: - "config" @@ -134,8 +130,6 @@ services: client-report: container_name: polis-client-report - environment: - - POLIS_ROOT=/app/ image: compdem/polis-client-report:${TAG} depends_on: - "config" From 967df84e7f24b1a9e66cc623cf4b64ea299e81e7 Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Mon, 27 Dec 2021 09:32:03 +0100 Subject: [PATCH 28/49] Fix issue with mounting config volume to client-* --- client-admin/Dockerfile | 2 +- client-participation/Dockerfile | 2 +- client-report/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client-admin/Dockerfile b/client-admin/Dockerfile index 1c43d27ecc..2692316325 100644 --- a/client-admin/Dockerfile +++ b/client-admin/Dockerfile @@ -11,4 +11,4 @@ RUN npm install COPY . . ARG GIT_HASH -RUN npm run deploy:prod +CMD npm run deploy:prod diff --git a/client-participation/Dockerfile b/client-participation/Dockerfile index df73279cbd..46e6b619ae 100644 --- a/client-participation/Dockerfile +++ b/client-participation/Dockerfile @@ -24,5 +24,5 @@ COPY . . ARG GIT_HASH ARG BABEL_ENV=production -RUN npm run deploy:prod +CMD npm run deploy:prod diff --git a/client-report/Dockerfile b/client-report/Dockerfile index abc15454cf..559e988742 100644 --- a/client-report/Dockerfile +++ b/client-report/Dockerfile @@ -11,4 +11,4 @@ RUN npm ci COPY . . ARG GIT_HASH -RUN npm run deploy:prod +CMD npm run deploy:prod From b62a30d3b753c525c7e2b62e2f8a2195a8a93a68 Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Tue, 4 Jan 2022 18:18:16 +0100 Subject: [PATCH 29/49] Resolved issue with build failure --- client-admin/Dockerfile | 7 ++++++- client-participation/Dockerfile | 7 ++++++- client-report/Dockerfile | 7 ++++++- docker-compose.yml | 6 ------ 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/client-admin/Dockerfile b/client-admin/Dockerfile index 2692316325..07663b711e 100644 --- a/client-admin/Dockerfile +++ b/client-admin/Dockerfile @@ -1,4 +1,6 @@ # Gulp v3 stops us from upgrading beyond Node v11 +FROM polis_config AS config + FROM node:11.15.0-alpine WORKDIR /app @@ -8,7 +10,10 @@ RUN apk add git --no-cache COPY package*.json ./ RUN npm install +COPY --from=config /config/config.js /app/config/ +COPY --from=config /config/*.yaml /app/config/ + COPY . . ARG GIT_HASH -CMD npm run deploy:prod +RUN npm run deploy:prod diff --git a/client-participation/Dockerfile b/client-participation/Dockerfile index 46e6b619ae..139bf98838 100644 --- a/client-participation/Dockerfile +++ b/client-participation/Dockerfile @@ -1,4 +1,6 @@ # Gulp v3 stops us from upgrading beyond Node v11 +FROM polis_config AS config + FROM node:11.15.0-alpine WORKDIR /app @@ -19,10 +21,13 @@ RUN npm ci RUN apk del .build +COPY --from=config /config/config.js /app/config/ +COPY --from=config /config/*.yaml /app/config/ + COPY . . ARG GIT_HASH ARG BABEL_ENV=production -CMD npm run deploy:prod +RUN npm run deploy:prod diff --git a/client-report/Dockerfile b/client-report/Dockerfile index 559e988742..b73f5bd50f 100644 --- a/client-report/Dockerfile +++ b/client-report/Dockerfile @@ -1,4 +1,6 @@ # Gulp v3 stops us from upgrading beyond Node v11 +FROM polis_config AS config + FROM node:11.15.0-alpine WORKDIR /app @@ -8,7 +10,10 @@ RUN apk add git --no-cache COPY package*.json ./ RUN npm ci +COPY --from=config /config/config.js /app/config/ +COPY --from=config /config/*.yaml /app/config/ + COPY . . ARG GIT_HASH -CMD npm run deploy:prod +RUN npm run deploy:prod diff --git a/docker-compose.yml b/docker-compose.yml index 6563163f54..2efe317789 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -114,8 +114,6 @@ services: context: ./client-participation args: GIT_HASH: "${GIT_HASH}" - volumes: - - "config:/app/config" client-admin: container_name: polis-client-admin @@ -126,8 +124,6 @@ services: context: ./client-admin args: GIT_HASH: "${GIT_HASH}" - volumes: - - "config:/app/config" client-report: container_name: polis-client-report @@ -138,8 +134,6 @@ services: context: ./client-report args: GIT_HASH: "${GIT_HASH}" - volumes: - - "config:/app/config" # maildev: # image: maildev/maildev:1.1.0 From 5c170a9b980a5071a690cb70c52bf48d39b68456 Mon Sep 17 00:00:00 2001 From: Chris Krenn Date: Wed, 12 Jan 2022 01:54:33 +0000 Subject: [PATCH 30/49] remove readme-convict.md --- README-convict.md | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 README-convict.md diff --git a/README-convict.md b/README-convict.md deleted file mode 100644 index a43b15f510..0000000000 --- a/README-convict.md +++ /dev/null @@ -1,16 +0,0 @@ -# after login - -cd polis -sudo docker-compose ps # current docker status -sudo docker-compose up --build -d # rebuild what is necessary, start apps and detach -sudo docker-compose down # stop apps - -# docker-compose reads docker-compose.yml file from current directory - -# for testing: -cd e2e -npm run e2e:headless - - -sudo reboot # reboot whole GCP server - From 88991255addf03bd26757a02d6ef54f57231a966 Mon Sep 17 00:00:00 2001 From: Chris Krenn Date: Thu, 13 Jan 2022 15:45:49 +0000 Subject: [PATCH 31/49] removed reference to polis.config.template.js --- .github/workflows/bundlewatch.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/bundlewatch.yml b/.github/workflows/bundlewatch.yml index f988aba48b..9120db6b8f 100644 --- a/.github/workflows/bundlewatch.yml +++ b/.github/workflows/bundlewatch.yml @@ -53,7 +53,6 @@ jobs: working-directory: client-participation run: | npm install - cp polis.config.template.js polis.config.js npm run deploy:prod # So directory stays consistent between builds for comparison. mv dist/cached/* dist/cached/xxxxxxxxx From 46e976afb4ccfc16a674440640bd4de217340ba9 Mon Sep 17 00:00:00 2001 From: crkrenn <6069975+crkrenn@users.noreply.github.com> Date: Sun, 16 Jan 2022 08:07:32 -0800 Subject: [PATCH 32/49] Update bundlewatch.yml modified client-participation build to be the same as the client-admin build --- .github/workflows/bundlewatch.yml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/bundlewatch.yml b/.github/workflows/bundlewatch.yml index 9120db6b8f..6c6eb7775f 100644 --- a/.github/workflows/bundlewatch.yml +++ b/.github/workflows/bundlewatch.yml @@ -53,9 +53,15 @@ jobs: working-directory: client-participation run: | npm install - npm run deploy:prod - # So directory stays consistent between builds for comparison. - mv dist/cached/* dist/cached/xxxxxxxxx + npm run build:webpack + +# - name: "Install & Build: client-participation" +# working-directory: client-participation +# run: | +# npm install +# npm run deploy:prod +# # So directory stays consistent between builds for comparison. +# mv dist/cached/* dist/cached/xxxxxxxxx - name: Install Bundlewatch run: npm install -g bundlewatch@0.2.6 From 7d3059dbf6972007cb1acfc35aa233f649e2716b Mon Sep 17 00:00:00 2001 From: crkrenn Date: Sun, 16 Jan 2022 08:17:28 -0800 Subject: [PATCH 33/49] reenabled maildev container --- docker-compose.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 2efe317789..bd4fe1a525 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -135,15 +135,15 @@ services: args: GIT_HASH: "${GIT_HASH}" - # maildev: - # image: maildev/maildev:1.1.0 - # networks: - # - "polis-net" - # ports: - # # User interface - # - "1080:80" - # # SMTP port - # - "25:25" + maildev: + image: maildev/maildev:1.1.0 + networks: + - "polis-net" + ports: + # User interface + - "1080:80" + # SMTP port + - "25:25" config: build: From f249ce9448c713089fae42e81a95b9c56ffaed2d Mon Sep 17 00:00:00 2001 From: crkrenn <6069975+crkrenn@users.noreply.github.com> Date: Tue, 18 Jan 2022 09:39:52 -0800 Subject: [PATCH 34/49] Update README.md --- config/README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/config/README.md b/config/README.md index d78bf12999..baa35c3e1b 100644 --- a/config/README.md +++ b/config/README.md @@ -14,5 +14,3 @@ - Test whether docker config volume will override `server/config` directory - Write code to read json config into math - Write code to allow math to run in docker or locally - - From b3db99e5c440890c3ebd702581ed3c8106978a4d Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Thu, 20 Jan 2022 18:09:22 +0100 Subject: [PATCH 35/49] Use the image:tag format directly in the COPY --- client-admin/Dockerfile | 6 ++---- client-participation/Dockerfile | 6 ++---- client-report/Dockerfile | 6 ++---- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/client-admin/Dockerfile b/client-admin/Dockerfile index 07663b711e..e8df55127a 100644 --- a/client-admin/Dockerfile +++ b/client-admin/Dockerfile @@ -1,6 +1,4 @@ # Gulp v3 stops us from upgrading beyond Node v11 -FROM polis_config AS config - FROM node:11.15.0-alpine WORKDIR /app @@ -10,8 +8,8 @@ RUN apk add git --no-cache COPY package*.json ./ RUN npm install -COPY --from=config /config/config.js /app/config/ -COPY --from=config /config/*.yaml /app/config/ +COPY --from=polis_config /config/config.js /app/config/ +COPY --from=polis_config /config/*.yaml /app/config/ COPY . . diff --git a/client-participation/Dockerfile b/client-participation/Dockerfile index 139bf98838..979a02e1f5 100644 --- a/client-participation/Dockerfile +++ b/client-participation/Dockerfile @@ -1,6 +1,4 @@ # Gulp v3 stops us from upgrading beyond Node v11 -FROM polis_config AS config - FROM node:11.15.0-alpine WORKDIR /app @@ -21,8 +19,8 @@ RUN npm ci RUN apk del .build -COPY --from=config /config/config.js /app/config/ -COPY --from=config /config/*.yaml /app/config/ +COPY --from=polis_config /config/config.js /app/config/ +COPY --from=polis_config /config/*.yaml /app/config/ COPY . . diff --git a/client-report/Dockerfile b/client-report/Dockerfile index b73f5bd50f..3e7b107e64 100644 --- a/client-report/Dockerfile +++ b/client-report/Dockerfile @@ -1,6 +1,4 @@ # Gulp v3 stops us from upgrading beyond Node v11 -FROM polis_config AS config - FROM node:11.15.0-alpine WORKDIR /app @@ -10,8 +8,8 @@ RUN apk add git --no-cache COPY package*.json ./ RUN npm ci -COPY --from=config /config/config.js /app/config/ -COPY --from=config /config/*.yaml /app/config/ +COPY --from=polis_config /config/config.js /app/config/ +COPY --from=polis_config /config/*.yaml /app/config/ COPY . . From 5e28de850b16634a5e017b3970822fa378e0b879 Mon Sep 17 00:00:00 2001 From: Chris Krenn Date: Wed, 26 Jan 2022 12:58:22 +0000 Subject: [PATCH 36/49] added manual dispatch --- .github/workflows/bundlewatch.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/bundlewatch.yml b/.github/workflows/bundlewatch.yml index 6c6eb7775f..928f81c70f 100644 --- a/.github/workflows/bundlewatch.yml +++ b/.github/workflows/bundlewatch.yml @@ -1,6 +1,7 @@ name: "Bundlewatch Github Action" on: + workflow_dispatch: push: # Required so that baseline for comparison is pushed to bundlewatch service. branches: ["dev"] From 7e6122f5172b1b403ea0b5f72670bd18800b1ec4 Mon Sep 17 00:00:00 2001 From: Chris Krenn Date: Wed, 26 Jan 2022 13:01:45 +0000 Subject: [PATCH 37/49] added more workflow_dispatch options --- .github/workflows/cypress-tests.yml | 1 + .github/workflows/depcheck.yml | 1 + .github/workflows/deploy-preprod.yml | 1 + .github/workflows/lint.yml | 1 + .github/workflows/release-docker-images.yml | 1 + .github/workflows/test-clojure.yml | 1 + 6 files changed, 6 insertions(+) diff --git a/.github/workflows/cypress-tests.yml b/.github/workflows/cypress-tests.yml index 8993b703d2..aeaeae1790 100644 --- a/.github/workflows/cypress-tests.yml +++ b/.github/workflows/cypress-tests.yml @@ -2,6 +2,7 @@ name: E2E Tests on: + workflow_dispatch: push: branches: - dev diff --git a/.github/workflows/depcheck.yml b/.github/workflows/depcheck.yml index c78e0539a2..db88e16662 100644 --- a/.github/workflows/depcheck.yml +++ b/.github/workflows/depcheck.yml @@ -1,5 +1,6 @@ name: DepCheck on: + workflow_dispatch: pull_request: types: ["opened", "reopened", "synchronize"] paths: diff --git a/.github/workflows/deploy-preprod.yml b/.github/workflows/deploy-preprod.yml index 6260ff0442..b5dddec4c8 100644 --- a/.github/workflows/deploy-preprod.yml +++ b/.github/workflows/deploy-preprod.yml @@ -1,4 +1,5 @@ on: + workflow_dispatch: push: branches: - dev diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 83ea3471e8..6fcc784d5b 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,6 +1,7 @@ name: Lint on: + workflow_dispatch: pull_request: types: ["opened", "reopened", "synchronize"] diff --git a/.github/workflows/release-docker-images.yml b/.github/workflows/release-docker-images.yml index 1823c91614..00b9ae8bbc 100644 --- a/.github/workflows/release-docker-images.yml +++ b/.github/workflows/release-docker-images.yml @@ -2,6 +2,7 @@ name: Docker image builds on: + workflow_dispatch: push: branches: - main diff --git a/.github/workflows/test-clojure.yml b/.github/workflows/test-clojure.yml index a7bda1660b..14885b2315 100644 --- a/.github/workflows/test-clojure.yml +++ b/.github/workflows/test-clojure.yml @@ -1,6 +1,7 @@ name: Test Math on: + workflow_dispatch: push: branches: ["dev", "504-clj-tests"] # Note: Only configured for client-admin right now. From bbb33fef4404b52f08c88408f5a6c3a88af4d0ba Mon Sep 17 00:00:00 2001 From: Chris Krenn Date: Wed, 26 Jan 2022 13:10:24 +0000 Subject: [PATCH 38/49] added build:webpack to client-participation/package.json --- client-participation/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/client-participation/package.json b/client-participation/package.json index 6418b19a7a..1f27831e08 100644 --- a/client-participation/package.json +++ b/client-participation/package.json @@ -6,6 +6,7 @@ "scripts": { "start": "gulp", "build:prod": "gulp prodBuildNoDeploy", + "build:webpack": "npm run clean && NODE_ENV=production webpack --config webpack.config.js", "deploy:preprod": "gulp deployPreprod", "deploy:prod": "POLIS_ROOT=/app/ gulp deploy_TO_PRODUCTION", "deploy:preprod:unminified": "gulp deployPreprodUnminified" From f872bd3977c3d3f10eee6e8701cef2b42dda5f44 Mon Sep 17 00:00:00 2001 From: Chris Krenn Date: Wed, 26 Jan 2022 13:14:10 +0000 Subject: [PATCH 39/49] added npm run clean --- client-participation/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/client-participation/package.json b/client-participation/package.json index 1f27831e08..7727eef6ba 100644 --- a/client-participation/package.json +++ b/client-participation/package.json @@ -4,6 +4,7 @@ "version": "0.0.0", "license": "AGPL-3.0", "scripts": { + "clean": "rimraf dist", "start": "gulp", "build:prod": "gulp prodBuildNoDeploy", "build:webpack": "npm run clean && NODE_ENV=production webpack --config webpack.config.js", From ab5c2e300a8d82852a6470405f0c555cfb3f523f Mon Sep 17 00:00:00 2001 From: Chris Krenn Date: Wed, 26 Jan 2022 13:34:08 +0000 Subject: [PATCH 40/49] reverted back to develop build for client-participation --- .github/workflows/bundlewatch.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/bundlewatch.yml b/.github/workflows/bundlewatch.yml index 928f81c70f..969e437518 100644 --- a/.github/workflows/bundlewatch.yml +++ b/.github/workflows/bundlewatch.yml @@ -50,19 +50,19 @@ jobs: npm install npm run build:webpack + # - name: "Install & Build: client-participation" + # working-directory: client-participation + # run: | + # npm install + # npm run build:webpack + - name: "Install & Build: client-participation" working-directory: client-participation run: | npm install - npm run build:webpack - -# - name: "Install & Build: client-participation" -# working-directory: client-participation -# run: | -# npm install -# npm run deploy:prod -# # So directory stays consistent between builds for comparison. -# mv dist/cached/* dist/cached/xxxxxxxxx + npm run deploy:prod + # So directory stays consistent between builds for comparison. + mv dist/cached/* dist/cached/xxxxxxxxx - name: Install Bundlewatch run: npm install -g bundlewatch@0.2.6 From 3ae9c5e7a38d65238661ee13c8e38aa476c734a6 Mon Sep 17 00:00:00 2001 From: Chris Krenn Date: Wed, 26 Jan 2022 13:47:23 +0000 Subject: [PATCH 41/49] reverted back to webpack bundlewatch build for client-participation --- .github/workflows/bundlewatch.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/bundlewatch.yml b/.github/workflows/bundlewatch.yml index 969e437518..c216c8b709 100644 --- a/.github/workflows/bundlewatch.yml +++ b/.github/workflows/bundlewatch.yml @@ -50,19 +50,19 @@ jobs: npm install npm run build:webpack - # - name: "Install & Build: client-participation" - # working-directory: client-participation - # run: | - # npm install - # npm run build:webpack - - name: "Install & Build: client-participation" working-directory: client-participation run: | npm install - npm run deploy:prod - # So directory stays consistent between builds for comparison. - mv dist/cached/* dist/cached/xxxxxxxxx + npm run build:webpack + + # - name: "Install & Build: client-participation" + # working-directory: client-participation + # run: | + # npm install + # npm run deploy:prod + # # So directory stays consistent between builds for comparison. + # mv dist/cached/* dist/cached/xxxxxxxxx - name: Install Bundlewatch run: npm install -g bundlewatch@0.2.6 From ac32467b896332433cde4f068db393896ebb99e7 Mon Sep 17 00:00:00 2001 From: Chris Krenn Date: Wed, 26 Jan 2022 13:58:46 +0000 Subject: [PATCH 42/49] updating client-participation webpack --- client-participation/webpack.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client-participation/webpack.config.js b/client-participation/webpack.config.js index 8b5f3f65b2..10d3f02b1d 100644 --- a/client-participation/webpack.config.js +++ b/client-participation/webpack.config.js @@ -7,9 +7,9 @@ module.exports = { "./vis2/vis2" ], output: { - path: path.join(__dirname, "dist_foo"), + path: path.join(__dirname, "dist"), filename: "vis_bundle.js", - publicPath: "SET_THIS_FROM_GULP" + publicPath: "/dist/", }, mode: 'production', optimization: { From 6351125991e75bef80e3acdaeac46a95c722608f Mon Sep 17 00:00:00 2001 From: crkrenn Date: Wed, 26 Jan 2022 06:04:44 -0800 Subject: [PATCH 43/49] merged features from client-admin webpack --- client-participation/webpack.config.js | 27 +++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/client-participation/webpack.config.js b/client-participation/webpack.config.js index 10d3f02b1d..efe208970e 100644 --- a/client-participation/webpack.config.js +++ b/client-participation/webpack.config.js @@ -1,8 +1,11 @@ +// Copyright (C) 2012-present, The Authors. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License, version 3, as published by the Free Software Foundation. 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 Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . + var path = require("path"); var webpack = require("webpack"); +var CompressionPlugin = require('compression-webpack-plugin') +var LodashModuleReplacementPlugin = require('lodash-webpack-plugin'); module.exports = { - // devtool: "source-map", entry: [ "./vis2/vis2" ], @@ -11,6 +14,28 @@ module.exports = { filename: "vis_bundle.js", publicPath: "/dist/", }, + resolve: { + extensions: [".js", ".css", ".png", ".svg"], + }, + plugins: [ + new LodashModuleReplacementPlugin({ + "currying": true, + "flattening": true, + "paths": true, + "placeholders": true, + "shorthands": true + }), + new CompressionPlugin({ + test: /\.js$/, + // Leave unmodified without gz ext. + // See: https://webpack.js.org/plugins/compression-webpack-plugin/#options + filename: '[path][base]', + deleteOriginalAssets: true, + }), + new webpack.DefinePlugin({ + "process.env.NODE_ENV": JSON.stringify("production"), + }), + ], mode: 'production', optimization: { minimize: true, From 6f8293d394a6c0216326bc1c453651d33c6d2414 Mon Sep 17 00:00:00 2001 From: crkrenn Date: Wed, 26 Jan 2022 06:11:19 -0800 Subject: [PATCH 44/49] added compression and lodash module plugins --- client-participation/package.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client-participation/package.json b/client-participation/package.json index 7727eef6ba..3a8fc9d055 100644 --- a/client-participation/package.json +++ b/client-participation/package.json @@ -19,6 +19,7 @@ "bootstrap-sass": "^3.4.1", "brain": "~0.6.3", "combine-css": "0.0.2", + "compression-webpack-plugin": "^7.1.2", "convict": "6.0.0", "d3": "^3.5.17", "d3-force": "^1.2.1", @@ -39,6 +40,7 @@ "jquery": "~1.11", "js-yaml": "3.14.0", "lodash": "4.17.21", + "lodash-webpack-plugin": "^0.11.6", "map-stream": "~0.1.0", "markdown": "^0.5.0", "prop-types": "^15.7.2", From 8ea15243c8bd0a77a5f2007f531e978b55178c96 Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Wed, 26 Jan 2022 17:37:27 +0100 Subject: [PATCH 45/49] Updated .bundlewatch.config.js --- .bundlewatch.config.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.bundlewatch.config.js b/.bundlewatch.config.js index 62be5bb911..735f2fb3b9 100644 --- a/.bundlewatch.config.js +++ b/.bundlewatch.config.js @@ -14,11 +14,7 @@ module.exports = { "maxSize": "180 kB", }, { - "path": "client-participation/dist/cached/*/js/polis.js", - "maxSize": "150 kB", - }, - { - "path": "client-participation/dist/cached/*/js/vis_bundle.js", + "path": "client-participation/dist/*.js", "maxSize": "200 kB", }, ] From dbe34e3bc4dc19fd77a613a87a278ed1b642492c Mon Sep 17 00:00:00 2001 From: Tamas Soos Date: Thu, 27 Jan 2022 21:31:32 +0100 Subject: [PATCH 46/49] Changed package-lock.json --- client-participation/package-lock.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/client-participation/package-lock.json b/client-participation/package-lock.json index 9e5bf75fff..aa0c542ff5 100644 --- a/client-participation/package-lock.json +++ b/client-participation/package-lock.json @@ -2243,6 +2243,15 @@ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, + "compression-webpack-plugin": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-7.1.2.tgz", + "integrity": "sha512-9DKNW6ILLjx+bNBoviHDgLx6swBhWWH9ApClC9sTH2NoFfQM47BapQfovCm9zjD9v1uZwInF5a925FB9ErGQeQ==", + "requires": { + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1" + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -7223,6 +7232,14 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "lodash-webpack-plugin": { + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/lodash-webpack-plugin/-/lodash-webpack-plugin-0.11.6.tgz", + "integrity": "sha512-nsHN/+IxZK/C425vGC8pAxkKJ8KQH2+NJnhDul14zYNWr6HJcA95w+oRR7Cp0oZpOdMplDZXmjVROp8prPk7ig==", + "requires": { + "lodash": "^4.17.20" + } + }, "lodash._arraypool": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash._arraypool/-/lodash._arraypool-2.4.1.tgz", From 40423921489a8140e7cb519115c2487a0e627be0 Mon Sep 17 00:00:00 2001 From: crkrenn Date: Fri, 28 Jan 2022 09:07:42 -0800 Subject: [PATCH 47/49] removed headless cypress option --- e2e/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/e2e/package.json b/e2e/package.json index 0f5df93820..2dbdd90524 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -8,7 +8,6 @@ "lint": "eslint .", "lint:fix": "eslint --fix .", "test": "npm run e2e:all", - "e2e:headless": "cypress run --spec 'cypress/integration/polis/**'", "e2e:all": "cypress run --spec 'cypress/integration/polis/**' --browser=chrome", "e2e:minimal": "cypress run --spec '**/kitchensink.spec.js' --browser=chrome", "e2e:standalone": "cypress run --spec '**/polis/**/!(*.secrets).spec.js' --browser=chrome", From 88fcb65ca2e0e563d1df11980469c05ebd228eff Mon Sep 17 00:00:00 2001 From: crkrenn Date: Fri, 28 Jan 2022 22:55:56 -0800 Subject: [PATCH 48/49] added python notebook and script to analyze env variables --- ...nv_all.yaml => env_all_to_be_deleted.yaml} | 0 config/merge_config_yaml_files.ipynb | 461 ++++++++++++++++ config/merge_config_yaml_files.py | 127 +++++ config/schema.yaml | 506 +++++++++--------- 4 files changed, 834 insertions(+), 260 deletions(-) rename config/{env_all.yaml => env_all_to_be_deleted.yaml} (100%) create mode 100644 config/merge_config_yaml_files.ipynb create mode 100644 config/merge_config_yaml_files.py diff --git a/config/env_all.yaml b/config/env_all_to_be_deleted.yaml similarity index 100% rename from config/env_all.yaml rename to config/env_all_to_be_deleted.yaml diff --git a/config/merge_config_yaml_files.ipynb b/config/merge_config_yaml_files.ipynb new file mode 100644 index 0000000000..b690afea31 --- /dev/null +++ b/config/merge_config_yaml_files.ipynb @@ -0,0 +1,461 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 38, + "id": "26416144", + "metadata": {}, + "outputs": [], + "source": [ + "import yaml\n", + "\n", + "import subprocess\n", + "from collections import defaultdict, OrderedDict\n", + "\n", + "\n", + "def parse_preserving_duplicates(src):\n", + " # We deliberately define a fresh class inside the function,\n", + " # because add_constructor is a class method and we don't want to\n", + " # mutate pyyaml classes.\n", + " class PreserveDuplicatesLoader(yaml.loader.Loader):\n", + " pass\n", + "\n", + " def map_constructor(loader, node, deep=False):\n", + " \"\"\"Walk the mapping, recording any duplicate keys.\n", + "\n", + " \"\"\"\n", + " mapping = defaultdict(list)\n", + " for key_node, value_node in node.value:\n", + " key = loader.construct_object(key_node, deep=deep)\n", + " value = loader.construct_object(value_node, deep=deep)\n", + "\n", + " mapping[key].append(value)\n", + "\n", + " return mapping\n", + "\n", + " PreserveDuplicatesLoader.add_constructor(yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, map_constructor)\n", + " return yaml.load(src, PreserveDuplicatesLoader)" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "d642dcfc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "finding duplicate keys in schema.yaml\n", + "number of keys: 68\n", + "no duplicates found\n", + "\n", + "For comparison with the next file:\n", + "key: webserver_pass\n", + " value: 8a7157439f50\n", + "key: admin_emails\n", + " value: []\n", + "key: admin_uids\n", + " value: []\n", + "\n", + "finding duplicate keys in env_all.yaml\n", + "key: webserver_pass\n", + " set of values: {'ws-pass', 'ws-passPOSTGRES_DB=polis-dev'}\n", + "key: admin_emails\n", + " unhashable value: {key_dict['default'][0]}\n", + "key: admin_emails\n", + " unhashable value: {key_dict['default'][0]}\n", + "key: admin_uids\n", + " unhashable value: {key_dict['default'][0]}\n", + "key: admin_uids\n", + " unhashable value: {key_dict['default'][0]}\n", + "number of keys: 26\n", + "\n", + "schema key: 00documentation\n", + "schema key: admin_email_data_export\n", + " schema value: \n", + " grep result:ADMIN_EMAIL_DATA_EXPORT=\"\"\n", + " grep result:\n", + "schema key: admin_email_data_export_test\n", + " schema value: \n", + " grep result:ADMIN_EMAIL_DATA_EXPORT_TEST=\"\"\n", + " grep result:\n", + "schema key: admin_email_email_test\n", + " schema value: \n", + " grep result:ADMIN_EMAIL_EMAIL_TEST=\"\"\n", + " grep result:\n", + "schema key: admin_emails\n", + " schema value: []\n", + " grep result:ADMIN_EMAILS=[]\n", + " grep result:\n", + "schema key: admin_uids\n", + " schema value: []\n", + " grep result:ADMIN_UIDS=[]\n", + " grep result:\n", + "schema key: akismet_antispam_api_key\n", + "schema key: akismet_root_url\n", + "schema key: aws_access_key_id\n", + "schema key: aws_region\n", + " schema value: us-east-1\n", + " grep result:AWS_REGION=us-east-1\n", + " grep result:\n", + "schema key: aws_s3_api_version\n", + "schema key: aws_secret_access_key\n", + "schema key: aws_ses_api_version\n", + "schema key: backfill_comment_lang_detection\n", + "schema key: cache_math_results\n", + "schema key: client_participation_port\n", + "schema key: database_for_reads_url\n", + "schema key: database_url\n", + " schema value: postgres://postgres:oiPorg3Nrz0yqDLE@postgres:5432/polis-dev\n", + " grep result:DATABASE_URL=postgres\n", + " grep result: export DATABASE_URL=postgres\n", + " grep result:export DATABASE_URL=postgres\n", + " grep result:DATABASE_URL=postgres\n", + " grep result:\n", + "schema key: dev_mode\n", + " schema value: True\n", + " grep result:DEV_MODE=true\n", + " grep result: issues, you'll want to run with `export DEV_MODE=true`.\n", + " grep result:export DEV_MODE=true\n", + " grep result:\n", + "schema key: disable_intercom\n", + " schema value: True\n", + " grep result:DISABLE_INTERCOM=true\n", + " grep result:export DISABLE_INTERCOM=true\n", + " grep result: DISABLE_INTERCOM\n", + " grep result: DISABLE_INTERCOM\n", + " grep result:\n", + "schema key: disable_plans\n", + " schema value: True\n", + " grep result: DISABLE_PLANS\n", + " grep result:\n", + "schema key: domainWhitelist\n", + "schema key: domain_override\n", + " schema value: \n", + " grep result:DOMAIN_OVERRIDE=localhost\n", + " grep result:export DOMAIN_OVERRIDE=localhost\n", + " grep result:export DOMAIN_OVERRIDE=localhost\n", + " grep result:\n", + "schema key: domain_whitelist_item_01\n", + "schema key: domain_whitelist_item_02\n", + "schema key: domain_whitelist_item_03\n", + "schema key: domain_whitelist_item_04\n", + "schema key: domain_whitelist_item_05\n", + "schema key: domain_whitelist_item_06\n", + "schema key: domain_whitelist_item_07\n", + "schema key: domain_whitelist_item_08\n", + "schema key: email_transport_types\n", + " schema value: maildev\n", + " grep result:EMAIL_TRANSPORT_TYPES=maildev\n", + " grep result: echo EMAIL_TRANSPORT_TYPES=mailgun,aws-ses,nonexistent,maildev >> server/docker-dev.env\n", + " grep result:\n", + "schema key: encryption_password_00001\n", + "schema key: env\n", + " schema value: development\n", + " grep result: \"build\n", + " grep result: \"build\n", + " grep result: \"build\n", + " grep result:# export NODE_ENV=production\n", + " grep result:# export NODE_ENV=development\n", + " grep result: NODE_ENV\n", + " grep result:\n", + "schema key: fb_app_id\n", + " schema value: 661042417336977\n", + " grep result: FB_APP_ID\n", + " grep result: FB_APP_ID\n", + " grep result:\n", + "schema key: google_api_key\n", + "schema key: google_creds_stringified\n", + " schema value: X\n", + " grep result:# GOOGLE_CREDS_STRINGIFIED=xxxxxxxxxxxxxxxxxxxxxxx...\n", + " grep result:heroku config\n", + " grep result:heroku config\n", + " grep result:\n", + "schema key: intercom_access_token\n", + "schema key: local_output_path\n", + " schema value: ./build\n", + " grep result: LOCAL_OUTPUT_PATH\n", + " grep result: LOCAL_OUTPUT_PATH\n", + " grep result: LOCAL_OUTPUT_PATH\n", + " grep result:\n", + "schema key: mailgun_api_key\n", + "schema key: math_env\n", + " schema value: dev\n", + " grep result:MATH_ENV=dev\n", + " grep result:echo \"export MATH_ENV=prod\"\n", + " grep result:\n", + "schema key: maxmind_licensekey\n", + "schema key: maxmind_userid\n", + "schema key: polis_from_address\n", + " schema value: \n", + " grep result:POLIS_FROM_ADDRESS=\"Example \"\n", + " grep result:\n", + "schema key: polis_slack_app_client_id\n", + "schema key: polis_slack_app_client_secret\n", + "schema key: port\n", + " schema value: 5000\n", + " grep result:ADMIN_EMAIL_DATA_EXPORT=\"\"\n", + " grep result:PORT=5000\n", + " grep result:STATIC_FILES_ADMINDASH_PORT=8080\n", + " grep result:STATIC_FILES_PORT=8080\n", + " grep result:export STATIC_FILES_PORT=5001\n", + " grep result:export STATIC_FILES_ADMINDASH_PORT=5002\n", + " grep result:export PORT=5000\n", + " grep result:export STATIC_FILES_PORT=5001\n", + " grep result:export STATIC_FILES_ADMINDASH_PORT=5002\n", + " grep result:export PORT=5000\n", + " grep result: PORT\n", + " grep result:\n", + "schema key: primary_polis_url\n", + "schema key: run_periodic_export_tests\n", + "schema key: s3_bucket_preprod\n", + " schema value: preprod.pol.is\n", + " grep result: S3_BUCKET_PREPROD\n", + " grep result: S3_BUCKET_PREPROD\n", + " grep result: S3_BUCKET_PREPROD\n", + " grep result:\n", + "schema key: s3_bucket_prod\n", + " schema value: pol.is\n", + " grep result: S3_BUCKET_PROD\n", + " grep result: S3_BUCKET_PROD\n", + " grep result: S3_BUCKET_PROD\n", + " grep result:\n", + "schema key: scp_subdir_preprod\n", + " schema value: preprod\n", + " grep result: SCP_SUBDIR_PREPROD\n", + " grep result: SCP_SUBDIR_PREPROD\n", + " grep result: SCP_SUBDIR_PREPROD\n", + " grep result:\n", + "schema key: scp_subdir_prod\n", + " schema value: prod\n", + " grep result: SCP_SUBDIR_PROD\n", + " grep result: SCP_SUBDIR_PROD\n", + " grep result: SCP_SUBDIR_PROD\n", + " grep result:\n", + "schema key: service_hostname\n", + " schema value: undefined\n", + " grep result: //SERVICE_HOSTNAME\n", + " grep result: SERVICE_HOSTNAME\n", + " grep result:\n", + "schema key: service_url\n", + " schema value: http://localhost:5000\n", + " grep result: //SERVICE_URL\n", + " grep result: SERVICE_URL\n", + " grep result:console.log(\"SERVICE_URL\n", + " grep result:This shell script file should contain a line like `export SERVICE_URL=https\n", + " grep result:#export SERVICE_URL=https\n", + " grep result:export SERVICE_URL=http\n", + " grep result:#export SERVICE_URL=https\n", + " grep result:export SERVICE_URL=http\n", + " grep result: //SERVICE_URL\n", + " grep result: SERVICE_URL\n", + " grep result:console.log(\"SERVICE_URL\n", + " grep result: //SERVICE_URL\n", + " grep result: SERVICE_URL\n", + " grep result:\n", + "schema key: should_use_translation_api\n", + " schema value: False\n", + " grep result:SHOULD_USE_TRANSLATION_API=false\n", + " grep result:1. Configure `SHOULD_USE_TRANSLATION_API=true` within `server/docker-dev.env`\n", + " grep result: echo SHOULD_USE_TRANSLATION_API=true >> server/docker-dev.env\n", + " grep result:\n", + "schema key: slack_api_token\n", + "schema key: static_files_admindash_port\n", + " schema value: 8080\n", + " grep result:STATIC_FILES_ADMINDASH_PORT=8080\n", + " grep result:export STATIC_FILES_ADMINDASH_PORT=5002\n", + " grep result:export STATIC_FILES_ADMINDASH_PORT=5002\n", + " grep result:\n", + "schema key: static_files_host\n", + " schema value: file-server\n", + " grep result:STATIC_FILES_HOST=file-server\n", + " grep result:export STATIC_FILES_HOST=localhost\n", + " grep result:export STATIC_FILES_HOST=localhost\n", + " grep result:\n", + "schema key: static_files_port\n", + " schema value: 8080\n", + " grep result:STATIC_FILES_PORT=8080\n", + " grep result:export STATIC_FILES_PORT=5001\n", + " grep result:export STATIC_FILES_PORT=5001\n", + " grep result:\n", + "schema key: static_files_report_port\n", + "schema key: stripe_client_id\n", + "schema key: stripe_secret_key\n", + " schema value: sk_test_NFBDEThkpHCYBzXPJuBlY8TW\n", + " grep result:STRIPE_SECRET_KEY=sk_test_NFBDEThkpHCYBzXPJuBlY8TW\n", + " grep result:export STRIPE_SECRET_KEY=sk_test_NFBDEThkpHCYBzXPJuBlY8TW\n", + " grep result:\n", + "schema key: twitter_consumer_key\n", + "schema key: twitter_consumer_secret\n", + "schema key: uploader\n", + " schema value: local\n", + " grep result: UPLOADER\n", + " grep result: UPLOADER\n", + " grep result: UPLOADER\n", + " grep result:\n", + "schema key: webserver_pass\n", + " schema value: 8a7157439f50\n", + " grep result:WEBSERVER_PASS=ws-pass\n", + " grep result:WEBSERVER_PASS=ws-pass\n", + " grep result:\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "schema key: webserver_username\n", + " schema value: f4c19337e502\n", + " grep result:WEBSERVER_USERNAME=ws-user\n", + " grep result:WEBSERVER_USERNAME=ws-user\n", + " grep result:\n" + ] + } + ], + "source": [ + "file = \"schema.yaml\"\n", + "with open(file) as src:\n", + " data = parse_preserving_duplicates(src)\n", + "print(f\"finding duplicate keys in {file}\")\n", + "count = 0\n", + "for key in data.keys():\n", + " if len(data[key]) > 1: \n", + " count += 1\n", + " print(f\"key: {key}\")\n", + " print(f\"value:\\n{data[key]}\")\n", + "print(f\"number of keys: {len(data)}\")\n", + "if count == 0:\n", + " print(\"no duplicates found\")\n", + " \n", + "print(\"\\nFor comparison with the next file:\")\n", + "keys = [\n", + " 'webserver_pass',\n", + " 'admin_emails',\n", + " 'admin_uids']\n", + "for key in keys:\n", + " print(f\"key: {key}\")\n", + " print(f\" value: {data[key][0]['default'][0]}\")\n", + "print()\n", + "with open(file) as src:\n", + " data = yaml.safe_load(src)\n", + "\n", + "file = \"env_all_to_be_deleted.yaml\"\n", + "with open(file) as src:\n", + " data = parse_preserving_duplicates(src)\n", + "print(f\"finding duplicate keys in {file}\")\n", + "for key in data.keys():\n", + " if len(data[key]) > 1: \n", + " value_set = set()\n", + " for key_dict in data[key]:\n", + " try:\n", + " value_set.add(key_dict['default'][0])\n", + " except TypeError:\n", + " print(f\"key: {key}\")\n", + " print(\" unhashable value: {key_dict['default'][0]}\")\n", + " if len(value_set) > 1:\n", + " print(f\"key: {key}\")\n", + " print(f\" set of values: {value_set}\")\n", + "print(f\"number of keys: {len(data)}\")\n", + "\n", + "file = \"schema.yaml\"\n", + "sorted_file = \"schema_sorted.yaml\"\n", + "with open(file) as src:\n", + " data = yaml.safe_load(src)\n", + "sorted_data = {}\n", + "for key in sorted(data.keys()):\n", + " sorted_data[key] = data[key]\n", + "with open(sorted_file, \"w\") as dest:\n", + " yaml.dump(sorted_data, dest)\n", + "\n", + "print()\n", + "polis_path = \"/Users/crkrenn/code/polis_dir/polis\" \n", + "for key in list(sorted(data.keys())):\n", + " result = subprocess.run(\n", + " [\"grep\", \"-R\", \n", + " \"-e\", data[key]['env']+':', \n", + " \"-e\", data[key]['env']+'=', \n", + " polis_path],\n", + " capture_output=True)\n", + " print(f\"schema key: {key}\")\n", + " if not result.returncode:\n", + " print(f\" schema value: {data[key]['default']}\")\n", + " result_stdout = result.stdout.decode(\"utf-8\")\n", + " result_stdout_list = result_stdout.split('\\n')\n", + " for result_stdout in result_stdout_list:\n", + " try:\n", + " result_stdout = result_stdout.split(':')[1]\n", + " except IndexError:\n", + " pass\n", + " print( \" grep result:\" + result_stdout)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "b9bd9442", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[defaultdict(list,\n", + " {'doc': ['webserver_pass'],\n", + " 'default': ['ws-passPOSTGRES_DB=polis-dev'],\n", + " 'env': ['WEBSERVER_PASS']}),\n", + " defaultdict(list,\n", + " {'doc': ['webserver_pass'],\n", + " 'default': ['ws-pass'],\n", + " 'env': ['WEBSERVER_PASS']}),\n", + " defaultdict(list,\n", + " {'doc': ['webserver_pass'],\n", + " 'default': ['ws-passPOSTGRES_DB=polis-dev'],\n", + " 'env': ['WEBSERVER_PASS']}),\n", + " defaultdict(list,\n", + " {'doc': ['webserver_pass'],\n", + " 'default': ['ws-pass'],\n", + " 'env': ['WEBSERVER_PASS']})]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data['webserver_pass']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6aba1ae1", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/config/merge_config_yaml_files.py b/config/merge_config_yaml_files.py new file mode 100644 index 0000000000..26b294357e --- /dev/null +++ b/config/merge_config_yaml_files.py @@ -0,0 +1,127 @@ +# --- +# jupyter: +# jupytext: +# text_representation: +# extension: .py +# format_name: light +# format_version: '1.5' +# jupytext_version: 1.13.6 +# kernelspec: +# display_name: Python 3 +# language: python +# name: python3 +# --- + +# + +import yaml + +import subprocess +from collections import defaultdict, OrderedDict + + +def parse_preserving_duplicates(src): + # We deliberately define a fresh class inside the function, + # because add_constructor is a class method and we don't want to + # mutate pyyaml classes. + class PreserveDuplicatesLoader(yaml.loader.Loader): + pass + + def map_constructor(loader, node, deep=False): + """Walk the mapping, recording any duplicate keys. + + """ + mapping = defaultdict(list) + for key_node, value_node in node.value: + key = loader.construct_object(key_node, deep=deep) + value = loader.construct_object(value_node, deep=deep) + + mapping[key].append(value) + + return mapping + + PreserveDuplicatesLoader.add_constructor(yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, map_constructor) + return yaml.load(src, PreserveDuplicatesLoader) + + +# + +file = "schema.yaml" +with open(file) as src: + data = parse_preserving_duplicates(src) +print(f"finding duplicate keys in {file}") +count = 0 +for key in data.keys(): + if len(data[key]) > 1: + count += 1 + print(f"key: {key}") + print(f"value:\n{data[key]}") +print(f"number of keys: {len(data)}") +if count == 0: + print("no duplicates found") + +print("\nFor comparison with the next file:") +keys = [ + 'webserver_pass', + 'admin_emails', + 'admin_uids'] +for key in keys: + print(f"key: {key}") + print(f" value: {data[key][0]['default'][0]}") +print() +with open(file) as src: + data = yaml.safe_load(src) + +file = "env_all_to_be_deleted.yaml" +with open(file) as src: + data = parse_preserving_duplicates(src) +print(f"finding duplicate keys in {file}") +for key in data.keys(): + if len(data[key]) > 1: + value_set = set() + for key_dict in data[key]: + try: + value_set.add(key_dict['default'][0]) + except TypeError: + print(f"key: {key}") + print(" unhashable value: {key_dict['default'][0]}") + if len(value_set) > 1: + print(f"key: {key}") + print(f" set of values: {value_set}") +print(f"number of keys: {len(data)}") + +file = "schema.yaml" +sorted_file = "schema_sorted.yaml" +with open(file) as src: + data = yaml.safe_load(src) +sorted_data = {} +for key in sorted(data.keys()): + sorted_data[key] = data[key] +with open(sorted_file, "w") as dest: + yaml.dump(sorted_data, dest) + +print() +polis_path = "/Users/crkrenn/code/polis_dir/polis" +for key in list(sorted(data.keys())): + result = subprocess.run( + ["grep", "-R", + "-e", data[key]['env']+':', + "-e", data[key]['env']+'=', + polis_path], + capture_output=True) + print(f"schema key: {key}") + if not result.returncode: + print(f" schema value: {data[key]['default']}") + result_stdout = result.stdout.decode("utf-8") + result_stdout_list = result_stdout.split('\n') + for result_stdout in result_stdout_list: + try: + result_stdout = result_stdout.split(':')[1] + except IndexError: + pass + print( " grep result:" + result_stdout) + + +# - + +data['webserver_pass'] + + diff --git a/config/schema.yaml b/config/schema.yaml index b291be21e8..987485c0db 100644 --- a/config/schema.yaml +++ b/config/schema.yaml @@ -1,327 +1,313 @@ -# Precedence order (https://www.npmjs.com/package/convict) -# When merging configuration values from different sources, Convict follows precedence rules. The order, from lowest to highest, for config.loadFile(file) and config.load(json) is: - -# Default value -# File or json set in function argument -# Environment variables (only used when env property is set in schema) -# Command line arguments (only used when arg property is set in schema) - -# for easy json/yaml conversion: https://www.json2yaml.com/ - -# NOTE: Please be careful when chosing defaults for undefined -# environment variables. "undefined" is recommended - -# @TODO: update all formats (https://www.npmjs.com/package/convict) - -# The defaults for all variables below are currently for development builds. - -env: - doc: The application environment - format: - - production - - development - - test - default: development - env: NODE_ENV - -# for server +00documentation: + default: + - Precedence order (https://www.npmjs.com/package/convict) + - . + - When merging configuration values from different sources, + - Convict follows precedence rules. The order, from lowest to highest, for + - config.loadFile(file) and config.load(json) is + - . + - Default value + - File or json set in function argument + - Environment variables (only used when env property is set in schema) + - Command line arguments (only used when arg property is set in schema) + - . + - For easy json/yaml conversion: https://www.json2yaml.com/ + - . + - NOTE: Please be careful when chosing defaults for undefined + - environment variables. "undefined" is recommended + - . + - The defaults for all variables below are currently for development builds. + doc: 00documentation + env: 00DOCUMENTATION +admin_email_data_export: + default: '' + doc: admin_email_data_export + env: ADMIN_EMAIL_DATA_EXPORT +admin_email_data_export_test: + default: '' + doc: admin_email_data_export_test + env: ADMIN_EMAIL_DATA_EXPORT_TEST +admin_email_email_test: + default: '' + doc: admin_email_email_test + env: ADMIN_EMAIL_EMAIL_TEST +admin_emails: + default: [] + doc: admin_emails + env: ADMIN_EMAILS +admin_uids: + default: [] + doc: admin_uids + env: ADMIN_UIDS +akismet_antispam_api_key: + default: '' + doc: akismet_antispam_api_key (ex. a1a11111aa11) + env: AKISMET_ANTISPAM_API_KEY + format: String +akismet_root_url: + default: https://pol.is + doc: akismet_root_url + env: AKISMET_ROOT_URL aws_access_key_id: - tag: api - doc: aws_access_key_id default: undefined + doc: aws_access_key_id env: AWS_ACCESS_KEY_ID sensitive: true -aws_secret_access_key: - doc: aws_secret_access_key - default: undefined - env: AWS_SECRET_ACCESS_KEY - sensitive: true + tag: api aws_region: - doc: aws_region default: us-east-1 + doc: aws_region env: AWS_REGION -dev_mode: - doc: dev_mode - default: true - env: DEV_MODE aws_s3_api_version: - doc: aws_s3_api_version default: 2006-03-01 + doc: aws_s3_api_version env: AWS_S3_API_VERSION -stripe_client_id: - doc: stripe_client_id +aws_secret_access_key: default: undefined - env: STRIPE_CLIENT_ID -stripe_secret_key: - doc: stripe_secret_key - default: sk_test_NFBDEThkpHCYBzXPJuBlY8TW - env: STRIPE_SECRET_KEY -database_url: - doc: database_url - default: postgres://postgres:oiPorg3Nrz0yqDLE@postgres:5432/polis-dev - env: DATABASE_URL + doc: aws_secret_access_key + env: AWS_SECRET_ACCESS_KEY + sensitive: true +aws_ses_api_version: + default: 2010-12-01 + doc: aws_s3_api_version + env: AWS_S3_API_VERSION +backfill_comment_lang_detection: + default: false + doc: backfill_comment_lang_detection + env: BACKFILL_COMMENT_LANG_DETECTION +cache_math_results: + default: false + doc: cache_math_results + env: CACHE_MATH_RESULTS +client_participation_port: + default: 5001 + doc: Note that this must match the participation client port specified in polisServer + instance + env: CLIENT_PARTICIPATION_PORT database_for_reads_url: - doc: database_for_reads_url (often is the same as database_url) default: postgres://postgres:oiPorg3Nrz0yqDLE@postgres:5432/polis-dev + doc: database_for_reads_url (often is the same as database_url) env: DATABASE_FOR_READS_URL -slack_api_token: - doc: slack_api_token - default: undefined - env: SLACK_API_TOKEN -polis_slack_app_client_id: - doc: polis_slack_app_client_id - default: X - env: POLIS_SLACK_APP_CLIENT_ID -polis_slack_app_client_secret: - doc: polis_slack_app_client_secret - default: X - env: POLIS_SLACK_APP_CLIENT_SECRET -disable_plans: - doc: disable_plans +database_url: + default: postgres://postgres:oiPorg3Nrz0yqDLE@postgres:5432/polis-dev + doc: database_url + env: DATABASE_URL +dev_mode: default: true - env: DISABLE_PLANS + doc: dev_mode + env: DEV_MODE disable_intercom: - doc: disable_intercom default: true + doc: disable_intercom env: DISABLE_INTERCOM -intercom_access_token: - doc: intercom_access_token - default: undefined - env: INTERCOM_ACCESS_TOKEN -should_use_translation_api: - doc: should_use_translation_api - default: false - env: SHOULD_USE_TRANSLATION_API -google_api_key: - doc: google_api_key - default: undefined - env: GOOGLE_API_KEY - -google_creds_stringified: - doc: google_creds_stringified - default: X - env: GOOGLE_CREDS_STRINGIFIED -admin_emails: - doc: admin_emails - default: [] - env: ADMIN_EMAILS -admin_uids: - doc: admin_uids - default: [] - env: ADMIN_UIDS -admin_email_data_export: - doc: admin_email_data_export - default: '' - env: ADMIN_EMAIL_DATA_EXPORT -admin_email_data_export_test: - doc: admin_email_data_export_test - default: '' - env: ADMIN_EMAIL_DATA_EXPORT_TEST -admin_email_email_test: - doc: admin_email_email_test - default: '' - env: ADMIN_EMAIL_EMAIL_TEST -polis_from_address: - doc: polis_from_address - default: '' - env: POLIS_FROM_ADDRESS -akismet_antispam_api_key: - doc: akismet_antispam_api_key (ex. a1a11111aa11) - format: String - default: '' - env: AKISMET_ANTISPAM_API_KEY -akismet_root_url: - doc: akismet_root_url - default: https://pol.is - env: AKISMET_ROOT_URL +disable_plans: + default: true + doc: disable_plans + env: DISABLE_PLANS +domainWhitelist: + default: + - ^localhost$ + - ^192\\.168\\.1\\.141$ + - ^192\\.168\\.1\\.140$ + - ^pol\\.is + - .+\\.pol\\.is$ + - ^xip\\.io$ + - .+\\.xip\\.io$ + doc: domainWhitelist + env: DOMAIN_WHITELIST domain_override: - doc: domain_override default: '' + doc: domain_override env: DOMAIN_OVERRIDE -encryption_password_00001: - doc: encryption_password_00001 - default: c9336642-2024-43a8-99cd-77ee38e82a9c - env: ENCRYPTION_PASSWORD_00001 -backfill_comment_lang_detection: - doc: backfill_comment_lang_detection - default: false - env: BACKFILL_COMMENT_LANG_DETECTION domain_whitelist_item_01: - doc: domain_whitelist_item_01 default: '' + doc: domain_whitelist_item_01 env: DOMAIN_WHITELIST_ITEM_01 domain_whitelist_item_02: - doc: domain_whitelist_item_02 default: '' + doc: domain_whitelist_item_02 env: DOMAIN_WHITELIST_ITEM_02 domain_whitelist_item_03: - doc: domain_whitelist_item_03 default: '' + doc: domain_whitelist_item_03 env: DOMAIN_WHITELIST_ITEM_03 domain_whitelist_item_04: - doc: domain_whitelist_item_04 default: '' + doc: domain_whitelist_item_04 env: DOMAIN_WHITELIST_ITEM_04 domain_whitelist_item_05: - doc: domain_whitelist_item_05 default: '' + doc: domain_whitelist_item_05 env: DOMAIN_WHITELIST_ITEM_05 domain_whitelist_item_06: - doc: domain_whitelist_item_06 default: '' + doc: domain_whitelist_item_06 env: DOMAIN_WHITELIST_ITEM_06 domain_whitelist_item_07: - doc: domain_whitelist_item_07 default: '' + doc: domain_whitelist_item_07 env: DOMAIN_WHITELIST_ITEM_07 domain_whitelist_item_08: - doc: domain_whitelist_item_08 default: '' + doc: domain_whitelist_item_08 env: DOMAIN_WHITELIST_ITEM_08 -cache_math_results: - doc: cache_math_results - default: false - env: CACHE_MATH_RESULTS +email_transport_types: + default: maildev + doc: + - email_transport_types - maildev, aws-ses, mailgun + - ex. `aws-ses,mailgun` would try sending via AWS SES first, and fallback to Mailgun + on error. + env: EMAIL_TRANSPORT_TYPES +encryption_password_00001: + default: c9336642-2024-43a8-99cd-77ee38e82a9c + doc: encryption_password_00001 + env: ENCRYPTION_PASSWORD_00001 +env: + default: development + doc: The application environment + env: NODE_ENV + format: + - production + - development + - test +fb_app_id: + default: 661042417336977 + doc: must register with facebook and get a facebook app id to use the facebook auth + features + env: FB_APP_ID +google_api_key: + default: undefined + doc: google_api_key + env: GOOGLE_API_KEY +google_creds_stringified: + default: X + doc: google_creds_stringified + env: GOOGLE_CREDS_STRINGIFIED +intercom_access_token: + default: undefined + doc: intercom_access_token + env: INTERCOM_ACCESS_TOKEN +local_output_path: + default: ./build + doc: Uploader settings local + env: LOCAL_OUTPUT_PATH +mailgun_api_key: + default: undefined + doc: mailgun_api_key + env: MAILGUN_API_KEY math_env: - doc: math_env default: dev + doc: math_env env: MATH_ENV -run_periodic_export_tests: - doc: run_periodic_export_tests - default: false - env: RUN_PERIODIC_EXPORT_TESTS -maxmind_userid: - doc: maxmind_userid - default: undefined - env: MAXMIND_USERID maxmind_licensekey: - doc: maxmind_licensekey default: undefined + doc: maxmind_licensekey env: MAXMIND_LICENSEKEY +maxmind_userid: + default: undefined + doc: maxmind_userid + env: MAXMIND_USERID +polis_from_address: + default: '' + doc: polis_from_address + env: POLIS_FROM_ADDRESS +polis_slack_app_client_id: + default: X + doc: polis_slack_app_client_id + env: POLIS_SLACK_APP_CLIENT_ID +polis_slack_app_client_secret: + default: X + doc: polis_slack_app_client_secret + env: POLIS_SLACK_APP_CLIENT_SECRET +port: + default: 5000 + doc: port + env: PORT primary_polis_url: - doc: primary_polis_url default: pol.is + doc: primary_polis_url env: PRIMARY_POLIS_URL -webserver_pass: - doc: webserver_pass - default: 8a7157439f50 - env: WEBSERVER_PASS -webserver_username: - doc: webserver_username - default: f4c19337e502 - env: WEBSERVER_USERNAME -twitter_consumer_key: - doc: twitter_consumer_key - default: undefined - env: TWITTER_CONSUMER_KEY -twitter_consumer_secret: - doc: twitter_consumer_secret - default: undefined - env: TWITTER_CONSUMER_SECRET +run_periodic_export_tests: + default: false + doc: run_periodic_export_tests + env: RUN_PERIODIC_EXPORT_TESTS +s3_bucket_preprod: + default: preprod.pol.is + doc: uploader settings s3 + env: S3_BUCKET_PREPROD +s3_bucket_prod: + default: pol.is + doc: uploader settings s3 + env: S3_BUCKET_PROD +scp_subdir_preprod: + default: preprod + doc: uploader settings scp + env: SCP_SUBDIR_PREPROD +scp_subdir_prod: + default: prod + doc: uploader settings scp + env: SCP_SUBDIR_PROD service_hostname: - doc: service_hostname default: undefined + doc: service_hostname env: SERVICE_HOSTNAME -static_files_port: - doc: static_files_port - default: 8080 - env: STATIC_FILES_PORT +service_url: + default: http://localhost:5000 + doc: Point to a polisServer instance (local recommended for dev) + env: SERVICE_URL +should_use_translation_api: + default: false + doc: should_use_translation_api + env: SHOULD_USE_TRANSLATION_API +slack_api_token: + default: undefined + doc: slack_api_token + env: SLACK_API_TOKEN static_files_admindash_port: - doc: static_files_admindash_port default: 8080 + doc: static_files_admindash_port env: STATIC_FILES_ADMINDASH_PORT -static_files_report_port: - doc: static_files_report_port - default: 8080 - env: STATIC_FILES_REPORT_PORT static_files_host: - doc: static_files_host default: file-server + doc: static_files_host env: STATIC_FILES_HOST - -# for sendEmailSesMailgun -mailgun_api_key: - doc: mailgun_api_key +static_files_port: + default: 8080 + doc: static_files_port + env: STATIC_FILES_PORT +static_files_report_port: + default: 8080 + doc: static_files_report_port + env: STATIC_FILES_REPORT_PORT +stripe_client_id: default: undefined - env: MAILGUN_API_KEY - -aws_ses_api_version: - doc: aws_s3_api_version - default: 2010-12-01 - env: AWS_S3_API_VERSION -# config.get('aws_ses_api_version') - -# polis.config -domainWhitelist: - doc: domainWhitelist - default: - - ^localhost$ - - ^192\\.168\\.1\\.141$ - - ^192\\.168\\.1\\.140$ - - ^pol\\.is - - .+\\.pol\\.is$ - - ^xip\\.io$ - - .+\\.xip\\.io$ - env: DOMAIN_WHITELIST - + doc: stripe_client_id + env: STRIPE_CLIENT_ID +stripe_secret_key: + default: sk_test_NFBDEThkpHCYBzXPJuBlY8TW + doc: stripe_secret_key + env: STRIPE_SECRET_KEY +twitter_consumer_key: + default: undefined + doc: twitter_consumer_key + env: TWITTER_CONSUMER_KEY +twitter_consumer_secret: + default: undefined + doc: twitter_consumer_secret + env: TWITTER_CONSUMER_SECRET uploader: - doc: uploader for compiled static javascript - format: - - local - - s3 - - scp default: local + doc: uploader for compiled static javascript env: UPLOADER - -service_url: - doc: Point to a polisServer instance (local recommended for dev) - default: http://localhost:5000 - env: SERVICE_URL - -client_participation_port: - doc: Note that this must match the participation client port specified in polisServer instance - default: 5001 - env: CLIENT_PARTICIPATION_PORT - -fb_app_id: - doc: must register with facebook and get a facebook app id to use the facebook auth features - default: 661042417336977 - env: FB_APP_ID - -local_output_path: - doc: Uploader settings local - default: ./build - env: LOCAL_OUTPUT_PATH - -s3_bucket_prod: - doc: uploader settings s3 - default: pol.is - env: S3_BUCKET_PROD - -s3_bucket_preprod: - doc: uploader settings s3 - default: preprod.pol.is - env: S3_BUCKET_PREPROD - -scp_subdir_preprod: - doc: uploader settings scp - default: preprod - env: SCP_SUBDIR_PREPROD - -scp_subdir_prod: - doc: uploader settings scp - default: prod - env: SCP_SUBDIR_PROD - -port: - doc: port - default: 5000 - env: PORT - -# Options: maildev, aws-ses, mailgun -# Example: `aws-ses,mailgun` would try sending via AWS SES first, and fallback to Mailgun on error. -email_transport_types: - doc: email_transport_types ex. maildev, aws-ses, mailgun - default: maildev - env: EMAIL_TRANSPORT_TYPES - + format: + - local + - s3 + - scp +webserver_pass: + default: 8a7157439f50 + doc: webserver_pass + env: WEBSERVER_PASS +webserver_username: + default: f4c19337e502 + doc: webserver_username + env: WEBSERVER_USERNAME From 72449e786a6224c06817317de9fa45d3193a0f6d Mon Sep 17 00:00:00 2001 From: crkrenn Date: Mon, 31 Jan 2022 16:29:33 -0800 Subject: [PATCH 49/49] changed schema port to undefined. other small changes --- config/merge_config_yaml_files.py | 5 +++-- config/schema.yaml | 9 +++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/config/merge_config_yaml_files.py b/config/merge_config_yaml_files.py index 26b294357e..d9ae07f82b 100644 --- a/config/merge_config_yaml_files.py +++ b/config/merge_config_yaml_files.py @@ -103,8 +103,9 @@ def map_constructor(loader, node, deep=False): for key in list(sorted(data.keys())): result = subprocess.run( ["grep", "-R", - "-e", data[key]['env']+':', - "-e", data[key]['env']+'=', + "-e", data[key]['env']+'.*:', + "-e", data[key]['env']+'.*=', + "-e", key+'.*=', polis_path], capture_output=True) print(f"schema key: {key}") diff --git a/config/schema.yaml b/config/schema.yaml index 987485c0db..2fe8dc8a6b 100644 --- a/config/schema.yaml +++ b/config/schema.yaml @@ -157,6 +157,7 @@ email_transport_types: - email_transport_types - maildev, aws-ses, mailgun - ex. `aws-ses,mailgun` would try sending via AWS SES first, and fallback to Mailgun on error. + - cypress-tests.yml uses - EMAIL_TRANSPORT_TYPES=mailgun,aws-ses,nonexistent,maildev env: EMAIL_TRANSPORT_TYPES encryption_password_00001: default: c9336642-2024-43a8-99cd-77ee38e82a9c @@ -208,7 +209,7 @@ maxmind_userid: doc: maxmind_userid env: MAXMIND_USERID polis_from_address: - default: '' + default: "Example " doc: polis_from_address env: POLIS_FROM_ADDRESS polis_slack_app_client_id: @@ -220,11 +221,11 @@ polis_slack_app_client_secret: doc: polis_slack_app_client_secret env: POLIS_SLACK_APP_CLIENT_SECRET port: - default: 5000 + default: undefined doc: port env: PORT primary_polis_url: - default: pol.is + default: undefined doc: primary_polis_url env: PRIMARY_POLIS_URL run_periodic_export_tests: @@ -252,7 +253,7 @@ service_hostname: doc: service_hostname env: SERVICE_HOSTNAME service_url: - default: http://localhost:5000 + default: undefined doc: Point to a polisServer instance (local recommended for dev) env: SERVICE_URL should_use_translation_api: