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