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