From 2ad08d167cc9000daf4de52b142475f0c9a4017f Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Mon, 6 Aug 2018 15:26:17 -0500 Subject: [PATCH 01/33] adding more changes to README --- README.md | 9 ++++ contrib/helm/README.md | 47 +++++++++++++++---- .../event-gateway/templates/etcd-cluster.yaml | 2 +- .../templates/event-gateway-ingress.yaml | 22 +++++++++ .../templates/event-gateway.yaml | 5 +- 5 files changed, 73 insertions(+), 12 deletions(-) create mode 100644 contrib/helm/event-gateway/templates/event-gateway-ingress.yaml diff --git a/README.md b/README.md index 6adafe7..2385255 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,15 @@ Then run the binary in development mode with: $ event-gateway -dev ``` +### Kubernetes + +We've added `helm` charts to the repo for a quick deploy to an existing cluster. Please note, the default +installation requires proper `loadbalancer` support out of the box. If you don't have this enabled in your +cluster you can check the `minikube` instructions for more guidance. + +[Helm Chart](./contrib/helm/README.md) +[Minikube](./contrib/helm/README.md) + --- If you want more detailed information on running and developing with the Event Gateway, diff --git a/contrib/helm/README.md b/contrib/helm/README.md index 5587a71..13d3bc1 100644 --- a/contrib/helm/README.md +++ b/contrib/helm/README.md @@ -1,24 +1,47 @@ # Event Gateway Helm chart -This chart deploys the Event Gateway with etcd onto a Kubernetes cluster. +This chart deploys the Event Gateway with etcd onto a Kubernetes cluster. Please note, the default instructions expect +an existing kubernetes cluster that supports loadbalancers, such as GKE. If your environment doesn't have a loadbalancer +set up, please follow the minikube instructions below to retrieve the `event_gateway` information. -## Installation +## Contents -Make sure you have helm installed on you machine and run `helm init` on your K8s cluster. +1. [Quickstart](#quickstart) +1. [Minikube or local clusters](#minikube-or-local-clusters) + 1. [Setting up an Ingress](#setting-up-an-ingress) +1. [Configuration](#configuration) -From the `event-gateway/contrib/helm` folder: +### Quickstart -First, install etcd operator: +Make sure you have helm installed on you machine and run `helm init` on your k8s cluster. This will set up the +`helm` and `tiller` functions required for easy deployment of config files to your cluster. You can follow +instructions [here](https://docs.helm.sh/using_helm/#quickstart) if you have not set this up previously. + +**NOTE:** This portion of the config expects you to have a pre-existing kubernetes cluster (not minikube). For +local development please check the [minikube](#minikube-or-local-clusters) information below. + +Once installed, navigate to the `event-gateway/contrib/helm` folder and install the following components: + +**etcd-operator** ``` -helm install stable/etcd-operator --name ego +helm install stable/etcd-operator --name ego [--namespace ] ``` -Then, install the Event Gateway: +**event-gateway** ``` -helm install event-gateway --name eg +helm install event-gateway --name eg [--namespace ] ``` -Note: to deploy the stack to a namespace other than the default, add `--namespace` option to both `helm install` commands. +This will install each of the `etcd-operator` and `event-gateway` into the `default` namespace in kubernetes. Please note, +this namespace has no bearing on your Event Gateway `spaces` as outlined in the [docs](https://github.com/serverless/event-gateway/blob/master/README.md). If you'd like to install `etcd-operator` and `event-gateway` in another namespace, add the `--namespace ` option to both `helm install` commands above. + +Next we'll need to collect the Event Gateway IP and ports for use on the CLI. To do so, inspect your services as follows: + +``` +export EVENT_GATEWAY_URL=$(kubectl get svc event-gateway -o jsonpath={.status.loadBalancer.ingress[0].ip}) +export EVENT_GATEWAY_CONFIG_API_PORT=4001 +export EVENT_GATEWAY_EVENTS_API_PORT=4000 +``` To get the Event Gateway load balancer IP: ``` @@ -31,7 +54,11 @@ helm delete eg helm delete ego ``` -## Configuration +### Minikube or local clusters + +#### Setting up an Ingress + +### Configuration | Parameter | Description | Default | |-----------------------------|----------------------------------------------|----------------------------| diff --git a/contrib/helm/event-gateway/templates/etcd-cluster.yaml b/contrib/helm/event-gateway/templates/etcd-cluster.yaml index e975eea..e50dbeb 100644 --- a/contrib/helm/event-gateway/templates/etcd-cluster.yaml +++ b/contrib/helm/event-gateway/templates/etcd-cluster.yaml @@ -4,4 +4,4 @@ metadata: name: {{ .Values.etcd_cluster_name }} spec: size: 3 - version: "3.2.13" \ No newline at end of file + version: "3.2.13" diff --git a/contrib/helm/event-gateway/templates/event-gateway-ingress.yaml b/contrib/helm/event-gateway/templates/event-gateway-ingress.yaml new file mode 100644 index 0000000..cffdc7d --- /dev/null +++ b/contrib/helm/event-gateway/templates/event-gateway-ingress.yaml @@ -0,0 +1,22 @@ +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ template "event-gateway.fullname" . }} + annotations: + nginx.ingress.kubernetes.io/rewrite-target: / +spec: + backend: + serviceName: default-http-backend + servicePort: 80 + rules: + - host: {{ template "event-gateway.name" . }} + http: + paths: + - path: /v1/config + backend: + serviceName: config + servicePort: {{ .Values.service.config.port }} + - path: /v1/events + backend: + serviceName: events + servicePort: {{ .Values.service.events.port }} diff --git a/contrib/helm/event-gateway/templates/event-gateway.yaml b/contrib/helm/event-gateway/templates/event-gateway.yaml index 15e7361..8029b96 100644 --- a/contrib/helm/event-gateway/templates/event-gateway.yaml +++ b/contrib/helm/event-gateway/templates/event-gateway.yaml @@ -36,6 +36,7 @@ spec: httpGet: path: /v1/status port: {{ .Values.service.config.port }} + --- apiVersion: v1 kind: Service @@ -46,13 +47,15 @@ metadata: {{ . }} {{- end }} labels: - chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}" + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} spec: type: {{ .Values.service.type }} ports: - name: config port: {{ .Values.service.config.port }} + targetPort: {{ .Values.service.config.port }} - name: events port: {{ .Values.service.events.port }} + targetPort: {{ .Values.service.events.port }} selector: app: {{ template "event-gateway.name" . }} From 2f0c59362526b83cfeb638250349090c61b5398a Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Mon, 6 Aug 2018 15:40:27 -0500 Subject: [PATCH 02/33] interim commit for more README updates --- contrib/helm/README.md | 67 +++++++++++++++++++++++++++++++++--------- 1 file changed, 53 insertions(+), 14 deletions(-) diff --git a/contrib/helm/README.md b/contrib/helm/README.md index 13d3bc1..ebb9224 100644 --- a/contrib/helm/README.md +++ b/contrib/helm/README.md @@ -8,12 +8,16 @@ set up, please follow the minikube instructions below to retrieve the `event_gat 1. [Quickstart](#quickstart) 1. [Minikube or local clusters](#minikube-or-local-clusters) + 1. [Using helm](#using-helm) + 1. [Using custom resources)(#using-custom-resources) 1. [Setting up an Ingress](#setting-up-an-ingress) +1. [Examples](#examples) 1. [Configuration](#configuration) +1. [Cleanup](#cleanup) -### Quickstart +## Quickstart -Make sure you have helm installed on you machine and run `helm init` on your k8s cluster. This will set up the +Make sure you have helm installed on your machine and run `helm init` on your k8s cluster. This will set up the `helm` and `tiller` functions required for easy deployment of config files to your cluster. You can follow instructions [here](https://docs.helm.sh/using_helm/#quickstart) if you have not set this up previously. @@ -43,22 +47,48 @@ export EVENT_GATEWAY_CONFIG_API_PORT=4001 export EVENT_GATEWAY_EVENTS_API_PORT=4000 ``` -To get the Event Gateway load balancer IP: -``` -kubectl get svc -``` +With your environment set up, you can now jump to the [examples](#examples) section to put your `event-gateway` to use! -To delete the Event Gatway and etcd: -``` -helm delete eg -helm delete ego -``` +## Minikube or local clusters + +To develop and deploy the `event-gateway` and all related elements locally, the easiest method includes using the [minikube](https://github.com/kubernetes/minikube) toolset. To get started, set up your cluster with the following instructions: + +**Fedora/RHEL/CentOS** ++ Install the prerequisite packages: + ``` + sudo dnf install kubernetes libvirt-daemon-kvm qemu-kvm nodejs docker + ``` + ++ Ensure your user is added to the `libvirt` group for VM access. You can verify with `getent group libvirt` once done. + ``` + sudo usermod -a -G libvirt $(whoami) + `` + ++ Next, add the `libvirt` group to your current user grouplist. Verify by running `id` once done. + `` + newgrp libvirt + `` + ++. curl -L https://github.com/docker/machine/releases/download/v0.15.0/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && + chmod +x /tmp/docker-machine && + sudo cp /tmp/docker-machine /usr/local/bin/docker-machine + a. can be found here: https://github.com/docker/machine/releases ++. sudo curl -L https://github.com/dhiltgen/docker-machine-kvm/releases/download/v0.10.0/docker-machine-driver-kvm-centos7 > /tmp/docker-machine-driver-kvm && sudo chmod +x /tmp/docker-machine-driver-kvm && sudo mv /tmp/docker-machine-driver-kvm /usr/local/bin/docker-machine-driver-kvm + a. can be found here: https://github.com/dhiltgen/docker-machine-kvm/releases/ ++. curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && sudo chmod +x minikube && sudo mv minikube /usr/local/bin/ ++. minikube start --vm-driver kvm2 -### Minikube or local clusters -#### Setting up an Ingress -### Configuration +### Using helm + +### Using custom resource definitions + +### Setting up an Ingress + +## Examples + +## Configuration | Parameter | Description | Default | |-----------------------------|----------------------------------------------|----------------------------| @@ -97,3 +127,12 @@ metadata: service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0 foo: bar ``` + +## Cleanup + +When you'd like to clean up the deployments, it's easy to remove services using helm: + +``` +helm delete --purge eg +helm delete --purge ego +``` From ebb4f53a0b8edb395bbb80f9829fe6f0f330bb87 Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Mon, 6 Aug 2018 15:46:31 -0500 Subject: [PATCH 03/33] more updates to README --- contrib/helm/README.md | 44 ++++++++++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/contrib/helm/README.md b/contrib/helm/README.md index ebb9224..33fae5e 100644 --- a/contrib/helm/README.md +++ b/contrib/helm/README.md @@ -9,7 +9,7 @@ set up, please follow the minikube instructions below to retrieve the `event_gat 1. [Quickstart](#quickstart) 1. [Minikube or local clusters](#minikube-or-local-clusters) 1. [Using helm](#using-helm) - 1. [Using custom resources)(#using-custom-resources) + 1. [Using custom resources](#using-custom-resources) 1. [Setting up an Ingress](#setting-up-an-ingress) 1. [Examples](#examples) 1. [Configuration](#configuration) @@ -62,32 +62,52 @@ To develop and deploy the `event-gateway` and all related elements locally, the + Ensure your user is added to the `libvirt` group for VM access. You can verify with `getent group libvirt` once done. ``` sudo usermod -a -G libvirt $(whoami) - `` + ``` + Next, add the `libvirt` group to your current user grouplist. Verify by running `id` once done. - `` + ``` newgrp libvirt - `` + ``` + ++ Add the [docker-machine](https://github.com/docker/machine) binary to your system + ``` + curl -L https://github.com/docker/machine/releases/download/v0.15.0/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && + chmod +x /tmp/docker-machine && + sudo cp /tmp/docker-machine /usr/local/bin/docker-machine + ``` + ++ Add the CentOS `docker-machine` kvm driver. It's ok if you're not using CentOS as the driver should **still work**™ + ``` + sudo curl -L https://github.com/dhiltgen/docker-machine-kvm/releases/download/v0.10.0/docker-machine-driver-kvm-centos7 > /tmp/docker-machine-driver-kvm && sudo chmod +x /tmp/docker-machine-driver-kvm && sudo mv /tmp/docker-machine-driver-kvm /usr/local/bin/docker-machine-driver-kvm + ``` + ++ Download the minikube instance for your system + ``` + curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && sudo chmod +x minikube && sudo mv minikube /usr/local/bin/ -+. curl -L https://github.com/docker/machine/releases/download/v0.15.0/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && - chmod +x /tmp/docker-machine && - sudo cp /tmp/docker-machine /usr/local/bin/docker-machine - a. can be found here: https://github.com/docker/machine/releases -+. sudo curl -L https://github.com/dhiltgen/docker-machine-kvm/releases/download/v0.10.0/docker-machine-driver-kvm-centos7 > /tmp/docker-machine-driver-kvm && sudo chmod +x /tmp/docker-machine-driver-kvm && sudo mv /tmp/docker-machine-driver-kvm /usr/local/bin/docker-machine-driver-kvm - a. can be found here: https://github.com/dhiltgen/docker-machine-kvm/releases/ -+. curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && sudo chmod +x minikube && sudo mv minikube /usr/local/bin/ -+. minikube start --vm-driver kvm2 ++ Finally, start up your minikube service! **NOTE:** the instructions recommend using `kvm2` but please use the version that matches your system install + ``` + minikube start --vm-driver kvm2 + ``` +**MacOS** +PENDING ### Using helm ### Using custom resource definitions +PENDING + ### Setting up an Ingress +PENDING + ## Examples +PENDING + ## Configuration | Parameter | Description | Default | From 0eb794c85afdf17ecc14629a5bf59f2fcf70264c Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Mon, 6 Aug 2018 15:58:29 -0500 Subject: [PATCH 04/33] adding in fedora section --- contrib/helm/README.md | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/contrib/helm/README.md b/contrib/helm/README.md index 33fae5e..56a8626 100644 --- a/contrib/helm/README.md +++ b/contrib/helm/README.md @@ -71,9 +71,7 @@ To develop and deploy the `event-gateway` and all related elements locally, the + Add the [docker-machine](https://github.com/docker/machine) binary to your system ``` - curl -L https://github.com/docker/machine/releases/download/v0.15.0/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && - chmod +x /tmp/docker-machine && - sudo cp /tmp/docker-machine /usr/local/bin/docker-machine + curl -L https://github.com/docker/machine/releases/download/v0.15.0/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && chmod +x /tmp/docker-machine && sudo cp /tmp/docker-machine /usr/local/bin/docker-machine ``` + Add the CentOS `docker-machine` kvm driver. It's ok if you're not using CentOS as the driver should **still work**™ @@ -90,12 +88,44 @@ To develop and deploy the `event-gateway` and all related elements locally, the minikube start --vm-driver kvm2 ``` +**Debian/Ubuntu** + **MacOS** PENDING ### Using helm +Most of the instructions for using `helm` come from the [Quickstart](#quick-start), but please note the differnce when collecting +the `config` and `events` API ports. Minikube does not ship with integrated loadbalancer options like hosted environments would +provide (e.g. Google Kubernetes Engine). As a result, though we can use the same `helm` charts as those installations, we'll +need to grab our ports from the randomly assigned `nodePort` fields before moving forward. There are numerous articles in the community that describe this minikube-specific behavior, but they are beyond the scope of this document (edit: [here](https://kubernetes.io/docs/tutorials/kubernetes-basics/expose/expose-intro/) is a bit of information on exposing services). + +Once installed, navigate to the `event-gateway/contrib/helm` folder and install the following components: + +**etcd-operator** +``` +helm install stable/etcd-operator --name ego [--namespace ] +``` + +**event-gateway** +``` +helm install event-gateway --name eg [--namespace ] +``` + +This will install each of the `etcd-operator` and `event-gateway` into the `default` namespace in kubernetes. Please note, +this namespace has no bearing on your Event Gateway `spaces` as outlined in the [docs](https://github.com/serverless/event-gateway/blob/master/README.md). If you'd like to install `etcd-operator` and `event-gateway` in another namespace, add the `--namespace ` option to both `helm install` commands above. + +Next we'll need to collect the Event Gateway IP and ports for use on the CLI. To do so, inspect your services as follows: + +``` +export EVENT_GATEWAY_URL=$(kubectl get svc event-gateway -o jsonpath={.status.loadBalancer.ingress[0].ip}) +export EVENT_GATEWAY_CONFIG_API_PORT=$(kubectl get svc eg-event-gateway -o json | jq -r '.spec.ports[] | select(.name=="config") | .nodePort | tostring') +export EVENT_GATEWAY_EVENTS_API_PORT=$(kubectl get svc eg-event-gateway -o json | jq -r '.spec.ports[] | select(.name=="events") | .nodePort | tostring') +``` + +With your environment set up, you can now jump to the [examples](#examples) section to put your `event-gateway` to use! + ### Using custom resource definitions PENDING From dc2f5115c1b4cfa8445880c190db6fff78e54412 Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Mon, 6 Aug 2018 15:59:18 -0500 Subject: [PATCH 05/33] moving README one level higher --- contrib/{helm => }/README.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename contrib/{helm => }/README.md (100%) diff --git a/contrib/helm/README.md b/contrib/README.md similarity index 100% rename from contrib/helm/README.md rename to contrib/README.md From fa7954854c0dca874106047233e44bbdb33ee8a1 Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Mon, 6 Aug 2018 16:01:34 -0500 Subject: [PATCH 06/33] adding in ports description --- contrib/README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/contrib/README.md b/contrib/README.md index 56a8626..b8fc217 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -124,6 +124,15 @@ export EVENT_GATEWAY_CONFIG_API_PORT=$(kubectl get svc eg-event-gateway -o json export EVENT_GATEWAY_EVENTS_API_PORT=$(kubectl get svc eg-event-gateway -o json | jq -r '.spec.ports[] | select(.name=="events") | .nodePort | tostring') ``` +This should yield something like the following (your data will be dependent on your specific cluster): +``` +$ env | grep EVENT +... +EVENT_GATEWAY_URL=192.168.42.202 +EVENT_GATEWAY_EVENTS_API_PORT=31455 +EVENT_GATEWAY_CONFIG_API_PORT=30523 +``` + With your environment set up, you can now jump to the [examples](#examples) section to put your `event-gateway` to use! ### Using custom resource definitions From f7a1d7d7040074a2b4bc5cfd2e5839ad0753404f Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Mon, 6 Aug 2018 16:06:04 -0500 Subject: [PATCH 07/33] breaking up lines a bit --- contrib/README.md | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/contrib/README.md b/contrib/README.md index b8fc217..24762e3 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -71,17 +71,24 @@ To develop and deploy the `event-gateway` and all related elements locally, the + Add the [docker-machine](https://github.com/docker/machine) binary to your system ``` - curl -L https://github.com/docker/machine/releases/download/v0.15.0/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && chmod +x /tmp/docker-machine && sudo cp /tmp/docker-machine /usr/local/bin/docker-machine + curl -L https://github.com/docker/machine/releases/download/v0.15.0/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && \ + chmod +x /tmp/docker-machine && \ + sudo cp /tmp/docker-machine /usr/local/bin/docker-machine ``` + Add the CentOS `docker-machine` kvm driver. It's ok if you're not using CentOS as the driver should **still work**™ ``` - sudo curl -L https://github.com/dhiltgen/docker-machine-kvm/releases/download/v0.10.0/docker-machine-driver-kvm-centos7 > /tmp/docker-machine-driver-kvm && sudo chmod +x /tmp/docker-machine-driver-kvm && sudo mv /tmp/docker-machine-driver-kvm /usr/local/bin/docker-machine-driver-kvm + sudo curl -L https://github.com/dhiltgen/docker-machine-kvm/releases/download/v0.10.0/docker-machine-driver-kvm-centos7 > /tmp/docker-machine-driver-kvm && \ + sudo chmod +x /tmp/docker-machine-driver-kvm && \ + sudo mv /tmp/docker-machine-driver-kvm /usr/local/bin/docker-machine-driver-kvm ``` + Download the minikube instance for your system ``` - curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && sudo chmod +x minikube && sudo mv minikube /usr/local/bin/ + curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 &&i \ + sudo chmod +x minikube && \ + sudo mv minikube /usr/local/bin/ + ``` + Finally, start up your minikube service! **NOTE:** the instructions recommend using `kvm2` but please use the version that matches your system install ``` @@ -90,6 +97,8 @@ To develop and deploy the `event-gateway` and all related elements locally, the **Debian/Ubuntu** +PENDING + **MacOS** PENDING @@ -99,7 +108,9 @@ PENDING Most of the instructions for using `helm` come from the [Quickstart](#quick-start), but please note the differnce when collecting the `config` and `events` API ports. Minikube does not ship with integrated loadbalancer options like hosted environments would provide (e.g. Google Kubernetes Engine). As a result, though we can use the same `helm` charts as those installations, we'll -need to grab our ports from the randomly assigned `nodePort` fields before moving forward. There are numerous articles in the community that describe this minikube-specific behavior, but they are beyond the scope of this document (edit: [here](https://kubernetes.io/docs/tutorials/kubernetes-basics/expose/expose-intro/) is a bit of information on exposing services). +need to grab our ports from the randomly assigned `nodePort` fields before moving forward. There are numerous articles in the +community that describe this minikube-specific behavior, but they are beyond the scope of this document +(edit: [here](https://kubernetes.io/docs/tutorials/kubernetes-basics/expose/expose-intro/) is a bit of information on exposing services). Once installed, navigate to the `event-gateway/contrib/helm` folder and install the following components: @@ -114,7 +125,9 @@ helm install event-gateway --name eg [--namespace ] ``` This will install each of the `etcd-operator` and `event-gateway` into the `default` namespace in kubernetes. Please note, -this namespace has no bearing on your Event Gateway `spaces` as outlined in the [docs](https://github.com/serverless/event-gateway/blob/master/README.md). If you'd like to install `etcd-operator` and `event-gateway` in another namespace, add the `--namespace ` option to both `helm install` commands above. +this namespace has no bearing on your Event Gateway `spaces` as outlined in the [docs](https://github.com/serverless/event-gateway/blob/master/README.md). +If you'd like to install `etcd-operator` and `event-gateway` in another namespace, add the `--namespace ` option to +both `helm install` commands above. Next we'll need to collect the Event Gateway IP and ports for use on the CLI. To do so, inspect your services as follows: From ee5abf9f8a1dd485152143685165105aba78f18d Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Mon, 6 Aug 2018 16:17:09 -0500 Subject: [PATCH 08/33] fixing the event url --- contrib/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/README.md b/contrib/README.md index 24762e3..83a567b 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -1,4 +1,4 @@ -# Event Gateway Helm chart +# Event Gateway on Kubernetes This chart deploys the Event Gateway with etcd onto a Kubernetes cluster. Please note, the default instructions expect an existing kubernetes cluster that supports loadbalancers, such as GKE. If your environment doesn't have a loadbalancer @@ -132,7 +132,7 @@ both `helm install` commands above. Next we'll need to collect the Event Gateway IP and ports for use on the CLI. To do so, inspect your services as follows: ``` -export EVENT_GATEWAY_URL=$(kubectl get svc event-gateway -o jsonpath={.status.loadBalancer.ingress[0].ip}) +export EVENT_GATEWAY_URL=$(minikube ip) export EVENT_GATEWAY_CONFIG_API_PORT=$(kubectl get svc eg-event-gateway -o json | jq -r '.spec.ports[] | select(.name=="config") | .nodePort | tostring') export EVENT_GATEWAY_EVENTS_API_PORT=$(kubectl get svc eg-event-gateway -o json | jq -r '.spec.ports[] | select(.name=="events") | .nodePort | tostring') ``` From 08570dd4e0c6d0396f0b7a8ebe3d03abcf6adddd Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Mon, 6 Aug 2018 16:45:50 -0500 Subject: [PATCH 09/33] adding in dev flag for running --- contrib/helm/event-gateway/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/helm/event-gateway/values.yaml b/contrib/helm/event-gateway/values.yaml index 308e675..ab5a2dd 100644 --- a/contrib/helm/event-gateway/values.yaml +++ b/contrib/helm/event-gateway/values.yaml @@ -17,6 +17,6 @@ resources: requests: cpu: 200m memory: 256Mi -command: ["-log-level=debug"] +command: ["--log-level=debug"] etcd_cluster_name: eg-etcd-cluster etcd_cluster_port: 2379 From aacd0c943c37e567fc0db214da03032ce1a6cd50 Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Mon, 6 Aug 2018 18:18:26 -0500 Subject: [PATCH 10/33] adding example function register --- contrib/README.md | 100 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 99 insertions(+), 1 deletion(-) diff --git a/contrib/README.md b/contrib/README.md index 83a567b..354ce67 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -158,7 +158,105 @@ PENDING ## Examples -PENDING +Once you've set each of the `EVENT_GATEWAY_URL`, `EVENT_GATEWAY_CONFIG_API_PORT`, and `EVENT_GATEWAY_EVENTS_API_PORT` environment +variables, you're set to start interacting with the `event-gateway`! + +#### Register a function + +Define the function registration payload, using **AWS** as an example: + +``` +cat > function.json < Date: Mon, 6 Aug 2018 20:39:42 -0500 Subject: [PATCH 11/33] updating data --- contrib/README.md | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/contrib/README.md b/contrib/README.md index 354ce67..98a0559 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -27,12 +27,12 @@ local development please check the [minikube](#minikube-or-local-clusters) infor Once installed, navigate to the `event-gateway/contrib/helm` folder and install the following components: **etcd-operator** -``` +```bash helm install stable/etcd-operator --name ego [--namespace ] ``` **event-gateway** -``` +```bash helm install event-gateway --name eg [--namespace ] ``` @@ -41,7 +41,7 @@ this namespace has no bearing on your Event Gateway `spaces` as outlined in the Next we'll need to collect the Event Gateway IP and ports for use on the CLI. To do so, inspect your services as follows: -``` +```bash export EVENT_GATEWAY_URL=$(kubectl get svc event-gateway -o jsonpath={.status.loadBalancer.ingress[0].ip}) export EVENT_GATEWAY_CONFIG_API_PORT=4001 export EVENT_GATEWAY_EVENTS_API_PORT=4000 @@ -55,43 +55,43 @@ To develop and deploy the `event-gateway` and all related elements locally, the **Fedora/RHEL/CentOS** + Install the prerequisite packages: - ``` + ```bash sudo dnf install kubernetes libvirt-daemon-kvm qemu-kvm nodejs docker ``` + Ensure your user is added to the `libvirt` group for VM access. You can verify with `getent group libvirt` once done. - ``` + ```bash sudo usermod -a -G libvirt $(whoami) ``` + Next, add the `libvirt` group to your current user grouplist. Verify by running `id` once done. - ``` + ```bash newgrp libvirt ``` + Add the [docker-machine](https://github.com/docker/machine) binary to your system - ``` + ```bash curl -L https://github.com/docker/machine/releases/download/v0.15.0/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && \ chmod +x /tmp/docker-machine && \ sudo cp /tmp/docker-machine /usr/local/bin/docker-machine ``` + Add the CentOS `docker-machine` kvm driver. It's ok if you're not using CentOS as the driver should **still work**™ - ``` + ```bash sudo curl -L https://github.com/dhiltgen/docker-machine-kvm/releases/download/v0.10.0/docker-machine-driver-kvm-centos7 > /tmp/docker-machine-driver-kvm && \ sudo chmod +x /tmp/docker-machine-driver-kvm && \ sudo mv /tmp/docker-machine-driver-kvm /usr/local/bin/docker-machine-driver-kvm ``` + Download the minikube instance for your system - ``` + ```bash curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 &&i \ sudo chmod +x minikube && \ sudo mv minikube /usr/local/bin/ ``` + Finally, start up your minikube service! **NOTE:** the instructions recommend using `kvm2` but please use the version that matches your system install - ``` + ```bash minikube start --vm-driver kvm2 ``` @@ -115,12 +115,12 @@ community that describe this minikube-specific behavior, but they are beyond the Once installed, navigate to the `event-gateway/contrib/helm` folder and install the following components: **etcd-operator** -``` +```bash helm install stable/etcd-operator --name ego [--namespace ] ``` **event-gateway** -``` +```bash helm install event-gateway --name eg [--namespace ] ``` @@ -131,14 +131,14 @@ both `helm install` commands above. Next we'll need to collect the Event Gateway IP and ports for use on the CLI. To do so, inspect your services as follows: -``` +```bash export EVENT_GATEWAY_URL=$(minikube ip) export EVENT_GATEWAY_CONFIG_API_PORT=$(kubectl get svc eg-event-gateway -o json | jq -r '.spec.ports[] | select(.name=="config") | .nodePort | tostring') export EVENT_GATEWAY_EVENTS_API_PORT=$(kubectl get svc eg-event-gateway -o json | jq -r '.spec.ports[] | select(.name=="events") | .nodePort | tostring') ``` This should yield something like the following (your data will be dependent on your specific cluster): -``` +```bash $ env | grep EVENT ... EVENT_GATEWAY_URL=192.168.42.202 @@ -165,7 +165,7 @@ variables, you're set to start interacting with the `event-gateway`! Define the function registration payload, using **AWS** as an example: -``` +```bash cat > function.json < Date: Mon, 6 Aug 2018 20:41:16 -0500 Subject: [PATCH 12/33] updating for typo --- contrib/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/README.md b/contrib/README.md index 98a0559..52ec230 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -85,7 +85,7 @@ To develop and deploy the `event-gateway` and all related elements locally, the + Download the minikube instance for your system ```bash - curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 &&i \ + curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && \ sudo chmod +x minikube && \ sudo mv minikube /usr/local/bin/ ``` From 4bb0f4e9cd774f4039126a51177f3d84d9954351 Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Tue, 14 Aug 2018 07:22:48 -0500 Subject: [PATCH 13/33] cleaning up k8s content --- .../templates/event-gateway-ingress.yaml | 22 - .../templates/event-gateway.yaml | 8 +- .../helm/traefik/event-gateway-ingress.yaml | 20 + contrib/helm/traefik/traefik-ds.yaml | 66 + contrib/helm/traefik/ui.yaml | 27 + .../package-lock.json | 2680 +---------------- .../package.json | 3 +- 7 files changed, 192 insertions(+), 2634 deletions(-) delete mode 100644 contrib/helm/event-gateway/templates/event-gateway-ingress.yaml create mode 100644 contrib/helm/traefik/event-gateway-ingress.yaml create mode 100644 contrib/helm/traefik/traefik-ds.yaml create mode 100644 contrib/helm/traefik/ui.yaml diff --git a/contrib/helm/event-gateway/templates/event-gateway-ingress.yaml b/contrib/helm/event-gateway/templates/event-gateway-ingress.yaml deleted file mode 100644 index cffdc7d..0000000 --- a/contrib/helm/event-gateway/templates/event-gateway-ingress.yaml +++ /dev/null @@ -1,22 +0,0 @@ -apiVersion: extensions/v1beta1 -kind: Ingress -metadata: - name: {{ template "event-gateway.fullname" . }} - annotations: - nginx.ingress.kubernetes.io/rewrite-target: / -spec: - backend: - serviceName: default-http-backend - servicePort: 80 - rules: - - host: {{ template "event-gateway.name" . }} - http: - paths: - - path: /v1/config - backend: - serviceName: config - servicePort: {{ .Values.service.config.port }} - - path: /v1/events - backend: - serviceName: events - servicePort: {{ .Values.service.events.port }} diff --git a/contrib/helm/event-gateway/templates/event-gateway.yaml b/contrib/helm/event-gateway/templates/event-gateway.yaml index 8029b96..51e7f31 100644 --- a/contrib/helm/event-gateway/templates/event-gateway.yaml +++ b/contrib/helm/event-gateway/templates/event-gateway.yaml @@ -1,4 +1,4 @@ -apiVersion: apps/v1beta2 +apiVersion: extensions/v1beta1 kind: Deployment metadata: name: {{ template "event-gateway.fullname" . }} @@ -24,7 +24,7 @@ spec: image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} args: - - "-db-hosts={{ .Values.etcd_cluster_name }}-client:{{ .Values.etcd_cluster_port }}" + - "--db-hosts={{ .Values.etcd_cluster_name }}-client:{{ .Values.etcd_cluster_port }}" {{- range .Values.command }} - {{ . }} {{- end }} @@ -54,8 +54,12 @@ spec: - name: config port: {{ .Values.service.config.port }} targetPort: {{ .Values.service.config.port }} + nodePort: 32401 - name: events port: {{ .Values.service.events.port }} targetPort: {{ .Values.service.events.port }} + nodePort: 32400 selector: app: {{ template "event-gateway.name" . }} +# selector: +# k8s-app: traefik-ingress-lb diff --git a/contrib/helm/traefik/event-gateway-ingress.yaml b/contrib/helm/traefik/event-gateway-ingress.yaml new file mode 100644 index 0000000..7a1da31 --- /dev/null +++ b/contrib/helm/traefik/event-gateway-ingress.yaml @@ -0,0 +1,20 @@ +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: event-gateway-ingress + annotations: + kubernetes.io/ingress.class: traefik + traefik.frontend.rule.type: PathPrefixStrip +spec: + rules: + - host: eventgateway + http: + paths: + - path: /v1/ + backend: + serviceName: eg-event-gateway + servicePort: 32401 + - path: / + backend: + serviceName: eg-event-gateway + servicePort: 32400 diff --git a/contrib/helm/traefik/traefik-ds.yaml b/contrib/helm/traefik/traefik-ds.yaml new file mode 100644 index 0000000..2600bd9 --- /dev/null +++ b/contrib/helm/traefik/traefik-ds.yaml @@ -0,0 +1,66 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: traefik-ingress-controller + namespace: kube-system + +--- +kind: DaemonSet +apiVersion: extensions/v1beta1 +metadata: + name: traefik-ingress-controller + namespace: kube-system + labels: + k8s-app: traefik-ingress-lb +spec: + template: + metadata: + labels: + k8s-app: traefik-ingress-lb + name: traefik-ingress-lb + spec: + serviceAccountName: traefik-ingress-controller + terminationGracePeriodSeconds: 60 + containers: + - image: traefik + name: traefik-ingress-lb + ports: + - name: http + containerPort: 9999 + hostPort: 9999 + - name: events + containerPort: 32400 + hostPort: 32400 + - name: config + containerPort: 32401 + hostPort: 32401 + securityContext: + capabilities: + drop: + - ALL + add: + - NET_BIND_SERVICE + args: + - --api + - --kubernetes + - --logLevel=INFO + +--- +kind: Service +apiVersion: v1 +metadata: + name: traefik-ingress-service + namespace: kube-system +spec: + selector: + k8s-app: traefik-ingress-lb + ports: + - protocol: TCP + port: 9999 + name: web + - protocol: TCP + port: 32400 + name: events + - protocol: TCP + port: 32401 + name: config diff --git a/contrib/helm/traefik/ui.yaml b/contrib/helm/traefik/ui.yaml new file mode 100644 index 0000000..966dbb8 --- /dev/null +++ b/contrib/helm/traefik/ui.yaml @@ -0,0 +1,27 @@ +apiVersion: v1 +kind: Service +metadata: + name: traefik-web-ui + namespace: kube-system +spec: + selector: + k8s-app: traefik-ingress-lb + ports: + - port: 9999 + targetPort: 9999 +--- +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: traefik-web-ui + namespace: kube-system + annotations: + kubernetes.io/ingress.class: traefik +spec: + rules: + - host: traefik-ui.minikube + http: + paths: + - backend: + serviceName: traefik-web-ui + servicePort: 9999 diff --git a/examples/aws-golang-simple-http-endpoint/package-lock.json b/examples/aws-golang-simple-http-endpoint/package-lock.json index ef4e7e2..1aa4b51 100644 --- a/examples/aws-golang-simple-http-endpoint/package-lock.json +++ b/examples/aws-golang-simple-http-endpoint/package-lock.json @@ -14,49 +14,6 @@ "url-parse": "1.4.1" } }, - "@serverless/fdk": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@serverless/fdk/-/fdk-0.5.1.tgz", - "integrity": "sha512-Z/+5R0AohLwDT1E+9BTeUA7NozlyIoTh0iEt6x8x+ZZhIBK5HBMBN6v2LfkI4wmmOOyceTvsN0l8nWfGp4Oh5g==", - "requires": { - "isomorphic-fetch": "2.2.1", - "ramda": "0.24.1", - "url-parse": "1.4.1" - } - }, - "@serverless/platform-sdk": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@serverless/platform-sdk/-/platform-sdk-0.1.5.tgz", - "integrity": "sha512-d61v7iSAqvNlT+9TBZnsJwmSmVtu6MERwa+IUTHj46RwICPYsup3dB0U4jy3mhTAk1XtQ+EWuUOSTZdck2aD8w==", - "requires": { - "babel-polyfill": "6.26.0", - "bluebird": "3.5.1", - "body-parser": "1.18.3", - "chalk": "2.4.1", - "cors": "2.8.4", - "express": "4.16.3", - "is-docker": "1.1.0", - "is-wsl": "1.1.0", - "isomorphic-fetch": "2.2.1", - "node-fetch": "2.2.0", - "opn": "5.3.0", - "querystring": "0.2.0", - "ramda": "0.25.0", - "source-map-support": "0.5.6" - }, - "dependencies": { - "node-fetch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.2.0.tgz", - "integrity": "sha512-OayFWziIxiHY8bCUyLX6sTpDH8Jsbp4FfYd1j1f7vZyfgkcOnAyM4oQR16f8a0s7Gl/viMGRey8eScYk4V4EZA==" - }, - "ramda": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.25.0.tgz", - "integrity": "sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ==" - } - } - }, "@serverless/serverless-event-gateway-plugin": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/@serverless/serverless-event-gateway-plugin/-/serverless-event-gateway-plugin-0.7.4.tgz", @@ -88,416 +45,26 @@ } } }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "requires": { - "mime-types": "2.1.19", - "negotiator": "0.6.1" - } - }, - "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", - "requires": { - "es6-promisify": "5.0.0" - } - }, - "ansi": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", - "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" - }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "requires": { - "string-width": "2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=" - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { "color-convert": "1.9.2" } }, - "archiver": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz", - "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=", - "requires": { - "archiver-utils": "1.3.0", - "async": "2.6.1", - "buffer-crc32": "0.2.13", - "glob": "7.1.2", - "lodash": "4.17.10", - "readable-stream": "2.3.6", - "tar-stream": "1.6.1", - "walkdir": "0.0.11", - "zip-stream": "1.2.0" - }, - "dependencies": { - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "requires": { - "lodash": "4.17.10" - } - } - } - }, - "archiver-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", - "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", - "requires": { - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "lazystream": "1.0.0", - "lodash": "4.17.10", - "normalize-path": "2.1.1", - "readable-stream": "2.3.6" - } - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "1.0.3" - } - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "requires": { - "array-uniq": "1.0.3" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "aws-sdk": { - "version": "2.279.1", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.279.1.tgz", - "integrity": "sha512-2vkvg53XaTmPYW6f7YFUEHfNGzOZqKzUboaEkjz/wblmQmDS7J5DO5KTv52wsNFOICBGXgZPCblwD+oP7iT8iA==", - "requires": { - "buffer": "4.9.1", - "events": "1.1.1", - "ieee754": "1.1.8", - "jmespath": "0.15.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "uuid": "3.1.0", - "xml2js": "0.4.19" - }, - "dependencies": { - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.8", - "isarray": "1.0.0" - } - }, - "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" - }, - "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" - } - } - }, - "babel-polyfill": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", - "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", - "requires": { - "babel-runtime": "6.26.0", - "core-js": "2.5.7", - "regenerator-runtime": "0.10.5" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "requires": { - "core-js": "2.5.7", - "regenerator-runtime": "0.11.1" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - } - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" - }, - "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", - "requires": { - "readable-stream": "2.3.6", - "safe-buffer": "5.1.1" - } - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "1.6.16" - } - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "requires": { - "ansi-align": "2.0.0", - "camelcase": "4.1.0", - "chalk": "2.4.1", - "cli-boxes": "1.0.0", - "string-width": "2.1.1", - "term-size": "1.2.0", - "widest-line": "2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.1.0.tgz", - "integrity": "sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==", - "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.12" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "requires": { - "buffer-alloc-unsafe": "1.1.0", - "buffer-fill": "1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" - }, - "buffer-from": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", - "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - }, - "capture-stack-trace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", - "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=" - }, - "caw": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", - "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", - "requires": { - "get-proxy": "2.1.0", - "isurl": "1.0.0", - "tunnel-agent": "0.6.0", - "url-to-options": "1.0.1" - } - }, "chalk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", "supports-color": "5.4.0" } }, - "ci-info": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz", - "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==" - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "requires": { - "restore-cursor": "1.0.1" - } - }, "cli-table": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", @@ -507,20 +74,11 @@ "colors": "1.0.3" } }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, "color-convert": { "version": "1.9.2", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", + "dev": true, "requires": { "color-name": "1.1.1" } @@ -528,7 +86,8 @@ "color-name": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=" + "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", + "dev": true }, "colors": { "version": "1.0.3", @@ -536,2200 +95,105 @@ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", "dev": true }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "requires": { - "graceful-readlink": "1.0.1" + "iconv-lite": "0.4.23" } }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, - "compress-commons": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz", - "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=", - "requires": { - "buffer-crc32": "0.2.13", - "crc32-stream": "2.0.0", - "normalize-path": "2.1.1", - "readable-stream": "2.3.6" - } + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "requires": { - "buffer-from": "1.1.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" + "safer-buffer": "2.1.2" } }, - "config-chain": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz", - "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", - "requires": { - "ini": "1.3.5", - "proto-list": "1.2.4" - } + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "requires": { - "dot-prop": "4.2.0", - "graceful-fs": "4.1.11", - "make-dir": "1.3.0", - "unique-string": "1.0.0", - "write-file-atomic": "2.3.0", - "xdg-basedir": "3.0.0" + "node-fetch": "1.7.3", + "whatwg-fetch": "2.0.4" } }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" - }, - "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cors": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.4.tgz", - "integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=", - "requires": { - "object-assign": "4.1.1", - "vary": "1.1.2" - } + "lodash.merge": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", + "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==", + "dev": true }, - "crc": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.7.0.tgz", - "integrity": "sha512-ZwmUex488OBjSVOMxnR/dIa1yxisBMJNEi+UxzXpKhax8MPsQtoRQtl5Qgo+W7pcSVkRXa3BEVjaniaWKtvKvw==", + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", "requires": { - "buffer": "5.1.0" + "encoding": "0.1.12", + "is-stream": "1.1.0" } }, - "crc32-stream": { + "querystringify": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", - "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", - "requires": { - "crc": "3.7.0", - "readable-stream": "2.3.6" - } - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "requires": { - "capture-stack-trace": "1.0.0" - } + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.0.0.tgz", + "integrity": "sha512-eTPo5t/4bgaMNZxyjWx6N2a6AuE0mq51KWvpc7nU/MAqixcI6v6KrGUKES0HaomdnolQBBXU/++X6/QQ9KL4tw==" }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "requires": { - "lru-cache": "4.1.3", - "shebang-command": "1.2.0", - "which": "1.3.1" - } + "ramda": { + "version": "0.24.1", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.24.1.tgz", + "integrity": "sha1-w7d1UZfzW43DUCIoJixMkd22uFc=" }, - "crypto-random-string": { + "requires-port": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decompress": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", - "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", - "requires": { - "decompress-tar": "4.1.1", - "decompress-tarbz2": "4.1.1", - "decompress-targz": "4.1.1", - "decompress-unzip": "4.0.1", - "graceful-fs": "4.1.11", - "make-dir": "1.3.0", - "pify": "2.3.0", - "strip-dirs": "2.1.0" - } + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, - "decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "requires": { - "file-type": "5.2.0", - "is-stream": "1.1.0", - "tar-stream": "1.6.1" - } + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, "requires": { - "decompress-tar": "4.1.1", - "file-type": "6.2.0", - "is-stream": "1.1.0", - "seek-bzip": "1.0.5", - "unbzip2-stream": "1.2.5" - }, - "dependencies": { - "file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" - } + "has-flag": "3.0.0" } }, - "decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "url-parse": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.1.tgz", + "integrity": "sha512-x95Td74QcvICAA0+qERaVkRpTGKyBHHYdwL2LXZm5t/gBtCB9KQSO/0zQgSTYEV1p0WcvSg79TLNPSvd5IDJMQ==", "requires": { - "decompress-tar": "4.1.1", - "file-type": "5.2.0", - "is-stream": "1.1.0" + "querystringify": "2.0.0", + "requires-port": "1.0.0" } }, - "decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", - "requires": { - "file-type": "3.9.0", - "get-stream": "2.3.1", - "pify": "2.3.0", - "yauzl": "2.10.0" - }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" - }, - "get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "requires": { - "object-assign": "4.1.1", - "pinkie-promise": "2.0.1" - } - } - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "requires": { - "is-obj": "1.0.1" - } - }, - "download": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/download/-/download-5.0.3.tgz", - "integrity": "sha1-Y1N/l3+ZJmow64oqL70fILgAD3o=", - "requires": { - "caw": "2.0.1", - "decompress": "4.2.0", - "filenamify": "2.1.0", - "get-stream": "3.0.0", - "got": "6.7.1", - "mkdirp": "0.5.1", - "pify": "2.3.0" - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "0.4.23" - } - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "1.4.0" - } - }, - "es6-promise": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", - "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==" - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "requires": { - "es6-promise": "4.2.4" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - } - }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=" - }, - "express": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", - "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", - "requires": { - "accepts": "1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.2", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.3", - "qs": "6.5.1", - "range-parser": "1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", - "utils-merge": "1.0.1", - "vary": "1.1.2" - }, - "dependencies": { - "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", - "iconv-lite": "0.4.19", - "on-finished": "2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "1.6.16" - } - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" - }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" - }, - "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "unpipe": "1.0.0" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" - }, - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.4.0" - } - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" - } - } - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "external-editor": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-1.1.1.tgz", - "integrity": "sha1-Etew24UPf/fnCBuvQAVwAGDEYAs=", - "requires": { - "extend": "3.0.2", - "spawn-sync": "1.0.15", - "tmp": "0.0.29" - } - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "requires": { - "pend": "1.2.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" - } - }, - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" - }, - "filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=" - }, - "filenamify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", - "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", - "requires": { - "filename-reserved-regex": "2.0.0", - "strip-outer": "1.0.1", - "trim-repeated": "1.0.0" - } - }, - "filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==" - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.19" - } - }, - "formidable": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", - "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==" - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "fs-extra": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", - "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "klaw": "1.3.1", - "path-is-absolute": "1.0.1", - "rimraf": "2.6.2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "gauge": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", - "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", - "requires": { - "ansi": "0.3.1", - "has-unicode": "2.0.1", - "lodash.pad": "4.5.1", - "lodash.padend": "4.6.1", - "lodash.padstart": "4.6.1" - } - }, - "get-proxy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", - "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", - "requires": { - "npm-conf": "1.1.3" - } - }, - "get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=" - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "requires": { - "ini": "1.3.5" - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "requires": { - "create-error-class": "3.0.2", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.1", - "safe-buffer": "5.1.1", - "timed-out": "4.0.1", - "unzip-response": "2.0.1", - "url-parse-lax": "1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" - }, - "graphlib": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.5.tgz", - "integrity": "sha512-XvtbqCcw+EM5SqQrIetIKKD+uZVNQtDPD1goIg7K73RuRZtVI5rYMdcCVSHm/AS1sCBZ7vt0p5WgXouucHQaOA==", - "requires": { - "lodash": "4.17.10" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "requires": { - "has-symbol-support-x": "1.4.2" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": "1.5.0" - } - }, - "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", - "requires": { - "agent-base": "4.2.1", - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": "2.1.2" - } - }, - "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "inquirer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-1.2.3.tgz", - "integrity": "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=", - "requires": { - "ansi-escapes": "1.4.0", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-width": "2.2.0", - "external-editor": "1.1.1", - "figures": "1.7.0", - "lodash": "4.17.10", - "mute-stream": "0.0.6", - "pinkie-promise": "2.0.1", - "run-async": "2.3.0", - "rx": "4.1.0", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "through": "2.3.8" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "ipaddr.js": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", - "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" - }, - "is-ci": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", - "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", - "requires": { - "ci-info": "1.1.3" - } - }, - "is-docker": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-1.1.0.tgz", - "integrity": "sha1-8EN01O7lMQ6ajhE78UlUEeRhdqE=" - }, - "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", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "requires": { - "global-dirs": "0.1.1", - "is-path-inside": "1.0.1" - } - }, - "is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" - }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "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", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "1.7.3", - "whatwg-fetch": "2.0.4" - } - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "requires": { - "has-to-string-tag-x": "1.4.1", - "is-object": "1.0.1" - } - }, - "jmespath": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" - }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.1" - } - }, - "json-cycle": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/json-cycle/-/json-cycle-1.3.0.tgz", - "integrity": "sha512-FD/SedD78LCdSvJaOUQAXseT8oQBb5z6IVYaQaCrVUlu9zOAr1BDdKyVYQaSD/GDsAMrXpKcOyBD4LIl8nfjHw==" - }, - "json-refs": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/json-refs/-/json-refs-2.1.7.tgz", - "integrity": "sha1-uesB/in16j6Sh48VrqEK04taz4k=", - "requires": { - "commander": "2.16.0", - "graphlib": "2.1.5", - "js-yaml": "3.12.0", - "native-promise-only": "0.8.1", - "path-loader": "1.0.4", - "slash": "1.0.0", - "uri-js": "3.0.2" - }, - "dependencies": { - "commander": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz", - "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==" - } - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "requires": { - "graceful-fs": "4.1.11" - } - }, - "jwt-decode": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", - "integrity": "sha1-fYa9VmefWM5qhHBKZX3TkruoGnk=" - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "requires": { - "graceful-fs": "4.1.11" - } - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "requires": { - "package-json": "4.0.1" - } - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "requires": { - "readable-stream": "2.3.6" - } - }, - "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" - }, - "lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" - }, - "lodash.merge": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", - "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==", - "dev": true - }, - "lodash.pad": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz", - "integrity": "sha1-QzCUmoM6fI2iLMIPaibE1Z3runA=" - }, - "lodash.padend": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", - "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=" - }, - "lodash.padstart": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", - "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "lsmod": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lsmod/-/lsmod-1.0.0.tgz", - "integrity": "sha1-mgD3bco26yP6BTUK/htYXUKZ5ks=" - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "requires": { - "pify": "3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" - }, - "mime-db": { - "version": "1.35.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", - "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==" - }, - "mime-types": { - "version": "2.1.19", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", - "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", - "requires": { - "mime-db": "1.35.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "1.1.11" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } - } - }, - "moment": { - "version": "2.22.2", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", - "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "mute-stream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz", - "integrity": "sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s=" - }, - "native-promise-only": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", - "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=" - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "0.1.12", - "is-stream": "1.1.0" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "1.1.0" - } - }, - "npm-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", - "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", - "requires": { - "config-chain": "1.1.11", - "pify": "3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "2.0.1" - } - }, - "npmlog": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", - "integrity": "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=", - "requires": { - "ansi": "0.3.1", - "are-we-there-yet": "1.1.5", - "gauge": "1.2.7" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-hash": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.0.tgz", - "integrity": "sha512-05KzQ70lSeGSrZJQXE5wNDiTkBJDlUT/myi6RX9dVIvz7a7Qh4oH93BQdiPMn27nldYvVQCKMUaM83AfizZlsQ==" - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1.0.2" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" - }, - "opn": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", - "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", - "requires": { - "is-wsl": "1.1.0" - } - }, - "os-shim": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", - "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "requires": { - "got": "6.7.1", - "registry-auth-token": "3.3.2", - "registry-url": "3.1.0", - "semver": "5.5.0" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "path-loader": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/path-loader/-/path-loader-1.0.4.tgz", - "integrity": "sha512-k/IPo9OWyofATP5gwIehHHQoFShS37zsSIsejKe6fjI+tqK+FnRpiSg4ZfWUpxb0g2PfCreWPqBD4ayjqjqkdQ==", - "requires": { - "native-promise-only": "0.8.1", - "superagent": "3.8.3" - } - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "2.0.4" - } - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "promise-queue": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/promise-queue/-/promise-queue-2.2.5.tgz", - "integrity": "sha1-L29ffA9tCBCelnZZx5uIqe1ek7Q=" - }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" - }, - "proxy-addr": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", - "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", - "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.6.0" - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "querystringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.0.0.tgz", - "integrity": "sha512-eTPo5t/4bgaMNZxyjWx6N2a6AuE0mq51KWvpc7nU/MAqixcI6v6KrGUKES0HaomdnolQBBXU/++X6/QQ9KL4tw==" - }, - "ramda": { - "version": "0.24.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.24.1.tgz", - "integrity": "sha1-w7d1UZfzW43DUCIoJixMkd22uFc=" - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" - }, - "raven": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/raven/-/raven-1.2.1.tgz", - "integrity": "sha1-lJwTTbAooZC3u/j3kKrlQbfAIL0=", - "requires": { - "cookie": "0.3.1", - "json-stringify-safe": "5.0.1", - "lsmod": "1.0.0", - "stack-trace": "0.0.9", - "uuid": "3.0.0" - }, - "dependencies": { - "uuid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.0.tgz", - "integrity": "sha1-Zyj8BFnEUNeWqZwxg3VpvfZy1yg=" - } - } - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "0.6.0", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" - }, - "registry-auth-token": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", - "requires": { - "rc": "1.2.8", - "safe-buffer": "5.1.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "requires": { - "rc": "1.2.8" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "replaceall": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/replaceall/-/replaceall-0.1.6.tgz", - "integrity": "sha1-gdgax663LX9cSUKt8ml6MiBojY4=" - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "requires": { - "glob": "7.1.2" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "requires": { - "is-promise": "2.1.0" - } - }, - "rx": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", - "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=" - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" - }, - "seek-bzip": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", - "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", - "requires": { - "commander": "2.8.1" - } - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "requires": { - "semver": "5.5.0" - } - }, - "semver-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", - "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=" - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "requires": { - "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.3", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.2" - } - }, - "serverless": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/serverless/-/serverless-1.28.0.tgz", - "integrity": "sha1-h5OvoK39RbA5a/Ey4w6/gL8efuY=", - "requires": { - "@serverless/fdk": "0.5.1", - "@serverless/platform-sdk": "0.1.5", - "archiver": "1.3.0", - "async": "1.5.2", - "aws-sdk": "2.279.1", - "bluebird": "3.5.1", - "chalk": "2.4.1", - "ci-info": "1.1.3", - "download": "5.0.3", - "fast-levenshtein": "2.0.6", - "filesize": "3.6.1", - "fs-extra": "0.26.7", - "get-stdin": "5.0.1", - "globby": "6.1.0", - "graceful-fs": "4.1.11", - "https-proxy-agent": "2.2.1", - "is-docker": "1.1.0", - "js-yaml": "3.12.0", - "json-cycle": "1.3.0", - "json-refs": "2.1.7", - "jwt-decode": "2.2.0", - "lodash": "4.17.10", - "minimist": "1.2.0", - "moment": "2.22.2", - "node-fetch": "1.7.3", - "object-hash": "1.3.0", - "promise-queue": "2.2.5", - "raven": "1.2.1", - "rc": "1.2.8", - "replaceall": "0.1.6", - "semver": "5.5.0", - "semver-regex": "1.0.0", - "tabtab": "2.2.2", - "update-notifier": "2.5.0", - "uuid": "2.0.3", - "write-file-atomic": "2.3.0", - "yaml-ast-parser": "0.0.34" - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-support": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.6.tgz", - "integrity": "sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==", - "requires": { - "buffer-from": "1.1.0", - "source-map": "0.6.1" - } - }, - "spawn-sync": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", - "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", - "requires": { - "concat-stream": "1.6.2", - "os-shim": "0.1.3" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "stack-trace": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", - "integrity": "sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU=" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "5.1.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "requires": { - "is-natural-number": "4.0.1" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - }, - "strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "requires": { - "escape-string-regexp": "1.0.5" - } - }, - "superagent": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", - "requires": { - "component-emitter": "1.2.1", - "cookiejar": "2.1.2", - "debug": "3.1.0", - "extend": "3.0.2", - "form-data": "2.3.2", - "formidable": "1.2.1", - "methods": "1.1.2", - "mime": "1.4.1", - "qs": "6.5.2", - "readable-stream": "2.3.6" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "3.0.0" - } - }, - "tabtab": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tabtab/-/tabtab-2.2.2.tgz", - "integrity": "sha1-egR/FDsBC0y9MfhX6ClhUSy/ThQ=", - "requires": { - "debug": "2.6.9", - "inquirer": "1.2.3", - "lodash.difference": "4.5.0", - "lodash.uniq": "4.5.0", - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "npmlog": "2.0.4", - "object-assign": "4.1.1" - } - }, - "tar-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz", - "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==", - "requires": { - "bl": "1.2.2", - "buffer-alloc": "1.2.0", - "end-of-stream": "1.4.1", - "fs-constants": "1.0.0", - "readable-stream": "2.3.6", - "to-buffer": "1.1.1", - "xtend": "4.0.1" - } - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "requires": { - "execa": "0.7.0" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" - }, - "tmp": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", - "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", - "requires": { - "os-tmpdir": "1.0.2" - } - }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" - }, - "trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", - "requires": { - "escape-string-regexp": "1.0.5" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "5.1.1" - } - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.19" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "unbzip2-stream": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.2.5.tgz", - "integrity": "sha512-izD3jxT8xkzwtXRUZjtmRwKnZoeECrfZ8ra/ketwOcusbZEp4mjULMnJOCfTDZBgGQAAY1AJ/IgxcwkavcX9Og==", - "requires": { - "buffer": "3.6.0", - "through": "2.3.8" - }, - "dependencies": { - "base64-js": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", - "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=" - }, - "buffer": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz", - "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=", - "requires": { - "base64-js": "0.0.8", - "ieee754": "1.1.12", - "isarray": "1.0.0" - } - } - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "requires": { - "crypto-random-string": "1.0.0" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "requires": { - "boxen": "1.3.0", - "chalk": "2.4.1", - "configstore": "3.1.2", - "import-lazy": "2.1.0", - "is-ci": "1.1.0", - "is-installed-globally": "0.1.0", - "is-npm": "1.0.0", - "latest-version": "3.1.0", - "semver-diff": "2.1.0", - "xdg-basedir": "3.0.0" - } - }, - "uri-js": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-3.0.2.tgz", - "integrity": "sha1-+QuFhQf4HepNz7s8TD2/orVX+qo=", - "requires": { - "punycode": "2.1.1" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } - } - }, - "url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "url-parse": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.1.tgz", - "integrity": "sha512-x95Td74QcvICAA0+qERaVkRpTGKyBHHYdwL2LXZm5t/gBtCB9KQSO/0zQgSTYEV1p0WcvSg79TLNPSvd5IDJMQ==", - "requires": { - "querystringify": "2.0.0", - "requires-port": "1.0.0" - } - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "requires": { - "prepend-http": "1.0.4" - } - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "walkdir": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz", - "integrity": "sha1-oW0CXrkxvQO1LzCMrtD0D86+lTI=" - }, "whatwg-fetch": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "2.0.0" - } - }, - "widest-line": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", - "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", - "requires": { - "string-width": "2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", - "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "requires": { - "sax": "1.2.1", - "xmlbuilder": "9.0.7" - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "yaml-ast-parser": { - "version": "0.0.34", - "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.34.tgz", - "integrity": "sha1-0A88+ddztyQUCa6SpnQNHbGfSeY=" - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "requires": { - "buffer-crc32": "0.2.13", - "fd-slicer": "1.1.0" - } - }, - "zip-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", - "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", - "requires": { - "archiver-utils": "1.3.0", - "compress-commons": "1.2.2", - "lodash": "4.17.10", - "readable-stream": "2.3.6" - } } } } diff --git a/examples/aws-golang-simple-http-endpoint/package.json b/examples/aws-golang-simple-http-endpoint/package.json index 66506e8..6a8c9e3 100644 --- a/examples/aws-golang-simple-http-endpoint/package.json +++ b/examples/aws-golang-simple-http-endpoint/package.json @@ -8,7 +8,6 @@ "@serverless/serverless-event-gateway-plugin": "^0.7.3" }, "dependencies": { - "@serverless/event-gateway-sdk": "^0.6.0", - "serverless": "^1.28.0" + "@serverless/event-gateway-sdk": "^0.6.0" } } From 29c5b8fa41d05c804b336a9556e2df2f25d18ca1 Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Tue, 14 Aug 2018 07:31:55 -0500 Subject: [PATCH 14/33] updating based on feedback --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2385255..7f380e3 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,7 @@ $ event-gateway -dev ### Kubernetes -We've added `helm` charts to the repo for a quick deploy to an existing cluster. Please note, the default +The repo contains `helm` charts for a quick deploy to an existing cluster. Please note, the default installation requires proper `loadbalancer` support out of the box. If you don't have this enabled in your cluster you can check the `minikube` instructions for more guidance. From c2df1e0719951227c250cb909c0b624ee583365c Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Tue, 14 Aug 2018 21:15:35 -0500 Subject: [PATCH 15/33] interim commit for k8s --- .../event-gateway/templates/event-gateway.yaml | 7 +------ .../helm/traefik/event-gateway-ingress.yaml | 12 +++++++----- contrib/helm/traefik/traefik-ds.yaml | 18 +++++++++--------- contrib/helm/traefik/ui.yaml | 7 ++++--- 4 files changed, 21 insertions(+), 23 deletions(-) diff --git a/contrib/helm/event-gateway/templates/event-gateway.yaml b/contrib/helm/event-gateway/templates/event-gateway.yaml index 51e7f31..e32252a 100644 --- a/contrib/helm/event-gateway/templates/event-gateway.yaml +++ b/contrib/helm/event-gateway/templates/event-gateway.yaml @@ -1,4 +1,4 @@ -apiVersion: extensions/v1beta1 +apiVersion: apps/v1beta2 kind: Deployment metadata: name: {{ template "event-gateway.fullname" . }} @@ -49,17 +49,12 @@ metadata: labels: chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} spec: - type: {{ .Values.service.type }} ports: - name: config port: {{ .Values.service.config.port }} targetPort: {{ .Values.service.config.port }} - nodePort: 32401 - name: events port: {{ .Values.service.events.port }} targetPort: {{ .Values.service.events.port }} - nodePort: 32400 selector: app: {{ template "event-gateway.name" . }} -# selector: -# k8s-app: traefik-ingress-lb diff --git a/contrib/helm/traefik/event-gateway-ingress.yaml b/contrib/helm/traefik/event-gateway-ingress.yaml index 7a1da31..8d9ac6c 100644 --- a/contrib/helm/traefik/event-gateway-ingress.yaml +++ b/contrib/helm/traefik/event-gateway-ingress.yaml @@ -3,18 +3,20 @@ kind: Ingress metadata: name: event-gateway-ingress annotations: - kubernetes.io/ingress.class: traefik - traefik.frontend.rule.type: PathPrefixStrip +# kubernetes.io/ingress.class: traefik +# traefik.frontend.rule.type: PathPrefixStrip +# traefik.frontend.passHostHeader: "true" +## traefik.backend.loadbalancer.sticky: "true" spec: rules: - - host: eventgateway + - host: eventgateway.minikube http: paths: - path: /v1/ backend: serviceName: eg-event-gateway - servicePort: 32401 + servicePort: config - path: / backend: serviceName: eg-event-gateway - servicePort: 32400 + servicePort: events diff --git a/contrib/helm/traefik/traefik-ds.yaml b/contrib/helm/traefik/traefik-ds.yaml index 2600bd9..f0fc637 100644 --- a/contrib/helm/traefik/traefik-ds.yaml +++ b/contrib/helm/traefik/traefik-ds.yaml @@ -26,14 +26,14 @@ spec: name: traefik-ingress-lb ports: - name: http - containerPort: 9999 - hostPort: 9999 + containerPort: 8080 + hostPort: 8080 - name: events - containerPort: 32400 - hostPort: 32400 + containerPort: 4000 + hostPort: 4000 - name: config - containerPort: 32401 - hostPort: 32401 + containerPort: 4001 + hostPort: 4001 securityContext: capabilities: drop: @@ -56,11 +56,11 @@ spec: k8s-app: traefik-ingress-lb ports: - protocol: TCP - port: 9999 + port: 8080 name: web - protocol: TCP - port: 32400 + port: 4000 name: events - protocol: TCP - port: 32401 + port: 4001 name: config diff --git a/contrib/helm/traefik/ui.yaml b/contrib/helm/traefik/ui.yaml index 966dbb8..ccc9ff1 100644 --- a/contrib/helm/traefik/ui.yaml +++ b/contrib/helm/traefik/ui.yaml @@ -7,8 +7,9 @@ spec: selector: k8s-app: traefik-ingress-lb ports: - - port: 9999 - targetPort: 9999 + - port: 8080 + targetPort: 8080 + --- apiVersion: extensions/v1beta1 kind: Ingress @@ -24,4 +25,4 @@ spec: paths: - backend: serviceName: traefik-web-ui - servicePort: 9999 + servicePort: 8080 From f9e143d5e67f6d82ddcf93f419a0c241115308a1 Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Tue, 14 Aug 2018 21:24:50 -0500 Subject: [PATCH 16/33] cleaning up helm files --- .../templates}/event-gateway-ingress.yaml | 4 -- contrib/helm/traefik/traefik-ds.yaml | 66 ------------------- contrib/helm/traefik/ui.yaml | 28 -------- 3 files changed, 98 deletions(-) rename contrib/helm/{traefik => event-gateway/templates}/event-gateway-ingress.yaml (69%) delete mode 100644 contrib/helm/traefik/traefik-ds.yaml delete mode 100644 contrib/helm/traefik/ui.yaml diff --git a/contrib/helm/traefik/event-gateway-ingress.yaml b/contrib/helm/event-gateway/templates/event-gateway-ingress.yaml similarity index 69% rename from contrib/helm/traefik/event-gateway-ingress.yaml rename to contrib/helm/event-gateway/templates/event-gateway-ingress.yaml index 8d9ac6c..a1479ed 100644 --- a/contrib/helm/traefik/event-gateway-ingress.yaml +++ b/contrib/helm/event-gateway/templates/event-gateway-ingress.yaml @@ -3,10 +3,6 @@ kind: Ingress metadata: name: event-gateway-ingress annotations: -# kubernetes.io/ingress.class: traefik -# traefik.frontend.rule.type: PathPrefixStrip -# traefik.frontend.passHostHeader: "true" -## traefik.backend.loadbalancer.sticky: "true" spec: rules: - host: eventgateway.minikube diff --git a/contrib/helm/traefik/traefik-ds.yaml b/contrib/helm/traefik/traefik-ds.yaml deleted file mode 100644 index f0fc637..0000000 --- a/contrib/helm/traefik/traefik-ds.yaml +++ /dev/null @@ -1,66 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: traefik-ingress-controller - namespace: kube-system - ---- -kind: DaemonSet -apiVersion: extensions/v1beta1 -metadata: - name: traefik-ingress-controller - namespace: kube-system - labels: - k8s-app: traefik-ingress-lb -spec: - template: - metadata: - labels: - k8s-app: traefik-ingress-lb - name: traefik-ingress-lb - spec: - serviceAccountName: traefik-ingress-controller - terminationGracePeriodSeconds: 60 - containers: - - image: traefik - name: traefik-ingress-lb - ports: - - name: http - containerPort: 8080 - hostPort: 8080 - - name: events - containerPort: 4000 - hostPort: 4000 - - name: config - containerPort: 4001 - hostPort: 4001 - securityContext: - capabilities: - drop: - - ALL - add: - - NET_BIND_SERVICE - args: - - --api - - --kubernetes - - --logLevel=INFO - ---- -kind: Service -apiVersion: v1 -metadata: - name: traefik-ingress-service - namespace: kube-system -spec: - selector: - k8s-app: traefik-ingress-lb - ports: - - protocol: TCP - port: 8080 - name: web - - protocol: TCP - port: 4000 - name: events - - protocol: TCP - port: 4001 - name: config diff --git a/contrib/helm/traefik/ui.yaml b/contrib/helm/traefik/ui.yaml deleted file mode 100644 index ccc9ff1..0000000 --- a/contrib/helm/traefik/ui.yaml +++ /dev/null @@ -1,28 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: traefik-web-ui - namespace: kube-system -spec: - selector: - k8s-app: traefik-ingress-lb - ports: - - port: 8080 - targetPort: 8080 - ---- -apiVersion: extensions/v1beta1 -kind: Ingress -metadata: - name: traefik-web-ui - namespace: kube-system - annotations: - kubernetes.io/ingress.class: traefik -spec: - rules: - - host: traefik-ui.minikube - http: - paths: - - backend: - serviceName: traefik-web-ui - servicePort: 8080 From 8cec6b0e90c5211a2244420fa7e7a7a74907fb3a Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Tue, 14 Aug 2018 21:26:40 -0500 Subject: [PATCH 17/33] moving to template variables --- .../helm/event-gateway/templates/event-gateway-ingress.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/helm/event-gateway/templates/event-gateway-ingress.yaml b/contrib/helm/event-gateway/templates/event-gateway-ingress.yaml index a1479ed..0400724 100644 --- a/contrib/helm/event-gateway/templates/event-gateway-ingress.yaml +++ b/contrib/helm/event-gateway/templates/event-gateway-ingress.yaml @@ -10,9 +10,9 @@ spec: paths: - path: /v1/ backend: - serviceName: eg-event-gateway + serviceName: {{ template "event-gateway.fullname" . }} servicePort: config - path: / backend: - serviceName: eg-event-gateway + serviceName: {{ template "event-gateway.fullname" . }} servicePort: events From e26e4185666a30fce081eeb045bea50551a58cc1 Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Wed, 15 Aug 2018 15:34:46 -0500 Subject: [PATCH 18/33] initial commit minikube readme --- contrib/MINIKUBE.md | 66 +++++++++++++++++++++++++++++++++++++++ contrib/README.md | 76 +++++---------------------------------------- 2 files changed, 74 insertions(+), 68 deletions(-) create mode 100644 contrib/MINIKUBE.md diff --git a/contrib/MINIKUBE.md b/contrib/MINIKUBE.md new file mode 100644 index 0000000..2a3e717 --- /dev/null +++ b/contrib/MINIKUBE.md @@ -0,0 +1,66 @@ +# Event Gateway on Kubernetes (minikube) + +To develop and deploy the `event-gateway` and all related elements locally, the easiest method includes using +the [minikube](https://github.com/kubernetes/minikube) toolset. To get started, set up your cluster with the +following instructions... + +## Contents +1. [Fedora/RHEL/CentOS](#fedora-rhel-centos) +1. [Debian/Ubuntu](#debian-ubuntu) +1. [MacOS](#macos) + +### Fedora/RHEL/CentOS ++ Install the prerequisite packages: + ```bash + sudo dnf install kubernetes libvirt-daemon-kvm qemu-kvm nodejs docker + ``` + ++ Ensure your user is added to the `libvirt` group for VM access. You can verify with `getent group libvirt` once done. + ```bash + sudo usermod -a -G libvirt $(whoami) + ``` + ++ Next, add the `libvirt` group to your current user grouplist. Verify by running `id` once done. + ```bash + newgrp libvirt + ``` + ++ Add the [docker-machine](https://github.com/docker/machine) binary to your system + ```bash + curl -L https://github.com/docker/machine/releases/download/v0.15.0/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && \ + chmod +x /tmp/docker-machine && \ + sudo cp /tmp/docker-machine /usr/local/bin/docker-machine + ``` + ++ Add the CentOS `docker-machine` kvm driver. It's ok if you're not using CentOS as the driver should **still work**™ + ```bash + sudo curl -L https://github.com/dhiltgen/docker-machine-kvm/releases/download/v0.10.0/docker-machine-driver-kvm-centos7 > /tmp/docker-machine-driver-kvm && \ + sudo chmod +x /tmp/docker-machine-driver-kvm && \ + sudo mv /tmp/docker-machine-driver-kvm /usr/local/bin/docker-machine-driver-kvm + ``` + ++ Download the minikube instance for your system + ```bash + curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && \ + sudo chmod +x minikube && \ + sudo mv minikube /usr/local/bin/ + ``` + ++ Finally, start up your minikube service! **NOTE:** the instructions recommend using `kvm2` but please use the version that matches your system install + ```bash + minikube start --vm-driver kvm2 + ``` + ++ Once everything is running you should be able to view your running cluster status + ```bash + minikube status + minikube service kubernetes-dashboard --namespace kube-system + ``` + +### Debian/Ubuntu + +PENDING + +### MacOS + +PENDING diff --git a/contrib/README.md b/contrib/README.md index 52ec230..27d8ccb 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -1,16 +1,14 @@ # Event Gateway on Kubernetes This chart deploys the Event Gateway with etcd onto a Kubernetes cluster. Please note, the default instructions expect -an existing kubernetes cluster that supports loadbalancers, such as GKE. If your environment doesn't have a loadbalancer -set up, please follow the minikube instructions below to retrieve the `event_gateway` information. +an existing kubernetes cluster that supports ingress, such as GKE. If your environment doesn't have ingress support +set up, please follow the [minikube](MINIKUBE.md) instructions to set this up for your development environment. ## Contents 1. [Quickstart](#quickstart) -1. [Minikube or local clusters](#minikube-or-local-clusters) 1. [Using helm](#using-helm) 1. [Using custom resources](#using-custom-resources) - 1. [Setting up an Ingress](#setting-up-an-ingress) 1. [Examples](#examples) 1. [Configuration](#configuration) 1. [Cleanup](#cleanup) @@ -22,7 +20,7 @@ Make sure you have helm installed on your machine and run `helm init` on your k8 instructions [here](https://docs.helm.sh/using_helm/#quickstart) if you have not set this up previously. **NOTE:** This portion of the config expects you to have a pre-existing kubernetes cluster (not minikube). For -local development please check the [minikube](#minikube-or-local-clusters) information below. +local development please check the [minikube](MINIKUBE.md) information below. Once installed, navigate to the `event-gateway/contrib/helm` folder and install the following components: @@ -37,72 +35,18 @@ helm install event-gateway --name eg [--namespace ] ``` This will install each of the `etcd-operator` and `event-gateway` into the `default` namespace in kubernetes. Please note, -this namespace has no bearing on your Event Gateway `spaces` as outlined in the [docs](https://github.com/serverless/event-gateway/blob/master/README.md). If you'd like to install `etcd-operator` and `event-gateway` in another namespace, add the `--namespace ` option to both `helm install` commands above. +this namespace has no bearing on your Event Gateway `spaces` as outlined in the [docs](https://github.com/serverless/event-gateway/blob/master/README.md). If you'd like +to install `etcd-operator` and `event-gateway` in another namespace, add the `--namespace ` option to + both `helm install` commands above. -Next we'll need to collect the Event Gateway IP and ports for use on the CLI. To do so, inspect your services as follows: +Next we'll need to collect the Event Gateway IP to use on the CLI. To do so, inspect your services as follows: ```bash -export EVENT_GATEWAY_URL=$(kubectl get svc event-gateway -o jsonpath={.status.loadBalancer.ingress[0].ip}) -export EVENT_GATEWAY_CONFIG_API_PORT=4001 -export EVENT_GATEWAY_EVENTS_API_PORT=4000 +export EVENT_GATEWAY_URL=$(kubectl get ingress event-gateway-ingress -o jsonpath={.status.loadBalancer.ingress[0].ip}) ``` With your environment set up, you can now jump to the [examples](#examples) section to put your `event-gateway` to use! -## Minikube or local clusters - -To develop and deploy the `event-gateway` and all related elements locally, the easiest method includes using the [minikube](https://github.com/kubernetes/minikube) toolset. To get started, set up your cluster with the following instructions: - -**Fedora/RHEL/CentOS** -+ Install the prerequisite packages: - ```bash - sudo dnf install kubernetes libvirt-daemon-kvm qemu-kvm nodejs docker - ``` - -+ Ensure your user is added to the `libvirt` group for VM access. You can verify with `getent group libvirt` once done. - ```bash - sudo usermod -a -G libvirt $(whoami) - ``` - -+ Next, add the `libvirt` group to your current user grouplist. Verify by running `id` once done. - ```bash - newgrp libvirt - ``` - -+ Add the [docker-machine](https://github.com/docker/machine) binary to your system - ```bash - curl -L https://github.com/docker/machine/releases/download/v0.15.0/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && \ - chmod +x /tmp/docker-machine && \ - sudo cp /tmp/docker-machine /usr/local/bin/docker-machine - ``` - -+ Add the CentOS `docker-machine` kvm driver. It's ok if you're not using CentOS as the driver should **still work**™ - ```bash - sudo curl -L https://github.com/dhiltgen/docker-machine-kvm/releases/download/v0.10.0/docker-machine-driver-kvm-centos7 > /tmp/docker-machine-driver-kvm && \ - sudo chmod +x /tmp/docker-machine-driver-kvm && \ - sudo mv /tmp/docker-machine-driver-kvm /usr/local/bin/docker-machine-driver-kvm - ``` - -+ Download the minikube instance for your system - ```bash - curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && \ - sudo chmod +x minikube && \ - sudo mv minikube /usr/local/bin/ - ``` - -+ Finally, start up your minikube service! **NOTE:** the instructions recommend using `kvm2` but please use the version that matches your system install - ```bash - minikube start --vm-driver kvm2 - ``` - -**Debian/Ubuntu** - -PENDING - -**MacOS** - -PENDING - ### Using helm Most of the instructions for using `helm` come from the [Quickstart](#quick-start), but please note the differnce when collecting @@ -152,10 +96,6 @@ With your environment set up, you can now jump to the [examples](#examples) sect PENDING -### Setting up an Ingress - -PENDING - ## Examples Once you've set each of the `EVENT_GATEWAY_URL`, `EVENT_GATEWAY_CONFIG_API_PORT`, and `EVENT_GATEWAY_EVENTS_API_PORT` environment From 22d2ed266a01643a3f217eec92b4f600775a746d Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Wed, 15 Aug 2018 16:34:00 -0500 Subject: [PATCH 19/33] updating README --- contrib/README.md | 176 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 147 insertions(+), 29 deletions(-) diff --git a/contrib/README.md b/contrib/README.md index 27d8ccb..653fbf1 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -10,6 +10,12 @@ set up, please follow the [minikube](MINIKUBE.md) instructions to set this up fo 1. [Using helm](#using-helm) 1. [Using custom resources](#using-custom-resources) 1. [Examples](#examples) + 1. [Register a function](#register-a-function) + 1. [Query all function](#query-all-function) + 1. [Register an event](#register-an-event) + 1. [Query all events](#query-all-events) + 1. [Register a subscription](#register-a-subscription) + 1. [Query all subscriptions](#query-all-subscriptions) 1. [Configuration](#configuration) 1. [Cleanup](#cleanup) @@ -39,23 +45,33 @@ this namespace has no bearing on your Event Gateway `spaces` as outlined in the to install `etcd-operator` and `event-gateway` in another namespace, add the `--namespace ` option to both `helm install` commands above. -Next we'll need to collect the Event Gateway IP to use on the CLI. To do so, inspect your services as follows: - -```bash -export EVENT_GATEWAY_URL=$(kubectl get ingress event-gateway-ingress -o jsonpath={.status.loadBalancer.ingress[0].ip}) -``` +Next we'll need to collect the Event Gateway IP to use on the CLI. We have a couple of options available to reference the +internal services of the kubernetes cluster exposed via Ingress: + +1. add Ingress IP to /etc/hosts (recommended) + This method enables us to reference the `event-gateway` from the hostname we configured in the Ingress module. This document + assumes the name to be `eventgateway.minikube` so please update the instructions to your naming convention if you need. + + ```bash + echo "$(kubectl get ingress event-gateway-ingress -o jsonpath={.status.loadBalancer.ingress[0].ip}) eventgateway.minikube" | sudo tee -a "/etc/hosts" + ``` + +1. use Ingress IP and pass header to request + With this method we access the `event-gateway` using the IP of the Ingress directly. Since the Ingress was configured to + receive all connections from the `eventgateway.minikube` host, you'll need to pass this as a header value to the request. + + ```bash + export EVENT_GATEWAY_URL=$(kubectl get ingress event-gateway-ingress -o jsonpath={.status.loadBalancer.ingress[0].ip}) + curl --request GET \ + --url http://{EVENT_GATEWAY_URL}/v1/metrics \ + --header 'content-type: application/json' \ + --header 'host: eventgateway.minikube' + ``` With your environment set up, you can now jump to the [examples](#examples) section to put your `event-gateway` to use! ### Using helm -Most of the instructions for using `helm` come from the [Quickstart](#quick-start), but please note the differnce when collecting -the `config` and `events` API ports. Minikube does not ship with integrated loadbalancer options like hosted environments would -provide (e.g. Google Kubernetes Engine). As a result, though we can use the same `helm` charts as those installations, we'll -need to grab our ports from the randomly assigned `nodePort` fields before moving forward. There are numerous articles in the -community that describe this minikube-specific behavior, but they are beyond the scope of this document -(edit: [here](https://kubernetes.io/docs/tutorials/kubernetes-basics/expose/expose-intro/) is a bit of information on exposing services). - Once installed, navigate to the `event-gateway/contrib/helm` folder and install the following components: **etcd-operator** @@ -73,12 +89,10 @@ this namespace has no bearing on your Event Gateway `spaces` as outlined in the If you'd like to install `etcd-operator` and `event-gateway` in another namespace, add the `--namespace ` option to both `helm install` commands above. -Next we'll need to collect the Event Gateway IP and ports for use on the CLI. To do so, inspect your services as follows: +Next we'll need to collect the Event Gateway IP for use on the CLI. To do so, inspect your services as follows: ```bash -export EVENT_GATEWAY_URL=$(minikube ip) -export EVENT_GATEWAY_CONFIG_API_PORT=$(kubectl get svc eg-event-gateway -o json | jq -r '.spec.ports[] | select(.name=="config") | .nodePort | tostring') -export EVENT_GATEWAY_EVENTS_API_PORT=$(kubectl get svc eg-event-gateway -o json | jq -r '.spec.ports[] | select(.name=="events") | .nodePort | tostring') +export EVENT_GATEWAY_URL=$(kubectl get ingress event-gateway-ingress -o jsonpath={.status.loadBalancer.ingress[0].ip}) ``` This should yield something like the following (your data will be dependent on your specific cluster): @@ -86,8 +100,6 @@ This should yield something like the following (your data will be dependent on y $ env | grep EVENT ... EVENT_GATEWAY_URL=192.168.42.202 -EVENT_GATEWAY_EVENTS_API_PORT=31455 -EVENT_GATEWAY_CONFIG_API_PORT=30523 ``` With your environment set up, you can now jump to the [examples](#examples) section to put your `event-gateway` to use! @@ -98,8 +110,16 @@ PENDING ## Examples -Once you've set each of the `EVENT_GATEWAY_URL`, `EVENT_GATEWAY_CONFIG_API_PORT`, and `EVENT_GATEWAY_EVENTS_API_PORT` environment -variables, you're set to start interacting with the `event-gateway`! +Once you've set the `EVENT_GATEWAY_URL` environment variable, you're set to start interacting with the `event-gateway`! + +**NOTE:** the events and configuration API ports are abstracted away from us via the kubernetes Ingress. The path-based +routing will ensure the request goes to the proper service managed by the cluster. + +**DOUBLENOTE:** if you did not want to use an environment variable for connecting to the `event-gateway`, you can use +the IP address of your Ingress. Please check the [Quickstart](#quickstart) for reference. + +**TRIPLENOTE:** the examples below all assume the `default` namespace for the `event-gateway`. If you've updated or changed +this on your end, please don't forget to update the queries accordingly. #### Register a function @@ -124,8 +144,9 @@ Then call the registration endpoint with your json payload: ```bash curl --request POST \ - --url http://${EVENT_GATEWAY_URL}:${EVENT_GATEWAY_CONFIG_API_PORT}/v1/spaces/default/functions \ + --url http://${EVENT_GATEWAY_URL}/v1/spaces/default/functions \ --header 'content-type: application/json' \ + --header 'host: eventgateway.minikube' \ --data @function.json ``` @@ -151,8 +172,9 @@ function will yield: ```bash curl --request POST \ - --url http://${EVENT_GATEWAY_URL}:${EVENT_GATEWAY_CONFIG_API_PORT}/v1/spaces/default/functions \ + --url http://${EVENT_GATEWAY_URL}/v1/spaces/default/functions \ --header 'content-type: application/json' \ + --header 'host: eventgateway.minikube' \ --data @function.json { @@ -168,8 +190,9 @@ To check for registered functions, query the `config` API with the `GET` request ```bash curl --request GET \ - --url http://${EVENT_GATEWAY_URL}:${EVENT_GATEWAY_CONFIG_API_PORT}/v1/spaces/default/functions \ - --header 'content-type: application/json' | jq + --url http://${EVENT_GATEWAY_URL}/v1/spaces/default/functions \ + --header 'content-type: application/json' \ + --header 'host: eventgateway.minikube' | jq ``` You should see the functions list return your defined set of functions across all vendors. @@ -192,11 +215,106 @@ You should see the functions list return your defined set of functions across al } ``` -**Register an event** +#### Register an event + +To register an event, make sure to `POST` the event name to the `event-gateway`. + +```bash +curl --request POST \ + --url http://eventgateway.minikube/v1/spaces/default/eventtypes \ + --header 'content-type: application/json' \ + --data '{ "name": "eventgateway.function.invoked" }' +``` + +The reply should look something like the following: + +```bash +{ + "space": "default", + "name": "eventgateway.function.invoked" +} +``` + +#### Query all events + +```bash +curl --request GET \ + --url http://eventgateway.minikube/v1/spaces/default/eventtypes \ + --header 'content-type: application/json' +``` + +Your registered events reply should look as follows: + +```bash +{ + "eventTypes": [ + { + "space": "default", + "name": "eventgateway.function.invoked" + } + ] +} +``` + +#### Register a subscription + +To register subscriptions to one of your registered event types, make sure to specify the `eventType` in +the JSON POST payload. + +```bash +curl --request POST \ + --url http://eventgateway.minikube/v1/spaces/default/subscriptions \ + --header 'content-type: application/json' \ + --data '{ + "type": "async", + "eventType": "eventgateway.function.invoked", + "functionId": "echo", + "path": "/", + "method": "POST" +}' +``` + +Your reply payload should include the `subscriptionId` for your new subscription: + +```bash +{ + "space": "default", + "subscriptionId": "YXN5bmMsZXZlbnRnYXRld2F5LmZ1bmN0aW9uLmludm9rZWQsZWNobywlMkYsUE9TVA", + "type": "async", + "eventType": "eventgateway.function.invoked", + "functionId": "echo", + "path": "/", + "method": "POST" +} +``` -**Register a subscription** +#### Query all subscriptions -**Trigger an event** +To list our your current subscrptions, you can do the following: + +```bash +curl --request GET \ + --url http://eventgateway.minikube/v1/spaces/default/subscriptions \ + --header 'content-type: application/json' \ +``` + +The output should list each of the registered subscriptions: + +```bash +{ + "subscriptions": [ + { + "space": "default", + "subscriptionId": "YXN5bmMsZXZlbnRnYXRld2F5LmZ1bmN0aW9uLmludm9rZWQsZWNobywlMkYsUE9TVA", + "type": "async", + "eventType": "eventgateway.function.invoked", + "functionId": "echo", + "path": "/", + "method": "POST" + } + ] +} +``` ## Configuration @@ -213,8 +331,8 @@ You should see the functions list return your defined set of functions across al | `resources.limits.memory` | Memory resource limits | `256Mi` | | `resources.requests.cpu` | CPU resource requests | `200m` | | `resources.requests.memory` | Memory resource requests | `256Mi` | -| `command` | Options to pass to `event-gateway` command | `[-db-hosts=eg-etcd-cluster-client:2379, -log-level=debug]`| -| `etcd_cluster_name` | Name of the etcd cluster. Passed to the `-db-hosts` option as `-client` | `eg-etcd-cluster`| +| `command` | Options to pass to `event-gateway` command | `[--db-hosts=eg-etcd-cluster-client:2379, --log-level=debug]`| +| `etcd_cluster_name` | Name of the etcd cluster. Passed to the `--db-hosts` option as `-client` | `eg-etcd-cluster`| The service annotations can be used to set any annotations required by your platform, for example, if you update your values.yml with: From ee9f7320c4fdc2b5273f25874ee94a4c882a38c1 Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Wed, 15 Aug 2018 16:39:56 -0500 Subject: [PATCH 20/33] updating number --- contrib/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/README.md b/contrib/README.md index 653fbf1..53ec67e 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -56,7 +56,7 @@ internal services of the kubernetes cluster exposed via Ingress: echo "$(kubectl get ingress event-gateway-ingress -o jsonpath={.status.loadBalancer.ingress[0].ip}) eventgateway.minikube" | sudo tee -a "/etc/hosts" ``` -1. use Ingress IP and pass header to request +2. use Ingress IP and pass header to request With this method we access the `event-gateway` using the IP of the Ingress directly. Since the Ingress was configured to receive all connections from the `eventgateway.minikube` host, you'll need to pass this as a header value to the request. From 54dc8234f243b4e21ba6a29103d826ff7dbc417c Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Wed, 15 Aug 2018 16:40:34 -0500 Subject: [PATCH 21/33] updating formatting --- contrib/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/README.md b/contrib/README.md index 53ec67e..0c387be 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -54,9 +54,9 @@ internal services of the kubernetes cluster exposed via Ingress: ```bash echo "$(kubectl get ingress event-gateway-ingress -o jsonpath={.status.loadBalancer.ingress[0].ip}) eventgateway.minikube" | sudo tee -a "/etc/hosts" - ``` + ``` -2. use Ingress IP and pass header to request +1. use Ingress IP and pass header to request With this method we access the `event-gateway` using the IP of the Ingress directly. Since the Ingress was configured to receive all connections from the `eventgateway.minikube` host, you'll need to pass this as a header value to the request. From 347c8b2adc67b2fbc8d3562fcaaf1d81828f72a1 Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Wed, 15 Aug 2018 16:41:04 -0500 Subject: [PATCH 22/33] more formatting --- contrib/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/contrib/README.md b/contrib/README.md index 0c387be..9039e25 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -49,6 +49,7 @@ Next we'll need to collect the Event Gateway IP to use on the CLI. We have a cou internal services of the kubernetes cluster exposed via Ingress: 1. add Ingress IP to /etc/hosts (recommended) + This method enables us to reference the `event-gateway` from the hostname we configured in the Ingress module. This document assumes the name to be `eventgateway.minikube` so please update the instructions to your naming convention if you need. @@ -57,6 +58,7 @@ internal services of the kubernetes cluster exposed via Ingress: ``` 1. use Ingress IP and pass header to request + With this method we access the `event-gateway` using the IP of the Ingress directly. Since the Ingress was configured to receive all connections from the `eventgateway.minikube` host, you'll need to pass this as a header value to the request. From c1e699d6861651f7cd29b6abeb65fcf0dbe0a79f Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Wed, 15 Aug 2018 17:33:43 -0500 Subject: [PATCH 23/33] updating based upon feedback --- contrib/README.md | 44 ++------------------------------------------ 1 file changed, 2 insertions(+), 42 deletions(-) diff --git a/contrib/README.md b/contrib/README.md index 9039e25..f15000a 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -7,8 +7,6 @@ set up, please follow the [minikube](MINIKUBE.md) instructions to set this up fo ## Contents 1. [Quickstart](#quickstart) - 1. [Using helm](#using-helm) - 1. [Using custom resources](#using-custom-resources) 1. [Examples](#examples) 1. [Register a function](#register-a-function) 1. [Query all function](#query-all-function) @@ -26,7 +24,7 @@ Make sure you have helm installed on your machine and run `helm init` on your k8 instructions [here](https://docs.helm.sh/using_helm/#quickstart) if you have not set this up previously. **NOTE:** This portion of the config expects you to have a pre-existing kubernetes cluster (not minikube). For -local development please check the [minikube](MINIKUBE.md) information below. +local development please check the [minikube](MINIKUBE.md) information. Once installed, navigate to the `event-gateway/contrib/helm` folder and install the following components: @@ -72,44 +70,6 @@ internal services of the kubernetes cluster exposed via Ingress: With your environment set up, you can now jump to the [examples](#examples) section to put your `event-gateway` to use! -### Using helm - -Once installed, navigate to the `event-gateway/contrib/helm` folder and install the following components: - -**etcd-operator** -```bash -helm install stable/etcd-operator --name ego [--namespace ] -``` - -**event-gateway** -```bash -helm install event-gateway --name eg [--namespace ] -``` - -This will install each of the `etcd-operator` and `event-gateway` into the `default` namespace in kubernetes. Please note, -this namespace has no bearing on your Event Gateway `spaces` as outlined in the [docs](https://github.com/serverless/event-gateway/blob/master/README.md). -If you'd like to install `etcd-operator` and `event-gateway` in another namespace, add the `--namespace ` option to -both `helm install` commands above. - -Next we'll need to collect the Event Gateway IP for use on the CLI. To do so, inspect your services as follows: - -```bash -export EVENT_GATEWAY_URL=$(kubectl get ingress event-gateway-ingress -o jsonpath={.status.loadBalancer.ingress[0].ip}) -``` - -This should yield something like the following (your data will be dependent on your specific cluster): -```bash -$ env | grep EVENT -... -EVENT_GATEWAY_URL=192.168.42.202 -``` - -With your environment set up, you can now jump to the [examples](#examples) section to put your `event-gateway` to use! - -### Using custom resource definitions - -PENDING - ## Examples Once you've set the `EVENT_GATEWAY_URL` environment variable, you're set to start interacting with the `event-gateway`! @@ -118,7 +78,7 @@ Once you've set the `EVENT_GATEWAY_URL` environment variable, you're set to star routing will ensure the request goes to the proper service managed by the cluster. **DOUBLENOTE:** if you did not want to use an environment variable for connecting to the `event-gateway`, you can use -the IP address of your Ingress. Please check the [Quickstart](#quickstart) for reference. +the host of your Ingress by adding to `/etc/hosts`. Please check the [Quickstart](#quickstart) for reference. **TRIPLENOTE:** the examples below all assume the `default` namespace for the `event-gateway`. If you've updated or changed this on your end, please don't forget to update the queries accordingly. From 20406480bfc819dd1d5c3e9987579d01e1b54152 Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Wed, 15 Aug 2018 17:58:03 -0500 Subject: [PATCH 24/33] updating with trigger --- contrib/README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/contrib/README.md b/contrib/README.md index f15000a..402d83d 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -278,6 +278,21 @@ The output should list each of the registered subscriptions: } ``` +#### Trigger an event + +In order to trigger a registered function, call the `event-gateway` URL with the proper `functionId`. Following +our example from earlier, we've registered a `GET` function with `functionId` set to `echo`. To trigger this function, +we would: + +```bash +curl --request GET \ + --url http://eventgateway.minikube/echo \ + --header 'content-type: application/json' +``` + +**NOTE**: as mentioned earlier, the `events` service is handled by the path-routing service of the kubernetes Ingress. Any path +that's prepended with `/v1` will ultimately route to the `config` service, while other paths default to the `events` service. + ## Configuration | Parameter | Description | Default | From 03b1bbce9c1e4add0ac8eb4a37b57d23ddb1907c Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Wed, 15 Aug 2018 17:58:45 -0500 Subject: [PATCH 25/33] updating the TOC --- contrib/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/contrib/README.md b/contrib/README.md index 402d83d..60f6f62 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -14,6 +14,7 @@ set up, please follow the [minikube](MINIKUBE.md) instructions to set this up fo 1. [Query all events](#query-all-events) 1. [Register a subscription](#register-a-subscription) 1. [Query all subscriptions](#query-all-subscriptions) + 1. [Trigger an event](#trigger-an-event) 1. [Configuration](#configuration) 1. [Cleanup](#cleanup) From ed8c51075fdbc27e46092a626e25720e688662d5 Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Wed, 15 Aug 2018 23:21:11 -0500 Subject: [PATCH 26/33] updating based upon further feedback --- README.md | 8 ++------ contrib/MINIKUBE.md | 2 +- contrib/README.md | 3 --- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 7f380e3..ec89789 100644 --- a/README.md +++ b/README.md @@ -94,12 +94,8 @@ $ event-gateway -dev ### Kubernetes -The repo contains `helm` charts for a quick deploy to an existing cluster. Please note, the default -installation requires proper `loadbalancer` support out of the box. If you don't have this enabled in your -cluster you can check the `minikube` instructions for more guidance. - -[Helm Chart](./contrib/helm/README.md) -[Minikube](./contrib/helm/README.md) +The repo contains `helm` charts for a quick deploy to an existing cluster using native nginx Ingress. To deploy +a development cluster you can follow the [minikube](contrib/MINIKUBE.md) instructions. --- diff --git a/contrib/MINIKUBE.md b/contrib/MINIKUBE.md index 2a3e717..5bf332f 100644 --- a/contrib/MINIKUBE.md +++ b/contrib/MINIKUBE.md @@ -1,7 +1,7 @@ # Event Gateway on Kubernetes (minikube) To develop and deploy the `event-gateway` and all related elements locally, the easiest method includes using -the [minikube](https://github.com/kubernetes/minikube) toolset. To get started, set up your cluster with the +the [minikube](https://github.com/kubernetes/minikube) toolset. To get started, set up your local cluster with the following instructions... ## Contents diff --git a/contrib/README.md b/contrib/README.md index 60f6f62..9f645f8 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -24,9 +24,6 @@ Make sure you have helm installed on your machine and run `helm init` on your k8 `helm` and `tiller` functions required for easy deployment of config files to your cluster. You can follow instructions [here](https://docs.helm.sh/using_helm/#quickstart) if you have not set this up previously. -**NOTE:** This portion of the config expects you to have a pre-existing kubernetes cluster (not minikube). For -local development please check the [minikube](MINIKUBE.md) information. - Once installed, navigate to the `event-gateway/contrib/helm` folder and install the following components: **etcd-operator** From c46f730f3726c6185f312d972765d1389ae95f59 Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Thu, 16 Aug 2018 08:12:57 -0500 Subject: [PATCH 27/33] updating with more feedback --- README.md | 6 +++--- contrib/{ => helm}/MINIKUBE.md | 0 contrib/{ => helm}/README.md | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) rename contrib/{ => helm}/MINIKUBE.md (100%) rename contrib/{ => helm}/README.md (99%) diff --git a/README.md b/README.md index ec89789..0cd9370 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ If you don't want to run the Event Gateway yourself, you can use the hosted vers There is a [official Docker image](https://hub.docker.com/r/serverless/event-gateway/). ```bash -docker run -p 4000:4000 -p 4001:4001 serverless/event-gateway -dev +docker run -p 4000:4000 -p 4001:4001 serverless/event-gateway --dev ``` ### Binary @@ -89,13 +89,13 @@ On Windows download [binary](https://github.com/serverless/event-gateway/release Then run the binary in development mode with: ```bash -$ event-gateway -dev +$ event-gateway --dev ``` ### Kubernetes The repo contains `helm` charts for a quick deploy to an existing cluster using native nginx Ingress. To deploy -a development cluster you can follow the [minikube](contrib/MINIKUBE.md) instructions. +a development cluster you can follow the [minikube](contrib/helm/MINIKUBE.md) instructions. --- diff --git a/contrib/MINIKUBE.md b/contrib/helm/MINIKUBE.md similarity index 100% rename from contrib/MINIKUBE.md rename to contrib/helm/MINIKUBE.md diff --git a/contrib/README.md b/contrib/helm/README.md similarity index 99% rename from contrib/README.md rename to contrib/helm/README.md index 9f645f8..bab12c1 100644 --- a/contrib/README.md +++ b/contrib/helm/README.md @@ -10,7 +10,7 @@ set up, please follow the [minikube](MINIKUBE.md) instructions to set this up fo 1. [Examples](#examples) 1. [Register a function](#register-a-function) 1. [Query all function](#query-all-function) - 1. [Register an event](#register-an-event) + 1. [Register an event type](#register-an-event-type) 1. [Query all events](#query-all-events) 1. [Register a subscription](#register-a-subscription) 1. [Query all subscriptions](#query-all-subscriptions) @@ -175,7 +175,7 @@ You should see the functions list return your defined set of functions across al } ``` -#### Register an event +#### Register an event type To register an event, make sure to `POST` the event name to the `event-gateway`. From 16765e8fdd12c5c103bfbd902527ffa28be00782 Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Thu, 16 Aug 2018 08:15:17 -0500 Subject: [PATCH 28/33] updating to query all event types --- contrib/helm/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/helm/README.md b/contrib/helm/README.md index bab12c1..59e22bc 100644 --- a/contrib/helm/README.md +++ b/contrib/helm/README.md @@ -11,7 +11,7 @@ set up, please follow the [minikube](MINIKUBE.md) instructions to set this up fo 1. [Register a function](#register-a-function) 1. [Query all function](#query-all-function) 1. [Register an event type](#register-an-event-type) - 1. [Query all events](#query-all-events) + 1. [Query all event types](#query-all-event-types) 1. [Register a subscription](#register-a-subscription) 1. [Query all subscriptions](#query-all-subscriptions) 1. [Trigger an event](#trigger-an-event) @@ -195,7 +195,7 @@ The reply should look something like the following: } ``` -#### Query all events +#### Query all event types ```bash curl --request GET \ From 25a3e388620556e5b9e3e11bba328b9d05376c44 Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Thu, 16 Aug 2018 09:22:32 -0500 Subject: [PATCH 29/33] updating the README for the contrib level folder --- README.md | 2 +- contrib/README.md | 7 +++++++ contrib/helm/MINIKUBE.md | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 contrib/README.md diff --git a/README.md b/README.md index 0cd9370..375470f 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,7 @@ $ event-gateway --dev ### Kubernetes -The repo contains `helm` charts for a quick deploy to an existing cluster using native nginx Ingress. To deploy +The repo contains `helm` [charts](contrib/helm/README.md) for a quick deploy to an existing cluster using native nginx Ingress. To deploy a development cluster you can follow the [minikube](contrib/helm/MINIKUBE.md) instructions. --- diff --git a/contrib/README.md b/contrib/README.md new file mode 100644 index 0000000..c77e703 --- /dev/null +++ b/contrib/README.md @@ -0,0 +1,7 @@ +# Event Gateway Contributions + +This folder contains services and contributions which complement the Event Gateway. + +1. Install Event Gateway on Kubernetes using [helm](helm/README.md) +1. Install Minikube for local [development](helm/MINIKUBE.md) +1. Provision the Event Gateway on AWS ECS Fargate using [terraform](terraform/README.md) diff --git a/contrib/helm/MINIKUBE.md b/contrib/helm/MINIKUBE.md index 5bf332f..348af3b 100644 --- a/contrib/helm/MINIKUBE.md +++ b/contrib/helm/MINIKUBE.md @@ -1,4 +1,4 @@ -# Event Gateway on Kubernetes (minikube) +# Install Minikube for Local Development To develop and deploy the `event-gateway` and all related elements locally, the easiest method includes using the [minikube](https://github.com/kubernetes/minikube) toolset. To get started, set up your local cluster with the From 554216f7190199077b73fca05b4147dbae8ab422 Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Thu, 16 Aug 2018 09:24:58 -0500 Subject: [PATCH 30/33] updating to builleted items --- contrib/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/contrib/README.md b/contrib/README.md index c77e703..11e6269 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -2,6 +2,6 @@ This folder contains services and contributions which complement the Event Gateway. -1. Install Event Gateway on Kubernetes using [helm](helm/README.md) -1. Install Minikube for local [development](helm/MINIKUBE.md) -1. Provision the Event Gateway on AWS ECS Fargate using [terraform](terraform/README.md) ++ Install Event Gateway on Kubernetes using [helm](helm/README.md) ++ Install Minikube for local [development](helm/MINIKUBE.md) ++ Provision the Event Gateway on AWS ECS Fargate using [terraform](terraform/README.md) From 0ba45ab1e7579f495605e7eedbd6918e0db87aed Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Thu, 16 Aug 2018 09:27:12 -0500 Subject: [PATCH 31/33] removing extraneous reference --- contrib/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/contrib/README.md b/contrib/README.md index 11e6269..5f098fe 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -3,5 +3,4 @@ This folder contains services and contributions which complement the Event Gateway. + Install Event Gateway on Kubernetes using [helm](helm/README.md) -+ Install Minikube for local [development](helm/MINIKUBE.md) + Provision the Event Gateway on AWS ECS Fargate using [terraform](terraform/README.md) From 2153ab045ae1fa5424efc8c9fbbbc338ac30d749 Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Thu, 16 Aug 2018 10:39:49 -0500 Subject: [PATCH 32/33] updating README with feedback --- contrib/helm/README.md | 37 ++++++++++++++----------------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/contrib/helm/README.md b/contrib/helm/README.md index 59e22bc..0928ebd 100644 --- a/contrib/helm/README.md +++ b/contrib/helm/README.md @@ -41,22 +41,8 @@ this namespace has no bearing on your Event Gateway `spaces` as outlined in the to install `etcd-operator` and `event-gateway` in another namespace, add the `--namespace ` option to both `helm install` commands above. -Next we'll need to collect the Event Gateway IP to use on the CLI. We have a couple of options available to reference the -internal services of the kubernetes cluster exposed via Ingress: - -1. add Ingress IP to /etc/hosts (recommended) - - This method enables us to reference the `event-gateway` from the hostname we configured in the Ingress module. This document - assumes the name to be `eventgateway.minikube` so please update the instructions to your naming convention if you need. - - ```bash - echo "$(kubectl get ingress event-gateway-ingress -o jsonpath={.status.loadBalancer.ingress[0].ip}) eventgateway.minikube" | sudo tee -a "/etc/hosts" - ``` - -1. use Ingress IP and pass header to request - - With this method we access the `event-gateway` using the IP of the Ingress directly. Since the Ingress was configured to - receive all connections from the `eventgateway.minikube` host, you'll need to pass this as a header value to the request. +Next we'll need to collect the Event Gateway IP to use on the CLI. Since the Ingress was configured to receive all +connections from the `eventgateway.minikube` host, you'll need to pass this as a header value to the request. ```bash export EVENT_GATEWAY_URL=$(kubectl get ingress event-gateway-ingress -o jsonpath={.status.loadBalancer.ingress[0].ip}) @@ -181,8 +167,9 @@ To register an event, make sure to `POST` the event name to the `event-gateway`. ```bash curl --request POST \ - --url http://eventgateway.minikube/v1/spaces/default/eventtypes \ + --url http://${EVENT_GATEWAY_URL}/v1/spaces/default/eventtypes \ --header 'content-type: application/json' \ + --header 'host: eventgateway.minikube' \ --data '{ "name": "eventgateway.function.invoked" }' ``` @@ -199,8 +186,9 @@ The reply should look something like the following: ```bash curl --request GET \ - --url http://eventgateway.minikube/v1/spaces/default/eventtypes \ - --header 'content-type: application/json' + --url http://${EVENT_GATEWAY_URL}/v1/spaces/default/eventtypes \ + --header 'content-type: application/json' \ + --header 'host: eventgateway.minikube' ``` Your registered events reply should look as follows: @@ -223,8 +211,9 @@ the JSON POST payload. ```bash curl --request POST \ - --url http://eventgateway.minikube/v1/spaces/default/subscriptions \ + --url http://${EVENT_GATEWAY_URL}/v1/spaces/default/subscriptions \ --header 'content-type: application/json' \ + --header 'host: eventgateway.minikube' \ --data '{ "type": "async", "eventType": "eventgateway.function.invoked", @@ -254,8 +243,9 @@ To list our your current subscrptions, you can do the following: ```bash curl --request GET \ - --url http://eventgateway.minikube/v1/spaces/default/subscriptions \ + --url http://${EVENT_GATEWAY_URL}/v1/spaces/default/subscriptions \ --header 'content-type: application/json' \ + --header 'host: eventgateway.minikube' ``` The output should list each of the registered subscriptions: @@ -284,8 +274,9 @@ we would: ```bash curl --request GET \ - --url http://eventgateway.minikube/echo \ - --header 'content-type: application/json' + --url http://${EVENT_GATEWAY_URL}/echo \ + --header 'content-type: application/json' \ + --header 'host: eventgateway.minikube' ``` **NOTE**: as mentioned earlier, the `events` service is handled by the path-routing service of the kubernetes Ingress. Any path From 1b8a70fa0f5030c8fd7825a3f6bc94898d2d8d28 Mon Sep 17 00:00:00 2001 From: Sebastian Borza Date: Thu, 16 Aug 2018 10:49:50 -0500 Subject: [PATCH 33/33] cleaning up doublenote --- contrib/helm/README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/contrib/helm/README.md b/contrib/helm/README.md index 0928ebd..40a2c56 100644 --- a/contrib/helm/README.md +++ b/contrib/helm/README.md @@ -61,10 +61,7 @@ Once you've set the `EVENT_GATEWAY_URL` environment variable, you're set to star **NOTE:** the events and configuration API ports are abstracted away from us via the kubernetes Ingress. The path-based routing will ensure the request goes to the proper service managed by the cluster. -**DOUBLENOTE:** if you did not want to use an environment variable for connecting to the `event-gateway`, you can use -the host of your Ingress by adding to `/etc/hosts`. Please check the [Quickstart](#quickstart) for reference. - -**TRIPLENOTE:** the examples below all assume the `default` namespace for the `event-gateway`. If you've updated or changed +**DOUBLENOTE:** the examples below all assume the `default` namespace for the `event-gateway`. If you've updated or changed this on your end, please don't forget to update the queries accordingly. #### Register a function