[{"data":1,"prerenderedAt":315},["ShallowReactive",2],{"navigation_docs":3,"-api-tmdb-proxy":100,"-api-tmdb-proxy-surround":310},[4,35,80,90],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F2.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F3.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Project Structure","\u002Fgetting-started\u002Fproject-structure","1.getting-started\u002F4.project-structure","i-lucide-folder-tree",{"title":26,"path":27,"stem":28,"icon":29},"Backend Server","\u002Fgetting-started\u002Fbackend","1.getting-started\u002F6.backend","i-lucide-server",{"title":31,"path":32,"stem":33,"icon":34},"Troubleshooting","\u002Fgetting-started\u002Ftroubleshooting","1.getting-started\u002F8.troubleshooting","i-lucide-wrench",{"title":36,"icon":6,"path":37,"stem":38,"children":39,"page":6},"API","\u002Fapi","2.api",[40,45,50,55,60,65,70,75],{"title":41,"path":42,"stem":43,"icon":44},"API Overview","\u002Fapi\u002Foverview","2.api\u002F1.overview","i-lucide-zap",{"title":46,"path":47,"stem":48,"icon":49},"TMDB Integration","\u002Fapi\u002Ftmdb-proxy","2.api\u002F2.tmdb-proxy","i-si-movie-line",{"title":51,"path":52,"stem":53,"icon":54},"Watched and My List APIs","\u002Fapi\u002Fwatched-movies","2.api\u002F3.watched-movies","i-lucide-eye",{"title":56,"path":57,"stem":58,"icon":59},"Recommendation Generation","\u002Fapi\u002Fgemini-recommendations","2.api\u002F4.gemini-recommendations","i-lucide-sparkles",{"title":61,"path":62,"stem":63,"icon":64},"Movie Search API","\u002Fapi\u002Fmovie-search","2.api\u002F5.movie-search","i-lucide-search",{"title":66,"path":67,"stem":68,"icon":69},"TMDB Import","\u002Fapi\u002Ftmdb-import","2.api\u002F6.tmdb-import","i-lucide-database",{"title":71,"path":72,"stem":73,"icon":74},"Movie Details & Caching","\u002Fapi\u002Fmovie-details","2.api\u002F7.movie-details","i-lucide-film",{"title":76,"path":77,"stem":78,"icon":79},"Recommendations (Cached)","\u002Fapi\u002Frecommendations-cache","2.api\u002F8.recommendations-cache","i-lucide-brain",{"title":81,"icon":6,"path":82,"stem":83,"children":84,"page":6},"Frontend","\u002Ffrontend","4.frontend",[85],{"title":86,"path":87,"stem":88,"icon":89},"Components","\u002Ffrontend\u002Fcomponents","4.frontend\u002F1.components","i-lucide-layout",{"title":91,"icon":6,"path":92,"stem":93,"children":94,"page":6},"Reference","\u002Freference","5.reference",[95],{"title":96,"path":97,"stem":98,"icon":99},"Rate Limiting","\u002Freference\u002Frate-limiting","5.reference\u002F2.rate-limiting","i-lucide-shield",{"id":101,"title":46,"body":102,"description":303,"extension":304,"links":305,"meta":306,"navigation":307,"path":47,"seo":308,"stem":48,"__hash__":309},"docs\u002F2.api\u002F2.tmdb-proxy.md",{"type":103,"value":104,"toc":295},"minimark",[105,114,119,122,141,144,148,168,172,175,185,188,191,194,217,220,270,277,281],[106,107,108,109,113],"p",{},"TMDB requests are made internally through ",[110,111,112],"code",{},"server\u002Futils\u002Ftmdb\u002Fclient.ts",". This helper keeps the API key server-side, applies rate limiting, and only allows the TMDB paths the app currently needs.",[115,116,118],"h2",{"id":117},"allowed-tmdb-paths","Allowed TMDB Paths",[106,120,121],{},"The internal allow-list currently permits only:",[123,124,125,131,136],"ul",{},[126,127,128],"li",{},[110,129,130],{},"search\u002Fmovie",[126,132,133],{},[110,134,135],{},"movie\u002Fpopular",[126,137,138],{},[110,139,140],{},"movie\u002F:id",[106,142,143],{},"Any other TMDB path is rejected before an upstream request is made.",[115,145,147],{"id":146},"where-it-is-used","Where It Is Used",[123,149,150,155,160,165],{},[126,151,152],{},[110,153,154],{},"GET \u002Fapi\u002Fmovies\u002Fsearch",[126,156,157],{},[110,158,159],{},"GET \u002Fapi\u002Fmovies\u002Fpopular",[126,161,162],{},[110,163,164],{},"GET \u002Fapi\u002Fmovies\u002F:id",[126,166,167],{},"recommendation title-to-TMDB-ID resolution in the recommendation utilities",[115,169,171],{"id":170},"request-behavior","Request Behavior",[106,173,174],{},"The helper sends requests to TMDB with:",[176,177,183],"pre",{"className":178,"code":180,"language":181,"meta":182},[179],"language-text","Accept: application\u002Fjson\nAuthorization: Bearer [from NUXT_TMDB_API_KEY env]\nlanguage: en-US\n","text","",[110,184,180],{"__ignoreMap":182},[115,186,96],{"id":187},"rate-limiting",[106,189,190],{},"TMDB-bound requests are limited before the outbound request is sent.",[106,192,193],{},"Current settings:",[123,195,196,202,205,208,211],{},[126,197,198,199],{},"limiter: ",[110,200,201],{},"tmdbLimiter",[126,203,204],{},"strategy: fixed window",[126,206,207],{},"limit: 40 requests",[126,209,210],{},"window: 1 second",[126,212,213,214],{},"key: shared global key ",[110,215,216],{},"tmdb:global",[106,218,219],{},"The server includes these headers on TMDB-backed responses:",[221,222,223,236],"table",{},[224,225,226],"thead",{},[227,228,229,233],"tr",{},[230,231,232],"th",{},"Header",[230,234,235],{},"Description",[237,238,239,250,260],"tbody",{},[227,240,241,247],{},[242,243,244],"td",{},[110,245,246],{},"X-RateLimit-Limit",[242,248,249],{},"Total allowed requests in the window",[227,251,252,257],{},[242,253,254],{},[110,255,256],{},"X-RateLimit-Remaining",[242,258,259],{},"Requests left in the current window",[227,261,262,267],{},[242,263,264],{},[110,265,266],{},"X-RateLimit-Reset",[242,268,269],{},"Unix timestamp (ms) when the window resets",[106,271,272,273,276],{},"The same values are also emitted as ",[110,274,275],{},"X-TMDB-RateLimit-*"," headers.",[115,278,280],{"id":279},"security-notes","Security Notes",[123,282,283,286,289,292],{},[126,284,285],{},"The TMDB API key is never exposed to the browser",[126,287,288],{},"Absolute URLs are rejected",[126,290,291],{},"Requests are restricted to the TMDB API base URL",[126,293,294],{},"Only the current allow-listed paths are accepted",{"title":182,"searchDepth":296,"depth":296,"links":297},2,[298,299,300,301,302],{"id":117,"depth":296,"text":118},{"id":146,"depth":296,"text":147},{"id":170,"depth":296,"text":171},{"id":187,"depth":296,"text":96},{"id":279,"depth":296,"text":280},"Internal TMDB access used by the current movie search and movie detail routes","md",null,{},{"icon":49},{"title":46,"description":303},"TthGcM2gLjiPT-Npv1VCzajc4p80xB39ezw0uTd9Drk",[311,313],{"title":41,"path":42,"stem":43,"description":312,"icon":44,"children":-1},"Current API reference for the Movie Recommender server",{"title":51,"path":52,"stem":53,"description":314,"icon":54,"children":-1},"Authenticated APIs for the user's watched movies and saved list",1782138812135]