mirror of
https://github.com/OneUptime/oneuptime.git
synced 2026-04-06 00:32:12 +02:00
Merge branch 'master' of https://gitlab.com/fyipe-project/app
This commit is contained in:
350
.gitlab-ci.yml
350
.gitlab-ci.yml
@@ -7,190 +7,194 @@
|
||||
|
||||
# Define stages
|
||||
stages:
|
||||
- BuildAndTest
|
||||
- E2E
|
||||
# - BuildAndTest
|
||||
# - E2E
|
||||
- DeployStaging
|
||||
- DeployProduction
|
||||
- SmokeTest
|
||||
- Rollback
|
||||
|
||||
##BACKEND
|
||||
lint_n_audit_backend:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- cd backend
|
||||
- npm install --dev
|
||||
- npm run lint
|
||||
# - npm run audit
|
||||
- cd ..
|
||||
# lint_n_audit_backend:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - cd backend
|
||||
# - npm install --dev
|
||||
# - npm run lint
|
||||
# # - npm run audit
|
||||
# - cd ..
|
||||
|
||||
build_n_test_backend:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
- sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
- sudo docker run --name mongo -p 27017:27017 -d mongo:3.4
|
||||
- sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend
|
||||
- sudo docker run --name fyipe --network container:mongo fyipe-project/backend:3.0.$CI_PIPELINE_IID npm test
|
||||
# build_n_test_backend:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
# - sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
# - sudo docker run --name mongo -p 27017:27017 -d mongo:3.4
|
||||
# - sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend
|
||||
# - sudo docker run --name fyipe --network container:mongo fyipe-project/backend:3.0.$CI_PIPELINE_IID npm test
|
||||
|
||||
##DASHBOARD
|
||||
lint_n_audit_dashboard:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- cd dashboard
|
||||
- npm install --dev
|
||||
- npm run lint
|
||||
# - npm run audit
|
||||
- cd ..
|
||||
# ##DASHBOARD
|
||||
# lint_n_audit_dashboard:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - cd dashboard
|
||||
# - npm install --dev
|
||||
# - npm run lint
|
||||
# # - npm run audit
|
||||
# - cd ..
|
||||
|
||||
build_n_test_dashboard:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- echo "Setup machine for running puppeteer tests"
|
||||
- sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
- sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
- sudo docker run --name mongo -p 27017:27017 -d mongo:3.4
|
||||
- sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend
|
||||
- sudo docker run --env-file ./backend/.env.development --net=host -d fyipe-project/backend:3.0.$CI_PIPELINE_IID
|
||||
- sudo docker build -t fyipe-project/accounts:3.0.$CI_PIPELINE_IID ./accounts
|
||||
- sudo docker run -p 3003:3003 -d fyipe-project/accounts:3.0.$CI_PIPELINE_IID
|
||||
- sudo docker build -t fyipe-project/dashboard:3.0.$CI_PIPELINE_IID ./dashboard
|
||||
- sudo docker run -p 3000:3000 -d fyipe-project/dashboard:3.0.$CI_PIPELINE_IID
|
||||
- sudo docker ps
|
||||
- cd dashboard
|
||||
- npm install
|
||||
- npm run jest
|
||||
# build_n_test_dashboard:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - echo "Setup machine for running puppeteer tests"
|
||||
# - sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
# - sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
# - sudo docker run --name mongo -p 27017:27017 -d mongo:3.4
|
||||
# - sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend
|
||||
# - sudo docker run --env-file ./backend/.env.development --net=host -d fyipe-project/backend:3.0.$CI_PIPELINE_IID
|
||||
# - sudo docker build -t fyipe-project/accounts:3.0.$CI_PIPELINE_IID ./accounts
|
||||
# - sudo docker run -p 3003:3003 -d fyipe-project/accounts:3.0.$CI_PIPELINE_IID
|
||||
# - sudo docker build -t fyipe-project/dashboard:3.0.$CI_PIPELINE_IID ./dashboard
|
||||
# - sudo docker run -p 3000:3000 -d fyipe-project/dashboard:3.0.$CI_PIPELINE_IID
|
||||
# - sudo docker ps
|
||||
# - cd dashboard
|
||||
# - npm install
|
||||
# - npm run jest
|
||||
|
||||
|
||||
##ZAPIER
|
||||
lint_n_audit_zapier:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- cd zapier
|
||||
- npm install --dev
|
||||
- npm run lint
|
||||
- npm run audit
|
||||
- cd ..
|
||||
# ##ZAPIER
|
||||
# lint_n_audit_zapier:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - cd zapier
|
||||
# - npm install --dev
|
||||
# - npm run lint
|
||||
# - npm run audit
|
||||
# - cd ..
|
||||
|
||||
build_n_test_zapier:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- echo "No test implemented"
|
||||
# build_n_test_zapier:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - echo "No test implemented"
|
||||
|
||||
## STATUS PAGE
|
||||
lint_n_audit_statuspage:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- cd status-page
|
||||
- npm install --dev
|
||||
- npm run lint
|
||||
- npm run audit
|
||||
- cd ..
|
||||
# ## STATUS PAGE
|
||||
# lint_n_audit_statuspage:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - cd status-page
|
||||
# - npm install --dev
|
||||
# - npm run lint
|
||||
# - npm run audit
|
||||
# - cd ..
|
||||
|
||||
build_n_test_statuspage:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- echo "Setup machine for running puppeteer tests"
|
||||
- sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
- sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
- sudo docker run --name mongo -p 27017:27017 -d mongo:3.4
|
||||
- sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend
|
||||
- sudo docker run --net=host -d fyipe-project/backend:3.0.$CI_PIPELINE_IID
|
||||
- sudo docker build -t fyipe-project/status-page:3.0.$CI_PIPELINE_IID ./status-page
|
||||
- sudo docker run -p 3006:3006 -d fyipe-project/status-page:3.0.$CI_PIPELINE_IID
|
||||
- sudo docker ps
|
||||
- cd backend
|
||||
- npm install
|
||||
- cd ..
|
||||
- cd status-page
|
||||
- npm install
|
||||
- curl localhost:3006
|
||||
- npm run jest
|
||||
# build_n_test_statuspage:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - echo "Setup machine for running puppeteer tests"
|
||||
# - sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
# - sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
# - sudo docker run --name mongo -p 27017:27017 -d mongo:3.4
|
||||
# - sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend
|
||||
# - sudo docker run --net=host -d fyipe-project/backend:3.0.$CI_PIPELINE_IID
|
||||
# - sudo docker build -t fyipe-project/status-page:3.0.$CI_PIPELINE_IID ./status-page
|
||||
# - sudo docker run -p 3006:3006 -d fyipe-project/status-page:3.0.$CI_PIPELINE_IID
|
||||
# - sudo docker ps
|
||||
# - cd backend
|
||||
# - npm install
|
||||
# - cd ..
|
||||
# - cd status-page
|
||||
# - npm install
|
||||
# - curl localhost:3006
|
||||
# - npm run jest
|
||||
|
||||
|
||||
## ACCOUNTS
|
||||
lint_n_audit_accounts:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- cd accounts
|
||||
- npm install --dev
|
||||
- npm run lint
|
||||
- npm run audit
|
||||
- cd ..
|
||||
# ## ACCOUNTS
|
||||
# lint_n_audit_accounts:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - cd accounts
|
||||
# - npm install --dev
|
||||
# - npm run lint
|
||||
# - npm run audit
|
||||
# - cd ..
|
||||
|
||||
build_n_test_accounts:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- echo "Setup machine for running puppeteer tests"
|
||||
- sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
- sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
- sudo docker run --name mongo -p 27017:27017 -d mongo:3.4
|
||||
- sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend
|
||||
- sudo docker run --env-file ./backend/.env.development --net=host -d fyipe-project/backend:3.0.$CI_PIPELINE_IID
|
||||
- sudo docker build -t fyipe-project/accounts:3.0.$CI_PIPELINE_IID ./accounts
|
||||
- sudo docker run -p 3003:3003 -d fyipe-project/accounts:3.0.$CI_PIPELINE_IID
|
||||
- sudo docker build -t fyipe-project/dashboard:3.0.$CI_PIPELINE_IID ./dashboard
|
||||
- sudo docker run -p 3000:3000 -d fyipe-project/dashboard:3.0.$CI_PIPELINE_IID
|
||||
- sudo docker ps
|
||||
- cd accounts
|
||||
- npm install
|
||||
- npm run jest
|
||||
# build_n_test_accounts:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - echo "Setup machine for running puppeteer tests"
|
||||
# - sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
# - sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
# - sudo docker run --name mongo -p 27017:27017 -d mongo:3.4
|
||||
# - sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend
|
||||
# - sudo docker run --env-file ./backend/.env.development --net=host -d fyipe-project/backend:3.0.$CI_PIPELINE_IID
|
||||
# - sudo docker build -t fyipe-project/accounts:3.0.$CI_PIPELINE_IID ./accounts
|
||||
# - sudo docker run -p 3003:3003 -d fyipe-project/accounts:3.0.$CI_PIPELINE_IID
|
||||
# - sudo docker build -t fyipe-project/dashboard:3.0.$CI_PIPELINE_IID ./dashboard
|
||||
# - sudo docker run -p 3000:3000 -d fyipe-project/dashboard:3.0.$CI_PIPELINE_IID
|
||||
# - sudo docker ps
|
||||
# - cd accounts
|
||||
# - npm install
|
||||
# - npm run jest
|
||||
|
||||
## HOME
|
||||
lint_n_audit_home:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- cd home
|
||||
- npm install --dev
|
||||
- npm run lint
|
||||
- npm run audit
|
||||
- cd ..
|
||||
# ## HOME
|
||||
# lint_n_audit_home:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - cd home
|
||||
# - npm install --dev
|
||||
# - npm run lint
|
||||
# - npm run audit
|
||||
# - cd ..
|
||||
|
||||
build_n_test_home:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- echo "No test implemented"
|
||||
# build_n_test_home:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - echo "No test implemented"
|
||||
|
||||
## PROBE
|
||||
lint_n_audit_probe:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- cd probe
|
||||
- npm install --dev
|
||||
- npm run lint
|
||||
- npm run audit
|
||||
- cd ..
|
||||
# ## PROBE
|
||||
# lint_n_audit_probe:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - cd probe
|
||||
# - npm install --dev
|
||||
# - npm run lint
|
||||
# - npm run audit
|
||||
# - cd ..
|
||||
|
||||
build_n_test_probe:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- echo "No test implemented"
|
||||
# build_n_test_probe:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - echo "No test implemented"
|
||||
|
||||
##E2E Stage.
|
||||
e2e_test:
|
||||
stage: E2E
|
||||
script:
|
||||
- chmod +x ./kubernetes/ci/setup-machine.sh
|
||||
- ./kubernetes/ci/setup-machine.sh
|
||||
- chmod +x ./kubernetes/ci/setup.sh
|
||||
- ./kubernetes/ci/setup.sh
|
||||
- export ACCOUNTS_URL=`sudo kubectl describe svc accounts | grep Endpoints | cut -d ":" -f 2`
|
||||
- export BACKEND_URL=`sudo kubectl describe svc backend | grep Endpoints | cut -d ":" -f 2`
|
||||
- export DASHBOARD_URL=`sudo kubectl describe svc dashboard | grep Endpoints | cut -d ":" -f 2`
|
||||
- export HOME_URL=`sudo kubectl describe svc home | grep Endpoints | cut -d ":" -f 2`
|
||||
- export STATUSPAGE_URL=`sudo kubectl describe svc status-page | grep Endpoints | cut -d ":" -f 2`
|
||||
- echo ACCOUNTS_URL=$ACCOUNTS_URL
|
||||
- echo BACKEND_URL=$BACKEND_URL
|
||||
- echo DASHBOARD_URL=$DASHBOARD_URL
|
||||
- echo HOME_URL=$HOME_URL
|
||||
- echo STATUSPAGE_URL=$STATUSPAGE_URL
|
||||
- chmod +x ./kubernetes/ci/hosts-setup.sh
|
||||
- ./kubernetes/ci/hosts-setup.sh
|
||||
# ##E2E Stage.
|
||||
# e2e_test:
|
||||
# stage: E2E
|
||||
# script:
|
||||
# - chmod +x ./kubernetes/ci/setup-machine.sh
|
||||
# - ./kubernetes/ci/setup-machine.sh
|
||||
# - chmod +x ./kubernetes/ci/setup.sh
|
||||
# - ./kubernetes/ci/setup.sh
|
||||
# - export ACCOUNTS_URL=`sudo kubectl describe svc accounts | grep Endpoints | cut -d ":" -f 2`
|
||||
# - export BACKEND_URL=`sudo kubectl describe svc backend | grep Endpoints | cut -d ":" -f 2`
|
||||
# - export DASHBOARD_URL=`sudo kubectl describe svc dashboard | grep Endpoints | cut -d ":" -f 2`
|
||||
# - export HOME_URL=`sudo kubectl describe svc home | grep Endpoints | cut -d ":" -f 2`
|
||||
# - export STATUSPAGE_URL=`sudo kubectl describe svc status-page | grep Endpoints | cut -d ":" -f 2`
|
||||
# - export APIDOCS_URL=`sudo kubectl describe svc api-docs | grep Endpoints | cut -d ":" -f 2`
|
||||
# - echo ACCOUNTS_URL=$ACCOUNTS_URL
|
||||
# - echo BACKEND_URL=$BACKEND_URL
|
||||
# - echo DASHBOARD_URL=$DASHBOARD_URL
|
||||
# - echo HOME_URL=$HOME_URL
|
||||
# - echo STATUSPAGE_URL=$STATUSPAGE_URL
|
||||
# - chmod +x ./kubernetes/ci/hosts-setup.sh
|
||||
# - ./kubernetes/ci/hosts-setup.sh
|
||||
# - cd smoke-test
|
||||
# - npm i
|
||||
# - npm run test
|
||||
|
||||
only:
|
||||
refs:
|
||||
- release
|
||||
- master
|
||||
# only:
|
||||
# refs:
|
||||
# - release
|
||||
# - master
|
||||
|
||||
# DEPLOYMENT STAGE - BACKEND
|
||||
deploy_staging_backend:
|
||||
@@ -249,7 +253,7 @@ deploy_staging_api-docs:
|
||||
- chmod +x ./kubernetes/ci/deployment-staging-setup.sh
|
||||
- ./kubernetes/ci/deployment-staging-setup.sh
|
||||
# Build and deploy api-docs.
|
||||
- sudo docker build -t fyipe-project/dashobard:master ./api-docs
|
||||
- sudo docker build -t fyipe-project/api-docs:master ./api-docs
|
||||
- sudo docker tag fyipe-project/api-docs:master registry.gitlab.com/fyipe-project/api-docs:3.0.$CI_PIPELINE_IID
|
||||
- sudo docker tag fyipe-project/api-docs:master registry.gitlab.com/fyipe-project/api-docs:master
|
||||
- sudo docker push registry.gitlab.com/fyipe-project/api-docs:3.0.$CI_PIPELINE_IID
|
||||
@@ -295,7 +299,7 @@ deploy_staging_home:
|
||||
- chmod +x ./kubernetes/ci/deployment-staging-setup.sh
|
||||
- ./kubernetes/ci/deployment-staging-setup.sh
|
||||
# Build and deploy home.
|
||||
- sudo docker build -t fyipe-project/dashobard:master ./home
|
||||
- sudo docker build -t fyipe-project/home:master ./home
|
||||
- sudo docker tag fyipe-project/home:master registry.gitlab.com/fyipe-project/home:3.0.$CI_PIPELINE_IID
|
||||
- sudo docker tag fyipe-project/home:master registry.gitlab.com/fyipe-project/home:master
|
||||
- sudo docker push registry.gitlab.com/fyipe-project/home:3.0.$CI_PIPELINE_IID
|
||||
@@ -341,7 +345,7 @@ deploy_staging_probe:
|
||||
- chmod +x ./kubernetes/ci/deployment-staging-setup.sh
|
||||
- ./kubernetes/ci/deployment-staging-setup.sh
|
||||
# Build and deploy probe.
|
||||
- sudo docker build -t fyipe-project/dashobard:master ./probe
|
||||
- sudo docker build -t fyipe-project/probe:master ./probe
|
||||
- sudo docker tag fyipe-project/probe:master registry.gitlab.com/fyipe-project/probe:3.0.$CI_PIPELINE_IID
|
||||
- sudo docker tag fyipe-project/probe:master registry.gitlab.com/fyipe-project/probe:master
|
||||
- sudo docker push registry.gitlab.com/fyipe-project/probe:3.0.$CI_PIPELINE_IID
|
||||
@@ -387,7 +391,7 @@ deploy_staging_status-page:
|
||||
- chmod +x ./kubernetes/ci/deployment-staging-setup.sh
|
||||
- ./kubernetes/ci/deployment-staging-setup.sh
|
||||
# Build and deploy status-page.
|
||||
- sudo docker build -t fyipe-project/dashobard:master ./status-page
|
||||
- sudo docker build -t fyipe-project/status-page:master ./status-page
|
||||
- sudo docker tag fyipe-project/status-page:master registry.gitlab.com/fyipe-project/status-page:3.0.$CI_PIPELINE_IID
|
||||
- sudo docker tag fyipe-project/status-page:master registry.gitlab.com/fyipe-project/status-page:master
|
||||
- sudo docker push registry.gitlab.com/fyipe-project/status-page:3.0.$CI_PIPELINE_IID
|
||||
@@ -433,7 +437,7 @@ deploy_staging_admin-dashboard:
|
||||
- chmod +x ./kubernetes/ci/deployment-staging-setup.sh
|
||||
- ./kubernetes/ci/deployment-staging-setup.sh
|
||||
# Build and deploy admin-dashboard.
|
||||
- sudo docker build -t fyipe-project/dashobard:master ./admin-dashboard
|
||||
- sudo docker build -t fyipe-project/admin-dashboard:master ./admin-dashboard
|
||||
- sudo docker tag fyipe-project/admin-dashboard:master registry.gitlab.com/fyipe-project/admin-dashboard:3.0.$CI_PIPELINE_IID
|
||||
- sudo docker tag fyipe-project/admin-dashboard:master registry.gitlab.com/fyipe-project/admin-dashboard:master
|
||||
- sudo docker push registry.gitlab.com/fyipe-project/admin-dashboard:3.0.$CI_PIPELINE_IID
|
||||
@@ -480,7 +484,7 @@ deploy_staging_accounts:
|
||||
- chmod +x ./kubernetes/ci/deployment-staging-setup.sh
|
||||
- ./kubernetes/ci/deployment-staging-setup.sh
|
||||
# Build and deploy accounts.
|
||||
- sudo docker build -t fyipe-project/dashobard:master ./accounts
|
||||
- sudo docker build -t fyipe-project/accounts:master ./accounts
|
||||
- sudo docker tag fyipe-project/accounts:master registry.gitlab.com/fyipe-project/accounts:3.0.$CI_PIPELINE_IID
|
||||
- sudo docker tag fyipe-project/accounts:master registry.gitlab.com/fyipe-project/accounts:master
|
||||
- sudo docker push registry.gitlab.com/fyipe-project/accounts:3.0.$CI_PIPELINE_IID
|
||||
@@ -526,7 +530,7 @@ deploy_staging_dashboard:
|
||||
- chmod +x ./kubernetes/ci/deployment-staging-setup.sh
|
||||
- ./kubernetes/ci/deployment-staging-setup.sh
|
||||
# Build and deploy dashboard.
|
||||
- sudo docker build -t fyipe-project/dashobard:master ./dashboard
|
||||
- sudo docker build -t fyipe-project/dashboard:master ./dashboard
|
||||
- sudo docker tag fyipe-project/dashboard:master registry.gitlab.com/fyipe-project/dashboard:3.0.$CI_PIPELINE_IID
|
||||
- sudo docker tag fyipe-project/dashboard:master registry.gitlab.com/fyipe-project/dashboard:master
|
||||
- sudo docker push registry.gitlab.com/fyipe-project/dashboard:3.0.$CI_PIPELINE_IID
|
||||
@@ -578,7 +582,15 @@ smoke_test_production:
|
||||
smoke_test_staging:
|
||||
stage: SmokeTest
|
||||
script:
|
||||
- echo "No test implemented"
|
||||
- export HOME_URL=https://staging.fyipe.com
|
||||
- export ACCOUNTS_URL=https://staging-accounts.fyipe.com
|
||||
- export DASHBOARD_URL=https://staging-dashboard.fyipe.com
|
||||
- export BACKEND_URL=https://staging-api.fyipe.com
|
||||
- export STATUSPAGE_URL=https://staging-statuspage.fyipe.com
|
||||
- export APIDOCS_URL=https://staging-api-docs.fyipe.com
|
||||
- cd smoke-test
|
||||
- npm install
|
||||
- npm run test
|
||||
only:
|
||||
refs:
|
||||
- master
|
||||
|
||||
@@ -1,10 +1,26 @@
|
||||
const express = require('express');
|
||||
const path = require('path');
|
||||
const app = express();
|
||||
const envfile = require('envfile');
|
||||
const fs = require('fs');
|
||||
var child_process = require('child_process');
|
||||
|
||||
var env = {
|
||||
REACT_APP_FYIPE_HOSTED: process.env.FYIPE_HOSTED,
|
||||
REACT_APP_HOST: process.env.HOST,
|
||||
REACT_APP_DASHBOARD_HOST: process.env.DASHBOARD_HOST,
|
||||
REACT_APP_BACKEND_HOST: process.env.BACKEND_HOST
|
||||
}
|
||||
|
||||
fs.writeFileSync('.env', envfile.stringifySync(env));
|
||||
|
||||
child_process.execSync('react-env', {
|
||||
stdio: [0, 1, 2]
|
||||
});
|
||||
|
||||
app.use(express.static(path.join(__dirname, 'build')));
|
||||
|
||||
app.get('/*', function(req, res) {
|
||||
app.get('/*', function (req, res) {
|
||||
res.sendFile(path.join(__dirname, 'build', 'index.html'));
|
||||
});
|
||||
|
||||
|
||||
84
accounts/package-lock.json
generated
84
accounts/package-lock.json
generated
@@ -928,6 +928,29 @@
|
||||
"to-fast-properties": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"@beam-australia/react-env": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@beam-australia/react-env/-/react-env-2.1.2.tgz",
|
||||
"integrity": "sha512-gXcCGGGb2oRM/oeqT861JXsSTJjOxGTBMkj7J5ujEBb6Vmv5I108NcALPYYdGdzFCV6ebdVP+E5k0W1xAbzA7w==",
|
||||
"requires": {
|
||||
"cross-spawn": "^6.0.5",
|
||||
"dotenv": "^8.0.0",
|
||||
"dotenv-expand": "^5.1.0",
|
||||
"minimist": "^1.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"dotenv": {
|
||||
"version": "8.1.0",
|
||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.1.0.tgz",
|
||||
"integrity": "sha512-GUE3gqcDCaMltj2++g6bRQ5rBJWtkWTmqmD0fo1RnnMuUqHNCt2oTPeDnS9n6fKYvlhn7AeBkb38lymBtWBQdA=="
|
||||
},
|
||||
"dotenv-expand": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz",
|
||||
"integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"@cnakazawa/watch": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz",
|
||||
@@ -1782,6 +1805,15 @@
|
||||
"resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
|
||||
"integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM="
|
||||
},
|
||||
"ambi": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ambi/-/ambi-5.0.0.tgz",
|
||||
"integrity": "sha512-NYJzHMsZU7clGY2lH11U+2PEllFDW66qnUukXYbyF8ZJ0B0CXVNfKHUvkUp+gsaNPBW8FqEFX5l64LTlUvI2pw==",
|
||||
"requires": {
|
||||
"editions": "^2.1.0",
|
||||
"typechecker": "^4.3.0"
|
||||
}
|
||||
},
|
||||
"ansi-colors": {
|
||||
"version": "3.2.4",
|
||||
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
|
||||
@@ -4834,6 +4866,22 @@
|
||||
"stream-shift": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"eachr": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/eachr/-/eachr-3.2.0.tgz",
|
||||
"integrity": "sha1-LDXkPqCGUW95l8+At6pk1VpKRIQ=",
|
||||
"requires": {
|
||||
"editions": "^1.1.1",
|
||||
"typechecker": "^4.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"editions": {
|
||||
"version": "1.3.4",
|
||||
"resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz",
|
||||
"integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"ecc-jsbn": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
|
||||
@@ -4843,6 +4891,15 @@
|
||||
"safer-buffer": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"editions": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/editions/-/editions-2.1.3.tgz",
|
||||
"integrity": "sha512-xDZyVm0A4nLgMNWVVLJvcwMjI80ShiH/27RyLiCnW1L273TcJIA25C4pwJ33AWV01OX6UriP35Xu+lH4S7HWQw==",
|
||||
"requires": {
|
||||
"errlop": "^1.1.1",
|
||||
"semver": "^5.6.0"
|
||||
}
|
||||
},
|
||||
"ee-first": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
||||
@@ -4922,6 +4979,25 @@
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
|
||||
"integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY="
|
||||
},
|
||||
"envfile": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/envfile/-/envfile-3.0.0.tgz",
|
||||
"integrity": "sha512-LdL/WLZutuZedarG3Knu4v4RC7kZpC+dSdv9tVj0B8q11K0T0pLczRYxhmyVpApRRXWQnz5Fldrtnu/RzbCHPA==",
|
||||
"requires": {
|
||||
"ambi": "^5.0.0",
|
||||
"eachr": "^3.1.0",
|
||||
"editions": "^2.1.3",
|
||||
"typechecker": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"errlop": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/errlop/-/errlop-1.1.1.tgz",
|
||||
"integrity": "sha512-WX7QjiPHhsny7/PQvrhS5VMizXXKoKCS3udaBp8gjlARdbn+XmK300eKBAAN0hGyRaTCtRpOaxK+xFVPUJ3zkw==",
|
||||
"requires": {
|
||||
"editions": "^2.1.2"
|
||||
}
|
||||
},
|
||||
"errno": {
|
||||
"version": "0.1.7",
|
||||
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
|
||||
@@ -13464,6 +13540,14 @@
|
||||
"mime-types": "~2.1.24"
|
||||
}
|
||||
},
|
||||
"typechecker": {
|
||||
"version": "4.7.0",
|
||||
"resolved": "https://registry.npmjs.org/typechecker/-/typechecker-4.7.0.tgz",
|
||||
"integrity": "sha512-4LHc1KMNJ6NDGO+dSM/yNfZQRtp8NN7psYrPHUblD62Dvkwsp3VShsbM78kOgpcmMkRTgvwdKOTjctS+uMllgQ==",
|
||||
"requires": {
|
||||
"editions": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"typedarray": {
|
||||
"version": "0.0.6",
|
||||
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
"name": "fyipe-accounts",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"homepage": ".",
|
||||
"dependencies": {
|
||||
"@beam-australia/react-env": "^2.1.2",
|
||||
"@trendmicro/react-dropdown": "^1.3.0",
|
||||
"axios": "^0.18.0",
|
||||
"browserslist": "^4.6.1",
|
||||
@@ -12,6 +14,7 @@
|
||||
"components": "^0.1.0",
|
||||
"connected-react-router": "^4.5.0",
|
||||
"creditcard-generator": "0.0.7",
|
||||
"envfile": "^3.0.0",
|
||||
"express": "^4.16.4",
|
||||
"faker": "^4.1.0",
|
||||
"file-saver": "^2.0.1",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
<link rel="preload" href="/assets/fonts/camphor/font3.woff2" as="font" type="font/woff2" crossorigin="">
|
||||
<link rel="preload" href="/assets/fonts/camphor/font4.woff2" as="font" type="font/woff2" crossorigin="">
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js" type="text/javascript"></script>
|
||||
<script src="%PUBLIC_URL%/env.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.tipsy/1.0.3/jquery.tipsy.min.js" type="text/javascript"></script>
|
||||
<style type="text/css">
|
||||
/* Camphor */
|
||||
|
||||
@@ -11,25 +11,26 @@ let dashboardUrl = null;
|
||||
let domain = null;
|
||||
let adminDashboardUrl = null;
|
||||
|
||||
|
||||
function env(value) {
|
||||
var { _env } = window;
|
||||
return _env[`REACT_APP_${value}`];
|
||||
}
|
||||
|
||||
if (!isServer) {
|
||||
if (window.location.href.indexOf('localhost') > -1) {
|
||||
apiUrl = 'http://localhost:3002';
|
||||
dashboardUrl = 'http://localhost:3000';
|
||||
domain = 'localhost';
|
||||
adminDashboardUrl = 'http://localhost:3100';
|
||||
} else if (window.location.href.indexOf('staging') > -1) {
|
||||
apiUrl = 'https://staging-api.fyipe.com';
|
||||
dashboardUrl = 'http://staging-dashboard.fyipe.com';
|
||||
domain = 'fyipe.com';
|
||||
} else {
|
||||
apiUrl = 'https://api.fyipe.com';
|
||||
dashboardUrl = 'https://dashboard.fyipe.com';
|
||||
domain = 'fyipe.com';
|
||||
} else if (env('BACKEND_HOST')) {
|
||||
apiUrl = env('BACKEND_HOST');
|
||||
dashboardUrl = env('DASHBOARD_HOST');
|
||||
domain = 'host';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
export const API_URL = apiUrl;
|
||||
|
||||
export const DASHBOARD_URL = dashboardUrl;
|
||||
@@ -197,7 +198,7 @@ export const PricingPlan = {
|
||||
|
||||
getPlans() {
|
||||
|
||||
if (window.location.href.indexOf('localhost') > -1 || window.location.href.indexOf('staging') > -1) {
|
||||
if (window.location.href.indexOf('localhost') > -1 || window.location.href.indexOf('staging') > -1 || window.location.href.indexOf('accounts:3003') > -1) {
|
||||
return [
|
||||
{
|
||||
category: 'Basic',
|
||||
|
||||
30
admin-dashboard/Dockerfile
Normal file
30
admin-dashboard/Dockerfile
Normal file
@@ -0,0 +1,30 @@
|
||||
#
|
||||
# Fyipe-admin-dashboard Dockerfile
|
||||
#
|
||||
|
||||
# Pull base image nodejs image.
|
||||
FROM node:10
|
||||
|
||||
#SET ENV Variables
|
||||
ENV PRODUCTION=true
|
||||
|
||||
RUN mkdir -p /usr/src/app
|
||||
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
# Install app dependencies
|
||||
COPY package*.json /usr/src/app/
|
||||
RUN npm install
|
||||
|
||||
# Copy app source
|
||||
COPY . /usr/src/app
|
||||
|
||||
# Bundle app source
|
||||
RUN npm run build
|
||||
|
||||
# Expose ports.
|
||||
# - 3100: Fyipe-admin-dashboard
|
||||
EXPOSE 3100
|
||||
|
||||
#Run the app
|
||||
CMD [ "npm", "start" ]
|
||||
93
admin-dashboard/package-lock.json
generated
93
admin-dashboard/package-lock.json
generated
@@ -2381,15 +2381,23 @@
|
||||
}
|
||||
},
|
||||
"babel-loader": {
|
||||
"version": "8.0.5",
|
||||
"resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.5.tgz",
|
||||
"integrity": "sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw==",
|
||||
"version": "8.0.6",
|
||||
"resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz",
|
||||
"integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"find-cache-dir": "^2.0.0",
|
||||
"loader-utils": "^1.0.2",
|
||||
"mkdirp": "^0.5.1",
|
||||
"util.promisify": "^1.0.0"
|
||||
"pify": "^4.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"pify": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
|
||||
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"babel-messages": {
|
||||
@@ -5350,61 +5358,50 @@
|
||||
}
|
||||
},
|
||||
"eslint": {
|
||||
"version": "5.16.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz",
|
||||
"integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==",
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-6.1.0.tgz",
|
||||
"integrity": "sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.0.0",
|
||||
"ajv": "^6.9.1",
|
||||
"ajv": "^6.10.0",
|
||||
"chalk": "^2.1.0",
|
||||
"cross-spawn": "^6.0.5",
|
||||
"debug": "^4.0.1",
|
||||
"doctrine": "^3.0.0",
|
||||
"eslint-scope": "^4.0.3",
|
||||
"eslint-scope": "^5.0.0",
|
||||
"eslint-utils": "^1.3.1",
|
||||
"eslint-visitor-keys": "^1.0.0",
|
||||
"espree": "^5.0.1",
|
||||
"espree": "^6.0.0",
|
||||
"esquery": "^1.0.1",
|
||||
"esutils": "^2.0.2",
|
||||
"file-entry-cache": "^5.0.1",
|
||||
"functional-red-black-tree": "^1.0.1",
|
||||
"glob": "^7.1.2",
|
||||
"glob-parent": "^5.0.0",
|
||||
"globals": "^11.7.0",
|
||||
"ignore": "^4.0.6",
|
||||
"import-fresh": "^3.0.0",
|
||||
"imurmurhash": "^0.1.4",
|
||||
"inquirer": "^6.2.2",
|
||||
"js-yaml": "^3.13.0",
|
||||
"inquirer": "^6.4.1",
|
||||
"is-glob": "^4.0.0",
|
||||
"js-yaml": "^3.13.1",
|
||||
"json-stable-stringify-without-jsonify": "^1.0.1",
|
||||
"levn": "^0.3.0",
|
||||
"lodash": "^4.17.11",
|
||||
"lodash": "^4.17.14",
|
||||
"minimatch": "^3.0.4",
|
||||
"mkdirp": "^0.5.1",
|
||||
"natural-compare": "^1.4.0",
|
||||
"optionator": "^0.8.2",
|
||||
"path-is-inside": "^1.0.2",
|
||||
"progress": "^2.0.0",
|
||||
"regexpp": "^2.0.1",
|
||||
"semver": "^5.5.1",
|
||||
"strip-ansi": "^4.0.0",
|
||||
"strip-json-comments": "^2.0.1",
|
||||
"semver": "^6.1.2",
|
||||
"strip-ansi": "^5.2.0",
|
||||
"strip-json-comments": "^3.0.1",
|
||||
"table": "^5.2.3",
|
||||
"text-table": "^0.2.0"
|
||||
"text-table": "^0.2.0",
|
||||
"v8-compile-cache": "^2.0.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"acorn": {
|
||||
"version": "6.2.1",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.1.tgz",
|
||||
"integrity": "sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==",
|
||||
"dev": true
|
||||
},
|
||||
"ansi-regex": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
|
||||
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
|
||||
"dev": true
|
||||
},
|
||||
"debug": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
||||
@@ -5414,15 +5411,14 @@
|
||||
"ms": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"espree": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz",
|
||||
"integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==",
|
||||
"eslint-scope": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
|
||||
"integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"acorn": "^6.0.7",
|
||||
"acorn-jsx": "^5.0.0",
|
||||
"eslint-visitor-keys": "^1.0.0"
|
||||
"esrecurse": "^4.1.0",
|
||||
"estraverse": "^4.1.1"
|
||||
}
|
||||
},
|
||||
"import-fresh": {
|
||||
@@ -5447,19 +5443,16 @@
|
||||
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
|
||||
"dev": true
|
||||
},
|
||||
"strip-ansi": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
|
||||
"integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-regex": "^3.0.0"
|
||||
}
|
||||
"semver": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
||||
"dev": true
|
||||
},
|
||||
"strip-json-comments": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
|
||||
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz",
|
||||
"integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
@@ -15309,4 +15302,4 @@
|
||||
"integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk="
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -78,12 +78,12 @@
|
||||
"devDependencies": {
|
||||
"axios-mock-adapter": "^1.15.0",
|
||||
"babel-core": "^6.26.3",
|
||||
"babel-loader": "8.0.5",
|
||||
"babel-loader": "^8.0.6",
|
||||
"babel-preset-es2015": "^6.24.1",
|
||||
"babel-preset-react": "^6.24.1",
|
||||
"babel-runtime": "^6.26.0",
|
||||
"cross-env": "^5.2.0",
|
||||
"eslint": "5.16.0",
|
||||
"eslint": "^6.1.0",
|
||||
"jest-localstorage-mock": "^2.2.0",
|
||||
"npm-audit-ci-wrapper": "^2.2.1",
|
||||
"react-test-renderer": "^16.5.2",
|
||||
|
||||
@@ -1,10 +1,26 @@
|
||||
const express = require('express');
|
||||
const path = require('path');
|
||||
const app = express();
|
||||
const envfile = require('envfile');
|
||||
const fs = require('fs');
|
||||
var child_process = require('child_process');
|
||||
|
||||
var env = {
|
||||
REACT_APP_FYIPE_HOSTED: process.env.FYIPE_HOSTED,
|
||||
REACT_APP_HOST: process.env.HOST,
|
||||
REACT_APP_ACCOUNTS_HOST: process.env.ACCOUNTS_HOST,
|
||||
REACT_APP_BACKEND_HOST: process.env.BACKEND_HOST
|
||||
}
|
||||
|
||||
fs.writeFileSync('.env', envfile.stringifySync(env));
|
||||
|
||||
child_process.execSync('react-env', {
|
||||
stdio: [0, 1, 2]
|
||||
});
|
||||
|
||||
app.use(express.static(path.join(__dirname, 'build')));
|
||||
|
||||
app.get('/*', function(req, res) {
|
||||
app.get('/*', function (req, res) {
|
||||
res.sendFile(path.join(__dirname, 'build', 'index.html'));
|
||||
});
|
||||
|
||||
|
||||
119
dashboard/package-lock.json
generated
119
dashboard/package-lock.json
generated
@@ -928,6 +928,34 @@
|
||||
"to-fast-properties": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"@beam-australia/react-env": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@beam-australia/react-env/-/react-env-2.1.2.tgz",
|
||||
"integrity": "sha512-gXcCGGGb2oRM/oeqT861JXsSTJjOxGTBMkj7J5ujEBb6Vmv5I108NcALPYYdGdzFCV6ebdVP+E5k0W1xAbzA7w==",
|
||||
"requires": {
|
||||
"cross-spawn": "^6.0.5",
|
||||
"dotenv": "^8.0.0",
|
||||
"dotenv-expand": "^5.1.0",
|
||||
"minimist": "^1.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"dotenv": {
|
||||
"version": "8.1.0",
|
||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.1.0.tgz",
|
||||
"integrity": "sha512-GUE3gqcDCaMltj2++g6bRQ5rBJWtkWTmqmD0fo1RnnMuUqHNCt2oTPeDnS9n6fKYvlhn7AeBkb38lymBtWBQdA=="
|
||||
},
|
||||
"dotenv-expand": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz",
|
||||
"integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA=="
|
||||
},
|
||||
"minimist": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
|
||||
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
|
||||
}
|
||||
}
|
||||
},
|
||||
"@cnakazawa/watch": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz",
|
||||
@@ -1829,6 +1857,15 @@
|
||||
"resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
|
||||
"integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM="
|
||||
},
|
||||
"ambi": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ambi/-/ambi-5.0.0.tgz",
|
||||
"integrity": "sha512-NYJzHMsZU7clGY2lH11U+2PEllFDW66qnUukXYbyF8ZJ0B0CXVNfKHUvkUp+gsaNPBW8FqEFX5l64LTlUvI2pw==",
|
||||
"requires": {
|
||||
"editions": "^2.1.0",
|
||||
"typechecker": "^4.3.0"
|
||||
}
|
||||
},
|
||||
"ansi-colors": {
|
||||
"version": "3.2.4",
|
||||
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
|
||||
@@ -5571,6 +5608,22 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"eachr": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/eachr/-/eachr-3.2.0.tgz",
|
||||
"integrity": "sha1-LDXkPqCGUW95l8+At6pk1VpKRIQ=",
|
||||
"requires": {
|
||||
"editions": "^1.1.1",
|
||||
"typechecker": "^4.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"editions": {
|
||||
"version": "1.3.4",
|
||||
"resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz",
|
||||
"integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"ecc-jsbn": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
|
||||
@@ -5580,6 +5633,15 @@
|
||||
"safer-buffer": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"editions": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/editions/-/editions-2.1.3.tgz",
|
||||
"integrity": "sha512-xDZyVm0A4nLgMNWVVLJvcwMjI80ShiH/27RyLiCnW1L273TcJIA25C4pwJ33AWV01OX6UriP35Xu+lH4S7HWQw==",
|
||||
"requires": {
|
||||
"errlop": "^1.1.1",
|
||||
"semver": "^5.6.0"
|
||||
}
|
||||
},
|
||||
"ee-first": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
||||
@@ -5706,6 +5768,25 @@
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
|
||||
"integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY="
|
||||
},
|
||||
"envfile": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/envfile/-/envfile-3.0.0.tgz",
|
||||
"integrity": "sha512-LdL/WLZutuZedarG3Knu4v4RC7kZpC+dSdv9tVj0B8q11K0T0pLczRYxhmyVpApRRXWQnz5Fldrtnu/RzbCHPA==",
|
||||
"requires": {
|
||||
"ambi": "^5.0.0",
|
||||
"eachr": "^3.1.0",
|
||||
"editions": "^2.1.3",
|
||||
"typechecker": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"errlop": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/errlop/-/errlop-1.1.1.tgz",
|
||||
"integrity": "sha512-WX7QjiPHhsny7/PQvrhS5VMizXXKoKCS3udaBp8gjlARdbn+XmK300eKBAAN0hGyRaTCtRpOaxK+xFVPUJ3zkw==",
|
||||
"requires": {
|
||||
"editions": "^2.1.2"
|
||||
}
|
||||
},
|
||||
"errno": {
|
||||
"version": "0.1.7",
|
||||
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
|
||||
@@ -8486,8 +8567,7 @@
|
||||
},
|
||||
"ansi-regex": {
|
||||
"version": "2.1.1",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
"bundled": true
|
||||
},
|
||||
"aproba": {
|
||||
"version": "1.2.0",
|
||||
@@ -8524,8 +8604,7 @@
|
||||
},
|
||||
"code-point-at": {
|
||||
"version": "1.1.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
"bundled": true
|
||||
},
|
||||
"concat-map": {
|
||||
"version": "0.0.1",
|
||||
@@ -8534,8 +8613,7 @@
|
||||
},
|
||||
"console-control-strings": {
|
||||
"version": "1.1.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
"bundled": true
|
||||
},
|
||||
"core-util-is": {
|
||||
"version": "1.0.2",
|
||||
@@ -8638,8 +8716,7 @@
|
||||
},
|
||||
"inherits": {
|
||||
"version": "2.0.3",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
"bundled": true
|
||||
},
|
||||
"ini": {
|
||||
"version": "1.3.5",
|
||||
@@ -8649,7 +8726,6 @@
|
||||
"is-fullwidth-code-point": {
|
||||
"version": "1.0.0",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"number-is-nan": "^1.0.0"
|
||||
}
|
||||
@@ -8675,7 +8751,6 @@
|
||||
"minipass": {
|
||||
"version": "2.3.5",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"safe-buffer": "^5.1.2",
|
||||
"yallist": "^3.0.0"
|
||||
@@ -8692,7 +8767,6 @@
|
||||
"mkdirp": {
|
||||
"version": "0.5.1",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"minimist": "0.0.8"
|
||||
}
|
||||
@@ -8765,8 +8839,7 @@
|
||||
},
|
||||
"number-is-nan": {
|
||||
"version": "1.0.1",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
"bundled": true
|
||||
},
|
||||
"object-assign": {
|
||||
"version": "4.1.1",
|
||||
@@ -8776,7 +8849,6 @@
|
||||
"once": {
|
||||
"version": "1.4.0",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"wrappy": "1"
|
||||
}
|
||||
@@ -8852,8 +8924,7 @@
|
||||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
"bundled": true
|
||||
},
|
||||
"safer-buffer": {
|
||||
"version": "2.1.2",
|
||||
@@ -8883,7 +8954,6 @@
|
||||
"string-width": {
|
||||
"version": "1.0.2",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"code-point-at": "^1.0.0",
|
||||
"is-fullwidth-code-point": "^1.0.0",
|
||||
@@ -8901,7 +8971,6 @@
|
||||
"strip-ansi": {
|
||||
"version": "3.0.1",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"ansi-regex": "^2.0.0"
|
||||
}
|
||||
@@ -8940,13 +9009,11 @@
|
||||
},
|
||||
"wrappy": {
|
||||
"version": "1.0.2",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
"bundled": true
|
||||
},
|
||||
"yallist": {
|
||||
"version": "3.0.3",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
"bundled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15006,6 +15073,14 @@
|
||||
"mime-types": "~2.1.24"
|
||||
}
|
||||
},
|
||||
"typechecker": {
|
||||
"version": "4.7.0",
|
||||
"resolved": "https://registry.npmjs.org/typechecker/-/typechecker-4.7.0.tgz",
|
||||
"integrity": "sha512-4LHc1KMNJ6NDGO+dSM/yNfZQRtp8NN7psYrPHUblD62Dvkwsp3VShsbM78kOgpcmMkRTgvwdKOTjctS+uMllgQ==",
|
||||
"requires": {
|
||||
"editions": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"typedarray": {
|
||||
"version": "0.0.6",
|
||||
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@beam-australia/react-env": "^2.1.2",
|
||||
"@trendmicro/react-dropdown": "^1.3.0",
|
||||
"axios": "^0.18.0",
|
||||
"browserslist": "^4.6.1",
|
||||
@@ -12,6 +13,7 @@
|
||||
"cloudboost": "^6.6.6",
|
||||
"components": "^0.1.0",
|
||||
"connected-react-router": "^4.5.0",
|
||||
"envfile": "^3.0.0",
|
||||
"express": "^4.16.4",
|
||||
"faker": "^4.1.0",
|
||||
"file-saver": "^2.0.1",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
<link rel="preload" href="/assets/fonts/camphor/font3.woff2" as="font" type="font/woff2" crossorigin="">
|
||||
<link rel="preload" href="/assets/fonts/camphor/font4.woff2" as="font" type="font/woff2" crossorigin="">
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js" type="text/javascript"></script>
|
||||
<script src="%PUBLIC_URL%/env.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.tipsy/1.0.3/jquery.tipsy.min.js" type="text/javascript"></script>
|
||||
<script src="https://js.stripe.com/v3/"></script>
|
||||
<style type="text/css">
|
||||
|
||||
@@ -3,32 +3,50 @@ import isEmail from 'sane-email-validation';
|
||||
import validUrl from 'valid-url';
|
||||
import valid from 'card-validator';
|
||||
import { isServer } from './store';
|
||||
import FileSaver from 'file-saver'
|
||||
import FileSaver from 'file-saver';
|
||||
|
||||
let apiUrl = 'http://localhost:3002';
|
||||
let dashboardUrl = null;
|
||||
let accountsUrl = null;
|
||||
let domain = null;
|
||||
|
||||
|
||||
// if (!isServer) {
|
||||
// if (window.location.href.indexOf('localhost') > -1) {
|
||||
// apiUrl = 'http://localhost:3002';
|
||||
// dashboardUrl = 'http://localhost:3000';
|
||||
// accountsUrl = 'http://localhost:3003';
|
||||
// domain = 'localhost';
|
||||
// } else if (window.location.href.indexOf('staging') > -1) {
|
||||
// apiUrl = 'https://staging-api.fyipe.com';
|
||||
// dashboardUrl = 'http://staging-dashboard.fyipe.com';
|
||||
// accountsUrl = 'http://staging-accounts.fyipe.com';
|
||||
// domain = 'fyipe.com';
|
||||
// } else {
|
||||
// apiUrl = 'https://api.fyipe.com';
|
||||
// dashboardUrl = 'https://fyipe.com';
|
||||
// accountsUrl = 'https://accounts.fyipe.com';
|
||||
// domain = 'fyipe.com';
|
||||
// }
|
||||
// }
|
||||
|
||||
function env(value) {
|
||||
var { _env } = window;
|
||||
return _env[`REACT_APP_${value}`];
|
||||
}
|
||||
|
||||
if (!isServer) {
|
||||
if (window.location.href.indexOf('localhost') > -1) {
|
||||
apiUrl = 'http://localhost:3002';
|
||||
dashboardUrl = 'http://localhost:3000';
|
||||
accountsUrl = 'http://localhost:3003';
|
||||
domain = 'localhost';
|
||||
} else if (window.location.href.indexOf('staging') > -1) {
|
||||
apiUrl = 'https://staging-api.fyipe.com';
|
||||
dashboardUrl = 'http://staging-dashboard.fyipe.com';
|
||||
accountsUrl = 'http://staging-accounts.fyipe.com';
|
||||
domain = 'fyipe.com';
|
||||
} else {
|
||||
apiUrl = 'https://api.fyipe.com';
|
||||
dashboardUrl = 'https://fyipe.com';
|
||||
accountsUrl = 'https://accounts.fyipe.com';
|
||||
domain = 'fyipe.com';
|
||||
} else if (env('BACKEND_HOST')) {
|
||||
apiUrl = env('BACKEND_HOST');
|
||||
dashboardUrl = env('HOST');
|
||||
accountsUrl = env('ACCOUNTS_HOST');
|
||||
domain = 'host';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
export const API_URL = apiUrl;
|
||||
@@ -215,7 +233,7 @@ export const PricingPlan = {
|
||||
|
||||
getPlans() {
|
||||
|
||||
if (window.location.href.indexOf('localhost') > -1 || window.location.href.indexOf('staging') > -1) {
|
||||
if (window.location.href.indexOf('localhost') > -1 || window.location.href.indexOf('staging') > -1 || window.location.href.indexOf('dashboard:3003') > -1) {
|
||||
return [
|
||||
{
|
||||
category: 'Basic',
|
||||
|
||||
@@ -26,6 +26,12 @@ spec:
|
||||
env:
|
||||
- name: FYIPE_HOSTED
|
||||
value: "true"
|
||||
- name: HOST
|
||||
value: "http://dashboard:3000"
|
||||
- name: ACCOUNTS_HOST
|
||||
value: "http://accounts:3003"
|
||||
- name: BACKEND_HOST
|
||||
value: "http://backend:3002"
|
||||
ports:
|
||||
- containerPort: 3000
|
||||
hostPort: 3000
|
||||
@@ -75,6 +81,12 @@ spec:
|
||||
env:
|
||||
- name: FYIPE_HOSTED
|
||||
value: "true"
|
||||
- name: HOST
|
||||
value: "http://accounts:3003"
|
||||
- name: BACKEND_HOST
|
||||
value: "http://backend:3002"
|
||||
- name: DASHBOARD_HOST
|
||||
value: "http://dashboard:3000"
|
||||
ports:
|
||||
- containerPort: 3003
|
||||
hostPort: 3003
|
||||
@@ -100,6 +112,61 @@ spec:
|
||||
type: LoadBalancer
|
||||
---
|
||||
|
||||
# Fyipe API docs Deployment
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: api-docs
|
||||
labels:
|
||||
app: api-docs
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: api-docs
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: api-docs
|
||||
spec:
|
||||
containers:
|
||||
- image: localhost:32000/api-docs:master
|
||||
name: api-docs
|
||||
imagePullPolicy: Always
|
||||
env:
|
||||
- name: FYIPE_HOSTED
|
||||
value: "true"
|
||||
- name: HOST
|
||||
value: "accounts"
|
||||
- name: BACKEND_HOST
|
||||
value: "backend"
|
||||
- name: DASHBOARD_HOST
|
||||
value: "dashboard"
|
||||
ports:
|
||||
- containerPort: 1445
|
||||
hostPort: 1445
|
||||
name: api-docs
|
||||
restartPolicy: Always
|
||||
imagePullSecrets:
|
||||
- name: gitlabcredv2
|
||||
---
|
||||
# Fyipe API docs Service
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
app: api-docs
|
||||
name: api-docs
|
||||
spec:
|
||||
ports:
|
||||
- port: 80
|
||||
protocol: TCP
|
||||
targetPort: 1445
|
||||
selector:
|
||||
app: api-docs
|
||||
type: LoadBalancer
|
||||
---
|
||||
|
||||
# Fyipe Backend Deployment
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
@@ -133,7 +200,7 @@ spec:
|
||||
- name: STRIPE_PRIVATE_KEY
|
||||
value: "sk_test_YxwnzywggtAd8jDaHecNmHiN"
|
||||
- name: PORT
|
||||
value: "3001"
|
||||
value: "3002"
|
||||
- name: MAIL_USER
|
||||
value: "testmail@fyipe.com"
|
||||
- name: MAIL_PASSWORD
|
||||
@@ -150,9 +217,11 @@ spec:
|
||||
value: "testmail@fyipe.com"
|
||||
- name: EMAIL_VERIFY_TIME
|
||||
value: "3600"
|
||||
- name: MAIL_SECURE
|
||||
value: "false"
|
||||
ports:
|
||||
- containerPort: 3001
|
||||
hostPort: 3001
|
||||
- containerPort: 3002
|
||||
hostPort: 3002
|
||||
name: backend
|
||||
restartPolicy: Always
|
||||
imagePullSecrets:
|
||||
@@ -169,7 +238,7 @@ spec:
|
||||
ports:
|
||||
- port: 80
|
||||
protocol: TCP
|
||||
targetPort: 3001
|
||||
targetPort: 3002
|
||||
selector:
|
||||
app: backend
|
||||
type: LoadBalancer
|
||||
@@ -198,6 +267,14 @@ spec:
|
||||
env:
|
||||
- name: FYIPE_HOSTED
|
||||
value: "true"
|
||||
- name: HOST
|
||||
value: "home"
|
||||
- name: BACKEND_HOST
|
||||
value: "backend"
|
||||
- name: ACCOUNTS_HOST
|
||||
value: "accounts"
|
||||
- name: DASHBOARD_HOST
|
||||
value: "dashboard"
|
||||
ports:
|
||||
- containerPort: 1444
|
||||
hostPort: 1444
|
||||
@@ -244,6 +321,14 @@ spec:
|
||||
env:
|
||||
- name: FYIPE_HOSTED
|
||||
value: "true"
|
||||
- name: HOST
|
||||
value: "statuspage"
|
||||
- name: BACKEND_HOST
|
||||
value: "backend"
|
||||
- name: ACCOUNTS_HOST
|
||||
value: "accounts"
|
||||
- name: DASHBOARD_HOST
|
||||
value: "dashboard"
|
||||
ports:
|
||||
- containerPort: 3006
|
||||
hostPort: 3006
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
cd credentials
|
||||
cd ./kubernetes/credentials
|
||||
openssl enc -in encrypted-credentials.enc -out encrypted-credentials.tar -d -aes256 -pbkdf2 -k $KUBE_ENC
|
||||
tar -xvf encrypted-credentials.tar
|
||||
cd ..
|
||||
cd ..
|
||||
curl -sSL https://sdk.cloud.google.com | bash > /dev/null;
|
||||
source $HOME/google-cloud-sdk/path.bash.inc
|
||||
$HOME/google-cloud-sdk/bin/gcloud components update kubectl
|
||||
sudo docker login --username $DOCKERUSERNAME --password $DOCKERPASSWORD registry.gitlab.com
|
||||
sudo docker login -u $DOCKERUSERNAME -p $PERSONAL_ACCESS_TOKEN registry.gitlab.com
|
||||
@@ -1,3 +1,3 @@
|
||||
sudo $HOME/google-cloud-sdk/bin/gcloud auth activate-service-account --key-file credentials/encrypted-credentials/staging/fyipe-staging.json
|
||||
sudo $HOME/google-cloud-sdk/bin/gcloud auth activate-service-account --key-file ./kubernetes/credentials/encrypted-credentials/staging/fyipe-staging.json
|
||||
sudo $HOME/google-cloud-sdk/bin/gcloud container clusters get-credentials fyipe-staging --zone us-central1-a --project fyipe-staging
|
||||
sudo $HOME/google-cloud-sdk/bin/kubectl config use-context gke_fyipe-staging_us-central1-a_fyipe-staging
|
||||
@@ -6,5 +6,7 @@ sudo sed -i '/backend/c\' /etc/hosts
|
||||
echo $BACKEND_URL' backend' | sudo tee -a /etc/hosts
|
||||
sudo sed -i '/home/c\' /etc/hosts
|
||||
echo $HOME_URL' home' | sudo tee -a /etc/hosts
|
||||
sudo sed -i '/statuspage/c\' /etc/hosts
|
||||
echo $STATUSPAGE_URL' statuspage' | sudo tee -a /etc/hosts
|
||||
sudo sed -i '/status-page/c\' /etc/hosts
|
||||
echo $STATUSPAGE_URL' status-page' | sudo tee -a /etc/hosts
|
||||
sudo sed -i '/api-docs/c\' /etc/hosts
|
||||
echo $APIDOCS_URL' api-docs' | sudo tee -a /etc/hosts
|
||||
@@ -134,10 +134,10 @@ spec:
|
||||
- name: STRIPE_PRIVATE_KEY
|
||||
value: "sk_live_ADLzzMrOCz0kyYTsxWatAqxh"
|
||||
- name: PORT
|
||||
value: "3001"
|
||||
value: "3002"
|
||||
ports:
|
||||
- containerPort: 3001
|
||||
hostPort: 3001
|
||||
- containerPort: 3002
|
||||
hostPort: 3002
|
||||
name: backend
|
||||
restartPolicy: Always
|
||||
imagePullSecrets:
|
||||
@@ -154,7 +154,7 @@ spec:
|
||||
ports:
|
||||
- port: 80
|
||||
protocol: TCP
|
||||
targetPort: 3001
|
||||
targetPort: 3002
|
||||
selector:
|
||||
app: backend
|
||||
type: LoadBalancer
|
||||
@@ -252,6 +252,151 @@ spec:
|
||||
app: status-page
|
||||
type: LoadBalancer
|
||||
---
|
||||
# Probe service and deployement
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: probe
|
||||
labels:
|
||||
app: probe
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: probe
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: probe
|
||||
spec:
|
||||
containers:
|
||||
- image: registry.gitlab.com/fyipe-project/probe:master
|
||||
name: probe
|
||||
imagePullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: FYIPE_HOSTED
|
||||
value: "true"
|
||||
- name: SERVER_URL
|
||||
value: "http://backend"
|
||||
- name: PORT
|
||||
value: "3008"
|
||||
ports:
|
||||
- containerPort: 3008
|
||||
hostPort: 3008
|
||||
name: probe
|
||||
restartPolicy: Always
|
||||
imagePullSecrets:
|
||||
- name: gitlabcredv2
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
app: probe
|
||||
name: probe
|
||||
spec:
|
||||
ports:
|
||||
- port: 80
|
||||
protocol: TCP
|
||||
targetPort: 3008
|
||||
selector:
|
||||
app: probe
|
||||
type: LoadBalancer
|
||||
|
||||
# API docs deployment and service
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: api-docs
|
||||
labels:
|
||||
app: api-docs
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: api-docs
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: api-docs
|
||||
spec:
|
||||
containers:
|
||||
- image: registry.gitlab.com/fyipe-project/api-docs:master
|
||||
name: api-docs
|
||||
imagePullPolicy: Always
|
||||
env:
|
||||
- name: FYIPE_HOSTED
|
||||
value: "true"
|
||||
ports:
|
||||
- containerPort: 1445
|
||||
hostPort: 1445
|
||||
name: api-docs
|
||||
restartPolicy: Always
|
||||
imagePullSecrets:
|
||||
- name: gitlabcredv2
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
app: api-docs
|
||||
name: api-docs
|
||||
spec:
|
||||
ports:
|
||||
- port: 80
|
||||
protocol: TCP
|
||||
targetPort: 1445
|
||||
selector:
|
||||
app: api-docs
|
||||
type: LoadBalancer
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: admin-dashboard
|
||||
labels:
|
||||
app: admin-dashboard
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: admin-dashboard
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: admin-dashboard
|
||||
spec:
|
||||
containers:
|
||||
- image: registry.gitlab.com/fyipe-project/admin-dashboard:master
|
||||
name: admin-dashboard
|
||||
imagePullPolicy: Always
|
||||
env:
|
||||
- name: FYIPE_HOSTED
|
||||
value: "true"
|
||||
ports:
|
||||
- containerPort: 3100
|
||||
hostPort: 3100
|
||||
name: admin-dashboard
|
||||
restartPolicy: Always
|
||||
imagePullSecrets:
|
||||
- name: gitlabcredv2
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
app: admin-dashboard
|
||||
name: admin-dashboard
|
||||
spec:
|
||||
ports:
|
||||
- port: 80
|
||||
protocol: TCP
|
||||
targetPort: 3100
|
||||
selector:
|
||||
app: admin-dashboard
|
||||
type: LoadBalancer
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
|
||||
476
kubernetes/staging-server.yaml
Normal file
476
kubernetes/staging-server.yaml
Normal file
@@ -0,0 +1,476 @@
|
||||
# This is the staging Kubectl config which is used to run the staging cluster in Kubernetes.
|
||||
#
|
||||
# IMPORTANT: ANY CHANGE TO THIS FILE SHOULD BE ACCOMPANIED WITH CHANGES TO test-server.yaml
|
||||
#
|
||||
|
||||
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: dashboard
|
||||
labels:
|
||||
app: dashboard
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: dashboard
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: dashboard
|
||||
spec:
|
||||
containers:
|
||||
- image: registry.gitlab.com/fyipe-project/dashboard:master
|
||||
name: dashboard
|
||||
imagePullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: FYIPE_HOSTED
|
||||
value: "true"
|
||||
- name: HOST
|
||||
value: "https://staging-dashboard.fyipe.com"
|
||||
- name: ACCOUNTS_HOST
|
||||
value: "https://staging-accounts.fyipe.com"
|
||||
- name: BACKEND_HOST
|
||||
value: "https://staging-api.fyipe.com"
|
||||
ports:
|
||||
- containerPort: 3000
|
||||
hostPort: 3000
|
||||
name: dashboard
|
||||
restartPolicy: Always
|
||||
imagePullSecrets:
|
||||
- name: gitlabcredv2
|
||||
---
|
||||
# Fyipe Dashoard Service
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
app: dashboard
|
||||
name: dashboard
|
||||
spec:
|
||||
ports:
|
||||
- port: 80
|
||||
protocol: TCP
|
||||
targetPort: 3000
|
||||
selector:
|
||||
app: dashboard
|
||||
type: LoadBalancer
|
||||
---
|
||||
|
||||
# Fyipe App Accounts Deployment
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: accounts
|
||||
labels:
|
||||
app: accounts
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: accounts
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: accounts
|
||||
spec:
|
||||
containers:
|
||||
- image: registry.gitlab.com/fyipe-project/accounts:master
|
||||
name: accounts
|
||||
imagePullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: FYIPE_HOSTED
|
||||
value: "true"
|
||||
- name: HOST
|
||||
value: "https://staging-accounts.fyipe.com"
|
||||
- name: ACCOUNTS_HOST
|
||||
value: "https://staging-dashboard.fyipe.com"
|
||||
- name: BACKEND_HOST
|
||||
value: "https://staging-api.fyipe.com"
|
||||
ports:
|
||||
- containerPort: 3003
|
||||
hostPort: 3003
|
||||
name: accounts
|
||||
restartPolicy: Always
|
||||
imagePullSecrets:
|
||||
- name: gitlabcredv2
|
||||
---
|
||||
# Fyipe Accounts Service
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
app: accounts
|
||||
name: accounts
|
||||
spec:
|
||||
ports:
|
||||
- port: 80
|
||||
protocol: TCP
|
||||
targetPort: 3003
|
||||
selector:
|
||||
app: accounts
|
||||
type: LoadBalancer
|
||||
---
|
||||
|
||||
# Fyipe Backend Deployment
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: backend
|
||||
labels:
|
||||
app: backend
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: backend
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: backend
|
||||
spec:
|
||||
containers:
|
||||
- image: registry.gitlab.com/fyipe-project/backend:master
|
||||
name: backend
|
||||
imagePullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: FYIPE_HOSTED
|
||||
value: "true"
|
||||
- name: JWT_SECRET
|
||||
value: "idfn3873458973457453"
|
||||
- name: MONGO_URL
|
||||
value: "mongodb://admin:372b60f4-704c-4205-8e5c-45cdbf44b1fc@mongo-0.mongo-headless.default.svc.cluster.local:27017,mongo-1.mongo-headless.default.svc.cluster.local:27017,mongo-2.mongo-headless.default.svc.cluster.local:27017/fyipedb?replicaSet=fyipe"
|
||||
- name: STRIPE_PUBLIC_KEY
|
||||
value: "pk_test_4I2S0sD0TYJxEWQTYlC2Rk6E"
|
||||
- name: STRIPE_PRIVATE_KEY
|
||||
value: "sk_test_YxwnzywggtAd8jDaHecNmHiN"
|
||||
- name: PORT
|
||||
value: "3002"
|
||||
- name: MAIL_USER
|
||||
value: "testmail@fyipe.com"
|
||||
- name: MAIL_PASSWORD
|
||||
value: "66WEPsk4FJCqUnbCFeZrFYCRWg"
|
||||
- name: MAIL_SERVER_SMTP
|
||||
value: "mail.hackerbay.io"
|
||||
- name: MAIL_PORT_SMTP
|
||||
value: "587"
|
||||
- name: MAIL_SERVER_IMAP
|
||||
value: "mail.hackerbay.io"
|
||||
- name: MAIL_PORT_IMAP
|
||||
value: "993"
|
||||
- name: MAIL_FROM
|
||||
value: "testmail@fyipe.com"
|
||||
- name: EMAIL_VERIFY_TIME
|
||||
value: "3600"
|
||||
- name: MAIL_SECURE
|
||||
value: "false"
|
||||
ports:
|
||||
- containerPort: 3002
|
||||
hostPort: 3002
|
||||
name: backend
|
||||
restartPolicy: Always
|
||||
imagePullSecrets:
|
||||
- name: gitlabcredv2
|
||||
---
|
||||
# Fyipe Backend Deployment
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
app: backend
|
||||
name: backend
|
||||
spec:
|
||||
ports:
|
||||
- port: 80
|
||||
protocol: TCP
|
||||
targetPort: 3002
|
||||
selector:
|
||||
app: backend
|
||||
type: LoadBalancer
|
||||
---
|
||||
# Fyipe Home
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: home
|
||||
labels:
|
||||
app: home
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: home
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: home
|
||||
spec:
|
||||
containers:
|
||||
- image: registry.gitlab.com/fyipe-project/home:master
|
||||
name: home
|
||||
imagePullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: FYIPE_HOSTED
|
||||
value: "true"
|
||||
ports:
|
||||
- containerPort: 1444
|
||||
hostPort: 1444
|
||||
name: home
|
||||
restartPolicy: Always
|
||||
imagePullSecrets:
|
||||
- name: gitlabcredv2
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
app: home
|
||||
name: home
|
||||
spec:
|
||||
ports:
|
||||
- port: 80
|
||||
protocol: TCP
|
||||
targetPort: 1444
|
||||
selector:
|
||||
app: home
|
||||
type: LoadBalancer
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: status-page
|
||||
labels:
|
||||
app: status-page
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: status-page
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: status-page
|
||||
spec:
|
||||
containers:
|
||||
- image: registry.gitlab.com/fyipe-project/status-page:master
|
||||
name: status-page
|
||||
imagePullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: FYIPE_HOSTED
|
||||
value: "true"
|
||||
ports:
|
||||
- containerPort: 3006
|
||||
hostPort: 3006
|
||||
name: status-page
|
||||
restartPolicy: Always
|
||||
imagePullSecrets:
|
||||
- name: gitlabcredv2
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
app: status-page
|
||||
name: status-page
|
||||
spec:
|
||||
ports:
|
||||
- port: 80
|
||||
protocol: TCP
|
||||
targetPort: 3006
|
||||
selector:
|
||||
app: status-page
|
||||
type: LoadBalancer
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: mongo-headless
|
||||
labels:
|
||||
name: mongo-headless
|
||||
spec:
|
||||
ports:
|
||||
- port: 27017
|
||||
targetPort: 27017
|
||||
clusterIP: None
|
||||
selector:
|
||||
role: mongo
|
||||
|
||||
---
|
||||
|
||||
# stateful set config for mongo
|
||||
apiVersion: apps/v1beta1
|
||||
kind: StatefulSet
|
||||
metadata:
|
||||
name: mongo
|
||||
spec:
|
||||
serviceName: "mongo-headless"
|
||||
replicas: 3
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
role: mongo
|
||||
environment: production
|
||||
spec:
|
||||
terminationGracePeriodSeconds: 10
|
||||
containers:
|
||||
- name: mongo
|
||||
image: mongo
|
||||
command: ["/bin/sh","-c"]
|
||||
args: ["echo 2J2W5Jm7G38y169r8s5T1dW > mongo.key; chmod 600 mongo.key; mongod --replSet fyipe --keyFile mongo.key --smallfiles --noprealloc --bind_ip_all"]
|
||||
ports:
|
||||
- containerPort: 27017
|
||||
volumeMounts:
|
||||
- name: persistent-storage
|
||||
mountPath: /data/db
|
||||
volumeClaimTemplates:
|
||||
- metadata:
|
||||
name: persistent-storage
|
||||
annotations:
|
||||
volume.beta.kubernetes.io/storage-class: productiondata
|
||||
spec:
|
||||
accessModes: [ "ReadWriteOnce" ]
|
||||
resources:
|
||||
requests:
|
||||
storage: 900Gi
|
||||
---
|
||||
|
||||
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: mongo-backup-pvc
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 900Gi
|
||||
storageClassName: primarybackup
|
||||
---
|
||||
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: mongo-secondary-backup-pvc
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 900Gi
|
||||
storageClassName: secondbackup
|
||||
---
|
||||
|
||||
|
||||
apiVersion: v1
|
||||
kind: ReplicationController
|
||||
metadata:
|
||||
labels:
|
||||
name: mongo-backup-primary
|
||||
name: mongo-backup-primary
|
||||
spec:
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
name: mongo-backup-primary
|
||||
spec:
|
||||
containers:
|
||||
- image: tutum/mongodb-backup
|
||||
name: mongodb-backup
|
||||
ports:
|
||||
- name: mongo
|
||||
containerPort: 27017
|
||||
hostPort: 27017
|
||||
env:
|
||||
- name: MAX_BACKUPS
|
||||
value: "15"
|
||||
- name: MONGODB_USER
|
||||
value: "admin"
|
||||
- name: MONGODB_PASS
|
||||
value: "372b60f4-704c-4205-8e5c-45cdbf44b1fc"
|
||||
- name: MONGODB_HOST
|
||||
value: "mongo-0.mongo-headless.default.svc.cluster.local"
|
||||
- name: MONGODB_PORT
|
||||
value: "27017"
|
||||
volumeMounts:
|
||||
- name: mongo-backup
|
||||
mountPath: /backup
|
||||
volumes:
|
||||
- name: mongo-backup
|
||||
persistentVolumeClaim:
|
||||
claimName: mongo-backup-pvc
|
||||
---
|
||||
|
||||
apiVersion: v1
|
||||
kind: ReplicationController
|
||||
metadata:
|
||||
labels:
|
||||
name: mongo-backup-secondary
|
||||
name: mongo-backup-secondary
|
||||
spec:
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
name: mongo-backup-secondary
|
||||
spec:
|
||||
containers:
|
||||
- image: tutum/mongodb-backup
|
||||
name: mongodb-backup
|
||||
ports:
|
||||
- name: mongo
|
||||
containerPort: 27017
|
||||
hostPort: 27017
|
||||
env:
|
||||
- name: MAX_BACKUPS
|
||||
value: "15"
|
||||
- name: MONGODB_USER
|
||||
value: "admin"
|
||||
- name: MONGODB_PASS
|
||||
value: "372b60f4-704c-4205-8e5c-45cdbf44b1fc"
|
||||
- name: MONGODB_HOST
|
||||
value: "mongo-0.mongo-headless.default.svc.cluster.local"
|
||||
- name: MONGODB_PORT
|
||||
value: "27017"
|
||||
volumeMounts:
|
||||
- name: mongo-backup
|
||||
mountPath: /backup
|
||||
volumes:
|
||||
- name: mongo-backup
|
||||
persistentVolumeClaim:
|
||||
claimName: mongo-secondary-backup-pvc
|
||||
---
|
||||
|
||||
|
||||
kind: StorageClass
|
||||
apiVersion: storage.k8s.io/v1beta1
|
||||
metadata:
|
||||
name: productiondata
|
||||
provisioner: kubernetes.io/gce-pd
|
||||
parameters:
|
||||
type: pd-ssd
|
||||
reclaimPolicy: Retain
|
||||
---
|
||||
|
||||
|
||||
kind: StorageClass
|
||||
apiVersion: storage.k8s.io/v1beta1
|
||||
metadata:
|
||||
name: primarybackup
|
||||
provisioner: kubernetes.io/gce-pd
|
||||
parameters:
|
||||
type: pd-standard
|
||||
reclaimPolicy: Retain
|
||||
---
|
||||
|
||||
kind: StorageClass
|
||||
apiVersion: storage.k8s.io/v1beta1
|
||||
metadata:
|
||||
name: secondbackup
|
||||
provisioner: kubernetes.io/gce-pd
|
||||
parameters:
|
||||
type: pd-standard
|
||||
reclaimPolicy: Retain
|
||||
---
|
||||
484
probe/package-lock.json
generated
Executable file → Normal file
484
probe/package-lock.json
generated
Executable file → Normal file
@@ -5,9 +5,9 @@
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"@babel/code-frame": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
|
||||
"integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
|
||||
"version": "7.5.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
|
||||
"integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
|
||||
"requires": {
|
||||
"@babel/highlight": "^7.0.0"
|
||||
}
|
||||
@@ -32,19 +32,19 @@
|
||||
}
|
||||
},
|
||||
"acorn": {
|
||||
"version": "6.2.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.0.tgz",
|
||||
"integrity": "sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw=="
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.0.0.tgz",
|
||||
"integrity": "sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ=="
|
||||
},
|
||||
"acorn-jsx": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz",
|
||||
"integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg=="
|
||||
"version": "5.0.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz",
|
||||
"integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw=="
|
||||
},
|
||||
"ajv": {
|
||||
"version": "6.10.1",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.1.tgz",
|
||||
"integrity": "sha512-w1YQaVGNC6t2UCPjEawK/vo/dG8OOrVtUmhBT1uJJYxbl5kU2Tj3v6LGqBcsysN1yhuCStJCCA3GqdvKY8sqXQ==",
|
||||
"version": "6.10.2",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
|
||||
"integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
|
||||
"requires": {
|
||||
"fast-deep-equal": "^2.0.1",
|
||||
"fast-json-stable-stringify": "^2.0.0",
|
||||
@@ -108,12 +108,9 @@
|
||||
"integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg=="
|
||||
},
|
||||
"async": {
|
||||
"version": "2.6.2",
|
||||
"resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz",
|
||||
"integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==",
|
||||
"requires": {
|
||||
"lodash": "^4.17.11"
|
||||
}
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
|
||||
"integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k="
|
||||
},
|
||||
"asynckit": {
|
||||
"version": "0.4.0",
|
||||
@@ -233,14 +230,6 @@
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"colors": "1.0.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"colors": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
|
||||
"integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"cli-width": {
|
||||
@@ -248,15 +237,6 @@
|
||||
"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
|
||||
"integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk="
|
||||
},
|
||||
"color": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz",
|
||||
"integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==",
|
||||
"requires": {
|
||||
"color-convert": "^1.9.1",
|
||||
"color-string": "^1.5.2"
|
||||
}
|
||||
},
|
||||
"color-convert": {
|
||||
"version": "1.9.3",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
|
||||
@@ -270,33 +250,10 @@
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
|
||||
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
|
||||
},
|
||||
"color-string": {
|
||||
"version": "1.5.3",
|
||||
"resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz",
|
||||
"integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==",
|
||||
"requires": {
|
||||
"color-name": "^1.0.0",
|
||||
"simple-swizzle": "^0.2.2"
|
||||
}
|
||||
},
|
||||
"colornames": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz",
|
||||
"integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y="
|
||||
},
|
||||
"colors": {
|
||||
"version": "1.3.3",
|
||||
"resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz",
|
||||
"integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg=="
|
||||
},
|
||||
"colorspace": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz",
|
||||
"integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==",
|
||||
"requires": {
|
||||
"color": "3.0.x",
|
||||
"text-hex": "1.0.x"
|
||||
}
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
|
||||
"integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs="
|
||||
},
|
||||
"combined-stream": {
|
||||
"version": "1.0.8",
|
||||
@@ -358,8 +315,20 @@
|
||||
"semver": "^5.5.0",
|
||||
"shebang-command": "^1.2.0",
|
||||
"which": "^1.2.9"
|
||||
},
|
||||
"dependencies": {
|
||||
"semver": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"cycle": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
|
||||
"integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI="
|
||||
},
|
||||
"dashdash": {
|
||||
"version": "1.14.1",
|
||||
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
|
||||
@@ -396,16 +365,6 @@
|
||||
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
|
||||
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
|
||||
},
|
||||
"diagnostics": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz",
|
||||
"integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==",
|
||||
"requires": {
|
||||
"colorspace": "1.1.x",
|
||||
"enabled": "1.0.x",
|
||||
"kuler": "1.0.x"
|
||||
}
|
||||
},
|
||||
"doctrine": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
|
||||
@@ -433,24 +392,11 @@
|
||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
|
||||
"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
|
||||
},
|
||||
"enabled": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz",
|
||||
"integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=",
|
||||
"requires": {
|
||||
"env-variable": "0.0.x"
|
||||
}
|
||||
},
|
||||
"encodeurl": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
|
||||
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
|
||||
},
|
||||
"env-variable": {
|
||||
"version": "0.0.5",
|
||||
"resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz",
|
||||
"integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA=="
|
||||
},
|
||||
"escape-html": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
||||
@@ -462,9 +408,9 @@
|
||||
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
|
||||
},
|
||||
"eslint": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-6.0.1.tgz",
|
||||
"integrity": "sha512-DyQRaMmORQ+JsWShYsSg4OPTjY56u1nCjAmICrE8vLWqyLKxhFXOthwMj1SA8xwfrv0CofLNVnqbfyhwCkaO0w==",
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-6.3.0.tgz",
|
||||
"integrity": "sha512-ZvZTKaqDue+N8Y9g0kp6UPZtS4FSY3qARxBs7p4f0H0iof381XHduqVerFWtK8DPtKmemqbqCFENWSQgPR/Gow==",
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.0.0",
|
||||
"ajv": "^6.10.0",
|
||||
@@ -472,36 +418,37 @@
|
||||
"cross-spawn": "^6.0.5",
|
||||
"debug": "^4.0.1",
|
||||
"doctrine": "^3.0.0",
|
||||
"eslint-scope": "^4.0.3",
|
||||
"eslint-utils": "^1.3.1",
|
||||
"eslint-visitor-keys": "^1.0.0",
|
||||
"espree": "^6.0.0",
|
||||
"eslint-scope": "^5.0.0",
|
||||
"eslint-utils": "^1.4.2",
|
||||
"eslint-visitor-keys": "^1.1.0",
|
||||
"espree": "^6.1.1",
|
||||
"esquery": "^1.0.1",
|
||||
"esutils": "^2.0.2",
|
||||
"file-entry-cache": "^5.0.1",
|
||||
"functional-red-black-tree": "^1.0.1",
|
||||
"glob-parent": "^3.1.0",
|
||||
"glob-parent": "^5.0.0",
|
||||
"globals": "^11.7.0",
|
||||
"ignore": "^4.0.6",
|
||||
"import-fresh": "^3.0.0",
|
||||
"imurmurhash": "^0.1.4",
|
||||
"inquirer": "^6.2.2",
|
||||
"inquirer": "^6.4.1",
|
||||
"is-glob": "^4.0.0",
|
||||
"js-yaml": "^3.13.1",
|
||||
"json-stable-stringify-without-jsonify": "^1.0.1",
|
||||
"levn": "^0.3.0",
|
||||
"lodash": "^4.17.11",
|
||||
"lodash": "^4.17.14",
|
||||
"minimatch": "^3.0.4",
|
||||
"mkdirp": "^0.5.1",
|
||||
"natural-compare": "^1.4.0",
|
||||
"optionator": "^0.8.2",
|
||||
"progress": "^2.0.0",
|
||||
"regexpp": "^2.0.1",
|
||||
"semver": "^5.5.1",
|
||||
"strip-ansi": "^4.0.0",
|
||||
"strip-json-comments": "^2.0.1",
|
||||
"semver": "^6.1.2",
|
||||
"strip-ansi": "^5.2.0",
|
||||
"strip-json-comments": "^3.0.1",
|
||||
"table": "^5.2.3",
|
||||
"text-table": "^0.2.0"
|
||||
"text-table": "^0.2.0",
|
||||
"v8-compile-cache": "^2.0.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"debug": {
|
||||
@@ -520,9 +467,9 @@
|
||||
}
|
||||
},
|
||||
"eslint-scope": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
|
||||
"integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
|
||||
"integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==",
|
||||
"requires": {
|
||||
"esrecurse": "^4.1.0",
|
||||
"estraverse": "^4.1.1"
|
||||
@@ -537,18 +484,18 @@
|
||||
}
|
||||
},
|
||||
"eslint-visitor-keys": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
|
||||
"integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ=="
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
|
||||
"integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A=="
|
||||
},
|
||||
"espree": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/espree/-/espree-6.0.0.tgz",
|
||||
"integrity": "sha512-lJvCS6YbCn3ImT3yKkPe0+tJ+mH6ljhGNjHQH9mRtiO6gjhVAOhVXW1yjnwqGwTkK3bGbye+hb00nFNmu0l/1Q==",
|
||||
"version": "6.1.1",
|
||||
"resolved": "https://registry.npmjs.org/espree/-/espree-6.1.1.tgz",
|
||||
"integrity": "sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==",
|
||||
"requires": {
|
||||
"acorn": "^6.0.7",
|
||||
"acorn-jsx": "^5.0.0",
|
||||
"eslint-visitor-keys": "^1.0.0"
|
||||
"acorn": "^7.0.0",
|
||||
"acorn-jsx": "^5.0.2",
|
||||
"eslint-visitor-keys": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"esprima": {
|
||||
@@ -573,14 +520,14 @@
|
||||
}
|
||||
},
|
||||
"estraverse": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
|
||||
"integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
|
||||
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
|
||||
},
|
||||
"esutils": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
|
||||
"integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
|
||||
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
|
||||
},
|
||||
"etag": {
|
||||
"version": "1.8.1",
|
||||
@@ -654,6 +601,11 @@
|
||||
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
|
||||
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
|
||||
},
|
||||
"eyes": {
|
||||
"version": "0.1.8",
|
||||
"resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
|
||||
"integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A="
|
||||
},
|
||||
"fast-deep-equal": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
|
||||
@@ -669,16 +621,6 @@
|
||||
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
|
||||
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
|
||||
},
|
||||
"fast-safe-stringify": {
|
||||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz",
|
||||
"integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg=="
|
||||
},
|
||||
"fecha": {
|
||||
"version": "2.3.3",
|
||||
"resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz",
|
||||
"integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg=="
|
||||
},
|
||||
"figures": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
|
||||
@@ -799,22 +741,11 @@
|
||||
}
|
||||
},
|
||||
"glob-parent": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
|
||||
"integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz",
|
||||
"integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==",
|
||||
"requires": {
|
||||
"is-glob": "^3.1.0",
|
||||
"path-dirname": "^1.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"is-glob": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
|
||||
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
|
||||
"requires": {
|
||||
"is-extglob": "^2.1.0"
|
||||
}
|
||||
}
|
||||
"is-glob": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"globals": {
|
||||
@@ -856,6 +787,13 @@
|
||||
"setprototypeof": "1.1.1",
|
||||
"statuses": ">= 1.5.0 < 2",
|
||||
"toidentifier": "1.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"inherits": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
||||
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
|
||||
}
|
||||
}
|
||||
},
|
||||
"http-signature": {
|
||||
@@ -905,14 +843,14 @@
|
||||
}
|
||||
},
|
||||
"inherits": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
||||
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
||||
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
|
||||
},
|
||||
"inquirer": {
|
||||
"version": "6.4.1",
|
||||
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.4.1.tgz",
|
||||
"integrity": "sha512-/Jw+qPZx4EDYsaT6uz7F4GJRNFMRdKNeUZw3ZnKV8lyuUgz/YWRCSUAJMZSVhSq4Ec0R2oYnyi6b3d4JXcL5Nw==",
|
||||
"version": "6.5.2",
|
||||
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
|
||||
"integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==",
|
||||
"requires": {
|
||||
"ansi-escapes": "^3.2.0",
|
||||
"chalk": "^2.4.2",
|
||||
@@ -920,28 +858,13 @@
|
||||
"cli-width": "^2.0.0",
|
||||
"external-editor": "^3.0.3",
|
||||
"figures": "^2.0.0",
|
||||
"lodash": "^4.17.11",
|
||||
"lodash": "^4.17.12",
|
||||
"mute-stream": "0.0.7",
|
||||
"run-async": "^2.2.0",
|
||||
"rxjs": "^6.4.0",
|
||||
"string-width": "^2.1.0",
|
||||
"strip-ansi": "^5.1.0",
|
||||
"through": "^2.3.6"
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-regex": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
|
||||
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
|
||||
},
|
||||
"strip-ansi": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
|
||||
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
|
||||
"requires": {
|
||||
"ansi-regex": "^4.1.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"ipaddr.js": {
|
||||
@@ -949,11 +872,6 @@
|
||||
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
|
||||
"integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA=="
|
||||
},
|
||||
"is-arrayish": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
|
||||
"integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
|
||||
},
|
||||
"is-buffer": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz",
|
||||
@@ -982,21 +900,11 @@
|
||||
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
|
||||
"integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
|
||||
},
|
||||
"is-stream": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
|
||||
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
|
||||
},
|
||||
"is-typedarray": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
|
||||
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
|
||||
},
|
||||
"isarray": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
|
||||
},
|
||||
"isexe": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
||||
@@ -1057,14 +965,6 @@
|
||||
"verror": "1.10.0"
|
||||
}
|
||||
},
|
||||
"kuler": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz",
|
||||
"integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==",
|
||||
"requires": {
|
||||
"colornames": "^1.1.1"
|
||||
}
|
||||
},
|
||||
"levn": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
|
||||
@@ -1079,25 +979,6 @@
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
|
||||
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
|
||||
},
|
||||
"logform": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz",
|
||||
"integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==",
|
||||
"requires": {
|
||||
"colors": "^1.2.1",
|
||||
"fast-safe-stringify": "^2.0.4",
|
||||
"fecha": "^2.3.3",
|
||||
"ms": "^2.1.1",
|
||||
"triple-beam": "^1.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"ms": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"media-typer": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
||||
@@ -1237,11 +1118,6 @@
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"one-time": {
|
||||
"version": "0.0.4",
|
||||
"resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz",
|
||||
"integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4="
|
||||
},
|
||||
"onetime": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
|
||||
@@ -1286,11 +1162,6 @@
|
||||
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
|
||||
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
|
||||
},
|
||||
"path-dirname": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
|
||||
"integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
|
||||
},
|
||||
"path-is-absolute": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||
@@ -1316,11 +1187,6 @@
|
||||
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
|
||||
"integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
|
||||
},
|
||||
"process-nextick-args": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
|
||||
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
|
||||
},
|
||||
"progress": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
|
||||
@@ -1336,9 +1202,9 @@
|
||||
}
|
||||
},
|
||||
"psl": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/psl/-/psl-1.2.0.tgz",
|
||||
"integrity": "sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA=="
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/psl/-/psl-1.3.1.tgz",
|
||||
"integrity": "sha512-2KLd5fKOdAfShtY2d/8XDWVRnmp3zp40Qt6ge2zBPFARLXOGUf2fHD5eg+TV/5oxBtQKVhjUaKFsAaE4HnwfSA=="
|
||||
},
|
||||
"punycode": {
|
||||
"version": "2.1.1",
|
||||
@@ -1366,16 +1232,6 @@
|
||||
"unpipe": "1.0.0"
|
||||
}
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
|
||||
"integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
|
||||
"requires": {
|
||||
"inherits": "^2.0.3",
|
||||
"string_decoder": "^1.1.1",
|
||||
"util-deprecate": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"regexpp": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
|
||||
@@ -1446,9 +1302,9 @@
|
||||
}
|
||||
},
|
||||
"rxjs": {
|
||||
"version": "6.5.2",
|
||||
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz",
|
||||
"integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==",
|
||||
"version": "6.5.3",
|
||||
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz",
|
||||
"integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==",
|
||||
"requires": {
|
||||
"tslib": "^1.9.0"
|
||||
}
|
||||
@@ -1464,9 +1320,9 @@
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||
},
|
||||
"semver": {
|
||||
"version": "5.7.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
|
||||
"integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA=="
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
|
||||
},
|
||||
"send": {
|
||||
"version": "0.17.1",
|
||||
@@ -1544,14 +1400,6 @@
|
||||
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
|
||||
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
|
||||
},
|
||||
"simple-swizzle": {
|
||||
"version": "0.2.2",
|
||||
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
|
||||
"integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
|
||||
"requires": {
|
||||
"is-arrayish": "^0.3.1"
|
||||
}
|
||||
},
|
||||
"slice-ansi": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
|
||||
@@ -1600,28 +1448,37 @@
|
||||
"requires": {
|
||||
"is-fullwidth-code-point": "^2.0.0",
|
||||
"strip-ansi": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"string_decoder": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz",
|
||||
"integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==",
|
||||
"requires": {
|
||||
"safe-buffer": "~5.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"strip-ansi": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
|
||||
"integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
|
||||
"requires": {
|
||||
"ansi-regex": "^3.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"strip-ansi": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
|
||||
"integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
|
||||
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
|
||||
"requires": {
|
||||
"ansi-regex": "^3.0.0"
|
||||
"ansi-regex": "^4.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-regex": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
|
||||
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"strip-json-comments": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
|
||||
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz",
|
||||
"integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw=="
|
||||
},
|
||||
"supports-color": {
|
||||
"version": "5.5.0",
|
||||
@@ -1632,21 +1489,16 @@
|
||||
}
|
||||
},
|
||||
"table": {
|
||||
"version": "5.4.1",
|
||||
"resolved": "https://registry.npmjs.org/table/-/table-5.4.1.tgz",
|
||||
"integrity": "sha512-E6CK1/pZe2N75rGZQotFOdmzWQ1AILtgYbMAbAjvms0S1l5IDB47zG3nCnFGB/w+7nB3vKofbLXCH7HPBo864w==",
|
||||
"version": "5.4.6",
|
||||
"resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
|
||||
"integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
|
||||
"requires": {
|
||||
"ajv": "^6.9.1",
|
||||
"lodash": "^4.17.11",
|
||||
"ajv": "^6.10.2",
|
||||
"lodash": "^4.17.14",
|
||||
"slice-ansi": "^2.1.0",
|
||||
"string-width": "^3.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-regex": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
|
||||
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
|
||||
},
|
||||
"string-width": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
|
||||
@@ -1656,22 +1508,9 @@
|
||||
"is-fullwidth-code-point": "^2.0.0",
|
||||
"strip-ansi": "^5.1.0"
|
||||
}
|
||||
},
|
||||
"strip-ansi": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
|
||||
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
|
||||
"requires": {
|
||||
"ansi-regex": "^4.1.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"text-hex": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
|
||||
"integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg=="
|
||||
},
|
||||
"text-table": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
|
||||
@@ -1711,11 +1550,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"triple-beam": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
|
||||
"integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
|
||||
},
|
||||
"tslib": {
|
||||
"version": "1.10.0",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
|
||||
@@ -1769,20 +1603,20 @@
|
||||
"punycode": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
||||
},
|
||||
"utils-merge": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
|
||||
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
|
||||
},
|
||||
"uuid": {
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
|
||||
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
|
||||
"version": "3.3.3",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
|
||||
"integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
|
||||
},
|
||||
"v8-compile-cache": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz",
|
||||
"integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g=="
|
||||
},
|
||||
"vary": {
|
||||
"version": "1.1.2",
|
||||
@@ -1808,19 +1642,16 @@
|
||||
}
|
||||
},
|
||||
"winston": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz",
|
||||
"integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==",
|
||||
"version": "2.4.4",
|
||||
"resolved": "https://registry.npmjs.org/winston/-/winston-2.4.4.tgz",
|
||||
"integrity": "sha512-NBo2Pepn4hK4V01UfcWcDlmiVTs7VTB1h7bgnB0rgP146bYhMxX0ypCz3lBOfNxCO4Zuek7yeT+y/zM1OfMw4Q==",
|
||||
"requires": {
|
||||
"async": "^2.6.1",
|
||||
"diagnostics": "^1.1.1",
|
||||
"is-stream": "^1.1.0",
|
||||
"logform": "^2.1.1",
|
||||
"one-time": "0.0.4",
|
||||
"readable-stream": "^3.1.1",
|
||||
"stack-trace": "0.0.x",
|
||||
"triple-beam": "^1.3.0",
|
||||
"winston-transport": "^4.3.0"
|
||||
"async": "~1.0.0",
|
||||
"colors": "1.0.x",
|
||||
"cycle": "1.0.x",
|
||||
"eyes": "0.1.x",
|
||||
"isstream": "0.1.x",
|
||||
"stack-trace": "0.0.x"
|
||||
}
|
||||
},
|
||||
"winston-slack-transport": {
|
||||
@@ -1831,39 +1662,6 @@
|
||||
"request": "^2.67.0"
|
||||
}
|
||||
},
|
||||
"winston-transport": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz",
|
||||
"integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==",
|
||||
"requires": {
|
||||
"readable-stream": "^2.3.6",
|
||||
"triple-beam": "^1.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"readable-stream": {
|
||||
"version": "2.3.6",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
|
||||
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"string_decoder": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
||||
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
||||
"requires": {
|
||||
"safe-buffer": "~5.1.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"wordwrap": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
"moment": "^2.24.0",
|
||||
"node-cron": "^2.0.3",
|
||||
"node-fetch": "^2.6.0",
|
||||
"winston": "^3.2.1",
|
||||
"winston": "^2.4.0",
|
||||
"winston-slack-transport": "^2.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -9,11 +9,6 @@ if (process.env.PORT) {
|
||||
handleExceptions: true
|
||||
});
|
||||
}
|
||||
else {
|
||||
winston.add(new winston.transports.Console({
|
||||
format: winston.format.simple()
|
||||
}));
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
log: (functionName, error) => {
|
||||
|
||||
101
smoke-test/accounts.test.js
Normal file
101
smoke-test/accounts.test.js
Normal file
@@ -0,0 +1,101 @@
|
||||
const puppeteer = require('puppeteer');
|
||||
var should = require('should');
|
||||
var utils = require('./test-utils');
|
||||
|
||||
var browser, page, userCredentials;
|
||||
|
||||
describe('Login API', () => {
|
||||
|
||||
beforeAll(async () => {
|
||||
jest.setTimeout(15000);
|
||||
browser = await puppeteer.launch(utils.puppeteerLaunchConfig);
|
||||
page = await browser.newPage();
|
||||
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36');
|
||||
// intercept request and mock response for login
|
||||
await page.setRequestInterception(true);
|
||||
await page.on('request', async (request) => {
|
||||
if ((await request.url()).match(/user\/login/)) {
|
||||
request.respond({
|
||||
status: 200,
|
||||
contentType: 'application/json',
|
||||
body: JSON.stringify(userCredentials)
|
||||
});
|
||||
} else {
|
||||
request.continue();
|
||||
}
|
||||
});
|
||||
await page.on('response', async (response) => {
|
||||
try {
|
||||
var res = await response.json();
|
||||
if (res && res.tokens) {
|
||||
userCredentials = res;
|
||||
}
|
||||
} catch (error) { }
|
||||
});
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
await browser.close();
|
||||
});
|
||||
|
||||
it('Should login valid User', async () => {
|
||||
await page.goto(utils.ACCOUNTS_URL + '/register', { waitUntil: 'networkidle2' });
|
||||
await page.waitForSelector('#email');
|
||||
await page.click('input[name=email]');
|
||||
await page.type('input[name=email]', utils.user.email);
|
||||
await page.click('input[name=name]');
|
||||
await page.type('input[name=name]', utils.user.name);
|
||||
await page.click('input[name=companyName]');
|
||||
await page.type('input[name=companyName]', utils.user.company.name);
|
||||
await page.click('input[name=companyPhoneNumber]');
|
||||
await page.type('input[name=companyPhoneNumber]', utils.user.phone);
|
||||
await page.click('input[name=password]');
|
||||
await page.type('input[name=password]', utils.user.password);
|
||||
await page.click('input[name=confirmPassword]');
|
||||
await page.type('input[name=confirmPassword]', utils.user.password);
|
||||
await page.click('button[type=submit]');
|
||||
await page.waitFor(10000);
|
||||
await page.waitForSelector('#cardName');
|
||||
await page.click('input[name=cardName]');
|
||||
await page.type('input[name=cardName]', utils.user.name);
|
||||
await page.click('input[name=cardNumber]');
|
||||
await page.type('input[name=cardNumber]', utils.user.card);
|
||||
await page.click('input[name=cvc]');
|
||||
await page.type('input[name=cvc]', utils.user.cvv);
|
||||
await page.click('input[name=expiry]');
|
||||
await page.type('input[name=expiry]', utils.user.expiryDate);
|
||||
await page.click('input[name=address1]');
|
||||
await page.type('input[name=address1]', utils.user.address.streetA);
|
||||
await page.click('input[name=address2]');
|
||||
await page.type('input[name=address2]', utils.user.address.streetB);
|
||||
await page.click('input[name=city]');
|
||||
await page.type('input[name=city]', utils.user.address.city);
|
||||
await page.click('input[name=state]');
|
||||
await page.type('input[name=state]', utils.user.address.state);
|
||||
await page.click('input[name=zipCode]');
|
||||
await page.type('input[name=zipCode]', utils.user.address.zipcode);
|
||||
await page.select('#country', 'India');
|
||||
await page.click('button[type=submit]');
|
||||
await page.waitFor(15000);
|
||||
await page.goto(utils.ACCOUNTS_URL + '/login');
|
||||
await page.waitForSelector('#login-button');
|
||||
await page.click('input[name=email]');
|
||||
await page.type('input[name=email]', utils.user.email);
|
||||
await page.click('input[name=password]');
|
||||
await page.type('input[name=password]', utils.user.password);
|
||||
await page.click('button[type=submit]');
|
||||
await page.waitFor(10000);
|
||||
var localStorageData = await page.evaluate(() => {
|
||||
var json = {};
|
||||
for (var i = 0; i < localStorage.length; i++) {
|
||||
const key = localStorage.key(i);
|
||||
json[key] = localStorage.getItem(key);
|
||||
}
|
||||
return json;
|
||||
});
|
||||
localStorageData.should.have.property('sessionID');
|
||||
localStorageData.should.have.property('access_token');
|
||||
localStorageData.should.have.property('email', utils.user.email);
|
||||
page.url().should.containEql(utils.DASHBOARD_URL);
|
||||
}, 160000);
|
||||
})
|
||||
25
smoke-test/api-docs.test.js
Normal file
25
smoke-test/api-docs.test.js
Normal file
@@ -0,0 +1,25 @@
|
||||
const utils= require('./test-utils');
|
||||
const puppeteer = require('puppeteer');
|
||||
|
||||
var page, browser;
|
||||
|
||||
beforeAll(async () => {
|
||||
browser = await puppeteer.launch(utils.puppeteerLaunchConfig);
|
||||
page = await browser.newPage();
|
||||
})
|
||||
|
||||
afterAll(async () => {
|
||||
await browser.close();
|
||||
})
|
||||
|
||||
describe('Check api-docs up', () => {
|
||||
test('should get title of api docs page', async () => {
|
||||
await page.goto(utils.APIDOCS_URL, {
|
||||
waitUntil: 'domcontentloaded'
|
||||
});
|
||||
const response = await page.$eval('head > title', (e) => {
|
||||
return e.innerHTML;
|
||||
});
|
||||
expect(response).toBe('Fyipe API Documentation');
|
||||
})
|
||||
})
|
||||
25
smoke-test/backend.test.js
Normal file
25
smoke-test/backend.test.js
Normal file
@@ -0,0 +1,25 @@
|
||||
const utils = require('./test-utils');
|
||||
const puppeteer = require('puppeteer');
|
||||
|
||||
var page, browser;
|
||||
|
||||
beforeAll(async () => {
|
||||
browser = await puppeteer.launch(utils.puppeteerLaunchConfig);
|
||||
page = await browser.newPage();
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
await browser.close();
|
||||
});
|
||||
|
||||
describe('Check Backend', () => {
|
||||
test('should get status ok from backend', async () => {
|
||||
await page.goto(utils.BACKEND_URL, {
|
||||
waitUntil: 'networkidle0'
|
||||
});
|
||||
const response = await page.$eval('body > pre', (e) => {
|
||||
return e.innerHTML;
|
||||
});
|
||||
expect(response).toBe('{"status":200,"message":"Service Status - OK"}');
|
||||
});
|
||||
});
|
||||
136
smoke-test/dashboard.test.js
Normal file
136
smoke-test/dashboard.test.js
Normal file
@@ -0,0 +1,136 @@
|
||||
const puppeteer = require('puppeteer');
|
||||
var should = require('should');
|
||||
var utils = require('./test-utils');
|
||||
|
||||
var browser, page, userCredentials;
|
||||
|
||||
describe('Monitor API', () => {
|
||||
const operationTimeOut = 50000;
|
||||
|
||||
beforeAll(async () => {
|
||||
jest.setTimeout(150000);
|
||||
browser = await puppeteer.launch(utils.puppeteerLaunchConfig);
|
||||
page = await browser.newPage();
|
||||
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36');
|
||||
|
||||
// intercept request and mock response for login
|
||||
await page.setRequestInterception(true);
|
||||
await page.on('request', async (request)=>{
|
||||
if((await request.url()).match(/user\/login/)){
|
||||
request.respond({
|
||||
status: 200,
|
||||
contentType: 'application/json',
|
||||
body: JSON.stringify(userCredentials)
|
||||
});
|
||||
}else{
|
||||
request.continue();
|
||||
}
|
||||
});
|
||||
await page.on('response', async (response)=>{
|
||||
try{
|
||||
const res = await response.json();
|
||||
if(res && res.tokens){
|
||||
userCredentials = res;
|
||||
}
|
||||
}catch(error){}
|
||||
});
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
await browser.close();
|
||||
|
||||
});
|
||||
|
||||
it('Should login valid User', async () => {
|
||||
await page.goto(utils.ACCOUNTS_URL + '/register', { waitUntil: 'networkidle2' });
|
||||
await page.waitForSelector('#email');
|
||||
await page.click('input[name=email]');
|
||||
await page.type('input[name=email]', utils.user.email);
|
||||
await page.click('input[name=name]');
|
||||
await page.type('input[name=name]', utils.user.name);
|
||||
await page.click('input[name=companyName]');
|
||||
await page.type('input[name=companyName]', utils.user.company.name);
|
||||
await page.click('input[name=companyPhoneNumber]');
|
||||
await page.type('input[name=companyPhoneNumber]', utils.user.phone);
|
||||
await page.click('input[name=password]');
|
||||
await page.type('input[name=password]', utils.user.password);
|
||||
await page.click('input[name=confirmPassword]');
|
||||
await page.type('input[name=confirmPassword]', utils.user.password);
|
||||
await page.click('button[type=submit]');
|
||||
await page.waitFor(10000);
|
||||
await page.waitForSelector('#cardName');
|
||||
await page.click('input[name=cardName]');
|
||||
await page.type('input[name=cardName]', utils.user.name);
|
||||
await page.click('input[name=cardNumber]');
|
||||
await page.type('input[name=cardNumber]', utils.user.card);
|
||||
await page.click('input[name=cvc]');
|
||||
await page.type('input[name=cvc]', utils.user.cvv);
|
||||
await page.click('input[name=expiry]');
|
||||
await page.type('input[name=expiry]', utils.user.expiryDate);
|
||||
await page.click('input[name=address1]');
|
||||
await page.type('input[name=address1]', utils.user.address.streetA);
|
||||
await page.click('input[name=address2]');
|
||||
await page.type('input[name=address2]', utils.user.address.streetB);
|
||||
await page.click('input[name=city]');
|
||||
await page.type('input[name=city]', utils.user.address.city);
|
||||
await page.click('input[name=state]');
|
||||
await page.type('input[name=state]', utils.user.address.state);
|
||||
await page.click('input[name=zipCode]');
|
||||
await page.type('input[name=zipCode]', utils.user.address.zipcode);
|
||||
await page.select('#country', 'India');
|
||||
await page.click('button[type=submit]');
|
||||
await page.waitFor(15000);
|
||||
await page.goto(utils.ACCOUNTS_URL + '/login');
|
||||
await page.waitForSelector('#login-button');
|
||||
await page.click('input[name=email]');
|
||||
await page.type('input[name=email]', utils.user.email);
|
||||
await page.click('input[name=password]');
|
||||
await page.type('input[name=password]', utils.user.password);
|
||||
await page.click('button[type=submit]');
|
||||
await page.waitFor(10000);
|
||||
var localStorageData = await page.evaluate(() => {
|
||||
var json = {};
|
||||
for (var i = 0; i < localStorage.length; i++) {
|
||||
const key = localStorage.key(i);
|
||||
json[key] = localStorage.getItem(key);
|
||||
}
|
||||
return json;
|
||||
});
|
||||
localStorageData.should.have.property('sessionID');
|
||||
localStorageData.should.have.property('access_token');
|
||||
localStorageData.should.have.property('email', utils.user.email);
|
||||
page.url().should.containEql(utils.DASHBOARD_URL);
|
||||
}, 160000);
|
||||
|
||||
it('Should create new monitor with correct details', async () => {
|
||||
let monitorName = utils.generateRandomString();
|
||||
await page.waitForSelector('#monitors');
|
||||
await page.click('#monitors');
|
||||
await page.waitForSelector('#frmNewMonitor');
|
||||
await page.click('input[id=name]');
|
||||
await page.type('input[id=name]', monitorName);
|
||||
await page.select('select[name=type_1000]','url');
|
||||
await page.waitForSelector('#url');
|
||||
await page.click('#url');
|
||||
await page.type('#url', 'https://google.com');
|
||||
await page.click('button[type=submit]');
|
||||
await page.waitFor(5000);
|
||||
let spanElement;
|
||||
spanElement = await page.$('span.ContentHeader-title.Text-color--dark.Text-display--inline.Text-fontSize--20.Text-fontWeight--regular.Text-lineHeight--28.Text-typeface--base.Text-wrap--wrap');
|
||||
spanElement = await spanElement.getProperty('innerText');
|
||||
spanElement = await spanElement.jsonValue();
|
||||
spanElement.should.be.exactly(monitorName);
|
||||
|
||||
}, operationTimeOut);
|
||||
|
||||
it('Should delete monitor', async () => {
|
||||
await page.waitForSelector('#name');
|
||||
await page.evaluate(() => {
|
||||
document.querySelector('div.Box-root div.db-Trends-header div.db-Trends-controls div button.bs-Button.bs-DeprecatedButton.db-Trends-editButton.bs-Button--icon.bs-Button--delete').click();
|
||||
});
|
||||
await page.evaluate(() => {
|
||||
document.querySelector('button.bs-DeprecatedButton:nth-child(2)').click();
|
||||
});
|
||||
|
||||
}, operationTimeOut);
|
||||
});
|
||||
129
smoke-test/home.test.js
Executable file
129
smoke-test/home.test.js
Executable file
@@ -0,0 +1,129 @@
|
||||
const puppeteer = require('puppeteer')
|
||||
const util = require('./test-utils')
|
||||
|
||||
|
||||
var page, browser;
|
||||
|
||||
beforeAll(async () => {
|
||||
browser = await puppeteer.launch(util.puppeteerLaunchConfig)
|
||||
page = await browser.newPage()
|
||||
})
|
||||
|
||||
afterAll(async () => {
|
||||
await browser.close()
|
||||
})
|
||||
|
||||
describe('Request demo', () => {
|
||||
test('user can submit request a demo form', async () => {
|
||||
await page.goto(`${util.HOME_URL}/enterprise/demo`)
|
||||
await page.waitForSelector('#form-section')
|
||||
await page.type('#fullname', util.user.name)
|
||||
await page.type('#email', util.user.email)
|
||||
await page.type('#Phone', util.user.phone)
|
||||
await page.type('#website', util.user.website)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#volume')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.type('#message', util.user.message)
|
||||
await page.click('#request-demo-btn')
|
||||
await page.waitForSelector('#success')
|
||||
// Check if user's email is submitted successfully
|
||||
const emailSubmitted = await page.evaluate(() => document.querySelector('.submitted-email').innerText)
|
||||
expect(emailSubmitted).toBe(util.user.email)
|
||||
}, 30000)
|
||||
test('user can request for website monitoring resource', async () => {
|
||||
await page.goto(`${util.HOME_URL}/enterprise/resources`)
|
||||
await page.waitForSelector('#website-monitoring')
|
||||
await Promise.all([
|
||||
page.waitForNavigation(),
|
||||
page.click('#website-monitoring'),
|
||||
])
|
||||
await page.waitForSelector('#form-section')
|
||||
await page.type('#fullname', util.user.name)
|
||||
await page.type('#email', util.user.email)
|
||||
await page.type('#Phone', util.user.phone)
|
||||
await page.type('#website', util.user.website)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#volume')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#request-resource-btn')
|
||||
// Check if user's email is submitted successfully
|
||||
const emailSubmitted = await page.evaluate(() => document.querySelector('.submitted-email').innerText)
|
||||
expect(emailSubmitted).toBe(util.user.email)
|
||||
}, 30000)
|
||||
test('user can request for speed equals revenue resource', async () => {
|
||||
await page.goto(`${util.HOME_URL}/enterprise/resources`)
|
||||
await page.waitForSelector('#speed-revenue')
|
||||
await Promise.all([
|
||||
page.waitForNavigation(),
|
||||
page.click('#speed-revenue'),
|
||||
])
|
||||
await page.waitForSelector('#form-section')
|
||||
await page.type('#fullname', util.user.name)
|
||||
await page.type('#email', util.user.email)
|
||||
await page.type('#Phone', util.user.phone)
|
||||
await page.type('#website', util.user.website)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#volume')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#request-resource-btn')
|
||||
// Check if user's email is submitted successfully
|
||||
const emailSubmitted = await page.evaluate(() => document.querySelector('.submitted-email').innerText)
|
||||
expect(emailSubmitted).toBe(util.user.email)
|
||||
}, 30000)
|
||||
test('user can request for best practices resource', async () => {
|
||||
await page.goto(`${util.HOME_URL}/enterprise/resources`)
|
||||
await page.waitForSelector('#best-practices')
|
||||
await Promise.all([
|
||||
page.waitForNavigation(),
|
||||
page.click('#best-practices'),
|
||||
])
|
||||
await page.waitForSelector('#form-section')
|
||||
await page.type('#fullname', util.user.name)
|
||||
await page.type('#email', util.user.email)
|
||||
await page.type('#Phone', util.user.phone)
|
||||
await page.type('#website', util.user.website)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#volume')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#request-resource-btn')
|
||||
// Check if user's email is submitted successfully
|
||||
const emailSubmitted = await page.evaluate(() => document.querySelector('.submitted-email').innerText)
|
||||
expect(emailSubmitted).toBe(util.user.email)
|
||||
}, 30000)
|
||||
test('user can request for peak performance resource', async () => {
|
||||
await page.goto(`${util.HOME_URL}/enterprise/resources`)
|
||||
await page.waitForSelector('#peak-performance')
|
||||
await Promise.all([
|
||||
page.waitForNavigation(),
|
||||
page.click('#peak-performance'),
|
||||
])
|
||||
await page.waitForSelector('#form-section')
|
||||
await page.type('#fullname', util.user.name)
|
||||
await page.type('#email', util.user.email)
|
||||
await page.type('#Phone', util.user.phone)
|
||||
await page.type('#website', util.user.website)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#volume')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#request-resource-btn')
|
||||
// Check if user's email is submitted successfully
|
||||
const emailSubmitted = await page.evaluate(() => document.querySelector('.submitted-email').innerText)
|
||||
expect(emailSubmitted).toBe(util.user.email)
|
||||
}, 30000)
|
||||
})
|
||||
@@ -1,3 +0,0 @@
|
||||
const smoketest = require('./smokeTest.test')
|
||||
|
||||
smoketest.smokeTest()
|
||||
4475
smoke-test/package-lock.json
generated
Normal file
4475
smoke-test/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
18
smoke-test/package.json
Normal file
18
smoke-test/package.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "smoke-test",
|
||||
"version": "1.0.0",
|
||||
"description": "Smoke tests for fyipe",
|
||||
"main": "index.test.js",
|
||||
"scripts": {
|
||||
"test": "jest --runInBand ."
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"faker": "^4.1.0",
|
||||
"jest": "^24.7.1",
|
||||
"puppeteer": "^1.17.0",
|
||||
"should": "^13.2.3"
|
||||
}
|
||||
}
|
||||
@@ -1,215 +0,0 @@
|
||||
module.exports = {
|
||||
smokeTest: () => {
|
||||
const faker = require('faker')
|
||||
const puppeteer = require('puppeteer')
|
||||
|
||||
const user = {
|
||||
name: faker.name.findName(),
|
||||
email: faker.internet.email(),
|
||||
website: 'www.testcompanyfyipe.com',
|
||||
company: faker.company.companyName(),
|
||||
companySize: 8,
|
||||
message: faker.company.catchPhraseDescriptor(),
|
||||
}
|
||||
|
||||
let page
|
||||
let browser
|
||||
const baseURL = 'http://localhost:1444'
|
||||
|
||||
// Enable for live viewing of tests.
|
||||
/* beforeAll(async () => {
|
||||
const width = 1200
|
||||
const height = 720
|
||||
browser = await puppeteer.launch(
|
||||
{
|
||||
headless: false,
|
||||
slowMo: 60,
|
||||
arg: [`--window-size=${width},${height}`],
|
||||
},
|
||||
)
|
||||
page = await browser.newPage()
|
||||
await page.setViewport({ width, height })
|
||||
}) */
|
||||
|
||||
// Run this for headless testing with puppeteer.
|
||||
beforeAll(async () => {
|
||||
browser = await puppeteer.launch()
|
||||
page = await browser.newPage()
|
||||
})
|
||||
|
||||
afterAll(() => {
|
||||
browser.close()
|
||||
})
|
||||
|
||||
describe('Request demo', () => {
|
||||
test('user can submit request a demo form', async () => {
|
||||
await page.goto(`${baseURL}/enterprise/demo`)
|
||||
await page.waitForSelector('#form-section')
|
||||
await page.type('#fullname', user.name)
|
||||
await page.type('#email', user.email)
|
||||
await page.type('#website', user.website)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#volume')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.type('#message', user.message)
|
||||
await page.click('#request-demo-btn')
|
||||
await page.waitForSelector('#success')
|
||||
// Check if user's email is submitted successfully
|
||||
const emailSubmitted = await page.evaluate(() => document.querySelector('.submitted-email').innerText)
|
||||
expect(emailSubmitted).toBe(user.email)
|
||||
}, 30000)
|
||||
test('user can request for website monitoring resource', async () => {
|
||||
await page.goto(`${baseURL}/enterprise/resources`)
|
||||
await page.waitForSelector('#website-monitoring')
|
||||
await Promise.all([
|
||||
page.waitForNavigation(),
|
||||
page.click('#website-monitoring'),
|
||||
])
|
||||
await page.waitForSelector('#form-section')
|
||||
await page.type('#fullname', user.name)
|
||||
await page.type('#email', user.email)
|
||||
await page.type('#website', user.website)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#volume')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#request-resource-btn')
|
||||
// Check if user's email is submitted successfully
|
||||
const emailSubmitted = await page.evaluate(() => document.querySelector('.submitted-email').innerText)
|
||||
expect(emailSubmitted).toBe(user.email)
|
||||
}, 30000)
|
||||
test('user can request for speed equals revenue resource', async () => {
|
||||
await page.goto(`${baseURL}/enterprise/resources`)
|
||||
await page.waitForSelector('#speed-revenue')
|
||||
await Promise.all([
|
||||
page.waitForNavigation(),
|
||||
page.click('#speed-revenue'),
|
||||
])
|
||||
await page.waitForSelector('#form-section')
|
||||
await page.type('#fullname', user.name)
|
||||
await page.type('#email', user.email)
|
||||
await page.type('#website', user.website)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#volume')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#request-resource-btn')
|
||||
// Check if user's email is submitted successfully
|
||||
const emailSubmitted = await page.evaluate(() => document.querySelector('.submitted-email').innerText)
|
||||
expect(emailSubmitted).toBe(user.email)
|
||||
}, 30000)
|
||||
test('user can request for best practices resource', async () => {
|
||||
await page.goto(`${baseURL}/enterprise/resources`)
|
||||
await page.waitForSelector('#best-practices')
|
||||
await Promise.all([
|
||||
page.waitForNavigation(),
|
||||
page.click('#best-practices'),
|
||||
])
|
||||
await page.waitForSelector('#form-section')
|
||||
await page.type('#fullname', user.name)
|
||||
await page.type('#email', user.email)
|
||||
await page.type('#website', user.website)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#volume')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#request-resource-btn')
|
||||
// Check if user's email is submitted successfully
|
||||
const emailSubmitted = await page.evaluate(() => document.querySelector('.submitted-email').innerText)
|
||||
expect(emailSubmitted).toBe(user.email)
|
||||
}, 30000)
|
||||
test('user can request for peak performance resource', async () => {
|
||||
await page.goto(`${baseURL}/enterprise/resources`)
|
||||
await page.waitForSelector('#peak-performance')
|
||||
await Promise.all([
|
||||
page.waitForNavigation(),
|
||||
page.click('#peak-performance'),
|
||||
])
|
||||
await page.waitForSelector('#form-section')
|
||||
await page.type('#fullname', user.name)
|
||||
await page.type('#email', user.email)
|
||||
await page.type('#website', user.website)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#volume')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#request-resource-btn')
|
||||
// Check if user's email is submitted successfully
|
||||
const emailSubmitted = await page.evaluate(() => document.querySelector('.submitted-email').innerText)
|
||||
expect(emailSubmitted).toBe(user.email)
|
||||
}, 30000)
|
||||
test('user can signup for a fyipe account and logout', async () => {
|
||||
await page.goto(baseURL)
|
||||
await page.waitForSelector('#create-account-top')
|
||||
await Promise.all([
|
||||
page.waitForNavigation(),
|
||||
page.click('#create-account-top'),
|
||||
])
|
||||
await page.waitForSelector('#main-body')
|
||||
await page.type('#email', user.email)
|
||||
await page.type('#name', user.name)
|
||||
await page.type('#password', user.password)
|
||||
await page.type('#confirmPassword', user.password)
|
||||
await page.click('#create-account-button')
|
||||
await page.waitForSelector('#card-form')
|
||||
await page.type('#cardName', user.name)
|
||||
await page.type('#cardNumber', user.cardNumber)
|
||||
await page.type('#cvv', user.cvv)
|
||||
await page.type('#expiry', user.expiry)
|
||||
await page.type('#address1', user.address1)
|
||||
await page.type('#address2', user.address2)
|
||||
await page.type('#city', user.city)
|
||||
await page.type('#state', user.state)
|
||||
await page.type('#zipCode', user.zipCode)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#create-account-button')
|
||||
await page.waitForSelector('#companyName')
|
||||
await page.type('#companyName', user.company)
|
||||
await page.type('#companyRole', user.companyRole)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#companySize')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.type('#companyPhoneNumber', user.companyPhoneNumber)
|
||||
await page.type('#reference', user.reference)
|
||||
await page.click('#create-account-button')
|
||||
await page.waitForNavigation()
|
||||
await page.click('#profile-menu')
|
||||
await page.click('#logout-button')
|
||||
await page.waitForSelector('#login')
|
||||
}, 60000)
|
||||
test('user can login to and logout of fyipe', async () => {
|
||||
await page.goto(baseURL)
|
||||
await page.waitForSelector('#sign-in')
|
||||
await Promise.all([
|
||||
page.waitForNavigation(),
|
||||
page.click('#sign-in'),
|
||||
])
|
||||
await page.waitFor(5000)
|
||||
await page.waitForSelector('#login')
|
||||
await page.type('#email', user.email)
|
||||
await page.type('#password', user.password)
|
||||
await page.click('#login-button')
|
||||
await page.waitForNavigation()
|
||||
await page.click('#profile-menu')
|
||||
await page.click('#logout-button')
|
||||
await page.waitForSelector('#login')
|
||||
}, 30000)
|
||||
})
|
||||
},
|
||||
}
|
||||
26
smoke-test/status-page.test.js
Normal file
26
smoke-test/status-page.test.js
Normal file
@@ -0,0 +1,26 @@
|
||||
const utils= require('./test-utils');
|
||||
const puppeteer = require('puppeteer');
|
||||
|
||||
var page, browser;
|
||||
|
||||
beforeAll(async () => {
|
||||
browser = await puppeteer.launch(utils.puppeteerLaunchConfig);
|
||||
page = await browser.newPage();
|
||||
})
|
||||
|
||||
afterAll(async () => {
|
||||
await browser.close();
|
||||
})
|
||||
|
||||
describe('Check status-page up', () => {
|
||||
test('should load status page and show login screen', async () => {
|
||||
await page.goto(utils.STATUSPAGE_URL, {
|
||||
waitUntil: 'domcontentloaded'
|
||||
});
|
||||
await page.waitFor(2000);
|
||||
const response = await page.$eval('#login-button > span', (e) => {
|
||||
return e.innerHTML;
|
||||
});
|
||||
expect(response).toBe('Sign in to your account');
|
||||
})
|
||||
})
|
||||
47
smoke-test/test-utils.js
Normal file
47
smoke-test/test-utils.js
Normal file
@@ -0,0 +1,47 @@
|
||||
const faker = require('faker')
|
||||
|
||||
var user = faker.helpers.createCard();
|
||||
user.email = generateRandomBusinessEmail();
|
||||
user.password = generatePassword();
|
||||
user.card = '4111111111111111';
|
||||
user.cvv = '100';
|
||||
user.expiryDate = '12/23';
|
||||
user.message = 'Test message'
|
||||
|
||||
const puppeteerLaunchConfig = {
|
||||
headless: true,
|
||||
args: [
|
||||
'--no-sandbox',
|
||||
'--disable-setuid-sandbox',
|
||||
]
|
||||
}
|
||||
|
||||
const HOME_URL = process.env.HOME_URL || 'http://localhost:1444';
|
||||
const ACCOUNTS_URL = process.env.ACCOUNTS_URL || 'http://localhost:3003';
|
||||
const DASHBOARD_URL = process.env.DASHBOARD_URL || 'http://localhost:3000';
|
||||
const BACKEND_URL = process.env.BACKEND_URL || 'http://localhost:3002';
|
||||
const STATUSPAGE_URL = process.env.STATUSPAGE_URL || 'http://localhost:3006';
|
||||
const APIDOCS_URL = process.env.APIDOCS_URL || 'http://localhost:1445';
|
||||
|
||||
|
||||
function generateRandomBusinessEmail() {
|
||||
return Math.random().toString(36).substring(8) + '@' + Math.random().toString(24).substring(8) + '.com'
|
||||
}
|
||||
function generatePassword() {
|
||||
return Math.random().toString(36).substring(7);
|
||||
}
|
||||
function generateRandomString() {
|
||||
return faker.lorem.word();
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
HOME_URL,
|
||||
ACCOUNTS_URL,
|
||||
DASHBOARD_URL,
|
||||
BACKEND_URL,
|
||||
STATUSPAGE_URL,
|
||||
APIDOCS_URL,
|
||||
user,
|
||||
puppeteerLaunchConfig,
|
||||
generateRandomString
|
||||
}
|
||||
Reference in New Issue
Block a user