You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by GitBox <gi...@apache.org> on 2020/11/06 04:01:21 UTC

[GitHub] [apisix-dashboard] moonming commented on a change in pull request #598: release: release 2.0-rc version.

moonming commented on a change in pull request #598:
URL: https://github.com/apache/apisix-dashboard/pull/598#discussion_r517168349



##########
File path: api/conf/schema.json
##########
@@ -1 +1 @@
-{"main":{"upstream_hash_header_schema":{"type":"string","pattern":"^[a-zA-Z0-9-_]+$"},"stream_route":{"type":"object","properties":{"plugins":{"type":"object"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"remote_addr":{"type":"string","anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"description":"client IP"},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"upstream":{"type":"object","additionalProperties":false,"properties
 ":{"create_time":{"type":"integer"},"hash_on":{"type":"string","enum":["vars","header","cookie","consumer"],"default":"vars"},"pass_host":{"type":"string","default":"pass","enum":["pass","node","rewrite"],"description":"mod of host passing"},"type":{"type":"string","enum":["chash","roundrobin","ewma"],"description":"algorithms of load balancing"},"enable_websocket":{"type":"boolean","description":"enable websocket for request"},"update_time":{"type":"integer"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"},"retries":{"type":"integer","minimum":0},"service_name":{"type":"string","maxLength":50},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"key":{"type":"string","description":"the key of chash for dynamic load balancing"},
 "name":{"type":"string","maxLength":50},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"read":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0}},"required":["connect","send","read"]},"k8s_deployment_info":{"type":"object","properties":{"port":{"type":"number","minimum":0},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"namespace":{"type":"string","description":"k8s namespace"},"backend_type":{"type":"string","description":"k8s service name","enum":["svc","pod"],"default":"pod"}},"anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}]},"desc":{"type":"string","maxLength":256},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"properties":{"active":{"type":"object","properties":{"host":{"ty
 pe":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"maximum":65535},"http_path":{"type":"string","default":"/"},"req_headers":{"type":"array","items":{"type":"string","uniqueItems":true},"minItems":1},"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"timeout":{"type":"number","default":1},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,302],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"successes":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"unhealthy":{"type":"object","properties":{"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"http_statuses":{"type":"array","uniqueItems":true,"default":[429,404,500,501,502,503,504,505],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":
 "integer","minimum":1,"default":0},"timeouts":{"type":"integer","default":3,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"unhealthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[429,500,503],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"timeouts":{"type":"integer","default":7,"minimum":1,"maximum":254},"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"items":{"type":"integer","minimum":200,"maximum":599},"minIte
 ms":1},"successes":{"type":"integer","default":5,"minimum":1,"maximum":254}}}}}},"additionalProperties":false},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"type":"integer","minimum":0,"description":"weight of node"}},"minProperties":1},{"type":"array","items":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"description":"port of node"},"weight":{"type":"integer","minimum":0,"description":"weight of node"},"metadata":{"type":"object","description":"metadata of node"}},"required":["host","port","weight"]},"minItems":1}]}},"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}]},"server_addr":{"type":"string","anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6"
 ,"type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"description":"server IP"},"server_port":{"type":"integer","description":"server port"}}},"label_value_def":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"},"consumer":{"type":"object","additionalProperties":false,"properties":{"update_time":{"type":"integer"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"create_time":{"type":"integer"},"plugins":{"type":"object"},"desc":{"type":"string","maxLength":256},"username":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[a-zA-Z0-9_]+$"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-z
 A-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"}},"required":["username"]},"proto":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"string","minLength":1,"maxLength":1048576}},"required":["content"]},"version":0.5,"upstream_hash_vars_schema":{"type":"string","pattern":"^((uri|server_name|server_addr|request_uri|remote_port|remote_addr|query_string|host|hostname)|arg_[0-9a-zA-z_-]+)$"},"global_rule":{"type":"object","additionalProperties":false,"properties":{"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"plugins":{"type":"object"}},"required":["plugins"]},"ip_def":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8
 }(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"id_schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"host_def":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"service":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"create_time":{"type":"integer"},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"script":{"type":"string","minLength":10,"maxLength":102400},"name":{"type":"string","maxLength":50},"update_time":{"type":"integer"},"upstream":{"type":"object","additionalProperties":false,"properties":{"create_time":{"type":"integer"},"hash_on":{"type":"string","enum":["vars","header","coo
 kie","consumer"],"default":"vars"},"pass_host":{"type":"string","default":"pass","enum":["pass","node","rewrite"],"description":"mod of host passing"},"type":{"type":"string","enum":["chash","roundrobin","ewma"],"description":"algorithms of load balancing"},"enable_websocket":{"type":"boolean","description":"enable websocket for request"},"update_time":{"type":"integer"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"},"retries":{"type":"integer","minimum":0},"service_name":{"type":"string","maxLength":50},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"key":{"type":"string","description":"the key of chash for dynamic load balancing"},"name":{"type":"string","maxLength":50},"upstream_host":{"type":"string","pattern":"^\\*?[0
 -9a-zA-Z-.]+$"},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"read":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0}},"required":["connect","send","read"]},"k8s_deployment_info":{"type":"object","properties":{"port":{"type":"number","minimum":0},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"namespace":{"type":"string","description":"k8s namespace"},"backend_type":{"type":"string","description":"k8s service name","enum":["svc","pod"],"default":"pod"}},"anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}]},"desc":{"type":"string","maxLength":256},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"properties":{"active":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"maximu
 m":65535},"http_path":{"type":"string","default":"/"},"req_headers":{"type":"array","items":{"type":"string","uniqueItems":true},"minItems":1},"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"timeout":{"type":"number","default":1},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,302],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"successes":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"unhealthy":{"type":"object","properties":{"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"http_statuses":{"type":"array","uniqueItems":true,"default":[429,404,500,501,502,503,504,505],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"timeouts":{"type":"integer","default":3,"minimum":1,"ma
 ximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"unhealthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[429,500,503],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"timeouts":{"type":"integer","default":7,"minimum":1,"maximum":254},"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"successes":{"type":"integer","default":5,"minimum":1,"maximum":254}}}}}},"additiona
 lProperties":false},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"type":"integer","minimum":0,"description":"weight of node"}},"minProperties":1},{"type":"array","items":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"description":"port of node"},"weight":{"type":"integer","minimum":0,"description":"weight of node"},"metadata":{"type":"object","description":"metadata of node"}},"required":["host","port","weight"]},"minItems":1}]}},"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}]},"desc":{"type":"string","maxLength":256},"plugins":{"type":"object"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"}},"additionalProperties":false},"plugin_d
 isable_schema":{"disable":{"type":"boolean"}},"ssl":{"type":"object","additionalProperties":false,"properties":{"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"cert":{"type":"string","minLength":128,"maxLength":65536},"keys":{"type":"array","items":{"type":"string","minLength":128,"maxLength":65536}},"validity_end":{"type":"integer"},"exptime":{"type":"integer","minimum":1588262400},"sni":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"key":{"type":"string","minLength":128,"maxLength":65536},"snis":{"type":"array","items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"}},"create_time":{"type":"integer"},"update_time":{"type":"integer"},"status":{"type":"integer","default":1,"enum":[1,0],"description":"ssl status, 1 to enable, 0 to disable"},"validity_start":{"type":"integer"},"certs":{"type":"array","items":{"type":"string","minLength":128,"maxLength":65536}},"labels":{"type":"object","maxProperties":
 16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"}},"oneOf":[{"required":["sni","key","cert"]},{"required":["snis","key","cert"]}]},"upstream":{"type":"object","additionalProperties":false,"properties":{"create_time":{"type":"integer"},"hash_on":{"type":"string","enum":["vars","header","cookie","consumer"],"default":"vars"},"pass_host":{"type":"string","default":"pass","enum":["pass","node","rewrite"],"description":"mod of host passing"},"type":{"type":"string","enum":["chash","roundrobin","ewma"],"description":"algorithms of load balancing"},"enable_websocket":{"type":"boolean","description":"enable websocket for request"},"update_time":{"type":"integer"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"descripti
 on":"key/value pairs to specify attributes"},"retries":{"type":"integer","minimum":0},"service_name":{"type":"string","maxLength":50},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"key":{"type":"string","description":"the key of chash for dynamic load balancing"},"name":{"type":"string","maxLength":50},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"read":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0}},"required":["connect","send","read"]},"k8s_deployment_info":{"type":"object","properties":{"port":{"type":"number","minimum":0},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"namespace":{"type":"string","description":"k8s namespace"},"backend_type":{"type":"string","description":"k8s service name","enum
 ":["svc","pod"],"default":"pod"}},"anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}]},"desc":{"type":"string","maxLength":256},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"properties":{"active":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"maximum":65535},"http_path":{"type":"string","default":"/"},"req_headers":{"type":"array","items":{"type":"string","uniqueItems":true},"minItems":1},"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"timeout":{"type":"number","default":1},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,302],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"successes":{"type":"integer
 ","default":2,"minimum":1,"maximum":254}}},"unhealthy":{"type":"object","properties":{"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"http_statuses":{"type":"array","uniqueItems":true,"default":[429,404,500,501,502,503,504,505],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"timeouts":{"type":"integer","default":3,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"unhealthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[429,500,503],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"timeouts":{"type":"integer","default":7,"minimum":1,"maximum":254},"http_failures":{"type":"integer","default":5,"
 minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"successes":{"type":"integer","default":5,"minimum":1,"maximum":254}}}}}},"additionalProperties":false},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"type":"integer","minimum":0,"description":"weight of node"}},"minProperties":1},{"type":"array","items":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"description":"port of node"},"weight":{"type":"integer","minimum":0,"description":"weight of node"},"metadata":{"type":"object","description":"metadata of node"}},"required":["host","port","weight"]},"minItems":1}]}},"anyOf":[{"required":["type","nod
 es"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}]},"route":{"type":"object","additionalProperties":false,"not":{"anyOf":[{"required":["script","plugins"]}]},"properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"methods":{"type":"array","items":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"],"description":"HTTP method"},"uniqueItems":true},"create_time":{"type":"integer"},"hosts":{"type":"array","items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"uniqueItems":true},"name":{"type":"string","maxLength":50},"filter_func":{"type":"string","minLength":10,"pattern":"^function"},"uri":{"type":"string","minLength":1,"maxLength":4096},"priority":{"type":"integer","default":0},"remote_addrs":{"type":"array","items":{"type":"string","anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-
 9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"description":"client IP"},"uniqueItems":true},"upstream":{"type":"object","additionalProperties":false,"properties":{"create_time":{"type":"integer"},"hash_on":{"type":"string","enum":["vars","header","cookie","consumer"],"default":"vars"},"pass_host":{"type":"string","default":"pass","enum":["pass","node","rewrite"],"description":"mod of host passing"},"type":{"type":"string","enum":["chash","roundrobin","ewma"],"description":"algorithms of load balancing"},"enable_websocket":{"type":"boolean","description":"enable websocket for request"},"update_time":{"type":"integer"},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":
 1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"},"retries":{"type":"integer","minimum":0},"service_name":{"type":"string","maxLength":50},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"key":{"type":"string","description":"the key of chash for dynamic load balancing"},"name":{"type":"string","maxLength":50},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"read":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0}},"required":["connect","send","read"]},"k8s_deployment_info":{"type":"object","properties":{"port":{"type":"number","minimum":0},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"namespace":{"type":"string","description":"k8s namespa
 ce"},"backend_type":{"type":"string","description":"k8s service name","enum":["svc","pod"],"default":"pod"}},"anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}]},"desc":{"type":"string","maxLength":256},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"properties":{"active":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"maximum":65535},"http_path":{"type":"string","default":"/"},"req_headers":{"type":"array","items":{"type":"string","uniqueItems":true},"minItems":1},"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"timeout":{"type":"number","default":1},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,302],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interv
 al":{"type":"integer","minimum":1,"default":0},"successes":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"unhealthy":{"type":"object","properties":{"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"http_statuses":{"type":"array","uniqueItems":true,"default":[429,404,500,501,502,503,504,505],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"interval":{"type":"integer","minimum":1,"default":0},"timeouts":{"type":"integer","default":3,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","enum":["http","https","tcp"],"default":"http"},"unhealthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[429,500,503],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"timeouts":{"type":"integer","default":7
 ,"minimum":1,"maximum":254},"http_failures":{"type":"integer","default":5,"minimum":1,"maximum":254},"tcp_failures":{"type":"integer","default":2,"minimum":1,"maximum":254}}},"healthy":{"type":"object","properties":{"http_statuses":{"type":"array","uniqueItems":true,"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"items":{"type":"integer","minimum":200,"maximum":599},"minItems":1},"successes":{"type":"integer","default":5,"minimum":1,"maximum":254}}}}}},"additionalProperties":false},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"type":"integer","minimum":0,"description":"weight of node"}},"minProperties":1},{"type":"array","items":{"type":"object","properties":{"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"port":{"type":"integer","minimum":1,"description":"port of node"},"weight":{"type":"integer","minimum":0,"description":"weight of node"},"metadata":{"type":"object","description":"metadata of node"}},"required":[
 "host","port","weight"]},"minItems":1}]}},"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}]},"remote_addr":{"type":"string","anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"description":"client IP"},"service_protocol":{"enum":["grpc","http"]},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"update_time":{"type":"integer"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","m
 inimum":1}]},"script":{"type":"string","minLength":10,"maxLength":102400},"service_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"labels":{"type":"object","maxProperties":16,"patternProperties":{".*":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","description":"value of label"}},"description":"key/value pairs to specify attributes"},"plugins":{"type":"object"},"uris":{"type":"array","items":{"type":"string","description":"HTTP uri"},"uniqueItems":true},"vars":{"type":"array","items":{"type":"array","items":{"maxItems":3,"anyOf":[{"type":"string"},{"type":"number"}],"minItems":2},"description":"Nginx builtin variable name and value"}},"desc":{"type":"string","maxLength":256}},"anyOf":[{"required":["plugins","uri"]},{"required":["upstream","uri"]},{"required":["upstream_id","uri"]},{"required":["service_id","uri"]},{"required":["plugins","uris"]},{"required":["upstream","uris"]},{
 "required":["upstream_id","uris"]},{"required":["service_id","uris"]},{"required":["script","uri"]},{"required":["script","uris"]}]}},"plugins":{"limit-req":{"type":"object","properties":{"key":{"type":"string","enum":["remote_addr","server_addr","http_x_real_ip","http_x_forwarded_for","consumer_name"]},"rate":{"type":"number","minimum":0},"burst":{"type":"number","minimum":0},"rejected_code":{"type":"integer","minimum":200,"default":503}},"required":["rate","burst","key"]},"request-validation":{"type":"object","properties":{"header_schema":{"type":"object"},"body_schema":{"type":"object"}},"anyOf":[{"required":["body_schema"]},{"required":["header_schema"]}]},"referer-restriction":{"type":"object","additionalProperties":false,"properties":{"bypass_missing":{"type":"boolean","default":false},"whitelist":{"type":"array","items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"minItems":1}},"required":["whitelist"]},"zipkin":{"type":"object","properties":{"sample_ratio":{"type":"nu
 mber","minimum":1e-05,"maximum":1},"service_name":{"type":"string","default":"APISIX","description":"service name for zipkin reporter"},"server_addr":{"type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$","description":"default is $server_addr, you can speific your external ip address"},"endpoint":{"type":"string"}},"required":["endpoint","sample_ratio"]},"jwt-auth":{"type":"object","properties":{"key":{"type":"string"},"exp":{"type":"integer","minimum":1},"base64_secret":{"type":"boolean","default":false},"algorithm":{"type":"string","enum":["HS256","HS512","RS256"],"default":"HS256"},"secret":{"type":"string"}}},"wolf-rbac":{"type":"object","properties":{"header_prefix":{"type":"string","default":"X-"},"appid":{"type":"string","default":"unset"},"server":{"type":"string","default":"http://127.0.0.1:10080"}}},"limit-conn":{"type":"object","properties":{"key":{"type":"string","enum":["remote_addr","server_addr","http_x_real_ip","http_x_forwarded_for"]},"burst":{"
 type":"integer","minimum":0},"conn":{"type":"integer","minimum":0},"rejected_code":{"type":"integer","minimum":200,"default":503},"default_conn_delay":{"type":"number","minimum":0}},"required":["conn","burst","default_conn_delay","key"]},"prometheus":{"type":"object","additionalProperties":false},"example-plugin":{"type":"object","properties":{"port":{"type":"integer"},"i":{"type":"number","minimum":0},"s":{"type":"string"},"t":{"type":"array","minItems":1},"ip":{"type":"string"}},"required":["i"]},"tcp-logger":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer","minimum":0},"retry_delay":{"type":"integer","minimum":0,"default":1},"include_req_body":{"type":"boolean","default":false},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"max_retry_count":{"type":"integer","minimum":0,"default":0},"timeout":{"type":"integer","minimum":1,"default":1000},"inactive_timeout":{"type":"integer","minimum":1,"default":5},"buffer_duration":{"type":"intege
 r","minimum":1,"default":60},"name":{"type":"string","default":"tcp logger"},"tls":{"type":"boolean","default":false},"tls_options":{"type":"string"}},"required":["host","port"]},"request-id":{"type":"object","properties":{"include_in_response":{"type":"boolean","default":true},"header_name":{"type":"string","default":"X-Request-Id"}}},"proxy-rewrite":{"type":"object","additionalProperties":false,"properties":{"host":{"type":"string","pattern":"^[0-9a-zA-Z-.]+$","description":"new host for upstream"},"regex_uri":{"type":"array","maxItems":2,"items":{"type":"string","description":"regex uri"},"minItems":2,"description":"new uri that substitute from client uri for upstream, lower priority than uri property"},"headers":{"type":"object","minProperties":1,"description":"new headers for request"},"uri":{"type":"string","maxLength":4096,"minLength":1,"pattern":"^\\/.*","description":"new uri for upstream"},"scheme":{"type":"string","enum":["http","https"],"description":"new scheme for upst
 ream"}},"minProperties":1},"basic-auth":{"type":"object","additionalProperties":false,"properties":[],"title":"work with route or service object"},"echo":{"type":"object","additionalProperties":false,"anyOf":[{"required":["before_body"]},{"required":["body"]},{"required":["after_body"]}],"properties":{"body":{"type":"string","description":"body to replace upstream response."},"after_body":{"type":"string","description":"body after the modification of filter phase."},"auth_value":{"type":"string","description":"auth value"},"before_body":{"type":"string","description":"body before the filter phase."},"headers":{"type":"object","minProperties":1,"description":"new headers for response"}},"minProperties":1},"limit-count":{"type":"object","dependencies":{"policy":{"oneOf":[{"properties":{"policy":{"enum":["local"]}}},{"properties":{"redis_password":{"type":"string","minLength":0},"redis_host":{"type":"string","minLength":2},"redis_timeout":{"type":"integer","minimum":1,"default":1000},"
 redis_port":{"type":"integer","minimum":1,"default":6379},"policy":{"enum":["redis"]}},"required":["redis_host"]}]}},"properties":{"key":{"type":"string","enum":["remote_addr","server_addr","http_x_real_ip","http_x_forwarded_for"]},"time_window":{"type":"integer","minimum":0},"count":{"type":"integer","minimum":0},"rejected_code":{"type":"integer","default":503,"minimum":200,"maximum":600},"policy":{"type":"string","enum":["local","redis"],"default":"local"}},"required":["count","time_window","key"]},"key-auth":{"type":"object","properties":{"key":{"type":"string"}}},"openid-connect":{"type":"object","properties":{"client_id":{"type":"string"},"bearer_only":{"type":"boolean"},"discovery":{"type":"string"},"introspection_endpoint":{"type":"string"},"token_signing_alg_values_expected":{"type":"string"},"public_key":{"type":"string"},"scope":{"type":"string"},"logout_path":{"type":"string"},"client_secret":{"type":"string"},"redirect_uri":{"type":"string"},"realm":{"type":"string"},"in
 trospection_endpoint_auth_method":{"type":"string"},"timeout":{"type":"integer","minimum":1},"ssl_verify":{"type":"boolean"}},"required":["client_id","client_secret","discovery"]},"log-rotate":{"type":"object","properties":[],"additionalProperties":false},"uri-blocker":{"type":"object","properties":{"block_rules":{"type":"array","items":{"type":"string","minLength":1,"maxLength":4096},"uniqueItems":true},"rejected_code":{"type":"integer","minimum":200,"default":403}},"required":["block_rules"]},"hmac-auth":{"type":"object","additionalProperties":false,"properties":[],"title":"work with route or service object"},"udp-logger":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer","minimum":0},"timeout":{"type":"integer","minimum":1,"default":3},"include_req_body":{"type":"boolean","default":false},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"inactive_timeout":{"type":"integer","minimum":1,"default":5},"buffer_duration":{"type":"integer","mi
 nimum":1,"default":60},"name":{"type":"string","default":"udp logger"}},"required":["host","port"]},"response-rewrite":{"type":"object","additionalProperties":false,"properties":{"headers":{"type":"object","minProperties":1,"description":"new headers for repsonse"},"status_code":{"type":"integer","maximum":598,"minimum":200,"description":"new status code for repsonse"},"body":{"type":"string","description":"new body for repsonse"},"body_base64":{"type":"boolean","default":false,"description":"whether new body for repsonse need base64 decode before return"}},"minProperties":1},"ip-restriction":{"type":"object","oneOf":[{"title":"whitelist","additionalProperties":false,"properties":{"whitelist":{"type":"array","items":{"anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:)
 {0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}]},"minItems":1}},"required":["whitelist"]},{"title":"blacklist","additionalProperties":false,"properties":{"blacklist":{"type":"array","items":{"anyOf":[{"title":"IPv4","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"title":"IPv4/CIDR","type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"title":"IPv6","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"title":"IPv6/CIDR","type":"string","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}]},"minItems":1}},"required":["blacklist"]}]},"skywalking":{"type":"object","required":["endpoint"],"properties":{"sample_ratio":{"type":"number","default":1,"minimum":1e-05,"maximum":1},"endpoint":{"type":"string"}},"
 service_name":{"type":"string","default":"APISIX","description":"service name for skywalking"}},"syslog":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer"},"max_retry_times":{"type":"integer","minimum":1,"default":1},"drop_limit":{"type":"integer","default":1048576},"include_req_body":{"type":"boolean","default":false},"buffer_duration":{"type":"integer","minimum":1,"default":60},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"timeout":{"type":"integer","minimum":1,"default":3},"name":{"type":"string","default":"sys logger"},"pool_size":{"type":"integer","minimum":5,"default":5},"retry_interval":{"type":"integer","minimum":0,"default":1},"sock_type":{"type":"string","enum":["tcp","udp"],"default":"tcp"},"tls":{"type":"boolean","default":false},"flush_limit":{"type":"integer","minimum":1,"default":4096}},"required":["host","port"]},"kafka-logger":{"type":"object","properties":{"kafka_topic":{"type":"string"},"batch_max_size":{"type":"int
 eger","minimum":1,"default":1000},"retry_delay":{"type":"integer","minimum":0,"default":1},"include_req_body":{"type":"boolean","default":false},"meta_format":{"type":"string","enum":["default","origin"],"default":"default"},"key":{"type":"string"},"max_retry_count":{"type":"integer","minimum":0,"default":0},"timeout":{"type":"integer","minimum":1,"default":3},"inactive_timeout":{"type":"integer","minimum":1,"default":5},"name":{"type":"string","default":"kafka logger"},"buffer_duration":{"type":"integer","minimum":1,"default":60},"broker_list":{"type":"object"}},"required":["broker_list","kafka_topic","key"]},"consumer-restriction":{"type":"object","properties":{"type":{"type":"string","enum":["consumer_name","service_id"],"default":"consumer_name"},"blacklist":{"type":"array","items":{"type":"string"},"minItems":1},"rejected_code":{"type":"integer","minimum":200,"default":403},"whitelist":{"type":"array","items":{"type":"string"},"minItems":1}},"oneOf":[{"required":["whitelist"]},
 {"required":["blacklist"]}]},"proxy-cache":{"type":"object","properties":{"cache_method":{"type":"array","uniqueItems":true,"default":["GET","HEAD"],"items":{"type":"string","enum":["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"],"description":"http method"},"minItems":1},"cache_http_status":{"type":"array","uniqueItems":true,"default":[200,301,404],"items":{"type":"integer","maximum":599,"minimum":200,"description":"http response status"},"minItems":1},"cache_key":{"type":"array","default":["$host","$request_uri"],"items":{"type":"string","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)","description":"a key for caching"},"minItems":1},"cache_zone":{"type":"string","minLength":1},"no_cache":{"type":"array","items":{"type":"string","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)"},"minItems":1},"cache_bypass":{"type":"array","items":{"type":"string","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)"},"minItems":1},"hide_cache_headers":{"type":"boolean","default":false}},"requi
 red":["cache_zone"]},"serverless-post-function":{"type":"object","properties":{"phase":{"type":"string","enum":["rewrite","access","header_filter","body_filter","log","balancer"]},"functions":{"type":"array","items":{"type":"string"},"minItems":1}},"required":["functions"]},"fault-injection":{"type":"object","properties":{"delay":{"type":"object","properties":{"duration":{"type":"number","minimum":0}},"minProperties":1},"abort":{"type":"object","properties":{"body":{"type":"string","minLength":0},"http_status":{"type":"integer","minimum":200}},"minProperties":1}},"minProperties":1},"redirect":{"type":"object","properties":{"http_to_https":{"type":"boolean"},"uri":{"type":"string","minLength":2},"ret_code":{"type":"integer","minimum":200,"default":302}},"oneOf":[{"required":["uri"]},{"required":["http_to_https"]}]},"http-logger":{"type":"object","properties":{"batch_max_size":{"type":"integer","minimum":1,"default":1000},"retry_delay":{"type":"integer","minimum":0,"default":1},"inclu
 de_req_body":{"type":"boolean","default":false},"concat_method":{"type":"string","enum":["json","new_line"],"default":"json"},"max_retry_count":{"type":"integer","minimum":0,"default":0},"timeout":{"type":"integer","minimum":1,"default":3},"inactive_timeout":{"type":"integer","minimum":1,"default":5},"buffer_duration":{"type":"integer","minimum":1,"default":60},"name":{"type":"string","default":"http logger"},"uri":{"type":"string"},"auth_header":{"type":"string","default":""}},"required":["uri"]},"authz-keycloak":{"type":"object","properties":{"keepalive":{"type":"boolean","default":true},"permissions":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"uniqueItems":true},"policy_enforcement_mode":{"type":"string","enum":["ENFORCING","PERMISSIVE"],"default":"ENFORCING"},"ssl_verify":{"type":"boolean","default":true},"token_endpoint":{"type":"string","minLength":1,"maxLength":4096},"timeout":{"type":"integer","minimum":1000,"default":3000},"audience":{"type":"st
 ring","minLength":1,"maxLength":100},"keepalive_pool":{"type":"integer","minimum":1,"default":5},"keepalive_timeout":{"type":"integer","minimum":1000,"default":60000},"grant_type":{"type":"string","maxLength":100,"minLength":1,"enum":["urn:ietf:params:oauth:grant-type:uma-ticket"],"default":"urn:ietf:params:oauth:grant-type:uma-ticket"}},"required":["token_endpoint"]},"serverless-pre-function":{"type":"object","properties":{"phase":{"type":"string","enum":["rewrite","access","header_filter","body_filter","log","balancer"]},"functions":{"type":"array","items":{"type":"string"},"minItems":1}},"required":["functions"]},"cors":{"type":"object","properties":{"allow_credential":{"type":"boolean","default":false,"description":"allow client append crendential. according to CORS specification,if you set this option to 'true', you can not use '*' for other options."},"max_age":{"type":"integer","default":5,"description":"maximum number of seconds the results can be cached.-1 mean no cached,th
 e max value is depend on browser,more detail plz check MDN. default: 5."},"allow_origins":{"type":"string","default":"*","description":"you can use '*' to allow all origins when no credentials,'**' to allow forcefully(it will bring some security risks, be carefully),multiple origin use ',' to split. default: *."},"allow_methods":{"type":"string","default":"*","description":"you can use '*' to allow all methods when no credentials and '**','**' to allow forcefully(it will bring some security risks, be carefully),multiple method use ',' to split. default: *."},"expose_headers":{"type":"string","default":"*","description":"you can use '*' to expose all header when no credentials,multiple header use ',' to split. default: *."},"allow_headers":{"type":"string","default":"*","description":"you can use '*' to allow all header when no credentials,'**' to allow forcefully(it will bring some security risks, be carefully),multiple header use ',' to split. default: *."}}},"batch-requests":{"typ
 e":"object","additionalProperties":false},"grpc-transcode":{"type":"object","required":["proto_id","service","method"],"properties":{"pb_option":{"type":"array","items":{"type":"string","anyOf":[{"type":"string","enum":["int64_as_number","int64_as_string","int64_as_hexstring"],"description":"enum as result"},{"type":"string","enum":["ienum_as_name","enum_as_value"],"description":"int64 as result"},{"type":"string","enum":["auto_default_values","no_default_values","use_default_values","use_default_metatable"],"description":"default values option"},{"type":"string","enum":["enable_hooks","disable_hooks"],"description":"hooks option"}]},"minItems":1},"service":{"type":"string","description":"the grpc service name"},"method":{"type":"string","description":"the method name in the grpc service."},"deadline":{"type":"number","default":0,"description":"deadline for grpc, millisecond"},"proto_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"i
 nteger","minimum":1}]}},"additionalProperties":true},"proxy-mirror":{"type":"object","required":["host"],"properties":{"host":{"type":"string","pattern":"^http(s)?:\\/\\/[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:[0-9]{1,5})?$"}},"minProperties":1},"node-status":{"type":"object","additionalProperties":false}}}
+{"main":{"plugin_disable_schema":{"disable":{"type":"boolean"}},"route":{"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"vars":{"type":"array","items":{"description":"Nginx builtin variable name and value","items":{"maxItems":3,"minItems":2,"anyOf":[{"type":"string"},{"type":"number"}]},"type":"array"}},"uris":{"type":"array","items":{"description":"HTTP uri","type":"string"},"uniqueItems":true},"hosts":{"type":"array","items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"uniqueItems":true},"upstream":{"type":"object","additionalProperties":false,"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}],"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"retries":{"type":"integer","minimum":0},"type":{"description":"algorithms of load balancing","type":"string","enum":["chash","roundrobin","ewma"]},"k8s_deployment_info":{"type":"object","
 anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}],"properties":{"namespace":{"type":"string","description":"k8s namespace"},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"backend_type":{"type":"string","default":"pod","description":"k8s service name","enum":["svc","pod"]},"port":{"type":"number","minimum":0}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"description":"weight of node","minimum":0,"type":"integer"}},"minProperties":1},{"type":"array","minItems":1,"items":{"type":"object","properties":{"metadata":{"description":"metadata of node","type":"object"},"port":{"description":"port of no
 de","minimum":1,"type":"integer"},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"weight":{"description":"weight of node","minimum":0,"type":"integer"}},"required":["host","port","weight"]}}]},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0},"read":{"type":"number","minimum":0}},"required":["connect","send","read"]},"name":{"type":"string","maxLength":50},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"additionalProperties":false,"properties":{"active":{"type":"object","properties":{"timeout":{"type":"number","default":1},"http_path":{"type":"string","default":"/"},"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"port":{"type":"integer","minimum":1,"maximum":65535},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"unhealthy":{"type":"object","properties":{"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":3},"in
 terval":{"type":"integer","minimum":1,"default":0},"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[429,404,500,501,502,503,504,505],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"req_headers":{"type":"array","minItems":1,"items":{"type":"string","uniqueItems":true}},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"default":[200,302],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true},"successes":{"type":"integer","minimum":1,"maximum":254,"default":2},"interval":{"type":"integer","minimum":1,"default":0}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"healthy":{"type":
 "object","properties":{"successes":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"unhealthy":{"type":"object","properties":{"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":7},"http_statuses":{"default":[429,500,503],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}}}}}},"key":{"description":"the key of chash for dynamic load balancing","type":"string"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"service_name":{"type":"string","maxLength":50},"hash_on":{"type":"string","defau
 lt":"vars","enum":["vars","header","cookie","consumer"]},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"pass_host":{"description":"mod of host passing","default":"pass","type":"string","enum":["pass","node","rewrite"]},"enable_websocket":{"description":"enable websocket for request","type":"boolean"},"update_time":{"type":"integer"}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"remote_addrs":{"type":"array","items":{"description":"client IP","anyOf":[{"type":"string","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string"
 ,"title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"type":"string"},"uniqueItems":true},"methods":{"type":"array","items":{"description":"HTTP method","type":"string","enum":["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"]},"uniqueItems":true},"name":{"type":"string","maxLength":50},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"priority":{"type":"integer","default":0},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"service_protocol":{"enum":["grpc","http"]},"plugins":{"type":"object"},"script":{"type":"string","minLength":10,"maxLength":102400},"service_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"uri":{"type":"string","minLength":1,"maxLength":4096},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":
 "^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"remote_addr":{"description":"client IP","anyOf":[{"type":"string","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"type":"string"},"filter_func":{"type":"string","minLength":10,"pattern":"^function"},"update_time":{"type":"integer"}},"anyOf":[{"required":["plugins","uri"]},{"required":["upstream","uri"]},{"required":["upstream_id","uri"]},{"required":["service_id","uri"]},{"required":["plugins","uris"]},{"required":["upstream","uris"]},{"required":["upstream_id","uris"]},{"required":["service_id","uris"]},{"required":["script","uri"]},{"required":["script",
 "uris"]}],"type":"object","additionalProperties":false,"not":{"anyOf":[{"required":["script","plugins"]}]}},"version":0.5,"stream_route":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"remote_addr":{"description":"client IP","anyOf":[{"type":"string","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"type":"string"},"server_addr":{"description":"server IP","anyOf":[{"type":"s
 tring","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"type":"string"},"plugins":{"type":"object"},"upstream":{"type":"object","additionalProperties":false,"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}],"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"retries":{"type":"integer","minimum":0},"type":{"description":"algorithms of load balancing","type":"string","enum":["chash","roundrobin","ewma"]},"k8s_deployment_info":{"type":"object","anyOf":[{"required":["namespace","deploy_name","port"]},{"requi
 red":["namespace","service_name","port"]}],"properties":{"namespace":{"type":"string","description":"k8s namespace"},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"backend_type":{"type":"string","default":"pod","description":"k8s service name","enum":["svc","pod"]},"port":{"type":"number","minimum":0}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"description":"weight of node","minimum":0,"type":"integer"}},"minProperties":1},{"type":"array","minItems":1,"items":{"type":"object","properties":{"metadata":{"description":"metadata of node","type":"object"},"port":{"description":"port of node","minimum":1,"type":"integer"},"host":{"type":"string","patt
 ern":"^\\*?[0-9a-zA-Z-.]+$"},"weight":{"description":"weight of node","minimum":0,"type":"integer"}},"required":["host","port","weight"]}}]},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0},"read":{"type":"number","minimum":0}},"required":["connect","send","read"]},"name":{"type":"string","maxLength":50},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"additionalProperties":false,"properties":{"active":{"type":"object","properties":{"timeout":{"type":"number","default":1},"http_path":{"type":"string","default":"/"},"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"port":{"type":"integer","minimum":1,"maximum":65535},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"unhealthy":{"type":"object","properties":{"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":3},"interval":{"type":"integer","minimum":1,"default":0},"tcp_failure
 s":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[429,404,500,501,502,503,504,505],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"req_headers":{"type":"array","minItems":1,"items":{"type":"string","uniqueItems":true}},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"default":[200,302],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true},"successes":{"type":"integer","minimum":1,"maximum":254,"default":2},"interval":{"type":"integer","minimum":1,"default":0}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"healthy":{"type":"object","properties":{"successes":{"type":"integer","minimum":
 1,"maximum":254,"default":5},"http_statuses":{"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"unhealthy":{"type":"object","properties":{"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":7},"http_statuses":{"default":[429,500,503],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}}}}}},"key":{"description":"the key of chash for dynamic load balancing","type":"string"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"service_name":{"type":"string","maxLength":50},"hash_on":{"type":"string","default":"vars","enum":["vars","header","cookie","consumer"]},"upstr
 eam_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"pass_host":{"description":"mod of host passing","default":"pass","type":"string","enum":["pass","node","rewrite"]},"enable_websocket":{"description":"enable websocket for request","type":"boolean"},"update_time":{"type":"integer"}}},"server_port":{"description":"server port","type":"integer"}}},"consumer":{"type":"object","properties":{"create_time":{"type":"integer"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"desc":{"type":"string","maxLength":256},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"plugins":{"type":"object"},"username":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[a-zA-Z0-9_]+$"},"update_time":{"type":"integer"}},"additionalPrope
 rties":false,"required":["username"]},"host_def":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"global_rule":{"type":"object","properties":{"plugins":{"type":"object"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]}},"additionalProperties":false,"required":["plugins"]},"ip_def":[{"type":"string","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}],"upstream_hash_vars_schema":{"type":"string","pattern":"^((uri|server_name|server_addr|request_uri|remote_port|remote_addr|query_string|host|hostname)|arg_[0-9a-zA-z_-]+)$"},"label_value_def"
 :{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64},"upstream_hash_header_schema":{"type":"string","pattern":"^[a-zA-Z0-9-_]+$"},"proto":{"type":"object","properties":{"content":{"type":"string","minLength":1,"maxLength":1048576}},"additionalProperties":false,"required":["content"]},"upstream":{"type":"object","additionalProperties":false,"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}],"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"retries":{"type":"integer","minimum":0},"type":{"description":"algorithms of load balancing","type":"string","enum":["chash","roundrobin","ewma"]},"k8s_deployment_info":{"type":"object","anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}],"properties":{"namespace":{"type":"string","description":"k8s namespace"},"deploy_name":{"type":
 "string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"backend_type":{"type":"string","default":"pod","description":"k8s service name","enum":["svc","pod"]},"port":{"type":"number","minimum":0}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"description":"weight of node","minimum":0,"type":"integer"}},"minProperties":1},{"type":"array","minItems":1,"items":{"type":"object","properties":{"metadata":{"description":"metadata of node","type":"object"},"port":{"description":"port of node","minimum":1,"type":"integer"},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"weight":{"description":"weight of node","minimum":0,"type":"integer"}},"required":["host","port","weight"]}}]
 },"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0},"read":{"type":"number","minimum":0}},"required":["connect","send","read"]},"name":{"type":"string","maxLength":50},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"additionalProperties":false,"properties":{"active":{"type":"object","properties":{"timeout":{"type":"number","default":1},"http_path":{"type":"string","default":"/"},"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"port":{"type":"integer","minimum":1,"maximum":65535},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"unhealthy":{"type":"object","properties":{"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":3},"interval":{"type":"integer","minimum":1,"default":0},"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_
 statuses":{"default":[429,404,500,501,502,503,504,505],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"req_headers":{"type":"array","minItems":1,"items":{"type":"string","uniqueItems":true}},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"default":[200,302],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true},"successes":{"type":"integer","minimum":1,"maximum":254,"default":2},"interval":{"type":"integer","minimum":1,"default":0}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"healthy":{"type":"object","properties":{"successes":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"minI
 tems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"unhealthy":{"type":"object","properties":{"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":7},"http_statuses":{"default":[429,500,503],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}}}}}},"key":{"description":"the key of chash for dynamic load balancing","type":"string"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"service_name":{"type":"string","maxLength":50},"hash_on":{"type":"string","default":"vars","enum":["vars","header","cookie","consumer"]},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"pass_host":{"description":"mod of host passing","default":"pass","type":"stri
 ng","enum":["pass","node","rewrite"]},"enable_websocket":{"description":"enable websocket for request","type":"boolean"},"update_time":{"type":"integer"}}},"service":{"type":"object","additionalProperties":false,"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"name":{"type":"string","maxLength":50},"plugins":{"type":"object"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"upstream_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"upstream":{"type":"object","additionalProperties":false,"anyOf":[{"required":["type","nodes"]},{"required":["type","k8s_deployment_info"]},{"required":["type","service_name"]}],"properties":{"create_time":{"type":"integer"},"desc":{"type":"string","maxLength":256},"retries":{"type":"integer","minimum":0},"type":{"description":"algorithms of load balancing","type":"stri
 ng","enum":["chash","roundrobin","ewma"]},"k8s_deployment_info":{"type":"object","anyOf":[{"required":["namespace","deploy_name","port"]},{"required":["namespace","service_name","port"]}],"properties":{"namespace":{"type":"string","description":"k8s namespace"},"deploy_name":{"type":"string","description":"k8s deployment name"},"service_name":{"type":"string","description":"k8s service name"},"backend_type":{"type":"string","default":"pod","description":"k8s service name","enum":["svc","pod"]},"port":{"type":"number","minimum":0}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"nodes":{"anyOf":[{"type":"object","patternProperties":{".*":{"description":"weight of node","minimum":0,"type":"integer"}},"minProperties":1},{"type":"array","minItems":1,"items":{"type":"object","properties":{"metadata":{"
 description":"metadata of node","type":"object"},"port":{"description":"port of node","minimum":1,"type":"integer"},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"weight":{"description":"weight of node","minimum":0,"type":"integer"}},"required":["host","port","weight"]}}]},"timeout":{"type":"object","properties":{"send":{"type":"number","minimum":0},"connect":{"type":"number","minimum":0},"read":{"type":"number","minimum":0}},"required":["connect","send","read"]},"name":{"type":"string","maxLength":50},"checks":{"type":"object","anyOf":[{"required":["active"]},{"required":["active","passive"]}],"additionalProperties":false,"properties":{"active":{"type":"object","properties":{"timeout":{"type":"number","default":1},"http_path":{"type":"string","default":"/"},"type":{"type":"string","default":"http","enum":["http","https","tcp"]},"port":{"type":"integer","minimum":1,"maximum":65535},"host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"unhealthy":{"type":"object","pr
 operties":{"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":3},"interval":{"type":"integer","minimum":1,"default":0},"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[429,404,500,501,502,503,504,505],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"req_headers":{"type":"array","minItems":1,"items":{"type":"string","uniqueItems":true}},"concurrency":{"type":"integer","default":10},"healthy":{"type":"object","properties":{"http_statuses":{"default":[200,302],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true},"successes":{"type":"integer","minimum":1,"maximum":254,"default":2},"interval":{"type":"integer","minimum":1,"default":0}}},"https_verify_certificate":{"type":"boolean","default":true}}},"passive":{"type":"object","properties":{"type":{
 "type":"string","default":"http","enum":["http","https","tcp"]},"healthy":{"type":"object","properties":{"successes":{"type":"integer","minimum":1,"maximum":254,"default":5},"http_statuses":{"default":[200,201,202,203,204,205,206,207,208,226,300,301,302,303,304,305,306,307,308],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}},"unhealthy":{"type":"object","properties":{"tcp_failures":{"type":"integer","minimum":1,"maximum":254,"default":2},"http_failures":{"type":"integer","minimum":1,"maximum":254,"default":5},"timeouts":{"type":"integer","minimum":1,"maximum":254,"default":7},"http_statuses":{"default":[429,500,503],"minItems":1,"items":{"type":"integer","minimum":200,"maximum":599},"type":"array","uniqueItems":true}}}}}}},"key":{"description":"the key of chash for dynamic load balancing","type":"string"},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]}
 ,"service_name":{"type":"string","maxLength":50},"hash_on":{"type":"string","default":"vars","enum":["vars","header","cookie","consumer"]},"upstream_host":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"pass_host":{"description":"mod of host passing","default":"pass","type":"string","enum":["pass","node","rewrite"]},"enable_websocket":{"description":"enable websocket for request","type":"boolean"},"update_time":{"type":"integer"}}},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"script":{"type":"string","minLength":10,"maxLength":102400},"update_time":{"type":"integer"}}},"id_schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"ssl":{"type":"object","oneOf":[{"required":["sni","key","cert"]},{"required":["snis","key","ce
 rt"]}],"additionalProperties":false,"properties":{"certs":{"type":"array","items":{"type":"string","minLength":128,"maxLength":65536}},"validity_end":{"type":"integer"},"snis":{"type":"array","items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"}},"sni":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"},"create_time":{"type":"integer"},"validity_start":{"type":"integer"},"key":{"type":"string","minLength":128,"maxLength":65536},"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"status":{"description":"ssl status, 1 to enable, 0 to disable","default":1,"type":"integer","enum":[1,0]},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","minLength":1,"pattern":"^[a-zA-Z0-9-_.]+$","type":"string","maxLength":64}},"maxProperties":16,"type":"object"},"cert":{"type":"string","minLength":128,"maxLength":65536},"keys":{"type":"array","items":{"typ
 e":"string","minLength":128,"maxLength":65536}},"exptime":{"type":"integer","minimum":1588262400},"update_time":{"type":"integer"}}}},"plugins":{"serverless-pre-function":{"type":"object","properties":{"functions":{"type":"array","minItems":1,"items":{"type":"string"}},"phase":{"type":"string","enum":["rewrite","access","header_filter","body_filter","log","balancer"]}},"required":["functions"]},"proxy-mirror":{"type":"object","properties":{"host":{"type":"string","pattern":"^http(s)?:\\/\\/[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:[0-9]{1,5})?$"}},"minProperties":1,"required":["host"]},"serverless-post-function":{"type":"object","properties":{"functions":{"type":"array","minItems":1,"items":{"type":"string"}},"phase":{"type":"string","enum":["rewrite","access","header_filter","body_filter","log","balancer"]}},"required":["functions"]},"jwt-auth":{"type":"object","properties":{"key":{"type":"string"},"algorithm":{"type":"string","default":"HS256","enum":["HS25
 6","HS512","RS256"]},"exp":{"type":"integer","minimum":1},"base64_secret":{"type":"boolean","default":false},"secret":{"type":"string"}}},"tcp-logger":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1,"default":1000},"buffer_duration":{"type":"integer","minimum":1,"default":60},"name":{"type":"string","default":"tcp logger"},"retry_delay":{"type":"integer","minimum":0,"default":1},"port":{"type":"integer","minimum":0},"host":{"type":"string"},"max_retry_count":{"type":"integer","minimum":0,"default":0},"tls_options":{"type":"string"},"include_req_body":{"type":"boolean","default":false},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"tls":{"type":"boolean","default":false},"inactive_timeout":{"type":"integer","minimum":1,"default":5}},"required":["host","port"]},"openid-connect":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1},"client_secret":{"type":"string"},"discovery":{"type":"string"},"redirect_uri":{"type":"string"},"
 token_signing_alg_values_expected":{"type":"string"},"public_key":{"type":"string"},"logout_path":{"type":"string"},"ssl_verify":{"type":"boolean"},"realm":{"type":"string"},"scope":{"type":"string"},"bearer_only":{"type":"boolean"},"introspection_endpoint_auth_method":{"type":"string"},"introspection_endpoint":{"type":"string"},"client_id":{"type":"string"}},"required":["client_id","client_secret","discovery"]},"prometheus":{"type":"object","additionalProperties":false},"redirect":{"type":"object","oneOf":[{"required":["uri"]},{"required":["http_to_https"]}],"properties":{"ret_code":{"type":"integer","minimum":200,"default":302},"http_to_https":{"type":"boolean"},"uri":{"type":"string","minLength":2}}},"fault-injection":{"type":"object","minProperties":1,"properties":{"delay":{"type":"object","minProperties":1,"properties":{"duration":{"type":"number","minimum":0}}},"abort":{"type":"object","minProperties":1,"properties":{"body":{"type":"string","minLength":0},"http_status":{"type"
 :"integer","minimum":200}}}}},"echo":{"properties":{"body":{"description":"body to replace upstream response.","type":"string"},"auth_value":{"description":"auth value","type":"string"},"headers":{"description":"new headers for response","minProperties":1,"type":"object"},"before_body":{"description":"body before the filter phase.","type":"string"},"after_body":{"description":"body after the modification of filter phase.","type":"string"}},"anyOf":[{"required":["before_body"]},{"required":["body"]},{"required":["after_body"]}],"type":"object","minProperties":1,"additionalProperties":false},"uri-blocker":{"type":"object","properties":{"rejected_code":{"type":"integer","minimum":200,"default":403},"block_rules":{"type":"array","items":{"type":"string","minLength":1,"maxLength":4096},"uniqueItems":true}},"required":["block_rules"]},"kafka-logger":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1,"default":3},"buffer_duration":{"type":"integer","minimum":1,"default"
 :60},"meta_format":{"type":"string","default":"default","enum":["default","origin"]},"broker_list":{"type":"object"},"key":{"type":"string"},"max_retry_count":{"type":"integer","minimum":0,"default":0},"kafka_topic":{"type":"string"},"retry_delay":{"type":"integer","minimum":0,"default":1},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"name":{"type":"string","default":"kafka logger"},"include_req_body":{"type":"boolean","default":false},"inactive_timeout":{"type":"integer","minimum":1,"default":5}},"required":["broker_list","kafka_topic","key"]},"key-auth":{"type":"object","properties":{"key":{"type":"string"}}},"skywalking":{"type":"object","service_name":{"type":"string","default":"APISIX","description":"service name for skywalking"},"properties":{"sample_ratio":{"type":"number","minimum":1e-05,"maximum":1,"default":1},"endpoint":{"type":"string"}},"required":["endpoint"]},"grpc-transcode":{"type":"object","properties":{"method":{"description":"the method name in 
 the grpc service.","type":"string"},"proto_id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9-_]+$"},{"type":"integer","minimum":1}]},"deadline":{"description":"deadline for grpc, millisecond","default":0,"type":"number"},"service":{"description":"the grpc service name","type":"string"},"pb_option":{"type":"array","minItems":1,"items":{"type":"string","anyOf":[{"description":"enum as result","type":"string","enum":["int64_as_number","int64_as_string","int64_as_hexstring"]},{"description":"int64 as result","type":"string","enum":["ienum_as_name","enum_as_value"]},{"description":"default values option","type":"string","enum":["auto_default_values","no_default_values","use_default_values","use_default_metatable"]},{"description":"hooks option","type":"string","enum":["enable_hooks","disable_hooks"]}]}}},"additionalProperties":true,"required":["proto_id","service","method"]},"limit-req":{"type":"object","properties":{"key":{"type":"string","enum":["remote
 _addr","server_addr","http_x_real_ip","http_x_forwarded_for","consumer_name"]},"rejected_code":{"type":"integer","minimum":200,"default":503},"rate":{"type":"number","minimum":0},"burst":{"type":"number","minimum":0}},"required":["rate","burst","key"]},"proxy-rewrite":{"type":"object","additionalProperties":false,"minProperties":1,"properties":{"scheme":{"description":"new scheme for upstream","type":"string","enum":["http","https"]},"uri":{"description":"new uri for upstream","minLength":1,"maxLength":4096,"type":"string","pattern":"^\\/.*"},"headers":{"description":"new headers for request","minProperties":1,"type":"object"},"host":{"description":"new host for upstream","pattern":"^[0-9a-zA-Z-.]+$","type":"string"},"regex_uri":{"description":"new uri that substitute from client uri for upstream, lower priority than uri property","minItems":2,"items":{"description":"regex uri","type":"string"},"type":"array","maxItems":2}}},"consumer-restriction":{"type":"object","oneOf":[{"propert
 ies":{"type":{"type":"string","default":"consumer_name","enum":["consumer_name","service_id"]},"blacklist":{"type":"array","minItems":1,"items":{"type":"string"}},"rejected_code":{"type":"integer","minimum":200,"default":403}},"title":"blacklist","required":["blacklist"]},{"properties":{"type":{"type":"string","default":"consumer_name","enum":["consumer_name","service_id"]},"rejected_code":{"type":"integer","minimum":200,"default":403},"whitelist":{"type":"array","minItems":1,"items":{"type":"string"}}},"title":"whitelist","required":["whitelist"]}]},"limit-count":{"type":"object","dependencies":{"policy":{"oneOf":[{"properties":{"policy":{"enum":["local"]}}},{"properties":{"redis_port":{"type":"integer","minimum":1,"default":6379},"policy":{"enum":["redis"]},"redis_timeout":{"type":"integer","minimum":1,"default":1000},"redis_host":{"type":"string","minLength":2},"redis_password":{"type":"string","minLength":0}},"required":["redis_host"]},{"properties":{"redis_timeout":{"type":"int
 eger","minimum":1,"default":1000},"redis_password":{"type":"string","minLength":0},"redis_cluster_nodes":{"type":"array","minItems":2,"items":{"type":"string","minLength":2,"maxLength":100}},"policy":{"enum":["redis-cluster"]}},"required":["redis_cluster_nodes"]}]}},"properties":{"key":{"type":"string","enum":["remote_addr","server_addr","http_x_real_ip","http_x_forwarded_for","consumer_name"]},"count":{"type":"integer","minimum":0},"policy":{"type":"string","default":"local","enum":["local","redis","redis-cluster"]},"rejected_code":{"type":"integer","minimum":200,"maximum":600,"default":503},"time_window":{"type":"integer","minimum":0}},"required":["count","time_window","key"]},"basic-auth":{"type":"object","additionalProperties":false,"title":"work with route or service object","properties":[]},"node-status":{"type":"object","additionalProperties":false},"http-logger":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1,"default":3},"buffer_duration":{"type":"int
 eger","minimum":1,"default":60},"name":{"type":"string","default":"http logger"},"retry_delay":{"type":"integer","minimum":0,"default":1},"concat_method":{"type":"string","default":"json","enum":["json","new_line"]},"auth_header":{"type":"string","default":""},"max_retry_count":{"type":"integer","minimum":0,"default":0},"uri":{"type":"string"},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"include_req_body":{"type":"boolean","default":false},"inactive_timeout":{"type":"integer","minimum":1,"default":5}},"required":["uri"]},"wolf-rbac":{"type":"object","properties":{"server":{"type":"string","default":"http://127.0.0.1:10080"},"header_prefix":{"type":"string","default":"X-"},"appid":{"type":"string","default":"unset"}}},"udp-logger":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1,"default":3},"include_req_body":{"type":"boolean","default":false},"buffer_duration":{"type":"integer","minimum":1,"default":60},"name":{"type":"string","default":"udp
  logger"},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"port":{"type":"integer","minimum":0},"host":{"type":"string"},"inactive_timeout":{"type":"integer","minimum":1,"default":5}},"required":["host","port"]},"authz-keycloak":{"type":"object","properties":{"grant_type":{"default":"urn:ietf:params:oauth:grant-type:uma-ticket","minLength":1,"maxLength":100,"type":"string","enum":["urn:ietf:params:oauth:grant-type:uma-ticket"]},"permissions":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"uniqueItems":true},"token_endpoint":{"type":"string","minLength":1,"maxLength":4096},"ssl_verify":{"type":"boolean","default":true},"audience":{"type":"string","minLength":1,"maxLength":100},"keepalive_timeout":{"type":"integer","minimum":1000,"default":60000},"policy_enforcement_mode":{"type":"string","default":"ENFORCING","enum":["ENFORCING","PERMISSIVE"]},"keepalive":{"type":"boolean","default":true},"timeout":{"type":"integer","minimum":1000,"default":300
 0},"keepalive_pool":{"type":"integer","minimum":1,"default":5}},"required":["token_endpoint"]},"request-id":{"type":"object","properties":{"header_name":{"type":"string","default":"X-Request-Id"},"include_in_response":{"type":"boolean","default":true}}},"ip-restriction":{"type":"object","oneOf":[{"properties":{"whitelist":{"type":"array","minItems":1,"items":{"anyOf":[{"type":"string","title":"IPv4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}]}}},"additionalProperties":false,"title":"whitelist","required":["whitelist"]},{"properties":{"blacklist":{"type":"array","minItems":1,"items":{"anyOf":[{"type":"string","title":"IPv
 4","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"},{"type":"string","title":"IPv4/CIDR","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/[0-9]{1,2}$"},{"type":"string","title":"IPv6","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?$"},{"type":"string","title":"IPv6/CIDR","pattern":"^([a-fA-F0-9]{0,4}:){0,8}(:[a-fA-F0-9]{0,4}){0,8}([a-fA-F0-9]{0,4})?/[0-9]{1,3}$"}]}}},"additionalProperties":false,"title":"blacklist","required":["blacklist"]}]},"syslog":{"type":"object","properties":{"timeout":{"type":"integer","minimum":1,"default":3},"drop_limit":{"type":"integer","default":1048576},"name":{"type":"string","default":"sys logger"},"port":{"type":"integer"},"host":{"type":"string"},"include_req_body":{"type":"boolean","default":false},"max_retry_times":{"type":"integer","minimum":1,"default":1},"buffer_duration":{"type":"integer","minimum":1,"default":60},"batch_max_size":{"type":"integer","minimum":1,"default":1000},"flush_limit":{"typ
 e":"integer","minimum":1,"default":4096},"retry_interval":{"type":"integer","minimum":0,"default":1},"pool_size":{"type":"integer","minimum":5,"default":5},"tls":{"type":"boolean","default":false},"sock_type":{"type":"string","default":"tcp","enum":["tcp","udp"]}},"required":["host","port"]},"response-rewrite":{"type":"object","additionalProperties":false,"minProperties":1,"properties":{"body_base64":{"description":"whether new body for repsonse need base64 decode before return","default":false,"type":"boolean"},"headers":{"description":"new headers for repsonse","minProperties":1,"type":"object"},"status_code":{"description":"new status code for repsonse","minimum":200,"maximum":598,"type":"integer"},"body":{"description":"new body for repsonse","type":"string"}}},"referer-restriction":{"type":"object","properties":{"bypass_missing":{"type":"boolean","default":false},"whitelist":{"type":"array","minItems":1,"items":{"type":"string","pattern":"^\\*?[0-9a-zA-Z-.]+$"}}},"additionalPro
 perties":false,"required":["whitelist"]},"request-validation":{"type":"object","anyOf":[{"required":["body_schema"]},{"required":["header_schema"]}],"properties":{"header_schema":{"type":"object"},"body_schema":{"type":"object"}}},"log-rotate":{"type":"object","additionalProperties":false,"properties":[]},"hmac-auth":{"type":"object","additionalProperties":false,"title":"work with route or service object","properties":[]},"cors":{"type":"object","properties":{"allow_origins":{"description":"you can use '*' to allow all origins when no credentials,'**' to allow forcefully(it will bring some security risks, be carefully),multiple origin use ',' to split. default: *.","default":"*","type":"string"},"allow_headers":{"description":"you can use '*' to allow all header when no credentials,'**' to allow forcefully(it will bring some security risks, be carefully),multiple header use ',' to split. default: *.","default":"*","type":"string"},"allow_methods":{"description":"you can use '*' to a
 llow all methods when no credentials and '**','**' to allow forcefully(it will bring some security risks, be carefully),multiple method use ',' to split. default: *.","default":"*","type":"string"},"max_age":{"description":"maximum number of seconds the results can be cached.-1 mean no cached,the max value is depend on browser,more detail plz check MDN. default: 5.","default":5,"type":"integer"},"allow_credential":{"description":"allow client append crendential. according to CORS specification,if you set this option to 'true', you can not use '*' for other options.","default":false,"type":"boolean"},"expose_headers":{"description":"you can use '*' to expose all header when no credentials,multiple header use ',' to split. default: *.","default":"*","type":"string"}}},"example-plugin":{"type":"object","properties":{"s":{"type":"string"},"t":{"type":"array","minItems":1},"i":{"type":"number","minimum":0},"port":{"type":"integer"},"ip":{"type":"string"}},"required":["i"]},"limit-conn":{
 "type":"object","properties":{"conn":{"type":"integer","minimum":0},"default_conn_delay":{"type":"number","minimum":0},"rejected_code":{"type":"integer","minimum":200,"default":503},"burst":{"type":"integer","minimum":0},"key":{"type":"string","enum":["remote_addr","server_addr","http_x_real_ip","http_x_forwarded_for"]}},"required":["conn","burst","default_conn_delay","key"]},"proxy-cache":{"type":"object","properties":{"cache_bypass":{"type":"array","minItems":1,"items":{"type":"string","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)"}},"no_cache":{"type":"array","minItems":1,"items":{"type":"string","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)"}},"hide_cache_headers":{"type":"boolean","default":false},"cache_http_status":{"default":[200,301,404],"minItems":1,"items":{"description":"http response status","minimum":200,"maximum":599,"type":"integer"},"type":"array","uniqueItems":true},"cache_method":{"default":["GET","HEAD"],"minItems":1,"items":{"description":"http method","type":"string"
 ,"enum":["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","CONNECT","TRACE"]},"type":"array","uniqueItems":true},"cache_zone":{"type":"string","minLength":1},"cache_key":{"type":"array","minItems":1,"items":{"description":"a key for caching","pattern":"(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)","type":"string"},"default":["$host","$request_uri"]}},"required":["cache_zone"]},"zipkin":{"type":"object","properties":{"sample_ratio":{"type":"number","minimum":1e-05,"maximum":1},"endpoint":{"type":"string"},"server_addr":{"type":"string","pattern":"^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$","description":"default is $server_addr, you can speific your external ip address"},"service_name":{"type":"string","default":"APISIX","description":"service name for zipkin reporter"}},"required":["endpoint","sample_ratio"]},"batch-requests":{"type":"object","additionalProperties":false}}}

Review comment:
       This file is all on the same line, and users cannot see the changes, which is not user-friendly. We can create an issue to track it




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org