[{"data":1,"prerenderedAt":4015},["ShallowReactive",2],{"navLinks":3,"sidebar_docs_navigation_\u002Fdocs\u002Fiam":64,"navigation":257,"navLinks_footer":837,"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Flist_page":850,"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Flist_surround":2625,"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Flist":2628},{"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":27,"path":29,"stem":70,"children":71},"docs\u002Fiam\u002Findex",[72,73,76,216,219,236,240],{"title":27,"path":29,"stem":70},{"title":14,"path":74,"stem":75},"\u002Fdocs\u002Fiam\u002Fgetting-started","docs\u002Fiam\u002F00.getting-started",{"title":77,"path":78,"stem":79,"children":80},"Essentials","\u002Fdocs\u002Fiam\u002Fessentials","docs\u002Fiam\u002F01.essentials\u002Findex",[81,82,86,90,94,98,102,106,110,114,118,122,126,130,134,138,142,146,150,154,158,162,166],{"title":77,"path":78,"stem":79},{"title":83,"path":84,"stem":85},"Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Ftokens","docs\u002Fiam\u002F01.essentials\u002F00.tokens",{"title":87,"path":88,"stem":89},"Access Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Faccess-tokens","docs\u002Fiam\u002F01.essentials\u002F01.access-tokens",{"title":91,"path":92,"stem":93},"Refresh Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Frefresh-tokens","docs\u002Fiam\u002F01.essentials\u002F02.refresh-tokens",{"title":95,"path":96,"stem":97},"Anomaly Detection","\u002Fdocs\u002Fiam\u002Fessentials\u002Fanomalies","docs\u002Fiam\u002F01.essentials\u002F03.anomalies",{"title":99,"path":100,"stem":101},"Signup","\u002Fdocs\u002Fiam\u002Fessentials\u002Fsignup","docs\u002Fiam\u002F01.essentials\u002F04.signup",{"title":103,"path":104,"stem":105},"Login","\u002Fdocs\u002Fiam\u002Fessentials\u002Flogin","docs\u002Fiam\u002F01.essentials\u002F05.login",{"title":107,"path":108,"stem":109},"Logout","\u002Fdocs\u002Fiam\u002Fessentials\u002Flogout","docs\u002Fiam\u002F01.essentials\u002F06.logout",{"title":111,"path":112,"stem":113},"OAuth","\u002Fdocs\u002Fiam\u002Fessentials\u002Foauth","docs\u002Fiam\u002F01.essentials\u002F07.oauth",{"title":115,"path":116,"stem":117},"Magic Links","\u002Fdocs\u002Fiam\u002Fessentials\u002Fmagic-links","docs\u002Fiam\u002F01.essentials\u002F08.magic-links",{"title":119,"path":120,"stem":121},"Emails","\u002Fdocs\u002Fiam\u002Fessentials\u002Femails","docs\u002Fiam\u002F01.essentials\u002F09.emails",{"title":123,"path":124,"stem":125},"MFA","\u002Fdocs\u002Fiam\u002Fessentials\u002Fmfa","docs\u002Fiam\u002F01.essentials\u002F10.mfa",{"title":127,"path":128,"stem":129},"Fingerprinting","\u002Fdocs\u002Fiam\u002Fessentials\u002Ffingerprinting","docs\u002Fiam\u002F01.essentials\u002F11.fingerprinting",{"title":131,"path":132,"stem":133},"Backend for Frontend","\u002Fdocs\u002Fiam\u002Fessentials\u002Fbff","docs\u002Fiam\u002F01.essentials\u002F12.bff",{"title":135,"path":136,"stem":137},"HMAC Authentication","\u002Fdocs\u002Fiam\u002Fessentials\u002Fhmac","docs\u002Fiam\u002F01.essentials\u002F13.hmac",{"title":139,"path":140,"stem":141},"XSS Protection","\u002Fdocs\u002Fiam\u002Fessentials\u002Fxss","docs\u002Fiam\u002F01.essentials\u002F14.xss",{"title":143,"path":144,"stem":145},"Logging","\u002Fdocs\u002Fiam\u002Fessentials\u002Flogging","docs\u002Fiam\u002F01.essentials\u002F15.logging",{"title":147,"path":148,"stem":149},"Rate Limiting","\u002Fdocs\u002Fiam\u002Fessentials\u002Frate-limiting","docs\u002Fiam\u002F01.essentials\u002F16.rate-limiting",{"title":151,"path":152,"stem":153},"Database","\u002Fdocs\u002Fiam\u002Fessentials\u002Fdatabase","docs\u002Fiam\u002F01.essentials\u002F17.database",{"title":155,"path":156,"stem":157},"Cookies","\u002Fdocs\u002Fiam\u002Fessentials\u002Fcookies","docs\u002Fiam\u002F01.essentials\u002F18.cookies",{"title":159,"path":160,"stem":161},"Service Startup","\u002Fdocs\u002Fiam\u002Fessentials\u002Fservice","docs\u002Fiam\u002F01.essentials\u002F19.service",{"title":163,"path":164,"stem":165},"Password Reset","\u002Fdocs\u002Fiam\u002Fessentials\u002Fpassword-reset","docs\u002Fiam\u002F01.essentials\u002F20.password-reset",{"title":167,"path":168,"stem":169,"children":170},"API Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi","docs\u002Fiam\u002F01.essentials\u002F21.api\u002Findex",[171,172,176,180,210,213],{"title":167,"path":168,"stem":169},{"title":173,"path":174,"stem":175},"Creating Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fcreation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F00.creation",{"title":177,"path":178,"stem":179},"Verifying Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fverification","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F01.verification",{"title":181,"path":182,"stem":183,"children":184},"Manage Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002Findex",[185,186,190,194,198,202,206],{"title":181,"path":182,"stem":183},{"title":187,"path":188,"stem":189},"Privileges","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fprivilege","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F00.privilege",{"title":191,"path":192,"stem":193},"Revocation","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Frevocation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F01.revocation",{"title":195,"path":196,"stem":197},"Rotation","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Frotation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F02.rotation",{"title":199,"path":200,"stem":201},"IP Restriction","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fip-updates","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F03.ip-updates",{"title":203,"path":204,"stem":205},"Metadata","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fmetadata","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F04.metadata",{"title":207,"path":208,"stem":209},"Token Listing","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Flist","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F05.list",{"title":147,"path":211,"stem":212},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Frate-limiting","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F03.rate-limiting",{"title":38,"path":214,"stem":215},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fsecurity","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F04.security",{"title":38,"path":217,"stem":218},"\u002Fdocs\u002Fiam\u002Fsecurity","docs\u002Fiam\u002F02.security",{"title":220,"path":221,"stem":222,"children":223,"page":53},"Guides","\u002Fdocs\u002Fiam\u002Fguides","docs\u002Fiam\u002F03.guides",[224,228,232],{"title":225,"path":226,"stem":227},"Deployment","\u002Fdocs\u002Fiam\u002Fguides\u002Fdeployment","docs\u002Fiam\u002F03.guides\u002Fdeployment",{"title":229,"path":230,"stem":231},"Operation Scripts","\u002Fdocs\u002Fiam\u002Fguides\u002Foperation-scripts","docs\u002Fiam\u002F03.guides\u002Foperation-scripts",{"title":233,"path":234,"stem":235},"Role-Based Access Control","\u002Fdocs\u002Fiam\u002Fguides\u002Frbac","docs\u002Fiam\u002F03.guides\u002Frbac",{"title":237,"path":238,"stem":239},"Configuration","\u002Fdocs\u002Fiam\u002Fconfiguration","docs\u002Fiam\u002F04.configuration",{"title":241,"path":242,"stem":243,"children":244,"page":53},"Api","\u002Fdocs\u002Fiam\u002Fapi","docs\u002Fiam\u002F05.API",[245,249,253],{"title":246,"path":247,"stem":248},"API Reference","\u002Fdocs\u002Fiam\u002Fapi\u002Fapi","docs\u002Fiam\u002F05.API\u002F00.api",{"title":250,"path":251,"stem":252},"Middleware Reference","\u002Fdocs\u002Fiam\u002Fapi\u002Fmiddlewares","docs\u002Fiam\u002F05.API\u002F02.middlewares",{"title":254,"path":255,"stem":256},"Routes Reference","\u002Fdocs\u002Fiam\u002Fapi\u002Froutes","docs\u002Fiam\u002F05.API\u002F03.routes",[258],{"title":9,"path":66,"stem":67,"children":259,"page":53},[260,398,516,521,577,644],{"title":20,"path":22,"stem":261,"children":262},"docs\u002Fauth-h3client\u002Findex",[263,264,273,307,331,353,356,376,379],{"title":20,"path":22,"stem":261},{"title":14,"path":265,"stem":266,"children":267},"\u002Fdocs\u002Fauth-h3client\u002Fgetting-started","docs\u002Fauth-h3client\u002F00.getting-started\u002Findex",[268,269],{"title":14,"path":265,"stem":266},{"title":270,"path":271,"stem":272},"Nuxt Module","\u002Fdocs\u002Fauth-h3client\u002Fgetting-started\u002Fnuxt","docs\u002Fauth-h3client\u002F00.getting-started\u002F00.nuxt",{"title":77,"path":274,"stem":275,"children":276},"\u002Fdocs\u002Fauth-h3client\u002Fessentials","docs\u002Fauth-h3client\u002F01.essentials\u002Findex",[277,278,282,286,290,294,298,301,304],{"title":77,"path":274,"stem":275},{"title":279,"path":280,"stem":281},"Session Management","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fsession","docs\u002Fauth-h3client\u002F01.essentials\u002F00.session",{"title":283,"path":284,"stem":285},"Route Protection","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Froute-protection","docs\u002Fauth-h3client\u002F01.essentials\u002F01.route-protection",{"title":287,"path":288,"stem":289},"CSRF Protection","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fcsrf","docs\u002Fauth-h3client\u002F01.essentials\u002F02.csrf",{"title":291,"path":292,"stem":293},"Auth Flows","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fauth-flows","docs\u002Fauth-h3client\u002F01.essentials\u002F03.auth-flows",{"title":295,"path":296,"stem":297},"OAuth and OIDC","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Foauth","docs\u002Fauth-h3client\u002F01.essentials\u002F04.oauth",{"title":33,"path":299,"stem":300},"\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fbot-detection","docs\u002Fauth-h3client\u002F01.essentials\u002F05.bot-detection",{"title":155,"path":302,"stem":303},"\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fcookies","docs\u002Fauth-h3client\u002F01.essentials\u002F06.cookies",{"title":143,"path":305,"stem":306},"\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Flogging","docs\u002Fauth-h3client\u002F01.essentials\u002F07.logging",{"title":123,"path":308,"stem":309,"children":310},"\u002Fdocs\u002Fauth-h3client\u002Fmfa","docs\u002Fauth-h3client\u002F02.mfa\u002Findex",[311,312,316,319,323,327],{"title":123,"path":308,"stem":309},{"title":313,"path":314,"stem":315},"Built-in MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fbuilt-in-flow","docs\u002Fauth-h3client\u002F02.mfa\u002F01.built-in-flow",{"title":163,"path":317,"stem":318},"\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fpassword-reset","docs\u002Fauth-h3client\u002F02.mfa\u002F02.password-reset",{"title":320,"path":321,"stem":322},"Email Change","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Femail-change","docs\u002Fauth-h3client\u002F02.mfa\u002F03.email-change",{"title":324,"path":325,"stem":326},"Custom MFA Flow","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fcustom-flow","docs\u002Fauth-h3client\u002F02.mfa\u002F04.custom-flow",{"title":328,"path":329,"stem":330},"Client-Side MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fclient-side","docs\u002Fauth-h3client\u002F02.mfa\u002F05.client-side",{"title":332,"path":333,"stem":334,"children":335},"Client-side","\u002Fdocs\u002Fauth-h3client\u002Fclient","docs\u002Fauth-h3client\u002F03.client\u002Findex",[336,337,341,345,349],{"title":332,"path":333,"stem":334},{"title":338,"path":339,"stem":340},"useAuthData","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fuse-auth-data","docs\u002Fauth-h3client\u002F03.client\u002F00.use-auth-data",{"title":342,"path":343,"stem":344},"useMagicLink","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fuse-magic-link","docs\u002Fauth-h3client\u002F03.client\u002F01.use-magic-link",{"title":346,"path":347,"stem":348},"executeRequest","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fexecute-request","docs\u002Fauth-h3client\u002F03.client\u002F02.execute-request",{"title":350,"path":351,"stem":352},"getCsrfToken","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fget-csrf-token","docs\u002Fauth-h3client\u002F03.client\u002F03.get-csrf-token",{"title":38,"path":354,"stem":355},"\u002Fdocs\u002Fauth-h3client\u002Fsecurity","docs\u002Fauth-h3client\u002F04.security",{"title":220,"path":357,"stem":358,"children":359,"page":53},"\u002Fdocs\u002Fauth-h3client\u002Fguides","docs\u002Fauth-h3client\u002F05.guides",[360,364,368,372],{"title":361,"path":362,"stem":363},"H3 and Nitro Setup","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fh3-nitro","docs\u002Fauth-h3client\u002F05.guides\u002F00.h3-nitro",{"title":365,"path":366,"stem":367},"HMAC Inter-service Auth","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fhmac","docs\u002Fauth-h3client\u002F05.guides\u002Fhmac",{"title":369,"path":370,"stem":371},"Image Upload","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fimage-upload","docs\u002Fauth-h3client\u002F05.guides\u002Fimage-upload",{"title":373,"path":374,"stem":375},"mTLS Configuration","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fmtls","docs\u002Fauth-h3client\u002F05.guides\u002Fmtls",{"title":237,"path":377,"stem":378},"\u002Fdocs\u002Fauth-h3client\u002Fconfiguration","docs\u002Fauth-h3client\u002F06.configuration",{"title":246,"path":380,"stem":381,"children":382},"\u002Fdocs\u002Fauth-h3client\u002Fapi","docs\u002Fauth-h3client\u002F07.api\u002Findex",[383,384,387,390,394],{"title":246,"path":380,"stem":381},{"title":254,"path":385,"stem":386},"\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fcontrollers","docs\u002Fauth-h3client\u002F07.api\u002F00.controllers",{"title":250,"path":388,"stem":389},"\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fmiddleware","docs\u002Fauth-h3client\u002F07.api\u002F01.middleware",{"title":391,"path":392,"stem":393},"Client-side Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fcomposables","docs\u002Fauth-h3client\u002F07.api\u002F02.composables",{"title":395,"path":396,"stem":397},"Utilities","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Futilities","docs\u002Fauth-h3client\u002F07.api\u002F03.utilities",{"title":399,"path":35,"stem":400,"children":401},"Bot Detector","docs\u002Fbot-detection\u002Findex",[402,403,406,410,414,433,507,510,513],{"title":399,"path":35,"stem":400},{"title":14,"path":404,"stem":405},"\u002Fdocs\u002Fbot-detection\u002Fgetting-started","docs\u002Fbot-detection\u002F00.getting-started",{"title":407,"path":408,"stem":409},"CLI","\u002Fdocs\u002Fbot-detection\u002Fcli","docs\u002Fbot-detection\u002F01.cli",{"title":411,"path":412,"stem":413},"Data Sources","\u002Fdocs\u002Fbot-detection\u002Fdata-sources","docs\u002Fbot-detection\u002F02.data-sources",{"title":220,"path":415,"stem":416,"children":417,"page":53},"\u002Fdocs\u002Fbot-detection\u002Fguides","docs\u002Fbot-detection\u002F03.guides",[418,422,426,429],{"title":419,"path":420,"stem":421},"Custom Checkers","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fcustom","docs\u002Fbot-detection\u002F03.guides\u002FCUSTOM",{"title":423,"path":424,"stem":425},"Scheduling Database Generation","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fgenerate","docs\u002Fbot-detection\u002F03.guides\u002FGENERATE",{"title":143,"path":427,"stem":428},"\u002Fdocs\u002Fbot-detection\u002Fguides\u002Flogging","docs\u002Fbot-detection\u002F03.guides\u002FLOGGING",{"title":430,"path":431,"stem":432},"Score Modes and Reputation Healing","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fscore","docs\u002Fbot-detection\u002F03.guides\u002FSCORE",{"title":434,"path":435,"stem":436,"children":437},"Checkers","\u002Fdocs\u002Fbot-detection\u002Fcheckers","docs\u002Fbot-detection\u002F04.checkers\u002Findex",[438,439,443,447,451,455,459,463,467,471,475,479,483,487,491,495,499,503],{"title":434,"path":435,"stem":436},{"title":440,"path":441,"stem":442},"IP Validation","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fip-validation","docs\u002Fbot-detection\u002F04.checkers\u002F01.ip-validation",{"title":444,"path":445,"stem":446},"Good \u002F Bad Bot Verification","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fgood-bots","docs\u002Fbot-detection\u002F04.checkers\u002F02.good-bots",{"title":448,"path":449,"stem":450},"Browser & Device Fingerprint","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fbrowser-device","docs\u002Fbot-detection\u002F04.checkers\u002F03.browser-device",{"title":452,"path":453,"stem":454},"Locale Map","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Flocale-map","docs\u002Fbot-detection\u002F04.checkers\u002F04.locale-map",{"title":456,"path":457,"stem":458},"Known Threats","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-threats","docs\u002Fbot-detection\u002F04.checkers\u002F05.known-threats",{"title":460,"path":461,"stem":462},"ASN Classification","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fasn-classification","docs\u002Fbot-detection\u002F04.checkers\u002F06.asn-classification",{"title":464,"path":465,"stem":466},"Tor Analysis","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Ftor-analysis","docs\u002Fbot-detection\u002F04.checkers\u002F07.tor-analysis",{"title":468,"path":469,"stem":470},"Timezone Consistency","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Ftimezone-consistency","docs\u002Fbot-detection\u002F04.checkers\u002F08.timezone-consistency",{"title":472,"path":473,"stem":474},"Honeypot","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fhoneypot","docs\u002Fbot-detection\u002F04.checkers\u002F09.honeypot",{"title":476,"path":477,"stem":478},"Known Bad IPs","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-bad-ips","docs\u002Fbot-detection\u002F04.checkers\u002F10.known-bad-ips",{"title":480,"path":481,"stem":482},"Behavior Rate","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fbehavior-rate","docs\u002Fbot-detection\u002F04.checkers\u002F11.behavior-rate",{"title":484,"path":485,"stem":486},"Proxy \u002F ISP \u002F Cookie","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fproxy-isp-cookies","docs\u002Fbot-detection\u002F04.checkers\u002F12.proxy-isp-cookies",{"title":488,"path":489,"stem":490},"Session Coherence","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fsession-coherence","docs\u002Fbot-detection\u002F04.checkers\u002F13.session-coherence",{"title":492,"path":493,"stem":494},"Velocity Fingerprint","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fvelocity-fingerprint","docs\u002Fbot-detection\u002F04.checkers\u002F14.velocity-fingerprint",{"title":496,"path":497,"stem":498},"UA & Header Analysis","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fua-header","docs\u002Fbot-detection\u002F04.checkers\u002F15.ua-header",{"title":500,"path":501,"stem":502},"Geolocation","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fgeolocation","docs\u002Fbot-detection\u002F04.checkers\u002F16.geolocation",{"title":504,"path":505,"stem":506},"Known Bad User-Agents","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-bad-ua","docs\u002Fbot-detection\u002F04.checkers\u002F17.known-bad-ua",{"title":38,"path":508,"stem":509},"\u002Fdocs\u002Fbot-detection\u002Fsecurity","docs\u002Fbot-detection\u002F04.security",{"title":246,"path":511,"stem":512},"\u002Fdocs\u002Fbot-detection\u002Fapi","docs\u002Fbot-detection\u002F05.api",{"title":237,"path":514,"stem":515},"\u002Fdocs\u002Fbot-detection\u002Fconfiguration","docs\u002Fbot-detection\u002F06.configuration",{"title":517,"path":11,"stem":518,"children":519},"Introduction","docs\u002Fgetting-started\u002Findex",[520],{"title":517,"path":11,"stem":518},{"title":27,"path":29,"stem":70,"children":522},[523,524,525,565,566,571,572],{"title":27,"path":29,"stem":70},{"title":14,"path":74,"stem":75},{"title":77,"path":78,"stem":79,"children":526},[527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549],{"title":77,"path":78,"stem":79},{"title":83,"path":84,"stem":85},{"title":87,"path":88,"stem":89},{"title":91,"path":92,"stem":93},{"title":95,"path":96,"stem":97},{"title":99,"path":100,"stem":101},{"title":103,"path":104,"stem":105},{"title":107,"path":108,"stem":109},{"title":111,"path":112,"stem":113},{"title":115,"path":116,"stem":117},{"title":119,"path":120,"stem":121},{"title":123,"path":124,"stem":125},{"title":127,"path":128,"stem":129},{"title":131,"path":132,"stem":133},{"title":135,"path":136,"stem":137},{"title":139,"path":140,"stem":141},{"title":143,"path":144,"stem":145},{"title":147,"path":148,"stem":149},{"title":151,"path":152,"stem":153},{"title":155,"path":156,"stem":157},{"title":159,"path":160,"stem":161},{"title":163,"path":164,"stem":165},{"title":167,"path":168,"stem":169,"children":550},[551,552,553,554,563,564],{"title":167,"path":168,"stem":169},{"title":173,"path":174,"stem":175},{"title":177,"path":178,"stem":179},{"title":181,"path":182,"stem":183,"children":555},[556,557,558,559,560,561,562],{"title":181,"path":182,"stem":183},{"title":187,"path":188,"stem":189},{"title":191,"path":192,"stem":193},{"title":195,"path":196,"stem":197},{"title":199,"path":200,"stem":201},{"title":203,"path":204,"stem":205},{"title":207,"path":208,"stem":209},{"title":147,"path":211,"stem":212},{"title":38,"path":214,"stem":215},{"title":38,"path":217,"stem":218},{"title":220,"path":221,"stem":222,"children":567,"page":53},[568,569,570],{"title":225,"path":226,"stem":227},{"title":229,"path":230,"stem":231},{"title":233,"path":234,"stem":235},{"title":237,"path":238,"stem":239},{"title":241,"path":242,"stem":243,"children":573,"page":53},[574,575,576],{"title":246,"path":247,"stem":248},{"title":250,"path":251,"stem":252},{"title":254,"path":255,"stem":256},{"title":40,"path":42,"stem":578,"children":579},"docs\u002Fshield-base\u002Findex",[580,581,584,588,629,633,637,641],{"title":40,"path":42,"stem":578},{"title":14,"path":582,"stem":583},"\u002Fdocs\u002Fshield-base\u002Fgetting-started","docs\u002Fshield-base\u002F00.getting-started",{"title":585,"path":586,"stem":587},"CLI Reference","\u002Fdocs\u002Fshield-base\u002Fcli","docs\u002Fshield-base\u002F01.cli",{"title":411,"path":589,"stem":590,"children":591},"\u002Fdocs\u002Fshield-base\u002Fdata-sources","docs\u002Fshield-base\u002F02.data-sources\u002Findex",[592,593,597,601,605,609,613,617,621,625],{"title":411,"path":589,"stem":590},{"title":594,"path":595,"stem":596},"BGP \u002F ASN","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fbgp","docs\u002Fshield-base\u002F02.data-sources\u002Fbgp",{"title":598,"path":599,"stem":600},"City Geolocation","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcity","docs\u002Fshield-base\u002F02.data-sources\u002Fcity",{"title":602,"path":603,"stem":604},"Country Geolocation","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcountry","docs\u002Fshield-base\u002F02.data-sources\u002Fcountry",{"title":606,"path":607,"stem":608},"Verified Crawlers","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcrawlers","docs\u002Fshield-base\u002F02.data-sources\u002Fcrawlers",{"title":610,"path":611,"stem":612},"Disposable Emails","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Femail","docs\u002Fshield-base\u002F02.data-sources\u002Femail",{"title":614,"path":615,"stem":616},"FireHOL Threat Intelligence","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Ffirehol","docs\u002Fshield-base\u002F02.data-sources\u002Ffirehol",{"title":618,"path":619,"stem":620},"Proxy Detection","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fproxy","docs\u002Fshield-base\u002F02.data-sources\u002Fproxy",{"title":622,"path":623,"stem":624},"Tor Nodes","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Ftor","docs\u002Fshield-base\u002F02.data-sources\u002Ftor",{"title":626,"path":627,"stem":628},"Suspicious User-Agents","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fuseragent","docs\u002Fshield-base\u002F02.data-sources\u002Fuseragent",{"title":630,"path":631,"stem":632},"Programmatic Usage","\u002Fdocs\u002Fshield-base\u002Fusage","docs\u002Fshield-base\u002F03.usage",{"title":634,"path":635,"stem":636},"Custom Data Sources","\u002Fdocs\u002Fshield-base\u002Fcustom-data-sources","docs\u002Fshield-base\u002F04.custom-data-sources",{"title":638,"path":639,"stem":640},"TypeScript Types","\u002Fdocs\u002Fshield-base\u002Ftypes","docs\u002Fshield-base\u002F05.types",{"title":246,"path":642,"stem":643},"\u002Fdocs\u002Fshield-base\u002Fapi","docs\u002Fshield-base\u002F06.api",{"title":395,"path":48,"stem":645,"children":646},"docs\u002Futils\u002Findex",[647,648,665,698,795],{"title":395,"path":48,"stem":645},{"title":649,"path":650,"stem":651,"children":652,"page":53},"Eslint","\u002Fdocs\u002Futils\u002Feslint","docs\u002Futils\u002Feslint",[653,657,661],{"title":654,"path":655,"stem":656},"React Config","\u002Fdocs\u002Futils\u002Feslint\u002Freact","docs\u002Futils\u002Feslint\u002Freact",{"title":658,"path":659,"stem":660},"TypeScript Config","\u002Fdocs\u002Futils\u002Feslint\u002Ftypescript","docs\u002Futils\u002Feslint\u002Ftypescript",{"title":662,"path":663,"stem":664},"Vue Config","\u002Fdocs\u002Futils\u002Feslint\u002Fvue","docs\u002Futils\u002Feslint\u002Fvue",{"title":666,"path":667,"stem":668,"children":669,"page":53},"Server","\u002Fdocs\u002Futils\u002Fserver","docs\u002Futils\u002Fserver",[670,674,678,682,686,690,694],{"title":671,"path":672,"stem":673},"Encryption","\u002Fdocs\u002Futils\u002Fserver\u002Fencryption","docs\u002Futils\u002Fserver\u002Fencryption",{"title":675,"path":676,"stem":677},"Path Resolver","\u002Fdocs\u002Futils\u002Fserver\u002Fpathresolver","docs\u002Futils\u002Fserver\u002FpathResolver",{"title":679,"path":680,"stem":681},"File Replacements","\u002Fdocs\u002Futils\u002Fserver\u002Freplace","docs\u002Futils\u002Fserver\u002Freplace",{"title":683,"path":684,"stem":685},"run","\u002Fdocs\u002Futils\u002Fserver\u002Frun","docs\u002Futils\u002Fserver\u002Frun",{"title":687,"path":688,"stem":689},"scheduleTask","\u002Fdocs\u002Futils\u002Fserver\u002Fscheduletask","docs\u002Futils\u002Fserver\u002FscheduleTask",{"title":691,"path":692,"stem":693},"spawnRun","\u002Fdocs\u002Futils\u002Fserver\u002Fspawnrun","docs\u002Futils\u002Fserver\u002FspawnRun",{"title":695,"path":696,"stem":697},"uploadCsv","\u002Fdocs\u002Futils\u002Fserver\u002Fuploadcsv","docs\u002Futils\u002Fserver\u002FuploadCsv",{"title":699,"path":700,"stem":701,"children":702,"page":53},"Shared","\u002Fdocs\u002Futils\u002Fshared","docs\u002Futils\u002Fshared",[703,707,711,715,719,723,727,731,735,739,743,747,751,755,759,763,767,771,775,779,783,787,791],{"title":704,"path":705,"stem":706},"BatchQueue","\u002Fdocs\u002Futils\u002Fshared\u002Fbatchqueue","docs\u002Futils\u002Fshared\u002FbatchQueue",{"title":708,"path":709,"stem":710},"capitalize","\u002Fdocs\u002Futils\u002Fshared\u002Fcapitalize","docs\u002Futils\u002Fshared\u002Fcapitalize",{"title":712,"path":713,"stem":714},"chunkProcess","\u002Fdocs\u002Futils\u002Fshared\u002Fchunkprocess","docs\u002Futils\u002Fshared\u002FchunkProcess",{"title":716,"path":717,"stem":718},"cleanObject","\u002Fdocs\u002Futils\u002Fshared\u002Fcleanobject","docs\u002Futils\u002Fshared\u002FcleanObject",{"title":720,"path":721,"stem":722},"createConfigManager","\u002Fdocs\u002Futils\u002Fshared\u002Fconfigurationdefiner","docs\u002Futils\u002Fshared\u002FconfigurationDefiner",{"title":724,"path":725,"stem":726},"debounce","\u002Fdocs\u002Futils\u002Fshared\u002Fdebounce","docs\u002Futils\u002Fshared\u002Fdebounce",{"title":728,"path":729,"stem":730},"ensureArray","\u002Fdocs\u002Futils\u002Fshared\u002Fensurearray","docs\u002Futils\u002Fshared\u002FensureArray",{"title":732,"path":733,"stem":734},"fetchWithRetry","\u002Fdocs\u002Futils\u002Fshared\u002Ffetchwithretry","docs\u002Futils\u002Fshared\u002FfetchWithRetry",{"title":736,"path":737,"stem":738},"filterEmptyValues","\u002Fdocs\u002Futils\u002Fshared\u002Ffilteremptyvalues","docs\u002Futils\u002Fshared\u002FfilterEmptyValues",{"title":740,"path":741,"stem":742},"findStringsInObject","\u002Fdocs\u002Futils\u002Fshared\u002Ffindobjectvalues","docs\u002Futils\u002Fshared\u002FfindObjectValues",{"title":744,"path":745,"stem":746},"fisherYatesShuffle","\u002Fdocs\u002Futils\u002Fshared\u002Ffisheryatesshuffle","docs\u002Futils\u002Fshared\u002FfisherYatesShuffle",{"title":748,"path":749,"stem":750},"getRandomImage","\u002Fdocs\u002Futils\u002Fshared\u002Fgetrandomimage","docs\u002Futils\u002Fshared\u002FgetRandomImage",{"title":752,"path":753,"stem":754},"isObjectHasValues","\u002Fdocs\u002Futils\u002Fshared\u002Fisobjecthasvalues","docs\u002Futils\u002Fshared\u002FisObjectHasValues",{"title":756,"path":757,"stem":758},"isAsyncOrPromise","\u002Fdocs\u002Futils\u002Fshared\u002Fispromise","docs\u002Futils\u002Fshared\u002FisPromise",{"title":760,"path":761,"stem":762},"MiniCache","\u002Fdocs\u002Futils\u002Fshared\u002Fminicache","docs\u002Futils\u002Fshared\u002FminiCache",{"title":764,"path":765,"stem":766},"parseCookies","\u002Fdocs\u002Futils\u002Fshared\u002Fparserawcookies","docs\u002Futils\u002Fshared\u002FparseRawCookies",{"title":768,"path":769,"stem":770},"safeAction","\u002Fdocs\u002Futils\u002Fshared\u002Fpromiselocker","docs\u002Futils\u002Fshared\u002FpromiseLocker",{"title":772,"path":773,"stem":774},"Random","\u002Fdocs\u002Futils\u002Fshared\u002Frandom","docs\u002Futils\u002Fshared\u002Frandom",{"title":776,"path":777,"stem":778},"range","\u002Fdocs\u002Futils\u002Fshared\u002Frange","docs\u002Futils\u002Fshared\u002Frange",{"title":780,"path":781,"stem":782},"rateLimiters","\u002Fdocs\u002Futils\u002Fshared\u002Fratelimiters","docs\u002Futils\u002Fshared\u002FrateLimiters",{"title":784,"path":785,"stem":786},"safeObjectMerge","\u002Fdocs\u002Futils\u002Fshared\u002Fsafemerge","docs\u002Futils\u002Fshared\u002FsafeMerge",{"title":788,"path":789,"stem":790},"textTruncation","\u002Fdocs\u002Futils\u002Fshared\u002Ftexttruncation","docs\u002Futils\u002Fshared\u002FtextTruncation",{"title":792,"path":793,"stem":794},"validateZodSchema","\u002Fdocs\u002Futils\u002Fshared\u002Fvalidatezodschema","docs\u002Futils\u002Fshared\u002FvalidateZodSchema",{"title":796,"path":797,"stem":798,"children":799},"Utility Types","\u002Fdocs\u002Futils\u002Ftypes","docs\u002Futils\u002Ftypes\u002Findex",[800,801,805,809,813,817,821,825,829,833],{"title":796,"path":797,"stem":798},{"title":802,"path":803,"stem":804},"Brand","\u002Fdocs\u002Futils\u002Ftypes\u002Fbrand","docs\u002Futils\u002Ftypes\u002FBrand",{"title":806,"path":807,"stem":808},"DeepPartial","\u002Fdocs\u002Futils\u002Ftypes\u002Fdeeppartial","docs\u002Futils\u002Ftypes\u002FDeepPartial",{"title":810,"path":811,"stem":812},"Merge","\u002Fdocs\u002Futils\u002Ftypes\u002Fmerge","docs\u002Futils\u002Ftypes\u002FMerge",{"title":814,"path":815,"stem":816},"NonNullable","\u002Fdocs\u002Futils\u002Ftypes\u002Fnonnullable","docs\u002Futils\u002Ftypes\u002FNonNullable",{"title":818,"path":819,"stem":820},"Prettify","\u002Fdocs\u002Futils\u002Ftypes\u002Fprettify","docs\u002Futils\u002Ftypes\u002FPrettify",{"title":822,"path":823,"stem":824},"PromiseType","\u002Fdocs\u002Futils\u002Ftypes\u002Fpromisetype","docs\u002Futils\u002Ftypes\u002FPromiseType",{"title":826,"path":827,"stem":828},"RequireKeys","\u002Fdocs\u002Futils\u002Ftypes\u002Frequirekeys","docs\u002Futils\u002Ftypes\u002FRequireKeys",{"title":830,"path":831,"stem":832},"StandardResponse","\u002Fdocs\u002Futils\u002Ftypes\u002Fstandardresponse","docs\u002Futils\u002Ftypes\u002FStandardResponse",{"title":834,"path":835,"stem":836},"ValueOf","\u002Fdocs\u002Futils\u002Ftypes\u002Fvalueof","docs\u002Futils\u002Ftypes\u002FValueOf",{"id":4,"extension":5,"links":838,"meta":849,"stem":62,"__hash__":63},[839,847,848],{"nested":8,"label":9,"icon":10,"to":11,"children":840},[841,842,843,844,845,846],{"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":851,"title":207,"body":852,"description":2617,"extension":2618,"icon":2619,"meta":2620,"module":2621,"navigation":8,"path":208,"rawbody":2622,"seo":2623,"stem":209,"__hash__":2624},"docs\u002Fdocs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F05.list.md",{"type":853,"value":854,"toc":2602},"minimark",[855,859,867,877,880,909,918,923,929,934,945,1104,1107,1368,1385,1395,1401,1449,1452,1457,1460,1518,1522,1525,1563,1567,1573,1578,1645,1651,1801,1807,1820,1826,1848,1854,1857,1861,1864,1867,1889,1895,1898,2228,2235,2238,2255,2267,2270,2359,2446,2450,2453,2487,2499,2503,2506,2510,2517,2521,2535,2539,2552,2556,2562,2566,2569,2573,2576,2598],[856,857,858],"p",{},"Token listing returns a high-level overview of the tokens a user can still use.\nThe response includes user-wide totals and, when valid tokens exist, a list of\nactive token records with their public identifiers and usage metadata.",[856,860,861,862,866],{},"The IAM service builds this response in two steps. It first counts every token\nowned by the user, then it queries only the rows where ",[863,864,865],"code",{},"valid = 1"," to build\nthe returned list.",[868,869,870],"note",{},[856,871,872,873,876],{},"The listing response never returns raw API keys. It includes\n",[863,874,875],{},"public_identifier"," so authenticated clients can perform later management\nactions without exposing the raw secret.",[856,878,879],{},"You can fetch the token list in 2 ways:",[881,882,883,891],"ul",{},[884,885,886,887,890],"li",{},"Directly calling ",[863,888,889],{},"getAllValidTokensList",".",[884,892,893,894,908],{},"Calling the ",[863,895,899,904],{"className":896,"language":897,"style":898},"language-http shiki shiki-themes light-plus light-plus dracula","http","",[900,901,903],"span",{"class":902},"sZ328","GET",[900,905,907],{"class":906},"sDd4n"," \u002Fapi\u002Fmanage\u002Flist-metadata"," endpoint from an\nauthenticated client.",[868,910,911],{},[856,912,913,914,917],{},"Follow the ",[915,916,173],"a",{"href":174}," docs to create\na token first before attempting to list tokens.",[919,920,922],"h2",{"id":921},"listing-tokens","Listing Tokens",[856,924,925,926,890],{},"You can list tokens either directly in the library or through the authenticated\nroute. Unlike the other management actions, token listing does not use\n",[863,927,928],{},"privateActionManager",[930,931,933],"h3",{"id":932},"using-the-library","Using the library",[856,935,936,937,941,942,944],{},"To fetch the current valid token list ",[938,939,940],"em",{},"directly",", you call\n",[863,943,889],{},". This function counts all user tokens and then returns\nthe metadata for the subset that is still valid.",[946,947,952],"pre",{"className":948,"code":949,"filename":950,"language":951,"meta":898,"style":898},"language-ts shiki shiki-themes light-plus light-plus dracula","import { getAllValidTokensList } from '@riavzon\u002Fauth'\n\nconst results = await getAllValidTokensList(1234)\n\nif (results.ok) {\n    console.log(results.data.totalValidTokens)\n    console.log(results.data.tokenList)\n}\n","example.ts","ts",[863,953,954,984,990,1022,1027,1047,1074,1098],{"__ignoreMap":898},[900,955,958,961,964,967,970,973,977,981],{"class":956,"line":957},"line",1,[900,959,960],{"class":902},"import",[900,962,963],{"class":906}," { ",[900,965,889],{"class":966},"sjsA6",[900,968,969],{"class":906}," } ",[900,971,972],{"class":902},"from",[900,974,976],{"class":975},"sFkSl"," '",[900,978,980],{"class":979},"sFB1V","@riavzon\u002Fauth",[900,982,983],{"class":975},"'\n",[900,985,987],{"class":956,"line":986},2,[900,988,989],{"emptyLinePlaceholder":8},"\n",[900,991,993,997,1001,1005,1008,1012,1015,1019],{"class":956,"line":992},3,[900,994,996],{"class":995},"sl46w","const",[900,998,1000],{"class":999},"s3JHE"," results",[900,1002,1004],{"class":1003},"saOXh"," =",[900,1006,1007],{"class":902}," await",[900,1009,1011],{"class":1010},"sHOzp"," getAllValidTokensList",[900,1013,1014],{"class":906},"(",[900,1016,1018],{"class":1017},"spgvN","1234",[900,1020,1021],{"class":906},")\n",[900,1023,1025],{"class":956,"line":1024},4,[900,1026,989],{"emptyLinePlaceholder":8},[900,1028,1030,1033,1036,1039,1041,1044],{"class":956,"line":1029},5,[900,1031,1032],{"class":902},"if",[900,1034,1035],{"class":906}," (",[900,1037,1038],{"class":966},"results",[900,1040,890],{"class":906},[900,1042,1043],{"class":966},"ok",[900,1045,1046],{"class":906},") {\n",[900,1048,1050,1053,1055,1058,1060,1062,1064,1067,1069,1072],{"class":956,"line":1049},6,[900,1051,1052],{"class":966},"    console",[900,1054,890],{"class":906},[900,1056,1057],{"class":1010},"log",[900,1059,1014],{"class":906},[900,1061,1038],{"class":966},[900,1063,890],{"class":906},[900,1065,1066],{"class":966},"data",[900,1068,890],{"class":906},[900,1070,1071],{"class":966},"totalValidTokens",[900,1073,1021],{"class":906},[900,1075,1077,1079,1081,1083,1085,1087,1089,1091,1093,1096],{"class":956,"line":1076},7,[900,1078,1052],{"class":966},[900,1080,890],{"class":906},[900,1082,1057],{"class":1010},[900,1084,1014],{"class":906},[900,1086,1038],{"class":966},[900,1088,890],{"class":906},[900,1090,1066],{"class":966},[900,1092,890],{"class":906},[900,1094,1095],{"class":966},"tokenList",[900,1097,1021],{"class":906},[900,1099,1101],{"class":956,"line":1100},8,[900,1102,1103],{"class":906},"}\n",[856,1105,1106],{},"On success you get back an object with:",[946,1108,1110],{"className":948,"code":1109,"language":951,"meta":898,"style":898},"{\n    ok: true,\n    date: new Date().toISOString(),\n    data: {\n        total: 6,\n        totalInvalidTokens: 2,\n        totalValidTokens: 4,\n        tokenList: [\n            {\n                id: 12,\n                name: 'server token',\n                created_at: '2026-05-01T10:00:00.000Z',\n                expires_at: '2026-05-01T11:00:00.000Z',\n                restricted_to_ip_address: ['203.0.113.10'],\n                public_identifier: 'public_identifier',\n                last_used: '2026-05-01T10:30:00.000Z',\n                usage_count: 19,\n                privilege_type: 'restricted'\n            }\n        ]\n    }\n}\n",[863,1111,1112,1117,1129,1150,1155,1165,1175,1185,1190,1196,1211,1229,1246,1263,1284,1300,1317,1330,1345,1351,1357,1363],{"__ignoreMap":898},[900,1113,1114],{"class":956,"line":957},[900,1115,1116],{"class":906},"{\n",[900,1118,1119,1122,1126],{"class":956,"line":986},[900,1120,1121],{"class":906},"    ok: ",[900,1123,1125],{"class":1124},"sjR7W","true",[900,1127,1128],{"class":906},",\n",[900,1130,1131,1134,1138,1141,1144,1147],{"class":956,"line":992},[900,1132,1133],{"class":906},"    date: ",[900,1135,1137],{"class":1136},"sakC6","new",[900,1139,1140],{"class":1010}," Date",[900,1142,1143],{"class":906},"().",[900,1145,1146],{"class":1010},"toISOString",[900,1148,1149],{"class":906},"(),\n",[900,1151,1152],{"class":956,"line":1024},[900,1153,1154],{"class":906},"    data: {\n",[900,1156,1157,1160,1163],{"class":956,"line":1029},[900,1158,1159],{"class":906},"        total: ",[900,1161,1162],{"class":1017},"6",[900,1164,1128],{"class":906},[900,1166,1167,1170,1173],{"class":956,"line":1049},[900,1168,1169],{"class":906},"        totalInvalidTokens: ",[900,1171,1172],{"class":1017},"2",[900,1174,1128],{"class":906},[900,1176,1177,1180,1183],{"class":956,"line":1076},[900,1178,1179],{"class":906},"        totalValidTokens: ",[900,1181,1182],{"class":1017},"4",[900,1184,1128],{"class":906},[900,1186,1187],{"class":956,"line":1100},[900,1188,1189],{"class":906},"        tokenList: [\n",[900,1191,1193],{"class":956,"line":1192},9,[900,1194,1195],{"class":906},"            {\n",[900,1197,1199,1202,1206,1209],{"class":956,"line":1198},10,[900,1200,1201],{"class":966},"                id",[900,1203,1205],{"class":1204},"s34zl",":",[900,1207,1208],{"class":1017}," 12",[900,1210,1128],{"class":906},[900,1212,1214,1217,1219,1221,1224,1227],{"class":956,"line":1213},11,[900,1215,1216],{"class":966},"                name",[900,1218,1205],{"class":1204},[900,1220,976],{"class":975},[900,1222,1223],{"class":979},"server token",[900,1225,1226],{"class":975},"'",[900,1228,1128],{"class":906},[900,1230,1232,1235,1237,1239,1242,1244],{"class":956,"line":1231},12,[900,1233,1234],{"class":966},"                created_at",[900,1236,1205],{"class":1204},[900,1238,976],{"class":975},[900,1240,1241],{"class":979},"2026-05-01T10:00:00.000Z",[900,1243,1226],{"class":975},[900,1245,1128],{"class":906},[900,1247,1249,1252,1254,1256,1259,1261],{"class":956,"line":1248},13,[900,1250,1251],{"class":966},"                expires_at",[900,1253,1205],{"class":1204},[900,1255,976],{"class":975},[900,1257,1258],{"class":979},"2026-05-01T11:00:00.000Z",[900,1260,1226],{"class":975},[900,1262,1128],{"class":906},[900,1264,1266,1269,1271,1274,1276,1279,1281],{"class":956,"line":1265},14,[900,1267,1268],{"class":966},"                restricted_to_ip_address",[900,1270,1205],{"class":1204},[900,1272,1273],{"class":906}," [",[900,1275,1226],{"class":975},[900,1277,1278],{"class":979},"203.0.113.10",[900,1280,1226],{"class":975},[900,1282,1283],{"class":906},"],\n",[900,1285,1287,1290,1292,1294,1296,1298],{"class":956,"line":1286},15,[900,1288,1289],{"class":966},"                public_identifier",[900,1291,1205],{"class":1204},[900,1293,976],{"class":975},[900,1295,875],{"class":979},[900,1297,1226],{"class":975},[900,1299,1128],{"class":906},[900,1301,1303,1306,1308,1310,1313,1315],{"class":956,"line":1302},16,[900,1304,1305],{"class":966},"                last_used",[900,1307,1205],{"class":1204},[900,1309,976],{"class":975},[900,1311,1312],{"class":979},"2026-05-01T10:30:00.000Z",[900,1314,1226],{"class":975},[900,1316,1128],{"class":906},[900,1318,1320,1323,1325,1328],{"class":956,"line":1319},17,[900,1321,1322],{"class":966},"                usage_count",[900,1324,1205],{"class":1204},[900,1326,1327],{"class":1017}," 19",[900,1329,1128],{"class":906},[900,1331,1333,1336,1338,1340,1343],{"class":956,"line":1332},18,[900,1334,1335],{"class":966},"                privilege_type",[900,1337,1205],{"class":1204},[900,1339,976],{"class":975},[900,1341,1342],{"class":979},"restricted",[900,1344,983],{"class":975},[900,1346,1348],{"class":956,"line":1347},19,[900,1349,1350],{"class":906},"            }\n",[900,1352,1354],{"class":956,"line":1353},20,[900,1355,1356],{"class":906},"        ]\n",[900,1358,1360],{"class":956,"line":1359},21,[900,1361,1362],{"class":906},"    }\n",[900,1364,1366],{"class":956,"line":1365},22,[900,1367,1103],{"class":906},[856,1369,1370,1371,1374,1375,1378,1379,1381,1382,1384],{},"The ",[863,1372,1373],{},"total",", ",[863,1376,1377],{},"totalInvalidTokens",", and ",[863,1380,1071],{}," fields are user-wide.\nThey describe all token rows for the user, not only the ",[863,1383,1095],{}," array.",[856,1386,1387,1388,1391,1392,1394],{},"If the user has no valid tokens, the helper still returns ",[863,1389,1390],{},"ok: true"," with the\ncount fields. In that case ",[863,1393,1095],{}," is omitted.",[856,1396,1397,1398,1400],{},"On error, ",[863,1399,889],{}," returns the catch branch:",[946,1402,1404],{"className":948,"code":1403,"language":951,"meta":898,"style":898},"{\n    ok: false,\n    date: new Date().toISOString(),\n    reason: 'Server error'\n}\n",[863,1405,1406,1410,1419,1433,1445],{"__ignoreMap":898},[900,1407,1408],{"class":956,"line":957},[900,1409,1116],{"class":906},[900,1411,1412,1414,1417],{"class":956,"line":986},[900,1413,1121],{"class":906},[900,1415,1416],{"class":1124},"false",[900,1418,1128],{"class":906},[900,1420,1421,1423,1425,1427,1429,1431],{"class":956,"line":992},[900,1422,1133],{"class":906},[900,1424,1137],{"class":1136},[900,1426,1140],{"class":1010},[900,1428,1143],{"class":906},[900,1430,1146],{"class":1010},[900,1432,1149],{"class":906},[900,1434,1435,1438,1440,1443],{"class":956,"line":1024},[900,1436,1437],{"class":906},"    reason: ",[900,1439,1226],{"class":975},[900,1441,1442],{"class":979},"Server error",[900,1444,983],{"class":975},[900,1446,1447],{"class":956,"line":1029},[900,1448,1103],{"class":906},[856,1450,1451],{},"This happens when the count query or the valid-token query throws.",[1453,1454,1456],"h4",{"id":1455},"signature","Signature",[856,1458,1459],{},"The direct helper exposes the following signature:",[946,1461,1463],{"className":948,"code":1462,"language":951,"meta":898,"style":898},"export async function getAllValidTokensList(\n        userId: number\n): Promise\u003CResults\u003CAllValidTokensList>>\n",[863,1464,1465,1481,1493],{"__ignoreMap":898},[900,1466,1467,1470,1473,1476,1478],{"class":956,"line":957},[900,1468,1469],{"class":902},"export",[900,1471,1472],{"class":995}," async",[900,1474,1475],{"class":995}," function",[900,1477,1011],{"class":1010},[900,1479,1480],{"class":906},"(\n",[900,1482,1483,1487,1489],{"class":956,"line":986},[900,1484,1486],{"class":1485},"sygFZ","        userId",[900,1488,1205],{"class":1003},[900,1490,1492],{"class":1491},"sFs1U"," number\n",[900,1494,1495,1498,1500,1503,1506,1510,1512,1515],{"class":956,"line":992},[900,1496,1497],{"class":906},")",[900,1499,1205],{"class":1003},[900,1501,1502],{"class":1491}," Promise",[900,1504,1505],{"class":906},"\u003C",[900,1507,1509],{"class":1508},"sW-rI","Results",[900,1511,1505],{"class":906},[900,1513,1514],{"class":1508},"AllValidTokensList",[900,1516,1517],{"class":906},">>\n",[1453,1519,1521],{"id":1520},"parameters","Parameters",[856,1523,1524],{},"The listing helper accepts the following parameter:",[1526,1527,1528,1544],"table",{},[1529,1530,1531],"thead",{},[1532,1533,1534,1538,1541],"tr",{},[1535,1536,1537],"th",{},"Field",[1535,1539,1540],{},"Type",[1535,1542,1543],{},"Description",[1545,1546,1547],"tbody",{},[1532,1548,1549,1555,1560],{},[1550,1551,1552],"td",{},[863,1553,1554],{},"userId",[1550,1556,1557],{},[863,1558,1559],{},"number",[1550,1561,1562],{},"The user id whose tokens should be listed.",[1453,1564,1566],{"id":1565},"return-type","Return type",[856,1568,1569,1570,890],{},"The listing helper returns ",[863,1571,1572],{},"Results\u003CAllValidTokensList>",[856,1574,1575,1577],{},[863,1576,1514],{}," contains the following fields:",[1526,1579,1580,1590],{},[1529,1581,1582],{},[1532,1583,1584,1586,1588],{},[1535,1585,1537],{},[1535,1587,1540],{},[1535,1589,1543],{},[1545,1591,1592,1605,1618,1631],{},[1532,1593,1594,1598,1602],{},[1550,1595,1596],{},[863,1597,1373],{},[1550,1599,1600],{},[863,1601,1559],{},[1550,1603,1604],{},"The total number of token rows owned by the user.",[1532,1606,1607,1611,1615],{},[1550,1608,1609],{},[863,1610,1377],{},[1550,1612,1613],{},[863,1614,1559],{},[1550,1616,1617],{},"The number of invalid token rows owned by the user.",[1532,1619,1620,1624,1628],{},[1550,1621,1622],{},[863,1623,1071],{},[1550,1625,1626],{},[863,1627,1559],{},[1550,1629,1630],{},"The number of valid token rows owned by the user.",[1532,1632,1633,1637,1642],{},[1550,1634,1635],{},[863,1636,1095],{},[1550,1638,1639],{},[863,1640,1641],{},"TokenList[] | undefined",[1550,1643,1644],{},"The current list of valid tokens, omitted when no valid rows exist.",[856,1646,1647,1650],{},[863,1648,1649],{},"TokenList"," contains the following fields on successful responses:",[1526,1652,1653,1663],{},[1529,1654,1655],{},[1532,1656,1657,1659,1661],{},[1535,1658,1537],{},[1535,1660,1540],{},[1535,1662,1543],{},[1545,1664,1665,1679,1694,1708,1727,1745,1758,1772,1786],{},[1532,1666,1667,1672,1676],{},[1550,1668,1669],{},[863,1670,1671],{},"id",[1550,1673,1674],{},[863,1675,1559],{},[1550,1677,1678],{},"The internal database id of the token.",[1532,1680,1681,1686,1691],{},[1550,1682,1683],{},[863,1684,1685],{},"name",[1550,1687,1688],{},[863,1689,1690],{},"string",[1550,1692,1693],{},"The token name.",[1532,1695,1696,1701,1705],{},[1550,1697,1698],{},[863,1699,1700],{},"created_at",[1550,1702,1703],{},[863,1704,1690],{},[1550,1706,1707],{},"The creation timestamp.",[1532,1709,1710,1715,1720],{},[1550,1711,1712],{},[863,1713,1714],{},"expires_at",[1550,1716,1717],{},[863,1718,1719],{},"string | null",[1550,1721,1722,1723,1726],{},"The expiration timestamp, or ",[863,1724,1725],{},"null"," when the token does not expire.",[1532,1728,1729,1734,1739],{},[1550,1730,1731],{},[863,1732,1733],{},"restricted_to_ip_address",[1550,1735,1736],{},[863,1737,1738],{},"string[] | null",[1550,1740,1741,1742,1744],{},"The current IP restriction list, or ",[863,1743,1725],{}," when unrestricted.",[1532,1746,1747,1751,1755],{},[1550,1748,1749],{},[863,1750,875],{},[1550,1752,1753],{},[863,1754,1690],{},[1550,1756,1757],{},"The public identifier used for later management actions.",[1532,1759,1760,1765,1769],{},[1550,1761,1762],{},[863,1763,1764],{},"last_used",[1550,1766,1767],{},[863,1768,1719],{},[1550,1770,1771],{},"The last successful usage timestamp.",[1532,1773,1774,1779,1783],{},[1550,1775,1776],{},[863,1777,1778],{},"usage_count",[1550,1780,1781],{},[863,1782,1559],{},[1550,1784,1785],{},"The current usage count.",[1532,1787,1788,1793,1798],{},[1550,1789,1790],{},[863,1791,1792],{},"privilege_type",[1550,1794,1795],{},[863,1796,1797],{},"'demo' | 'restricted' | 'protected' | 'full' | 'custom'",[1550,1799,1800],{},"The stored privilege type.",[1802,1803,1804],"warning",{},[856,1805,1806],{},"This action should be performed by a fully authenticated client.",[1808,1809,1810],"caution",{},[856,1811,1812,1813,1815,1816,1819],{},"This function only needs a ",[863,1814,1554],{},". It does not verify a token,\n",[863,1817,1818],{},"publicIdentifier",", or caller session for you. Only call it directly in\ntrusted server-side code.",[1453,1821,1823,1825],{"id":1822},"privateactionmanager-support",[863,1824,928],{}," support",[856,1827,1828,1829,1831,1832,1374,1835,1374,1838,1374,1841,1844,1845,890],{},"Token listing does not have a ",[863,1830,928],{}," action. The manager action\ntype only supports ",[863,1833,1834],{},"revoke",[863,1836,1837],{},"rotate",[863,1839,1840],{},"metadata",[863,1842,1843],{},"ip-restriction-update",", and\n",[863,1846,1847],{},"privilege-update",[856,1849,1850,1851,1853],{},"That is why the authenticated route calls ",[863,1852,889],{}," directly\nafter the session checks succeed.",[1855,1856],"hr",{},[930,1858,1860],{"id":1859},"using-the-route","Using the route",[856,1862,1863],{},"Let's say you want to fetch the current valid token list from your\nauthenticated client or BFF.",[856,1865,1866],{},"The listing route is available at:",[946,1868,1871],{"className":896,"code":1869,"filename":1870,"language":897,"meta":898,"style":898},"GET \u002Fapi\u002Fmanage\u002Flist-metadata HTTP\u002F1.1\n","request.http",[863,1872,1873],{"__ignoreMap":898},[900,1874,1875,1877,1880,1883,1886],{"class":956,"line":957},[900,1876,903],{"class":902},[900,1878,1879],{"class":906}," \u002Fapi\u002Fmanage\u002Flist-metadata ",[900,1881,1882],{"class":995},"HTTP",[900,1884,1885],{"class":906},"\u002F",[900,1887,1888],{"class":1017},"1.1\n",[856,1890,1891,1892,1894],{},"This action is ",[863,1893,903],{}," only. It does not use a request body.",[856,1896,1897],{},"On success you will get the following response:",[946,1899,1901],{"className":896,"code":1900,"language":897,"meta":898,"style":898},"HTTP\u002F1.1 200 OK\nContent-Type: application\u002Fjson; charset=utf-8\n\n{\n    \"ok\": true,\n    \"date\": \"current date\",\n    \"data\": {\n        \"total\": 6,\n        \"totalInvalidTokens\": 2,\n        \"totalValidTokens\": 4,\n        \"tokenList\": [\n            {\n                \"id\": 12,\n                \"name\": \"server token\",\n                \"created_at\": \"2026-05-01T10:00:00.000Z\",\n                \"expires_at\": \"2026-05-01T11:00:00.000Z\",\n                \"restricted_to_ip_address\": [\"203.0.113.10\"],\n                \"public_identifier\": \"public_identifier\",\n                \"last_used\": \"2026-05-01T10:30:00.000Z\",\n                \"usage_count\": 19,\n                \"privilege_type\": \"restricted\"\n            }\n        ]\n    }\n}\n",[863,1902,1903,1918,1929,1933,1937,1956,1977,1990,2006,2021,2036,2049,2053,2068,2086,2104,2122,2142,2160,2178,2192,2209,2213,2218,2223],{"__ignoreMap":898},[900,1904,1905,1907,1909,1912,1915],{"class":956,"line":957},[900,1906,1882],{"class":995},[900,1908,1885],{"class":906},[900,1910,1911],{"class":1017},"1.1",[900,1913,1914],{"class":1017}," 200",[900,1916,1917],{"class":979}," OK\n",[900,1919,1920,1924,1926],{"class":956,"line":986},[900,1921,1923],{"class":1922},"scd-l","Content-Type",[900,1925,1205],{"class":995},[900,1927,1928],{"class":979}," application\u002Fjson; charset=utf-8\n",[900,1930,1931],{"class":956,"line":992},[900,1932,989],{"emptyLinePlaceholder":8},[900,1934,1935],{"class":956,"line":1024},[900,1936,1116],{"class":906},[900,1938,1939,1943,1946,1949,1951,1954],{"class":956,"line":1029},[900,1940,1942],{"class":1941},"saJyd","    \"",[900,1944,1043],{"class":1945},"s_W10",[900,1947,1948],{"class":1941},"\"",[900,1950,1205],{"class":1003},[900,1952,1953],{"class":1124}," true",[900,1955,1128],{"class":906},[900,1957,1958,1960,1963,1965,1967,1970,1973,1975],{"class":956,"line":1049},[900,1959,1942],{"class":1941},[900,1961,1962],{"class":1945},"date",[900,1964,1948],{"class":1941},[900,1966,1205],{"class":1003},[900,1968,1969],{"class":975}," \"",[900,1971,1972],{"class":979},"current date",[900,1974,1948],{"class":975},[900,1976,1128],{"class":906},[900,1978,1979,1981,1983,1985,1987],{"class":956,"line":1076},[900,1980,1942],{"class":1941},[900,1982,1066],{"class":1945},[900,1984,1948],{"class":1941},[900,1986,1205],{"class":1003},[900,1988,1989],{"class":906}," {\n",[900,1991,1992,1995,1997,1999,2001,2004],{"class":956,"line":1100},[900,1993,1994],{"class":1941},"        \"",[900,1996,1373],{"class":1945},[900,1998,1948],{"class":1941},[900,2000,1205],{"class":1003},[900,2002,2003],{"class":1017}," 6",[900,2005,1128],{"class":906},[900,2007,2008,2010,2012,2014,2016,2019],{"class":956,"line":1192},[900,2009,1994],{"class":1941},[900,2011,1377],{"class":1945},[900,2013,1948],{"class":1941},[900,2015,1205],{"class":1003},[900,2017,2018],{"class":1017}," 2",[900,2020,1128],{"class":906},[900,2022,2023,2025,2027,2029,2031,2034],{"class":956,"line":1198},[900,2024,1994],{"class":1941},[900,2026,1071],{"class":1945},[900,2028,1948],{"class":1941},[900,2030,1205],{"class":1003},[900,2032,2033],{"class":1017}," 4",[900,2035,1128],{"class":906},[900,2037,2038,2040,2042,2044,2046],{"class":956,"line":1213},[900,2039,1994],{"class":1941},[900,2041,1095],{"class":1945},[900,2043,1948],{"class":1941},[900,2045,1205],{"class":1003},[900,2047,2048],{"class":906}," [\n",[900,2050,2051],{"class":956,"line":1231},[900,2052,1195],{"class":906},[900,2054,2055,2058,2060,2062,2064,2066],{"class":956,"line":1248},[900,2056,2057],{"class":1941},"                \"",[900,2059,1671],{"class":1945},[900,2061,1948],{"class":1941},[900,2063,1205],{"class":1003},[900,2065,1208],{"class":1017},[900,2067,1128],{"class":906},[900,2069,2070,2072,2074,2076,2078,2080,2082,2084],{"class":956,"line":1265},[900,2071,2057],{"class":1941},[900,2073,1685],{"class":1945},[900,2075,1948],{"class":1941},[900,2077,1205],{"class":1003},[900,2079,1969],{"class":975},[900,2081,1223],{"class":979},[900,2083,1948],{"class":975},[900,2085,1128],{"class":906},[900,2087,2088,2090,2092,2094,2096,2098,2100,2102],{"class":956,"line":1286},[900,2089,2057],{"class":1941},[900,2091,1700],{"class":1945},[900,2093,1948],{"class":1941},[900,2095,1205],{"class":1003},[900,2097,1969],{"class":975},[900,2099,1241],{"class":979},[900,2101,1948],{"class":975},[900,2103,1128],{"class":906},[900,2105,2106,2108,2110,2112,2114,2116,2118,2120],{"class":956,"line":1302},[900,2107,2057],{"class":1941},[900,2109,1714],{"class":1945},[900,2111,1948],{"class":1941},[900,2113,1205],{"class":1003},[900,2115,1969],{"class":975},[900,2117,1258],{"class":979},[900,2119,1948],{"class":975},[900,2121,1128],{"class":906},[900,2123,2124,2126,2128,2130,2132,2134,2136,2138,2140],{"class":956,"line":1319},[900,2125,2057],{"class":1941},[900,2127,1733],{"class":1945},[900,2129,1948],{"class":1941},[900,2131,1205],{"class":1003},[900,2133,1273],{"class":906},[900,2135,1948],{"class":975},[900,2137,1278],{"class":979},[900,2139,1948],{"class":975},[900,2141,1283],{"class":906},[900,2143,2144,2146,2148,2150,2152,2154,2156,2158],{"class":956,"line":1332},[900,2145,2057],{"class":1941},[900,2147,875],{"class":1945},[900,2149,1948],{"class":1941},[900,2151,1205],{"class":1003},[900,2153,1969],{"class":975},[900,2155,875],{"class":979},[900,2157,1948],{"class":975},[900,2159,1128],{"class":906},[900,2161,2162,2164,2166,2168,2170,2172,2174,2176],{"class":956,"line":1347},[900,2163,2057],{"class":1941},[900,2165,1764],{"class":1945},[900,2167,1948],{"class":1941},[900,2169,1205],{"class":1003},[900,2171,1969],{"class":975},[900,2173,1312],{"class":979},[900,2175,1948],{"class":975},[900,2177,1128],{"class":906},[900,2179,2180,2182,2184,2186,2188,2190],{"class":956,"line":1353},[900,2181,2057],{"class":1941},[900,2183,1778],{"class":1945},[900,2185,1948],{"class":1941},[900,2187,1205],{"class":1003},[900,2189,1327],{"class":1017},[900,2191,1128],{"class":906},[900,2193,2194,2196,2198,2200,2202,2204,2206],{"class":956,"line":1359},[900,2195,2057],{"class":1941},[900,2197,1792],{"class":1945},[900,2199,1948],{"class":1941},[900,2201,1205],{"class":1003},[900,2203,1969],{"class":975},[900,2205,1342],{"class":979},[900,2207,2208],{"class":975},"\"\n",[900,2210,2211],{"class":956,"line":1365},[900,2212,1350],{"class":906},[900,2214,2216],{"class":956,"line":2215},23,[900,2217,1356],{"class":906},[900,2219,2221],{"class":956,"line":2220},24,[900,2222,1362],{"class":906},[900,2224,2226],{"class":956,"line":2225},25,[900,2227,1103],{"class":906},[856,2229,2230,2231,890],{},"Standard authentication, shared validation, and common management-route errors\nare documented on the\n",[915,2232,2234],{"href":2233},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement#service","introduction page",[856,2236,2237],{},"The route-specific failures for listing are the following:",[856,2239,2240,2241,2244,2245,2248,2249,2252,2253,890],{},"If you call the action through ",[863,2242,2243],{},"POST \u002Fapi\u002Fmanage\u002Flist-metadata",", the controller\nreturns ",[863,2246,2247],{},"Bad Request"," because the ",[863,2250,2251],{},"list-metadata"," branch explicitly rejects any\nmethod other than ",[863,2254,903],{},[856,2256,2257,2258,2260,2261,2264,2265,890],{},"If ",[863,2259,889],{}," fails, the controller returns ",[863,2262,2263],{},"500 Internal Server Error","\nand forwards the helper reason. In the current implementation that reason is\n",[863,2266,1442],{},[856,2268,2269],{},"Those route-specific failure responses look like this:",[946,2271,2273],{"className":896,"code":2272,"language":897,"meta":898,"style":898},"HTTP\u002F1.1 400 Bad Request\nContent-Type: application\u002Fjson; charset=utf-8\n\n{\n    \"ok\": false,\n    \"date\": \"current date\",\n    \"reason\": \"Bad Request\"\n}\n",[863,2274,2275,2289,2297,2301,2305,2320,2338,2355],{"__ignoreMap":898},[900,2276,2277,2279,2281,2283,2286],{"class":956,"line":957},[900,2278,1882],{"class":995},[900,2280,1885],{"class":906},[900,2282,1911],{"class":1017},[900,2284,2285],{"class":1017}," 400",[900,2287,2288],{"class":979}," Bad Request\n",[900,2290,2291,2293,2295],{"class":956,"line":986},[900,2292,1923],{"class":1922},[900,2294,1205],{"class":995},[900,2296,1928],{"class":979},[900,2298,2299],{"class":956,"line":992},[900,2300,989],{"emptyLinePlaceholder":8},[900,2302,2303],{"class":956,"line":1024},[900,2304,1116],{"class":906},[900,2306,2307,2309,2311,2313,2315,2318],{"class":956,"line":1029},[900,2308,1942],{"class":1941},[900,2310,1043],{"class":1945},[900,2312,1948],{"class":1941},[900,2314,1205],{"class":1003},[900,2316,2317],{"class":1124}," false",[900,2319,1128],{"class":906},[900,2321,2322,2324,2326,2328,2330,2332,2334,2336],{"class":956,"line":1049},[900,2323,1942],{"class":1941},[900,2325,1962],{"class":1945},[900,2327,1948],{"class":1941},[900,2329,1205],{"class":1003},[900,2331,1969],{"class":975},[900,2333,1972],{"class":979},[900,2335,1948],{"class":975},[900,2337,1128],{"class":906},[900,2339,2340,2342,2345,2347,2349,2351,2353],{"class":956,"line":1076},[900,2341,1942],{"class":1941},[900,2343,2344],{"class":1945},"reason",[900,2346,1948],{"class":1941},[900,2348,1205],{"class":1003},[900,2350,1969],{"class":975},[900,2352,2247],{"class":979},[900,2354,2208],{"class":975},[900,2356,2357],{"class":956,"line":1100},[900,2358,1103],{"class":906},[946,2360,2362],{"className":896,"code":2361,"language":897,"meta":898,"style":898},"HTTP\u002F1.1 500 Internal Server Error\nContent-Type: application\u002Fjson; charset=utf-8\n\n{\n    \"ok\": false,\n    \"date\": \"current date\",\n    \"reason\": \"Server error\"\n}\n",[863,2363,2364,2378,2386,2390,2394,2408,2426,2442],{"__ignoreMap":898},[900,2365,2366,2368,2370,2372,2375],{"class":956,"line":957},[900,2367,1882],{"class":995},[900,2369,1885],{"class":906},[900,2371,1911],{"class":1017},[900,2373,2374],{"class":1017}," 500",[900,2376,2377],{"class":979}," Internal Server Error\n",[900,2379,2380,2382,2384],{"class":956,"line":986},[900,2381,1923],{"class":1922},[900,2383,1205],{"class":995},[900,2385,1928],{"class":979},[900,2387,2388],{"class":956,"line":992},[900,2389,989],{"emptyLinePlaceholder":8},[900,2391,2392],{"class":956,"line":1024},[900,2393,1116],{"class":906},[900,2395,2396,2398,2400,2402,2404,2406],{"class":956,"line":1029},[900,2397,1942],{"class":1941},[900,2399,1043],{"class":1945},[900,2401,1948],{"class":1941},[900,2403,1205],{"class":1003},[900,2405,2317],{"class":1124},[900,2407,1128],{"class":906},[900,2409,2410,2412,2414,2416,2418,2420,2422,2424],{"class":956,"line":1049},[900,2411,1942],{"class":1941},[900,2413,1962],{"class":1945},[900,2415,1948],{"class":1941},[900,2417,1205],{"class":1003},[900,2419,1969],{"class":975},[900,2421,1972],{"class":979},[900,2423,1948],{"class":975},[900,2425,1128],{"class":906},[900,2427,2428,2430,2432,2434,2436,2438,2440],{"class":956,"line":1076},[900,2429,1942],{"class":1941},[900,2431,2344],{"class":1945},[900,2433,1948],{"class":1941},[900,2435,1205],{"class":1003},[900,2437,1969],{"class":975},[900,2439,1442],{"class":979},[900,2441,2208],{"class":975},[900,2443,2444],{"class":956,"line":1100},[900,2445,1103],{"class":906},[1453,2447,2449],{"id":2448},"rate-limits","Rate Limits",[856,2451,2452],{},"The listing endpoint does not have a dedicated operation limiter. It only uses\nthe following configuration:",[881,2454,2455],{},[884,2456,2457,2460,2461,2464,2465,2468,2474,2475],{},[863,2458,2459],{},"rate_limiters.apiTokensLimiters.generalUnionLimiter"," - A ",[863,2462,2463],{},"burstLimiter"," and\na ",[863,2466,2467],{},"slowLimiter",[915,2469,2473],{"href":2470,"rel":2471},"https:\u002F\u002Fgithub.com\u002Fanimir\u002Fnode-rate-limiter-flexible\u002Fwiki\u002FRateLimiterUnion",[2472],"nofollow","union limiter",".\nIt enforces no more than one request per second, and only 50 per minute. No\nconsecutive triggers in this limiter are provided, and triggering it again\nwill result in a permanent ban.\n",[881,2476,2477,2482],{},[884,2478,2479,2481],{},[863,2480,2463],{}," - Will block the client for 15 minutes.",[884,2483,2484,2486],{},[863,2485,2467],{}," - Will block for 1 hour.",[868,2488,2489],{},[856,2490,2491,2492,2494,2495,2498],{},"Unlike the other management actions, the ",[863,2493,2251],{}," branch does not call\n",[863,2496,2497],{},"resetApiUnionLimiters"," on success. The general union limiter is not restarted\nafter a successful token listing request.",[919,2500,2502],{"id":2501},"listing-process","Listing Process",[856,2504,2505],{},"Token listing reads the current valid tokens for one user without touching any\nindividual token state.",[930,2507,2509],{"id":2508},"count-the-users-token-inventory","Count the user's token inventory",[856,2511,2512,2513,2516],{},"The helper starts by calling ",[863,2514,2515],{},"totalUserTokensCount(userId)",". That returns the\nnumber of valid tokens, invalid tokens, and the total token count for the user.",[930,2518,2520],{"id":2519},"query-the-valid-token-rows","Query the valid token rows",[856,2522,2523,2524,2527,2528,2531,2532,2534],{},"After counting, the helper queries ",[863,2525,2526],{},"api_tokens"," for rows where ",[863,2529,2530],{},"user_id = ?","\nand ",[863,2533,865],{},". The result includes only metadata fields needed for listing\nand later dashboard actions.",[930,2536,2538],{"id":2537},"normalize-the-ip-restriction-field","Normalize the IP restriction field",[856,2540,2541,2542,2544,2545,2548,2549,2551],{},"If valid rows exist, the helper maps each row and parses\n",[863,2543,1733],{}," from its stored JSON value. That means the response\nreturns ",[863,2546,2547],{},"string[]"," for restricted tokens and ",[863,2550,1725],{}," for unrestricted tokens.",[930,2553,2555],{"id":2554},"return-the-combined-overview","Return the combined overview",[856,2557,2558,2559,2561],{},"The final payload returns the user-wide counts plus the ",[863,2560,1095],{}," array when\nvalid rows exist. This gives the client a single response that can power a\ndashboard overview and later management actions.",[919,2563,2565],{"id":2564},"configuration-reference","Configuration Reference",[856,2567,2568],{},"This configuration key controls token listing throttling in the service.",[930,2570,2572],{"id":2571},"rate-limiters","Rate limiters",[856,2574,2575],{},"The listing flow relies on the following limiter configuration:",[1526,2577,2578,2587],{},[1529,2579,2580],{},[1532,2581,2582,2585],{},[1535,2583,2584],{},"Limiter",[1535,2586,1543],{},[1545,2588,2589],{},[1532,2590,2591,2595],{},[1550,2592,2593],{},[863,2594,2459],{},[1550,2596,2597],{},"General burst limiter for token listing requests",[2599,2600,2601],"style",{},"html pre.shiki code .sZ328, html code.shiki .sZ328{--shiki-light:#AF00DB;--shiki-default:#AF00DB;--shiki-dark:#FF79C6}html pre.shiki code .sDd4n, html code.shiki .sDd4n{--shiki-light:#000000;--shiki-default:#000000;--shiki-dark:#F8F8F2}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 .sl46w, html code.shiki .sl46w{--shiki-light:#0000FF;--shiki-default:#0000FF;--shiki-dark:#FF79C6}html pre.shiki code .s3JHE, html code.shiki .s3JHE{--shiki-light:#0070C1;--shiki-default:#0070C1;--shiki-dark:#F8F8F2}html pre.shiki code .saOXh, html code.shiki .saOXh{--shiki-light:#000000;--shiki-default:#000000;--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 .spgvN, html code.shiki .spgvN{--shiki-light:#098658;--shiki-default:#098658;--shiki-dark:#BD93F9}html pre.shiki code .sjR7W, html code.shiki .sjR7W{--shiki-light:#0000FF;--shiki-default:#0000FF;--shiki-dark:#BD93F9}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 .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 .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 .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 pre.shiki code .scd-l, html code.shiki .scd-l{--shiki-light:#800000;--shiki-default:#800000;--shiki-dark:#FF79C6}html pre.shiki code .saJyd, html code.shiki .saJyd{--shiki-light:#0451A5;--shiki-default:#0451A5;--shiki-dark:#8BE9FE}html pre.shiki code .s_W10, html code.shiki .s_W10{--shiki-light:#0451A5;--shiki-default:#0451A5;--shiki-dark:#8BE9FD}",{"title":898,"searchDepth":986,"depth":986,"links":2603},[2604,2608,2614],{"id":921,"depth":986,"text":922,"children":2605},[2606,2607],{"id":932,"depth":992,"text":933},{"id":1859,"depth":992,"text":1860},{"id":2501,"depth":986,"text":2502,"children":2609},[2610,2611,2612,2613],{"id":2508,"depth":992,"text":2509},{"id":2519,"depth":992,"text":2520},{"id":2537,"depth":992,"text":2538},{"id":2554,"depth":992,"text":2555},{"id":2564,"depth":986,"text":2565,"children":2615},[2616],{"id":2571,"depth":992,"text":2572},"How to fetch the current list of valid tokens for a user.","md","i-lucide-list",{},null,"---\ntitle: Token Listing\ndescription: How to fetch the current list of valid tokens for a user.\nicon: i-lucide-list\n---\n\nToken listing returns a high-level overview of the tokens a user can still use.\nThe response includes user-wide totals and, when valid tokens exist, a list of\nactive token records with their public identifiers and usage metadata.\n\nThe IAM service builds this response in two steps. It first counts every token\nowned by the user, then it queries only the rows where `valid = 1` to build\nthe returned list.\n\n::note\nThe listing response never returns raw API keys. It includes\n`public_identifier` so authenticated clients can perform later management\nactions without exposing the raw secret.\n::\n\nYou can fetch the token list in 2 ways:\n\n- Directly calling `getAllValidTokensList`.\n- Calling the `GET \u002Fapi\u002Fmanage\u002Flist-metadata`{lang=\"http\"} endpoint from an\n\tauthenticated client.\n\n::note\nFollow the [Creating Tokens](\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fcreation) docs to create\na token first before attempting to list tokens.\n::\n\n## Listing Tokens\n\nYou can list tokens either directly in the library or through the authenticated\nroute. Unlike the other management actions, token listing does not use\n`privateActionManager`.\n\n### Using the library\n\nTo fetch the current valid token list *directly*, you call\n`getAllValidTokensList`. This function counts all user tokens and then returns\nthe metadata for the subset that is still valid.\n\n```ts [example.ts]\nimport { getAllValidTokensList } from '@riavzon\u002Fauth'\n\nconst results = await getAllValidTokensList(1234)\n\nif (results.ok) {\n\tconsole.log(results.data.totalValidTokens)\n\tconsole.log(results.data.tokenList)\n}\n```\n\nOn success you get back an object with:\n\n```ts\n{\n\tok: true,\n\tdate: new Date().toISOString(),\n\tdata: {\n\t\ttotal: 6,\n\t\ttotalInvalidTokens: 2,\n\t\ttotalValidTokens: 4,\n\t\ttokenList: [\n\t\t\t{\n\t\t\t\tid: 12,\n\t\t\t\tname: 'server token',\n\t\t\t\tcreated_at: '2026-05-01T10:00:00.000Z',\n\t\t\t\texpires_at: '2026-05-01T11:00:00.000Z',\n\t\t\t\trestricted_to_ip_address: ['203.0.113.10'],\n\t\t\t\tpublic_identifier: 'public_identifier',\n\t\t\t\tlast_used: '2026-05-01T10:30:00.000Z',\n\t\t\t\tusage_count: 19,\n\t\t\t\tprivilege_type: 'restricted'\n\t\t\t}\n\t\t]\n\t}\n}\n```\n\nThe `total`, `totalInvalidTokens`, and `totalValidTokens` fields are user-wide.\nThey describe all token rows for the user, not only the `tokenList` array.\n\nIf the user has no valid tokens, the helper still returns `ok: true` with the\ncount fields. In that case `tokenList` is omitted.\n\nOn error, `getAllValidTokensList` returns the catch branch:\n\n```ts\n{\n\tok: false,\n\tdate: new Date().toISOString(),\n\treason: 'Server error'\n}\n```\n\nThis happens when the count query or the valid-token query throws.\n\n#### Signature\n\nThe direct helper exposes the following signature:\n\n```ts\nexport async function getAllValidTokensList(\n\t\tuserId: number\n): Promise\u003CResults\u003CAllValidTokensList>>\n```\n\n#### Parameters\n\nThe listing helper accepts the following parameter:\n\n| Field | Type | Description |\n|---|---|---|\n| `userId` | `number` | The user id whose tokens should be listed. |\n\n#### Return type\n\nThe listing helper returns `Results\u003CAllValidTokensList>`.\n\n`AllValidTokensList` contains the following fields:\n\n| Field | Type | Description |\n|---|---|---|\n| `total` | `number` | The total number of token rows owned by the user. |\n| `totalInvalidTokens` | `number` | The number of invalid token rows owned by the user. |\n| `totalValidTokens` | `number` | The number of valid token rows owned by the user. |\n| `tokenList` | `TokenList[] \\| undefined` | The current list of valid tokens, omitted when no valid rows exist. |\n\n`TokenList` contains the following fields on successful responses:\n\n| Field | Type | Description |\n|---|---|---|\n| `id` | `number` | The internal database id of the token. |\n| `name` | `string` | The token name. |\n| `created_at` | `string` | The creation timestamp. |\n| `expires_at` | `string \\| null` | The expiration timestamp, or `null` when the token does not expire. |\n| `restricted_to_ip_address` | `string[] \\| null` | The current IP restriction list, or `null` when unrestricted. |\n| `public_identifier` | `string` | The public identifier used for later management actions. |\n| `last_used` | `string \\| null` | The last successful usage timestamp. |\n| `usage_count` | `number` | The current usage count. |\n| `privilege_type` | `'demo' \\| 'restricted' \\| 'protected' \\| 'full' \\| 'custom'` | The stored privilege type. |\n\n::warning\nThis action should be performed by a fully authenticated client.\n::\n\n::caution\nThis function only needs a `userId`. It does not verify a token,\n`publicIdentifier`, or caller session for you. Only call it directly in\ntrusted server-side code.\n::\n\n#### `privateActionManager` support\n\nToken listing does not have a `privateActionManager` action. The manager action\ntype only supports `revoke`, `rotate`, `metadata`, `ip-restriction-update`, and\n`privilege-update`.\n\nThat is why the authenticated route calls `getAllValidTokensList` directly\nafter the session checks succeed.\n\n---\n\n### Using the route\n\nLet's say you want to fetch the current valid token list from your\nauthenticated client or BFF.\n\nThe listing route is available at:\n\n```http [request.http]\nGET \u002Fapi\u002Fmanage\u002Flist-metadata HTTP\u002F1.1\n```\n\nThis action is `GET` only. It does not use a request body.\n\nOn success you will get the following response:\n\n```http\nHTTP\u002F1.1 200 OK\nContent-Type: application\u002Fjson; charset=utf-8\n\n{\n\t\"ok\": true,\n\t\"date\": \"current date\",\n\t\"data\": {\n\t\t\"total\": 6,\n\t\t\"totalInvalidTokens\": 2,\n\t\t\"totalValidTokens\": 4,\n\t\t\"tokenList\": [\n\t\t\t{\n\t\t\t\t\"id\": 12,\n\t\t\t\t\"name\": \"server token\",\n\t\t\t\t\"created_at\": \"2026-05-01T10:00:00.000Z\",\n\t\t\t\t\"expires_at\": \"2026-05-01T11:00:00.000Z\",\n\t\t\t\t\"restricted_to_ip_address\": [\"203.0.113.10\"],\n\t\t\t\t\"public_identifier\": \"public_identifier\",\n\t\t\t\t\"last_used\": \"2026-05-01T10:30:00.000Z\",\n\t\t\t\t\"usage_count\": 19,\n\t\t\t\t\"privilege_type\": \"restricted\"\n\t\t\t}\n\t\t]\n\t}\n}\n```\n\nStandard authentication, shared validation, and common management-route errors\nare documented on the\n[introduction page](\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement#service).\n\nThe route-specific failures for listing are the following:\n\nIf you call the action through `POST \u002Fapi\u002Fmanage\u002Flist-metadata`, the controller\nreturns `Bad Request` because the `list-metadata` branch explicitly rejects any\nmethod other than `GET`.\n\nIf `getAllValidTokensList` fails, the controller returns `500 Internal Server Error`\nand forwards the helper reason. In the current implementation that reason is\n`Server error`.\n\nThose route-specific failure responses look like this:\n\n```http\nHTTP\u002F1.1 400 Bad Request\nContent-Type: application\u002Fjson; charset=utf-8\n\n{\n\t\"ok\": false,\n\t\"date\": \"current date\",\n\t\"reason\": \"Bad Request\"\n}\n```\n\n```http\nHTTP\u002F1.1 500 Internal Server Error\nContent-Type: application\u002Fjson; charset=utf-8\n\n{\n\t\"ok\": false,\n\t\"date\": \"current date\",\n\t\"reason\": \"Server error\"\n}\n```\n\n#### Rate Limits\n\nThe listing endpoint does not have a dedicated operation limiter. It only uses\nthe following configuration:\n\n- `rate_limiters.apiTokensLimiters.generalUnionLimiter` - A `burstLimiter` and\n\ta `slowLimiter`\n\t[union limiter](https:\u002F\u002Fgithub.com\u002Fanimir\u002Fnode-rate-limiter-flexible\u002Fwiki\u002FRateLimiterUnion).\n\tIt enforces no more than one request per second, and only 50 per minute. No\n\tconsecutive triggers in this limiter are provided, and triggering it again\n\twill result in a permanent ban.\n\t- `burstLimiter` - Will block the client for 15 minutes.\n\t- `slowLimiter` - Will block for 1 hour.\n\n::note\nUnlike the other management actions, the `list-metadata` branch does not call\n`resetApiUnionLimiters` on success. The general union limiter is not restarted\nafter a successful token listing request.\n::\n\n## Listing Process\n\nToken listing reads the current valid tokens for one user without touching any\nindividual token state.\n\n### Count the user's token inventory\n\nThe helper starts by calling `totalUserTokensCount(userId)`. That returns the\nnumber of valid tokens, invalid tokens, and the total token count for the user.\n\n### Query the valid token rows\n\nAfter counting, the helper queries `api_tokens` for rows where `user_id = ?`\nand `valid = 1`. The result includes only metadata fields needed for listing\nand later dashboard actions.\n\n### Normalize the IP restriction field\n\nIf valid rows exist, the helper maps each row and parses\n`restricted_to_ip_address` from its stored JSON value. That means the response\nreturns `string[]` for restricted tokens and `null` for unrestricted tokens.\n\n### Return the combined overview\n\nThe final payload returns the user-wide counts plus the `tokenList` array when\nvalid rows exist. This gives the client a single response that can power a\ndashboard overview and later management actions.\n\n## Configuration Reference\n\nThis configuration key controls token listing throttling in the service.\n\n### Rate limiters\n\nThe listing flow relies on the following limiter configuration:\n\n| Limiter | Description |\n|---|---|\n| `rate_limiters.apiTokensLimiters.generalUnionLimiter` | General burst limiter for token listing requests |\n",{"title":207,"description":2617},"LvbNeL4ZYKLUJtwN8mhNla7lep_VfpI3877jpk_8MXw",[2626,2627],{"title":203,"path":204,"stem":205,"children":-1},{"title":147,"path":211,"stem":212,"children":-1},{"id":851,"title":207,"body":2629,"description":2617,"extension":2618,"icon":2619,"meta":4013,"module":2621,"navigation":8,"path":208,"rawbody":2622,"seo":4014,"stem":209,"__hash__":2624},{"type":853,"value":2630,"toc":3998},[2631,2633,2637,2643,2645,2659,2665,2667,2671,2673,2679,2789,2791,2991,3001,3007,3011,3055,3057,3059,3061,3103,3105,3107,3133,3135,3139,3143,3205,3209,3335,3339,3347,3351,3365,3369,3371,3373,3375,3377,3393,3397,3399,3703,3707,3709,3719,3727,3729,3813,3897,3899,3901,3924,3932,3934,3936,3938,3942,3944,3952,3954,3962,3964,3968,3970,3972,3974,3976,3996],[856,2632,858],{},[856,2634,861,2635,866],{},[863,2636,865],{},[868,2638,2639],{},[856,2640,872,2641,876],{},[863,2642,875],{},[856,2644,879],{},[881,2646,2647,2651],{},[884,2648,886,2649,890],{},[863,2650,889],{},[884,2652,893,2653,908],{},[863,2654,2655,2657],{"className":896,"language":897,"style":898},[900,2656,903],{"class":902},[900,2658,907],{"class":906},[868,2660,2661],{},[856,2662,913,2663,917],{},[915,2664,173],{"href":174},[919,2666,922],{"id":921},[856,2668,925,2669,890],{},[863,2670,928],{},[930,2672,933],{"id":932},[856,2674,936,2675,941,2677,944],{},[938,2676,940],{},[863,2678,889],{},[946,2680,2681],{"className":948,"code":949,"filename":950,"language":951,"meta":898,"style":898},[863,2682,2683,2701,2705,2723,2727,2741,2763,2785],{"__ignoreMap":898},[900,2684,2685,2687,2689,2691,2693,2695,2697,2699],{"class":956,"line":957},[900,2686,960],{"class":902},[900,2688,963],{"class":906},[900,2690,889],{"class":966},[900,2692,969],{"class":906},[900,2694,972],{"class":902},[900,2696,976],{"class":975},[900,2698,980],{"class":979},[900,2700,983],{"class":975},[900,2702,2703],{"class":956,"line":986},[900,2704,989],{"emptyLinePlaceholder":8},[900,2706,2707,2709,2711,2713,2715,2717,2719,2721],{"class":956,"line":992},[900,2708,996],{"class":995},[900,2710,1000],{"class":999},[900,2712,1004],{"class":1003},[900,2714,1007],{"class":902},[900,2716,1011],{"class":1010},[900,2718,1014],{"class":906},[900,2720,1018],{"class":1017},[900,2722,1021],{"class":906},[900,2724,2725],{"class":956,"line":1024},[900,2726,989],{"emptyLinePlaceholder":8},[900,2728,2729,2731,2733,2735,2737,2739],{"class":956,"line":1029},[900,2730,1032],{"class":902},[900,2732,1035],{"class":906},[900,2734,1038],{"class":966},[900,2736,890],{"class":906},[900,2738,1043],{"class":966},[900,2740,1046],{"class":906},[900,2742,2743,2745,2747,2749,2751,2753,2755,2757,2759,2761],{"class":956,"line":1049},[900,2744,1052],{"class":966},[900,2746,890],{"class":906},[900,2748,1057],{"class":1010},[900,2750,1014],{"class":906},[900,2752,1038],{"class":966},[900,2754,890],{"class":906},[900,2756,1066],{"class":966},[900,2758,890],{"class":906},[900,2760,1071],{"class":966},[900,2762,1021],{"class":906},[900,2764,2765,2767,2769,2771,2773,2775,2777,2779,2781,2783],{"class":956,"line":1076},[900,2766,1052],{"class":966},[900,2768,890],{"class":906},[900,2770,1057],{"class":1010},[900,2772,1014],{"class":906},[900,2774,1038],{"class":966},[900,2776,890],{"class":906},[900,2778,1066],{"class":966},[900,2780,890],{"class":906},[900,2782,1095],{"class":966},[900,2784,1021],{"class":906},[900,2786,2787],{"class":956,"line":1100},[900,2788,1103],{"class":906},[856,2790,1106],{},[946,2792,2793],{"className":948,"code":1109,"language":951,"meta":898,"style":898},[863,2794,2795,2799,2807,2821,2825,2833,2841,2849,2853,2857,2867,2881,2895,2909,2925,2939,2953,2963,2975,2979,2983,2987],{"__ignoreMap":898},[900,2796,2797],{"class":956,"line":957},[900,2798,1116],{"class":906},[900,2800,2801,2803,2805],{"class":956,"line":986},[900,2802,1121],{"class":906},[900,2804,1125],{"class":1124},[900,2806,1128],{"class":906},[900,2808,2809,2811,2813,2815,2817,2819],{"class":956,"line":992},[900,2810,1133],{"class":906},[900,2812,1137],{"class":1136},[900,2814,1140],{"class":1010},[900,2816,1143],{"class":906},[900,2818,1146],{"class":1010},[900,2820,1149],{"class":906},[900,2822,2823],{"class":956,"line":1024},[900,2824,1154],{"class":906},[900,2826,2827,2829,2831],{"class":956,"line":1029},[900,2828,1159],{"class":906},[900,2830,1162],{"class":1017},[900,2832,1128],{"class":906},[900,2834,2835,2837,2839],{"class":956,"line":1049},[900,2836,1169],{"class":906},[900,2838,1172],{"class":1017},[900,2840,1128],{"class":906},[900,2842,2843,2845,2847],{"class":956,"line":1076},[900,2844,1179],{"class":906},[900,2846,1182],{"class":1017},[900,2848,1128],{"class":906},[900,2850,2851],{"class":956,"line":1100},[900,2852,1189],{"class":906},[900,2854,2855],{"class":956,"line":1192},[900,2856,1195],{"class":906},[900,2858,2859,2861,2863,2865],{"class":956,"line":1198},[900,2860,1201],{"class":966},[900,2862,1205],{"class":1204},[900,2864,1208],{"class":1017},[900,2866,1128],{"class":906},[900,2868,2869,2871,2873,2875,2877,2879],{"class":956,"line":1213},[900,2870,1216],{"class":966},[900,2872,1205],{"class":1204},[900,2874,976],{"class":975},[900,2876,1223],{"class":979},[900,2878,1226],{"class":975},[900,2880,1128],{"class":906},[900,2882,2883,2885,2887,2889,2891,2893],{"class":956,"line":1231},[900,2884,1234],{"class":966},[900,2886,1205],{"class":1204},[900,2888,976],{"class":975},[900,2890,1241],{"class":979},[900,2892,1226],{"class":975},[900,2894,1128],{"class":906},[900,2896,2897,2899,2901,2903,2905,2907],{"class":956,"line":1248},[900,2898,1251],{"class":966},[900,2900,1205],{"class":1204},[900,2902,976],{"class":975},[900,2904,1258],{"class":979},[900,2906,1226],{"class":975},[900,2908,1128],{"class":906},[900,2910,2911,2913,2915,2917,2919,2921,2923],{"class":956,"line":1265},[900,2912,1268],{"class":966},[900,2914,1205],{"class":1204},[900,2916,1273],{"class":906},[900,2918,1226],{"class":975},[900,2920,1278],{"class":979},[900,2922,1226],{"class":975},[900,2924,1283],{"class":906},[900,2926,2927,2929,2931,2933,2935,2937],{"class":956,"line":1286},[900,2928,1289],{"class":966},[900,2930,1205],{"class":1204},[900,2932,976],{"class":975},[900,2934,875],{"class":979},[900,2936,1226],{"class":975},[900,2938,1128],{"class":906},[900,2940,2941,2943,2945,2947,2949,2951],{"class":956,"line":1302},[900,2942,1305],{"class":966},[900,2944,1205],{"class":1204},[900,2946,976],{"class":975},[900,2948,1312],{"class":979},[900,2950,1226],{"class":975},[900,2952,1128],{"class":906},[900,2954,2955,2957,2959,2961],{"class":956,"line":1319},[900,2956,1322],{"class":966},[900,2958,1205],{"class":1204},[900,2960,1327],{"class":1017},[900,2962,1128],{"class":906},[900,2964,2965,2967,2969,2971,2973],{"class":956,"line":1332},[900,2966,1335],{"class":966},[900,2968,1205],{"class":1204},[900,2970,976],{"class":975},[900,2972,1342],{"class":979},[900,2974,983],{"class":975},[900,2976,2977],{"class":956,"line":1347},[900,2978,1350],{"class":906},[900,2980,2981],{"class":956,"line":1353},[900,2982,1356],{"class":906},[900,2984,2985],{"class":956,"line":1359},[900,2986,1362],{"class":906},[900,2988,2989],{"class":956,"line":1365},[900,2990,1103],{"class":906},[856,2992,1370,2993,1374,2995,1378,2997,1381,2999,1384],{},[863,2994,1373],{},[863,2996,1377],{},[863,2998,1071],{},[863,3000,1095],{},[856,3002,1387,3003,1391,3005,1394],{},[863,3004,1390],{},[863,3006,1095],{},[856,3008,1397,3009,1400],{},[863,3010,889],{},[946,3012,3013],{"className":948,"code":1403,"language":951,"meta":898,"style":898},[863,3014,3015,3019,3027,3041,3051],{"__ignoreMap":898},[900,3016,3017],{"class":956,"line":957},[900,3018,1116],{"class":906},[900,3020,3021,3023,3025],{"class":956,"line":986},[900,3022,1121],{"class":906},[900,3024,1416],{"class":1124},[900,3026,1128],{"class":906},[900,3028,3029,3031,3033,3035,3037,3039],{"class":956,"line":992},[900,3030,1133],{"class":906},[900,3032,1137],{"class":1136},[900,3034,1140],{"class":1010},[900,3036,1143],{"class":906},[900,3038,1146],{"class":1010},[900,3040,1149],{"class":906},[900,3042,3043,3045,3047,3049],{"class":956,"line":1024},[900,3044,1437],{"class":906},[900,3046,1226],{"class":975},[900,3048,1442],{"class":979},[900,3050,983],{"class":975},[900,3052,3053],{"class":956,"line":1029},[900,3054,1103],{"class":906},[856,3056,1451],{},[1453,3058,1456],{"id":1455},[856,3060,1459],{},[946,3062,3063],{"className":948,"code":1462,"language":951,"meta":898,"style":898},[863,3064,3065,3077,3085],{"__ignoreMap":898},[900,3066,3067,3069,3071,3073,3075],{"class":956,"line":957},[900,3068,1469],{"class":902},[900,3070,1472],{"class":995},[900,3072,1475],{"class":995},[900,3074,1011],{"class":1010},[900,3076,1480],{"class":906},[900,3078,3079,3081,3083],{"class":956,"line":986},[900,3080,1486],{"class":1485},[900,3082,1205],{"class":1003},[900,3084,1492],{"class":1491},[900,3086,3087,3089,3091,3093,3095,3097,3099,3101],{"class":956,"line":992},[900,3088,1497],{"class":906},[900,3090,1205],{"class":1003},[900,3092,1502],{"class":1491},[900,3094,1505],{"class":906},[900,3096,1509],{"class":1508},[900,3098,1505],{"class":906},[900,3100,1514],{"class":1508},[900,3102,1517],{"class":906},[1453,3104,1521],{"id":1520},[856,3106,1524],{},[1526,3108,3109,3119],{},[1529,3110,3111],{},[1532,3112,3113,3115,3117],{},[1535,3114,1537],{},[1535,3116,1540],{},[1535,3118,1543],{},[1545,3120,3121],{},[1532,3122,3123,3127,3131],{},[1550,3124,3125],{},[863,3126,1554],{},[1550,3128,3129],{},[863,3130,1559],{},[1550,3132,1562],{},[1453,3134,1566],{"id":1565},[856,3136,1569,3137,890],{},[863,3138,1572],{},[856,3140,3141,1577],{},[863,3142,1514],{},[1526,3144,3145,3155],{},[1529,3146,3147],{},[1532,3148,3149,3151,3153],{},[1535,3150,1537],{},[1535,3152,1540],{},[1535,3154,1543],{},[1545,3156,3157,3169,3181,3193],{},[1532,3158,3159,3163,3167],{},[1550,3160,3161],{},[863,3162,1373],{},[1550,3164,3165],{},[863,3166,1559],{},[1550,3168,1604],{},[1532,3170,3171,3175,3179],{},[1550,3172,3173],{},[863,3174,1377],{},[1550,3176,3177],{},[863,3178,1559],{},[1550,3180,1617],{},[1532,3182,3183,3187,3191],{},[1550,3184,3185],{},[863,3186,1071],{},[1550,3188,3189],{},[863,3190,1559],{},[1550,3192,1630],{},[1532,3194,3195,3199,3203],{},[1550,3196,3197],{},[863,3198,1095],{},[1550,3200,3201],{},[863,3202,1641],{},[1550,3204,1644],{},[856,3206,3207,1650],{},[863,3208,1649],{},[1526,3210,3211,3221],{},[1529,3212,3213],{},[1532,3214,3215,3217,3219],{},[1535,3216,1537],{},[1535,3218,1540],{},[1535,3220,1543],{},[1545,3222,3223,3235,3247,3259,3273,3287,3299,3311,3323],{},[1532,3224,3225,3229,3233],{},[1550,3226,3227],{},[863,3228,1671],{},[1550,3230,3231],{},[863,3232,1559],{},[1550,3234,1678],{},[1532,3236,3237,3241,3245],{},[1550,3238,3239],{},[863,3240,1685],{},[1550,3242,3243],{},[863,3244,1690],{},[1550,3246,1693],{},[1532,3248,3249,3253,3257],{},[1550,3250,3251],{},[863,3252,1700],{},[1550,3254,3255],{},[863,3256,1690],{},[1550,3258,1707],{},[1532,3260,3261,3265,3269],{},[1550,3262,3263],{},[863,3264,1714],{},[1550,3266,3267],{},[863,3268,1719],{},[1550,3270,1722,3271,1726],{},[863,3272,1725],{},[1532,3274,3275,3279,3283],{},[1550,3276,3277],{},[863,3278,1733],{},[1550,3280,3281],{},[863,3282,1738],{},[1550,3284,1741,3285,1744],{},[863,3286,1725],{},[1532,3288,3289,3293,3297],{},[1550,3290,3291],{},[863,3292,875],{},[1550,3294,3295],{},[863,3296,1690],{},[1550,3298,1757],{},[1532,3300,3301,3305,3309],{},[1550,3302,3303],{},[863,3304,1764],{},[1550,3306,3307],{},[863,3308,1719],{},[1550,3310,1771],{},[1532,3312,3313,3317,3321],{},[1550,3314,3315],{},[863,3316,1778],{},[1550,3318,3319],{},[863,3320,1559],{},[1550,3322,1785],{},[1532,3324,3325,3329,3333],{},[1550,3326,3327],{},[863,3328,1792],{},[1550,3330,3331],{},[863,3332,1797],{},[1550,3334,1800],{},[1802,3336,3337],{},[856,3338,1806],{},[1808,3340,3341],{},[856,3342,1812,3343,1815,3345,1819],{},[863,3344,1554],{},[863,3346,1818],{},[1453,3348,3349,1825],{"id":1822},[863,3350,928],{},[856,3352,1828,3353,1831,3355,1374,3357,1374,3359,1374,3361,1844,3363,890],{},[863,3354,928],{},[863,3356,1834],{},[863,3358,1837],{},[863,3360,1840],{},[863,3362,1843],{},[863,3364,1847],{},[856,3366,1850,3367,1853],{},[863,3368,889],{},[1855,3370],{},[930,3372,1860],{"id":1859},[856,3374,1863],{},[856,3376,1866],{},[946,3378,3379],{"className":896,"code":1869,"filename":1870,"language":897,"meta":898,"style":898},[863,3380,3381],{"__ignoreMap":898},[900,3382,3383,3385,3387,3389,3391],{"class":956,"line":957},[900,3384,903],{"class":902},[900,3386,1879],{"class":906},[900,3388,1882],{"class":995},[900,3390,1885],{"class":906},[900,3392,1888],{"class":1017},[856,3394,1891,3395,1894],{},[863,3396,903],{},[856,3398,1897],{},[946,3400,3401],{"className":896,"code":1900,"language":897,"meta":898,"style":898},[863,3402,3403,3415,3423,3427,3431,3445,3463,3475,3489,3503,3517,3529,3533,3547,3565,3583,3601,3621,3639,3657,3671,3687,3691,3695,3699],{"__ignoreMap":898},[900,3404,3405,3407,3409,3411,3413],{"class":956,"line":957},[900,3406,1882],{"class":995},[900,3408,1885],{"class":906},[900,3410,1911],{"class":1017},[900,3412,1914],{"class":1017},[900,3414,1917],{"class":979},[900,3416,3417,3419,3421],{"class":956,"line":986},[900,3418,1923],{"class":1922},[900,3420,1205],{"class":995},[900,3422,1928],{"class":979},[900,3424,3425],{"class":956,"line":992},[900,3426,989],{"emptyLinePlaceholder":8},[900,3428,3429],{"class":956,"line":1024},[900,3430,1116],{"class":906},[900,3432,3433,3435,3437,3439,3441,3443],{"class":956,"line":1029},[900,3434,1942],{"class":1941},[900,3436,1043],{"class":1945},[900,3438,1948],{"class":1941},[900,3440,1205],{"class":1003},[900,3442,1953],{"class":1124},[900,3444,1128],{"class":906},[900,3446,3447,3449,3451,3453,3455,3457,3459,3461],{"class":956,"line":1049},[900,3448,1942],{"class":1941},[900,3450,1962],{"class":1945},[900,3452,1948],{"class":1941},[900,3454,1205],{"class":1003},[900,3456,1969],{"class":975},[900,3458,1972],{"class":979},[900,3460,1948],{"class":975},[900,3462,1128],{"class":906},[900,3464,3465,3467,3469,3471,3473],{"class":956,"line":1076},[900,3466,1942],{"class":1941},[900,3468,1066],{"class":1945},[900,3470,1948],{"class":1941},[900,3472,1205],{"class":1003},[900,3474,1989],{"class":906},[900,3476,3477,3479,3481,3483,3485,3487],{"class":956,"line":1100},[900,3478,1994],{"class":1941},[900,3480,1373],{"class":1945},[900,3482,1948],{"class":1941},[900,3484,1205],{"class":1003},[900,3486,2003],{"class":1017},[900,3488,1128],{"class":906},[900,3490,3491,3493,3495,3497,3499,3501],{"class":956,"line":1192},[900,3492,1994],{"class":1941},[900,3494,1377],{"class":1945},[900,3496,1948],{"class":1941},[900,3498,1205],{"class":1003},[900,3500,2018],{"class":1017},[900,3502,1128],{"class":906},[900,3504,3505,3507,3509,3511,3513,3515],{"class":956,"line":1198},[900,3506,1994],{"class":1941},[900,3508,1071],{"class":1945},[900,3510,1948],{"class":1941},[900,3512,1205],{"class":1003},[900,3514,2033],{"class":1017},[900,3516,1128],{"class":906},[900,3518,3519,3521,3523,3525,3527],{"class":956,"line":1213},[900,3520,1994],{"class":1941},[900,3522,1095],{"class":1945},[900,3524,1948],{"class":1941},[900,3526,1205],{"class":1003},[900,3528,2048],{"class":906},[900,3530,3531],{"class":956,"line":1231},[900,3532,1195],{"class":906},[900,3534,3535,3537,3539,3541,3543,3545],{"class":956,"line":1248},[900,3536,2057],{"class":1941},[900,3538,1671],{"class":1945},[900,3540,1948],{"class":1941},[900,3542,1205],{"class":1003},[900,3544,1208],{"class":1017},[900,3546,1128],{"class":906},[900,3548,3549,3551,3553,3555,3557,3559,3561,3563],{"class":956,"line":1265},[900,3550,2057],{"class":1941},[900,3552,1685],{"class":1945},[900,3554,1948],{"class":1941},[900,3556,1205],{"class":1003},[900,3558,1969],{"class":975},[900,3560,1223],{"class":979},[900,3562,1948],{"class":975},[900,3564,1128],{"class":906},[900,3566,3567,3569,3571,3573,3575,3577,3579,3581],{"class":956,"line":1286},[900,3568,2057],{"class":1941},[900,3570,1700],{"class":1945},[900,3572,1948],{"class":1941},[900,3574,1205],{"class":1003},[900,3576,1969],{"class":975},[900,3578,1241],{"class":979},[900,3580,1948],{"class":975},[900,3582,1128],{"class":906},[900,3584,3585,3587,3589,3591,3593,3595,3597,3599],{"class":956,"line":1302},[900,3586,2057],{"class":1941},[900,3588,1714],{"class":1945},[900,3590,1948],{"class":1941},[900,3592,1205],{"class":1003},[900,3594,1969],{"class":975},[900,3596,1258],{"class":979},[900,3598,1948],{"class":975},[900,3600,1128],{"class":906},[900,3602,3603,3605,3607,3609,3611,3613,3615,3617,3619],{"class":956,"line":1319},[900,3604,2057],{"class":1941},[900,3606,1733],{"class":1945},[900,3608,1948],{"class":1941},[900,3610,1205],{"class":1003},[900,3612,1273],{"class":906},[900,3614,1948],{"class":975},[900,3616,1278],{"class":979},[900,3618,1948],{"class":975},[900,3620,1283],{"class":906},[900,3622,3623,3625,3627,3629,3631,3633,3635,3637],{"class":956,"line":1332},[900,3624,2057],{"class":1941},[900,3626,875],{"class":1945},[900,3628,1948],{"class":1941},[900,3630,1205],{"class":1003},[900,3632,1969],{"class":975},[900,3634,875],{"class":979},[900,3636,1948],{"class":975},[900,3638,1128],{"class":906},[900,3640,3641,3643,3645,3647,3649,3651,3653,3655],{"class":956,"line":1347},[900,3642,2057],{"class":1941},[900,3644,1764],{"class":1945},[900,3646,1948],{"class":1941},[900,3648,1205],{"class":1003},[900,3650,1969],{"class":975},[900,3652,1312],{"class":979},[900,3654,1948],{"class":975},[900,3656,1128],{"class":906},[900,3658,3659,3661,3663,3665,3667,3669],{"class":956,"line":1353},[900,3660,2057],{"class":1941},[900,3662,1778],{"class":1945},[900,3664,1948],{"class":1941},[900,3666,1205],{"class":1003},[900,3668,1327],{"class":1017},[900,3670,1128],{"class":906},[900,3672,3673,3675,3677,3679,3681,3683,3685],{"class":956,"line":1359},[900,3674,2057],{"class":1941},[900,3676,1792],{"class":1945},[900,3678,1948],{"class":1941},[900,3680,1205],{"class":1003},[900,3682,1969],{"class":975},[900,3684,1342],{"class":979},[900,3686,2208],{"class":975},[900,3688,3689],{"class":956,"line":1365},[900,3690,1350],{"class":906},[900,3692,3693],{"class":956,"line":2215},[900,3694,1356],{"class":906},[900,3696,3697],{"class":956,"line":2220},[900,3698,1362],{"class":906},[900,3700,3701],{"class":956,"line":2225},[900,3702,1103],{"class":906},[856,3704,2230,3705,890],{},[915,3706,2234],{"href":2233},[856,3708,2237],{},[856,3710,2240,3711,2244,3713,2248,3715,2252,3717,890],{},[863,3712,2243],{},[863,3714,2247],{},[863,3716,2251],{},[863,3718,903],{},[856,3720,2257,3721,2260,3723,2264,3725,890],{},[863,3722,889],{},[863,3724,2263],{},[863,3726,1442],{},[856,3728,2269],{},[946,3730,3731],{"className":896,"code":2272,"language":897,"meta":898,"style":898},[863,3732,3733,3745,3753,3757,3761,3775,3793,3809],{"__ignoreMap":898},[900,3734,3735,3737,3739,3741,3743],{"class":956,"line":957},[900,3736,1882],{"class":995},[900,3738,1885],{"class":906},[900,3740,1911],{"class":1017},[900,3742,2285],{"class":1017},[900,3744,2288],{"class":979},[900,3746,3747,3749,3751],{"class":956,"line":986},[900,3748,1923],{"class":1922},[900,3750,1205],{"class":995},[900,3752,1928],{"class":979},[900,3754,3755],{"class":956,"line":992},[900,3756,989],{"emptyLinePlaceholder":8},[900,3758,3759],{"class":956,"line":1024},[900,3760,1116],{"class":906},[900,3762,3763,3765,3767,3769,3771,3773],{"class":956,"line":1029},[900,3764,1942],{"class":1941},[900,3766,1043],{"class":1945},[900,3768,1948],{"class":1941},[900,3770,1205],{"class":1003},[900,3772,2317],{"class":1124},[900,3774,1128],{"class":906},[900,3776,3777,3779,3781,3783,3785,3787,3789,3791],{"class":956,"line":1049},[900,3778,1942],{"class":1941},[900,3780,1962],{"class":1945},[900,3782,1948],{"class":1941},[900,3784,1205],{"class":1003},[900,3786,1969],{"class":975},[900,3788,1972],{"class":979},[900,3790,1948],{"class":975},[900,3792,1128],{"class":906},[900,3794,3795,3797,3799,3801,3803,3805,3807],{"class":956,"line":1076},[900,3796,1942],{"class":1941},[900,3798,2344],{"class":1945},[900,3800,1948],{"class":1941},[900,3802,1205],{"class":1003},[900,3804,1969],{"class":975},[900,3806,2247],{"class":979},[900,3808,2208],{"class":975},[900,3810,3811],{"class":956,"line":1100},[900,3812,1103],{"class":906},[946,3814,3815],{"className":896,"code":2361,"language":897,"meta":898,"style":898},[863,3816,3817,3829,3837,3841,3845,3859,3877,3893],{"__ignoreMap":898},[900,3818,3819,3821,3823,3825,3827],{"class":956,"line":957},[900,3820,1882],{"class":995},[900,3822,1885],{"class":906},[900,3824,1911],{"class":1017},[900,3826,2374],{"class":1017},[900,3828,2377],{"class":979},[900,3830,3831,3833,3835],{"class":956,"line":986},[900,3832,1923],{"class":1922},[900,3834,1205],{"class":995},[900,3836,1928],{"class":979},[900,3838,3839],{"class":956,"line":992},[900,3840,989],{"emptyLinePlaceholder":8},[900,3842,3843],{"class":956,"line":1024},[900,3844,1116],{"class":906},[900,3846,3847,3849,3851,3853,3855,3857],{"class":956,"line":1029},[900,3848,1942],{"class":1941},[900,3850,1043],{"class":1945},[900,3852,1948],{"class":1941},[900,3854,1205],{"class":1003},[900,3856,2317],{"class":1124},[900,3858,1128],{"class":906},[900,3860,3861,3863,3865,3867,3869,3871,3873,3875],{"class":956,"line":1049},[900,3862,1942],{"class":1941},[900,3864,1962],{"class":1945},[900,3866,1948],{"class":1941},[900,3868,1205],{"class":1003},[900,3870,1969],{"class":975},[900,3872,1972],{"class":979},[900,3874,1948],{"class":975},[900,3876,1128],{"class":906},[900,3878,3879,3881,3883,3885,3887,3889,3891],{"class":956,"line":1076},[900,3880,1942],{"class":1941},[900,3882,2344],{"class":1945},[900,3884,1948],{"class":1941},[900,3886,1205],{"class":1003},[900,3888,1969],{"class":975},[900,3890,1442],{"class":979},[900,3892,2208],{"class":975},[900,3894,3895],{"class":956,"line":1100},[900,3896,1103],{"class":906},[1453,3898,2449],{"id":2448},[856,3900,2452],{},[881,3902,3903],{},[884,3904,3905,2460,3907,2464,3909,3911,2474,3914],{},[863,3906,2459],{},[863,3908,2463],{},[863,3910,2467],{},[915,3912,2473],{"href":2470,"rel":3913},[2472],[881,3915,3916,3920],{},[884,3917,3918,2481],{},[863,3919,2463],{},[884,3921,3922,2486],{},[863,3923,2467],{},[868,3925,3926],{},[856,3927,2491,3928,2494,3930,2498],{},[863,3929,2251],{},[863,3931,2497],{},[919,3933,2502],{"id":2501},[856,3935,2505],{},[930,3937,2509],{"id":2508},[856,3939,2512,3940,2516],{},[863,3941,2515],{},[930,3943,2520],{"id":2519},[856,3945,2523,3946,2527,3948,2531,3950,2534],{},[863,3947,2526],{},[863,3949,2530],{},[863,3951,865],{},[930,3953,2538],{"id":2537},[856,3955,2541,3956,2544,3958,2548,3960,2551],{},[863,3957,1733],{},[863,3959,2547],{},[863,3961,1725],{},[930,3963,2555],{"id":2554},[856,3965,2558,3966,2561],{},[863,3967,1095],{},[919,3969,2565],{"id":2564},[856,3971,2568],{},[930,3973,2572],{"id":2571},[856,3975,2575],{},[1526,3977,3978,3986],{},[1529,3979,3980],{},[1532,3981,3982,3984],{},[1535,3983,2584],{},[1535,3985,1543],{},[1545,3987,3988],{},[1532,3989,3990,3994],{},[1550,3991,3992],{},[863,3993,2459],{},[1550,3995,2597],{},[2599,3997,2601],{},{"title":898,"searchDepth":986,"depth":986,"links":3999},[4000,4004,4010],{"id":921,"depth":986,"text":922,"children":4001},[4002,4003],{"id":932,"depth":992,"text":933},{"id":1859,"depth":992,"text":1860},{"id":2501,"depth":986,"text":2502,"children":4005},[4006,4007,4008,4009],{"id":2508,"depth":992,"text":2509},{"id":2519,"depth":992,"text":2520},{"id":2537,"depth":992,"text":2538},{"id":2554,"depth":992,"text":2555},{"id":2564,"depth":986,"text":2565,"children":4011},[4012],{"id":2571,"depth":992,"text":2572},{},{"title":207,"description":2617},1780436287116]