[{"data":1,"prerenderedAt":4446},["ShallowReactive",2],{"navLinks":3,"sidebar_docs_navigation_\u002Fdocs\u002Fiam":64,"navigation":257,"navLinks_footer":837,"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fmetadata_page":850,"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fmetadata_surround":2854,"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fmetadata":2857},{"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":203,"body":852,"description":2846,"extension":2847,"icon":2848,"meta":2849,"module":2850,"navigation":8,"path":204,"rawbody":2851,"seo":2852,"stem":205,"__hash__":2853},"docs\u002Fdocs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F04.metadata.md",{"type":853,"value":854,"toc":2831},"minimark",[855,859,862,868,871,908,917,922,925,930,941,1120,1123,1339,1345,1364,1370,1376,1424,1436,1439,1485,1488,1534,1537,1583,1591,1596,1599,1712,1716,1719,1775,1779,1785,1790,1832,1837,1965,1971,1977,1983,1993,2067,2079,2094,2097,2101,2104,2113,2184,2187,2498,2504,2510,2519,2535,2552,2560,2566,2656,2660,2663,2711,2715,2718,2722,2731,2735,2755,2759,2769,2773,2782,2786,2789,2793,2796,2827],[856,857,858],"p",{},"Metadata returns a snapshot for one API token and a summary of the owning\nuser's token counts. The response combines token-level details, such as usage\nand timestamps, with user-wide totals for valid, invalid, and total tokens.",[856,860,861],{},"The IAM service builds this response in two steps. It first verifies the target\ntoken without consuming usage counters, then it queries the database again to\ncount every token owned by the same user.",[863,864,865],"note",{},[856,866,867],{},"The metadata helper reads the existing token state. It does not rotate,\nrevoke, rename, or update the token.",[856,869,870],{},"You can fetch metadata in 3 ways:",[872,873,874,883,890],"ul",{},[875,876,877,878,882],"li",{},"Directly calling ",[879,880,881],"code",{},"getUserApiKeysMetaData",".",[875,884,885,886,889],{},"Using the ",[879,887,888],{},"privateActionManager"," to validate ownership before fetching.",[875,891,892,893,907],{},"Calling the ",[879,894,898,903],{"className":895,"language":896,"style":897},"language-http shiki shiki-themes light-plus light-plus dracula","http","",[899,900,902],"span",{"class":901},"sZ328","POST",[899,904,906],{"class":905},"sDd4n"," \u002Fapi\u002Fmanage\u002Fmetadata"," endpoint from an\nauthenticated client.",[863,909,910],{},[856,911,912,913,916],{},"Follow the ",[914,915,173],"a",{"href":174}," docs to create\na token first before attempting to fetch its metadata.",[918,919,921],"h2",{"id":920},"fetching-metadata","Fetching Metadata",[856,923,924],{},"You can fetch metadata either directly in the library or through the\nmanager-backed route. The direct helper resolves one token and the owning\nuser's counts, while the route adds ownership validation and authenticated\nrequest protections.",[926,927,929],"h3",{"id":928},"using-the-library","Using the library",[856,931,932,933,937,938,940],{},"To fetch metadata ",[934,935,936],"em",{},"directly",", you call ",[879,939,881],{},". This function\nverifies the token, skips IP checks, skips usage counter updates, and then\nfetches the user's token counts.",[942,943,948],"pre",{"className":944,"code":945,"filename":946,"language":947,"meta":897,"style":897},"language-ts shiki shiki-themes light-plus light-plus dracula","import { getUserApiKeysMetaData } from '@riavzon\u002Fauth'\n\nconst results = await getUserApiKeysMetaData(token, 'restricted')\n\nif (results.ok) {\n    console.log(results.data.tokenMeta.name)\n    console.log(results.data.counts.totalValidTokens)\n}\n","example.ts","ts",[879,949,950,980,986,1028,1033,1053,1085,1114],{"__ignoreMap":897},[899,951,954,957,960,963,966,969,973,977],{"class":952,"line":953},"line",1,[899,955,956],{"class":901},"import",[899,958,959],{"class":905}," { ",[899,961,881],{"class":962},"sjsA6",[899,964,965],{"class":905}," } ",[899,967,968],{"class":901},"from",[899,970,972],{"class":971},"sFkSl"," '",[899,974,976],{"class":975},"sFB1V","@riavzon\u002Fauth",[899,978,979],{"class":971},"'\n",[899,981,983],{"class":952,"line":982},2,[899,984,985],{"emptyLinePlaceholder":8},"\n",[899,987,989,993,997,1001,1004,1008,1011,1014,1017,1020,1023,1025],{"class":952,"line":988},3,[899,990,992],{"class":991},"sl46w","const",[899,994,996],{"class":995},"s3JHE"," results",[899,998,1000],{"class":999},"saOXh"," =",[899,1002,1003],{"class":901}," await",[899,1005,1007],{"class":1006},"sHOzp"," getUserApiKeysMetaData",[899,1009,1010],{"class":905},"(",[899,1012,1013],{"class":962},"token",[899,1015,1016],{"class":905},", ",[899,1018,1019],{"class":971},"'",[899,1021,1022],{"class":975},"restricted",[899,1024,1019],{"class":971},[899,1026,1027],{"class":905},")\n",[899,1029,1031],{"class":952,"line":1030},4,[899,1032,985],{"emptyLinePlaceholder":8},[899,1034,1036,1039,1042,1045,1047,1050],{"class":952,"line":1035},5,[899,1037,1038],{"class":901},"if",[899,1040,1041],{"class":905}," (",[899,1043,1044],{"class":962},"results",[899,1046,882],{"class":905},[899,1048,1049],{"class":962},"ok",[899,1051,1052],{"class":905},") {\n",[899,1054,1056,1059,1061,1064,1066,1068,1070,1073,1075,1078,1080,1083],{"class":952,"line":1055},6,[899,1057,1058],{"class":962},"    console",[899,1060,882],{"class":905},[899,1062,1063],{"class":1006},"log",[899,1065,1010],{"class":905},[899,1067,1044],{"class":962},[899,1069,882],{"class":905},[899,1071,1072],{"class":962},"data",[899,1074,882],{"class":905},[899,1076,1077],{"class":962},"tokenMeta",[899,1079,882],{"class":905},[899,1081,1082],{"class":962},"name",[899,1084,1027],{"class":905},[899,1086,1088,1090,1092,1094,1096,1098,1100,1102,1104,1107,1109,1112],{"class":952,"line":1087},7,[899,1089,1058],{"class":962},[899,1091,882],{"class":905},[899,1093,1063],{"class":1006},[899,1095,1010],{"class":905},[899,1097,1044],{"class":962},[899,1099,882],{"class":905},[899,1101,1072],{"class":962},[899,1103,882],{"class":905},[899,1105,1106],{"class":962},"counts",[899,1108,882],{"class":905},[899,1110,1111],{"class":962},"totalValidTokens",[899,1113,1027],{"class":905},[899,1115,1117],{"class":952,"line":1116},8,[899,1118,1119],{"class":905},"}\n",[856,1121,1122],{},"On success you get back an object with:",[942,1124,1126],{"className":944,"code":1125,"language":947,"meta":897,"style":897},"{\n    ok: true,\n    date: new Date().toISOString(),\n    data: {\n        tokenMeta: {\n            name: 'server token',\n            tokenId: 12,\n            userId: 42,\n            createdAt: '2026-05-01T10:00:00.000Z',\n            expiresAt: '2026-05-01T11:00:00.000Z',\n            lastUsed: '2026-05-01T10:30:00.000Z',\n            usageCount: 19,\n            providedPrivilege: 'restricted'\n        },\n        counts: {\n            totalInvalidTokens: 2,\n            totalValidTokens: 4,\n            total: 6\n        }\n    }\n}\n",[879,1127,1128,1133,1145,1166,1171,1176,1190,1201,1211,1226,1241,1256,1267,1279,1285,1291,1302,1313,1322,1328,1334],{"__ignoreMap":897},[899,1129,1130],{"class":952,"line":953},[899,1131,1132],{"class":905},"{\n",[899,1134,1135,1138,1142],{"class":952,"line":982},[899,1136,1137],{"class":905},"    ok: ",[899,1139,1141],{"class":1140},"sjR7W","true",[899,1143,1144],{"class":905},",\n",[899,1146,1147,1150,1154,1157,1160,1163],{"class":952,"line":988},[899,1148,1149],{"class":905},"    date: ",[899,1151,1153],{"class":1152},"sakC6","new",[899,1155,1156],{"class":1006}," Date",[899,1158,1159],{"class":905},"().",[899,1161,1162],{"class":1006},"toISOString",[899,1164,1165],{"class":905},"(),\n",[899,1167,1168],{"class":952,"line":1030},[899,1169,1170],{"class":905},"    data: {\n",[899,1172,1173],{"class":952,"line":1035},[899,1174,1175],{"class":905},"        tokenMeta: {\n",[899,1177,1178,1181,1183,1186,1188],{"class":952,"line":1055},[899,1179,1180],{"class":905},"            name: ",[899,1182,1019],{"class":971},[899,1184,1185],{"class":975},"server token",[899,1187,1019],{"class":971},[899,1189,1144],{"class":905},[899,1191,1192,1195,1199],{"class":952,"line":1087},[899,1193,1194],{"class":905},"            tokenId: ",[899,1196,1198],{"class":1197},"spgvN","12",[899,1200,1144],{"class":905},[899,1202,1203,1206,1209],{"class":952,"line":1116},[899,1204,1205],{"class":905},"            userId: ",[899,1207,1208],{"class":1197},"42",[899,1210,1144],{"class":905},[899,1212,1214,1217,1219,1222,1224],{"class":952,"line":1213},9,[899,1215,1216],{"class":905},"            createdAt: ",[899,1218,1019],{"class":971},[899,1220,1221],{"class":975},"2026-05-01T10:00:00.000Z",[899,1223,1019],{"class":971},[899,1225,1144],{"class":905},[899,1227,1229,1232,1234,1237,1239],{"class":952,"line":1228},10,[899,1230,1231],{"class":905},"            expiresAt: ",[899,1233,1019],{"class":971},[899,1235,1236],{"class":975},"2026-05-01T11:00:00.000Z",[899,1238,1019],{"class":971},[899,1240,1144],{"class":905},[899,1242,1244,1247,1249,1252,1254],{"class":952,"line":1243},11,[899,1245,1246],{"class":905},"            lastUsed: ",[899,1248,1019],{"class":971},[899,1250,1251],{"class":975},"2026-05-01T10:30:00.000Z",[899,1253,1019],{"class":971},[899,1255,1144],{"class":905},[899,1257,1259,1262,1265],{"class":952,"line":1258},12,[899,1260,1261],{"class":905},"            usageCount: ",[899,1263,1264],{"class":1197},"19",[899,1266,1144],{"class":905},[899,1268,1270,1273,1275,1277],{"class":952,"line":1269},13,[899,1271,1272],{"class":905},"            providedPrivilege: ",[899,1274,1019],{"class":971},[899,1276,1022],{"class":975},[899,1278,979],{"class":971},[899,1280,1282],{"class":952,"line":1281},14,[899,1283,1284],{"class":905},"        },\n",[899,1286,1288],{"class":952,"line":1287},15,[899,1289,1290],{"class":905},"        counts: {\n",[899,1292,1294,1297,1300],{"class":952,"line":1293},16,[899,1295,1296],{"class":905},"            totalInvalidTokens: ",[899,1298,1299],{"class":1197},"2",[899,1301,1144],{"class":905},[899,1303,1305,1308,1311],{"class":952,"line":1304},17,[899,1306,1307],{"class":905},"            totalValidTokens: ",[899,1309,1310],{"class":1197},"4",[899,1312,1144],{"class":905},[899,1314,1316,1319],{"class":952,"line":1315},18,[899,1317,1318],{"class":905},"            total: ",[899,1320,1321],{"class":1197},"6\n",[899,1323,1325],{"class":952,"line":1324},19,[899,1326,1327],{"class":905},"        }\n",[899,1329,1331],{"class":952,"line":1330},20,[899,1332,1333],{"class":905},"    }\n",[899,1335,1337],{"class":952,"line":1336},21,[899,1338,1119],{"class":905},[856,1340,1341,1342,1344],{},"The ",[879,1343,1106],{}," object is user-wide. It does not only describe the selected\ntoken. It includes every token row owned by the same user.",[856,1346,1347,1348,1351,1352,1355,1356,1359,1360,1363],{},"The helper forwards the stored token metadata from ",[879,1349,1350],{},"verifyApiKey"," with\n",[879,1353,1354],{},"skipCountUpdates = true",". Because of that, ",[879,1357,1358],{},"usageCount"," and ",[879,1361,1362],{},"lastUsed"," are\nread-only snapshots and are not incremented by the metadata request.",[856,1365,1366,1367,1369],{},"On error, ",[879,1368,881],{}," returns the branch that failed.",[856,1371,1372,1373,1375],{},"If ",[879,1374,1350],{}," cannot validate the token, the helper forwards that reason:",[942,1377,1379],{"className":944,"code":1378,"language":947,"meta":897,"style":897},"{\n    ok: false,\n    date: new Date().toISOString(),\n    reason: 'Invalid key'\n}\n",[879,1380,1381,1385,1394,1408,1420],{"__ignoreMap":897},[899,1382,1383],{"class":952,"line":953},[899,1384,1132],{"class":905},[899,1386,1387,1389,1392],{"class":952,"line":982},[899,1388,1137],{"class":905},[899,1390,1391],{"class":1140},"false",[899,1393,1144],{"class":905},[899,1395,1396,1398,1400,1402,1404,1406],{"class":952,"line":988},[899,1397,1149],{"class":905},[899,1399,1153],{"class":1152},[899,1401,1156],{"class":1006},[899,1403,1159],{"class":905},[899,1405,1162],{"class":1006},[899,1407,1165],{"class":905},[899,1409,1410,1413,1415,1418],{"class":952,"line":1030},[899,1411,1412],{"class":905},"    reason: ",[899,1414,1019],{"class":971},[899,1416,1417],{"class":975},"Invalid key",[899,1419,979],{"class":971},[899,1421,1422],{"class":952,"line":1035},[899,1423,1119],{"class":905},[856,1425,1426,1427,1351,1429,1432,1433,882],{},"This happens when the token is missing, revoked, malformed, or does not match\nthe provided privilege. Because the helper calls ",[879,1428,1350],{},[879,1430,1431],{},"byPassIpCheck = true",", it does not return ",[879,1434,1435],{},"Invalid Host",[856,1437,1438],{},"If the verification step finds an expired token, it invalidates it and returns:",[942,1440,1442],{"className":944,"code":1441,"language":947,"meta":897,"style":897},"{\n    ok: false,\n    date: new Date().toISOString(),\n    reason: 'Token expired'\n}\n",[879,1443,1444,1448,1456,1470,1481],{"__ignoreMap":897},[899,1445,1446],{"class":952,"line":953},[899,1447,1132],{"class":905},[899,1449,1450,1452,1454],{"class":952,"line":982},[899,1451,1137],{"class":905},[899,1453,1391],{"class":1140},[899,1455,1144],{"class":905},[899,1457,1458,1460,1462,1464,1466,1468],{"class":952,"line":988},[899,1459,1149],{"class":905},[899,1461,1153],{"class":1152},[899,1463,1156],{"class":1006},[899,1465,1159],{"class":905},[899,1467,1162],{"class":1006},[899,1469,1165],{"class":905},[899,1471,1472,1474,1476,1479],{"class":952,"line":1030},[899,1473,1412],{"class":905},[899,1475,1019],{"class":971},[899,1477,1478],{"class":975},"Token expired",[899,1480,979],{"class":971},[899,1482,1483],{"class":952,"line":1035},[899,1484,1119],{"class":905},[856,1486,1487],{},"If the verification query fails, the helper can return:",[942,1489,1491],{"className":944,"code":1490,"language":947,"meta":897,"style":897},"{\n    ok: false,\n    date: new Date().toISOString(),\n    reason: 'Server error validating token.'\n}\n",[879,1492,1493,1497,1505,1519,1530],{"__ignoreMap":897},[899,1494,1495],{"class":952,"line":953},[899,1496,1132],{"class":905},[899,1498,1499,1501,1503],{"class":952,"line":982},[899,1500,1137],{"class":905},[899,1502,1391],{"class":1140},[899,1504,1144],{"class":905},[899,1506,1507,1509,1511,1513,1515,1517],{"class":952,"line":988},[899,1508,1149],{"class":905},[899,1510,1153],{"class":1152},[899,1512,1156],{"class":1006},[899,1514,1159],{"class":905},[899,1516,1162],{"class":1006},[899,1518,1165],{"class":905},[899,1520,1521,1523,1525,1528],{"class":952,"line":1030},[899,1522,1412],{"class":905},[899,1524,1019],{"class":971},[899,1526,1527],{"class":975},"Server error validating token.",[899,1529,979],{"class":971},[899,1531,1532],{"class":952,"line":1035},[899,1533,1119],{"class":905},[856,1535,1536],{},"If the metadata helper fails after verification, such as when the count query\nthrows, the catch block returns:",[942,1538,1540],{"className":944,"code":1539,"language":947,"meta":897,"style":897},"{\n    ok: false,\n    date: new Date().toISOString(),\n    reason: 'Error getting metadata'\n}\n",[879,1541,1542,1546,1554,1568,1579],{"__ignoreMap":897},[899,1543,1544],{"class":952,"line":953},[899,1545,1132],{"class":905},[899,1547,1548,1550,1552],{"class":952,"line":982},[899,1549,1137],{"class":905},[899,1551,1391],{"class":1140},[899,1553,1144],{"class":905},[899,1555,1556,1558,1560,1562,1564,1566],{"class":952,"line":988},[899,1557,1149],{"class":905},[899,1559,1153],{"class":1152},[899,1561,1156],{"class":1006},[899,1563,1159],{"class":905},[899,1565,1162],{"class":1006},[899,1567,1165],{"class":905},[899,1569,1570,1572,1574,1577],{"class":952,"line":1030},[899,1571,1412],{"class":905},[899,1573,1019],{"class":971},[899,1575,1576],{"class":975},"Error getting metadata",[899,1578,979],{"class":971},[899,1580,1581],{"class":952,"line":1035},[899,1582,1119],{"class":905},[856,1584,1372,1585,1587,1588,882],{},[879,1586,1350],{}," fails without a reason, the helper falls back to\n",[879,1589,1590],{},"Cant get metadata about invalid token",[1592,1593,1595],"h4",{"id":1594},"signature","Signature",[856,1597,1598],{},"The direct helper exposes the following signature:",[942,1600,1602],{"className":944,"code":1601,"language":947,"meta":897,"style":897},"export async function getUserApiKeysMetaData(\n        rawApiKey: string,\n        providedPrivilege: 'demo' | 'restricted' | 'protected' | 'full' | 'custom',\n): Promise\u003CResults\u003CSingleTokenMeta>>\n",[879,1603,1604,1620,1635,1687],{"__ignoreMap":897},[899,1605,1606,1609,1612,1615,1617],{"class":952,"line":953},[899,1607,1608],{"class":901},"export",[899,1610,1611],{"class":991}," async",[899,1613,1614],{"class":991}," function",[899,1616,1007],{"class":1006},[899,1618,1619],{"class":905},"(\n",[899,1621,1622,1626,1629,1633],{"class":952,"line":982},[899,1623,1625],{"class":1624},"sygFZ","        rawApiKey",[899,1627,1628],{"class":999},":",[899,1630,1632],{"class":1631},"sFs1U"," string",[899,1634,1144],{"class":905},[899,1636,1637,1640,1642,1644,1647,1649,1652,1654,1656,1658,1660,1662,1665,1667,1669,1671,1674,1676,1678,1680,1683,1685],{"class":952,"line":988},[899,1638,1639],{"class":1624},"        providedPrivilege",[899,1641,1628],{"class":999},[899,1643,972],{"class":971},[899,1645,1646],{"class":975},"demo",[899,1648,1019],{"class":971},[899,1650,1651],{"class":999}," |",[899,1653,972],{"class":971},[899,1655,1022],{"class":975},[899,1657,1019],{"class":971},[899,1659,1651],{"class":999},[899,1661,972],{"class":971},[899,1663,1664],{"class":975},"protected",[899,1666,1019],{"class":971},[899,1668,1651],{"class":999},[899,1670,972],{"class":971},[899,1672,1673],{"class":975},"full",[899,1675,1019],{"class":971},[899,1677,1651],{"class":999},[899,1679,972],{"class":971},[899,1681,1682],{"class":975},"custom",[899,1684,1019],{"class":971},[899,1686,1144],{"class":905},[899,1688,1689,1692,1694,1697,1700,1704,1706,1709],{"class":952,"line":1030},[899,1690,1691],{"class":905},")",[899,1693,1628],{"class":999},[899,1695,1696],{"class":1631}," Promise",[899,1698,1699],{"class":905},"\u003C",[899,1701,1703],{"class":1702},"sW-rI","Results",[899,1705,1699],{"class":905},[899,1707,1708],{"class":1702},"SingleTokenMeta",[899,1710,1711],{"class":905},">>\n",[1592,1713,1715],{"id":1714},"parameters","Parameters",[856,1717,1718],{},"The metadata helper accepts the following parameters:",[1720,1721,1722,1738],"table",{},[1723,1724,1725],"thead",{},[1726,1727,1728,1732,1735],"tr",{},[1729,1730,1731],"th",{},"Field",[1729,1733,1734],{},"Type",[1729,1736,1737],{},"Description",[1739,1740,1741,1760],"tbody",{},[1726,1742,1743,1749,1754],{},[1744,1745,1746],"td",{},[879,1747,1748],{},"rawApiKey",[1744,1750,1751],{},[879,1752,1753],{},"string",[1744,1755,1756,1757,882],{},"The token to inspect. It can be hashed or ",[934,1758,1759],{},"Raw",[1726,1761,1762,1767,1772],{},[1744,1763,1764],{},[879,1765,1766],{},"providedPrivilege",[1744,1768,1769],{},[879,1770,1771],{},"'demo' | 'restricted' | 'protected' | 'full' | 'custom'",[1744,1773,1774],{},"The privilege that must match the stored token privilege.",[1592,1776,1778],{"id":1777},"return-type","Return type",[856,1780,1781,1782,882],{},"The metadata helper returns ",[879,1783,1784],{},"Results\u003CSingleTokenMeta>",[856,1786,1787,1789],{},[879,1788,1708],{}," contains the following fields:",[1720,1791,1792,1802],{},[1723,1793,1794],{},[1726,1795,1796,1798,1800],{},[1729,1797,1731],{},[1729,1799,1734],{},[1729,1801,1737],{},[1739,1803,1804,1818],{},[1726,1805,1806,1810,1815],{},[1744,1807,1808],{},[879,1809,1077],{},[1744,1811,1812],{},[879,1813,1814],{},"TokenMeta",[1744,1816,1817],{},"Metadata for the selected token.",[1726,1819,1820,1824,1829],{},[1744,1821,1822],{},[879,1823,1106],{},[1744,1825,1826],{},[879,1827,1828],{},"{ totalInvalidTokens: number; totalValidTokens: number; total: number }",[1744,1830,1831],{},"User-wide token counts for the token owner.",[856,1833,1834,1836],{},[879,1835,1814],{}," contains the following fields on successful responses:",[1720,1838,1839,1849],{},[1723,1840,1841],{},[1726,1842,1843,1845,1847],{},[1729,1844,1731],{},[1729,1846,1734],{},[1729,1848,1737],{},[1739,1850,1851,1864,1879,1893,1907,1926,1939,1952],{},[1726,1852,1853,1857,1861],{},[1744,1854,1855],{},[879,1856,1082],{},[1744,1858,1859],{},[879,1860,1753],{},[1744,1862,1863],{},"The token name.",[1726,1865,1866,1871,1876],{},[1744,1867,1868],{},[879,1869,1870],{},"tokenId",[1744,1872,1873],{},[879,1874,1875],{},"number",[1744,1877,1878],{},"The internal database id of the token.",[1726,1880,1881,1886,1890],{},[1744,1882,1883],{},[879,1884,1885],{},"userId",[1744,1887,1888],{},[879,1889,1875],{},[1744,1891,1892],{},"The owner of the token.",[1726,1894,1895,1900,1904],{},[1744,1896,1897],{},[879,1898,1899],{},"createdAt",[1744,1901,1902],{},[879,1903,1753],{},[1744,1905,1906],{},"The stored creation timestamp.",[1726,1908,1909,1914,1919],{},[1744,1910,1911],{},[879,1912,1913],{},"expiresAt",[1744,1915,1916],{},[879,1917,1918],{},"string | null",[1744,1920,1921,1922,1925],{},"The stored expiration timestamp, or ",[879,1923,1924],{},"null"," when the token does not expire.",[1726,1927,1928,1932,1936],{},[1744,1929,1930],{},[879,1931,1362],{},[1744,1933,1934],{},[879,1935,1918],{},[1744,1937,1938],{},"The last stored successful usage timestamp.",[1726,1940,1941,1945,1949],{},[1744,1942,1943],{},[879,1944,1358],{},[1744,1946,1947],{},[879,1948,1875],{},[1744,1950,1951],{},"The stored usage count.",[1726,1953,1954,1958,1962],{},[1744,1955,1956],{},[879,1957,1766],{},[1744,1959,1960],{},[879,1961,1771],{},[1744,1963,1964],{},"The privilege used for metadata verification.",[1966,1967,1968],"warning",{},[856,1969,1970],{},"This action should be performed by a fully authenticated client.",[1972,1973,1974],"caution",{},[856,1975,1976],{},"This function bypasses IP restriction checks and does not increment usage\ncounters while it verifies the token. Only call it directly in trusted\nserver-side code.",[1592,1978,1980,1981],{"id":1979},"with-the-privateactionmanager","With the ",[879,1982,888],{},[856,1984,1985,1986,1988,1989,1992],{},"The safest internal method is using the ",[879,1987,888],{},". This function\nvalidates the ",[879,1990,1991],{},"publicIdentifier",", token id, token name, user id, and current\nvalid status before it dispatches the metadata lookup.",[942,1994,1996],{"className":944,"code":1995,"filename":946,"language":947,"meta":897,"style":897},"const metaDataRes = await privateActionManager(\n    userId,\n    tokenId,\n    publicIdentifier,\n    tokenName,\n    { action: 'metadata' }\n)\n",[879,1997,1998,2014,2021,2028,2035,2042,2063],{"__ignoreMap":897},[899,1999,2000,2002,2005,2007,2009,2012],{"class":952,"line":953},[899,2001,992],{"class":991},[899,2003,2004],{"class":995}," metaDataRes",[899,2006,1000],{"class":999},[899,2008,1003],{"class":901},[899,2010,2011],{"class":1006}," privateActionManager",[899,2013,1619],{"class":905},[899,2015,2016,2019],{"class":952,"line":982},[899,2017,2018],{"class":962},"    userId",[899,2020,1144],{"class":905},[899,2022,2023,2026],{"class":952,"line":988},[899,2024,2025],{"class":962},"    tokenId",[899,2027,1144],{"class":905},[899,2029,2030,2033],{"class":952,"line":1030},[899,2031,2032],{"class":962},"    publicIdentifier",[899,2034,1144],{"class":905},[899,2036,2037,2040],{"class":952,"line":1035},[899,2038,2039],{"class":962},"    tokenName",[899,2041,1144],{"class":905},[899,2043,2044,2047,2050,2053,2055,2058,2060],{"class":952,"line":1055},[899,2045,2046],{"class":905},"    { ",[899,2048,2049],{"class":962},"action",[899,2051,1628],{"class":2052},"s34zl",[899,2054,972],{"class":971},[899,2056,2057],{"class":975},"metadata",[899,2059,1019],{"class":971},[899,2061,2062],{"class":905}," }\n",[899,2064,2065],{"class":952,"line":1087},[899,2066,1027],{"class":905},[856,2068,1341,2069,2071,2072,2074,2075,882],{},[879,2070,888],{}," returns the response of ",[879,2073,881],{},"\ndirectly. Learn more at the\n",[914,2076,2078],{"href":2077},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement#the-privateactionmanager","introduction page",[863,2080,2081],{},[856,2082,2083,2084,2087,2088,2091,2092,882],{},"The manager only selects rows where ",[879,2085,2086],{},"valid = 1",". Because of that,\nmanager-backed metadata cannot target an already revoked token, and the manager\nreturns ",[879,2089,2090],{},"Bad Request"," before it reaches ",[879,2093,881],{},[2095,2096],"hr",{},[926,2098,2100],{"id":2099},"using-the-route","Using the route",[856,2102,2103],{},"Let's say you want to fetch metadata for a token from your authenticated client\nor BFF.",[856,2105,2106,2112],{},[879,2107,2108,2110],{"className":895,"language":896,"style":897},[899,2109,902],{"class":901},[899,2111,906],{"class":905}," body:",[942,2114,2117],{"className":2115,"code":2116,"language":5,"meta":897,"style":897},"language-json shiki shiki-themes light-plus light-plus dracula","{\n    \"tokenId\": 12,\n    \"publicIdentifier\": \"public_identifier\",\n    \"name\": \"the token name\"\n}\n",[879,2118,2119,2123,2142,2162,2180],{"__ignoreMap":897},[899,2120,2121],{"class":952,"line":953},[899,2122,1132],{"class":905},[899,2124,2125,2129,2132,2135,2137,2140],{"class":952,"line":982},[899,2126,2128],{"class":2127},"saJyd","    \"",[899,2130,1870],{"class":2131},"s_W10",[899,2133,2134],{"class":2127},"\"",[899,2136,1628],{"class":999},[899,2138,2139],{"class":1197}," 12",[899,2141,1144],{"class":905},[899,2143,2144,2146,2148,2150,2152,2155,2158,2160],{"class":952,"line":988},[899,2145,2128],{"class":2127},[899,2147,1991],{"class":2131},[899,2149,2134],{"class":2127},[899,2151,1628],{"class":999},[899,2153,2154],{"class":971}," \"",[899,2156,2157],{"class":975},"public_identifier",[899,2159,2134],{"class":971},[899,2161,1144],{"class":905},[899,2163,2164,2166,2168,2170,2172,2174,2177],{"class":952,"line":1030},[899,2165,2128],{"class":2127},[899,2167,1082],{"class":2131},[899,2169,2134],{"class":2127},[899,2171,1628],{"class":999},[899,2173,2154],{"class":971},[899,2175,2176],{"class":975},"the token name",[899,2178,2179],{"class":971},"\"\n",[899,2181,2182],{"class":952,"line":1035},[899,2183,1119],{"class":905},[856,2185,2186],{},"On success you will get the following response:",[942,2188,2190],{"className":895,"code":2189,"language":896,"meta":897,"style":897},"HTTP\u002F1.1 200 OK\nContent-Type: application\u002Fjson; charset=utf-8\n\n{\n    \"ok\": true,\n    \"date\": \"current date\",\n    \"data\": {\n        \"tokenMeta\": {\n            \"name\": \"server token\",\n            \"tokenId\": 12,\n            \"userId\": 42,\n            \"createdAt\": \"2026-05-01T10:00:00.000Z\",\n            \"expiresAt\": \"2026-05-01T11:00:00.000Z\",\n            \"lastUsed\": \"2026-05-01T10:30:00.000Z\",\n            \"usageCount\": 19,\n            \"providedPrivilege\": \"restricted\"\n        },\n        \"counts\": {\n            \"totalInvalidTokens\": 2,\n            \"totalValidTokens\": 4,\n            \"total\": 6\n        }\n    }\n}\n",[879,2191,2192,2209,2220,2224,2228,2243,2263,2276,2289,2308,2322,2337,2355,2373,2391,2406,2422,2426,2438,2454,2469,2483,2488,2493],{"__ignoreMap":897},[899,2193,2194,2197,2200,2203,2206],{"class":952,"line":953},[899,2195,2196],{"class":991},"HTTP",[899,2198,2199],{"class":905},"\u002F",[899,2201,2202],{"class":1197},"1.1",[899,2204,2205],{"class":1197}," 200",[899,2207,2208],{"class":975}," OK\n",[899,2210,2211,2215,2217],{"class":952,"line":982},[899,2212,2214],{"class":2213},"scd-l","Content-Type",[899,2216,1628],{"class":991},[899,2218,2219],{"class":975}," application\u002Fjson; charset=utf-8\n",[899,2221,2222],{"class":952,"line":988},[899,2223,985],{"emptyLinePlaceholder":8},[899,2225,2226],{"class":952,"line":1030},[899,2227,1132],{"class":905},[899,2229,2230,2232,2234,2236,2238,2241],{"class":952,"line":1035},[899,2231,2128],{"class":2127},[899,2233,1049],{"class":2131},[899,2235,2134],{"class":2127},[899,2237,1628],{"class":999},[899,2239,2240],{"class":1140}," true",[899,2242,1144],{"class":905},[899,2244,2245,2247,2250,2252,2254,2256,2259,2261],{"class":952,"line":1055},[899,2246,2128],{"class":2127},[899,2248,2249],{"class":2131},"date",[899,2251,2134],{"class":2127},[899,2253,1628],{"class":999},[899,2255,2154],{"class":971},[899,2257,2258],{"class":975},"current date",[899,2260,2134],{"class":971},[899,2262,1144],{"class":905},[899,2264,2265,2267,2269,2271,2273],{"class":952,"line":1087},[899,2266,2128],{"class":2127},[899,2268,1072],{"class":2131},[899,2270,2134],{"class":2127},[899,2272,1628],{"class":999},[899,2274,2275],{"class":905}," {\n",[899,2277,2278,2281,2283,2285,2287],{"class":952,"line":1116},[899,2279,2280],{"class":2127},"        \"",[899,2282,1077],{"class":2131},[899,2284,2134],{"class":2127},[899,2286,1628],{"class":999},[899,2288,2275],{"class":905},[899,2290,2291,2294,2296,2298,2300,2302,2304,2306],{"class":952,"line":1213},[899,2292,2293],{"class":2127},"            \"",[899,2295,1082],{"class":2131},[899,2297,2134],{"class":2127},[899,2299,1628],{"class":999},[899,2301,2154],{"class":971},[899,2303,1185],{"class":975},[899,2305,2134],{"class":971},[899,2307,1144],{"class":905},[899,2309,2310,2312,2314,2316,2318,2320],{"class":952,"line":1228},[899,2311,2293],{"class":2127},[899,2313,1870],{"class":2131},[899,2315,2134],{"class":2127},[899,2317,1628],{"class":999},[899,2319,2139],{"class":1197},[899,2321,1144],{"class":905},[899,2323,2324,2326,2328,2330,2332,2335],{"class":952,"line":1243},[899,2325,2293],{"class":2127},[899,2327,1885],{"class":2131},[899,2329,2134],{"class":2127},[899,2331,1628],{"class":999},[899,2333,2334],{"class":1197}," 42",[899,2336,1144],{"class":905},[899,2338,2339,2341,2343,2345,2347,2349,2351,2353],{"class":952,"line":1258},[899,2340,2293],{"class":2127},[899,2342,1899],{"class":2131},[899,2344,2134],{"class":2127},[899,2346,1628],{"class":999},[899,2348,2154],{"class":971},[899,2350,1221],{"class":975},[899,2352,2134],{"class":971},[899,2354,1144],{"class":905},[899,2356,2357,2359,2361,2363,2365,2367,2369,2371],{"class":952,"line":1269},[899,2358,2293],{"class":2127},[899,2360,1913],{"class":2131},[899,2362,2134],{"class":2127},[899,2364,1628],{"class":999},[899,2366,2154],{"class":971},[899,2368,1236],{"class":975},[899,2370,2134],{"class":971},[899,2372,1144],{"class":905},[899,2374,2375,2377,2379,2381,2383,2385,2387,2389],{"class":952,"line":1281},[899,2376,2293],{"class":2127},[899,2378,1362],{"class":2131},[899,2380,2134],{"class":2127},[899,2382,1628],{"class":999},[899,2384,2154],{"class":971},[899,2386,1251],{"class":975},[899,2388,2134],{"class":971},[899,2390,1144],{"class":905},[899,2392,2393,2395,2397,2399,2401,2404],{"class":952,"line":1287},[899,2394,2293],{"class":2127},[899,2396,1358],{"class":2131},[899,2398,2134],{"class":2127},[899,2400,1628],{"class":999},[899,2402,2403],{"class":1197}," 19",[899,2405,1144],{"class":905},[899,2407,2408,2410,2412,2414,2416,2418,2420],{"class":952,"line":1293},[899,2409,2293],{"class":2127},[899,2411,1766],{"class":2131},[899,2413,2134],{"class":2127},[899,2415,1628],{"class":999},[899,2417,2154],{"class":971},[899,2419,1022],{"class":975},[899,2421,2179],{"class":971},[899,2423,2424],{"class":952,"line":1304},[899,2425,1284],{"class":905},[899,2427,2428,2430,2432,2434,2436],{"class":952,"line":1315},[899,2429,2280],{"class":2127},[899,2431,1106],{"class":2131},[899,2433,2134],{"class":2127},[899,2435,1628],{"class":999},[899,2437,2275],{"class":905},[899,2439,2440,2442,2445,2447,2449,2452],{"class":952,"line":1324},[899,2441,2293],{"class":2127},[899,2443,2444],{"class":2131},"totalInvalidTokens",[899,2446,2134],{"class":2127},[899,2448,1628],{"class":999},[899,2450,2451],{"class":1197}," 2",[899,2453,1144],{"class":905},[899,2455,2456,2458,2460,2462,2464,2467],{"class":952,"line":1330},[899,2457,2293],{"class":2127},[899,2459,1111],{"class":2131},[899,2461,2134],{"class":2127},[899,2463,1628],{"class":999},[899,2465,2466],{"class":1197}," 4",[899,2468,1144],{"class":905},[899,2470,2471,2473,2476,2478,2480],{"class":952,"line":1336},[899,2472,2293],{"class":2127},[899,2474,2475],{"class":2131},"total",[899,2477,2134],{"class":2127},[899,2479,1628],{"class":999},[899,2481,2482],{"class":1197}," 6\n",[899,2484,2486],{"class":952,"line":2485},22,[899,2487,1327],{"class":905},[899,2489,2491],{"class":952,"line":2490},23,[899,2492,1333],{"class":905},[899,2494,2496],{"class":952,"line":2495},24,[899,2497,1119],{"class":905},[856,2499,2500,2501,882],{},"Standard authentication, body validation, and other shared management-route\nerrors are documented on the\n",[914,2502,2078],{"href":2503},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement#service",[856,2505,2506,2507,882],{},"The route-specific failures come from the manager and the metadata helper.\nUnlike rotation and IP updates, the metadata controller returns these failures\nas ",[879,2508,2509],{},"401 Unauthorized",[856,2511,2512,2513,2515,2516,882],{},"If the ",[879,2514,1991],{}," checksum is invalid, the route returns\n",[879,2517,2518],{},"Invalid identity",[856,2520,2521,2522,1144,2524,1016,2526,2528,2529,2531,2532,2534],{},"If the manager cannot match a currently valid token for the given ",[879,2523,1870],{},[879,2525,1991],{},[879,2527,1082],{},", and ",[879,2530,1885],{},", it returns ",[879,2533,2090],{},". That means\nthe token is already revoked, belongs to a different user, or the request body\ndoes not point to an active row.",[856,2536,2537,2538,2540,2541,1144,2543,1016,2545,1144,2547,2549,2550,882],{},"If the manager finds the token but ",[879,2539,881],{}," cannot verify it,\nthe route forwards the helper reason. That can be ",[879,2542,1417],{},[879,2544,1478],{},[879,2546,1527],{},[879,2548,1590],{},", or ",[879,2551,1576],{},[856,2553,1372,2554,2556,2557,882],{},[879,2555,888],{}," itself fails unexpectedly, the route can also forward\n",[879,2558,2559],{},"Server Error",[856,2561,2562,2563,2565],{},"All of these route-specific failures are returned as ",[879,2564,2509],{}," by the\ncontroller:",[942,2567,2569],{"className":895,"code":2568,"language":896,"meta":897,"style":897},"HTTP\u002F1.1 401 Unauthorized\nContent-Type: application\u002Fjson; charset=utf-8\n\n{\n    \"ok\": false,\n    \"date\": \"current date\",\n    \"reason\": \"reason from privateActionManager or getUserApiKeysMetaData\"\n}\n",[879,2570,2571,2585,2593,2597,2601,2616,2634,2652],{"__ignoreMap":897},[899,2572,2573,2575,2577,2579,2582],{"class":952,"line":953},[899,2574,2196],{"class":991},[899,2576,2199],{"class":905},[899,2578,2202],{"class":1197},[899,2580,2581],{"class":1197}," 401",[899,2583,2584],{"class":975}," Unauthorized\n",[899,2586,2587,2589,2591],{"class":952,"line":982},[899,2588,2214],{"class":2213},[899,2590,1628],{"class":991},[899,2592,2219],{"class":975},[899,2594,2595],{"class":952,"line":988},[899,2596,985],{"emptyLinePlaceholder":8},[899,2598,2599],{"class":952,"line":1030},[899,2600,1132],{"class":905},[899,2602,2603,2605,2607,2609,2611,2614],{"class":952,"line":1035},[899,2604,2128],{"class":2127},[899,2606,1049],{"class":2131},[899,2608,2134],{"class":2127},[899,2610,1628],{"class":999},[899,2612,2613],{"class":1140}," false",[899,2615,1144],{"class":905},[899,2617,2618,2620,2622,2624,2626,2628,2630,2632],{"class":952,"line":1055},[899,2619,2128],{"class":2127},[899,2621,2249],{"class":2131},[899,2623,2134],{"class":2127},[899,2625,1628],{"class":999},[899,2627,2154],{"class":971},[899,2629,2258],{"class":975},[899,2631,2134],{"class":971},[899,2633,1144],{"class":905},[899,2635,2636,2638,2641,2643,2645,2647,2650],{"class":952,"line":1087},[899,2637,2128],{"class":2127},[899,2639,2640],{"class":2131},"reason",[899,2642,2134],{"class":2127},[899,2644,1628],{"class":999},[899,2646,2154],{"class":971},[899,2648,2649],{"class":975},"reason from privateActionManager or getUserApiKeysMetaData",[899,2651,2179],{"class":971},[899,2653,2654],{"class":952,"line":1116},[899,2655,1119],{"class":905},[1592,2657,2659],{"id":2658},"rate-limits","Rate Limits",[856,2661,2662],{},"The endpoint also enforces rate limits controlled under the following\nconfiguration options:",[872,2664,2665,2675],{},[875,2666,2667,2670],{},[879,2668,2669],{},"rate_limiters.apiTokensLimiters.operationRateLimits.getMetadataTokenLimiter",[872,2671,2672],{},[875,2673,2674],{},"The main limiter for the metadata endpoint. The default allows 20 requests\nin a window of 2 seconds and will trigger a block for 30 minutes if this\nlimit is met. Consecutive triggers in this period will block the client\npermanently.",[875,2676,2677,2680,2681,2684,2685,2688,2694,2695,2698,2699],{},[879,2678,2679],{},"rate_limiters.apiTokensLimiters.generalUnionLimiter"," - A ",[879,2682,2683],{},"burstLimiter"," and\na ",[879,2686,2687],{},"slowLimiter",[914,2689,2693],{"href":2690,"rel":2691},"https:\u002F\u002Fgithub.com\u002Fanimir\u002Fnode-rate-limiter-flexible\u002Fwiki\u002FRateLimiterUnion",[2692],"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. The limiter is ",[934,2696,2697],{},"restarted"," on successful\nmetadata requests.",[872,2700,2701,2706],{},[875,2702,2703,2705],{},[879,2704,2683],{}," - Will block the client for 15 minutes.",[875,2707,2708,2710],{},[879,2709,2687],{}," - Will block for 1 hour.",[918,2712,2714],{"id":2713},"metadata-process","Metadata Process",[856,2716,2717],{},"Metadata collection reads the current token state without consuming the token.",[926,2719,2721],{"id":2720},"validate-and-resolve-the-target-token","Validate and resolve the target token",[856,2723,2724,2725,2727,2728,2730],{},"When you use the manager or route, the system validates the\n",[879,2726,1991],{}," checksum and confirms that the token belongs to the current\nuser and is still valid. This check happens before ",[879,2729,881],{},"\nruns.",[926,2732,2734],{"id":2733},"verify-without-consuming-usage","Verify without consuming usage",[856,2736,2737,2738,2740,2741,1144,2743,2528,2745,2748,2749,2751,2752,2754],{},"The helper calls ",[879,2739,1350],{}," with ",[879,2742,1354],{},[879,2744,1431],{},[879,2746,2747],{},"isInternalHash = true",". That means it can inspect\nthe stored token without incrementing ",[879,2750,1358],{},", without refreshing\n",[879,2753,1362],{},", and without enforcing the token's IP whitelist.",[926,2756,2758],{"id":2757},"count-the-owners-tokens","Count the owner's tokens",[856,2760,2761,2762,2765,2766,2768],{},"After verification succeeds, the helper calls ",[879,2763,2764],{},"totalUserTokensCount"," for the\nresolved ",[879,2767,1885],{},". This returns the number of valid tokens, invalid tokens, and\nthe total token count for that user.",[926,2770,2772],{"id":2771},"return-the-combined-snapshot","Return the combined snapshot",[856,2774,2775,2776,2778,2779,2781],{},"The final payload returns ",[879,2777,1077],{}," for the selected token and ",[879,2780,1106],{}," for\nthe owner. This lets you inspect one token while also understanding the user's\noverall token inventory.",[918,2783,2785],{"id":2784},"configuration-reference","Configuration Reference",[856,2787,2788],{},"These configuration keys control metadata throttling in the service.",[926,2790,2792],{"id":2791},"rate-limiters","Rate limiters",[856,2794,2795],{},"The metadata flow relies on the following limiter configuration:",[1720,2797,2798,2807],{},[1723,2799,2800],{},[1726,2801,2802,2805],{},[1729,2803,2804],{},"Limiter",[1729,2806,1737],{},[1739,2808,2809,2818],{},[1726,2810,2811,2815],{},[1744,2812,2813],{},[879,2814,2669],{},[1744,2816,2817],{},"The main rate limiter for the metadata endpoint",[1726,2819,2820,2824],{},[1744,2821,2822],{},[879,2823,2679],{},[1744,2825,2826],{},"General burst limiter",[2828,2829,2830],"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 .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 .spgvN, html code.shiki .spgvN{--shiki-light:#098658;--shiki-default:#098658;--shiki-dark:#BD93F9}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 .s34zl, html code.shiki .s34zl{--shiki-light:#001080;--shiki-default:#001080;--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}html pre.shiki code .scd-l, html code.shiki .scd-l{--shiki-light:#800000;--shiki-default:#800000;--shiki-dark:#FF79C6}",{"title":897,"searchDepth":982,"depth":982,"links":2832},[2833,2837,2843],{"id":920,"depth":982,"text":921,"children":2834},[2835,2836],{"id":928,"depth":988,"text":929},{"id":2099,"depth":988,"text":2100},{"id":2713,"depth":982,"text":2714,"children":2838},[2839,2840,2841,2842],{"id":2720,"depth":988,"text":2721},{"id":2733,"depth":988,"text":2734},{"id":2757,"depth":988,"text":2758},{"id":2771,"depth":988,"text":2772},{"id":2784,"depth":982,"text":2785,"children":2844},[2845],{"id":2791,"depth":988,"text":2792},"How to fetch token metadata and user-wide token counts.","md","i-lucide-file-search",{},null,"---\ntitle: Metadata\ndescription: How to fetch token metadata and user-wide token counts.\nicon: i-lucide-file-search\n---\n\nMetadata returns a snapshot for one API token and a summary of the owning\nuser's token counts. The response combines token-level details, such as usage\nand timestamps, with user-wide totals for valid, invalid, and total tokens.\n\nThe IAM service builds this response in two steps. It first verifies the target\ntoken without consuming usage counters, then it queries the database again to\ncount every token owned by the same user.\n\n::note\nThe metadata helper reads the existing token state. It does not rotate,\nrevoke, rename, or update the token.\n::\n\nYou can fetch metadata in 3 ways:\n\n- Directly calling `getUserApiKeysMetaData`.\n- Using the `privateActionManager` to validate ownership before fetching.\n- Calling the `POST \u002Fapi\u002Fmanage\u002Fmetadata`{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 fetch its metadata.\n::\n\n## Fetching Metadata\n\nYou can fetch metadata either directly in the library or through the\nmanager-backed route. The direct helper resolves one token and the owning\nuser's counts, while the route adds ownership validation and authenticated\nrequest protections.\n\n### Using the library\n\nTo fetch metadata *directly*, you call `getUserApiKeysMetaData`. This function\nverifies the token, skips IP checks, skips usage counter updates, and then\nfetches the user's token counts.\n\n```ts [example.ts]\nimport { getUserApiKeysMetaData } from '@riavzon\u002Fauth'\n\nconst results = await getUserApiKeysMetaData(token, 'restricted')\n\nif (results.ok) {\n\tconsole.log(results.data.tokenMeta.name)\n\tconsole.log(results.data.counts.totalValidTokens)\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\ttokenMeta: {\n\t\t\tname: 'server token',\n\t\t\ttokenId: 12,\n\t\t\tuserId: 42,\n\t\t\tcreatedAt: '2026-05-01T10:00:00.000Z',\n\t\t\texpiresAt: '2026-05-01T11:00:00.000Z',\n\t\t\tlastUsed: '2026-05-01T10:30:00.000Z',\n\t\t\tusageCount: 19,\n\t\t\tprovidedPrivilege: 'restricted'\n\t\t},\n\t\tcounts: {\n\t\t\ttotalInvalidTokens: 2,\n\t\t\ttotalValidTokens: 4,\n\t\t\ttotal: 6\n\t\t}\n\t}\n}\n```\n\nThe `counts` object is user-wide. It does not only describe the selected\ntoken. It includes every token row owned by the same user.\n\nThe helper forwards the stored token metadata from `verifyApiKey` with\n`skipCountUpdates = true`. Because of that, `usageCount` and `lastUsed` are\nread-only snapshots and are not incremented by the metadata request.\n\nOn error, `getUserApiKeysMetaData` returns the branch that failed.\n\nIf `verifyApiKey` cannot validate the token, the helper forwards that reason:\n\n```ts\n{\n\tok: false,\n\tdate: new Date().toISOString(),\n\treason: 'Invalid key'\n}\n```\n\nThis happens when the token is missing, revoked, malformed, or does not match\nthe provided privilege. Because the helper calls `verifyApiKey` with\n`byPassIpCheck = true`, it does not return `Invalid Host`.\n\nIf the verification step finds an expired token, it invalidates it and returns:\n\n```ts\n{\n\tok: false,\n\tdate: new Date().toISOString(),\n\treason: 'Token expired'\n}\n```\n\nIf the verification query fails, the helper can return:\n\n```ts\n{\n\tok: false,\n\tdate: new Date().toISOString(),\n\treason: 'Server error validating token.'\n}\n```\n\nIf the metadata helper fails after verification, such as when the count query\nthrows, the catch block returns:\n\n```ts\n{\n\tok: false,\n\tdate: new Date().toISOString(),\n\treason: 'Error getting metadata'\n}\n```\n\nIf `verifyApiKey` fails without a reason, the helper falls back to\n`Cant get metadata about invalid token`.\n\n#### Signature\n\nThe direct helper exposes the following signature:\n\n```ts\nexport async function getUserApiKeysMetaData(\n\t\trawApiKey: string,\n\t\tprovidedPrivilege: 'demo' | 'restricted' | 'protected' | 'full' | 'custom',\n): Promise\u003CResults\u003CSingleTokenMeta>>\n```\n\n#### Parameters\n\nThe metadata helper accepts the following parameters:\n\n| Field | Type | Description |\n|---|---|---|\n| `rawApiKey` | `string` | The token to inspect. It can be hashed or *Raw*. |\n| `providedPrivilege` | `'demo' \\| 'restricted' \\| 'protected' \\| 'full' \\| 'custom'` | The privilege that must match the stored token privilege. |\n\n#### Return type\n\nThe metadata helper returns `Results\u003CSingleTokenMeta>`.\n\n`SingleTokenMeta` contains the following fields:\n\n| Field | Type | Description |\n|---|---|---|\n| `tokenMeta` | `TokenMeta` | Metadata for the selected token. |\n| `counts` | `{ totalInvalidTokens: number; totalValidTokens: number; total: number }` | User-wide token counts for the token owner. |\n\n`TokenMeta` contains the following fields on successful responses:\n\n| Field | Type | Description |\n|---|---|---|\n| `name` | `string` | The token name. |\n| `tokenId` | `number` | The internal database id of the token. |\n| `userId` | `number` | The owner of the token. |\n| `createdAt` | `string` | The stored creation timestamp. |\n| `expiresAt` | `string \\| null` | The stored expiration timestamp, or `null` when the token does not expire. |\n| `lastUsed` | `string \\| null` | The last stored successful usage timestamp. |\n| `usageCount` | `number` | The stored usage count. |\n| `providedPrivilege` | `'demo' \\| 'restricted' \\| 'protected' \\| 'full' \\| 'custom'` | The privilege used for metadata verification. |\n\n::warning\nThis action should be performed by a fully authenticated client.\n::\n\n::caution\nThis function bypasses IP restriction checks and does not increment usage\ncounters while it verifies the token. Only call it directly in trusted\nserver-side code.\n::\n\n#### With the `privateActionManager`\n\nThe safest internal method is using the `privateActionManager`. This function\nvalidates the `publicIdentifier`, token id, token name, user id, and current\nvalid status before it dispatches the metadata lookup.\n\n```ts [example.ts]\nconst metaDataRes = await privateActionManager(\n\tuserId,\n\ttokenId,\n\tpublicIdentifier,\n\ttokenName,\n\t{ action: 'metadata' }\n)\n```\n\nThe `privateActionManager` returns the response of `getUserApiKeysMetaData`\ndirectly. Learn more at the\n[introduction page](\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement#the-privateactionmanager).\n\n::note\nThe manager only selects rows where `valid = 1`. Because of that,\nmanager-backed metadata cannot target an already revoked token, and the manager\nreturns `Bad Request` before it reaches `getUserApiKeysMetaData`.\n::\n\n---\n\n### Using the route\n\nLet's say you want to fetch metadata for a token from your authenticated client\nor BFF.\n\n`POST \u002Fapi\u002Fmanage\u002Fmetadata`{lang=\"http\"} body:\n\n```json\n{\n\t\"tokenId\": 12,\n\t\"publicIdentifier\": \"public_identifier\",\n\t\"name\": \"the token name\"\n}\n```\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\"tokenMeta\": {\n\t\t\t\"name\": \"server token\",\n\t\t\t\"tokenId\": 12,\n\t\t\t\"userId\": 42,\n\t\t\t\"createdAt\": \"2026-05-01T10:00:00.000Z\",\n\t\t\t\"expiresAt\": \"2026-05-01T11:00:00.000Z\",\n\t\t\t\"lastUsed\": \"2026-05-01T10:30:00.000Z\",\n\t\t\t\"usageCount\": 19,\n\t\t\t\"providedPrivilege\": \"restricted\"\n\t\t},\n\t\t\"counts\": {\n\t\t\t\"totalInvalidTokens\": 2,\n\t\t\t\"totalValidTokens\": 4,\n\t\t\t\"total\": 6\n\t\t}\n\t}\n}\n```\n\nStandard authentication, body validation, and other shared management-route\nerrors are documented on the\n[introduction page](\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement#service).\n\nThe route-specific failures come from the manager and the metadata helper.\nUnlike rotation and IP updates, the metadata controller returns these failures\nas `401 Unauthorized`.\n\nIf the `publicIdentifier` checksum is invalid, the route returns\n`Invalid identity`.\n\nIf the manager cannot match a currently valid token for the given `tokenId`,\n`publicIdentifier`, `name`, and `userId`, it returns `Bad Request`. That means\nthe token is already revoked, belongs to a different user, or the request body\ndoes not point to an active row.\n\nIf the manager finds the token but `getUserApiKeysMetaData` cannot verify it,\nthe route forwards the helper reason. That can be `Invalid key`,\n`Token expired`, `Server error validating token.`,\n`Cant get metadata about invalid token`, or `Error getting metadata`.\n\nIf `privateActionManager` itself fails unexpectedly, the route can also forward\n`Server Error`.\n\nAll of these route-specific failures are returned as `401 Unauthorized` by the\ncontroller:\n\n```http\nHTTP\u002F1.1 401 Unauthorized\nContent-Type: application\u002Fjson; charset=utf-8\n\n{\n\t\"ok\": false,\n\t\"date\": \"current date\",\n\t\"reason\": \"reason from privateActionManager or getUserApiKeysMetaData\"\n}\n```\n\n#### Rate Limits\n\nThe endpoint also enforces rate limits controlled under the following\nconfiguration options:\n\n- `rate_limiters.apiTokensLimiters.operationRateLimits.getMetadataTokenLimiter`\n  - The main limiter for the metadata endpoint. The default allows 20 requests\n  in a window of 2 seconds and will trigger a block for 30 minutes if this\n  limit is met. Consecutive triggers in this period will block the client\n  permanently.\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. The limiter is *restarted* on successful\n\tmetadata requests.\n\t- `burstLimiter` - Will block the client for 15 minutes.\n\t- `slowLimiter` - Will block for 1 hour.\n\n## Metadata Process\n\nMetadata collection reads the current token state without consuming the token.\n\n### Validate and resolve the target token\n\nWhen you use the manager or route, the system validates the\n`publicIdentifier` checksum and confirms that the token belongs to the current\nuser and is still valid. This check happens before `getUserApiKeysMetaData`\nruns.\n\n### Verify without consuming usage\n\nThe helper calls `verifyApiKey` with `skipCountUpdates = true`,\n`byPassIpCheck = true`, and `isInternalHash = true`. That means it can inspect\nthe stored token without incrementing `usageCount`, without refreshing\n`lastUsed`, and without enforcing the token's IP whitelist.\n\n### Count the owner's tokens\n\nAfter verification succeeds, the helper calls `totalUserTokensCount` for the\nresolved `userId`. This returns the number of valid tokens, invalid tokens, and\nthe total token count for that user.\n\n### Return the combined snapshot\n\nThe final payload returns `tokenMeta` for the selected token and `counts` for\nthe owner. This lets you inspect one token while also understanding the user's\noverall token inventory.\n\n## Configuration Reference\n\nThese configuration keys control metadata throttling in the service.\n\n### Rate limiters\n\nThe metadata flow relies on the following limiter configuration:\n\n| Limiter | Description |\n|---|---|\n| `rate_limiters.apiTokensLimiters.operationRateLimits.getMetadataTokenLimiter` | The main rate limiter for the metadata endpoint |\n| `rate_limiters.apiTokensLimiters.generalUnionLimiter` | General burst limiter |\n",{"title":203,"description":2846},"6YY6TRQVw3IGpOdYiQp6ZoRYpKc3HaaUVxTw-pOmi-0",[2855,2856],{"title":199,"path":200,"stem":201,"children":-1},{"title":207,"path":208,"stem":209,"children":-1},{"id":851,"title":203,"body":2858,"description":2846,"extension":2847,"icon":2848,"meta":4444,"module":2850,"navigation":8,"path":204,"rawbody":2851,"seo":4445,"stem":205,"__hash__":2853},{"type":853,"value":2859,"toc":4429},[2860,2862,2864,2868,2870,2888,2894,2896,2898,2900,2906,3032,3034,3196,3200,3210,3214,3218,3262,3270,3272,3316,3318,3362,3364,3408,3414,3416,3418,3508,3510,3512,3552,3554,3558,3562,3600,3604,3716,3720,3724,3728,3734,3796,3804,3814,3816,3818,3820,3828,3888,3890,4176,4180,4184,4190,4202,4216,4222,4226,4310,4312,4314,4347,4349,4351,4353,4359,4361,4375,4377,4383,4385,4391,4393,4395,4397,4399,4427],[856,2861,858],{},[856,2863,861],{},[863,2865,2866],{},[856,2867,867],{},[856,2869,870],{},[872,2871,2872,2876,2880],{},[875,2873,877,2874,882],{},[879,2875,881],{},[875,2877,885,2878,889],{},[879,2879,888],{},[875,2881,892,2882,907],{},[879,2883,2884,2886],{"className":895,"language":896,"style":897},[899,2885,902],{"class":901},[899,2887,906],{"class":905},[863,2889,2890],{},[856,2891,912,2892,916],{},[914,2893,173],{"href":174},[918,2895,921],{"id":920},[856,2897,924],{},[926,2899,929],{"id":928},[856,2901,932,2902,937,2904,940],{},[934,2903,936],{},[879,2905,881],{},[942,2907,2908],{"className":944,"code":945,"filename":946,"language":947,"meta":897,"style":897},[879,2909,2910,2928,2932,2958,2962,2976,3002,3028],{"__ignoreMap":897},[899,2911,2912,2914,2916,2918,2920,2922,2924,2926],{"class":952,"line":953},[899,2913,956],{"class":901},[899,2915,959],{"class":905},[899,2917,881],{"class":962},[899,2919,965],{"class":905},[899,2921,968],{"class":901},[899,2923,972],{"class":971},[899,2925,976],{"class":975},[899,2927,979],{"class":971},[899,2929,2930],{"class":952,"line":982},[899,2931,985],{"emptyLinePlaceholder":8},[899,2933,2934,2936,2938,2940,2942,2944,2946,2948,2950,2952,2954,2956],{"class":952,"line":988},[899,2935,992],{"class":991},[899,2937,996],{"class":995},[899,2939,1000],{"class":999},[899,2941,1003],{"class":901},[899,2943,1007],{"class":1006},[899,2945,1010],{"class":905},[899,2947,1013],{"class":962},[899,2949,1016],{"class":905},[899,2951,1019],{"class":971},[899,2953,1022],{"class":975},[899,2955,1019],{"class":971},[899,2957,1027],{"class":905},[899,2959,2960],{"class":952,"line":1030},[899,2961,985],{"emptyLinePlaceholder":8},[899,2963,2964,2966,2968,2970,2972,2974],{"class":952,"line":1035},[899,2965,1038],{"class":901},[899,2967,1041],{"class":905},[899,2969,1044],{"class":962},[899,2971,882],{"class":905},[899,2973,1049],{"class":962},[899,2975,1052],{"class":905},[899,2977,2978,2980,2982,2984,2986,2988,2990,2992,2994,2996,2998,3000],{"class":952,"line":1055},[899,2979,1058],{"class":962},[899,2981,882],{"class":905},[899,2983,1063],{"class":1006},[899,2985,1010],{"class":905},[899,2987,1044],{"class":962},[899,2989,882],{"class":905},[899,2991,1072],{"class":962},[899,2993,882],{"class":905},[899,2995,1077],{"class":962},[899,2997,882],{"class":905},[899,2999,1082],{"class":962},[899,3001,1027],{"class":905},[899,3003,3004,3006,3008,3010,3012,3014,3016,3018,3020,3022,3024,3026],{"class":952,"line":1087},[899,3005,1058],{"class":962},[899,3007,882],{"class":905},[899,3009,1063],{"class":1006},[899,3011,1010],{"class":905},[899,3013,1044],{"class":962},[899,3015,882],{"class":905},[899,3017,1072],{"class":962},[899,3019,882],{"class":905},[899,3021,1106],{"class":962},[899,3023,882],{"class":905},[899,3025,1111],{"class":962},[899,3027,1027],{"class":905},[899,3029,3030],{"class":952,"line":1116},[899,3031,1119],{"class":905},[856,3033,1122],{},[942,3035,3036],{"className":944,"code":1125,"language":947,"meta":897,"style":897},[879,3037,3038,3042,3050,3064,3068,3072,3084,3092,3100,3112,3124,3136,3144,3154,3158,3162,3170,3178,3184,3188,3192],{"__ignoreMap":897},[899,3039,3040],{"class":952,"line":953},[899,3041,1132],{"class":905},[899,3043,3044,3046,3048],{"class":952,"line":982},[899,3045,1137],{"class":905},[899,3047,1141],{"class":1140},[899,3049,1144],{"class":905},[899,3051,3052,3054,3056,3058,3060,3062],{"class":952,"line":988},[899,3053,1149],{"class":905},[899,3055,1153],{"class":1152},[899,3057,1156],{"class":1006},[899,3059,1159],{"class":905},[899,3061,1162],{"class":1006},[899,3063,1165],{"class":905},[899,3065,3066],{"class":952,"line":1030},[899,3067,1170],{"class":905},[899,3069,3070],{"class":952,"line":1035},[899,3071,1175],{"class":905},[899,3073,3074,3076,3078,3080,3082],{"class":952,"line":1055},[899,3075,1180],{"class":905},[899,3077,1019],{"class":971},[899,3079,1185],{"class":975},[899,3081,1019],{"class":971},[899,3083,1144],{"class":905},[899,3085,3086,3088,3090],{"class":952,"line":1087},[899,3087,1194],{"class":905},[899,3089,1198],{"class":1197},[899,3091,1144],{"class":905},[899,3093,3094,3096,3098],{"class":952,"line":1116},[899,3095,1205],{"class":905},[899,3097,1208],{"class":1197},[899,3099,1144],{"class":905},[899,3101,3102,3104,3106,3108,3110],{"class":952,"line":1213},[899,3103,1216],{"class":905},[899,3105,1019],{"class":971},[899,3107,1221],{"class":975},[899,3109,1019],{"class":971},[899,3111,1144],{"class":905},[899,3113,3114,3116,3118,3120,3122],{"class":952,"line":1228},[899,3115,1231],{"class":905},[899,3117,1019],{"class":971},[899,3119,1236],{"class":975},[899,3121,1019],{"class":971},[899,3123,1144],{"class":905},[899,3125,3126,3128,3130,3132,3134],{"class":952,"line":1243},[899,3127,1246],{"class":905},[899,3129,1019],{"class":971},[899,3131,1251],{"class":975},[899,3133,1019],{"class":971},[899,3135,1144],{"class":905},[899,3137,3138,3140,3142],{"class":952,"line":1258},[899,3139,1261],{"class":905},[899,3141,1264],{"class":1197},[899,3143,1144],{"class":905},[899,3145,3146,3148,3150,3152],{"class":952,"line":1269},[899,3147,1272],{"class":905},[899,3149,1019],{"class":971},[899,3151,1022],{"class":975},[899,3153,979],{"class":971},[899,3155,3156],{"class":952,"line":1281},[899,3157,1284],{"class":905},[899,3159,3160],{"class":952,"line":1287},[899,3161,1290],{"class":905},[899,3163,3164,3166,3168],{"class":952,"line":1293},[899,3165,1296],{"class":905},[899,3167,1299],{"class":1197},[899,3169,1144],{"class":905},[899,3171,3172,3174,3176],{"class":952,"line":1304},[899,3173,1307],{"class":905},[899,3175,1310],{"class":1197},[899,3177,1144],{"class":905},[899,3179,3180,3182],{"class":952,"line":1315},[899,3181,1318],{"class":905},[899,3183,1321],{"class":1197},[899,3185,3186],{"class":952,"line":1324},[899,3187,1327],{"class":905},[899,3189,3190],{"class":952,"line":1330},[899,3191,1333],{"class":905},[899,3193,3194],{"class":952,"line":1336},[899,3195,1119],{"class":905},[856,3197,1341,3198,1344],{},[879,3199,1106],{},[856,3201,1347,3202,1351,3204,1355,3206,1359,3208,1363],{},[879,3203,1350],{},[879,3205,1354],{},[879,3207,1358],{},[879,3209,1362],{},[856,3211,1366,3212,1369],{},[879,3213,881],{},[856,3215,1372,3216,1375],{},[879,3217,1350],{},[942,3219,3220],{"className":944,"code":1378,"language":947,"meta":897,"style":897},[879,3221,3222,3226,3234,3248,3258],{"__ignoreMap":897},[899,3223,3224],{"class":952,"line":953},[899,3225,1132],{"class":905},[899,3227,3228,3230,3232],{"class":952,"line":982},[899,3229,1137],{"class":905},[899,3231,1391],{"class":1140},[899,3233,1144],{"class":905},[899,3235,3236,3238,3240,3242,3244,3246],{"class":952,"line":988},[899,3237,1149],{"class":905},[899,3239,1153],{"class":1152},[899,3241,1156],{"class":1006},[899,3243,1159],{"class":905},[899,3245,1162],{"class":1006},[899,3247,1165],{"class":905},[899,3249,3250,3252,3254,3256],{"class":952,"line":1030},[899,3251,1412],{"class":905},[899,3253,1019],{"class":971},[899,3255,1417],{"class":975},[899,3257,979],{"class":971},[899,3259,3260],{"class":952,"line":1035},[899,3261,1119],{"class":905},[856,3263,1426,3264,1351,3266,1432,3268,882],{},[879,3265,1350],{},[879,3267,1431],{},[879,3269,1435],{},[856,3271,1438],{},[942,3273,3274],{"className":944,"code":1441,"language":947,"meta":897,"style":897},[879,3275,3276,3280,3288,3302,3312],{"__ignoreMap":897},[899,3277,3278],{"class":952,"line":953},[899,3279,1132],{"class":905},[899,3281,3282,3284,3286],{"class":952,"line":982},[899,3283,1137],{"class":905},[899,3285,1391],{"class":1140},[899,3287,1144],{"class":905},[899,3289,3290,3292,3294,3296,3298,3300],{"class":952,"line":988},[899,3291,1149],{"class":905},[899,3293,1153],{"class":1152},[899,3295,1156],{"class":1006},[899,3297,1159],{"class":905},[899,3299,1162],{"class":1006},[899,3301,1165],{"class":905},[899,3303,3304,3306,3308,3310],{"class":952,"line":1030},[899,3305,1412],{"class":905},[899,3307,1019],{"class":971},[899,3309,1478],{"class":975},[899,3311,979],{"class":971},[899,3313,3314],{"class":952,"line":1035},[899,3315,1119],{"class":905},[856,3317,1487],{},[942,3319,3320],{"className":944,"code":1490,"language":947,"meta":897,"style":897},[879,3321,3322,3326,3334,3348,3358],{"__ignoreMap":897},[899,3323,3324],{"class":952,"line":953},[899,3325,1132],{"class":905},[899,3327,3328,3330,3332],{"class":952,"line":982},[899,3329,1137],{"class":905},[899,3331,1391],{"class":1140},[899,3333,1144],{"class":905},[899,3335,3336,3338,3340,3342,3344,3346],{"class":952,"line":988},[899,3337,1149],{"class":905},[899,3339,1153],{"class":1152},[899,3341,1156],{"class":1006},[899,3343,1159],{"class":905},[899,3345,1162],{"class":1006},[899,3347,1165],{"class":905},[899,3349,3350,3352,3354,3356],{"class":952,"line":1030},[899,3351,1412],{"class":905},[899,3353,1019],{"class":971},[899,3355,1527],{"class":975},[899,3357,979],{"class":971},[899,3359,3360],{"class":952,"line":1035},[899,3361,1119],{"class":905},[856,3363,1536],{},[942,3365,3366],{"className":944,"code":1539,"language":947,"meta":897,"style":897},[879,3367,3368,3372,3380,3394,3404],{"__ignoreMap":897},[899,3369,3370],{"class":952,"line":953},[899,3371,1132],{"class":905},[899,3373,3374,3376,3378],{"class":952,"line":982},[899,3375,1137],{"class":905},[899,3377,1391],{"class":1140},[899,3379,1144],{"class":905},[899,3381,3382,3384,3386,3388,3390,3392],{"class":952,"line":988},[899,3383,1149],{"class":905},[899,3385,1153],{"class":1152},[899,3387,1156],{"class":1006},[899,3389,1159],{"class":905},[899,3391,1162],{"class":1006},[899,3393,1165],{"class":905},[899,3395,3396,3398,3400,3402],{"class":952,"line":1030},[899,3397,1412],{"class":905},[899,3399,1019],{"class":971},[899,3401,1576],{"class":975},[899,3403,979],{"class":971},[899,3405,3406],{"class":952,"line":1035},[899,3407,1119],{"class":905},[856,3409,1372,3410,1587,3412,882],{},[879,3411,1350],{},[879,3413,1590],{},[1592,3415,1595],{"id":1594},[856,3417,1598],{},[942,3419,3420],{"className":944,"code":1601,"language":947,"meta":897,"style":897},[879,3421,3422,3434,3444,3490],{"__ignoreMap":897},[899,3423,3424,3426,3428,3430,3432],{"class":952,"line":953},[899,3425,1608],{"class":901},[899,3427,1611],{"class":991},[899,3429,1614],{"class":991},[899,3431,1007],{"class":1006},[899,3433,1619],{"class":905},[899,3435,3436,3438,3440,3442],{"class":952,"line":982},[899,3437,1625],{"class":1624},[899,3439,1628],{"class":999},[899,3441,1632],{"class":1631},[899,3443,1144],{"class":905},[899,3445,3446,3448,3450,3452,3454,3456,3458,3460,3462,3464,3466,3468,3470,3472,3474,3476,3478,3480,3482,3484,3486,3488],{"class":952,"line":988},[899,3447,1639],{"class":1624},[899,3449,1628],{"class":999},[899,3451,972],{"class":971},[899,3453,1646],{"class":975},[899,3455,1019],{"class":971},[899,3457,1651],{"class":999},[899,3459,972],{"class":971},[899,3461,1022],{"class":975},[899,3463,1019],{"class":971},[899,3465,1651],{"class":999},[899,3467,972],{"class":971},[899,3469,1664],{"class":975},[899,3471,1019],{"class":971},[899,3473,1651],{"class":999},[899,3475,972],{"class":971},[899,3477,1673],{"class":975},[899,3479,1019],{"class":971},[899,3481,1651],{"class":999},[899,3483,972],{"class":971},[899,3485,1682],{"class":975},[899,3487,1019],{"class":971},[899,3489,1144],{"class":905},[899,3491,3492,3494,3496,3498,3500,3502,3504,3506],{"class":952,"line":1030},[899,3493,1691],{"class":905},[899,3495,1628],{"class":999},[899,3497,1696],{"class":1631},[899,3499,1699],{"class":905},[899,3501,1703],{"class":1702},[899,3503,1699],{"class":905},[899,3505,1708],{"class":1702},[899,3507,1711],{"class":905},[1592,3509,1715],{"id":1714},[856,3511,1718],{},[1720,3513,3514,3524],{},[1723,3515,3516],{},[1726,3517,3518,3520,3522],{},[1729,3519,1731],{},[1729,3521,1734],{},[1729,3523,1737],{},[1739,3525,3526,3540],{},[1726,3527,3528,3532,3536],{},[1744,3529,3530],{},[879,3531,1748],{},[1744,3533,3534],{},[879,3535,1753],{},[1744,3537,1756,3538,882],{},[934,3539,1759],{},[1726,3541,3542,3546,3550],{},[1744,3543,3544],{},[879,3545,1766],{},[1744,3547,3548],{},[879,3549,1771],{},[1744,3551,1774],{},[1592,3553,1778],{"id":1777},[856,3555,1781,3556,882],{},[879,3557,1784],{},[856,3559,3560,1789],{},[879,3561,1708],{},[1720,3563,3564,3574],{},[1723,3565,3566],{},[1726,3567,3568,3570,3572],{},[1729,3569,1731],{},[1729,3571,1734],{},[1729,3573,1737],{},[1739,3575,3576,3588],{},[1726,3577,3578,3582,3586],{},[1744,3579,3580],{},[879,3581,1077],{},[1744,3583,3584],{},[879,3585,1814],{},[1744,3587,1817],{},[1726,3589,3590,3594,3598],{},[1744,3591,3592],{},[879,3593,1106],{},[1744,3595,3596],{},[879,3597,1828],{},[1744,3599,1831],{},[856,3601,3602,1836],{},[879,3603,1814],{},[1720,3605,3606,3616],{},[1723,3607,3608],{},[1726,3609,3610,3612,3614],{},[1729,3611,1731],{},[1729,3613,1734],{},[1729,3615,1737],{},[1739,3617,3618,3630,3642,3654,3666,3680,3692,3704],{},[1726,3619,3620,3624,3628],{},[1744,3621,3622],{},[879,3623,1082],{},[1744,3625,3626],{},[879,3627,1753],{},[1744,3629,1863],{},[1726,3631,3632,3636,3640],{},[1744,3633,3634],{},[879,3635,1870],{},[1744,3637,3638],{},[879,3639,1875],{},[1744,3641,1878],{},[1726,3643,3644,3648,3652],{},[1744,3645,3646],{},[879,3647,1885],{},[1744,3649,3650],{},[879,3651,1875],{},[1744,3653,1892],{},[1726,3655,3656,3660,3664],{},[1744,3657,3658],{},[879,3659,1899],{},[1744,3661,3662],{},[879,3663,1753],{},[1744,3665,1906],{},[1726,3667,3668,3672,3676],{},[1744,3669,3670],{},[879,3671,1913],{},[1744,3673,3674],{},[879,3675,1918],{},[1744,3677,1921,3678,1925],{},[879,3679,1924],{},[1726,3681,3682,3686,3690],{},[1744,3683,3684],{},[879,3685,1362],{},[1744,3687,3688],{},[879,3689,1918],{},[1744,3691,1938],{},[1726,3693,3694,3698,3702],{},[1744,3695,3696],{},[879,3697,1358],{},[1744,3699,3700],{},[879,3701,1875],{},[1744,3703,1951],{},[1726,3705,3706,3710,3714],{},[1744,3707,3708],{},[879,3709,1766],{},[1744,3711,3712],{},[879,3713,1771],{},[1744,3715,1964],{},[1966,3717,3718],{},[856,3719,1970],{},[1972,3721,3722],{},[856,3723,1976],{},[1592,3725,1980,3726],{"id":1979},[879,3727,888],{},[856,3729,1985,3730,1988,3732,1992],{},[879,3731,888],{},[879,3733,1991],{},[942,3735,3736],{"className":944,"code":1995,"filename":946,"language":947,"meta":897,"style":897},[879,3737,3738,3752,3758,3764,3770,3776,3792],{"__ignoreMap":897},[899,3739,3740,3742,3744,3746,3748,3750],{"class":952,"line":953},[899,3741,992],{"class":991},[899,3743,2004],{"class":995},[899,3745,1000],{"class":999},[899,3747,1003],{"class":901},[899,3749,2011],{"class":1006},[899,3751,1619],{"class":905},[899,3753,3754,3756],{"class":952,"line":982},[899,3755,2018],{"class":962},[899,3757,1144],{"class":905},[899,3759,3760,3762],{"class":952,"line":988},[899,3761,2025],{"class":962},[899,3763,1144],{"class":905},[899,3765,3766,3768],{"class":952,"line":1030},[899,3767,2032],{"class":962},[899,3769,1144],{"class":905},[899,3771,3772,3774],{"class":952,"line":1035},[899,3773,2039],{"class":962},[899,3775,1144],{"class":905},[899,3777,3778,3780,3782,3784,3786,3788,3790],{"class":952,"line":1055},[899,3779,2046],{"class":905},[899,3781,2049],{"class":962},[899,3783,1628],{"class":2052},[899,3785,972],{"class":971},[899,3787,2057],{"class":975},[899,3789,1019],{"class":971},[899,3791,2062],{"class":905},[899,3793,3794],{"class":952,"line":1087},[899,3795,1027],{"class":905},[856,3797,1341,3798,2071,3800,2074,3802,882],{},[879,3799,888],{},[879,3801,881],{},[914,3803,2078],{"href":2077},[863,3805,3806],{},[856,3807,2083,3808,2087,3810,2091,3812,882],{},[879,3809,2086],{},[879,3811,2090],{},[879,3813,881],{},[2095,3815],{},[926,3817,2100],{"id":2099},[856,3819,2103],{},[856,3821,3822,2112],{},[879,3823,3824,3826],{"className":895,"language":896,"style":897},[899,3825,902],{"class":901},[899,3827,906],{"class":905},[942,3829,3830],{"className":2115,"code":2116,"language":5,"meta":897,"style":897},[879,3831,3832,3836,3850,3868,3884],{"__ignoreMap":897},[899,3833,3834],{"class":952,"line":953},[899,3835,1132],{"class":905},[899,3837,3838,3840,3842,3844,3846,3848],{"class":952,"line":982},[899,3839,2128],{"class":2127},[899,3841,1870],{"class":2131},[899,3843,2134],{"class":2127},[899,3845,1628],{"class":999},[899,3847,2139],{"class":1197},[899,3849,1144],{"class":905},[899,3851,3852,3854,3856,3858,3860,3862,3864,3866],{"class":952,"line":988},[899,3853,2128],{"class":2127},[899,3855,1991],{"class":2131},[899,3857,2134],{"class":2127},[899,3859,1628],{"class":999},[899,3861,2154],{"class":971},[899,3863,2157],{"class":975},[899,3865,2134],{"class":971},[899,3867,1144],{"class":905},[899,3869,3870,3872,3874,3876,3878,3880,3882],{"class":952,"line":1030},[899,3871,2128],{"class":2127},[899,3873,1082],{"class":2131},[899,3875,2134],{"class":2127},[899,3877,1628],{"class":999},[899,3879,2154],{"class":971},[899,3881,2176],{"class":975},[899,3883,2179],{"class":971},[899,3885,3886],{"class":952,"line":1035},[899,3887,1119],{"class":905},[856,3889,2186],{},[942,3891,3892],{"className":895,"code":2189,"language":896,"meta":897,"style":897},[879,3893,3894,3906,3914,3918,3922,3936,3954,3966,3978,3996,4010,4024,4042,4060,4078,4092,4108,4112,4124,4138,4152,4164,4168,4172],{"__ignoreMap":897},[899,3895,3896,3898,3900,3902,3904],{"class":952,"line":953},[899,3897,2196],{"class":991},[899,3899,2199],{"class":905},[899,3901,2202],{"class":1197},[899,3903,2205],{"class":1197},[899,3905,2208],{"class":975},[899,3907,3908,3910,3912],{"class":952,"line":982},[899,3909,2214],{"class":2213},[899,3911,1628],{"class":991},[899,3913,2219],{"class":975},[899,3915,3916],{"class":952,"line":988},[899,3917,985],{"emptyLinePlaceholder":8},[899,3919,3920],{"class":952,"line":1030},[899,3921,1132],{"class":905},[899,3923,3924,3926,3928,3930,3932,3934],{"class":952,"line":1035},[899,3925,2128],{"class":2127},[899,3927,1049],{"class":2131},[899,3929,2134],{"class":2127},[899,3931,1628],{"class":999},[899,3933,2240],{"class":1140},[899,3935,1144],{"class":905},[899,3937,3938,3940,3942,3944,3946,3948,3950,3952],{"class":952,"line":1055},[899,3939,2128],{"class":2127},[899,3941,2249],{"class":2131},[899,3943,2134],{"class":2127},[899,3945,1628],{"class":999},[899,3947,2154],{"class":971},[899,3949,2258],{"class":975},[899,3951,2134],{"class":971},[899,3953,1144],{"class":905},[899,3955,3956,3958,3960,3962,3964],{"class":952,"line":1087},[899,3957,2128],{"class":2127},[899,3959,1072],{"class":2131},[899,3961,2134],{"class":2127},[899,3963,1628],{"class":999},[899,3965,2275],{"class":905},[899,3967,3968,3970,3972,3974,3976],{"class":952,"line":1116},[899,3969,2280],{"class":2127},[899,3971,1077],{"class":2131},[899,3973,2134],{"class":2127},[899,3975,1628],{"class":999},[899,3977,2275],{"class":905},[899,3979,3980,3982,3984,3986,3988,3990,3992,3994],{"class":952,"line":1213},[899,3981,2293],{"class":2127},[899,3983,1082],{"class":2131},[899,3985,2134],{"class":2127},[899,3987,1628],{"class":999},[899,3989,2154],{"class":971},[899,3991,1185],{"class":975},[899,3993,2134],{"class":971},[899,3995,1144],{"class":905},[899,3997,3998,4000,4002,4004,4006,4008],{"class":952,"line":1228},[899,3999,2293],{"class":2127},[899,4001,1870],{"class":2131},[899,4003,2134],{"class":2127},[899,4005,1628],{"class":999},[899,4007,2139],{"class":1197},[899,4009,1144],{"class":905},[899,4011,4012,4014,4016,4018,4020,4022],{"class":952,"line":1243},[899,4013,2293],{"class":2127},[899,4015,1885],{"class":2131},[899,4017,2134],{"class":2127},[899,4019,1628],{"class":999},[899,4021,2334],{"class":1197},[899,4023,1144],{"class":905},[899,4025,4026,4028,4030,4032,4034,4036,4038,4040],{"class":952,"line":1258},[899,4027,2293],{"class":2127},[899,4029,1899],{"class":2131},[899,4031,2134],{"class":2127},[899,4033,1628],{"class":999},[899,4035,2154],{"class":971},[899,4037,1221],{"class":975},[899,4039,2134],{"class":971},[899,4041,1144],{"class":905},[899,4043,4044,4046,4048,4050,4052,4054,4056,4058],{"class":952,"line":1269},[899,4045,2293],{"class":2127},[899,4047,1913],{"class":2131},[899,4049,2134],{"class":2127},[899,4051,1628],{"class":999},[899,4053,2154],{"class":971},[899,4055,1236],{"class":975},[899,4057,2134],{"class":971},[899,4059,1144],{"class":905},[899,4061,4062,4064,4066,4068,4070,4072,4074,4076],{"class":952,"line":1281},[899,4063,2293],{"class":2127},[899,4065,1362],{"class":2131},[899,4067,2134],{"class":2127},[899,4069,1628],{"class":999},[899,4071,2154],{"class":971},[899,4073,1251],{"class":975},[899,4075,2134],{"class":971},[899,4077,1144],{"class":905},[899,4079,4080,4082,4084,4086,4088,4090],{"class":952,"line":1287},[899,4081,2293],{"class":2127},[899,4083,1358],{"class":2131},[899,4085,2134],{"class":2127},[899,4087,1628],{"class":999},[899,4089,2403],{"class":1197},[899,4091,1144],{"class":905},[899,4093,4094,4096,4098,4100,4102,4104,4106],{"class":952,"line":1293},[899,4095,2293],{"class":2127},[899,4097,1766],{"class":2131},[899,4099,2134],{"class":2127},[899,4101,1628],{"class":999},[899,4103,2154],{"class":971},[899,4105,1022],{"class":975},[899,4107,2179],{"class":971},[899,4109,4110],{"class":952,"line":1304},[899,4111,1284],{"class":905},[899,4113,4114,4116,4118,4120,4122],{"class":952,"line":1315},[899,4115,2280],{"class":2127},[899,4117,1106],{"class":2131},[899,4119,2134],{"class":2127},[899,4121,1628],{"class":999},[899,4123,2275],{"class":905},[899,4125,4126,4128,4130,4132,4134,4136],{"class":952,"line":1324},[899,4127,2293],{"class":2127},[899,4129,2444],{"class":2131},[899,4131,2134],{"class":2127},[899,4133,1628],{"class":999},[899,4135,2451],{"class":1197},[899,4137,1144],{"class":905},[899,4139,4140,4142,4144,4146,4148,4150],{"class":952,"line":1330},[899,4141,2293],{"class":2127},[899,4143,1111],{"class":2131},[899,4145,2134],{"class":2127},[899,4147,1628],{"class":999},[899,4149,2466],{"class":1197},[899,4151,1144],{"class":905},[899,4153,4154,4156,4158,4160,4162],{"class":952,"line":1336},[899,4155,2293],{"class":2127},[899,4157,2475],{"class":2131},[899,4159,2134],{"class":2127},[899,4161,1628],{"class":999},[899,4163,2482],{"class":1197},[899,4165,4166],{"class":952,"line":2485},[899,4167,1327],{"class":905},[899,4169,4170],{"class":952,"line":2490},[899,4171,1333],{"class":905},[899,4173,4174],{"class":952,"line":2495},[899,4175,1119],{"class":905},[856,4177,2500,4178,882],{},[914,4179,2078],{"href":2503},[856,4181,2506,4182,882],{},[879,4183,2509],{},[856,4185,2512,4186,2515,4188,882],{},[879,4187,1991],{},[879,4189,2518],{},[856,4191,2521,4192,1144,4194,1016,4196,2528,4198,2531,4200,2534],{},[879,4193,1870],{},[879,4195,1991],{},[879,4197,1082],{},[879,4199,1885],{},[879,4201,2090],{},[856,4203,2537,4204,2540,4206,1144,4208,1016,4210,1144,4212,2549,4214,882],{},[879,4205,881],{},[879,4207,1417],{},[879,4209,1478],{},[879,4211,1527],{},[879,4213,1590],{},[879,4215,1576],{},[856,4217,1372,4218,2556,4220,882],{},[879,4219,888],{},[879,4221,2559],{},[856,4223,2562,4224,2565],{},[879,4225,2509],{},[942,4227,4228],{"className":895,"code":2568,"language":896,"meta":897,"style":897},[879,4229,4230,4242,4250,4254,4258,4272,4290,4306],{"__ignoreMap":897},[899,4231,4232,4234,4236,4238,4240],{"class":952,"line":953},[899,4233,2196],{"class":991},[899,4235,2199],{"class":905},[899,4237,2202],{"class":1197},[899,4239,2581],{"class":1197},[899,4241,2584],{"class":975},[899,4243,4244,4246,4248],{"class":952,"line":982},[899,4245,2214],{"class":2213},[899,4247,1628],{"class":991},[899,4249,2219],{"class":975},[899,4251,4252],{"class":952,"line":988},[899,4253,985],{"emptyLinePlaceholder":8},[899,4255,4256],{"class":952,"line":1030},[899,4257,1132],{"class":905},[899,4259,4260,4262,4264,4266,4268,4270],{"class":952,"line":1035},[899,4261,2128],{"class":2127},[899,4263,1049],{"class":2131},[899,4265,2134],{"class":2127},[899,4267,1628],{"class":999},[899,4269,2613],{"class":1140},[899,4271,1144],{"class":905},[899,4273,4274,4276,4278,4280,4282,4284,4286,4288],{"class":952,"line":1055},[899,4275,2128],{"class":2127},[899,4277,2249],{"class":2131},[899,4279,2134],{"class":2127},[899,4281,1628],{"class":999},[899,4283,2154],{"class":971},[899,4285,2258],{"class":975},[899,4287,2134],{"class":971},[899,4289,1144],{"class":905},[899,4291,4292,4294,4296,4298,4300,4302,4304],{"class":952,"line":1087},[899,4293,2128],{"class":2127},[899,4295,2640],{"class":2131},[899,4297,2134],{"class":2127},[899,4299,1628],{"class":999},[899,4301,2154],{"class":971},[899,4303,2649],{"class":975},[899,4305,2179],{"class":971},[899,4307,4308],{"class":952,"line":1116},[899,4309,1119],{"class":905},[1592,4311,2659],{"id":2658},[856,4313,2662],{},[872,4315,4316,4324],{},[875,4317,4318,4320],{},[879,4319,2669],{},[872,4321,4322],{},[875,4323,2674],{},[875,4325,4326,2680,4328,2684,4330,4332,2694,4335,2698,4337],{},[879,4327,2679],{},[879,4329,2683],{},[879,4331,2687],{},[914,4333,2693],{"href":2690,"rel":4334},[2692],[934,4336,2697],{},[872,4338,4339,4343],{},[875,4340,4341,2705],{},[879,4342,2683],{},[875,4344,4345,2710],{},[879,4346,2687],{},[918,4348,2714],{"id":2713},[856,4350,2717],{},[926,4352,2721],{"id":2720},[856,4354,2724,4355,2727,4357,2730],{},[879,4356,1991],{},[879,4358,881],{},[926,4360,2734],{"id":2733},[856,4362,2737,4363,2740,4365,1144,4367,2528,4369,2748,4371,2751,4373,2754],{},[879,4364,1350],{},[879,4366,1354],{},[879,4368,1431],{},[879,4370,2747],{},[879,4372,1358],{},[879,4374,1362],{},[926,4376,2758],{"id":2757},[856,4378,2761,4379,2765,4381,2768],{},[879,4380,2764],{},[879,4382,1885],{},[926,4384,2772],{"id":2771},[856,4386,2775,4387,2778,4389,2781],{},[879,4388,1077],{},[879,4390,1106],{},[918,4392,2785],{"id":2784},[856,4394,2788],{},[926,4396,2792],{"id":2791},[856,4398,2795],{},[1720,4400,4401,4409],{},[1723,4402,4403],{},[1726,4404,4405,4407],{},[1729,4406,2804],{},[1729,4408,1737],{},[1739,4410,4411,4419],{},[1726,4412,4413,4417],{},[1744,4414,4415],{},[879,4416,2669],{},[1744,4418,2817],{},[1726,4420,4421,4425],{},[1744,4422,4423],{},[879,4424,2679],{},[1744,4426,2826],{},[2828,4428,2830],{},{"title":897,"searchDepth":982,"depth":982,"links":4430},[4431,4435,4441],{"id":920,"depth":982,"text":921,"children":4432},[4433,4434],{"id":928,"depth":988,"text":929},{"id":2099,"depth":988,"text":2100},{"id":2713,"depth":982,"text":2714,"children":4436},[4437,4438,4439,4440],{"id":2720,"depth":988,"text":2721},{"id":2733,"depth":988,"text":2734},{"id":2757,"depth":988,"text":2758},{"id":2771,"depth":988,"text":2772},{"id":2784,"depth":982,"text":2785,"children":4442},[4443],{"id":2791,"depth":988,"text":2792},{},{"title":203,"description":2846},1780436287054]