[{"data":1,"prerenderedAt":3027},["ShallowReactive",2],{"navLinks":3,"sidebar_docs_navigation_\u002Fdocs\u002Futils":64,"navigation":263,"navLinks_footer":835,"\u002Fdocs\u002Futils\u002Fserver\u002Fencryption_page":848,"\u002Fdocs\u002Futils\u002Fserver\u002Fencryption_surround":2068,"\u002Fdocs\u002Futils\u002Fserver\u002Fencryption":2071},{"id":4,"extension":5,"links":6,"meta":61,"stem":62,"__hash__":63},"navigationMenu\u002Fnavigation.json","json",[7,52,57],{"nested":8,"label":9,"icon":10,"to":11,"children":12},true,"Docs","i-lucide-book-open","\u002Fdocs\u002Fgetting-started",[13,19,26,32,39,45],{"label":14,"icon":15,"to":11,"description":16,"github":17,"badge":18},"Getting Started","i-lucide-rocket","An introduction to help you understand the core components.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fdocshub","Start Here",{"label":20,"icon":21,"to":22,"description":23,"github":24,"badge":25},"Auth H3 Client","i-lucide-key-round","\u002Fdocs\u002Fauth-h3client","Seamlessly enforce OAuth 2.0 authentication and session management integrated directly as the client of the IAM module.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fauth-h3client","Core",{"label":27,"icon":28,"to":29,"description":30,"github":31,"badge":25},"IAM","i-lucide-shield-check","\u002Fdocs\u002Fiam","Identity and Access Management featuring granular roles, permissions, and security policies.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fauth",{"label":33,"icon":34,"to":35,"description":36,"github":37,"badge":38},"Bot Detection","i-lucide-cpu","\u002Fdocs\u002Fbot-detection","Advanced behavioral analysis and request fingerprinting to stop malicious automated traffic.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fbot-detector","Security",{"label":40,"icon":41,"to":42,"description":43,"github":44,"badge":38},"Shield Base","i-lucide-database-zap","\u002Fdocs\u002Fshield-base","CLI and programmatic toolkit for compiling offline-ready IP intelligence databases from BGP, GeoIP, Tor, FireHOL, and other public threat feeds.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fshield-base-cli",{"label":46,"icon":47,"to":48,"description":49,"github":50,"badge":51},"Utils","i-lucide-wrench","\u002Fdocs\u002Futils","A standard library of highly optimized helpers for formatting, validation, and core logic.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Futils","Library",{"nested":53,"label":54,"icon":55,"to":56},false,"Blog","i-lucide-pen-line","\u002Fblog",{"nested":53,"label":58,"icon":59,"to":60},"Website","lucide:app-window-mac","https:\u002F\u002Friavzon.com",{},"navigation","gkaQ0xRGxSLrLyM3kttLe0oBwkrR1EBjlepF8LSbwF8",[65],{"title":9,"path":66,"stem":67,"children":68,"page":53},"\u002Fdocs","docs",[69],{"title":70,"path":48,"stem":71,"children":72},"Utilities","docs\u002Futils\u002Findex",[73,74,91,124,221],{"title":70,"path":48,"stem":71},{"title":75,"path":76,"stem":77,"children":78,"page":53},"Eslint","\u002Fdocs\u002Futils\u002Feslint","docs\u002Futils\u002Feslint",[79,83,87],{"title":80,"path":81,"stem":82},"React Config","\u002Fdocs\u002Futils\u002Feslint\u002Freact","docs\u002Futils\u002Feslint\u002Freact",{"title":84,"path":85,"stem":86},"TypeScript Config","\u002Fdocs\u002Futils\u002Feslint\u002Ftypescript","docs\u002Futils\u002Feslint\u002Ftypescript",{"title":88,"path":89,"stem":90},"Vue Config","\u002Fdocs\u002Futils\u002Feslint\u002Fvue","docs\u002Futils\u002Feslint\u002Fvue",{"title":92,"path":93,"stem":94,"children":95,"page":53},"Server","\u002Fdocs\u002Futils\u002Fserver","docs\u002Futils\u002Fserver",[96,100,104,108,112,116,120],{"title":97,"path":98,"stem":99},"Encryption","\u002Fdocs\u002Futils\u002Fserver\u002Fencryption","docs\u002Futils\u002Fserver\u002Fencryption",{"title":101,"path":102,"stem":103},"Path Resolver","\u002Fdocs\u002Futils\u002Fserver\u002Fpathresolver","docs\u002Futils\u002Fserver\u002FpathResolver",{"title":105,"path":106,"stem":107},"File Replacements","\u002Fdocs\u002Futils\u002Fserver\u002Freplace","docs\u002Futils\u002Fserver\u002Freplace",{"title":109,"path":110,"stem":111},"run","\u002Fdocs\u002Futils\u002Fserver\u002Frun","docs\u002Futils\u002Fserver\u002Frun",{"title":113,"path":114,"stem":115},"scheduleTask","\u002Fdocs\u002Futils\u002Fserver\u002Fscheduletask","docs\u002Futils\u002Fserver\u002FscheduleTask",{"title":117,"path":118,"stem":119},"spawnRun","\u002Fdocs\u002Futils\u002Fserver\u002Fspawnrun","docs\u002Futils\u002Fserver\u002FspawnRun",{"title":121,"path":122,"stem":123},"uploadCsv","\u002Fdocs\u002Futils\u002Fserver\u002Fuploadcsv","docs\u002Futils\u002Fserver\u002FuploadCsv",{"title":125,"path":126,"stem":127,"children":128,"page":53},"Shared","\u002Fdocs\u002Futils\u002Fshared","docs\u002Futils\u002Fshared",[129,133,137,141,145,149,153,157,161,165,169,173,177,181,185,189,193,197,201,205,209,213,217],{"title":130,"path":131,"stem":132},"BatchQueue","\u002Fdocs\u002Futils\u002Fshared\u002Fbatchqueue","docs\u002Futils\u002Fshared\u002FbatchQueue",{"title":134,"path":135,"stem":136},"capitalize","\u002Fdocs\u002Futils\u002Fshared\u002Fcapitalize","docs\u002Futils\u002Fshared\u002Fcapitalize",{"title":138,"path":139,"stem":140},"chunkProcess","\u002Fdocs\u002Futils\u002Fshared\u002Fchunkprocess","docs\u002Futils\u002Fshared\u002FchunkProcess",{"title":142,"path":143,"stem":144},"cleanObject","\u002Fdocs\u002Futils\u002Fshared\u002Fcleanobject","docs\u002Futils\u002Fshared\u002FcleanObject",{"title":146,"path":147,"stem":148},"createConfigManager","\u002Fdocs\u002Futils\u002Fshared\u002Fconfigurationdefiner","docs\u002Futils\u002Fshared\u002FconfigurationDefiner",{"title":150,"path":151,"stem":152},"debounce","\u002Fdocs\u002Futils\u002Fshared\u002Fdebounce","docs\u002Futils\u002Fshared\u002Fdebounce",{"title":154,"path":155,"stem":156},"ensureArray","\u002Fdocs\u002Futils\u002Fshared\u002Fensurearray","docs\u002Futils\u002Fshared\u002FensureArray",{"title":158,"path":159,"stem":160},"fetchWithRetry","\u002Fdocs\u002Futils\u002Fshared\u002Ffetchwithretry","docs\u002Futils\u002Fshared\u002FfetchWithRetry",{"title":162,"path":163,"stem":164},"filterEmptyValues","\u002Fdocs\u002Futils\u002Fshared\u002Ffilteremptyvalues","docs\u002Futils\u002Fshared\u002FfilterEmptyValues",{"title":166,"path":167,"stem":168},"findStringsInObject","\u002Fdocs\u002Futils\u002Fshared\u002Ffindobjectvalues","docs\u002Futils\u002Fshared\u002FfindObjectValues",{"title":170,"path":171,"stem":172},"fisherYatesShuffle","\u002Fdocs\u002Futils\u002Fshared\u002Ffisheryatesshuffle","docs\u002Futils\u002Fshared\u002FfisherYatesShuffle",{"title":174,"path":175,"stem":176},"getRandomImage","\u002Fdocs\u002Futils\u002Fshared\u002Fgetrandomimage","docs\u002Futils\u002Fshared\u002FgetRandomImage",{"title":178,"path":179,"stem":180},"isObjectHasValues","\u002Fdocs\u002Futils\u002Fshared\u002Fisobjecthasvalues","docs\u002Futils\u002Fshared\u002FisObjectHasValues",{"title":182,"path":183,"stem":184},"isAsyncOrPromise","\u002Fdocs\u002Futils\u002Fshared\u002Fispromise","docs\u002Futils\u002Fshared\u002FisPromise",{"title":186,"path":187,"stem":188},"MiniCache","\u002Fdocs\u002Futils\u002Fshared\u002Fminicache","docs\u002Futils\u002Fshared\u002FminiCache",{"title":190,"path":191,"stem":192},"parseCookies","\u002Fdocs\u002Futils\u002Fshared\u002Fparserawcookies","docs\u002Futils\u002Fshared\u002FparseRawCookies",{"title":194,"path":195,"stem":196},"safeAction","\u002Fdocs\u002Futils\u002Fshared\u002Fpromiselocker","docs\u002Futils\u002Fshared\u002FpromiseLocker",{"title":198,"path":199,"stem":200},"Random","\u002Fdocs\u002Futils\u002Fshared\u002Frandom","docs\u002Futils\u002Fshared\u002Frandom",{"title":202,"path":203,"stem":204},"range","\u002Fdocs\u002Futils\u002Fshared\u002Frange","docs\u002Futils\u002Fshared\u002Frange",{"title":206,"path":207,"stem":208},"rateLimiters","\u002Fdocs\u002Futils\u002Fshared\u002Fratelimiters","docs\u002Futils\u002Fshared\u002FrateLimiters",{"title":210,"path":211,"stem":212},"safeObjectMerge","\u002Fdocs\u002Futils\u002Fshared\u002Fsafemerge","docs\u002Futils\u002Fshared\u002FsafeMerge",{"title":214,"path":215,"stem":216},"textTruncation","\u002Fdocs\u002Futils\u002Fshared\u002Ftexttruncation","docs\u002Futils\u002Fshared\u002FtextTruncation",{"title":218,"path":219,"stem":220},"validateZodSchema","\u002Fdocs\u002Futils\u002Fshared\u002Fvalidatezodschema","docs\u002Futils\u002Fshared\u002FvalidateZodSchema",{"title":222,"path":223,"stem":224,"children":225},"Utility Types","\u002Fdocs\u002Futils\u002Ftypes","docs\u002Futils\u002Ftypes\u002Findex",[226,227,231,235,239,243,247,251,255,259],{"title":222,"path":223,"stem":224},{"title":228,"path":229,"stem":230},"Brand","\u002Fdocs\u002Futils\u002Ftypes\u002Fbrand","docs\u002Futils\u002Ftypes\u002FBrand",{"title":232,"path":233,"stem":234},"DeepPartial","\u002Fdocs\u002Futils\u002Ftypes\u002Fdeeppartial","docs\u002Futils\u002Ftypes\u002FDeepPartial",{"title":236,"path":237,"stem":238},"Merge","\u002Fdocs\u002Futils\u002Ftypes\u002Fmerge","docs\u002Futils\u002Ftypes\u002FMerge",{"title":240,"path":241,"stem":242},"NonNullable","\u002Fdocs\u002Futils\u002Ftypes\u002Fnonnullable","docs\u002Futils\u002Ftypes\u002FNonNullable",{"title":244,"path":245,"stem":246},"Prettify","\u002Fdocs\u002Futils\u002Ftypes\u002Fprettify","docs\u002Futils\u002Ftypes\u002FPrettify",{"title":248,"path":249,"stem":250},"PromiseType","\u002Fdocs\u002Futils\u002Ftypes\u002Fpromisetype","docs\u002Futils\u002Ftypes\u002FPromiseType",{"title":252,"path":253,"stem":254},"RequireKeys","\u002Fdocs\u002Futils\u002Ftypes\u002Frequirekeys","docs\u002Futils\u002Ftypes\u002FRequireKeys",{"title":256,"path":257,"stem":258},"StandardResponse","\u002Fdocs\u002Futils\u002Ftypes\u002Fstandardresponse","docs\u002Futils\u002Ftypes\u002FStandardResponse",{"title":260,"path":261,"stem":262},"ValueOf","\u002Fdocs\u002Futils\u002Ftypes\u002Fvalueof","docs\u002Futils\u002Ftypes\u002FValueOf",[264],{"title":9,"path":66,"stem":67,"children":265,"page":53},[266,413,531,536,714,781],{"title":20,"path":22,"stem":267,"children":268},"docs\u002Fauth-h3client\u002Findex",[269,270,279,316,342,364,367,388,392],{"title":20,"path":22,"stem":267},{"title":14,"path":271,"stem":272,"children":273},"\u002Fdocs\u002Fauth-h3client\u002Fgetting-started","docs\u002Fauth-h3client\u002F00.getting-started\u002Findex",[274,275],{"title":14,"path":271,"stem":272},{"title":276,"path":277,"stem":278},"Nuxt Module","\u002Fdocs\u002Fauth-h3client\u002Fgetting-started\u002Fnuxt","docs\u002Fauth-h3client\u002F00.getting-started\u002F00.nuxt",{"title":280,"path":281,"stem":282,"children":283},"Essentials","\u002Fdocs\u002Fauth-h3client\u002Fessentials","docs\u002Fauth-h3client\u002F01.essentials\u002Findex",[284,285,289,293,297,301,305,308,312],{"title":280,"path":281,"stem":282},{"title":286,"path":287,"stem":288},"Session Management","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fsession","docs\u002Fauth-h3client\u002F01.essentials\u002F00.session",{"title":290,"path":291,"stem":292},"Route Protection","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Froute-protection","docs\u002Fauth-h3client\u002F01.essentials\u002F01.route-protection",{"title":294,"path":295,"stem":296},"CSRF Protection","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fcsrf","docs\u002Fauth-h3client\u002F01.essentials\u002F02.csrf",{"title":298,"path":299,"stem":300},"Auth Flows","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fauth-flows","docs\u002Fauth-h3client\u002F01.essentials\u002F03.auth-flows",{"title":302,"path":303,"stem":304},"OAuth and OIDC","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Foauth","docs\u002Fauth-h3client\u002F01.essentials\u002F04.oauth",{"title":33,"path":306,"stem":307},"\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fbot-detection","docs\u002Fauth-h3client\u002F01.essentials\u002F05.bot-detection",{"title":309,"path":310,"stem":311},"Cookies","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fcookies","docs\u002Fauth-h3client\u002F01.essentials\u002F06.cookies",{"title":313,"path":314,"stem":315},"Logging","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Flogging","docs\u002Fauth-h3client\u002F01.essentials\u002F07.logging",{"title":317,"path":318,"stem":319,"children":320},"MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa","docs\u002Fauth-h3client\u002F02.mfa\u002Findex",[321,322,326,330,334,338],{"title":317,"path":318,"stem":319},{"title":323,"path":324,"stem":325},"Built-in MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fbuilt-in-flow","docs\u002Fauth-h3client\u002F02.mfa\u002F01.built-in-flow",{"title":327,"path":328,"stem":329},"Password Reset","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fpassword-reset","docs\u002Fauth-h3client\u002F02.mfa\u002F02.password-reset",{"title":331,"path":332,"stem":333},"Email Change","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Femail-change","docs\u002Fauth-h3client\u002F02.mfa\u002F03.email-change",{"title":335,"path":336,"stem":337},"Custom MFA Flow","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fcustom-flow","docs\u002Fauth-h3client\u002F02.mfa\u002F04.custom-flow",{"title":339,"path":340,"stem":341},"Client-Side MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fclient-side","docs\u002Fauth-h3client\u002F02.mfa\u002F05.client-side",{"title":343,"path":344,"stem":345,"children":346},"Client-side","\u002Fdocs\u002Fauth-h3client\u002Fclient","docs\u002Fauth-h3client\u002F03.client\u002Findex",[347,348,352,356,360],{"title":343,"path":344,"stem":345},{"title":349,"path":350,"stem":351},"useAuthData","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fuse-auth-data","docs\u002Fauth-h3client\u002F03.client\u002F00.use-auth-data",{"title":353,"path":354,"stem":355},"useMagicLink","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fuse-magic-link","docs\u002Fauth-h3client\u002F03.client\u002F01.use-magic-link",{"title":357,"path":358,"stem":359},"executeRequest","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fexecute-request","docs\u002Fauth-h3client\u002F03.client\u002F02.execute-request",{"title":361,"path":362,"stem":363},"getCsrfToken","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fget-csrf-token","docs\u002Fauth-h3client\u002F03.client\u002F03.get-csrf-token",{"title":38,"path":365,"stem":366},"\u002Fdocs\u002Fauth-h3client\u002Fsecurity","docs\u002Fauth-h3client\u002F04.security",{"title":368,"path":369,"stem":370,"children":371,"page":53},"Guides","\u002Fdocs\u002Fauth-h3client\u002Fguides","docs\u002Fauth-h3client\u002F05.guides",[372,376,380,384],{"title":373,"path":374,"stem":375},"H3 and Nitro Setup","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fh3-nitro","docs\u002Fauth-h3client\u002F05.guides\u002F00.h3-nitro",{"title":377,"path":378,"stem":379},"HMAC Inter-service Auth","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fhmac","docs\u002Fauth-h3client\u002F05.guides\u002Fhmac",{"title":381,"path":382,"stem":383},"Image Upload","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fimage-upload","docs\u002Fauth-h3client\u002F05.guides\u002Fimage-upload",{"title":385,"path":386,"stem":387},"mTLS Configuration","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fmtls","docs\u002Fauth-h3client\u002F05.guides\u002Fmtls",{"title":389,"path":390,"stem":391},"Configuration","\u002Fdocs\u002Fauth-h3client\u002Fconfiguration","docs\u002Fauth-h3client\u002F06.configuration",{"title":393,"path":394,"stem":395,"children":396},"API Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi","docs\u002Fauth-h3client\u002F07.api\u002Findex",[397,398,402,406,410],{"title":393,"path":394,"stem":395},{"title":399,"path":400,"stem":401},"Routes Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fcontrollers","docs\u002Fauth-h3client\u002F07.api\u002F00.controllers",{"title":403,"path":404,"stem":405},"Middleware Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fmiddleware","docs\u002Fauth-h3client\u002F07.api\u002F01.middleware",{"title":407,"path":408,"stem":409},"Client-side Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fcomposables","docs\u002Fauth-h3client\u002F07.api\u002F02.composables",{"title":70,"path":411,"stem":412},"\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Futilities","docs\u002Fauth-h3client\u002F07.api\u002F03.utilities",{"title":414,"path":35,"stem":415,"children":416},"Bot Detector","docs\u002Fbot-detection\u002Findex",[417,418,421,425,429,448,522,525,528],{"title":414,"path":35,"stem":415},{"title":14,"path":419,"stem":420},"\u002Fdocs\u002Fbot-detection\u002Fgetting-started","docs\u002Fbot-detection\u002F00.getting-started",{"title":422,"path":423,"stem":424},"CLI","\u002Fdocs\u002Fbot-detection\u002Fcli","docs\u002Fbot-detection\u002F01.cli",{"title":426,"path":427,"stem":428},"Data Sources","\u002Fdocs\u002Fbot-detection\u002Fdata-sources","docs\u002Fbot-detection\u002F02.data-sources",{"title":368,"path":430,"stem":431,"children":432,"page":53},"\u002Fdocs\u002Fbot-detection\u002Fguides","docs\u002Fbot-detection\u002F03.guides",[433,437,441,444],{"title":434,"path":435,"stem":436},"Custom Checkers","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fcustom","docs\u002Fbot-detection\u002F03.guides\u002FCUSTOM",{"title":438,"path":439,"stem":440},"Scheduling Database Generation","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fgenerate","docs\u002Fbot-detection\u002F03.guides\u002FGENERATE",{"title":313,"path":442,"stem":443},"\u002Fdocs\u002Fbot-detection\u002Fguides\u002Flogging","docs\u002Fbot-detection\u002F03.guides\u002FLOGGING",{"title":445,"path":446,"stem":447},"Score Modes and Reputation Healing","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fscore","docs\u002Fbot-detection\u002F03.guides\u002FSCORE",{"title":449,"path":450,"stem":451,"children":452},"Checkers","\u002Fdocs\u002Fbot-detection\u002Fcheckers","docs\u002Fbot-detection\u002F04.checkers\u002Findex",[453,454,458,462,466,470,474,478,482,486,490,494,498,502,506,510,514,518],{"title":449,"path":450,"stem":451},{"title":455,"path":456,"stem":457},"IP Validation","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fip-validation","docs\u002Fbot-detection\u002F04.checkers\u002F01.ip-validation",{"title":459,"path":460,"stem":461},"Good \u002F Bad Bot Verification","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fgood-bots","docs\u002Fbot-detection\u002F04.checkers\u002F02.good-bots",{"title":463,"path":464,"stem":465},"Browser & Device Fingerprint","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fbrowser-device","docs\u002Fbot-detection\u002F04.checkers\u002F03.browser-device",{"title":467,"path":468,"stem":469},"Locale Map","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Flocale-map","docs\u002Fbot-detection\u002F04.checkers\u002F04.locale-map",{"title":471,"path":472,"stem":473},"Known Threats","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-threats","docs\u002Fbot-detection\u002F04.checkers\u002F05.known-threats",{"title":475,"path":476,"stem":477},"ASN Classification","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fasn-classification","docs\u002Fbot-detection\u002F04.checkers\u002F06.asn-classification",{"title":479,"path":480,"stem":481},"Tor Analysis","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Ftor-analysis","docs\u002Fbot-detection\u002F04.checkers\u002F07.tor-analysis",{"title":483,"path":484,"stem":485},"Timezone Consistency","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Ftimezone-consistency","docs\u002Fbot-detection\u002F04.checkers\u002F08.timezone-consistency",{"title":487,"path":488,"stem":489},"Honeypot","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fhoneypot","docs\u002Fbot-detection\u002F04.checkers\u002F09.honeypot",{"title":491,"path":492,"stem":493},"Known Bad IPs","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-bad-ips","docs\u002Fbot-detection\u002F04.checkers\u002F10.known-bad-ips",{"title":495,"path":496,"stem":497},"Behavior Rate","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fbehavior-rate","docs\u002Fbot-detection\u002F04.checkers\u002F11.behavior-rate",{"title":499,"path":500,"stem":501},"Proxy \u002F ISP \u002F Cookie","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fproxy-isp-cookies","docs\u002Fbot-detection\u002F04.checkers\u002F12.proxy-isp-cookies",{"title":503,"path":504,"stem":505},"Session Coherence","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fsession-coherence","docs\u002Fbot-detection\u002F04.checkers\u002F13.session-coherence",{"title":507,"path":508,"stem":509},"Velocity Fingerprint","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fvelocity-fingerprint","docs\u002Fbot-detection\u002F04.checkers\u002F14.velocity-fingerprint",{"title":511,"path":512,"stem":513},"UA & Header Analysis","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fua-header","docs\u002Fbot-detection\u002F04.checkers\u002F15.ua-header",{"title":515,"path":516,"stem":517},"Geolocation","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fgeolocation","docs\u002Fbot-detection\u002F04.checkers\u002F16.geolocation",{"title":519,"path":520,"stem":521},"Known Bad User-Agents","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-bad-ua","docs\u002Fbot-detection\u002F04.checkers\u002F17.known-bad-ua",{"title":38,"path":523,"stem":524},"\u002Fdocs\u002Fbot-detection\u002Fsecurity","docs\u002Fbot-detection\u002F04.security",{"title":393,"path":526,"stem":527},"\u002Fdocs\u002Fbot-detection\u002Fapi","docs\u002Fbot-detection\u002F05.api",{"title":389,"path":529,"stem":530},"\u002Fdocs\u002Fbot-detection\u002Fconfiguration","docs\u002Fbot-detection\u002F06.configuration",{"title":532,"path":11,"stem":533,"children":534},"Introduction","docs\u002Fgetting-started\u002Findex",[535],{"title":532,"path":11,"stem":533},{"title":27,"path":29,"stem":537,"children":538},"docs\u002Fiam\u002Findex",[539,540,543,678,681,697,700],{"title":27,"path":29,"stem":537},{"title":14,"path":541,"stem":542},"\u002Fdocs\u002Fiam\u002Fgetting-started","docs\u002Fiam\u002F00.getting-started",{"title":280,"path":544,"stem":545,"children":546},"\u002Fdocs\u002Fiam\u002Fessentials","docs\u002Fiam\u002F01.essentials\u002Findex",[547,548,552,556,560,564,568,572,576,580,584,588,591,595,599,603,607,610,614,618,621,625,628],{"title":280,"path":544,"stem":545},{"title":549,"path":550,"stem":551},"Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Ftokens","docs\u002Fiam\u002F01.essentials\u002F00.tokens",{"title":553,"path":554,"stem":555},"Access Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Faccess-tokens","docs\u002Fiam\u002F01.essentials\u002F01.access-tokens",{"title":557,"path":558,"stem":559},"Refresh Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Frefresh-tokens","docs\u002Fiam\u002F01.essentials\u002F02.refresh-tokens",{"title":561,"path":562,"stem":563},"Anomaly Detection","\u002Fdocs\u002Fiam\u002Fessentials\u002Fanomalies","docs\u002Fiam\u002F01.essentials\u002F03.anomalies",{"title":565,"path":566,"stem":567},"Signup","\u002Fdocs\u002Fiam\u002Fessentials\u002Fsignup","docs\u002Fiam\u002F01.essentials\u002F04.signup",{"title":569,"path":570,"stem":571},"Login","\u002Fdocs\u002Fiam\u002Fessentials\u002Flogin","docs\u002Fiam\u002F01.essentials\u002F05.login",{"title":573,"path":574,"stem":575},"Logout","\u002Fdocs\u002Fiam\u002Fessentials\u002Flogout","docs\u002Fiam\u002F01.essentials\u002F06.logout",{"title":577,"path":578,"stem":579},"OAuth","\u002Fdocs\u002Fiam\u002Fessentials\u002Foauth","docs\u002Fiam\u002F01.essentials\u002F07.oauth",{"title":581,"path":582,"stem":583},"Magic Links","\u002Fdocs\u002Fiam\u002Fessentials\u002Fmagic-links","docs\u002Fiam\u002F01.essentials\u002F08.magic-links",{"title":585,"path":586,"stem":587},"Emails","\u002Fdocs\u002Fiam\u002Fessentials\u002Femails","docs\u002Fiam\u002F01.essentials\u002F09.emails",{"title":317,"path":589,"stem":590},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fmfa","docs\u002Fiam\u002F01.essentials\u002F10.mfa",{"title":592,"path":593,"stem":594},"Fingerprinting","\u002Fdocs\u002Fiam\u002Fessentials\u002Ffingerprinting","docs\u002Fiam\u002F01.essentials\u002F11.fingerprinting",{"title":596,"path":597,"stem":598},"Backend for Frontend","\u002Fdocs\u002Fiam\u002Fessentials\u002Fbff","docs\u002Fiam\u002F01.essentials\u002F12.bff",{"title":600,"path":601,"stem":602},"HMAC Authentication","\u002Fdocs\u002Fiam\u002Fessentials\u002Fhmac","docs\u002Fiam\u002F01.essentials\u002F13.hmac",{"title":604,"path":605,"stem":606},"XSS Protection","\u002Fdocs\u002Fiam\u002Fessentials\u002Fxss","docs\u002Fiam\u002F01.essentials\u002F14.xss",{"title":313,"path":608,"stem":609},"\u002Fdocs\u002Fiam\u002Fessentials\u002Flogging","docs\u002Fiam\u002F01.essentials\u002F15.logging",{"title":611,"path":612,"stem":613},"Rate Limiting","\u002Fdocs\u002Fiam\u002Fessentials\u002Frate-limiting","docs\u002Fiam\u002F01.essentials\u002F16.rate-limiting",{"title":615,"path":616,"stem":617},"Database","\u002Fdocs\u002Fiam\u002Fessentials\u002Fdatabase","docs\u002Fiam\u002F01.essentials\u002F17.database",{"title":309,"path":619,"stem":620},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fcookies","docs\u002Fiam\u002F01.essentials\u002F18.cookies",{"title":622,"path":623,"stem":624},"Service Startup","\u002Fdocs\u002Fiam\u002Fessentials\u002Fservice","docs\u002Fiam\u002F01.essentials\u002F19.service",{"title":327,"path":626,"stem":627},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fpassword-reset","docs\u002Fiam\u002F01.essentials\u002F20.password-reset",{"title":629,"path":630,"stem":631,"children":632},"API Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi","docs\u002Fiam\u002F01.essentials\u002F21.api\u002Findex",[633,634,638,642,672,675],{"title":629,"path":630,"stem":631},{"title":635,"path":636,"stem":637},"Creating Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fcreation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F00.creation",{"title":639,"path":640,"stem":641},"Verifying Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fverification","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F01.verification",{"title":643,"path":644,"stem":645,"children":646},"Manage Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002Findex",[647,648,652,656,660,664,668],{"title":643,"path":644,"stem":645},{"title":649,"path":650,"stem":651},"Privileges","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fprivilege","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F00.privilege",{"title":653,"path":654,"stem":655},"Revocation","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Frevocation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F01.revocation",{"title":657,"path":658,"stem":659},"Rotation","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Frotation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F02.rotation",{"title":661,"path":662,"stem":663},"IP Restriction","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fip-updates","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F03.ip-updates",{"title":665,"path":666,"stem":667},"Metadata","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fmetadata","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F04.metadata",{"title":669,"path":670,"stem":671},"Token Listing","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Flist","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F05.list",{"title":611,"path":673,"stem":674},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Frate-limiting","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F03.rate-limiting",{"title":38,"path":676,"stem":677},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fsecurity","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F04.security",{"title":38,"path":679,"stem":680},"\u002Fdocs\u002Fiam\u002Fsecurity","docs\u002Fiam\u002F02.security",{"title":368,"path":682,"stem":683,"children":684,"page":53},"\u002Fdocs\u002Fiam\u002Fguides","docs\u002Fiam\u002F03.guides",[685,689,693],{"title":686,"path":687,"stem":688},"Deployment","\u002Fdocs\u002Fiam\u002Fguides\u002Fdeployment","docs\u002Fiam\u002F03.guides\u002Fdeployment",{"title":690,"path":691,"stem":692},"Operation Scripts","\u002Fdocs\u002Fiam\u002Fguides\u002Foperation-scripts","docs\u002Fiam\u002F03.guides\u002Foperation-scripts",{"title":694,"path":695,"stem":696},"Role-Based Access Control","\u002Fdocs\u002Fiam\u002Fguides\u002Frbac","docs\u002Fiam\u002F03.guides\u002Frbac",{"title":389,"path":698,"stem":699},"\u002Fdocs\u002Fiam\u002Fconfiguration","docs\u002Fiam\u002F04.configuration",{"title":701,"path":702,"stem":703,"children":704,"page":53},"Api","\u002Fdocs\u002Fiam\u002Fapi","docs\u002Fiam\u002F05.API",[705,708,711],{"title":393,"path":706,"stem":707},"\u002Fdocs\u002Fiam\u002Fapi\u002Fapi","docs\u002Fiam\u002F05.API\u002F00.api",{"title":403,"path":709,"stem":710},"\u002Fdocs\u002Fiam\u002Fapi\u002Fmiddlewares","docs\u002Fiam\u002F05.API\u002F02.middlewares",{"title":399,"path":712,"stem":713},"\u002Fdocs\u002Fiam\u002Fapi\u002Froutes","docs\u002Fiam\u002F05.API\u002F03.routes",{"title":40,"path":42,"stem":715,"children":716},"docs\u002Fshield-base\u002Findex",[717,718,721,725,766,770,774,778],{"title":40,"path":42,"stem":715},{"title":14,"path":719,"stem":720},"\u002Fdocs\u002Fshield-base\u002Fgetting-started","docs\u002Fshield-base\u002F00.getting-started",{"title":722,"path":723,"stem":724},"CLI Reference","\u002Fdocs\u002Fshield-base\u002Fcli","docs\u002Fshield-base\u002F01.cli",{"title":426,"path":726,"stem":727,"children":728},"\u002Fdocs\u002Fshield-base\u002Fdata-sources","docs\u002Fshield-base\u002F02.data-sources\u002Findex",[729,730,734,738,742,746,750,754,758,762],{"title":426,"path":726,"stem":727},{"title":731,"path":732,"stem":733},"BGP \u002F ASN","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fbgp","docs\u002Fshield-base\u002F02.data-sources\u002Fbgp",{"title":735,"path":736,"stem":737},"City Geolocation","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcity","docs\u002Fshield-base\u002F02.data-sources\u002Fcity",{"title":739,"path":740,"stem":741},"Country Geolocation","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcountry","docs\u002Fshield-base\u002F02.data-sources\u002Fcountry",{"title":743,"path":744,"stem":745},"Verified Crawlers","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcrawlers","docs\u002Fshield-base\u002F02.data-sources\u002Fcrawlers",{"title":747,"path":748,"stem":749},"Disposable Emails","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Femail","docs\u002Fshield-base\u002F02.data-sources\u002Femail",{"title":751,"path":752,"stem":753},"FireHOL Threat Intelligence","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Ffirehol","docs\u002Fshield-base\u002F02.data-sources\u002Ffirehol",{"title":755,"path":756,"stem":757},"Proxy Detection","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fproxy","docs\u002Fshield-base\u002F02.data-sources\u002Fproxy",{"title":759,"path":760,"stem":761},"Tor Nodes","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Ftor","docs\u002Fshield-base\u002F02.data-sources\u002Ftor",{"title":763,"path":764,"stem":765},"Suspicious User-Agents","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fuseragent","docs\u002Fshield-base\u002F02.data-sources\u002Fuseragent",{"title":767,"path":768,"stem":769},"Programmatic Usage","\u002Fdocs\u002Fshield-base\u002Fusage","docs\u002Fshield-base\u002F03.usage",{"title":771,"path":772,"stem":773},"Custom Data Sources","\u002Fdocs\u002Fshield-base\u002Fcustom-data-sources","docs\u002Fshield-base\u002F04.custom-data-sources",{"title":775,"path":776,"stem":777},"TypeScript Types","\u002Fdocs\u002Fshield-base\u002Ftypes","docs\u002Fshield-base\u002F05.types",{"title":393,"path":779,"stem":780},"\u002Fdocs\u002Fshield-base\u002Fapi","docs\u002Fshield-base\u002F06.api",{"title":70,"path":48,"stem":71,"children":782},[783,784,789,798,823],{"title":70,"path":48,"stem":71},{"title":75,"path":76,"stem":77,"children":785,"page":53},[786,787,788],{"title":80,"path":81,"stem":82},{"title":84,"path":85,"stem":86},{"title":88,"path":89,"stem":90},{"title":92,"path":93,"stem":94,"children":790,"page":53},[791,792,793,794,795,796,797],{"title":97,"path":98,"stem":99},{"title":101,"path":102,"stem":103},{"title":105,"path":106,"stem":107},{"title":109,"path":110,"stem":111},{"title":113,"path":114,"stem":115},{"title":117,"path":118,"stem":119},{"title":121,"path":122,"stem":123},{"title":125,"path":126,"stem":127,"children":799,"page":53},[800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822],{"title":130,"path":131,"stem":132},{"title":134,"path":135,"stem":136},{"title":138,"path":139,"stem":140},{"title":142,"path":143,"stem":144},{"title":146,"path":147,"stem":148},{"title":150,"path":151,"stem":152},{"title":154,"path":155,"stem":156},{"title":158,"path":159,"stem":160},{"title":162,"path":163,"stem":164},{"title":166,"path":167,"stem":168},{"title":170,"path":171,"stem":172},{"title":174,"path":175,"stem":176},{"title":178,"path":179,"stem":180},{"title":182,"path":183,"stem":184},{"title":186,"path":187,"stem":188},{"title":190,"path":191,"stem":192},{"title":194,"path":195,"stem":196},{"title":198,"path":199,"stem":200},{"title":202,"path":203,"stem":204},{"title":206,"path":207,"stem":208},{"title":210,"path":211,"stem":212},{"title":214,"path":215,"stem":216},{"title":218,"path":219,"stem":220},{"title":222,"path":223,"stem":224,"children":824},[825,826,827,828,829,830,831,832,833,834],{"title":222,"path":223,"stem":224},{"title":228,"path":229,"stem":230},{"title":232,"path":233,"stem":234},{"title":236,"path":237,"stem":238},{"title":240,"path":241,"stem":242},{"title":244,"path":245,"stem":246},{"title":248,"path":249,"stem":250},{"title":252,"path":253,"stem":254},{"title":256,"path":257,"stem":258},{"title":260,"path":261,"stem":262},{"id":4,"extension":5,"links":836,"meta":847,"stem":62,"__hash__":63},[837,845,846],{"nested":8,"label":9,"icon":10,"to":11,"children":838},[839,840,841,842,843,844],{"label":14,"icon":15,"to":11,"description":16,"github":17,"badge":18},{"label":20,"icon":21,"to":22,"description":23,"github":24,"badge":25},{"label":27,"icon":28,"to":29,"description":30,"github":31,"badge":25},{"label":33,"icon":34,"to":35,"description":36,"github":37,"badge":38},{"label":40,"icon":41,"to":42,"description":43,"github":44,"badge":38},{"label":46,"icon":47,"to":48,"description":49,"github":50,"badge":51},{"nested":53,"label":54,"icon":55,"to":56},{"nested":53,"label":58,"icon":59,"to":60},{},{"id":849,"title":97,"body":850,"description":2060,"extension":2061,"icon":2062,"meta":2063,"module":2064,"navigation":8,"path":98,"rawbody":2065,"seo":2066,"stem":99,"__hash__":2067},"docs\u002Fdocs\u002Futils\u002Fserver\u002Fencryption.md",{"type":851,"value":852,"toc":2049},"minimark",[853,870,880,883,888,1207,1211,1254,1258,1264,1396,1400,1407,1410,1459,1472,1478,1484,1487,1533,1543,1549,1559,1590,1598,1602,1605,1875,1878,2045],[854,855,856,857,861,862,865,866,869],"p",{},"The ",[858,859,860],"code",{},"encryption"," utility provides a secure wrapper around the native Node.js crypto module. It uses ",[858,863,864],{},"scrypt"," for robust password-based key derivation and ",[858,867,868],{},"AES-256-GCM"," for authenticated encryption. It handles binary conversion automatically and ensures data integrity by bundling the salt, initialization vector, authentication tag, and ciphertext together.",[854,871,872,873,879],{},"Both encryption and decryption functions wrap their outputs in a standardized ",[874,875,876],"a",{"href":257},[858,877,878],{},"Results"," object, providing clean and predictable error handling without requiring extensive try-catch blocks.",[881,882],"hr",{},[884,885,887],"h2",{"id":886},"definition","Definition",[889,890,896],"pre",{"className":891,"code":892,"filename":893,"language":894,"meta":895,"style":895},"language-ts shiki shiki-themes light-plus light-plus dracula","export interface EncryptionConfig {\n  scrypt?: {\n    keyLength?: number\n    saltLength?: number\n    params?: {\n      n?: number\n      r?: number\n      p?: number\n    }\n  }\n  initializationVectorLength?: number \n}\n\nexport interface EncryptionInstance {\n  toBuffer: (data: unknown) => Buffer | Uint8Array\n  encrypt: (data: unknown, password: string) => Results\u003CBuffer>\n  decrypt: \u003CT>(encrypted: Buffer, password: string) => Results\u003CT>\n}\n\nexport function encryption(options?: EncryptionConfig): EncryptionInstance\n","encryption.ts","ts","",[858,897,898,919,932,943,953,963,973,983,993,999,1005,1019,1025,1031,1043,1080,1124,1168,1173,1178],{"__ignoreMap":895},[899,900,903,907,911,915],"span",{"class":901,"line":902},"line",1,[899,904,906],{"class":905},"sZ328","export",[899,908,910],{"class":909},"sl46w"," interface",[899,912,914],{"class":913},"sFs1U"," EncryptionConfig",[899,916,918],{"class":917},"sDd4n"," {\n",[899,920,922,926,930],{"class":901,"line":921},2,[899,923,925],{"class":924},"sjsA6","  scrypt",[899,927,929],{"class":928},"saOXh","?:",[899,931,918],{"class":917},[899,933,935,938,940],{"class":901,"line":934},3,[899,936,937],{"class":924},"    keyLength",[899,939,929],{"class":928},[899,941,942],{"class":913}," number\n",[899,944,946,949,951],{"class":901,"line":945},4,[899,947,948],{"class":924},"    saltLength",[899,950,929],{"class":928},[899,952,942],{"class":913},[899,954,956,959,961],{"class":901,"line":955},5,[899,957,958],{"class":924},"    params",[899,960,929],{"class":928},[899,962,918],{"class":917},[899,964,966,969,971],{"class":901,"line":965},6,[899,967,968],{"class":924},"      n",[899,970,929],{"class":928},[899,972,942],{"class":913},[899,974,976,979,981],{"class":901,"line":975},7,[899,977,978],{"class":924},"      r",[899,980,929],{"class":928},[899,982,942],{"class":913},[899,984,986,989,991],{"class":901,"line":985},8,[899,987,988],{"class":924},"      p",[899,990,929],{"class":928},[899,992,942],{"class":913},[899,994,996],{"class":901,"line":995},9,[899,997,998],{"class":917},"    }\n",[899,1000,1002],{"class":901,"line":1001},10,[899,1003,1004],{"class":917},"  }\n",[899,1006,1008,1011,1013,1016],{"class":901,"line":1007},11,[899,1009,1010],{"class":924},"  initializationVectorLength",[899,1012,929],{"class":928},[899,1014,1015],{"class":913}," number",[899,1017,1018],{"class":917}," \n",[899,1020,1022],{"class":901,"line":1021},12,[899,1023,1024],{"class":917},"}\n",[899,1026,1028],{"class":901,"line":1027},13,[899,1029,1030],{"emptyLinePlaceholder":8},"\n",[899,1032,1034,1036,1038,1041],{"class":901,"line":1033},14,[899,1035,906],{"class":905},[899,1037,910],{"class":909},[899,1039,1040],{"class":913}," EncryptionInstance",[899,1042,918],{"class":917},[899,1044,1046,1050,1053,1056,1060,1062,1065,1068,1071,1074,1077],{"class":901,"line":1045},15,[899,1047,1049],{"class":1048},"sHOzp","  toBuffer",[899,1051,1052],{"class":928},":",[899,1054,1055],{"class":917}," (",[899,1057,1059],{"class":1058},"sygFZ","data",[899,1061,1052],{"class":928},[899,1063,1064],{"class":913}," unknown",[899,1066,1067],{"class":917},") ",[899,1069,1070],{"class":909},"=>",[899,1072,1073],{"class":913}," Buffer",[899,1075,1076],{"class":928}," |",[899,1078,1079],{"class":913}," Uint8Array\n",[899,1081,1083,1086,1088,1090,1092,1094,1096,1099,1102,1104,1107,1109,1111,1114,1117,1121],{"class":901,"line":1082},16,[899,1084,1085],{"class":1048},"  encrypt",[899,1087,1052],{"class":928},[899,1089,1055],{"class":917},[899,1091,1059],{"class":1058},[899,1093,1052],{"class":928},[899,1095,1064],{"class":913},[899,1097,1098],{"class":917},", ",[899,1100,1101],{"class":1058},"password",[899,1103,1052],{"class":928},[899,1105,1106],{"class":913}," string",[899,1108,1067],{"class":917},[899,1110,1070],{"class":909},[899,1112,1113],{"class":913}," Results",[899,1115,1116],{"class":917},"\u003C",[899,1118,1120],{"class":1119},"sW-rI","Buffer",[899,1122,1123],{"class":917},">\n",[899,1125,1127,1130,1132,1135,1138,1141,1144,1146,1148,1150,1152,1154,1156,1158,1160,1162,1164,1166],{"class":901,"line":1126},17,[899,1128,1129],{"class":1048},"  decrypt",[899,1131,1052],{"class":928},[899,1133,1134],{"class":917}," \u003C",[899,1136,1137],{"class":1119},"T",[899,1139,1140],{"class":917},">(",[899,1142,1143],{"class":1058},"encrypted",[899,1145,1052],{"class":928},[899,1147,1073],{"class":913},[899,1149,1098],{"class":917},[899,1151,1101],{"class":1058},[899,1153,1052],{"class":928},[899,1155,1106],{"class":913},[899,1157,1067],{"class":917},[899,1159,1070],{"class":909},[899,1161,1113],{"class":913},[899,1163,1116],{"class":917},[899,1165,1137],{"class":1119},[899,1167,1123],{"class":917},[899,1169,1171],{"class":901,"line":1170},18,[899,1172,1024],{"class":917},[899,1174,1176],{"class":901,"line":1175},19,[899,1177,1030],{"emptyLinePlaceholder":8},[899,1179,1181,1183,1186,1189,1192,1195,1197,1199,1202,1204],{"class":901,"line":1180},20,[899,1182,906],{"class":905},[899,1184,1185],{"class":909}," function",[899,1187,1188],{"class":1048}," encryption",[899,1190,1191],{"class":917},"(",[899,1193,1194],{"class":1058},"options",[899,1196,929],{"class":928},[899,1198,914],{"class":913},[899,1200,1201],{"class":917},")",[899,1203,1052],{"class":928},[899,1205,1206],{"class":913}," EncryptionInstance\n",[884,1208,1210],{"id":1209},"initialization-parameters","Initialization Parameters",[1212,1213,1214,1233],"table",{},[1215,1216,1217],"thead",{},[1218,1219,1220,1224,1227,1230],"tr",{},[1221,1222,1223],"th",{},"Parameter",[1221,1225,1226],{},"Type",[1221,1228,1229],{},"Required",[1221,1231,1232],{},"Description",[1234,1235,1236],"tbody",{},[1218,1237,1238,1243,1248,1251],{},[1239,1240,1241],"td",{},[858,1242,1194],{},[1239,1244,1245],{},[858,1246,1247],{},"EncryptionConfig",[1239,1249,1250],{},"No",[1239,1252,1253],{},"Optional tuning parameters. See the Configuration Options table below.",[884,1255,1257],{"id":1256},"configuration-options","Configuration Options",[854,1259,1260,1261,1263],{},"You can customize the underlying cryptographic parameters by passing an ",[858,1262,1247],{}," object during initialization.",[1212,1265,1266,1280],{},[1215,1267,1268],{},[1218,1269,1270,1273,1275,1278],{},[1221,1271,1272],{},"Option",[1221,1274,1226],{},[1221,1276,1277],{},"Default",[1221,1279,1232],{},[1234,1281,1282,1302,1320,1339,1358,1377],{},[1218,1283,1284,1289,1294,1299],{},[1239,1285,1286],{},[858,1287,1288],{},"scrypt.keyLength",[1239,1290,1291],{},[858,1292,1293],{},"number",[1239,1295,1296],{},[858,1297,1298],{},"32",[1239,1300,1301],{},"The length of the generated derived key in bytes.",[1218,1303,1304,1309,1313,1317],{},[1239,1305,1306],{},[858,1307,1308],{},"scrypt.saltLength",[1239,1310,1311],{},[858,1312,1293],{},[1239,1314,1315],{},[858,1316,1298],{},[1239,1318,1319],{},"The length of the random salt in bytes.",[1218,1321,1322,1327,1331,1336],{},[1239,1323,1324],{},[858,1325,1326],{},"scrypt.params.n",[1239,1328,1329],{},[858,1330,1293],{},[1239,1332,1333],{},[858,1334,1335],{},"16384",[1239,1337,1338],{},"The CPU and memory cost parameter for scrypt.",[1218,1340,1341,1346,1350,1355],{},[1239,1342,1343],{},[858,1344,1345],{},"scrypt.params.r",[1239,1347,1348],{},[858,1349,1293],{},[1239,1351,1352],{},[858,1353,1354],{},"8",[1239,1356,1357],{},"The block size parameter for scrypt.",[1218,1359,1360,1365,1369,1374],{},[1239,1361,1362],{},[858,1363,1364],{},"scrypt.params.p",[1239,1366,1367],{},[858,1368,1293],{},[1239,1370,1371],{},[858,1372,1373],{},"1",[1239,1375,1376],{},"The parallelization parameter for scrypt.",[1218,1378,1379,1384,1388,1393],{},[1239,1380,1381],{},[858,1382,1383],{},"initializationVectorLength",[1239,1385,1386],{},[858,1387,1293],{},[1239,1389,1390],{},[858,1391,1392],{},"12",[1239,1394,1395],{},"The length of the IV in bytes for AES-GCM.",[884,1397,1399],{"id":1398},"methods","Methods",[1401,1402,1404],"h3",{"id":1403},"encryptdata-password",[858,1405,1406],{},"encrypt(data, password)",[854,1408,1409],{},"Converts the provided data to a buffer and encrypts it using the provided password. It generates a fresh random salt and initialization vector for every operation. The result is a single contiguous buffer containing all components necessary for decryption.",[1212,1411,1412,1424],{},[1215,1413,1414],{},[1218,1415,1416,1418,1420,1422],{},[1221,1417,1223],{},[1221,1419,1226],{},[1221,1421,1229],{},[1221,1423,1232],{},[1234,1425,1426,1443],{},[1218,1427,1428,1432,1437,1440],{},[1239,1429,1430],{},[858,1431,1059],{},[1239,1433,1434],{},[858,1435,1436],{},"unknown",[1239,1438,1439],{},"Yes",[1239,1441,1442],{},"The data to encrypt. Strings, numbers, and objects are automatically stringified to JSON and converted to buffers.",[1218,1444,1445,1449,1454,1456],{},[1239,1446,1447],{},[858,1448,1101],{},[1239,1450,1451],{},[858,1452,1453],{},"string",[1239,1455,1439],{},[1239,1457,1458],{},"The secret password used to derive the encryption key via scrypt.",[854,1460,1461,1465,1466,1471],{},[1462,1463,1464],"strong",{},"Returns"," ",[874,1467,1468],{"href":257},[858,1469,1470],{},"Results\u003CBuffer>",": A standardized result object containing the combined binary buffer on success, or a failure reason on error.",[1473,1474,1475],"caution",{},[854,1476,1477],{},"After this point if you loss your password, your data cannot be decrypted",[1401,1479,1481],{"id":1480},"decrypttencrypted-password",[858,1482,1483],{},"decrypt\u003CT>(encrypted, password)",[854,1485,1486],{},"Parses the bundled buffer to extract the salt, IV, and tag, then re-derives the key to decrypt the data. It verifies the authentication tag automatically to ensure data integrity. The method attempts to parse the decrypted bytes as JSON, falling back to raw bytes if parsing fails.",[1212,1488,1489,1501],{},[1215,1490,1491],{},[1218,1492,1493,1495,1497,1499],{},[1221,1494,1223],{},[1221,1496,1226],{},[1221,1498,1229],{},[1221,1500,1232],{},[1234,1502,1503,1518],{},[1218,1504,1505,1509,1513,1515],{},[1239,1506,1507],{},[858,1508,1143],{},[1239,1510,1511],{},[858,1512,1120],{},[1239,1514,1439],{},[1239,1516,1517],{},"The bundled buffer containing the salt, IV, authentication tag, and ciphertext.",[1218,1519,1520,1524,1528,1530],{},[1239,1521,1522],{},[858,1523,1101],{},[1239,1525,1526],{},[858,1527,1453],{},[1239,1529,1439],{},[1239,1531,1532],{},"The secret password originally used during encryption.",[854,1534,1535,1465,1537,1542],{},[1462,1536,1464],{},[874,1538,1539],{"href":257},[858,1540,1541],{},"Results\u003CT>",": A standardized result object containing the decrypted and automatically parsed data on success, or a failure reason on error.",[1401,1544,1546],{"id":1545},"tobufferdata",[858,1547,1548],{},"toBuffer(data)",[854,1550,1551,1552,1554,1555,1558],{},"Safely converts unknown data into a ",[858,1553,1120],{}," or ",[858,1556,1557],{},"Uint8Array",". If the data is a plain object, it is stringified to JSON before conversion. This is used internally but exposed for convenience.",[1212,1560,1561,1573],{},[1215,1562,1563],{},[1218,1564,1565,1567,1569,1571],{},[1221,1566,1223],{},[1221,1568,1226],{},[1221,1570,1229],{},[1221,1572,1232],{},[1234,1574,1575],{},[1218,1576,1577,1581,1585,1587],{},[1239,1578,1579],{},[858,1580,1059],{},[1239,1582,1583],{},[858,1584,1436],{},[1239,1586,1439],{},[1239,1588,1589],{},"The data to safely convert into a Buffer.",[854,1591,1592,1465,1594,1597],{},[1462,1593,1464],{},[858,1595,1596],{},"Buffer | Uint8Array",": The binary representation of the input data.",[884,1599,1601],{"id":1600},"example-usage","Example Usage",[854,1603,1604],{},"Initialize the utility once and use the provided methods to secure your data:",[889,1606,1611],{"className":1607,"code":1608,"filename":1609,"language":1610,"meta":895,"style":895},"language-typescript shiki shiki-themes light-plus light-plus dracula","import { encryption } from '@riavzon\u002Futils\u002Fserver'\n\n\u002F\u002F Initialize with default secure settings\nconst { encrypt, decrypt } = encryption()\n\nconst secretData = { apiKey: 'sk_live_12345', permissions: ['read', 'write'] }\nconst masterPassword = 'super_secure_password'\n\n\u002F\u002F Encrypt the payload\nconst encryptedResult = encrypt(secretData, masterPassword)\n\nif (!encryptedResult.ok) {\n  console.error('Failed to encrypt:', encryptedResult.reason)\n  return\n}\n\n\u002F\u002F Store the single binary buffer in your database\nconst binaryPayloadToStore = encryptedResult.data\n","cryptoService.ts","typescript",[858,1612,1613,1640,1644,1650,1676,1680,1735,1751,1755,1760,1785,1789,1811,1841,1846,1850,1854,1859],{"__ignoreMap":895},[899,1614,1615,1618,1621,1623,1626,1629,1633,1637],{"class":901,"line":902},[899,1616,1617],{"class":905},"import",[899,1619,1620],{"class":917}," { ",[899,1622,860],{"class":924},[899,1624,1625],{"class":917}," } ",[899,1627,1628],{"class":905},"from",[899,1630,1632],{"class":1631},"sFkSl"," '",[899,1634,1636],{"class":1635},"sFB1V","@riavzon\u002Futils\u002Fserver",[899,1638,1639],{"class":1631},"'\n",[899,1641,1642],{"class":901,"line":921},[899,1643,1030],{"emptyLinePlaceholder":8},[899,1645,1646],{"class":901,"line":934},[899,1647,1649],{"class":1648},"sghk6","\u002F\u002F Initialize with default secure settings\n",[899,1651,1652,1655,1657,1661,1663,1666,1668,1671,1673],{"class":901,"line":945},[899,1653,1654],{"class":909},"const",[899,1656,1620],{"class":917},[899,1658,1660],{"class":1659},"s3JHE","encrypt",[899,1662,1098],{"class":917},[899,1664,1665],{"class":1659},"decrypt",[899,1667,1625],{"class":917},[899,1669,1670],{"class":928},"=",[899,1672,1188],{"class":1048},[899,1674,1675],{"class":917},"()\n",[899,1677,1678],{"class":901,"line":955},[899,1679,1030],{"emptyLinePlaceholder":8},[899,1681,1682,1684,1687,1690,1692,1695,1698,1700,1703,1706,1708,1711,1713,1716,1718,1721,1723,1725,1727,1730,1732],{"class":901,"line":965},[899,1683,1654],{"class":909},[899,1685,1686],{"class":1659}," secretData",[899,1688,1689],{"class":928}," =",[899,1691,1620],{"class":917},[899,1693,1694],{"class":924},"apiKey",[899,1696,1052],{"class":1697},"s34zl",[899,1699,1632],{"class":1631},[899,1701,1702],{"class":1635},"sk_live_12345",[899,1704,1705],{"class":1631},"'",[899,1707,1098],{"class":917},[899,1709,1710],{"class":924},"permissions",[899,1712,1052],{"class":1697},[899,1714,1715],{"class":917}," [",[899,1717,1705],{"class":1631},[899,1719,1720],{"class":1635},"read",[899,1722,1705],{"class":1631},[899,1724,1098],{"class":917},[899,1726,1705],{"class":1631},[899,1728,1729],{"class":1635},"write",[899,1731,1705],{"class":1631},[899,1733,1734],{"class":917},"] }\n",[899,1736,1737,1739,1742,1744,1746,1749],{"class":901,"line":975},[899,1738,1654],{"class":909},[899,1740,1741],{"class":1659}," masterPassword",[899,1743,1689],{"class":928},[899,1745,1632],{"class":1631},[899,1747,1748],{"class":1635},"super_secure_password",[899,1750,1639],{"class":1631},[899,1752,1753],{"class":901,"line":985},[899,1754,1030],{"emptyLinePlaceholder":8},[899,1756,1757],{"class":901,"line":995},[899,1758,1759],{"class":1648},"\u002F\u002F Encrypt the payload\n",[899,1761,1762,1764,1767,1769,1772,1774,1777,1779,1782],{"class":901,"line":1001},[899,1763,1654],{"class":909},[899,1765,1766],{"class":1659}," encryptedResult",[899,1768,1689],{"class":928},[899,1770,1771],{"class":1048}," encrypt",[899,1773,1191],{"class":917},[899,1775,1776],{"class":924},"secretData",[899,1778,1098],{"class":917},[899,1780,1781],{"class":924},"masterPassword",[899,1783,1784],{"class":917},")\n",[899,1786,1787],{"class":901,"line":1007},[899,1788,1030],{"emptyLinePlaceholder":8},[899,1790,1791,1794,1796,1799,1802,1805,1808],{"class":901,"line":1021},[899,1792,1793],{"class":905},"if",[899,1795,1055],{"class":917},[899,1797,1798],{"class":928},"!",[899,1800,1801],{"class":924},"encryptedResult",[899,1803,1804],{"class":917},".",[899,1806,1807],{"class":924},"ok",[899,1809,1810],{"class":917},") {\n",[899,1812,1813,1816,1818,1821,1823,1825,1828,1830,1832,1834,1836,1839],{"class":901,"line":1027},[899,1814,1815],{"class":924},"  console",[899,1817,1804],{"class":917},[899,1819,1820],{"class":1048},"error",[899,1822,1191],{"class":917},[899,1824,1705],{"class":1631},[899,1826,1827],{"class":1635},"Failed to encrypt:",[899,1829,1705],{"class":1631},[899,1831,1098],{"class":917},[899,1833,1801],{"class":924},[899,1835,1804],{"class":917},[899,1837,1838],{"class":924},"reason",[899,1840,1784],{"class":917},[899,1842,1843],{"class":901,"line":1033},[899,1844,1845],{"class":905},"  return\n",[899,1847,1848],{"class":901,"line":1045},[899,1849,1024],{"class":917},[899,1851,1852],{"class":901,"line":1082},[899,1853,1030],{"emptyLinePlaceholder":8},[899,1855,1856],{"class":901,"line":1126},[899,1857,1858],{"class":1648},"\u002F\u002F Store the single binary buffer in your database\n",[899,1860,1861,1863,1866,1868,1870,1872],{"class":901,"line":1170},[899,1862,1654],{"class":909},[899,1864,1865],{"class":1659}," binaryPayloadToStore",[899,1867,1689],{"class":928},[899,1869,1766],{"class":924},[899,1871,1804],{"class":917},[899,1873,1874],{"class":924},"data\n",[854,1876,1877],{},"When retrieving the data, use the generic type parameter to assert the structure of the decrypted payload:",[889,1879,1882],{"className":1607,"code":1880,"filename":1881,"language":1610,"meta":895,"style":895},"interface SecretData {\n  apiKey: string\n  permissions: string[]\n}\n\nconst decryptedResult = decrypt\u003CSecretData>(binaryPayloadToStore, masterPassword)\n\nif (decryptedResult.ok) {\n  \u002F\u002F TypeScript knows this is SecretData\n  console.log(decryptedResult.data.apiKey)\n} else {\n  \u002F\u002F Handles wrong passwords, tampered data, or corrupted formatting\n  console.error('Decryption failed:', decryptedResult.reason)\n}\n","decryptService.ts",[858,1883,1884,1894,1904,1916,1920,1924,1952,1956,1971,1976,1999,2009,2014,2041],{"__ignoreMap":895},[899,1885,1886,1889,1892],{"class":901,"line":902},[899,1887,1888],{"class":909},"interface",[899,1890,1891],{"class":913}," SecretData",[899,1893,918],{"class":917},[899,1895,1896,1899,1901],{"class":901,"line":921},[899,1897,1898],{"class":924},"  apiKey",[899,1900,1052],{"class":928},[899,1902,1903],{"class":913}," string\n",[899,1905,1906,1909,1911,1913],{"class":901,"line":934},[899,1907,1908],{"class":924},"  permissions",[899,1910,1052],{"class":928},[899,1912,1106],{"class":913},[899,1914,1915],{"class":917},"[]\n",[899,1917,1918],{"class":901,"line":945},[899,1919,1024],{"class":917},[899,1921,1922],{"class":901,"line":955},[899,1923,1030],{"emptyLinePlaceholder":8},[899,1925,1926,1928,1931,1933,1936,1938,1941,1943,1946,1948,1950],{"class":901,"line":965},[899,1927,1654],{"class":909},[899,1929,1930],{"class":1659}," decryptedResult",[899,1932,1689],{"class":928},[899,1934,1935],{"class":1048}," decrypt",[899,1937,1116],{"class":917},[899,1939,1940],{"class":1119},"SecretData",[899,1942,1140],{"class":917},[899,1944,1945],{"class":924},"binaryPayloadToStore",[899,1947,1098],{"class":917},[899,1949,1781],{"class":924},[899,1951,1784],{"class":917},[899,1953,1954],{"class":901,"line":975},[899,1955,1030],{"emptyLinePlaceholder":8},[899,1957,1958,1960,1962,1965,1967,1969],{"class":901,"line":985},[899,1959,1793],{"class":905},[899,1961,1055],{"class":917},[899,1963,1964],{"class":924},"decryptedResult",[899,1966,1804],{"class":917},[899,1968,1807],{"class":924},[899,1970,1810],{"class":917},[899,1972,1973],{"class":901,"line":995},[899,1974,1975],{"class":1648},"  \u002F\u002F TypeScript knows this is SecretData\n",[899,1977,1978,1980,1982,1985,1987,1989,1991,1993,1995,1997],{"class":901,"line":1001},[899,1979,1815],{"class":924},[899,1981,1804],{"class":917},[899,1983,1984],{"class":1048},"log",[899,1986,1191],{"class":917},[899,1988,1964],{"class":924},[899,1990,1804],{"class":917},[899,1992,1059],{"class":924},[899,1994,1804],{"class":917},[899,1996,1694],{"class":924},[899,1998,1784],{"class":917},[899,2000,2001,2004,2007],{"class":901,"line":1007},[899,2002,2003],{"class":917},"} ",[899,2005,2006],{"class":905},"else",[899,2008,918],{"class":917},[899,2010,2011],{"class":901,"line":1021},[899,2012,2013],{"class":1648},"  \u002F\u002F Handles wrong passwords, tampered data, or corrupted formatting\n",[899,2015,2016,2018,2020,2022,2024,2026,2029,2031,2033,2035,2037,2039],{"class":901,"line":1027},[899,2017,1815],{"class":924},[899,2019,1804],{"class":917},[899,2021,1820],{"class":1048},[899,2023,1191],{"class":917},[899,2025,1705],{"class":1631},[899,2027,2028],{"class":1635},"Decryption failed:",[899,2030,1705],{"class":1631},[899,2032,1098],{"class":917},[899,2034,1964],{"class":924},[899,2036,1804],{"class":917},[899,2038,1838],{"class":924},[899,2040,1784],{"class":917},[899,2042,2043],{"class":901,"line":1033},[899,2044,1024],{"class":917},[2046,2047,2048],"style",{},"html pre.shiki code .sZ328, html code.shiki .sZ328{--shiki-light:#AF00DB;--shiki-default:#AF00DB;--shiki-dark:#FF79C6}html pre.shiki code .sl46w, html code.shiki .sl46w{--shiki-light:#0000FF;--shiki-default:#0000FF;--shiki-dark:#FF79C6}html pre.shiki code .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 .sDd4n, html code.shiki .sDd4n{--shiki-light:#000000;--shiki-default:#000000;--shiki-dark:#F8F8F2}html pre.shiki code .sjsA6, html code.shiki .sjsA6{--shiki-light:#001080;--shiki-default:#001080;--shiki-dark:#F8F8F2}html pre.shiki code .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 .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 .sW-rI, html code.shiki .sW-rI{--shiki-light:#267F99;--shiki-light-font-style:inherit;--shiki-default:#267F99;--shiki-default-font-style:inherit;--shiki-dark:#FFB86C;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sFkSl, html code.shiki .sFkSl{--shiki-light:#A31515;--shiki-default:#A31515;--shiki-dark:#E9F284}html pre.shiki code .sFB1V, html code.shiki .sFB1V{--shiki-light:#A31515;--shiki-default:#A31515;--shiki-dark:#F1FA8C}html pre.shiki code .sghk6, html code.shiki .sghk6{--shiki-light:#008000;--shiki-default:#008000;--shiki-dark:#6272A4}html pre.shiki code .s3JHE, html code.shiki .s3JHE{--shiki-light:#0070C1;--shiki-default:#0070C1;--shiki-dark:#F8F8F2}html pre.shiki code .s34zl, html code.shiki .s34zl{--shiki-light:#001080;--shiki-default:#001080;--shiki-dark:#FF79C6}",{"title":895,"searchDepth":921,"depth":921,"links":2050},[2051,2052,2053,2054,2059],{"id":886,"depth":921,"text":887},{"id":1209,"depth":921,"text":1210},{"id":1256,"depth":921,"text":1257},{"id":1398,"depth":921,"text":1399,"children":2055},[2056,2057,2058],{"id":1403,"depth":934,"text":1406},{"id":1480,"depth":934,"text":1483},{"id":1545,"depth":934,"text":1548},{"id":1600,"depth":921,"text":1601},"Secure utility for encrypting and decrypting data using AES-256-GCM and scrypt key derivation.","md","i-lucide-lock",{},null,"---\ntitle: Encryption\ndescription: Secure utility for encrypting and decrypting data using AES-256-GCM and scrypt key derivation.\nicon: i-lucide-lock\n---\n\nThe `encryption` utility provides a secure wrapper around the native Node.js crypto module. It uses `scrypt` for robust password-based key derivation and `AES-256-GCM` for authenticated encryption. It handles binary conversion automatically and ensures data integrity by bundling the salt, initialization vector, authentication tag, and ciphertext together.\n\nBoth encryption and decryption functions wrap their outputs in a standardized [`Results`](\u002Fdocs\u002Futils\u002Ftypes\u002Fstandardresponse) object, providing clean and predictable error handling without requiring extensive try-catch blocks.\n\n---\n\n## Definition\n\n```ts [encryption.ts]\nexport interface EncryptionConfig {\n  scrypt?: {\n    keyLength?: number\n    saltLength?: number\n    params?: {\n      n?: number\n      r?: number\n      p?: number\n    }\n  }\n  initializationVectorLength?: number \n}\n\nexport interface EncryptionInstance {\n  toBuffer: (data: unknown) => Buffer | Uint8Array\n  encrypt: (data: unknown, password: string) => Results\u003CBuffer>\n  decrypt: \u003CT>(encrypted: Buffer, password: string) => Results\u003CT>\n}\n\nexport function encryption(options?: EncryptionConfig): EncryptionInstance\n```\n\n## Initialization Parameters\n\n| Parameter | Type | Required | Description |\n| --- | --- | --- | --- |\n| `options` | `EncryptionConfig` | No | Optional tuning parameters. See the Configuration Options table below. |\n\n## Configuration Options\n\nYou can customize the underlying cryptographic parameters by passing an `EncryptionConfig` object during initialization.\n\n| Option | Type | Default | Description |\n| --- | --- | --- | --- |\n| `scrypt.keyLength` | `number` | `32` | The length of the generated derived key in bytes. |\n| `scrypt.saltLength` | `number` | `32` | The length of the random salt in bytes. |\n| `scrypt.params.n` | `number` | `16384` | The CPU and memory cost parameter for scrypt. |\n| `scrypt.params.r` | `number` | `8` | The block size parameter for scrypt. |\n| `scrypt.params.p` | `number` | `1` | The parallelization parameter for scrypt. |\n| `initializationVectorLength` | `number` | `12` | The length of the IV in bytes for AES-GCM. |\n\n## Methods\n\n### `encrypt(data, password)`\n\nConverts the provided data to a buffer and encrypts it using the provided password. It generates a fresh random salt and initialization vector for every operation. The result is a single contiguous buffer containing all components necessary for decryption.\n\n| Parameter | Type | Required | Description |\n| --- | --- | --- | --- |\n| `data` | `unknown` | Yes | The data to encrypt. Strings, numbers, and objects are automatically stringified to JSON and converted to buffers. |\n| `password` | `string` | Yes | The secret password used to derive the encryption key via scrypt. |\n\n**Returns** [`Results\u003CBuffer>`](\u002Fdocs\u002Futils\u002Ftypes\u002Fstandardresponse): A standardized result object containing the combined binary buffer on success, or a failure reason on error.\n\n::caution\nAfter this point if you loss your password, your data cannot be decrypted\n::\n\n### `decrypt\u003CT>(encrypted, password)`\n\nParses the bundled buffer to extract the salt, IV, and tag, then re-derives the key to decrypt the data. It verifies the authentication tag automatically to ensure data integrity. The method attempts to parse the decrypted bytes as JSON, falling back to raw bytes if parsing fails.\n\n| Parameter | Type | Required | Description |\n| --- | --- | --- | --- |\n| `encrypted` | `Buffer` | Yes | The bundled buffer containing the salt, IV, authentication tag, and ciphertext. |\n| `password` | `string` | Yes | The secret password originally used during encryption. |\n\n**Returns** [`Results\u003CT>`](\u002Fdocs\u002Futils\u002Ftypes\u002Fstandardresponse): A standardized result object containing the decrypted and automatically parsed data on success, or a failure reason on error.\n\n### `toBuffer(data)`\n\nSafely converts unknown data into a `Buffer` or `Uint8Array`. If the data is a plain object, it is stringified to JSON before conversion. This is used internally but exposed for convenience.\n\n| Parameter | Type | Required | Description |\n| --- | --- | --- | --- |\n| `data` | `unknown` | Yes | The data to safely convert into a Buffer. |\n\n**Returns** `Buffer | Uint8Array`: The binary representation of the input data.\n\n## Example Usage\n\nInitialize the utility once and use the provided methods to secure your data:\n\n```typescript [cryptoService.ts]\nimport { encryption } from '@riavzon\u002Futils\u002Fserver'\n\n\u002F\u002F Initialize with default secure settings\nconst { encrypt, decrypt } = encryption()\n\nconst secretData = { apiKey: 'sk_live_12345', permissions: ['read', 'write'] }\nconst masterPassword = 'super_secure_password'\n\n\u002F\u002F Encrypt the payload\nconst encryptedResult = encrypt(secretData, masterPassword)\n\nif (!encryptedResult.ok) {\n  console.error('Failed to encrypt:', encryptedResult.reason)\n  return\n}\n\n\u002F\u002F Store the single binary buffer in your database\nconst binaryPayloadToStore = encryptedResult.data\n```\n\nWhen retrieving the data, use the generic type parameter to assert the structure of the decrypted payload:\n\n```typescript [decryptService.ts]\ninterface SecretData {\n  apiKey: string\n  permissions: string[]\n}\n\nconst decryptedResult = decrypt\u003CSecretData>(binaryPayloadToStore, masterPassword)\n\nif (decryptedResult.ok) {\n  \u002F\u002F TypeScript knows this is SecretData\n  console.log(decryptedResult.data.apiKey)\n} else {\n  \u002F\u002F Handles wrong passwords, tampered data, or corrupted formatting\n  console.error('Decryption failed:', decryptedResult.reason)\n}\n```",{"title":97,"description":2060},"Pw2YjB2IHZ-3Xlm-ck98O-_Wt45fP6SulTXB_hBPHBk",[2069,2070],{"title":88,"path":89,"stem":90,"children":-1},{"title":101,"path":102,"stem":103,"children":-1},{"id":849,"title":97,"body":2072,"description":2060,"extension":2061,"icon":2062,"meta":3025,"module":2064,"navigation":8,"path":98,"rawbody":2065,"seo":3026,"stem":99,"__hash__":2067},{"type":851,"value":2073,"toc":3014},[2074,2082,2088,2090,2092,2324,2326,2356,2358,2362,2474,2476,2480,2482,2526,2534,2538,2542,2544,2588,2596,2600,2606,2636,2642,2644,2646,2862,2864,3012],[854,2075,856,2076,861,2078,865,2080,869],{},[858,2077,860],{},[858,2079,864],{},[858,2081,868],{},[854,2083,872,2084,879],{},[874,2085,2086],{"href":257},[858,2087,878],{},[881,2089],{},[884,2091,887],{"id":886},[889,2093,2094],{"className":891,"code":892,"filename":893,"language":894,"meta":895,"style":895},[858,2095,2096,2106,2114,2122,2130,2138,2146,2154,2162,2166,2170,2180,2184,2188,2198,2222,2256,2294,2298,2302],{"__ignoreMap":895},[899,2097,2098,2100,2102,2104],{"class":901,"line":902},[899,2099,906],{"class":905},[899,2101,910],{"class":909},[899,2103,914],{"class":913},[899,2105,918],{"class":917},[899,2107,2108,2110,2112],{"class":901,"line":921},[899,2109,925],{"class":924},[899,2111,929],{"class":928},[899,2113,918],{"class":917},[899,2115,2116,2118,2120],{"class":901,"line":934},[899,2117,937],{"class":924},[899,2119,929],{"class":928},[899,2121,942],{"class":913},[899,2123,2124,2126,2128],{"class":901,"line":945},[899,2125,948],{"class":924},[899,2127,929],{"class":928},[899,2129,942],{"class":913},[899,2131,2132,2134,2136],{"class":901,"line":955},[899,2133,958],{"class":924},[899,2135,929],{"class":928},[899,2137,918],{"class":917},[899,2139,2140,2142,2144],{"class":901,"line":965},[899,2141,968],{"class":924},[899,2143,929],{"class":928},[899,2145,942],{"class":913},[899,2147,2148,2150,2152],{"class":901,"line":975},[899,2149,978],{"class":924},[899,2151,929],{"class":928},[899,2153,942],{"class":913},[899,2155,2156,2158,2160],{"class":901,"line":985},[899,2157,988],{"class":924},[899,2159,929],{"class":928},[899,2161,942],{"class":913},[899,2163,2164],{"class":901,"line":995},[899,2165,998],{"class":917},[899,2167,2168],{"class":901,"line":1001},[899,2169,1004],{"class":917},[899,2171,2172,2174,2176,2178],{"class":901,"line":1007},[899,2173,1010],{"class":924},[899,2175,929],{"class":928},[899,2177,1015],{"class":913},[899,2179,1018],{"class":917},[899,2181,2182],{"class":901,"line":1021},[899,2183,1024],{"class":917},[899,2185,2186],{"class":901,"line":1027},[899,2187,1030],{"emptyLinePlaceholder":8},[899,2189,2190,2192,2194,2196],{"class":901,"line":1033},[899,2191,906],{"class":905},[899,2193,910],{"class":909},[899,2195,1040],{"class":913},[899,2197,918],{"class":917},[899,2199,2200,2202,2204,2206,2208,2210,2212,2214,2216,2218,2220],{"class":901,"line":1045},[899,2201,1049],{"class":1048},[899,2203,1052],{"class":928},[899,2205,1055],{"class":917},[899,2207,1059],{"class":1058},[899,2209,1052],{"class":928},[899,2211,1064],{"class":913},[899,2213,1067],{"class":917},[899,2215,1070],{"class":909},[899,2217,1073],{"class":913},[899,2219,1076],{"class":928},[899,2221,1079],{"class":913},[899,2223,2224,2226,2228,2230,2232,2234,2236,2238,2240,2242,2244,2246,2248,2250,2252,2254],{"class":901,"line":1082},[899,2225,1085],{"class":1048},[899,2227,1052],{"class":928},[899,2229,1055],{"class":917},[899,2231,1059],{"class":1058},[899,2233,1052],{"class":928},[899,2235,1064],{"class":913},[899,2237,1098],{"class":917},[899,2239,1101],{"class":1058},[899,2241,1052],{"class":928},[899,2243,1106],{"class":913},[899,2245,1067],{"class":917},[899,2247,1070],{"class":909},[899,2249,1113],{"class":913},[899,2251,1116],{"class":917},[899,2253,1120],{"class":1119},[899,2255,1123],{"class":917},[899,2257,2258,2260,2262,2264,2266,2268,2270,2272,2274,2276,2278,2280,2282,2284,2286,2288,2290,2292],{"class":901,"line":1126},[899,2259,1129],{"class":1048},[899,2261,1052],{"class":928},[899,2263,1134],{"class":917},[899,2265,1137],{"class":1119},[899,2267,1140],{"class":917},[899,2269,1143],{"class":1058},[899,2271,1052],{"class":928},[899,2273,1073],{"class":913},[899,2275,1098],{"class":917},[899,2277,1101],{"class":1058},[899,2279,1052],{"class":928},[899,2281,1106],{"class":913},[899,2283,1067],{"class":917},[899,2285,1070],{"class":909},[899,2287,1113],{"class":913},[899,2289,1116],{"class":917},[899,2291,1137],{"class":1119},[899,2293,1123],{"class":917},[899,2295,2296],{"class":901,"line":1170},[899,2297,1024],{"class":917},[899,2299,2300],{"class":901,"line":1175},[899,2301,1030],{"emptyLinePlaceholder":8},[899,2303,2304,2306,2308,2310,2312,2314,2316,2318,2320,2322],{"class":901,"line":1180},[899,2305,906],{"class":905},[899,2307,1185],{"class":909},[899,2309,1188],{"class":1048},[899,2311,1191],{"class":917},[899,2313,1194],{"class":1058},[899,2315,929],{"class":928},[899,2317,914],{"class":913},[899,2319,1201],{"class":917},[899,2321,1052],{"class":928},[899,2323,1206],{"class":913},[884,2325,1210],{"id":1209},[1212,2327,2328,2340],{},[1215,2329,2330],{},[1218,2331,2332,2334,2336,2338],{},[1221,2333,1223],{},[1221,2335,1226],{},[1221,2337,1229],{},[1221,2339,1232],{},[1234,2341,2342],{},[1218,2343,2344,2348,2352,2354],{},[1239,2345,2346],{},[858,2347,1194],{},[1239,2349,2350],{},[858,2351,1247],{},[1239,2353,1250],{},[1239,2355,1253],{},[884,2357,1257],{"id":1256},[854,2359,1260,2360,1263],{},[858,2361,1247],{},[1212,2363,2364,2376],{},[1215,2365,2366],{},[1218,2367,2368,2370,2372,2374],{},[1221,2369,1272],{},[1221,2371,1226],{},[1221,2373,1277],{},[1221,2375,1232],{},[1234,2377,2378,2394,2410,2426,2442,2458],{},[1218,2379,2380,2384,2388,2392],{},[1239,2381,2382],{},[858,2383,1288],{},[1239,2385,2386],{},[858,2387,1293],{},[1239,2389,2390],{},[858,2391,1298],{},[1239,2393,1301],{},[1218,2395,2396,2400,2404,2408],{},[1239,2397,2398],{},[858,2399,1308],{},[1239,2401,2402],{},[858,2403,1293],{},[1239,2405,2406],{},[858,2407,1298],{},[1239,2409,1319],{},[1218,2411,2412,2416,2420,2424],{},[1239,2413,2414],{},[858,2415,1326],{},[1239,2417,2418],{},[858,2419,1293],{},[1239,2421,2422],{},[858,2423,1335],{},[1239,2425,1338],{},[1218,2427,2428,2432,2436,2440],{},[1239,2429,2430],{},[858,2431,1345],{},[1239,2433,2434],{},[858,2435,1293],{},[1239,2437,2438],{},[858,2439,1354],{},[1239,2441,1357],{},[1218,2443,2444,2448,2452,2456],{},[1239,2445,2446],{},[858,2447,1364],{},[1239,2449,2450],{},[858,2451,1293],{},[1239,2453,2454],{},[858,2455,1373],{},[1239,2457,1376],{},[1218,2459,2460,2464,2468,2472],{},[1239,2461,2462],{},[858,2463,1383],{},[1239,2465,2466],{},[858,2467,1293],{},[1239,2469,2470],{},[858,2471,1392],{},[1239,2473,1395],{},[884,2475,1399],{"id":1398},[1401,2477,2478],{"id":1403},[858,2479,1406],{},[854,2481,1409],{},[1212,2483,2484,2496],{},[1215,2485,2486],{},[1218,2487,2488,2490,2492,2494],{},[1221,2489,1223],{},[1221,2491,1226],{},[1221,2493,1229],{},[1221,2495,1232],{},[1234,2497,2498,2512],{},[1218,2499,2500,2504,2508,2510],{},[1239,2501,2502],{},[858,2503,1059],{},[1239,2505,2506],{},[858,2507,1436],{},[1239,2509,1439],{},[1239,2511,1442],{},[1218,2513,2514,2518,2522,2524],{},[1239,2515,2516],{},[858,2517,1101],{},[1239,2519,2520],{},[858,2521,1453],{},[1239,2523,1439],{},[1239,2525,1458],{},[854,2527,2528,1465,2530,1471],{},[1462,2529,1464],{},[874,2531,2532],{"href":257},[858,2533,1470],{},[1473,2535,2536],{},[854,2537,1477],{},[1401,2539,2540],{"id":1480},[858,2541,1483],{},[854,2543,1486],{},[1212,2545,2546,2558],{},[1215,2547,2548],{},[1218,2549,2550,2552,2554,2556],{},[1221,2551,1223],{},[1221,2553,1226],{},[1221,2555,1229],{},[1221,2557,1232],{},[1234,2559,2560,2574],{},[1218,2561,2562,2566,2570,2572],{},[1239,2563,2564],{},[858,2565,1143],{},[1239,2567,2568],{},[858,2569,1120],{},[1239,2571,1439],{},[1239,2573,1517],{},[1218,2575,2576,2580,2584,2586],{},[1239,2577,2578],{},[858,2579,1101],{},[1239,2581,2582],{},[858,2583,1453],{},[1239,2585,1439],{},[1239,2587,1532],{},[854,2589,2590,1465,2592,1542],{},[1462,2591,1464],{},[874,2593,2594],{"href":257},[858,2595,1541],{},[1401,2597,2598],{"id":1545},[858,2599,1548],{},[854,2601,1551,2602,1554,2604,1558],{},[858,2603,1120],{},[858,2605,1557],{},[1212,2607,2608,2620],{},[1215,2609,2610],{},[1218,2611,2612,2614,2616,2618],{},[1221,2613,1223],{},[1221,2615,1226],{},[1221,2617,1229],{},[1221,2619,1232],{},[1234,2621,2622],{},[1218,2623,2624,2628,2632,2634],{},[1239,2625,2626],{},[858,2627,1059],{},[1239,2629,2630],{},[858,2631,1436],{},[1239,2633,1439],{},[1239,2635,1589],{},[854,2637,2638,1465,2640,1597],{},[1462,2639,1464],{},[858,2641,1596],{},[884,2643,1601],{"id":1600},[854,2645,1604],{},[889,2647,2648],{"className":1607,"code":1608,"filename":1609,"language":1610,"meta":895,"style":895},[858,2649,2650,2668,2672,2676,2696,2700,2744,2758,2762,2766,2786,2790,2806,2832,2836,2840,2844,2848],{"__ignoreMap":895},[899,2651,2652,2654,2656,2658,2660,2662,2664,2666],{"class":901,"line":902},[899,2653,1617],{"class":905},[899,2655,1620],{"class":917},[899,2657,860],{"class":924},[899,2659,1625],{"class":917},[899,2661,1628],{"class":905},[899,2663,1632],{"class":1631},[899,2665,1636],{"class":1635},[899,2667,1639],{"class":1631},[899,2669,2670],{"class":901,"line":921},[899,2671,1030],{"emptyLinePlaceholder":8},[899,2673,2674],{"class":901,"line":934},[899,2675,1649],{"class":1648},[899,2677,2678,2680,2682,2684,2686,2688,2690,2692,2694],{"class":901,"line":945},[899,2679,1654],{"class":909},[899,2681,1620],{"class":917},[899,2683,1660],{"class":1659},[899,2685,1098],{"class":917},[899,2687,1665],{"class":1659},[899,2689,1625],{"class":917},[899,2691,1670],{"class":928},[899,2693,1188],{"class":1048},[899,2695,1675],{"class":917},[899,2697,2698],{"class":901,"line":955},[899,2699,1030],{"emptyLinePlaceholder":8},[899,2701,2702,2704,2706,2708,2710,2712,2714,2716,2718,2720,2722,2724,2726,2728,2730,2732,2734,2736,2738,2740,2742],{"class":901,"line":965},[899,2703,1654],{"class":909},[899,2705,1686],{"class":1659},[899,2707,1689],{"class":928},[899,2709,1620],{"class":917},[899,2711,1694],{"class":924},[899,2713,1052],{"class":1697},[899,2715,1632],{"class":1631},[899,2717,1702],{"class":1635},[899,2719,1705],{"class":1631},[899,2721,1098],{"class":917},[899,2723,1710],{"class":924},[899,2725,1052],{"class":1697},[899,2727,1715],{"class":917},[899,2729,1705],{"class":1631},[899,2731,1720],{"class":1635},[899,2733,1705],{"class":1631},[899,2735,1098],{"class":917},[899,2737,1705],{"class":1631},[899,2739,1729],{"class":1635},[899,2741,1705],{"class":1631},[899,2743,1734],{"class":917},[899,2745,2746,2748,2750,2752,2754,2756],{"class":901,"line":975},[899,2747,1654],{"class":909},[899,2749,1741],{"class":1659},[899,2751,1689],{"class":928},[899,2753,1632],{"class":1631},[899,2755,1748],{"class":1635},[899,2757,1639],{"class":1631},[899,2759,2760],{"class":901,"line":985},[899,2761,1030],{"emptyLinePlaceholder":8},[899,2763,2764],{"class":901,"line":995},[899,2765,1759],{"class":1648},[899,2767,2768,2770,2772,2774,2776,2778,2780,2782,2784],{"class":901,"line":1001},[899,2769,1654],{"class":909},[899,2771,1766],{"class":1659},[899,2773,1689],{"class":928},[899,2775,1771],{"class":1048},[899,2777,1191],{"class":917},[899,2779,1776],{"class":924},[899,2781,1098],{"class":917},[899,2783,1781],{"class":924},[899,2785,1784],{"class":917},[899,2787,2788],{"class":901,"line":1007},[899,2789,1030],{"emptyLinePlaceholder":8},[899,2791,2792,2794,2796,2798,2800,2802,2804],{"class":901,"line":1021},[899,2793,1793],{"class":905},[899,2795,1055],{"class":917},[899,2797,1798],{"class":928},[899,2799,1801],{"class":924},[899,2801,1804],{"class":917},[899,2803,1807],{"class":924},[899,2805,1810],{"class":917},[899,2807,2808,2810,2812,2814,2816,2818,2820,2822,2824,2826,2828,2830],{"class":901,"line":1027},[899,2809,1815],{"class":924},[899,2811,1804],{"class":917},[899,2813,1820],{"class":1048},[899,2815,1191],{"class":917},[899,2817,1705],{"class":1631},[899,2819,1827],{"class":1635},[899,2821,1705],{"class":1631},[899,2823,1098],{"class":917},[899,2825,1801],{"class":924},[899,2827,1804],{"class":917},[899,2829,1838],{"class":924},[899,2831,1784],{"class":917},[899,2833,2834],{"class":901,"line":1033},[899,2835,1845],{"class":905},[899,2837,2838],{"class":901,"line":1045},[899,2839,1024],{"class":917},[899,2841,2842],{"class":901,"line":1082},[899,2843,1030],{"emptyLinePlaceholder":8},[899,2845,2846],{"class":901,"line":1126},[899,2847,1858],{"class":1648},[899,2849,2850,2852,2854,2856,2858,2860],{"class":901,"line":1170},[899,2851,1654],{"class":909},[899,2853,1865],{"class":1659},[899,2855,1689],{"class":928},[899,2857,1766],{"class":924},[899,2859,1804],{"class":917},[899,2861,1874],{"class":924},[854,2863,1877],{},[889,2865,2866],{"className":1607,"code":1880,"filename":1881,"language":1610,"meta":895,"style":895},[858,2867,2868,2876,2884,2894,2898,2902,2926,2930,2944,2948,2970,2978,2982,3008],{"__ignoreMap":895},[899,2869,2870,2872,2874],{"class":901,"line":902},[899,2871,1888],{"class":909},[899,2873,1891],{"class":913},[899,2875,918],{"class":917},[899,2877,2878,2880,2882],{"class":901,"line":921},[899,2879,1898],{"class":924},[899,2881,1052],{"class":928},[899,2883,1903],{"class":913},[899,2885,2886,2888,2890,2892],{"class":901,"line":934},[899,2887,1908],{"class":924},[899,2889,1052],{"class":928},[899,2891,1106],{"class":913},[899,2893,1915],{"class":917},[899,2895,2896],{"class":901,"line":945},[899,2897,1024],{"class":917},[899,2899,2900],{"class":901,"line":955},[899,2901,1030],{"emptyLinePlaceholder":8},[899,2903,2904,2906,2908,2910,2912,2914,2916,2918,2920,2922,2924],{"class":901,"line":965},[899,2905,1654],{"class":909},[899,2907,1930],{"class":1659},[899,2909,1689],{"class":928},[899,2911,1935],{"class":1048},[899,2913,1116],{"class":917},[899,2915,1940],{"class":1119},[899,2917,1140],{"class":917},[899,2919,1945],{"class":924},[899,2921,1098],{"class":917},[899,2923,1781],{"class":924},[899,2925,1784],{"class":917},[899,2927,2928],{"class":901,"line":975},[899,2929,1030],{"emptyLinePlaceholder":8},[899,2931,2932,2934,2936,2938,2940,2942],{"class":901,"line":985},[899,2933,1793],{"class":905},[899,2935,1055],{"class":917},[899,2937,1964],{"class":924},[899,2939,1804],{"class":917},[899,2941,1807],{"class":924},[899,2943,1810],{"class":917},[899,2945,2946],{"class":901,"line":995},[899,2947,1975],{"class":1648},[899,2949,2950,2952,2954,2956,2958,2960,2962,2964,2966,2968],{"class":901,"line":1001},[899,2951,1815],{"class":924},[899,2953,1804],{"class":917},[899,2955,1984],{"class":1048},[899,2957,1191],{"class":917},[899,2959,1964],{"class":924},[899,2961,1804],{"class":917},[899,2963,1059],{"class":924},[899,2965,1804],{"class":917},[899,2967,1694],{"class":924},[899,2969,1784],{"class":917},[899,2971,2972,2974,2976],{"class":901,"line":1007},[899,2973,2003],{"class":917},[899,2975,2006],{"class":905},[899,2977,918],{"class":917},[899,2979,2980],{"class":901,"line":1021},[899,2981,2013],{"class":1648},[899,2983,2984,2986,2988,2990,2992,2994,2996,2998,3000,3002,3004,3006],{"class":901,"line":1027},[899,2985,1815],{"class":924},[899,2987,1804],{"class":917},[899,2989,1820],{"class":1048},[899,2991,1191],{"class":917},[899,2993,1705],{"class":1631},[899,2995,2028],{"class":1635},[899,2997,1705],{"class":1631},[899,2999,1098],{"class":917},[899,3001,1964],{"class":924},[899,3003,1804],{"class":917},[899,3005,1838],{"class":924},[899,3007,1784],{"class":917},[899,3009,3010],{"class":901,"line":1033},[899,3011,1024],{"class":917},[2046,3013,2048],{},{"title":895,"searchDepth":921,"depth":921,"links":3015},[3016,3017,3018,3019,3024],{"id":886,"depth":921,"text":887},{"id":1209,"depth":921,"text":1210},{"id":1256,"depth":921,"text":1257},{"id":1398,"depth":921,"text":1399,"children":3020},[3021,3022,3023],{"id":1403,"depth":934,"text":1406},{"id":1480,"depth":934,"text":1483},{"id":1545,"depth":934,"text":1548},{"id":1600,"depth":921,"text":1601},{},{"title":97,"description":2060},1780436295264]