[{"data":1,"prerenderedAt":6130},["ShallowReactive",2],{"navigation":3,"docs-path-index":152,"-docs-modules-serverless-aws-lambda":198,"-docs-modules-serverless-aws-lambda-surround":6125},[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":102,"body":200,"description":6119,"extension":6120,"links":6121,"meta":6122,"navigation":56,"path":103,"seo":6123,"stem":104,"__hash__":6124},"docs\u002Fdocs\u002F3.modules\u002F3.serverless\u002F1.aws-lambda.md",{"type":201,"value":202,"toc":6079},"minimark",[203,207,212,342,346,349,354,361,569,575,599,603,608,807,811,825,829,832,1256,1259,1278,1282,1285,1406,1410,1413,1976,1981,2000,2004,2007,2346,2350,2354,2540,2544,3233,3237,3240,3244,3476,3480,3746,3750,3753,3834,3838,3841,3845,4231,4235,4238,4333,4337,4341,4626,4630,5002,5006,5010,5094,5098,5207,5253,5257,5261,5264,5323,5328,5366,5370,5373,5433,5738,5742,5746,5751,5777,5783,5812,5817,5842,5847,5873,5878,5903,5908,5965,5970,5994,5999,6013,6018,6040,6045,6075],[204,205,206],"p",{},"Deploy your Vercube application to AWS Lambda with full support for API Gateway v1 and v2, automatic binary content handling, and seamless cookie management.",[208,209,211],"h2",{"id":210},"basic-setup","Basic Setup",[213,214,220],"pre",{"className":215,"code":216,"filename":217,"language":218,"meta":219,"style":219},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createApp } from '@vercube\u002Fcore';\nimport { toServerlessHandler } from '@vercube\u002Fserverless\u002Faws-lambda';\n\nconst app = createApp();\n\n\u002F\u002F Your controllers are automatically registered\nexport const handler = toServerlessHandler(app);\n","lambda.ts","ts","",[221,222,223,259,282,288,309,314,321],"code",{"__ignoreMap":219},[224,225,228,232,236,240,243,246,249,253,256],"span",{"class":226,"line":227},"line",1,[224,229,231],{"class":230},"s7zQu","import",[224,233,235],{"class":234},"sMK4o"," {",[224,237,239],{"class":238},"sTEyZ"," createApp",[224,241,242],{"class":234}," }",[224,244,245],{"class":230}," from",[224,247,248],{"class":234}," '",[224,250,252],{"class":251},"sfazB","@vercube\u002Fcore",[224,254,255],{"class":234},"'",[224,257,258],{"class":234},";\n",[224,260,262,264,266,269,271,273,275,278,280],{"class":226,"line":261},2,[224,263,231],{"class":230},[224,265,235],{"class":234},[224,267,268],{"class":238}," toServerlessHandler",[224,270,242],{"class":234},[224,272,245],{"class":230},[224,274,248],{"class":234},[224,276,277],{"class":251},"@vercube\u002Fserverless\u002Faws-lambda",[224,279,255],{"class":234},[224,281,258],{"class":234},[224,283,285],{"class":226,"line":284},3,[224,286,287],{"emptyLinePlaceholder":56},"\n",[224,289,291,295,298,301,304,307],{"class":226,"line":290},4,[224,292,294],{"class":293},"spNyl","const",[224,296,297],{"class":238}," app ",[224,299,300],{"class":234},"=",[224,302,239],{"class":303},"s2Zo4",[224,305,306],{"class":238},"()",[224,308,258],{"class":234},[224,310,312],{"class":226,"line":311},5,[224,313,287],{"emptyLinePlaceholder":56},[224,315,317],{"class":226,"line":316},6,[224,318,320],{"class":319},"sHwdD","\u002F\u002F Your controllers are automatically registered\n",[224,322,324,327,330,333,335,337,340],{"class":226,"line":323},7,[224,325,326],{"class":230},"export",[224,328,329],{"class":293}," const",[224,331,332],{"class":238}," handler ",[224,334,300],{"class":234},[224,336,268],{"class":303},[224,338,339],{"class":238},"(app)",[224,341,258],{"class":234},[208,343,345],{"id":344},"supported-api-gateway-versions","Supported API Gateway Versions",[204,347,348],{},"The adapter automatically detects and supports both API Gateway versions:",[350,351,353],"h3",{"id":352},"api-gateway-v1-rest-api","API Gateway v1 (REST API)",[204,355,356,357,360],{},"Works with ",[221,358,359],{},"APIGatewayProxyEvent",":",[213,362,364],{"className":215,"code":363,"language":218,"meta":219,"style":219},"\u002F\u002F API Gateway v1 Event Format\n{\n  httpMethod: 'GET',\n  path: '\u002Fapi\u002Fusers',\n  headers: {\n    'content-type': 'application\u002Fjson',\n    'authorization': 'Bearer token...'\n  },\n  body: '{\"name\":\"John\"}',\n  queryStringParameters: {\n    page: '1',\n    limit: '10'\n  },\n  pathParameters: {\n    id: '123'\n  }\n}\n",[221,365,366,371,376,394,410,420,443,462,468,485,495,512,527,532,542,557,563],{"__ignoreMap":219},[224,367,368],{"class":226,"line":227},[224,369,370],{"class":319},"\u002F\u002F API Gateway v1 Event Format\n",[224,372,373],{"class":226,"line":261},[224,374,375],{"class":234},"{\n",[224,377,378,382,384,386,389,391],{"class":226,"line":284},[224,379,381],{"class":380},"sBMFI","  httpMethod",[224,383,360],{"class":234},[224,385,248],{"class":234},[224,387,388],{"class":251},"GET",[224,390,255],{"class":234},[224,392,393],{"class":234},",\n",[224,395,396,399,401,403,406,408],{"class":226,"line":290},[224,397,398],{"class":380},"  path",[224,400,360],{"class":234},[224,402,248],{"class":234},[224,404,405],{"class":251},"\u002Fapi\u002Fusers",[224,407,255],{"class":234},[224,409,393],{"class":234},[224,411,412,415,417],{"class":226,"line":311},[224,413,414],{"class":380},"  headers",[224,416,360],{"class":234},[224,418,419],{"class":234}," {\n",[224,421,422,425,428,430,434,436,439,441],{"class":226,"line":316},[224,423,424],{"class":234},"    '",[224,426,427],{"class":251},"content-type",[224,429,255],{"class":234},[224,431,433],{"class":432},"swJcz",": ",[224,435,255],{"class":234},[224,437,438],{"class":251},"application\u002Fjson",[224,440,255],{"class":234},[224,442,393],{"class":234},[224,444,445,447,450,452,454,456,459],{"class":226,"line":323},[224,446,424],{"class":234},[224,448,449],{"class":251},"authorization",[224,451,255],{"class":234},[224,453,433],{"class":432},[224,455,255],{"class":234},[224,457,458],{"class":251},"Bearer token...",[224,460,461],{"class":234},"'\n",[224,463,465],{"class":226,"line":464},8,[224,466,467],{"class":234},"  },\n",[224,469,471,474,476,478,481,483],{"class":226,"line":470},9,[224,472,473],{"class":380},"  body",[224,475,360],{"class":234},[224,477,248],{"class":234},[224,479,480],{"class":251},"{\"name\":\"John\"}",[224,482,255],{"class":234},[224,484,393],{"class":234},[224,486,488,491,493],{"class":226,"line":487},10,[224,489,490],{"class":380},"  queryStringParameters",[224,492,360],{"class":234},[224,494,419],{"class":234},[224,496,498,501,503,505,508,510],{"class":226,"line":497},11,[224,499,500],{"class":380},"    page",[224,502,360],{"class":234},[224,504,248],{"class":234},[224,506,507],{"class":251},"1",[224,509,255],{"class":234},[224,511,393],{"class":234},[224,513,515,518,520,522,525],{"class":226,"line":514},12,[224,516,517],{"class":380},"    limit",[224,519,360],{"class":234},[224,521,248],{"class":234},[224,523,524],{"class":251},"10",[224,526,461],{"class":234},[224,528,530],{"class":226,"line":529},13,[224,531,467],{"class":234},[224,533,535,538,540],{"class":226,"line":534},14,[224,536,537],{"class":380},"  pathParameters",[224,539,360],{"class":234},[224,541,419],{"class":234},[224,543,545,548,550,552,555],{"class":226,"line":544},15,[224,546,547],{"class":380},"    id",[224,549,360],{"class":234},[224,551,248],{"class":234},[224,553,554],{"class":251},"123",[224,556,461],{"class":234},[224,558,560],{"class":226,"line":559},16,[224,561,562],{"class":234},"  }\n",[224,564,566],{"class":226,"line":565},17,[224,567,568],{"class":234},"}\n",[204,570,571],{},[572,573,574],"strong",{},"Key Features:",[576,577,578,582,585,592],"ul",{},[579,580,581],"li",{},"Traditional REST API structure",[579,583,584],{},"Simple header handling",[579,586,587,588,591],{},"Cookie handling via ",[221,589,590],{},"Set-Cookie"," header",[579,593,594,595,598],{},"Binary content with ",[221,596,597],{},"isBase64Encoded"," flag",[350,600,602],{"id":601},"api-gateway-v2-http-api","API Gateway v2 (HTTP API)",[204,604,356,605,360],{},[221,606,607],{},"APIGatewayProxyEventV2",[213,609,611],{"className":215,"code":610,"language":218,"meta":219,"style":219},"\u002F\u002F API Gateway v2 Event Format\n{\n  requestContext: {\n    http: {\n      method: 'GET',\n      path: '\u002Fapi\u002Fusers'\n    }\n  },\n  headers: {\n    'content-type': 'application\u002Fjson',\n    'authorization': 'Bearer token...'\n  },\n  body: '{\"name\":\"John\"}',\n  queryStringParameters: {\n    page: '1',\n    limit: '10'\n  },\n  pathParameters: {\n    id: '123'\n  }\n}\n",[221,612,613,618,622,631,640,655,668,673,677,685,703,719,723,737,745,759,771,775,784,797,802],{"__ignoreMap":219},[224,614,615],{"class":226,"line":227},[224,616,617],{"class":319},"\u002F\u002F API Gateway v2 Event Format\n",[224,619,620],{"class":226,"line":261},[224,621,375],{"class":234},[224,623,624,627,629],{"class":226,"line":284},[224,625,626],{"class":380},"  requestContext",[224,628,360],{"class":234},[224,630,419],{"class":234},[224,632,633,636,638],{"class":226,"line":290},[224,634,635],{"class":380},"    http",[224,637,360],{"class":234},[224,639,419],{"class":234},[224,641,642,645,647,649,651,653],{"class":226,"line":311},[224,643,644],{"class":380},"      method",[224,646,360],{"class":234},[224,648,248],{"class":234},[224,650,388],{"class":251},[224,652,255],{"class":234},[224,654,393],{"class":234},[224,656,657,660,662,664,666],{"class":226,"line":316},[224,658,659],{"class":380},"      path",[224,661,360],{"class":234},[224,663,248],{"class":234},[224,665,405],{"class":251},[224,667,461],{"class":234},[224,669,670],{"class":226,"line":323},[224,671,672],{"class":234},"    }\n",[224,674,675],{"class":226,"line":464},[224,676,467],{"class":234},[224,678,679,681,683],{"class":226,"line":470},[224,680,414],{"class":380},[224,682,360],{"class":234},[224,684,419],{"class":234},[224,686,687,689,691,693,695,697,699,701],{"class":226,"line":487},[224,688,424],{"class":234},[224,690,427],{"class":251},[224,692,255],{"class":234},[224,694,433],{"class":432},[224,696,255],{"class":234},[224,698,438],{"class":251},[224,700,255],{"class":234},[224,702,393],{"class":234},[224,704,705,707,709,711,713,715,717],{"class":226,"line":497},[224,706,424],{"class":234},[224,708,449],{"class":251},[224,710,255],{"class":234},[224,712,433],{"class":432},[224,714,255],{"class":234},[224,716,458],{"class":251},[224,718,461],{"class":234},[224,720,721],{"class":226,"line":514},[224,722,467],{"class":234},[224,724,725,727,729,731,733,735],{"class":226,"line":529},[224,726,473],{"class":380},[224,728,360],{"class":234},[224,730,248],{"class":234},[224,732,480],{"class":251},[224,734,255],{"class":234},[224,736,393],{"class":234},[224,738,739,741,743],{"class":226,"line":534},[224,740,490],{"class":380},[224,742,360],{"class":234},[224,744,419],{"class":234},[224,746,747,749,751,753,755,757],{"class":226,"line":544},[224,748,500],{"class":380},[224,750,360],{"class":234},[224,752,248],{"class":234},[224,754,507],{"class":251},[224,756,255],{"class":234},[224,758,393],{"class":234},[224,760,761,763,765,767,769],{"class":226,"line":559},[224,762,517],{"class":380},[224,764,360],{"class":234},[224,766,248],{"class":234},[224,768,524],{"class":251},[224,770,461],{"class":234},[224,772,773],{"class":226,"line":565},[224,774,467],{"class":234},[224,776,778,780,782],{"class":226,"line":777},18,[224,779,537],{"class":380},[224,781,360],{"class":234},[224,783,419],{"class":234},[224,785,787,789,791,793,795],{"class":226,"line":786},19,[224,788,547],{"class":380},[224,790,360],{"class":234},[224,792,248],{"class":234},[224,794,554],{"class":251},[224,796,461],{"class":234},[224,798,800],{"class":226,"line":799},20,[224,801,562],{"class":234},[224,803,805],{"class":226,"line":804},21,[224,806,568],{"class":234},[204,808,809],{},[572,810,574],{},[576,812,813,816,819,822],{},[579,814,815],{},"Improved performance and lower cost",[579,817,818],{},"Enhanced cookie handling with cookies array",[579,820,821],{},"Streamlined event structure",[579,823,824],{},"Better WebSocket support",[208,826,828],{"id":827},"binary-content-handling","Binary Content Handling",[204,830,831],{},"Binary responses are automatically encoded as base64:",[213,833,835],{"className":215,"code":834,"language":218,"meta":219,"style":219},"@Controller('\u002Ffiles')\nexport class FileController {\n  \n  @Inject(FileService)\n  private fileService!: FileService;\n  \n  @Get('\u002Fdownload\u002F:id')\n  async downloadFile(@Param('id') id: string) {\n    const fileBuffer = await this.fileService.getFile(id);\n    \n    return new Response(fileBuffer, {\n      headers: {\n        'Content-Type': 'application\u002Fpdf',\n        'Content-Disposition': `attachment; filename=\"file-${id}.pdf\"`\n      }\n    });\n  }\n  \n  @Get('\u002Fimage\u002F:id')\n  async getImage(@Param('id') id: string) {\n    const imageBuffer = await this.fileService.getImage(id);\n    \n    return new Response(imageBuffer, {\n      headers: {\n        'Content-Type': 'image\u002Fpng'\n      }\n    });\n  }\n}\n",[221,836,837,858,870,875,886,902,906,924,963,997,1002,1023,1032,1053,1084,1089,1098,1102,1106,1123,1154,1182,1187,1205,1214,1232,1237,1246,1251],{"__ignoreMap":219},[224,838,839,842,845,848,850,853,855],{"class":226,"line":227},[224,840,841],{"class":234},"@",[224,843,844],{"class":303},"Controller",[224,846,847],{"class":238},"(",[224,849,255],{"class":234},[224,851,852],{"class":251},"\u002Ffiles",[224,854,255],{"class":234},[224,856,857],{"class":238},")\n",[224,859,860,862,865,868],{"class":226,"line":261},[224,861,326],{"class":230},[224,863,864],{"class":293}," class",[224,866,867],{"class":380}," FileController",[224,869,419],{"class":234},[224,871,872],{"class":226,"line":284},[224,873,874],{"class":238},"  \n",[224,876,877,880,883],{"class":226,"line":290},[224,878,879],{"class":234},"  @",[224,881,882],{"class":303},"Inject",[224,884,885],{"class":238},"(FileService)\n",[224,887,888,891,894,897,900],{"class":226,"line":311},[224,889,890],{"class":293},"  private",[224,892,893],{"class":432}," fileService",[224,895,896],{"class":234},"!:",[224,898,899],{"class":380}," FileService",[224,901,258],{"class":234},[224,903,904],{"class":226,"line":316},[224,905,874],{"class":238},[224,907,908,910,913,915,917,920,922],{"class":226,"line":323},[224,909,879],{"class":234},[224,911,912],{"class":303},"Get",[224,914,847],{"class":238},[224,916,255],{"class":234},[224,918,919],{"class":251},"\u002Fdownload\u002F:id",[224,921,255],{"class":234},[224,923,857],{"class":238},[224,925,926,929,932,935,938,940,942,945,947,950,953,955,958,961],{"class":226,"line":464},[224,927,928],{"class":293},"  async",[224,930,931],{"class":432}," downloadFile",[224,933,934],{"class":234},"(@",[224,936,937],{"class":303},"Param",[224,939,847],{"class":238},[224,941,255],{"class":234},[224,943,944],{"class":251},"id",[224,946,255],{"class":234},[224,948,949],{"class":238},") ",[224,951,944],{"class":952},"sHdIc",[224,954,360],{"class":234},[224,956,957],{"class":380}," string",[224,959,960],{"class":234},")",[224,962,419],{"class":234},[224,964,965,968,971,974,977,980,983,986,989,991,993,995],{"class":226,"line":470},[224,966,967],{"class":293},"    const",[224,969,970],{"class":238}," fileBuffer",[224,972,973],{"class":234}," =",[224,975,976],{"class":230}," await",[224,978,979],{"class":234}," this.",[224,981,982],{"class":238},"fileService",[224,984,985],{"class":234},".",[224,987,988],{"class":303},"getFile",[224,990,847],{"class":432},[224,992,944],{"class":238},[224,994,960],{"class":432},[224,996,258],{"class":234},[224,998,999],{"class":226,"line":487},[224,1000,1001],{"class":432},"    \n",[224,1003,1004,1007,1010,1013,1015,1018,1021],{"class":226,"line":497},[224,1005,1006],{"class":230},"    return",[224,1008,1009],{"class":234}," new",[224,1011,1012],{"class":303}," Response",[224,1014,847],{"class":432},[224,1016,1017],{"class":238},"fileBuffer",[224,1019,1020],{"class":234},",",[224,1022,419],{"class":234},[224,1024,1025,1028,1030],{"class":226,"line":514},[224,1026,1027],{"class":432},"      headers",[224,1029,360],{"class":234},[224,1031,419],{"class":234},[224,1033,1034,1037,1040,1042,1044,1046,1049,1051],{"class":226,"line":529},[224,1035,1036],{"class":234},"        '",[224,1038,1039],{"class":432},"Content-Type",[224,1041,255],{"class":234},[224,1043,360],{"class":234},[224,1045,248],{"class":234},[224,1047,1048],{"class":251},"application\u002Fpdf",[224,1050,255],{"class":234},[224,1052,393],{"class":234},[224,1054,1055,1057,1060,1062,1064,1067,1070,1073,1075,1078,1081],{"class":226,"line":534},[224,1056,1036],{"class":234},[224,1058,1059],{"class":432},"Content-Disposition",[224,1061,255],{"class":234},[224,1063,360],{"class":234},[224,1065,1066],{"class":234}," `",[224,1068,1069],{"class":251},"attachment; filename=\"file-",[224,1071,1072],{"class":234},"${",[224,1074,944],{"class":238},[224,1076,1077],{"class":234},"}",[224,1079,1080],{"class":251},".pdf\"",[224,1082,1083],{"class":234},"`\n",[224,1085,1086],{"class":226,"line":544},[224,1087,1088],{"class":234},"      }\n",[224,1090,1091,1094,1096],{"class":226,"line":559},[224,1092,1093],{"class":234},"    }",[224,1095,960],{"class":432},[224,1097,258],{"class":234},[224,1099,1100],{"class":226,"line":565},[224,1101,562],{"class":234},[224,1103,1104],{"class":226,"line":777},[224,1105,874],{"class":238},[224,1107,1108,1110,1112,1114,1116,1119,1121],{"class":226,"line":786},[224,1109,879],{"class":234},[224,1111,912],{"class":303},[224,1113,847],{"class":238},[224,1115,255],{"class":234},[224,1117,1118],{"class":251},"\u002Fimage\u002F:id",[224,1120,255],{"class":234},[224,1122,857],{"class":238},[224,1124,1125,1127,1130,1132,1134,1136,1138,1140,1142,1144,1146,1148,1150,1152],{"class":226,"line":799},[224,1126,928],{"class":293},[224,1128,1129],{"class":432}," getImage",[224,1131,934],{"class":234},[224,1133,937],{"class":303},[224,1135,847],{"class":238},[224,1137,255],{"class":234},[224,1139,944],{"class":251},[224,1141,255],{"class":234},[224,1143,949],{"class":238},[224,1145,944],{"class":952},[224,1147,360],{"class":234},[224,1149,957],{"class":380},[224,1151,960],{"class":234},[224,1153,419],{"class":234},[224,1155,1156,1158,1161,1163,1165,1167,1169,1171,1174,1176,1178,1180],{"class":226,"line":804},[224,1157,967],{"class":293},[224,1159,1160],{"class":238}," imageBuffer",[224,1162,973],{"class":234},[224,1164,976],{"class":230},[224,1166,979],{"class":234},[224,1168,982],{"class":238},[224,1170,985],{"class":234},[224,1172,1173],{"class":303},"getImage",[224,1175,847],{"class":432},[224,1177,944],{"class":238},[224,1179,960],{"class":432},[224,1181,258],{"class":234},[224,1183,1185],{"class":226,"line":1184},22,[224,1186,1001],{"class":432},[224,1188,1190,1192,1194,1196,1198,1201,1203],{"class":226,"line":1189},23,[224,1191,1006],{"class":230},[224,1193,1009],{"class":234},[224,1195,1012],{"class":303},[224,1197,847],{"class":432},[224,1199,1200],{"class":238},"imageBuffer",[224,1202,1020],{"class":234},[224,1204,419],{"class":234},[224,1206,1208,1210,1212],{"class":226,"line":1207},24,[224,1209,1027],{"class":432},[224,1211,360],{"class":234},[224,1213,419],{"class":234},[224,1215,1217,1219,1221,1223,1225,1227,1230],{"class":226,"line":1216},25,[224,1218,1036],{"class":234},[224,1220,1039],{"class":432},[224,1222,255],{"class":234},[224,1224,360],{"class":234},[224,1226,248],{"class":234},[224,1228,1229],{"class":251},"image\u002Fpng",[224,1231,461],{"class":234},[224,1233,1235],{"class":226,"line":1234},26,[224,1236,1088],{"class":234},[224,1238,1240,1242,1244],{"class":226,"line":1239},27,[224,1241,1093],{"class":234},[224,1243,960],{"class":432},[224,1245,258],{"class":234},[224,1247,1249],{"class":226,"line":1248},28,[224,1250,562],{"class":234},[224,1252,1254],{"class":226,"line":1253},29,[224,1255,568],{"class":234},[204,1257,1258],{},"The adapter automatically:",[1260,1261,1262,1265,1268,1275],"ol",{},[579,1263,1264],{},"Detects binary content types",[579,1266,1267],{},"Encodes the body as base64",[579,1269,1270,1271,1274],{},"Sets ",[221,1272,1273],{},"isBase64Encoded: true"," in the response",[579,1276,1277],{},"API Gateway decodes it for the client",[350,1279,1281],{"id":1280},"configure-binary-media-types","Configure Binary Media Types",[204,1283,1284],{},"Tell API Gateway which content types should be treated as binary:",[213,1286,1291],{"className":1287,"code":1288,"filename":1289,"language":1290,"meta":219,"style":219},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","functions:\n  api:\n    handler: lambda.handler\n    events:\n      - http:\n          path: \u002F{proxy+}\n          method: ANY\n          binaryMediaTypes:\n            - 'image\u002F*'\n            - 'application\u002Fpdf'\n            - 'application\u002Fzip'\n            - 'application\u002Foctet-stream'\n","serverless.yml","yaml",[221,1292,1293,1301,1308,1318,1325,1335,1345,1355,1362,1374,1384,1395],{"__ignoreMap":219},[224,1294,1295,1298],{"class":226,"line":227},[224,1296,1297],{"class":432},"functions",[224,1299,1300],{"class":234},":\n",[224,1302,1303,1306],{"class":226,"line":261},[224,1304,1305],{"class":432},"  api",[224,1307,1300],{"class":234},[224,1309,1310,1313,1315],{"class":226,"line":284},[224,1311,1312],{"class":432},"    handler",[224,1314,360],{"class":234},[224,1316,1317],{"class":251}," lambda.handler\n",[224,1319,1320,1323],{"class":226,"line":290},[224,1321,1322],{"class":432},"    events",[224,1324,1300],{"class":234},[224,1326,1327,1330,1333],{"class":226,"line":311},[224,1328,1329],{"class":234},"      -",[224,1331,1332],{"class":432}," http",[224,1334,1300],{"class":234},[224,1336,1337,1340,1342],{"class":226,"line":316},[224,1338,1339],{"class":432},"          path",[224,1341,360],{"class":234},[224,1343,1344],{"class":251}," \u002F{proxy+}\n",[224,1346,1347,1350,1352],{"class":226,"line":323},[224,1348,1349],{"class":432},"          method",[224,1351,360],{"class":234},[224,1353,1354],{"class":251}," ANY\n",[224,1356,1357,1360],{"class":226,"line":464},[224,1358,1359],{"class":432},"          binaryMediaTypes",[224,1361,1300],{"class":234},[224,1363,1364,1367,1369,1372],{"class":226,"line":470},[224,1365,1366],{"class":234},"            -",[224,1368,248],{"class":234},[224,1370,1371],{"class":251},"image\u002F*",[224,1373,461],{"class":234},[224,1375,1376,1378,1380,1382],{"class":226,"line":487},[224,1377,1366],{"class":234},[224,1379,248],{"class":234},[224,1381,1048],{"class":251},[224,1383,461],{"class":234},[224,1385,1386,1388,1390,1393],{"class":226,"line":497},[224,1387,1366],{"class":234},[224,1389,248],{"class":234},[224,1391,1392],{"class":251},"application\u002Fzip",[224,1394,461],{"class":234},[224,1396,1397,1399,1401,1404],{"class":226,"line":514},[224,1398,1366],{"class":234},[224,1400,248],{"class":234},[224,1402,1403],{"class":251},"application\u002Foctet-stream",[224,1405,461],{"class":234},[208,1407,1409],{"id":1408},"cookie-handling","Cookie Handling",[204,1411,1412],{},"Cookies work seamlessly across both API Gateway versions:",[213,1414,1416],{"className":215,"code":1415,"language":218,"meta":219,"style":219},"@Controller('\u002Fauth')\nexport class AuthController {\n  \n  @Inject(AuthService)\n  private authService!: AuthService;\n  \n  @Post('\u002Flogin')\n  async login(@Body({ validationSchema: LoginSchema }) credentials: LoginDto) {\n    const token = await this.authService.generateToken(credentials);\n    \n    \u002F\u002F Set authentication cookie\n    return FastResponse.ok({ success: true })\n      .cookie('auth_token', token, {\n        httpOnly: true,\n        secure: true,\n        maxAge: 3600,\n        sameSite: 'strict'\n      });\n  }\n  \n  @Post('\u002Flogout')\n  async logout() {\n    \u002F\u002F Clear authentication cookie\n    return FastResponse.ok({ success: true })\n      .cookie('auth_token', '', {\n        httpOnly: true,\n        secure: true,\n        maxAge: 0\n      });\n  }\n  \n  @Get('\u002Fsession')\n  async getSession(@Cookie('auth_token') token: string) {\n    if (!token) {\n      throw new UnauthorizedException('Not authenticated');\n    }\n    \n    const session = await this.authService.validateToken(token);\n    return { session };\n  }\n}\n",[221,1417,1418,1435,1446,1450,1459,1473,1477,1495,1536,1565,1569,1574,1603,1628,1639,1650,1663,1677,1686,1690,1694,1711,1722,1727,1751,1774,1784,1794,1803,1811,1816,1821,1839,1873,1891,1915,1920,1925,1954,1966,1971],{"__ignoreMap":219},[224,1419,1420,1422,1424,1426,1428,1431,1433],{"class":226,"line":227},[224,1421,841],{"class":234},[224,1423,844],{"class":303},[224,1425,847],{"class":238},[224,1427,255],{"class":234},[224,1429,1430],{"class":251},"\u002Fauth",[224,1432,255],{"class":234},[224,1434,857],{"class":238},[224,1436,1437,1439,1441,1444],{"class":226,"line":261},[224,1438,326],{"class":230},[224,1440,864],{"class":293},[224,1442,1443],{"class":380}," AuthController",[224,1445,419],{"class":234},[224,1447,1448],{"class":226,"line":284},[224,1449,874],{"class":238},[224,1451,1452,1454,1456],{"class":226,"line":290},[224,1453,879],{"class":234},[224,1455,882],{"class":303},[224,1457,1458],{"class":238},"(AuthService)\n",[224,1460,1461,1463,1466,1468,1471],{"class":226,"line":311},[224,1462,890],{"class":293},[224,1464,1465],{"class":432}," authService",[224,1467,896],{"class":234},[224,1469,1470],{"class":380}," AuthService",[224,1472,258],{"class":234},[224,1474,1475],{"class":226,"line":316},[224,1476,874],{"class":238},[224,1478,1479,1481,1484,1486,1488,1491,1493],{"class":226,"line":323},[224,1480,879],{"class":234},[224,1482,1483],{"class":303},"Post",[224,1485,847],{"class":238},[224,1487,255],{"class":234},[224,1489,1490],{"class":251},"\u002Flogin",[224,1492,255],{"class":234},[224,1494,857],{"class":238},[224,1496,1497,1499,1502,1504,1507,1509,1512,1515,1517,1520,1522,1524,1527,1529,1532,1534],{"class":226,"line":464},[224,1498,928],{"class":293},[224,1500,1501],{"class":432}," login",[224,1503,934],{"class":234},[224,1505,1506],{"class":303},"Body",[224,1508,847],{"class":238},[224,1510,1511],{"class":234},"{",[224,1513,1514],{"class":432}," validationSchema",[224,1516,360],{"class":234},[224,1518,1519],{"class":238}," LoginSchema ",[224,1521,1077],{"class":234},[224,1523,949],{"class":238},[224,1525,1526],{"class":952},"credentials",[224,1528,360],{"class":234},[224,1530,1531],{"class":380}," LoginDto",[224,1533,960],{"class":234},[224,1535,419],{"class":234},[224,1537,1538,1540,1543,1545,1547,1549,1552,1554,1557,1559,1561,1563],{"class":226,"line":470},[224,1539,967],{"class":293},[224,1541,1542],{"class":238}," token",[224,1544,973],{"class":234},[224,1546,976],{"class":230},[224,1548,979],{"class":234},[224,1550,1551],{"class":238},"authService",[224,1553,985],{"class":234},[224,1555,1556],{"class":303},"generateToken",[224,1558,847],{"class":432},[224,1560,1526],{"class":238},[224,1562,960],{"class":432},[224,1564,258],{"class":234},[224,1566,1567],{"class":226,"line":487},[224,1568,1001],{"class":432},[224,1570,1571],{"class":226,"line":497},[224,1572,1573],{"class":319},"    \u002F\u002F Set authentication cookie\n",[224,1575,1576,1578,1581,1583,1586,1588,1590,1593,1595,1599,1601],{"class":226,"line":514},[224,1577,1006],{"class":230},[224,1579,1580],{"class":238}," FastResponse",[224,1582,985],{"class":234},[224,1584,1585],{"class":303},"ok",[224,1587,847],{"class":432},[224,1589,1511],{"class":234},[224,1591,1592],{"class":432}," success",[224,1594,360],{"class":234},[224,1596,1598],{"class":1597},"sfNiH"," true",[224,1600,242],{"class":234},[224,1602,857],{"class":432},[224,1604,1605,1608,1611,1613,1615,1618,1620,1622,1624,1626],{"class":226,"line":529},[224,1606,1607],{"class":234},"      .",[224,1609,1610],{"class":303},"cookie",[224,1612,847],{"class":432},[224,1614,255],{"class":234},[224,1616,1617],{"class":251},"auth_token",[224,1619,255],{"class":234},[224,1621,1020],{"class":234},[224,1623,1542],{"class":238},[224,1625,1020],{"class":234},[224,1627,419],{"class":234},[224,1629,1630,1633,1635,1637],{"class":226,"line":534},[224,1631,1632],{"class":432},"        httpOnly",[224,1634,360],{"class":234},[224,1636,1598],{"class":1597},[224,1638,393],{"class":234},[224,1640,1641,1644,1646,1648],{"class":226,"line":544},[224,1642,1643],{"class":432},"        secure",[224,1645,360],{"class":234},[224,1647,1598],{"class":1597},[224,1649,393],{"class":234},[224,1651,1652,1655,1657,1661],{"class":226,"line":559},[224,1653,1654],{"class":432},"        maxAge",[224,1656,360],{"class":234},[224,1658,1660],{"class":1659},"sbssI"," 3600",[224,1662,393],{"class":234},[224,1664,1665,1668,1670,1672,1675],{"class":226,"line":565},[224,1666,1667],{"class":432},"        sameSite",[224,1669,360],{"class":234},[224,1671,248],{"class":234},[224,1673,1674],{"class":251},"strict",[224,1676,461],{"class":234},[224,1678,1679,1682,1684],{"class":226,"line":777},[224,1680,1681],{"class":234},"      }",[224,1683,960],{"class":432},[224,1685,258],{"class":234},[224,1687,1688],{"class":226,"line":786},[224,1689,562],{"class":234},[224,1691,1692],{"class":226,"line":799},[224,1693,874],{"class":238},[224,1695,1696,1698,1700,1702,1704,1707,1709],{"class":226,"line":804},[224,1697,879],{"class":234},[224,1699,1483],{"class":303},[224,1701,847],{"class":238},[224,1703,255],{"class":234},[224,1705,1706],{"class":251},"\u002Flogout",[224,1708,255],{"class":234},[224,1710,857],{"class":238},[224,1712,1713,1715,1718,1720],{"class":226,"line":1184},[224,1714,928],{"class":293},[224,1716,1717],{"class":432}," logout",[224,1719,306],{"class":234},[224,1721,419],{"class":234},[224,1723,1724],{"class":226,"line":1189},[224,1725,1726],{"class":319},"    \u002F\u002F Clear authentication cookie\n",[224,1728,1729,1731,1733,1735,1737,1739,1741,1743,1745,1747,1749],{"class":226,"line":1207},[224,1730,1006],{"class":230},[224,1732,1580],{"class":238},[224,1734,985],{"class":234},[224,1736,1585],{"class":303},[224,1738,847],{"class":432},[224,1740,1511],{"class":234},[224,1742,1592],{"class":432},[224,1744,360],{"class":234},[224,1746,1598],{"class":1597},[224,1748,242],{"class":234},[224,1750,857],{"class":432},[224,1752,1753,1755,1757,1759,1761,1763,1765,1767,1770,1772],{"class":226,"line":1216},[224,1754,1607],{"class":234},[224,1756,1610],{"class":303},[224,1758,847],{"class":432},[224,1760,255],{"class":234},[224,1762,1617],{"class":251},[224,1764,255],{"class":234},[224,1766,1020],{"class":234},[224,1768,1769],{"class":234}," ''",[224,1771,1020],{"class":234},[224,1773,419],{"class":234},[224,1775,1776,1778,1780,1782],{"class":226,"line":1234},[224,1777,1632],{"class":432},[224,1779,360],{"class":234},[224,1781,1598],{"class":1597},[224,1783,393],{"class":234},[224,1785,1786,1788,1790,1792],{"class":226,"line":1239},[224,1787,1643],{"class":432},[224,1789,360],{"class":234},[224,1791,1598],{"class":1597},[224,1793,393],{"class":234},[224,1795,1796,1798,1800],{"class":226,"line":1248},[224,1797,1654],{"class":432},[224,1799,360],{"class":234},[224,1801,1802],{"class":1659}," 0\n",[224,1804,1805,1807,1809],{"class":226,"line":1253},[224,1806,1681],{"class":234},[224,1808,960],{"class":432},[224,1810,258],{"class":234},[224,1812,1814],{"class":226,"line":1813},30,[224,1815,562],{"class":234},[224,1817,1819],{"class":226,"line":1818},31,[224,1820,874],{"class":238},[224,1822,1824,1826,1828,1830,1832,1835,1837],{"class":226,"line":1823},32,[224,1825,879],{"class":234},[224,1827,912],{"class":303},[224,1829,847],{"class":238},[224,1831,255],{"class":234},[224,1833,1834],{"class":251},"\u002Fsession",[224,1836,255],{"class":234},[224,1838,857],{"class":238},[224,1840,1842,1844,1847,1849,1852,1854,1856,1858,1860,1862,1865,1867,1869,1871],{"class":226,"line":1841},33,[224,1843,928],{"class":293},[224,1845,1846],{"class":432}," getSession",[224,1848,934],{"class":234},[224,1850,1851],{"class":303},"Cookie",[224,1853,847],{"class":238},[224,1855,255],{"class":234},[224,1857,1617],{"class":251},[224,1859,255],{"class":234},[224,1861,949],{"class":238},[224,1863,1864],{"class":952},"token",[224,1866,360],{"class":234},[224,1868,957],{"class":380},[224,1870,960],{"class":234},[224,1872,419],{"class":234},[224,1874,1876,1879,1882,1885,1887,1889],{"class":226,"line":1875},34,[224,1877,1878],{"class":230},"    if",[224,1880,1881],{"class":432}," (",[224,1883,1884],{"class":234},"!",[224,1886,1864],{"class":238},[224,1888,949],{"class":432},[224,1890,375],{"class":234},[224,1892,1894,1897,1899,1902,1904,1906,1909,1911,1913],{"class":226,"line":1893},35,[224,1895,1896],{"class":230},"      throw",[224,1898,1009],{"class":234},[224,1900,1901],{"class":303}," UnauthorizedException",[224,1903,847],{"class":432},[224,1905,255],{"class":234},[224,1907,1908],{"class":251},"Not authenticated",[224,1910,255],{"class":234},[224,1912,960],{"class":432},[224,1914,258],{"class":234},[224,1916,1918],{"class":226,"line":1917},36,[224,1919,672],{"class":234},[224,1921,1923],{"class":226,"line":1922},37,[224,1924,1001],{"class":432},[224,1926,1928,1930,1933,1935,1937,1939,1941,1943,1946,1948,1950,1952],{"class":226,"line":1927},38,[224,1929,967],{"class":293},[224,1931,1932],{"class":238}," session",[224,1934,973],{"class":234},[224,1936,976],{"class":230},[224,1938,979],{"class":234},[224,1940,1551],{"class":238},[224,1942,985],{"class":234},[224,1944,1945],{"class":303},"validateToken",[224,1947,847],{"class":432},[224,1949,1864],{"class":238},[224,1951,960],{"class":432},[224,1953,258],{"class":234},[224,1955,1957,1959,1961,1963],{"class":226,"line":1956},39,[224,1958,1006],{"class":230},[224,1960,235],{"class":234},[224,1962,1932],{"class":238},[224,1964,1965],{"class":234}," };\n",[224,1967,1969],{"class":226,"line":1968},40,[224,1970,562],{"class":234},[224,1972,1974],{"class":226,"line":1973},41,[224,1975,568],{"class":234},[204,1977,1978],{},[572,1979,1980],{},"How it works:",[576,1982,1983,1991],{},[579,1984,1985,1988,1989,591],{},[572,1986,1987],{},"API Gateway v1",": Cookies set via ",[221,1990,590],{},[579,1992,1993,1988,1996,1999],{},[572,1994,1995],{},"API Gateway v2",[221,1997,1998],{},"cookies"," array for better handling",[208,2001,2003],{"id":2002},"environment-variables","Environment Variables",[204,2005,2006],{},"Access Lambda-specific environment variables:",[213,2008,2010],{"className":215,"code":2009,"language":218,"meta":219,"style":219},"import { RuntimeConfig } from '@vercube\u002Fcore';\n\n@Controller('\u002Fconfig')\nexport class ConfigController {\n  \n  @Get('\u002Flambda-info')\n  getLambdaInfo() {\n    return {\n      \u002F\u002F AWS Lambda environment variables\n      region: process.env.AWS_REGION,\n      functionName: process.env.AWS_LAMBDA_FUNCTION_NAME,\n      functionVersion: process.env.AWS_LAMBDA_FUNCTION_VERSION,\n      memoryLimit: process.env.AWS_LAMBDA_FUNCTION_MEMORY_SIZE,\n      logGroup: process.env.AWS_LAMBDA_LOG_GROUP_NAME,\n      logStream: process.env.AWS_LAMBDA_LOG_STREAM_NAME\n    };\n  }\n  \n  @Get('\u002Fruntime-info')\n  getRuntimeInfo() {\n    return {\n      \u002F\u002F Runtime execution details\n      requestId: process.env.AWS_REQUEST_ID,\n      executionEnv: process.env.AWS_EXECUTION_ENV,\n      runtime: process.env.AWS_LAMBDA_RUNTIME_API\n    };\n  }\n}\n",[221,2011,2012,2033,2037,2054,2065,2069,2086,2095,2101,2106,2128,2148,2168,2188,2208,2226,2231,2235,2239,2256,2265,2271,2276,2296,2316,2334,2338,2342],{"__ignoreMap":219},[224,2013,2014,2016,2018,2021,2023,2025,2027,2029,2031],{"class":226,"line":227},[224,2015,231],{"class":230},[224,2017,235],{"class":234},[224,2019,2020],{"class":238}," RuntimeConfig",[224,2022,242],{"class":234},[224,2024,245],{"class":230},[224,2026,248],{"class":234},[224,2028,252],{"class":251},[224,2030,255],{"class":234},[224,2032,258],{"class":234},[224,2034,2035],{"class":226,"line":261},[224,2036,287],{"emptyLinePlaceholder":56},[224,2038,2039,2041,2043,2045,2047,2050,2052],{"class":226,"line":284},[224,2040,841],{"class":234},[224,2042,844],{"class":303},[224,2044,847],{"class":238},[224,2046,255],{"class":234},[224,2048,2049],{"class":251},"\u002Fconfig",[224,2051,255],{"class":234},[224,2053,857],{"class":238},[224,2055,2056,2058,2060,2063],{"class":226,"line":290},[224,2057,326],{"class":230},[224,2059,864],{"class":293},[224,2061,2062],{"class":380}," ConfigController",[224,2064,419],{"class":234},[224,2066,2067],{"class":226,"line":311},[224,2068,874],{"class":238},[224,2070,2071,2073,2075,2077,2079,2082,2084],{"class":226,"line":316},[224,2072,879],{"class":234},[224,2074,912],{"class":303},[224,2076,847],{"class":238},[224,2078,255],{"class":234},[224,2080,2081],{"class":251},"\u002Flambda-info",[224,2083,255],{"class":234},[224,2085,857],{"class":238},[224,2087,2088,2091,2093],{"class":226,"line":323},[224,2089,2090],{"class":432},"  getLambdaInfo",[224,2092,306],{"class":234},[224,2094,419],{"class":234},[224,2096,2097,2099],{"class":226,"line":464},[224,2098,1006],{"class":230},[224,2100,419],{"class":234},[224,2102,2103],{"class":226,"line":470},[224,2104,2105],{"class":319},"      \u002F\u002F AWS Lambda environment variables\n",[224,2107,2108,2111,2113,2116,2118,2121,2123,2126],{"class":226,"line":487},[224,2109,2110],{"class":432},"      region",[224,2112,360],{"class":234},[224,2114,2115],{"class":238}," process",[224,2117,985],{"class":234},[224,2119,2120],{"class":238},"env",[224,2122,985],{"class":234},[224,2124,2125],{"class":238},"AWS_REGION",[224,2127,393],{"class":234},[224,2129,2130,2133,2135,2137,2139,2141,2143,2146],{"class":226,"line":497},[224,2131,2132],{"class":432},"      functionName",[224,2134,360],{"class":234},[224,2136,2115],{"class":238},[224,2138,985],{"class":234},[224,2140,2120],{"class":238},[224,2142,985],{"class":234},[224,2144,2145],{"class":238},"AWS_LAMBDA_FUNCTION_NAME",[224,2147,393],{"class":234},[224,2149,2150,2153,2155,2157,2159,2161,2163,2166],{"class":226,"line":514},[224,2151,2152],{"class":432},"      functionVersion",[224,2154,360],{"class":234},[224,2156,2115],{"class":238},[224,2158,985],{"class":234},[224,2160,2120],{"class":238},[224,2162,985],{"class":234},[224,2164,2165],{"class":238},"AWS_LAMBDA_FUNCTION_VERSION",[224,2167,393],{"class":234},[224,2169,2170,2173,2175,2177,2179,2181,2183,2186],{"class":226,"line":529},[224,2171,2172],{"class":432},"      memoryLimit",[224,2174,360],{"class":234},[224,2176,2115],{"class":238},[224,2178,985],{"class":234},[224,2180,2120],{"class":238},[224,2182,985],{"class":234},[224,2184,2185],{"class":238},"AWS_LAMBDA_FUNCTION_MEMORY_SIZE",[224,2187,393],{"class":234},[224,2189,2190,2193,2195,2197,2199,2201,2203,2206],{"class":226,"line":534},[224,2191,2192],{"class":432},"      logGroup",[224,2194,360],{"class":234},[224,2196,2115],{"class":238},[224,2198,985],{"class":234},[224,2200,2120],{"class":238},[224,2202,985],{"class":234},[224,2204,2205],{"class":238},"AWS_LAMBDA_LOG_GROUP_NAME",[224,2207,393],{"class":234},[224,2209,2210,2213,2215,2217,2219,2221,2223],{"class":226,"line":544},[224,2211,2212],{"class":432},"      logStream",[224,2214,360],{"class":234},[224,2216,2115],{"class":238},[224,2218,985],{"class":234},[224,2220,2120],{"class":238},[224,2222,985],{"class":234},[224,2224,2225],{"class":238},"AWS_LAMBDA_LOG_STREAM_NAME\n",[224,2227,2228],{"class":226,"line":559},[224,2229,2230],{"class":234},"    };\n",[224,2232,2233],{"class":226,"line":565},[224,2234,562],{"class":234},[224,2236,2237],{"class":226,"line":777},[224,2238,874],{"class":238},[224,2240,2241,2243,2245,2247,2249,2252,2254],{"class":226,"line":786},[224,2242,879],{"class":234},[224,2244,912],{"class":303},[224,2246,847],{"class":238},[224,2248,255],{"class":234},[224,2250,2251],{"class":251},"\u002Fruntime-info",[224,2253,255],{"class":234},[224,2255,857],{"class":238},[224,2257,2258,2261,2263],{"class":226,"line":799},[224,2259,2260],{"class":432},"  getRuntimeInfo",[224,2262,306],{"class":234},[224,2264,419],{"class":234},[224,2266,2267,2269],{"class":226,"line":804},[224,2268,1006],{"class":230},[224,2270,419],{"class":234},[224,2272,2273],{"class":226,"line":1184},[224,2274,2275],{"class":319},"      \u002F\u002F Runtime execution details\n",[224,2277,2278,2281,2283,2285,2287,2289,2291,2294],{"class":226,"line":1189},[224,2279,2280],{"class":432},"      requestId",[224,2282,360],{"class":234},[224,2284,2115],{"class":238},[224,2286,985],{"class":234},[224,2288,2120],{"class":238},[224,2290,985],{"class":234},[224,2292,2293],{"class":238},"AWS_REQUEST_ID",[224,2295,393],{"class":234},[224,2297,2298,2301,2303,2305,2307,2309,2311,2314],{"class":226,"line":1207},[224,2299,2300],{"class":432},"      executionEnv",[224,2302,360],{"class":234},[224,2304,2115],{"class":238},[224,2306,985],{"class":234},[224,2308,2120],{"class":238},[224,2310,985],{"class":234},[224,2312,2313],{"class":238},"AWS_EXECUTION_ENV",[224,2315,393],{"class":234},[224,2317,2318,2321,2323,2325,2327,2329,2331],{"class":226,"line":1216},[224,2319,2320],{"class":432},"      runtime",[224,2322,360],{"class":234},[224,2324,2115],{"class":238},[224,2326,985],{"class":234},[224,2328,2120],{"class":238},[224,2330,985],{"class":234},[224,2332,2333],{"class":238},"AWS_LAMBDA_RUNTIME_API\n",[224,2335,2336],{"class":226,"line":1234},[224,2337,2230],{"class":234},[224,2339,2340],{"class":226,"line":1239},[224,2341,562],{"class":234},[224,2343,2344],{"class":226,"line":1248},[224,2345,568],{"class":234},[208,2347,2349],{"id":2348},"serverless-framework-configuration","Serverless Framework Configuration",[350,2351,2353],{"id":2352},"basic-configuration","Basic Configuration",[213,2355,2357],{"className":1287,"code":2356,"filename":1289,"language":1290,"meta":219,"style":219},"service: vercube-api\n\nprovider:\n  name: aws\n  runtime: nodejs22.x\n  region: us-east-1\n  memorySize: 512\n  timeout: 30\n  \n  # Environment variables\n  environment:\n    NODE_ENV: production\n    DATABASE_URL: ${env:DATABASE_URL}\n    JWT_SECRET: ${env:JWT_SECRET}\n\nfunctions:\n  api:\n    handler: lambda.handler\n    events:\n      - http:\n          path: \u002F{proxy+}\n          method: ANY\n          cors: true\n",[221,2358,2359,2369,2373,2380,2390,2400,2410,2420,2430,2434,2439,2446,2456,2466,2476,2480,2486,2492,2500,2506,2514,2522,2530],{"__ignoreMap":219},[224,2360,2361,2364,2366],{"class":226,"line":227},[224,2362,2363],{"class":432},"service",[224,2365,360],{"class":234},[224,2367,2368],{"class":251}," vercube-api\n",[224,2370,2371],{"class":226,"line":261},[224,2372,287],{"emptyLinePlaceholder":56},[224,2374,2375,2378],{"class":226,"line":284},[224,2376,2377],{"class":432},"provider",[224,2379,1300],{"class":234},[224,2381,2382,2385,2387],{"class":226,"line":290},[224,2383,2384],{"class":432},"  name",[224,2386,360],{"class":234},[224,2388,2389],{"class":251}," aws\n",[224,2391,2392,2395,2397],{"class":226,"line":311},[224,2393,2394],{"class":432},"  runtime",[224,2396,360],{"class":234},[224,2398,2399],{"class":251}," nodejs22.x\n",[224,2401,2402,2405,2407],{"class":226,"line":316},[224,2403,2404],{"class":432},"  region",[224,2406,360],{"class":234},[224,2408,2409],{"class":251}," us-east-1\n",[224,2411,2412,2415,2417],{"class":226,"line":323},[224,2413,2414],{"class":432},"  memorySize",[224,2416,360],{"class":234},[224,2418,2419],{"class":1659}," 512\n",[224,2421,2422,2425,2427],{"class":226,"line":464},[224,2423,2424],{"class":432},"  timeout",[224,2426,360],{"class":234},[224,2428,2429],{"class":1659}," 30\n",[224,2431,2432],{"class":226,"line":470},[224,2433,874],{"class":238},[224,2435,2436],{"class":226,"line":487},[224,2437,2438],{"class":319},"  # Environment variables\n",[224,2440,2441,2444],{"class":226,"line":497},[224,2442,2443],{"class":432},"  environment",[224,2445,1300],{"class":234},[224,2447,2448,2451,2453],{"class":226,"line":514},[224,2449,2450],{"class":432},"    NODE_ENV",[224,2452,360],{"class":234},[224,2454,2455],{"class":251}," production\n",[224,2457,2458,2461,2463],{"class":226,"line":529},[224,2459,2460],{"class":432},"    DATABASE_URL",[224,2462,360],{"class":234},[224,2464,2465],{"class":251}," ${env:DATABASE_URL}\n",[224,2467,2468,2471,2473],{"class":226,"line":534},[224,2469,2470],{"class":432},"    JWT_SECRET",[224,2472,360],{"class":234},[224,2474,2475],{"class":251}," ${env:JWT_SECRET}\n",[224,2477,2478],{"class":226,"line":544},[224,2479,287],{"emptyLinePlaceholder":56},[224,2481,2482,2484],{"class":226,"line":559},[224,2483,1297],{"class":432},[224,2485,1300],{"class":234},[224,2487,2488,2490],{"class":226,"line":565},[224,2489,1305],{"class":432},[224,2491,1300],{"class":234},[224,2493,2494,2496,2498],{"class":226,"line":777},[224,2495,1312],{"class":432},[224,2497,360],{"class":234},[224,2499,1317],{"class":251},[224,2501,2502,2504],{"class":226,"line":786},[224,2503,1322],{"class":432},[224,2505,1300],{"class":234},[224,2507,2508,2510,2512],{"class":226,"line":799},[224,2509,1329],{"class":234},[224,2511,1332],{"class":432},[224,2513,1300],{"class":234},[224,2515,2516,2518,2520],{"class":226,"line":804},[224,2517,1339],{"class":432},[224,2519,360],{"class":234},[224,2521,1344],{"class":251},[224,2523,2524,2526,2528],{"class":226,"line":1184},[224,2525,1349],{"class":432},[224,2527,360],{"class":234},[224,2529,1354],{"class":251},[224,2531,2532,2535,2537],{"class":226,"line":1189},[224,2533,2534],{"class":432},"          cors",[224,2536,360],{"class":234},[224,2538,2539],{"class":1597}," true\n",[350,2541,2543],{"id":2542},"advanced-configuration","Advanced Configuration",[213,2545,2547],{"className":1287,"code":2546,"filename":1289,"language":1290,"meta":219,"style":219},"service: vercube-api\n\nprovider:\n  name: aws\n  runtime: nodejs22.x\n  region: us-east-1\n  \n  # Performance settings\n  memorySize: 1024\n  timeout: 60\n  \n  # VPC configuration (for database access)\n  vpc:\n    securityGroupIds:\n      - sg-xxxxxxxxx\n    subnetIds:\n      - subnet-xxxxxxxxx\n      - subnet-yyyyyyyyy\n  \n  # IAM permissions\n  iam:\n    role:\n      statements:\n        - Effect: Allow\n          Action:\n            - s3:GetObject\n            - s3:PutObject\n          Resource: 'arn:aws:s3:::my-bucket\u002F*'\n        - Effect: Allow\n          Action:\n            - dynamodb:Query\n            - dynamodb:Scan\n            - dynamodb:GetItem\n            - dynamodb:PutItem\n          Resource: 'arn:aws:dynamodb:${aws:region}:*:table\u002Fmy-table'\n  \n  # Environment variables\n  environment:\n    NODE_ENV: ${opt:stage, 'dev'}\n    DATABASE_URL: ${env:DATABASE_URL}\n    REDIS_URL: ${env:REDIS_URL}\n    JWT_SECRET: ${env:JWT_SECRET}\n    S3_BUCKET: ${env:S3_BUCKET}\n\nfunctions:\n  api:\n    handler: lambda.handler\n    \n    # Provisioned concurrency for predictable performance\n    provisionedConcurrency: 2\n    \n    # Reserved concurrent executions\n    reservedConcurrency: 100\n    \n    events:\n      - http:\n          path: \u002F{proxy+}\n          method: ANY\n          cors:\n            origin: '*'\n            headers:\n              - Content-Type\n              - Authorization\n              - X-Api-Key\n            allowCredentials: true\n          \n          # Binary media types\n          binaryMediaTypes:\n            - 'image\u002F*'\n            - 'application\u002Fpdf'\n            - 'application\u002Fzip'\n    \n    # Layer for dependencies\n    layers:\n      - arn:aws:lambda:us-east-1:xxxxx:layer:my-dependencies:1\n    \n    # Tags\n    tags:\n      Environment: ${opt:stage, 'dev'}\n      Service: vercube-api\n\n# Plugins\nplugins:\n  - serverless-offline\n  - serverless-plugin-typescript\n\n# Custom configuration\ncustom:\n  serverless-offline:\n    httpPort: 3000\n",[221,2548,2549,2557,2561,2567,2575,2583,2591,2595,2600,2609,2618,2622,2627,2634,2641,2648,2655,2662,2669,2673,2678,2685,2692,2699,2712,2719,2726,2733,2747,2757,2763,2770,2777,2784,2791,2804,2808,2812,2818,2827,2835,2845,2854,2865,2870,2877,2884,2893,2898,2904,2915,2920,2926,2937,2942,2949,2958,2967,2976,2983,2998,3006,3015,3023,3031,3041,3047,3053,3060,3071,3082,3093,3098,3104,3112,3120,3125,3131,3139,3149,3159,3164,3170,3178,3187,3195,3200,3206,3214,3222],{"__ignoreMap":219},[224,2550,2551,2553,2555],{"class":226,"line":227},[224,2552,2363],{"class":432},[224,2554,360],{"class":234},[224,2556,2368],{"class":251},[224,2558,2559],{"class":226,"line":261},[224,2560,287],{"emptyLinePlaceholder":56},[224,2562,2563,2565],{"class":226,"line":284},[224,2564,2377],{"class":432},[224,2566,1300],{"class":234},[224,2568,2569,2571,2573],{"class":226,"line":290},[224,2570,2384],{"class":432},[224,2572,360],{"class":234},[224,2574,2389],{"class":251},[224,2576,2577,2579,2581],{"class":226,"line":311},[224,2578,2394],{"class":432},[224,2580,360],{"class":234},[224,2582,2399],{"class":251},[224,2584,2585,2587,2589],{"class":226,"line":316},[224,2586,2404],{"class":432},[224,2588,360],{"class":234},[224,2590,2409],{"class":251},[224,2592,2593],{"class":226,"line":323},[224,2594,874],{"class":238},[224,2596,2597],{"class":226,"line":464},[224,2598,2599],{"class":319},"  # Performance settings\n",[224,2601,2602,2604,2606],{"class":226,"line":470},[224,2603,2414],{"class":432},[224,2605,360],{"class":234},[224,2607,2608],{"class":1659}," 1024\n",[224,2610,2611,2613,2615],{"class":226,"line":487},[224,2612,2424],{"class":432},[224,2614,360],{"class":234},[224,2616,2617],{"class":1659}," 60\n",[224,2619,2620],{"class":226,"line":497},[224,2621,874],{"class":238},[224,2623,2624],{"class":226,"line":514},[224,2625,2626],{"class":319},"  # VPC configuration (for database access)\n",[224,2628,2629,2632],{"class":226,"line":529},[224,2630,2631],{"class":432},"  vpc",[224,2633,1300],{"class":234},[224,2635,2636,2639],{"class":226,"line":534},[224,2637,2638],{"class":432},"    securityGroupIds",[224,2640,1300],{"class":234},[224,2642,2643,2645],{"class":226,"line":544},[224,2644,1329],{"class":234},[224,2646,2647],{"class":251}," sg-xxxxxxxxx\n",[224,2649,2650,2653],{"class":226,"line":559},[224,2651,2652],{"class":432},"    subnetIds",[224,2654,1300],{"class":234},[224,2656,2657,2659],{"class":226,"line":565},[224,2658,1329],{"class":234},[224,2660,2661],{"class":251}," subnet-xxxxxxxxx\n",[224,2663,2664,2666],{"class":226,"line":777},[224,2665,1329],{"class":234},[224,2667,2668],{"class":251}," subnet-yyyyyyyyy\n",[224,2670,2671],{"class":226,"line":786},[224,2672,874],{"class":238},[224,2674,2675],{"class":226,"line":799},[224,2676,2677],{"class":319},"  # IAM permissions\n",[224,2679,2680,2683],{"class":226,"line":804},[224,2681,2682],{"class":432},"  iam",[224,2684,1300],{"class":234},[224,2686,2687,2690],{"class":226,"line":1184},[224,2688,2689],{"class":432},"    role",[224,2691,1300],{"class":234},[224,2693,2694,2697],{"class":226,"line":1189},[224,2695,2696],{"class":432},"      statements",[224,2698,1300],{"class":234},[224,2700,2701,2704,2707,2709],{"class":226,"line":1207},[224,2702,2703],{"class":234},"        -",[224,2705,2706],{"class":432}," Effect",[224,2708,360],{"class":234},[224,2710,2711],{"class":251}," Allow\n",[224,2713,2714,2717],{"class":226,"line":1216},[224,2715,2716],{"class":432},"          Action",[224,2718,1300],{"class":234},[224,2720,2721,2723],{"class":226,"line":1234},[224,2722,1366],{"class":234},[224,2724,2725],{"class":251}," s3:GetObject\n",[224,2727,2728,2730],{"class":226,"line":1239},[224,2729,1366],{"class":234},[224,2731,2732],{"class":251}," s3:PutObject\n",[224,2734,2735,2738,2740,2742,2745],{"class":226,"line":1248},[224,2736,2737],{"class":432},"          Resource",[224,2739,360],{"class":234},[224,2741,248],{"class":234},[224,2743,2744],{"class":251},"arn:aws:s3:::my-bucket\u002F*",[224,2746,461],{"class":234},[224,2748,2749,2751,2753,2755],{"class":226,"line":1253},[224,2750,2703],{"class":234},[224,2752,2706],{"class":432},[224,2754,360],{"class":234},[224,2756,2711],{"class":251},[224,2758,2759,2761],{"class":226,"line":1813},[224,2760,2716],{"class":432},[224,2762,1300],{"class":234},[224,2764,2765,2767],{"class":226,"line":1818},[224,2766,1366],{"class":234},[224,2768,2769],{"class":251}," dynamodb:Query\n",[224,2771,2772,2774],{"class":226,"line":1823},[224,2773,1366],{"class":234},[224,2775,2776],{"class":251}," dynamodb:Scan\n",[224,2778,2779,2781],{"class":226,"line":1841},[224,2780,1366],{"class":234},[224,2782,2783],{"class":251}," dynamodb:GetItem\n",[224,2785,2786,2788],{"class":226,"line":1875},[224,2787,1366],{"class":234},[224,2789,2790],{"class":251}," dynamodb:PutItem\n",[224,2792,2793,2795,2797,2799,2802],{"class":226,"line":1893},[224,2794,2737],{"class":432},[224,2796,360],{"class":234},[224,2798,248],{"class":234},[224,2800,2801],{"class":251},"arn:aws:dynamodb:${aws:region}:*:table\u002Fmy-table",[224,2803,461],{"class":234},[224,2805,2806],{"class":226,"line":1917},[224,2807,874],{"class":238},[224,2809,2810],{"class":226,"line":1922},[224,2811,2438],{"class":319},[224,2813,2814,2816],{"class":226,"line":1927},[224,2815,2443],{"class":432},[224,2817,1300],{"class":234},[224,2819,2820,2822,2824],{"class":226,"line":1956},[224,2821,2450],{"class":432},[224,2823,360],{"class":234},[224,2825,2826],{"class":251}," ${opt:stage, 'dev'}\n",[224,2828,2829,2831,2833],{"class":226,"line":1968},[224,2830,2460],{"class":432},[224,2832,360],{"class":234},[224,2834,2465],{"class":251},[224,2836,2837,2840,2842],{"class":226,"line":1973},[224,2838,2839],{"class":432},"    REDIS_URL",[224,2841,360],{"class":234},[224,2843,2844],{"class":251}," ${env:REDIS_URL}\n",[224,2846,2848,2850,2852],{"class":226,"line":2847},42,[224,2849,2470],{"class":432},[224,2851,360],{"class":234},[224,2853,2475],{"class":251},[224,2855,2857,2860,2862],{"class":226,"line":2856},43,[224,2858,2859],{"class":432},"    S3_BUCKET",[224,2861,360],{"class":234},[224,2863,2864],{"class":251}," ${env:S3_BUCKET}\n",[224,2866,2868],{"class":226,"line":2867},44,[224,2869,287],{"emptyLinePlaceholder":56},[224,2871,2873,2875],{"class":226,"line":2872},45,[224,2874,1297],{"class":432},[224,2876,1300],{"class":234},[224,2878,2880,2882],{"class":226,"line":2879},46,[224,2881,1305],{"class":432},[224,2883,1300],{"class":234},[224,2885,2887,2889,2891],{"class":226,"line":2886},47,[224,2888,1312],{"class":432},[224,2890,360],{"class":234},[224,2892,1317],{"class":251},[224,2894,2896],{"class":226,"line":2895},48,[224,2897,1001],{"class":238},[224,2899,2901],{"class":226,"line":2900},49,[224,2902,2903],{"class":319},"    # Provisioned concurrency for predictable performance\n",[224,2905,2907,2910,2912],{"class":226,"line":2906},50,[224,2908,2909],{"class":432},"    provisionedConcurrency",[224,2911,360],{"class":234},[224,2913,2914],{"class":1659}," 2\n",[224,2916,2918],{"class":226,"line":2917},51,[224,2919,1001],{"class":238},[224,2921,2923],{"class":226,"line":2922},52,[224,2924,2925],{"class":319},"    # Reserved concurrent executions\n",[224,2927,2929,2932,2934],{"class":226,"line":2928},53,[224,2930,2931],{"class":432},"    reservedConcurrency",[224,2933,360],{"class":234},[224,2935,2936],{"class":1659}," 100\n",[224,2938,2940],{"class":226,"line":2939},54,[224,2941,1001],{"class":238},[224,2943,2945,2947],{"class":226,"line":2944},55,[224,2946,1322],{"class":432},[224,2948,1300],{"class":234},[224,2950,2952,2954,2956],{"class":226,"line":2951},56,[224,2953,1329],{"class":234},[224,2955,1332],{"class":432},[224,2957,1300],{"class":234},[224,2959,2961,2963,2965],{"class":226,"line":2960},57,[224,2962,1339],{"class":432},[224,2964,360],{"class":234},[224,2966,1344],{"class":251},[224,2968,2970,2972,2974],{"class":226,"line":2969},58,[224,2971,1349],{"class":432},[224,2973,360],{"class":234},[224,2975,1354],{"class":251},[224,2977,2979,2981],{"class":226,"line":2978},59,[224,2980,2534],{"class":432},[224,2982,1300],{"class":234},[224,2984,2986,2989,2991,2993,2996],{"class":226,"line":2985},60,[224,2987,2988],{"class":432},"            origin",[224,2990,360],{"class":234},[224,2992,248],{"class":234},[224,2994,2995],{"class":251},"*",[224,2997,461],{"class":234},[224,2999,3001,3004],{"class":226,"line":3000},61,[224,3002,3003],{"class":432},"            headers",[224,3005,1300],{"class":234},[224,3007,3009,3012],{"class":226,"line":3008},62,[224,3010,3011],{"class":234},"              -",[224,3013,3014],{"class":251}," Content-Type\n",[224,3016,3018,3020],{"class":226,"line":3017},63,[224,3019,3011],{"class":234},[224,3021,3022],{"class":251}," Authorization\n",[224,3024,3026,3028],{"class":226,"line":3025},64,[224,3027,3011],{"class":234},[224,3029,3030],{"class":251}," X-Api-Key\n",[224,3032,3034,3037,3039],{"class":226,"line":3033},65,[224,3035,3036],{"class":432},"            allowCredentials",[224,3038,360],{"class":234},[224,3040,2539],{"class":1597},[224,3042,3044],{"class":226,"line":3043},66,[224,3045,3046],{"class":238},"          \n",[224,3048,3050],{"class":226,"line":3049},67,[224,3051,3052],{"class":319},"          # Binary media types\n",[224,3054,3056,3058],{"class":226,"line":3055},68,[224,3057,1359],{"class":432},[224,3059,1300],{"class":234},[224,3061,3063,3065,3067,3069],{"class":226,"line":3062},69,[224,3064,1366],{"class":234},[224,3066,248],{"class":234},[224,3068,1371],{"class":251},[224,3070,461],{"class":234},[224,3072,3074,3076,3078,3080],{"class":226,"line":3073},70,[224,3075,1366],{"class":234},[224,3077,248],{"class":234},[224,3079,1048],{"class":251},[224,3081,461],{"class":234},[224,3083,3085,3087,3089,3091],{"class":226,"line":3084},71,[224,3086,1366],{"class":234},[224,3088,248],{"class":234},[224,3090,1392],{"class":251},[224,3092,461],{"class":234},[224,3094,3096],{"class":226,"line":3095},72,[224,3097,1001],{"class":238},[224,3099,3101],{"class":226,"line":3100},73,[224,3102,3103],{"class":319},"    # Layer for dependencies\n",[224,3105,3107,3110],{"class":226,"line":3106},74,[224,3108,3109],{"class":432},"    layers",[224,3111,1300],{"class":234},[224,3113,3115,3117],{"class":226,"line":3114},75,[224,3116,1329],{"class":234},[224,3118,3119],{"class":251}," arn:aws:lambda:us-east-1:xxxxx:layer:my-dependencies:1\n",[224,3121,3123],{"class":226,"line":3122},76,[224,3124,1001],{"class":238},[224,3126,3128],{"class":226,"line":3127},77,[224,3129,3130],{"class":319},"    # Tags\n",[224,3132,3134,3137],{"class":226,"line":3133},78,[224,3135,3136],{"class":432},"    tags",[224,3138,1300],{"class":234},[224,3140,3142,3145,3147],{"class":226,"line":3141},79,[224,3143,3144],{"class":432},"      Environment",[224,3146,360],{"class":234},[224,3148,2826],{"class":251},[224,3150,3152,3155,3157],{"class":226,"line":3151},80,[224,3153,3154],{"class":432},"      Service",[224,3156,360],{"class":234},[224,3158,2368],{"class":251},[224,3160,3162],{"class":226,"line":3161},81,[224,3163,287],{"emptyLinePlaceholder":56},[224,3165,3167],{"class":226,"line":3166},82,[224,3168,3169],{"class":319},"# Plugins\n",[224,3171,3173,3176],{"class":226,"line":3172},83,[224,3174,3175],{"class":432},"plugins",[224,3177,1300],{"class":234},[224,3179,3181,3184],{"class":226,"line":3180},84,[224,3182,3183],{"class":234},"  -",[224,3185,3186],{"class":251}," serverless-offline\n",[224,3188,3190,3192],{"class":226,"line":3189},85,[224,3191,3183],{"class":234},[224,3193,3194],{"class":251}," serverless-plugin-typescript\n",[224,3196,3198],{"class":226,"line":3197},86,[224,3199,287],{"emptyLinePlaceholder":56},[224,3201,3203],{"class":226,"line":3202},87,[224,3204,3205],{"class":319},"# Custom configuration\n",[224,3207,3209,3212],{"class":226,"line":3208},88,[224,3210,3211],{"class":432},"custom",[224,3213,1300],{"class":234},[224,3215,3217,3220],{"class":226,"line":3216},89,[224,3218,3219],{"class":432},"  serverless-offline",[224,3221,1300],{"class":234},[224,3223,3225,3228,3230],{"class":226,"line":3224},90,[224,3226,3227],{"class":432},"    httpPort",[224,3229,360],{"class":234},[224,3231,3232],{"class":1659}," 3000\n",[208,3234,3236],{"id":3235},"cold-start-optimization","Cold Start Optimization",[204,3238,3239],{},"Minimize cold start times for better performance:",[350,3241,3243],{"id":3242},"module-level-initialization","Module-Level Initialization",[213,3245,3247],{"className":215,"code":3246,"filename":217,"language":218,"meta":219,"style":219},"import { createApp } from '@vercube\u002Fcore';\nimport { toServerlessHandler } from '@vercube\u002Fserverless\u002Faws-lambda';\nimport { DatabaseService } from '.\u002Fservices\u002FDatabase';\n\n\u002F\u002F Initialize app at module level (happens once per container)\nconst app = createApp({\n  setup: async (app) => {\n    \u002F\u002F Bind services\n    app.container.bind(DatabaseService);\n    \n    \u002F\u002F Initialize database connection (reused across invocations)\n    const db = app.container.get(DatabaseService);\n    await db.connect();\n  }\n});\n\n\u002F\u002F Export handler (execution is fast)\nexport const handler = toServerlessHandler(app);\n",[221,3248,3249,3269,3289,3311,3315,3320,3334,3356,3361,3385,3389,3394,3423,3439,3443,3451,3455,3460],{"__ignoreMap":219},[224,3250,3251,3253,3255,3257,3259,3261,3263,3265,3267],{"class":226,"line":227},[224,3252,231],{"class":230},[224,3254,235],{"class":234},[224,3256,239],{"class":238},[224,3258,242],{"class":234},[224,3260,245],{"class":230},[224,3262,248],{"class":234},[224,3264,252],{"class":251},[224,3266,255],{"class":234},[224,3268,258],{"class":234},[224,3270,3271,3273,3275,3277,3279,3281,3283,3285,3287],{"class":226,"line":261},[224,3272,231],{"class":230},[224,3274,235],{"class":234},[224,3276,268],{"class":238},[224,3278,242],{"class":234},[224,3280,245],{"class":230},[224,3282,248],{"class":234},[224,3284,277],{"class":251},[224,3286,255],{"class":234},[224,3288,258],{"class":234},[224,3290,3291,3293,3295,3298,3300,3302,3304,3307,3309],{"class":226,"line":284},[224,3292,231],{"class":230},[224,3294,235],{"class":234},[224,3296,3297],{"class":238}," DatabaseService",[224,3299,242],{"class":234},[224,3301,245],{"class":230},[224,3303,248],{"class":234},[224,3305,3306],{"class":251},".\u002Fservices\u002FDatabase",[224,3308,255],{"class":234},[224,3310,258],{"class":234},[224,3312,3313],{"class":226,"line":290},[224,3314,287],{"emptyLinePlaceholder":56},[224,3316,3317],{"class":226,"line":311},[224,3318,3319],{"class":319},"\u002F\u002F Initialize app at module level (happens once per container)\n",[224,3321,3322,3324,3326,3328,3330,3332],{"class":226,"line":316},[224,3323,294],{"class":293},[224,3325,297],{"class":238},[224,3327,300],{"class":234},[224,3329,239],{"class":303},[224,3331,847],{"class":238},[224,3333,375],{"class":234},[224,3335,3336,3339,3341,3344,3346,3349,3351,3354],{"class":226,"line":323},[224,3337,3338],{"class":303},"  setup",[224,3340,360],{"class":234},[224,3342,3343],{"class":293}," async",[224,3345,1881],{"class":234},[224,3347,3348],{"class":952},"app",[224,3350,960],{"class":234},[224,3352,3353],{"class":293}," =>",[224,3355,419],{"class":234},[224,3357,3358],{"class":226,"line":464},[224,3359,3360],{"class":319},"    \u002F\u002F Bind services\n",[224,3362,3363,3366,3368,3371,3373,3376,3378,3381,3383],{"class":226,"line":470},[224,3364,3365],{"class":238},"    app",[224,3367,985],{"class":234},[224,3369,3370],{"class":238},"container",[224,3372,985],{"class":234},[224,3374,3375],{"class":303},"bind",[224,3377,847],{"class":432},[224,3379,3380],{"class":238},"DatabaseService",[224,3382,960],{"class":432},[224,3384,258],{"class":234},[224,3386,3387],{"class":226,"line":487},[224,3388,1001],{"class":432},[224,3390,3391],{"class":226,"line":497},[224,3392,3393],{"class":319},"    \u002F\u002F Initialize database connection (reused across invocations)\n",[224,3395,3396,3398,3401,3403,3406,3408,3410,3412,3415,3417,3419,3421],{"class":226,"line":514},[224,3397,967],{"class":293},[224,3399,3400],{"class":238}," db",[224,3402,973],{"class":234},[224,3404,3405],{"class":238}," app",[224,3407,985],{"class":234},[224,3409,3370],{"class":238},[224,3411,985],{"class":234},[224,3413,3414],{"class":303},"get",[224,3416,847],{"class":432},[224,3418,3380],{"class":238},[224,3420,960],{"class":432},[224,3422,258],{"class":234},[224,3424,3425,3428,3430,3432,3435,3437],{"class":226,"line":529},[224,3426,3427],{"class":230},"    await",[224,3429,3400],{"class":238},[224,3431,985],{"class":234},[224,3433,3434],{"class":303},"connect",[224,3436,306],{"class":432},[224,3438,258],{"class":234},[224,3440,3441],{"class":226,"line":534},[224,3442,562],{"class":234},[224,3444,3445,3447,3449],{"class":226,"line":544},[224,3446,1077],{"class":234},[224,3448,960],{"class":238},[224,3450,258],{"class":234},[224,3452,3453],{"class":226,"line":559},[224,3454,287],{"emptyLinePlaceholder":56},[224,3456,3457],{"class":226,"line":565},[224,3458,3459],{"class":319},"\u002F\u002F Export handler (execution is fast)\n",[224,3461,3462,3464,3466,3468,3470,3472,3474],{"class":226,"line":777},[224,3463,326],{"class":230},[224,3465,329],{"class":293},[224,3467,332],{"class":238},[224,3469,300],{"class":234},[224,3471,268],{"class":303},[224,3473,339],{"class":238},[224,3475,258],{"class":234},[350,3477,3479],{"id":3478},"lazy-loading-heavy-dependencies","Lazy Loading Heavy Dependencies",[213,3481,3483],{"className":215,"code":3482,"language":218,"meta":219,"style":219},"export class HeavyServiceFactory {\n  private static instance: HeavyService | null = null;\n  \n  static async getInstance() {\n    if (!this.instance) {\n      \u002F\u002F Only import when needed\n      const { HeavyService } = await import('.\u002FHeavyService');\n      this.instance = new HeavyService();\n    }\n    return this.instance;\n  }\n}\n\n@Controller('\u002Fheavy')\nexport class HeavyController {\n  \n  @Get('\u002Fprocess')\n  async process() {\n    \u002F\u002F Load heavy service only when this endpoint is called\n    const service = await HeavyServiceFactory.getInstance();\n    return await service.process();\n  }\n}\n",[221,3484,3485,3496,3522,3526,3540,3556,3561,3592,3609,3613,3623,3627,3631,3635,3652,3663,3667,3684,3694,3699,3721,3738,3742],{"__ignoreMap":219},[224,3486,3487,3489,3491,3494],{"class":226,"line":227},[224,3488,326],{"class":230},[224,3490,864],{"class":293},[224,3492,3493],{"class":380}," HeavyServiceFactory",[224,3495,419],{"class":234},[224,3497,3498,3500,3503,3506,3508,3511,3514,3517,3519],{"class":226,"line":261},[224,3499,890],{"class":293},[224,3501,3502],{"class":293}," static",[224,3504,3505],{"class":432}," instance",[224,3507,360],{"class":234},[224,3509,3510],{"class":380}," HeavyService",[224,3512,3513],{"class":234}," |",[224,3515,3516],{"class":380}," null",[224,3518,973],{"class":234},[224,3520,3521],{"class":234}," null;\n",[224,3523,3524],{"class":226,"line":284},[224,3525,874],{"class":238},[224,3527,3528,3531,3533,3536,3538],{"class":226,"line":290},[224,3529,3530],{"class":293},"  static",[224,3532,3343],{"class":293},[224,3534,3535],{"class":432}," getInstance",[224,3537,306],{"class":234},[224,3539,419],{"class":234},[224,3541,3542,3544,3546,3549,3552,3554],{"class":226,"line":311},[224,3543,1878],{"class":230},[224,3545,1881],{"class":432},[224,3547,3548],{"class":234},"!this.",[224,3550,3551],{"class":238},"instance",[224,3553,949],{"class":432},[224,3555,375],{"class":234},[224,3557,3558],{"class":226,"line":316},[224,3559,3560],{"class":319},"      \u002F\u002F Only import when needed\n",[224,3562,3563,3566,3568,3570,3572,3574,3576,3579,3581,3583,3586,3588,3590],{"class":226,"line":323},[224,3564,3565],{"class":293},"      const",[224,3567,235],{"class":234},[224,3569,3510],{"class":238},[224,3571,242],{"class":234},[224,3573,973],{"class":234},[224,3575,976],{"class":230},[224,3577,3578],{"class":234}," import",[224,3580,847],{"class":432},[224,3582,255],{"class":234},[224,3584,3585],{"class":251},".\u002FHeavyService",[224,3587,255],{"class":234},[224,3589,960],{"class":432},[224,3591,258],{"class":234},[224,3593,3594,3597,3599,3601,3603,3605,3607],{"class":226,"line":464},[224,3595,3596],{"class":234},"      this.",[224,3598,3551],{"class":238},[224,3600,973],{"class":234},[224,3602,1009],{"class":234},[224,3604,3510],{"class":303},[224,3606,306],{"class":432},[224,3608,258],{"class":234},[224,3610,3611],{"class":226,"line":470},[224,3612,672],{"class":234},[224,3614,3615,3617,3619,3621],{"class":226,"line":487},[224,3616,1006],{"class":230},[224,3618,979],{"class":234},[224,3620,3551],{"class":238},[224,3622,258],{"class":234},[224,3624,3625],{"class":226,"line":497},[224,3626,562],{"class":234},[224,3628,3629],{"class":226,"line":514},[224,3630,568],{"class":234},[224,3632,3633],{"class":226,"line":529},[224,3634,287],{"emptyLinePlaceholder":56},[224,3636,3637,3639,3641,3643,3645,3648,3650],{"class":226,"line":534},[224,3638,841],{"class":234},[224,3640,844],{"class":303},[224,3642,847],{"class":238},[224,3644,255],{"class":234},[224,3646,3647],{"class":251},"\u002Fheavy",[224,3649,255],{"class":234},[224,3651,857],{"class":238},[224,3653,3654,3656,3658,3661],{"class":226,"line":544},[224,3655,326],{"class":230},[224,3657,864],{"class":293},[224,3659,3660],{"class":380}," HeavyController",[224,3662,419],{"class":234},[224,3664,3665],{"class":226,"line":559},[224,3666,874],{"class":238},[224,3668,3669,3671,3673,3675,3677,3680,3682],{"class":226,"line":565},[224,3670,879],{"class":234},[224,3672,912],{"class":303},[224,3674,847],{"class":238},[224,3676,255],{"class":234},[224,3678,3679],{"class":251},"\u002Fprocess",[224,3681,255],{"class":234},[224,3683,857],{"class":238},[224,3685,3686,3688,3690,3692],{"class":226,"line":777},[224,3687,928],{"class":293},[224,3689,2115],{"class":432},[224,3691,306],{"class":234},[224,3693,419],{"class":234},[224,3695,3696],{"class":226,"line":786},[224,3697,3698],{"class":319},"    \u002F\u002F Load heavy service only when this endpoint is called\n",[224,3700,3701,3703,3706,3708,3710,3712,3714,3717,3719],{"class":226,"line":799},[224,3702,967],{"class":293},[224,3704,3705],{"class":238}," service",[224,3707,973],{"class":234},[224,3709,976],{"class":230},[224,3711,3493],{"class":238},[224,3713,985],{"class":234},[224,3715,3716],{"class":303},"getInstance",[224,3718,306],{"class":432},[224,3720,258],{"class":234},[224,3722,3723,3725,3727,3729,3731,3734,3736],{"class":226,"line":804},[224,3724,1006],{"class":230},[224,3726,976],{"class":230},[224,3728,3705],{"class":238},[224,3730,985],{"class":234},[224,3732,3733],{"class":303},"process",[224,3735,306],{"class":432},[224,3737,258],{"class":234},[224,3739,3740],{"class":226,"line":1184},[224,3741,562],{"class":234},[224,3743,3744],{"class":226,"line":1189},[224,3745,568],{"class":234},[350,3747,3749],{"id":3748},"provisioned-concurrency","Provisioned Concurrency",[204,3751,3752],{},"Keep functions warm to eliminate cold starts:",[213,3754,3756],{"className":1287,"code":3755,"filename":1289,"language":1290,"meta":219,"style":219},"functions:\n  api:\n    handler: lambda.handler\n    provisionedConcurrency: 5  # Keep 5 instances always warm\n    \n    # Or use auto-scaling\n    provisionedConcurrency:\n      minCapacity: 2\n      maxCapacity: 10\n      targetUtilizationPercent: 0.75\n",[221,3757,3758,3764,3770,3778,3790,3794,3799,3805,3814,3824],{"__ignoreMap":219},[224,3759,3760,3762],{"class":226,"line":227},[224,3761,1297],{"class":432},[224,3763,1300],{"class":234},[224,3765,3766,3768],{"class":226,"line":261},[224,3767,1305],{"class":432},[224,3769,1300],{"class":234},[224,3771,3772,3774,3776],{"class":226,"line":284},[224,3773,1312],{"class":432},[224,3775,360],{"class":234},[224,3777,1317],{"class":251},[224,3779,3780,3782,3784,3787],{"class":226,"line":290},[224,3781,2909],{"class":432},[224,3783,360],{"class":234},[224,3785,3786],{"class":1659}," 5",[224,3788,3789],{"class":319},"  # Keep 5 instances always warm\n",[224,3791,3792],{"class":226,"line":311},[224,3793,1001],{"class":238},[224,3795,3796],{"class":226,"line":316},[224,3797,3798],{"class":319},"    # Or use auto-scaling\n",[224,3800,3801,3803],{"class":226,"line":323},[224,3802,2909],{"class":432},[224,3804,1300],{"class":234},[224,3806,3807,3810,3812],{"class":226,"line":464},[224,3808,3809],{"class":432},"      minCapacity",[224,3811,360],{"class":234},[224,3813,2914],{"class":1659},[224,3815,3816,3819,3821],{"class":226,"line":470},[224,3817,3818],{"class":432},"      maxCapacity",[224,3820,360],{"class":234},[224,3822,3823],{"class":1659}," 10\n",[224,3825,3826,3829,3831],{"class":226,"line":487},[224,3827,3828],{"class":432},"      targetUtilizationPercent",[224,3830,360],{"class":234},[224,3832,3833],{"class":1659}," 0.75\n",[208,3835,3837],{"id":3836},"database-connections","Database Connections",[204,3839,3840],{},"Handle database connections efficiently in Lambda:",[350,3842,3844],{"id":3843},"connection-pooling","Connection Pooling",[213,3846,3848],{"className":215,"code":3847,"language":218,"meta":219,"style":219},"export class DatabaseService {\n  private static pool: Pool | null = null;\n  \n  async getPool() {\n    \u002F\u002F Reuse connection pool across invocations\n    if (DatabaseService.pool) {\n      return DatabaseService.pool;\n    }\n    \n    DatabaseService.pool = new Pool({\n      host: process.env.DB_HOST,\n      port: Number(process.env.DB_PORT),\n      user: process.env.DB_USER,\n      password: process.env.DB_PASSWORD,\n      database: process.env.DB_NAME,\n      \n      \u002F\u002F Lambda-optimized settings\n      max: 1,  \u002F\u002F Single connection per Lambda instance\n      idleTimeoutMillis: 30000,\n      connectionTimeoutMillis: 2000\n    });\n    \n    return DatabaseService.pool;\n  }\n  \n  async query(sql: string, params?: any[]) {\n    const pool = await this.getPool();\n    return await pool.query(sql, params);\n  }\n}\n",[221,3849,3850,3860,3882,3886,3897,3902,3919,3932,3936,3940,3959,3979,4006,4026,4046,4066,4071,4076,4091,4103,4113,4121,4125,4137,4141,4145,4179,4198,4223,4227],{"__ignoreMap":219},[224,3851,3852,3854,3856,3858],{"class":226,"line":227},[224,3853,326],{"class":230},[224,3855,864],{"class":293},[224,3857,3297],{"class":380},[224,3859,419],{"class":234},[224,3861,3862,3864,3866,3869,3871,3874,3876,3878,3880],{"class":226,"line":261},[224,3863,890],{"class":293},[224,3865,3502],{"class":293},[224,3867,3868],{"class":432}," pool",[224,3870,360],{"class":234},[224,3872,3873],{"class":380}," Pool",[224,3875,3513],{"class":234},[224,3877,3516],{"class":380},[224,3879,973],{"class":234},[224,3881,3521],{"class":234},[224,3883,3884],{"class":226,"line":284},[224,3885,874],{"class":238},[224,3887,3888,3890,3893,3895],{"class":226,"line":290},[224,3889,928],{"class":293},[224,3891,3892],{"class":432}," getPool",[224,3894,306],{"class":234},[224,3896,419],{"class":234},[224,3898,3899],{"class":226,"line":311},[224,3900,3901],{"class":319},"    \u002F\u002F Reuse connection pool across invocations\n",[224,3903,3904,3906,3908,3910,3912,3915,3917],{"class":226,"line":316},[224,3905,1878],{"class":230},[224,3907,1881],{"class":432},[224,3909,3380],{"class":238},[224,3911,985],{"class":234},[224,3913,3914],{"class":238},"pool",[224,3916,949],{"class":432},[224,3918,375],{"class":234},[224,3920,3921,3924,3926,3928,3930],{"class":226,"line":323},[224,3922,3923],{"class":230},"      return",[224,3925,3297],{"class":238},[224,3927,985],{"class":234},[224,3929,3914],{"class":238},[224,3931,258],{"class":234},[224,3933,3934],{"class":226,"line":464},[224,3935,672],{"class":234},[224,3937,3938],{"class":226,"line":470},[224,3939,1001],{"class":432},[224,3941,3942,3945,3947,3949,3951,3953,3955,3957],{"class":226,"line":487},[224,3943,3944],{"class":238},"    DatabaseService",[224,3946,985],{"class":234},[224,3948,3914],{"class":238},[224,3950,973],{"class":234},[224,3952,1009],{"class":234},[224,3954,3873],{"class":303},[224,3956,847],{"class":432},[224,3958,375],{"class":234},[224,3960,3961,3964,3966,3968,3970,3972,3974,3977],{"class":226,"line":497},[224,3962,3963],{"class":432},"      host",[224,3965,360],{"class":234},[224,3967,2115],{"class":238},[224,3969,985],{"class":234},[224,3971,2120],{"class":238},[224,3973,985],{"class":234},[224,3975,3976],{"class":238},"DB_HOST",[224,3978,393],{"class":234},[224,3980,3981,3984,3986,3989,3991,3993,3995,3997,3999,4002,4004],{"class":226,"line":514},[224,3982,3983],{"class":432},"      port",[224,3985,360],{"class":234},[224,3987,3988],{"class":303}," Number",[224,3990,847],{"class":432},[224,3992,3733],{"class":238},[224,3994,985],{"class":234},[224,3996,2120],{"class":238},[224,3998,985],{"class":234},[224,4000,4001],{"class":238},"DB_PORT",[224,4003,960],{"class":432},[224,4005,393],{"class":234},[224,4007,4008,4011,4013,4015,4017,4019,4021,4024],{"class":226,"line":529},[224,4009,4010],{"class":432},"      user",[224,4012,360],{"class":234},[224,4014,2115],{"class":238},[224,4016,985],{"class":234},[224,4018,2120],{"class":238},[224,4020,985],{"class":234},[224,4022,4023],{"class":238},"DB_USER",[224,4025,393],{"class":234},[224,4027,4028,4031,4033,4035,4037,4039,4041,4044],{"class":226,"line":534},[224,4029,4030],{"class":432},"      password",[224,4032,360],{"class":234},[224,4034,2115],{"class":238},[224,4036,985],{"class":234},[224,4038,2120],{"class":238},[224,4040,985],{"class":234},[224,4042,4043],{"class":238},"DB_PASSWORD",[224,4045,393],{"class":234},[224,4047,4048,4051,4053,4055,4057,4059,4061,4064],{"class":226,"line":544},[224,4049,4050],{"class":432},"      database",[224,4052,360],{"class":234},[224,4054,2115],{"class":238},[224,4056,985],{"class":234},[224,4058,2120],{"class":238},[224,4060,985],{"class":234},[224,4062,4063],{"class":238},"DB_NAME",[224,4065,393],{"class":234},[224,4067,4068],{"class":226,"line":559},[224,4069,4070],{"class":432},"      \n",[224,4072,4073],{"class":226,"line":565},[224,4074,4075],{"class":319},"      \u002F\u002F Lambda-optimized settings\n",[224,4077,4078,4081,4083,4086,4088],{"class":226,"line":777},[224,4079,4080],{"class":432},"      max",[224,4082,360],{"class":234},[224,4084,4085],{"class":1659}," 1",[224,4087,1020],{"class":234},[224,4089,4090],{"class":319},"  \u002F\u002F Single connection per Lambda instance\n",[224,4092,4093,4096,4098,4101],{"class":226,"line":786},[224,4094,4095],{"class":432},"      idleTimeoutMillis",[224,4097,360],{"class":234},[224,4099,4100],{"class":1659}," 30000",[224,4102,393],{"class":234},[224,4104,4105,4108,4110],{"class":226,"line":799},[224,4106,4107],{"class":432},"      connectionTimeoutMillis",[224,4109,360],{"class":234},[224,4111,4112],{"class":1659}," 2000\n",[224,4114,4115,4117,4119],{"class":226,"line":804},[224,4116,1093],{"class":234},[224,4118,960],{"class":432},[224,4120,258],{"class":234},[224,4122,4123],{"class":226,"line":1184},[224,4124,1001],{"class":432},[224,4126,4127,4129,4131,4133,4135],{"class":226,"line":1189},[224,4128,1006],{"class":230},[224,4130,3297],{"class":238},[224,4132,985],{"class":234},[224,4134,3914],{"class":238},[224,4136,258],{"class":234},[224,4138,4139],{"class":226,"line":1207},[224,4140,562],{"class":234},[224,4142,4143],{"class":226,"line":1216},[224,4144,874],{"class":238},[224,4146,4147,4149,4152,4154,4157,4159,4161,4163,4166,4169,4172,4175,4177],{"class":226,"line":1234},[224,4148,928],{"class":293},[224,4150,4151],{"class":432}," query",[224,4153,847],{"class":234},[224,4155,4156],{"class":952},"sql",[224,4158,360],{"class":234},[224,4160,957],{"class":380},[224,4162,1020],{"class":234},[224,4164,4165],{"class":952}," params",[224,4167,4168],{"class":234},"?:",[224,4170,4171],{"class":380}," any",[224,4173,4174],{"class":238},"[]",[224,4176,960],{"class":234},[224,4178,419],{"class":234},[224,4180,4181,4183,4185,4187,4189,4191,4194,4196],{"class":226,"line":1239},[224,4182,967],{"class":293},[224,4184,3868],{"class":238},[224,4186,973],{"class":234},[224,4188,976],{"class":230},[224,4190,979],{"class":234},[224,4192,4193],{"class":303},"getPool",[224,4195,306],{"class":432},[224,4197,258],{"class":234},[224,4199,4200,4202,4204,4206,4208,4211,4213,4215,4217,4219,4221],{"class":226,"line":1248},[224,4201,1006],{"class":230},[224,4203,976],{"class":230},[224,4205,3868],{"class":238},[224,4207,985],{"class":234},[224,4209,4210],{"class":303},"query",[224,4212,847],{"class":432},[224,4214,4156],{"class":238},[224,4216,1020],{"class":234},[224,4218,4165],{"class":238},[224,4220,960],{"class":432},[224,4222,258],{"class":234},[224,4224,4225],{"class":226,"line":1253},[224,4226,562],{"class":234},[224,4228,4229],{"class":226,"line":1813},[224,4230,568],{"class":234},[350,4232,4234],{"id":4233},"rds-proxy","RDS Proxy",[204,4236,4237],{},"Use RDS Proxy to manage database connections:",[213,4239,4241],{"className":1287,"code":4240,"filename":1289,"language":1290,"meta":219,"style":219},"provider:\n  environment:\n    DB_HOST: my-rds-proxy.proxy-xxxxxxxxx.us-east-1.rds.amazonaws.com\n    DB_PORT: 5432\n  \n  iam:\n    role:\n      statements:\n        - Effect: Allow\n          Action:\n            - rds-db:connect\n          Resource: 'arn:aws:rds-db:us-east-1:xxxxx:dbuser:prx-xxxxx\u002F*'\n",[221,4242,4243,4249,4255,4265,4275,4279,4285,4291,4297,4307,4313,4320],{"__ignoreMap":219},[224,4244,4245,4247],{"class":226,"line":227},[224,4246,2377],{"class":432},[224,4248,1300],{"class":234},[224,4250,4251,4253],{"class":226,"line":261},[224,4252,2443],{"class":432},[224,4254,1300],{"class":234},[224,4256,4257,4260,4262],{"class":226,"line":284},[224,4258,4259],{"class":432},"    DB_HOST",[224,4261,360],{"class":234},[224,4263,4264],{"class":251}," my-rds-proxy.proxy-xxxxxxxxx.us-east-1.rds.amazonaws.com\n",[224,4266,4267,4270,4272],{"class":226,"line":290},[224,4268,4269],{"class":432},"    DB_PORT",[224,4271,360],{"class":234},[224,4273,4274],{"class":1659}," 5432\n",[224,4276,4277],{"class":226,"line":311},[224,4278,874],{"class":238},[224,4280,4281,4283],{"class":226,"line":316},[224,4282,2682],{"class":432},[224,4284,1300],{"class":234},[224,4286,4287,4289],{"class":226,"line":323},[224,4288,2689],{"class":432},[224,4290,1300],{"class":234},[224,4292,4293,4295],{"class":226,"line":464},[224,4294,2696],{"class":432},[224,4296,1300],{"class":234},[224,4298,4299,4301,4303,4305],{"class":226,"line":470},[224,4300,2703],{"class":234},[224,4302,2706],{"class":432},[224,4304,360],{"class":234},[224,4306,2711],{"class":251},[224,4308,4309,4311],{"class":226,"line":487},[224,4310,2716],{"class":432},[224,4312,1300],{"class":234},[224,4314,4315,4317],{"class":226,"line":497},[224,4316,1366],{"class":234},[224,4318,4319],{"class":251}," rds-db:connect\n",[224,4321,4322,4324,4326,4328,4331],{"class":226,"line":514},[224,4323,2737],{"class":432},[224,4325,360],{"class":234},[224,4327,248],{"class":234},[224,4329,4330],{"class":251},"arn:aws:rds-db:us-east-1:xxxxx:dbuser:prx-xxxxx\u002F*",[224,4332,461],{"class":234},[208,4334,4336],{"id":4335},"advanced-response-handling","Advanced Response Handling",[350,4338,4340],{"id":4339},"custom-headers","Custom Headers",[213,4342,4344],{"className":215,"code":4343,"language":218,"meta":219,"style":219},"@Controller('\u002Fapi')\nexport class ApiController {\n  \n  @Get('\u002Fcached-data')\n  getCachedData() {\n    return FastResponse.ok({ data: 'cached' })\n      .header('Cache-Control', 'public, max-age=3600')\n      .header('X-Custom-Header', 'custom-value');\n  }\n  \n  @Get('\u002Fstreaming-data')\n  getStreamingData() {\n    const stream = this.createDataStream();\n    \n    return new Response(stream, {\n      headers: {\n        'Content-Type': 'application\u002Fjson',\n        'Transfer-Encoding': 'chunked'\n      }\n    });\n  }\n}\n",[221,4345,4346,4363,4374,4378,4395,4404,4434,4461,4489,4493,4497,4514,4523,4541,4545,4562,4570,4588,4606,4610,4618,4622],{"__ignoreMap":219},[224,4347,4348,4350,4352,4354,4356,4359,4361],{"class":226,"line":227},[224,4349,841],{"class":234},[224,4351,844],{"class":303},[224,4353,847],{"class":238},[224,4355,255],{"class":234},[224,4357,4358],{"class":251},"\u002Fapi",[224,4360,255],{"class":234},[224,4362,857],{"class":238},[224,4364,4365,4367,4369,4372],{"class":226,"line":261},[224,4366,326],{"class":230},[224,4368,864],{"class":293},[224,4370,4371],{"class":380}," ApiController",[224,4373,419],{"class":234},[224,4375,4376],{"class":226,"line":284},[224,4377,874],{"class":238},[224,4379,4380,4382,4384,4386,4388,4391,4393],{"class":226,"line":290},[224,4381,879],{"class":234},[224,4383,912],{"class":303},[224,4385,847],{"class":238},[224,4387,255],{"class":234},[224,4389,4390],{"class":251},"\u002Fcached-data",[224,4392,255],{"class":234},[224,4394,857],{"class":238},[224,4396,4397,4400,4402],{"class":226,"line":311},[224,4398,4399],{"class":432},"  getCachedData",[224,4401,306],{"class":234},[224,4403,419],{"class":234},[224,4405,4406,4408,4410,4412,4414,4416,4418,4421,4423,4425,4428,4430,4432],{"class":226,"line":316},[224,4407,1006],{"class":230},[224,4409,1580],{"class":238},[224,4411,985],{"class":234},[224,4413,1585],{"class":303},[224,4415,847],{"class":432},[224,4417,1511],{"class":234},[224,4419,4420],{"class":432}," data",[224,4422,360],{"class":234},[224,4424,248],{"class":234},[224,4426,4427],{"class":251},"cached",[224,4429,255],{"class":234},[224,4431,242],{"class":234},[224,4433,857],{"class":432},[224,4435,4436,4438,4441,4443,4445,4448,4450,4452,4454,4457,4459],{"class":226,"line":323},[224,4437,1607],{"class":234},[224,4439,4440],{"class":303},"header",[224,4442,847],{"class":432},[224,4444,255],{"class":234},[224,4446,4447],{"class":251},"Cache-Control",[224,4449,255],{"class":234},[224,4451,1020],{"class":234},[224,4453,248],{"class":234},[224,4455,4456],{"class":251},"public, max-age=3600",[224,4458,255],{"class":234},[224,4460,857],{"class":432},[224,4462,4463,4465,4467,4469,4471,4474,4476,4478,4480,4483,4485,4487],{"class":226,"line":464},[224,4464,1607],{"class":234},[224,4466,4440],{"class":303},[224,4468,847],{"class":432},[224,4470,255],{"class":234},[224,4472,4473],{"class":251},"X-Custom-Header",[224,4475,255],{"class":234},[224,4477,1020],{"class":234},[224,4479,248],{"class":234},[224,4481,4482],{"class":251},"custom-value",[224,4484,255],{"class":234},[224,4486,960],{"class":432},[224,4488,258],{"class":234},[224,4490,4491],{"class":226,"line":470},[224,4492,562],{"class":234},[224,4494,4495],{"class":226,"line":487},[224,4496,874],{"class":238},[224,4498,4499,4501,4503,4505,4507,4510,4512],{"class":226,"line":497},[224,4500,879],{"class":234},[224,4502,912],{"class":303},[224,4504,847],{"class":238},[224,4506,255],{"class":234},[224,4508,4509],{"class":251},"\u002Fstreaming-data",[224,4511,255],{"class":234},[224,4513,857],{"class":238},[224,4515,4516,4519,4521],{"class":226,"line":514},[224,4517,4518],{"class":432},"  getStreamingData",[224,4520,306],{"class":234},[224,4522,419],{"class":234},[224,4524,4525,4527,4530,4532,4534,4537,4539],{"class":226,"line":529},[224,4526,967],{"class":293},[224,4528,4529],{"class":238}," stream",[224,4531,973],{"class":234},[224,4533,979],{"class":234},[224,4535,4536],{"class":303},"createDataStream",[224,4538,306],{"class":432},[224,4540,258],{"class":234},[224,4542,4543],{"class":226,"line":534},[224,4544,1001],{"class":432},[224,4546,4547,4549,4551,4553,4555,4558,4560],{"class":226,"line":544},[224,4548,1006],{"class":230},[224,4550,1009],{"class":234},[224,4552,1012],{"class":303},[224,4554,847],{"class":432},[224,4556,4557],{"class":238},"stream",[224,4559,1020],{"class":234},[224,4561,419],{"class":234},[224,4563,4564,4566,4568],{"class":226,"line":559},[224,4565,1027],{"class":432},[224,4567,360],{"class":234},[224,4569,419],{"class":234},[224,4571,4572,4574,4576,4578,4580,4582,4584,4586],{"class":226,"line":565},[224,4573,1036],{"class":234},[224,4575,1039],{"class":432},[224,4577,255],{"class":234},[224,4579,360],{"class":234},[224,4581,248],{"class":234},[224,4583,438],{"class":251},[224,4585,255],{"class":234},[224,4587,393],{"class":234},[224,4589,4590,4592,4595,4597,4599,4601,4604],{"class":226,"line":777},[224,4591,1036],{"class":234},[224,4593,4594],{"class":432},"Transfer-Encoding",[224,4596,255],{"class":234},[224,4598,360],{"class":234},[224,4600,248],{"class":234},[224,4602,4603],{"class":251},"chunked",[224,4605,461],{"class":234},[224,4607,4608],{"class":226,"line":786},[224,4609,1088],{"class":234},[224,4611,4612,4614,4616],{"class":226,"line":799},[224,4613,1093],{"class":234},[224,4615,960],{"class":432},[224,4617,258],{"class":234},[224,4619,4620],{"class":226,"line":804},[224,4621,562],{"class":234},[224,4623,4624],{"class":226,"line":1184},[224,4625,568],{"class":234},[350,4627,4629],{"id":4628},"error-handling","Error Handling",[213,4631,4633],{"className":215,"code":4632,"language":218,"meta":219,"style":219},"import { NotFoundException, BadRequestException, InternalServerErrorException } from '@vercube\u002Fcore';\n\n@Controller('\u002Fusers')\nexport class UserController {\n  \n  @Get('\u002F:id')\n  async getUser(@Param('id') id: string) {\n    try {\n      const user = await this.userService.findById(id);\n      \n      if (!user) {\n        throw new NotFoundException(`User with ID ${id} not found`);\n      }\n      \n      return user;\n    } catch (error) {\n      if (error instanceof NotFoundException) {\n        throw error;\n      }\n      \n      \u002F\u002F Log unexpected errors\n      console.error('Error fetching user:', error);\n      throw new InternalServerErrorException('Failed to fetch user');\n    }\n  }\n}\n\n\u002F\u002F Automatically returns proper AWS response:\n\u002F\u002F {\n\u002F\u002F   statusCode: 404,\n\u002F\u002F   headers: { 'Content-Type': 'application\u002Fjson' },\n\u002F\u002F   body: '{\"statusCode\":404,\"message\":\"User with ID ... not found\"}'\n\u002F\u002F }\n",[221,4634,4635,4666,4670,4687,4698,4702,4719,4750,4757,4786,4790,4806,4838,4842,4846,4854,4870,4887,4896,4900,4904,4909,4935,4956,4960,4964,4968,4972,4977,4982,4987,4992,4997],{"__ignoreMap":219},[224,4636,4637,4639,4641,4644,4646,4649,4651,4654,4656,4658,4660,4662,4664],{"class":226,"line":227},[224,4638,231],{"class":230},[224,4640,235],{"class":234},[224,4642,4643],{"class":238}," NotFoundException",[224,4645,1020],{"class":234},[224,4647,4648],{"class":238}," BadRequestException",[224,4650,1020],{"class":234},[224,4652,4653],{"class":238}," InternalServerErrorException",[224,4655,242],{"class":234},[224,4657,245],{"class":230},[224,4659,248],{"class":234},[224,4661,252],{"class":251},[224,4663,255],{"class":234},[224,4665,258],{"class":234},[224,4667,4668],{"class":226,"line":261},[224,4669,287],{"emptyLinePlaceholder":56},[224,4671,4672,4674,4676,4678,4680,4683,4685],{"class":226,"line":284},[224,4673,841],{"class":234},[224,4675,844],{"class":303},[224,4677,847],{"class":238},[224,4679,255],{"class":234},[224,4681,4682],{"class":251},"\u002Fusers",[224,4684,255],{"class":234},[224,4686,857],{"class":238},[224,4688,4689,4691,4693,4696],{"class":226,"line":290},[224,4690,326],{"class":230},[224,4692,864],{"class":293},[224,4694,4695],{"class":380}," UserController",[224,4697,419],{"class":234},[224,4699,4700],{"class":226,"line":311},[224,4701,874],{"class":238},[224,4703,4704,4706,4708,4710,4712,4715,4717],{"class":226,"line":316},[224,4705,879],{"class":234},[224,4707,912],{"class":303},[224,4709,847],{"class":238},[224,4711,255],{"class":234},[224,4713,4714],{"class":251},"\u002F:id",[224,4716,255],{"class":234},[224,4718,857],{"class":238},[224,4720,4721,4723,4726,4728,4730,4732,4734,4736,4738,4740,4742,4744,4746,4748],{"class":226,"line":323},[224,4722,928],{"class":293},[224,4724,4725],{"class":432}," getUser",[224,4727,934],{"class":234},[224,4729,937],{"class":303},[224,4731,847],{"class":238},[224,4733,255],{"class":234},[224,4735,944],{"class":251},[224,4737,255],{"class":234},[224,4739,949],{"class":238},[224,4741,944],{"class":952},[224,4743,360],{"class":234},[224,4745,957],{"class":380},[224,4747,960],{"class":234},[224,4749,419],{"class":234},[224,4751,4752,4755],{"class":226,"line":464},[224,4753,4754],{"class":230},"    try",[224,4756,419],{"class":234},[224,4758,4759,4761,4764,4766,4768,4770,4773,4775,4778,4780,4782,4784],{"class":226,"line":470},[224,4760,3565],{"class":293},[224,4762,4763],{"class":238}," user",[224,4765,973],{"class":234},[224,4767,976],{"class":230},[224,4769,979],{"class":234},[224,4771,4772],{"class":238},"userService",[224,4774,985],{"class":234},[224,4776,4777],{"class":303},"findById",[224,4779,847],{"class":432},[224,4781,944],{"class":238},[224,4783,960],{"class":432},[224,4785,258],{"class":234},[224,4787,4788],{"class":226,"line":487},[224,4789,4070],{"class":432},[224,4791,4792,4795,4797,4799,4802,4804],{"class":226,"line":497},[224,4793,4794],{"class":230},"      if",[224,4796,1881],{"class":432},[224,4798,1884],{"class":234},[224,4800,4801],{"class":238},"user",[224,4803,949],{"class":432},[224,4805,375],{"class":234},[224,4807,4808,4811,4813,4815,4817,4820,4823,4825,4827,4829,4832,4834,4836],{"class":226,"line":514},[224,4809,4810],{"class":230},"        throw",[224,4812,1009],{"class":234},[224,4814,4643],{"class":303},[224,4816,847],{"class":432},[224,4818,4819],{"class":234},"`",[224,4821,4822],{"class":251},"User with ID ",[224,4824,1072],{"class":234},[224,4826,944],{"class":238},[224,4828,1077],{"class":234},[224,4830,4831],{"class":251}," not found",[224,4833,4819],{"class":234},[224,4835,960],{"class":432},[224,4837,258],{"class":234},[224,4839,4840],{"class":226,"line":529},[224,4841,1088],{"class":234},[224,4843,4844],{"class":226,"line":534},[224,4845,4070],{"class":432},[224,4847,4848,4850,4852],{"class":226,"line":544},[224,4849,3923],{"class":230},[224,4851,4763],{"class":238},[224,4853,258],{"class":234},[224,4855,4856,4858,4861,4863,4866,4868],{"class":226,"line":559},[224,4857,1093],{"class":234},[224,4859,4860],{"class":230}," catch",[224,4862,1881],{"class":432},[224,4864,4865],{"class":238},"error",[224,4867,949],{"class":432},[224,4869,375],{"class":234},[224,4871,4872,4874,4876,4878,4881,4883,4885],{"class":226,"line":565},[224,4873,4794],{"class":230},[224,4875,1881],{"class":432},[224,4877,4865],{"class":238},[224,4879,4880],{"class":234}," instanceof",[224,4882,4643],{"class":380},[224,4884,949],{"class":432},[224,4886,375],{"class":234},[224,4888,4889,4891,4894],{"class":226,"line":777},[224,4890,4810],{"class":230},[224,4892,4893],{"class":238}," error",[224,4895,258],{"class":234},[224,4897,4898],{"class":226,"line":786},[224,4899,1088],{"class":234},[224,4901,4902],{"class":226,"line":799},[224,4903,4070],{"class":432},[224,4905,4906],{"class":226,"line":804},[224,4907,4908],{"class":319},"      \u002F\u002F Log unexpected errors\n",[224,4910,4911,4914,4916,4918,4920,4922,4925,4927,4929,4931,4933],{"class":226,"line":1184},[224,4912,4913],{"class":238},"      console",[224,4915,985],{"class":234},[224,4917,4865],{"class":303},[224,4919,847],{"class":432},[224,4921,255],{"class":234},[224,4923,4924],{"class":251},"Error fetching user:",[224,4926,255],{"class":234},[224,4928,1020],{"class":234},[224,4930,4893],{"class":238},[224,4932,960],{"class":432},[224,4934,258],{"class":234},[224,4936,4937,4939,4941,4943,4945,4947,4950,4952,4954],{"class":226,"line":1189},[224,4938,1896],{"class":230},[224,4940,1009],{"class":234},[224,4942,4653],{"class":303},[224,4944,847],{"class":432},[224,4946,255],{"class":234},[224,4948,4949],{"class":251},"Failed to fetch user",[224,4951,255],{"class":234},[224,4953,960],{"class":432},[224,4955,258],{"class":234},[224,4957,4958],{"class":226,"line":1207},[224,4959,672],{"class":234},[224,4961,4962],{"class":226,"line":1216},[224,4963,562],{"class":234},[224,4965,4966],{"class":226,"line":1234},[224,4967,568],{"class":234},[224,4969,4970],{"class":226,"line":1239},[224,4971,287],{"emptyLinePlaceholder":56},[224,4973,4974],{"class":226,"line":1248},[224,4975,4976],{"class":319},"\u002F\u002F Automatically returns proper AWS response:\n",[224,4978,4979],{"class":226,"line":1253},[224,4980,4981],{"class":319},"\u002F\u002F {\n",[224,4983,4984],{"class":226,"line":1813},[224,4985,4986],{"class":319},"\u002F\u002F   statusCode: 404,\n",[224,4988,4989],{"class":226,"line":1818},[224,4990,4991],{"class":319},"\u002F\u002F   headers: { 'Content-Type': 'application\u002Fjson' },\n",[224,4993,4994],{"class":226,"line":1823},[224,4995,4996],{"class":319},"\u002F\u002F   body: '{\"statusCode\":404,\"message\":\"User with ID ... not found\"}'\n",[224,4998,4999],{"class":226,"line":1841},[224,5000,5001],{"class":319},"\u002F\u002F }\n",[208,5003,5005],{"id":5004},"deployment","Deployment",[350,5007,5009],{"id":5008},"deploy-to-aws","Deploy to AWS",[213,5011,5015],{"className":5012,"code":5013,"language":5014,"meta":219,"style":219},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Deploy to default stage (dev)\nserverless deploy\n\n# Deploy to production\nserverless deploy --stage prod\n\n# Deploy specific function\nserverless deploy function -f api\n\n# Deploy with verbose output\nserverless deploy --verbose\n","bash",[221,5016,5017,5022,5030,5034,5039,5052,5056,5061,5076,5080,5085],{"__ignoreMap":219},[224,5018,5019],{"class":226,"line":227},[224,5020,5021],{"class":319},"# Deploy to default stage (dev)\n",[224,5023,5024,5027],{"class":226,"line":261},[224,5025,5026],{"class":380},"serverless",[224,5028,5029],{"class":251}," deploy\n",[224,5031,5032],{"class":226,"line":284},[224,5033,287],{"emptyLinePlaceholder":56},[224,5035,5036],{"class":226,"line":290},[224,5037,5038],{"class":319},"# Deploy to production\n",[224,5040,5041,5043,5046,5049],{"class":226,"line":311},[224,5042,5026],{"class":380},[224,5044,5045],{"class":251}," deploy",[224,5047,5048],{"class":251}," --stage",[224,5050,5051],{"class":251}," prod\n",[224,5053,5054],{"class":226,"line":316},[224,5055,287],{"emptyLinePlaceholder":56},[224,5057,5058],{"class":226,"line":323},[224,5059,5060],{"class":319},"# Deploy specific function\n",[224,5062,5063,5065,5067,5070,5073],{"class":226,"line":464},[224,5064,5026],{"class":380},[224,5066,5045],{"class":251},[224,5068,5069],{"class":251}," function",[224,5071,5072],{"class":251}," -f",[224,5074,5075],{"class":251}," api\n",[224,5077,5078],{"class":226,"line":470},[224,5079,287],{"emptyLinePlaceholder":56},[224,5081,5082],{"class":226,"line":487},[224,5083,5084],{"class":319},"# Deploy with verbose output\n",[224,5086,5087,5089,5091],{"class":226,"line":497},[224,5088,5026],{"class":380},[224,5090,5045],{"class":251},[224,5092,5093],{"class":251}," --verbose\n",[350,5095,5097],{"id":5096},"environment-specific-deployments","Environment-Specific Deployments",[213,5099,5101],{"className":1287,"code":5100,"filename":1289,"language":1290,"meta":219,"style":219},"service: vercube-api\n\nprovider:\n  name: aws\n  runtime: nodejs22.x\n  region: ${opt:region, 'us-east-1'}\n  stage: ${opt:stage, 'dev'}\n  \n  environment:\n    NODE_ENV: ${self:provider.stage}\n    DATABASE_URL: ${env:DATABASE_URL_${self:provider.stage}}\n\nfunctions:\n  api:\n    handler: lambda.handler\n",[221,5102,5103,5111,5115,5121,5129,5137,5146,5155,5159,5165,5174,5183,5187,5193,5199],{"__ignoreMap":219},[224,5104,5105,5107,5109],{"class":226,"line":227},[224,5106,2363],{"class":432},[224,5108,360],{"class":234},[224,5110,2368],{"class":251},[224,5112,5113],{"class":226,"line":261},[224,5114,287],{"emptyLinePlaceholder":56},[224,5116,5117,5119],{"class":226,"line":284},[224,5118,2377],{"class":432},[224,5120,1300],{"class":234},[224,5122,5123,5125,5127],{"class":226,"line":290},[224,5124,2384],{"class":432},[224,5126,360],{"class":234},[224,5128,2389],{"class":251},[224,5130,5131,5133,5135],{"class":226,"line":311},[224,5132,2394],{"class":432},[224,5134,360],{"class":234},[224,5136,2399],{"class":251},[224,5138,5139,5141,5143],{"class":226,"line":316},[224,5140,2404],{"class":432},[224,5142,360],{"class":234},[224,5144,5145],{"class":251}," ${opt:region, 'us-east-1'}\n",[224,5147,5148,5151,5153],{"class":226,"line":323},[224,5149,5150],{"class":432},"  stage",[224,5152,360],{"class":234},[224,5154,2826],{"class":251},[224,5156,5157],{"class":226,"line":464},[224,5158,874],{"class":238},[224,5160,5161,5163],{"class":226,"line":470},[224,5162,2443],{"class":432},[224,5164,1300],{"class":234},[224,5166,5167,5169,5171],{"class":226,"line":487},[224,5168,2450],{"class":432},[224,5170,360],{"class":234},[224,5172,5173],{"class":251}," ${self:provider.stage}\n",[224,5175,5176,5178,5180],{"class":226,"line":497},[224,5177,2460],{"class":432},[224,5179,360],{"class":234},[224,5181,5182],{"class":251}," ${env:DATABASE_URL_${self:provider.stage}}\n",[224,5184,5185],{"class":226,"line":514},[224,5186,287],{"emptyLinePlaceholder":56},[224,5188,5189,5191],{"class":226,"line":529},[224,5190,1297],{"class":432},[224,5192,1300],{"class":234},[224,5194,5195,5197],{"class":226,"line":534},[224,5196,1305],{"class":432},[224,5198,1300],{"class":234},[224,5200,5201,5203,5205],{"class":226,"line":544},[224,5202,1312],{"class":432},[224,5204,360],{"class":234},[224,5206,1317],{"class":251},[213,5208,5210],{"className":5012,"code":5209,"language":5014,"meta":219,"style":219},"# Deploy to development\nserverless deploy --stage dev\n\n# Deploy to production\nserverless deploy --stage prod --region us-west-2\n",[221,5211,5212,5217,5228,5232,5236],{"__ignoreMap":219},[224,5213,5214],{"class":226,"line":227},[224,5215,5216],{"class":319},"# Deploy to development\n",[224,5218,5219,5221,5223,5225],{"class":226,"line":261},[224,5220,5026],{"class":380},[224,5222,5045],{"class":251},[224,5224,5048],{"class":251},[224,5226,5227],{"class":251}," dev\n",[224,5229,5230],{"class":226,"line":284},[224,5231,287],{"emptyLinePlaceholder":56},[224,5233,5234],{"class":226,"line":290},[224,5235,5038],{"class":319},[224,5237,5238,5240,5242,5244,5247,5250],{"class":226,"line":311},[224,5239,5026],{"class":380},[224,5241,5045],{"class":251},[224,5243,5048],{"class":251},[224,5245,5246],{"class":251}," prod",[224,5248,5249],{"class":251}," --region",[224,5251,5252],{"class":251}," us-west-2\n",[208,5254,5256],{"id":5255},"monitoring-and-debugging","Monitoring and Debugging",[350,5258,5260],{"id":5259},"cloudwatch-metrics","CloudWatch Metrics",[204,5262,5263],{},"Monitor your Lambda function performance:",[213,5265,5267],{"className":1287,"code":5266,"filename":1289,"language":1290,"meta":219,"style":219},"functions:\n  api:\n    handler: lambda.handler\n    \n    # Enable detailed CloudWatch metrics\n    tracing:\n      lambda: true\n      apiGateway: true\n",[221,5268,5269,5275,5281,5289,5293,5298,5305,5314],{"__ignoreMap":219},[224,5270,5271,5273],{"class":226,"line":227},[224,5272,1297],{"class":432},[224,5274,1300],{"class":234},[224,5276,5277,5279],{"class":226,"line":261},[224,5278,1305],{"class":432},[224,5280,1300],{"class":234},[224,5282,5283,5285,5287],{"class":226,"line":284},[224,5284,1312],{"class":432},[224,5286,360],{"class":234},[224,5288,1317],{"class":251},[224,5290,5291],{"class":226,"line":290},[224,5292,1001],{"class":238},[224,5294,5295],{"class":226,"line":311},[224,5296,5297],{"class":319},"    # Enable detailed CloudWatch metrics\n",[224,5299,5300,5303],{"class":226,"line":316},[224,5301,5302],{"class":432},"    tracing",[224,5304,1300],{"class":234},[224,5306,5307,5310,5312],{"class":226,"line":323},[224,5308,5309],{"class":432},"      lambda",[224,5311,360],{"class":234},[224,5313,2539],{"class":1597},[224,5315,5316,5319,5321],{"class":226,"line":464},[224,5317,5318],{"class":432},"      apiGateway",[224,5320,360],{"class":234},[224,5322,2539],{"class":1597},[204,5324,5325],{},[572,5326,5327],{},"Key Metrics to Monitor:",[576,5329,5330,5336,5342,5348,5354,5360],{},[579,5331,5332,5335],{},[572,5333,5334],{},"Invocations"," - Number of times function is invoked",[579,5337,5338,5341],{},[572,5339,5340],{},"Duration"," - Execution time per invocation",[579,5343,5344,5347],{},[572,5345,5346],{},"Errors"," - Number of failed invocations",[579,5349,5350,5353],{},[572,5351,5352],{},"Throttles"," - Number of throttled invocations",[579,5355,5356,5359],{},[572,5357,5358],{},"ConcurrentExecutions"," - Number of concurrent invocations",[579,5361,5362,5365],{},[572,5363,5364],{},"IteratorAge"," - For stream-based invocations",[350,5367,5369],{"id":5368},"x-ray-tracing","X-Ray Tracing",[204,5371,5372],{},"Enable AWS X-Ray for detailed tracing:",[213,5374,5376],{"className":1287,"code":5375,"filename":1289,"language":1290,"meta":219,"style":219},"provider:\n  tracing:\n    lambda: true\n    apiGateway: true\n\nfunctions:\n  api:\n    handler: lambda.handler\n",[221,5377,5378,5384,5391,5400,5409,5413,5419,5425],{"__ignoreMap":219},[224,5379,5380,5382],{"class":226,"line":227},[224,5381,2377],{"class":432},[224,5383,1300],{"class":234},[224,5385,5386,5389],{"class":226,"line":261},[224,5387,5388],{"class":432},"  tracing",[224,5390,1300],{"class":234},[224,5392,5393,5396,5398],{"class":226,"line":284},[224,5394,5395],{"class":432},"    lambda",[224,5397,360],{"class":234},[224,5399,2539],{"class":1597},[224,5401,5402,5405,5407],{"class":226,"line":290},[224,5403,5404],{"class":432},"    apiGateway",[224,5406,360],{"class":234},[224,5408,2539],{"class":1597},[224,5410,5411],{"class":226,"line":311},[224,5412,287],{"emptyLinePlaceholder":56},[224,5414,5415,5417],{"class":226,"line":316},[224,5416,1297],{"class":432},[224,5418,1300],{"class":234},[224,5420,5421,5423],{"class":226,"line":323},[224,5422,1305],{"class":432},[224,5424,1300],{"class":234},[224,5426,5427,5429,5431],{"class":226,"line":464},[224,5428,1312],{"class":432},[224,5430,360],{"class":234},[224,5432,1317],{"class":251},[213,5434,5436],{"className":215,"code":5435,"language":218,"meta":219,"style":219},"import AWSXRay from 'aws-xray-sdk-core';\nimport AWS from 'aws-sdk';\n\n\u002F\u002F Wrap AWS SDK\nconst XAWS = AWSXRay.captureAWS(AWS);\n\n@Controller('\u002Ftraced')\nexport class TracedController {\n  \n  @Get('\u002Fdata')\n  async getData() {\n    \u002F\u002F This will appear in X-Ray traces\n    const segment = AWSXRay.getSegment();\n    const subsegment = segment.addNewSubsegment('custom-operation');\n    \n    try {\n      const data = await this.processData();\n      subsegment.close();\n      return data;\n    } catch (error) {\n      subsegment.addError(error);\n      subsegment.close();\n      throw error;\n    }\n  }\n}\n",[221,5437,5438,5457,5475,5479,5484,5506,5510,5527,5538,5542,5559,5570,5575,5595,5624,5628,5634,5653,5667,5675,5689,5706,5718,5726,5730,5734],{"__ignoreMap":219},[224,5439,5440,5442,5445,5448,5450,5453,5455],{"class":226,"line":227},[224,5441,231],{"class":230},[224,5443,5444],{"class":238}," AWSXRay ",[224,5446,5447],{"class":230},"from",[224,5449,248],{"class":234},[224,5451,5452],{"class":251},"aws-xray-sdk-core",[224,5454,255],{"class":234},[224,5456,258],{"class":234},[224,5458,5459,5461,5464,5466,5468,5471,5473],{"class":226,"line":261},[224,5460,231],{"class":230},[224,5462,5463],{"class":238}," AWS ",[224,5465,5447],{"class":230},[224,5467,248],{"class":234},[224,5469,5470],{"class":251},"aws-sdk",[224,5472,255],{"class":234},[224,5474,258],{"class":234},[224,5476,5477],{"class":226,"line":284},[224,5478,287],{"emptyLinePlaceholder":56},[224,5480,5481],{"class":226,"line":290},[224,5482,5483],{"class":319},"\u002F\u002F Wrap AWS SDK\n",[224,5485,5486,5488,5491,5493,5496,5498,5501,5504],{"class":226,"line":311},[224,5487,294],{"class":293},[224,5489,5490],{"class":238}," XAWS ",[224,5492,300],{"class":234},[224,5494,5495],{"class":238}," AWSXRay",[224,5497,985],{"class":234},[224,5499,5500],{"class":303},"captureAWS",[224,5502,5503],{"class":238},"(AWS)",[224,5505,258],{"class":234},[224,5507,5508],{"class":226,"line":316},[224,5509,287],{"emptyLinePlaceholder":56},[224,5511,5512,5514,5516,5518,5520,5523,5525],{"class":226,"line":323},[224,5513,841],{"class":234},[224,5515,844],{"class":303},[224,5517,847],{"class":238},[224,5519,255],{"class":234},[224,5521,5522],{"class":251},"\u002Ftraced",[224,5524,255],{"class":234},[224,5526,857],{"class":238},[224,5528,5529,5531,5533,5536],{"class":226,"line":464},[224,5530,326],{"class":230},[224,5532,864],{"class":293},[224,5534,5535],{"class":380}," TracedController",[224,5537,419],{"class":234},[224,5539,5540],{"class":226,"line":470},[224,5541,874],{"class":238},[224,5543,5544,5546,5548,5550,5552,5555,5557],{"class":226,"line":487},[224,5545,879],{"class":234},[224,5547,912],{"class":303},[224,5549,847],{"class":238},[224,5551,255],{"class":234},[224,5553,5554],{"class":251},"\u002Fdata",[224,5556,255],{"class":234},[224,5558,857],{"class":238},[224,5560,5561,5563,5566,5568],{"class":226,"line":497},[224,5562,928],{"class":293},[224,5564,5565],{"class":432}," getData",[224,5567,306],{"class":234},[224,5569,419],{"class":234},[224,5571,5572],{"class":226,"line":514},[224,5573,5574],{"class":319},"    \u002F\u002F This will appear in X-Ray traces\n",[224,5576,5577,5579,5582,5584,5586,5588,5591,5593],{"class":226,"line":529},[224,5578,967],{"class":293},[224,5580,5581],{"class":238}," segment",[224,5583,973],{"class":234},[224,5585,5495],{"class":238},[224,5587,985],{"class":234},[224,5589,5590],{"class":303},"getSegment",[224,5592,306],{"class":432},[224,5594,258],{"class":234},[224,5596,5597,5599,5602,5604,5606,5608,5611,5613,5615,5618,5620,5622],{"class":226,"line":534},[224,5598,967],{"class":293},[224,5600,5601],{"class":238}," subsegment",[224,5603,973],{"class":234},[224,5605,5581],{"class":238},[224,5607,985],{"class":234},[224,5609,5610],{"class":303},"addNewSubsegment",[224,5612,847],{"class":432},[224,5614,255],{"class":234},[224,5616,5617],{"class":251},"custom-operation",[224,5619,255],{"class":234},[224,5621,960],{"class":432},[224,5623,258],{"class":234},[224,5625,5626],{"class":226,"line":544},[224,5627,1001],{"class":432},[224,5629,5630,5632],{"class":226,"line":559},[224,5631,4754],{"class":230},[224,5633,419],{"class":234},[224,5635,5636,5638,5640,5642,5644,5646,5649,5651],{"class":226,"line":565},[224,5637,3565],{"class":293},[224,5639,4420],{"class":238},[224,5641,973],{"class":234},[224,5643,976],{"class":230},[224,5645,979],{"class":234},[224,5647,5648],{"class":303},"processData",[224,5650,306],{"class":432},[224,5652,258],{"class":234},[224,5654,5655,5658,5660,5663,5665],{"class":226,"line":777},[224,5656,5657],{"class":238},"      subsegment",[224,5659,985],{"class":234},[224,5661,5662],{"class":303},"close",[224,5664,306],{"class":432},[224,5666,258],{"class":234},[224,5668,5669,5671,5673],{"class":226,"line":786},[224,5670,3923],{"class":230},[224,5672,4420],{"class":238},[224,5674,258],{"class":234},[224,5676,5677,5679,5681,5683,5685,5687],{"class":226,"line":799},[224,5678,1093],{"class":234},[224,5680,4860],{"class":230},[224,5682,1881],{"class":432},[224,5684,4865],{"class":238},[224,5686,949],{"class":432},[224,5688,375],{"class":234},[224,5690,5691,5693,5695,5698,5700,5702,5704],{"class":226,"line":804},[224,5692,5657],{"class":238},[224,5694,985],{"class":234},[224,5696,5697],{"class":303},"addError",[224,5699,847],{"class":432},[224,5701,4865],{"class":238},[224,5703,960],{"class":432},[224,5705,258],{"class":234},[224,5707,5708,5710,5712,5714,5716],{"class":226,"line":1184},[224,5709,5657],{"class":238},[224,5711,985],{"class":234},[224,5713,5662],{"class":303},[224,5715,306],{"class":432},[224,5717,258],{"class":234},[224,5719,5720,5722,5724],{"class":226,"line":1189},[224,5721,1896],{"class":230},[224,5723,4893],{"class":238},[224,5725,258],{"class":234},[224,5727,5728],{"class":226,"line":1207},[224,5729,672],{"class":234},[224,5731,5732],{"class":226,"line":1216},[224,5733,562],{"class":234},[224,5735,5736],{"class":226,"line":1234},[224,5737,568],{"class":234},[208,5739,5741],{"id":5740},"troubleshooting","Troubleshooting",[350,5743,5745],{"id":5744},"common-issues","Common Issues",[204,5747,5748],{},[572,5749,5750],{},"Handler not found",[213,5752,5754],{"className":5012,"code":5753,"language":5014,"meta":219,"style":219},"Error: Cannot find module 'lambda'\n",[221,5755,5756],{"__ignoreMap":219},[224,5757,5758,5761,5764,5767,5770,5772,5775],{"class":226,"line":227},[224,5759,5760],{"class":380},"Error:",[224,5762,5763],{"class":251}," Cannot",[224,5765,5766],{"class":251}," find",[224,5768,5769],{"class":251}," module",[224,5771,248],{"class":234},[224,5773,5774],{"class":251},"lambda",[224,5776,461],{"class":234},[204,5778,5779,5782],{},[572,5780,5781],{},"Solution:"," Ensure handler path matches your file structure:",[213,5784,5786],{"className":1287,"code":5785,"language":1290,"meta":219,"style":219},"functions:\n  api:\n    handler: lambda.handler  # \u003Cfilename>.\u003Cexport name>\n",[221,5787,5788,5794,5800],{"__ignoreMap":219},[224,5789,5790,5792],{"class":226,"line":227},[224,5791,1297],{"class":432},[224,5793,1300],{"class":234},[224,5795,5796,5798],{"class":226,"line":261},[224,5797,1305],{"class":432},[224,5799,1300],{"class":234},[224,5801,5802,5804,5806,5809],{"class":226,"line":284},[224,5803,1312],{"class":432},[224,5805,360],{"class":234},[224,5807,5808],{"class":251}," lambda.handler",[224,5810,5811],{"class":319},"  # \u003Cfilename>.\u003Cexport name>\n",[204,5813,5814],{},[572,5815,5816],{},"Request timeout",[213,5818,5820],{"className":5012,"code":5819,"language":5014,"meta":219,"style":219},"Task timed out after 30.00 seconds\n",[221,5821,5822],{"__ignoreMap":219},[224,5823,5824,5827,5830,5833,5836,5839],{"class":226,"line":227},[224,5825,5826],{"class":380},"Task",[224,5828,5829],{"class":251}," timed",[224,5831,5832],{"class":251}," out",[224,5834,5835],{"class":251}," after",[224,5837,5838],{"class":1659}," 30.00",[224,5840,5841],{"class":251}," seconds\n",[204,5843,5844,5846],{},[572,5845,5781],{}," Increase timeout:",[213,5848,5850],{"className":1287,"code":5849,"language":1290,"meta":219,"style":219},"functions:\n  api:\n    timeout: 60\n",[221,5851,5852,5858,5864],{"__ignoreMap":219},[224,5853,5854,5856],{"class":226,"line":227},[224,5855,1297],{"class":432},[224,5857,1300],{"class":234},[224,5859,5860,5862],{"class":226,"line":261},[224,5861,1305],{"class":432},[224,5863,1300],{"class":234},[224,5865,5866,5869,5871],{"class":226,"line":284},[224,5867,5868],{"class":432},"    timeout",[224,5870,360],{"class":234},[224,5872,2617],{"class":1659},[204,5874,5875],{},[572,5876,5877],{},"Binary content corrupted",[213,5879,5881],{"className":5012,"code":5880,"language":5014,"meta":219,"style":219},"Response body appears corrupted or truncated\n",[221,5882,5883],{"__ignoreMap":219},[224,5884,5885,5888,5891,5894,5897,5900],{"class":226,"line":227},[224,5886,5887],{"class":380},"Response",[224,5889,5890],{"class":251}," body",[224,5892,5893],{"class":251}," appears",[224,5895,5896],{"class":251}," corrupted",[224,5898,5899],{"class":251}," or",[224,5901,5902],{"class":251}," truncated\n",[204,5904,5905,5907],{},[572,5906,5781],{}," Configure binary media types:",[213,5909,5911],{"className":1287,"code":5910,"language":1290,"meta":219,"style":219},"functions:\n  api:\n    events:\n      - http:\n          binaryMediaTypes:\n            - 'image\u002F*'\n            - 'application\u002Fpdf'\n",[221,5912,5913,5919,5925,5931,5939,5945,5955],{"__ignoreMap":219},[224,5914,5915,5917],{"class":226,"line":227},[224,5916,1297],{"class":432},[224,5918,1300],{"class":234},[224,5920,5921,5923],{"class":226,"line":261},[224,5922,1305],{"class":432},[224,5924,1300],{"class":234},[224,5926,5927,5929],{"class":226,"line":284},[224,5928,1322],{"class":432},[224,5930,1300],{"class":234},[224,5932,5933,5935,5937],{"class":226,"line":290},[224,5934,1329],{"class":234},[224,5936,1332],{"class":432},[224,5938,1300],{"class":234},[224,5940,5941,5943],{"class":226,"line":311},[224,5942,1359],{"class":432},[224,5944,1300],{"class":234},[224,5946,5947,5949,5951,5953],{"class":226,"line":316},[224,5948,1366],{"class":234},[224,5950,248],{"class":234},[224,5952,1371],{"class":251},[224,5954,461],{"class":234},[224,5956,5957,5959,5961,5963],{"class":226,"line":323},[224,5958,1366],{"class":234},[224,5960,248],{"class":234},[224,5962,1048],{"class":251},[224,5964,461],{"class":234},[204,5966,5967],{},[572,5968,5969],{},"Cold start too slow",[213,5971,5973],{"className":5012,"code":5972,"language":5014,"meta":219,"style":219},"Duration: 3000ms (Cold Start: 2500ms)\n",[221,5974,5975],{"__ignoreMap":219},[224,5976,5977,5980,5983,5986,5989,5992],{"class":226,"line":227},[224,5978,5979],{"class":380},"Duration:",[224,5981,5982],{"class":251}," 3000ms",[224,5984,5985],{"class":238}," (Cold ",[224,5987,5988],{"class":251},"Start:",[224,5990,5991],{"class":251}," 2500ms",[224,5993,857],{"class":238},[204,5995,5996],{},[572,5997,5998],{},"Solutions:",[576,6000,6001,6004,6007,6010],{},[579,6002,6003],{},"Reduce deployment package size",[579,6005,6006],{},"Use Lambda layers for dependencies",[579,6008,6009],{},"Enable provisioned concurrency",[579,6011,6012],{},"Lazy load heavy modules",[204,6014,6015],{},[572,6016,6017],{},"Memory limit exceeded",[213,6019,6021],{"className":5012,"code":6020,"language":5014,"meta":219,"style":219},"Process exited before completing request\n",[221,6022,6023],{"__ignoreMap":219},[224,6024,6025,6028,6031,6034,6037],{"class":226,"line":227},[224,6026,6027],{"class":380},"Process",[224,6029,6030],{"class":251}," exited",[224,6032,6033],{"class":251}," before",[224,6035,6036],{"class":251}," completing",[224,6038,6039],{"class":251}," request\n",[204,6041,6042,6044],{},[572,6043,5781],{}," Increase memory:",[213,6046,6048],{"className":1287,"code":6047,"language":1290,"meta":219,"style":219},"functions:\n  api:\n    memorySize: 1024  # or higher\n",[221,6049,6050,6056,6062],{"__ignoreMap":219},[224,6051,6052,6054],{"class":226,"line":227},[224,6053,1297],{"class":432},[224,6055,1300],{"class":234},[224,6057,6058,6060],{"class":226,"line":261},[224,6059,1305],{"class":432},[224,6061,1300],{"class":234},[224,6063,6064,6067,6069,6072],{"class":226,"line":284},[224,6065,6066],{"class":432},"    memorySize",[224,6068,360],{"class":234},[224,6070,6071],{"class":1659}," 1024",[224,6073,6074],{"class":319},"  # or higher\n",[6076,6077,6078],"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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":219,"searchDepth":227,"depth":261,"links":6080},[6081,6082,6086,6089,6090,6091,6095,6100,6104,6108,6112,6116],{"id":210,"depth":261,"text":211},{"id":344,"depth":261,"text":345,"children":6083},[6084,6085],{"id":352,"depth":284,"text":353},{"id":601,"depth":284,"text":602},{"id":827,"depth":261,"text":828,"children":6087},[6088],{"id":1280,"depth":284,"text":1281},{"id":1408,"depth":261,"text":1409},{"id":2002,"depth":261,"text":2003},{"id":2348,"depth":261,"text":2349,"children":6092},[6093,6094],{"id":2352,"depth":284,"text":2353},{"id":2542,"depth":284,"text":2543},{"id":3235,"depth":261,"text":3236,"children":6096},[6097,6098,6099],{"id":3242,"depth":284,"text":3243},{"id":3478,"depth":284,"text":3479},{"id":3748,"depth":284,"text":3749},{"id":3836,"depth":261,"text":3837,"children":6101},[6102,6103],{"id":3843,"depth":284,"text":3844},{"id":4233,"depth":284,"text":4234},{"id":4335,"depth":261,"text":4336,"children":6105},[6106,6107],{"id":4339,"depth":284,"text":4340},{"id":4628,"depth":284,"text":4629},{"id":5004,"depth":261,"text":5005,"children":6109},[6110,6111],{"id":5008,"depth":284,"text":5009},{"id":5096,"depth":284,"text":5097},{"id":5255,"depth":261,"text":5256,"children":6113},[6114,6115],{"id":5259,"depth":284,"text":5260},{"id":5368,"depth":284,"text":5369},{"id":5740,"depth":261,"text":5741,"children":6117},[6118],{"id":5744,"depth":284,"text":5745},"Deploy your Vercube application to AWS Lambda with API Gateway","md",null,{},{"title":102,"description":6119},"9iX2W8KVClaWUC28ZycbN7ChZlT9AfutCx_da8QTN3s",[6126,6128],{"title":66,"path":99,"stem":100,"description":6127,"children":-1},"Deploy your Vercube application to serverless platforms with zero configuration",{"title":106,"path":107,"stem":108,"description":6129,"children":-1},"Deploy your Vercube application to Azure Functions with HTTP triggers",1775552784254]