[{"data":1,"prerenderedAt":3405},["ShallowReactive",2],{"navigation":3,"docs-path-index":152,"-docs-modules-auth-api":198,"-docs-modules-auth-api-surround":3400},[4],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":52},"Docs","i-lucide-book-marked","\u002Fdocs","docs",[10,26,53,138],{"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,93,109,123,134],{"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},"Logger","\u002Fdocs\u002Fmodules\u002Flogger","docs\u002F3.modules\u002F2.logger",[82,85,89],{"title":66,"path":83,"stem":84},"\u002Fdocs\u002Fmodules\u002Flogger\u002Foverview","docs\u002F3.modules\u002F2.logger\u002F0.overview",{"title":86,"path":87,"stem":88},"Drivers","\u002Fdocs\u002Fmodules\u002Flogger\u002Fdrivers","docs\u002F3.modules\u002F2.logger\u002F1.drivers",{"title":90,"path":91,"stem":92},"API","\u002Fdocs\u002Fmodules\u002Flogger\u002Fapi","docs\u002F3.modules\u002F2.logger\u002F2.api",{"title":94,"icon":52,"defaultOpen":52,"path":95,"stem":96,"children":97,"page":52},"Serverless","\u002Fdocs\u002Fmodules\u002Fserverless","docs\u002F3.modules\u002F3.serverless",[98,101,105],{"title":66,"path":99,"stem":100},"\u002Fdocs\u002Fmodules\u002Fserverless\u002Foverview","docs\u002F3.modules\u002F3.serverless\u002F0.overview",{"title":102,"path":103,"stem":104},"AWS Lambda","\u002Fdocs\u002Fmodules\u002Fserverless\u002Faws-lambda","docs\u002F3.modules\u002F3.serverless\u002F1.aws-lambda",{"title":106,"path":107,"stem":108},"Azure Functions","\u002Fdocs\u002Fmodules\u002Fserverless\u002Fazure-functions","docs\u002F3.modules\u002F3.serverless\u002F2.azure-functions",{"title":110,"icon":52,"defaultOpen":52,"path":111,"stem":112,"children":113,"page":52},"Storage","\u002Fdocs\u002Fmodules\u002Fstorage","docs\u002F3.modules\u002F4.storage",[114,117,120],{"title":66,"path":115,"stem":116},"\u002Fdocs\u002Fmodules\u002Fstorage\u002Foverview","docs\u002F3.modules\u002F4.storage\u002F0.overview",{"title":86,"path":118,"stem":119},"\u002Fdocs\u002Fmodules\u002Fstorage\u002Fdrivers","docs\u002F3.modules\u002F4.storage\u002F1.drivers",{"title":90,"path":121,"stem":122},"\u002Fdocs\u002Fmodules\u002Fstorage\u002Fapi","docs\u002F3.modules\u002F4.storage\u002F2.api",{"title":124,"icon":52,"defaultOpen":52,"path":125,"stem":126,"children":127,"page":52},"Web Sockets","\u002Fdocs\u002Fmodules\u002Fweb-sockets","docs\u002F3.modules\u002F5.web-sockets",[128,131],{"title":66,"path":129,"stem":130},"\u002Fdocs\u002Fmodules\u002Fweb-sockets\u002Foverview","docs\u002F3.modules\u002F5.web-sockets\u002F0.overview",{"title":90,"path":132,"stem":133},"\u002Fdocs\u002Fmodules\u002Fweb-sockets\u002Fapi","docs\u002F3.modules\u002F5.web-sockets\u002F1.api",{"title":135,"path":136,"stem":137},"MCP","\u002Fdocs\u002Fmodules\u002Fmcp","docs\u002F3.modules\u002F6.mcp",{"title":139,"icon":140,"defaultOpen":52,"path":141,"stem":142,"children":143,"page":52},"Advanced","i-lucide-brain","\u002Fdocs\u002Fadvanced","docs\u002F99.advanced",[144,148],{"title":145,"path":146,"stem":147},"Custom Decorator","\u002Fdocs\u002Fadvanced\u002Fcustom-decorator","docs\u002F99.advanced\u002F1.custom-decorator",{"title":149,"path":150,"stem":151},"Custom Plugin","\u002Fdocs\u002Fadvanced\u002Fcustom-plugin","docs\u002F99.advanced\u002F2.custom-plugin",[153,155,157,158,159,160,162,163,164,165,166,167,169,171,172,173,174,176,177,178,179,181,182,183,184,186,187,188,189,191,192,193,194,196,197],{"path":154},"\u002Fdocs\u002F.navigation",{"path":156},"\u002Fdocs\u002Fgetting-started\u002F.navigation",{"path":12},{"path":19},{"path":23},{"path":161},"\u002Fdocs\u002Fcore-features\u002F.navigation",{"path":34},{"path":38},{"path":42},{"path":46},{"path":50},{"path":168},"\u002Fdocs\u002Fmodules\u002F.navigation",{"path":170},"\u002Fdocs\u002Fmodules\u002Fauth\u002F.navigation",{"path":67},{"path":71},{"path":75},{"path":175},"\u002Fdocs\u002Fmodules\u002Flogger\u002F.navigation",{"path":83},{"path":87},{"path":91},{"path":180},"\u002Fdocs\u002Fmodules\u002Fserverless\u002F.navigation",{"path":99},{"path":103},{"path":107},{"path":185},"\u002Fdocs\u002Fmodules\u002Fstorage\u002F.navigation",{"path":115},{"path":118},{"path":121},{"path":190},"\u002Fdocs\u002Fmodules\u002Fweb-sockets\u002F.navigation",{"path":129},{"path":132},{"path":136},{"path":195},"\u002Fdocs\u002Fadvanced\u002F.navigation",{"path":146},{"path":150},{"id":199,"title":74,"body":200,"description":3394,"extension":3395,"links":3396,"meta":3397,"navigation":56,"path":75,"seo":3398,"stem":76,"__hash__":3399},"docs\u002Fdocs\u002F3.modules\u002F1.auth\u002F2.api.md",{"type":201,"value":202,"toc":3375},"minimark",[203,207,212,215,220,415,419,451,455,462,465,531,537,582,591,604,609,967,970,975,978,1021,1025,1051,1058,1068,1072,1230,1232,1235,1239,1242,1275,1279,1306,1310,1423,1425,1429,1432,1457,1461,1489,1494,1524,1528,1644,1646,1650,1653,1656,1689,1717,1719,1723,1727,2657,2661,2797,2801,3371],[204,205,206],"p",{},"Complete API documentation for the Auth module.",[208,209,211],"h2",{"id":210},"authprovider","AuthProvider",[204,213,214],{},"Abstract base class for implementing authentication providers.",[216,217,219],"h3",{"id":218},"class-definition","Class Definition",[221,222,227],"pre",{"className":223,"code":224,"language":225,"meta":226,"style":226},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","abstract class AuthProvider\u003CU = unknown> {\n  public abstract validate(\n    request: Request, \n    params?: AuthTypes.MiddlewareOptions\n  ): Promise\u003Cstring | null> | string | null;\n  \n  public abstract getCurrentUser(\n    request: Request\n  ): Promise\u003CU | null> | U | null;\n}\n","ts","",[228,229,230,265,281,301,319,353,359,371,381,409],"code",{"__ignoreMap":226},[231,232,235,239,242,246,250,253,256,259,262],"span",{"class":233,"line":234},"line",1,[231,236,238],{"class":237},"spNyl","abstract",[231,240,241],{"class":237}," class",[231,243,245],{"class":244},"sBMFI"," AuthProvider",[231,247,249],{"class":248},"sMK4o","\u003C",[231,251,252],{"class":244},"U",[231,254,255],{"class":248}," =",[231,257,258],{"class":244}," unknown",[231,260,261],{"class":248},">",[231,263,264],{"class":248}," {\n",[231,266,268,271,274,278],{"class":233,"line":267},2,[231,269,270],{"class":237},"  public",[231,272,273],{"class":237}," abstract",[231,275,277],{"class":276},"swJcz"," validate",[231,279,280],{"class":248},"(\n",[231,282,284,288,291,294,297],{"class":233,"line":283},3,[231,285,287],{"class":286},"sHdIc","    request",[231,289,290],{"class":248},":",[231,292,293],{"class":244}," Request",[231,295,296],{"class":248},",",[231,298,300],{"class":299},"sTEyZ"," \n",[231,302,304,307,310,313,316],{"class":233,"line":303},4,[231,305,306],{"class":286},"    params",[231,308,309],{"class":248},"?:",[231,311,312],{"class":244}," AuthTypes",[231,314,315],{"class":248},".",[231,317,318],{"class":244},"MiddlewareOptions\n",[231,320,322,325,328,330,333,336,339,341,343,346,348,350],{"class":233,"line":321},5,[231,323,324],{"class":248},"  ):",[231,326,327],{"class":244}," Promise",[231,329,249],{"class":248},[231,331,332],{"class":244},"string",[231,334,335],{"class":248}," |",[231,337,338],{"class":244}," null",[231,340,261],{"class":248},[231,342,335],{"class":248},[231,344,345],{"class":244}," string",[231,347,335],{"class":248},[231,349,338],{"class":244},[231,351,352],{"class":248},";\n",[231,354,356],{"class":233,"line":355},6,[231,357,358],{"class":299},"  \n",[231,360,362,364,366,369],{"class":233,"line":361},7,[231,363,270],{"class":237},[231,365,273],{"class":237},[231,367,368],{"class":276}," getCurrentUser",[231,370,280],{"class":248},[231,372,374,376,378],{"class":233,"line":373},8,[231,375,287],{"class":286},[231,377,290],{"class":248},[231,379,380],{"class":244}," Request\n",[231,382,384,386,388,390,392,394,396,398,400,403,405,407],{"class":233,"line":383},9,[231,385,324],{"class":248},[231,387,327],{"class":244},[231,389,249],{"class":248},[231,391,252],{"class":244},[231,393,335],{"class":248},[231,395,338],{"class":244},[231,397,261],{"class":248},[231,399,335],{"class":248},[231,401,402],{"class":244}," U",[231,404,335],{"class":248},[231,406,338],{"class":244},[231,408,352],{"class":248},[231,410,412],{"class":233,"line":411},10,[231,413,414],{"class":248},"}\n",[216,416,418],{"id":417},"type-parameters","Type Parameters",[420,421,422,435],"table",{},[423,424,425],"thead",{},[426,427,428,432],"tr",{},[429,430,431],"th",{},"Parameter",[429,433,434],{},"Description",[436,437,438],"tbody",{},[426,439,440,445],{},[441,442,443],"td",{},[228,444,252],{},[441,446,447,448],{},"The type of the user object returned by ",[228,449,450],{},"getCurrentUser()",[216,452,454],{"id":453},"methods","Methods",[456,457,459],"h4",{"id":458},"validate",[228,460,461],{},"validate()",[204,463,464],{},"Validates an incoming request for authentication.",[221,466,468],{"className":223,"code":467,"language":225,"meta":226,"style":226},"public abstract validate(\n  request: Request, \n  params?: AuthTypes.MiddlewareOptions\n): Promise\u003Cstring | null> | string | null;\n",[228,469,470,480,489,502],{"__ignoreMap":226},[231,471,472,475,478],{"class":233,"line":234},[231,473,474],{"class":299},"public abstract ",[231,476,458],{"class":477},"s2Zo4",[231,479,280],{"class":299},[231,481,482,485,487],{"class":233,"line":267},[231,483,484],{"class":299},"  request: Request",[231,486,296],{"class":248},[231,488,300],{"class":299},[231,490,491,494,496,498,500],{"class":233,"line":283},[231,492,493],{"class":299},"  params",[231,495,309],{"class":248},[231,497,312],{"class":299},[231,499,315],{"class":248},[231,501,318],{"class":299},[231,503,504,507,510,512,515,518,521,523,526,528],{"class":233,"line":303},[231,505,506],{"class":299},"): ",[231,508,509],{"class":244},"Promise",[231,511,249],{"class":248},[231,513,514],{"class":299},"string ",[231,516,517],{"class":248},"|",[231,519,520],{"class":248}," null>",[231,522,335],{"class":248},[231,524,525],{"class":299}," string ",[231,527,517],{"class":248},[231,529,530],{"class":248}," null;\n",[204,532,533],{},[534,535,536],"strong",{},"Parameters:",[420,538,539,550],{},[423,540,541],{},[426,542,543,545,548],{},[429,544,431],{},[429,546,547],{},"Type",[429,549,434],{},[436,551,552,567],{},[426,553,554,559,564],{},[441,555,556],{},[228,557,558],{},"request",[441,560,561],{},[228,562,563],{},"Request",[441,565,566],{},"The incoming HTTP request object",[426,568,569,574,579],{},[441,570,571],{},[228,572,573],{},"params",[441,575,576],{},[228,577,578],{},"AuthTypes.MiddlewareOptions",[441,580,581],{},"Optional middleware options (e.g., required roles)",[204,583,584,587,588],{},[534,585,586],{},"Returns:"," ",[228,589,590],{},"Promise\u003Cstring | null> | string | null",[592,593,594,601],"ul",{},[595,596,597,600],"li",{},[228,598,599],{},"null"," if authentication succeeds",[595,602,603],{},"Error message string if authentication fails",[204,605,606],{},[534,607,608],{},"Example:",[221,610,612],{"className":223,"code":611,"language":225,"meta":226,"style":226},"public validate(request: Request, params?: AuthTypes.MiddlewareOptions): string | null {\n  const token = request.headers.get('Authorization')?.replace('Bearer ', '');\n  \n  if (!token) {\n    return 'No token provided';\n  }\n\n  try {\n    const user = jwt.verify(token, this.secret);\n    \n    if (params?.roles?.length) {\n      const hasRole = params.roles.some(role => user.roles.includes(role));\n      if (!hasRole) {\n        return 'Insufficient permissions';\n      }\n    }\n    \n    return null;\n  } catch {\n    return 'Invalid token';\n  }\n}\n",[228,613,614,644,706,710,731,746,751,756,763,797,802,826,876,893,908,914,920,925,932,943,957,962],{"__ignoreMap":226},[231,615,616,619,621,624,626,629,631,633,635,638,640,642],{"class":233,"line":234},[231,617,618],{"class":299},"public ",[231,620,458],{"class":477},[231,622,623],{"class":299},"(request: Request",[231,625,296],{"class":248},[231,627,628],{"class":299}," params",[231,630,309],{"class":248},[231,632,312],{"class":299},[231,634,315],{"class":248},[231,636,637],{"class":299},"MiddlewareOptions): string ",[231,639,517],{"class":248},[231,641,338],{"class":248},[231,643,264],{"class":248},[231,645,646,649,652,654,657,659,662,664,667,670,673,677,679,682,685,688,690,692,695,697,699,702,704],{"class":233,"line":267},[231,647,648],{"class":237},"  const",[231,650,651],{"class":299}," token",[231,653,255],{"class":248},[231,655,656],{"class":299}," request",[231,658,315],{"class":248},[231,660,661],{"class":299},"headers",[231,663,315],{"class":248},[231,665,666],{"class":477},"get",[231,668,669],{"class":276},"(",[231,671,672],{"class":248},"'",[231,674,676],{"class":675},"sfazB","Authorization",[231,678,672],{"class":248},[231,680,681],{"class":276},")",[231,683,684],{"class":248},"?.",[231,686,687],{"class":477},"replace",[231,689,669],{"class":276},[231,691,672],{"class":248},[231,693,694],{"class":675},"Bearer ",[231,696,672],{"class":248},[231,698,296],{"class":248},[231,700,701],{"class":248}," ''",[231,703,681],{"class":276},[231,705,352],{"class":248},[231,707,708],{"class":233,"line":283},[231,709,358],{"class":276},[231,711,712,716,719,722,725,728],{"class":233,"line":303},[231,713,715],{"class":714},"s7zQu","  if",[231,717,718],{"class":276}," (",[231,720,721],{"class":248},"!",[231,723,724],{"class":299},"token",[231,726,727],{"class":276},") ",[231,729,730],{"class":248},"{\n",[231,732,733,736,739,742,744],{"class":233,"line":321},[231,734,735],{"class":714},"    return",[231,737,738],{"class":248}," '",[231,740,741],{"class":675},"No token provided",[231,743,672],{"class":248},[231,745,352],{"class":248},[231,747,748],{"class":233,"line":355},[231,749,750],{"class":248},"  }\n",[231,752,753],{"class":233,"line":361},[231,754,755],{"emptyLinePlaceholder":56},"\n",[231,757,758,761],{"class":233,"line":373},[231,759,760],{"class":714},"  try",[231,762,264],{"class":248},[231,764,765,768,771,773,776,778,781,783,785,787,790,793,795],{"class":233,"line":383},[231,766,767],{"class":237},"    const",[231,769,770],{"class":299}," user",[231,772,255],{"class":248},[231,774,775],{"class":299}," jwt",[231,777,315],{"class":248},[231,779,780],{"class":477},"verify",[231,782,669],{"class":276},[231,784,724],{"class":299},[231,786,296],{"class":248},[231,788,789],{"class":248}," this.",[231,791,792],{"class":299},"secret",[231,794,681],{"class":276},[231,796,352],{"class":248},[231,798,799],{"class":233,"line":411},[231,800,801],{"class":276},"    \n",[231,803,805,808,810,812,814,817,819,822,824],{"class":233,"line":804},11,[231,806,807],{"class":714},"    if",[231,809,718],{"class":276},[231,811,573],{"class":299},[231,813,684],{"class":248},[231,815,816],{"class":299},"roles",[231,818,684],{"class":248},[231,820,821],{"class":299},"length",[231,823,727],{"class":276},[231,825,730],{"class":248},[231,827,829,832,835,837,839,841,843,845,848,850,853,856,858,860,862,864,867,869,871,874],{"class":233,"line":828},12,[231,830,831],{"class":237},"      const",[231,833,834],{"class":299}," hasRole",[231,836,255],{"class":248},[231,838,628],{"class":299},[231,840,315],{"class":248},[231,842,816],{"class":299},[231,844,315],{"class":248},[231,846,847],{"class":477},"some",[231,849,669],{"class":276},[231,851,852],{"class":286},"role",[231,854,855],{"class":237}," =>",[231,857,770],{"class":299},[231,859,315],{"class":248},[231,861,816],{"class":299},[231,863,315],{"class":248},[231,865,866],{"class":477},"includes",[231,868,669],{"class":276},[231,870,852],{"class":299},[231,872,873],{"class":276},"))",[231,875,352],{"class":248},[231,877,879,882,884,886,889,891],{"class":233,"line":878},13,[231,880,881],{"class":714},"      if",[231,883,718],{"class":276},[231,885,721],{"class":248},[231,887,888],{"class":299},"hasRole",[231,890,727],{"class":276},[231,892,730],{"class":248},[231,894,896,899,901,904,906],{"class":233,"line":895},14,[231,897,898],{"class":714},"        return",[231,900,738],{"class":248},[231,902,903],{"class":675},"Insufficient permissions",[231,905,672],{"class":248},[231,907,352],{"class":248},[231,909,911],{"class":233,"line":910},15,[231,912,913],{"class":248},"      }\n",[231,915,917],{"class":233,"line":916},16,[231,918,919],{"class":248},"    }\n",[231,921,923],{"class":233,"line":922},17,[231,924,801],{"class":276},[231,926,928,930],{"class":233,"line":927},18,[231,929,735],{"class":714},[231,931,530],{"class":248},[231,933,935,938,941],{"class":233,"line":934},19,[231,936,937],{"class":248},"  }",[231,939,940],{"class":714}," catch",[231,942,264],{"class":248},[231,944,946,948,950,953,955],{"class":233,"line":945},20,[231,947,735],{"class":714},[231,949,738],{"class":248},[231,951,952],{"class":675},"Invalid token",[231,954,672],{"class":248},[231,956,352],{"class":248},[231,958,960],{"class":233,"line":959},21,[231,961,750],{"class":248},[231,963,965],{"class":233,"line":964},22,[231,966,414],{"class":248},[968,969],"hr",{},[456,971,973],{"id":972},"getcurrentuser",[228,974,450],{},[204,976,977],{},"Retrieves the currently authenticated user from the request.",[221,979,981],{"className":223,"code":980,"language":225,"meta":226,"style":226},"public abstract getCurrentUser(\n  request: Request\n): Promise\u003CU | null> | U | null;\n",[228,982,983,992,997],{"__ignoreMap":226},[231,984,985,987,990],{"class":233,"line":234},[231,986,474],{"class":299},[231,988,989],{"class":477},"getCurrentUser",[231,991,280],{"class":299},[231,993,994],{"class":233,"line":267},[231,995,996],{"class":299},"  request: Request\n",[231,998,999,1001,1003,1005,1008,1010,1012,1014,1017,1019],{"class":233,"line":283},[231,1000,506],{"class":299},[231,1002,509],{"class":244},[231,1004,249],{"class":248},[231,1006,1007],{"class":299},"U ",[231,1009,517],{"class":248},[231,1011,520],{"class":248},[231,1013,335],{"class":248},[231,1015,1016],{"class":299}," U ",[231,1018,517],{"class":248},[231,1020,530],{"class":248},[204,1022,1023],{},[534,1024,536],{},[420,1026,1027,1037],{},[423,1028,1029],{},[426,1030,1031,1033,1035],{},[429,1032,431],{},[429,1034,547],{},[429,1036,434],{},[436,1038,1039],{},[426,1040,1041,1045,1049],{},[441,1042,1043],{},[228,1044,558],{},[441,1046,1047],{},[228,1048,563],{},[441,1050,566],{},[204,1052,1053,587,1055],{},[534,1054,586],{},[228,1056,1057],{},"Promise\u003CU | null> | U | null",[592,1059,1060,1063],{},[595,1061,1062],{},"User object if authenticated",[595,1064,1065,1067],{},[228,1066,599],{}," if not authenticated",[204,1069,1070],{},[534,1071,608],{},[221,1073,1075],{"className":223,"code":1074,"language":225,"meta":226,"style":226},"public getCurrentUser(request: Request): User | null {\n  const token = request.headers.get('Authorization')?.replace('Bearer ', '');\n  \n  if (!token) {\n    return null;\n  }\n\n  try {\n    return jwt.verify(token, this.secret) as User;\n  } catch {\n    return null;\n  }\n}\n",[228,1076,1077,1092,1140,1144,1158,1164,1168,1172,1178,1208,1216,1222,1226],{"__ignoreMap":226},[231,1078,1079,1081,1083,1086,1088,1090],{"class":233,"line":234},[231,1080,618],{"class":299},[231,1082,989],{"class":477},[231,1084,1085],{"class":299},"(request: Request): User ",[231,1087,517],{"class":248},[231,1089,338],{"class":248},[231,1091,264],{"class":248},[231,1093,1094,1096,1098,1100,1102,1104,1106,1108,1110,1112,1114,1116,1118,1120,1122,1124,1126,1128,1130,1132,1134,1136,1138],{"class":233,"line":267},[231,1095,648],{"class":237},[231,1097,651],{"class":299},[231,1099,255],{"class":248},[231,1101,656],{"class":299},[231,1103,315],{"class":248},[231,1105,661],{"class":299},[231,1107,315],{"class":248},[231,1109,666],{"class":477},[231,1111,669],{"class":276},[231,1113,672],{"class":248},[231,1115,676],{"class":675},[231,1117,672],{"class":248},[231,1119,681],{"class":276},[231,1121,684],{"class":248},[231,1123,687],{"class":477},[231,1125,669],{"class":276},[231,1127,672],{"class":248},[231,1129,694],{"class":675},[231,1131,672],{"class":248},[231,1133,296],{"class":248},[231,1135,701],{"class":248},[231,1137,681],{"class":276},[231,1139,352],{"class":248},[231,1141,1142],{"class":233,"line":283},[231,1143,358],{"class":276},[231,1145,1146,1148,1150,1152,1154,1156],{"class":233,"line":303},[231,1147,715],{"class":714},[231,1149,718],{"class":276},[231,1151,721],{"class":248},[231,1153,724],{"class":299},[231,1155,727],{"class":276},[231,1157,730],{"class":248},[231,1159,1160,1162],{"class":233,"line":321},[231,1161,735],{"class":714},[231,1163,530],{"class":248},[231,1165,1166],{"class":233,"line":355},[231,1167,750],{"class":248},[231,1169,1170],{"class":233,"line":361},[231,1171,755],{"emptyLinePlaceholder":56},[231,1173,1174,1176],{"class":233,"line":373},[231,1175,760],{"class":714},[231,1177,264],{"class":248},[231,1179,1180,1182,1184,1186,1188,1190,1192,1194,1196,1198,1200,1203,1206],{"class":233,"line":383},[231,1181,735],{"class":714},[231,1183,775],{"class":299},[231,1185,315],{"class":248},[231,1187,780],{"class":477},[231,1189,669],{"class":276},[231,1191,724],{"class":299},[231,1193,296],{"class":248},[231,1195,789],{"class":248},[231,1197,792],{"class":299},[231,1199,727],{"class":276},[231,1201,1202],{"class":714},"as",[231,1204,1205],{"class":244}," User",[231,1207,352],{"class":248},[231,1209,1210,1212,1214],{"class":233,"line":411},[231,1211,937],{"class":248},[231,1213,940],{"class":714},[231,1215,264],{"class":248},[231,1217,1218,1220],{"class":233,"line":804},[231,1219,735],{"class":714},[231,1221,530],{"class":248},[231,1223,1224],{"class":233,"line":828},[231,1225,750],{"class":248},[231,1227,1228],{"class":233,"line":878},[231,1229,414],{"class":248},[968,1231],{},[208,1233,70],{"id":1234},"decorators",[216,1236,1238],{"id":1237},"auth","@Auth()",[204,1240,1241],{},"Protects a controller method by requiring authentication.",[221,1243,1245],{"className":223,"code":1244,"language":225,"meta":226,"style":226},"function Auth(options?: AuthTypes.MiddlewareOptions): MethodDecorator\n",[228,1246,1247],{"__ignoreMap":226},[231,1248,1249,1252,1255,1257,1260,1262,1264,1266,1269,1272],{"class":233,"line":234},[231,1250,1251],{"class":237},"function",[231,1253,1254],{"class":477}," Auth",[231,1256,669],{"class":248},[231,1258,1259],{"class":286},"options",[231,1261,309],{"class":248},[231,1263,312],{"class":244},[231,1265,315],{"class":248},[231,1267,1268],{"class":244},"MiddlewareOptions",[231,1270,1271],{"class":248},"):",[231,1273,1274],{"class":244}," MethodDecorator\n",[204,1276,1277],{},[534,1278,536],{},[420,1280,1281,1291],{},[423,1282,1283],{},[426,1284,1285,1287,1289],{},[429,1286,431],{},[429,1288,547],{},[429,1290,434],{},[436,1292,1293],{},[426,1294,1295,1299,1303],{},[441,1296,1297],{},[228,1298,1259],{},[441,1300,1301],{},[228,1302,578],{},[441,1304,1305],{},"Optional authentication options",[204,1307,1308],{},[534,1309,608],{},[221,1311,1313],{"className":223,"code":1312,"language":225,"meta":226,"style":226},"@Get('\u002Fprotected')\n@Auth()\npublic protectedRoute() {}\n\n@Get('\u002Fadmin')\n@Auth({ roles: ['admin'] })\npublic adminRoute() {}\n",[228,1314,1315,1335,1344,1357,1361,1378,1412],{"__ignoreMap":226},[231,1316,1317,1320,1323,1325,1327,1330,1332],{"class":233,"line":234},[231,1318,1319],{"class":248},"@",[231,1321,1322],{"class":477},"Get",[231,1324,669],{"class":299},[231,1326,672],{"class":248},[231,1328,1329],{"class":675},"\u002Fprotected",[231,1331,672],{"class":248},[231,1333,1334],{"class":299},")\n",[231,1336,1337,1339,1341],{"class":233,"line":267},[231,1338,1319],{"class":248},[231,1340,61],{"class":477},[231,1342,1343],{"class":299},"()\n",[231,1345,1346,1348,1351,1354],{"class":233,"line":283},[231,1347,618],{"class":299},[231,1349,1350],{"class":477},"protectedRoute",[231,1352,1353],{"class":299},"() ",[231,1355,1356],{"class":248},"{}\n",[231,1358,1359],{"class":233,"line":303},[231,1360,755],{"emptyLinePlaceholder":56},[231,1362,1363,1365,1367,1369,1371,1374,1376],{"class":233,"line":321},[231,1364,1319],{"class":248},[231,1366,1322],{"class":477},[231,1368,669],{"class":299},[231,1370,672],{"class":248},[231,1372,1373],{"class":675},"\u002Fadmin",[231,1375,672],{"class":248},[231,1377,1334],{"class":299},[231,1379,1380,1382,1384,1386,1389,1392,1394,1397,1399,1402,1404,1407,1410],{"class":233,"line":355},[231,1381,1319],{"class":248},[231,1383,61],{"class":477},[231,1385,669],{"class":299},[231,1387,1388],{"class":248},"{",[231,1390,1391],{"class":276}," roles",[231,1393,290],{"class":248},[231,1395,1396],{"class":299}," [",[231,1398,672],{"class":248},[231,1400,1401],{"class":675},"admin",[231,1403,672],{"class":248},[231,1405,1406],{"class":299},"] ",[231,1408,1409],{"class":248},"}",[231,1411,1334],{"class":299},[231,1413,1414,1416,1419,1421],{"class":233,"line":361},[231,1415,618],{"class":299},[231,1417,1418],{"class":477},"adminRoute",[231,1420,1353],{"class":299},[231,1422,1356],{"class":248},[968,1424],{},[216,1426,1428],{"id":1427},"user","@User()",[204,1430,1431],{},"Injects the current authenticated user into a method parameter.",[221,1433,1435],{"className":223,"code":1434,"language":225,"meta":226,"style":226},"function User(options?: UserDecoratorOptions): ParameterDecorator\n",[228,1436,1437],{"__ignoreMap":226},[231,1438,1439,1441,1443,1445,1447,1449,1452,1454],{"class":233,"line":234},[231,1440,1251],{"class":237},[231,1442,1205],{"class":477},[231,1444,669],{"class":248},[231,1446,1259],{"class":286},[231,1448,309],{"class":248},[231,1450,1451],{"class":244}," UserDecoratorOptions",[231,1453,1271],{"class":248},[231,1455,1456],{"class":244}," ParameterDecorator\n",[204,1458,1459],{},[534,1460,536],{},[420,1462,1463,1473],{},[423,1464,1465],{},[426,1466,1467,1469,1471],{},[429,1468,431],{},[429,1470,547],{},[429,1472,434],{},[436,1474,1475],{},[426,1476,1477,1481,1486],{},[441,1478,1479],{},[228,1480,1259],{},[441,1482,1483],{},[228,1484,1485],{},"UserDecoratorOptions",[441,1487,1488],{},"Optional decorator options",[204,1490,1491],{},[534,1492,1493],{},"UserDecoratorOptions:",[420,1495,1496,1507],{},[423,1497,1498],{},[426,1499,1500,1503,1505],{},[429,1501,1502],{},"Property",[429,1504,547],{},[429,1506,434],{},[436,1508,1509],{},[426,1510,1511,1516,1521],{},[441,1512,1513],{},[228,1514,1515],{},"provider",[441,1517,1518],{},[228,1519,1520],{},"typeof AuthProvider",[441,1522,1523],{},"Custom auth provider to use",[204,1525,1526],{},[534,1527,608],{},[221,1529,1531],{"className":223,"code":1530,"language":225,"meta":226,"style":226},"@Get('\u002Fme')\npublic getMe(@User() user: User) {\n  return user;\n}\n\n@Get('\u002Fcustom')\npublic getCustom(@User({ provider: CustomAuthProvider }) user: CustomUser) {\n  return user;\n}\n",[228,1532,1533,1550,1568,1577,1581,1585,1602,1632,1640],{"__ignoreMap":226},[231,1534,1535,1537,1539,1541,1543,1546,1548],{"class":233,"line":234},[231,1536,1319],{"class":248},[231,1538,1322],{"class":477},[231,1540,669],{"class":299},[231,1542,672],{"class":248},[231,1544,1545],{"class":675},"\u002Fme",[231,1547,672],{"class":248},[231,1549,1334],{"class":299},[231,1551,1552,1554,1557,1560,1563,1566],{"class":233,"line":267},[231,1553,618],{"class":299},[231,1555,1556],{"class":477},"getMe",[231,1558,1559],{"class":299},"(@",[231,1561,1562],{"class":477},"User",[231,1564,1565],{"class":299},"() user: User) ",[231,1567,730],{"class":248},[231,1569,1570,1573,1575],{"class":233,"line":283},[231,1571,1572],{"class":714},"  return",[231,1574,770],{"class":299},[231,1576,352],{"class":248},[231,1578,1579],{"class":233,"line":303},[231,1580,414],{"class":248},[231,1582,1583],{"class":233,"line":321},[231,1584,755],{"emptyLinePlaceholder":56},[231,1586,1587,1589,1591,1593,1595,1598,1600],{"class":233,"line":355},[231,1588,1319],{"class":248},[231,1590,1322],{"class":477},[231,1592,669],{"class":299},[231,1594,672],{"class":248},[231,1596,1597],{"class":675},"\u002Fcustom",[231,1599,672],{"class":248},[231,1601,1334],{"class":299},[231,1603,1604,1606,1609,1611,1613,1615,1617,1620,1622,1625,1627,1630],{"class":233,"line":361},[231,1605,618],{"class":299},[231,1607,1608],{"class":477},"getCustom",[231,1610,1559],{"class":299},[231,1612,1562],{"class":477},[231,1614,669],{"class":299},[231,1616,1388],{"class":248},[231,1618,1619],{"class":276}," provider",[231,1621,290],{"class":248},[231,1623,1624],{"class":299}," CustomAuthProvider ",[231,1626,1409],{"class":248},[231,1628,1629],{"class":299},") user: CustomUser) ",[231,1631,730],{"class":248},[231,1633,1634,1636,1638],{"class":233,"line":373},[231,1635,1572],{"class":714},[231,1637,770],{"class":299},[231,1639,352],{"class":248},[231,1641,1642],{"class":233,"line":383},[231,1643,414],{"class":248},[968,1645],{},[208,1647,1649],{"id":1648},"types","Types",[216,1651,578],{"id":1652},"authtypesmiddlewareoptions",[204,1654,1655],{},"Options for the authentication middleware.",[221,1657,1659],{"className":223,"code":1658,"language":225,"meta":226,"style":226},"interface MiddlewareOptions {\n  roles?: string[];\n}\n",[228,1660,1661,1671,1685],{"__ignoreMap":226},[231,1662,1663,1666,1669],{"class":233,"line":234},[231,1664,1665],{"class":237},"interface",[231,1667,1668],{"class":244}," MiddlewareOptions",[231,1670,264],{"class":248},[231,1672,1673,1676,1678,1680,1683],{"class":233,"line":267},[231,1674,1675],{"class":276},"  roles",[231,1677,309],{"class":248},[231,1679,345],{"class":244},[231,1681,1682],{"class":299},"[]",[231,1684,352],{"class":248},[231,1686,1687],{"class":233,"line":283},[231,1688,414],{"class":248},[420,1690,1691,1701],{},[423,1692,1693],{},[426,1694,1695,1697,1699],{},[429,1696,1502],{},[429,1698,547],{},[429,1700,434],{},[436,1702,1703],{},[426,1704,1705,1709,1714],{},[441,1706,1707],{},[228,1708,816],{},[441,1710,1711],{},[228,1712,1713],{},"string[]",[441,1715,1716],{},"Array of roles allowed to access the endpoint",[968,1718],{},[208,1720,1722],{"id":1721},"usage-examples","Usage Examples",[216,1724,1726],{"id":1725},"complete-jwt-provider","Complete JWT Provider",[221,1728,1730],{"className":223,"code":1729,"language":225,"meta":226,"style":226},"import { AuthProvider, type AuthTypes } from '@vercube\u002Fauth';\nimport jwt from 'jsonwebtoken';\n\ninterface JWTPayload {\n  id: number;\n  username: string;\n  email: string;\n  roles: string[];\n  iat: number;\n  exp: number;\n}\n\nexport class JWTAuthProvider extends AuthProvider\u003CJWTPayload> {\n  private readonly secret = process.env.JWT_SECRET!;\n  \n  public validate(request: Request, params?: AuthTypes.MiddlewareOptions): string | null {\n    const authHeader = request.headers.get('Authorization');\n    \n    if (!authHeader) {\n      return 'Authorization header required';\n    }\n    \n    if (!authHeader.startsWith('Bearer ')) {\n      return 'Invalid authorization format. Use: Bearer \u003Ctoken>';\n    }\n    \n    const token = authHeader.slice(7);\n    \n    try {\n      const payload = jwt.verify(token, this.secret) as JWTPayload;\n      \n      \u002F\u002F Check roles if specified\n      if (params?.roles && params.roles.length > 0) {\n        const hasRequiredRole = params.roles.some(role => \n          payload.roles.includes(role)\n        );\n        \n        if (!hasRequiredRole) {\n          return 'Insufficient permissions';\n        }\n      }\n      \n      return null;\n    } catch (error) {\n      if (error instanceof jwt.TokenExpiredError) {\n        return 'Token expired';\n      }\n      if (error instanceof jwt.JsonWebTokenError) {\n        return 'Invalid token';\n      }\n      return 'Authentication failed';\n    }\n  }\n\n  public getCurrentUser(request: Request): JWTPayload | null {\n    const authHeader = request.headers.get('Authorization');\n    \n    if (!authHeader?.startsWith('Bearer ')) {\n      return null;\n    }\n    \n    const token = authHeader.slice(7);\n    \n    try {\n      return jwt.verify(token, this.secret) as JWTPayload;\n    } catch {\n      return null;\n    }\n  }\n}\n",[228,1731,1732,1764,1783,1787,1796,1808,1819,1830,1842,1853,1864,1868,1872,1896,1925,1929,1965,1996,2000,2015,2029,2033,2037,2066,2080,2085,2090,2116,2121,2129,2163,2169,2176,2212,2241,2261,2269,2275,2292,2306,2312,2317,2322,2329,2346,2369,2383,2388,2410,2423,2428,2442,2447,2452,2457,2482,2513,2518,2545,2552,2557,2562,2585,2590,2597,2626,2635,2642,2647,2652],{"__ignoreMap":226},[231,1733,1734,1737,1740,1742,1744,1747,1749,1752,1755,1757,1760,1762],{"class":233,"line":234},[231,1735,1736],{"class":714},"import",[231,1738,1739],{"class":248}," {",[231,1741,245],{"class":299},[231,1743,296],{"class":248},[231,1745,1746],{"class":714}," type",[231,1748,312],{"class":299},[231,1750,1751],{"class":248}," }",[231,1753,1754],{"class":714}," from",[231,1756,738],{"class":248},[231,1758,1759],{"class":675},"@vercube\u002Fauth",[231,1761,672],{"class":248},[231,1763,352],{"class":248},[231,1765,1766,1768,1771,1774,1776,1779,1781],{"class":233,"line":267},[231,1767,1736],{"class":714},[231,1769,1770],{"class":299}," jwt ",[231,1772,1773],{"class":714},"from",[231,1775,738],{"class":248},[231,1777,1778],{"class":675},"jsonwebtoken",[231,1780,672],{"class":248},[231,1782,352],{"class":248},[231,1784,1785],{"class":233,"line":283},[231,1786,755],{"emptyLinePlaceholder":56},[231,1788,1789,1791,1794],{"class":233,"line":303},[231,1790,1665],{"class":237},[231,1792,1793],{"class":244}," JWTPayload",[231,1795,264],{"class":248},[231,1797,1798,1801,1803,1806],{"class":233,"line":321},[231,1799,1800],{"class":276},"  id",[231,1802,290],{"class":248},[231,1804,1805],{"class":244}," number",[231,1807,352],{"class":248},[231,1809,1810,1813,1815,1817],{"class":233,"line":355},[231,1811,1812],{"class":276},"  username",[231,1814,290],{"class":248},[231,1816,345],{"class":244},[231,1818,352],{"class":248},[231,1820,1821,1824,1826,1828],{"class":233,"line":361},[231,1822,1823],{"class":276},"  email",[231,1825,290],{"class":248},[231,1827,345],{"class":244},[231,1829,352],{"class":248},[231,1831,1832,1834,1836,1838,1840],{"class":233,"line":373},[231,1833,1675],{"class":276},[231,1835,290],{"class":248},[231,1837,345],{"class":244},[231,1839,1682],{"class":299},[231,1841,352],{"class":248},[231,1843,1844,1847,1849,1851],{"class":233,"line":383},[231,1845,1846],{"class":276},"  iat",[231,1848,290],{"class":248},[231,1850,1805],{"class":244},[231,1852,352],{"class":248},[231,1854,1855,1858,1860,1862],{"class":233,"line":411},[231,1856,1857],{"class":276},"  exp",[231,1859,290],{"class":248},[231,1861,1805],{"class":244},[231,1863,352],{"class":248},[231,1865,1866],{"class":233,"line":804},[231,1867,414],{"class":248},[231,1869,1870],{"class":233,"line":828},[231,1871,755],{"emptyLinePlaceholder":56},[231,1873,1874,1877,1879,1882,1885,1887,1889,1892,1894],{"class":233,"line":878},[231,1875,1876],{"class":714},"export",[231,1878,241],{"class":237},[231,1880,1881],{"class":244}," JWTAuthProvider",[231,1883,1884],{"class":237}," extends",[231,1886,245],{"class":244},[231,1888,249],{"class":248},[231,1890,1891],{"class":244},"JWTPayload",[231,1893,261],{"class":248},[231,1895,264],{"class":248},[231,1897,1898,1901,1904,1907,1909,1912,1914,1917,1919,1922],{"class":233,"line":895},[231,1899,1900],{"class":237},"  private",[231,1902,1903],{"class":237}," readonly",[231,1905,1906],{"class":276}," secret",[231,1908,255],{"class":248},[231,1910,1911],{"class":299}," process",[231,1913,315],{"class":248},[231,1915,1916],{"class":299},"env",[231,1918,315],{"class":248},[231,1920,1921],{"class":299},"JWT_SECRET",[231,1923,1924],{"class":248},"!;\n",[231,1926,1927],{"class":233,"line":910},[231,1928,358],{"class":299},[231,1930,1931,1933,1935,1937,1939,1941,1943,1945,1947,1949,1951,1953,1955,1957,1959,1961,1963],{"class":233,"line":916},[231,1932,270],{"class":237},[231,1934,277],{"class":276},[231,1936,669],{"class":248},[231,1938,558],{"class":286},[231,1940,290],{"class":248},[231,1942,293],{"class":244},[231,1944,296],{"class":248},[231,1946,628],{"class":286},[231,1948,309],{"class":248},[231,1950,312],{"class":244},[231,1952,315],{"class":248},[231,1954,1268],{"class":244},[231,1956,1271],{"class":248},[231,1958,345],{"class":244},[231,1960,335],{"class":248},[231,1962,338],{"class":244},[231,1964,264],{"class":248},[231,1966,1967,1969,1972,1974,1976,1978,1980,1982,1984,1986,1988,1990,1992,1994],{"class":233,"line":922},[231,1968,767],{"class":237},[231,1970,1971],{"class":299}," authHeader",[231,1973,255],{"class":248},[231,1975,656],{"class":299},[231,1977,315],{"class":248},[231,1979,661],{"class":299},[231,1981,315],{"class":248},[231,1983,666],{"class":477},[231,1985,669],{"class":276},[231,1987,672],{"class":248},[231,1989,676],{"class":675},[231,1991,672],{"class":248},[231,1993,681],{"class":276},[231,1995,352],{"class":248},[231,1997,1998],{"class":233,"line":927},[231,1999,801],{"class":276},[231,2001,2002,2004,2006,2008,2011,2013],{"class":233,"line":934},[231,2003,807],{"class":714},[231,2005,718],{"class":276},[231,2007,721],{"class":248},[231,2009,2010],{"class":299},"authHeader",[231,2012,727],{"class":276},[231,2014,730],{"class":248},[231,2016,2017,2020,2022,2025,2027],{"class":233,"line":945},[231,2018,2019],{"class":714},"      return",[231,2021,738],{"class":248},[231,2023,2024],{"class":675},"Authorization header required",[231,2026,672],{"class":248},[231,2028,352],{"class":248},[231,2030,2031],{"class":233,"line":959},[231,2032,919],{"class":248},[231,2034,2035],{"class":233,"line":964},[231,2036,801],{"class":276},[231,2038,2040,2042,2044,2046,2048,2050,2053,2055,2057,2059,2061,2064],{"class":233,"line":2039},23,[231,2041,807],{"class":714},[231,2043,718],{"class":276},[231,2045,721],{"class":248},[231,2047,2010],{"class":299},[231,2049,315],{"class":248},[231,2051,2052],{"class":477},"startsWith",[231,2054,669],{"class":276},[231,2056,672],{"class":248},[231,2058,694],{"class":675},[231,2060,672],{"class":248},[231,2062,2063],{"class":276},")) ",[231,2065,730],{"class":248},[231,2067,2069,2071,2073,2076,2078],{"class":233,"line":2068},24,[231,2070,2019],{"class":714},[231,2072,738],{"class":248},[231,2074,2075],{"class":675},"Invalid authorization format. Use: Bearer \u003Ctoken>",[231,2077,672],{"class":248},[231,2079,352],{"class":248},[231,2081,2083],{"class":233,"line":2082},25,[231,2084,919],{"class":248},[231,2086,2088],{"class":233,"line":2087},26,[231,2089,801],{"class":276},[231,2091,2093,2095,2097,2099,2101,2103,2106,2108,2112,2114],{"class":233,"line":2092},27,[231,2094,767],{"class":237},[231,2096,651],{"class":299},[231,2098,255],{"class":248},[231,2100,1971],{"class":299},[231,2102,315],{"class":248},[231,2104,2105],{"class":477},"slice",[231,2107,669],{"class":276},[231,2109,2111],{"class":2110},"sbssI","7",[231,2113,681],{"class":276},[231,2115,352],{"class":248},[231,2117,2119],{"class":233,"line":2118},28,[231,2120,801],{"class":276},[231,2122,2124,2127],{"class":233,"line":2123},29,[231,2125,2126],{"class":714},"    try",[231,2128,264],{"class":248},[231,2130,2132,2134,2137,2139,2141,2143,2145,2147,2149,2151,2153,2155,2157,2159,2161],{"class":233,"line":2131},30,[231,2133,831],{"class":237},[231,2135,2136],{"class":299}," payload",[231,2138,255],{"class":248},[231,2140,775],{"class":299},[231,2142,315],{"class":248},[231,2144,780],{"class":477},[231,2146,669],{"class":276},[231,2148,724],{"class":299},[231,2150,296],{"class":248},[231,2152,789],{"class":248},[231,2154,792],{"class":299},[231,2156,727],{"class":276},[231,2158,1202],{"class":714},[231,2160,1793],{"class":244},[231,2162,352],{"class":248},[231,2164,2166],{"class":233,"line":2165},31,[231,2167,2168],{"class":276},"      \n",[231,2170,2172],{"class":233,"line":2171},32,[231,2173,2175],{"class":2174},"sHwdD","      \u002F\u002F Check roles if specified\n",[231,2177,2179,2181,2183,2185,2187,2189,2192,2194,2196,2198,2200,2202,2205,2208,2210],{"class":233,"line":2178},33,[231,2180,881],{"class":714},[231,2182,718],{"class":276},[231,2184,573],{"class":299},[231,2186,684],{"class":248},[231,2188,816],{"class":299},[231,2190,2191],{"class":248}," &&",[231,2193,628],{"class":299},[231,2195,315],{"class":248},[231,2197,816],{"class":299},[231,2199,315],{"class":248},[231,2201,821],{"class":299},[231,2203,2204],{"class":248}," >",[231,2206,2207],{"class":2110}," 0",[231,2209,727],{"class":276},[231,2211,730],{"class":248},[231,2213,2215,2218,2221,2223,2225,2227,2229,2231,2233,2235,2237,2239],{"class":233,"line":2214},34,[231,2216,2217],{"class":237},"        const",[231,2219,2220],{"class":299}," hasRequiredRole",[231,2222,255],{"class":248},[231,2224,628],{"class":299},[231,2226,315],{"class":248},[231,2228,816],{"class":299},[231,2230,315],{"class":248},[231,2232,847],{"class":477},[231,2234,669],{"class":276},[231,2236,852],{"class":286},[231,2238,855],{"class":237},[231,2240,300],{"class":276},[231,2242,2244,2247,2249,2251,2253,2255,2257,2259],{"class":233,"line":2243},35,[231,2245,2246],{"class":299},"          payload",[231,2248,315],{"class":248},[231,2250,816],{"class":299},[231,2252,315],{"class":248},[231,2254,866],{"class":477},[231,2256,669],{"class":276},[231,2258,852],{"class":299},[231,2260,1334],{"class":276},[231,2262,2264,2267],{"class":233,"line":2263},36,[231,2265,2266],{"class":276},"        )",[231,2268,352],{"class":248},[231,2270,2272],{"class":233,"line":2271},37,[231,2273,2274],{"class":276},"        \n",[231,2276,2278,2281,2283,2285,2288,2290],{"class":233,"line":2277},38,[231,2279,2280],{"class":714},"        if",[231,2282,718],{"class":276},[231,2284,721],{"class":248},[231,2286,2287],{"class":299},"hasRequiredRole",[231,2289,727],{"class":276},[231,2291,730],{"class":248},[231,2293,2295,2298,2300,2302,2304],{"class":233,"line":2294},39,[231,2296,2297],{"class":714},"          return",[231,2299,738],{"class":248},[231,2301,903],{"class":675},[231,2303,672],{"class":248},[231,2305,352],{"class":248},[231,2307,2309],{"class":233,"line":2308},40,[231,2310,2311],{"class":248},"        }\n",[231,2313,2315],{"class":233,"line":2314},41,[231,2316,913],{"class":248},[231,2318,2320],{"class":233,"line":2319},42,[231,2321,2168],{"class":276},[231,2323,2325,2327],{"class":233,"line":2324},43,[231,2326,2019],{"class":714},[231,2328,530],{"class":248},[231,2330,2332,2335,2337,2339,2342,2344],{"class":233,"line":2331},44,[231,2333,2334],{"class":248},"    }",[231,2336,940],{"class":714},[231,2338,718],{"class":276},[231,2340,2341],{"class":299},"error",[231,2343,727],{"class":276},[231,2345,730],{"class":248},[231,2347,2349,2351,2353,2355,2358,2360,2362,2365,2367],{"class":233,"line":2348},45,[231,2350,881],{"class":714},[231,2352,718],{"class":276},[231,2354,2341],{"class":299},[231,2356,2357],{"class":248}," instanceof",[231,2359,775],{"class":244},[231,2361,315],{"class":248},[231,2363,2364],{"class":244},"TokenExpiredError",[231,2366,727],{"class":276},[231,2368,730],{"class":248},[231,2370,2372,2374,2376,2379,2381],{"class":233,"line":2371},46,[231,2373,898],{"class":714},[231,2375,738],{"class":248},[231,2377,2378],{"class":675},"Token expired",[231,2380,672],{"class":248},[231,2382,352],{"class":248},[231,2384,2386],{"class":233,"line":2385},47,[231,2387,913],{"class":248},[231,2389,2391,2393,2395,2397,2399,2401,2403,2406,2408],{"class":233,"line":2390},48,[231,2392,881],{"class":714},[231,2394,718],{"class":276},[231,2396,2341],{"class":299},[231,2398,2357],{"class":248},[231,2400,775],{"class":244},[231,2402,315],{"class":248},[231,2404,2405],{"class":244},"JsonWebTokenError",[231,2407,727],{"class":276},[231,2409,730],{"class":248},[231,2411,2413,2415,2417,2419,2421],{"class":233,"line":2412},49,[231,2414,898],{"class":714},[231,2416,738],{"class":248},[231,2418,952],{"class":675},[231,2420,672],{"class":248},[231,2422,352],{"class":248},[231,2424,2426],{"class":233,"line":2425},50,[231,2427,913],{"class":248},[231,2429,2431,2433,2435,2438,2440],{"class":233,"line":2430},51,[231,2432,2019],{"class":714},[231,2434,738],{"class":248},[231,2436,2437],{"class":675},"Authentication failed",[231,2439,672],{"class":248},[231,2441,352],{"class":248},[231,2443,2445],{"class":233,"line":2444},52,[231,2446,919],{"class":248},[231,2448,2450],{"class":233,"line":2449},53,[231,2451,750],{"class":248},[231,2453,2455],{"class":233,"line":2454},54,[231,2456,755],{"emptyLinePlaceholder":56},[231,2458,2460,2462,2464,2466,2468,2470,2472,2474,2476,2478,2480],{"class":233,"line":2459},55,[231,2461,270],{"class":237},[231,2463,368],{"class":276},[231,2465,669],{"class":248},[231,2467,558],{"class":286},[231,2469,290],{"class":248},[231,2471,293],{"class":244},[231,2473,1271],{"class":248},[231,2475,1793],{"class":244},[231,2477,335],{"class":248},[231,2479,338],{"class":244},[231,2481,264],{"class":248},[231,2483,2485,2487,2489,2491,2493,2495,2497,2499,2501,2503,2505,2507,2509,2511],{"class":233,"line":2484},56,[231,2486,767],{"class":237},[231,2488,1971],{"class":299},[231,2490,255],{"class":248},[231,2492,656],{"class":299},[231,2494,315],{"class":248},[231,2496,661],{"class":299},[231,2498,315],{"class":248},[231,2500,666],{"class":477},[231,2502,669],{"class":276},[231,2504,672],{"class":248},[231,2506,676],{"class":675},[231,2508,672],{"class":248},[231,2510,681],{"class":276},[231,2512,352],{"class":248},[231,2514,2516],{"class":233,"line":2515},57,[231,2517,801],{"class":276},[231,2519,2521,2523,2525,2527,2529,2531,2533,2535,2537,2539,2541,2543],{"class":233,"line":2520},58,[231,2522,807],{"class":714},[231,2524,718],{"class":276},[231,2526,721],{"class":248},[231,2528,2010],{"class":299},[231,2530,684],{"class":248},[231,2532,2052],{"class":477},[231,2534,669],{"class":276},[231,2536,672],{"class":248},[231,2538,694],{"class":675},[231,2540,672],{"class":248},[231,2542,2063],{"class":276},[231,2544,730],{"class":248},[231,2546,2548,2550],{"class":233,"line":2547},59,[231,2549,2019],{"class":714},[231,2551,530],{"class":248},[231,2553,2555],{"class":233,"line":2554},60,[231,2556,919],{"class":248},[231,2558,2560],{"class":233,"line":2559},61,[231,2561,801],{"class":276},[231,2563,2565,2567,2569,2571,2573,2575,2577,2579,2581,2583],{"class":233,"line":2564},62,[231,2566,767],{"class":237},[231,2568,651],{"class":299},[231,2570,255],{"class":248},[231,2572,1971],{"class":299},[231,2574,315],{"class":248},[231,2576,2105],{"class":477},[231,2578,669],{"class":276},[231,2580,2111],{"class":2110},[231,2582,681],{"class":276},[231,2584,352],{"class":248},[231,2586,2588],{"class":233,"line":2587},63,[231,2589,801],{"class":276},[231,2591,2593,2595],{"class":233,"line":2592},64,[231,2594,2126],{"class":714},[231,2596,264],{"class":248},[231,2598,2600,2602,2604,2606,2608,2610,2612,2614,2616,2618,2620,2622,2624],{"class":233,"line":2599},65,[231,2601,2019],{"class":714},[231,2603,775],{"class":299},[231,2605,315],{"class":248},[231,2607,780],{"class":477},[231,2609,669],{"class":276},[231,2611,724],{"class":299},[231,2613,296],{"class":248},[231,2615,789],{"class":248},[231,2617,792],{"class":299},[231,2619,727],{"class":276},[231,2621,1202],{"class":714},[231,2623,1793],{"class":244},[231,2625,352],{"class":248},[231,2627,2629,2631,2633],{"class":233,"line":2628},66,[231,2630,2334],{"class":248},[231,2632,940],{"class":714},[231,2634,264],{"class":248},[231,2636,2638,2640],{"class":233,"line":2637},67,[231,2639,2019],{"class":714},[231,2641,530],{"class":248},[231,2643,2645],{"class":233,"line":2644},68,[231,2646,919],{"class":248},[231,2648,2650],{"class":233,"line":2649},69,[231,2651,750],{"class":248},[231,2653,2655],{"class":233,"line":2654},70,[231,2656,414],{"class":248},[216,2658,2660],{"id":2659},"registration-in-container","Registration in Container",[221,2662,2664],{"className":223,"code":2663,"language":225,"meta":226,"style":226},"import { type App } from '@vercube\u002Fcore';\nimport { AuthProvider } from '@vercube\u002Fauth';\nimport { JWTAuthProvider } from '.\u002Fproviders\u002FJWTAuthProvider';\n\nexport function setup(app: App): void {\n  \u002F\u002F Bind JWTAuthProvider as the implementation for AuthProvider\n  app.container.bind(AuthProvider, JWTAuthProvider);\n}\n",[228,2665,2666,2690,2710,2731,2735,2761,2766,2793],{"__ignoreMap":226},[231,2667,2668,2670,2672,2674,2677,2679,2681,2683,2686,2688],{"class":233,"line":234},[231,2669,1736],{"class":714},[231,2671,1739],{"class":248},[231,2673,1746],{"class":714},[231,2675,2676],{"class":299}," App",[231,2678,1751],{"class":248},[231,2680,1754],{"class":714},[231,2682,738],{"class":248},[231,2684,2685],{"class":675},"@vercube\u002Fcore",[231,2687,672],{"class":248},[231,2689,352],{"class":248},[231,2691,2692,2694,2696,2698,2700,2702,2704,2706,2708],{"class":233,"line":267},[231,2693,1736],{"class":714},[231,2695,1739],{"class":248},[231,2697,245],{"class":299},[231,2699,1751],{"class":248},[231,2701,1754],{"class":714},[231,2703,738],{"class":248},[231,2705,1759],{"class":675},[231,2707,672],{"class":248},[231,2709,352],{"class":248},[231,2711,2712,2714,2716,2718,2720,2722,2724,2727,2729],{"class":233,"line":283},[231,2713,1736],{"class":714},[231,2715,1739],{"class":248},[231,2717,1881],{"class":299},[231,2719,1751],{"class":248},[231,2721,1754],{"class":714},[231,2723,738],{"class":248},[231,2725,2726],{"class":675},".\u002Fproviders\u002FJWTAuthProvider",[231,2728,672],{"class":248},[231,2730,352],{"class":248},[231,2732,2733],{"class":233,"line":303},[231,2734,755],{"emptyLinePlaceholder":56},[231,2736,2737,2739,2742,2745,2747,2750,2752,2754,2756,2759],{"class":233,"line":321},[231,2738,1876],{"class":714},[231,2740,2741],{"class":237}," function",[231,2743,2744],{"class":477}," setup",[231,2746,669],{"class":248},[231,2748,2749],{"class":286},"app",[231,2751,290],{"class":248},[231,2753,2676],{"class":244},[231,2755,1271],{"class":248},[231,2757,2758],{"class":244}," void",[231,2760,264],{"class":248},[231,2762,2763],{"class":233,"line":355},[231,2764,2765],{"class":2174},"  \u002F\u002F Bind JWTAuthProvider as the implementation for AuthProvider\n",[231,2767,2768,2771,2773,2776,2778,2781,2783,2785,2787,2789,2791],{"class":233,"line":361},[231,2769,2770],{"class":299},"  app",[231,2772,315],{"class":248},[231,2774,2775],{"class":299},"container",[231,2777,315],{"class":248},[231,2779,2780],{"class":477},"bind",[231,2782,669],{"class":276},[231,2784,211],{"class":299},[231,2786,296],{"class":248},[231,2788,1881],{"class":299},[231,2790,681],{"class":276},[231,2792,352],{"class":248},[231,2794,2795],{"class":233,"line":373},[231,2796,414],{"class":248},[216,2798,2800],{"id":2799},"controller-with-authentication","Controller with Authentication",[221,2802,2804],{"className":223,"code":2803,"language":225,"meta":226,"style":226},"import { Controller, Get, Post, Put, Delete } from '@vercube\u002Fcore';\nimport { Auth, User } from '@vercube\u002Fauth';\n\ninterface User {\n  id: number;\n  username: string;\n  roles: string[];\n}\n\n@Controller('\u002Fapi\u002Fresources')\nexport class ResourceController {\n  \n  \u002F\u002F Public endpoint - no authentication required\n  @Get('\u002Fpublic')\n  public getPublic() {\n    return { message: 'Public data' };\n  }\n  \n  \u002F\u002F Authenticated endpoint - any logged in user\n  @Get('\u002F')\n  @Auth()\n  public getAll(@User() user: User) {\n    return { \n      requestedBy: user.username,\n      resources: [] \n    };\n  }\n  \n  \u002F\u002F Role-protected endpoint - only admins\n  @Post('\u002F')\n  @Auth({ roles: ['admin'] })\n  public create(@User() admin: User) {\n    return { \n      createdBy: admin.username,\n      success: true \n    };\n  }\n  \n  \u002F\u002F Multiple roles - admins OR moderators\n  @Delete('\u002F:id')\n  @Auth({ roles: ['admin', 'moderator'] })\n  public delete(@User() user: User) {\n    return { \n      deletedBy: user.username,\n      success: true \n    };\n  }\n}\n",[228,2805,2806,2847,2871,2875,2883,2893,2903,2915,2919,2923,2941,2952,2956,2961,2979,2991,3012,3016,3020,3025,3042,3050,3073,3081,3098,3108,3113,3117,3121,3126,3143,3171,3194,3202,3218,3231,3235,3239,3243,3248,3266,3303,3326,3334,3349,3359,3363,3367],{"__ignoreMap":226},[231,2807,2808,2810,2812,2815,2817,2820,2822,2825,2827,2830,2832,2835,2837,2839,2841,2843,2845],{"class":233,"line":234},[231,2809,1736],{"class":714},[231,2811,1739],{"class":248},[231,2813,2814],{"class":299}," Controller",[231,2816,296],{"class":248},[231,2818,2819],{"class":299}," Get",[231,2821,296],{"class":248},[231,2823,2824],{"class":299}," Post",[231,2826,296],{"class":248},[231,2828,2829],{"class":299}," Put",[231,2831,296],{"class":248},[231,2833,2834],{"class":299}," Delete",[231,2836,1751],{"class":248},[231,2838,1754],{"class":714},[231,2840,738],{"class":248},[231,2842,2685],{"class":675},[231,2844,672],{"class":248},[231,2846,352],{"class":248},[231,2848,2849,2851,2853,2855,2857,2859,2861,2863,2865,2867,2869],{"class":233,"line":267},[231,2850,1736],{"class":714},[231,2852,1739],{"class":248},[231,2854,1254],{"class":299},[231,2856,296],{"class":248},[231,2858,1205],{"class":299},[231,2860,1751],{"class":248},[231,2862,1754],{"class":714},[231,2864,738],{"class":248},[231,2866,1759],{"class":675},[231,2868,672],{"class":248},[231,2870,352],{"class":248},[231,2872,2873],{"class":233,"line":283},[231,2874,755],{"emptyLinePlaceholder":56},[231,2876,2877,2879,2881],{"class":233,"line":303},[231,2878,1665],{"class":237},[231,2880,1205],{"class":244},[231,2882,264],{"class":248},[231,2884,2885,2887,2889,2891],{"class":233,"line":321},[231,2886,1800],{"class":276},[231,2888,290],{"class":248},[231,2890,1805],{"class":244},[231,2892,352],{"class":248},[231,2894,2895,2897,2899,2901],{"class":233,"line":355},[231,2896,1812],{"class":276},[231,2898,290],{"class":248},[231,2900,345],{"class":244},[231,2902,352],{"class":248},[231,2904,2905,2907,2909,2911,2913],{"class":233,"line":361},[231,2906,1675],{"class":276},[231,2908,290],{"class":248},[231,2910,345],{"class":244},[231,2912,1682],{"class":299},[231,2914,352],{"class":248},[231,2916,2917],{"class":233,"line":373},[231,2918,414],{"class":248},[231,2920,2921],{"class":233,"line":383},[231,2922,755],{"emptyLinePlaceholder":56},[231,2924,2925,2927,2930,2932,2934,2937,2939],{"class":233,"line":411},[231,2926,1319],{"class":248},[231,2928,2929],{"class":477},"Controller",[231,2931,669],{"class":299},[231,2933,672],{"class":248},[231,2935,2936],{"class":675},"\u002Fapi\u002Fresources",[231,2938,672],{"class":248},[231,2940,1334],{"class":299},[231,2942,2943,2945,2947,2950],{"class":233,"line":804},[231,2944,1876],{"class":714},[231,2946,241],{"class":237},[231,2948,2949],{"class":244}," ResourceController",[231,2951,264],{"class":248},[231,2953,2954],{"class":233,"line":828},[231,2955,358],{"class":299},[231,2957,2958],{"class":233,"line":878},[231,2959,2960],{"class":2174},"  \u002F\u002F Public endpoint - no authentication required\n",[231,2962,2963,2966,2968,2970,2972,2975,2977],{"class":233,"line":895},[231,2964,2965],{"class":248},"  @",[231,2967,1322],{"class":477},[231,2969,669],{"class":299},[231,2971,672],{"class":248},[231,2973,2974],{"class":675},"\u002Fpublic",[231,2976,672],{"class":248},[231,2978,1334],{"class":299},[231,2980,2981,2983,2986,2989],{"class":233,"line":910},[231,2982,270],{"class":237},[231,2984,2985],{"class":276}," getPublic",[231,2987,2988],{"class":248},"()",[231,2990,264],{"class":248},[231,2992,2993,2995,2997,3000,3002,3004,3007,3009],{"class":233,"line":916},[231,2994,735],{"class":714},[231,2996,1739],{"class":248},[231,2998,2999],{"class":276}," message",[231,3001,290],{"class":248},[231,3003,738],{"class":248},[231,3005,3006],{"class":675},"Public data",[231,3008,672],{"class":248},[231,3010,3011],{"class":248}," };\n",[231,3013,3014],{"class":233,"line":922},[231,3015,750],{"class":248},[231,3017,3018],{"class":233,"line":927},[231,3019,358],{"class":299},[231,3021,3022],{"class":233,"line":934},[231,3023,3024],{"class":2174},"  \u002F\u002F Authenticated endpoint - any logged in user\n",[231,3026,3027,3029,3031,3033,3035,3038,3040],{"class":233,"line":945},[231,3028,2965],{"class":248},[231,3030,1322],{"class":477},[231,3032,669],{"class":299},[231,3034,672],{"class":248},[231,3036,3037],{"class":675},"\u002F",[231,3039,672],{"class":248},[231,3041,1334],{"class":299},[231,3043,3044,3046,3048],{"class":233,"line":959},[231,3045,2965],{"class":248},[231,3047,61],{"class":477},[231,3049,1343],{"class":299},[231,3051,3052,3054,3057,3059,3061,3063,3065,3067,3069,3071],{"class":233,"line":964},[231,3053,270],{"class":237},[231,3055,3056],{"class":276}," getAll",[231,3058,1559],{"class":248},[231,3060,1562],{"class":477},[231,3062,1353],{"class":299},[231,3064,1427],{"class":286},[231,3066,290],{"class":248},[231,3068,1205],{"class":244},[231,3070,681],{"class":248},[231,3072,264],{"class":248},[231,3074,3075,3077,3079],{"class":233,"line":2039},[231,3076,735],{"class":714},[231,3078,1739],{"class":248},[231,3080,300],{"class":276},[231,3082,3083,3086,3088,3090,3092,3095],{"class":233,"line":2068},[231,3084,3085],{"class":276},"      requestedBy",[231,3087,290],{"class":248},[231,3089,770],{"class":299},[231,3091,315],{"class":248},[231,3093,3094],{"class":299},"username",[231,3096,3097],{"class":248},",\n",[231,3099,3100,3103,3105],{"class":233,"line":2082},[231,3101,3102],{"class":276},"      resources",[231,3104,290],{"class":248},[231,3106,3107],{"class":276}," [] \n",[231,3109,3110],{"class":233,"line":2087},[231,3111,3112],{"class":248},"    };\n",[231,3114,3115],{"class":233,"line":2092},[231,3116,750],{"class":248},[231,3118,3119],{"class":233,"line":2118},[231,3120,358],{"class":299},[231,3122,3123],{"class":233,"line":2123},[231,3124,3125],{"class":2174},"  \u002F\u002F Role-protected endpoint - only admins\n",[231,3127,3128,3130,3133,3135,3137,3139,3141],{"class":233,"line":2131},[231,3129,2965],{"class":248},[231,3131,3132],{"class":477},"Post",[231,3134,669],{"class":299},[231,3136,672],{"class":248},[231,3138,3037],{"class":675},[231,3140,672],{"class":248},[231,3142,1334],{"class":299},[231,3144,3145,3147,3149,3151,3153,3155,3157,3159,3161,3163,3165,3167,3169],{"class":233,"line":2165},[231,3146,2965],{"class":248},[231,3148,61],{"class":477},[231,3150,669],{"class":299},[231,3152,1388],{"class":248},[231,3154,1391],{"class":276},[231,3156,290],{"class":248},[231,3158,1396],{"class":299},[231,3160,672],{"class":248},[231,3162,1401],{"class":675},[231,3164,672],{"class":248},[231,3166,1406],{"class":299},[231,3168,1409],{"class":248},[231,3170,1334],{"class":299},[231,3172,3173,3175,3178,3180,3182,3184,3186,3188,3190,3192],{"class":233,"line":2171},[231,3174,270],{"class":237},[231,3176,3177],{"class":276}," create",[231,3179,1559],{"class":248},[231,3181,1562],{"class":477},[231,3183,1353],{"class":299},[231,3185,1401],{"class":286},[231,3187,290],{"class":248},[231,3189,1205],{"class":244},[231,3191,681],{"class":248},[231,3193,264],{"class":248},[231,3195,3196,3198,3200],{"class":233,"line":2178},[231,3197,735],{"class":714},[231,3199,1739],{"class":248},[231,3201,300],{"class":276},[231,3203,3204,3207,3209,3212,3214,3216],{"class":233,"line":2214},[231,3205,3206],{"class":276},"      createdBy",[231,3208,290],{"class":248},[231,3210,3211],{"class":299}," admin",[231,3213,315],{"class":248},[231,3215,3094],{"class":299},[231,3217,3097],{"class":248},[231,3219,3220,3223,3225,3229],{"class":233,"line":2243},[231,3221,3222],{"class":276},"      success",[231,3224,290],{"class":248},[231,3226,3228],{"class":3227},"sfNiH"," true",[231,3230,300],{"class":276},[231,3232,3233],{"class":233,"line":2263},[231,3234,3112],{"class":248},[231,3236,3237],{"class":233,"line":2271},[231,3238,750],{"class":248},[231,3240,3241],{"class":233,"line":2277},[231,3242,358],{"class":299},[231,3244,3245],{"class":233,"line":2294},[231,3246,3247],{"class":2174},"  \u002F\u002F Multiple roles - admins OR moderators\n",[231,3249,3250,3252,3255,3257,3259,3262,3264],{"class":233,"line":2308},[231,3251,2965],{"class":248},[231,3253,3254],{"class":477},"Delete",[231,3256,669],{"class":299},[231,3258,672],{"class":248},[231,3260,3261],{"class":675},"\u002F:id",[231,3263,672],{"class":248},[231,3265,1334],{"class":299},[231,3267,3268,3270,3272,3274,3276,3278,3280,3282,3284,3286,3288,3290,3292,3295,3297,3299,3301],{"class":233,"line":2314},[231,3269,2965],{"class":248},[231,3271,61],{"class":477},[231,3273,669],{"class":299},[231,3275,1388],{"class":248},[231,3277,1391],{"class":276},[231,3279,290],{"class":248},[231,3281,1396],{"class":299},[231,3283,672],{"class":248},[231,3285,1401],{"class":675},[231,3287,672],{"class":248},[231,3289,296],{"class":248},[231,3291,738],{"class":248},[231,3293,3294],{"class":675},"moderator",[231,3296,672],{"class":248},[231,3298,1406],{"class":299},[231,3300,1409],{"class":248},[231,3302,1334],{"class":299},[231,3304,3305,3307,3310,3312,3314,3316,3318,3320,3322,3324],{"class":233,"line":2319},[231,3306,270],{"class":237},[231,3308,3309],{"class":276}," delete",[231,3311,1559],{"class":248},[231,3313,1562],{"class":477},[231,3315,1353],{"class":299},[231,3317,1427],{"class":286},[231,3319,290],{"class":248},[231,3321,1205],{"class":244},[231,3323,681],{"class":248},[231,3325,264],{"class":248},[231,3327,3328,3330,3332],{"class":233,"line":2324},[231,3329,735],{"class":714},[231,3331,1739],{"class":248},[231,3333,300],{"class":276},[231,3335,3336,3339,3341,3343,3345,3347],{"class":233,"line":2331},[231,3337,3338],{"class":276},"      deletedBy",[231,3340,290],{"class":248},[231,3342,770],{"class":299},[231,3344,315],{"class":248},[231,3346,3094],{"class":299},[231,3348,3097],{"class":248},[231,3350,3351,3353,3355,3357],{"class":233,"line":2348},[231,3352,3222],{"class":276},[231,3354,290],{"class":248},[231,3356,3228],{"class":3227},[231,3358,300],{"class":276},[231,3360,3361],{"class":233,"line":2371},[231,3362,3112],{"class":248},[231,3364,3365],{"class":233,"line":2385},[231,3366,750],{"class":248},[231,3368,3369],{"class":233,"line":2390},[231,3370,414],{"class":248},[3372,3373,3374],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":226,"searchDepth":234,"depth":267,"links":3376},[3377,3382,3386,3389],{"id":210,"depth":267,"text":211,"children":3378},[3379,3380,3381],{"id":218,"depth":283,"text":219},{"id":417,"depth":283,"text":418},{"id":453,"depth":283,"text":454},{"id":1234,"depth":267,"text":70,"children":3383},[3384,3385],{"id":1237,"depth":283,"text":1238},{"id":1427,"depth":283,"text":1428},{"id":1648,"depth":267,"text":1649,"children":3387},[3388],{"id":1652,"depth":283,"text":578},{"id":1721,"depth":267,"text":1722,"children":3390},[3391,3392,3393],{"id":1725,"depth":283,"text":1726},{"id":2659,"depth":283,"text":2660},{"id":2799,"depth":283,"text":2800},"Complete API reference for the Vercube Auth module","md",null,{},{"title":74,"description":3394},"SmnMv_2OYbedd0YgaWC9NaDCJ5SjCBbdexIYSSEA7E8",[3401,3403],{"title":70,"path":71,"stem":72,"description":3402,"children":-1},"Authentication decorators for protecting endpoints and accessing user data",{"title":66,"path":83,"stem":84,"description":3404,"children":-1},"Flexible and extensible logging system for Vercube applications",1775552782869]