[{"data":1,"prerenderedAt":1020},["ShallowReactive",2],{"navigation":3,"docs-path-index":230,"-docs-modules-devtools-configuration":302,"-docs-modules-devtools-configuration-surround":1015},[4],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":52},"Docs","i-lucide-book-marked","\u002Fdocs","docs",[10,26,53,191,212],{"title":11,"path":12,"stem":13,"children":14,"icon":25},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[15,17,21],{"title":16,"path":12,"stem":13},"Introduction",{"title":18,"path":19,"stem":20},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation",{"title":22,"path":23,"stem":24},"Examples","\u002Fdocs\u002Fgetting-started\u002Fexamples","docs\u002F1.getting-started\u002F3.examples","i-lucide-rocket",{"title":27,"icon":28,"path":29,"stem":30,"children":31,"page":52},"Core features","i-lucide-square-function","\u002Fdocs\u002Fcore-features","docs\u002F2.core-features",[32,36,40,44,48],{"title":33,"path":34,"stem":35},"Configuration","\u002Fdocs\u002Fcore-features\u002Fconfiguration","docs\u002F2.core-features\u002F0.configuration",{"title":37,"path":38,"stem":39},"Dependency Injection","\u002Fdocs\u002Fcore-features\u002Fcontainer","docs\u002F2.core-features\u002F1.container",{"title":41,"path":42,"stem":43},"Controllers","\u002Fdocs\u002Fcore-features\u002Fcontrollers","docs\u002F2.core-features\u002F2.controllers",{"title":45,"path":46,"stem":47},"Middlewares","\u002Fdocs\u002Fcore-features\u002Fmiddlewares","docs\u002F2.core-features\u002F3.middlewares",{"title":49,"path":50,"stem":51},"Validation","\u002Fdocs\u002Fcore-features\u002Fvalidation","docs\u002F2.core-features\u002F4.validation",false,{"title":54,"icon":55,"defaultOpen":56,"path":57,"stem":58,"children":59,"page":52},"Modules","i-lucide-boxes",true,"\u002Fdocs\u002Fmodules","docs\u002F3.modules",[60,77,88,104,112,127,138,153,172,180],{"title":61,"icon":52,"defaultOpen":52,"path":62,"stem":63,"children":64,"page":52},"Auth","\u002Fdocs\u002Fmodules\u002Fauth","docs\u002F3.modules\u002F1.auth",[65,69,73],{"title":66,"path":67,"stem":68},"Overview","\u002Fdocs\u002Fmodules\u002Fauth\u002Foverview","docs\u002F3.modules\u002F1.auth\u002F0.overview",{"title":70,"path":71,"stem":72},"Decorators","\u002Fdocs\u002Fmodules\u002Fauth\u002Fdecorators","docs\u002F3.modules\u002F1.auth\u002F1.decorators",{"title":74,"path":75,"stem":76},"API Reference","\u002Fdocs\u002Fmodules\u002Fauth\u002Fapi","docs\u002F3.modules\u002F1.auth\u002F2.api",{"title":78,"icon":52,"defaultOpen":52,"path":79,"stem":80,"children":81,"page":52},"Devtools","\u002Fdocs\u002Fmodules\u002Fdevtools","docs\u002F3.modules\u002F10.devtools",[82,85],{"title":66,"path":83,"stem":84},"\u002Fdocs\u002Fmodules\u002Fdevtools\u002Foverview","docs\u002F3.modules\u002F10.devtools\u002F0.overview",{"title":33,"path":86,"stem":87},"\u002Fdocs\u002Fmodules\u002Fdevtools\u002Fconfiguration","docs\u002F3.modules\u002F10.devtools\u002F1.configuration",{"title":89,"icon":52,"defaultOpen":52,"path":90,"stem":91,"children":92,"page":52},"Logger","\u002Fdocs\u002Fmodules\u002Flogger","docs\u002F3.modules\u002F2.logger",[93,96,100],{"title":66,"path":94,"stem":95},"\u002Fdocs\u002Fmodules\u002Flogger\u002Foverview","docs\u002F3.modules\u002F2.logger\u002F0.overview",{"title":97,"path":98,"stem":99},"Drains & Adapters","\u002Fdocs\u002Fmodules\u002Flogger\u002Fdrivers","docs\u002F3.modules\u002F2.logger\u002F1.drivers",{"title":101,"path":102,"stem":103},"API","\u002Fdocs\u002Fmodules\u002Flogger\u002Fapi","docs\u002F3.modules\u002F2.logger\u002F2.api",{"title":105,"icon":52,"defaultOpen":52,"path":106,"stem":107,"children":108,"page":52},"Serverless","\u002Fdocs\u002Fmodules\u002Fserverless","docs\u002F3.modules\u002F3.serverless",[109],{"title":66,"path":110,"stem":111},"\u002Fdocs\u002Fmodules\u002Fserverless\u002Foverview","docs\u002F3.modules\u002F3.serverless\u002F0.overview",{"title":113,"icon":52,"defaultOpen":52,"path":114,"stem":115,"children":116,"page":52},"Storage","\u002Fdocs\u002Fmodules\u002Fstorage","docs\u002F3.modules\u002F4.storage",[117,120,124],{"title":66,"path":118,"stem":119},"\u002Fdocs\u002Fmodules\u002Fstorage\u002Foverview","docs\u002F3.modules\u002F4.storage\u002F0.overview",{"title":121,"path":122,"stem":123},"Drivers","\u002Fdocs\u002Fmodules\u002Fstorage\u002Fdrivers","docs\u002F3.modules\u002F4.storage\u002F1.drivers",{"title":101,"path":125,"stem":126},"\u002Fdocs\u002Fmodules\u002Fstorage\u002Fapi","docs\u002F3.modules\u002F4.storage\u002F2.api",{"title":128,"icon":52,"defaultOpen":52,"path":129,"stem":130,"children":131,"page":52},"Web Sockets","\u002Fdocs\u002Fmodules\u002Fweb-sockets","docs\u002F3.modules\u002F5.web-sockets",[132,135],{"title":66,"path":133,"stem":134},"\u002Fdocs\u002Fmodules\u002Fweb-sockets\u002Foverview","docs\u002F3.modules\u002F5.web-sockets\u002F0.overview",{"title":101,"path":136,"stem":137},"\u002Fdocs\u002Fmodules\u002Fweb-sockets\u002Fapi","docs\u002F3.modules\u002F5.web-sockets\u002F1.api",{"title":139,"icon":52,"defaultOpen":52,"path":140,"stem":141,"children":142,"page":52},"Schema","\u002Fdocs\u002Fmodules\u002Fschema","docs\u002F3.modules\u002F6.schema",[143,146,149],{"title":66,"path":144,"stem":145},"\u002Fdocs\u002Fmodules\u002Fschema\u002Foverview","docs\u002F3.modules\u002F6.schema\u002F0.overview",{"title":70,"path":147,"stem":148},"\u002Fdocs\u002Fmodules\u002Fschema\u002Fdecorators","docs\u002F3.modules\u002F6.schema\u002F1.decorators",{"title":150,"path":151,"stem":152},"Scalar","\u002Fdocs\u002Fmodules\u002Fschema\u002Fscalar","docs\u002F3.modules\u002F6.schema\u002F2.scalar",{"title":154,"icon":52,"defaultOpen":52,"path":155,"stem":156,"children":157,"page":52},"Nitro","\u002Fdocs\u002Fmodules\u002Fnitro","docs\u002F3.modules\u002F7.nitro",[158,161,164,168],{"title":66,"path":159,"stem":160},"\u002Fdocs\u002Fmodules\u002Fnitro\u002Foverview","docs\u002F3.modules\u002F7.nitro\u002F0.overview",{"title":113,"path":162,"stem":163},"\u002Fdocs\u002Fmodules\u002Fnitro\u002Fstorage","docs\u002F3.modules\u002F7.nitro\u002F1.storage",{"title":165,"path":166,"stem":167},"File-Based Routes","\u002Fdocs\u002Fmodules\u002Fnitro\u002Ffile-based-routes","docs\u002F3.modules\u002F7.nitro\u002F2.file-based-routes",{"title":169,"path":170,"stem":171},"Middleware","\u002Fdocs\u002Fmodules\u002Fnitro\u002Fmiddleware","docs\u002F3.modules\u002F7.nitro\u002F3.middleware",{"title":173,"icon":52,"defaultOpen":52,"path":174,"stem":175,"children":176,"page":52},"Vite","\u002Fdocs\u002Fmodules\u002Fvite","docs\u002F3.modules\u002F8.vite",[177],{"title":66,"path":178,"stem":179},"\u002Fdocs\u002Fmodules\u002Fvite\u002Foverview","docs\u002F3.modules\u002F8.vite\u002F0.overview",{"title":181,"icon":52,"defaultOpen":52,"path":182,"stem":183,"children":184,"page":52},"Cache","\u002Fdocs\u002Fmodules\u002Fcache","docs\u002F3.modules\u002F9.cache",[185,188],{"title":66,"path":186,"stem":187},"\u002Fdocs\u002Fmodules\u002Fcache\u002Foverview","docs\u002F3.modules\u002F9.cache\u002F0.overview",{"title":101,"path":189,"stem":190},"\u002Fdocs\u002Fmodules\u002Fcache\u002Fapi","docs\u002F3.modules\u002F9.cache\u002F1.api",{"title":192,"icon":193,"path":194,"stem":195,"children":196,"page":52},"Deployment","i-lucide-cloud-upload","\u002Fdocs\u002Fdeployment","docs\u002F4.deployment",[197,200,204,208],{"title":66,"path":198,"stem":199},"\u002Fdocs\u002Fdeployment\u002Foverview","docs\u002F4.deployment\u002F0.overview",{"title":201,"path":202,"stem":203},"Vercel","\u002Fdocs\u002Fdeployment\u002Fvercel","docs\u002F4.deployment\u002F1.vercel",{"title":205,"path":206,"stem":207},"AWS Lambda","\u002Fdocs\u002Fdeployment\u002Faws-lambda","docs\u002F4.deployment\u002F2.aws-lambda",{"title":209,"path":210,"stem":211},"Azure Functions","\u002Fdocs\u002Fdeployment\u002Fazure-functions","docs\u002F4.deployment\u002F3.azure-functions",{"title":213,"icon":214,"path":215,"stem":216,"children":217,"page":52},"Advanced","i-lucide-brain","\u002Fdocs\u002Fadvanced","docs\u002F99.advanced",[218,222,226],{"title":219,"path":220,"stem":221},"Custom Decorator","\u002Fdocs\u002Fadvanced\u002Fcustom-decorator","docs\u002F99.advanced\u002F1.custom-decorator",{"title":223,"path":224,"stem":225},"Plugins","\u002Fdocs\u002Fadvanced\u002Fcustom-plugin","docs\u002F99.advanced\u002F2.custom-plugin",{"title":227,"path":228,"stem":229},"Custom CLI Command","\u002Fdocs\u002Fadvanced\u002Fcustom-cli-command","docs\u002F99.advanced\u002F3.custom-cli-command",[231,233,235,236,237,238,240,241,242,243,244,245,247,249,250,251,252,254,255,256,258,259,260,261,263,264,266,267,268,269,271,272,273,275,276,277,278,280,281,282,283,284,286,287,289,290,291,293,294,295,296,297,299,300,301],{"path":232},"\u002Fdocs\u002F.navigation",{"path":234},"\u002Fdocs\u002Fgetting-started\u002F.navigation",{"path":12},{"path":19},{"path":23},{"path":239},"\u002Fdocs\u002Fcore-features\u002F.navigation",{"path":34},{"path":38},{"path":42},{"path":46},{"path":50},{"path":246},"\u002Fdocs\u002Fmodules\u002F.navigation",{"path":248},"\u002Fdocs\u002Fmodules\u002Fauth\u002F.navigation",{"path":67},{"path":71},{"path":75},{"path":253},"\u002Fdocs\u002Fmodules\u002Fdevtools\u002F.navigation",{"path":83},{"path":86},{"path":257},"\u002Fdocs\u002Fmodules\u002Flogger\u002F.navigation",{"path":94},{"path":98},{"path":102},{"path":262},"\u002Fdocs\u002Fmodules\u002Fserverless\u002F.navigation",{"path":110},{"path":265},"\u002Fdocs\u002Fmodules\u002Fstorage\u002F.navigation",{"path":118},{"path":122},{"path":125},{"path":270},"\u002Fdocs\u002Fmodules\u002Fweb-sockets\u002F.navigation",{"path":133},{"path":136},{"path":274},"\u002Fdocs\u002Fmodules\u002Fschema\u002F.navigation",{"path":144},{"path":147},{"path":151},{"path":279},"\u002Fdocs\u002Fmodules\u002Fnitro\u002F.navigation",{"path":159},{"path":162},{"path":166},{"path":170},{"path":285},"\u002Fdocs\u002Fmodules\u002Fvite\u002F.navigation",{"path":178},{"path":288},"\u002Fdocs\u002Fmodules\u002Fcache\u002F.navigation",{"path":186},{"path":189},{"path":292},"\u002Fdocs\u002Fdeployment\u002F.navigation",{"path":198},{"path":202},{"path":206},{"path":210},{"path":298},"\u002Fdocs\u002Fadvanced\u002F.navigation",{"path":220},{"path":224},{"path":228},{"id":303,"title":33,"body":304,"description":1009,"extension":1010,"links":1011,"meta":1012,"navigation":56,"path":86,"seo":1013,"stem":87,"__hash__":1014},"docs\u002Fdocs\u002F3.modules\u002F10.devtools\u002F1.configuration.md",{"type":305,"value":306,"toc":1001},"minimark",[307,311,316,551,803,807,834,838,844,900,918,922,944,956,960,971,979,983,997],[308,309,310],"p",{},"Devtools work with no configuration in development. Everything below is for changing where they mount, how much they keep and who is allowed in.",[312,313,315],"h2",{"id":314},"options","Options",[317,318,324],"pre",{"className":319,"code":320,"filename":321,"language":322,"meta":323,"style":323},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineConfig, withPluginOptions } from '@vercube\u002Fcore';\nimport { DevtoolsPlugin } from '@vercube\u002Fdevtools';\n\nexport default defineConfig({\n  plugins: [\n    withPluginOptions(DevtoolsPlugin, {\n      path: '\u002F__inspect',\n      token: process.env.DEVTOOLS_TOKEN,\n      maxRequests: 500,\n      redactHeaders: ['x-internal-signature'],\n    }),\n  ],\n});\n","vercube.config.ts","ts","",[325,326,327,369,392,398,416,429,443,461,485,499,522,533,541],"code",{"__ignoreMap":323},[328,329,332,336,340,344,347,350,353,356,359,363,366],"span",{"class":330,"line":331},"line",1,[328,333,335],{"class":334},"s7zQu","import",[328,337,339],{"class":338},"sMK4o"," {",[328,341,343],{"class":342},"sTEyZ"," defineConfig",[328,345,346],{"class":338},",",[328,348,349],{"class":342}," withPluginOptions",[328,351,352],{"class":338}," }",[328,354,355],{"class":334}," from",[328,357,358],{"class":338}," '",[328,360,362],{"class":361},"sfazB","@vercube\u002Fcore",[328,364,365],{"class":338},"'",[328,367,368],{"class":338},";\n",[328,370,372,374,376,379,381,383,385,388,390],{"class":330,"line":371},2,[328,373,335],{"class":334},[328,375,339],{"class":338},[328,377,378],{"class":342}," DevtoolsPlugin",[328,380,352],{"class":338},[328,382,355],{"class":334},[328,384,358],{"class":338},[328,386,387],{"class":361},"@vercube\u002Fdevtools",[328,389,365],{"class":338},[328,391,368],{"class":338},[328,393,395],{"class":330,"line":394},3,[328,396,397],{"emptyLinePlaceholder":56},"\n",[328,399,401,404,407,410,413],{"class":330,"line":400},4,[328,402,403],{"class":334},"export",[328,405,406],{"class":334}," default",[328,408,343],{"class":409},"s2Zo4",[328,411,412],{"class":342},"(",[328,414,415],{"class":338},"{\n",[328,417,419,423,426],{"class":330,"line":418},5,[328,420,422],{"class":421},"swJcz","  plugins",[328,424,425],{"class":338},":",[328,427,428],{"class":342}," [\n",[328,430,432,435,438,440],{"class":330,"line":431},6,[328,433,434],{"class":409},"    withPluginOptions",[328,436,437],{"class":342},"(DevtoolsPlugin",[328,439,346],{"class":338},[328,441,442],{"class":338}," {\n",[328,444,446,449,451,453,456,458],{"class":330,"line":445},7,[328,447,448],{"class":421},"      path",[328,450,425],{"class":338},[328,452,358],{"class":338},[328,454,455],{"class":361},"\u002F__inspect",[328,457,365],{"class":338},[328,459,460],{"class":338},",\n",[328,462,464,467,469,472,475,478,480,483],{"class":330,"line":463},8,[328,465,466],{"class":421},"      token",[328,468,425],{"class":338},[328,470,471],{"class":342}," process",[328,473,474],{"class":338},".",[328,476,477],{"class":342},"env",[328,479,474],{"class":338},[328,481,482],{"class":342},"DEVTOOLS_TOKEN",[328,484,460],{"class":338},[328,486,488,491,493,497],{"class":330,"line":487},9,[328,489,490],{"class":421},"      maxRequests",[328,492,425],{"class":338},[328,494,496],{"class":495},"sbssI"," 500",[328,498,460],{"class":338},[328,500,502,505,507,510,512,515,517,520],{"class":330,"line":501},10,[328,503,504],{"class":421},"      redactHeaders",[328,506,425],{"class":338},[328,508,509],{"class":342}," [",[328,511,365],{"class":338},[328,513,514],{"class":361},"x-internal-signature",[328,516,365],{"class":338},[328,518,519],{"class":342},"]",[328,521,460],{"class":338},[328,523,525,528,531],{"class":330,"line":524},11,[328,526,527],{"class":338},"    }",[328,529,530],{"class":342},")",[328,532,460],{"class":338},[328,534,536,539],{"class":330,"line":535},12,[328,537,538],{"class":342},"  ]",[328,540,460],{"class":338},[328,542,544,547,549],{"class":330,"line":543},13,[328,545,546],{"class":338},"}",[328,548,530],{"class":342},[328,550,368],{"class":338},[552,553,554,573],"table",{},[555,556,557],"thead",{},[558,559,560,564,567,570],"tr",{},[561,562,563],"th",{},"Option",[561,565,566],{},"Type",[561,568,569],{},"Default",[561,571,572],{},"Description",[574,575,576,597,617,649,669,688,706,726,744,763,784],"tbody",{},[558,577,578,584,589,594],{},[579,580,581],"td",{},[325,582,583],{},"enabled",[579,585,586],{},[325,587,588],{},"boolean",[579,590,591],{},[325,592,593],{},"config.dev",[579,595,596],{},"Master switch. Off in production unless explicitly enabled.",[558,598,599,604,609,614],{},[579,600,601],{},[325,602,603],{},"path",[579,605,606],{},[325,607,608],{},"string",[579,610,611],{},[325,612,613],{},"'\u002F_devtools'",[579,615,616],{},"Where the UI and its API are mounted.",[558,618,619,624,629,634],{},[579,620,621],{},[325,622,623],{},"token",[579,625,626],{},[325,627,628],{},"string | null",[579,630,631],{},[325,632,633],{},"null",[579,635,636,637,640,641,644,645,648],{},"Access token. Required in production. Read from ",[325,638,639],{},"x-devtools-token"," or the ",[325,642,643],{},"vercube_devtools_token"," cookie; ",[325,646,647],{},"?token="," is honoured on the UI page only.",[558,650,651,656,661,666],{},[579,652,653],{},[325,654,655],{},"maxRequests",[579,657,658],{},[325,659,660],{},"number",[579,662,663],{},[325,664,665],{},"250",[579,667,668],{},"Size of the in-memory request ring buffer.",[558,670,671,676,680,685],{},[579,672,673],{},[325,674,675],{},"trackRequests",[579,677,678],{},[325,679,588],{},[579,681,682],{},[325,683,684],{},"true",[579,686,687],{},"Record per-request timelines.",[558,689,690,695,699,703],{},[579,691,692],{},[325,693,694],{},"captureHeaders",[579,696,697],{},[325,698,588],{},[579,700,701],{},[325,702,684],{},[579,704,705],{},"Capture request and response headers.",[558,707,708,713,718,723],{},[579,709,710],{},[325,711,712],{},"redactHeaders",[579,714,715],{},[325,716,717],{},"string[]",[579,719,720],{},[325,721,722],{},"[]",[579,724,725],{},"Extra header names to redact on top of the built-in list.",[558,727,728,733,737,741],{},[579,729,730],{},[325,731,732],{},"captureBodies",[579,734,735],{},[325,736,588],{},[579,738,739],{},[325,740,684],{},[579,742,743],{},"Capture request and response bodies for the inspector.",[558,745,746,751,755,760],{},[579,747,748],{},[325,749,750],{},"maxBodyBytes",[579,752,753],{},[325,754,660],{},[579,756,757],{},[325,758,759],{},"65536",[579,761,762],{},"Largest body kept per message.",[558,764,765,770,774,778],{},[579,766,767],{},[325,768,769],{},"captureLogs",[579,771,772],{},[325,773,588],{},[579,775,776],{},[325,777,684],{},[579,779,780,781,783],{},"Capture lines written through the ",[325,782,89],{}," service.",[558,785,786,791,795,800],{},[579,787,788],{},[325,789,790],{},"maxLogs",[579,792,793],{},[325,794,660],{},[579,796,797],{},[325,798,799],{},"500",[579,801,802],{},"Size of the in-memory log ring buffer.",[312,804,806],{"id":805},"when-devtools-are-active","When devtools are active",[308,808,809,810,812,813,815,816,818,819,822,823,826,827,830,831,833],{},"Unless you set ",[325,811,583],{}," explicitly, devtools run when ",[325,814,593],{}," is ",[325,817,684],{}," and ",[325,820,821],{},"config.production"," is not. A production build therefore installs none of the hooks at all, and turning devtools on anywhere else takes an explicit ",[325,824,825],{},"enabled: true",". With ",[325,828,829],{},"production: true"," the plugin refuses to mount without a ",[325,832,623],{}," and logs an error instead of exposing the inspector.",[312,835,837],{"id":836},"access-tokens","Access tokens",[308,839,840,841,843],{},"Set a ",[325,842,623],{}," whenever the application is reachable by anyone but you:",[317,845,847],{"className":319,"code":846,"filename":321,"language":322,"meta":323,"style":323},"withPluginOptions(DevtoolsPlugin, {\n  enabled: true,\n  token: process.env.DEVTOOLS_TOKEN,\n});\n",[325,848,849,860,873,892],{"__ignoreMap":323},[328,850,851,854,856,858],{"class":330,"line":331},[328,852,853],{"class":409},"withPluginOptions",[328,855,437],{"class":342},[328,857,346],{"class":338},[328,859,442],{"class":338},[328,861,862,865,867,871],{"class":330,"line":371},[328,863,864],{"class":421},"  enabled",[328,866,425],{"class":338},[328,868,870],{"class":869},"sfNiH"," true",[328,872,460],{"class":338},[328,874,875,878,880,882,884,886,888,890],{"class":330,"line":394},[328,876,877],{"class":421},"  token",[328,879,425],{"class":338},[328,881,471],{"class":342},[328,883,474],{"class":338},[328,885,477],{"class":342},[328,887,474],{"class":338},[328,889,482],{"class":342},[328,891,460],{"class":338},[328,893,894,896,898],{"class":330,"line":400},[328,895,546],{"class":338},[328,897,530],{"class":342},[328,899,368],{"class":338},[308,901,902,903,906,907,910,911,914,915,917],{},"Open the UI once with ",[325,904,905],{},"?token=…",". The inspector moves the token into a ",[325,908,909],{},"SameSite=Strict"," cookie and removes it from the URL, so it is not repeated on every API call, in ",[325,912,913],{},"Referer"," headers or in browser history. Later requests authenticate with that cookie or an ",[325,916,639],{}," header, and the query parameter is rejected on API paths, so it can never end up in a proxy log. Tokens are compared in constant time.",[312,919,921],{"id":920},"what-is-redacted","What is redacted",[308,923,924,925,928,929,932,933,936,937,940,941,943],{},"Credential-bearing headers such as ",[325,926,927],{},"authorization",", ",[325,930,931],{},"cookie"," or ",[325,934,935],{},"x-api-key"," are always replaced with ",[325,938,939],{},"\u003Credacted>",", and ",[325,942,712],{}," adds your own. The same name-based rule applies to query parameters, configuration values and storage keys, in camelCase, snake_case and SCREAMING_CASE spellings.",[945,946,947],"warning",{},[308,948,949,950,952,953,955],{},"Bodies are not redacted, because there is no name to match on. If your endpoints carry secrets in the payload, either set a ",[325,951,623],{}," so nobody else can read the inspector, or turn ",[325,954,732],{}," off.",[312,957,959],{"id":958},"devtools-routes-and-your-middlewares","Devtools routes and your middlewares",[308,961,962,963,966,967,970],{},"Devtools endpoints are ordinary ",[325,964,965],{},"@Controller"," routes, and the plugin detaches your application's global middlewares from the devtools mount so an auth or rate-limit middleware cannot lock you out of your own inspector. The mount is matched on whole path segments, so a route that merely shares the prefix, such as ",[325,968,969],{},"\u002F_devtools-admin",", keeps its global middlewares.",[945,972,973],{},[308,974,975,976,978],{},"Use the ",[325,977,623],{}," option for access control. Do not assume your application's auth protects the devtools mount, because it deliberately does not.",[312,980,982],{"id":981},"memory","Memory",[308,984,985,986,818,988,990,991,993,994,996],{},"Everything devtools keep is in memory and bounded: ",[325,987,655],{},[325,989,790],{}," cap the ring buffers, ",[325,992,750],{}," caps each captured body, and process metrics keep only the most recent samples. On a chatty application raise ",[325,995,655],{}," so a reproduction is not pushed out of the buffer before you read it; on a memory-tight container lower it or turn body capture off.",[998,999,1000],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":323,"searchDepth":331,"depth":371,"links":1002},[1003,1004,1005,1006,1007,1008],{"id":314,"depth":371,"text":315},{"id":805,"depth":371,"text":806},{"id":836,"depth":371,"text":837},{"id":920,"depth":371,"text":921},{"id":958,"depth":371,"text":959},{"id":981,"depth":371,"text":982},"Plugin options, access tokens and what devtools refuse to do outside development","md",null,{},{"title":33,"description":1009},"j69e5rVtFkhueMK840Eo_6xE95EGujFyLnLqqcpG7Rs",[1016,1018],{"title":66,"path":83,"stem":84,"description":1017,"children":-1},"A local-first inspector for Vercube applications - dependency graph, routes, request waterfalls, bootstrap profiler and audits",{"title":66,"path":94,"stem":95,"description":1019,"children":-1},"Structured wide-event logging for Vercube, powered by evlog",1787327658870]