gitextract_li5ku6pd/ ├── .gitmodules ├── .ignore_words ├── .licenserc.yaml ├── .markdownlint.yml ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CODE_STYLE.md ├── CONTRIBUTING.md ├── LICENSE ├── MAINTAIN.md ├── Makefile ├── NOTICE ├── README.md ├── THREAT_MODEL.md ├── Vision-and-Milestones.md ├── apisix/ │ ├── admin/ │ │ ├── consumer_group.lua │ │ ├── consumers.lua │ │ ├── credentials.lua │ │ ├── global_rules.lua │ │ ├── init.lua │ │ ├── plugin_config.lua │ │ ├── plugin_metadata.lua │ │ ├── plugins.lua │ │ ├── proto.lua │ │ ├── resource.lua │ │ ├── routes.lua │ │ ├── schema.lua │ │ ├── secrets.lua │ │ ├── services.lua │ │ ├── ssl.lua │ │ ├── standalone.lua │ │ ├── stream_routes.lua │ │ ├── upstreams.lua │ │ ├── utils.lua │ │ └── v3_adapter.lua │ ├── api_router.lua │ ├── balancer/ │ │ ├── chash.lua │ │ ├── ewma.lua │ │ ├── least_conn.lua │ │ ├── priority.lua │ │ └── roundrobin.lua │ ├── balancer.lua │ ├── cli/ │ │ ├── apisix.lua │ │ ├── config.lua │ │ ├── env.lua │ │ ├── etcd.lua │ │ ├── file.lua │ │ ├── ip.lua │ │ ├── ngx_tpl.lua │ │ ├── ops.lua │ │ ├── schema.lua │ │ └── util.lua │ ├── constants.lua │ ├── consumer.lua │ ├── consumer_group.lua │ ├── control/ │ │ ├── router.lua │ │ └── v1.lua │ ├── core/ │ │ ├── config_etcd.lua │ │ ├── config_local.lua │ │ ├── config_util.lua │ │ ├── config_xds.lua │ │ ├── config_yaml.lua │ │ ├── ctx.lua │ │ ├── dns/ │ │ │ └── client.lua │ │ ├── env.lua │ │ ├── etcd.lua │ │ ├── event.lua │ │ ├── id.lua │ │ ├── io.lua │ │ ├── ip.lua │ │ ├── json.lua │ │ ├── log.lua │ │ ├── lrucache.lua │ │ ├── math.lua │ │ ├── os.lua │ │ ├── profile.lua │ │ ├── pubsub.lua │ │ ├── request.lua │ │ ├── resolver.lua │ │ ├── response.lua │ │ ├── schema.lua │ │ ├── string.lua │ │ ├── table.lua │ │ ├── timer.lua │ │ ├── utils.lua │ │ └── version.lua │ ├── core.lua │ ├── debug.lua │ ├── discovery/ │ │ ├── consul/ │ │ │ ├── init.lua │ │ │ └── schema.lua │ │ ├── consul_kv/ │ │ │ ├── init.lua │ │ │ └── schema.lua │ │ ├── dns/ │ │ │ ├── init.lua │ │ │ └── schema.lua │ │ ├── eureka/ │ │ │ ├── init.lua │ │ │ └── schema.lua │ │ ├── init.lua │ │ ├── kubernetes/ │ │ │ ├── informer_factory.lua │ │ │ ├── init.lua │ │ │ └── schema.lua │ │ ├── nacos/ │ │ │ ├── init.lua │ │ │ └── schema.lua │ │ └── tars/ │ │ ├── init.lua │ │ └── schema.lua │ ├── events.lua │ ├── global_rules.lua │ ├── healthcheck_manager.lua │ ├── http/ │ │ ├── route.lua │ │ ├── router/ │ │ │ ├── radixtree_host_uri.lua │ │ │ ├── radixtree_uri.lua │ │ │ └── radixtree_uri_with_parameter.lua │ │ └── service.lua │ ├── include/ │ │ └── apisix/ │ │ └── model/ │ │ └── pubsub.proto │ ├── init.lua │ ├── inspect/ │ │ ├── dbg.lua │ │ └── init.lua │ ├── patch.lua │ ├── plugin.lua │ ├── plugin_config.lua │ ├── plugins/ │ │ ├── ai-aliyun-content-moderation.lua │ │ ├── ai-aws-content-moderation.lua │ │ ├── ai-drivers/ │ │ │ ├── aimlapi.lua │ │ │ ├── anthropic.lua │ │ │ ├── azure-openai.lua │ │ │ ├── deepseek.lua │ │ │ ├── gemini.lua │ │ │ ├── openai-base.lua │ │ │ ├── openai-compatible.lua │ │ │ ├── openai.lua │ │ │ ├── openrouter.lua │ │ │ ├── schema.lua │ │ │ ├── sse.lua │ │ │ └── vertex-ai.lua │ │ ├── ai-prompt-decorator.lua │ │ ├── ai-prompt-guard.lua │ │ ├── ai-prompt-template.lua │ │ ├── ai-proxy/ │ │ │ ├── base.lua │ │ │ └── schema.lua │ │ ├── ai-proxy-multi.lua │ │ ├── ai-proxy.lua │ │ ├── ai-rag/ │ │ │ ├── embeddings/ │ │ │ │ └── azure_openai.lua │ │ │ └── vector-search/ │ │ │ └── azure_ai_search.lua │ │ ├── ai-rag.lua │ │ ├── ai-rate-limiting.lua │ │ ├── ai-request-rewrite.lua │ │ ├── ai.lua │ │ ├── api-breaker.lua │ │ ├── attach-consumer-label.lua │ │ ├── authz-casbin.lua │ │ ├── authz-casdoor.lua │ │ ├── authz-keycloak.lua │ │ ├── aws-lambda.lua │ │ ├── azure-functions.lua │ │ ├── basic-auth.lua │ │ ├── batch-requests.lua │ │ ├── body-transformer.lua │ │ ├── brotli.lua │ │ ├── cas-auth.lua │ │ ├── chaitin-waf.lua │ │ ├── clickhouse-logger.lua │ │ ├── client-control.lua │ │ ├── consumer-restriction.lua │ │ ├── cors.lua │ │ ├── csrf.lua │ │ ├── datadog.lua │ │ ├── degraphql.lua │ │ ├── dubbo-proxy.lua │ │ ├── echo.lua │ │ ├── elasticsearch-logger.lua │ │ ├── error-log-logger.lua │ │ ├── example-plugin.lua │ │ ├── ext-plugin/ │ │ │ ├── helper.lua │ │ │ └── init.lua │ │ ├── ext-plugin-post-req.lua │ │ ├── ext-plugin-post-resp.lua │ │ ├── ext-plugin-pre-req.lua │ │ ├── fault-injection.lua │ │ ├── file-logger.lua │ │ ├── forward-auth.lua │ │ ├── gm.lua │ │ ├── google-cloud-logging.lua │ │ ├── grpc-transcode/ │ │ │ ├── proto.lua │ │ │ ├── request.lua │ │ │ ├── response.lua │ │ │ └── util.lua │ │ ├── grpc-transcode.lua │ │ ├── grpc-web.lua │ │ ├── gzip.lua │ │ ├── hmac-auth.lua │ │ ├── http-dubbo.lua │ │ ├── http-logger.lua │ │ ├── inspect.lua │ │ ├── ip-restriction/ │ │ │ └── init.lua │ │ ├── ip-restriction.lua │ │ ├── jwe-decrypt.lua │ │ ├── jwt-auth/ │ │ │ └── parser.lua │ │ ├── jwt-auth.lua │ │ ├── kafka-logger.lua │ │ ├── kafka-proxy.lua │ │ ├── key-auth.lua │ │ ├── lago.lua │ │ ├── ldap-auth.lua │ │ ├── limit-conn/ │ │ │ ├── init.lua │ │ │ ├── limit-conn-redis-cluster.lua │ │ │ ├── limit-conn-redis.lua │ │ │ └── util.lua │ │ ├── limit-conn.lua │ │ ├── limit-count/ │ │ │ ├── init.lua │ │ │ ├── limit-count-local.lua │ │ │ ├── limit-count-redis-cluster.lua │ │ │ └── limit-count-redis.lua │ │ ├── limit-count.lua │ │ ├── limit-req/ │ │ │ ├── limit-req-redis-cluster.lua │ │ │ ├── limit-req-redis.lua │ │ │ └── util.lua │ │ ├── limit-req.lua │ │ ├── log-rotate.lua │ │ ├── loggly.lua │ │ ├── loki-logger.lua │ │ ├── mcp/ │ │ │ ├── broker/ │ │ │ │ ├── shared_dict.lua │ │ │ │ └── utils.lua │ │ │ ├── server.lua │ │ │ ├── server_wrapper.lua │ │ │ └── transport/ │ │ │ └── sse.lua │ │ ├── mcp-bridge.lua │ │ ├── mocking.lua │ │ ├── multi-auth.lua │ │ ├── node-status.lua │ │ ├── ocsp-stapling.lua │ │ ├── opa/ │ │ │ └── helper.lua │ │ ├── opa.lua │ │ ├── openfunction.lua │ │ ├── openid-connect.lua │ │ ├── opentelemetry.lua │ │ ├── openwhisk.lua │ │ ├── prometheus/ │ │ │ └── exporter.lua │ │ ├── prometheus.lua │ │ ├── proxy-cache/ │ │ │ ├── disk_handler.lua │ │ │ ├── init.lua │ │ │ ├── memory.lua │ │ │ ├── memory_handler.lua │ │ │ └── util.lua │ │ ├── proxy-control.lua │ │ ├── proxy-mirror.lua │ │ ├── proxy-rewrite.lua │ │ ├── public-api.lua │ │ ├── real-ip.lua │ │ ├── redirect.lua │ │ ├── referer-restriction.lua │ │ ├── request-id.lua │ │ ├── request-validation.lua │ │ ├── response-rewrite.lua │ │ ├── rocketmq-logger.lua │ │ ├── server-info.lua │ │ ├── serverless/ │ │ │ ├── generic-upstream.lua │ │ │ └── init.lua │ │ ├── serverless-post-function.lua │ │ ├── serverless-pre-function.lua │ │ ├── skywalking-logger.lua │ │ ├── skywalking.lua │ │ ├── sls-logger.lua │ │ ├── splunk-hec-logging.lua │ │ ├── syslog/ │ │ │ └── init.lua │ │ ├── syslog.lua │ │ ├── tcp-logger.lua │ │ ├── tencent-cloud-cls/ │ │ │ └── cls-sdk.lua │ │ ├── tencent-cloud-cls.lua │ │ ├── traffic-split.lua │ │ ├── ua-restriction.lua │ │ ├── udp-logger.lua │ │ ├── uri-blocker.lua │ │ ├── wolf-rbac.lua │ │ ├── workflow.lua │ │ ├── zipkin/ │ │ │ ├── codec.lua │ │ │ ├── random_sampler.lua │ │ │ └── reporter.lua │ │ └── zipkin.lua │ ├── pubsub/ │ │ └── kafka.lua │ ├── resource.lua │ ├── router.lua │ ├── schema_def.lua │ ├── script.lua │ ├── secret/ │ │ ├── aws.lua │ │ ├── gcp.lua │ │ └── vault.lua │ ├── secret.lua │ ├── ssl/ │ │ └── router/ │ │ └── radixtree_sni.lua │ ├── ssl.lua │ ├── stream/ │ │ ├── plugins/ │ │ │ ├── ip-restriction.lua │ │ │ ├── limit-conn.lua │ │ │ ├── mqtt-proxy.lua │ │ │ ├── prometheus.lua │ │ │ ├── syslog.lua │ │ │ └── traffic-split.lua │ │ ├── router/ │ │ │ └── ip_port.lua │ │ ├── xrpc/ │ │ │ ├── metrics.lua │ │ │ ├── protocols/ │ │ │ │ ├── dubbo/ │ │ │ │ │ ├── init.lua │ │ │ │ │ └── schema.lua │ │ │ │ └── redis/ │ │ │ │ ├── commands.lua │ │ │ │ ├── init.lua │ │ │ │ ├── metrics.lua │ │ │ │ └── schema.lua │ │ │ ├── runner.lua │ │ │ └── sdk.lua │ │ └── xrpc.lua │ ├── timers.lua │ ├── tracer.lua │ ├── upstream.lua │ ├── utils/ │ │ ├── auth.lua │ │ ├── batch-processor-manager.lua │ │ ├── batch-processor.lua │ │ ├── content-decode.lua │ │ ├── google-cloud-oauth.lua │ │ ├── log-util.lua │ │ ├── noop_span.lua │ │ ├── redis-schema.lua │ │ ├── redis.lua │ │ ├── rediscluster.lua │ │ ├── rfc5424.lua │ │ ├── router.lua │ │ ├── span.lua │ │ ├── trusted-addresses.lua │ │ └── upstream.lua │ └── wasm.lua ├── apisix-master-0.rockspec ├── autodocs/ │ ├── config.ld │ ├── generate.sh │ └── ldoc.ltp ├── benchmark/ │ ├── fake-apisix/ │ │ ├── conf/ │ │ │ ├── cert/ │ │ │ │ ├── apisix.crt │ │ │ │ ├── apisix.key │ │ │ │ └── openssl.conf │ │ │ └── nginx.conf │ │ └── lua/ │ │ └── apisix.lua │ ├── run.sh │ └── server/ │ └── conf/ │ └── nginx.conf ├── bin/ │ └── apisix ├── ci/ │ ├── backup-docker-images.sh │ ├── check_changelog_prs.ts │ ├── common.sh │ ├── free_disk_space.sh │ ├── init-common-test-service.sh │ ├── init-last-test-service.sh │ ├── init-plugin-test-service.sh │ ├── kubernetes-ci.sh │ ├── linux-install-etcd-client.sh │ ├── linux-install-openresty.sh │ ├── linux_apisix_current_luarocks_in_customed_nginx_runner.sh │ ├── linux_apisix_current_luarocks_runner.sh │ ├── linux_openresty_common_runner.sh │ ├── linux_openresty_runner.sh │ ├── linux_openresty_tongsuo_runner.sh │ ├── pod/ │ │ ├── docker-compose.common.yml │ │ ├── docker-compose.first.yml │ │ ├── docker-compose.last.yml │ │ ├── docker-compose.plugin.yml │ │ ├── etcd/ │ │ │ └── env/ │ │ │ └── common.env │ │ ├── eureka/ │ │ │ └── env/ │ │ │ └── common.env │ │ ├── kafka/ │ │ │ ├── kafka-server/ │ │ │ │ ├── env/ │ │ │ │ │ ├── common.env │ │ │ │ │ ├── common2.env │ │ │ │ │ ├── common3-scram.env │ │ │ │ │ └── last.env │ │ │ │ ├── kafka_jaas.conf │ │ │ │ └── kafka_scram_jaas.conf │ │ │ └── zookeeper-server/ │ │ │ └── env/ │ │ │ └── common.env │ │ ├── keycloak/ │ │ │ ├── kcadm_configure_basic.sh │ │ │ ├── kcadm_configure_cas.sh │ │ │ ├── kcadm_configure_university.sh │ │ │ ├── server.crt.pem │ │ │ └── server.key.pem │ │ ├── nacos/ │ │ │ ├── env/ │ │ │ │ ├── common.env │ │ │ │ └── service.env │ │ │ ├── healthcheck/ │ │ │ │ ├── Dockerfile │ │ │ │ ├── nacos-server-healthcheck.sh │ │ │ │ └── nacos-service-healthcheck.sh │ │ │ └── service/ │ │ │ └── Dockerfile │ │ ├── opa/ │ │ │ ├── data.json │ │ │ ├── echo.rego │ │ │ ├── example.rego │ │ │ └── with_route.rego │ │ ├── openfunction/ │ │ │ ├── build-function-image.sh │ │ │ └── function-example/ │ │ │ ├── test-body/ │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ └── hello.go │ │ │ ├── test-header/ │ │ │ │ ├── go.mod │ │ │ │ └── hello.go │ │ │ └── test-uri/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── hello.go │ │ ├── otelcol-contrib/ │ │ │ └── config.yaml │ │ └── vector/ │ │ └── vector.toml │ ├── prepare_filesystem_mcp.sh │ ├── redhat-ci.sh │ └── tars-ci.sh ├── conf/ │ ├── cert/ │ │ ├── ssl_PLACE_HOLDER.crt │ │ └── ssl_PLACE_HOLDER.key │ ├── config.yaml │ ├── config.yaml.example │ ├── debug.yaml │ └── mime.types ├── docker/ │ ├── compose/ │ │ ├── apisix_conf/ │ │ │ └── master/ │ │ │ └── config.yaml │ │ └── docker-compose-master.yaml │ └── debian-dev/ │ ├── Dockerfile │ ├── docker-entrypoint.sh │ └── install-brotli.sh ├── docs/ │ ├── assets/ │ │ └── other/ │ │ ├── apisix-plugin-design.graffle │ │ └── json/ │ │ └── apisix-grafana-dashboard.json │ ├── en/ │ │ └── latest/ │ │ ├── FAQ.md │ │ ├── admin-api.md │ │ ├── apisix-variable.md │ │ ├── architecture-design/ │ │ │ └── apisix.md │ │ ├── aws.md │ │ ├── batch-processor.md │ │ ├── benchmark.md │ │ ├── build-apisix-dev-environment-devcontainers.md │ │ ├── build-apisix-dev-environment-on-mac.md │ │ ├── building-apisix.md │ │ ├── certificate.md │ │ ├── config.json │ │ ├── control-api.md │ │ ├── customize-nginx-configuration.md │ │ ├── dashboard.md │ │ ├── debug-function.md │ │ ├── debug-mode.md │ │ ├── deployment-modes.md │ │ ├── discovery/ │ │ │ ├── consul.md │ │ │ ├── consul_kv.md │ │ │ ├── control-plane-service-discovery.md │ │ │ ├── dns.md │ │ │ ├── eureka.md │ │ │ ├── kubernetes.md │ │ │ └── nacos.md │ │ ├── discovery.md │ │ ├── examples/ │ │ │ └── plugins-hmac-auth-generate-signature.md │ │ ├── external-plugin.md │ │ ├── getting-started/ │ │ │ ├── README.md │ │ │ ├── configure-routes.md │ │ │ ├── key-authentication.md │ │ │ ├── load-balancing.md │ │ │ └── rate-limiting.md │ │ ├── grpc-proxy.md │ │ ├── http3.md │ │ ├── install-dependencies.md │ │ ├── installation-guide.md │ │ ├── internal/ │ │ │ ├── plugin-runner.md │ │ │ └── testing-framework.md │ │ ├── mtls.md │ │ ├── plugin-develop.md │ │ ├── plugins/ │ │ │ ├── ai-aliyun-content-moderation.md │ │ │ ├── ai-aws-content-moderation.md │ │ │ ├── ai-prompt-decorator.md │ │ │ ├── ai-prompt-guard.md │ │ │ ├── ai-prompt-template.md │ │ │ ├── ai-proxy-multi.md │ │ │ ├── ai-proxy.md │ │ │ ├── ai-rag.md │ │ │ ├── ai-rate-limiting.md │ │ │ ├── ai-request-rewrite.md │ │ │ ├── api-breaker.md │ │ │ ├── attach-consumer-label.md │ │ │ ├── authz-casbin.md │ │ │ ├── authz-casdoor.md │ │ │ ├── authz-keycloak.md │ │ │ ├── aws-lambda.md │ │ │ ├── azure-functions.md │ │ │ ├── basic-auth.md │ │ │ ├── batch-requests.md │ │ │ ├── body-transformer.md │ │ │ ├── brotli.md │ │ │ ├── cas-auth.md │ │ │ ├── chaitin-waf.md │ │ │ ├── clickhouse-logger.md │ │ │ ├── client-control.md │ │ │ ├── consumer-restriction.md │ │ │ ├── cors.md │ │ │ ├── csrf.md │ │ │ ├── datadog.md │ │ │ ├── degraphql.md │ │ │ ├── dubbo-proxy.md │ │ │ ├── echo.md │ │ │ ├── elasticsearch-logger.md │ │ │ ├── error-log-logger.md │ │ │ ├── ext-plugin-post-req.md │ │ │ ├── ext-plugin-post-resp.md │ │ │ ├── ext-plugin-pre-req.md │ │ │ ├── fault-injection.md │ │ │ ├── file-logger.md │ │ │ ├── forward-auth.md │ │ │ ├── gm.md │ │ │ ├── google-cloud-logging.md │ │ │ ├── grpc-transcode.md │ │ │ ├── grpc-web.md │ │ │ ├── gzip.md │ │ │ ├── hmac-auth.md │ │ │ ├── http-dubbo.md │ │ │ ├── http-logger.md │ │ │ ├── inspect.md │ │ │ ├── ip-restriction.md │ │ │ ├── jwe-decrypt.md │ │ │ ├── jwt-auth.md │ │ │ ├── kafka-logger.md │ │ │ ├── kafka-proxy.md │ │ │ ├── key-auth.md │ │ │ ├── lago.md │ │ │ ├── ldap-auth.md │ │ │ ├── limit-conn.md │ │ │ ├── limit-count.md │ │ │ ├── limit-req.md │ │ │ ├── log-rotate.md │ │ │ ├── loggly.md │ │ │ ├── loki-logger.md │ │ │ ├── mocking.md │ │ │ ├── mqtt-proxy.md │ │ │ ├── multi-auth.md │ │ │ ├── node-status.md │ │ │ ├── ocsp-stapling.md │ │ │ ├── opa.md │ │ │ ├── openfunction.md │ │ │ ├── openid-connect.md │ │ │ ├── opentelemetry.md │ │ │ ├── openwhisk.md │ │ │ ├── prometheus.md │ │ │ ├── proxy-cache.md │ │ │ ├── proxy-control.md │ │ │ ├── proxy-mirror.md │ │ │ ├── proxy-rewrite.md │ │ │ ├── public-api.md │ │ │ ├── real-ip.md │ │ │ ├── redirect.md │ │ │ ├── referer-restriction.md │ │ │ ├── request-id.md │ │ │ ├── request-validation.md │ │ │ ├── response-rewrite.md │ │ │ ├── rocketmq-logger.md │ │ │ ├── server-info.md │ │ │ ├── serverless.md │ │ │ ├── skywalking-logger.md │ │ │ ├── skywalking.md │ │ │ ├── sls-logger.md │ │ │ ├── splunk-hec-logging.md │ │ │ ├── syslog.md │ │ │ ├── tcp-logger.md │ │ │ ├── tencent-cloud-cls.md │ │ │ ├── traffic-split.md │ │ │ ├── ua-restriction.md │ │ │ ├── udp-logger.md │ │ │ ├── uri-blocker.md │ │ │ ├── wolf-rbac.md │ │ │ ├── workflow.md │ │ │ └── zipkin.md │ │ ├── profile.md │ │ ├── pubsub/ │ │ │ └── kafka.md │ │ ├── pubsub.md │ │ ├── router-radixtree.md │ │ ├── ssl-protocol.md │ │ ├── status-api.md │ │ ├── stream-proxy.md │ │ ├── support-fips-in-apisix.md │ │ ├── terminology/ │ │ │ ├── api-gateway.md │ │ │ ├── consumer-group.md │ │ │ ├── consumer.md │ │ │ ├── credential.md │ │ │ ├── global-rule.md │ │ │ ├── plugin-config.md │ │ │ ├── plugin-metadata.md │ │ │ ├── plugin.md │ │ │ ├── route.md │ │ │ ├── router.md │ │ │ ├── script.md │ │ │ ├── secret.md │ │ │ ├── service.md │ │ │ └── upstream.md │ │ ├── tutorials/ │ │ │ ├── add-multiple-api-versions.md │ │ │ ├── cache-api-responses.md │ │ │ ├── client-to-apisix-mtls.md │ │ │ ├── expose-api.md │ │ │ ├── health-check.md │ │ │ ├── keycloak-oidc.md │ │ │ ├── manage-api-consumers.md │ │ │ ├── monitor-api-health-check.md │ │ │ ├── observe-your-api.md │ │ │ ├── protect-api.md │ │ │ └── websocket-authentication.md │ │ ├── upgrade-guide-from-2.15.x-to-3.0.0.md │ │ ├── wasm.md │ │ ├── xrpc/ │ │ │ └── redis.md │ │ └── xrpc.md │ └── zh/ │ └── latest/ │ ├── CHANGELOG.md │ ├── CODE_STYLE.md │ ├── FAQ.md │ ├── README.md │ ├── admin-api.md │ ├── apisix-variable.md │ ├── architecture-design/ │ │ └── apisix.md │ ├── batch-processor.md │ ├── benchmark.md │ ├── build-apisix-dev-environment-on-mac.md │ ├── building-apisix.md │ ├── certificate.md │ ├── config.json │ ├── control-api.md │ ├── customize-nginx-configuration.md │ ├── dashboard.md │ ├── debug-function.md │ ├── debug-mode.md │ ├── discovery/ │ │ ├── control-plane-service-discovery.md │ │ ├── dns.md │ │ ├── eureka.md │ │ ├── kubernetes.md │ │ └── nacos.md │ ├── discovery.md │ ├── external-plugin.md │ ├── getting-started/ │ │ ├── README.md │ │ ├── configure-routes.md │ │ ├── key-authentication.md │ │ ├── load-balancing.md │ │ └── rate-limiting.md │ ├── grpc-proxy.md │ ├── http3.md │ ├── install-dependencies.md │ ├── installation-guide.md │ ├── mtls.md │ ├── plugin-develop.md │ ├── plugins/ │ │ ├── ai-aliyun-content-moderation.md │ │ ├── ai-aws-content-moderation.md │ │ ├── ai-prompt-decorator.md │ │ ├── ai-prompt-guard.md │ │ ├── ai-prompt-template.md │ │ ├── ai-proxy-multi.md │ │ ├── ai-proxy.md │ │ ├── ai-rag.md │ │ ├── ai-rate-limiting.md │ │ ├── ai-request-rewrite.md │ │ ├── api-breaker.md │ │ ├── attach-consumer-label.md │ │ ├── authz-casbin.md │ │ ├── authz-casdoor.md │ │ ├── authz-keycloak.md │ │ ├── aws-lambda.md │ │ ├── azure-functions.md │ │ ├── basic-auth.md │ │ ├── batch-requests.md │ │ ├── body-transformer.md │ │ ├── brotli.md │ │ ├── chaitin-waf.md │ │ ├── clickhouse-logger.md │ │ ├── client-control.md │ │ ├── consumer-restriction.md │ │ ├── cors.md │ │ ├── csrf.md │ │ ├── datadog.md │ │ ├── dubbo-proxy.md │ │ ├── echo.md │ │ ├── elasticsearch-logger.md │ │ ├── error-log-logger.md │ │ ├── ext-plugin-post-req.md │ │ ├── ext-plugin-post-resp.md │ │ ├── ext-plugin-pre-req.md │ │ ├── fault-injection.md │ │ ├── file-logger.md │ │ ├── forward-auth.md │ │ ├── gm.md │ │ ├── google-cloud-logging.md │ │ ├── grpc-transcode.md │ │ ├── grpc-web.md │ │ ├── gzip.md │ │ ├── hmac-auth.md │ │ ├── http-dubbo.md │ │ ├── http-logger.md │ │ ├── ip-restriction.md │ │ ├── jwe-decrypt.md │ │ ├── jwt-auth.md │ │ ├── kafka-logger.md │ │ ├── key-auth.md │ │ ├── ldap-auth.md │ │ ├── limit-conn.md │ │ ├── limit-count.md │ │ ├── limit-req.md │ │ ├── log-rotate.md │ │ ├── loggly.md │ │ ├── loki-logger.md │ │ ├── mocking.md │ │ ├── mqtt-proxy.md │ │ ├── multi-auth.md │ │ ├── node-status.md │ │ ├── ocsp-stapling.md │ │ ├── opa.md │ │ ├── openfunction.md │ │ ├── openid-connect.md │ │ ├── opentelemetry.md │ │ ├── openwhisk.md │ │ ├── prometheus.md │ │ ├── proxy-cache.md │ │ ├── proxy-control.md │ │ ├── proxy-mirror.md │ │ ├── proxy-rewrite.md │ │ ├── public-api.md │ │ ├── real-ip.md │ │ ├── redirect.md │ │ ├── referer-restriction.md │ │ ├── request-id.md │ │ ├── request-validation.md │ │ ├── response-rewrite.md │ │ ├── rocketmq-logger.md │ │ ├── server-info.md │ │ ├── serverless.md │ │ ├── skywalking-logger.md │ │ ├── skywalking.md │ │ ├── sls-logger.md │ │ ├── splunk-hec-logging.md │ │ ├── syslog.md │ │ ├── tcp-logger.md │ │ ├── tencent-cloud-cls.md │ │ ├── traffic-split.md │ │ ├── ua-restriction.md │ │ ├── udp-logger.md │ │ ├── uri-blocker.md │ │ ├── wolf-rbac.md │ │ ├── workflow.md │ │ └── zipkin.md │ ├── profile.md │ ├── router-radixtree.md │ ├── ssl-protocol.md │ ├── status-api.md │ ├── stream-proxy.md │ ├── support-fips-in-apisix.md │ ├── terminology/ │ │ ├── api-gateway.md │ │ ├── consumer-group.md │ │ ├── consumer.md │ │ ├── credential.md │ │ ├── global-rule.md │ │ ├── plugin-config.md │ │ ├── plugin-metadata.md │ │ ├── plugin.md │ │ ├── route.md │ │ ├── router.md │ │ ├── script.md │ │ ├── secret.md │ │ ├── service.md │ │ └── upstream.md │ ├── tutorials/ │ │ ├── cache-api-responses.md │ │ ├── client-to-apisix-mtls.md │ │ ├── expose-api.md │ │ ├── health-check.md │ │ ├── keycloak-oidc.md │ │ ├── manage-api-consumers.md │ │ ├── observe-your-api.md │ │ └── protect-api.md │ ├── upgrade-guide-from-2.15.x-to-3.0.0.md │ └── wasm.md ├── example/ │ ├── apisix/ │ │ ├── plugins/ │ │ │ └── 3rd-party.lua │ │ └── stream/ │ │ └── plugins/ │ │ └── 3rd-party.lua │ ├── build-dev-image.dockerfile │ └── my_hook.lua ├── powered-by.md ├── t/ │ ├── APISIX.pm │ ├── admin/ │ │ ├── api.t │ │ ├── balancer.t │ │ ├── consumer-credentials.t │ │ ├── consumer-group-force-delete.t │ │ ├── consumer-group.t │ │ ├── consumers.t │ │ ├── consumers2.t │ │ ├── credentials.t │ │ ├── filter.t │ │ ├── global-rules-conflict.t │ │ ├── global-rules.t │ │ ├── global-rules2.t │ │ ├── health-check.t │ │ ├── metadata.spec.ts │ │ ├── metadata.t │ │ ├── plugin-configs-force-delete.t │ │ ├── plugin-configs.t │ │ ├── plugin-metadata.t │ │ ├── plugin-metadata2.t │ │ ├── plugin-metadata3.t │ │ ├── plugins-reload.t │ │ ├── plugins.t │ │ ├── protos-force-delete.t │ │ ├── protos.t │ │ ├── resources.t │ │ ├── response_body_format.t │ │ ├── routes-array-nodes.t │ │ ├── routes.t │ │ ├── routes2.t │ │ ├── routes3.t │ │ ├── routes4.t │ │ ├── routes_request_body.t │ │ ├── schema-validate.t │ │ ├── schema.t │ │ ├── secrets.t │ │ ├── services-array-nodes.t │ │ ├── services-force-delete.t │ │ ├── services-string-id.t │ │ ├── services.t │ │ ├── services2.t │ │ ├── ssl.t │ │ ├── ssl2.t │ │ ├── ssl3.t │ │ ├── ssl4.t │ │ ├── ssl5.t │ │ ├── ssls.t │ │ ├── standalone-healthcheck.t │ │ ├── standalone-plugin-validation.t │ │ ├── standalone.spec.ts │ │ ├── standalone.t │ │ ├── stream-routes-disable.t │ │ ├── stream-routes-subordinate.t │ │ ├── stream-routes.t │ │ ├── token.t │ │ ├── upstream-array-nodes.t │ │ ├── upstream-force-delete.t │ │ ├── upstream.t │ │ ├── upstream2.t │ │ ├── upstream3.t │ │ ├── upstream4.t │ │ └── upstream5.t │ ├── apisix.luacov │ ├── assets/ │ │ ├── ai-proxy-response.json │ │ ├── content-moderation-responses.json │ │ ├── embeddings.json │ │ └── openai-compatible-api-response.json │ ├── certs/ │ │ ├── apisix.crt │ │ ├── apisix.key │ │ ├── apisix_admin_ssl.crt │ │ ├── apisix_admin_ssl.key │ │ ├── apisix_ecc.crt │ │ ├── apisix_ecc.key │ │ ├── client_enc.crt │ │ ├── client_enc.key │ │ ├── client_sign.crt │ │ ├── client_sign.key │ │ ├── etcd.key │ │ ├── etcd.pem │ │ ├── gm_ca.crt │ │ ├── incorrect.crt │ │ ├── incorrect.key │ │ ├── localhost_slapd_cert.pem │ │ ├── localhost_slapd_key.pem │ │ ├── mtls_ca.crt │ │ ├── mtls_ca.key │ │ ├── mtls_client.crt │ │ ├── mtls_client.key │ │ ├── mtls_server.crt │ │ ├── mtls_server.key │ │ ├── ocsp/ │ │ │ ├── ecc_good.crt │ │ │ ├── ecc_good.key │ │ │ ├── index.txt │ │ │ ├── rsa_good.crt │ │ │ ├── rsa_good.key │ │ │ ├── rsa_revoked.crt │ │ │ ├── rsa_revoked.key │ │ │ ├── rsa_unknown.crt │ │ │ ├── rsa_unknown.key │ │ │ ├── signer.crt │ │ │ └── signer.key │ │ ├── openssl-test2.conf │ │ ├── openssl.conf │ │ ├── private.pem │ │ ├── public.pem │ │ ├── server_1024.crt │ │ ├── server_1024.key │ │ ├── server_enc.crt │ │ ├── server_enc.key │ │ ├── server_sign.crt │ │ ├── server_sign.key │ │ ├── test-dot.crt │ │ ├── test-dot.key │ │ ├── test2.crt │ │ ├── test2.key │ │ ├── vector_logs_ca.crt │ │ ├── vector_logs_ca.key │ │ ├── vector_logs_server.crt │ │ └── vector_logs_server.key │ ├── chaos/ │ │ ├── delayetcd/ │ │ │ └── delayetcd.go │ │ ├── e2e.go │ │ ├── e2e_test.go │ │ ├── go.mod │ │ ├── go.sum │ │ ├── killetcd/ │ │ │ └── killetcd.go │ │ ├── kubernetes/ │ │ │ ├── deployment.yaml │ │ │ └── service.yaml │ │ └── utils/ │ │ ├── Dockerfile │ │ ├── kube_utils.go │ │ ├── setup_chaos_utils.sh │ │ └── utils.go │ ├── cli/ │ │ ├── cli.t │ │ ├── cli_envsubst_confusion.t │ │ ├── common.sh │ │ ├── docker-compose-etcd-cluster.yaml │ │ ├── test_access_log.sh │ │ ├── test_admin.sh │ │ ├── test_admin_mtls.sh │ │ ├── test_admin_ui.sh │ │ ├── test_apisix_mirror.sh │ │ ├── test_ci_only.sh │ │ ├── test_cmd.sh │ │ ├── test_control.sh │ │ ├── test_core_config.sh │ │ ├── test_deployment_control_plane.sh │ │ ├── test_deployment_data_plane.sh │ │ ├── test_deployment_data_plane_with_readonly_etcd.sh │ │ ├── test_deployment_traditional.sh │ │ ├── test_dns.sh │ │ ├── test_dubbo.sh │ │ ├── test_etcd.sh │ │ ├── test_etcd_healthcheck.sh │ │ ├── test_etcd_mtls.sh │ │ ├── test_etcd_sync_event_handle.sh │ │ ├── test_etcd_tls.sh │ │ ├── test_http_config.sh │ │ ├── test_kubernetes.sh │ │ ├── test_limit_conn_redis_ttl.sh │ │ ├── test_limit_req_redis_ttl.sh │ │ ├── test_load_full_data_init_worker.sh │ │ ├── test_main.sh │ │ ├── test_makefile.sh │ │ ├── test_opentelemetry_set_ngx_var.sh │ │ ├── test_prometheus.sh │ │ ├── test_prometheus_reload.sh │ │ ├── test_prometheus_stream.sh │ │ ├── test_proxy_mirror_timeout.sh │ │ ├── test_route_match_with_graphql.sh │ │ ├── test_serverless.sh │ │ ├── test_snippet.sh │ │ ├── test_standalone.sh │ │ ├── test_standalone_docker.sh │ │ ├── test_standalone_yaml_format.sh │ │ ├── test_status_api.sh │ │ ├── test_status_api_standalone.sh │ │ ├── test_stream_config.sh │ │ ├── test_tls_over_tcp.sh │ │ ├── test_upstream_mtls.sh │ │ ├── test_validate_config.sh │ │ ├── test_wasm.sh │ │ └── test_zipkin_set_ngx_var.sh │ ├── config-center-json/ │ │ ├── consumer-group.t │ │ ├── consumer.t │ │ ├── global-rule.t │ │ ├── plugin-configs.t │ │ ├── plugin-metadata.t │ │ ├── plugin.t │ │ ├── route-service.t │ │ ├── route-upstream.t │ │ ├── route.t │ │ ├── secret.t │ │ ├── ssl.t │ │ └── stream-route.t │ ├── config-center-yaml/ │ │ ├── consumer-group.t │ │ ├── consumer.t │ │ ├── global-rule.t │ │ ├── plugin-configs.t │ │ ├── plugin-metadata.t │ │ ├── plugin.t │ │ ├── route-service.t │ │ ├── route-upstream.t │ │ ├── route.t │ │ ├── secret.t │ │ ├── ssl.t │ │ └── stream-route.t │ ├── control/ │ │ ├── control-healthcheck-bug-fix.t │ │ ├── discovery.t │ │ ├── gc.t │ │ ├── healthcheck.t │ │ ├── plugin-api.t │ │ ├── plugin-metadata.t │ │ ├── plugins-reload.t │ │ ├── routes.t │ │ ├── schema.t │ │ ├── services.t │ │ └── upstreams.t │ ├── core/ │ │ ├── config-default.t │ │ ├── config.t │ │ ├── config_etcd.t │ │ ├── config_util.t │ │ ├── ctx.t │ │ ├── ctx2.t │ │ ├── ctx3.t │ │ ├── ctx4.t │ │ ├── ctx_with_params.t │ │ ├── env.t │ │ ├── etcd-auth-fail.t │ │ ├── etcd-auth.t │ │ ├── etcd-mtls.t │ │ ├── etcd-sync.t │ │ ├── etcd-write.t │ │ ├── etcd.t │ │ ├── json.t │ │ ├── log.t │ │ ├── lrucache.t │ │ ├── lrucache2.t │ │ ├── os.t │ │ ├── profile.t │ │ ├── random.t │ │ ├── request.t │ │ ├── resolver.t │ │ ├── response.t │ │ ├── schema.t │ │ ├── schema_def.t │ │ ├── string.t │ │ ├── table.t │ │ ├── timer.t │ │ ├── trusted-addresses.t │ │ ├── uid.t │ │ └── utils.t │ ├── coredns/ │ │ ├── Corefile │ │ └── db.test.local │ ├── debug/ │ │ ├── debug-mode.t │ │ ├── dynamic-hook.t │ │ └── hook.t │ ├── discovery/ │ │ ├── consul.t │ │ ├── consul2.t │ │ ├── consul_dump.t │ │ ├── consul_kv.t │ │ ├── consul_kv_dump.t │ │ ├── dns/ │ │ │ ├── mix.t │ │ │ └── sanity.t │ │ ├── eureka.t │ │ ├── kubernetes_schema.t │ │ ├── nacos.t │ │ ├── nacos2.t │ │ ├── nacos3.t │ │ ├── reset-healthchecker.t │ │ └── stream/ │ │ ├── consul.t │ │ ├── consul_kv.t │ │ ├── dns.t │ │ ├── eureka.t │ │ └── nacos.t │ ├── error_page/ │ │ └── error_page.t │ ├── fake-plugin-exit.lua │ ├── fuzzing/ │ │ ├── client_abort.py │ │ ├── http_upstream.py │ │ ├── public.py │ │ ├── requirements.txt │ │ ├── serverless_route_test.py │ │ ├── simple_http.py │ │ ├── simpleroute_test.py │ │ ├── upstream/ │ │ │ └── nginx.conf │ │ └── vars_route_test.py │ ├── gm/ │ │ └── gm.t │ ├── grpc_server_example/ │ │ ├── echo.pb │ │ ├── go.mod │ │ ├── go.sum │ │ ├── main.go │ │ ├── proto/ │ │ │ ├── echo.pb.go │ │ │ ├── echo.proto │ │ │ ├── echo_grpc.pb.go │ │ │ ├── helloworld.pb.go │ │ │ ├── helloworld.proto │ │ │ ├── helloworld_grpc.pb.go │ │ │ ├── import.pb.go │ │ │ ├── import.proto │ │ │ ├── src.pb.go │ │ │ ├── src.proto │ │ │ └── src_grpc.pb.go │ │ └── proto.pb │ ├── http3/ │ │ └── admin/ │ │ └── basic.t │ ├── jest.config.ts │ ├── kubernetes/ │ │ ├── configs/ │ │ │ ├── account.yaml │ │ │ ├── endpoint.yaml │ │ │ ├── endpointslices.yaml │ │ │ └── kind.yaml │ │ └── discovery/ │ │ ├── kubernetes.t │ │ ├── kubernetes2.t │ │ ├── kubernetes3.t │ │ ├── kubernetes4.t │ │ └── stream/ │ │ └── kubernetes.t │ ├── lib/ │ │ ├── apisix/ │ │ │ └── plugins/ │ │ │ ├── jwt-auth.lua │ │ │ └── prometheus/ │ │ │ └── exporter.lua │ │ ├── chaitin_waf_server.lua │ │ ├── dubbo-backend/ │ │ │ ├── dubbo-backend-interface/ │ │ │ │ ├── pom.xml │ │ │ │ └── src/ │ │ │ │ └── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── dubbo/ │ │ │ │ └── backend/ │ │ │ │ └── DemoService.java │ │ │ ├── dubbo-backend-provider/ │ │ │ │ ├── pom.xml │ │ │ │ └── src/ │ │ │ │ └── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── dubbo/ │ │ │ │ │ └── backend/ │ │ │ │ │ └── provider/ │ │ │ │ │ ├── DemoServiceImpl.java │ │ │ │ │ └── Provider.java │ │ │ │ └── resources/ │ │ │ │ ├── META-INF/ │ │ │ │ │ └── spring/ │ │ │ │ │ └── dubbo-demo-provider.xml │ │ │ │ ├── dubbo.properties │ │ │ │ └── log4j.properties │ │ │ └── pom.xml │ │ ├── dubbo-serialization-backend/ │ │ │ ├── dubbo-serialization-backend-interface/ │ │ │ │ ├── pom.xml │ │ │ │ └── src/ │ │ │ │ └── main/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── apache/ │ │ │ │ └── dubbo/ │ │ │ │ └── backend/ │ │ │ │ ├── DubboSerializationTestService.java │ │ │ │ └── PoJo.java │ │ │ ├── dubbo-serialization-backend-provider/ │ │ │ │ ├── pom.xml │ │ │ │ └── src/ │ │ │ │ └── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── apache/ │ │ │ │ │ └── dubbo/ │ │ │ │ │ └── backend/ │ │ │ │ │ └── provider/ │ │ │ │ │ ├── DubboSerializationTestServiceImpl.java │ │ │ │ │ └── Provider.java │ │ │ │ └── resources/ │ │ │ │ ├── META-INF/ │ │ │ │ │ └── spring/ │ │ │ │ │ └── dubbo-demo-provider.xml │ │ │ │ ├── dubbo.properties │ │ │ │ └── log4j.properties │ │ │ └── pom.xml │ │ ├── etcd.proto │ │ ├── ext-plugin.lua │ │ ├── grafana_loki.lua │ │ ├── keycloak.lua │ │ ├── keycloak_cas.lua │ │ ├── mock_layer4.lua │ │ ├── pubsub.lua │ │ ├── server.lua │ │ ├── test_admin.lua │ │ ├── test_inspect.lua │ │ ├── test_otel.lua │ │ └── test_redis.lua │ ├── misc/ │ │ ├── patch.t │ │ ├── pre-function.t │ │ └── timers.t │ ├── node/ │ │ ├── chash-balance.t │ │ ├── chash-hashon.t │ │ ├── client-mtls-openresty.t │ │ ├── client-mtls.t │ │ ├── consumer-group.t │ │ ├── consumer-plugin.t │ │ ├── consumer-plugin2.t │ │ ├── consumer-plugin3.t │ │ ├── credential-plugin-basic-auth.t │ │ ├── credential-plugin-incremental-effective.t │ │ ├── credential-plugin-jwt-auth.t │ │ ├── credential-plugin-key-auth.t │ │ ├── credential-plugin-multi-credentials.t │ │ ├── credential-plugin-set-request-header.t │ │ ├── credential-plugin-work-with-other-plugin.t │ │ ├── data_encrypt.t │ │ ├── data_encrypt2.t │ │ ├── ewma.t │ │ ├── filter_func.t │ │ ├── global-rule.t │ │ ├── grpc-proxy-mtls.t │ │ ├── grpc-proxy-stream.t │ │ ├── grpc-proxy-unary.t │ │ ├── grpc-proxy.t │ │ ├── healthcheck-discovery.t │ │ ├── healthcheck-dns.t │ │ ├── healthcheck-global-switch.t │ │ ├── healthcheck-https.t │ │ ├── healthcheck-ipv6.t │ │ ├── healthcheck-leak-bugfix.t │ │ ├── healthcheck-multiple-worker.t │ │ ├── healthcheck-passive-resty-events.t │ │ ├── healthcheck-service-discovery.t │ │ ├── healthcheck-stop-checker.t │ │ ├── healthcheck.t │ │ ├── healthcheck2.t │ │ ├── healthcheck3.t │ │ ├── healthchecker-independent-upstream.t │ │ ├── hosts.t │ │ ├── http_host.t │ │ ├── https-proxy.t │ │ ├── invalid-port.t │ │ ├── invalid-route.t │ │ ├── invalid-service.t │ │ ├── invalid-upstream.t │ │ ├── least_conn.t │ │ ├── least_conn2.t │ │ ├── merge-route.t │ │ ├── not-exist-service.t │ │ ├── not-exist-upstream.t │ │ ├── plugin-configs.t │ │ ├── plugin.t │ │ ├── plugin1.t │ │ ├── priority-balancer/ │ │ │ ├── health-checker.t │ │ │ └── sanity.t │ │ ├── remote-addr-ipv6.t │ │ ├── remote-addr.t │ │ ├── remote_addrs.t │ │ ├── route-delete.t │ │ ├── route-domain-with-local-dns.t │ │ ├── route-domain.t │ │ ├── route-filter-func.t │ │ ├── route-host.t │ │ ├── route-status.t │ │ ├── route-uris.t │ │ ├── rr-balance.t │ │ ├── sanity-radixtree.t │ │ ├── service-empty.t │ │ ├── ssl-protocols.t │ │ ├── ssl.t │ │ ├── timeout-upstream.t │ │ ├── upstream-array-nodes.t │ │ ├── upstream-discovery-dynamic.t │ │ ├── upstream-discovery.t │ │ ├── upstream-domain-with-special-dns.t │ │ ├── upstream-domain-with-special-ipv6-dns.t │ │ ├── upstream-domain.t │ │ ├── upstream-ipv6.t │ │ ├── upstream-keepalive-pool.t │ │ ├── upstream-mtls.t │ │ ├── upstream-node-dns.t │ │ ├── upstream-retries.t │ │ ├── upstream-status-5xx.t │ │ ├── upstream-status-all.t │ │ ├── upstream-websocket.t │ │ ├── upstream.t │ │ ├── vars.t │ │ └── wildcard-host.t │ ├── package.json │ ├── plugin/ │ │ ├── ai-aliyun-content-moderation.t │ │ ├── ai-aws-content-moderation-secrets.t │ │ ├── ai-aws-content-moderation.t │ │ ├── ai-aws-content-moderation2.t │ │ ├── ai-prompt-decorator.t │ │ ├── ai-prompt-guard.t │ │ ├── ai-prompt-template.t │ │ ├── ai-proxy-anthropic.t │ │ ├── ai-proxy-azure-openai.t │ │ ├── ai-proxy-gemini.t │ │ ├── ai-proxy-kafka-log.t │ │ ├── ai-proxy-multi.balancer.t │ │ ├── ai-proxy-multi.openai-compatible.t │ │ ├── ai-proxy-multi.t │ │ ├── ai-proxy-multi2.t │ │ ├── ai-proxy-multi3.t │ │ ├── ai-proxy-openrouter.t │ │ ├── ai-proxy-vertex-ai.t │ │ ├── ai-proxy.openai-compatible.t │ │ ├── ai-proxy.t │ │ ├── ai-proxy2.t │ │ ├── ai-proxy3.t │ │ ├── ai-rag.t │ │ ├── ai-rate-limiting-consumer-isolation.t │ │ ├── ai-rate-limiting.t │ │ ├── ai-request-rewrite.t │ │ ├── ai-request-rewrite2.t │ │ ├── ai.t │ │ ├── ai2.t │ │ ├── ai3.t │ │ ├── ai4.t │ │ ├── ai5.t │ │ ├── api-breaker.t │ │ ├── attach-consumer-label.t │ │ ├── authz-casbin/ │ │ │ ├── model.conf │ │ │ └── policy.csv │ │ ├── authz-casbin.t │ │ ├── authz-casdoor.t │ │ ├── authz-keycloak.t │ │ ├── authz-keycloak2.t │ │ ├── authz-keycloak3.t │ │ ├── authz-keycloak4.t │ │ ├── aws-lambda.t │ │ ├── azure-functions.t │ │ ├── basic-auth-anonymous-consumer.t │ │ ├── basic-auth-realm.t │ │ ├── basic-auth.t │ │ ├── batch-requests-grpc.t │ │ ├── batch-requests.t │ │ ├── batch-requests2.t │ │ ├── body-transformer-multipart.t │ │ ├── body-transformer.t │ │ ├── body-transformer2.t │ │ ├── brotli.t │ │ ├── cas-auth.t │ │ ├── chaitin-waf-reject.t │ │ ├── chaitin-waf-timeout.t │ │ ├── chaitin-waf.t │ │ ├── clickhouse-logger.t │ │ ├── clickhouse-logger2.t │ │ ├── clickhouse-logger3.t │ │ ├── client-control.t │ │ ├── consumer-bug-fix.t │ │ ├── consumer-restriction.t │ │ ├── consumer-restriction2.t │ │ ├── cors.t │ │ ├── cors2.t │ │ ├── cors3.t │ │ ├── cors4.t │ │ ├── csrf.t │ │ ├── custom_sort_plugins.t │ │ ├── datadog.t │ │ ├── degraphql.t │ │ ├── dubbo-proxy/ │ │ │ ├── route.t │ │ │ └── upstream.t │ │ ├── echo.t │ │ ├── elasticsearch-logger.t │ │ ├── elasticsearch-logger2.t │ │ ├── error-log-logger-clickhouse.t │ │ ├── error-log-logger-kafka.t │ │ ├── error-log-logger-skywalking.t │ │ ├── error-log-logger.t │ │ ├── example.t │ │ ├── ext-plugin/ │ │ │ ├── conf_token.t │ │ │ ├── extra-info.t │ │ │ ├── http-req-call.t │ │ │ ├── request-body.t │ │ │ ├── response.t │ │ │ ├── runner.sh │ │ │ ├── runner_can_not_terminated.sh │ │ │ ├── sanity.t │ │ │ └── sanity2.t │ │ ├── fault-injection.t │ │ ├── fault-injection2.t │ │ ├── file-logger-reopen.t │ │ ├── file-logger.t │ │ ├── file-logger2.t │ │ ├── forward-auth.t │ │ ├── forward-auth2.t │ │ ├── google-cloud-logging/ │ │ │ ├── config-https-domain.json │ │ │ ├── config-https-ip.json │ │ │ └── config.json │ │ ├── google-cloud-logging.t │ │ ├── google-cloud-logging2.t │ │ ├── google-cloud-logging3.t │ │ ├── grpc-transcode-reload-bugfix.t │ │ ├── grpc-transcode.t │ │ ├── grpc-transcode2.t │ │ ├── grpc-transcode3.t │ │ ├── grpc-web/ │ │ │ ├── a6/ │ │ │ │ ├── buf.gen.yaml │ │ │ │ ├── buf.yaml │ │ │ │ ├── package.json │ │ │ │ └── route.proto │ │ │ ├── client.cts │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── server.go │ │ │ └── setup.sh │ │ ├── grpc-web.t │ │ ├── gzip.t │ │ ├── hmac-auth-anonymous-consumer.t │ │ ├── hmac-auth-realm.t │ │ ├── hmac-auth.t │ │ ├── hmac-auth2.t │ │ ├── hmac-auth3.t │ │ ├── hmac-auth4.t │ │ ├── http-dubbo.t │ │ ├── http-logger-json.t │ │ ├── http-logger-large-body.t │ │ ├── http-logger-log-format.t │ │ ├── http-logger-new-line.t │ │ ├── http-logger.t │ │ ├── http-logger2.t │ │ ├── http-logger3.t │ │ ├── inspect.t │ │ ├── ip-restriction.t │ │ ├── jwe-decrypt.t │ │ ├── jwt-auth-anonymous-consumer.t │ │ ├── jwt-auth-more-algo.t │ │ ├── jwt-auth-realm.t │ │ ├── jwt-auth.t │ │ ├── jwt-auth2.t │ │ ├── jwt-auth3.t │ │ ├── jwt-auth4.t │ │ ├── kafka-logger-large-body.t │ │ ├── kafka-logger-log-format.t │ │ ├── kafka-logger.t │ │ ├── kafka-logger2.t │ │ ├── kafka-logger3.t │ │ ├── kafka-logger4.t │ │ ├── kafka-proxy.t │ │ ├── key-auth-anonymous-consumer.t │ │ ├── key-auth-realm.t │ │ ├── key-auth-upstream-domain-node.t │ │ ├── key-auth.t │ │ ├── lago.spec.mts │ │ ├── lago.t │ │ ├── ldap-auth-realm.t │ │ ├── ldap-auth.t │ │ ├── limit-conn-redis-cluster.t │ │ ├── limit-conn-redis.t │ │ ├── limit-conn-variable.t │ │ ├── limit-conn.t │ │ ├── limit-conn2.t │ │ ├── limit-conn3.t │ │ ├── limit-count-consumer-group-credentials.t │ │ ├── limit-count-consumer-isolation.t │ │ ├── limit-count-redis-cluster.t │ │ ├── limit-count-redis-cluster2.t │ │ ├── limit-count-redis-cluster3.t │ │ ├── limit-count-redis.t │ │ ├── limit-count-redis2.t │ │ ├── limit-count-redis3.t │ │ ├── limit-count-redis4.t │ │ ├── limit-count-rules.t │ │ ├── limit-count-variable.t │ │ ├── limit-count.t │ │ ├── limit-count2.t │ │ ├── limit-count3.t │ │ ├── limit-count4.t │ │ ├── limit-count5.t │ │ ├── limit-req-redis-cluster.t │ │ ├── limit-req-redis.t │ │ ├── limit-req-shared-counter.t │ │ ├── limit-req.t │ │ ├── limit-req2.t │ │ ├── limit-req3.t │ │ ├── log-rotate.t │ │ ├── log-rotate2.t │ │ ├── log-rotate3.t │ │ ├── loggly.t │ │ ├── loki-logger.t │ │ ├── loki-logger2.t │ │ ├── mcp/ │ │ │ └── assets/ │ │ │ └── bridge-list-tools.json │ │ ├── mcp-bridge.spec.mts │ │ ├── mcp-bridge.t │ │ ├── mocking.t │ │ ├── multi-auth.t │ │ ├── multi-auth2.t │ │ ├── node-status.t │ │ ├── ocsp-stapling.t │ │ ├── opa.t │ │ ├── opa2.t │ │ ├── openfunction.t │ │ ├── openid-connect/ │ │ │ └── configuration.json │ │ ├── openid-connect-redis.t │ │ ├── openid-connect.t │ │ ├── openid-connect2.t │ │ ├── openid-connect3.t │ │ ├── openid-connect4.t │ │ ├── openid-connect5.t │ │ ├── openid-connect6.t │ │ ├── openid-connect7.t │ │ ├── openid-connect8.t │ │ ├── openid-connect9.t │ │ ├── opentelemetry.t │ │ ├── opentelemetry2.t │ │ ├── opentelemetry3.t │ │ ├── opentelemetry4-bugfix-pb-state.t │ │ ├── opentelemetry5.t │ │ ├── opentelemetry6.t │ │ ├── openwhisk.t │ │ ├── plugin.t │ │ ├── prometheus-ai-proxy.t │ │ ├── prometheus-metric-expire.t │ │ ├── prometheus.t │ │ ├── prometheus2.t │ │ ├── prometheus3.t │ │ ├── prometheus4.t │ │ ├── proxy-cache/ │ │ │ ├── disk.t │ │ │ └── memory.t │ │ ├── proxy-control.t │ │ ├── proxy-mirror.t │ │ ├── proxy-mirror2.t │ │ ├── proxy-mirror3.t │ │ ├── proxy-rewrite.t │ │ ├── proxy-rewrite2.t │ │ ├── proxy-rewrite3.t │ │ ├── public-api.t │ │ ├── real-ip.t │ │ ├── redirect.t │ │ ├── redirect2.t │ │ ├── referer-restriction.t │ │ ├── request-id.t │ │ ├── request-id2.t │ │ ├── request-id3.t │ │ ├── request-validation.t │ │ ├── request-validation2.t │ │ ├── response-rewrite.t │ │ ├── response-rewrite2.t │ │ ├── response-rewrite3.t │ │ ├── rocketmq-logger-log-format.t │ │ ├── rocketmq-logger.t │ │ ├── rocketmq-logger2.t │ │ ├── security-warning.t │ │ ├── security-warning2.t │ │ ├── server-info.t │ │ ├── serverless.t │ │ ├── skywalking-logger.t │ │ ├── skywalking-logger2.t │ │ ├── skywalking.t │ │ ├── skywalking2.t │ │ ├── sls-logger.t │ │ ├── splunk-hec-logging.t │ │ ├── splunk-hec-logging2.t │ │ ├── syslog.t │ │ ├── tcp-logger.t │ │ ├── tencent-cloud-cls.t │ │ ├── traffic-split.t │ │ ├── traffic-split2.t │ │ ├── traffic-split3.t │ │ ├── traffic-split4.t │ │ ├── traffic-split5.t │ │ ├── ua-restriction.t │ │ ├── udp-logger.t │ │ ├── uri-blocker.t │ │ ├── wolf-rbac.t │ │ ├── workflow-without-case.t │ │ ├── workflow.t │ │ ├── workflow2.t │ │ ├── workflow3.t │ │ ├── zipkin.t │ │ ├── zipkin2.t │ │ └── zipkin3.t │ ├── pubsub/ │ │ ├── kafka.t │ │ └── pubsub.t │ ├── router/ │ │ ├── graphql.t │ │ ├── multi-ssl-certs.t │ │ ├── radixtree-host-uri-priority.t │ │ ├── radixtree-host-uri.t │ │ ├── radixtree-host-uri2.t │ │ ├── radixtree-host-uri3.t │ │ ├── radixtree-method.t │ │ ├── radixtree-sni.t │ │ ├── radixtree-sni2.t │ │ ├── radixtree-sni3.t │ │ ├── radixtree-uri-host.t │ │ ├── radixtree-uri-keep-end-slash.t │ │ ├── radixtree-uri-multiple.t │ │ ├── radixtree-uri-priority.t │ │ ├── radixtree-uri-sanity.t │ │ ├── radixtree-uri-vars.t │ │ ├── radixtree-uri-with-parameter.t │ │ └── radixtree-uri-with-parameter2.t │ ├── script/ │ │ ├── script.t │ │ ├── script_distribute.t │ │ └── script_test.lua │ ├── secret/ │ │ ├── aws.t │ │ ├── conf/ │ │ │ ├── error.json │ │ │ └── success.json │ │ ├── gcp.t │ │ ├── secret_lru.t │ │ └── vault.t │ ├── sse_server_example/ │ │ ├── go.mod │ │ └── main.go │ ├── stream-node/ │ │ ├── control-api-healthcheck.t │ │ ├── healthcheck-resty-events.t │ │ ├── mtls.t │ │ ├── priority-balancer.t │ │ ├── random.t │ │ ├── sanity-repeat.t │ │ ├── sanity-with-service.t │ │ ├── sanity.t │ │ ├── sni.t │ │ ├── tls.t │ │ ├── upstream-domain.t │ │ └── upstream-tls.t │ ├── stream-plugin/ │ │ ├── ip-restriction.t │ │ ├── limit-conn.t │ │ ├── limit-conn2.t │ │ ├── mqtt-proxy.t │ │ ├── mqtt-proxy2.t │ │ ├── plugin.t │ │ ├── prometheus.t │ │ ├── syslog.t │ │ └── traffic-split.t │ ├── tars/ │ │ ├── conf/ │ │ │ └── tars.sql │ │ └── discovery/ │ │ ├── stream/ │ │ │ └── tars.t │ │ └── tars.t │ ├── ts/ │ │ ├── admin_api.ts │ │ └── utils.ts │ ├── tsconfig.json │ ├── utils/ │ │ ├── batch-processor.t │ │ └── rfc5424.t │ ├── wasm/ │ │ ├── fault-injection/ │ │ │ └── main.go │ │ ├── fault-injection.t │ │ ├── forward-auth.go │ │ ├── forward-auth.t │ │ ├── global-rule.t │ │ ├── go.mod │ │ ├── go.sum │ │ ├── log/ │ │ │ └── main.go │ │ ├── request-body/ │ │ │ └── main.go │ │ ├── request-body.t │ │ ├── response-rewrite/ │ │ │ └── main.go │ │ ├── response-rewrite.t │ │ └── route.t │ ├── xds-library/ │ │ ├── config_xds.t │ │ ├── config_xds_2.t │ │ ├── export.go │ │ ├── main.go │ │ └── xds.h │ └── xrpc/ │ ├── apisix/ │ │ └── stream/ │ │ └── xrpc/ │ │ └── protocols/ │ │ └── pingpong/ │ │ ├── init.lua │ │ └── schema.lua │ ├── dubbo.t │ ├── pingpong.t │ ├── pingpong2.t │ ├── pingpong3.t │ ├── prometheus.t │ ├── redis.t │ └── redis2.t └── utils/ ├── check-category.py ├── check-lua-code-style.sh ├── check-merge-conflict.sh ├── check-plugins-code.sh ├── check-test-code-style.sh ├── check-version.sh ├── fix-zh-doc-segment.py ├── gen-vote-contents.sh ├── install-dependencies.sh └── linux-install-luarocks.sh