[{"data":1,"prerenderedAt":795},["ShallowReactive",2],{"navigation":3,"-utils-security":184,"-utils-security-surround":790},[4,91,133,161,168],{"title":5,"path":6,"stem":7,"children":8,"icon":90},"Guide","/guide","1.guide/0.index",[9,12,53,69],{"title":10,"path":6,"stem":7,"icon":11},"Getting Started","pixel:play",{"title":5,"icon":13,"path":14,"stem":15,"children":16,"page":52},"ph:book-open-duotone","/guide/basics","1.guide/1.basics",[17,22,27,32,37,42,47],{"title":18,"path":19,"stem":20,"icon":21},"Request Lifecycle","/guide/basics/lifecycle","1.guide/1.basics/1.lifecycle","icon-park-outline:handle-round",{"title":23,"path":24,"stem":25,"icon":26},"Routing","/guide/basics/routing","1.guide/1.basics/2.routing","solar:routing-bold",{"title":28,"path":29,"stem":30,"icon":31},"Middleware","/guide/basics/middleware","1.guide/1.basics/3.middleware","mdi:middleware-outline",{"title":33,"path":34,"stem":35,"icon":36},"Event Handlers","/guide/basics/handler","1.guide/1.basics/4.handler","mdi:function",{"title":38,"path":39,"stem":40,"icon":41},"Sending Response","/guide/basics/response","1.guide/1.basics/5.response","tabler:json",{"title":43,"path":44,"stem":45,"icon":46},"Error Handling","/guide/basics/error","1.guide/1.basics/6.error","tabler:error-404",{"title":48,"path":49,"stem":50,"icon":51},"Nested Apps","/guide/basics/nested-apps","1.guide/1.basics/7.nested-apps","material-symbols-light:layers-outline",false,{"title":54,"icon":55,"path":56,"stem":57,"children":58,"page":52},"API","material-symbols-light:api-rounded","/guide/api","1.guide/900.api",[59,64],{"title":60,"path":61,"stem":62,"icon":63},"H3","/guide/api/h3","1.guide/900.api/1.h3","material-symbols:bolt-rounded",{"title":65,"path":66,"stem":67,"icon":68},"H3Event","/guide/api/h3event","1.guide/900.api/2.h3event","material-symbols:data-object-rounded",{"title":70,"icon":71,"path":72,"stem":73,"children":74,"page":52},"Advanced","hugeicons:more-01","/guide/advanced","1.guide/901.advanced",[75,80,85],{"title":76,"path":77,"stem":78,"icon":79},"Plugins","/guide/advanced/plugins","1.guide/901.advanced/1.plugins","clarity:plugin-line",{"title":81,"path":82,"stem":83,"icon":84},"WebSockets","/guide/advanced/websocket","1.guide/901.advanced/2.websocket","hugeicons:live-streaming-02",{"title":86,"path":87,"stem":88,"icon":89},"Nightly Builds","/guide/advanced/nightly","1.guide/901.advanced/9.nightly","game-icons:barn-owl","i-ph:book-open-duotone",{"title":92,"path":93,"stem":94,"children":95,"icon":97},"Utils","/utils","2.utils/0.index",[96,98,103,108,113,118,123,128],{"title":92,"path":93,"stem":94,"icon":97},"ph:function-bold",{"title":99,"path":100,"stem":101,"icon":102},"Request","/utils/request","2.utils/1.request","material-symbols-light:input",{"title":104,"path":105,"stem":106,"icon":107},"Response","/utils/response","2.utils/2.response","material-symbols-light:output",{"title":109,"path":110,"stem":111,"icon":112},"Cookie","/utils/cookie","2.utils/3.cookie","material-symbols:cookie-outline",{"title":114,"path":115,"stem":116,"icon":117},"Security","/utils/security","2.utils/4.security","wpf:key-security",{"title":119,"path":120,"stem":121,"icon":122},"Proxy","/utils/proxy","2.utils/5.proxy","arcticons:super-proxy",{"title":124,"path":125,"stem":126,"icon":127},"More utils","/utils/more","2.utils/9.more","mingcute:plus-line",{"title":129,"path":130,"stem":131,"icon":132},"Community","/utils/community","2.utils/99.community","lets-icons:external",{"title":134,"path":135,"stem":136,"children":137,"icon":139},"Examples","/examples","4.examples/0.index",[138,140,145,149,153,157],{"title":134,"path":135,"stem":136,"icon":139},"ph:code",{"title":141,"path":142,"stem":143,"icon":144},"Cookies","/examples/handle-cookie","4.examples/handle-cookie","ph:arrow-right",{"title":146,"path":147,"stem":148,"icon":144},"Sessions","/examples/handle-session","4.examples/handle-session",{"title":150,"path":151,"stem":152,"icon":144},"Static Assets","/examples/serve-static-assets","4.examples/serve-static-assets",{"title":154,"path":155,"stem":156,"icon":144},"Stream Response","/examples/stream-response","4.examples/stream-response",{"title":158,"path":159,"stem":160,"icon":144},"Validate Data","/examples/validate-data","4.examples/validate-data",{"title":162,"path":163,"stem":164,"children":165,"icon":167},"Migration","/migration","5.migration/0.index",[166],{"title":162,"path":163,"stem":164,"icon":167},"icons8:up-round",{"title":169,"path":170,"stem":171,"children":172},"Blog","/blog","99.blog",[173,176,180],{"title":169,"path":170,"stem":174,"icon":175},"99.blog/index","i-lucide-file-text",{"title":177,"path":178,"stem":179,"icon":175},"H3 1.8 - Towards the Edge of the Web","/blog/v1.8","99.blog/1.v1.8",{"title":181,"path":182,"stem":183,"icon":175},"H3 v2 beta","/blog/v2-beta","99.blog/2.v2-beta",{"id":185,"title":114,"body":186,"description":783,"extension":784,"meta":785,"navigation":787,"path":115,"seo":788,"stem":116,"__hash__":789},"content/2.utils/4.security.md",{"type":187,"value":188,"toc":759,"icon":117},"minimark",[189,194,202,206,212,340,346,349,353,446,450,456,459,465,468,474,477,483,486,492,495,501,504,508,514,517,521,527,530,536,539,545,548,551,558,562,737,743,746,752,755],[190,191,193],"h2",{"id":192},"authentication","Authentication",[195,196,198],"h3",{"id":197},"basicauthopts",[199,200,201],"code",{},"basicAuth(opts)",[203,204,205],"p",{},"Create a basic authentication middleware.",[203,207,208],{},[209,210,211],"strong",{},"Example:",[213,214,219],"pre",{"className":215,"code":216,"language":217,"meta":218,"style":218},"language-ts shiki shiki-themes github-light github-dark github-dark","import { H3, serve, basicAuth } from \"h3\";\nconst auth = basicAuth({ password: \"test\" });\napp.get(\"/\", (event) => `Hello ${event.context.basicAuth?.username}!`, [auth]);\nserve(app, { port: 3000 });\n","ts","",[199,220,221,244,270,326],{"__ignoreMap":218},[222,223,226,230,234,237,241],"span",{"class":224,"line":225},"line",1,[222,227,229],{"class":228},"so5gQ","import",[222,231,233],{"class":232},"slsVL"," { H3, serve, basicAuth } ",[222,235,236],{"class":228},"from",[222,238,240],{"class":239},"sfrk1"," \"h3\"",[222,242,243],{"class":232},";\n",[222,245,247,250,254,257,261,264,267],{"class":224,"line":246},2,[222,248,249],{"class":228},"const",[222,251,253],{"class":252},"suiK_"," auth",[222,255,256],{"class":228}," =",[222,258,260],{"class":259},"shcOC"," basicAuth",[222,262,263],{"class":232},"({ password: ",[222,265,266],{"class":239},"\"test\"",[222,268,269],{"class":232}," });\n",[222,271,273,276,279,282,285,288,292,295,298,301,303,306,309,311,314,317,320,323],{"class":224,"line":272},3,[222,274,275],{"class":232},"app.",[222,277,278],{"class":259},"get",[222,280,281],{"class":232},"(",[222,283,284],{"class":239},"\"/\"",[222,286,287],{"class":232},", (",[222,289,291],{"class":290},"sQHwn","event",[222,293,294],{"class":232},") ",[222,296,297],{"class":228},"=>",[222,299,300],{"class":239}," `Hello ${",[222,302,291],{"class":232},[222,304,305],{"class":239},".",[222,307,308],{"class":232},"context",[222,310,305],{"class":239},[222,312,313],{"class":232},"basicAuth",[222,315,316],{"class":239},"?.",[222,318,319],{"class":232},"username",[222,321,322],{"class":239},"}!`",[222,324,325],{"class":232},", [auth]);\n",[222,327,329,332,335,338],{"class":224,"line":328},4,[222,330,331],{"class":259},"serve",[222,333,334],{"class":232},"(app, { port: ",[222,336,337],{"class":252},"3000",[222,339,269],{"class":232},[195,341,343],{"id":342},"requirebasicauthevent-opts",[199,344,345],{},"requireBasicAuth(event, opts)",[203,347,348],{},"Apply basic authentication for current request.",[203,350,351],{},[209,352,211],{},[213,354,356],{"className":215,"code":355,"language":217,"meta":218,"style":218},"import { defineHandler, requireBasicAuth } from \"h3\";\nexport default defineHandler(async (event) => {\n  await requireBasicAuth(event, { password: \"test\" });\n  return `Hello, ${event.context.basicAuth.username}!`;\n});\n",[199,357,358,371,399,414,440],{"__ignoreMap":218},[222,359,360,362,365,367,369],{"class":224,"line":225},[222,361,229],{"class":228},[222,363,364],{"class":232}," { defineHandler, requireBasicAuth } ",[222,366,236],{"class":228},[222,368,240],{"class":239},[222,370,243],{"class":232},[222,372,373,376,379,382,384,387,390,392,394,396],{"class":224,"line":246},[222,374,375],{"class":228},"export",[222,377,378],{"class":228}," default",[222,380,381],{"class":259}," defineHandler",[222,383,281],{"class":232},[222,385,386],{"class":228},"async",[222,388,389],{"class":232}," (",[222,391,291],{"class":290},[222,393,294],{"class":232},[222,395,297],{"class":228},[222,397,398],{"class":232}," {\n",[222,400,401,404,407,410,412],{"class":224,"line":272},[222,402,403],{"class":228},"  await",[222,405,406],{"class":259}," requireBasicAuth",[222,408,409],{"class":232},"(event, { password: ",[222,411,266],{"class":239},[222,413,269],{"class":232},[222,415,416,419,422,424,426,428,430,432,434,436,438],{"class":224,"line":328},[222,417,418],{"class":228},"  return",[222,420,421],{"class":239}," `Hello, ${",[222,423,291],{"class":232},[222,425,305],{"class":239},[222,427,308],{"class":232},[222,429,305],{"class":239},[222,431,313],{"class":232},[222,433,305],{"class":239},[222,435,319],{"class":232},[222,437,322],{"class":239},[222,439,243],{"class":232},[222,441,443],{"class":224,"line":442},5,[222,444,445],{"class":232},"});\n",[190,447,449],{"id":448},"session","Session",[195,451,453],{"id":452},"clearsessionevent-config",[199,454,455],{},"clearSession(event, config)",[203,457,458],{},"Clear the session data for the current request.",[195,460,462],{"id":461},"getsessionevent-config",[199,463,464],{},"getSession(event, config)",[203,466,467],{},"Get the session for the current request.",[195,469,471],{"id":470},"sealsessionevent-config",[199,472,473],{},"sealSession(event, config)",[203,475,476],{},"Encrypt and sign the session data for the current request.",[195,478,480],{"id":479},"unsealsession_event-config-sealed",[199,481,482],{},"unsealSession(_event, config, sealed)",[203,484,485],{},"Decrypt and verify the session data for the current request.",[195,487,489],{"id":488},"updatesessionevent-config-update",[199,490,491],{},"updateSession(event, config, update?)",[203,493,494],{},"Update the session data for the current request.",[195,496,498],{"id":497},"usesessionevent-config",[199,499,500],{},"useSession(event, config)",[203,502,503],{},"Create a session manager for the current request.",[190,505,507],{"id":506},"fingerprint","Fingerprint",[195,509,511],{"id":510},"getrequestfingerprintevent-opts",[199,512,513],{},"getRequestFingerprint(event, opts)",[203,515,516],{},"Get a unique fingerprint for the incoming request.",[190,518,520],{"id":519},"cors","CORS",[195,522,524],{"id":523},"appendcorsheadersevent-options",[199,525,526],{},"appendCorsHeaders(event, options)",[203,528,529],{},"Append CORS headers to the response.",[195,531,533],{"id":532},"appendcorspreflightheadersevent-options",[199,534,535],{},"appendCorsPreflightHeaders(event, options)",[203,537,538],{},"Append CORS preflight headers to the response.",[195,540,542],{"id":541},"handlecorsevent-options",[199,543,544],{},"handleCors(event, options)",[203,546,547],{},"Handle CORS for the incoming request.",[203,549,550],{},"If the incoming request is a CORS preflight request, it will append the CORS preflight headers and send a 204 response.",[203,552,553,554,557],{},"If return value is not ",[199,555,556],{},"false",", the request is handled and no further action is needed.",[203,559,560],{},[209,561,211],{},[213,563,565],{"className":215,"code":564,"language":217,"meta":218,"style":218},"const app = new H3();\nconst router = createRouter();\nrouter.use(\"/\", async (event) => {\n  const corsRes = handleCors(event, {\n    origin: \"*\",\n    preflight: {\n      statusCode: 204,\n    },\n    methods: \"*\",\n  });\n  if (corsRes !== false) {\n    return corsRes;\n  }\n  // Your code here\n});\n",[199,566,567,585,599,626,642,653,659,670,676,686,692,710,719,725,732],{"__ignoreMap":218},[222,568,569,571,574,576,579,582],{"class":224,"line":225},[222,570,249],{"class":228},[222,572,573],{"class":252}," app",[222,575,256],{"class":228},[222,577,578],{"class":228}," new",[222,580,581],{"class":259}," H3",[222,583,584],{"class":232},"();\n",[222,586,587,589,592,594,597],{"class":224,"line":246},[222,588,249],{"class":228},[222,590,591],{"class":252}," router",[222,593,256],{"class":228},[222,595,596],{"class":259}," createRouter",[222,598,584],{"class":232},[222,600,601,604,607,609,611,614,616,618,620,622,624],{"class":224,"line":272},[222,602,603],{"class":232},"router.",[222,605,606],{"class":259},"use",[222,608,281],{"class":232},[222,610,284],{"class":239},[222,612,613],{"class":232},", ",[222,615,386],{"class":228},[222,617,389],{"class":232},[222,619,291],{"class":290},[222,621,294],{"class":232},[222,623,297],{"class":228},[222,625,398],{"class":232},[222,627,628,631,634,636,639],{"class":224,"line":328},[222,629,630],{"class":228},"  const",[222,632,633],{"class":252}," corsRes",[222,635,256],{"class":228},[222,637,638],{"class":259}," handleCors",[222,640,641],{"class":232},"(event, {\n",[222,643,644,647,650],{"class":224,"line":442},[222,645,646],{"class":232},"    origin: ",[222,648,649],{"class":239},"\"*\"",[222,651,652],{"class":232},",\n",[222,654,656],{"class":224,"line":655},6,[222,657,658],{"class":232},"    preflight: {\n",[222,660,662,665,668],{"class":224,"line":661},7,[222,663,664],{"class":232},"      statusCode: ",[222,666,667],{"class":252},"204",[222,669,652],{"class":232},[222,671,673],{"class":224,"line":672},8,[222,674,675],{"class":232},"    },\n",[222,677,679,682,684],{"class":224,"line":678},9,[222,680,681],{"class":232},"    methods: ",[222,683,649],{"class":239},[222,685,652],{"class":232},[222,687,689],{"class":224,"line":688},10,[222,690,691],{"class":232},"  });\n",[222,693,695,698,701,704,707],{"class":224,"line":694},11,[222,696,697],{"class":228},"  if",[222,699,700],{"class":232}," (corsRes ",[222,702,703],{"class":228},"!==",[222,705,706],{"class":252}," false",[222,708,709],{"class":232},") {\n",[222,711,713,716],{"class":224,"line":712},12,[222,714,715],{"class":228},"    return",[222,717,718],{"class":232}," corsRes;\n",[222,720,722],{"class":224,"line":721},13,[222,723,724],{"class":232},"  }\n",[222,726,728],{"class":224,"line":727},14,[222,729,731],{"class":730},"sCsY4","  // Your code here\n",[222,733,735],{"class":224,"line":734},15,[222,736,445],{"class":232},[195,738,740],{"id":739},"iscorsoriginallowedorigin-options",[199,741,742],{},"isCorsOriginAllowed(origin, options)",[203,744,745],{},"Check if the origin is allowed.",[195,747,749],{"id":748},"ispreflightrequestevent",[199,750,751],{},"isPreflightRequest(event)",[203,753,754],{},"Check if the incoming request is a CORS preflight request.",[756,757,758],"style",{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}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 .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":218,"searchDepth":246,"depth":246,"links":760},[761,765,773,776],{"id":192,"depth":246,"text":193,"children":762},[763,764],{"id":197,"depth":272,"text":201},{"id":342,"depth":272,"text":345},{"id":448,"depth":246,"text":449,"children":766},[767,768,769,770,771,772],{"id":452,"depth":272,"text":455},{"id":461,"depth":272,"text":464},{"id":470,"depth":272,"text":473},{"id":479,"depth":272,"text":482},{"id":488,"depth":272,"text":491},{"id":497,"depth":272,"text":500},{"id":506,"depth":246,"text":507,"children":774},[775],{"id":510,"depth":272,"text":513},{"id":519,"depth":246,"text":520,"children":777},[778,779,780,781,782],{"id":523,"depth":272,"text":526},{"id":532,"depth":272,"text":535},{"id":541,"depth":272,"text":544},{"id":739,"depth":272,"text":742},{"id":748,"depth":272,"text":751},"H3 security utilities.","md",{"automd":786,"icon":117},true,{"icon":117},{"title":114,"description":783},"GlHLyDkGfGmf07agApu-2T9V-y4ncIDydlIdUY0_Jko",[791,793],{"title":109,"path":110,"stem":111,"description":792,"icon":112,"children":-1},"H3 cookie utilities.",{"title":119,"path":120,"stem":121,"description":794,"icon":122,"children":-1},"H3 proxy utilities.",1768646388662]