[{"data":1,"prerenderedAt":313},["ShallowReactive",2],{"navigation":3,"\u002Fcomposables":94,"\u002Fcomposables-surround":308},[4,33,52],{"title":5,"path":6,"stem":7,"children":8,"icon":32},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,12,17,22,27],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-house",{"title":13,"path":14,"stem":15,"icon":16},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-play",{"title":23,"path":24,"stem":25,"icon":26},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F4.configuration","i-lucide-settings",{"title":28,"path":29,"stem":30,"icon":31},"Production","\u002Fgetting-started\u002Fproduction","1.getting-started\u002F5.production","i-lucide-shield-check","i-lucide-rocket",{"title":34,"path":35,"stem":36,"children":37,"icon":51},"Composable Endpoints","\u002Fcomposables","2.composables\u002F1.index",[38,41,46],{"title":39,"path":35,"stem":36,"icon":40},"Overview","i-lucide-layout-grid",{"title":42,"path":43,"stem":44,"icon":45},"Requirements","\u002Fcomposables\u002Frequirements","2.composables\u002F2.requirements","i-lucide-list-checks",{"title":47,"path":48,"stem":49,"icon":50},"Recipes","\u002Fcomposables\u002Frecipes","2.composables\u002F3.recipes","i-lucide-book-marked","i-lucide-blocks",{"title":53,"icon":54,"path":55,"stem":56,"children":57,"page":93},"Modules","i-lucide-package","\u002Fmodules","3.modules",[58,63,68,73,78,83,88],{"title":59,"path":60,"stem":61,"icon":62},"Identity management","\u002Fmodules\u002Fidentity-management","3.modules\u002F1.identity-management","i-lucide-user-cog",{"title":64,"path":65,"stem":66,"icon":67},"Cookie auth","\u002Fmodules\u002Fcookie-auth","3.modules\u002F2.cookie-auth","i-lucide-cookie",{"title":69,"path":70,"stem":71,"icon":72},"Bearer auth","\u002Fmodules\u002Fbearer-auth","3.modules\u002F3.bearer-auth","i-lucide-key",{"title":74,"path":75,"stem":76,"icon":77},"JWT","\u002Fmodules\u002Fjwt","3.modules\u002F4.jwt","i-lucide-fingerprint",{"title":79,"path":80,"stem":81,"icon":82},"Passkeys","\u002Fmodules\u002Fpasskeys","3.modules\u002F5.passkeys","i-lucide-scan-face",{"title":84,"path":85,"stem":86,"icon":87},"ReAuth","\u002Fmodules\u002Freauth","3.modules\u002F6.reauth","i-lucide-shield-alert",{"title":89,"path":90,"stem":91,"icon":92},"External OAuth","\u002Fmodules\u002Fexternal-oauth","3.modules\u002F7.external-oauth","i-lucide-log-in",false,{"id":95,"title":39,"body":96,"description":301,"extension":302,"links":303,"meta":304,"navigation":305,"path":35,"seo":306,"stem":36,"__hash__":307},"docs\u002F2.composables\u002F1.index.md",{"type":97,"value":98,"toc":296},"minimark",[99,108,113,180,233,237,243,275,279,292],[100,101,102,103,107],"p",{},"AuthEndpoints is designed as ",[104,105,106],"strong",{},"composable minimal API modules",". The opinionated facade is one composition; advanced hosts assemble the same building blocks with custom paths and stacks.",[109,110,112],"h2",{"id":111},"core-idea","Core idea",[114,115,116,149,159,168,174],"ol",{},[117,118,119,122],"li",{},[104,120,121],{},"Management is separate from sign-in",[123,124,125,132],"ul",{},[117,126,127,128],{},"Lifecycle: ",[129,130,131],"code",{},"MapIdentityManagementApi",[117,133,134,135,138,139,142,143,142,146],{},"Sign-in: compose ",[104,136,137],{},"one"," of ",[129,140,141],{},"MapCookieAuthEndpoints"," | ",[129,144,145],{},"MapBearerAuthEndpoints",[129,147,148],{},"MapJwtAuthEndpoints",[117,150,151,154,155,158],{},[104,152,153],{},"Optional passkeys"," — ",[129,156,157],{},"MapPasskeyEndpoints"," on another (or the same) prefix",[117,160,161,167],{},[104,162,163,164],{},"Map onto ",[129,165,166],{},"MapGroup(prefix)"," — paths are relative; hosts choose prefixes",[117,169,170,173],{},[104,171,172],{},"DI must match mapped modules"," — register services before mapping routes",[117,175,176,179],{},[104,177,178],{},"Pipeline prerequisites"," — rate limiting and antiforgery middleware for policies\u002FCSRF to work",[181,182,187],"pre",{"className":183,"code":184,"language":185,"meta":186,"style":186},"language-mermaid shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","flowchart TB\n  mgmt[MapIdentityManagementApi]\n  signin[Cookie or Bearer or JWT]\n  passkeys[MapPasskeyEndpoints]\n  mgmt --> host[Your MapGroup prefixes]\n  signin --> host\n  passkeys --> host\n","mermaid","",[129,188,189,197,203,209,215,221,227],{"__ignoreMap":186},[190,191,194],"span",{"class":192,"line":193},"line",1,[190,195,196],{},"flowchart TB\n",[190,198,200],{"class":192,"line":199},2,[190,201,202],{},"  mgmt[MapIdentityManagementApi]\n",[190,204,206],{"class":192,"line":205},3,[190,207,208],{},"  signin[Cookie or Bearer or JWT]\n",[190,210,212],{"class":192,"line":211},4,[190,213,214],{},"  passkeys[MapPasskeyEndpoints]\n",[190,216,218],{"class":192,"line":217},5,[190,219,220],{},"  mgmt --> host[Your MapGroup prefixes]\n",[190,222,224],{"class":192,"line":223},6,[190,225,226],{},"  signin --> host\n",[190,228,230],{"class":192,"line":229},7,[190,231,232],{},"  passkeys --> host\n",[109,234,236],{"id":235},"facade-one-composition","Facade = one composition",[100,238,239,242],{},[129,240,241],{},"MapAuthEndpoints"," maps:",[123,244,245,256,266],{},[117,246,247,248,251,252,255],{},"Management + cookie under ",[129,249,250],{},"IdentityPath"," (default ",[129,253,254],{},"\u002Fidentity",")",[117,257,258,259,251,262,265],{},"Passkeys under ",[129,260,261],{},"PasskeyPath",[129,263,264],{},"\u002Faccount",") when enabled",[117,267,268,269,251,272,265],{},"JWT under ",[129,270,271],{},"Jwt.Path",[129,273,274],{},"\u002Fauth",[109,276,278],{"id":277},"next","Next",[123,280,281,287],{},[117,282,283,286],{},[284,285,42],"a",{"href":43}," — DI, pipeline, antiforgery, rate limits",[117,288,289,291],{},[284,290,47],{"href":48}," — cookie SPA, bearer, JWT-only, custom paths",[293,294,295],"style",{},"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);}",{"title":186,"searchDepth":193,"depth":199,"links":297},[298,299,300],{"id":111,"depth":199,"text":112},{"id":235,"depth":199,"text":236},{"id":277,"depth":199,"text":278},"Compose Identity management, sign-in stacks, and passkeys on the prefixes your host needs.","md",null,{},{"icon":40},{"title":39,"description":301},"zD_sW_ll__Dul_BTku2Ue31VasRAPzs2MLsPaRy_Sco",[309,311],{"title":28,"path":29,"stem":30,"description":310,"icon":31,"children":-1},"Checklist for running AuthEndpoints safely in Production.",{"title":42,"path":43,"stem":44,"description":312,"icon":45,"children":-1},"Hard prerequisites for composing AuthEndpoints modules correctly.",1785399439560]