From 23d0c8c3173218aa1c30f0a310164ca543de6fdf Mon Sep 17 00:00:00 2001 From: Miguel de Barros Date: Thu, 10 Jun 2021 15:28:12 +0200 Subject: [PATCH 01/19] fix(#2265): validating a mojaloop deployment as described in the documentation is failing - Updates to Mac Setup guide - Replaced replaced step 3 with 4 since Ingress Controller setup is covered by the main guide. - Replaced instructions on Kubernetes for Docker installation with link to official documentation - Updated main deployment guide to reference official instructions on how to install - Ingress Controllers - Admin UI/ Interfaces (i.e. Kubernetes Dashboard, etc) --- deployment-guide/README.md | 143 +++---- deployment-guide/local-setup-mac.md | 13 +- package-lock.json | 600 ++++++++++++++-------------- 3 files changed, 366 insertions(+), 390 deletions(-) diff --git a/deployment-guide/README.md b/deployment-guide/README.md index ec440d4dd..79dc47b2e 100644 --- a/deployment-guide/README.md +++ b/deployment-guide/README.md @@ -4,14 +4,20 @@ The document is intended for an audience with a stable technical knowledge that ## Deployment and Setup -- [Pre-requisites](#1-pre-requisites) -- [Kubernetes](#3-kubernetes) - - [Kubernetes Dashboard](#31-kubernetes-dashboard) -- [Helm](#4-helm) - - [Helm configuration](#41-helm-configuration) -- [Postman](#6-postman) - - [Installing Postman](#61-installing-postman) - - [Setup Postman](#62-setup-postman) +- [Mojaloop Deployment](#mojaloop-deployment) + - [Deployment and Setup](#deployment-and-setup) + - [1. Pre-requisites](#1-pre-requisites) + - [2. Deployment Recommendations](#2-deployment-recommendations) + - [3. Kubernetes](#3-kubernetes) + - [3.1. Kubernetes Admin Interfaces](#31-kubernetes-admin-interfaces) + - [4. Helm](#4-helm) + - [4.1. Helm configuration](#41-helm-configuration) + - [5. Mojaloop](#5-mojaloop) + - [5.1. Mojaloop Helm Deployment](#51-mojaloop-helm-deployment) + - [5.2. Verifying Mojaloop Deployment](#52-verifying-mojaloop-deployment) + - [6. Postman](#6-postman) + - [6.1. Installing Postman](#61-installing-postman) + - [6.2. Setup Postman](#62-setup-postman) ### 1. Pre-requisites @@ -89,60 +95,37 @@ The following are Kubernetes concepts used within the project. An understanding Insure **kubectl** is installed. A complete set of installation instruction are available [here](https://kubernetes.io/docs/tasks/tools/install-kubectl/). -#### 3.1. Kubernetes Dashboard: +#### 3.1. Kubernetes Admin Interfaces -1. Kubernetes Dashboard roles, services & deployment. +1. Kubernetes Dashboards - Install for Dashboard using Helm (not needed if **MicroK8s** is installed): [kubernetes-dashboard](https://github.com/helm/charts/tree/master/stable/kubernetes-dashboard) + The official Kubernetes Web UI Admin interface. - **IMPORTANT:** Always verify the current [kubernetes-dashboard](https://github.com/kubernetes/dashboard) yaml file is still correct as used in the below command. - ```bash - kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml - ``` - - If you have installed MicroK8s, **enable the MicroK8s** dashboard; - ```bash - microk8s.enable dashboard - ``` - **Remember** to prefix all **kubectl** commands with **microk8s** if you opted not to create an alias. + Visit the following link for installation instructions (not needed if **MicroK8s** is installed): [Web UI (Dashboard) Installation Instructions](https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/). -2. Verify Kubernetes Dashboard. _Windows replace `grep` with `findstr`_; - ```bash - kubectl get pod --namespace=kube-system |grep dashboard - ``` + **IMPORTANT:** Ensure (not needed if **MicroK8s** is installed) you configure RBAC roles and create an associated service account, refer to the following example on how to create a sample user for testing purposes only: [Creating sample user](https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md). + + If you have installed MicroK8s, **enable the MicroK8s** dashboard: -3. Start proxy for local UI in new terminal; ```bash - kubectl proxy ui + microk8s.enable dashboard ``` -4. Open URI in default browser: - - ``` - http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/ - ``` + Refer to the following link for more information: [Add-on: dashboard](https://microk8s.io/docs/addon-dashboard). - Select **Token**. Generate a token to use there by: _Windows replace `grep` with `findstr`_ - - ```bash - kubectl describe secret kubernetes-dashboard --namespace=kube-system - ``` + **Remember** to prefix all **kubectl** commands with **microk8s** if you opted not to create an alias. - The token to use is shown on the last line of the output of that command; - - ```bash - kubectl -n kube-system describe secrets/kubernetes-dashboard-token-btbwf - ``` +2. k8sLens - The **{kubernetes-dashboard-token-btbwf}** is retrieved from the output in the previous step. For more information on generating the token, follow the **Authentication** link in the window. + A local desktop GUI based kubectl alternative which is easy to install and setup. -![kubernetes-dashboard](./assets/diagrams/deployment/kubernetesDashboard.png) + Visit the following link for more information: . ### 4. Helm Please review [Mojaloop Helm Chart](../repositories/helm.md) to understand the relationships between the deployed Mojaloop helm charts. -Refer to the official documentation on how to install the latest version of Helm v3: https://helm.sh/docs/intro/install/ +Refer to the official documentation on how to install the latest version of Helm v3: Refer to the following document if are using Helm v2: [Deployment with (Deprecated) Helm v2](./helm-legacy-deployment.md) @@ -151,29 +134,24 @@ Refer to the [Helm v2 to v3 Migration Guide](./helm-legacy-migration.md) if you #### 4.1. Helm configuration 1. Add mojaloop repo to your Helm config: + ```bash helm repo add mojaloop https://mojaloop.io/helm/repo/ ``` + If the repo already exists, substitute 'add' with 'apply' in the above command. -2. Add the additional dependency Helm repositories. This is needed to resolve Helm Chart dependencies required by Mojaloop charts. - ```bash - helm repo add stable https://charts.helm.sh/stable - helm repo add incubator https://charts.helm.sh/incubator - helm repo add kiwigrid https://kiwigrid.github.io - helm repo add elastic https://helm.elastic.co - helm repo add bitnami https://charts.bitnami.com/bitnami - ``` +2. Update helm repositories: -3. Update helm repositories: ```bash helm repo update ``` -4. Optionally Install nginx-ingress for load balancing & external access: - ```bash - helm --namespace kube-public install stable/nginx-ingress - ``` +3. Install your preferred Ingress Controller for load-balancing and external access: + +Refer to the following documentation to install the Nginx-Ingress Controller: https://kubernetes.github.io/ingress-nginx/deploy/#using-helm. + +List of alternative Ingress Controllers: https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/. ### 5. Mojaloop @@ -182,23 +160,29 @@ Refer to the [Helm v2 to v3 Migration Guide](./helm-legacy-migration.md) if you 1. Install Mojaloop: Default installation: + ```bash - helm --namespace demo install moja mojaloop/mojaloop + helm --namespace demo install --create-namespace moja mojaloop/mojaloop ``` + _Note: The `--create-namespace` flag is only necessary if the `demo` namespace does not exist. You can alternatively create it using the following command: `kubectl create namespace demo`._ + Version specific installation: + ```bash - helm --namespace demo install moja mojaloop/mojaloop --version {version} + helm --namespace demo install --create-namespace moja mojaloop/mojaloop --version {version} ``` - + List of available versions: + ```bash helm search repo -l mojaloop/mojaloop ``` - + Custom configured installation: + ```bash - helm --namespace demo install moja mojaloop/mojaloop -f {custom-values.yaml} + helm --namespace demo install --create-namespace moja mojaloop/mojaloop -f {custom-values.yaml} ``` _Note: Download and customize the [values.yaml](https://github.com/mojaloop/helm/blob/master/mojaloop/values.yaml). Also ensure that you are using the value.yaml from the correct version which can be found via [Helm Releases](https://github.com/mojaloop/helm/releases)._ @@ -208,42 +192,37 @@ Refer to the [Helm v2 to v3 Migration Guide](./helm-legacy-migration.md) if you 1. Update your /etc/hosts for local deployment: _Note: This is only applicable for local deployments, and is not needed if custom DNS or ingress rules are configured in a customized [values.yaml](https://github.com/mojaloop/helm/blob/master/mojaloop/values.yaml)_. - + ```bash vi /etc/hosts ``` + _Windows the file can be updated in notepad - need to open with Administrative privileges. File location `C:\Windows\System32\drivers\etc\hosts`_. - + Include the following lines (_or alternatively combine them_) to the host config. The below required config is applicable to Helm release >= versions 6.2.2 for Mojaloop API Services; + ```text + # Mojaloop Demo 127.0.0.1 central-ledger.local central-settlement.local ml-api-adapter.local account-lookup-service.local account-lookup-service-admin.local quoting-service.local moja-simulator.local central-ledger central-settlement ml-api-adapter account-lookup-service account-lookup-service-admin quoting-service simulator host.docker.internal transaction-request-service.local ``` - - The below optional config is applicable to Helm release >= versions 6.2.2 for Internal components, please include the following in the host configuration. - ```text - 127.0.0.1 forensic-logging-sidecar.local central-kms.local central-event-processor.local email-notifier.local - ``` - - For Helm legacy releases prior to versions 6.2.2, please include the following in the host configuration. - ```text - 127.0.0.1 interop-switch.local central-end-user-registry.local central-directory.local central-hub.local - ``` - + 2. Test system health in your browser after installation. This will only work if you have an active helm chart deployment running. - + _Note: The examples below are only applicable to a local deployment. The entries should match the DNS values or ingress rules as configured in the [values.yaml](https://github.com/mojaloop/helm/blob/master/mojaloop/values.yaml) or otherwise matching any custom ingress rules configured_. - + **ml-api-adapter** health test: - ``` + + ```text http://ml-api-adapter.local/health ``` **central-ledger** health test: - ``` + + ```text http://central-ledger.local/health - ``` + ``` ### 6. Postman @@ -259,4 +238,4 @@ Grab the latest collections & environment files from [Mojaloop Postman Github re After an initial setup or new deployment, the [OSS New Deployment FSP Setup section](../contributors-guide/tools-and-technologies/automated-testing.md) needs to be completed. This will seed the Database with the required enumerations and static data to enable the sucessful execution of any manual or automation tests by the other collections. -Refer to the [QA and Regression Testing in Mojaloop](../contributors-guide/tools-and-technologies/automated-testing.md) documentation for more complete information to complement your testing requirements. +Refer to the [QA and Regression Testing in Mojaloop](../contributors-guide/tools-and-technologies/automated-testing.md) documentation for more complete information to complement your testing requirements. diff --git a/deployment-guide/local-setup-mac.md b/deployment-guide/local-setup-mac.md index 125996171..45f1f5579 100644 --- a/deployment-guide/local-setup-mac.md +++ b/deployment-guide/local-setup-mac.md @@ -35,7 +35,7 @@ The following are Kubernetes concepts used within the project. An understanding ### 1.1. Kubernetes Installation with Docker -* **kubectl** Complete set of installation instruction are available [here](https://kubernetes.io/docs/tasks/tools/install-kubectl/) +* **kubectl** Complete set of installation instruction are available [here](https://kubernetes.io/docs/tasks/tools/install-kubectl/). ```bash brew install kubernetes-cli @@ -60,7 +60,7 @@ To install Kubernetes with Docker, follow the steps below; * Select **Enable Kubernetes** tick box * Make sure **Kubernetes** is selected * Click **Apply** - * Click **Install** on the confirmation tab. + * Click **Install** on the confirmation tab. * The option is available to wait for completion or run as a background task. ![Kubernetes Install with Docker 2](./assets/diagrams/deployment/KubernetesInstallWithDocker-2.png) @@ -86,11 +86,4 @@ To install Kubernetes with Docker, follow the steps below; kubectx docker-for-desktop ``` -3. Install an Ingress Controller - -Install nginx-ingress for load balancing & external access: - ```bash - helm --namespace kube-public install stable/nginx-ingress - ``` - -4. Continue setup and configuration from the Kubernetes Dashboard section in the [Mojaloop's deployment guide](./README.md#31-kubernetes-dashboard) document. +3. Continue setup and configuration from the Kubernetes Dashboard section in the [Mojaloop's deployment guide](./README.md#31-kubernetes-dashboard) document. diff --git a/package-lock.json b/package-lock.json index 2fd7458b0..00a952012 100644 --- a/package-lock.json +++ b/package-lock.json @@ -259,7 +259,8 @@ "acorn": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", - "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=" + "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=", + "optional": true }, "acorn-globals": { "version": "1.0.9", @@ -1547,7 +1548,8 @@ "cssom": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha1-nxJ29bK0Y/IRTT8sdSUK+MGjb0o=" + "integrity": "sha1-nxJ29bK0Y/IRTT8sdSUK+MGjb0o=", + "optional": true }, "cssstyle": { "version": "0.2.37", @@ -4056,7 +4058,7 @@ "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=" }, "json-stable-stringify": { "version": "1.0.1", @@ -5664,7 +5666,7 @@ "dependencies": { "JSONStream": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", + "resolved": false, "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", "requires": { "jsonparse": "^1.2.0", @@ -5673,19 +5675,19 @@ "dependencies": { "jsonparse": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "resolved": false, "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" }, "through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": false, "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" } } }, "abbrev": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", + "resolved": false, "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=" }, "agent-base": { @@ -5706,37 +5708,37 @@ }, "ansi-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "resolved": false, "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "ansicolors": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "resolved": false, "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=" }, "ansistyles": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ansistyles/-/ansistyles-0.1.3.tgz", + "resolved": false, "integrity": "sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk=" }, "aproba": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz", + "resolved": false, "integrity": "sha512-ZpYajIfO0j2cOFTO955KUMIKNmj6zhX8kVztMAxFsDaMwz+9Z9SV0uou2pC9HJqcfpffOsjnbrDMvkNy+9RXPw==" }, "archy": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "resolved": false, "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" }, "bluebird": { "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "resolved": false, "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" }, "cacache": { "version": "9.2.9", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-9.2.9.tgz", + "resolved": false, "integrity": "sha512-ghg1j5OyTJ6qsrqU++dN23QiTDxb5AZCFGsF3oB+v9v/gY+F4X8L/0gdQMEjd+8Ot3D29M2etX5PKozHRn2JQw==", "requires": { "bluebird": "^3.5.0", @@ -5756,17 +5758,17 @@ }, "call-limit": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/call-limit/-/call-limit-1.1.0.tgz", + "resolved": false, "integrity": "sha1-b9YbA/PaQqLNDsK2DwK9DnGZH+o=" }, "chownr": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "resolved": false, "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" }, "cmd-shim": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-2.0.2.tgz", + "resolved": false, "integrity": "sha1-b8vamUg6j9FdfTChlspp1oii79s=", "requires": { "graceful-fs": "^4.1.2", @@ -5775,7 +5777,7 @@ }, "columnify": { "version": "1.5.4", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", + "resolved": false, "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", "requires": { "strip-ansi": "^3.0.0", @@ -5784,7 +5786,7 @@ "dependencies": { "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": false, "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { "ansi-regex": "^2.0.0" @@ -5792,14 +5794,14 @@ "dependencies": { "ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "resolved": false, "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" } } }, "wcwidth": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "resolved": false, "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", "requires": { "defaults": "^1.0.3" @@ -5807,7 +5809,7 @@ "dependencies": { "defaults": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "resolved": false, "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "requires": { "clone": "^1.0.2" @@ -5815,7 +5817,7 @@ "dependencies": { "clone": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "resolved": false, "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=" } } @@ -5826,7 +5828,7 @@ }, "config-chain": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz", + "resolved": false, "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", "requires": { "ini": "^1.3.4", @@ -5835,7 +5837,7 @@ "dependencies": { "proto-list": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "resolved": false, "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" } } @@ -5850,17 +5852,17 @@ }, "debuglog": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "resolved": false, "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=" }, "detect-indent": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "resolved": false, "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=" }, "dezalgo": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "resolved": false, "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", "requires": { "asap": "^2.0.0", @@ -5869,19 +5871,19 @@ "dependencies": { "asap": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.5.tgz", + "resolved": false, "integrity": "sha1-UidltQw1EEkOUtfc/ghe+bqWlY8=" } } }, "editor": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/editor/-/editor-1.0.0.tgz", + "resolved": false, "integrity": "sha1-YMf4e9YrzGqJT6jM1q+3gjok90I=" }, "fs-vacuum": { "version": "1.2.10", - "resolved": "https://registry.npmjs.org/fs-vacuum/-/fs-vacuum-1.2.10.tgz", + "resolved": false, "integrity": "sha1-t2Kb7AekAxolSP35n17PHMizHjY=", "requires": { "graceful-fs": "^4.1.2", @@ -5891,7 +5893,7 @@ }, "fs-write-stream-atomic": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "resolved": false, "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "requires": { "graceful-fs": "^4.1.2", @@ -5902,7 +5904,7 @@ }, "fstream-npm": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/fstream-npm/-/fstream-npm-1.2.1.tgz", + "resolved": false, "integrity": "sha512-iBHpm/LmD1qw0TlHMAqVd9rwdU6M+EHRUnPkXpRi5G/Hf0FIFH+oZFryodAU2MFNfGRh/CzhUFlMKV3pdeOTDw==", "requires": { "fstream-ignore": "^1.0.0", @@ -5911,7 +5913,7 @@ "dependencies": { "fstream-ignore": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", + "resolved": false, "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", "requires": { "fstream": "^1.0.0", @@ -5921,7 +5923,7 @@ "dependencies": { "minimatch": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "resolved": false, "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { "brace-expansion": "^1.1.7" @@ -5929,7 +5931,7 @@ "dependencies": { "brace-expansion": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "resolved": false, "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "requires": { "balanced-match": "^1.0.0", @@ -5938,12 +5940,12 @@ "dependencies": { "balanced-match": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "resolved": false, "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "resolved": false, "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" } } @@ -5956,7 +5958,7 @@ }, "glob": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "resolved": false, "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { "fs.realpath": "^1.0.0", @@ -5969,12 +5971,12 @@ "dependencies": { "fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "resolved": false, "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "minimatch": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "resolved": false, "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { "brace-expansion": "^1.1.7" @@ -5982,7 +5984,7 @@ "dependencies": { "brace-expansion": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "resolved": false, "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "requires": { "balanced-match": "^1.0.0", @@ -5991,12 +5993,12 @@ "dependencies": { "balanced-match": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "resolved": false, "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "resolved": false, "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" } } @@ -6005,24 +6007,24 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "resolved": false, "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" } } }, "graceful-fs": { "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "resolved": false, "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" }, "has-unicode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "resolved": false, "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, "hosted-git-info": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "resolved": false, "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==" }, "http-cache-semantics": { @@ -6050,17 +6052,17 @@ }, "iferr": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "resolved": false, "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" }, "imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "resolved": false, "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, "inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "resolved": false, "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { "once": "^1.3.0", @@ -6069,17 +6071,17 @@ }, "inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "resolved": false, "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ini": { "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "resolved": false, "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=" }, "init-package-json": { "version": "1.10.1", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.10.1.tgz", + "resolved": false, "integrity": "sha1-zYc6FneWvvuZYSsodioLY5P9j2o=", "requires": { "glob": "^7.1.1", @@ -6094,7 +6096,7 @@ "dependencies": { "promzard": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", + "resolved": false, "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=", "requires": { "read": "1" @@ -6104,22 +6106,22 @@ }, "lazy-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazy-property/-/lazy-property-1.0.0.tgz", + "resolved": false, "integrity": "sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc=" }, "lockfile": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.3.tgz", + "resolved": false, "integrity": "sha1-Jjj8OaAzHpysGgS3F5mTHJxQ33k=" }, "lodash._baseindexof": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz", + "resolved": false, "integrity": "sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw=" }, "lodash._baseuniq": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz", + "resolved": false, "integrity": "sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg=", "requires": { "lodash._createset": "~4.0.0", @@ -6128,29 +6130,29 @@ "dependencies": { "lodash._createset": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/lodash._createset/-/lodash._createset-4.0.3.tgz", + "resolved": false, "integrity": "sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY=" }, "lodash._root": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "resolved": false, "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=" } } }, "lodash._bindcallback": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "resolved": false, "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=" }, "lodash._cacheindexof": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz", + "resolved": false, "integrity": "sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI=" }, "lodash._createcache": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash._createcache/-/lodash._createcache-3.1.2.tgz", + "resolved": false, "integrity": "sha1-VtagZAF2JeeevKa4AY4XRAvc8JM=", "requires": { "lodash._getnative": "^3.0.0" @@ -6158,37 +6160,37 @@ }, "lodash._getnative": { "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "resolved": false, "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" }, "lodash.clonedeep": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "resolved": false, "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" }, "lodash.restparam": { "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "resolved": false, "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=" }, "lodash.union": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "resolved": false, "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" }, "lodash.uniq": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "resolved": false, "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, "lodash.without": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.without/-/lodash.without-4.4.0.tgz", + "resolved": false, "integrity": "sha1-PNRXSgC2e643OpS3SHcmQFB7eqw=" }, "lru-cache": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "resolved": false, "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", "requires": { "pseudomap": "^1.0.2", @@ -6197,12 +6199,12 @@ "dependencies": { "pseudomap": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "resolved": false, "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "yallist": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "resolved": false, "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" } } @@ -6314,7 +6316,7 @@ }, "mississippi": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-1.3.0.tgz", + "resolved": false, "integrity": "sha1-0gFYPrEjJ+PFwWQqQEqcrPlONPU=", "requires": { "concat-stream": "^1.5.0", @@ -6331,7 +6333,7 @@ "dependencies": { "concat-stream": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "resolved": false, "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", "requires": { "inherits": "^2.0.3", @@ -6341,14 +6343,14 @@ "dependencies": { "typedarray": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "resolved": false, "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" } } }, "duplexify": { "version": "3.5.0", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz", + "resolved": false, "integrity": "sha1-GqdzAC4VeEV+nZ1KULDMquvL1gQ=", "requires": { "end-of-stream": "1.0.0", @@ -6359,7 +6361,7 @@ "dependencies": { "end-of-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz", + "resolved": false, "integrity": "sha1-1FlucCc0qT5A6a+GQxnqvZn/Lw4=", "requires": { "once": "~1.3.0" @@ -6367,7 +6369,7 @@ "dependencies": { "once": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "resolved": false, "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", "requires": { "wrappy": "1" @@ -6377,14 +6379,14 @@ }, "stream-shift": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "resolved": false, "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" } } }, "end-of-stream": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", + "resolved": false, "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", "requires": { "once": "^1.4.0" @@ -6392,7 +6394,7 @@ }, "flush-write-stream": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz", + "resolved": false, "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=", "requires": { "inherits": "^2.0.1", @@ -6401,7 +6403,7 @@ }, "from2": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "resolved": false, "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "requires": { "inherits": "^2.0.1", @@ -6410,7 +6412,7 @@ }, "parallel-transform": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "resolved": false, "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "requires": { "cyclist": "~0.2.2", @@ -6420,14 +6422,14 @@ "dependencies": { "cyclist": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "resolved": false, "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=" } } }, "pump": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.2.tgz", + "resolved": false, "integrity": "sha1-Oz7mUS+U8OV1U4wXmV+fFpkKXVE=", "requires": { "end-of-stream": "^1.1.0", @@ -6436,7 +6438,7 @@ }, "pumpify": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.3.5.tgz", + "resolved": false, "integrity": "sha1-G2ccYZlAq8rqwK0OOjwWS+dgmTs=", "requires": { "duplexify": "^3.1.2", @@ -6446,7 +6448,7 @@ }, "stream-each": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.0.tgz", + "resolved": false, "integrity": "sha1-HpXUdXP1gNgU3A/4zQ9m8c5TyZE=", "requires": { "end-of-stream": "^1.1.0", @@ -6455,14 +6457,14 @@ "dependencies": { "stream-shift": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "resolved": false, "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" } } }, "through2": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "resolved": false, "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "requires": { "readable-stream": "^2.1.5", @@ -6471,7 +6473,7 @@ "dependencies": { "xtend": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "resolved": false, "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" } } @@ -6488,7 +6490,7 @@ }, "move-concurrently": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "resolved": false, "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "requires": { "aproba": "^1.1.1", @@ -6501,7 +6503,7 @@ "dependencies": { "run-queue": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "resolved": false, "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "requires": { "aproba": "^1.1.1" @@ -6531,7 +6533,7 @@ "dependencies": { "nopt": { "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "resolved": false, "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "requires": { "abbrev": "1" @@ -6541,7 +6543,7 @@ }, "nopt": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "resolved": false, "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "requires": { "abbrev": "1", @@ -6550,7 +6552,7 @@ }, "normalize-package-data": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "resolved": false, "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "requires": { "hosted-git-info": "^2.1.4", @@ -6561,7 +6563,7 @@ "dependencies": { "is-builtin-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "resolved": false, "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "requires": { "builtin-modules": "^1.0.0" @@ -6569,7 +6571,7 @@ "dependencies": { "builtin-modules": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "resolved": false, "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" } } @@ -6578,12 +6580,12 @@ }, "npm-cache-filename": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz", + "resolved": false, "integrity": "sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE=" }, "npm-install-checks": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-3.0.0.tgz", + "resolved": false, "integrity": "sha1-1K7N/VGlPjcjt7L5Oy7ijjB7wNc=", "requires": { "semver": "^2.3.0 || 3.x || 4 || 5" @@ -6591,7 +6593,7 @@ }, "npm-package-arg": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-5.1.2.tgz", + "resolved": false, "integrity": "sha512-wJBsrf0qpypPT7A0LART18hCdyhpCMxeTtcb0X4IZO2jsP6Om7EHN1d9KSKiqD+KVH030RVNpWS9thk+pb7wzA==", "requires": { "hosted-git-info": "^2.4.2", @@ -6602,7 +6604,7 @@ }, "npm-registry-client": { "version": "8.4.0", - "resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-8.4.0.tgz", + "resolved": false, "integrity": "sha512-PVNfqq0lyRdFnE//nDmn3CC9uqTsr8Bya9KPLIevlXMfkP0m4RpCVyFFk0W1Gfx436kKwyhLA6J+lV+rgR81gQ==", "requires": { "concat-stream": "^1.5.2", @@ -6620,7 +6622,7 @@ "dependencies": { "concat-stream": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "resolved": false, "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", "requires": { "inherits": "^2.0.3", @@ -6630,7 +6632,7 @@ "dependencies": { "typedarray": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "resolved": false, "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" } } @@ -6639,12 +6641,12 @@ }, "npm-user-validate": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-1.0.0.tgz", + "resolved": false, "integrity": "sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE=" }, "npmlog": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "resolved": false, "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "requires": { "are-we-there-yet": "~1.1.2", @@ -6655,7 +6657,7 @@ "dependencies": { "are-we-there-yet": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "resolved": false, "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", "requires": { "delegates": "^1.0.0", @@ -6664,19 +6666,19 @@ "dependencies": { "delegates": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "resolved": false, "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" } } }, "console-control-strings": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "resolved": false, "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "gauge": { "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "resolved": false, "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "requires": { "aproba": "^1.0.3", @@ -6691,17 +6693,17 @@ "dependencies": { "object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "resolved": false, "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "signal-exit": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "resolved": false, "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "string-width": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "resolved": false, "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { "code-point-at": "^1.0.0", @@ -6711,12 +6713,12 @@ "dependencies": { "code-point-at": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "resolved": false, "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "is-fullwidth-code-point": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "resolved": false, "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { "number-is-nan": "^1.0.0" @@ -6724,7 +6726,7 @@ "dependencies": { "number-is-nan": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "resolved": false, "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" } } @@ -6733,7 +6735,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": false, "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { "ansi-regex": "^2.0.0" @@ -6741,14 +6743,14 @@ "dependencies": { "ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "resolved": false, "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" } } }, "wide-align": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "resolved": false, "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", "requires": { "string-width": "^1.0.2" @@ -6758,14 +6760,14 @@ }, "set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "resolved": false, "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" } } }, "once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "resolved": false, "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { "wrappy": "1" @@ -6773,12 +6775,12 @@ }, "opener": { "version": "1.4.3", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz", + "resolved": false, "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=" }, "osenv": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "resolved": false, "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", "requires": { "os-homedir": "^1.0.0", @@ -6787,19 +6789,19 @@ "dependencies": { "os-homedir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "resolved": false, "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "resolved": false, "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" } } }, "pacote": { "version": "2.7.38", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-2.7.38.tgz", + "resolved": false, "integrity": "sha512-XxHUyHQB7QCVBxoXeVu0yKxT+2PvJucsc0+1E+6f95lMUxEAYERgSAc71ckYXrYr35Ew3xFU/LrhdIK21GQFFA==", "requires": { "bluebird": "^3.5.0", @@ -6827,7 +6829,7 @@ "dependencies": { "minimatch": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "resolved": false, "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { "brace-expansion": "^1.1.7" @@ -6835,7 +6837,7 @@ "dependencies": { "brace-expansion": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "resolved": false, "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "requires": { "balanced-match": "^1.0.0", @@ -6844,12 +6846,12 @@ "dependencies": { "balanced-match": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "resolved": false, "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "resolved": false, "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" } } @@ -6858,7 +6860,7 @@ }, "npm-pick-manifest": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-1.0.4.tgz", + "resolved": false, "integrity": "sha512-MKxNdeyOZysPRTTbHtW0M5Fw38Jo/3ARsoGw5qjCfS+XGjvNB/Gb4qtAZUFmKPM2mVum+eX559eHvKywU856BQ==", "requires": { "npm-package-arg": "^5.1.2", @@ -6867,7 +6869,7 @@ }, "promise-retry": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", + "resolved": false, "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", "requires": { "err-code": "^1.0.0", @@ -6876,14 +6878,14 @@ "dependencies": { "err-code": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", + "resolved": false, "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=" } } }, "protoduck": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-4.0.0.tgz", + "resolved": false, "integrity": "sha1-/kh02MeRM2bP2erRJFOiLNNlf44=", "requires": { "genfun": "^4.0.1" @@ -6891,14 +6893,14 @@ "dependencies": { "genfun": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/genfun/-/genfun-4.0.1.tgz", + "resolved": false, "integrity": "sha1-7RAEHy5KfxsKOEZtF6XD4n3x38E=" } } }, "tar-stream": { "version": "1.5.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz", + "resolved": false, "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=", "requires": { "bl": "^1.0.0", @@ -6909,7 +6911,7 @@ "dependencies": { "bl": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", + "resolved": false, "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", "requires": { "readable-stream": "^2.0.5" @@ -6917,7 +6919,7 @@ }, "end-of-stream": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", + "resolved": false, "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", "requires": { "once": "^1.4.0" @@ -6925,7 +6927,7 @@ }, "xtend": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "resolved": false, "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" } } @@ -6934,12 +6936,12 @@ }, "path-is-inside": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "resolved": false, "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" }, "promise-inflight": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "resolved": false, "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" }, "pump": { @@ -6953,7 +6955,7 @@ }, "read": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "resolved": false, "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", "requires": { "mute-stream": "~0.0.4" @@ -6961,14 +6963,14 @@ "dependencies": { "mute-stream": { "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "resolved": false, "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" } } }, "read-cmd-shim": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz", + "resolved": false, "integrity": "sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs=", "requires": { "graceful-fs": "^4.1.2" @@ -6976,7 +6978,7 @@ }, "read-installed": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/read-installed/-/read-installed-4.0.3.tgz", + "resolved": false, "integrity": "sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc=", "requires": { "debuglog": "^1.0.1", @@ -6990,14 +6992,14 @@ "dependencies": { "util-extend": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", + "resolved": false, "integrity": "sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=" } } }, "read-package-json": { "version": "2.0.9", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.0.9.tgz", + "resolved": false, "integrity": "sha512-vuV8p921IgyelL4UOKv3FsRuRZSaRn30HanLAOKargsr8TbBEq+I3MgloSRXYuKhNdYP1wlEGilMWAIayA2RFg==", "requires": { "glob": "^7.1.1", @@ -7008,7 +7010,7 @@ "dependencies": { "json-parse-helpfulerror": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz", + "resolved": false, "integrity": "sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=", "requires": { "jju": "^1.1.0" @@ -7016,7 +7018,7 @@ "dependencies": { "jju": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jju/-/jju-1.3.0.tgz", + "resolved": false, "integrity": "sha1-2t2e8BkkvHKLA/L3l5vb1i96Kqo=" } } @@ -7025,7 +7027,7 @@ }, "read-package-tree": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.1.6.tgz", + "resolved": false, "integrity": "sha512-FCX1aT3GWyY658wzDICef4p+n0dB+ENRct8E/Qyvppj6xVpOYerBHfUu7OP5Rt1/393Tdglguf5ju5DEX4wZNg==", "requires": { "debuglog": "^1.0.1", @@ -7037,7 +7039,7 @@ }, "readable-stream": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.2.tgz", + "resolved": false, "integrity": "sha1-WgTfBeT1f+Pw3Gj90R3FyXx+b00=", "requires": { "core-util-is": "~1.0.0", @@ -7051,22 +7053,22 @@ "dependencies": { "core-util-is": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "resolved": false, "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "resolved": false, "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "process-nextick-args": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "resolved": false, "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, "string_decoder": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "resolved": false, "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "requires": { "safe-buffer": "~5.1.0" @@ -7074,14 +7076,14 @@ }, "util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "resolved": false, "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" } } }, "readdir-scoped-modules": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz", + "resolved": false, "integrity": "sha1-n6+jfShr5dksuuve4DDcm19AZ0c=", "requires": { "debuglog": "^1.0.1", @@ -7101,7 +7103,7 @@ }, "request": { "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "resolved": false, "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", "requires": { "aws-sign2": "~0.6.0", @@ -7130,22 +7132,22 @@ "dependencies": { "aws-sign2": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "resolved": false, "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" }, "aws4": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "resolved": false, "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" }, "caseless": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "resolved": false, "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "combined-stream": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "resolved": false, "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", "requires": { "delayed-stream": "~1.0.0" @@ -7153,24 +7155,24 @@ "dependencies": { "delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "resolved": false, "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" } } }, "extend": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "resolved": false, "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" }, "forever-agent": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "resolved": false, "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "resolved": false, "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", "requires": { "asynckit": "^0.4.0", @@ -7180,14 +7182,14 @@ "dependencies": { "asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "resolved": false, "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" } } }, "har-validator": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "resolved": false, "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", "requires": { "ajv": "^4.9.1", @@ -7196,7 +7198,7 @@ "dependencies": { "ajv": { "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "resolved": false, "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", "requires": { "co": "^4.6.0", @@ -7205,12 +7207,12 @@ "dependencies": { "co": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "resolved": false, "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, "json-stable-stringify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "resolved": false, "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "requires": { "jsonify": "~0.0.0" @@ -7218,7 +7220,7 @@ "dependencies": { "jsonify": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "resolved": false, "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" } } @@ -7227,14 +7229,14 @@ }, "har-schema": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "resolved": false, "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" } } }, "hawk": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "resolved": false, "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", "requires": { "boom": "2.x.x", @@ -7245,7 +7247,7 @@ "dependencies": { "boom": { "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "resolved": false, "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "requires": { "hoek": "2.x.x" @@ -7253,7 +7255,7 @@ }, "cryptiles": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "resolved": false, "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "requires": { "boom": "2.x.x" @@ -7261,12 +7263,12 @@ }, "hoek": { "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "resolved": false, "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" }, "sntp": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "resolved": false, "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", "requires": { "hoek": "2.x.x" @@ -7276,7 +7278,7 @@ }, "http-signature": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "resolved": false, "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", "requires": { "assert-plus": "^0.2.0", @@ -7286,12 +7288,12 @@ "dependencies": { "assert-plus": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "resolved": false, "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" }, "jsprim": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", + "resolved": false, "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", "requires": { "assert-plus": "1.0.0", @@ -7302,22 +7304,22 @@ "dependencies": { "assert-plus": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "resolved": false, "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "extsprintf": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "resolved": false, "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=" }, "json-schema": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "resolved": false, "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "verror": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "resolved": false, "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", "requires": { "extsprintf": "1.0.2" @@ -7329,22 +7331,22 @@ }, "is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "resolved": false, "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "isstream": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "resolved": false, "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "json-stringify-safe": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "resolved": false, "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "mime-types": { "version": "2.1.15", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", + "resolved": false, "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", "requires": { "mime-db": "~1.27.0" @@ -7352,34 +7354,34 @@ "dependencies": { "mime-db": { "version": "1.27.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", + "resolved": false, "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=" } } }, "oauth-sign": { "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "resolved": false, "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" }, "performance-now": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "resolved": false, "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" }, "qs": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "resolved": false, "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" }, "stringstream": { "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "resolved": false, "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" }, "tough-cookie": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "resolved": false, "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", "requires": { "punycode": "^1.4.1" @@ -7387,14 +7389,14 @@ "dependencies": { "punycode": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "resolved": false, "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" } } }, "tunnel-agent": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "resolved": false, "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { "safe-buffer": "^5.0.1" @@ -7404,12 +7406,12 @@ }, "retry": { "version": "0.10.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "resolved": false, "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=" }, "rimraf": { "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "resolved": false, "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", "requires": { "glob": "^7.0.5" @@ -7417,17 +7419,17 @@ }, "safe-buffer": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "resolved": false, "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, "semver": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "resolved": false, "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" }, "sha": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/sha/-/sha-2.0.1.tgz", + "resolved": false, "integrity": "sha1-YDCCL70smCOUn49y7WQR7lzyWq4=", "requires": { "graceful-fs": "^4.1.2", @@ -7436,7 +7438,7 @@ }, "slide": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "resolved": false, "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" }, "smart-buffer": { @@ -7464,12 +7466,12 @@ }, "sorted-object": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/sorted-object/-/sorted-object-2.0.1.tgz", + "resolved": false, "integrity": "sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw=" }, "sorted-union-stream": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz", + "resolved": false, "integrity": "sha1-x3lMfgd4gAUv9xqNSi27Sppjisc=", "requires": { "from2": "^1.3.0", @@ -7478,7 +7480,7 @@ "dependencies": { "from2": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-1.3.0.tgz", + "resolved": false, "integrity": "sha1-iEE7qqX5pZfP3pIh2GmGzTwGHf0=", "requires": { "inherits": "~2.0.1", @@ -7487,7 +7489,7 @@ "dependencies": { "readable-stream": { "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": false, "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "requires": { "core-util-is": "~1.0.0", @@ -7498,17 +7500,17 @@ "dependencies": { "core-util-is": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "resolved": false, "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "isarray": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "resolved": false, "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, "string_decoder": { "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": false, "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" } } @@ -7517,7 +7519,7 @@ }, "stream-iterate": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/stream-iterate/-/stream-iterate-1.2.0.tgz", + "resolved": false, "integrity": "sha1-K9fHcpbBcCpGSIuK1B95hl7s1OE=", "requires": { "readable-stream": "^2.1.5", @@ -7526,7 +7528,7 @@ "dependencies": { "stream-shift": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "resolved": false, "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" } } @@ -7551,7 +7553,7 @@ }, "ssri": { "version": "4.1.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-4.1.6.tgz", + "resolved": false, "integrity": "sha512-WUbCdgSAMQjTFZRWvSPpauryvREEA+Krn19rx67UlJEJx/M192ZHxMmJXjZ4tkdFm+Sb0SXGlENeQVlA5wY7kA==", "requires": { "safe-buffer": "^5.1.0" @@ -7559,7 +7561,7 @@ }, "strip-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "resolved": false, "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { "ansi-regex": "^3.0.0" @@ -7567,7 +7569,7 @@ "dependencies": { "ansi-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "resolved": false, "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" } } @@ -7584,22 +7586,22 @@ }, "text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "resolved": false, "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, "uid-number": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "resolved": false, "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=" }, "umask": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz", + "resolved": false, "integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=" }, "unique-filename": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", + "resolved": false, "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", "requires": { "unique-slug": "^2.0.0" @@ -7607,7 +7609,7 @@ "dependencies": { "unique-slug": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", + "resolved": false, "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", "requires": { "imurmurhash": "^0.1.4" @@ -7617,12 +7619,12 @@ }, "unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "resolved": false, "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, "update-notifier": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.2.0.tgz", + "resolved": false, "integrity": "sha1-G1g3z5DAc22IYncytmHBOPht5y8=", "requires": { "boxen": "^1.0.0", @@ -7637,7 +7639,7 @@ "dependencies": { "boxen": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.1.0.tgz", + "resolved": false, "integrity": "sha1-sbad1SIwXoB6md7ud329blFnsQI=", "requires": { "ansi-align": "^2.0.0", @@ -7651,7 +7653,7 @@ "dependencies": { "ansi-align": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "resolved": false, "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", "requires": { "string-width": "^2.0.0" @@ -7659,17 +7661,17 @@ }, "camelcase": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "resolved": false, "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" }, "cli-boxes": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "resolved": false, "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" }, "string-width": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.0.tgz", + "resolved": false, "integrity": "sha1-AwZkVh/BRslCPsfZeP4kV0N/5tA=", "requires": { "is-fullwidth-code-point": "^2.0.0", @@ -7678,12 +7680,12 @@ "dependencies": { "is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "resolved": false, "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "strip-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "resolved": false, "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { "ansi-regex": "^3.0.0" @@ -7693,7 +7695,7 @@ }, "term-size": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-0.1.1.tgz", + "resolved": false, "integrity": "sha1-hzYLljlsq1dgljcUzaDQy+7K2co=", "requires": { "execa": "^0.4.0" @@ -7701,7 +7703,7 @@ "dependencies": { "execa": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.4.0.tgz", + "resolved": false, "integrity": "sha1-TrZGejaglfq7KXD/nV4/t7zm68M=", "requires": { "cross-spawn-async": "^2.1.1", @@ -7714,7 +7716,7 @@ "dependencies": { "cross-spawn-async": { "version": "2.2.5", - "resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz", + "resolved": false, "integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=", "requires": { "lru-cache": "^4.0.0", @@ -7723,12 +7725,12 @@ }, "is-stream": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "resolved": false, "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "npm-run-path": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz", + "resolved": false, "integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=", "requires": { "path-key": "^1.0.0" @@ -7736,17 +7738,17 @@ }, "object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "resolved": false, "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "path-key": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz", + "resolved": false, "integrity": "sha1-XVPVeAGWRsDWiADbThRua9wqx68=" }, "strip-eof": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "resolved": false, "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" } } @@ -7755,7 +7757,7 @@ }, "widest-line": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz", + "resolved": false, "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=", "requires": { "string-width": "^1.0.1" @@ -7763,7 +7765,7 @@ "dependencies": { "string-width": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "resolved": false, "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { "code-point-at": "^1.0.0", @@ -7773,12 +7775,12 @@ "dependencies": { "code-point-at": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "resolved": false, "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "is-fullwidth-code-point": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "resolved": false, "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { "number-is-nan": "^1.0.0" @@ -7786,14 +7788,14 @@ "dependencies": { "number-is-nan": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "resolved": false, "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" } } }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": false, "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { "ansi-regex": "^2.0.0" @@ -7801,7 +7803,7 @@ "dependencies": { "ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "resolved": false, "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" } } @@ -7814,7 +7816,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": false, "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { "ansi-styles": "^2.2.1", @@ -7826,17 +7828,17 @@ "dependencies": { "ansi-styles": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "resolved": false, "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" }, "escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "resolved": false, "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "has-ansi": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "resolved": false, "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { "ansi-regex": "^2.0.0" @@ -7844,14 +7846,14 @@ "dependencies": { "ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "resolved": false, "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" } } }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": false, "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { "ansi-regex": "^2.0.0" @@ -7859,21 +7861,21 @@ "dependencies": { "ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "resolved": false, "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" } } }, "supports-color": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "resolved": false, "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" } } }, "configstore": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.0.tgz", + "resolved": false, "integrity": "sha1-Rd+QcHPibfoc9LLVL1tgVF6qEdE=", "requires": { "dot-prop": "^4.1.0", @@ -7886,7 +7888,7 @@ "dependencies": { "dot-prop": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.1.1.tgz", + "resolved": false, "integrity": "sha1-qEk/C3te7sglJbXHWH+n3nyoWcE=", "requires": { "is-obj": "^1.0.0" @@ -7894,14 +7896,14 @@ "dependencies": { "is-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "resolved": false, "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" } } }, "make-dir": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz", + "resolved": false, "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=", "requires": { "pify": "^2.3.0" @@ -7909,14 +7911,14 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": false, "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" } } }, "unique-string": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "resolved": false, "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", "requires": { "crypto-random-string": "^1.0.0" @@ -7924,7 +7926,7 @@ "dependencies": { "crypto-random-string": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "resolved": false, "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" } } @@ -7933,17 +7935,17 @@ }, "import-lazy": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "resolved": false, "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" }, "is-npm": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "resolved": false, "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" }, "latest-version": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "resolved": false, "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", "requires": { "package-json": "^4.0.0" @@ -7951,7 +7953,7 @@ "dependencies": { "package-json": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "resolved": false, "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", "requires": { "got": "^6.7.1", @@ -7962,7 +7964,7 @@ "dependencies": { "got": { "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "resolved": false, "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "requires": { "create-error-class": "^3.0.0", @@ -7980,7 +7982,7 @@ "dependencies": { "create-error-class": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "resolved": false, "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", "requires": { "capture-stack-trace": "^1.0.0" @@ -7988,54 +7990,54 @@ "dependencies": { "capture-stack-trace": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", + "resolved": false, "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=" } } }, "duplexer3": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "resolved": false, "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" }, "get-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "resolved": false, "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" }, "is-redirect": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "resolved": false, "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" }, "is-retry-allowed": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "resolved": false, "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" }, "is-stream": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "resolved": false, "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "lowercase-keys": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "resolved": false, "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" }, "timed-out": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "resolved": false, "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" }, "unzip-response": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "resolved": false, "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" }, "url-parse-lax": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "resolved": false, "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "requires": { "prepend-http": "^1.0.1" @@ -8043,7 +8045,7 @@ "dependencies": { "prepend-http": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "resolved": false, "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" } } @@ -8052,7 +8054,7 @@ }, "registry-url": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "resolved": false, "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", "requires": { "rc": "^1.0.1" @@ -8075,7 +8077,7 @@ }, "semver-diff": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "resolved": false, "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", "requires": { "semver": "^5.0.3" @@ -8083,19 +8085,19 @@ }, "xdg-basedir": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "resolved": false, "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" } } }, "uuid": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "resolved": false, "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" }, "validate-npm-package-license": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "resolved": false, "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", "requires": { "spdx-correct": "~1.0.0", @@ -8104,7 +8106,7 @@ "dependencies": { "spdx-correct": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "resolved": false, "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", "requires": { "spdx-license-ids": "^1.0.2" @@ -8112,21 +8114,21 @@ "dependencies": { "spdx-license-ids": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "resolved": false, "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=" } } }, "spdx-expression-parse": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "resolved": false, "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=" } } }, "validate-npm-package-name": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "resolved": false, "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", "requires": { "builtins": "^1.0.3" @@ -8134,14 +8136,14 @@ "dependencies": { "builtins": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "resolved": false, "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=" } } }, "which": { "version": "1.2.14", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "resolved": false, "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", "requires": { "isexe": "^2.0.0" @@ -8149,14 +8151,14 @@ "dependencies": { "isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "resolved": false, "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" } } }, "worker-farm": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.3.1.tgz", + "resolved": false, "integrity": "sha1-QzMRK7SbF6oFC4eJXKayys9A5f8=", "requires": { "errno": ">=0.1.1 <0.2.0-0", @@ -8165,7 +8167,7 @@ "dependencies": { "errno": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", + "resolved": false, "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", "requires": { "prr": "~0.0.0" @@ -8173,26 +8175,26 @@ "dependencies": { "prr": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "resolved": false, "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=" } } }, "xtend": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "resolved": false, "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" } } }, "wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "resolved": false, "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write-file-atomic": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.1.0.tgz", + "resolved": false, "integrity": "sha512-0TZ20a+xcIl4u0+Mj5xDH2yOWdmQiXlKf9Hm+TgDXjTMsEYb+gDrmb8e8UNAzMCitX8NBqG4Z/FUQIyzv/R1JQ==", "requires": { "graceful-fs": "^4.1.11", @@ -10733,7 +10735,8 @@ "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "optional": true }, "prepend-http": { "version": "2.0.0", @@ -12506,7 +12509,7 @@ "toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=" }, "tough-cookie": { "version": "2.5.0", @@ -12564,6 +12567,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "optional": true, "requires": { "prelude-ls": "~1.1.2" } @@ -12670,7 +12674,7 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=" }, "unix-crypt-td-js": { "version": "1.1.4", @@ -12810,7 +12814,7 @@ "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", "requires": { "punycode": "^2.1.0" } From 77d8e4c3e6216e6152381ed2e7a511a5173bb8df Mon Sep 17 00:00:00 2001 From: Miguel de Barros Date: Fri, 11 Jun 2021 14:55:43 +0200 Subject: [PATCH 02/19] markdown lint issues --- deployment-guide/README.md | 46 ++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/deployment-guide/README.md b/deployment-guide/README.md index 79dc47b2e..6095cc6eb 100644 --- a/deployment-guide/README.md +++ b/deployment-guide/README.md @@ -24,6 +24,7 @@ The document is intended for an audience with a stable technical knowledge that Versions numbers below are hard requirements, not just recommendations (more recent versions are known not to work). A list of the pre-requisite tool set required for the deployment of Mojaloop: + - **Kubernetes** An open-source system for automating deployment, scaling, and management of containerized applications. Find out more about [Kubernetes](https://kubernetes.io),
_Recommended Versions:_
    _**Mojaloop Helm Chart release v11.x** supports **Kuberentes v1.13 - v1.17**, newer versions have not been tested._ @@ -38,9 +39,10 @@ A list of the pre-requisite tool set required for the deployment of Mojaloop: - **Helm** A package manager for Kubernetes. Find out more about [Helm](https://helm.sh),
_Recommended Versions:_
    _**Helm v3.x** ([ref: Design Auth Issue #52](https://github.com/mojaloop/design-authority/issues/52))._ -- **Postman** Postman is a Google Chrome application for the interacting with HTTP API's. It presents you with a friendly GUI for the construction requests and reading responces. https://www.getpostman.com/apps. Find out more about [Postman](https://postman.com). +- **Postman** Postman is a Google Chrome application for the interacting with HTTP API's. It presents you with a friendly GUI for the construction requests and reading responces. . Find out more about [Postman](https://postman.com). For **local guides** on how to setup the pre-requisites on your laptop or desktop, refer to the appropriate link document below; + - [Local Setup for Mac](local-setup-mac.md) - [Local Setup for Linux](local-setup-linux.md) - [Local Setup for Windows](local-setup-windows.md) @@ -51,24 +53,24 @@ This provides environment resource recommendations with a view of the infrastruc **Resources Requirements:** -* Control Plane (i.e. Master Node) +- Control Plane (i.e. Master Node) [https://kubernetes.io/docs/setup/cluster-large/#size-of-master-and-master-components](https://kubernetes.io/docs/setup/cluster-large/#size-of-master-and-master-components) - * 3x Master Nodes for future node scaling and HA (High Availability) + - 3x Master Nodes for future node scaling and HA (High Availability) -* ETCd Plane: +- ETCd Plane: [https://etcd.io/docs/v3.3.12/op-guide/hardware](https://etcd.io/docs/v3.3.12/op-guide/hardware) - * 3x ETCd nodes for HA (High Availability) + - 3x ETCd nodes for HA (High Availability) -* Compute Plane (i.e. Worker Node): +- Compute Plane (i.e. Worker Node): TBC once load testing has been concluded. However the current general recommended size: - * 3x Worker nodes, each being: - * 4x vCPUs, 16GB of RAM, and 40gb storage + - 3x Worker nodes, each being: + - 4x vCPUs, 16GB of RAM, and 40gb storage **Note** that this would also depend on your underlying infrastructure, and it does NOT include requirements for persistent volumes/storage. @@ -82,16 +84,16 @@ If you are new to Kubernetes it is strongly recommended to familiarize yourself The following are Kubernetes concepts used within the project. An understanding of these concepts is imperative before attempting the deployment; -* Deployment -* Pod -* ReplicaSets -* Service -* Ingress -* StatefulSet -* DaemonSet -* Ingress Controller -* ConfigMap -* Secret +- Deployment +- Pod +- ReplicaSets +- Service +- Ingress +- StatefulSet +- DaemonSet +- Ingress Controller +- ConfigMap +- Secret Insure **kubectl** is installed. A complete set of installation instruction are available [here](https://kubernetes.io/docs/tasks/tools/install-kubectl/). @@ -121,7 +123,7 @@ Insure **kubectl** is installed. A complete set of installation instruction are Visit the following link for more information: . -### 4. Helm +### 4. Helm Please review [Mojaloop Helm Chart](../repositories/helm.md) to understand the relationships between the deployed Mojaloop helm charts. @@ -149,9 +151,9 @@ Refer to the [Helm v2 to v3 Migration Guide](./helm-legacy-migration.md) if you 3. Install your preferred Ingress Controller for load-balancing and external access: -Refer to the following documentation to install the Nginx-Ingress Controller: https://kubernetes.github.io/ingress-nginx/deploy/#using-helm. +Refer to the following documentation to install the Nginx-Ingress Controller: . -List of alternative Ingress Controllers: https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/. +List of alternative Ingress Controllers: . ### 5. Mojaloop @@ -235,7 +237,7 @@ Please, follow these instructions: [Get Postman](https://www.getpostman.com/post #### 6.2. Setup Postman Grab the latest collections & environment files from [Mojaloop Postman Github repo](https://github.com/mojaloop/postman). - + After an initial setup or new deployment, the [OSS New Deployment FSP Setup section](../contributors-guide/tools-and-technologies/automated-testing.md) needs to be completed. This will seed the Database with the required enumerations and static data to enable the sucessful execution of any manual or automation tests by the other collections. Refer to the [QA and Regression Testing in Mojaloop](../contributors-guide/tools-and-technologies/automated-testing.md) documentation for more complete information to complement your testing requirements. From 1fdae7542a7ee9f0d28355cd9f042186bf6b8c5b Mon Sep 17 00:00:00 2001 From: Miguel de Barros Date: Fri, 11 Jun 2021 15:03:10 +0200 Subject: [PATCH 03/19] Updated hosts in deployment guide --- deployment-guide/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deployment-guide/README.md b/deployment-guide/README.md index 6095cc6eb..d5286ddc8 100644 --- a/deployment-guide/README.md +++ b/deployment-guide/README.md @@ -206,8 +206,8 @@ List of alternative Ingress Controllers: = versions 6.2.2 for Mojaloop API Services; ```text - # Mojaloop Demo - 127.0.0.1 central-ledger.local central-settlement.local ml-api-adapter.local account-lookup-service.local account-lookup-service-admin.local quoting-service.local moja-simulator.local central-ledger central-settlement ml-api-adapter account-lookup-service account-lookup-service-admin quoting-service simulator host.docker.internal transaction-request-service.local + # Mojaloop Demo + 127.0.0.1 ml-api-adapter.local central-ledger.local account-lookup-service.local account-lookup-service-admin.local quoting-service.local central-settlement-service.local transaction-request-service.local central-settlement.local bulk-api-adapter.local moja-simulator.local sim-payerfsp.local sim-payeefsp.local sim-testfsp1.local sim-testfsp2.local sim-testfsp3.local sim-testfsp4.local mojaloop-simulators.local finance-portal.local operator-settlement.local settlement-management.local testing-toolkit.local testing-toolkit-specapi.local ``` 2. Test system health in your browser after installation. This will only work if you have an active helm chart deployment running. From e31111888516703604f76254787766f66ed9d7cf Mon Sep 17 00:00:00 2001 From: Miguel de Barros Date: Fri, 11 Jun 2021 17:36:01 +0200 Subject: [PATCH 04/19] Cleaning up deployment guide --- deployment-guide/README.md | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/deployment-guide/README.md b/deployment-guide/README.md index d5286ddc8..904415db4 100644 --- a/deployment-guide/README.md +++ b/deployment-guide/README.md @@ -161,34 +161,37 @@ List of alternative Ingress Controllers: Date: Fri, 11 Jun 2021 19:07:50 +0200 Subject: [PATCH 05/19] Updates to deployment guide --- deployment-guide/README.md | 95 ++++++++++++++++++++++++++++++-------- 1 file changed, 77 insertions(+), 18 deletions(-) diff --git a/deployment-guide/README.md b/deployment-guide/README.md index 904415db4..f667a0f2b 100644 --- a/deployment-guide/README.md +++ b/deployment-guide/README.md @@ -14,10 +14,9 @@ The document is intended for an audience with a stable technical knowledge that - [4.1. Helm configuration](#41-helm-configuration) - [5. Mojaloop](#5-mojaloop) - [5.1. Mojaloop Helm Deployment](#51-mojaloop-helm-deployment) - - [5.2. Verifying Mojaloop Deployment](#52-verifying-mojaloop-deployment) - - [6. Postman](#6-postman) - - [6.1. Installing Postman](#61-installing-postman) - - [6.2. Setup Postman](#62-setup-postman) + - [5.2. Verifying Ingress Rules](#52-verifying-ingress-rules) + - [5.3. Testing Mojaloop](#53-testing-mojaloop) + - [5.4. Testing Mojaloop with Postman](#54-testing-mojaloop-with-postman) ### 1. Pre-requisites @@ -192,7 +191,7 @@ List of alternative Ingress Controllers: - ```text - http://ml-api-adapter.local/health + **central-ledger** health test: + +#### 5.3. Testing Mojaloop + +1. Validating Mojaloop using Helm + + ```bash + helm -n demo test moja ``` - **central-ledger** health test: + Or with logs printed to console + + ```bash + helm -n demo test moja --logs + ``` + + This will automatically execute the following [test cases](https://github.com/mojaloop/testing-toolkit-test-cases) using the [Mojaloop Testing Toolkit](../../documentation/mojaloop-technical-overview/ml-testing-toolkit/README.md) (**TTK**) CLI: + + - [TTK Hub setup and Simulator Provisioning Collection](https://github.com/mojaloop/testing-toolkit-test-cases/tree/master/collections/hub/provisioning). + + Use the following command to view the output logs: + + ```bash + kubectl -n demo logs pod/moja-ml-ttk-test-setup + ``` + + - [TTK Golden Path Test Collection](https://github.com/mojaloop/testing-toolkit-test-cases/tree/master/collections/hub/golden_path). + + Use the following command to view the output logs: + + ```bash + kubectl -n demo logs pod/moja-ml-ttk-test-validation + ``` + + Example of the finally summary being displayed from the Golden Path test collection log output: ```text - http://central-ledger.local/health + Test Suite:GP Tests + Environment:Development + ┌───────────────────────────────────────────────────┐ + │ SUMMARY │ + ├───────────────────┬───────────────────────────────┤ + │ Total assertions │ 1557 │ + ├───────────────────┼───────────────────────────────┤ + │ Passed assertions │ 1557 │ + ├───────────────────┼───────────────────────────────┤ + │ Failed assertions │ 0 │ + ├───────────────────┼───────────────────────────────┤ + │ Total requests │ 297 │ + ├───────────────────┼───────────────────────────────┤ + │ Total test cases │ 61 │ + ├───────────────────┼───────────────────────────────┤ + │ Passed percentage │ 100.00% │ + ├───────────────────┼───────────────────────────────┤ + │ Started time │ Fri, 11 Jun 2021 15:45:53 GMT │ + ├───────────────────┼───────────────────────────────┤ + │ Completed time │ Fri, 11 Jun 2021 15:47:25 GMT │ + ├───────────────────┼───────────────────────────────┤ + │ Runtime duration │ 91934 ms │ + └───────────────────┴───────────────────────────────┘ + TTK-Assertion-Report-multi-2021-06-11T15:47:25.656Z.html was generated ``` -### 6. Postman +2. Accessing the Mojaloop Testing Toolkit UI + + Open the following link in a browser: . -Postman is used to send requests and receive responses. + One is able to manually load and execute the previously mentioned Testing Toolkit Collections using the UI which allows one to visually inspect the requests, responses and assertions in more detail. This is recommended if you wish to learn more about Mojaloop. -#### 6.1. Installing Postman + Refer to the [Mojaloop Testing Toolkit Documentation](../../documentation/mojaloop-technical-overview/ml-testing-toolkit/README.md) for more information and guides. -Please, follow these instructions: [Get Postman](https://www.getpostman.com/postman) and install the Postman application. +#### 5.4. Testing Mojaloop with Postman -#### 6.2. Setup Postman + Postman can be used as an alternative to the [Mojaloop Testing Toolkit](../../documentation/mojaloop-technical-overview/ml-testing-toolkit/README.md). Refer to the [Automated Testing Guide](../contributors-guide/tools-and-technologies/automated-testing.md) for more information. -Grab the latest collections & environment files from [Mojaloop Postman Github repo](https://github.com/mojaloop/postman). + The available [Mojaloop Postman Collections](https://github.com/mojaloop/postman) are similar to the [Mojaloop Testing Toolkit's Test Cases](https://github.com/mojaloop/testing-toolkit-test-cases)'s as follows: -After an initial setup or new deployment, the [OSS New Deployment FSP Setup section](../contributors-guide/tools-and-technologies/automated-testing.md) needs to be completed. This will seed the Database with the required enumerations and static data to enable the sucessful execution of any manual or automation tests by the other collections. +| Postman Collection | Mojaloop Testing Toolkit | Description | +|---------|----------|---------| +[MojaloopHub_Setup Postman Collection](https://github.com/mojaloop/postman/blob/master/MojaloopHub_Setup.postman_collection.json) and [MojaloopSims_Onboarding](https://github.com/mojaloop/postman/blob/master/MojaloopSims_Onboarding.postman_collection.json) | [TTK Hub setup and Simulator Provisioning Collection](https://github.com/mojaloop/testing-toolkit-test-cases/tree/master/collections/hub/provisioning) | Hub Setup and Simulator Provisioning | +[Golden_Path_Mojaloop](https://github.com/mojaloop/postman/blob/master/Golden_Path_Mojaloop.postman_collection.json) | [TTK Golden Path Test Collection](https://github.com/mojaloop/testing-toolkit-test-cases/tree/master/collections/hub/golden_path) | Golden Path Tests | -Refer to the [QA and Regression Testing in Mojaloop](../contributors-guide/tools-and-technologies/automated-testing.md) documentation for more complete information to complement your testing requirements. +Pre-requisites: +- The following postman environment file should be imported or customized as required when running the above listed Postman collections: [Mojaloop-Local-MojaSims.postman_environment.json](https://github.com/mojaloop/postman/blob/master/environments/Mojaloop-Local-MojaSims.postman_environment.json). +- Ensure you download the **latest patch release version** from the [Mojaloop Postman Git Repository Releases](https://github.com/mojaloop/postman/releases). For example if you install Mojaloop v12.0.**X**, ensure that you have the latest Postman collection patch version v12.0.**Y**. From 8a76541df482d2b624840d925f12e50d05e0c3f4 Mon Sep 17 00:00:00 2001 From: Miguel de Barros Date: Fri, 11 Jun 2021 19:09:31 +0200 Subject: [PATCH 06/19] Added link to postman --- deployment-guide/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployment-guide/README.md b/deployment-guide/README.md index f667a0f2b..17d629a1d 100644 --- a/deployment-guide/README.md +++ b/deployment-guide/README.md @@ -291,7 +291,7 @@ List of alternative Ingress Controllers: Date: Fri, 11 Jun 2021 19:10:35 +0200 Subject: [PATCH 07/19] Same --- deployment-guide/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployment-guide/README.md b/deployment-guide/README.md index 17d629a1d..f77868c03 100644 --- a/deployment-guide/README.md +++ b/deployment-guide/README.md @@ -291,7 +291,7 @@ List of alternative Ingress Controllers: Date: Fri, 11 Jun 2021 19:11:08 +0200 Subject: [PATCH 08/19] Fix md lint issues --- deployment-guide/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/deployment-guide/README.md b/deployment-guide/README.md index f77868c03..32aa3eeed 100644 --- a/deployment-guide/README.md +++ b/deployment-guide/README.md @@ -301,5 +301,6 @@ List of alternative Ingress Controllers: Date: Fri, 11 Jun 2021 19:16:11 +0200 Subject: [PATCH 09/19] Updates --- deployment-guide/README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/deployment-guide/README.md b/deployment-guide/README.md index 32aa3eeed..0c828be58 100644 --- a/deployment-guide/README.md +++ b/deployment-guide/README.md @@ -222,6 +222,8 @@ List of alternative Ingress Controllers: Date: Thu, 24 Jun 2021 15:54:40 +0200 Subject: [PATCH 10/19] Some minor updates --- deployment-guide/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/deployment-guide/README.md b/deployment-guide/README.md index 0c828be58..75a2f3f0b 100644 --- a/deployment-guide/README.md +++ b/deployment-guide/README.md @@ -240,7 +240,7 @@ The [Mojaloop Testing Toolkit](../../documentation/mojaloop-technical-overview/m - [TTK Hub setup and Simulator Provisioning Collection](https://github.com/mojaloop/testing-toolkit-test-cases/tree/master/collections/hub/provisioning). - Use the following command to view the output logs: + Use the following command to view the provisioning Collection logs: ```bash kubectl -n demo logs pod/moja-ml-ttk-test-setup @@ -248,7 +248,7 @@ The [Mojaloop Testing Toolkit](../../documentation/mojaloop-technical-overview/m - [TTK Golden Path Test Collection](https://github.com/mojaloop/testing-toolkit-test-cases/tree/master/collections/hub/golden_path). - Use the following command to view the output logs: + Use the following command to view the Golden Path Collection logs: ```bash kubectl -n demo logs pod/moja-ml-ttk-test-validation @@ -287,7 +287,7 @@ The [Mojaloop Testing Toolkit](../../documentation/mojaloop-technical-overview/m Open the following link in a browser: . - One is able to manually load and execute the previously mentioned Testing Toolkit Collections using the UI which allows one to visually inspect the requests, responses and assertions in more detail. This is recommended if you wish to learn more about Mojaloop. + One is able to manually load and execute the Testing Toolkit Collections using the UI which allows one to visually inspect the requests, responses and assertions in more detail. This is a great way to learn more about Mojaloop. Refer to the [Mojaloop Testing Toolkit Documentation](../../documentation/mojaloop-technical-overview/ml-testing-toolkit/README.md) for more information and guides. From 5878393f87e619fc11100912678ac353b33ee138 Mon Sep 17 00:00:00 2001 From: Miguel de Barros Date: Thu, 24 Jun 2021 16:17:20 +0200 Subject: [PATCH 11/19] Moved "Kubernetes Concept" section from Mac install to main document - Moved "Kubernetes Concept" section from Mac install to main document - Updated pre-requisites to include versions being tested --- deployment-guide/README.md | 20 ++++++++++++++++++-- deployment-guide/local-setup-mac.md | 15 --------------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/deployment-guide/README.md b/deployment-guide/README.md index 75a2f3f0b..4fa787fc9 100644 --- a/deployment-guide/README.md +++ b/deployment-guide/README.md @@ -26,8 +26,9 @@ A list of the pre-requisite tool set required for the deployment of Mojaloop: - **Kubernetes** An open-source system for automating deployment, scaling, and management of containerized applications. Find out more about [Kubernetes](https://kubernetes.io),
_Recommended Versions:_ -
    _**Mojaloop Helm Chart release v11.x** supports **Kuberentes v1.13 - v1.17**, newer versions have not been tested._ -
    _**Mojaloop Helm Chart release v10.x** supports **Kuberentes v1.13 - v1.15**, it will fail on Kuberentes v1.16+ onwards due deprecated APIs ([ref: Helm Issue #219](https://github.com/mojaloop/helm/issues/219))._ +
    _**Mojaloop Helm Chart release v12.x** supports **Kubernetes v1.13 - v1.20.6** (newer versions have not been tested)._ +
    _**Mojaloop Helm Chart release v11.x** supports **Kubernetes v1.13 - v1.17** (newer versions have not been tested)._ +
    _**Mojaloop Helm Chart release v10.x** supports **Kubernetes v1.13 - v1.15**, it will fail on Kubernetes v1.16+ onwards due deprecated APIs ([ref: Helm Issue #219](https://github.com/mojaloop/helm/issues/219))._ - kubectl - Kubernetes CLI for Kubernetes Management is required. Find out more about [kubectl](https://kubernetes.io/docs/reference/kubectl/overview/): - [Install-kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/), - microk8s - MicroK8s installs a barebones upstream Kubernetes for a single node deployment generally used for local development. We recommend this installation on Linux (ubuntu) OS. Find out more about [microk8s](https://microk8s.io/) and [microk8s documents](https://microk8s.io/docs/): @@ -40,6 +41,21 @@ A list of the pre-requisite tool set required for the deployment of Mojaloop:
    _**Helm v3.x** ([ref: Design Auth Issue #52](https://github.com/mojaloop/design-authority/issues/52))._ - **Postman** Postman is a Google Chrome application for the interacting with HTTP API's. It presents you with a friendly GUI for the construction requests and reading responces. . Find out more about [Postman](https://postman.com). +If you are new to Kubernetes it is strongly recommended to familiarize yourself with Kubernetes. [Kubernetes Concepts](https://kubernetes.io/docs/concepts/overview/) is a good place to start and will provide an overview. + +The following are Kubernetes concepts used within the project. An understanding of these concepts is imperative before attempting the deployment: + +- Deployment +- Pod +- ReplicaSets +- Service +- Ingress +- StatefulSet +- DaemonSet +- Ingress Controller +- ConfigMap +- Secret + For **local guides** on how to setup the pre-requisites on your laptop or desktop, refer to the appropriate link document below; - [Local Setup for Mac](local-setup-mac.md) diff --git a/deployment-guide/local-setup-mac.md b/deployment-guide/local-setup-mac.md index 45f1f5579..5b2915bc5 100644 --- a/deployment-guide/local-setup-mac.md +++ b/deployment-guide/local-setup-mac.md @@ -18,21 +18,6 @@ At this point the reader/implementer should be familiar with [Mojaloop's deploym This section will guide the reader through the deployment process to setup Kubernetes within Docker. -If you are new to Kubernetes it is strongly recommended to familiarize yourself with Kubernetes. [Kubernetes Concepts](https://kubernetes.io/docs/concepts/overview/) is a good place to start and will provide an overview. - -The following are Kubernetes concepts used within the project. An understanding of these concepts is imperative before attempting the deployment; - -* Deployment -* Pod -* ReplicaSets -* Service -* Ingress -* StatefulSet -* DaemonSet -* Ingress Controller -* ConfigMap -* Secret - ### 1.1. Kubernetes Installation with Docker * **kubectl** Complete set of installation instruction are available [here](https://kubernetes.io/docs/tasks/tools/install-kubectl/). From 86ff881d6e2f02d17cfb8746ad18df748af8e928 Mon Sep 17 00:00:00 2001 From: Miguel de Barros Date: Mon, 28 Jun 2021 11:21:30 +0200 Subject: [PATCH 12/19] Updated deployment-guide for mac Renamed docker-for-desktop to docker-desktop --- deployment-guide/local-setup-mac.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deployment-guide/local-setup-mac.md b/deployment-guide/local-setup-mac.md index 5b2915bc5..b78d2e22a 100644 --- a/deployment-guide/local-setup-mac.md +++ b/deployment-guide/local-setup-mac.md @@ -63,12 +63,12 @@ To install Kubernetes with Docker, follow the steps below; ``` 2. Change your Contexts; ```bash - kubectl config use-context docker-for-desktop + kubectl config use-context docker-desktop ``` **or** ```bash - kubectx docker-for-desktop + kubectx docker-desktop ``` 3. Continue setup and configuration from the Kubernetes Dashboard section in the [Mojaloop's deployment guide](./README.md#31-kubernetes-dashboard) document. From 3c194e78d576ab6f23b2a4a0c11b76f202a70d50 Mon Sep 17 00:00:00 2001 From: Miguel de Barros Date: Mon, 28 Jun 2021 16:01:57 +0200 Subject: [PATCH 13/19] Updates to deployment guide --- deployment-guide/README.md | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/deployment-guide/README.md b/deployment-guide/README.md index 4fa787fc9..922a62415 100644 --- a/deployment-guide/README.md +++ b/deployment-guide/README.md @@ -24,11 +24,11 @@ Versions numbers below are hard requirements, not just recommendations (more rec A list of the pre-requisite tool set required for the deployment of Mojaloop: -- **Kubernetes** An open-source system for automating deployment, scaling, and management of containerized applications. Find out more about [Kubernetes](https://kubernetes.io), -
_Recommended Versions:_ -
    _**Mojaloop Helm Chart release v12.x** supports **Kubernetes v1.13 - v1.20.6** (newer versions have not been tested)._ -
    _**Mojaloop Helm Chart release v11.x** supports **Kubernetes v1.13 - v1.17** (newer versions have not been tested)._ -
    _**Mojaloop Helm Chart release v10.x** supports **Kubernetes v1.13 - v1.15**, it will fail on Kubernetes v1.16+ onwards due deprecated APIs ([ref: Helm Issue #219](https://github.com/mojaloop/helm/issues/219))._ +- **Kubernetes** An open-source system for automating deployment, scaling, and management of containerized applications. Find out more about [Kubernetes](https://kubernetes.io). + - Recommended Versions: +
    **Mojaloop Helm Chart release v12.x** supports **Kubernetes v1.13 - v1.20.6**. +
    **Mojaloop Helm Chart release v11.x** supports **Kubernetes v1.13 - v1.17**. +
    **Mojaloop Helm Chart release v10.x** supports **Kubernetes v1.13 - v1.15**, it will fail on Kubernetes v1.16+ onwards due deprecated APIs ([ref: Helm Issue #219](https://github.com/mojaloop/helm/issues/219)). - kubectl - Kubernetes CLI for Kubernetes Management is required. Find out more about [kubectl](https://kubernetes.io/docs/reference/kubectl/overview/): - [Install-kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/), - microk8s - MicroK8s installs a barebones upstream Kubernetes for a single node deployment generally used for local development. We recommend this installation on Linux (ubuntu) OS. Find out more about [microk8s](https://microk8s.io/) and [microk8s documents](https://microk8s.io/docs/): @@ -168,6 +168,23 @@ Refer to the [Helm v2 to v3 Migration Guide](./helm-legacy-migration.md) if you Refer to the following documentation to install the Nginx-Ingress Controller: . +> **NOTE: If you are installing Mojaloop v12.x with an Nginx-Ingress controller version newer than v0.22.0, ensure you create a custom [Mojaloop values config](https://github.com/mojaloop/helm/blob/v12.0.0/mojaloop/values.yaml) with the following changes prior to install:** +> ```YAML +> ## **LOOK FOR THIS LINE IN mojaloop/values.yaml CONFIG FILE** +> mojaloop-simulator: +> ingress: +> ## nginx ingress controller >= v0.22.0 <-- **COMMENT THE FOLLOWING THREE LINES BELOW:** +> # annotations: <-- COMMENTED +> # nginx.ingress.kubernetes.io/rewrite-target: '/$2' <-- COMMENTED +> # ingressPathRewriteRegex: (/|$)(.*) <-- COMMENTED +> +> ## nginx ingress controller < v0.22.0 <-- **UNCOMMENT THE FOLLOWING THREE LINES BELOW:** +> annotations: +> nginx.ingress.kubernetes.io/rewrite-target: '/' +> ingressPathRewriteRegex: "/" +> ``` +> **This is NOT necessary if you are installing Mojaloop v13.x or newer.** + List of alternative Ingress Controllers: . ### 5. Mojaloop @@ -185,7 +202,7 @@ List of alternative Ingress Controllers: Date: Fri, 2 Jul 2021 18:17:17 +0200 Subject: [PATCH 14/19] Updates to deployment-guide - markdown lint fixes - updates to main deployment guide - updates to mac, windows and linux sub-guides - updates to troubleshooting guide --- .../frequently-asked-questions.md | 86 ++++++----- deployment-guide/README.md | 84 ++++++----- .../deployment-troubleshooting.md | 136 ++++++------------ deployment-guide/local-setup-linux.md | 100 +++++++------ deployment-guide/local-setup-mac.md | 63 ++++---- deployment-guide/local-setup-windows.md | 87 +++++------ 6 files changed, 254 insertions(+), 302 deletions(-) diff --git a/contributors-guide/frequently-asked-questions.md b/contributors-guide/frequently-asked-questions.md index 9bd798ea0..58ac80757 100644 --- a/contributors-guide/frequently-asked-questions.md +++ b/contributors-guide/frequently-asked-questions.md @@ -8,43 +8,46 @@ This document contains some of the most frequently asked questions from the comm ### Table of Content -* [What is Mojaloop](#1-what-is-mojaloop) -* [How does it work](#2-how-does-it-work) -* [Who is it for](#3-who-is-it-for) -* [Why does it exist](#4-why-does-it-exist) -* [Who's behind it](#5-whos-behind-it) -* [What platforms does Mojaloop run on](#6-what-platforms-does-mojaloop-run-on) -* [Is it really open-source](#7-is-it-really-open-source) -* [How can I contribute to Mojaloop](#8-how-can-i-contribute-to-mojaloop) -* [What is supported](#9-what-is-supported) -* [Can we connect directly to Pathfinder in a development environment](#10-can-we-connect-directly-to-pathfinder-in-a-development-environment) -* [Should i register DFSP via url or update configuration in default.json](#11-should-i-register-dfsp-via-urlhttpcentral-directorycommandsregisteror-i-need-to-update-configuration-in-defaultjson) -* [Status of the pod pi3-kafka-0 is still on CrashLoopBackOff](#12-status-of-the-pod-pi3-kafka-0-is-still-on-crashloopbackoff) -* [Why am I getting an error when we try to create new DFSP using Admin](#13-why-am-i-getting-an-error-when-we-try-to-create-new-dfsp-using-admin) -* [Using Mojaloop to do payment using crypto-currency](#14-using-mojaloop-to-do-payment-using-crypto-currency) -* [Can I spread Mojaloop components over different physical machines and VM's](#15--can-i-spread-mojaloop-components-over-different-physical-machines-and-vms) -* [Can we expect all the endpoints defined in the API document are implemented in Mojaloop](#16-can-we-expect-all-the-endpoints-defined-in-the-api-document-are-implemented-in-mojaloop) -* [Does Mojaloop store the payment initiator FSP’s quote/status info](#17-does-mojaloop-store-the-payment-initiator-fsps-quotestatus-info) -* [Does Mojaloop handle workflow validation](#18-does-mojaloop-handle-workflow-validation) -* [How is the Mojaloop source accessible](#19-how-is-the-mojaloop-source-accessible) -* [How to register a new party in Mojaloop](#20-how-to-register-a-new-party-in-mojaloop) -* [Does the participant represent an account of a customer in a bank](#21-does-the-participant-represent-an-account-of-a-customer-in-a-bank) -* [How to register _trusted_ payee to a payer, to skip OTP](#22-how-to-register-trusted-payee-to-a-payer-to-skip-otp) -* [Receiving a 404 error when attempting to access or load kubernetes-dashboard.yaml file](#23-receiving-a-404-error-when-attempting-to-access-or-load-kubernetes-dashboardyaml-file) -* [When installing nginx-ingress for load balancing & external access - Error: no available release name found](#24-when-installing-nginx-ingress-for-load-balancing--external-access---error-no-available-release-name-found) -* [Received "ImportError: librdkafka.so.1: cannot open shared object file: No such file or directory" when running `npm start' command](#25-received-importerror-librdkafkaso1-cannot-open-shared-object-file-no-such-file-or-directory-when-running-npm-start-command) -* [Can we use mojaloop as open-source mobile wallet software or mojaloop does interoperability only](#26-can-we-use-mojaloop-as-open-source-mobile-wallet-software-or-mojaloop-does-interoperability-only) -* [Describe companies that helps to deploy & support for mojaloop](#27-describe-companies-that-helps-to-deploy--support-for-mojaloop) -* [Can you say something about mojaloop & security](#28-can-you-say-something-about-mojaloop--security) -* [What are the benefit(s) from using mojaloop as interoperabilty platform](#29-what-are-the-benefits-from-using-mojaloop-as-interoperabilty-platform) -* [What are the main challenges that companies face using mojaloop](#30-what-are-the-main-challenges-that-companies-face-using-mojaloop) -* [Is forensic logging/audit in mojaloop , is it related with securing the inter-operability platform](#31-is-forensic-loggingaudit-in-mojaloop--is-it-related-with-securing-the-inter-operability-platform) -* [How do the financial service providers connect with mojaloop](#32-how-do-the-financial-service-providers-connect-with-mojaloop) -* [Is there any open source ISO8583-OpenAPI converter/connector available](#33-is-there-any-open-source-iso8583-openapi-converterconnector-available) -* [How do I know the end points to setup postman for testing the deployment](#34-how-do-i-know-the-end-points-to-setup-postman-for-testing-the-deployment) -* [Why are there no reversals allowed on a Mojaloop](#35-why-are-there-no-reversals-allowed-on-a-mojaloop) -* [ffg. error with microk8s installation "MountVolume.SetUp failed"](#36-ffg-error-with-microk8s-installation-mountvolumesetup-failed) -* [Why am I getting this error when trying to create a participant: "Hub reconciliation account for the specified currency does not exist"?](#37-why-am-i-getting-this-error-when-trying-to-create-a-participant-hub-reconciliation-account-for-the-specified-currency-does-not-exist) +- [Frequently Asked Questions](#frequently-asked-questions) + - [Table of Content](#table-of-content) + - [1. What is Mojaloop?](#1-what-is-mojaloop) + - [2. How does it work?](#2-how-does-it-work) + - [3. Who is it for?](#3-who-is-it-for) + - [4. Why does it exist?](#4-why-does-it-exist) + - [5. Who's behind it?](#5-whos-behind-it) + - [6. What platforms does Mojaloop run on?](#6-what-platforms-does-mojaloop-run-on) + - [7. Is it really open-source?](#7-is-it-really-open-source) + - [8. How can I contribute to Mojaloop?](#8-how-can-i-contribute-to-mojaloop) + - [9. What is supported?](#9-what-is-supported) + - [10. Can we connect directly to Pathfinder in a development environment?](#10-can-we-connect-directly-to-pathfinder-in-a-development-environment) + - [11. Should i register DFSP via url http://central-directory/commands/register or i need to update configuration in default.json?](#11-should-i-register-dfsp-via-urlhttpcentral-directorycommandsregisteror-i-need-to-update-configuration-in-defaultjson) + - [12. Status of the pod pi3-kafka-0 is still on CrashLoopBackOff?](#12-status-of-the-pod-pi3-kafka-0-is-still-on-crashloopbackoff) + - [13. Why am I getting an error when we try to create new DFSP using Admin?](#13-why-am-i-getting-an-error-when-we-try-to-create-new-dfsp-using-admin) + - [14. Using Mojaloop to do payment using crypto-currency?](#14-using-mojaloop-to-do-payment-using-crypto-currency) + - [15. Can I spread Mojaloop components over different physical machines and VM's?](#15--can-i-spread-mojaloop-components-over-different-physical-machines-and-vms) + - [16. Can we expect all the endpoints defined in the API document are implemented in Mojaloop?](#16-can-we-expect-all-the-endpoints-defined-in-the-api-document-are-implemented-in-mojaloop) + - [17. Does Mojaloop store the payment initiator FSP’s quote/status info?](#17-does-mojaloop-store-the-payment-initiator-fsps-quotestatus-info) + - [18. Does Mojaloop handle workflow validation?](#18-does-mojaloop-handle-workflow-validation) + - [19. How is the Mojaloop source accessible?](#19-how-is-the-mojaloop-source-accessible) + - [20. How to register a new party in Mojaloop?](#20-how-to-register-a-new-party-in-mojaloop) + - [21. Does the participant represent an account of a customer in a bank?](#21-does-the-participant-represent-an-account-of-a-customer-in-a-bank) + - [22. How to register _trusted_ payee to a payer, to skip OTP?](#22-how-to-register-trusted-payee-to-a-payer-to-skip-otp) + - [23. Receiving a 404 error when attempting to access or load kubernetes-dashboard.yaml file?](#23-receiving-a-404-error-when-attempting-to-access-or-load-kubernetes-dashboardyaml-file) + - [24. When installing nginx-ingress for load balancing & external access - Error: no available release name found?](#24-when-installing-nginx-ingress-for-load-balancing--external-access---error-no-available-release-name-found) + - [25. Received "ImportError: librdkafka.so.1: cannot open shared object file: No such file or directory" when running `npm start' command.](#25-received-importerror-librdkafkaso1-cannot-open-shared-object-file-no-such-file-or-directory-when-running-npm-start-command) + - [26. Can we use mojaloop as open-source mobile wallet software or mojaloop does interoperability only?](#26-can-we-use-mojaloop-as-open-source-mobile-wallet-software-or-mojaloop-does-interoperability-only) + - [27. Describe companies that helps to deploy & support for mojaloop?](#27-describe-companies-that-helps-to-deploy--support-for-mojaloop) + - [28. Can you say something about mojaloop & security?](#28-can-you-say-something-about-mojaloop--security) + - [29. What are the benefit(s) from using mojaloop as interoperabilty platform?](#29-what-are-the-benefits-from-using-mojaloop-as-interoperabilty-platform) + - [30. What are the main challenges that companies face using mojaloop?](#30-what-are-the-main-challenges-that-companies-face-using-mojaloop) + - [31. Is forensic logging/audit in mojaloop , is it related with securing the inter-operability platform?](#31-is-forensic-loggingaudit-in-mojaloop--is-it-related-with-securing-the-inter-operability-platform) + - [32. How do the financial service providers connect with mojaloop?](#32-how-do-the-financial-service-providers-connect-with-mojaloop) + - [33. Is there any open source ISO8583-OpenAPI converter/connector available?](#33-is-there-any-open-source-iso8583-openapi-converterconnector-available) + - [34. How do I know the end points to setup postman for testing the deployment?](#34-how-do-i-know-the-end-points-to-setup-postman-for-testing-the-deployment) + - [35. Why are there no reversals allowed on a Mojaloop?](#35-why-are-there-no-reversals-allowed-on-a-mojaloop) + - [36. ffg. error with microk8s installation "MountVolume.SetUp failed"?](#36-ffg-error-with-microk8s-installation-mountvolumesetup-failed) + - [37. Why am I getting this error when trying to create a participant: "Hub reconciliation account for the specified currency does not exist"?](#37-why-am-i-getting-this-error-when-trying-to-create-a-participant-hub-reconciliation-account-for-the-specified-currency-does-not-exist) + - [38. Resolve problems with VSCode and kafka on ubuntu 18.04. To make the code work with VSCode debugger, added the following into the launch.json](#38-resolve-problems-with-vscode-and-kafka-on-ubuntu-1804-to-make-the-code-work-with-vscode-debugger-added-the-following-into-the-launchjson) #### 1. What is Mojaloop? @@ -252,3 +255,12 @@ You need to create the corresponding Hub accounts (HUB_MULTILATERAL_SETTLEMENT a In this Postman collection you can find the requests to perform the operation in the "Hub Account" folder: https://github.com/mojaloop/postman/blob/master/OSS-New-Deployment-FSP-Setup.postman_collection.json Find also the related environments in the Postman repo: https://github.com/mojaloop/postman + +#### 38. Resolve problems with VSCode and kafka on ubuntu 18.04. To make the code work with VSCode debugger, added the following into the launch.json + + ```json + "env": { + "LD_LIBRARY_PATH": "${workspaceFolder}/node_modules/node-rdkafka/build/deps", + "WITH_SASL": 0 + } + ``` diff --git a/deployment-guide/README.md b/deployment-guide/README.md index 922a62415..764ff4644 100644 --- a/deployment-guide/README.md +++ b/deployment-guide/README.md @@ -9,7 +9,8 @@ The document is intended for an audience with a stable technical knowledge that - [1. Pre-requisites](#1-pre-requisites) - [2. Deployment Recommendations](#2-deployment-recommendations) - [3. Kubernetes](#3-kubernetes) - - [3.1. Kubernetes Admin Interfaces](#31-kubernetes-admin-interfaces) + - [3.1. Kubernetes Ingress Controller](#31-kubernetes-ingress-controller) + - [3.2. Kubernetes Admin Interfaces](#32-kubernetes-admin-interfaces) - [4. Helm](#4-helm) - [4.1. Helm configuration](#41-helm-configuration) - [5. Mojaloop](#5-mojaloop) @@ -41,21 +42,6 @@ A list of the pre-requisite tool set required for the deployment of Mojaloop:
    _**Helm v3.x** ([ref: Design Auth Issue #52](https://github.com/mojaloop/design-authority/issues/52))._ - **Postman** Postman is a Google Chrome application for the interacting with HTTP API's. It presents you with a friendly GUI for the construction requests and reading responces. . Find out more about [Postman](https://postman.com). -If you are new to Kubernetes it is strongly recommended to familiarize yourself with Kubernetes. [Kubernetes Concepts](https://kubernetes.io/docs/concepts/overview/) is a good place to start and will provide an overview. - -The following are Kubernetes concepts used within the project. An understanding of these concepts is imperative before attempting the deployment: - -- Deployment -- Pod -- ReplicaSets -- Service -- Ingress -- StatefulSet -- DaemonSet -- Ingress Controller -- ConfigMap -- Secret - For **local guides** on how to setup the pre-requisites on your laptop or desktop, refer to the appropriate link document below; - [Local Setup for Mac](local-setup-mac.md) @@ -112,7 +98,34 @@ The following are Kubernetes concepts used within the project. An understanding Insure **kubectl** is installed. A complete set of installation instruction are available [here](https://kubernetes.io/docs/tasks/tools/install-kubectl/). -#### 3.1. Kubernetes Admin Interfaces +#### 3.1. Kubernetes Ingress Controller + +Install your preferred Ingress Controller for load-balancing and external access. + +Refer to the following documentation to install the Nginx-Ingress Controller used for this guide: . + +> **NOTE: If you are installing Mojaloop v12.x with an Nginx-Ingress controller version newer than v0.22.0, ensure you create a custom [Mojaloop values config](https://github.com/mojaloop/helm/blob/v12.0.0/mojaloop/values.yaml) with the following changes prior to install:** +> +> ```YAML +> ## **LOOK FOR THIS LINE IN mojaloop/values.yaml CONFIG FILE** +> mojaloop-simulator: +> ingress: +> ## nginx ingress controller >= v0.22.0 <-- **COMMENT THE FOLLOWING THREE LINES BELOW:** +> # annotations: <-- COMMENTED +> # nginx.ingress.kubernetes.io/rewrite-target: '/$2' <-- COMMENTED +> # ingressPathRewriteRegex: (/|$)(.*) <-- COMMENTED +> +> ## nginx ingress controller < v0.22.0 <-- **UNCOMMENT THE FOLLOWING THREE LINES BELOW:** +> annotations: +> nginx.ingress.kubernetes.io/rewrite-target: '/' +> ingressPathRewriteRegex: "/" +> ``` +> +> **This is NOT necessary if you are installing Mojaloop v13.x or newer.** + +List of alternative Ingress Controllers: . + +#### 3.2. Kubernetes Admin Interfaces 1. Kubernetes Dashboards @@ -142,9 +155,9 @@ Insure **kubectl** is installed. A complete set of installation instruction are Please review [Mojaloop Helm Chart](../repositories/helm.md) to understand the relationships between the deployed Mojaloop helm charts. -Refer to the official documentation on how to install the latest version of Helm v3: +Refer to the official documentation on how to install the latest version of Helm: . -Refer to the following document if are using Helm v2: [Deployment with (Deprecated) Helm v2](./helm-legacy-deployment.md) +Refer to the following document if are using Helm v2: [Deployment with (Deprecated) Helm v2](./helm-legacy-deployment.md). Refer to the [Helm v2 to v3 Migration Guide](./helm-legacy-migration.md) if you wish to migrate an existing Helm v2 deployment to v3. @@ -164,29 +177,6 @@ Refer to the [Helm v2 to v3 Migration Guide](./helm-legacy-migration.md) if you helm repo update ``` -3. Install your preferred Ingress Controller for load-balancing and external access: - -Refer to the following documentation to install the Nginx-Ingress Controller: . - -> **NOTE: If you are installing Mojaloop v12.x with an Nginx-Ingress controller version newer than v0.22.0, ensure you create a custom [Mojaloop values config](https://github.com/mojaloop/helm/blob/v12.0.0/mojaloop/values.yaml) with the following changes prior to install:** -> ```YAML -> ## **LOOK FOR THIS LINE IN mojaloop/values.yaml CONFIG FILE** -> mojaloop-simulator: -> ingress: -> ## nginx ingress controller >= v0.22.0 <-- **COMMENT THE FOLLOWING THREE LINES BELOW:** -> # annotations: <-- COMMENTED -> # nginx.ingress.kubernetes.io/rewrite-target: '/$2' <-- COMMENTED -> # ingressPathRewriteRegex: (/|$)(.*) <-- COMMENTED -> -> ## nginx ingress controller < v0.22.0 <-- **UNCOMMENT THE FOLLOWING THREE LINES BELOW:** -> annotations: -> nginx.ingress.kubernetes.io/rewrite-target: '/' -> ingressPathRewriteRegex: "/" -> ``` -> **This is NOT necessary if you are installing Mojaloop v13.x or newer.** - -List of alternative Ingress Controllers: . - ### 5. Mojaloop #### 5.1. Mojaloop Helm Deployment @@ -196,7 +186,13 @@ List of alternative Ingress Controllers: +### 2.1. `ERR_NAME_NOT_RESOLVED` Error #### Description -The helm init: - - ```bash - helm init - ``` - -fails with error when installing locally on `microk8s`: - - ``` - Error: error installing: Post http://localhost:8080/apis/apps/v1/namespaces/kube-system/deployments: dial tcp 127.0.0.1:8080: connect: connection refused - ``` - -#### Reason - -This may be a missing `~/.kube/config` file, where helm looks for connection details. - -#### Fix - option #1 - -One of the solutions is to generate that file by issuing: - - ```bash - microk8s.kubectl config view --raw > $HOME/.kube/config - ``` - -#### Fix - option #2 - -Another option is to export the config to a new file: +The following error is displayed when attempting to access an end-point (e.g. central-ledger.local) via the Kubernetes Service directly in a browser: `ERR_NAME_NOT_RESOLVED` - ```bash - microk8s.kubectl config view --raw > $HOME/.kube/local.config - ``` +#### Fixes -And then export the following env var: +1. Verify that that Mojaloop was deployed by checking that the helm chart(s) was installed by executing: ```bash - export KUBECONFIG=$HOME/.kube/local.config + helm list ``` -### 2.2. `ERR_NAME_NOT_RESOLVED` Error - -#### Description + If the helm charts are not listed, see the [Deployment Guide - 5.1. Mojaloop Helm Deployment](./README.md#51-mojaloop-helm-deployment) section to install a chart. -The following error is displayed when attempting to access an end-point (e.g. central-ledger.local) via the Kubernetes Service directly in a browser: `ERR_NAME_NOT_RESOLVED` - -#### Fixes - - * Verify that that Mojaloop was deployed by checking that the helm chart(s) was installed by executing: - - ```bash - helm list - ``` +2. Ensure that all the Mojaloop Pods/Containers have started up correctly and are available through the Kubernetes dashboard. - If the helm charts are not listed, see the [Helm Chart Installation](README.md#4-helm) section to install a chart. - - * Ensure that all the Mojaloop Pods/Containers have started up correctly and are available through the Kubernetes dashboard. - - * Note that the Mojaloop deployment via Helm can take a few minutes to initially startup depending on the system's available resources and specification. It is recommended that you wait at least 10m for all Pods/Containers to self heal before troubleshooting. +3. Note that the Mojaloop deployment via Helm can take a few minutes to initially startup depending on the system's available resources and specification. It is recommended that you wait at least 10m for all Pods/Containers to self heal before troubleshooting. ### 2.3. MicroK8s - Connectivity Issues #### Description -My pods can’t reach the internet or each other (but my MicroK8s host machine can). +My pods can’t reach the internet or each other (but my MicroK8s host machine can). An example of this is that the Central-Ledger logs indicate that there is an error with the Broker transport as per the following example: -``` + +```log 2019-11-05T12:28:10.470Z - info: Server running at: 2019-11-05T12:28:10.474Z - info: Handler Setup - Registering {"type":"prepare","enabled":true}! 2019-11-05T12:28:10.476Z - info: CreateHandler::connect - creating Consumer for topics: [topic-transfer-prepare] 2019-11-05T12:28:10.515Z - info: CreateHandler::connect - successfully connected to topics: [topic-transfer-prepare] 2019-11-05T12:30:20.960Z - error: Consumer::onError()[topics='topic-transfer-prepare'] - Error: Local: Broker transport failure) ``` - + #### Fixes Make sure packets to/from the pod network interface can be forwarded to/from the default interface on the host via the iptables tool. Such changes can be made persistent by installing the iptables-persistent package: @@ -139,44 +79,48 @@ sudo apt-get install iptables-persistent or, if using ufw: - ```bash sudo ufw default allow routed ``` + The MicroK8s inspect command can be used to check the firewall configuration: ```bash microk8s.inspect ``` - ## 3. Ingress issues -### 3.1. Ingress rules are not resolving for Nginx Ingress v0.22 or later +### 3.1. Ingress rules are not resolving for Nginx Ingress v0.22 or later when installing Mojaloop Helm v12.x or less #### Description -Ingress rules are unable to resolve to the correct path based on the annotations specified in the values.yaml configuration files when using Nginx Ingress controllers v0.22 or later. +_Note: This is only applicable to Mojaloop Helm v12.x or less release._ + +Ingress rules are unable to resolve to the correct path based on the annotations specified in the [values.yaml](https://github.com/mojaloop/helm/blob/v12.0.0/mojaloop/values.yaml) configuration files when using Nginx Ingress controllers v0.22 or later. This is due to the changes introduced in Nginx Ingress controllers that are v0.22 or later as per the following link: https://kubernetes.github.io/ingress-nginx/examples/rewrite/#rewrite-target. - + #### Fixes - - * Make the following change to all Ingress annotations (from --> to) in each of the values.yaml files: - - `nginx.ingress.kubernetes.io/rewrite-target: '/'` --> `nginx.ingress.kubernetes.io/rewrite-target: '/$1'` - + +Make the following change to Ingress annotations (from --> to) in the values.yaml files: + +```yaml +nginx.ingress.kubernetes.io/rewrite-target: '/'` --> `nginx.ingress.kubernetes.io/rewrite-target: '/$1' +``` ### 3.2. Ingress rules are not resolving for Nginx Ingress earlier than v0.22 #### Description -Ingress rules are unable to resolve to the correct path based on the annotations specified in the values.yaml configuration files when using Nginx Ingress controllers that are older than v0.22. +Ingress rules are unable to resolve to the correct path based on the annotations specified in the [values.yaml](https://github.com/mojaloop/helm/blob/master/mojaloop/values.yaml) configuration files when using Nginx Ingress controllers that are older than v0.22. This is due to the changes introduced in Nginx Ingress controllers that are v0.22 or later as per the following link: https://kubernetes.github.io/ingress-nginx/examples/rewrite/#rewrite-target. - + #### Fixes - - * Make the following change to all Ingress annotations (from --> to) in each of the values.yaml files: + +Make the following change to all Ingress annotations (from --> to) in each of the values.yaml files: - `nginx.ingress.kubernetes.io/rewrite-target: '/$1'` --> `nginx.ingress.kubernetes.io/rewrite-target: '/'` +```yaml +nginx.ingress.kubernetes.io/rewrite-target: '/$1'` --> `nginx.ingress.kubernetes.io/rewrite-target: '/' +``` diff --git a/deployment-guide/local-setup-linux.md b/deployment-guide/local-setup-linux.md index 6a3e1b5a3..09be914ee 100644 --- a/deployment-guide/local-setup-linux.md +++ b/deployment-guide/local-setup-linux.md @@ -8,119 +8,133 @@ This document will provide guidelines to a technical capable resources to setup, At this point the reader/implementer should be familiar with [Mojaloop's deployment guide](./README.md). Imported information is contained in that document and as such a prerequisite to this document. -* [Environment recommendations](#1-environment-recommendations) - * [Kubernetes](#2-kubernetes) - * [MicroK8S](#21-microk8s) - * [Docker](#12-docker) -* [Useful Tips](#2-useful-tips) +- [Mojaloop Setup for Linux (Ubuntu)](#mojaloop-setup-for-linux-ubuntu) + - [Setup Introduction](#setup-introduction) + - [1. Environment recommendations](#1-environment-recommendations) + - [2. Kubernetes](#2-kubernetes) + - [2.1. MicroK8S](#21-microk8s) + - [2.2. Docker](#22-docker) ## 1. Environment recommendations This environment setup was validated on: - * 64-bit version of Ubuntu Bionic 18.04(LTS). - * This guide is based on Ubuntu 18.04.2 (bionic) on a x86_64 desktop with 8 CPU's and 16GB RAM. + +- 64-bit version of Ubuntu Bionic 18.04(LTS). +- This guide is based on Ubuntu 18.04.2 (bionic) on a x86_64 desktop with 8 CPU's and 16GB RAM. ## 2. Kubernetes Kubernetes installation for a local environment. -#### 2.1. MicroK8S +### 2.1. MicroK8S -We recommend install directly from the snap store. +We recommend install directly from the snap store, refer to [microk8s.io/docs](https://microk8s.io/docs) for more information. -Don't have the snap command? [Install snapd first](https://snapcraft.io/docs/core/install). +Don't have the snap command? [Installing snapd](https://snapcraft.io/docs/installing-snapd). 1. Installing MicroK8s from snap. + + ```bash + sudo snap install microk8s --classic --channel=1.20/stable + ``` + + _Note: Please check the [release notes of your target Mojaloop Helm deployment](https://github.com/mojaloop/helm/releases) to see if there are any recommended Kubernetes version prior to installing MicroK8s. The channel parameter specifies the version of Kubernetes to be installed. More information can be found at [microk8s.io/docs/setting-snap-channel](https://microk8s.io/docs/setting-snap-channel)._ + +2. Configure user permission + ```bash - snap install microk8s --classic + sudo usermod -a -G microk8s $USER + sudo chown -f -R $USER ~/.kube ``` - - Specific version: + + You will also need to re-enter the session for the group update to take place: + ```bash - snap install microk8s --classic --channel=1.16/stable + su - $USER ``` -2. Verify MicroK8s is installed and available. +3. Verify MicroK8s is installed and available. + ```bash microk8s.status ``` -3. During installation you can use the --wait-ready flag to wait for the kubernetes services to initialise. +4. During installation you can use the --wait-ready flag to wait for the kubernetes services to initialize. + ```bash microk8s.status --wait -ready ``` -4. To avoid colliding with a **kubectl** already installed and to avoid overwriting any existing Kubernetes configuration file, MicroK8s adds a **microk8s.kubectl** command, configured to exclusively access the new **MicroK8s** install. +5. To avoid colliding with a **kubectl** already installed and to avoid overwriting any existing Kubernetes configuration file, MicroK8s adds a **microk8s.kubectl** command, configured to exclusively access the new **MicroK8s** install. + ```bash microk8s.kubectl get services ``` -5. This step is only necessary if you require **microk8s.kubectl** to function as a standard **kubectl** command. This **DOES NOT** mean that you can then use **kubectl** to access **OTHER** k8s clusters. - +6. This step is only necessary if you require **microk8s.kubectl** to function as a standard **kubectl** command. This **DOES NOT** mean that you can then use **kubectl** to access **OTHER** k8s clusters. + An example of why you would use this: You have a bash script or 3rd party tool that expects **kubectl** to be available. E.g. If you want to use Helm, it will not work against **microk8s.kubectl**, thus one **MUST** setup the alias for Helm to function correctly. + ```bash snap alias microk8s.kubectl kubectl ``` Reverting it at any time; + ```bash snap unalias kubectl ``` We will stick with the standard command of prefixing with **microk8s.** for this guide. -6. If you already have **kubectl** installed and would like to use it to access the **MicroK8s** deployment. +7. If you already have **kubectl** installed and would like to use it to access the **MicroK8s** deployment. + ```bash microk8s.kubectl config view --raw > $HOME/.kube/config ``` -7. View the current context. +8. View the current context. + ```bash microk8s.kubectl config get-contexts ``` -8. Make sure the current context is **microk8s**. If not, set it as the current context. +9. Make sure the current context is **microk8s**. If not, set it as the current context. + ```bash microk8s.kubectl config use-context microk8s ``` -9. Install an Ingress Controller -Install an NGINX Ingress Controller for MicroK8s by running the command: +10. Install an Ingress Controller + + Install an Nginx Ingress Controller for MicroK8s by running the command: + ```bash microk8s enable ingress ``` - Alternatively via Helm Charts: - ```bash - helm --namespace kube-public install stable/nginx-ingress - ``` -### 1.2. Docker + Alternatively refer to [Deployment Guide - 3.2. Kubernetes Ingress Controller](./README.md#32-kubernetes-ingress-controller) for manual installation. + +### 2.2. Docker Docker is deployed as part of the MicroK8s installation. The docker daemon used by MicroK8s is listening on unix:///var/snap/microk8s/current/docker.sock. You can access it with the **microk8s.docker** command. -1. If you require **microk8s.docker** to function as a standard **docker** command, you set an alias. +1. If you require **microk8s.docker** to function as a standard **docker** command, you set an alias + ```bash sudo snap alias microk8s.docker docker ``` - Undo the alias; + Undo the alias: + ```bash sudo snap unalias docker ``` -2. We will apply the native microK8s commands by prefix commands **microk8s.** +2. Otherwise you can apply the native microK8s commands by prefixing the docker command with `microk8s.` + ```bash microk8s.docker ps ``` -4. Continue setup and configuration from the Kubernetes Dashboard section in the [Mojaloop's deployment guide](./README.md#31-kubernetes-dashboard) document. - -## 2. Useful Tips - -1. Resolve problems with VSCode and kafka on ubuntu 18.04. To make the code work with VSCode debugger, added the following into the launch.json - ```json - "env": { - "LD_LIBRARY_PATH": "${workspaceFolder}/node_modules/node-rdkafka/build/deps", - "WITH_SASL": 0 - } - ``` +3. Continue setup and configuration from the Kubernetes Dashboard section in the [Mojaloop's deployment guide - 3.2. Kubernetes Admin Interfaces](./README.md#32-kubernetes-admin-interfaces) document. diff --git a/deployment-guide/local-setup-mac.md b/deployment-guide/local-setup-mac.md index b78d2e22a..d362b72c9 100644 --- a/deployment-guide/local-setup-mac.md +++ b/deployment-guide/local-setup-mac.md @@ -13,62 +13,57 @@ At this point the reader/implementer should be familiar with [Mojaloop's deploym * [Kubernetes Installation with Docker](local-setup-mac.md#11-kubernetes-installation-with-docker) * [Kubernetes environment setup](local-setup-mac.md#12-kubernetes-environment-setup) - ## 1. Kubernetes This section will guide the reader through the deployment process to setup Kubernetes within Docker. ### 1.1. Kubernetes Installation with Docker -* **kubectl** Complete set of installation instruction are available [here](https://kubernetes.io/docs/tasks/tools/install-kubectl/). +1. Kubectl + + Complete set of **kubectl** installation instruction are available [here](https://kubernetes.io/docs/tasks/tools/install-kubectl/). ```bash brew install kubernetes-cli ``` + To verify if the installation was successful, check the version; ```bash kubectl version - ``` + ``` -To install Kubernetes with Docker, follow the steps below; +2. To install Kubernetes with Docker, follow the steps below; -* Click on the Docker icon on the status barr - * Select **Preferences** - * Go to **Advanced** - * Increase the CPU allocation to at least 4 - * Increase the Memory allocation to at least 8.0 GiB + * Click on the Docker icon on the status barr + * Select **Preferences** + * Go to **Advanced** + * Increase the CPU allocation to at least 4 + * Increase the Memory allocation to at least 8.0 GiB -![Kubernetes Install with Docker 1](./assets/diagrams/deployment/KubernetesInstallWithDocker-1.png) + ![Kubernetes Install with Docker 1](./assets/diagrams/deployment/KubernetesInstallWithDocker-1.png) -* Go to **Kubernetes** - * Select **Enable Kubernetes** tick box - * Make sure **Kubernetes** is selected - * Click **Apply** - * Click **Install** on the confirmation tab. - * The option is available to wait for completion or run as a background task. + * Go to **Kubernetes** + * Select **Enable Kubernetes** tick box + * Make sure **Kubernetes** is selected + * Click **Apply** + * Click **Install** on the confirmation tab. + * The option is available to wait for completion or run as a background task. -![Kubernetes Install with Docker 2](./assets/diagrams/deployment/KubernetesInstallWithDocker-2.png) + ![Kubernetes Install with Docker 2](./assets/diagrams/deployment/KubernetesInstallWithDocker-2.png) -### 1.2. Kubernetes environment setup: +### 1.2. Kubernetes environment setup 1. List the current Kubernetes context; - ```bash - kubectl config get-contexts - ``` - - **or** - ```bash - kubectx - ``` + + ```bash + kubectl config get-contexts + ``` + 2. Change your Contexts; - ```bash - kubectl config use-context docker-desktop - ``` - **or** - ```bash - kubectx docker-desktop - ``` + ```bash + kubectl config use-context docker-desktop + ``` -3. Continue setup and configuration from the Kubernetes Dashboard section in the [Mojaloop's deployment guide](./README.md#31-kubernetes-dashboard) document. +3. Continue setup and configuration from the Kubernetes Dashboard section in the [Mojaloop's deployment guide - 3.2. Kubernetes Admin Interfaces](./README.md#32-kubernetes-admin-interfaces) document. diff --git a/deployment-guide/local-setup-windows.md b/deployment-guide/local-setup-windows.md index 1713d5bf1..bae299279 100644 --- a/deployment-guide/local-setup-windows.md +++ b/deployment-guide/local-setup-windows.md @@ -8,64 +8,53 @@ This document will provide guidelines to a technical capable resources to setup, At this point the reader/implementer should be familiar with [Mojaloop's deployment guide](./README.md). Imported information is contained in that document and as such a prerequisite to this document. -* [Kubernetes](#1-kubernetes) - * [Kubernetes Installation with Docker](#11-kubernetes-installation-with-docker) - * [Kubernetes environment setup](#12-kubernetes-environment-setup) - +- [Mojaloop local environment setup for Windows](#mojaloop-local-environment-setup-for-windows) + - [Setup Introduction](#setup-introduction) + - [1. Kubernetes](#1-kubernetes) + - [1.1 Kubernetes Installation with Docker](#11-kubernetes-installation-with-docker) + - [1.2 Kubernetes environment setup](#12-kubernetes-environment-setup) ## 1. Kubernetes This section will guide the reader through the deployment process to setup Kubernetes within Docker. -If you are new to Kubernetes it is strongly recommended to familiarize yourself with Kubernetes. [Kubernetes Concepts](https://kubernetes.io/docs/concepts/overview/) is a good place to start and will provide an overview. - -The following are Kubernetes concepts used within the project. An understanding of these concepts is imperative before attempting the deployment; - -* Deployment -* Pod -* ReplicaSets -* Service -* Ingress -* StatefulSet -* DaemonSet -* Ingress Controller -* ConfigMap -* Secret - ### 1.1 Kubernetes Installation with Docker -* **kubectl** is part of the installation package when installing Docker Desktop for Windows. +- **kubectl** is part of the installation package when installing Docker Desktop for Windows. Please note the minimum system and operation requirements; - * Docker Desktop for Windows require Microsoft Hyper-V to run. Hyper-V will be enable as part of the installation process, - * Windows 10 64bit: Pro, Enterprise, Education (1607 Anneversary Update, Build 14393 or later), - * CPU SLAT-capable feature, - * At least 4GB of RAM. (At least 16GB will be required to run the Mojaloop project). - + - Docker Desktop for Windows require Microsoft Hyper-V to run. Hyper-V will be enable as part of the installation process, + - Windows 10 64bit: Pro, Enterprise, Education (1607 Anniversary Update, Build 14393 or later), + - CPU SLAT-capable feature, + - At least 4GB of RAM. (At least 16GB will be required to run the Mojaloop project). + 1. Installing Docker for Windows: You will require Docker Desktop for Windows 18.02 Edge (win50) and higher, or 18.06 Stable (win 70) and higher. Kubernetes on Docker Desktop for Windows is available on these versions and higher. They are downloadable from: - ``` + + ```url https://docs.docker.com/docker-for-windows/install/ - ``` - + ``` + Once download is completed, the downloaded file can normally be found in your Download folder. Installation is as per normal installations for windows. A restart will be required after this step. 2. Enable visualization: Docker Desktop for Windows requires Microsoft Hyper-V to run. The Docker Desktop installer enables Hyper-V for you. - + If Hyper-V is not enabled, A pop-up messages will request if you would like to turn this on. Read the messages and select 'Ok' if appropriate. You need to insure that **VT-X/AMD-v** is enabled from `cmd.exe`: + ```bash systeminfo - ``` - + ``` + If not, from `cmd.exe` run as Administrator and execute: + ```bash bcdedit /set hypervisorlaunchtype auto - ``` + ``` A reboot would be required again for the updates to take effect. @@ -81,13 +70,13 @@ The following are Kubernetes concepts used within the project. An understanding 1. Setting up the Kubernetes runtime environment within Docker Desktop: - * Open the Docker Desktop for Windows menu by right-clicking the Docker icon. - * Select **Settings** to open the settings dialog. - * Under the **General** tab you can configure when to start and update Docker. - - * Go to **Advanced** tab - * Increase the CPU allocation to at least 4 - * Increase the Memory allocation to at least 8.0 GiB + - Open the Docker Desktop for Windows menu by right-clicking the Docker icon. + - Select **Settings** to open the settings dialog. + - Under the **General** tab you can configure when to start and update Docker. + + - Go to **Advanced** tab + - Increase the CPU allocation to at least 4 + - Increase the Memory allocation to at least 8.0 GiB (If your system resource allow, more can be allocated as indicated below.) @@ -95,9 +84,9 @@ The following are Kubernetes concepts used within the project. An understanding Kubernetes on Docker Desktop for Windows is available in 18.02 Edge (win50) and higher, and in 18.06 Stable (win 70) and higher. - * go to **Kubernetes** tab - * Select **Enable Kubernetes** - * Select **Show system container (advanced)** + - go to **Kubernetes** tab + - Select **Enable Kubernetes** + - Select **Show system container (advanced)** ![Enable Kubernetes](./assets/diagrams/deployment/EnableKubernetes.png) @@ -106,6 +95,7 @@ The following are Kubernetes concepts used within the project. An understanding As mentioned, the Kubernetes client command, `kubectl` is included and configured to connect to the local Kubernetes server. If you have `kubectl` already installed, be sure to change context to point to **docker-for-desktop**; Through `cmd.exe`: + ```bash kubectl config get-contexts kubectl config use-context docker-for-desktop @@ -113,17 +103,18 @@ The following are Kubernetes concepts used within the project. An understanding Or through the Docker Desktop for Windows menu: - * right-clicking the Docker icon - * Select **Kubernetes** - * Select **docker-for-desktop** + - right-clicking the Docker icon + - Select **Kubernetes** + - Select **docker-for-desktop** - ![Docker For Desktop](./assets/diagrams/deployment/DockerForDesktop.png) + ![Docker For Desktop](./assets/diagrams/deployment/DockerForDesktop.png) 3. Install an Ingress Controller -Install nginx-ingress for load balancing & external access: + Install nginx-ingress for load balancing & external access: + ```bash helm --namespace kube-public install stable/nginx-ingress ``` -4. Continue setup and configuration from the Kubernetes Dashboard section in the [Mojaloop's deployment guide](./README.md#31-kubernetes-dashboard) document. +4. Continue setup and configuration from the Kubernetes Dashboard section in the [Mojaloop's deployment guide - 3.2. Kubernetes Admin Interfaces](./README.md#32-kubernetes-admin-interfaces) document. From 282d5ddc41d204560c318a99ca747e16cc33acb1 Mon Sep 17 00:00:00 2001 From: Miguel de Barros Date: Wed, 7 Jul 2021 10:03:13 +0200 Subject: [PATCH 15/19] fix: #2265-validating-a-mojaloop-deployment-as-described-in-the-documentation-is-failing - version bump --- package-lock.json | 12 ++++-------- package.json | 2 +- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 00a952012..8e37eaa12 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "documentation", - "version": "11.3.2", + "version": "11.4.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -259,8 +259,7 @@ "acorn": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", - "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=", - "optional": true + "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=" }, "acorn-globals": { "version": "1.0.9", @@ -1548,8 +1547,7 @@ "cssom": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha1-nxJ29bK0Y/IRTT8sdSUK+MGjb0o=", - "optional": true + "integrity": "sha1-nxJ29bK0Y/IRTT8sdSUK+MGjb0o=" }, "cssstyle": { "version": "0.2.37", @@ -10735,8 +10733,7 @@ "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "optional": true + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "prepend-http": { "version": "2.0.0", @@ -12567,7 +12564,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "optional": true, "requires": { "prelude-ls": "~1.1.2" } diff --git a/package.json b/package.json index f3417fe6d..e8a24f190 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "documentation", - "version": "11.3.2", + "version": "11.4.2", "description": "Mojaloop Documentation GitBook Project", "dependencies": { "express": "4.17.1", From 43f4f34e848fd99510acf77eec3b0918237b43c1 Mon Sep 17 00:00:00 2001 From: Miguel de Barros Date: Wed, 7 Jul 2021 10:12:58 +0200 Subject: [PATCH 16/19] updated build cache to use the "BuildNum" and not rely on the package-lock for changes - this means that any changes made to the documentation will be build and published correctly; and - the existing dependency-cache will only be rebuild if npm dependencies are changed in the package-lock --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 2765aa333..f2102be08 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -149,7 +149,7 @@ jobs: command: | npm run gitbook:build - save_cache: - key: build-cache-{{ checksum "package-lock.json" }} + key: build-cache-{{ .BuildNum }} paths: - _book @@ -198,7 +198,7 @@ jobs: echo 'export GIT_CI_EMAIL=$GIT_CI_EMAIL' >> $BASH_ENV - restore_cache: keys: - - build-cache-{{ checksum "package-lock.json" }} + - build-cache-{{ .BuildNum }} - run: <<: *defaults_git_identity_setup - run: From 92b2b3e226e84fbc9d8ed7a0e53716f94431d18f Mon Sep 17 00:00:00 2001 From: Miguel de Barros Date: Wed, 7 Jul 2021 10:24:29 +0200 Subject: [PATCH 17/19] changed .BuildNum to .Revision - BuildNum is actually the "Job" number and NOT the identifier for the Workflow. - Switched to use .Revision, which is the VCS revision currently being built. --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f2102be08..d964aef3e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -149,7 +149,7 @@ jobs: command: | npm run gitbook:build - save_cache: - key: build-cache-{{ .BuildNum }} + key: build-cache-{{ .Revision }} paths: - _book @@ -198,7 +198,7 @@ jobs: echo 'export GIT_CI_EMAIL=$GIT_CI_EMAIL' >> $BASH_ENV - restore_cache: keys: - - build-cache-{{ .BuildNum }} + - build-cache-{{ .Revision }} - run: <<: *defaults_git_identity_setup - run: From a6e59f6ce519a68d800950d3f9c19755853320ce Mon Sep 17 00:00:00 2001 From: Miguel de Barros Date: Wed, 7 Jul 2021 14:08:47 +0200 Subject: [PATCH 18/19] doc: update to deployment guide - updated local setup for linux, max, & windows - fixed table of contents for local setup for mac --- deployment-guide/local-setup-linux.md | 5 ++++- deployment-guide/local-setup-mac.md | 15 +++++++++------ deployment-guide/local-setup-windows.md | 11 +++-------- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/deployment-guide/local-setup-linux.md b/deployment-guide/local-setup-linux.md index 09be914ee..92bc0ef67 100644 --- a/deployment-guide/local-setup-linux.md +++ b/deployment-guide/local-setup-linux.md @@ -14,6 +14,7 @@ At this point the reader/implementer should be familiar with [Mojaloop's deploym - [2. Kubernetes](#2-kubernetes) - [2.1. MicroK8S](#21-microk8s) - [2.2. Docker](#22-docker) + - [3. Continue with Deployment](#3-continue-with-deployment) ## 1. Environment recommendations @@ -137,4 +138,6 @@ Docker is deployed as part of the MicroK8s installation. The docker daemon used microk8s.docker ps ``` -3. Continue setup and configuration from the Kubernetes Dashboard section in the [Mojaloop's deployment guide - 3.2. Kubernetes Admin Interfaces](./README.md#32-kubernetes-admin-interfaces) document. +## 3. Continue with Deployment + +1. Continue setup and configuration from the [Mojaloop's deployment guide - 3.2. Kubernetes Admin Interfaces](./README.md#32-kubernetes-admin-interfaces) document. diff --git a/deployment-guide/local-setup-mac.md b/deployment-guide/local-setup-mac.md index d362b72c9..4ed582188 100644 --- a/deployment-guide/local-setup-mac.md +++ b/deployment-guide/local-setup-mac.md @@ -8,11 +8,12 @@ This document will provide guidelines to a technical capable resources to setup, At this point the reader/implementer should be familiar with [Mojaloop's deployment guide](./README.md). Imported information is contained in that document and as such a prerequisite to this document. -* [Local Deployment](local-setup-mac.md#local-deployment) - * [Kubernetes](local-setup-mac.md#1-kubernetes) - * [Kubernetes Installation with Docker](local-setup-mac.md#11-kubernetes-installation-with-docker) - * [Kubernetes environment setup](local-setup-mac.md#12-kubernetes-environment-setup) - +- [Mojaloop local environment setup for Mac](#mojaloop-local-environment-setup-for-mac) + - [Setup Introduction](#setup-introduction) + - [1. Kubernetes](#1-kubernetes) + - [1.1. Kubernetes Installation with Docker](#11-kubernetes-installation-with-docker) + - [2. Continue with Deployment](#2-continue-with-deployment) + ## 1. Kubernetes This section will guide the reader through the deployment process to setup Kubernetes within Docker. @@ -66,4 +67,6 @@ This section will guide the reader through the deployment process to setup Kuber kubectl config use-context docker-desktop ``` -3. Continue setup and configuration from the Kubernetes Dashboard section in the [Mojaloop's deployment guide - 3.2. Kubernetes Admin Interfaces](./README.md#32-kubernetes-admin-interfaces) document. +## 2. Continue with Deployment + +1. Continue setup and configuration from the [Mojaloop's deployment guide - 3.1. Kubernetes Ingress Controller](#31-kubernetes-ingress-controller) document. diff --git a/deployment-guide/local-setup-windows.md b/deployment-guide/local-setup-windows.md index bae299279..89c167629 100644 --- a/deployment-guide/local-setup-windows.md +++ b/deployment-guide/local-setup-windows.md @@ -13,6 +13,7 @@ At this point the reader/implementer should be familiar with [Mojaloop's deploym - [1. Kubernetes](#1-kubernetes) - [1.1 Kubernetes Installation with Docker](#11-kubernetes-installation-with-docker) - [1.2 Kubernetes environment setup](#12-kubernetes-environment-setup) + - [2. Continue with Deployment](#2-continue-with-deployment) ## 1. Kubernetes @@ -109,12 +110,6 @@ This section will guide the reader through the deployment process to setup Kuber ![Docker For Desktop](./assets/diagrams/deployment/DockerForDesktop.png) -3. Install an Ingress Controller +## 2. Continue with Deployment - Install nginx-ingress for load balancing & external access: - - ```bash - helm --namespace kube-public install stable/nginx-ingress - ``` - -4. Continue setup and configuration from the Kubernetes Dashboard section in the [Mojaloop's deployment guide - 3.2. Kubernetes Admin Interfaces](./README.md#32-kubernetes-admin-interfaces) document. +1. Continue setup and configuration from the [Mojaloop's deployment guide - 3.1. Kubernetes Ingress Controller](#31-kubernetes-ingress-controller) document. From fa7932eb344571f72bfd3e144e11996ba22b36e4 Mon Sep 17 00:00:00 2001 From: Miguel de Barros Date: Thu, 8 Jul 2021 12:13:51 +0200 Subject: [PATCH 19/19] fix local deployment guide links --- deployment-guide/local-setup-mac.md | 2 +- deployment-guide/local-setup-windows.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/deployment-guide/local-setup-mac.md b/deployment-guide/local-setup-mac.md index 4ed582188..a7aa2f86e 100644 --- a/deployment-guide/local-setup-mac.md +++ b/deployment-guide/local-setup-mac.md @@ -69,4 +69,4 @@ This section will guide the reader through the deployment process to setup Kuber ## 2. Continue with Deployment -1. Continue setup and configuration from the [Mojaloop's deployment guide - 3.1. Kubernetes Ingress Controller](#31-kubernetes-ingress-controller) document. +1. Continue setup and configuration from the [Mojaloop's deployment guide - 3.1. Kubernetes Ingress Controller](./README.md#31-kubernetes-ingress-controller) document. diff --git a/deployment-guide/local-setup-windows.md b/deployment-guide/local-setup-windows.md index 89c167629..9cc0dec35 100644 --- a/deployment-guide/local-setup-windows.md +++ b/deployment-guide/local-setup-windows.md @@ -112,4 +112,4 @@ This section will guide the reader through the deployment process to setup Kuber ## 2. Continue with Deployment -1. Continue setup and configuration from the [Mojaloop's deployment guide - 3.1. Kubernetes Ingress Controller](#31-kubernetes-ingress-controller) document. +1. Continue setup and configuration from the [Mojaloop's deployment guide - 3.1. Kubernetes Ingress Controller](./README.md#31-kubernetes-ingress-controller) document.