You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by bz...@apache.org on 2022/12/07 02:45:53 UTC

[apisix-dashboard] branch master updated: feat: basic support Apache APISIX 2.15.0 (#2680)

This is an automated email from the ASF dual-hosted git repository.

bzp2010 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-dashboard.git


The following commit(s) were added to refs/heads/master by this push:
     new 960ccca61 feat: basic support Apache APISIX 2.15.0 (#2680)
960ccca61 is described below

commit 960ccca612776f3a6f455d49e883cc049a5ab48c
Author: Zeping Bai <bz...@apache.org>
AuthorDate: Wed Dec 7 10:45:47 2022 +0800

    feat: basic support Apache APISIX 2.15.0 (#2680)
---
 api/conf/conf.yaml                 |   42 +-
 api/conf/schema.json               | 2643 ++++++++++++++++++++++++++++++++----
 api/test/e2e/schema/schema_test.go |   22 +-
 web/src/components/Plugin/data.tsx |  256 ++--
 4 files changed, 2531 insertions(+), 432 deletions(-)

diff --git a/api/conf/conf.yaml b/api/conf/conf.yaml
index 13ce71b14..01d404882 100644
--- a/api/conf/conf.yaml
+++ b/api/conf/conf.yaml
@@ -91,49 +91,79 @@ oidc:
   redirect_url: http://127.0.0.1:9000/apisix/admin/oidc/callback
   scope: openid
 
-plugins:                          # plugin list (sorted in alphabetical order)
+plugins:
   - api-breaker
+  - authz-casbin
+  - authz-casdoor
   - authz-keycloak
+  - aws-lambda
+  - azure-functions
   - basic-auth
-  - batch-requests
+  # - batch-requests
+  - clickhouse-logger
+  - client-control
   - consumer-restriction
   - cors
+  - csrf
+  - datadog
   # - dubbo-proxy
   - echo
-  # - error-log-logger
+  - error-log-logger
   # - example-plugin
+  - ext-plugin-post-req
+  - ext-plugin-post-resp
+  - ext-plugin-pre-req
   - fault-injection
+  - file-logger
+  - forward-auth
+  - google-cloud-logging
   - grpc-transcode
+  - grpc-web
+  - gzip
   - hmac-auth
   - http-logger
   - ip-restriction
   - jwt-auth
   - kafka-logger
+  - kafka-proxy
   - key-auth
+  - ldap-auth
   - limit-conn
   - limit-count
   - limit-req
+  - loggly
   # - log-rotate
+  - mocking
   # - node-status
+  - opa
   - openid-connect
+  - opentelemetry
+  - openwhisk
   - prometheus
   - proxy-cache
+  - proxy-control
   - proxy-mirror
   - proxy-rewrite
+  - public-api
+  - real-ip
   - redirect
   - referer-restriction
   - request-id
   - request-validation
   - response-rewrite
+  - rocketmq-logger
+  - server-info
   - serverless-post-function
   - serverless-pre-function
-  # - skywalking
+  - skywalking
+  - skywalking-logger
   - sls-logger
+  - splunk-hec-logging
   - syslog
   - tcp-logger
+  - traffic-split
+  - ua-restriction
   - udp-logger
   - uri-blocker
   - wolf-rbac
   - zipkin
-  - server-info
-  - traffic-split
diff --git a/api/conf/schema.json b/api/conf/schema.json
index 08a3b2eeb..db680cd5f 100644
--- a/api/conf/schema.json
+++ b/api/conf/schema.json
@@ -721,43 +721,6 @@
 									"type": "object"
 								},
 								"passive": {
-									"default": {
-										"healthy": {
-											"http_statuses": [
-												200,
-												201,
-												202,
-												203,
-												204,
-												205,
-												206,
-												207,
-												208,
-												226,
-												300,
-												301,
-												302,
-												303,
-												304,
-												305,
-												306,
-												307,
-												308
-											],
-											"successes": 0
-										},
-										"type": "http",
-										"unhealthy": {
-											"http_failures": 0,
-											"http_statuses": [
-												429,
-												500,
-												503
-											],
-											"tcp_failures": 0,
-											"timeouts": 0
-										}
-									},
 									"properties": {
 										"healthy": {
 											"properties": {
@@ -1055,22 +1018,67 @@
 							"type": "object"
 						},
 						"tls": {
+							"dependencies": {
+								"client_cert": {
+									"not": {
+										"required": [
+											"client_cert_id"
+										]
+									},
+									"required": [
+										"client_key"
+									]
+								},
+								"client_cert_id": {
+									"not": {
+										"required": [
+											"client_client",
+											"client_key"
+										]
+									}
+								},
+								"client_key": {
+									"not": {
+										"required": [
+											"client_cert_id"
+										]
+									},
+									"required": [
+										"client_cert"
+									]
+								}
+							},
 							"properties": {
 								"client_cert": {
 									"maxLength": 65536,
 									"minLength": 128,
 									"type": "string"
 								},
+								"client_cert_id": {
+									"anyOf": [
+										{
+											"maxLength": 64,
+											"minLength": 1,
+											"pattern": "^[a-zA-Z0-9-_.]+$",
+											"type": "string"
+										},
+										{
+											"minimum": 1,
+											"type": "integer"
+										}
+									]
+								},
 								"client_key": {
 									"maxLength": 65536,
 									"minLength": 128,
 									"type": "string"
+								},
+								"verify": {
+									"default": false,
+									"description": "Turn on server certificate verification, currently only kafka upstream is supported",
+									"type": "boolean"
 								}
 							},
-							"required": [
-								"client_cert",
-								"client_key"
-							],
 							"type": "object"
 						},
 						"type": {
@@ -1344,43 +1352,6 @@
 									"type": "object"
 								},
 								"passive": {
-									"default": {
-										"healthy": {
-											"http_statuses": [
-												200,
-												201,
-												202,
-												203,
-												204,
-												205,
-												206,
-												207,
-												208,
-												226,
-												300,
-												301,
-												302,
-												303,
-												304,
-												305,
-												306,
-												307,
-												308
-											],
-											"successes": 0
-										},
-										"type": "http",
-										"unhealthy": {
-											"http_failures": 0,
-											"http_statuses": [
-												429,
-												500,
-												503
-											],
-											"tcp_failures": 0,
-											"timeouts": 0
-										}
-									},
 									"properties": {
 										"healthy": {
 											"properties": {
@@ -1678,22 +1649,67 @@
 							"type": "object"
 						},
 						"tls": {
+							"dependencies": {
+								"client_cert": {
+									"not": {
+										"required": [
+											"client_cert_id"
+										]
+									},
+									"required": [
+										"client_key"
+									]
+								},
+								"client_cert_id": {
+									"not": {
+										"required": [
+											"client_client",
+											"client_key"
+										]
+									}
+								},
+								"client_key": {
+									"not": {
+										"required": [
+											"client_cert_id"
+										]
+									},
+									"required": [
+										"client_cert"
+									]
+								}
+							},
 							"properties": {
 								"client_cert": {
 									"maxLength": 65536,
 									"minLength": 128,
 									"type": "string"
 								},
+								"client_cert_id": {
+									"anyOf": [
+										{
+											"maxLength": 64,
+											"minLength": 1,
+											"pattern": "^[a-zA-Z0-9-_.]+$",
+											"type": "string"
+										},
+										{
+											"minimum": 1,
+											"type": "integer"
+										}
+									]
+								},
 								"client_key": {
 									"maxLength": 65536,
 									"minLength": 128,
 									"type": "string"
+								},
+								"verify": {
+									"default": false,
+									"description": "Turn on server certificate verification, currently only kafka upstream is supported",
+									"type": "boolean"
 								}
 							},
-							"required": [
-								"client_cert",
-								"client_key"
-							],
 							"type": "object"
 						},
 						"type": {
@@ -1728,22 +1744,6 @@
 			"type": "object"
 		},
 		"ssl": {
-			"oneOf": [
-				{
-					"required": [
-						"cert",
-						"key",
-						"sni"
-					]
-				},
-				{
-					"required": [
-						"cert",
-						"key",
-						"snis"
-					]
-				}
-			],
 			"properties": {
 				"cert": {
 					"maxLength": 65536,
@@ -1844,6 +1844,15 @@
 					],
 					"type": "integer"
 				},
+				"type": {
+					"default": "server",
+					"description": "ssl certificate type, server to server certificate, client to client certificate for upstream",
+					"enum": [
+						"client",
+						"server"
+					],
+					"type": "string"
+				},
 				"update_time": {
 					"type": "integer"
 				},
@@ -1854,6 +1863,39 @@
 					"type": "integer"
 				}
 			},
+			"if": {
+				"properties": {
+					"type": {
+						"enum": [
+							"server"
+						]
+					}
+				}
+			},
+			"else": {
+				"required": [
+					"cert",
+					"key"
+				]
+			},
+			"then": {
+				"oneOf": [
+					{
+						"required": [
+							"cert",
+							"key",
+							"sni"
+						]
+					},
+					{
+						"required": [
+							"cert",
+							"key",
+							"snis"
+						]
+					}
+				]
+			},
 			"type": "object"
 		},
 		"stream_route": {
@@ -2156,43 +2198,6 @@
 									"type": "object"
 								},
 								"passive": {
-									"default": {
-										"healthy": {
-											"http_statuses": [
-												200,
-												201,
-												202,
-												203,
-												204,
-												205,
-												206,
-												207,
-												208,
-												226,
-												300,
-												301,
-												302,
-												303,
-												304,
-												305,
-												306,
-												307,
-												308
-											],
-											"successes": 0
-										},
-										"type": "http",
-										"unhealthy": {
-											"http_failures": 0,
-											"http_statuses": [
-												429,
-												500,
-												503
-											],
-											"tcp_failures": 0,
-											"timeouts": 0
-										}
-									},
 									"properties": {
 										"healthy": {
 											"properties": {
@@ -2490,22 +2495,67 @@
 							"type": "object"
 						},
 						"tls": {
+							"dependencies": {
+								"client_cert": {
+									"not": {
+										"required": [
+											"client_cert_id"
+										]
+									},
+									"required": [
+										"client_key"
+									]
+								},
+								"client_cert_id": {
+									"not": {
+										"required": [
+											"client_client",
+											"client_key"
+										]
+									}
+								},
+								"client_key": {
+									"not": {
+										"required": [
+											"client_cert_id"
+										]
+									},
+									"required": [
+										"client_cert"
+									]
+								}
+							},
 							"properties": {
 								"client_cert": {
 									"maxLength": 65536,
 									"minLength": 128,
 									"type": "string"
 								},
+								"client_cert_id": {
+									"anyOf": [
+										{
+											"maxLength": 64,
+											"minLength": 1,
+											"pattern": "^[a-zA-Z0-9-_.]+$",
+											"type": "string"
+										},
+										{
+											"minimum": 1,
+											"type": "integer"
+										}
+									]
+								},
 								"client_key": {
 									"maxLength": 65536,
 									"minLength": 128,
 									"type": "string"
+								},
+								"verify": {
+									"default": false,
+									"description": "Turn on server certificate verification, currently only kafka upstream is supported",
+									"type": "boolean"
 								}
 							},
-							"required": [
-								"client_cert",
-								"client_key"
-							],
 							"type": "object"
 						},
 						"type": {
@@ -2697,43 +2747,6 @@
 							"type": "object"
 						},
 						"passive": {
-							"default": {
-								"healthy": {
-									"http_statuses": [
-										200,
-										201,
-										202,
-										203,
-										204,
-										205,
-										206,
-										207,
-										208,
-										226,
-										300,
-										301,
-										302,
-										303,
-										304,
-										305,
-										306,
-										307,
-										308
-									],
-									"successes": 0
-								},
-								"type": "http",
-								"unhealthy": {
-									"http_failures": 0,
-									"http_statuses": [
-										429,
-										500,
-										503
-									],
-									"tcp_failures": 0,
-									"timeouts": 0
-								}
-							},
 							"properties": {
 								"healthy": {
 									"properties": {
@@ -3031,22 +3044,67 @@
 					"type": "object"
 				},
 				"tls": {
-					"properties": {
+					"dependencies": {
 						"client_cert": {
-							"maxLength": 65536,
-							"minLength": 128,
-							"type": "string"
+							"not": {
+								"required": [
+									"client_cert_id"
+								]
+							},
+							"required": [
+								"client_key"
+							]
+						},
+						"client_cert_id": {
+							"not": {
+								"required": [
+									"client_client",
+									"client_key"
+								]
+							}
 						},
 						"client_key": {
+							"not": {
+								"required": [
+									"client_cert_id"
+								]
+							},
+							"required": [
+								"client_cert"
+							]
+						}
+					},
+					"properties": {
+						"client_cert": {
 							"maxLength": 65536,
 							"minLength": 128,
 							"type": "string"
+						},
+						"client_cert_id": {
+							"anyOf": [
+								{
+									"maxLength": 64,
+									"minLength": 1,
+									"pattern": "^[a-zA-Z0-9-_.]+$",
+									"type": "string"
+								},
+								{
+									"minimum": 1,
+									"type": "integer"
+								}
+							]
+						},
+						"client_key": {
+							"maxLength": 65536,
+							"minLength": 128,
+							"type": "string"
+						},
+						"verify": {
+							"default": false,
+							"description": "Turn on server certificate verification, currently only kafka upstream is supported",
+							"type": "boolean"
 						}
 					},
-					"required": [
-						"client_cert",
-						"client_key"
-					],
 					"type": "object"
 				},
 				"type": {
@@ -3078,6 +3136,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"break_response_body": {
 						"type": "string"
 					},
@@ -3098,6 +3183,10 @@
 									"type": "string"
 								}
 							},
+							"required": [
+								"key",
+								"value"
+							],
 							"type": "object"
 						},
 						"type": "array"
@@ -3212,6 +3301,33 @@
 					}
 				],
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"disable": {
 						"type": "boolean"
 					},
@@ -3240,6 +3356,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"callback_url": {
 						"pattern": "^[^%?]+[^/]$",
 						"type": "string"
@@ -3337,6 +3480,33 @@
 					}
 				],
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"access_denied_redirect_uri": {
 						"maxLength": 2048,
 						"minLength": 1,
@@ -3474,6 +3644,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"authorization": {
 						"properties": {
 							"apikey": {
@@ -3564,6 +3761,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"authorization": {
 						"properties": {
 							"apikey": {
@@ -3633,6 +3857,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"disable": {
 						"type": "boolean"
 					},
@@ -3647,31 +3898,6 @@
 			"type": "auth",
 			"version": 0.1
 		},
-		"batch-requests": {
-			"metadata_schema": {
-				"properties": {
-					"max_body_size": {
-						"default": 1048576,
-						"description": "max pipeline body size in bytes",
-						"exclusiveMinimum": 0,
-						"type": "integer"
-					}
-				},
-				"type": "object"
-			},
-			"priority": 4010,
-			"schema": {
-				"$comment": "this is a mark for our injected plugin schema",
-				"properties": {
-					"disable": {
-						"type": "boolean"
-					}
-				},
-				"type": "object"
-			},
-			"scope": "global",
-			"version": 0.1
-		},
 		"clickhouse-logger": {
 			"metadata_schema": {
 				"properties": {
@@ -3690,6 +3916,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"batch_max_size": {
 						"default": 1000,
 						"minimum": 1,
@@ -3768,6 +4021,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"disable": {
 						"type": "boolean"
 					},
@@ -3802,6 +4082,33 @@
 					}
 				],
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"allowed_by_methods": {
 						"items": {
 							"properties": {
@@ -3889,16 +4196,43 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
-					"allow_credential": {
-						"default": false,
-						"description": "allow client append credential. according to CORS specification,if you set this option to 'true', you can not use '*' for other options.",
-						"type": "boolean"
-					},
-					"allow_headers": {
-						"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: *.",
-						"type": "string"
-					},
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
+					"allow_credential": {
+						"default": false,
+						"description": "allow client append credential. according to CORS specification,if you set this option to 'true', you can not use '*' for other options.",
+						"type": "boolean"
+					},
+					"allow_headers": {
+						"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: *.",
+						"type": "string"
+					},
 					"allow_methods": {
 						"default": "*",
 						"description": "you can use '*' to allow all methods when no credentials,'**' to allow forcefully(it will bring some security risks, be carefully),multiple method use ',' to split. default: *.",
@@ -3955,6 +4289,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"disable": {
 						"type": "boolean"
 					},
@@ -4012,6 +4373,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"batch_max_size": {
 						"default": 1000,
 						"minimum": 1,
@@ -4105,6 +4493,33 @@
 				],
 				"minProperties": 1,
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"after_body": {
 						"description": "body after the modification of filter phase.",
 						"type": "string"
@@ -4344,6 +4759,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"disable": {
 						"type": "boolean"
 					},
@@ -4377,6 +4819,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"allow_degradation": {
 						"default": false,
 						"type": "boolean"
@@ -4415,6 +4884,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"allow_degradation": {
 						"default": false,
 						"type": "boolean"
@@ -4453,6 +4949,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"allow_degradation": {
 						"default": false,
 						"type": "boolean"
@@ -4492,6 +5015,33 @@
 				"$comment": "this is a mark for our injected plugin schema",
 				"minProperties": 1,
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"abort": {
 						"properties": {
 							"body": {
@@ -4570,6 +5120,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"disable": {
 						"type": "boolean"
 					},
@@ -4589,6 +5166,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"client_headers": {
 						"default": {},
 						"description": "authorization response header that will be sent tothe client when authorizing failed",
@@ -4678,6 +5282,33 @@
 					}
 				],
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"auth_config": {
 						"properties": {
 							"entries_uri": {
@@ -4788,12 +5419,39 @@
 				"$comment": "this is a mark for our injected plugin schema",
 				"additionalProperties": true,
 				"properties": {
-					"deadline": {
-						"default": 0,
-						"description": "deadline for grpc, millisecond",
-						"type": "number"
-					},
-					"disable": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
+					"deadline": {
+						"default": 0,
+						"description": "deadline for grpc, millisecond",
+						"type": "number"
+					},
+					"disable": {
 						"type": "boolean"
 					},
 					"method": {
@@ -4801,6 +5459,12 @@
 						"type": "string"
 					},
 					"pb_option": {
+						"default": [
+							"auto_default_values",
+							"disable_hooks",
+							"enum_as_name",
+							"int64_as_number"
+						],
 						"items": {
 							"anyOf": [
 								{
@@ -4877,6 +5541,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"disable": {
 						"type": "boolean"
 					}
@@ -4890,6 +5581,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"buffers": {
 						"default": {
 							"number": 32,
@@ -5024,6 +5742,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"disable": {
 						"type": "boolean"
 					}
@@ -5052,8 +5797,34 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"auth_header": {
-						"default": "",
 						"type": "string"
 					},
 					"batch_max_size": {
@@ -5149,6 +5920,33 @@
 					}
 				],
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"blacklist": {
 						"items": {
 							"anyOf": [
@@ -5312,6 +6110,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"cookie": {
 						"default": "jwt",
 						"type": "string"
@@ -5351,6 +6176,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"batch_max_size": {
 						"default": 1000,
 						"minimum": 1,
@@ -5431,6 +6283,26 @@
 						"default": "kafka logger",
 						"type": "string"
 					},
+					"producer_batch_num": {
+						"default": 200,
+						"minimum": 1,
+						"type": "integer"
+					},
+					"producer_batch_size": {
+						"default": 1048576,
+						"minimum": 0,
+						"type": "integer"
+					},
+					"producer_max_buffering": {
+						"default": 50000,
+						"minimum": 1,
+						"type": "integer"
+					},
+					"producer_time_linger": {
+						"default": 1,
+						"minimum": 1,
+						"type": "integer"
+					},
 					"producer_type": {
 						"default": "async",
 						"enum": [
@@ -5467,6 +6339,61 @@
 			},
 			"version": 0.1
 		},
+		"kafka-proxy": {
+			"priority": 508,
+			"schema": {
+				"$comment": "this is a mark for our injected plugin schema",
+				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
+					"disable": {
+						"type": "boolean"
+					},
+					"sasl": {
+						"properties": {
+							"password": {
+								"type": "string"
+							},
+							"username": {
+								"type": "string"
+							}
+						},
+						"required": [
+							"password",
+							"username"
+						],
+						"type": "object"
+					}
+				},
+				"type": "object"
+			},
+			"version": 0.1
+		},
 		"key-auth": {
 			"consumer_schema": {
 				"properties": {
@@ -5483,6 +6410,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"disable": {
 						"type": "boolean"
 					},
@@ -5521,14 +6475,41 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
-					"base_dn": {
-						"type": "string"
-					},
-					"disable": {
-						"type": "boolean"
-					},
-					"ldap_uri": {
-						"type": "string"
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
+					"base_dn": {
+						"type": "string"
+					},
+					"disable": {
+						"type": "boolean"
+					},
+					"ldap_uri": {
+						"type": "string"
 					},
 					"uid": {
 						"type": "string"
@@ -5552,6 +6533,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"allow_degradation": {
 						"default": false,
 						"type": "boolean"
@@ -5651,16 +6659,34 @@
 						]
 					}
 				},
-				"if": {
-					"properties": {
-						"policy": {
-							"enum": [
-								"redis"
-							]
-						}
-					}
-				},
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"allow_degradation": {
 						"default": false,
 						"type": "boolean"
@@ -5720,6 +6746,15 @@
 					"count",
 					"time_window"
 				],
+				"if": {
+					"properties": {
+						"policy": {
+							"enum": [
+								"redis"
+							]
+						}
+					}
+				},
 				"then": {
 					"properties": {
 						"redis_database": {
@@ -5759,6 +6794,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"allow_degradation": {
 						"default": false,
 						"type": "boolean"
@@ -5858,6 +6920,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"batch_max_size": {
 						"default": 1000,
 						"minimum": 1,
@@ -6000,6 +7089,33 @@
 					}
 				],
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"content_type": {
 						"default": "application/json;charset=utf8",
 						"type": "string"
@@ -6050,6 +7166,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"disable": {
 						"type": "boolean"
 					},
@@ -6110,6 +7253,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"access_token_in_authorization_header": {
 						"default": false,
 						"description": "Whether the access token should be added in the Authorization header as opposed to the X-Access-Token header.",
@@ -6171,6 +7341,11 @@
 						"description": "Whether the ID token should be added in the X-ID-Token header to the request for downstream.",
 						"type": "boolean"
 					},
+					"set_refresh_token_header": {
+						"default": false,
+						"description": "Whether the refresh token should be added in the X-Refresh-Token header to the request for downstream.",
+						"type": "boolean"
+					},
 					"set_userinfo_header": {
 						"default": true,
 						"description": "Whether the user info token should be added in the X-Userinfo header to the request for downstream.",
@@ -6188,6 +7363,11 @@
 					},
 					"token_signing_alg_values_expected": {
 						"type": "string"
+					},
+					"use_pkce": {
+						"default": false,
+						"description": "when set to true the PKEC(Proof Key for Code Exchange) will be used.",
+						"type": "boolean"
 					}
 				},
 				"required": [
@@ -6300,6 +7480,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"action": {
 						"maxLength": 256,
 						"pattern": "\\A([\\w]|[\\w][\\w@ .-]*[\\w@.-]+)\\z",
@@ -6369,6 +7576,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"disable": {
 						"type": "boolean"
 					},
@@ -6386,6 +7620,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"cache_bypass": {
 						"items": {
 							"pattern": "(^[^\\$].+$|^\\$[0-9a-zA-Z_]+$)",
@@ -6489,10 +7750,37 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
-					"disable": {
-						"type": "boolean"
-					},
-					"request_buffering": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
+					"disable": {
+						"type": "boolean"
+					},
+					"request_buffering": {
 						"default": true,
 						"type": "boolean"
 					}
@@ -6506,6 +7794,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"disable": {
 						"type": "boolean"
 					},
@@ -6537,6 +7852,33 @@
 				"$comment": "this is a mark for our injected plugin schema",
 				"minProperties": 1,
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"disable": {
 						"type": "boolean"
 					},
@@ -6594,6 +7936,11 @@
 						"minLength": 1,
 						"pattern": "^\\/.*",
 						"type": "string"
+					},
+					"use_real_request_uri_unsafe": {
+						"default": false,
+						"description": "use real_request_uri instead, THIS IS VERY UNSAFE.",
+						"type": "boolean"
 					}
 				},
 				"type": "object"
@@ -6605,6 +7952,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"disable": {
 						"type": "boolean"
 					},
@@ -6621,6 +7995,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"disable": {
 						"type": "boolean"
 					},
@@ -6684,14 +8085,45 @@
 						]
 					},
 					{
+						"not": {
+							"required": [
+								"append_query_string"
+							]
+						},
 						"required": [
 							"http_to_https"
 						]
 					}
 				],
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"append_query_string": {
-						"default": false,
 						"type": "boolean"
 					},
 					"disable": {
@@ -6746,6 +8178,33 @@
 					}
 				],
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"blacklist": {
 						"items": {
 							"pattern": "^\\*?[0-9a-zA-Z-._\\[\\]:]+$",
@@ -6781,10 +8240,37 @@
 			"version": 0.1
 		},
 		"request-id": {
-			"priority": 11010,
+			"priority": 12015,
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"algorithm": {
 						"default": "uuid",
 						"enum": [
@@ -6827,6 +8313,33 @@
 					}
 				],
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"body_schema": {
 						"type": "object"
 					},
@@ -6874,6 +8387,33 @@
                     }
                 },
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"body": {
 						"description": "new body for response",
 						"type": "string"
@@ -6961,6 +8501,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"access_key": {
 						"default": "",
 						"type": "string"
@@ -7070,6 +8637,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"disable": {
 						"type": "boolean"
 					}
@@ -7084,6 +8678,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"disable": {
 						"type": "boolean"
 					},
@@ -7119,6 +8740,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"disable": {
 						"type": "boolean"
 					},
@@ -7186,6 +8834,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"batch_max_size": {
 						"default": 1000,
 						"minimum": 1,
@@ -7252,6 +8927,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"access_key_id": {
 						"type": "string"
 					},
@@ -7329,6 +9031,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"batch_max_size": {
 						"default": 1000,
 						"minimum": 1,
@@ -7402,6 +9131,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"batch_max_size": {
 						"default": 1000,
 						"minimum": 1,
@@ -7497,6 +9253,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"batch_max_size": {
 						"default": 1000,
 						"minimum": 1,
@@ -7566,6 +9349,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"disable": {
 						"type": "boolean"
 					},
@@ -7749,43 +9559,6 @@
 																"type": "object"
 															},
 															"passive": {
-																"default": {
-																	"healthy": {
-																		"http_statuses": [
-																			200,
-																			201,
-																			202,
-																			203,
-																			204,
-																			205,
-																			206,
-																			207,
-																			208,
-																			226,
-																			300,
-																			301,
-																			302,
-																			303,
-																			304,
-																			305,
-																			306,
-																			307,
-																			308
-																		],
-																		"successes": 0
-																	},
-																	"type": "http",
-																	"unhealthy": {
-																		"http_failures": 0,
-																		"http_statuses": [
-																			429,
-																			500,
-																			503
-																		],
-																		"tcp_failures": 0,
-																		"timeouts": 0
-																	}
-																},
 																"properties": {
 																	"healthy": {
 																		"properties": {
@@ -8083,22 +9856,67 @@
 														"type": "object"
 													},
 													"tls": {
+														"dependencies": {
+															"client_cert": {
+																"not": {
+																	"required": [
+																		"client_cert_id"
+																	]
+																},
+																"required": [
+																	"client_key"
+																]
+															},
+															"client_cert_id": {
+																"not": {
+																	"required": [
+																		"client_client",
+																		"client_key"
+																	]
+																}
+															},
+															"client_key": {
+																"not": {
+																	"required": [
+																		"client_cert_id"
+																	]
+																},
+																"required": [
+																	"client_cert"
+																]
+															}
+														},
 														"properties": {
 															"client_cert": {
 																"maxLength": 65536,
 																"minLength": 128,
 																"type": "string"
 															},
+															"client_cert_id": {
+																"anyOf": [
+																	{
+																		"maxLength": 64,
+																		"minLength": 1,
+																		"pattern": "^[a-zA-Z0-9-_.]+$",
+																		"type": "string"
+																	},
+																	{
+																		"minimum": 1,
+																		"type": "integer"
+																	}
+																]
+															},
 															"client_key": {
 																"maxLength": 65536,
 																"minLength": 128,
 																"type": "string"
+															},
+															"verify": {
+																"default": false,
+																"description": "Turn on server certificate verification, currently only kafka upstream is supported",
+																"type": "boolean"
 															}
 														},
-														"required": [
-															"client_cert",
-															"client_key"
-														],
 														"type": "object"
 													},
 													"type": {
@@ -8157,6 +9975,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"allowlist": {
 						"items": {
 							"minLength": 1,
@@ -8196,6 +10041,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"batch_max_size": {
 						"default": 1000,
 						"minimum": 1,
@@ -8258,6 +10130,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"block_rules": {
 						"items": {
 							"maxLength": 4096,
@@ -8296,6 +10195,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"appid": {
 						"default": "unset",
 						"type": "string"
@@ -8322,6 +10248,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"disable": {
 						"type": "boolean"
 					},
@@ -8378,6 +10331,33 @@
 					}
 				],
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"blacklist": {
 						"items": {
 							"anyOf": [
@@ -8453,6 +10433,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"burst": {
 						"minimum": 0,
 						"type": "integer"
@@ -8499,6 +10506,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"disable": {
 						"type": "boolean"
 					},
@@ -8564,6 +10598,33 @@
 			"schema": {
 				"$comment": "this is a mark for our injected plugin schema",
 				"properties": {
+					"_meta": {
+						"properties": {
+							"error_response": {
+								"oneOf": [
+									{
+										"type": "string"
+									},
+									{
+										"type": "object"
+									}
+								]
+							},
+							"filter": {
+								"description": "filter determines whether the plugin needs to be executed at runtime",
+								"items": {
+									"type": "array"
+								},
+								"maxItems": 20,
+								"type": "array"
+							},
+							"priority": {
+								"description": "priority of plugins by customized order",
+								"type": "integer"
+							}
+						},
+						"type": "object"
+					},
 					"batch_max_size": {
 						"default": 1000,
 						"minimum": 1,
@@ -8643,4 +10704,4 @@
 			"version": 0.1
 		}
 	}
-}
+}
\ No newline at end of file
diff --git a/api/test/e2e/schema/schema_test.go b/api/test/e2e/schema/schema_test.go
index 8dacca872..1ff105f0c 100644
--- a/api/test/e2e/schema/schema_test.go
+++ b/api/test/e2e/schema/schema_test.go
@@ -19,36 +19,36 @@ package schema
 import (
 	"net/http"
 
-	"github.com/onsi/ginkgo"
-	"github.com/onsi/ginkgo/extensions/table"
+	. "github.com/onsi/ginkgo"
+	. "github.com/onsi/ginkgo/extensions/table"
 
 	"github.com/apisix/manager-api/test/e2e/base"
 )
 
-var _ = ginkgo.Describe("Schema Test", func() {
-	table.DescribeTable("test schema basic", func(testCase base.HttpTestCase) {
+var _ = Describe("Schema Test", func() {
+	DescribeTable("test schema basic", func(testCase base.HttpTestCase) {
 		base.RunTestCase(testCase)
 	},
-		table.Entry("get consumer schema of plugin", base.HttpTestCase{
+		Entry("get consumer schema of plugin", base.HttpTestCase{
 			Object:       base.ManagerApiExpect(),
 			Method:       http.MethodGet,
 			Path:         "/apisix/admin/schema/plugins/jwt-auth",
 			Query:        "schema_type=consumer",
 			Headers:      map[string]string{"Authorization": base.GetToken()},
 			ExpectStatus: http.StatusOK,
-			ExpectBody:   "{\"dependencies\":{\"algorithm\":{\"oneOf\":[{\"properties\":{\"algorithm\":{\"default\":\"HS256\",\"enum\":[\"HS256\",\"HS512\"]}}},{\"properties\":{\"algorithm\":{\"enum\":[\"RS256\"]},\"private_key\":{\"type\":\"string\"},\"public_key\":{\"type\":\"string\"}},\"required\":[\"private_key\",\"public_key\"]},{\"properties\":{\"algorithm\":{\"enum\":[\"RS256\"]},\"vault\":{\"properties\":{},\"type\":\"object\"}},\"required\":[\"vault\"]}]}},\"properties\":{\"algorithm\": [...]
+			ExpectBody:   `{"dependencies":{"algorithm":{"oneOf":[{"properties":{"algorithm":{"default":"HS256","enum":["HS256","HS512"]}}},{"properties":{"algorithm":{"enum":["RS256"]},"private_key":{"type":"string"},"public_key":{"type":"string"}},"required":["private_key","public_key"]},{"properties":{"algorithm":{"enum":["RS256"]},"vault":{"properties":{},"type":"object"}},"required":["vault"]}]}},"properties":{"algorithm":{"default":"HS256","enum":["HS256","HS512","RS256"],"type":"string"}," [...]
 			Sleep:        base.SleepTime,
 		}),
-		table.Entry("get schema of plugin `require-id`", base.HttpTestCase{
+		Entry("get route schema of plugin", base.HttpTestCase{
 			Object:       base.ManagerApiExpect(),
 			Method:       http.MethodGet,
 			Path:         "/apisix/admin/schema/plugins/jwt-auth",
 			Headers:      map[string]string{"Authorization": base.GetToken()},
 			ExpectStatus: http.StatusOK,
-			ExpectBody:   `{"$comment":"this is a mark for our injected plugin schema","properties":{"cookie":{"default":"jwt","type":"string"},"disable":{"type":"boolean"},"header":{"default":"authorization","type":"string"},"query":{"default":"jwt","type":"string"}}`,
+			ExpectBody:   `{"$comment":"this is a mark for our injected plugin schema","properties":{"_meta":{"properties":{"error_response":{"oneOf":[{"type":"string"},{"type":"object"}]},"filter":{"description":"filter determines whether the plugin needs to be executed at runtime","items":{"type":"array"},"maxItems":20,"type":"array"},"priority":{"description":"priority of plugins by customized order","type":"integer"}},"type":"object"},"cookie":{"default":"jwt","type":"string"},"disable":{"typ [...]
 			Sleep:        base.SleepTime,
 		}),
-		table.Entry("get schema of non-existent plugin", base.HttpTestCase{
+		Entry("get schema of non-existent plugin", base.HttpTestCase{
 			Object:       base.ManagerApiExpect(),
 			Method:       http.MethodGet,
 			Path:         "/apisix/admin/schema/plugins/non-existent",
@@ -57,7 +57,7 @@ var _ = ginkgo.Describe("Schema Test", func() {
 			ExpectBody:   `schema of plugins non-existent not found`,
 			Sleep:        base.SleepTime,
 		}),
-		table.Entry("get schema of consumer", base.HttpTestCase{
+		Entry("get schema of consumer", base.HttpTestCase{
 			Object:       base.ManagerApiExpect(),
 			Method:       http.MethodGet,
 			Path:         "/apisix/admin/schemas/consumer",
@@ -66,7 +66,7 @@ var _ = ginkgo.Describe("Schema Test", func() {
 			ExpectBody:   `"properties":{"create_time":{"type":"integer"},"desc":{"maxLength":256,"type":"string"},"labels":{"description":"key/value pairs to specify attributes","patternProperties":{".*":{"description":"value of label","maxLength":64,"minLength":1,"pattern":"^\\S+$","type":"string"}},"type":"object"},"plugins":{"type":"object"},"update_time":{"type":"integer"},"username":{"maxLength":100,"minLength":1,"pattern":"^[a-zA-Z0-9_]+$","type":"string"}}`,
 			Sleep:        base.SleepTime,
 		}),
-		table.Entry("get schema of non-existent resources", base.HttpTestCase{
+		Entry("get schema of non-existent resources", base.HttpTestCase{
 			Object:       base.ManagerApiExpect(),
 			Method:       http.MethodGet,
 			Path:         "/apisix/admin/schemas/non-existent",
diff --git a/web/src/components/Plugin/data.tsx b/web/src/components/Plugin/data.tsx
index 7b1d49970..cd0adf40f 100644
--- a/web/src/components/Plugin/data.tsx
+++ b/web/src/components/Plugin/data.tsx
@@ -78,234 +78,242 @@ export enum PluginType {
  * Plugin List that contains type field
  */
 export const PLUGIN_LIST = {
-  'hmac-auth': {
-    type: PluginType.authentication,
-  },
-  'serverless-post-function': {
-    type: PluginType.serverless,
-  },
-  'mqtt-proxy': {
-    type: PluginType.other,
-    hidden: true,
+  'api-breaker': {
+    type: PluginType.security,
   },
-  'response-rewrite': {
-    type: PluginType.other,
+  'authz-casbin': {
+    type: PluginType.authentication,
   },
-  'basic-auth': {
+  'authz-casdoor': {
     type: PluginType.authentication,
   },
-  'error-log-logger': {
-    type: PluginType.observability,
+  'authz-keycloak': {
+    type: PluginType.authentication,
   },
-  'fault-injection': {
-    type: PluginType.security,
+  'aws-lambda': {
+    type: PluginType.serverless,
   },
-  'limit-count': {
-    type: PluginType.traffic,
+  'azure-functions': {
+    type: PluginType.serverless,
   },
-  prometheus: {
-    type: PluginType.observability,
+  'basic-auth': {
+    type: PluginType.authentication,
   },
-  'proxy-rewrite': {
+  'batch-requests': {
     type: PluginType.other,
+    hidden: true,
   },
-  syslog: {
+  'clickhouse-logger': {
     type: PluginType.observability,
   },
-  'traffic-split': {
+  'client-control': {
     type: PluginType.traffic,
   },
-  'jwt-auth': {
-    type: PluginType.authentication,
+  'consumer-restriction': {
+    type: PluginType.security,
   },
-  'kafka-logger': {
-    type: PluginType.observability,
+  cors: {
+    type: PluginType.security,
   },
-  'limit-conn': {
-    type: PluginType.traffic,
+  csrf: {
+    type: PluginType.security,
   },
-  'udp-logger': {
+  datadog: {
     type: PluginType.observability,
   },
-  zipkin: {
-    type: PluginType.observability,
+  'dubbo-proxy': {
+    type: PluginType.other,
+    hidden: true,
   },
   echo: {
     type: PluginType.other,
     hidden: true,
   },
-  'log-rotate': {
+  'error-log-logger': {
     type: PluginType.observability,
     hidden: true,
   },
-  'serverless-pre-function': {
-    type: PluginType.serverless,
-  },
-  'dubbo-proxy': {
+  'example-plugin': {
     type: PluginType.other,
     hidden: true,
   },
-  'node-status': {
+  'ext-plugin-post-req': {
     type: PluginType.other,
-    hidden: true,
   },
-  'referer-restriction': {
-    type: PluginType.security,
+  'ext-plugin-post-resp': {
+    type: PluginType.other,
   },
-  'api-breaker': {
-    type: PluginType.security,
+  'ext-plugin-pre-req': {
+    type: PluginType.other,
   },
-  'consumer-restriction': {
+  'fault-injection': {
     type: PluginType.security,
   },
-  cors: {
-    type: PluginType.security,
+  'file-logger': {
+    type: PluginType.observability,
   },
-  'limit-req': {
-    type: PluginType.traffic,
+  'forward-auth': {
+    type: PluginType.authentication,
   },
-  'proxy-mirror': {
+  'google-cloud-logging': {
+    type: PluginType.observability,
+  },
+  'grpc-transcode': {
     type: PluginType.other,
   },
-  'request-validation': {
-    type: PluginType.security,
+  'grpc-web': {
+    type: PluginType.other,
   },
-  'example-plugin': {
+  gzip: {
     type: PluginType.other,
-    hidden: true,
+  },
+  'hmac-auth': {
+    type: PluginType.authentication,
+  },
+  'http-logger': {
+    type: PluginType.observability,
   },
   'ip-restriction': {
     type: PluginType.security,
   },
-  'key-auth': {
+  'jwt-auth': {
     type: PluginType.authentication,
   },
-  'proxy-cache': {
-    type: PluginType.other,
+  'kafka-logger': {
+    type: PluginType.observability,
   },
-  redirect: {
+  'kafka-proxy': {
     type: PluginType.other,
-    hidden: true,
   },
-  'request-id': {
+  'key-auth': {
+    type: PluginType.authentication,
+  },
+  'ldap-auth': {
+    type: PluginType.authentication,
+  },
+  'limit-conn': {
+    type: PluginType.traffic,
+  },
+  'limit-count': {
+    type: PluginType.traffic,
+  },
+  'limit-req': {
+    type: PluginType.traffic,
+  },
+  loggly: {
     type: PluginType.observability,
   },
-  skywalking: {
+  'log-rotate': {
     type: PluginType.observability,
+    hidden: true,
   },
-  'batch-requests': {
+  mocking: {
     type: PluginType.other,
   },
-  'http-logger': {
-    type: PluginType.observability,
+  'node-status': {
+    type: PluginType.other,
+    hidden: true,
+  },
+  opa: {
+    type: PluginType.authentication,
   },
   'openid-connect': {
     type: PluginType.authentication,
   },
-  'sls-logger': {
+  opentelemetry: {
     type: PluginType.observability,
   },
-  'tcp-logger': {
-    type: PluginType.observability,
+  openwhisk: {
+    type: PluginType.serverless,
   },
-  'uri-blocker': {
-    type: PluginType.security,
+  prometheus: {
+    type: PluginType.observability,
   },
-  'wolf-rbac': {
-    type: PluginType.authentication,
+  'proxy-cache': {
+    type: PluginType.other,
   },
-  'authz-keycloak': {
-    type: PluginType.authentication,
+  'proxy-control': {
+    type: PluginType.other,
   },
-  'grpc-transcode': {
+  'proxy-mirror': {
     type: PluginType.other,
   },
-  'server-info': {
+  'proxy-rewrite': {
     type: PluginType.other,
-    hidden: true,
   },
-  'authz-casbin': {
-    type: PluginType.authentication,
+  'public-api': {
+    type: PluginType.security,
   },
-  'ldap-auth': {
-    type: PluginType.authentication,
+  'real-ip': {
+    type: PluginType.other,
   },
-  datadog: {
-    type: PluginType.observability,
+  redirect: {
+    type: PluginType.other,
+    hidden: true,
   },
-  'skywalking-logger': {
-    type: PluginType.observability,
+  'referer-restriction': {
+    type: PluginType.security,
   },
-  'azure-functions': {
-    type: PluginType.serverless,
+  'request-id': {
+    type: PluginType.observability,
   },
-  'ua-restriction': {
+  'request-validation': {
     type: PluginType.security,
   },
-  'splunk-hec-logging': {
-    type: PluginType.observability,
+  'response-rewrite': {
+    type: PluginType.other,
   },
   'rocketmq-logger': {
     type: PluginType.observability,
   },
-  'proxy-control': {
+  'server-info': {
     type: PluginType.other,
+    hidden: true,
   },
-  openwhisk: {
+  'serverless-post-function': {
     type: PluginType.serverless,
   },
-  opa: {
-    type: PluginType.authentication,
+  'serverless-pre-function': {
+    type: PluginType.serverless,
   },
-  'grpc-web': {
-    type: PluginType.other,
+  skywalking: {
+    type: PluginType.observability,
   },
-  'google-cloud-logging': {
+  'skywalking-logger': {
     type: PluginType.observability,
   },
-  'forward-auth': {
-    type: PluginType.authentication,
+  'sls-logger': {
+    type: PluginType.observability,
   },
-  'aws-lambda': {
-    type: PluginType.serverless,
+  'splunk-hec-logging': {
+    type: PluginType.observability,
   },
-  'clickhouse-logger': {
+  syslog: {
     type: PluginType.observability,
   },
-  'client-control': {
+  'tcp-logger': {
+    type: PluginType.observability,
+  },
+  'traffic-split': {
     type: PluginType.traffic,
   },
-  csrf: {
+  'ua-restriction': {
     type: PluginType.security,
   },
-  'ext-plugin-post-req': {
-    type: PluginType.other,
-  },
-  'ext-plugin-pre-req': {
-    type: PluginType.other,
-  },
-  'file-logger': {
-    type: PluginType.observability,
-  },
-  gzip: {
-    type: PluginType.other,
-  },
-  loggly: {
+  'udp-logger': {
     type: PluginType.observability,
   },
-  'public-api': {
+  'uri-blocker': {
     type: PluginType.security,
   },
-  'real-ip': {
-    type: PluginType.other,
-  },
-  'authz-casdoor': {
+  'wolf-rbac': {
     type: PluginType.authentication,
   },
-  mocking: {
-    type: PluginType.other,
-  },
-  opentelemetry: {
+  zipkin: {
     type: PluginType.observability,
   },
+  'mqtt-proxy': {
+    type: PluginType.other,
+    hidden: true,
+  },
 };