[{"data":1,"prerenderedAt":5818},["ShallowReactive",2],{"navigation_docs":3,"-quayel-gateway-configuration":91,"-quayel-gateway-configuration-surround":5817},[4],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":90},"Quayel Gateway","i-lucide-network","\u002Fquayel-gateway","quayel-gateway",[10,29,68],{"title":11,"icon":12,"path":13,"stem":14,"children":15},"Getting Started","i-lucide-rocket","\u002Fquayel-gateway\u002Fgetting-started","quayel-gateway\u002F01.getting-started\u002Findex",[16,19,24],{"title":17,"path":13,"stem":14,"icon":18},"Introduction","i-lucide-book-open",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fquayel-gateway\u002Fgetting-started\u002Finstallation","quayel-gateway\u002F01.getting-started\u002F1.installation","i-lucide-container",{"title":25,"path":26,"stem":27,"icon":28},"Project Structure","\u002Fquayel-gateway\u002Fgetting-started\u002Fproject-structure","quayel-gateway\u002F01.getting-started\u002F2.project-structure","i-lucide-folder-tree",{"title":30,"icon":31,"path":32,"stem":33,"children":34},"Plugins","i-lucide-puzzle","\u002Fquayel-gateway\u002Fplugins","quayel-gateway\u002F02.plugins\u002Findex",[35,38,43,48,53,58,63],{"title":36,"path":32,"stem":33,"icon":37},"Overview","i-lucide-workflow",{"title":39,"path":40,"stem":41,"icon":42},"IP Intelligence","\u002Fquayel-gateway\u002Fplugins\u002Fip-intel","quayel-gateway\u002F02.plugins\u002F1.ip-intel","i-lucide-radar",{"title":44,"path":45,"stem":46,"icon":47},"Firewall","\u002Fquayel-gateway\u002Fplugins\u002Ffirewall","quayel-gateway\u002F02.plugins\u002F2.firewall","i-lucide-shield",{"title":49,"path":50,"stem":51,"icon":52},"Rate Limiting","\u002Fquayel-gateway\u002Fplugins\u002Frate-limiting","quayel-gateway\u002F02.plugins\u002F3.rate-limiting","i-lucide-gauge",{"title":54,"path":55,"stem":56,"icon":57},"Cache","\u002Fquayel-gateway\u002Fplugins\u002Fcache","quayel-gateway\u002F02.plugins\u002F4.cache","i-lucide-database",{"title":59,"path":60,"stem":61,"icon":62},"Load Balancer","\u002Fquayel-gateway\u002Fplugins\u002Fload-balancer","quayel-gateway\u002F02.plugins\u002F5.load-balancer","i-lucide-scale",{"title":64,"path":65,"stem":66,"icon":67},"Auto-SSL","\u002Fquayel-gateway\u002Fplugins\u002Fauto-ssl","quayel-gateway\u002F02.plugins\u002F6.auto-ssl","i-lucide-lock",{"title":69,"icon":70,"path":71,"stem":72,"children":73},"AI","i-lucide-bot","\u002Fquayel-gateway\u002Fai","quayel-gateway\u002F03.ai\u002Findex",[74,75,80,85],{"title":36,"path":71,"stem":72,"icon":70},{"title":76,"path":77,"stem":78,"icon":79},"The Quayel Gateway Skill","\u002Fquayel-gateway\u002Fai\u002Fskill","quayel-gateway\u002F03.ai\u002F1.skill","i-lucide-wand-sparkles",{"title":81,"path":82,"stem":83,"icon":84},"Installing the Skill","\u002Fquayel-gateway\u002Fai\u002Finstallation","quayel-gateway\u002F03.ai\u002F2.installation","i-lucide-download",{"title":86,"path":87,"stem":88,"icon":89},"AI Agent Guide","\u002Fquayel-gateway\u002Fai\u002Fagent-guide","quayel-gateway\u002F03.ai\u002F3.agent-guide","i-lucide-braces",false,{"id":92,"title":93,"body":94,"description":5809,"extension":5810,"links":5811,"meta":5812,"navigation":90,"path":5813,"seo":5814,"stem":5815,"__hash__":5816},"docs\u002Fquayel-gateway\u002F03.configuration.md","Configuration",{"type":95,"value":96,"toc":5788},"minimark",[97,102,119,124,252,256,350,390,399,403,406,511,592,599,641,645,709,713,808,812,936,942,949,991,998,1004,1007,1280,1285,1291,1294,1590,1595,1732,1738,1809,1817,1822,1828,1843,2243,2306,2309,2487,2493,2549,2554,2603,2608,2652,2656,2669,2768,2779,2784,2790,2793,3420,3425,3431,3501,3507,3556,3562,3608,3628,3660,3666,3669,3796,3893,3900,3906,3909,4067,4176,4180,4202,4206,4239,4245,4249,5700,5704,5707,5773,5784],[98,99,101],"h1",{"id":100},"configuration-reference","Configuration Reference",[103,104,105,106,110,111,118],"p",{},"Complete reference for ",[107,108,109],"code",{},"config.json",". You can also pre-validate generated configs against ",[112,113,115],"a",{"href":114},"\u002Fconfig.schema.json",[107,116,117],{},"config.schema.json"," (JSON Schema) before starting the gateway.",[120,121,123],"h2",{"id":122},"top-level-fields","Top-level fields",[125,126,127,146],"table",{},[128,129,130],"thead",{},[131,132,133,137,140,143],"tr",{},[134,135,136],"th",{},"Field",[134,138,139],{},"Type",[134,141,142],{},"Required",[134,144,145],{},"Description",[147,148,149,166,180,194,208,223,238],"tbody",{},[131,150,151,157,160,163],{},[152,153,154],"td",{},[107,155,156],{},"gateway_id",[152,158,159],{},"string",[152,161,162],{},"✅",[152,164,165],{},"Unique identifier for this gateway instance",[131,167,168,173,175,177],{},[152,169,170],{},[107,171,172],{},"gateway_name",[152,174,159],{},[152,176,162],{},[152,178,179],{},"Human-readable name",[131,181,182,187,189,191],{},[152,183,184],{},[107,185,186],{},"server_name",[152,188,159],{},[152,190,162],{},[152,192,193],{},"Server name for logging",[131,195,196,201,203,205],{},[152,197,198],{},[107,199,200],{},"config_version",[152,202,159],{},[152,204,162],{},[152,206,207],{},"Version string for tracking config changes",[131,209,210,215,218,220],{},[152,211,212],{},[107,213,214],{},"listen",[152,216,217],{},"object",[152,219,162],{},[152,221,222],{},"Listen addresses",[131,224,225,230,232,235],{},[152,226,227],{},[107,228,229],{},"client_ip",[152,231,217],{},[152,233,234],{},"—",[152,236,237],{},"Client IP resolution strategy",[131,239,240,245,247,249],{},[152,241,242],{},[107,243,244],{},"plugins",[152,246,217],{},[152,248,162],{},[152,250,251],{},"Plugin configurations",[120,253,254],{"id":214},[107,255,214],{},[257,258,263],"pre",{"className":259,"code":260,"language":261,"meta":262,"style":262},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"listen\": {\n    \"http\": \"0.0.0.0:8080\",\n    \"https\": \"0.0.0.0:8443\"\n  }\n}\n","json","",[107,264,265,274,292,318,338,344],{"__ignoreMap":262},[266,267,270],"span",{"class":268,"line":269},"line",1,[266,271,273],{"class":272},"sMK4o","{\n",[266,275,277,280,283,286,289],{"class":268,"line":276},2,[266,278,279],{"class":272},"  \"",[266,281,214],{"class":282},"spNyl",[266,284,285],{"class":272},"\"",[266,287,288],{"class":272},":",[266,290,291],{"class":272}," {\n",[266,293,295,298,302,304,306,309,313,315],{"class":268,"line":294},3,[266,296,297],{"class":272},"    \"",[266,299,301],{"class":300},"sBMFI","http",[266,303,285],{"class":272},[266,305,288],{"class":272},[266,307,308],{"class":272}," \"",[266,310,312],{"class":311},"sfazB","0.0.0.0:8080",[266,314,285],{"class":272},[266,316,317],{"class":272},",\n",[266,319,321,323,326,328,330,332,335],{"class":268,"line":320},4,[266,322,297],{"class":272},[266,324,325],{"class":300},"https",[266,327,285],{"class":272},[266,329,288],{"class":272},[266,331,308],{"class":272},[266,333,334],{"class":311},"0.0.0.0:8443",[266,336,337],{"class":272},"\"\n",[266,339,341],{"class":268,"line":340},5,[266,342,343],{"class":272},"  }\n",[266,345,347],{"class":268,"line":346},6,[266,348,349],{"class":272},"}\n",[125,351,352,362],{},[128,353,354],{},[131,355,356,358,360],{},[134,357,136],{},[134,359,139],{},[134,361,145],{},[147,363,364,379],{},[131,365,366,370,372],{},[152,367,368],{},[107,369,301],{},[152,371,159],{},[152,373,374,375,378],{},"HTTP listen address (",[107,376,377],{},"host:port",")",[131,380,381,385,387],{},[152,382,383],{},[107,384,325],{},[152,386,159],{},[152,388,389],{},"HTTPS listen address (requires TLS config)",[103,391,392,393,395,396,398],{},"At least one of ",[107,394,301],{}," or ",[107,397,325],{}," must be specified.",[120,400,401],{"id":229},[107,402,229],{},[103,404,405],{},"Controls how the real client IP is determined from incoming requests.",[257,407,409],{"className":259,"code":408,"language":261,"meta":262,"style":262},"{\n  \"client_ip\": {\n    \"source\": \"header\",\n    \"header\": \"X-Forwarded-For\",\n    \"index\": 0,\n    \"fallback\": \"peer_ip\"\n  }\n}\n",[107,410,411,415,427,447,466,483,501,506],{"__ignoreMap":262},[266,412,413],{"class":268,"line":269},[266,414,273],{"class":272},[266,416,417,419,421,423,425],{"class":268,"line":276},[266,418,279],{"class":272},[266,420,229],{"class":282},[266,422,285],{"class":272},[266,424,288],{"class":272},[266,426,291],{"class":272},[266,428,429,431,434,436,438,440,443,445],{"class":268,"line":294},[266,430,297],{"class":272},[266,432,433],{"class":300},"source",[266,435,285],{"class":272},[266,437,288],{"class":272},[266,439,308],{"class":272},[266,441,442],{"class":311},"header",[266,444,285],{"class":272},[266,446,317],{"class":272},[266,448,449,451,453,455,457,459,462,464],{"class":268,"line":320},[266,450,297],{"class":272},[266,452,442],{"class":300},[266,454,285],{"class":272},[266,456,288],{"class":272},[266,458,308],{"class":272},[266,460,461],{"class":311},"X-Forwarded-For",[266,463,285],{"class":272},[266,465,317],{"class":272},[266,467,468,470,473,475,477,481],{"class":268,"line":340},[266,469,297],{"class":272},[266,471,472],{"class":300},"index",[266,474,285],{"class":272},[266,476,288],{"class":272},[266,478,480],{"class":479},"sbssI"," 0",[266,482,317],{"class":272},[266,484,485,487,490,492,494,496,499],{"class":268,"line":346},[266,486,297],{"class":272},[266,488,489],{"class":300},"fallback",[266,491,285],{"class":272},[266,493,288],{"class":272},[266,495,308],{"class":272},[266,497,498],{"class":311},"peer_ip",[266,500,337],{"class":272},[266,502,504],{"class":268,"line":503},7,[266,505,343],{"class":272},[266,507,509],{"class":268,"line":508},8,[266,510,349],{"class":272},[125,512,513,526],{},[128,514,515],{},[131,516,517,519,521,524],{},[134,518,136],{},[134,520,139],{},[134,522,523],{},"Default",[134,525,145],{},[147,527,528,545,563,579],{},[131,529,530,534,537,542],{},[152,531,532],{},[107,533,433],{},[152,535,536],{},"enum",[152,538,539],{},[107,540,541],{},"\"peer_ip\"",[152,543,544],{},"How to resolve client IP",[131,546,547,551,553,555],{},[152,548,549],{},[107,550,442],{},[152,552,159],{},[152,554,234],{},[152,556,557,558,395,560,378],{},"Header name (when source is ",[107,559,442],{},[107,561,562],{},"header_index",[131,564,565,569,572,574],{},[152,566,567],{},[107,568,472],{},[152,570,571],{},"integer",[152,573,234],{},[152,575,576,577,378],{},"Comma-separated index (0-based, when source is ",[107,578,562],{},[131,580,581,585,587,589],{},[152,582,583],{},[107,584,489],{},[152,586,536],{},[152,588,234],{},[152,590,591],{},"Fallback when header is missing",[593,594,596,598],"h3",{"id":595},"source-values",[107,597,433],{}," values",[125,600,601,610],{},[128,602,603],{},[131,604,605,608],{},[134,606,607],{},"Value",[134,609,145],{},[147,611,612,621,631],{},[131,613,614,618],{},[152,615,616],{},[107,617,541],{},[152,619,620],{},"Use the direct TCP connection IP",[131,622,623,628],{},[152,624,625],{},[107,626,627],{},"\"header\"",[152,629,630],{},"Read IP from a single-valued header",[131,632,633,638],{},[152,634,635],{},[107,636,637],{},"\"header_index\"",[152,639,640],{},"Read IP from a specific index in a comma-separated header",[593,642,644],{"id":643},"example-cloudflare","Example: Cloudflare",[257,646,648],{"className":259,"code":647,"language":261,"meta":262,"style":262},"{\n  \"client_ip\": {\n    \"source\": \"header\",\n    \"header\": \"CF-Connecting-IP\"\n  }\n}\n",[107,649,650,654,666,684,701,705],{"__ignoreMap":262},[266,651,652],{"class":268,"line":269},[266,653,273],{"class":272},[266,655,656,658,660,662,664],{"class":268,"line":276},[266,657,279],{"class":272},[266,659,229],{"class":282},[266,661,285],{"class":272},[266,663,288],{"class":272},[266,665,291],{"class":272},[266,667,668,670,672,674,676,678,680,682],{"class":268,"line":294},[266,669,297],{"class":272},[266,671,433],{"class":300},[266,673,285],{"class":272},[266,675,288],{"class":272},[266,677,308],{"class":272},[266,679,442],{"class":311},[266,681,285],{"class":272},[266,683,317],{"class":272},[266,685,686,688,690,692,694,696,699],{"class":268,"line":320},[266,687,297],{"class":272},[266,689,442],{"class":300},[266,691,285],{"class":272},[266,693,288],{"class":272},[266,695,308],{"class":272},[266,697,698],{"class":311},"CF-Connecting-IP",[266,700,337],{"class":272},[266,702,703],{"class":268,"line":340},[266,704,343],{"class":272},[266,706,707],{"class":268,"line":346},[266,708,349],{"class":272},[593,710,712],{"id":711},"example-nginx-reverse-proxy","Example: Nginx reverse proxy",[257,714,716],{"className":259,"code":715,"language":261,"meta":262,"style":262},"{\n  \"client_ip\": {\n    \"source\": \"header_index\",\n    \"header\": \"X-Forwarded-For\",\n    \"index\": 0,\n    \"fallback\": \"peer_ip\"\n  }\n}\n",[107,717,718,722,734,752,770,784,800,804],{"__ignoreMap":262},[266,719,720],{"class":268,"line":269},[266,721,273],{"class":272},[266,723,724,726,728,730,732],{"class":268,"line":276},[266,725,279],{"class":272},[266,727,229],{"class":282},[266,729,285],{"class":272},[266,731,288],{"class":272},[266,733,291],{"class":272},[266,735,736,738,740,742,744,746,748,750],{"class":268,"line":294},[266,737,297],{"class":272},[266,739,433],{"class":300},[266,741,285],{"class":272},[266,743,288],{"class":272},[266,745,308],{"class":272},[266,747,562],{"class":311},[266,749,285],{"class":272},[266,751,317],{"class":272},[266,753,754,756,758,760,762,764,766,768],{"class":268,"line":320},[266,755,297],{"class":272},[266,757,442],{"class":300},[266,759,285],{"class":272},[266,761,288],{"class":272},[266,763,308],{"class":272},[266,765,461],{"class":311},[266,767,285],{"class":272},[266,769,317],{"class":272},[266,771,772,774,776,778,780,782],{"class":268,"line":340},[266,773,297],{"class":272},[266,775,472],{"class":300},[266,777,285],{"class":272},[266,779,288],{"class":272},[266,781,480],{"class":479},[266,783,317],{"class":272},[266,785,786,788,790,792,794,796,798],{"class":268,"line":346},[266,787,297],{"class":272},[266,789,489],{"class":300},[266,791,285],{"class":272},[266,793,288],{"class":272},[266,795,308],{"class":272},[266,797,498],{"class":311},[266,799,337],{"class":272},[266,801,802],{"class":268,"line":503},[266,803,343],{"class":272},[266,805,806],{"class":268,"line":508},[266,807,349],{"class":272},[120,809,810],{"id":244},[107,811,244],{},[257,813,815],{"className":259,"code":814,"language":261,"meta":262,"style":262},"{\n  \"plugins\": {\n    \"ip_intel\": { },\n    \"firewall\": { },\n    \"rate_limiting\": { },\n    \"cache\": { },\n    \"load_balancer\": { },\n    \"logging\": { }\n  }\n}\n",[107,816,817,821,833,850,865,880,895,910,926,931],{"__ignoreMap":262},[266,818,819],{"class":268,"line":269},[266,820,273],{"class":272},[266,822,823,825,827,829,831],{"class":268,"line":276},[266,824,279],{"class":272},[266,826,244],{"class":282},[266,828,285],{"class":272},[266,830,288],{"class":272},[266,832,291],{"class":272},[266,834,835,837,840,842,844,847],{"class":268,"line":294},[266,836,297],{"class":272},[266,838,839],{"class":300},"ip_intel",[266,841,285],{"class":272},[266,843,288],{"class":272},[266,845,846],{"class":272}," {",[266,848,849],{"class":272}," },\n",[266,851,852,854,857,859,861,863],{"class":268,"line":320},[266,853,297],{"class":272},[266,855,856],{"class":300},"firewall",[266,858,285],{"class":272},[266,860,288],{"class":272},[266,862,846],{"class":272},[266,864,849],{"class":272},[266,866,867,869,872,874,876,878],{"class":268,"line":340},[266,868,297],{"class":272},[266,870,871],{"class":300},"rate_limiting",[266,873,285],{"class":272},[266,875,288],{"class":272},[266,877,846],{"class":272},[266,879,849],{"class":272},[266,881,882,884,887,889,891,893],{"class":268,"line":346},[266,883,297],{"class":272},[266,885,886],{"class":300},"cache",[266,888,285],{"class":272},[266,890,288],{"class":272},[266,892,846],{"class":272},[266,894,849],{"class":272},[266,896,897,899,902,904,906,908],{"class":268,"line":503},[266,898,297],{"class":272},[266,900,901],{"class":300},"load_balancer",[266,903,285],{"class":272},[266,905,288],{"class":272},[266,907,846],{"class":272},[266,909,849],{"class":272},[266,911,912,914,917,919,921,923],{"class":268,"line":508},[266,913,297],{"class":272},[266,915,916],{"class":300},"logging",[266,918,285],{"class":272},[266,920,288],{"class":272},[266,922,846],{"class":272},[266,924,925],{"class":272}," }\n",[266,927,929],{"class":268,"line":928},9,[266,930,343],{"class":272},[266,932,934],{"class":268,"line":933},10,[266,935,349],{"class":272},[593,937,939],{"id":938},"pluginsip_intel",[107,940,941],{},"plugins.ip_intel",[103,943,944,945,948],{},"IP Intelligence. All data is embedded in the binary — only ",[107,946,947],{},"enabled"," is needed.",[257,950,952],{"className":259,"code":951,"language":261,"meta":262,"style":262},"{\n  \"ip_intel\": {\n    \"enabled\": true\n  }\n}\n",[107,953,954,958,970,983,987],{"__ignoreMap":262},[266,955,956],{"class":268,"line":269},[266,957,273],{"class":272},[266,959,960,962,964,966,968],{"class":268,"line":276},[266,961,279],{"class":272},[266,963,839],{"class":282},[266,965,285],{"class":272},[266,967,288],{"class":272},[266,969,291],{"class":272},[266,971,972,974,976,978,980],{"class":268,"line":294},[266,973,297],{"class":272},[266,975,947],{"class":300},[266,977,285],{"class":272},[266,979,288],{"class":272},[266,981,982],{"class":272}," true\n",[266,984,985],{"class":268,"line":320},[266,986,343],{"class":272},[266,988,989],{"class":268,"line":340},[266,990,349],{"class":272},[103,992,993,994,997],{},"See ",[112,995,996],{"href":40},"IP Intelligence plugin"," for details.",[593,999,1001],{"id":1000},"pluginsfirewall",[107,1002,1003],{},"plugins.firewall",[103,1005,1006],{},"Request firewall with allow\u002Fblock\u002Fredirect rules.",[257,1008,1010],{"className":259,"code":1009,"language":261,"meta":262,"style":262},"{\n  \"firewall\": {\n    \"enabled\": true,\n    \"rules\": [\n      {\n        \"id\": \"block-bad-ips\",\n        \"name\": \"Block bad IPs\",\n        \"enabled\": true,\n        \"conditions\": [\n          {\n            \"left\": \"ip.is_tor\",\n            \"operator\": \"equals\",\n            \"value\": true\n          }\n        ],\n        \"action\": {\n          \"type\": \"block\",\n          \"status\": 403\n        }\n      }\n    ]\n  }\n}\n",[107,1011,1012,1016,1028,1041,1055,1060,1081,1101,1113,1126,1131,1154,1175,1189,1195,1201,1215,1237,1252,1258,1264,1270,1275],{"__ignoreMap":262},[266,1013,1014],{"class":268,"line":269},[266,1015,273],{"class":272},[266,1017,1018,1020,1022,1024,1026],{"class":268,"line":276},[266,1019,279],{"class":272},[266,1021,856],{"class":282},[266,1023,285],{"class":272},[266,1025,288],{"class":272},[266,1027,291],{"class":272},[266,1029,1030,1032,1034,1036,1038],{"class":268,"line":294},[266,1031,297],{"class":272},[266,1033,947],{"class":300},[266,1035,285],{"class":272},[266,1037,288],{"class":272},[266,1039,1040],{"class":272}," true,\n",[266,1042,1043,1045,1048,1050,1052],{"class":268,"line":320},[266,1044,297],{"class":272},[266,1046,1047],{"class":300},"rules",[266,1049,285],{"class":272},[266,1051,288],{"class":272},[266,1053,1054],{"class":272}," [\n",[266,1056,1057],{"class":268,"line":340},[266,1058,1059],{"class":272},"      {\n",[266,1061,1062,1065,1068,1070,1072,1074,1077,1079],{"class":268,"line":346},[266,1063,1064],{"class":272},"        \"",[266,1066,1067],{"class":479},"id",[266,1069,285],{"class":272},[266,1071,288],{"class":272},[266,1073,308],{"class":272},[266,1075,1076],{"class":311},"block-bad-ips",[266,1078,285],{"class":272},[266,1080,317],{"class":272},[266,1082,1083,1085,1088,1090,1092,1094,1097,1099],{"class":268,"line":503},[266,1084,1064],{"class":272},[266,1086,1087],{"class":479},"name",[266,1089,285],{"class":272},[266,1091,288],{"class":272},[266,1093,308],{"class":272},[266,1095,1096],{"class":311},"Block bad IPs",[266,1098,285],{"class":272},[266,1100,317],{"class":272},[266,1102,1103,1105,1107,1109,1111],{"class":268,"line":508},[266,1104,1064],{"class":272},[266,1106,947],{"class":479},[266,1108,285],{"class":272},[266,1110,288],{"class":272},[266,1112,1040],{"class":272},[266,1114,1115,1117,1120,1122,1124],{"class":268,"line":928},[266,1116,1064],{"class":272},[266,1118,1119],{"class":479},"conditions",[266,1121,285],{"class":272},[266,1123,288],{"class":272},[266,1125,1054],{"class":272},[266,1127,1128],{"class":268,"line":933},[266,1129,1130],{"class":272},"          {\n",[266,1132,1134,1137,1141,1143,1145,1147,1150,1152],{"class":268,"line":1133},11,[266,1135,1136],{"class":272},"            \"",[266,1138,1140],{"class":1139},"swJcz","left",[266,1142,285],{"class":272},[266,1144,288],{"class":272},[266,1146,308],{"class":272},[266,1148,1149],{"class":311},"ip.is_tor",[266,1151,285],{"class":272},[266,1153,317],{"class":272},[266,1155,1157,1159,1162,1164,1166,1168,1171,1173],{"class":268,"line":1156},12,[266,1158,1136],{"class":272},[266,1160,1161],{"class":1139},"operator",[266,1163,285],{"class":272},[266,1165,288],{"class":272},[266,1167,308],{"class":272},[266,1169,1170],{"class":311},"equals",[266,1172,285],{"class":272},[266,1174,317],{"class":272},[266,1176,1178,1180,1183,1185,1187],{"class":268,"line":1177},13,[266,1179,1136],{"class":272},[266,1181,1182],{"class":1139},"value",[266,1184,285],{"class":272},[266,1186,288],{"class":272},[266,1188,982],{"class":272},[266,1190,1192],{"class":268,"line":1191},14,[266,1193,1194],{"class":272},"          }\n",[266,1196,1198],{"class":268,"line":1197},15,[266,1199,1200],{"class":272},"        ],\n",[266,1202,1204,1206,1209,1211,1213],{"class":268,"line":1203},16,[266,1205,1064],{"class":272},[266,1207,1208],{"class":479},"action",[266,1210,285],{"class":272},[266,1212,288],{"class":272},[266,1214,291],{"class":272},[266,1216,1218,1221,1224,1226,1228,1230,1233,1235],{"class":268,"line":1217},17,[266,1219,1220],{"class":272},"          \"",[266,1222,1223],{"class":1139},"type",[266,1225,285],{"class":272},[266,1227,288],{"class":272},[266,1229,308],{"class":272},[266,1231,1232],{"class":311},"block",[266,1234,285],{"class":272},[266,1236,317],{"class":272},[266,1238,1240,1242,1245,1247,1249],{"class":268,"line":1239},18,[266,1241,1220],{"class":272},[266,1243,1244],{"class":1139},"status",[266,1246,285],{"class":272},[266,1248,288],{"class":272},[266,1250,1251],{"class":479}," 403\n",[266,1253,1255],{"class":268,"line":1254},19,[266,1256,1257],{"class":272},"        }\n",[266,1259,1261],{"class":268,"line":1260},20,[266,1262,1263],{"class":272},"      }\n",[266,1265,1267],{"class":268,"line":1266},21,[266,1268,1269],{"class":272},"    ]\n",[266,1271,1273],{"class":268,"line":1272},22,[266,1274,343],{"class":272},[266,1276,1278],{"class":268,"line":1277},23,[266,1279,349],{"class":272},[103,1281,993,1282,997],{},[112,1283,1284],{"href":45},"Firewall plugin",[593,1286,1288],{"id":1287},"pluginsrate_limiting",[107,1289,1290],{},"plugins.rate_limiting",[103,1292,1293],{},"Sliding-window rate limiting.",[257,1295,1297],{"className":259,"code":1296,"language":261,"meta":262,"style":262},"{\n  \"rate_limiting\": {\n    \"enabled\": true,\n    \"rules\": [\n      {\n        \"id\": \"api-limit\",\n        \"name\": \"API Rate Limit\",\n        \"enabled\": true,\n        \"conditions\": [\n          {\n            \"left\": \"req.path\",\n            \"operator\": \"starts_with\",\n            \"value\": \"\u002Fapi\u002F\"\n          }\n        ],\n        \"key\": \"req.client_ip\",\n        \"limit\": 100,\n        \"window_seconds\": 60,\n        \"action\": {\n          \"type\": \"block\",\n          \"status\": 429\n        }\n      }\n    ]\n  }\n}\n",[107,1298,1299,1303,1315,1327,1339,1343,1362,1381,1393,1405,1409,1428,1447,1464,1468,1472,1492,1508,1524,1536,1554,1567,1571,1575,1580,1585],{"__ignoreMap":262},[266,1300,1301],{"class":268,"line":269},[266,1302,273],{"class":272},[266,1304,1305,1307,1309,1311,1313],{"class":268,"line":276},[266,1306,279],{"class":272},[266,1308,871],{"class":282},[266,1310,285],{"class":272},[266,1312,288],{"class":272},[266,1314,291],{"class":272},[266,1316,1317,1319,1321,1323,1325],{"class":268,"line":294},[266,1318,297],{"class":272},[266,1320,947],{"class":300},[266,1322,285],{"class":272},[266,1324,288],{"class":272},[266,1326,1040],{"class":272},[266,1328,1329,1331,1333,1335,1337],{"class":268,"line":320},[266,1330,297],{"class":272},[266,1332,1047],{"class":300},[266,1334,285],{"class":272},[266,1336,288],{"class":272},[266,1338,1054],{"class":272},[266,1340,1341],{"class":268,"line":340},[266,1342,1059],{"class":272},[266,1344,1345,1347,1349,1351,1353,1355,1358,1360],{"class":268,"line":346},[266,1346,1064],{"class":272},[266,1348,1067],{"class":479},[266,1350,285],{"class":272},[266,1352,288],{"class":272},[266,1354,308],{"class":272},[266,1356,1357],{"class":311},"api-limit",[266,1359,285],{"class":272},[266,1361,317],{"class":272},[266,1363,1364,1366,1368,1370,1372,1374,1377,1379],{"class":268,"line":503},[266,1365,1064],{"class":272},[266,1367,1087],{"class":479},[266,1369,285],{"class":272},[266,1371,288],{"class":272},[266,1373,308],{"class":272},[266,1375,1376],{"class":311},"API Rate Limit",[266,1378,285],{"class":272},[266,1380,317],{"class":272},[266,1382,1383,1385,1387,1389,1391],{"class":268,"line":508},[266,1384,1064],{"class":272},[266,1386,947],{"class":479},[266,1388,285],{"class":272},[266,1390,288],{"class":272},[266,1392,1040],{"class":272},[266,1394,1395,1397,1399,1401,1403],{"class":268,"line":928},[266,1396,1064],{"class":272},[266,1398,1119],{"class":479},[266,1400,285],{"class":272},[266,1402,288],{"class":272},[266,1404,1054],{"class":272},[266,1406,1407],{"class":268,"line":933},[266,1408,1130],{"class":272},[266,1410,1411,1413,1415,1417,1419,1421,1424,1426],{"class":268,"line":1133},[266,1412,1136],{"class":272},[266,1414,1140],{"class":1139},[266,1416,285],{"class":272},[266,1418,288],{"class":272},[266,1420,308],{"class":272},[266,1422,1423],{"class":311},"req.path",[266,1425,285],{"class":272},[266,1427,317],{"class":272},[266,1429,1430,1432,1434,1436,1438,1440,1443,1445],{"class":268,"line":1156},[266,1431,1136],{"class":272},[266,1433,1161],{"class":1139},[266,1435,285],{"class":272},[266,1437,288],{"class":272},[266,1439,308],{"class":272},[266,1441,1442],{"class":311},"starts_with",[266,1444,285],{"class":272},[266,1446,317],{"class":272},[266,1448,1449,1451,1453,1455,1457,1459,1462],{"class":268,"line":1177},[266,1450,1136],{"class":272},[266,1452,1182],{"class":1139},[266,1454,285],{"class":272},[266,1456,288],{"class":272},[266,1458,308],{"class":272},[266,1460,1461],{"class":311},"\u002Fapi\u002F",[266,1463,337],{"class":272},[266,1465,1466],{"class":268,"line":1191},[266,1467,1194],{"class":272},[266,1469,1470],{"class":268,"line":1197},[266,1471,1200],{"class":272},[266,1473,1474,1476,1479,1481,1483,1485,1488,1490],{"class":268,"line":1203},[266,1475,1064],{"class":272},[266,1477,1478],{"class":479},"key",[266,1480,285],{"class":272},[266,1482,288],{"class":272},[266,1484,308],{"class":272},[266,1486,1487],{"class":311},"req.client_ip",[266,1489,285],{"class":272},[266,1491,317],{"class":272},[266,1493,1494,1496,1499,1501,1503,1506],{"class":268,"line":1217},[266,1495,1064],{"class":272},[266,1497,1498],{"class":479},"limit",[266,1500,285],{"class":272},[266,1502,288],{"class":272},[266,1504,1505],{"class":479}," 100",[266,1507,317],{"class":272},[266,1509,1510,1512,1515,1517,1519,1522],{"class":268,"line":1239},[266,1511,1064],{"class":272},[266,1513,1514],{"class":479},"window_seconds",[266,1516,285],{"class":272},[266,1518,288],{"class":272},[266,1520,1521],{"class":479}," 60",[266,1523,317],{"class":272},[266,1525,1526,1528,1530,1532,1534],{"class":268,"line":1254},[266,1527,1064],{"class":272},[266,1529,1208],{"class":479},[266,1531,285],{"class":272},[266,1533,288],{"class":272},[266,1535,291],{"class":272},[266,1537,1538,1540,1542,1544,1546,1548,1550,1552],{"class":268,"line":1260},[266,1539,1220],{"class":272},[266,1541,1223],{"class":1139},[266,1543,285],{"class":272},[266,1545,288],{"class":272},[266,1547,308],{"class":272},[266,1549,1232],{"class":311},[266,1551,285],{"class":272},[266,1553,317],{"class":272},[266,1555,1556,1558,1560,1562,1564],{"class":268,"line":1266},[266,1557,1220],{"class":272},[266,1559,1244],{"class":1139},[266,1561,285],{"class":272},[266,1563,288],{"class":272},[266,1565,1566],{"class":479}," 429\n",[266,1568,1569],{"class":268,"line":1272},[266,1570,1257],{"class":272},[266,1572,1573],{"class":268,"line":1277},[266,1574,1263],{"class":272},[266,1576,1578],{"class":268,"line":1577},24,[266,1579,1269],{"class":272},[266,1581,1583],{"class":268,"line":1582},25,[266,1584,343],{"class":272},[266,1586,1588],{"class":268,"line":1587},26,[266,1589,349],{"class":272},[1591,1592,1594],"h4",{"id":1593},"rule-fields","Rule fields",[125,1596,1597,1609],{},[128,1598,1599],{},[131,1600,1601,1603,1605,1607],{},[134,1602,136],{},[134,1604,139],{},[134,1606,142],{},[134,1608,145],{},[147,1610,1611,1624,1636,1653,1675,1689,1703,1716],{},[131,1612,1613,1617,1619,1621],{},[152,1614,1615],{},[107,1616,1067],{},[152,1618,159],{},[152,1620,162],{},[152,1622,1623],{},"Unique rule identifier",[131,1625,1626,1630,1632,1634],{},[152,1627,1628],{},[107,1629,1087],{},[152,1631,159],{},[152,1633,162],{},[152,1635,179],{},[131,1637,1638,1642,1645,1650],{},[152,1639,1640],{},[107,1641,947],{},[152,1643,1644],{},"bool",[152,1646,1647],{},[107,1648,1649],{},"true",[152,1651,1652],{},"Enable\u002Fdisable rule",[131,1654,1655,1659,1662,1667],{},[152,1656,1657],{},[107,1658,1119],{},[152,1660,1661],{},"array",[152,1663,1664],{},[107,1665,1666],{},"[]",[152,1668,1669,1670,1674],{},"When to apply (",[1671,1672,1673],"strong",{},"empty = every request",", e.g. a global limit)",[131,1676,1677,1681,1684,1686],{},[152,1678,1679],{},[107,1680,1478],{},[152,1682,1683],{},"string | array",[152,1685,162],{},[152,1687,1688],{},"What to count per client (see below)",[131,1690,1691,1695,1698,1700],{},[152,1692,1693],{},[107,1694,1498],{},[152,1696,1697],{},"int > 0",[152,1699,162],{},[152,1701,1702],{},"Max requests per window",[131,1704,1705,1709,1711,1713],{},[152,1706,1707],{},[107,1708,1514],{},[152,1710,1697],{},[152,1712,162],{},[152,1714,1715],{},"Sliding window length",[131,1717,1718,1722,1724,1726],{},[152,1719,1720],{},[107,1721,1208],{},[152,1723,217],{},[152,1725,234],{},[152,1727,1728,1731],{},[107,1729,1730],{},"{ \"type\": \"block\", \"status\": 429 }"," (default)",[1591,1733,1735,1737],{"id":1734},"key-forms",[107,1736,1478],{}," forms",[125,1739,1740,1753],{},[128,1741,1742],{},[131,1743,1744,1747,1750],{},[134,1745,1746],{},"Form",[134,1748,1749],{},"Example",[134,1751,1752],{},"Meaning",[147,1754,1755,1768,1783,1796],{},[131,1756,1757,1760,1765],{},[152,1758,1759],{},"Single path",[152,1761,1762],{},[107,1763,1764],{},"\"key\": \"req.client_ip\"",[152,1766,1767],{},"Count per resolved client IP",[131,1769,1770,1773,1778],{},[152,1771,1772],{},"Composite array",[152,1774,1775],{},[107,1776,1777],{},"\"key\": [\"req.client_ip\", \"req.header.X-API-Key\"]",[152,1779,1780,1781,378],{},"Count per combination (parts joined with ",[107,1782,288],{},[131,1784,1785,1788,1793],{},[152,1786,1787],{},"JWT claim",[152,1789,1790],{},[107,1791,1792],{},"\"key\": \"req.header.authorization.jwt.user_id\"",[152,1794,1795],{},"Decode Bearer token, count per claim",[131,1797,1798,1801,1806],{},[152,1799,1800],{},"Legacy template",[152,1802,1803],{},[107,1804,1805],{},"\"key\": \"{req.client_ip}+{http.header.x-api-key}\"",[152,1807,1808],{},"Placeholders resolved and concatenated",[103,1810,1811,1812,1816],{},"Any ",[112,1813,1815],{"href":1814},"\u002Fquayel-gateway\u002Fconditions#condition-paths","condition path"," can be used as a key part.",[103,1818,993,1819,997],{},[112,1820,1821],{"href":50},"Rate Limiting plugin",[593,1823,1825],{"id":1824},"pluginscache",[107,1826,1827],{},"plugins.cache",[103,1829,1830,1831,1834,1835,1838,1839,1842],{},"Edge caching with singleflight revalidation. Supports ",[107,1832,1833],{},"stale-while-revalidate"," and ",[107,1836,1837],{},"stale-if-error"," from origin's ",[107,1840,1841],{},"Cache-Control"," headers.",[257,1844,1846],{"className":259,"code":1845,"language":261,"meta":262,"style":262},"{\n  \"cache\": {\n    \"enabled\": true,\n    \"max_object_size_bytes\": 10485760,\n    \"rules\": [\n      {\n        \"id\": \"cache-static\",\n        \"name\": \"Cache static assets\",\n        \"enabled\": true,\n        \"conditions\": [\n          {\n            \"left\": \"req.path\",\n            \"operator\": \"ends_with\",\n            \"value\": \".css\"\n          }\n        ],\n        \"cache\": \"eligible\",\n        \"edge_ttl\": {\n          \"mode\": \"custom\",\n          \"seconds\": 3600\n        },\n        \"browser_ttl\": {\n          \"mode\": \"custom\",\n          \"seconds\": 300\n        },\n        \"cache_key\": {\n          \"mode\": \"default\"\n        },\n        \"statuses\": [200, 301, 404]\n      }\n    ]\n  }\n}\n",[107,1847,1848,1852,1864,1876,1892,1904,1908,1927,1946,1958,1970,1974,1992,2011,2028,2032,2036,2055,2068,2088,2102,2107,2120,2138,2151,2155,2168,2186,2191,2223,2228,2233,2238],{"__ignoreMap":262},[266,1849,1850],{"class":268,"line":269},[266,1851,273],{"class":272},[266,1853,1854,1856,1858,1860,1862],{"class":268,"line":276},[266,1855,279],{"class":272},[266,1857,886],{"class":282},[266,1859,285],{"class":272},[266,1861,288],{"class":272},[266,1863,291],{"class":272},[266,1865,1866,1868,1870,1872,1874],{"class":268,"line":294},[266,1867,297],{"class":272},[266,1869,947],{"class":300},[266,1871,285],{"class":272},[266,1873,288],{"class":272},[266,1875,1040],{"class":272},[266,1877,1878,1880,1883,1885,1887,1890],{"class":268,"line":320},[266,1879,297],{"class":272},[266,1881,1882],{"class":300},"max_object_size_bytes",[266,1884,285],{"class":272},[266,1886,288],{"class":272},[266,1888,1889],{"class":479}," 10485760",[266,1891,317],{"class":272},[266,1893,1894,1896,1898,1900,1902],{"class":268,"line":340},[266,1895,297],{"class":272},[266,1897,1047],{"class":300},[266,1899,285],{"class":272},[266,1901,288],{"class":272},[266,1903,1054],{"class":272},[266,1905,1906],{"class":268,"line":346},[266,1907,1059],{"class":272},[266,1909,1910,1912,1914,1916,1918,1920,1923,1925],{"class":268,"line":503},[266,1911,1064],{"class":272},[266,1913,1067],{"class":479},[266,1915,285],{"class":272},[266,1917,288],{"class":272},[266,1919,308],{"class":272},[266,1921,1922],{"class":311},"cache-static",[266,1924,285],{"class":272},[266,1926,317],{"class":272},[266,1928,1929,1931,1933,1935,1937,1939,1942,1944],{"class":268,"line":508},[266,1930,1064],{"class":272},[266,1932,1087],{"class":479},[266,1934,285],{"class":272},[266,1936,288],{"class":272},[266,1938,308],{"class":272},[266,1940,1941],{"class":311},"Cache static assets",[266,1943,285],{"class":272},[266,1945,317],{"class":272},[266,1947,1948,1950,1952,1954,1956],{"class":268,"line":928},[266,1949,1064],{"class":272},[266,1951,947],{"class":479},[266,1953,285],{"class":272},[266,1955,288],{"class":272},[266,1957,1040],{"class":272},[266,1959,1960,1962,1964,1966,1968],{"class":268,"line":933},[266,1961,1064],{"class":272},[266,1963,1119],{"class":479},[266,1965,285],{"class":272},[266,1967,288],{"class":272},[266,1969,1054],{"class":272},[266,1971,1972],{"class":268,"line":1133},[266,1973,1130],{"class":272},[266,1975,1976,1978,1980,1982,1984,1986,1988,1990],{"class":268,"line":1156},[266,1977,1136],{"class":272},[266,1979,1140],{"class":1139},[266,1981,285],{"class":272},[266,1983,288],{"class":272},[266,1985,308],{"class":272},[266,1987,1423],{"class":311},[266,1989,285],{"class":272},[266,1991,317],{"class":272},[266,1993,1994,1996,1998,2000,2002,2004,2007,2009],{"class":268,"line":1177},[266,1995,1136],{"class":272},[266,1997,1161],{"class":1139},[266,1999,285],{"class":272},[266,2001,288],{"class":272},[266,2003,308],{"class":272},[266,2005,2006],{"class":311},"ends_with",[266,2008,285],{"class":272},[266,2010,317],{"class":272},[266,2012,2013,2015,2017,2019,2021,2023,2026],{"class":268,"line":1191},[266,2014,1136],{"class":272},[266,2016,1182],{"class":1139},[266,2018,285],{"class":272},[266,2020,288],{"class":272},[266,2022,308],{"class":272},[266,2024,2025],{"class":311},".css",[266,2027,337],{"class":272},[266,2029,2030],{"class":268,"line":1197},[266,2031,1194],{"class":272},[266,2033,2034],{"class":268,"line":1203},[266,2035,1200],{"class":272},[266,2037,2038,2040,2042,2044,2046,2048,2051,2053],{"class":268,"line":1217},[266,2039,1064],{"class":272},[266,2041,886],{"class":479},[266,2043,285],{"class":272},[266,2045,288],{"class":272},[266,2047,308],{"class":272},[266,2049,2050],{"class":311},"eligible",[266,2052,285],{"class":272},[266,2054,317],{"class":272},[266,2056,2057,2059,2062,2064,2066],{"class":268,"line":1239},[266,2058,1064],{"class":272},[266,2060,2061],{"class":479},"edge_ttl",[266,2063,285],{"class":272},[266,2065,288],{"class":272},[266,2067,291],{"class":272},[266,2069,2070,2072,2075,2077,2079,2081,2084,2086],{"class":268,"line":1254},[266,2071,1220],{"class":272},[266,2073,2074],{"class":1139},"mode",[266,2076,285],{"class":272},[266,2078,288],{"class":272},[266,2080,308],{"class":272},[266,2082,2083],{"class":311},"custom",[266,2085,285],{"class":272},[266,2087,317],{"class":272},[266,2089,2090,2092,2095,2097,2099],{"class":268,"line":1260},[266,2091,1220],{"class":272},[266,2093,2094],{"class":1139},"seconds",[266,2096,285],{"class":272},[266,2098,288],{"class":272},[266,2100,2101],{"class":479}," 3600\n",[266,2103,2104],{"class":268,"line":1266},[266,2105,2106],{"class":272},"        },\n",[266,2108,2109,2111,2114,2116,2118],{"class":268,"line":1272},[266,2110,1064],{"class":272},[266,2112,2113],{"class":479},"browser_ttl",[266,2115,285],{"class":272},[266,2117,288],{"class":272},[266,2119,291],{"class":272},[266,2121,2122,2124,2126,2128,2130,2132,2134,2136],{"class":268,"line":1277},[266,2123,1220],{"class":272},[266,2125,2074],{"class":1139},[266,2127,285],{"class":272},[266,2129,288],{"class":272},[266,2131,308],{"class":272},[266,2133,2083],{"class":311},[266,2135,285],{"class":272},[266,2137,317],{"class":272},[266,2139,2140,2142,2144,2146,2148],{"class":268,"line":1577},[266,2141,1220],{"class":272},[266,2143,2094],{"class":1139},[266,2145,285],{"class":272},[266,2147,288],{"class":272},[266,2149,2150],{"class":479}," 300\n",[266,2152,2153],{"class":268,"line":1582},[266,2154,2106],{"class":272},[266,2156,2157,2159,2162,2164,2166],{"class":268,"line":1587},[266,2158,1064],{"class":272},[266,2160,2161],{"class":479},"cache_key",[266,2163,285],{"class":272},[266,2165,288],{"class":272},[266,2167,291],{"class":272},[266,2169,2171,2173,2175,2177,2179,2181,2184],{"class":268,"line":2170},27,[266,2172,1220],{"class":272},[266,2174,2074],{"class":1139},[266,2176,285],{"class":272},[266,2178,288],{"class":272},[266,2180,308],{"class":272},[266,2182,2183],{"class":311},"default",[266,2185,337],{"class":272},[266,2187,2189],{"class":268,"line":2188},28,[266,2190,2106],{"class":272},[266,2192,2194,2196,2199,2201,2203,2206,2209,2212,2215,2217,2220],{"class":268,"line":2193},29,[266,2195,1064],{"class":272},[266,2197,2198],{"class":479},"statuses",[266,2200,285],{"class":272},[266,2202,288],{"class":272},[266,2204,2205],{"class":272}," [",[266,2207,2208],{"class":479},"200",[266,2210,2211],{"class":272},",",[266,2213,2214],{"class":479}," 301",[266,2216,2211],{"class":272},[266,2218,2219],{"class":479}," 404",[266,2221,2222],{"class":272},"]\n",[266,2224,2226],{"class":268,"line":2225},30,[266,2227,1263],{"class":272},[266,2229,2231],{"class":268,"line":2230},31,[266,2232,1269],{"class":272},[266,2234,2236],{"class":268,"line":2235},32,[266,2237,343],{"class":272},[266,2239,2241],{"class":268,"line":2240},33,[266,2242,349],{"class":272},[125,2244,2245,2257],{},[128,2246,2247],{},[131,2248,2249,2251,2253,2255],{},[134,2250,136],{},[134,2252,139],{},[134,2254,523],{},[134,2256,145],{},[147,2258,2259,2274,2291],{},[131,2260,2261,2265,2267,2271],{},[152,2262,2263],{},[107,2264,947],{},[152,2266,1644],{},[152,2268,2269],{},[107,2270,1649],{},[152,2272,2273],{},"Enable\u002Fdisable cache plugin",[131,2275,2276,2280,2283,2288],{},[152,2277,2278],{},[107,2279,1882],{},[152,2281,2282],{},"int",[152,2284,2285],{},[107,2286,2287],{},"10485760",[152,2289,2290],{},"Maximum response body size to cache (10 MB)",[131,2292,2293,2297,2299,2303],{},[152,2294,2295],{},[107,2296,1047],{},[152,2298,1661],{},[152,2300,2301],{},[107,2302,1666],{},[152,2304,2305],{},"Cache rules (first match wins)",[1591,2307,1594],{"id":2308},"rule-fields-1",[125,2310,2311,2323],{},[128,2312,2313],{},[131,2314,2315,2317,2319,2321],{},[134,2316,136],{},[134,2318,139],{},[134,2320,142],{},[134,2322,145],{},[147,2324,2325,2337,2349,2363,2378,2398,2411,2424,2437,2453,2471],{},[131,2326,2327,2331,2333,2335],{},[152,2328,2329],{},[107,2330,1067],{},[152,2332,159],{},[152,2334,162],{},[152,2336,1623],{},[131,2338,2339,2343,2345,2347],{},[152,2340,2341],{},[107,2342,1087],{},[152,2344,159],{},[152,2346,162],{},[152,2348,179],{},[131,2350,2351,2355,2357,2361],{},[152,2352,2353],{},[107,2354,947],{},[152,2356,1644],{},[152,2358,2359],{},[107,2360,1649],{},[152,2362,1652],{},[131,2364,2365,2369,2371,2375],{},[152,2366,2367],{},[107,2368,1119],{},[152,2370,1661],{},[152,2372,2373],{},[107,2374,1666],{},[152,2376,2377],{},"When to apply (empty = always)",[131,2379,2380,2384,2386,2391],{},[152,2381,2382],{},[107,2383,886],{},[152,2385,536],{},[152,2387,2388],{},[107,2389,2390],{},"\"eligible\"",[152,2392,2393,395,2395],{},[107,2394,2390],{},[107,2396,2397],{},"\"bypass\"",[131,2399,2400,2404,2406,2408],{},[152,2401,2402],{},[107,2403,2061],{},[152,2405,217],{},[152,2407,162],{},[152,2409,2410],{},"Edge cache TTL configuration",[131,2412,2413,2417,2419,2421],{},[152,2414,2415],{},[107,2416,2113],{},[152,2418,217],{},[152,2420,234],{},[152,2422,2423],{},"Browser Cache-Control header",[131,2425,2426,2430,2432,2434],{},[152,2427,2428],{},[107,2429,2161],{},[152,2431,217],{},[152,2433,234],{},[152,2435,2436],{},"Cache key configuration",[131,2438,2439,2443,2445,2450],{},[152,2440,2441],{},[107,2442,2198],{},[152,2444,1661],{},[152,2446,2447],{},[107,2448,2449],{},"[200, 301, 404]",[152,2451,2452],{},"HTTP status codes to cache",[131,2454,2455,2460,2463,2465],{},[152,2456,2457],{},[107,2458,2459],{},"stale_while_revalidate",[152,2461,2462],{},"number",[152,2464,234],{},[152,2466,2467,2468,2470],{},"SWR window in seconds. Overrides origin ",[107,2469,1841],{}," header.",[131,2472,2473,2478,2480,2482],{},[152,2474,2475],{},[107,2476,2477],{},"stale_if_error",[152,2479,2462],{},[152,2481,234],{},[152,2483,2484,2485,2470],{},"SIE window in seconds. Overrides origin ",[107,2486,1841],{},[1591,2488,2490,2492],{"id":2489},"edge_ttl-modes",[107,2491,2061],{}," modes",[125,2494,2495,2507],{},[128,2496,2497],{},[131,2498,2499,2502,2504],{},[134,2500,2501],{},"Mode",[134,2503,145],{},[134,2505,2506],{},"Extra fields",[147,2508,2509,2531],{},[131,2510,2511,2516,2529],{},[152,2512,2513],{},[107,2514,2515],{},"\"origin\"",[152,2517,2518,2519,2521,2522,2525,2526,378],{},"Read TTL from upstream ",[107,2520,1841],{}," (",[107,2523,2524],{},"s-maxage"," > ",[107,2527,2528],{},"max-age",[152,2530,234],{},[131,2532,2533,2538,2544],{},[152,2534,2535],{},[107,2536,2537],{},"\"custom\"",[152,2539,2540,2541,2543],{},"Use fixed TTL (falls back to CDN headers if ",[107,2542,2094],{}," not set)",[152,2545,2546,2548],{},[107,2547,2094],{}," (optional)",[1591,2550,2552,2492],{"id":2551},"browser_ttl-modes",[107,2553,2113],{},[125,2555,2556,2566],{},[128,2557,2558],{},[131,2559,2560,2562,2564],{},[134,2561,2501],{},[134,2563,145],{},[134,2565,2506],{},[147,2567,2568,2579,2590],{},[131,2569,2570,2574,2577],{},[152,2571,2572],{},[107,2573,2397],{},[152,2575,2576],{},"Don't modify browser Cache-Control",[152,2578,234],{},[131,2580,2581,2585,2588],{},[152,2582,2583],{},[107,2584,2515],{},[152,2586,2587],{},"Forward upstream Cache-Control",[152,2589,234],{},[131,2591,2592,2596,2599],{},[152,2593,2594],{},[107,2595,2537],{},[152,2597,2598],{},"Set specific browser TTL",[152,2600,2601,2548],{},[107,2602,2094],{},[1591,2604,2606,2492],{"id":2605},"cache_key-modes",[107,2607,2161],{},[125,2609,2610,2620],{},[128,2611,2612],{},[131,2613,2614,2616,2618],{},[134,2615,2501],{},[134,2617,145],{},[134,2619,2506],{},[147,2621,2622,2637],{},[131,2623,2624,2629,2635],{},[152,2625,2626],{},[107,2627,2628],{},"\"default\"",[152,2630,2631,2632],{},"Key = ",[107,2633,2634],{},"scheme|host|path",[152,2636,234],{},[131,2638,2639,2643,2646],{},[152,2640,2641],{},[107,2642,2537],{},[152,2644,2645],{},"Add custom parts to key",[152,2647,2648,2651],{},[107,2649,2650],{},"parts"," (array of condition paths)",[1591,2653,2655],{"id":2654},"cdn-cache-control-parsing","CDN Cache-Control parsing",[103,2657,2658,2659,2662,2663,2665,2666,2668],{},"When ",[107,2660,2661],{},"edge_ttl.mode"," is ",[107,2664,2515],{},", the gateway reads these directives from the upstream ",[107,2667,1841],{}," header:",[125,2670,2671,2684],{},[128,2672,2673],{},[131,2674,2675,2678,2681],{},[134,2676,2677],{},"Directive",[134,2679,2680],{},"Used as",[134,2682,2683],{},"Priority",[147,2685,2686,2698,2710,2722,2733,2746,2757],{},[131,2687,2688,2692,2695],{},[152,2689,2690],{},[107,2691,2524],{},[152,2693,2694],{},"Edge TTL",[152,2696,2697],{},"1st",[131,2699,2700,2704,2707],{},[152,2701,2702],{},[107,2703,2528],{},[152,2705,2706],{},"Edge TTL (fallback)",[152,2708,2709],{},"2nd",[131,2711,2712,2716,2719],{},[152,2713,2714],{},[107,2715,1833],{},[152,2717,2718],{},"SWR window",[152,2720,2721],{},"Config override > origin header",[131,2723,2724,2728,2731],{},[152,2725,2726],{},[107,2727,1837],{},[152,2729,2730],{},"SIE window",[152,2732,2721],{},[131,2734,2735,2740,2743],{},[152,2736,2737],{},[107,2738,2739],{},"no-store",[152,2741,2742],{},"Skip cache",[152,2744,2745],{},"Overrides all",[131,2747,2748,2753,2755],{},[152,2749,2750],{},[107,2751,2752],{},"no-cache",[152,2754,2742],{},[152,2756,2745],{},[131,2758,2759,2764,2766],{},[152,2760,2761],{},[107,2762,2763],{},"private",[152,2765,2742],{},[152,2767,2745],{},[2769,2770,2771,1834,2773,2775,2776,2778],"note",{},[107,2772,1833],{},[107,2774,1837],{}," can be set in the gateway config (recommended) or parsed from the upstream ",[107,2777,1841],{}," header. Gateway config takes priority over origin headers.",[103,2780,993,2781,997],{},[112,2782,2783],{"href":55},"Cache plugin",[593,2785,2787],{"id":2786},"pluginsload_balancer",[107,2788,2789],{},"plugins.load_balancer",[103,2791,2792],{},"Upstream load balancing.",[257,2794,2796],{"className":259,"code":2795,"language":261,"meta":262,"style":262},"{\n  \"load_balancer\": {\n    \"enabled\": true,\n    \"load_balancers\": [\n      {\n        \"id\": \"default\",\n        \"name\": \"My Backend\",\n        \"enabled\": true,\n        \"conditions\": [],\n        \"algorithm\": {\n          \"type\": \"round_robin\"\n        },\n        \"targets\": [\n          {\n            \"id\": \"backend-1\",\n            \"host\": \"10.0.0.1\",\n            \"port\": 8080,\n            \"protocol\": \"http\",\n            \"weight\": 100,\n            \"enabled\": true,\n            \"tls\": {\n              \"verify\": false,\n              \"sni\": null\n            }\n          },\n          {\n            \"id\": \"backend-2\",\n            \"host\": \"10.0.0.2\",\n            \"port\": 8080,\n            \"protocol\": \"http\",\n            \"weight\": 100,\n            \"enabled\": true\n          }\n        ],\n        \"host_header\": {\n          \"mode\": \"visitor\"\n        },\n        \"health_check\": {\n          \"mode\": \"http\",\n          \"path\": \"\u002Fhealth\",\n          \"interval_seconds\": 5,\n          \"timeout_ms\": 1000,\n          \"expected_statuses\": [200],\n          \"healthy_threshold\": 2,\n          \"unhealthy_threshold\": 3\n        }\n      }\n    ]\n  }\n}\n",[107,2797,2798,2802,2814,2826,2839,2843,2861,2880,2892,2905,2918,2935,2939,2952,2956,2975,2995,3011,3030,3045,3057,3070,3086,3100,3105,3110,3114,3133,3152,3166,3184,3198,3210,3214,3219,3233,3251,3256,3270,3289,3310,3327,3344,3363,3380,3395,3400,3405,3410,3415],{"__ignoreMap":262},[266,2799,2800],{"class":268,"line":269},[266,2801,273],{"class":272},[266,2803,2804,2806,2808,2810,2812],{"class":268,"line":276},[266,2805,279],{"class":272},[266,2807,901],{"class":282},[266,2809,285],{"class":272},[266,2811,288],{"class":272},[266,2813,291],{"class":272},[266,2815,2816,2818,2820,2822,2824],{"class":268,"line":294},[266,2817,297],{"class":272},[266,2819,947],{"class":300},[266,2821,285],{"class":272},[266,2823,288],{"class":272},[266,2825,1040],{"class":272},[266,2827,2828,2830,2833,2835,2837],{"class":268,"line":320},[266,2829,297],{"class":272},[266,2831,2832],{"class":300},"load_balancers",[266,2834,285],{"class":272},[266,2836,288],{"class":272},[266,2838,1054],{"class":272},[266,2840,2841],{"class":268,"line":340},[266,2842,1059],{"class":272},[266,2844,2845,2847,2849,2851,2853,2855,2857,2859],{"class":268,"line":346},[266,2846,1064],{"class":272},[266,2848,1067],{"class":479},[266,2850,285],{"class":272},[266,2852,288],{"class":272},[266,2854,308],{"class":272},[266,2856,2183],{"class":311},[266,2858,285],{"class":272},[266,2860,317],{"class":272},[266,2862,2863,2865,2867,2869,2871,2873,2876,2878],{"class":268,"line":503},[266,2864,1064],{"class":272},[266,2866,1087],{"class":479},[266,2868,285],{"class":272},[266,2870,288],{"class":272},[266,2872,308],{"class":272},[266,2874,2875],{"class":311},"My Backend",[266,2877,285],{"class":272},[266,2879,317],{"class":272},[266,2881,2882,2884,2886,2888,2890],{"class":268,"line":508},[266,2883,1064],{"class":272},[266,2885,947],{"class":479},[266,2887,285],{"class":272},[266,2889,288],{"class":272},[266,2891,1040],{"class":272},[266,2893,2894,2896,2898,2900,2902],{"class":268,"line":928},[266,2895,1064],{"class":272},[266,2897,1119],{"class":479},[266,2899,285],{"class":272},[266,2901,288],{"class":272},[266,2903,2904],{"class":272}," [],\n",[266,2906,2907,2909,2912,2914,2916],{"class":268,"line":933},[266,2908,1064],{"class":272},[266,2910,2911],{"class":479},"algorithm",[266,2913,285],{"class":272},[266,2915,288],{"class":272},[266,2917,291],{"class":272},[266,2919,2920,2922,2924,2926,2928,2930,2933],{"class":268,"line":1133},[266,2921,1220],{"class":272},[266,2923,1223],{"class":1139},[266,2925,285],{"class":272},[266,2927,288],{"class":272},[266,2929,308],{"class":272},[266,2931,2932],{"class":311},"round_robin",[266,2934,337],{"class":272},[266,2936,2937],{"class":268,"line":1156},[266,2938,2106],{"class":272},[266,2940,2941,2943,2946,2948,2950],{"class":268,"line":1177},[266,2942,1064],{"class":272},[266,2944,2945],{"class":479},"targets",[266,2947,285],{"class":272},[266,2949,288],{"class":272},[266,2951,1054],{"class":272},[266,2953,2954],{"class":268,"line":1191},[266,2955,1130],{"class":272},[266,2957,2958,2960,2962,2964,2966,2968,2971,2973],{"class":268,"line":1197},[266,2959,1136],{"class":272},[266,2961,1067],{"class":1139},[266,2963,285],{"class":272},[266,2965,288],{"class":272},[266,2967,308],{"class":272},[266,2969,2970],{"class":311},"backend-1",[266,2972,285],{"class":272},[266,2974,317],{"class":272},[266,2976,2977,2979,2982,2984,2986,2988,2991,2993],{"class":268,"line":1203},[266,2978,1136],{"class":272},[266,2980,2981],{"class":1139},"host",[266,2983,285],{"class":272},[266,2985,288],{"class":272},[266,2987,308],{"class":272},[266,2989,2990],{"class":311},"10.0.0.1",[266,2992,285],{"class":272},[266,2994,317],{"class":272},[266,2996,2997,2999,3002,3004,3006,3009],{"class":268,"line":1217},[266,2998,1136],{"class":272},[266,3000,3001],{"class":1139},"port",[266,3003,285],{"class":272},[266,3005,288],{"class":272},[266,3007,3008],{"class":479}," 8080",[266,3010,317],{"class":272},[266,3012,3013,3015,3018,3020,3022,3024,3026,3028],{"class":268,"line":1239},[266,3014,1136],{"class":272},[266,3016,3017],{"class":1139},"protocol",[266,3019,285],{"class":272},[266,3021,288],{"class":272},[266,3023,308],{"class":272},[266,3025,301],{"class":311},[266,3027,285],{"class":272},[266,3029,317],{"class":272},[266,3031,3032,3034,3037,3039,3041,3043],{"class":268,"line":1254},[266,3033,1136],{"class":272},[266,3035,3036],{"class":1139},"weight",[266,3038,285],{"class":272},[266,3040,288],{"class":272},[266,3042,1505],{"class":479},[266,3044,317],{"class":272},[266,3046,3047,3049,3051,3053,3055],{"class":268,"line":1260},[266,3048,1136],{"class":272},[266,3050,947],{"class":1139},[266,3052,285],{"class":272},[266,3054,288],{"class":272},[266,3056,1040],{"class":272},[266,3058,3059,3061,3064,3066,3068],{"class":268,"line":1266},[266,3060,1136],{"class":272},[266,3062,3063],{"class":1139},"tls",[266,3065,285],{"class":272},[266,3067,288],{"class":272},[266,3069,291],{"class":272},[266,3071,3072,3075,3079,3081,3083],{"class":268,"line":1272},[266,3073,3074],{"class":272},"              \"",[266,3076,3078],{"class":3077},"su27w","verify",[266,3080,285],{"class":272},[266,3082,288],{"class":272},[266,3084,3085],{"class":272}," false,\n",[266,3087,3088,3090,3093,3095,3097],{"class":268,"line":1277},[266,3089,3074],{"class":272},[266,3091,3092],{"class":3077},"sni",[266,3094,285],{"class":272},[266,3096,288],{"class":272},[266,3098,3099],{"class":272}," null\n",[266,3101,3102],{"class":268,"line":1577},[266,3103,3104],{"class":272},"            }\n",[266,3106,3107],{"class":268,"line":1582},[266,3108,3109],{"class":272},"          },\n",[266,3111,3112],{"class":268,"line":1587},[266,3113,1130],{"class":272},[266,3115,3116,3118,3120,3122,3124,3126,3129,3131],{"class":268,"line":2170},[266,3117,1136],{"class":272},[266,3119,1067],{"class":1139},[266,3121,285],{"class":272},[266,3123,288],{"class":272},[266,3125,308],{"class":272},[266,3127,3128],{"class":311},"backend-2",[266,3130,285],{"class":272},[266,3132,317],{"class":272},[266,3134,3135,3137,3139,3141,3143,3145,3148,3150],{"class":268,"line":2188},[266,3136,1136],{"class":272},[266,3138,2981],{"class":1139},[266,3140,285],{"class":272},[266,3142,288],{"class":272},[266,3144,308],{"class":272},[266,3146,3147],{"class":311},"10.0.0.2",[266,3149,285],{"class":272},[266,3151,317],{"class":272},[266,3153,3154,3156,3158,3160,3162,3164],{"class":268,"line":2193},[266,3155,1136],{"class":272},[266,3157,3001],{"class":1139},[266,3159,285],{"class":272},[266,3161,288],{"class":272},[266,3163,3008],{"class":479},[266,3165,317],{"class":272},[266,3167,3168,3170,3172,3174,3176,3178,3180,3182],{"class":268,"line":2225},[266,3169,1136],{"class":272},[266,3171,3017],{"class":1139},[266,3173,285],{"class":272},[266,3175,288],{"class":272},[266,3177,308],{"class":272},[266,3179,301],{"class":311},[266,3181,285],{"class":272},[266,3183,317],{"class":272},[266,3185,3186,3188,3190,3192,3194,3196],{"class":268,"line":2230},[266,3187,1136],{"class":272},[266,3189,3036],{"class":1139},[266,3191,285],{"class":272},[266,3193,288],{"class":272},[266,3195,1505],{"class":479},[266,3197,317],{"class":272},[266,3199,3200,3202,3204,3206,3208],{"class":268,"line":2235},[266,3201,1136],{"class":272},[266,3203,947],{"class":1139},[266,3205,285],{"class":272},[266,3207,288],{"class":272},[266,3209,982],{"class":272},[266,3211,3212],{"class":268,"line":2240},[266,3213,1194],{"class":272},[266,3215,3217],{"class":268,"line":3216},34,[266,3218,1200],{"class":272},[266,3220,3222,3224,3227,3229,3231],{"class":268,"line":3221},35,[266,3223,1064],{"class":272},[266,3225,3226],{"class":479},"host_header",[266,3228,285],{"class":272},[266,3230,288],{"class":272},[266,3232,291],{"class":272},[266,3234,3236,3238,3240,3242,3244,3246,3249],{"class":268,"line":3235},36,[266,3237,1220],{"class":272},[266,3239,2074],{"class":1139},[266,3241,285],{"class":272},[266,3243,288],{"class":272},[266,3245,308],{"class":272},[266,3247,3248],{"class":311},"visitor",[266,3250,337],{"class":272},[266,3252,3254],{"class":268,"line":3253},37,[266,3255,2106],{"class":272},[266,3257,3259,3261,3264,3266,3268],{"class":268,"line":3258},38,[266,3260,1064],{"class":272},[266,3262,3263],{"class":479},"health_check",[266,3265,285],{"class":272},[266,3267,288],{"class":272},[266,3269,291],{"class":272},[266,3271,3273,3275,3277,3279,3281,3283,3285,3287],{"class":268,"line":3272},39,[266,3274,1220],{"class":272},[266,3276,2074],{"class":1139},[266,3278,285],{"class":272},[266,3280,288],{"class":272},[266,3282,308],{"class":272},[266,3284,301],{"class":311},[266,3286,285],{"class":272},[266,3288,317],{"class":272},[266,3290,3292,3294,3297,3299,3301,3303,3306,3308],{"class":268,"line":3291},40,[266,3293,1220],{"class":272},[266,3295,3296],{"class":1139},"path",[266,3298,285],{"class":272},[266,3300,288],{"class":272},[266,3302,308],{"class":272},[266,3304,3305],{"class":311},"\u002Fhealth",[266,3307,285],{"class":272},[266,3309,317],{"class":272},[266,3311,3313,3315,3318,3320,3322,3325],{"class":268,"line":3312},41,[266,3314,1220],{"class":272},[266,3316,3317],{"class":1139},"interval_seconds",[266,3319,285],{"class":272},[266,3321,288],{"class":272},[266,3323,3324],{"class":479}," 5",[266,3326,317],{"class":272},[266,3328,3330,3332,3335,3337,3339,3342],{"class":268,"line":3329},42,[266,3331,1220],{"class":272},[266,3333,3334],{"class":1139},"timeout_ms",[266,3336,285],{"class":272},[266,3338,288],{"class":272},[266,3340,3341],{"class":479}," 1000",[266,3343,317],{"class":272},[266,3345,3347,3349,3352,3354,3356,3358,3360],{"class":268,"line":3346},43,[266,3348,1220],{"class":272},[266,3350,3351],{"class":1139},"expected_statuses",[266,3353,285],{"class":272},[266,3355,288],{"class":272},[266,3357,2205],{"class":272},[266,3359,2208],{"class":479},[266,3361,3362],{"class":272},"],\n",[266,3364,3366,3368,3371,3373,3375,3378],{"class":268,"line":3365},44,[266,3367,1220],{"class":272},[266,3369,3370],{"class":1139},"healthy_threshold",[266,3372,285],{"class":272},[266,3374,288],{"class":272},[266,3376,3377],{"class":479}," 2",[266,3379,317],{"class":272},[266,3381,3383,3385,3388,3390,3392],{"class":268,"line":3382},45,[266,3384,1220],{"class":272},[266,3386,3387],{"class":1139},"unhealthy_threshold",[266,3389,285],{"class":272},[266,3391,288],{"class":272},[266,3393,3394],{"class":479}," 3\n",[266,3396,3398],{"class":268,"line":3397},46,[266,3399,1257],{"class":272},[266,3401,3403],{"class":268,"line":3402},47,[266,3404,1263],{"class":272},[266,3406,3408],{"class":268,"line":3407},48,[266,3409,1269],{"class":272},[266,3411,3413],{"class":268,"line":3412},49,[266,3414,343],{"class":272},[266,3416,3418],{"class":268,"line":3417},50,[266,3419,349],{"class":272},[103,3421,993,3422,997],{},[112,3423,3424],{"href":60},"Load Balancer plugin",[1591,3426,3428,598],{"id":3427},"algorithmtype-values",[107,3429,3430],{},"algorithm.type",[125,3432,3433,3441],{},[128,3434,3435],{},[131,3436,3437,3439],{},[134,3438,607],{},[134,3440,145],{},[147,3442,3443,3452,3464,3474,3484],{},[131,3444,3445,3449],{},[152,3446,3447],{},[107,3448,2932],{},[152,3450,3451],{},"Rotate through targets",[131,3453,3454,3459],{},[152,3455,3456],{},[107,3457,3458],{},"weighted_round_robin",[152,3460,3461,3462],{},"Rotate proportionally to ",[107,3463,3036],{},[131,3465,3466,3471],{},[152,3467,3468],{},[107,3469,3470],{},"least_connections",[152,3472,3473],{},"Pick the target with the fewest open connections",[131,3475,3476,3481],{},[152,3477,3478],{},[107,3479,3480],{},"fast_response",[152,3482,3483],{},"Prefer targets with the fastest recent responses",[131,3485,3486,3491],{},[152,3487,3488],{},[107,3489,3490],{},"sticky_session",[152,3492,3493,3494,3497,3498,378],{},"Pin a client to a target; ",[107,3495,3496],{},"algorithm.key"," names the condition path to pin by (e.g. ",[107,3499,3500],{},"\"req.header.X-Session-Id\"",[1591,3502,3504,598],{"id":3503},"host_headermode-values",[107,3505,3506],{},"host_header.mode",[125,3508,3509,3517],{},[128,3510,3511],{},[131,3512,3513,3515],{},[134,3514,2501],{},[134,3516,145],{},[147,3518,3519,3532,3544],{},[131,3520,3521,3525],{},[152,3522,3523],{},[107,3524,3248],{},[152,3526,3527,3528,3531],{},"Forward the client's original ",[107,3529,3530],{},"Host"," header (default)",[131,3533,3534,3538],{},[152,3535,3536],{},[107,3537,2083],{},[152,3539,3540,3541,3543],{},"Use the fixed ",[107,3542,1182],{}," field (required with this mode)",[131,3545,3546,3551],{},[152,3547,3548],{},[107,3549,3550],{},"target",[152,3552,3553,3554],{},"Use each target's ",[107,3555,2981],{},[1591,3557,3559,598],{"id":3558},"health_checkmode-values",[107,3560,3561],{},"health_check.mode",[125,3563,3564,3572],{},[128,3565,3566],{},[131,3567,3568,3570],{},[134,3569,2501],{},[134,3571,145],{},[147,3573,3574,3588,3598],{},[131,3575,3576,3580],{},[152,3577,3578],{},[107,3579,325],{},[152,3581,3582,3583,3585,3586,378],{},"HTTP(S) GET request to ",[107,3584,3296],{}," on the target (uses the target's ",[107,3587,3017],{},[131,3589,3590,3595],{},[152,3591,3592],{},[107,3593,3594],{},"accepts_connections",[152,3596,3597],{},"TCP connect check only",[131,3599,3600,3605],{},[152,3601,3602],{},[107,3603,3604],{},"off",[152,3606,3607],{},"No health checking — all targets assumed healthy",[3609,3610,3611,3612,3615,3616,3619,3620,3623,3624,3627],"caution",{},"There is ",[1671,3613,3614],{},"no"," ",[107,3617,3618],{},"\"http\""," health-check mode. Use ",[107,3621,3622],{},"\"https\""," (which performs an HTTP(S) GET using the target's protocol) or ",[107,3625,3626],{},"\"accepts_connections\"",".",[103,3629,3630,3631,3633,3634,3637,3638,3640,3641,3643,3644,3646,3647,3649,3650,3652,3653,3656,3657,3627],{},"Other fields: ",[107,3632,3296],{}," (default ",[107,3635,3636],{},"\"\u002F\"","), ",[107,3639,3317],{}," (5), ",[107,3642,3334],{}," (1000),\n",[107,3645,3351],{}," (array), ",[107,3648,3370],{}," (2), ",[107,3651,3387],{}," (3).\nIf every target is marked unhealthy the gateway returns ",[107,3654,3655],{},"503"," with\n",[107,3658,3659],{},"{\"error\": \"no_healthy_upstream\"}",[593,3661,3663],{"id":3662},"pluginslogging",[107,3664,3665],{},"plugins.logging",[103,3667,3668],{},"Access logging.",[257,3670,3672],{"className":259,"code":3671,"language":261,"meta":262,"style":262},"{\n  \"logging\": {\n    \"enabled\": true,\n    \"mode\": \"file\",\n    \"file\": {\n      \"path\": \"\u002Fvar\u002Flog\u002Fquayel\u002Faccess.jsonl\",\n      \"buffer_size\": 8192,\n      \"flush_interval_ms\": 1000\n    }\n  }\n}\n",[107,3673,3674,3678,3690,3702,3721,3733,3753,3769,3783,3788,3792],{"__ignoreMap":262},[266,3675,3676],{"class":268,"line":269},[266,3677,273],{"class":272},[266,3679,3680,3682,3684,3686,3688],{"class":268,"line":276},[266,3681,279],{"class":272},[266,3683,916],{"class":282},[266,3685,285],{"class":272},[266,3687,288],{"class":272},[266,3689,291],{"class":272},[266,3691,3692,3694,3696,3698,3700],{"class":268,"line":294},[266,3693,297],{"class":272},[266,3695,947],{"class":300},[266,3697,285],{"class":272},[266,3699,288],{"class":272},[266,3701,1040],{"class":272},[266,3703,3704,3706,3708,3710,3712,3714,3717,3719],{"class":268,"line":320},[266,3705,297],{"class":272},[266,3707,2074],{"class":300},[266,3709,285],{"class":272},[266,3711,288],{"class":272},[266,3713,308],{"class":272},[266,3715,3716],{"class":311},"file",[266,3718,285],{"class":272},[266,3720,317],{"class":272},[266,3722,3723,3725,3727,3729,3731],{"class":268,"line":340},[266,3724,297],{"class":272},[266,3726,3716],{"class":300},[266,3728,285],{"class":272},[266,3730,288],{"class":272},[266,3732,291],{"class":272},[266,3734,3735,3738,3740,3742,3744,3746,3749,3751],{"class":268,"line":346},[266,3736,3737],{"class":272},"      \"",[266,3739,3296],{"class":479},[266,3741,285],{"class":272},[266,3743,288],{"class":272},[266,3745,308],{"class":272},[266,3747,3748],{"class":311},"\u002Fvar\u002Flog\u002Fquayel\u002Faccess.jsonl",[266,3750,285],{"class":272},[266,3752,317],{"class":272},[266,3754,3755,3757,3760,3762,3764,3767],{"class":268,"line":503},[266,3756,3737],{"class":272},[266,3758,3759],{"class":479},"buffer_size",[266,3761,285],{"class":272},[266,3763,288],{"class":272},[266,3765,3766],{"class":479}," 8192",[266,3768,317],{"class":272},[266,3770,3771,3773,3776,3778,3780],{"class":268,"line":508},[266,3772,3737],{"class":272},[266,3774,3775],{"class":479},"flush_interval_ms",[266,3777,285],{"class":272},[266,3779,288],{"class":272},[266,3781,3782],{"class":479}," 1000\n",[266,3784,3785],{"class":268,"line":928},[266,3786,3787],{"class":272},"    }\n",[266,3789,3790],{"class":268,"line":933},[266,3791,343],{"class":272},[266,3793,3794],{"class":268,"line":1133},[266,3795,349],{"class":272},[125,3797,3798,3810],{},[128,3799,3800],{},[131,3801,3802,3804,3806,3808],{},[134,3803,136],{},[134,3805,139],{},[134,3807,523],{},[134,3809,145],{},[147,3811,3812,3827,3845,3859,3876],{},[131,3813,3814,3818,3820,3824],{},[152,3815,3816],{},[107,3817,947],{},[152,3819,1644],{},[152,3821,3822],{},[107,3823,1649],{},[152,3825,3826],{},"Enable\u002Fdisable logging",[131,3828,3829,3833,3835,3840],{},[152,3830,3831],{},[107,3832,2074],{},[152,3834,159],{},[152,3836,3837],{},[107,3838,3839],{},"\"file\"",[152,3841,3842,3843,378],{},"Log mode (",[107,3844,3839],{},[131,3846,3847,3852,3854,3856],{},[152,3848,3849],{},[107,3850,3851],{},"file.path",[152,3853,159],{},[152,3855,234],{},[152,3857,3858],{},"Path to JSONL log file",[131,3860,3861,3866,3868,3873],{},[152,3862,3863],{},[107,3864,3865],{},"file.buffer_size",[152,3867,2282],{},[152,3869,3870],{},[107,3871,3872],{},"8192",[152,3874,3875],{},"Write buffer size in bytes",[131,3877,3878,3883,3885,3890],{},[152,3879,3880],{},[107,3881,3882],{},"file.flush_interval_ms",[152,3884,2282],{},[152,3886,3887],{},[107,3888,3889],{},"1000",[152,3891,3892],{},"Flush interval in milliseconds",[103,3894,993,3895,3899],{},[112,3896,3898],{"href":3897},"\u002Fquayel-gateway\u002Flogging","Logging"," for log format details.",[593,3901,3903],{"id":3902},"pluginsauto_ssl",[107,3904,3905],{},"plugins.auto_ssl",[103,3907,3908],{},"On-demand TLS certificate provisioning using ACME (Let's Encrypt). Certificates are obtained automatically when the first HTTPS request arrives for a configured domain.",[257,3910,3912],{"className":259,"code":3911,"language":261,"meta":262,"style":262},"{\n  \"auto_ssl\": {\n    \"enabled\": true,\n    \"email\": \"admin@example.com\",\n    \"domains\": [\n      \"example.com\",\n      \"www.example.com\",\n      \"api.example.com\"\n    ],\n    \"cert_storage_path\": \"\u002Fvar\u002Flib\u002Fquayel\u002Fcerts\",\n    \"staging\": false,\n    \"renewal_days_before\": 30\n  }\n}\n",[107,3913,3914,3918,3931,3943,3963,3976,3987,3998,4007,4012,4032,4045,4059,4063],{"__ignoreMap":262},[266,3915,3916],{"class":268,"line":269},[266,3917,273],{"class":272},[266,3919,3920,3922,3925,3927,3929],{"class":268,"line":276},[266,3921,279],{"class":272},[266,3923,3924],{"class":282},"auto_ssl",[266,3926,285],{"class":272},[266,3928,288],{"class":272},[266,3930,291],{"class":272},[266,3932,3933,3935,3937,3939,3941],{"class":268,"line":294},[266,3934,297],{"class":272},[266,3936,947],{"class":300},[266,3938,285],{"class":272},[266,3940,288],{"class":272},[266,3942,1040],{"class":272},[266,3944,3945,3947,3950,3952,3954,3956,3959,3961],{"class":268,"line":320},[266,3946,297],{"class":272},[266,3948,3949],{"class":300},"email",[266,3951,285],{"class":272},[266,3953,288],{"class":272},[266,3955,308],{"class":272},[266,3957,3958],{"class":311},"admin@example.com",[266,3960,285],{"class":272},[266,3962,317],{"class":272},[266,3964,3965,3967,3970,3972,3974],{"class":268,"line":340},[266,3966,297],{"class":272},[266,3968,3969],{"class":300},"domains",[266,3971,285],{"class":272},[266,3973,288],{"class":272},[266,3975,1054],{"class":272},[266,3977,3978,3980,3983,3985],{"class":268,"line":346},[266,3979,3737],{"class":272},[266,3981,3982],{"class":311},"example.com",[266,3984,285],{"class":272},[266,3986,317],{"class":272},[266,3988,3989,3991,3994,3996],{"class":268,"line":503},[266,3990,3737],{"class":272},[266,3992,3993],{"class":311},"www.example.com",[266,3995,285],{"class":272},[266,3997,317],{"class":272},[266,3999,4000,4002,4005],{"class":268,"line":508},[266,4001,3737],{"class":272},[266,4003,4004],{"class":311},"api.example.com",[266,4006,337],{"class":272},[266,4008,4009],{"class":268,"line":928},[266,4010,4011],{"class":272},"    ],\n",[266,4013,4014,4016,4019,4021,4023,4025,4028,4030],{"class":268,"line":933},[266,4015,297],{"class":272},[266,4017,4018],{"class":300},"cert_storage_path",[266,4020,285],{"class":272},[266,4022,288],{"class":272},[266,4024,308],{"class":272},[266,4026,4027],{"class":311},"\u002Fvar\u002Flib\u002Fquayel\u002Fcerts",[266,4029,285],{"class":272},[266,4031,317],{"class":272},[266,4033,4034,4036,4039,4041,4043],{"class":268,"line":1133},[266,4035,297],{"class":272},[266,4037,4038],{"class":300},"staging",[266,4040,285],{"class":272},[266,4042,288],{"class":272},[266,4044,3085],{"class":272},[266,4046,4047,4049,4052,4054,4056],{"class":268,"line":1156},[266,4048,297],{"class":272},[266,4050,4051],{"class":300},"renewal_days_before",[266,4053,285],{"class":272},[266,4055,288],{"class":272},[266,4057,4058],{"class":479}," 30\n",[266,4060,4061],{"class":268,"line":1177},[266,4062,343],{"class":272},[266,4064,4065],{"class":268,"line":1191},[266,4066,349],{"class":272},[125,4068,4069,4081],{},[128,4070,4071],{},[131,4072,4073,4075,4077,4079],{},[134,4074,136],{},[134,4076,139],{},[134,4078,523],{},[134,4080,145],{},[147,4082,4083,4098,4111,4128,4144,4160],{},[131,4084,4085,4089,4091,4095],{},[152,4086,4087],{},[107,4088,947],{},[152,4090,1644],{},[152,4092,4093],{},[107,4094,1649],{},[152,4096,4097],{},"Enable\u002Fdisable Auto-SSL",[131,4099,4100,4104,4106,4108],{},[152,4101,4102],{},[107,4103,3949],{},[152,4105,159],{},[152,4107,234],{},[152,4109,4110],{},"Email for Let's Encrypt account registration (required)",[131,4112,4113,4117,4121,4125],{},[152,4114,4115],{},[107,4116,3969],{},[152,4118,159,4119],{},[266,4120],{},[152,4122,4123],{},[107,4124,1666],{},[152,4126,4127],{},"Domain names to provision certificates for (required)",[131,4129,4130,4134,4136,4141],{},[152,4131,4132],{},[107,4133,4018],{},[152,4135,159],{},[152,4137,4138],{},[107,4139,4140],{},"\"\u002Fvar\u002Flib\u002Fquayel\u002Fcerts\"",[152,4142,4143],{},"Directory to store PEM files (write-through cache)",[131,4145,4146,4150,4152,4157],{},[152,4147,4148],{},[107,4149,4038],{},[152,4151,1644],{},[152,4153,4154],{},[107,4155,4156],{},"false",[152,4158,4159],{},"Use Let's Encrypt staging environment (for testing)",[131,4161,4162,4166,4168,4173],{},[152,4163,4164],{},[107,4165,4051],{},[152,4167,2282],{},[152,4169,4170],{},[107,4171,4172],{},"30",[152,4174,4175],{},"Renew certificates this many days before expiry",[1591,4177,4179],{"id":4178},"how-it-works","How it works",[4181,4182,4183,4187,4193,4196,4199],"ol",{},[4184,4185,4186],"li",{},"Gateway starts with a self-signed fallback cert — HTTP and HTTPS serve immediately",[4184,4188,4189,4190,4192],{},"First TLS handshake for a domain in ",[107,4191,3969],{}," → spawns a background ACME worker",[4184,4194,4195],{},"Worker obtains cert from Let's Encrypt via HTTP-01 challenge",[4184,4197,4198],{},"Cert loaded into memory + persisted to disk",[4184,4200,4201],{},"Next handshake → real cert served",[1591,4203,4205],{"id":4204},"key-behaviors","Key behaviors",[4207,4208,4209,4215,4221,4227,4233],"ul",{},[4184,4210,4211,4214],{},[1671,4212,4213],{},"On-demand",": certs are only fetched when the first request arrives, not on config change",[4184,4216,4217,4220],{},[1671,4218,4219],{},"Deduplication",": only one ACME worker per domain (prevents duplicate provisioning)",[4184,4222,4223,4226],{},[1671,4224,4225],{},"Failed cert cooldown",": failed certs retry only when a new request arrives AND 24h have passed",[4184,4228,4229,4232],{},[1671,4230,4231],{},"Daily renewal",": background task renews certs 30 days before expiry, retries 1 failed cert per cycle",[4184,4234,4235,4238],{},[1671,4236,4237],{},"Non-blocking startup",": gateway serves traffic immediately, doesn't wait for certs",[103,4240,993,4241,4244],{},[112,4242,4243],{"href":65},"Auto-SSL plugin"," for full documentation.",[120,4246,4248],{"id":4247},"complete-example","Complete example",[257,4250,4252],{"className":259,"code":4251,"language":261,"meta":262,"style":262},"{\n  \"gateway_id\": \"gw-prod-01\",\n  \"gateway_name\": \"production\",\n  \"server_name\": \"api.example.com\",\n  \"config_version\": \"2026-01-01-001\",\n  \"listen\": {\n    \"http\": \"0.0.0.0:8080\"\n  },\n  \"client_ip\": {\n    \"source\": \"header_index\",\n    \"header\": \"X-Forwarded-For\",\n    \"index\": 0,\n    \"fallback\": \"peer_ip\"\n  },\n  \"plugins\": {\n    \"ip_intel\": { \"enabled\": true },\n    \"firewall\": {\n      \"enabled\": true,\n      \"rules\": [\n        {\n          \"id\": \"block-tor\",\n          \"name\": \"Block Tor exits\",\n          \"enabled\": true,\n          \"conditions\": [\n            { \"left\": \"ip.is_tor\", \"operator\": \"equals\", \"value\": true }\n          ],\n          \"action\": { \"type\": \"block\", \"status\": 403 }\n        },\n        {\n          \"id\": \"block-high-risk\",\n          \"name\": \"Block high risk IPs\",\n          \"enabled\": true,\n          \"conditions\": [\n            { \"left\": \"ip.risk_score\", \"operator\": \"greater_than\", \"value\": 30 }\n          ],\n          \"action\": { \"type\": \"block\", \"status\": 403 }\n        }\n      ]\n    },\n    \"rate_limiting\": {\n      \"enabled\": true,\n      \"rules\": [\n        {\n          \"id\": \"api-rate\",\n          \"name\": \"API rate limit\",\n          \"enabled\": true,\n          \"conditions\": [\n            { \"left\": \"req.path\", \"operator\": \"starts_with\", \"value\": \"\u002Fapi\u002F\" }\n          ],\n          \"key\": \"req.client_ip\",\n          \"limit\": 100,\n          \"window_seconds\": 60\n        }\n      ]\n    },\n    \"cache\": { \"enabled\": false, \"rules\": [] },\n    \"load_balancer\": {\n      \"enabled\": true,\n      \"load_balancers\": [\n        {\n          \"id\": \"default\",\n          \"name\": \"Backend Pool\",\n          \"enabled\": true,\n          \"conditions\": [],\n          \"algorithm\": { \"type\": \"round_robin\" },\n          \"targets\": [\n            {\n              \"id\": \"backend-1\",\n              \"host\": \"10.0.0.1\",\n              \"port\": 8080,\n              \"protocol\": \"http\",\n              \"weight\": 100,\n              \"enabled\": true\n            }\n          ],\n          \"host_header\": { \"mode\": \"visitor\" },\n          \"health_check\": { \"mode\": \"off\" }\n        }\n      ]\n    },\n    \"logging\": {\n      \"enabled\": true,\n      \"mode\": \"file\",\n      \"file\": {\n        \"path\": \"\u002Fvar\u002Flog\u002Fquayel\u002Faccess.jsonl\",\n        \"buffer_size\": 8192,\n        \"flush_interval_ms\": 1000\n      }\n    },\n    \"auto_ssl\": {\n      \"enabled\": true,\n      \"email\": \"admin@example.com\",\n      \"domains\": [\"api.example.com\"],\n      \"cert_storage_path\": \"\u002Fvar\u002Flib\u002Fquayel\u002Fcerts\",\n      \"staging\": false,\n      \"renewal_days_before\": 30\n    }\n  }\n}\n",[107,4253,4254,4258,4277,4296,4314,4333,4345,4361,4366,4378,4396,4414,4428,4444,4448,4460,4485,4497,4509,4521,4526,4545,4564,4576,4588,4637,4642,4683,4687,4691,4710,4729,4741,4753,4804,4808,4848,4852,4857,4862,4874,4886,4898,4902,4921,4940,4952,4964,5016,5020,5038,5053,5067,5072,5077,5082,5119,5132,5145,5158,5163,5182,5202,5215,5228,5257,5270,5276,5295,5314,5329,5348,5363,5376,5381,5386,5415,5444,5449,5454,5459,5472,5485,5504,5517,5536,5551,5564,5569,5574,5587,5600,5619,5640,5659,5672,5685,5690,5695],{"__ignoreMap":262},[266,4255,4256],{"class":268,"line":269},[266,4257,273],{"class":272},[266,4259,4260,4262,4264,4266,4268,4270,4273,4275],{"class":268,"line":276},[266,4261,279],{"class":272},[266,4263,156],{"class":282},[266,4265,285],{"class":272},[266,4267,288],{"class":272},[266,4269,308],{"class":272},[266,4271,4272],{"class":311},"gw-prod-01",[266,4274,285],{"class":272},[266,4276,317],{"class":272},[266,4278,4279,4281,4283,4285,4287,4289,4292,4294],{"class":268,"line":294},[266,4280,279],{"class":272},[266,4282,172],{"class":282},[266,4284,285],{"class":272},[266,4286,288],{"class":272},[266,4288,308],{"class":272},[266,4290,4291],{"class":311},"production",[266,4293,285],{"class":272},[266,4295,317],{"class":272},[266,4297,4298,4300,4302,4304,4306,4308,4310,4312],{"class":268,"line":320},[266,4299,279],{"class":272},[266,4301,186],{"class":282},[266,4303,285],{"class":272},[266,4305,288],{"class":272},[266,4307,308],{"class":272},[266,4309,4004],{"class":311},[266,4311,285],{"class":272},[266,4313,317],{"class":272},[266,4315,4316,4318,4320,4322,4324,4326,4329,4331],{"class":268,"line":340},[266,4317,279],{"class":272},[266,4319,200],{"class":282},[266,4321,285],{"class":272},[266,4323,288],{"class":272},[266,4325,308],{"class":272},[266,4327,4328],{"class":311},"2026-01-01-001",[266,4330,285],{"class":272},[266,4332,317],{"class":272},[266,4334,4335,4337,4339,4341,4343],{"class":268,"line":346},[266,4336,279],{"class":272},[266,4338,214],{"class":282},[266,4340,285],{"class":272},[266,4342,288],{"class":272},[266,4344,291],{"class":272},[266,4346,4347,4349,4351,4353,4355,4357,4359],{"class":268,"line":503},[266,4348,297],{"class":272},[266,4350,301],{"class":300},[266,4352,285],{"class":272},[266,4354,288],{"class":272},[266,4356,308],{"class":272},[266,4358,312],{"class":311},[266,4360,337],{"class":272},[266,4362,4363],{"class":268,"line":508},[266,4364,4365],{"class":272},"  },\n",[266,4367,4368,4370,4372,4374,4376],{"class":268,"line":928},[266,4369,279],{"class":272},[266,4371,229],{"class":282},[266,4373,285],{"class":272},[266,4375,288],{"class":272},[266,4377,291],{"class":272},[266,4379,4380,4382,4384,4386,4388,4390,4392,4394],{"class":268,"line":933},[266,4381,297],{"class":272},[266,4383,433],{"class":300},[266,4385,285],{"class":272},[266,4387,288],{"class":272},[266,4389,308],{"class":272},[266,4391,562],{"class":311},[266,4393,285],{"class":272},[266,4395,317],{"class":272},[266,4397,4398,4400,4402,4404,4406,4408,4410,4412],{"class":268,"line":1133},[266,4399,297],{"class":272},[266,4401,442],{"class":300},[266,4403,285],{"class":272},[266,4405,288],{"class":272},[266,4407,308],{"class":272},[266,4409,461],{"class":311},[266,4411,285],{"class":272},[266,4413,317],{"class":272},[266,4415,4416,4418,4420,4422,4424,4426],{"class":268,"line":1156},[266,4417,297],{"class":272},[266,4419,472],{"class":300},[266,4421,285],{"class":272},[266,4423,288],{"class":272},[266,4425,480],{"class":479},[266,4427,317],{"class":272},[266,4429,4430,4432,4434,4436,4438,4440,4442],{"class":268,"line":1177},[266,4431,297],{"class":272},[266,4433,489],{"class":300},[266,4435,285],{"class":272},[266,4437,288],{"class":272},[266,4439,308],{"class":272},[266,4441,498],{"class":311},[266,4443,337],{"class":272},[266,4445,4446],{"class":268,"line":1191},[266,4447,4365],{"class":272},[266,4449,4450,4452,4454,4456,4458],{"class":268,"line":1197},[266,4451,279],{"class":272},[266,4453,244],{"class":282},[266,4455,285],{"class":272},[266,4457,288],{"class":272},[266,4459,291],{"class":272},[266,4461,4462,4464,4466,4468,4470,4472,4474,4476,4478,4480,4483],{"class":268,"line":1203},[266,4463,297],{"class":272},[266,4465,839],{"class":300},[266,4467,285],{"class":272},[266,4469,288],{"class":272},[266,4471,846],{"class":272},[266,4473,308],{"class":272},[266,4475,947],{"class":479},[266,4477,285],{"class":272},[266,4479,288],{"class":272},[266,4481,4482],{"class":272}," true",[266,4484,849],{"class":272},[266,4486,4487,4489,4491,4493,4495],{"class":268,"line":1217},[266,4488,297],{"class":272},[266,4490,856],{"class":300},[266,4492,285],{"class":272},[266,4494,288],{"class":272},[266,4496,291],{"class":272},[266,4498,4499,4501,4503,4505,4507],{"class":268,"line":1239},[266,4500,3737],{"class":272},[266,4502,947],{"class":479},[266,4504,285],{"class":272},[266,4506,288],{"class":272},[266,4508,1040],{"class":272},[266,4510,4511,4513,4515,4517,4519],{"class":268,"line":1254},[266,4512,3737],{"class":272},[266,4514,1047],{"class":479},[266,4516,285],{"class":272},[266,4518,288],{"class":272},[266,4520,1054],{"class":272},[266,4522,4523],{"class":268,"line":1260},[266,4524,4525],{"class":272},"        {\n",[266,4527,4528,4530,4532,4534,4536,4538,4541,4543],{"class":268,"line":1266},[266,4529,1220],{"class":272},[266,4531,1067],{"class":1139},[266,4533,285],{"class":272},[266,4535,288],{"class":272},[266,4537,308],{"class":272},[266,4539,4540],{"class":311},"block-tor",[266,4542,285],{"class":272},[266,4544,317],{"class":272},[266,4546,4547,4549,4551,4553,4555,4557,4560,4562],{"class":268,"line":1272},[266,4548,1220],{"class":272},[266,4550,1087],{"class":1139},[266,4552,285],{"class":272},[266,4554,288],{"class":272},[266,4556,308],{"class":272},[266,4558,4559],{"class":311},"Block Tor exits",[266,4561,285],{"class":272},[266,4563,317],{"class":272},[266,4565,4566,4568,4570,4572,4574],{"class":268,"line":1277},[266,4567,1220],{"class":272},[266,4569,947],{"class":1139},[266,4571,285],{"class":272},[266,4573,288],{"class":272},[266,4575,1040],{"class":272},[266,4577,4578,4580,4582,4584,4586],{"class":268,"line":1577},[266,4579,1220],{"class":272},[266,4581,1119],{"class":1139},[266,4583,285],{"class":272},[266,4585,288],{"class":272},[266,4587,1054],{"class":272},[266,4589,4590,4593,4595,4597,4599,4601,4603,4605,4607,4609,4611,4613,4615,4617,4619,4621,4623,4625,4627,4629,4631,4633,4635],{"class":268,"line":1582},[266,4591,4592],{"class":272},"            {",[266,4594,308],{"class":272},[266,4596,1140],{"class":3077},[266,4598,285],{"class":272},[266,4600,288],{"class":272},[266,4602,308],{"class":272},[266,4604,1149],{"class":311},[266,4606,285],{"class":272},[266,4608,2211],{"class":272},[266,4610,308],{"class":272},[266,4612,1161],{"class":3077},[266,4614,285],{"class":272},[266,4616,288],{"class":272},[266,4618,308],{"class":272},[266,4620,1170],{"class":311},[266,4622,285],{"class":272},[266,4624,2211],{"class":272},[266,4626,308],{"class":272},[266,4628,1182],{"class":3077},[266,4630,285],{"class":272},[266,4632,288],{"class":272},[266,4634,4482],{"class":272},[266,4636,925],{"class":272},[266,4638,4639],{"class":268,"line":1587},[266,4640,4641],{"class":272},"          ],\n",[266,4643,4644,4646,4648,4650,4652,4654,4656,4658,4660,4662,4664,4666,4668,4670,4672,4674,4676,4678,4681],{"class":268,"line":2170},[266,4645,1220],{"class":272},[266,4647,1208],{"class":1139},[266,4649,285],{"class":272},[266,4651,288],{"class":272},[266,4653,846],{"class":272},[266,4655,308],{"class":272},[266,4657,1223],{"class":3077},[266,4659,285],{"class":272},[266,4661,288],{"class":272},[266,4663,308],{"class":272},[266,4665,1232],{"class":311},[266,4667,285],{"class":272},[266,4669,2211],{"class":272},[266,4671,308],{"class":272},[266,4673,1244],{"class":3077},[266,4675,285],{"class":272},[266,4677,288],{"class":272},[266,4679,4680],{"class":479}," 403",[266,4682,925],{"class":272},[266,4684,4685],{"class":268,"line":2188},[266,4686,2106],{"class":272},[266,4688,4689],{"class":268,"line":2193},[266,4690,4525],{"class":272},[266,4692,4693,4695,4697,4699,4701,4703,4706,4708],{"class":268,"line":2225},[266,4694,1220],{"class":272},[266,4696,1067],{"class":1139},[266,4698,285],{"class":272},[266,4700,288],{"class":272},[266,4702,308],{"class":272},[266,4704,4705],{"class":311},"block-high-risk",[266,4707,285],{"class":272},[266,4709,317],{"class":272},[266,4711,4712,4714,4716,4718,4720,4722,4725,4727],{"class":268,"line":2230},[266,4713,1220],{"class":272},[266,4715,1087],{"class":1139},[266,4717,285],{"class":272},[266,4719,288],{"class":272},[266,4721,308],{"class":272},[266,4723,4724],{"class":311},"Block high risk IPs",[266,4726,285],{"class":272},[266,4728,317],{"class":272},[266,4730,4731,4733,4735,4737,4739],{"class":268,"line":2235},[266,4732,1220],{"class":272},[266,4734,947],{"class":1139},[266,4736,285],{"class":272},[266,4738,288],{"class":272},[266,4740,1040],{"class":272},[266,4742,4743,4745,4747,4749,4751],{"class":268,"line":2240},[266,4744,1220],{"class":272},[266,4746,1119],{"class":1139},[266,4748,285],{"class":272},[266,4750,288],{"class":272},[266,4752,1054],{"class":272},[266,4754,4755,4757,4759,4761,4763,4765,4767,4770,4772,4774,4776,4778,4780,4782,4784,4787,4789,4791,4793,4795,4797,4799,4802],{"class":268,"line":3216},[266,4756,4592],{"class":272},[266,4758,308],{"class":272},[266,4760,1140],{"class":3077},[266,4762,285],{"class":272},[266,4764,288],{"class":272},[266,4766,308],{"class":272},[266,4768,4769],{"class":311},"ip.risk_score",[266,4771,285],{"class":272},[266,4773,2211],{"class":272},[266,4775,308],{"class":272},[266,4777,1161],{"class":3077},[266,4779,285],{"class":272},[266,4781,288],{"class":272},[266,4783,308],{"class":272},[266,4785,4786],{"class":311},"greater_than",[266,4788,285],{"class":272},[266,4790,2211],{"class":272},[266,4792,308],{"class":272},[266,4794,1182],{"class":3077},[266,4796,285],{"class":272},[266,4798,288],{"class":272},[266,4800,4801],{"class":479}," 30",[266,4803,925],{"class":272},[266,4805,4806],{"class":268,"line":3221},[266,4807,4641],{"class":272},[266,4809,4810,4812,4814,4816,4818,4820,4822,4824,4826,4828,4830,4832,4834,4836,4838,4840,4842,4844,4846],{"class":268,"line":3235},[266,4811,1220],{"class":272},[266,4813,1208],{"class":1139},[266,4815,285],{"class":272},[266,4817,288],{"class":272},[266,4819,846],{"class":272},[266,4821,308],{"class":272},[266,4823,1223],{"class":3077},[266,4825,285],{"class":272},[266,4827,288],{"class":272},[266,4829,308],{"class":272},[266,4831,1232],{"class":311},[266,4833,285],{"class":272},[266,4835,2211],{"class":272},[266,4837,308],{"class":272},[266,4839,1244],{"class":3077},[266,4841,285],{"class":272},[266,4843,288],{"class":272},[266,4845,4680],{"class":479},[266,4847,925],{"class":272},[266,4849,4850],{"class":268,"line":3253},[266,4851,1257],{"class":272},[266,4853,4854],{"class":268,"line":3258},[266,4855,4856],{"class":272},"      ]\n",[266,4858,4859],{"class":268,"line":3272},[266,4860,4861],{"class":272},"    },\n",[266,4863,4864,4866,4868,4870,4872],{"class":268,"line":3291},[266,4865,297],{"class":272},[266,4867,871],{"class":300},[266,4869,285],{"class":272},[266,4871,288],{"class":272},[266,4873,291],{"class":272},[266,4875,4876,4878,4880,4882,4884],{"class":268,"line":3312},[266,4877,3737],{"class":272},[266,4879,947],{"class":479},[266,4881,285],{"class":272},[266,4883,288],{"class":272},[266,4885,1040],{"class":272},[266,4887,4888,4890,4892,4894,4896],{"class":268,"line":3329},[266,4889,3737],{"class":272},[266,4891,1047],{"class":479},[266,4893,285],{"class":272},[266,4895,288],{"class":272},[266,4897,1054],{"class":272},[266,4899,4900],{"class":268,"line":3346},[266,4901,4525],{"class":272},[266,4903,4904,4906,4908,4910,4912,4914,4917,4919],{"class":268,"line":3365},[266,4905,1220],{"class":272},[266,4907,1067],{"class":1139},[266,4909,285],{"class":272},[266,4911,288],{"class":272},[266,4913,308],{"class":272},[266,4915,4916],{"class":311},"api-rate",[266,4918,285],{"class":272},[266,4920,317],{"class":272},[266,4922,4923,4925,4927,4929,4931,4933,4936,4938],{"class":268,"line":3382},[266,4924,1220],{"class":272},[266,4926,1087],{"class":1139},[266,4928,285],{"class":272},[266,4930,288],{"class":272},[266,4932,308],{"class":272},[266,4934,4935],{"class":311},"API rate limit",[266,4937,285],{"class":272},[266,4939,317],{"class":272},[266,4941,4942,4944,4946,4948,4950],{"class":268,"line":3397},[266,4943,1220],{"class":272},[266,4945,947],{"class":1139},[266,4947,285],{"class":272},[266,4949,288],{"class":272},[266,4951,1040],{"class":272},[266,4953,4954,4956,4958,4960,4962],{"class":268,"line":3402},[266,4955,1220],{"class":272},[266,4957,1119],{"class":1139},[266,4959,285],{"class":272},[266,4961,288],{"class":272},[266,4963,1054],{"class":272},[266,4965,4966,4968,4970,4972,4974,4976,4978,4980,4982,4984,4986,4988,4990,4992,4994,4996,4998,5000,5002,5004,5006,5008,5010,5012,5014],{"class":268,"line":3407},[266,4967,4592],{"class":272},[266,4969,308],{"class":272},[266,4971,1140],{"class":3077},[266,4973,285],{"class":272},[266,4975,288],{"class":272},[266,4977,308],{"class":272},[266,4979,1423],{"class":311},[266,4981,285],{"class":272},[266,4983,2211],{"class":272},[266,4985,308],{"class":272},[266,4987,1161],{"class":3077},[266,4989,285],{"class":272},[266,4991,288],{"class":272},[266,4993,308],{"class":272},[266,4995,1442],{"class":311},[266,4997,285],{"class":272},[266,4999,2211],{"class":272},[266,5001,308],{"class":272},[266,5003,1182],{"class":3077},[266,5005,285],{"class":272},[266,5007,288],{"class":272},[266,5009,308],{"class":272},[266,5011,1461],{"class":311},[266,5013,285],{"class":272},[266,5015,925],{"class":272},[266,5017,5018],{"class":268,"line":3412},[266,5019,4641],{"class":272},[266,5021,5022,5024,5026,5028,5030,5032,5034,5036],{"class":268,"line":3417},[266,5023,1220],{"class":272},[266,5025,1478],{"class":1139},[266,5027,285],{"class":272},[266,5029,288],{"class":272},[266,5031,308],{"class":272},[266,5033,1487],{"class":311},[266,5035,285],{"class":272},[266,5037,317],{"class":272},[266,5039,5041,5043,5045,5047,5049,5051],{"class":268,"line":5040},51,[266,5042,1220],{"class":272},[266,5044,1498],{"class":1139},[266,5046,285],{"class":272},[266,5048,288],{"class":272},[266,5050,1505],{"class":479},[266,5052,317],{"class":272},[266,5054,5056,5058,5060,5062,5064],{"class":268,"line":5055},52,[266,5057,1220],{"class":272},[266,5059,1514],{"class":1139},[266,5061,285],{"class":272},[266,5063,288],{"class":272},[266,5065,5066],{"class":479}," 60\n",[266,5068,5070],{"class":268,"line":5069},53,[266,5071,1257],{"class":272},[266,5073,5075],{"class":268,"line":5074},54,[266,5076,4856],{"class":272},[266,5078,5080],{"class":268,"line":5079},55,[266,5081,4861],{"class":272},[266,5083,5085,5087,5089,5091,5093,5095,5097,5099,5101,5103,5106,5108,5110,5112,5114,5117],{"class":268,"line":5084},56,[266,5086,297],{"class":272},[266,5088,886],{"class":300},[266,5090,285],{"class":272},[266,5092,288],{"class":272},[266,5094,846],{"class":272},[266,5096,308],{"class":272},[266,5098,947],{"class":479},[266,5100,285],{"class":272},[266,5102,288],{"class":272},[266,5104,5105],{"class":272}," false,",[266,5107,308],{"class":272},[266,5109,1047],{"class":479},[266,5111,285],{"class":272},[266,5113,288],{"class":272},[266,5115,5116],{"class":272}," []",[266,5118,849],{"class":272},[266,5120,5122,5124,5126,5128,5130],{"class":268,"line":5121},57,[266,5123,297],{"class":272},[266,5125,901],{"class":300},[266,5127,285],{"class":272},[266,5129,288],{"class":272},[266,5131,291],{"class":272},[266,5133,5135,5137,5139,5141,5143],{"class":268,"line":5134},58,[266,5136,3737],{"class":272},[266,5138,947],{"class":479},[266,5140,285],{"class":272},[266,5142,288],{"class":272},[266,5144,1040],{"class":272},[266,5146,5148,5150,5152,5154,5156],{"class":268,"line":5147},59,[266,5149,3737],{"class":272},[266,5151,2832],{"class":479},[266,5153,285],{"class":272},[266,5155,288],{"class":272},[266,5157,1054],{"class":272},[266,5159,5161],{"class":268,"line":5160},60,[266,5162,4525],{"class":272},[266,5164,5166,5168,5170,5172,5174,5176,5178,5180],{"class":268,"line":5165},61,[266,5167,1220],{"class":272},[266,5169,1067],{"class":1139},[266,5171,285],{"class":272},[266,5173,288],{"class":272},[266,5175,308],{"class":272},[266,5177,2183],{"class":311},[266,5179,285],{"class":272},[266,5181,317],{"class":272},[266,5183,5185,5187,5189,5191,5193,5195,5198,5200],{"class":268,"line":5184},62,[266,5186,1220],{"class":272},[266,5188,1087],{"class":1139},[266,5190,285],{"class":272},[266,5192,288],{"class":272},[266,5194,308],{"class":272},[266,5196,5197],{"class":311},"Backend Pool",[266,5199,285],{"class":272},[266,5201,317],{"class":272},[266,5203,5205,5207,5209,5211,5213],{"class":268,"line":5204},63,[266,5206,1220],{"class":272},[266,5208,947],{"class":1139},[266,5210,285],{"class":272},[266,5212,288],{"class":272},[266,5214,1040],{"class":272},[266,5216,5218,5220,5222,5224,5226],{"class":268,"line":5217},64,[266,5219,1220],{"class":272},[266,5221,1119],{"class":1139},[266,5223,285],{"class":272},[266,5225,288],{"class":272},[266,5227,2904],{"class":272},[266,5229,5231,5233,5235,5237,5239,5241,5243,5245,5247,5249,5251,5253,5255],{"class":268,"line":5230},65,[266,5232,1220],{"class":272},[266,5234,2911],{"class":1139},[266,5236,285],{"class":272},[266,5238,288],{"class":272},[266,5240,846],{"class":272},[266,5242,308],{"class":272},[266,5244,1223],{"class":3077},[266,5246,285],{"class":272},[266,5248,288],{"class":272},[266,5250,308],{"class":272},[266,5252,2932],{"class":311},[266,5254,285],{"class":272},[266,5256,849],{"class":272},[266,5258,5260,5262,5264,5266,5268],{"class":268,"line":5259},66,[266,5261,1220],{"class":272},[266,5263,2945],{"class":1139},[266,5265,285],{"class":272},[266,5267,288],{"class":272},[266,5269,1054],{"class":272},[266,5271,5273],{"class":268,"line":5272},67,[266,5274,5275],{"class":272},"            {\n",[266,5277,5279,5281,5283,5285,5287,5289,5291,5293],{"class":268,"line":5278},68,[266,5280,3074],{"class":272},[266,5282,1067],{"class":3077},[266,5284,285],{"class":272},[266,5286,288],{"class":272},[266,5288,308],{"class":272},[266,5290,2970],{"class":311},[266,5292,285],{"class":272},[266,5294,317],{"class":272},[266,5296,5298,5300,5302,5304,5306,5308,5310,5312],{"class":268,"line":5297},69,[266,5299,3074],{"class":272},[266,5301,2981],{"class":3077},[266,5303,285],{"class":272},[266,5305,288],{"class":272},[266,5307,308],{"class":272},[266,5309,2990],{"class":311},[266,5311,285],{"class":272},[266,5313,317],{"class":272},[266,5315,5317,5319,5321,5323,5325,5327],{"class":268,"line":5316},70,[266,5318,3074],{"class":272},[266,5320,3001],{"class":3077},[266,5322,285],{"class":272},[266,5324,288],{"class":272},[266,5326,3008],{"class":479},[266,5328,317],{"class":272},[266,5330,5332,5334,5336,5338,5340,5342,5344,5346],{"class":268,"line":5331},71,[266,5333,3074],{"class":272},[266,5335,3017],{"class":3077},[266,5337,285],{"class":272},[266,5339,288],{"class":272},[266,5341,308],{"class":272},[266,5343,301],{"class":311},[266,5345,285],{"class":272},[266,5347,317],{"class":272},[266,5349,5351,5353,5355,5357,5359,5361],{"class":268,"line":5350},72,[266,5352,3074],{"class":272},[266,5354,3036],{"class":3077},[266,5356,285],{"class":272},[266,5358,288],{"class":272},[266,5360,1505],{"class":479},[266,5362,317],{"class":272},[266,5364,5366,5368,5370,5372,5374],{"class":268,"line":5365},73,[266,5367,3074],{"class":272},[266,5369,947],{"class":3077},[266,5371,285],{"class":272},[266,5373,288],{"class":272},[266,5375,982],{"class":272},[266,5377,5379],{"class":268,"line":5378},74,[266,5380,3104],{"class":272},[266,5382,5384],{"class":268,"line":5383},75,[266,5385,4641],{"class":272},[266,5387,5389,5391,5393,5395,5397,5399,5401,5403,5405,5407,5409,5411,5413],{"class":268,"line":5388},76,[266,5390,1220],{"class":272},[266,5392,3226],{"class":1139},[266,5394,285],{"class":272},[266,5396,288],{"class":272},[266,5398,846],{"class":272},[266,5400,308],{"class":272},[266,5402,2074],{"class":3077},[266,5404,285],{"class":272},[266,5406,288],{"class":272},[266,5408,308],{"class":272},[266,5410,3248],{"class":311},[266,5412,285],{"class":272},[266,5414,849],{"class":272},[266,5416,5418,5420,5422,5424,5426,5428,5430,5432,5434,5436,5438,5440,5442],{"class":268,"line":5417},77,[266,5419,1220],{"class":272},[266,5421,3263],{"class":1139},[266,5423,285],{"class":272},[266,5425,288],{"class":272},[266,5427,846],{"class":272},[266,5429,308],{"class":272},[266,5431,2074],{"class":3077},[266,5433,285],{"class":272},[266,5435,288],{"class":272},[266,5437,308],{"class":272},[266,5439,3604],{"class":311},[266,5441,285],{"class":272},[266,5443,925],{"class":272},[266,5445,5447],{"class":268,"line":5446},78,[266,5448,1257],{"class":272},[266,5450,5452],{"class":268,"line":5451},79,[266,5453,4856],{"class":272},[266,5455,5457],{"class":268,"line":5456},80,[266,5458,4861],{"class":272},[266,5460,5462,5464,5466,5468,5470],{"class":268,"line":5461},81,[266,5463,297],{"class":272},[266,5465,916],{"class":300},[266,5467,285],{"class":272},[266,5469,288],{"class":272},[266,5471,291],{"class":272},[266,5473,5475,5477,5479,5481,5483],{"class":268,"line":5474},82,[266,5476,3737],{"class":272},[266,5478,947],{"class":479},[266,5480,285],{"class":272},[266,5482,288],{"class":272},[266,5484,1040],{"class":272},[266,5486,5488,5490,5492,5494,5496,5498,5500,5502],{"class":268,"line":5487},83,[266,5489,3737],{"class":272},[266,5491,2074],{"class":479},[266,5493,285],{"class":272},[266,5495,288],{"class":272},[266,5497,308],{"class":272},[266,5499,3716],{"class":311},[266,5501,285],{"class":272},[266,5503,317],{"class":272},[266,5505,5507,5509,5511,5513,5515],{"class":268,"line":5506},84,[266,5508,3737],{"class":272},[266,5510,3716],{"class":479},[266,5512,285],{"class":272},[266,5514,288],{"class":272},[266,5516,291],{"class":272},[266,5518,5520,5522,5524,5526,5528,5530,5532,5534],{"class":268,"line":5519},85,[266,5521,1064],{"class":272},[266,5523,3296],{"class":1139},[266,5525,285],{"class":272},[266,5527,288],{"class":272},[266,5529,308],{"class":272},[266,5531,3748],{"class":311},[266,5533,285],{"class":272},[266,5535,317],{"class":272},[266,5537,5539,5541,5543,5545,5547,5549],{"class":268,"line":5538},86,[266,5540,1064],{"class":272},[266,5542,3759],{"class":1139},[266,5544,285],{"class":272},[266,5546,288],{"class":272},[266,5548,3766],{"class":479},[266,5550,317],{"class":272},[266,5552,5554,5556,5558,5560,5562],{"class":268,"line":5553},87,[266,5555,1064],{"class":272},[266,5557,3775],{"class":1139},[266,5559,285],{"class":272},[266,5561,288],{"class":272},[266,5563,3782],{"class":479},[266,5565,5567],{"class":268,"line":5566},88,[266,5568,1263],{"class":272},[266,5570,5572],{"class":268,"line":5571},89,[266,5573,4861],{"class":272},[266,5575,5577,5579,5581,5583,5585],{"class":268,"line":5576},90,[266,5578,297],{"class":272},[266,5580,3924],{"class":300},[266,5582,285],{"class":272},[266,5584,288],{"class":272},[266,5586,291],{"class":272},[266,5588,5590,5592,5594,5596,5598],{"class":268,"line":5589},91,[266,5591,3737],{"class":272},[266,5593,947],{"class":479},[266,5595,285],{"class":272},[266,5597,288],{"class":272},[266,5599,1040],{"class":272},[266,5601,5603,5605,5607,5609,5611,5613,5615,5617],{"class":268,"line":5602},92,[266,5604,3737],{"class":272},[266,5606,3949],{"class":479},[266,5608,285],{"class":272},[266,5610,288],{"class":272},[266,5612,308],{"class":272},[266,5614,3958],{"class":311},[266,5616,285],{"class":272},[266,5618,317],{"class":272},[266,5620,5622,5624,5626,5628,5630,5632,5634,5636,5638],{"class":268,"line":5621},93,[266,5623,3737],{"class":272},[266,5625,3969],{"class":479},[266,5627,285],{"class":272},[266,5629,288],{"class":272},[266,5631,2205],{"class":272},[266,5633,285],{"class":272},[266,5635,4004],{"class":311},[266,5637,285],{"class":272},[266,5639,3362],{"class":272},[266,5641,5643,5645,5647,5649,5651,5653,5655,5657],{"class":268,"line":5642},94,[266,5644,3737],{"class":272},[266,5646,4018],{"class":479},[266,5648,285],{"class":272},[266,5650,288],{"class":272},[266,5652,308],{"class":272},[266,5654,4027],{"class":311},[266,5656,285],{"class":272},[266,5658,317],{"class":272},[266,5660,5662,5664,5666,5668,5670],{"class":268,"line":5661},95,[266,5663,3737],{"class":272},[266,5665,4038],{"class":479},[266,5667,285],{"class":272},[266,5669,288],{"class":272},[266,5671,3085],{"class":272},[266,5673,5675,5677,5679,5681,5683],{"class":268,"line":5674},96,[266,5676,3737],{"class":272},[266,5678,4051],{"class":479},[266,5680,285],{"class":272},[266,5682,288],{"class":272},[266,5684,4058],{"class":479},[266,5686,5688],{"class":268,"line":5687},97,[266,5689,3787],{"class":272},[266,5691,5693],{"class":268,"line":5692},98,[266,5694,343],{"class":272},[266,5696,5698],{"class":268,"line":5697},99,[266,5699,349],{"class":272},[120,5701,5703],{"id":5702},"validation","Validation",[103,5705,5706],{},"The gateway validates config on startup and rejects:",[4207,5708,5709,5721,5729,5742,5750,5753,5762,5765],{},[4184,5710,5711,5712,5714,5715,5714,5717,5714,5719,378],{},"Missing required fields (",[107,5713,156],{},", ",[107,5716,172],{},[107,5718,186],{},[107,5720,200],{},[4184,5722,5723,5724,1834,5726,5728],{},"No listen address (",[107,5725,301],{},[107,5727,325],{}," both missing)",[4184,5730,5731,2662,5734,395,5736,5738,5739,5741],{},[107,5732,5733],{},"client_ip.source",[107,5735,442],{},[107,5737,562],{}," but ",[107,5740,442],{}," is not set",[4184,5743,5744,2662,5746,5738,5748,5741],{},[107,5745,5733],{},[107,5747,562],{},[107,5749,472],{},[4184,5751,5752],{},"Firewall rules with empty conditions",[4184,5754,5755,5756,395,5759],{},"Rate limit rules with ",[107,5757,5758],{},"limit: 0",[107,5760,5761],{},"window_seconds: 0",[4184,5763,5764],{},"Load balancers with no targets",[4184,5766,5767,5768,5770,5771],{},"Auto-SSL: missing ",[107,5769,3949],{}," or empty ",[107,5772,3969],{},[5774,5775,5776,5777,5781,5782,3627],"tip",{},"You can pre-validate generated configs against ",[112,5778,5779],{"href":114},[107,5780,117],{}," (JSON Schema) before starting the gateway. The gateway's own parser remains authoritative. AI agents should also read the ",[112,5783,86],{"href":87},[5785,5786,5787],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .su27w, html code.shiki .su27w{--shiki-light:#916B53;--shiki-default:#916B53;--shiki-dark:#916B53}",{"title":262,"searchDepth":276,"depth":276,"links":5789},[5790,5791,5792,5798,5807,5808],{"id":122,"depth":276,"text":123},{"id":214,"depth":276,"text":214},{"id":229,"depth":276,"text":229,"children":5793},[5794,5796,5797],{"id":595,"depth":294,"text":5795},"source values",{"id":643,"depth":294,"text":644},{"id":711,"depth":294,"text":712},{"id":244,"depth":276,"text":244,"children":5799},[5800,5801,5802,5803,5804,5805,5806],{"id":938,"depth":294,"text":941},{"id":1000,"depth":294,"text":1003},{"id":1287,"depth":294,"text":1290},{"id":1824,"depth":294,"text":1827},{"id":2786,"depth":294,"text":2789},{"id":3662,"depth":294,"text":3665},{"id":3902,"depth":294,"text":3905},{"id":4247,"depth":276,"text":4248},{"id":5702,"depth":276,"text":5703},"Complete reference for every field in config.json.","md",null,{},"\u002Fquayel-gateway\u002Fconfiguration",{"title":93,"description":5809},"quayel-gateway\u002F03.configuration","E-cfZQjn8cnkfqt57-50NDsb2LOUYlpR4xozktydrC4",[5811,5811],1791649769106]