diff --git a/.gitignore b/.gitignore
index fdd2f26d..0e7d76f3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@
.idea/
*.iml
*.iws
+*.tgz
diff --git a/README.md b/README.md
index 77d524ba..2b1dcd99 100644
--- a/README.md
+++ b/README.md
@@ -15,11 +15,11 @@
## Audience
-You are an Apigee Edge API proxy developer, or you would like to learn about developing APIs that run on Apigee Edge. At a minimum, we assume you're familiar with Apigee Edge and how to create simple API proxies. To learn more, we recommend this [getting-started tutorial](http://apigee.com/docs/api-services/tutorials/create-your-first-api).
+You are an Apigee Edge API proxy developer, or you would like to learn about developing APIs that run on Apigee Edge. At a minimum, we assume you're familiar with Apigee Edge and how to create simple API proxies. To learn more, we recommend this [getting-started tutorial](https://docs.apigee.com/api-platform/tutorials/add-and-configure-your-first-api).
## Intro
-This repository contains a collection of sample API proxies that you can deploy and run on [Apigee Edge](http://apigee.com/about/products/api-management).
+This repository contains a collection of sample API proxies that you can deploy and run on [Apigee Edge](https://apigee.com/api-management/#/products).

@@ -42,7 +42,7 @@ In addition, you'll find:
## Using the sample proxies
-Most developers begin by identifying an interesting sample based on a specific use case or need. You'll find the samples in the `./api-platform-samples/sample-proxies` folder. The Apigee doc site also has a handy [samples overview page](http://apigee.com/docs/api-services/samples/samples-reference).
+Most developers begin by identifying an interesting sample based on a specific use case or need. You'll find the samples in the `./api-platform-samples/sample-proxies` folder. The Apigee doc site also has a handy [samples overview page](https://docs.apigee.com/api-platform/samples/samples-reference).
For example, if you're interested in doing XML to JSON transformations, check out `api-platform-samples/sample-proxies/xmltojson`.
@@ -158,7 +158,7 @@ API products, apps, and developers.
Simple scripts to help you deploy the sample API proxies and profiles that they
rely on, including API products, developers, and apps.
-Set you Apigee API Platform account settings in `setenv.sh` ([Register for a free Apigee account](http://eneterprise.apigee.com/signup))
+Set you Apigee API Platform account settings in `setenv.sh` ([Register for a free Apigee account](https://docs.apigee.com/api-platform/get-started/creating-apigee-edge-account))
To deploy a single sample, run `deploy.sh proxyName`, where `proxyName` is the name of the directory under `/sample-proxies` that contains the proxy you want to deploy.
@@ -178,7 +178,7 @@ To deploy all samples and API products, run `deploy_all.sh`
## Apigee Edge documentation
-The Apigee Edge docs are [here](http://apigee.com/docs).
+The Apigee Edge docs are [here](https://docs.apigee.com).
---
diff --git a/doc-samples/hosted-targets/README.md b/doc-samples/hosted-targets/README.md
new file mode 100644
index 00000000..16bf6a1b
--- /dev/null
+++ b/doc-samples/hosted-targets/README.md
@@ -0,0 +1,3 @@
+This directory contains samples that you can deploy on Apigee Edge Hosted Targets. See the README files for detailed instructions.
+
+To learn about Hosted Targets, see [Hosted Targets overview](https://docs.apigee.com/api-platform/hosted-targets/hosted-targets-overview.html) in the Apigee Edge documentation.
diff --git a/doc-samples/hosted-targets/node-hosted-express/README.md b/doc-samples/hosted-targets/node-hosted-express/README.md
new file mode 100644
index 00000000..e97b4024
--- /dev/null
+++ b/doc-samples/hosted-targets/node-hosted-express/README.md
@@ -0,0 +1,102 @@
+# How to create a hello world Node.js application with Hosted Targets using express
+
+This sample is a Node.js proxy that uses [express](https://www.npmjs.com/package/express).
+
+## Test the app locally
+ Before pushing to Apigee, it can be useful to test the application locally first to make sure everything is working as it should.
+
+ 1. Make sure you have [Nodejs](https://nodejs.org/en/download/) installed
+ 2. Installl dependencies:
+
+ ```
+ cd apiproxy/resources/hosted
+ npm install
+ ```
+
+ 3. Start the application:
+
+ ```
+ PORT=8081 node index.js
+ ```
+
+ 4. Test the applicaiton:
+
+ ```
+ curl http://localhost:8081
+ {"hello":"Hello World!"}
+
+ curl http://localhost:8081/hello/user
+ {"hello":"hello user"}
+ ```
+
+ 5. Remove node_modules and package-lock.json:
+
+ ```
+ rm -rf node_modules
+ rm package-lock.json
+ ```
+
+ 6. Go back to the home directory for deploying:
+
+ ```
+ cd ../../..
+ ```
+
+## Deploy the proxy
+ 1. Make sure you have [apigeetool](https://github.com/apigee/apigeetool-node) installed
+ 2. Make sure you have [get_token](https://apidocs.apigee.com/api-reference/content/using-oauth2-security-apigee-edge-management-api) script installed
+ 3. Deploy your proxy:
+
+ ```
+ get_token && apigeetool deployproxy \
+ -o \
+ -e \
+ --json \
+ --token "$(< ~/.sso-cli/valid_token.dat)" \
+ --api node-hosted-express \
+ --directory .
+ ```
+ **Note**: This step might take a minute or two to work
+
+ 4. Test your proxy deployment:
+
+ ```
+ curl https:/-.apigee.net/node-hosted-express
+ ```
+
+ 5. Undeploy your proxy:
+
+ ```
+ get_token && apigeetool undeploy \
+ -o \
+ -e \
+ --json \
+ --token "$(< ~/.sso-cli/valid_token.dat)" \
+ --api node-hosted-express \
+ --revision
+ ```
+
+ For more insight into Hosted Targets and Apigee, visit our [documentation](https://docs.apigee.com/api-platform/hosted-targets/hosted-targets-overview.html).
+
+# Ask the community
+
+[](https://community.apigee.com?via=github)
+
+---
+
+Copyright © 2017 Apigee Corporation
+
+Licensed under the Apache License, Version 2.0 (the "License"); you may not use
+this file except in compliance with the License. You may obtain a copy
+of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+http://docs.apigee.com/api-services/reference/supported-software
+
diff --git a/doc-samples/hosted-targets/node-hosted-express/apiproxy/node-hosted-express.xml b/doc-samples/hosted-targets/node-hosted-express/apiproxy/node-hosted-express.xml
new file mode 100644
index 00000000..f9e67ff5
--- /dev/null
+++ b/doc-samples/hosted-targets/node-hosted-express/apiproxy/node-hosted-express.xml
@@ -0,0 +1,25 @@
+
+
+ /node-hosted-express
+
+ 1512506918706
+ kwiese@google.com
+
+ node-hosted-express
+ 1512506918706
+ kwiese@google.com
+
+
+ default
+
+
+ hosted://app.yaml
+ hosted://index.js
+ hosted://package.json
+
+
+
+
+ default
+
+
diff --git a/doc-samples/hosted-targets/node-hosted-express/apiproxy/proxies/default.xml b/doc-samples/hosted-targets/node-hosted-express/apiproxy/proxies/default.xml
new file mode 100644
index 00000000..23001cf0
--- /dev/null
+++ b/doc-samples/hosted-targets/node-hosted-express/apiproxy/proxies/default.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /node-hosted-express
+
+ default
+ secure
+
+
+ default
+
+
diff --git a/doc-samples/hosted-targets/node-hosted-express/apiproxy/resources/hosted/app.yaml b/doc-samples/hosted-targets/node-hosted-express/apiproxy/resources/hosted/app.yaml
new file mode 100644
index 00000000..a4175639
--- /dev/null
+++ b/doc-samples/hosted-targets/node-hosted-express/apiproxy/resources/hosted/app.yaml
@@ -0,0 +1,8 @@
+runtime: node
+runtimeVersion: 8
+application: my-express-app
+env:
+ - name: NODE_ENV
+ value: production
+ - name: LOG_LEVEL
+ value: 3
diff --git a/doc-samples/hosted-targets/node-hosted-express/apiproxy/resources/hosted/index.js b/doc-samples/hosted-targets/node-hosted-express/apiproxy/resources/hosted/index.js
new file mode 100644
index 00000000..9682d9fe
--- /dev/null
+++ b/doc-samples/hosted-targets/node-hosted-express/apiproxy/resources/hosted/index.js
@@ -0,0 +1,15 @@
+var express = require('express')
+var app = express()
+
+app.get('/', function (req, res) {
+ res.json({ hello: "Hello World!" })
+})
+
+app.get('/hello/:name', function (req, res) {
+ var name = req.params.name
+ res.json({ hello: "hello " + name })
+})
+
+var server = app.listen(process.env.PORT || 9000, function () {
+ console.log('Listening on port %d', server.address().port)
+})
\ No newline at end of file
diff --git a/doc-samples/hosted-targets/node-hosted-express/apiproxy/resources/hosted/package.json b/doc-samples/hosted-targets/node-hosted-express/apiproxy/resources/hosted/package.json
new file mode 100644
index 00000000..ce5c4334
--- /dev/null
+++ b/doc-samples/hosted-targets/node-hosted-express/apiproxy/resources/hosted/package.json
@@ -0,0 +1,13 @@
+{
+ "name": "hello-world",
+ "version": "1.0.0",
+ "main": "index.js",
+ "scripts": {
+ "start": "node index.js --use_strict"
+ },
+ "author": "",
+ "license": "",
+ "dependencies": {
+ "express": "^4.16.0"
+ }
+}
diff --git a/doc-samples/hosted-targets/node-hosted-express/apiproxy/targets/default.xml b/doc-samples/hosted-targets/node-hosted-express/apiproxy/targets/default.xml
new file mode 100644
index 00000000..82a7ea17
--- /dev/null
+++ b/doc-samples/hosted-targets/node-hosted-express/apiproxy/targets/default.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc-samples/hosted-targets/node-hosted-express/deploy.txt b/doc-samples/hosted-targets/node-hosted-express/deploy.txt
new file mode 100644
index 00000000..f4307553
--- /dev/null
+++ b/doc-samples/hosted-targets/node-hosted-express/deploy.txt
@@ -0,0 +1,7 @@
+get_token && apigeetool deployproxy \
+ -o apigee-hf-testing \
+ -e test \
+ --json \
+ --token "$(< ~/.sso-cli/valid_token.dat)" \
+ --api node-hosted-express \
+ --directory .
diff --git a/doc-samples/hosted-targets/node-hosted-hello/README.md b/doc-samples/hosted-targets/node-hosted-hello/README.md
new file mode 100644
index 00000000..2db30aa2
--- /dev/null
+++ b/doc-samples/hosted-targets/node-hosted-hello/README.md
@@ -0,0 +1,80 @@
+# How to create a hello world Node.js application with Hosted Targets
+
+This sample is a simple hello world Node.js proxy.
+
+## Test the app locally
+ Before pushing to Apigee, it can be useful to test the application locally first to make sure everything is working as it should.
+
+ 1. Make sure you have [Nodejs](https://nodejs.org/en/download/) installed
+
+ 2. Start the application:
+
+ ```
+ PORT=8081 node apiproxy/resources/hosted/index.js
+ ```
+
+ 3. Test the applicaiton:
+
+ ```
+ curl http://localhost:8081
+ {"date":"2018-03-12T21:45:22.161Z","msg":"Hello, World!"}
+ ```
+
+## Deploy the proxy
+ 1. Make sure you have [apigeetool](https://github.com/apigee/apigeetool-node) installed
+ 2. Make sure you have [get_token](https://apidocs.apigee.com/api-reference/content/using-oauth2-security-apigee-edge-management-api) script installed
+ 3. Deploy your proxy:
+
+ ```
+ get_token && apigeetool deployproxy \
+ -o \
+ -e \
+ --json \
+ --token "$(< ~/.sso-cli/valid_token.dat)" \
+ --api node-hosted-hello \
+ --directory .
+ ```
+ **Note**: This step might take a minute or two to work
+
+ 4. Test your proxy deployment:
+
+ ```
+ curl https:/-.apigee.net/node-hosted-hello
+ ```
+
+ 5. Undeploy your proxy:
+
+ ```
+ get_token && apigeetool undeploy \
+ -o \
+ -e \
+ --json \
+ --token "$(< ~/.sso-cli/valid_token.dat)" \
+ --api node-hosted-hello \
+ --revision
+ ```
+
+ For more insight into Hosted Targets and Apigee, visit our [documentation](https://docs.apigee.com/api-platform/hosted-targets/hosted-targets-overview.html).
+
+# Ask the community
+
+[](https://community.apigee.com?via=github)
+
+---
+
+Copyright © 2017 Apigee Corporation
+
+Licensed under the Apache License, Version 2.0 (the "License"); you may not use
+this file except in compliance with the License. You may obtain a copy
+of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+http://docs.apigee.com/api-services/reference/supported-software
+
diff --git a/doc-samples/hosted-targets/node-hosted-hello/apiproxy/node-hosted-hello.xml b/doc-samples/hosted-targets/node-hosted-hello/apiproxy/node-hosted-hello.xml
new file mode 100644
index 00000000..f7aff875
--- /dev/null
+++ b/doc-samples/hosted-targets/node-hosted-hello/apiproxy/node-hosted-hello.xml
@@ -0,0 +1,25 @@
+
+
+ /node-hosted-hello
+
+ 1512506918706
+ kwiese@google.com
+
+ node-hosted-hello
+ 1512506918706
+ kwiese@google.com
+
+
+ default
+
+
+ hosted://app.yaml
+ hosted://index.js
+ hosted://package.json
+
+
+
+
+ default
+
+
diff --git a/doc-samples/hosted-targets/node-hosted-hello/apiproxy/proxies/default.xml b/doc-samples/hosted-targets/node-hosted-hello/apiproxy/proxies/default.xml
new file mode 100644
index 00000000..611eb8d7
--- /dev/null
+++ b/doc-samples/hosted-targets/node-hosted-hello/apiproxy/proxies/default.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /node-hosted-hello
+
+ default
+ secure
+
+
+ default
+
+
diff --git a/doc-samples/hosted-targets/node-hosted-hello/apiproxy/resources/hosted/app.yaml b/doc-samples/hosted-targets/node-hosted-hello/apiproxy/resources/hosted/app.yaml
new file mode 100644
index 00000000..a4918f68
--- /dev/null
+++ b/doc-samples/hosted-targets/node-hosted-hello/apiproxy/resources/hosted/app.yaml
@@ -0,0 +1,8 @@
+runtime: node
+runtimeVersion: 8
+application: my-node-app
+env:
+ - name: NODE_ENV
+ value: production
+ - name: LOG_LEVEL
+ value: 3
diff --git a/doc-samples/hosted-targets/node-hosted-hello/apiproxy/resources/hosted/index.js b/doc-samples/hosted-targets/node-hosted-hello/apiproxy/resources/hosted/index.js
new file mode 100644
index 00000000..7140332e
--- /dev/null
+++ b/doc-samples/hosted-targets/node-hosted-hello/apiproxy/resources/hosted/index.js
@@ -0,0 +1,14 @@
+var http = require('http');
+
+console.log('node.js application starting...');
+console.log(process.env);
+
+var svr = http.createServer(function(req, resp) {
+ console.log(req.method, req.url);
+ resp.setHeader("Content-Type", "application/json");
+ resp.end(JSON.stringify({ date: new Date(), msg: 'Hello, World!'}));
+});
+
+svr.listen(process.env.PORT || 9000, function() {
+ console.log('Node HTTP server is listening');
+});
\ No newline at end of file
diff --git a/doc-samples/hosted-targets/node-hosted-hello/apiproxy/resources/hosted/package.json b/doc-samples/hosted-targets/node-hosted-hello/apiproxy/resources/hosted/package.json
new file mode 100644
index 00000000..d5315089
--- /dev/null
+++ b/doc-samples/hosted-targets/node-hosted-hello/apiproxy/resources/hosted/package.json
@@ -0,0 +1,13 @@
+{
+ "name": "hello-world",
+ "version": "1.0.0",
+ "main": "index.js",
+ "scripts": {
+ "start": "node index.js"
+ },
+ "author": "",
+ "license": "",
+ "description": "Hello World Application",
+ "dependencies": {
+ }
+}
\ No newline at end of file
diff --git a/doc-samples/hosted-targets/node-hosted-hello/apiproxy/targets/default.xml b/doc-samples/hosted-targets/node-hosted-hello/apiproxy/targets/default.xml
new file mode 100644
index 00000000..82a7ea17
--- /dev/null
+++ b/doc-samples/hosted-targets/node-hosted-hello/apiproxy/targets/default.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/javadocs-javacallout.zip b/docs/javadocs-javacallout.zip
index 9e3ae678..12d011c6 100644
Binary files a/docs/javadocs-javacallout.zip and b/docs/javadocs-javacallout.zip differ
diff --git a/docs/javadocs-javacallout/com/apigee/flow/message/MessageContext.html b/docs/javadocs-javacallout/com/apigee/flow/message/MessageContext.html
index 579acd97..3c49ae70 100644
--- a/docs/javadocs-javacallout/com/apigee/flow/message/MessageContext.html
+++ b/docs/javadocs-javacallout/com/apigee/flow/message/MessageContext.html
@@ -413,7 +413,7 @@ setVariable
- Parameters:
name
- The name of the flow variable.
-value
- The new value for the variable.
+value
- The new value for the variable. The item is set as an object, and not flattened upon insertion.
- Returns:
- true if the variable was set;
false if the variable is read-only or if it does not exist.
diff --git a/edge-ux/proxy-to-target/package.json b/edge-ux/proxy-to-target/package.json
index 96664229..be6c68a0 100644
--- a/edge-ux/proxy-to-target/package.json
+++ b/edge-ux/proxy-to-target/package.json
@@ -11,8 +11,8 @@
},
"dependencies": {
"apigeetool": "mukundha/apigeetool-node",
- "gulp": "*",
- "gulp-util": "^3.0.7"
+ "gulp": ">3.9.1",
+ "gulp-util": "^3.0.8"
},
"author": "mukundha@apigee.com",
"license": "ISC"
diff --git a/learn-edge/README.md b/learn-edge/README.md
index c16d24c2..4af284a7 100644
--- a/learn-edge/README.md
+++ b/learn-edge/README.md
@@ -14,33 +14,33 @@ The best way to learn Apigee Edge is by doing!
This is the recommended path through the examples. But you can do them in any order you wish. Each sample can be deployed and run independently:
-1. [simplest-proxy](./simplest-proxy/README.md)
+1. [simplest-proxy](./simplest-proxy/README.md)
- >Learn to deploy and call a very simple proxy.
+ >Learn to deploy and call a very simple proxy.
2. [proxy-to-a-target](./proxy-to-a-target/README.md)
- >Get back data from a backend target service.
+ >Get back data from a backend target service.
3. [apikey-security-1](./apikey-security-1/README.md)
- >Secure an API with an API key.
+ >Secure an API with an API key.
-4. [apikey-security-2](./apikey-security-1/README.md)
+4. [apikey-security-2](./apikey-security-2/README.md)
>Prevent an API key from being passed to the backend target service.
4. [fault-handling-1](./fault-handling-1/README.md)
- >Handle a proxy error and return a custom error message.
+ >Handle a proxy error and return a custom error message.
5. [fault-handling-2](./fault-handling-2/README.md)
- >Learn more about how to do fault handling.
+ >Learn more about how to do fault handling.
5. [response-cache-1](./response-cache-1/README.md)
- >Speed up your proxy performance with a response cache.
+ >Speed up your proxy performance with a response cache.
6. [response-cache-2](./response-cache-2/README.md)
@@ -49,14 +49,14 @@ This is the recommended path through the examples. But you can do them in any or
6. [extract-json-payload](./extract-json-payload/README.md)
>Extract data from a JSON payload and return the data in custom response headers.
-
+
7. [extract-json-payload-2](./extract-json-payload-2/README.md)
>Query for data to extract from a JSON response payload.
7. [extract-xml-payload](./extract-xml-payload/README.md)
- >Extract data from an XML request body and set a custom XML response body.
+ >Extract data from an XML request body and set a custom XML response body.
7. [quota-1](./quota-1/README.md)
@@ -74,7 +74,7 @@ This is the recommended path through the examples. But you can do them in any or
### Prerequisites
1. You need an **Apigee account**. If you don't have an Apigee account, go to [https://login.apigee.com/login](https://login.apigee.com/login), and click Create Account.
-2. You must install [apigeetool](https://www.npmjs.com/package/apigeetool). We use apigeetool to deploy the proxies.
+2. You must install [apigeetool](https://www.npmjs.com/package/apigeetool). We use apigeetool to deploy the proxies.
`npm install -g apigeetool`
@@ -83,6 +83,11 @@ This is the recommended path through the examples. But you can do them in any or
2. Download or clone the [api-platform-samples](https://github.com/apigee/api-platform-samples) GitHub repo.
6. In a browser, sign in to your [Apigee account](http://apigee.com) and go to the API Management section. It'll be good to keep this browser window open as you work so you can view and trace the Learn Edge proxies in the UI.
+**Troubleshooting:** If you've previously tried to run the sample and have
+trouble with the script (for example, it's using the wrong organization
+or the URL to invoke is incorrect), find and delete `HOME/learn-edge.rc`
+on your local file system. Then re-deploy the sample.
+
That's it! To get started, go to the README for the first example proxy, [simplest-proxy](./simplest-proxy), and follow the instructions. On your filesystem, it is in the folder `api-platform-samples/learn-edge/simplest-proxy`.
### What you'll learn
@@ -90,17 +95,17 @@ That's it! To get started, go to the README for the first example proxy, [simple
We try not to clutter the lessons with a lot of explanation and background information. Rather, we expect you to learn by doing, by changing things, and fixing problems. When you complete the series, you will understand:
* The basic capabilities of Apigee Edge.
-* Core concepts you'll need to be a successful Edge developer. They include security, fault handling, caching, quotas, and others.
+* Core concepts you'll need to be a successful Edge developer. They include security, fault handling, caching, quotas, and others.
* How Edge projects are structured.
* How to do primary Edge development locally, on your laptop, rather than in the UI.
* How to deploy Edge proxies from your laptop to Edge.
* Basic debugging techniques.
-**Tip:** If you want to dive deeper into any concept covered in this series, you can go to the [Apigee Edge documentation](http://docs.apigee.com/) and use Search to look up topics (search works very well and even picks up related topics in the [Apigee Community](https://community.apigee.com/index.html)). In a few cases, we'll provide a link if we think it will be especially helpful. You can also check out the Apigee Edge [4-Minute Video](https://www.youtube.com/playlist?list=PLIXjuPlujxxxe3iTmLtgfIBgpMo7iD7fk) series.
+**Tip:** If you want to dive deeper into any concept covered in this series, you can go to the [Apigee Edge documentation](http://docs.apigee.com/) and use Search to look up topics (search works very well and even picks up related topics in the [Apigee Community](https://community.apigee.com/index.html)). In a few cases, we'll provide a link if we think it will be especially helpful. You can also check out the Apigee Edge [4-Minute Video](https://www.youtube.com/playlist?list=PLIXjuPlujxxxe3iTmLtgfIBgpMo7iD7fk) series.
### What you won't learn
-* A lot of background, text-book style information. You'll learn by deploying and running example code on Apigee Edge. You can always read about features in the official [Apigee Edge documentation](http://docs.apigee.com/).
+* A lot of background, text-book style information. You'll learn by deploying and running example code on Apigee Edge. You can always read about features in the official [Apigee Edge documentation](http://docs.apigee.com/).
* All of the possible use cases for Edge.
* All of the features included with Edge.
* All of the possible ways to use the features we introduce.
diff --git a/learn-edge/extract-json-payload-2/README.md b/learn-edge/extract-json-payload-2/README.md
index fdf7475c..39c1cd05 100644
--- a/learn-edge/extract-json-payload-2/README.md
+++ b/learn-edge/extract-json-payload-2/README.md
@@ -30,7 +30,7 @@ We assume you've provisioned the Product, Developer App, and Developer as explai
### Deploy it
-1. `cd api-platform-samples/learn-edge/extract-json-payload`.
+1. `cd api-platform-samples/learn-edge/extract-json-payload-2`.
2. `./deploy.sh`
### Run it
diff --git a/learn-edge/provisioning/setup.sh b/learn-edge/provisioning/setup.sh
index 80b8e31a..fb78f527 100755
--- a/learn-edge/provisioning/setup.sh
+++ b/learn-edge/provisioning/setup.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
## Ensure configuration variables have been set.
source ../../setup/userconf.sh || exit 1
diff --git a/learn-edge/scripts/deploy_proxy.sh b/learn-edge/scripts/deploy_proxy.sh
index d1484310..0718b0a9 100644
--- a/learn-edge/scripts/deploy_proxy.sh
+++ b/learn-edge/scripts/deploy_proxy.sh
@@ -3,7 +3,7 @@
function deploy_proxy {
if hash apigeetool 2>/dev/null; then
printf "\n\nUsing apigeetool to deploy the proxy to the $env environment in the $org org to the $url url...\n\n"
- apigeetool deployproxy -v -o $org -e $env --api learn-edge -L $url -d . -u $username -p $password -V
+ apigeetool deployproxy -o $org -e $env --api learn-edge -L $url -d . -u $username -p $password -V
printf "\nIf the deployment is successful, then your API Proxy is ready to be invoked.\n"
printf "\nRun 'invoke.sh'\n"
else
diff --git a/learn-edge/service-callout-1/README.md b/learn-edge/service-callout-1/README.md
index 7819d49a..846b1d86 100644
--- a/learn-edge/service-callout-1/README.md
+++ b/learn-edge/service-callout-1/README.md
@@ -16,7 +16,7 @@ We assume you've provisioned the Product, Developer App, and Developer as explai
### Deploy it
-1. `cd api-platform-samples/learn-edge/extract-json-payload`.
+1. `cd api-platform-samples/learn-edge/service-callout-1`.
2. `./deploy.sh`
### Run it
diff --git a/learn-edge/service-callout-2/README.md b/learn-edge/service-callout-2/README.md
index d210190b..28e429a7 100644
--- a/learn-edge/service-callout-2/README.md
+++ b/learn-edge/service-callout-2/README.md
@@ -18,7 +18,7 @@ We assume you've provisioned the Product, Developer App, and Developer as explai
### Deploy it
-1. `cd api-platform-samples/learn-edge/extract-json-payload`.
+1. `cd api-platform-samples/learn-edge/service-callout-2`.
2. `./deploy.sh`
### Run it
diff --git a/sample-proxies/jira-release-notes/README.md b/sample-proxies/jira-release-notes/README.md
index b0d985dd..202e6ba0 100644
--- a/sample-proxies/jira-release-notes/README.md
+++ b/sample-proxies/jira-release-notes/README.md
@@ -1,8 +1,8 @@
# Jira release notes generator
-This sample leverages a [Jira API](https://docs.atlassian.com/jira/REST/6.2.7/) to return issues that are tagged in Jira with a 'release_notes' label. The proxy converts Jira's JSON response to XML, then applies an XSL stylesheet that generates HTML-formatted release notes. The stylesheet grabs text from a 'Release Notes Summary' field in Jira.
+This sample leverages a [Jira API](https://docs.atlassian.com/jira/REST/6.2.7/) to return issues that are tagged in Jira with a `release_notes` label. The proxy converts Jira's JSON response to XML, then applies an XSL stylesheet that generates HTML-formatted release notes. The stylesheet grabs text from a "Release Notes Summary" field in Jira.
-You can also add 'new_feature' and 'known_issue' labels in Jira. Issues with those tags are automatically added to the respective sections of the generated HTML.
+You can also add `new_feature` and `known_issue` labels in Jira. Issues with those tags are automatically added to the respective sections of the generated HTML.
If your Jira environment uses different fields, modify the URI query parameters accordingly (in invoke.sh as well, if you want to use that script), and modify the .xsl resource file accordingly.
@@ -32,11 +32,13 @@ To deploy, run `$ sh deploy.sh`
To test, run `$ sh invoke.sh`
-# Get help
+# What's New in the Docs API proxy
-For assistance, please use [Apigee Support](https://community.apigee.com/content/apigee-customer-support).
+The `jira_whatsnew_proxy.zip` file is an API proxy similar to the release notes proxy. It generates an HTML page of items to be included in a "What's New in the Docs" topic, similar to [this page in the Apigee docs](https://apigee.devsite.corp.google.com/release/whats-new-docs).
-Copyright © 2014, 2015 Apigee Corporation
+
+
+Copyright © 2014, 2018 Apigee Corporation
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
diff --git a/sample-proxies/jira-release-notes/jira_whatsnew_proxy.zip b/sample-proxies/jira-release-notes/jira_whatsnew_proxy.zip
new file mode 100644
index 00000000..ac6cab43
Binary files /dev/null and b/sample-proxies/jira-release-notes/jira_whatsnew_proxy.zip differ
diff --git a/sample-proxies/kerberos-credential-mediation/README.md b/sample-proxies/kerberos-credential-mediation/README.md
index 28bbd697..942f8f44 100644
--- a/sample-proxies/kerberos-credential-mediation/README.md
+++ b/sample-proxies/kerberos-credential-mediation/README.md
@@ -13,8 +13,7 @@ Note: This sample is applicable only for on-premise installation.
# Set up
-Edit the properties in ```apiporxy/policies/credentialdelegation.xml```
-
+1. Edit the properties in ```apiproxy/policies/credentialdelegation.xml```
```
krb5.conf
@@ -23,9 +22,31 @@ Edit the properties in ```apiporxy/policies/credentialdelegation.xml```
http@server-backend
```
-```krb5.conf```, ```login.conf``` and the necessary keytab files need to be present in the ```APIGEE_INSTALL_ROOT```
-```loginModule``` is the module name to choose from the ```login.conf```
+2. ```krb5.conf```, ```login.conf``` and the necessary keytab files need to be present in the ```/opt``` directory on **all** message-processor nodes.
+```loginModule``` is the module name to choose from ```login.conf```
+
+3. Ensure that the ```apigee``` user can read these files
+```
+chown apigee:apigee /opt/login.conf
+chown apigee:apigee /opt/krb5.conf
+```
+
+4. Edit the properties in ```/opt/apigee/customer/application/message-processor.properties``` on **all** message-processor nodes by adding the following two lines to the end of the file
+```
+conf/system.properties+java.security.auth.login.config=/opt/login.conf
+conf/system.properties+java.security.krb5.conf=/opt/krb5.conf
+```
+
+5. Restart **all** message-processor nodes
+```
+/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
+```
+
+6. Verify the properties have been properly added (you should see the two properites added above)
+```
+cat /opt/apigee/edge-message-processor/conf/system.properties
+```
# Import and deploy sample project
@@ -47,7 +68,7 @@ ServicePrincipalLoginContext
useKeyTab=true
storeKey=true
debug=true;
-}
+};
```
krb5.conf
diff --git a/sample-proxies/oauth-advanced/README.md b/sample-proxies/oauth-advanced/README.md
index c2ad9a92..ac02948e 100644
--- a/sample-proxies/oauth-advanced/README.md
+++ b/sample-proxies/oauth-advanced/README.md
@@ -30,7 +30,7 @@ To run this sample, you'll need:
* Yeoman [installed](http://yeoman.io/)
-* Install oauth-auth-code-grant-sample generator:
+* Install oauth-auth-code-grant-sample generator (You can find the source code [here](https://github.com/apigee/api-platform-samples/blob/master/sample-proxies/oauth-advanced/app/index.js)):
`npm install generator-oauth-auth-code-grant-sample -g`
* Please note that the sample does not run properly in Windows 10. Please run in macOS or Linux for full compatibility.
diff --git a/sample-proxies/oauth-advanced/app/index.js b/sample-proxies/oauth-advanced/app/index.js
index bcdd8cde..91d65b82 100644
--- a/sample-proxies/oauth-advanced/app/index.js
+++ b/sample-proxies/oauth-advanced/app/index.js
@@ -98,15 +98,15 @@ module.exports = yeoman.generators.Base.extend({
// deploy user-mgmt-v1
shell.cd('user-mgmt-v1');
- shell.exec('apigeetool deployproxy -u '+this.uname+' -p '+this.password+' -o '+this.orgname+' -e '+this.envname+ ' -n user-mgmt-v1 -d .');
+ shell.exec('apigeetool deployproxy -u '+this.uname+' -p \''+this.password+'\' -o '+this.orgname+' -e '+this.envname+ ' -n user-mgmt-v1 -d .');
// deploy oauth2
shell.cd('../oauth2');
- shell.exec('apigeetool deployproxy -u '+this.uname+' -p '+this.password+' -o '+this.orgname+' -e '+this.envname+ ' -n oauth2 -d .');
+ shell.exec('apigeetool deployproxy -u '+this.uname+' -p \''+this.password+'\' -o '+this.orgname+' -e '+this.envname+ ' -n oauth2 -d .');
// provision login-app
shell.cd('../provisioning');
- shell.exec('./provision-login-app.sh '+this.uname+' '+this.password+' '+this.orgname+' '+this.envname+' '+this.mgmtapiurl);
+ shell.exec('./provision-login-app.sh '+this.uname+' \''+this.password+'\' '+this.orgname+' '+this.envname+' '+this.mgmtapiurl);
// npm install for login-app
shell.cd('../login-app/apiproxy/resources/node');
@@ -114,15 +114,15 @@ module.exports = yeoman.generators.Base.extend({
// deploy login-app
shell.cd('../../..');
- shell.exec('apigeetool deployproxy -u '+this.uname+' -p '+this.password+' -o '+this.orgname+' -e '+this.envname+ ' -n login-app -d . -U');
+ shell.exec('apigeetool deployproxy -u '+this.uname+' -p \''+this.password+'\' -o '+this.orgname+' -e '+this.envname+ ' -n login-app -d . -U');
// provision webserver
shell.cd('../provisioning');
- shell.exec('./provision-webserver.sh '+this.uname+' '+this.password+' '+this.orgname+' '+this.envname+' '+this.mgmtapiurl);
+ shell.exec('./provision-webserver.sh '+this.uname+' \''+this.password+'\' '+this.orgname+' '+this.envname+' '+this.mgmtapiurl);
//capture clientID and secret from last step and put in webserver-app bundle
- var webserverappkey = shell.exec("curl -H 'Accept: application/json' -u "+this.uname+":"+this.password+" "+this.mgmtapiurl+"/v1/o/"+this.orgname+"/developers/webdev@example.com/apps/webserver-app 2>/dev/null | grep consumerKey | awk -F '\"' '{ print $4 }'").output;
- var webserverappsecret = shell.exec("curl -H 'Accept: application/json' -u "+this.uname+":"+this.password+" "+this.mgmtapiurl+"/v1/o/"+this.orgname+"/developers/webdev@example.com/apps/webserver-app 2>/dev/null | grep consumerSecret | awk -F '\"' '{ print $4 }'").output;
+ var webserverappkey = shell.exec("curl -H 'Accept: application/json' -u '"+this.uname+":"+this.password+"' "+this.mgmtapiurl+"/v1/o/"+this.orgname+"/developers/webdev@example.com/apps/webserver-app 2>/dev/null | grep consumerKey | awk -F '\"' '{ print $4 }'").output;
+ var webserverappsecret = shell.exec("curl -H 'Accept: application/json' -u '"+this.uname+":"+this.password+"' "+this.mgmtapiurl+"/v1/o/"+this.orgname+"/developers/webdev@example.com/apps/webserver-app 2>/dev/null | grep consumerSecret | awk -F '\"' '{ print $4 }'").output;
// remove trailing whitespace
webserverappkey = webserverappkey.replace(/\n$/, "");
webserverappsecret = webserverappsecret.replace(/\n$/, "");
@@ -142,8 +142,8 @@ module.exports = yeoman.generators.Base.extend({
shell.cd('webserver-app');
//deploy webserver-app bundle
- shell.exec('apigeetool deployproxy -u '+this.uname+' -p '+this.password+' -o '+this.orgname+' -e '+this.envname+ ' -n webserver-app -d .');
+ shell.exec('apigeetool deployproxy -u '+this.uname+' -p \''+this.password+'\' -o '+this.orgname+' -e '+this.envname+ ' -n webserver-app -d .');
},
-});
\ No newline at end of file
+});
diff --git a/sample-proxies/oauth-advanced/app/templates/login-app/apiproxy/resources/node/package.json b/sample-proxies/oauth-advanced/app/templates/login-app/apiproxy/resources/node/package.json
index 8fb2c055..d6916696 100644
--- a/sample-proxies/oauth-advanced/app/templates/login-app/apiproxy/resources/node/package.json
+++ b/sample-proxies/oauth-advanced/app/templates/login-app/apiproxy/resources/node/package.json
@@ -13,7 +13,7 @@
"express-session": "^1.9.1",
"less-middleware": "^0.1.12",
"serve-favicon": "^2.1.6",
- "validator": "^1.3.0"
+ "validator": ">2.0.0"
},
"devDependencies": {},
"scripts": {
diff --git a/sample-proxies/oauth-advanced/package.json b/sample-proxies/oauth-advanced/package.json
index 0aedba90..5cb92f17 100644
--- a/sample-proxies/oauth-advanced/package.json
+++ b/sample-proxies/oauth-advanced/package.json
@@ -1,6 +1,6 @@
{
"name": "generator-oauth-auth-code-grant-sample",
- "version": "0.1.6",
+ "version": "0.1.10",
"description": "Generator for OAuth authorization code grant type using Apigee",
"files": [
"app",
@@ -23,14 +23,11 @@
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
- "repository": {
- "type": "git",
- "url": "git+https://github.com/dzuluaga/oauth-auth-code-grant-sample.git"
- },
+ "repository": "github:apigee/api-platform-samples/sample-proxies/oauth-advanced",
"author": "",
"license": "ISC",
"bugs": {
- "url": "https://github.com/dzuluaga/oauth-auth-code-grant-sample/issues"
+ "url": "https://github.com/apigee/api-platform-samples/issues"
},
- "homepage": "https://github.com/dzuluaga/oauth-auth-code-grant-sample#readme"
+ "homepage": "https://github.com/apigee/api-platform-samples/tree/master/sample-proxies/oauth-advanced#readme"
}
diff --git a/sample-proxies/outbound-oauth/README.md b/sample-proxies/outbound-oauth/README.md
index 79f474d5..f58a7a1b 100644
--- a/sample-proxies/outbound-oauth/README.md
+++ b/sample-proxies/outbound-oauth/README.md
@@ -67,9 +67,9 @@ A demo application that performs a search and renders the results in HTML is inc
1. Sign up for [Microsoft Translator API](http://www.microsofttranslator.com/dev/) access,
and replace the `clientId` and `clientSecret` in `apiproxy/resources/jsc/api-config.js` with your application credentials.
-2. Create a cache in the organization and environment you will be deploying the bundle in, using the definition in `twitter-translate-cache.xml`. This is used to cache the Translator API access token across requests. Try the following command:
+2. Create a cache in the organization and environment you will be deploying the bundle in, using the definition in `oauth-token-cache.xml`. This is used to cache the Translator API access token across requests. Try the following command:
- ```curl -v -X POST -H "Content-Type: application/xml" -d @twitter-translate-cache.xml https://api.enterprise.apigee.com/v1/organizations/$ORG/environments/$ENV/caches -u myname:mypass```
+ ```curl -v -X POST -H "Content-Type: application/xml" -d @oauth-token-cache.xml https://api.enterprise.apigee.com/v1/organizations/$ORG/environments/$ENV/caches -u myname:mypass```
* The username and password that you use to login to enterprise.apigee.com.
* The name of the organization in which you have an account. Log in to
diff --git a/sample-proxies/soap/apiproxy/proxies/default.xml b/sample-proxies/soap/apiproxy/proxies/default.xml
index af676958..87707823 100644
--- a/sample-proxies/soap/apiproxy/proxies/default.xml
+++ b/sample-proxies/soap/apiproxy/proxies/default.xml
@@ -18,10 +18,9 @@
/simplesoap
- default
+ secure
default
-
diff --git a/sample-proxies/soap/apiproxy/targets/default.xml b/sample-proxies/soap/apiproxy/targets/default.xml
index 374a27d5..662575a4 100644
--- a/sample-proxies/soap/apiproxy/targets/default.xml
+++ b/sample-proxies/soap/apiproxy/targets/default.xml
@@ -1,6 +1,5 @@
- http://graphical.weather.gov/xml/SOAP_server/ndfdXMLserver.php
+ https://graphical.weather.gov/xml/SOAP_server/ndfdXMLserver.php
-
diff --git a/sample-proxies/soap/invoke.sh b/sample-proxies/soap/invoke.sh
index eec4b579..9e08db3c 100644
--- a/sample-proxies/soap/invoke.sh
+++ b/sample-proxies/soap/invoke.sh
@@ -6,4 +6,4 @@ source ../../setup/setenv.sh
set -x
-curl http://$org-$env.$api_domain/simplesoap?wsdl
\ No newline at end of file
+curl https://$org-$env.$api_domain/simplesoap?wsdl
diff --git a/schemas/README.md b/schemas/README.md
index 22d91634..9449a051 100644
--- a/schemas/README.md
+++ b/schemas/README.md
@@ -1,22 +1,20 @@
-# Schemas are under construction
+## About the policy schemas
-The policy schemas are currently under construction (and a little out of date) and will undergo a full update at a time TBD. We don't recommend using them in their current state to build or validate policies. Instead:
-
-* Use the [policy reference docs](http://apigee.com/docs/api-services/reference/reference-overview-policy) as guidance.
+* Use the [policy reference docs](http://apigee.com/docs/api-services/reference/reference-overview-policy) as the primary source of information on using policies correctly.
* If you do try to use the schemas to build or validate policies, assume no element ordering in most cases even when the schema says ordering is required.
* On the [Update an API Proxy Revision management API call](http://docs.apigee.com/management/apis/post/organizations/%7Borg_name%7D/apis/%7Bapi_name%7D/revisions/%7Brevision_number%7D-0), be sure to set the `validate=true` query parameter. If the bundle isn't valid, you should get a list of errors back without a failed deployment.
-# Ask the community
+## Ask the community
[](https://community.apigee.com?via=github)
---
-Copyright © 2017 Google Inc.
+Copyright © 2018 Google Inc.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy
diff --git a/schemas/all_policies.xsd b/schemas/all_policies.xsd
index c57443e7..4ff8d9c7 100644
--- a/schemas/all_policies.xsd
+++ b/schemas/all_policies.xsd
@@ -17,6 +17,7 @@
+
@@ -33,4 +34,4 @@
-
\ No newline at end of file
+
diff --git a/schemas/configuration/configuration_schemas.xsd b/schemas/configuration/configuration_schemas.xsd
index 7e0fc8d8..22fabdbc 100644
--- a/schemas/configuration/configuration_schemas.xsd
+++ b/schemas/configuration/configuration_schemas.xsd
@@ -7,6 +7,8 @@
+
+
@@ -89,10 +91,6 @@
-
-
-
-
@@ -113,6 +111,8 @@
+
+
@@ -173,50 +173,31 @@
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
@@ -226,163 +207,63 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
+
-
-
+
+
-
-
-
-
-
-
-
+
-
+
+
+
+
-
-
-
-
-
+
+
@@ -425,11 +306,6 @@
-
-
-
-
-
@@ -455,14 +331,6 @@
-
-
-
-
-
-
-
-
@@ -533,108 +401,42 @@
-
+
-
+
+
+
+
+
+
+
+
+
-
-
+
+
+
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
+
@@ -666,156 +468,15 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -873,78 +534,284 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
-
+
-
-
+
-
+
-
+
-
+
-
-
-
-
-
-
+
@@ -952,6 +819,7 @@
+
@@ -976,172 +844,297 @@
-
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
+
-
-
+
+
-
+
-
+
-
-
-
-
-
-
-
-
+
-
-
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
-
+
-
+
-
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
-
+
-
-
-
+
-
+
-
-
-
-
+
+
+
+
-
+
-
-
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
@@ -1174,86 +1167,118 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
+
-
-
-
-
-
-
-
+
-
-
+
+
+
+
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
+
-
+
@@ -1282,199 +1307,158 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
-
-
-
-
+
+
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
-
+
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/schemas/policy/assign_message.xsd b/schemas/policy/assign_message.xsd
index 1237ea5d..b045e81a 100644
--- a/schemas/policy/assign_message.xsd
+++ b/schemas/policy/assign_message.xsd
@@ -182,8 +182,8 @@
-
+
diff --git a/schemas/policy/cache.xsd b/schemas/policy/cache.xsd
index c05d35b7..deec1728 100644
--- a/schemas/policy/cache.xsd
+++ b/schemas/policy/cache.xsd
@@ -9,17 +9,12 @@
-
+
-
-
-
-
-
-
-
+
+
@@ -49,11 +44,11 @@
-
+
-
-
-
+
+
+
@@ -70,39 +65,44 @@
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
-
+
+
+
-
+
-
+
+
+
+
+
+
diff --git a/schemas/policy/extract_variables.xsd b/schemas/policy/extract_variables.xsd
index 8ebf84d4..f0b142c4 100644
--- a/schemas/policy/extract_variables.xsd
+++ b/schemas/policy/extract_variables.xsd
@@ -155,19 +155,19 @@
-
+
-
+
-
+
diff --git a/schemas/policy/java_script.xsd b/schemas/policy/java_script.xsd
index 86408c3b..bce61d4f 100644
--- a/schemas/policy/java_script.xsd
+++ b/schemas/policy/java_script.xsd
@@ -1,30 +1,176 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/schemas/policy/jwt.xsd b/schemas/policy/jwt.xsd
new file mode 100644
index 00000000..4f3623f6
--- /dev/null
+++ b/schemas/policy/jwt.xsd
@@ -0,0 +1,163 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/schemas/policy/message_logging.xsd b/schemas/policy/message_logging.xsd
index 396d4806..2a733e75 100644
--- a/schemas/policy/message_logging.xsd
+++ b/schemas/policy/message_logging.xsd
@@ -3,6 +3,13 @@
+
+
+
+
+
+
+
@@ -30,19 +37,12 @@
-
-
-
-
-
-
-
-
+
diff --git a/schemas/policy/message_validation.xsd b/schemas/policy/message_validation.xsd
index 4b2d5ec1..e8816bc9 100644
--- a/schemas/policy/message_validation.xsd
+++ b/schemas/policy/message_validation.xsd
@@ -43,8 +43,8 @@
-
+
diff --git a/schemas/policy/oauth_v1.xsd b/schemas/policy/oauth_v1.xsd
index cc18b277..38cbcbca 100644
--- a/schemas/policy/oauth_v1.xsd
+++ b/schemas/policy/oauth_v1.xsd
@@ -62,18 +62,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
@@ -158,20 +146,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
-
+
+
-
-
diff --git a/schemas/policy/oauth_v2_verify_api_key.xsd b/schemas/policy/oauth_v2_verify_api_key.xsd
index 18e7588e..89b45e64 100644
--- a/schemas/policy/oauth_v2_verify_api_key.xsd
+++ b/schemas/policy/oauth_v2_verify_api_key.xsd
@@ -10,6 +10,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -64,20 +120,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -102,14 +144,6 @@
-
-
-
-
-
-
-
-
@@ -125,46 +159,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -176,12 +170,18 @@
-
+
-
-
+
+
+
+
+
+
+
+
diff --git a/schemas/policy/quota_spike_ratelimit.xsd b/schemas/policy/quota_spike_ratelimit.xsd
index 52816ab2..35ca2949 100644
--- a/schemas/policy/quota_spike_ratelimit.xsd
+++ b/schemas/policy/quota_spike_ratelimit.xsd
@@ -12,15 +12,11 @@
-
+
-
-
-
-
-
+
@@ -39,25 +35,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -88,6 +65,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -164,6 +164,7 @@
+
diff --git a/schemas/policy/regular_expression_protection.xsd b/schemas/policy/regular_expression_protection.xsd
index 958c8486..6034339e 100644
--- a/schemas/policy/regular_expression_protection.xsd
+++ b/schemas/policy/regular_expression_protection.xsd
@@ -136,13 +136,13 @@
-
-
+
+
-
-
+
+