[{"data":1,"prerenderedAt":2096},["ShallowReactive",2],{"navLinks":3,"sidebar_docs_navigation_\u002Fdocs\u002Fauth-h3client":64,"navigation":217,"navLinks_footer":829,"\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fhmac_page":842,"\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fhmac_surround":1575,"\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fhmac":1578},{"id":4,"extension":5,"links":6,"meta":61,"stem":62,"__hash__":63},"navigationMenu\u002Fnavigation.json","json",[7,52,57],{"nested":8,"label":9,"icon":10,"to":11,"children":12},true,"Docs","i-lucide-book-open","\u002Fdocs\u002Fgetting-started",[13,19,26,32,39,45],{"label":14,"icon":15,"to":11,"description":16,"github":17,"badge":18},"Getting Started","i-lucide-rocket","An introduction to help you understand the core components.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fdocshub","Start Here",{"label":20,"icon":21,"to":22,"description":23,"github":24,"badge":25},"Auth H3 Client","i-lucide-key-round","\u002Fdocs\u002Fauth-h3client","Seamlessly enforce OAuth 2.0 authentication and session management integrated directly as the client of the IAM module.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fauth-h3client","Core",{"label":27,"icon":28,"to":29,"description":30,"github":31,"badge":25},"IAM","i-lucide-shield-check","\u002Fdocs\u002Fiam","Identity and Access Management featuring granular roles, permissions, and security policies.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fauth",{"label":33,"icon":34,"to":35,"description":36,"github":37,"badge":38},"Bot Detection","i-lucide-cpu","\u002Fdocs\u002Fbot-detection","Advanced behavioral analysis and request fingerprinting to stop malicious automated traffic.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fbot-detector","Security",{"label":40,"icon":41,"to":42,"description":43,"github":44,"badge":38},"Shield Base","i-lucide-database-zap","\u002Fdocs\u002Fshield-base","CLI and programmatic toolkit for compiling offline-ready IP intelligence databases from BGP, GeoIP, Tor, FireHOL, and other public threat feeds.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fshield-base-cli",{"label":46,"icon":47,"to":48,"description":49,"github":50,"badge":51},"Utils","i-lucide-wrench","\u002Fdocs\u002Futils","A standard library of highly optimized helpers for formatting, validation, and core logic.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Futils","Library",{"nested":53,"label":54,"icon":55,"to":56},false,"Blog","i-lucide-pen-line","\u002Fblog",{"nested":53,"label":58,"icon":59,"to":60},"Website","lucide:app-window-mac","https:\u002F\u002Friavzon.com",{},"navigation","gkaQ0xRGxSLrLyM3kttLe0oBwkrR1EBjlepF8LSbwF8",[65],{"title":9,"path":66,"stem":67,"children":68,"page":53},"\u002Fdocs","docs",[69],{"title":20,"path":22,"stem":70,"children":71},"docs\u002Fauth-h3client\u002Findex",[72,73,82,119,145,167,170,191,195],{"title":20,"path":22,"stem":70},{"title":14,"path":74,"stem":75,"children":76},"\u002Fdocs\u002Fauth-h3client\u002Fgetting-started","docs\u002Fauth-h3client\u002F00.getting-started\u002Findex",[77,78],{"title":14,"path":74,"stem":75},{"title":79,"path":80,"stem":81},"Nuxt Module","\u002Fdocs\u002Fauth-h3client\u002Fgetting-started\u002Fnuxt","docs\u002Fauth-h3client\u002F00.getting-started\u002F00.nuxt",{"title":83,"path":84,"stem":85,"children":86},"Essentials","\u002Fdocs\u002Fauth-h3client\u002Fessentials","docs\u002Fauth-h3client\u002F01.essentials\u002Findex",[87,88,92,96,100,104,108,111,115],{"title":83,"path":84,"stem":85},{"title":89,"path":90,"stem":91},"Session Management","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fsession","docs\u002Fauth-h3client\u002F01.essentials\u002F00.session",{"title":93,"path":94,"stem":95},"Route Protection","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Froute-protection","docs\u002Fauth-h3client\u002F01.essentials\u002F01.route-protection",{"title":97,"path":98,"stem":99},"CSRF Protection","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fcsrf","docs\u002Fauth-h3client\u002F01.essentials\u002F02.csrf",{"title":101,"path":102,"stem":103},"Auth Flows","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fauth-flows","docs\u002Fauth-h3client\u002F01.essentials\u002F03.auth-flows",{"title":105,"path":106,"stem":107},"OAuth and OIDC","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Foauth","docs\u002Fauth-h3client\u002F01.essentials\u002F04.oauth",{"title":33,"path":109,"stem":110},"\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fbot-detection","docs\u002Fauth-h3client\u002F01.essentials\u002F05.bot-detection",{"title":112,"path":113,"stem":114},"Cookies","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fcookies","docs\u002Fauth-h3client\u002F01.essentials\u002F06.cookies",{"title":116,"path":117,"stem":118},"Logging","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Flogging","docs\u002Fauth-h3client\u002F01.essentials\u002F07.logging",{"title":120,"path":121,"stem":122,"children":123},"MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa","docs\u002Fauth-h3client\u002F02.mfa\u002Findex",[124,125,129,133,137,141],{"title":120,"path":121,"stem":122},{"title":126,"path":127,"stem":128},"Built-in MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fbuilt-in-flow","docs\u002Fauth-h3client\u002F02.mfa\u002F01.built-in-flow",{"title":130,"path":131,"stem":132},"Password Reset","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fpassword-reset","docs\u002Fauth-h3client\u002F02.mfa\u002F02.password-reset",{"title":134,"path":135,"stem":136},"Email Change","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Femail-change","docs\u002Fauth-h3client\u002F02.mfa\u002F03.email-change",{"title":138,"path":139,"stem":140},"Custom MFA Flow","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fcustom-flow","docs\u002Fauth-h3client\u002F02.mfa\u002F04.custom-flow",{"title":142,"path":143,"stem":144},"Client-Side MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fclient-side","docs\u002Fauth-h3client\u002F02.mfa\u002F05.client-side",{"title":146,"path":147,"stem":148,"children":149},"Client-side","\u002Fdocs\u002Fauth-h3client\u002Fclient","docs\u002Fauth-h3client\u002F03.client\u002Findex",[150,151,155,159,163],{"title":146,"path":147,"stem":148},{"title":152,"path":153,"stem":154},"useAuthData","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fuse-auth-data","docs\u002Fauth-h3client\u002F03.client\u002F00.use-auth-data",{"title":156,"path":157,"stem":158},"useMagicLink","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fuse-magic-link","docs\u002Fauth-h3client\u002F03.client\u002F01.use-magic-link",{"title":160,"path":161,"stem":162},"executeRequest","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fexecute-request","docs\u002Fauth-h3client\u002F03.client\u002F02.execute-request",{"title":164,"path":165,"stem":166},"getCsrfToken","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fget-csrf-token","docs\u002Fauth-h3client\u002F03.client\u002F03.get-csrf-token",{"title":38,"path":168,"stem":169},"\u002Fdocs\u002Fauth-h3client\u002Fsecurity","docs\u002Fauth-h3client\u002F04.security",{"title":171,"path":172,"stem":173,"children":174,"page":53},"Guides","\u002Fdocs\u002Fauth-h3client\u002Fguides","docs\u002Fauth-h3client\u002F05.guides",[175,179,183,187],{"title":176,"path":177,"stem":178},"H3 and Nitro Setup","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fh3-nitro","docs\u002Fauth-h3client\u002F05.guides\u002F00.h3-nitro",{"title":180,"path":181,"stem":182},"HMAC Inter-service Auth","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fhmac","docs\u002Fauth-h3client\u002F05.guides\u002Fhmac",{"title":184,"path":185,"stem":186},"Image Upload","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fimage-upload","docs\u002Fauth-h3client\u002F05.guides\u002Fimage-upload",{"title":188,"path":189,"stem":190},"mTLS Configuration","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fmtls","docs\u002Fauth-h3client\u002F05.guides\u002Fmtls",{"title":192,"path":193,"stem":194},"Configuration","\u002Fdocs\u002Fauth-h3client\u002Fconfiguration","docs\u002Fauth-h3client\u002F06.configuration",{"title":196,"path":197,"stem":198,"children":199},"API Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi","docs\u002Fauth-h3client\u002F07.api\u002Findex",[200,201,205,209,213],{"title":196,"path":197,"stem":198},{"title":202,"path":203,"stem":204},"Routes Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fcontrollers","docs\u002Fauth-h3client\u002F07.api\u002F00.controllers",{"title":206,"path":207,"stem":208},"Middleware Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fmiddleware","docs\u002Fauth-h3client\u002F07.api\u002F01.middleware",{"title":210,"path":211,"stem":212},"Client-side Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fcomposables","docs\u002Fauth-h3client\u002F07.api\u002F02.composables",{"title":214,"path":215,"stem":216},"Utilities","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Futilities","docs\u002Fauth-h3client\u002F07.api\u002F03.utilities",[218],{"title":9,"path":66,"stem":67,"children":219,"page":53},[220,268,386,391,569,636],{"title":20,"path":22,"stem":70,"children":221},[222,223,227,238,246,253,254,260,261],{"title":20,"path":22,"stem":70},{"title":14,"path":74,"stem":75,"children":224},[225,226],{"title":14,"path":74,"stem":75},{"title":79,"path":80,"stem":81},{"title":83,"path":84,"stem":85,"children":228},[229,230,231,232,233,234,235,236,237],{"title":83,"path":84,"stem":85},{"title":89,"path":90,"stem":91},{"title":93,"path":94,"stem":95},{"title":97,"path":98,"stem":99},{"title":101,"path":102,"stem":103},{"title":105,"path":106,"stem":107},{"title":33,"path":109,"stem":110},{"title":112,"path":113,"stem":114},{"title":116,"path":117,"stem":118},{"title":120,"path":121,"stem":122,"children":239},[240,241,242,243,244,245],{"title":120,"path":121,"stem":122},{"title":126,"path":127,"stem":128},{"title":130,"path":131,"stem":132},{"title":134,"path":135,"stem":136},{"title":138,"path":139,"stem":140},{"title":142,"path":143,"stem":144},{"title":146,"path":147,"stem":148,"children":247},[248,249,250,251,252],{"title":146,"path":147,"stem":148},{"title":152,"path":153,"stem":154},{"title":156,"path":157,"stem":158},{"title":160,"path":161,"stem":162},{"title":164,"path":165,"stem":166},{"title":38,"path":168,"stem":169},{"title":171,"path":172,"stem":173,"children":255,"page":53},[256,257,258,259],{"title":176,"path":177,"stem":178},{"title":180,"path":181,"stem":182},{"title":184,"path":185,"stem":186},{"title":188,"path":189,"stem":190},{"title":192,"path":193,"stem":194},{"title":196,"path":197,"stem":198,"children":262},[263,264,265,266,267],{"title":196,"path":197,"stem":198},{"title":202,"path":203,"stem":204},{"title":206,"path":207,"stem":208},{"title":210,"path":211,"stem":212},{"title":214,"path":215,"stem":216},{"title":269,"path":35,"stem":270,"children":271},"Bot Detector","docs\u002Fbot-detection\u002Findex",[272,273,276,280,284,303,377,380,383],{"title":269,"path":35,"stem":270},{"title":14,"path":274,"stem":275},"\u002Fdocs\u002Fbot-detection\u002Fgetting-started","docs\u002Fbot-detection\u002F00.getting-started",{"title":277,"path":278,"stem":279},"CLI","\u002Fdocs\u002Fbot-detection\u002Fcli","docs\u002Fbot-detection\u002F01.cli",{"title":281,"path":282,"stem":283},"Data Sources","\u002Fdocs\u002Fbot-detection\u002Fdata-sources","docs\u002Fbot-detection\u002F02.data-sources",{"title":171,"path":285,"stem":286,"children":287,"page":53},"\u002Fdocs\u002Fbot-detection\u002Fguides","docs\u002Fbot-detection\u002F03.guides",[288,292,296,299],{"title":289,"path":290,"stem":291},"Custom Checkers","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fcustom","docs\u002Fbot-detection\u002F03.guides\u002FCUSTOM",{"title":293,"path":294,"stem":295},"Scheduling Database Generation","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fgenerate","docs\u002Fbot-detection\u002F03.guides\u002FGENERATE",{"title":116,"path":297,"stem":298},"\u002Fdocs\u002Fbot-detection\u002Fguides\u002Flogging","docs\u002Fbot-detection\u002F03.guides\u002FLOGGING",{"title":300,"path":301,"stem":302},"Score Modes and Reputation Healing","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fscore","docs\u002Fbot-detection\u002F03.guides\u002FSCORE",{"title":304,"path":305,"stem":306,"children":307},"Checkers","\u002Fdocs\u002Fbot-detection\u002Fcheckers","docs\u002Fbot-detection\u002F04.checkers\u002Findex",[308,309,313,317,321,325,329,333,337,341,345,349,353,357,361,365,369,373],{"title":304,"path":305,"stem":306},{"title":310,"path":311,"stem":312},"IP Validation","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fip-validation","docs\u002Fbot-detection\u002F04.checkers\u002F01.ip-validation",{"title":314,"path":315,"stem":316},"Good \u002F Bad Bot Verification","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fgood-bots","docs\u002Fbot-detection\u002F04.checkers\u002F02.good-bots",{"title":318,"path":319,"stem":320},"Browser & Device Fingerprint","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fbrowser-device","docs\u002Fbot-detection\u002F04.checkers\u002F03.browser-device",{"title":322,"path":323,"stem":324},"Locale Map","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Flocale-map","docs\u002Fbot-detection\u002F04.checkers\u002F04.locale-map",{"title":326,"path":327,"stem":328},"Known Threats","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-threats","docs\u002Fbot-detection\u002F04.checkers\u002F05.known-threats",{"title":330,"path":331,"stem":332},"ASN Classification","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fasn-classification","docs\u002Fbot-detection\u002F04.checkers\u002F06.asn-classification",{"title":334,"path":335,"stem":336},"Tor Analysis","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Ftor-analysis","docs\u002Fbot-detection\u002F04.checkers\u002F07.tor-analysis",{"title":338,"path":339,"stem":340},"Timezone Consistency","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Ftimezone-consistency","docs\u002Fbot-detection\u002F04.checkers\u002F08.timezone-consistency",{"title":342,"path":343,"stem":344},"Honeypot","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fhoneypot","docs\u002Fbot-detection\u002F04.checkers\u002F09.honeypot",{"title":346,"path":347,"stem":348},"Known Bad IPs","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-bad-ips","docs\u002Fbot-detection\u002F04.checkers\u002F10.known-bad-ips",{"title":350,"path":351,"stem":352},"Behavior Rate","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fbehavior-rate","docs\u002Fbot-detection\u002F04.checkers\u002F11.behavior-rate",{"title":354,"path":355,"stem":356},"Proxy \u002F ISP \u002F Cookie","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fproxy-isp-cookies","docs\u002Fbot-detection\u002F04.checkers\u002F12.proxy-isp-cookies",{"title":358,"path":359,"stem":360},"Session Coherence","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fsession-coherence","docs\u002Fbot-detection\u002F04.checkers\u002F13.session-coherence",{"title":362,"path":363,"stem":364},"Velocity Fingerprint","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fvelocity-fingerprint","docs\u002Fbot-detection\u002F04.checkers\u002F14.velocity-fingerprint",{"title":366,"path":367,"stem":368},"UA & Header Analysis","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fua-header","docs\u002Fbot-detection\u002F04.checkers\u002F15.ua-header",{"title":370,"path":371,"stem":372},"Geolocation","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fgeolocation","docs\u002Fbot-detection\u002F04.checkers\u002F16.geolocation",{"title":374,"path":375,"stem":376},"Known Bad User-Agents","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-bad-ua","docs\u002Fbot-detection\u002F04.checkers\u002F17.known-bad-ua",{"title":38,"path":378,"stem":379},"\u002Fdocs\u002Fbot-detection\u002Fsecurity","docs\u002Fbot-detection\u002F04.security",{"title":196,"path":381,"stem":382},"\u002Fdocs\u002Fbot-detection\u002Fapi","docs\u002Fbot-detection\u002F05.api",{"title":192,"path":384,"stem":385},"\u002Fdocs\u002Fbot-detection\u002Fconfiguration","docs\u002Fbot-detection\u002F06.configuration",{"title":387,"path":11,"stem":388,"children":389},"Introduction","docs\u002Fgetting-started\u002Findex",[390],{"title":387,"path":11,"stem":388},{"title":27,"path":29,"stem":392,"children":393},"docs\u002Fiam\u002Findex",[394,395,398,533,536,552,555],{"title":27,"path":29,"stem":392},{"title":14,"path":396,"stem":397},"\u002Fdocs\u002Fiam\u002Fgetting-started","docs\u002Fiam\u002F00.getting-started",{"title":83,"path":399,"stem":400,"children":401},"\u002Fdocs\u002Fiam\u002Fessentials","docs\u002Fiam\u002F01.essentials\u002Findex",[402,403,407,411,415,419,423,427,431,435,439,443,446,450,454,458,462,465,469,473,476,480,483],{"title":83,"path":399,"stem":400},{"title":404,"path":405,"stem":406},"Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Ftokens","docs\u002Fiam\u002F01.essentials\u002F00.tokens",{"title":408,"path":409,"stem":410},"Access Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Faccess-tokens","docs\u002Fiam\u002F01.essentials\u002F01.access-tokens",{"title":412,"path":413,"stem":414},"Refresh Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Frefresh-tokens","docs\u002Fiam\u002F01.essentials\u002F02.refresh-tokens",{"title":416,"path":417,"stem":418},"Anomaly Detection","\u002Fdocs\u002Fiam\u002Fessentials\u002Fanomalies","docs\u002Fiam\u002F01.essentials\u002F03.anomalies",{"title":420,"path":421,"stem":422},"Signup","\u002Fdocs\u002Fiam\u002Fessentials\u002Fsignup","docs\u002Fiam\u002F01.essentials\u002F04.signup",{"title":424,"path":425,"stem":426},"Login","\u002Fdocs\u002Fiam\u002Fessentials\u002Flogin","docs\u002Fiam\u002F01.essentials\u002F05.login",{"title":428,"path":429,"stem":430},"Logout","\u002Fdocs\u002Fiam\u002Fessentials\u002Flogout","docs\u002Fiam\u002F01.essentials\u002F06.logout",{"title":432,"path":433,"stem":434},"OAuth","\u002Fdocs\u002Fiam\u002Fessentials\u002Foauth","docs\u002Fiam\u002F01.essentials\u002F07.oauth",{"title":436,"path":437,"stem":438},"Magic Links","\u002Fdocs\u002Fiam\u002Fessentials\u002Fmagic-links","docs\u002Fiam\u002F01.essentials\u002F08.magic-links",{"title":440,"path":441,"stem":442},"Emails","\u002Fdocs\u002Fiam\u002Fessentials\u002Femails","docs\u002Fiam\u002F01.essentials\u002F09.emails",{"title":120,"path":444,"stem":445},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fmfa","docs\u002Fiam\u002F01.essentials\u002F10.mfa",{"title":447,"path":448,"stem":449},"Fingerprinting","\u002Fdocs\u002Fiam\u002Fessentials\u002Ffingerprinting","docs\u002Fiam\u002F01.essentials\u002F11.fingerprinting",{"title":451,"path":452,"stem":453},"Backend for Frontend","\u002Fdocs\u002Fiam\u002Fessentials\u002Fbff","docs\u002Fiam\u002F01.essentials\u002F12.bff",{"title":455,"path":456,"stem":457},"HMAC Authentication","\u002Fdocs\u002Fiam\u002Fessentials\u002Fhmac","docs\u002Fiam\u002F01.essentials\u002F13.hmac",{"title":459,"path":460,"stem":461},"XSS Protection","\u002Fdocs\u002Fiam\u002Fessentials\u002Fxss","docs\u002Fiam\u002F01.essentials\u002F14.xss",{"title":116,"path":463,"stem":464},"\u002Fdocs\u002Fiam\u002Fessentials\u002Flogging","docs\u002Fiam\u002F01.essentials\u002F15.logging",{"title":466,"path":467,"stem":468},"Rate Limiting","\u002Fdocs\u002Fiam\u002Fessentials\u002Frate-limiting","docs\u002Fiam\u002F01.essentials\u002F16.rate-limiting",{"title":470,"path":471,"stem":472},"Database","\u002Fdocs\u002Fiam\u002Fessentials\u002Fdatabase","docs\u002Fiam\u002F01.essentials\u002F17.database",{"title":112,"path":474,"stem":475},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fcookies","docs\u002Fiam\u002F01.essentials\u002F18.cookies",{"title":477,"path":478,"stem":479},"Service Startup","\u002Fdocs\u002Fiam\u002Fessentials\u002Fservice","docs\u002Fiam\u002F01.essentials\u002F19.service",{"title":130,"path":481,"stem":482},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fpassword-reset","docs\u002Fiam\u002F01.essentials\u002F20.password-reset",{"title":484,"path":485,"stem":486,"children":487},"API Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi","docs\u002Fiam\u002F01.essentials\u002F21.api\u002Findex",[488,489,493,497,527,530],{"title":484,"path":485,"stem":486},{"title":490,"path":491,"stem":492},"Creating Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fcreation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F00.creation",{"title":494,"path":495,"stem":496},"Verifying Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fverification","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F01.verification",{"title":498,"path":499,"stem":500,"children":501},"Manage Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002Findex",[502,503,507,511,515,519,523],{"title":498,"path":499,"stem":500},{"title":504,"path":505,"stem":506},"Privileges","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fprivilege","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F00.privilege",{"title":508,"path":509,"stem":510},"Revocation","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Frevocation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F01.revocation",{"title":512,"path":513,"stem":514},"Rotation","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Frotation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F02.rotation",{"title":516,"path":517,"stem":518},"IP Restriction","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fip-updates","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F03.ip-updates",{"title":520,"path":521,"stem":522},"Metadata","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fmetadata","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F04.metadata",{"title":524,"path":525,"stem":526},"Token Listing","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Flist","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F05.list",{"title":466,"path":528,"stem":529},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Frate-limiting","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F03.rate-limiting",{"title":38,"path":531,"stem":532},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fsecurity","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F04.security",{"title":38,"path":534,"stem":535},"\u002Fdocs\u002Fiam\u002Fsecurity","docs\u002Fiam\u002F02.security",{"title":171,"path":537,"stem":538,"children":539,"page":53},"\u002Fdocs\u002Fiam\u002Fguides","docs\u002Fiam\u002F03.guides",[540,544,548],{"title":541,"path":542,"stem":543},"Deployment","\u002Fdocs\u002Fiam\u002Fguides\u002Fdeployment","docs\u002Fiam\u002F03.guides\u002Fdeployment",{"title":545,"path":546,"stem":547},"Operation Scripts","\u002Fdocs\u002Fiam\u002Fguides\u002Foperation-scripts","docs\u002Fiam\u002F03.guides\u002Foperation-scripts",{"title":549,"path":550,"stem":551},"Role-Based Access Control","\u002Fdocs\u002Fiam\u002Fguides\u002Frbac","docs\u002Fiam\u002F03.guides\u002Frbac",{"title":192,"path":553,"stem":554},"\u002Fdocs\u002Fiam\u002Fconfiguration","docs\u002Fiam\u002F04.configuration",{"title":556,"path":557,"stem":558,"children":559,"page":53},"Api","\u002Fdocs\u002Fiam\u002Fapi","docs\u002Fiam\u002F05.API",[560,563,566],{"title":196,"path":561,"stem":562},"\u002Fdocs\u002Fiam\u002Fapi\u002Fapi","docs\u002Fiam\u002F05.API\u002F00.api",{"title":206,"path":564,"stem":565},"\u002Fdocs\u002Fiam\u002Fapi\u002Fmiddlewares","docs\u002Fiam\u002F05.API\u002F02.middlewares",{"title":202,"path":567,"stem":568},"\u002Fdocs\u002Fiam\u002Fapi\u002Froutes","docs\u002Fiam\u002F05.API\u002F03.routes",{"title":40,"path":42,"stem":570,"children":571},"docs\u002Fshield-base\u002Findex",[572,573,576,580,621,625,629,633],{"title":40,"path":42,"stem":570},{"title":14,"path":574,"stem":575},"\u002Fdocs\u002Fshield-base\u002Fgetting-started","docs\u002Fshield-base\u002F00.getting-started",{"title":577,"path":578,"stem":579},"CLI Reference","\u002Fdocs\u002Fshield-base\u002Fcli","docs\u002Fshield-base\u002F01.cli",{"title":281,"path":581,"stem":582,"children":583},"\u002Fdocs\u002Fshield-base\u002Fdata-sources","docs\u002Fshield-base\u002F02.data-sources\u002Findex",[584,585,589,593,597,601,605,609,613,617],{"title":281,"path":581,"stem":582},{"title":586,"path":587,"stem":588},"BGP \u002F ASN","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fbgp","docs\u002Fshield-base\u002F02.data-sources\u002Fbgp",{"title":590,"path":591,"stem":592},"City Geolocation","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcity","docs\u002Fshield-base\u002F02.data-sources\u002Fcity",{"title":594,"path":595,"stem":596},"Country Geolocation","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcountry","docs\u002Fshield-base\u002F02.data-sources\u002Fcountry",{"title":598,"path":599,"stem":600},"Verified Crawlers","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcrawlers","docs\u002Fshield-base\u002F02.data-sources\u002Fcrawlers",{"title":602,"path":603,"stem":604},"Disposable Emails","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Femail","docs\u002Fshield-base\u002F02.data-sources\u002Femail",{"title":606,"path":607,"stem":608},"FireHOL Threat Intelligence","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Ffirehol","docs\u002Fshield-base\u002F02.data-sources\u002Ffirehol",{"title":610,"path":611,"stem":612},"Proxy Detection","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fproxy","docs\u002Fshield-base\u002F02.data-sources\u002Fproxy",{"title":614,"path":615,"stem":616},"Tor Nodes","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Ftor","docs\u002Fshield-base\u002F02.data-sources\u002Ftor",{"title":618,"path":619,"stem":620},"Suspicious User-Agents","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fuseragent","docs\u002Fshield-base\u002F02.data-sources\u002Fuseragent",{"title":622,"path":623,"stem":624},"Programmatic Usage","\u002Fdocs\u002Fshield-base\u002Fusage","docs\u002Fshield-base\u002F03.usage",{"title":626,"path":627,"stem":628},"Custom Data Sources","\u002Fdocs\u002Fshield-base\u002Fcustom-data-sources","docs\u002Fshield-base\u002F04.custom-data-sources",{"title":630,"path":631,"stem":632},"TypeScript Types","\u002Fdocs\u002Fshield-base\u002Ftypes","docs\u002Fshield-base\u002F05.types",{"title":196,"path":634,"stem":635},"\u002Fdocs\u002Fshield-base\u002Fapi","docs\u002Fshield-base\u002F06.api",{"title":214,"path":48,"stem":637,"children":638},"docs\u002Futils\u002Findex",[639,640,657,690,787],{"title":214,"path":48,"stem":637},{"title":641,"path":642,"stem":643,"children":644,"page":53},"Eslint","\u002Fdocs\u002Futils\u002Feslint","docs\u002Futils\u002Feslint",[645,649,653],{"title":646,"path":647,"stem":648},"React Config","\u002Fdocs\u002Futils\u002Feslint\u002Freact","docs\u002Futils\u002Feslint\u002Freact",{"title":650,"path":651,"stem":652},"TypeScript Config","\u002Fdocs\u002Futils\u002Feslint\u002Ftypescript","docs\u002Futils\u002Feslint\u002Ftypescript",{"title":654,"path":655,"stem":656},"Vue Config","\u002Fdocs\u002Futils\u002Feslint\u002Fvue","docs\u002Futils\u002Feslint\u002Fvue",{"title":658,"path":659,"stem":660,"children":661,"page":53},"Server","\u002Fdocs\u002Futils\u002Fserver","docs\u002Futils\u002Fserver",[662,666,670,674,678,682,686],{"title":663,"path":664,"stem":665},"Encryption","\u002Fdocs\u002Futils\u002Fserver\u002Fencryption","docs\u002Futils\u002Fserver\u002Fencryption",{"title":667,"path":668,"stem":669},"Path Resolver","\u002Fdocs\u002Futils\u002Fserver\u002Fpathresolver","docs\u002Futils\u002Fserver\u002FpathResolver",{"title":671,"path":672,"stem":673},"File Replacements","\u002Fdocs\u002Futils\u002Fserver\u002Freplace","docs\u002Futils\u002Fserver\u002Freplace",{"title":675,"path":676,"stem":677},"run","\u002Fdocs\u002Futils\u002Fserver\u002Frun","docs\u002Futils\u002Fserver\u002Frun",{"title":679,"path":680,"stem":681},"scheduleTask","\u002Fdocs\u002Futils\u002Fserver\u002Fscheduletask","docs\u002Futils\u002Fserver\u002FscheduleTask",{"title":683,"path":684,"stem":685},"spawnRun","\u002Fdocs\u002Futils\u002Fserver\u002Fspawnrun","docs\u002Futils\u002Fserver\u002FspawnRun",{"title":687,"path":688,"stem":689},"uploadCsv","\u002Fdocs\u002Futils\u002Fserver\u002Fuploadcsv","docs\u002Futils\u002Fserver\u002FuploadCsv",{"title":691,"path":692,"stem":693,"children":694,"page":53},"Shared","\u002Fdocs\u002Futils\u002Fshared","docs\u002Futils\u002Fshared",[695,699,703,707,711,715,719,723,727,731,735,739,743,747,751,755,759,763,767,771,775,779,783],{"title":696,"path":697,"stem":698},"BatchQueue","\u002Fdocs\u002Futils\u002Fshared\u002Fbatchqueue","docs\u002Futils\u002Fshared\u002FbatchQueue",{"title":700,"path":701,"stem":702},"capitalize","\u002Fdocs\u002Futils\u002Fshared\u002Fcapitalize","docs\u002Futils\u002Fshared\u002Fcapitalize",{"title":704,"path":705,"stem":706},"chunkProcess","\u002Fdocs\u002Futils\u002Fshared\u002Fchunkprocess","docs\u002Futils\u002Fshared\u002FchunkProcess",{"title":708,"path":709,"stem":710},"cleanObject","\u002Fdocs\u002Futils\u002Fshared\u002Fcleanobject","docs\u002Futils\u002Fshared\u002FcleanObject",{"title":712,"path":713,"stem":714},"createConfigManager","\u002Fdocs\u002Futils\u002Fshared\u002Fconfigurationdefiner","docs\u002Futils\u002Fshared\u002FconfigurationDefiner",{"title":716,"path":717,"stem":718},"debounce","\u002Fdocs\u002Futils\u002Fshared\u002Fdebounce","docs\u002Futils\u002Fshared\u002Fdebounce",{"title":720,"path":721,"stem":722},"ensureArray","\u002Fdocs\u002Futils\u002Fshared\u002Fensurearray","docs\u002Futils\u002Fshared\u002FensureArray",{"title":724,"path":725,"stem":726},"fetchWithRetry","\u002Fdocs\u002Futils\u002Fshared\u002Ffetchwithretry","docs\u002Futils\u002Fshared\u002FfetchWithRetry",{"title":728,"path":729,"stem":730},"filterEmptyValues","\u002Fdocs\u002Futils\u002Fshared\u002Ffilteremptyvalues","docs\u002Futils\u002Fshared\u002FfilterEmptyValues",{"title":732,"path":733,"stem":734},"findStringsInObject","\u002Fdocs\u002Futils\u002Fshared\u002Ffindobjectvalues","docs\u002Futils\u002Fshared\u002FfindObjectValues",{"title":736,"path":737,"stem":738},"fisherYatesShuffle","\u002Fdocs\u002Futils\u002Fshared\u002Ffisheryatesshuffle","docs\u002Futils\u002Fshared\u002FfisherYatesShuffle",{"title":740,"path":741,"stem":742},"getRandomImage","\u002Fdocs\u002Futils\u002Fshared\u002Fgetrandomimage","docs\u002Futils\u002Fshared\u002FgetRandomImage",{"title":744,"path":745,"stem":746},"isObjectHasValues","\u002Fdocs\u002Futils\u002Fshared\u002Fisobjecthasvalues","docs\u002Futils\u002Fshared\u002FisObjectHasValues",{"title":748,"path":749,"stem":750},"isAsyncOrPromise","\u002Fdocs\u002Futils\u002Fshared\u002Fispromise","docs\u002Futils\u002Fshared\u002FisPromise",{"title":752,"path":753,"stem":754},"MiniCache","\u002Fdocs\u002Futils\u002Fshared\u002Fminicache","docs\u002Futils\u002Fshared\u002FminiCache",{"title":756,"path":757,"stem":758},"parseCookies","\u002Fdocs\u002Futils\u002Fshared\u002Fparserawcookies","docs\u002Futils\u002Fshared\u002FparseRawCookies",{"title":760,"path":761,"stem":762},"safeAction","\u002Fdocs\u002Futils\u002Fshared\u002Fpromiselocker","docs\u002Futils\u002Fshared\u002FpromiseLocker",{"title":764,"path":765,"stem":766},"Random","\u002Fdocs\u002Futils\u002Fshared\u002Frandom","docs\u002Futils\u002Fshared\u002Frandom",{"title":768,"path":769,"stem":770},"range","\u002Fdocs\u002Futils\u002Fshared\u002Frange","docs\u002Futils\u002Fshared\u002Frange",{"title":772,"path":773,"stem":774},"rateLimiters","\u002Fdocs\u002Futils\u002Fshared\u002Fratelimiters","docs\u002Futils\u002Fshared\u002FrateLimiters",{"title":776,"path":777,"stem":778},"safeObjectMerge","\u002Fdocs\u002Futils\u002Fshared\u002Fsafemerge","docs\u002Futils\u002Fshared\u002FsafeMerge",{"title":780,"path":781,"stem":782},"textTruncation","\u002Fdocs\u002Futils\u002Fshared\u002Ftexttruncation","docs\u002Futils\u002Fshared\u002FtextTruncation",{"title":784,"path":785,"stem":786},"validateZodSchema","\u002Fdocs\u002Futils\u002Fshared\u002Fvalidatezodschema","docs\u002Futils\u002Fshared\u002FvalidateZodSchema",{"title":788,"path":789,"stem":790,"children":791},"Utility Types","\u002Fdocs\u002Futils\u002Ftypes","docs\u002Futils\u002Ftypes\u002Findex",[792,793,797,801,805,809,813,817,821,825],{"title":788,"path":789,"stem":790},{"title":794,"path":795,"stem":796},"Brand","\u002Fdocs\u002Futils\u002Ftypes\u002Fbrand","docs\u002Futils\u002Ftypes\u002FBrand",{"title":798,"path":799,"stem":800},"DeepPartial","\u002Fdocs\u002Futils\u002Ftypes\u002Fdeeppartial","docs\u002Futils\u002Ftypes\u002FDeepPartial",{"title":802,"path":803,"stem":804},"Merge","\u002Fdocs\u002Futils\u002Ftypes\u002Fmerge","docs\u002Futils\u002Ftypes\u002FMerge",{"title":806,"path":807,"stem":808},"NonNullable","\u002Fdocs\u002Futils\u002Ftypes\u002Fnonnullable","docs\u002Futils\u002Ftypes\u002FNonNullable",{"title":810,"path":811,"stem":812},"Prettify","\u002Fdocs\u002Futils\u002Ftypes\u002Fprettify","docs\u002Futils\u002Ftypes\u002FPrettify",{"title":814,"path":815,"stem":816},"PromiseType","\u002Fdocs\u002Futils\u002Ftypes\u002Fpromisetype","docs\u002Futils\u002Ftypes\u002FPromiseType",{"title":818,"path":819,"stem":820},"RequireKeys","\u002Fdocs\u002Futils\u002Ftypes\u002Frequirekeys","docs\u002Futils\u002Ftypes\u002FRequireKeys",{"title":822,"path":823,"stem":824},"StandardResponse","\u002Fdocs\u002Futils\u002Ftypes\u002Fstandardresponse","docs\u002Futils\u002Ftypes\u002FStandardResponse",{"title":826,"path":827,"stem":828},"ValueOf","\u002Fdocs\u002Futils\u002Ftypes\u002Fvalueof","docs\u002Futils\u002Ftypes\u002FValueOf",{"id":4,"extension":5,"links":830,"meta":841,"stem":62,"__hash__":63},[831,839,840],{"nested":8,"label":9,"icon":10,"to":11,"children":832},[833,834,835,836,837,838],{"label":14,"icon":15,"to":11,"description":16,"github":17,"badge":18},{"label":20,"icon":21,"to":22,"description":23,"github":24,"badge":25},{"label":27,"icon":28,"to":29,"description":30,"github":31,"badge":25},{"label":33,"icon":34,"to":35,"description":36,"github":37,"badge":38},{"label":40,"icon":41,"to":42,"description":43,"github":44,"badge":38},{"label":46,"icon":47,"to":48,"description":49,"github":50,"badge":51},{"nested":53,"label":54,"icon":55,"to":56},{"nested":53,"label":58,"icon":59,"to":60},{},{"id":843,"title":180,"body":844,"description":1567,"extension":1568,"icon":1569,"meta":1570,"module":1571,"navigation":8,"path":181,"rawbody":1572,"seo":1573,"stem":182,"__hash__":1574},"docs\u002Fdocs\u002Fauth-h3client\u002F05.guides\u002Fhmac.md",{"type":845,"value":846,"toc":1559},"minimark",[847,851,854,859,866,932,939,957,959,962,981,1223,1254,1265,1267,1271,1277,1493,1495,1503,1519,1522,1524,1528,1541,1555],[848,849,850],"p",{},"HMAC inter-service authentication ensures that only known gateway instances can reach the IAM service. Every request the module sends to the IAM service is signed with a shared secret and a timestamp. The IAM service verifies the signature before processing the request, rejecting anything that does not carry a valid signature or arrives outside the clock-skew tolerance window.",[852,853],"hr",{},[855,856,858],"h2",{"id":857},"how-signing-works","How signing works",[848,860,861,865],{},[862,863,864],"code",{},"signature(method, path)"," generates four headers that authenticate the request:",[867,868,869,882],"table",{},[870,871,872],"thead",{},[873,874,875,879],"tr",{},[876,877,878],"th",{},"Header",[876,880,881],{},"Content",[883,884,885,899,909,919],"tbody",{},[873,886,887,893],{},[888,889,890],"td",{},[862,891,892],{},"X-Client-Id",[888,894,895,896],{},"The gateway's identifier, from ",[862,897,898],{},"hmac.clientId",[873,900,901,906],{},[888,902,903],{},[862,904,905],{},"X-Timestamp",[888,907,908],{},"Current Unix timestamp in milliseconds",[873,910,911,916],{},[888,912,913],{},[862,914,915],{},"X-Request-Id",[888,917,918],{},"A random UUID for this request",[873,920,921,926],{},[888,922,923],{},[862,924,925],{},"X-Signature",[888,927,928,929],{},"HMAC-SHA256 over ",[862,930,931],{},"clientId:timestamp:method:path:requestId",[848,933,934,935,938],{},"The HMAC key is ",[862,936,937],{},"hmac.sharedSecret",". The signature covers the method and path, preventing a valid signature from one endpoint being replayed against another.",[848,940,941,944,945,948,949,952,953,956],{},[862,942,943],{},"serviceToService"," (the internal ",[862,946,947],{},"sendToServer"," function) calls ",[862,950,951],{},"signature"," automatically for every outbound request when ",[862,954,955],{},"enableHmac: true",". You do not need to call it manually for standard flows.",[852,958],{},[855,960,192],{"id":961},"configuration",[848,963,964,965,968,969,972,973,976,977,980],{},"Set ",[862,966,967],{},"hmac.enableHmac"," to ",[862,970,971],{},"true"," and provide matching ",[862,974,975],{},"clientId"," and ",[862,978,979],{},"sharedSecret"," values in both the module configuration and the IAM service configuration:",[982,983,989],"pre",{"className":984,"code":985,"filename":986,"language":987,"meta":988,"style":988},"language-ts shiki shiki-themes light-plus light-plus dracula","configuration({\n  server: {\n    auth_location: {\n      serverOrDNS: process.env.AUTH_SERVER_LOCATION!,\n      port: Number(process.env.AUTH_PORT_LOCATION!)\n    },\n    hmac: {\n      enableHmac: true,\n      clientId: process.env.HMAC_CLIENT_ID!,\n      sharedSecret: process.env.HMAC_SHARED_SECRET!\n    },\n    ssl: { enableSSL: false },\n    cryptoCookiesSecret: process.env.AUTH_CRYPTO_COOKIES!\n  }\n})\n","server\u002Fplugins\u002Fauth.ts","ts","",[862,990,991,1003,1017,1027,1057,1088,1094,1104,1118,1141,1163,1168,1190,1211,1217],{"__ignoreMap":988},[992,993,996,999],"span",{"class":994,"line":995},"line",1,[992,997,961],{"class":998},"sHOzp",[992,1000,1002],{"class":1001},"sDd4n","({\n",[992,1004,1006,1010,1014],{"class":994,"line":1005},2,[992,1007,1009],{"class":1008},"sjsA6","  server",[992,1011,1013],{"class":1012},"s34zl",":",[992,1015,1016],{"class":1001}," {\n",[992,1018,1020,1023,1025],{"class":994,"line":1019},3,[992,1021,1022],{"class":1008},"    auth_location",[992,1024,1013],{"class":1012},[992,1026,1016],{"class":1001},[992,1028,1030,1033,1035,1038,1041,1044,1046,1050,1054],{"class":994,"line":1029},4,[992,1031,1032],{"class":1008},"      serverOrDNS",[992,1034,1013],{"class":1012},[992,1036,1037],{"class":1008}," process",[992,1039,1040],{"class":1001},".",[992,1042,1043],{"class":1008},"env",[992,1045,1040],{"class":1001},[992,1047,1049],{"class":1048},"sPzPf","AUTH_SERVER_LOCATION",[992,1051,1053],{"class":1052},"saOXh","!",[992,1055,1056],{"class":1001},",\n",[992,1058,1060,1063,1065,1068,1071,1074,1076,1078,1080,1083,1085],{"class":994,"line":1059},5,[992,1061,1062],{"class":1008},"      port",[992,1064,1013],{"class":1012},[992,1066,1067],{"class":998}," Number",[992,1069,1070],{"class":1001},"(",[992,1072,1073],{"class":1008},"process",[992,1075,1040],{"class":1001},[992,1077,1043],{"class":1008},[992,1079,1040],{"class":1001},[992,1081,1082],{"class":1048},"AUTH_PORT_LOCATION",[992,1084,1053],{"class":1052},[992,1086,1087],{"class":1001},")\n",[992,1089,1091],{"class":994,"line":1090},6,[992,1092,1093],{"class":1001},"    },\n",[992,1095,1097,1100,1102],{"class":994,"line":1096},7,[992,1098,1099],{"class":1008},"    hmac",[992,1101,1013],{"class":1012},[992,1103,1016],{"class":1001},[992,1105,1107,1110,1112,1116],{"class":994,"line":1106},8,[992,1108,1109],{"class":1008},"      enableHmac",[992,1111,1013],{"class":1012},[992,1113,1115],{"class":1114},"sjR7W"," true",[992,1117,1056],{"class":1001},[992,1119,1121,1124,1126,1128,1130,1132,1134,1137,1139],{"class":994,"line":1120},9,[992,1122,1123],{"class":1008},"      clientId",[992,1125,1013],{"class":1012},[992,1127,1037],{"class":1008},[992,1129,1040],{"class":1001},[992,1131,1043],{"class":1008},[992,1133,1040],{"class":1001},[992,1135,1136],{"class":1048},"HMAC_CLIENT_ID",[992,1138,1053],{"class":1052},[992,1140,1056],{"class":1001},[992,1142,1144,1147,1149,1151,1153,1155,1157,1160],{"class":994,"line":1143},10,[992,1145,1146],{"class":1008},"      sharedSecret",[992,1148,1013],{"class":1012},[992,1150,1037],{"class":1008},[992,1152,1040],{"class":1001},[992,1154,1043],{"class":1008},[992,1156,1040],{"class":1001},[992,1158,1159],{"class":1048},"HMAC_SHARED_SECRET",[992,1161,1162],{"class":1052},"!\n",[992,1164,1166],{"class":994,"line":1165},11,[992,1167,1093],{"class":1001},[992,1169,1171,1174,1176,1179,1182,1184,1187],{"class":994,"line":1170},12,[992,1172,1173],{"class":1008},"    ssl",[992,1175,1013],{"class":1012},[992,1177,1178],{"class":1001}," { ",[992,1180,1181],{"class":1008},"enableSSL",[992,1183,1013],{"class":1012},[992,1185,1186],{"class":1114}," false",[992,1188,1189],{"class":1001}," },\n",[992,1191,1193,1196,1198,1200,1202,1204,1206,1209],{"class":994,"line":1192},13,[992,1194,1195],{"class":1008},"    cryptoCookiesSecret",[992,1197,1013],{"class":1012},[992,1199,1037],{"class":1008},[992,1201,1040],{"class":1001},[992,1203,1043],{"class":1008},[992,1205,1040],{"class":1001},[992,1207,1208],{"class":1048},"AUTH_CRYPTO_COOKIES",[992,1210,1162],{"class":1052},[992,1212,1214],{"class":994,"line":1213},14,[992,1215,1216],{"class":1001},"  }\n",[992,1218,1220],{"class":994,"line":1219},15,[992,1221,1222],{"class":1001},"})\n",[1224,1225,1226,1240,1249],"field-group",{},[1227,1228,1230],"field",{"name":967,"type":1229,":required":971},"boolean",[848,1231,1232,1233,1235,1236,1239],{},"Activates HMAC signing. When ",[862,1234,971],{},", every call to the IAM service includes the four signature headers. When ",[862,1237,1238],{},"false",", requests are sent without authentication headers.",[1227,1241,1243],{"name":898,"type":1242},"string",[848,1244,1245,1246,1248],{},"A stable identifier for this gateway instance. Used in the signature base string and sent as ",[862,1247,892],{},". The IAM service uses this to look up the expected shared secret.",[1227,1250,1251],{"name":937,"type":1242},[848,1252,1253],{},"The HMAC-SHA256 key. Must be identical in the module configuration and the IAM service configuration. Should be at least 32 bytes of random data and must remain stable across restarts.",[1255,1256,1257],"caution",{},[848,1258,1259,1260,976,1262,1264],{},"If you let the config template auto-generate ",[862,1261,975],{},[862,1263,979],{},", they will be different on every cold start. The IAM service will reject requests signed with a key it does not recognize. Always set these values from environment variables in production.",[852,1266],{},[855,1268,1270],{"id":1269},"signing-requests-manually","Signing requests manually",[848,1272,1273,1274,1276],{},"Call ",[862,1275,951],{}," directly when making custom requests to the IAM service from your own handlers:",[982,1278,1281],{"className":984,"code":1279,"filename":1280,"language":987,"meta":988,"style":988},"export default defineAuthenticatedEventHandler(async (event) => {\n  const headers = signature('POST', '\u002Finternal\u002Fsync')\n\n  const response = await fetch(`http:\u002F\u002Fiam.internal:10000\u002Finternal\u002Fsync`, {\n    method: 'POST',\n    headers: {\n      ...headers,\n      'Content-Type': 'application\u002Fjson'\n    },\n    body: JSON.stringify({ ... })\n  })\n\n  return response.json()\n})\n","server\u002Fapi\u002Finternal\u002Fsync.post.ts",[862,1282,1283,1316,1355,1360,1383,1399,1408,1418,1438,1442,1466,1471,1475,1489],{"__ignoreMap":988},[992,1284,1285,1289,1292,1295,1297,1301,1304,1308,1311,1314],{"class":994,"line":995},[992,1286,1288],{"class":1287},"sZ328","export",[992,1290,1291],{"class":1287}," default",[992,1293,1294],{"class":998}," defineAuthenticatedEventHandler",[992,1296,1070],{"class":1001},[992,1298,1300],{"class":1299},"sl46w","async",[992,1302,1303],{"class":1001}," (",[992,1305,1307],{"class":1306},"sygFZ","event",[992,1309,1310],{"class":1001},") ",[992,1312,1313],{"class":1299},"=>",[992,1315,1016],{"class":1001},[992,1317,1318,1321,1325,1328,1331,1333,1337,1341,1343,1346,1348,1351,1353],{"class":994,"line":1005},[992,1319,1320],{"class":1299},"  const",[992,1322,1324],{"class":1323},"s3JHE"," headers",[992,1326,1327],{"class":1052}," =",[992,1329,1330],{"class":998}," signature",[992,1332,1070],{"class":1001},[992,1334,1336],{"class":1335},"sFkSl","'",[992,1338,1340],{"class":1339},"sFB1V","POST",[992,1342,1336],{"class":1335},[992,1344,1345],{"class":1001},", ",[992,1347,1336],{"class":1335},[992,1349,1350],{"class":1339},"\u002Finternal\u002Fsync",[992,1352,1336],{"class":1335},[992,1354,1087],{"class":1001},[992,1356,1357],{"class":994,"line":1019},[992,1358,1359],{"emptyLinePlaceholder":8},"\n",[992,1361,1362,1364,1367,1369,1372,1375,1377,1380],{"class":994,"line":1029},[992,1363,1320],{"class":1299},[992,1365,1366],{"class":1323}," response",[992,1368,1327],{"class":1052},[992,1370,1371],{"class":1287}," await",[992,1373,1374],{"class":998}," fetch",[992,1376,1070],{"class":1001},[992,1378,1379],{"class":1339},"`http:\u002F\u002Fiam.internal:10000\u002Finternal\u002Fsync`",[992,1381,1382],{"class":1001},", {\n",[992,1384,1385,1388,1390,1393,1395,1397],{"class":994,"line":1059},[992,1386,1387],{"class":1008},"    method",[992,1389,1013],{"class":1012},[992,1391,1392],{"class":1335}," '",[992,1394,1340],{"class":1339},[992,1396,1336],{"class":1335},[992,1398,1056],{"class":1001},[992,1400,1401,1404,1406],{"class":994,"line":1090},[992,1402,1403],{"class":1008},"    headers",[992,1405,1013],{"class":1012},[992,1407,1016],{"class":1001},[992,1409,1410,1413,1416],{"class":994,"line":1096},[992,1411,1412],{"class":1052},"      ...",[992,1414,1415],{"class":1008},"headers",[992,1417,1056],{"class":1001},[992,1419,1420,1423,1426,1428,1430,1432,1435],{"class":994,"line":1106},[992,1421,1422],{"class":1335},"      '",[992,1424,1425],{"class":1339},"Content-Type",[992,1427,1336],{"class":1335},[992,1429,1013],{"class":1012},[992,1431,1392],{"class":1335},[992,1433,1434],{"class":1339},"application\u002Fjson",[992,1436,1437],{"class":1335},"'\n",[992,1439,1440],{"class":994,"line":1120},[992,1441,1093],{"class":1001},[992,1443,1444,1447,1449,1452,1454,1457,1460,1463],{"class":994,"line":1143},[992,1445,1446],{"class":1008},"    body",[992,1448,1013],{"class":1012},[992,1450,1451],{"class":1048}," JSON",[992,1453,1040],{"class":1001},[992,1455,1456],{"class":998},"stringify",[992,1458,1459],{"class":1001},"({ ",[992,1461,1462],{"class":1052},"...",[992,1464,1465],{"class":1001}," })\n",[992,1467,1468],{"class":994,"line":1165},[992,1469,1470],{"class":1001},"  })\n",[992,1472,1473],{"class":994,"line":1170},[992,1474,1359],{"emptyLinePlaceholder":8},[992,1476,1477,1480,1482,1484,1486],{"class":994,"line":1192},[992,1478,1479],{"class":1287},"  return",[992,1481,1366],{"class":1008},[992,1483,1040],{"class":1001},[992,1485,5],{"class":998},[992,1487,1488],{"class":1001},"()\n",[992,1490,1491],{"class":994,"line":1213},[992,1492,1222],{"class":1001},[852,1494],{},[855,1496,1498,1499,1502],{"id":1497},"how-hmacsignaturemiddleware-fits-in","How ",[862,1500,1501],{},"hmacSignatureMiddleware"," fits in",[848,1504,1505,1507,1508,1345,1511,1514,1515,1518],{},[862,1506,1501],{}," runs inside every authenticated handler wrapper (",[862,1509,1510],{},"defineAuthenticatedEventHandler",[862,1512,1513],{},"defineOptionalAuthenticationEvent",", etc.). It generates the four HMAC headers and stores them on ",[862,1516,1517],{},"event.context.authHeaders"," so that the IAM call made by the wrapper carries a valid signature. You do not need to call it directly in normal usage.",[848,1520,1521],{},"The HMAC signature verification for incoming requests is performed by the IAM service, not by the gateway. The gateway only generates outbound signatures.",[852,1523],{},[855,1525,1527],{"id":1526},"iam-service-setup","IAM service setup",[848,1529,1530,1531,976,1533,1535,1536,1540],{},"The IAM service must have a matching ",[862,1532,975],{},[862,1534,979],{}," configured in its HMAC settings. See ",[1537,1538,1539],"a",{"href":456},"IAM HMAC"," for the server-side configuration, clock-skew tolerance settings, and replay detection nonce cache.",[848,1542,1543,1544,1548,1549,1551,1552,1040],{},"See ",[1537,1545,1547],{"href":1546},"\u002Fdocs\u002Fauth-h3client\u002Fsecurity#inter-service-authentication","Security: Inter-service Authentication"," for how HMAC fits into the full trust model between the BFF layer and the IAM service, and how it compares with mTLS. For the ",[862,1550,1501],{}," reference with full header and response tables, see the ",[1537,1553,206],{"href":1554},"\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fmiddleware#hmacSignaturemiddleware",[1556,1557,1558],"style",{},"html pre.shiki code .sHOzp, html code.shiki .sHOzp{--shiki-light:#795E26;--shiki-default:#795E26;--shiki-dark:#50FA7B}html pre.shiki code .sDd4n, html code.shiki .sDd4n{--shiki-light:#000000;--shiki-default:#000000;--shiki-dark:#F8F8F2}html pre.shiki code .sjsA6, html code.shiki .sjsA6{--shiki-light:#001080;--shiki-default:#001080;--shiki-dark:#F8F8F2}html pre.shiki code .s34zl, html code.shiki .s34zl{--shiki-light:#001080;--shiki-default:#001080;--shiki-dark:#FF79C6}html pre.shiki code .sPzPf, html code.shiki .sPzPf{--shiki-light:#0070C1;--shiki-default:#0070C1;--shiki-dark:#BD93F9}html pre.shiki code .saOXh, html code.shiki .saOXh{--shiki-light:#000000;--shiki-default:#000000;--shiki-dark:#FF79C6}html pre.shiki code .sjR7W, html code.shiki .sjR7W{--shiki-light:#0000FF;--shiki-default:#0000FF;--shiki-dark:#BD93F9}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 .sZ328, html code.shiki .sZ328{--shiki-light:#AF00DB;--shiki-default:#AF00DB;--shiki-dark:#FF79C6}html pre.shiki code .sl46w, html code.shiki .sl46w{--shiki-light:#0000FF;--shiki-default:#0000FF;--shiki-dark:#FF79C6}html pre.shiki code .sygFZ, html code.shiki .sygFZ{--shiki-light:#001080;--shiki-light-font-style:inherit;--shiki-default:#001080;--shiki-default-font-style:inherit;--shiki-dark:#FFB86C;--shiki-dark-font-style:italic}html pre.shiki code .s3JHE, html code.shiki .s3JHE{--shiki-light:#0070C1;--shiki-default:#0070C1;--shiki-dark:#F8F8F2}html pre.shiki code .sFkSl, html code.shiki .sFkSl{--shiki-light:#A31515;--shiki-default:#A31515;--shiki-dark:#E9F284}html pre.shiki code .sFB1V, html code.shiki .sFB1V{--shiki-light:#A31515;--shiki-default:#A31515;--shiki-dark:#F1FA8C}",{"title":988,"searchDepth":1005,"depth":1005,"links":1560},[1561,1562,1563,1564,1566],{"id":857,"depth":1005,"text":858},{"id":961,"depth":1005,"text":192},{"id":1269,"depth":1005,"text":1270},{"id":1497,"depth":1005,"text":1565},"How hmacSignatureMiddleware fits in",{"id":1526,"depth":1005,"text":1527},"How the module signs every outbound request to the IAM service with HMAC-SHA256, what headers are generated, and how to validate incoming signatures from other services.","md","i-lucide-fingerprint",{},null,"---\ntitle: HMAC Inter-service Auth\ndescription: How the module signs every outbound request to the IAM service with HMAC-SHA256, what headers are generated, and how to validate incoming signatures from other services.\nicon: i-lucide-fingerprint\n---\n\nHMAC inter-service authentication ensures that only known gateway instances can reach the IAM service. Every request the module sends to the IAM service is signed with a shared secret and a timestamp. The IAM service verifies the signature before processing the request, rejecting anything that does not carry a valid signature or arrives outside the clock-skew tolerance window.\n\n---\n\n## How signing works\n\n`signature(method, path)` generates four headers that authenticate the request:\n\n| Header | Content |\n|---|---|\n| `X-Client-Id` | The gateway's identifier, from `hmac.clientId` |\n| `X-Timestamp` | Current Unix timestamp in milliseconds |\n| `X-Request-Id` | A random UUID for this request |\n| `X-Signature` | HMAC-SHA256 over `clientId:timestamp:method:path:requestId` |\n\nThe HMAC key is `hmac.sharedSecret`. The signature covers the method and path, preventing a valid signature from one endpoint being replayed against another.\n\n`serviceToService` (the internal `sendToServer` function) calls `signature` automatically for every outbound request when `enableHmac: true`. You do not need to call it manually for standard flows.\n\n---\n\n## Configuration\n\nSet `hmac.enableHmac` to `true` and provide matching `clientId` and `sharedSecret` values in both the module configuration and the IAM service configuration:\n\n```ts [server\u002Fplugins\u002Fauth.ts]\nconfiguration({\n  server: {\n    auth_location: {\n      serverOrDNS: process.env.AUTH_SERVER_LOCATION!,\n      port: Number(process.env.AUTH_PORT_LOCATION!)\n    },\n    hmac: {\n      enableHmac: true,\n      clientId: process.env.HMAC_CLIENT_ID!,\n      sharedSecret: process.env.HMAC_SHARED_SECRET!\n    },\n    ssl: { enableSSL: false },\n    cryptoCookiesSecret: process.env.AUTH_CRYPTO_COOKIES!\n  }\n})\n```\n\n::field-group\n\n::field{name=\"hmac.enableHmac\" type=\"boolean\" required}\nActivates HMAC signing. When `true`, every call to the IAM service includes the four signature headers. When `false`, requests are sent without authentication headers.\n::\n\n::field{name=\"hmac.clientId\" type=\"string\"}\nA stable identifier for this gateway instance. Used in the signature base string and sent as `X-Client-Id`. The IAM service uses this to look up the expected shared secret.\n::\n\n::field{name=\"hmac.sharedSecret\" type=\"string\"}\nThe HMAC-SHA256 key. Must be identical in the module configuration and the IAM service configuration. Should be at least 32 bytes of random data and must remain stable across restarts.\n::\n\n::\n\n::caution\nIf you let the config template auto-generate `clientId` and `sharedSecret`, they will be different on every cold start. The IAM service will reject requests signed with a key it does not recognize. Always set these values from environment variables in production.\n::\n\n---\n\n## Signing requests manually\n\nCall `signature` directly when making custom requests to the IAM service from your own handlers:\n\n```ts [server\u002Fapi\u002Finternal\u002Fsync.post.ts]\nexport default defineAuthenticatedEventHandler(async (event) => {\n  const headers = signature('POST', '\u002Finternal\u002Fsync')\n\n  const response = await fetch(`http:\u002F\u002Fiam.internal:10000\u002Finternal\u002Fsync`, {\n    method: 'POST',\n    headers: {\n      ...headers,\n      'Content-Type': 'application\u002Fjson'\n    },\n    body: JSON.stringify({ ... })\n  })\n\n  return response.json()\n})\n```\n\n---\n\n## How `hmacSignatureMiddleware` fits in\n\n`hmacSignatureMiddleware` runs inside every authenticated handler wrapper (`defineAuthenticatedEventHandler`, `defineOptionalAuthenticationEvent`, etc.). It generates the four HMAC headers and stores them on `event.context.authHeaders` so that the IAM call made by the wrapper carries a valid signature. You do not need to call it directly in normal usage.\n\nThe HMAC signature verification for incoming requests is performed by the IAM service, not by the gateway. The gateway only generates outbound signatures.\n\n---\n\n## IAM service setup\n\nThe IAM service must have a matching `clientId` and `sharedSecret` configured in its HMAC settings. See [IAM HMAC](\u002Fdocs\u002Fiam\u002Fessentials\u002Fhmac) for the server-side configuration, clock-skew tolerance settings, and replay detection nonce cache.\n\nSee [Security: Inter-service Authentication](\u002Fdocs\u002Fauth-h3client\u002Fsecurity#inter-service-authentication) for how HMAC fits into the full trust model between the BFF layer and the IAM service, and how it compares with mTLS. For the `hmacSignatureMiddleware` reference with full header and response tables, see the [Middleware Reference](\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fmiddleware#hmacSignaturemiddleware).\n",{"title":180,"description":1567},"Ry0sE10-pt9l3Q-jHCOS1c_SOnaFzv0oRAx--RRJldM",[1576,1577],{"title":176,"path":177,"stem":178,"children":-1},{"title":184,"path":185,"stem":186,"children":-1},{"id":843,"title":180,"body":1579,"description":1567,"extension":1568,"icon":1569,"meta":2094,"module":1571,"navigation":8,"path":181,"rawbody":1572,"seo":2095,"stem":182,"__hash__":1574},{"type":845,"value":1580,"toc":2087},[1581,1583,1585,1587,1591,1639,1643,1653,1655,1657,1667,1843,1863,1871,1873,1875,1879,2047,2049,2053,2063,2065,2067,2069,2077,2085],[848,1582,850],{},[852,1584],{},[855,1586,858],{"id":857},[848,1588,1589,865],{},[862,1590,864],{},[867,1592,1593,1601],{},[870,1594,1595],{},[873,1596,1597,1599],{},[876,1598,878],{},[876,1600,881],{},[883,1602,1603,1613,1621,1629],{},[873,1604,1605,1609],{},[888,1606,1607],{},[862,1608,892],{},[888,1610,895,1611],{},[862,1612,898],{},[873,1614,1615,1619],{},[888,1616,1617],{},[862,1618,905],{},[888,1620,908],{},[873,1622,1623,1627],{},[888,1624,1625],{},[862,1626,915],{},[888,1628,918],{},[873,1630,1631,1635],{},[888,1632,1633],{},[862,1634,925],{},[888,1636,928,1637],{},[862,1638,931],{},[848,1640,934,1641,938],{},[862,1642,937],{},[848,1644,1645,944,1647,948,1649,952,1651,956],{},[862,1646,943],{},[862,1648,947],{},[862,1650,951],{},[862,1652,955],{},[852,1654],{},[855,1656,192],{"id":961},[848,1658,964,1659,968,1661,972,1663,976,1665,980],{},[862,1660,967],{},[862,1662,971],{},[862,1664,975],{},[862,1666,979],{},[982,1668,1669],{"className":984,"code":985,"filename":986,"language":987,"meta":988,"style":988},[862,1670,1671,1677,1685,1693,1713,1737,1741,1749,1759,1779,1797,1801,1817,1835,1839],{"__ignoreMap":988},[992,1672,1673,1675],{"class":994,"line":995},[992,1674,961],{"class":998},[992,1676,1002],{"class":1001},[992,1678,1679,1681,1683],{"class":994,"line":1005},[992,1680,1009],{"class":1008},[992,1682,1013],{"class":1012},[992,1684,1016],{"class":1001},[992,1686,1687,1689,1691],{"class":994,"line":1019},[992,1688,1022],{"class":1008},[992,1690,1013],{"class":1012},[992,1692,1016],{"class":1001},[992,1694,1695,1697,1699,1701,1703,1705,1707,1709,1711],{"class":994,"line":1029},[992,1696,1032],{"class":1008},[992,1698,1013],{"class":1012},[992,1700,1037],{"class":1008},[992,1702,1040],{"class":1001},[992,1704,1043],{"class":1008},[992,1706,1040],{"class":1001},[992,1708,1049],{"class":1048},[992,1710,1053],{"class":1052},[992,1712,1056],{"class":1001},[992,1714,1715,1717,1719,1721,1723,1725,1727,1729,1731,1733,1735],{"class":994,"line":1059},[992,1716,1062],{"class":1008},[992,1718,1013],{"class":1012},[992,1720,1067],{"class":998},[992,1722,1070],{"class":1001},[992,1724,1073],{"class":1008},[992,1726,1040],{"class":1001},[992,1728,1043],{"class":1008},[992,1730,1040],{"class":1001},[992,1732,1082],{"class":1048},[992,1734,1053],{"class":1052},[992,1736,1087],{"class":1001},[992,1738,1739],{"class":994,"line":1090},[992,1740,1093],{"class":1001},[992,1742,1743,1745,1747],{"class":994,"line":1096},[992,1744,1099],{"class":1008},[992,1746,1013],{"class":1012},[992,1748,1016],{"class":1001},[992,1750,1751,1753,1755,1757],{"class":994,"line":1106},[992,1752,1109],{"class":1008},[992,1754,1013],{"class":1012},[992,1756,1115],{"class":1114},[992,1758,1056],{"class":1001},[992,1760,1761,1763,1765,1767,1769,1771,1773,1775,1777],{"class":994,"line":1120},[992,1762,1123],{"class":1008},[992,1764,1013],{"class":1012},[992,1766,1037],{"class":1008},[992,1768,1040],{"class":1001},[992,1770,1043],{"class":1008},[992,1772,1040],{"class":1001},[992,1774,1136],{"class":1048},[992,1776,1053],{"class":1052},[992,1778,1056],{"class":1001},[992,1780,1781,1783,1785,1787,1789,1791,1793,1795],{"class":994,"line":1143},[992,1782,1146],{"class":1008},[992,1784,1013],{"class":1012},[992,1786,1037],{"class":1008},[992,1788,1040],{"class":1001},[992,1790,1043],{"class":1008},[992,1792,1040],{"class":1001},[992,1794,1159],{"class":1048},[992,1796,1162],{"class":1052},[992,1798,1799],{"class":994,"line":1165},[992,1800,1093],{"class":1001},[992,1802,1803,1805,1807,1809,1811,1813,1815],{"class":994,"line":1170},[992,1804,1173],{"class":1008},[992,1806,1013],{"class":1012},[992,1808,1178],{"class":1001},[992,1810,1181],{"class":1008},[992,1812,1013],{"class":1012},[992,1814,1186],{"class":1114},[992,1816,1189],{"class":1001},[992,1818,1819,1821,1823,1825,1827,1829,1831,1833],{"class":994,"line":1192},[992,1820,1195],{"class":1008},[992,1822,1013],{"class":1012},[992,1824,1037],{"class":1008},[992,1826,1040],{"class":1001},[992,1828,1043],{"class":1008},[992,1830,1040],{"class":1001},[992,1832,1208],{"class":1048},[992,1834,1162],{"class":1052},[992,1836,1837],{"class":994,"line":1213},[992,1838,1216],{"class":1001},[992,1840,1841],{"class":994,"line":1219},[992,1842,1222],{"class":1001},[1224,1844,1845,1853,1859],{},[1227,1846,1847],{"name":967,"type":1229,":required":971},[848,1848,1232,1849,1235,1851,1239],{},[862,1850,971],{},[862,1852,1238],{},[1227,1854,1855],{"name":898,"type":1242},[848,1856,1245,1857,1248],{},[862,1858,892],{},[1227,1860,1861],{"name":937,"type":1242},[848,1862,1253],{},[1255,1864,1865],{},[848,1866,1259,1867,976,1869,1264],{},[862,1868,975],{},[862,1870,979],{},[852,1872],{},[855,1874,1270],{"id":1269},[848,1876,1273,1877,1276],{},[862,1878,951],{},[982,1880,1881],{"className":984,"code":1279,"filename":1280,"language":987,"meta":988,"style":988},[862,1882,1883,1905,1933,1937,1955,1969,1977,1985,2001,2005,2023,2027,2031,2043],{"__ignoreMap":988},[992,1884,1885,1887,1889,1891,1893,1895,1897,1899,1901,1903],{"class":994,"line":995},[992,1886,1288],{"class":1287},[992,1888,1291],{"class":1287},[992,1890,1294],{"class":998},[992,1892,1070],{"class":1001},[992,1894,1300],{"class":1299},[992,1896,1303],{"class":1001},[992,1898,1307],{"class":1306},[992,1900,1310],{"class":1001},[992,1902,1313],{"class":1299},[992,1904,1016],{"class":1001},[992,1906,1907,1909,1911,1913,1915,1917,1919,1921,1923,1925,1927,1929,1931],{"class":994,"line":1005},[992,1908,1320],{"class":1299},[992,1910,1324],{"class":1323},[992,1912,1327],{"class":1052},[992,1914,1330],{"class":998},[992,1916,1070],{"class":1001},[992,1918,1336],{"class":1335},[992,1920,1340],{"class":1339},[992,1922,1336],{"class":1335},[992,1924,1345],{"class":1001},[992,1926,1336],{"class":1335},[992,1928,1350],{"class":1339},[992,1930,1336],{"class":1335},[992,1932,1087],{"class":1001},[992,1934,1935],{"class":994,"line":1019},[992,1936,1359],{"emptyLinePlaceholder":8},[992,1938,1939,1941,1943,1945,1947,1949,1951,1953],{"class":994,"line":1029},[992,1940,1320],{"class":1299},[992,1942,1366],{"class":1323},[992,1944,1327],{"class":1052},[992,1946,1371],{"class":1287},[992,1948,1374],{"class":998},[992,1950,1070],{"class":1001},[992,1952,1379],{"class":1339},[992,1954,1382],{"class":1001},[992,1956,1957,1959,1961,1963,1965,1967],{"class":994,"line":1059},[992,1958,1387],{"class":1008},[992,1960,1013],{"class":1012},[992,1962,1392],{"class":1335},[992,1964,1340],{"class":1339},[992,1966,1336],{"class":1335},[992,1968,1056],{"class":1001},[992,1970,1971,1973,1975],{"class":994,"line":1090},[992,1972,1403],{"class":1008},[992,1974,1013],{"class":1012},[992,1976,1016],{"class":1001},[992,1978,1979,1981,1983],{"class":994,"line":1096},[992,1980,1412],{"class":1052},[992,1982,1415],{"class":1008},[992,1984,1056],{"class":1001},[992,1986,1987,1989,1991,1993,1995,1997,1999],{"class":994,"line":1106},[992,1988,1422],{"class":1335},[992,1990,1425],{"class":1339},[992,1992,1336],{"class":1335},[992,1994,1013],{"class":1012},[992,1996,1392],{"class":1335},[992,1998,1434],{"class":1339},[992,2000,1437],{"class":1335},[992,2002,2003],{"class":994,"line":1120},[992,2004,1093],{"class":1001},[992,2006,2007,2009,2011,2013,2015,2017,2019,2021],{"class":994,"line":1143},[992,2008,1446],{"class":1008},[992,2010,1013],{"class":1012},[992,2012,1451],{"class":1048},[992,2014,1040],{"class":1001},[992,2016,1456],{"class":998},[992,2018,1459],{"class":1001},[992,2020,1462],{"class":1052},[992,2022,1465],{"class":1001},[992,2024,2025],{"class":994,"line":1165},[992,2026,1470],{"class":1001},[992,2028,2029],{"class":994,"line":1170},[992,2030,1359],{"emptyLinePlaceholder":8},[992,2032,2033,2035,2037,2039,2041],{"class":994,"line":1192},[992,2034,1479],{"class":1287},[992,2036,1366],{"class":1008},[992,2038,1040],{"class":1001},[992,2040,5],{"class":998},[992,2042,1488],{"class":1001},[992,2044,2045],{"class":994,"line":1213},[992,2046,1222],{"class":1001},[852,2048],{},[855,2050,1498,2051,1502],{"id":1497},[862,2052,1501],{},[848,2054,2055,1507,2057,1345,2059,1514,2061,1518],{},[862,2056,1501],{},[862,2058,1510],{},[862,2060,1513],{},[862,2062,1517],{},[848,2064,1521],{},[852,2066],{},[855,2068,1527],{"id":1526},[848,2070,1530,2071,976,2073,1535,2075,1540],{},[862,2072,975],{},[862,2074,979],{},[1537,2076,1539],{"href":456},[848,2078,1543,2079,1548,2081,1551,2083,1040],{},[1537,2080,1547],{"href":1546},[862,2082,1501],{},[1537,2084,206],{"href":1554},[1556,2086,1558],{},{"title":988,"searchDepth":1005,"depth":1005,"links":2088},[2089,2090,2091,2092,2093],{"id":857,"depth":1005,"text":858},{"id":961,"depth":1005,"text":192},{"id":1269,"depth":1005,"text":1270},{"id":1497,"depth":1005,"text":1565},{"id":1526,"depth":1005,"text":1527},{},{"title":180,"description":1567},1780436289800]