[{"data":1,"prerenderedAt":4679},["ShallowReactive",2],{"navigation_docs":3,"-docs-guides-error-handling":82,"-docs-guides-error-handling-surround":4674},[4,9,40,61],{"title":5,"path":6,"stem":7,"order":8},"Changelog","\u002Fdocs\u002Fchangelog","docs\u002F4.changelog",4,{"title":10,"path":11,"stem":12,"children":13,"page":39},"Api","\u002Fdocs\u002Fapi","docs\u002Fapi",[14,18,22,26,30,34],{"title":15,"path":16,"stem":17},"Overview","\u002Fdocs\u002Fapi\u002Foverview","docs\u002Fapi\u002F1.overview",{"title":19,"path":20,"stem":21},"Quotes","\u002Fdocs\u002Fapi\u002Fquotes","docs\u002Fapi\u002F2.quotes",{"title":23,"path":24,"stem":25},"Authors","\u002Fdocs\u002Fapi\u002Fauthors","docs\u002Fapi\u002F3.authors",{"title":27,"path":28,"stem":29},"Playlists","\u002Fdocs\u002Fapi\u002Fplaylists","docs\u002Fapi\u002F4.playlists",{"title":31,"path":32,"stem":33},"Categories","\u002Fdocs\u002Fapi\u002Fcategories","docs\u002Fapi\u002F5.categories",{"title":35,"path":36,"stem":37,"order":38},"API Reference","\u002Fdocs\u002Fapi\u002F_dir","docs\u002Fapi\u002F_dir",3,false,{"title":41,"path":42,"stem":43,"children":44,"page":39},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002Fgetting-started",[45,49,53,57],{"title":46,"path":47,"stem":48},"Introduction","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002Fgetting-started\u002F1.introduction",{"title":50,"path":51,"stem":52},"Authentication","\u002Fdocs\u002Fgetting-started\u002Fauthentication","docs\u002Fgetting-started\u002F2.authentication",{"title":54,"path":55,"stem":56},"Quick Start","\u002Fdocs\u002Fgetting-started\u002Fquickstart","docs\u002Fgetting-started\u002F3.quickstart",{"title":41,"path":58,"stem":59,"order":60},"\u002Fdocs\u002Fgetting-started\u002F_dir","docs\u002Fgetting-started\u002F_dir",1,{"title":62,"path":63,"stem":64,"children":65,"page":39},"Guides","\u002Fdocs\u002Fguides","docs\u002Fguides",[66,70,74,78],{"title":67,"path":68,"stem":69},"Rate Limits & Pricing","\u002Fdocs\u002Fguides\u002Frate-limits","docs\u002Fguides\u002F1.rate-limits",{"title":71,"path":72,"stem":73},"Error Handling","\u002Fdocs\u002Fguides\u002Ferror-handling","docs\u002Fguides\u002F2.error-handling",{"title":75,"path":76,"stem":77},"SDKs & Libraries","\u002Fdocs\u002Fguides\u002Fsdks","docs\u002Fguides\u002F3.sdks",{"title":62,"path":79,"stem":80,"order":81},"\u002Fdocs\u002Fguides\u002F_dir","docs\u002Fguides\u002F_dir",2,{"id":83,"title":71,"body":84,"description":4667,"extension":4668,"links":4669,"meta":4670,"navigation":844,"path":72,"seo":4672,"stem":73,"__hash__":4673},"docs\u002Fdocs\u002Fguides\u002F2.error-handling.md",{"type":85,"value":86,"toc":4644},"minimark",[87,91,95,100,103,168,219,223,228,313,317,376,380,384,387,393,421,466,470,473,477,491,535,547,551,554,558,569,614,618,621,666,669,716,722,726,730,733,1044,1048,1051,1801,1805,1815,2327,2331,2334,2620,2624,2627,2802,2806,2809,4339,4343,4640],[88,89,71],"h1",{"id":90},"error-handling",[92,93,94],"p",{},"The Quote Gallery API uses conventional HTTP status codes and returns consistent JSON error responses. This guide covers all possible error codes and best practices for handling them in your application.",[96,97,99],"h2",{"id":98},"error-response-format","Error Response Format",[92,101,102],{},"All error responses follow the same JSON structure:",[104,105,110],"pre",{"className":106,"code":107,"language":108,"meta":109,"style":109},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"error\": \"Human-readable error message\",\n  \"status\": 401\n}\n","json","",[111,112,113,121,148,163],"code",{"__ignoreMap":109},[114,115,117],"span",{"class":116,"line":60},"line",[114,118,120],{"class":119},"sMK4o","{\n",[114,122,123,126,130,133,136,139,143,145],{"class":116,"line":81},[114,124,125],{"class":119},"  \"",[114,127,129],{"class":128},"spNyl","error",[114,131,132],{"class":119},"\"",[114,134,135],{"class":119},":",[114,137,138],{"class":119}," \"",[114,140,142],{"class":141},"sfazB","Human-readable error message",[114,144,132],{"class":119},[114,146,147],{"class":119},",\n",[114,149,150,152,155,157,159],{"class":116,"line":38},[114,151,125],{"class":119},[114,153,154],{"class":128},"status",[114,156,132],{"class":119},[114,158,135],{"class":119},[114,160,162],{"class":161},"sbssI"," 401\n",[114,164,165],{"class":116,"line":8},[114,166,167],{"class":119},"}\n",[169,170,171,187],"table",{},[172,173,174],"thead",{},[175,176,177,181,184],"tr",{},[178,179,180],"th",{},"Field",[178,182,183],{},"Type",[178,185,186],{},"Description",[188,189,190,205],"tbody",{},[175,191,192,197,202],{},[193,194,195],"td",{},[111,196,129],{},[193,198,199],{},[111,200,201],{},"string",[193,203,204],{},"A human-readable description of the error",[175,206,207,211,216],{},[193,208,209],{},[111,210,154],{},[193,212,213],{},[111,214,215],{},"number",[193,217,218],{},"The HTTP status code (mirrors the response status)",[96,220,222],{"id":221},"error-codes","Error Codes",[224,225,227],"h3",{"id":226},"client-errors-4xx","Client Errors (4xx)",[169,229,230,242],{},[172,231,232],{},[175,233,234,237,240],{},[178,235,236],{},"Status",[178,238,239],{},"Name",[178,241,186],{},[188,243,244,257,274,287,300],{},[175,245,246,251,254],{},[193,247,248],{},[111,249,250],{},"400",[193,252,253],{},"Bad Request",[193,255,256],{},"The request was malformed or contains invalid parameters. Check your query parameters and request format.",[175,258,259,264,267],{},[193,260,261],{},[111,262,263],{},"401",[193,265,266],{},"Unauthorized",[193,268,269,270,273],{},"Authentication failed. Either no ",[111,271,272],{},"X-API-Key"," header was provided, or the provided API key is invalid or has been revoked.",[175,275,276,281,284],{},[193,277,278],{},[111,279,280],{},"403",[193,282,283],{},"Forbidden",[193,285,286],{},"The API key is valid but does not have permission to access the requested resource.",[175,288,289,294,297],{},[193,290,291],{},[111,292,293],{},"404",[193,295,296],{},"Not Found",[193,298,299],{},"The requested resource does not exist. This typically means the quote, author, or playlist ID is invalid or the resource is not publicly approved.",[175,301,302,307,310],{},[193,303,304],{},[111,305,306],{},"429",[193,308,309],{},"Too Many Requests",[193,311,312],{},"You have exceeded the rate limit for your current API tier. Wait for the rate limit window to reset before retrying.",[224,314,316],{"id":315},"server-errors-5xx","Server Errors (5xx)",[169,318,319,329],{},[172,320,321],{},[175,322,323,325,327],{},[178,324,236],{},[178,326,239],{},[178,328,186],{},[188,330,331,350,363],{},[175,332,333,338,341],{},[193,334,335],{},[111,336,337],{},"500",[193,339,340],{},"Internal Server Error",[193,342,343,344,349],{},"An unexpected error occurred on the server. If this persists, please ",[345,346,348],"a",{"href":347},"mailto:support@quotegallery.nl","contact support",".",[175,351,352,357,360],{},[193,353,354],{},[111,355,356],{},"502",[193,358,359],{},"Bad Gateway",[193,361,362],{},"The API server received an invalid response from an upstream service. This is usually temporary.",[175,364,365,370,373],{},[193,366,367],{},[111,368,369],{},"503",[193,371,372],{},"Service Unavailable",[193,374,375],{},"The API is temporarily unavailable due to maintenance or high load. Retry after a short delay.",[96,377,379],{"id":378},"detailed-error-scenarios","Detailed Error Scenarios",[224,381,383],{"id":382},"_400-bad-request","400 — Bad Request",[92,385,386],{},"Returned when the request contains invalid parameters.",[92,388,389],{},[390,391,392],"strong",{},"Common causes:",[394,395,396,406,412,418],"ul",{},[397,398,399,402,403],"li",{},[111,400,401],{},"limit"," exceeds the maximum value of ",[111,404,405],{},"100",[397,407,408,411],{},[111,409,410],{},"offset"," is negative",[397,413,414,417],{},[111,415,416],{},"language"," is not a valid language code",[397,419,420],{},"Query parameter has an invalid type (e.g., passing a string where a number is expected)",[104,422,424],{"className":106,"code":423,"language":108,"meta":109,"style":109},"{\n  \"error\": \"Invalid limit parameter: must be between 1 and 100\",\n  \"status\": 400\n}\n",[111,425,426,430,449,462],{"__ignoreMap":109},[114,427,428],{"class":116,"line":60},[114,429,120],{"class":119},[114,431,432,434,436,438,440,442,445,447],{"class":116,"line":81},[114,433,125],{"class":119},[114,435,129],{"class":128},[114,437,132],{"class":119},[114,439,135],{"class":119},[114,441,138],{"class":119},[114,443,444],{"class":141},"Invalid limit parameter: must be between 1 and 100",[114,446,132],{"class":119},[114,448,147],{"class":119},[114,450,451,453,455,457,459],{"class":116,"line":38},[114,452,125],{"class":119},[114,454,154],{"class":128},[114,456,132],{"class":119},[114,458,135],{"class":119},[114,460,461],{"class":161}," 400\n",[114,463,464],{"class":116,"line":8},[114,465,167],{"class":119},[224,467,469],{"id":468},"_401-unauthorized","401 — Unauthorized",[92,471,472],{},"Returned when authentication fails.",[92,474,475],{},[390,476,392],{},[394,478,479,485,488],{},[397,480,481,482,484],{},"Missing ",[111,483,272],{}," header",[397,486,487],{},"API key is invalid, expired, or revoked",[397,489,490],{},"API key was copied incorrectly (extra whitespace, truncated, etc.)",[104,492,494],{"className":106,"code":493,"language":108,"meta":109,"style":109},"{\n  \"error\": \"Invalid API key\",\n  \"status\": 401\n}\n",[111,495,496,500,519,531],{"__ignoreMap":109},[114,497,498],{"class":116,"line":60},[114,499,120],{"class":119},[114,501,502,504,506,508,510,512,515,517],{"class":116,"line":81},[114,503,125],{"class":119},[114,505,129],{"class":128},[114,507,132],{"class":119},[114,509,135],{"class":119},[114,511,138],{"class":119},[114,513,514],{"class":141},"Invalid API key",[114,516,132],{"class":119},[114,518,147],{"class":119},[114,520,521,523,525,527,529],{"class":116,"line":38},[114,522,125],{"class":119},[114,524,154],{"class":128},[114,526,132],{"class":119},[114,528,135],{"class":119},[114,530,162],{"class":161},[114,532,533],{"class":116,"line":8},[114,534,167],{"class":119},[536,537,539,540,543,544,546],"callout",{"type":538},"tip","Double-check that your API key is being sent correctly. A common mistake is adding a ",[111,541,542],{},"Bearer"," prefix — the Quote Gallery API expects the raw key in the ",[111,545,272],{}," header, not an Authorization Bearer token.",[224,548,550],{"id":549},"_404-not-found","404 — Not Found",[92,552,553],{},"Returned when the requested resource doesn't exist.",[92,555,556],{},[390,557,392],{},[394,559,560,563,566],{},[397,561,562],{},"The quote, author, or playlist ID is incorrect",[397,564,565],{},"The resource exists but is not publicly approved (e.g., a draft or rejected quote)",[397,567,568],{},"The resource was deleted",[104,570,572],{"className":106,"code":571,"language":108,"meta":109,"style":109},"{\n  \"error\": \"Quote not found\",\n  \"status\": 404\n}\n",[111,573,574,578,597,610],{"__ignoreMap":109},[114,575,576],{"class":116,"line":60},[114,577,120],{"class":119},[114,579,580,582,584,586,588,590,593,595],{"class":116,"line":81},[114,581,125],{"class":119},[114,583,129],{"class":128},[114,585,132],{"class":119},[114,587,135],{"class":119},[114,589,138],{"class":119},[114,591,592],{"class":141},"Quote not found",[114,594,132],{"class":119},[114,596,147],{"class":119},[114,598,599,601,603,605,607],{"class":116,"line":38},[114,600,125],{"class":119},[114,602,154],{"class":128},[114,604,132],{"class":119},[114,606,135],{"class":119},[114,608,609],{"class":161}," 404\n",[114,611,612],{"class":116,"line":8},[114,613,167],{"class":119},[224,615,617],{"id":616},"_429-too-many-requests","429 — Too Many Requests",[92,619,620],{},"Returned when you exceed your rate limit.",[104,622,624],{"className":106,"code":623,"language":108,"meta":109,"style":109},"{\n  \"error\": \"Rate limit exceeded\",\n  \"status\": 429\n}\n",[111,625,626,630,649,662],{"__ignoreMap":109},[114,627,628],{"class":116,"line":60},[114,629,120],{"class":119},[114,631,632,634,636,638,640,642,645,647],{"class":116,"line":81},[114,633,125],{"class":119},[114,635,129],{"class":128},[114,637,132],{"class":119},[114,639,135],{"class":119},[114,641,138],{"class":119},[114,643,644],{"class":141},"Rate limit exceeded",[114,646,132],{"class":119},[114,648,147],{"class":119},[114,650,651,653,655,657,659],{"class":116,"line":38},[114,652,125],{"class":119},[114,654,154],{"class":128},[114,656,132],{"class":119},[114,658,135],{"class":119},[114,660,661],{"class":161}," 429\n",[114,663,664],{"class":116,"line":8},[114,665,167],{"class":119},[92,667,668],{},"The response includes headers to help you handle this gracefully:",[169,670,671,680],{},[172,672,673],{},[175,674,675,678],{},[178,676,677],{},"Header",[178,679,186],{},[188,681,682,692,706],{},[175,683,684,689],{},[193,685,686],{},[111,687,688],{},"X-RateLimit-Limit",[193,690,691],{},"Your maximum requests per hour",[175,693,694,699],{},[193,695,696],{},[111,697,698],{},"X-RateLimit-Remaining",[193,700,701,702,705],{},"Requests remaining (will be ",[111,703,704],{},"0",")",[175,707,708,713],{},[193,709,710],{},[111,711,712],{},"X-RateLimit-Reset",[193,714,715],{},"Unix timestamp when the limit resets",[92,717,718,719,721],{},"See the ",[345,720,67],{"href":68}," guide for strategies on handling rate limits.",[96,723,725],{"id":724},"best-practices","Best Practices",[224,727,729],{"id":728},"_1-always-check-the-response-status","1. Always Check the Response Status",[92,731,732],{},"Never assume a request will succeed. Always check the HTTP status code before processing the response body.",[734,735,736,971],"tabs",{},[737,738,740],"tabs-item",{"label":739},"JavaScript",[104,741,745],{"className":742,"code":743,"language":744,"meta":109,"style":109},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","async function fetchQuotes(apiKey) {\n  const response = await fetch('https:\u002F\u002Fquotegallery.nl\u002Fapi\u002Fv1\u002Fquotes', {\n    headers: { 'X-API-Key': apiKey },\n  })\n\n  if (!response.ok) {\n    const error = await response.json()\n    throw new Error(`API Error ${error.status}: ${error.error}`)\n  }\n\n  return response.json()\n}\n","js",[111,746,747,771,806,831,839,846,871,893,941,947,952,966],{"__ignoreMap":109},[114,748,749,752,755,759,762,766,768],{"class":116,"line":60},[114,750,751],{"class":128},"async",[114,753,754],{"class":128}," function",[114,756,758],{"class":757},"s2Zo4"," fetchQuotes",[114,760,761],{"class":119},"(",[114,763,765],{"class":764},"sHdIc","apiKey",[114,767,705],{"class":119},[114,769,770],{"class":119}," {\n",[114,772,773,776,780,783,787,790,793,796,799,801,804],{"class":116,"line":81},[114,774,775],{"class":128},"  const",[114,777,779],{"class":778},"sTEyZ"," response",[114,781,782],{"class":119}," =",[114,784,786],{"class":785},"s7zQu"," await",[114,788,789],{"class":757}," fetch",[114,791,761],{"class":792},"swJcz",[114,794,795],{"class":119},"'",[114,797,798],{"class":141},"https:\u002F\u002Fquotegallery.nl\u002Fapi\u002Fv1\u002Fquotes",[114,800,795],{"class":119},[114,802,803],{"class":119},",",[114,805,770],{"class":119},[114,807,808,811,813,816,819,821,823,825,828],{"class":116,"line":38},[114,809,810],{"class":792},"    headers",[114,812,135],{"class":119},[114,814,815],{"class":119}," {",[114,817,818],{"class":119}," '",[114,820,272],{"class":792},[114,822,795],{"class":119},[114,824,135],{"class":119},[114,826,827],{"class":778}," apiKey",[114,829,830],{"class":119}," },\n",[114,832,833,836],{"class":116,"line":8},[114,834,835],{"class":119},"  }",[114,837,838],{"class":792},")\n",[114,840,842],{"class":116,"line":841},5,[114,843,845],{"emptyLinePlaceholder":844},true,"\n",[114,847,849,852,855,858,861,863,866,869],{"class":116,"line":848},6,[114,850,851],{"class":785},"  if",[114,853,854],{"class":792}," (",[114,856,857],{"class":119},"!",[114,859,860],{"class":778},"response",[114,862,349],{"class":119},[114,864,865],{"class":778},"ok",[114,867,868],{"class":792},") ",[114,870,120],{"class":119},[114,872,874,877,880,882,884,886,888,890],{"class":116,"line":873},7,[114,875,876],{"class":128},"    const",[114,878,879],{"class":778}," error",[114,881,782],{"class":119},[114,883,786],{"class":785},[114,885,779],{"class":778},[114,887,349],{"class":119},[114,889,108],{"class":757},[114,891,892],{"class":792},"()\n",[114,894,896,899,902,905,907,910,913,916,918,920,922,925,928,930,932,934,936,939],{"class":116,"line":895},8,[114,897,898],{"class":785},"    throw",[114,900,901],{"class":119}," new",[114,903,904],{"class":757}," Error",[114,906,761],{"class":792},[114,908,909],{"class":119},"`",[114,911,912],{"class":141},"API Error ",[114,914,915],{"class":119},"${",[114,917,129],{"class":778},[114,919,349],{"class":119},[114,921,154],{"class":778},[114,923,924],{"class":119},"}",[114,926,927],{"class":141},": ",[114,929,915],{"class":119},[114,931,129],{"class":778},[114,933,349],{"class":119},[114,935,129],{"class":778},[114,937,938],{"class":119},"}`",[114,940,838],{"class":792},[114,942,944],{"class":116,"line":943},9,[114,945,946],{"class":119},"  }\n",[114,948,950],{"class":116,"line":949},10,[114,951,845],{"emptyLinePlaceholder":844},[114,953,955,958,960,962,964],{"class":116,"line":954},11,[114,956,957],{"class":785},"  return",[114,959,779],{"class":778},[114,961,349],{"class":119},[114,963,108],{"class":757},[114,965,892],{"class":792},[114,967,969],{"class":116,"line":968},12,[114,970,167],{"class":119},[737,972,974],{"label":973},"Python",[104,975,979],{"className":976,"code":977,"language":978,"meta":109,"style":109},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import requests\n\ndef fetch_quotes(api_key):\n    response = requests.get(\n        'https:\u002F\u002Fquotegallery.nl\u002Fapi\u002Fv1\u002Fquotes',\n        headers={'X-API-Key': api_key}\n    )\n\n    if not response.ok:\n        error = response.json()\n        raise Exception(f'API Error {error[\"status\"]}: {error[\"error\"]}')\n\n    return response.json()\n","python",[111,980,981,986,990,995,1000,1005,1010,1015,1019,1024,1029,1034,1038],{"__ignoreMap":109},[114,982,983],{"class":116,"line":60},[114,984,985],{},"import requests\n",[114,987,988],{"class":116,"line":81},[114,989,845],{"emptyLinePlaceholder":844},[114,991,992],{"class":116,"line":38},[114,993,994],{},"def fetch_quotes(api_key):\n",[114,996,997],{"class":116,"line":8},[114,998,999],{},"    response = requests.get(\n",[114,1001,1002],{"class":116,"line":841},[114,1003,1004],{},"        'https:\u002F\u002Fquotegallery.nl\u002Fapi\u002Fv1\u002Fquotes',\n",[114,1006,1007],{"class":116,"line":848},[114,1008,1009],{},"        headers={'X-API-Key': api_key}\n",[114,1011,1012],{"class":116,"line":873},[114,1013,1014],{},"    )\n",[114,1016,1017],{"class":116,"line":895},[114,1018,845],{"emptyLinePlaceholder":844},[114,1020,1021],{"class":116,"line":943},[114,1022,1023],{},"    if not response.ok:\n",[114,1025,1026],{"class":116,"line":949},[114,1027,1028],{},"        error = response.json()\n",[114,1030,1031],{"class":116,"line":954},[114,1032,1033],{},"        raise Exception(f'API Error {error[\"status\"]}: {error[\"error\"]}')\n",[114,1035,1036],{"class":116,"line":968},[114,1037,845],{"emptyLinePlaceholder":844},[114,1039,1041],{"class":116,"line":1040},13,[114,1042,1043],{},"    return response.json()\n",[224,1045,1047],{"id":1046},"_2-handle-errors-by-status-code","2. Handle Errors by Status Code",[92,1049,1050],{},"Different errors require different handling strategies:",[104,1052,1054],{"className":742,"code":1053,"language":744,"meta":109,"style":109},"async function safeApiFetch(url, apiKey) {\n  const response = await fetch(url, {\n    headers: { 'X-API-Key': apiKey },\n  })\n\n  if (response.ok) {\n    return { success: true, data: await response.json() }\n  }\n\n  const error = await response.json()\n\n  switch (response.status) {\n    case 400:\n      \u002F\u002F Bad request — fix the parameters and don't retry\n      console.error('Invalid request:', error.error)\n      return { success: false, error: error.error, retryable: false }\n\n    case 401:\n      \u002F\u002F Auth failure — check API key, don't retry with the same key\n      console.error('Authentication failed:', error.error)\n      return { success: false, error: error.error, retryable: false }\n\n    case 404:\n      \u002F\u002F Resource not found — the ID might be wrong\n      console.error('Resource not found:', error.error)\n      return { success: false, error: error.error, retryable: false }\n\n    case 429:\n      \u002F\u002F Rate limited — retry after waiting\n      const resetTime = response.headers.get('X-RateLimit-Reset')\n      const retryAfter = resetTime\n        ? Math.max((Number(resetTime) * 1000) - Date.now(), 1000)\n        : 60000\n      console.warn(`Rate limited. Retry after ${Math.ceil(retryAfter \u002F 1000)}s`)\n      return { success: false, error: error.error, retryable: true, retryAfter }\n\n    default:\n      \u002F\u002F Server error — retry with backoff\n      console.error(`Server error ${response.status}:`, error.error)\n      return { success: false, error: error.error, retryable: true }\n  }\n}\n",[111,1055,1056,1078,1098,1118,1124,1128,1144,1180,1184,1188,1206,1210,1227,1238,1245,1274,1313,1318,1328,1334,1362,1397,1402,1412,1418,1446,1481,1486,1496,1502,1535,1548,1603,1612,1658,1697,1702,1710,1716,1756,1791,1796],{"__ignoreMap":109},[114,1057,1058,1060,1062,1065,1067,1070,1072,1074,1076],{"class":116,"line":60},[114,1059,751],{"class":128},[114,1061,754],{"class":128},[114,1063,1064],{"class":757}," safeApiFetch",[114,1066,761],{"class":119},[114,1068,1069],{"class":764},"url",[114,1071,803],{"class":119},[114,1073,827],{"class":764},[114,1075,705],{"class":119},[114,1077,770],{"class":119},[114,1079,1080,1082,1084,1086,1088,1090,1092,1094,1096],{"class":116,"line":81},[114,1081,775],{"class":128},[114,1083,779],{"class":778},[114,1085,782],{"class":119},[114,1087,786],{"class":785},[114,1089,789],{"class":757},[114,1091,761],{"class":792},[114,1093,1069],{"class":778},[114,1095,803],{"class":119},[114,1097,770],{"class":119},[114,1099,1100,1102,1104,1106,1108,1110,1112,1114,1116],{"class":116,"line":38},[114,1101,810],{"class":792},[114,1103,135],{"class":119},[114,1105,815],{"class":119},[114,1107,818],{"class":119},[114,1109,272],{"class":792},[114,1111,795],{"class":119},[114,1113,135],{"class":119},[114,1115,827],{"class":778},[114,1117,830],{"class":119},[114,1119,1120,1122],{"class":116,"line":8},[114,1121,835],{"class":119},[114,1123,838],{"class":792},[114,1125,1126],{"class":116,"line":841},[114,1127,845],{"emptyLinePlaceholder":844},[114,1129,1130,1132,1134,1136,1138,1140,1142],{"class":116,"line":848},[114,1131,851],{"class":785},[114,1133,854],{"class":792},[114,1135,860],{"class":778},[114,1137,349],{"class":119},[114,1139,865],{"class":778},[114,1141,868],{"class":792},[114,1143,120],{"class":119},[114,1145,1146,1149,1151,1154,1156,1160,1162,1165,1167,1169,1171,1173,1175,1178],{"class":116,"line":873},[114,1147,1148],{"class":785},"    return",[114,1150,815],{"class":119},[114,1152,1153],{"class":792}," success",[114,1155,135],{"class":119},[114,1157,1159],{"class":1158},"sfNiH"," true",[114,1161,803],{"class":119},[114,1163,1164],{"class":792}," data",[114,1166,135],{"class":119},[114,1168,786],{"class":785},[114,1170,779],{"class":778},[114,1172,349],{"class":119},[114,1174,108],{"class":757},[114,1176,1177],{"class":792},"() ",[114,1179,167],{"class":119},[114,1181,1182],{"class":116,"line":895},[114,1183,946],{"class":119},[114,1185,1186],{"class":116,"line":943},[114,1187,845],{"emptyLinePlaceholder":844},[114,1189,1190,1192,1194,1196,1198,1200,1202,1204],{"class":116,"line":949},[114,1191,775],{"class":128},[114,1193,879],{"class":778},[114,1195,782],{"class":119},[114,1197,786],{"class":785},[114,1199,779],{"class":778},[114,1201,349],{"class":119},[114,1203,108],{"class":757},[114,1205,892],{"class":792},[114,1207,1208],{"class":116,"line":954},[114,1209,845],{"emptyLinePlaceholder":844},[114,1211,1212,1215,1217,1219,1221,1223,1225],{"class":116,"line":968},[114,1213,1214],{"class":785},"  switch",[114,1216,854],{"class":792},[114,1218,860],{"class":778},[114,1220,349],{"class":119},[114,1222,154],{"class":778},[114,1224,868],{"class":792},[114,1226,120],{"class":119},[114,1228,1229,1232,1235],{"class":116,"line":1040},[114,1230,1231],{"class":785},"    case",[114,1233,1234],{"class":161}," 400",[114,1236,1237],{"class":119},":\n",[114,1239,1241],{"class":116,"line":1240},14,[114,1242,1244],{"class":1243},"sHwdD","      \u002F\u002F Bad request — fix the parameters and don't retry\n",[114,1246,1248,1251,1253,1255,1257,1259,1262,1264,1266,1268,1270,1272],{"class":116,"line":1247},15,[114,1249,1250],{"class":778},"      console",[114,1252,349],{"class":119},[114,1254,129],{"class":757},[114,1256,761],{"class":792},[114,1258,795],{"class":119},[114,1260,1261],{"class":141},"Invalid request:",[114,1263,795],{"class":119},[114,1265,803],{"class":119},[114,1267,879],{"class":778},[114,1269,349],{"class":119},[114,1271,129],{"class":778},[114,1273,838],{"class":792},[114,1275,1277,1280,1282,1284,1286,1289,1291,1293,1295,1297,1299,1301,1303,1306,1308,1310],{"class":116,"line":1276},16,[114,1278,1279],{"class":785},"      return",[114,1281,815],{"class":119},[114,1283,1153],{"class":792},[114,1285,135],{"class":119},[114,1287,1288],{"class":1158}," false",[114,1290,803],{"class":119},[114,1292,879],{"class":792},[114,1294,135],{"class":119},[114,1296,879],{"class":778},[114,1298,349],{"class":119},[114,1300,129],{"class":778},[114,1302,803],{"class":119},[114,1304,1305],{"class":792}," retryable",[114,1307,135],{"class":119},[114,1309,1288],{"class":1158},[114,1311,1312],{"class":119}," }\n",[114,1314,1316],{"class":116,"line":1315},17,[114,1317,845],{"emptyLinePlaceholder":844},[114,1319,1321,1323,1326],{"class":116,"line":1320},18,[114,1322,1231],{"class":785},[114,1324,1325],{"class":161}," 401",[114,1327,1237],{"class":119},[114,1329,1331],{"class":116,"line":1330},19,[114,1332,1333],{"class":1243},"      \u002F\u002F Auth failure — check API key, don't retry with the same key\n",[114,1335,1337,1339,1341,1343,1345,1347,1350,1352,1354,1356,1358,1360],{"class":116,"line":1336},20,[114,1338,1250],{"class":778},[114,1340,349],{"class":119},[114,1342,129],{"class":757},[114,1344,761],{"class":792},[114,1346,795],{"class":119},[114,1348,1349],{"class":141},"Authentication failed:",[114,1351,795],{"class":119},[114,1353,803],{"class":119},[114,1355,879],{"class":778},[114,1357,349],{"class":119},[114,1359,129],{"class":778},[114,1361,838],{"class":792},[114,1363,1365,1367,1369,1371,1373,1375,1377,1379,1381,1383,1385,1387,1389,1391,1393,1395],{"class":116,"line":1364},21,[114,1366,1279],{"class":785},[114,1368,815],{"class":119},[114,1370,1153],{"class":792},[114,1372,135],{"class":119},[114,1374,1288],{"class":1158},[114,1376,803],{"class":119},[114,1378,879],{"class":792},[114,1380,135],{"class":119},[114,1382,879],{"class":778},[114,1384,349],{"class":119},[114,1386,129],{"class":778},[114,1388,803],{"class":119},[114,1390,1305],{"class":792},[114,1392,135],{"class":119},[114,1394,1288],{"class":1158},[114,1396,1312],{"class":119},[114,1398,1400],{"class":116,"line":1399},22,[114,1401,845],{"emptyLinePlaceholder":844},[114,1403,1405,1407,1410],{"class":116,"line":1404},23,[114,1406,1231],{"class":785},[114,1408,1409],{"class":161}," 404",[114,1411,1237],{"class":119},[114,1413,1415],{"class":116,"line":1414},24,[114,1416,1417],{"class":1243},"      \u002F\u002F Resource not found — the ID might be wrong\n",[114,1419,1421,1423,1425,1427,1429,1431,1434,1436,1438,1440,1442,1444],{"class":116,"line":1420},25,[114,1422,1250],{"class":778},[114,1424,349],{"class":119},[114,1426,129],{"class":757},[114,1428,761],{"class":792},[114,1430,795],{"class":119},[114,1432,1433],{"class":141},"Resource not found:",[114,1435,795],{"class":119},[114,1437,803],{"class":119},[114,1439,879],{"class":778},[114,1441,349],{"class":119},[114,1443,129],{"class":778},[114,1445,838],{"class":792},[114,1447,1449,1451,1453,1455,1457,1459,1461,1463,1465,1467,1469,1471,1473,1475,1477,1479],{"class":116,"line":1448},26,[114,1450,1279],{"class":785},[114,1452,815],{"class":119},[114,1454,1153],{"class":792},[114,1456,135],{"class":119},[114,1458,1288],{"class":1158},[114,1460,803],{"class":119},[114,1462,879],{"class":792},[114,1464,135],{"class":119},[114,1466,879],{"class":778},[114,1468,349],{"class":119},[114,1470,129],{"class":778},[114,1472,803],{"class":119},[114,1474,1305],{"class":792},[114,1476,135],{"class":119},[114,1478,1288],{"class":1158},[114,1480,1312],{"class":119},[114,1482,1484],{"class":116,"line":1483},27,[114,1485,845],{"emptyLinePlaceholder":844},[114,1487,1489,1491,1494],{"class":116,"line":1488},28,[114,1490,1231],{"class":785},[114,1492,1493],{"class":161}," 429",[114,1495,1237],{"class":119},[114,1497,1499],{"class":116,"line":1498},29,[114,1500,1501],{"class":1243},"      \u002F\u002F Rate limited — retry after waiting\n",[114,1503,1505,1508,1511,1513,1515,1517,1520,1522,1525,1527,1529,1531,1533],{"class":116,"line":1504},30,[114,1506,1507],{"class":128},"      const",[114,1509,1510],{"class":778}," resetTime",[114,1512,782],{"class":119},[114,1514,779],{"class":778},[114,1516,349],{"class":119},[114,1518,1519],{"class":778},"headers",[114,1521,349],{"class":119},[114,1523,1524],{"class":757},"get",[114,1526,761],{"class":792},[114,1528,795],{"class":119},[114,1530,712],{"class":141},[114,1532,795],{"class":119},[114,1534,838],{"class":792},[114,1536,1538,1540,1543,1545],{"class":116,"line":1537},31,[114,1539,1507],{"class":128},[114,1541,1542],{"class":778}," retryAfter",[114,1544,782],{"class":119},[114,1546,1547],{"class":778}," resetTime\n",[114,1549,1551,1554,1557,1559,1562,1565,1568,1570,1573,1575,1578,1581,1583,1586,1589,1591,1594,1597,1599,1601],{"class":116,"line":1550},32,[114,1552,1553],{"class":119},"        ?",[114,1555,1556],{"class":778}," Math",[114,1558,349],{"class":119},[114,1560,1561],{"class":757},"max",[114,1563,1564],{"class":792},"((",[114,1566,1567],{"class":757},"Number",[114,1569,761],{"class":792},[114,1571,1572],{"class":778},"resetTime",[114,1574,868],{"class":792},[114,1576,1577],{"class":119},"*",[114,1579,1580],{"class":161}," 1000",[114,1582,868],{"class":792},[114,1584,1585],{"class":119},"-",[114,1587,1588],{"class":778}," Date",[114,1590,349],{"class":119},[114,1592,1593],{"class":757},"now",[114,1595,1596],{"class":792},"()",[114,1598,803],{"class":119},[114,1600,1580],{"class":161},[114,1602,838],{"class":792},[114,1604,1606,1609],{"class":116,"line":1605},33,[114,1607,1608],{"class":119},"        :",[114,1610,1611],{"class":161}," 60000\n",[114,1613,1615,1617,1619,1622,1624,1626,1629,1631,1634,1636,1639,1642,1645,1647,1649,1651,1654,1656],{"class":116,"line":1614},34,[114,1616,1250],{"class":778},[114,1618,349],{"class":119},[114,1620,1621],{"class":757},"warn",[114,1623,761],{"class":792},[114,1625,909],{"class":119},[114,1627,1628],{"class":141},"Rate limited. Retry after ",[114,1630,915],{"class":119},[114,1632,1633],{"class":778},"Math",[114,1635,349],{"class":119},[114,1637,1638],{"class":757},"ceil",[114,1640,1641],{"class":778},"(retryAfter ",[114,1643,1644],{"class":119},"\u002F",[114,1646,1580],{"class":161},[114,1648,705],{"class":778},[114,1650,924],{"class":119},[114,1652,1653],{"class":141},"s",[114,1655,909],{"class":119},[114,1657,838],{"class":792},[114,1659,1661,1663,1665,1667,1669,1671,1673,1675,1677,1679,1681,1683,1685,1687,1689,1691,1693,1695],{"class":116,"line":1660},35,[114,1662,1279],{"class":785},[114,1664,815],{"class":119},[114,1666,1153],{"class":792},[114,1668,135],{"class":119},[114,1670,1288],{"class":1158},[114,1672,803],{"class":119},[114,1674,879],{"class":792},[114,1676,135],{"class":119},[114,1678,879],{"class":778},[114,1680,349],{"class":119},[114,1682,129],{"class":778},[114,1684,803],{"class":119},[114,1686,1305],{"class":792},[114,1688,135],{"class":119},[114,1690,1159],{"class":1158},[114,1692,803],{"class":119},[114,1694,1542],{"class":778},[114,1696,1312],{"class":119},[114,1698,1700],{"class":116,"line":1699},36,[114,1701,845],{"emptyLinePlaceholder":844},[114,1703,1705,1708],{"class":116,"line":1704},37,[114,1706,1707],{"class":785},"    default",[114,1709,1237],{"class":119},[114,1711,1713],{"class":116,"line":1712},38,[114,1714,1715],{"class":1243},"      \u002F\u002F Server error — retry with backoff\n",[114,1717,1719,1721,1723,1725,1727,1729,1732,1734,1736,1738,1740,1742,1744,1746,1748,1750,1752,1754],{"class":116,"line":1718},39,[114,1720,1250],{"class":778},[114,1722,349],{"class":119},[114,1724,129],{"class":757},[114,1726,761],{"class":792},[114,1728,909],{"class":119},[114,1730,1731],{"class":141},"Server error ",[114,1733,915],{"class":119},[114,1735,860],{"class":778},[114,1737,349],{"class":119},[114,1739,154],{"class":778},[114,1741,924],{"class":119},[114,1743,135],{"class":141},[114,1745,909],{"class":119},[114,1747,803],{"class":119},[114,1749,879],{"class":778},[114,1751,349],{"class":119},[114,1753,129],{"class":778},[114,1755,838],{"class":792},[114,1757,1759,1761,1763,1765,1767,1769,1771,1773,1775,1777,1779,1781,1783,1785,1787,1789],{"class":116,"line":1758},40,[114,1760,1279],{"class":785},[114,1762,815],{"class":119},[114,1764,1153],{"class":792},[114,1766,135],{"class":119},[114,1768,1288],{"class":1158},[114,1770,803],{"class":119},[114,1772,879],{"class":792},[114,1774,135],{"class":119},[114,1776,879],{"class":778},[114,1778,349],{"class":119},[114,1780,129],{"class":778},[114,1782,803],{"class":119},[114,1784,1305],{"class":792},[114,1786,135],{"class":119},[114,1788,1159],{"class":1158},[114,1790,1312],{"class":119},[114,1792,1794],{"class":116,"line":1793},41,[114,1795,946],{"class":119},[114,1797,1799],{"class":116,"line":1798},42,[114,1800,167],{"class":119},[224,1802,1804],{"id":1803},"_3-implement-retry-with-exponential-backoff","3. Implement Retry with Exponential Backoff",[92,1806,1807,1808,1810,1811,1814],{},"For retryable errors (",[111,1809,306],{},", ",[111,1812,1813],{},"5xx","), use exponential backoff to avoid overwhelming the API:",[104,1816,1818],{"className":742,"code":1817,"language":744,"meta":109,"style":109},"async function fetchWithBackoff(url, apiKey, maxRetries = 3) {\n  for (let attempt = 0; attempt \u003C= maxRetries; attempt++) {\n    const response = await fetch(url, {\n      headers: { 'X-API-Key': apiKey },\n    })\n\n    if (response.ok) {\n      return response.json()\n    }\n\n    \u002F\u002F Only retry on rate limits and server errors\n    if (response.status !== 429 && response.status \u003C 500) {\n      const error = await response.json()\n      throw new Error(`API Error ${response.status}: ${error.error}`)\n    }\n\n    if (attempt \u003C maxRetries) {\n      const baseDelay = response.status === 429 ? 5000 : 1000\n      const delay = baseDelay * Math.pow(2, attempt) + Math.random() * 1000\n      console.log(`Attempt ${attempt + 1} failed. Retrying in ${Math.ceil(delay \u002F 1000)}s...`)\n      await new Promise((resolve) => setTimeout(resolve, delay))\n    }\n  }\n\n  throw new Error(`Failed after ${maxRetries + 1} attempts`)\n}\n",[111,1819,1820,1851,1890,1910,1931,1938,1942,1959,1971,1976,1980,1985,2021,2039,2078,2082,2086,2103,2135,2183,2240,2277,2281,2285,2289,2323],{"__ignoreMap":109},[114,1821,1822,1824,1826,1829,1831,1833,1835,1837,1839,1842,1844,1847,1849],{"class":116,"line":60},[114,1823,751],{"class":128},[114,1825,754],{"class":128},[114,1827,1828],{"class":757}," fetchWithBackoff",[114,1830,761],{"class":119},[114,1832,1069],{"class":764},[114,1834,803],{"class":119},[114,1836,827],{"class":764},[114,1838,803],{"class":119},[114,1840,1841],{"class":764}," maxRetries",[114,1843,782],{"class":119},[114,1845,1846],{"class":161}," 3",[114,1848,705],{"class":119},[114,1850,770],{"class":119},[114,1852,1853,1856,1858,1861,1864,1866,1869,1872,1874,1877,1879,1881,1883,1886,1888],{"class":116,"line":81},[114,1854,1855],{"class":785},"  for",[114,1857,854],{"class":792},[114,1859,1860],{"class":128},"let",[114,1862,1863],{"class":778}," attempt",[114,1865,782],{"class":119},[114,1867,1868],{"class":161}," 0",[114,1870,1871],{"class":119},";",[114,1873,1863],{"class":778},[114,1875,1876],{"class":119}," \u003C=",[114,1878,1841],{"class":778},[114,1880,1871],{"class":119},[114,1882,1863],{"class":778},[114,1884,1885],{"class":119},"++",[114,1887,868],{"class":792},[114,1889,120],{"class":119},[114,1891,1892,1894,1896,1898,1900,1902,1904,1906,1908],{"class":116,"line":38},[114,1893,876],{"class":128},[114,1895,779],{"class":778},[114,1897,782],{"class":119},[114,1899,786],{"class":785},[114,1901,789],{"class":757},[114,1903,761],{"class":792},[114,1905,1069],{"class":778},[114,1907,803],{"class":119},[114,1909,770],{"class":119},[114,1911,1912,1915,1917,1919,1921,1923,1925,1927,1929],{"class":116,"line":8},[114,1913,1914],{"class":792},"      headers",[114,1916,135],{"class":119},[114,1918,815],{"class":119},[114,1920,818],{"class":119},[114,1922,272],{"class":792},[114,1924,795],{"class":119},[114,1926,135],{"class":119},[114,1928,827],{"class":778},[114,1930,830],{"class":119},[114,1932,1933,1936],{"class":116,"line":841},[114,1934,1935],{"class":119},"    }",[114,1937,838],{"class":792},[114,1939,1940],{"class":116,"line":848},[114,1941,845],{"emptyLinePlaceholder":844},[114,1943,1944,1947,1949,1951,1953,1955,1957],{"class":116,"line":873},[114,1945,1946],{"class":785},"    if",[114,1948,854],{"class":792},[114,1950,860],{"class":778},[114,1952,349],{"class":119},[114,1954,865],{"class":778},[114,1956,868],{"class":792},[114,1958,120],{"class":119},[114,1960,1961,1963,1965,1967,1969],{"class":116,"line":895},[114,1962,1279],{"class":785},[114,1964,779],{"class":778},[114,1966,349],{"class":119},[114,1968,108],{"class":757},[114,1970,892],{"class":792},[114,1972,1973],{"class":116,"line":943},[114,1974,1975],{"class":119},"    }\n",[114,1977,1978],{"class":116,"line":949},[114,1979,845],{"emptyLinePlaceholder":844},[114,1981,1982],{"class":116,"line":954},[114,1983,1984],{"class":1243},"    \u002F\u002F Only retry on rate limits and server errors\n",[114,1986,1987,1989,1991,1993,1995,1997,2000,2002,2005,2007,2009,2011,2014,2017,2019],{"class":116,"line":968},[114,1988,1946],{"class":785},[114,1990,854],{"class":792},[114,1992,860],{"class":778},[114,1994,349],{"class":119},[114,1996,154],{"class":778},[114,1998,1999],{"class":119}," !==",[114,2001,1493],{"class":161},[114,2003,2004],{"class":119}," &&",[114,2006,779],{"class":778},[114,2008,349],{"class":119},[114,2010,154],{"class":778},[114,2012,2013],{"class":119}," \u003C",[114,2015,2016],{"class":161}," 500",[114,2018,868],{"class":792},[114,2020,120],{"class":119},[114,2022,2023,2025,2027,2029,2031,2033,2035,2037],{"class":116,"line":1040},[114,2024,1507],{"class":128},[114,2026,879],{"class":778},[114,2028,782],{"class":119},[114,2030,786],{"class":785},[114,2032,779],{"class":778},[114,2034,349],{"class":119},[114,2036,108],{"class":757},[114,2038,892],{"class":792},[114,2040,2041,2044,2046,2048,2050,2052,2054,2056,2058,2060,2062,2064,2066,2068,2070,2072,2074,2076],{"class":116,"line":1240},[114,2042,2043],{"class":785},"      throw",[114,2045,901],{"class":119},[114,2047,904],{"class":757},[114,2049,761],{"class":792},[114,2051,909],{"class":119},[114,2053,912],{"class":141},[114,2055,915],{"class":119},[114,2057,860],{"class":778},[114,2059,349],{"class":119},[114,2061,154],{"class":778},[114,2063,924],{"class":119},[114,2065,927],{"class":141},[114,2067,915],{"class":119},[114,2069,129],{"class":778},[114,2071,349],{"class":119},[114,2073,129],{"class":778},[114,2075,938],{"class":119},[114,2077,838],{"class":792},[114,2079,2080],{"class":116,"line":1247},[114,2081,1975],{"class":119},[114,2083,2084],{"class":116,"line":1276},[114,2085,845],{"emptyLinePlaceholder":844},[114,2087,2088,2090,2092,2095,2097,2099,2101],{"class":116,"line":1315},[114,2089,1946],{"class":785},[114,2091,854],{"class":792},[114,2093,2094],{"class":778},"attempt",[114,2096,2013],{"class":119},[114,2098,1841],{"class":778},[114,2100,868],{"class":792},[114,2102,120],{"class":119},[114,2104,2105,2107,2110,2112,2114,2116,2118,2121,2123,2126,2129,2132],{"class":116,"line":1320},[114,2106,1507],{"class":128},[114,2108,2109],{"class":778}," baseDelay",[114,2111,782],{"class":119},[114,2113,779],{"class":778},[114,2115,349],{"class":119},[114,2117,154],{"class":778},[114,2119,2120],{"class":119}," ===",[114,2122,1493],{"class":161},[114,2124,2125],{"class":119}," ?",[114,2127,2128],{"class":161}," 5000",[114,2130,2131],{"class":119}," :",[114,2133,2134],{"class":161}," 1000\n",[114,2136,2137,2139,2142,2144,2146,2149,2151,2153,2156,2158,2161,2163,2165,2167,2170,2172,2174,2177,2179,2181],{"class":116,"line":1330},[114,2138,1507],{"class":128},[114,2140,2141],{"class":778}," delay",[114,2143,782],{"class":119},[114,2145,2109],{"class":778},[114,2147,2148],{"class":119}," *",[114,2150,1556],{"class":778},[114,2152,349],{"class":119},[114,2154,2155],{"class":757},"pow",[114,2157,761],{"class":792},[114,2159,2160],{"class":161},"2",[114,2162,803],{"class":119},[114,2164,1863],{"class":778},[114,2166,868],{"class":792},[114,2168,2169],{"class":119},"+",[114,2171,1556],{"class":778},[114,2173,349],{"class":119},[114,2175,2176],{"class":757},"random",[114,2178,1177],{"class":792},[114,2180,1577],{"class":119},[114,2182,2134],{"class":161},[114,2184,2185,2187,2189,2192,2194,2196,2199,2201,2204,2206,2209,2211,2214,2216,2218,2220,2222,2225,2227,2229,2231,2233,2236,2238],{"class":116,"line":1336},[114,2186,1250],{"class":778},[114,2188,349],{"class":119},[114,2190,2191],{"class":757},"log",[114,2193,761],{"class":792},[114,2195,909],{"class":119},[114,2197,2198],{"class":141},"Attempt ",[114,2200,915],{"class":119},[114,2202,2203],{"class":778},"attempt ",[114,2205,2169],{"class":119},[114,2207,2208],{"class":161}," 1",[114,2210,924],{"class":119},[114,2212,2213],{"class":141}," failed. Retrying in ",[114,2215,915],{"class":119},[114,2217,1633],{"class":778},[114,2219,349],{"class":119},[114,2221,1638],{"class":757},[114,2223,2224],{"class":778},"(delay ",[114,2226,1644],{"class":119},[114,2228,1580],{"class":161},[114,2230,705],{"class":778},[114,2232,924],{"class":119},[114,2234,2235],{"class":141},"s...",[114,2237,909],{"class":119},[114,2239,838],{"class":792},[114,2241,2242,2245,2247,2251,2253,2255,2258,2260,2263,2266,2268,2270,2272,2274],{"class":116,"line":1364},[114,2243,2244],{"class":785},"      await",[114,2246,901],{"class":119},[114,2248,2250],{"class":2249},"sBMFI"," Promise",[114,2252,761],{"class":792},[114,2254,761],{"class":119},[114,2256,2257],{"class":764},"resolve",[114,2259,705],{"class":119},[114,2261,2262],{"class":128}," =>",[114,2264,2265],{"class":757}," setTimeout",[114,2267,761],{"class":792},[114,2269,2257],{"class":778},[114,2271,803],{"class":119},[114,2273,2141],{"class":778},[114,2275,2276],{"class":792},"))\n",[114,2278,2279],{"class":116,"line":1399},[114,2280,1975],{"class":119},[114,2282,2283],{"class":116,"line":1404},[114,2284,946],{"class":119},[114,2286,2287],{"class":116,"line":1414},[114,2288,845],{"emptyLinePlaceholder":844},[114,2290,2291,2294,2296,2298,2300,2302,2305,2307,2310,2312,2314,2316,2319,2321],{"class":116,"line":1420},[114,2292,2293],{"class":785},"  throw",[114,2295,901],{"class":119},[114,2297,904],{"class":757},[114,2299,761],{"class":792},[114,2301,909],{"class":119},[114,2303,2304],{"class":141},"Failed after ",[114,2306,915],{"class":119},[114,2308,2309],{"class":778},"maxRetries ",[114,2311,2169],{"class":119},[114,2313,2208],{"class":161},[114,2315,924],{"class":119},[114,2317,2318],{"class":141}," attempts",[114,2320,909],{"class":119},[114,2322,838],{"class":792},[114,2324,2325],{"class":116,"line":1448},[114,2326,167],{"class":119},[224,2328,2330],{"id":2329},"_4-log-errors-for-debugging","4. Log Errors for Debugging",[92,2332,2333],{},"Maintain structured logs that capture enough context for debugging:",[104,2335,2337],{"className":742,"code":2336,"language":744,"meta":109,"style":109},"function logApiError(endpoint, statusCode, errorMessage, context = {}) {\n  const logEntry = {\n    timestamp: new Date().toISOString(),\n    service: 'quote-gallery-api',\n    endpoint,\n    statusCode,\n    error: errorMessage,\n    ...context,\n  }\n\n  if (statusCode >= 500) {\n    console.error('API Server Error:', JSON.stringify(logEntry))\n  } else if (statusCode === 429) {\n    console.warn('API Rate Limit:', JSON.stringify(logEntry))\n  } else {\n    console.info('API Client Error:', JSON.stringify(logEntry))\n  }\n}\n",[111,2338,2339,2374,2385,2407,2423,2430,2437,2448,2458,2462,2466,2484,2519,2541,2572,2580,2612,2616],{"__ignoreMap":109},[114,2340,2341,2344,2347,2349,2352,2354,2357,2359,2362,2364,2367,2369,2372],{"class":116,"line":60},[114,2342,2343],{"class":128},"function",[114,2345,2346],{"class":757}," logApiError",[114,2348,761],{"class":119},[114,2350,2351],{"class":764},"endpoint",[114,2353,803],{"class":119},[114,2355,2356],{"class":764}," statusCode",[114,2358,803],{"class":119},[114,2360,2361],{"class":764}," errorMessage",[114,2363,803],{"class":119},[114,2365,2366],{"class":764}," context",[114,2368,782],{"class":119},[114,2370,2371],{"class":119}," {})",[114,2373,770],{"class":119},[114,2375,2376,2378,2381,2383],{"class":116,"line":81},[114,2377,775],{"class":128},[114,2379,2380],{"class":778}," logEntry",[114,2382,782],{"class":119},[114,2384,770],{"class":119},[114,2386,2387,2390,2392,2394,2396,2398,2400,2403,2405],{"class":116,"line":38},[114,2388,2389],{"class":792},"    timestamp",[114,2391,135],{"class":119},[114,2393,901],{"class":119},[114,2395,1588],{"class":757},[114,2397,1596],{"class":792},[114,2399,349],{"class":119},[114,2401,2402],{"class":757},"toISOString",[114,2404,1596],{"class":792},[114,2406,147],{"class":119},[114,2408,2409,2412,2414,2416,2419,2421],{"class":116,"line":8},[114,2410,2411],{"class":792},"    service",[114,2413,135],{"class":119},[114,2415,818],{"class":119},[114,2417,2418],{"class":141},"quote-gallery-api",[114,2420,795],{"class":119},[114,2422,147],{"class":119},[114,2424,2425,2428],{"class":116,"line":841},[114,2426,2427],{"class":778},"    endpoint",[114,2429,147],{"class":119},[114,2431,2432,2435],{"class":116,"line":848},[114,2433,2434],{"class":778},"    statusCode",[114,2436,147],{"class":119},[114,2438,2439,2442,2444,2446],{"class":116,"line":873},[114,2440,2441],{"class":792},"    error",[114,2443,135],{"class":119},[114,2445,2361],{"class":778},[114,2447,147],{"class":119},[114,2449,2450,2453,2456],{"class":116,"line":895},[114,2451,2452],{"class":119},"    ...",[114,2454,2455],{"class":778},"context",[114,2457,147],{"class":119},[114,2459,2460],{"class":116,"line":943},[114,2461,946],{"class":119},[114,2463,2464],{"class":116,"line":949},[114,2465,845],{"emptyLinePlaceholder":844},[114,2467,2468,2470,2472,2475,2478,2480,2482],{"class":116,"line":954},[114,2469,851],{"class":785},[114,2471,854],{"class":792},[114,2473,2474],{"class":778},"statusCode",[114,2476,2477],{"class":119}," >=",[114,2479,2016],{"class":161},[114,2481,868],{"class":792},[114,2483,120],{"class":119},[114,2485,2486,2489,2491,2493,2495,2497,2500,2502,2504,2507,2509,2512,2514,2517],{"class":116,"line":968},[114,2487,2488],{"class":778},"    console",[114,2490,349],{"class":119},[114,2492,129],{"class":757},[114,2494,761],{"class":792},[114,2496,795],{"class":119},[114,2498,2499],{"class":141},"API Server Error:",[114,2501,795],{"class":119},[114,2503,803],{"class":119},[114,2505,2506],{"class":778}," JSON",[114,2508,349],{"class":119},[114,2510,2511],{"class":757},"stringify",[114,2513,761],{"class":792},[114,2515,2516],{"class":778},"logEntry",[114,2518,2276],{"class":792},[114,2520,2521,2523,2526,2529,2531,2533,2535,2537,2539],{"class":116,"line":1040},[114,2522,835],{"class":119},[114,2524,2525],{"class":785}," else",[114,2527,2528],{"class":785}," if",[114,2530,854],{"class":792},[114,2532,2474],{"class":778},[114,2534,2120],{"class":119},[114,2536,1493],{"class":161},[114,2538,868],{"class":792},[114,2540,120],{"class":119},[114,2542,2543,2545,2547,2549,2551,2553,2556,2558,2560,2562,2564,2566,2568,2570],{"class":116,"line":1240},[114,2544,2488],{"class":778},[114,2546,349],{"class":119},[114,2548,1621],{"class":757},[114,2550,761],{"class":792},[114,2552,795],{"class":119},[114,2554,2555],{"class":141},"API Rate Limit:",[114,2557,795],{"class":119},[114,2559,803],{"class":119},[114,2561,2506],{"class":778},[114,2563,349],{"class":119},[114,2565,2511],{"class":757},[114,2567,761],{"class":792},[114,2569,2516],{"class":778},[114,2571,2276],{"class":792},[114,2573,2574,2576,2578],{"class":116,"line":1247},[114,2575,835],{"class":119},[114,2577,2525],{"class":785},[114,2579,770],{"class":119},[114,2581,2582,2584,2586,2589,2591,2593,2596,2598,2600,2602,2604,2606,2608,2610],{"class":116,"line":1276},[114,2583,2488],{"class":778},[114,2585,349],{"class":119},[114,2587,2588],{"class":757},"info",[114,2590,761],{"class":792},[114,2592,795],{"class":119},[114,2594,2595],{"class":141},"API Client Error:",[114,2597,795],{"class":119},[114,2599,803],{"class":119},[114,2601,2506],{"class":778},[114,2603,349],{"class":119},[114,2605,2511],{"class":757},[114,2607,761],{"class":792},[114,2609,2516],{"class":778},[114,2611,2276],{"class":792},[114,2613,2614],{"class":116,"line":1315},[114,2615,946],{"class":119},[114,2617,2618],{"class":116,"line":1320},[114,2619,167],{"class":119},[224,2621,2623],{"id":2622},"_5-provide-user-friendly-messages","5. Provide User-Friendly Messages",[92,2625,2626],{},"Don't expose raw API errors to your end users. Map them to friendly messages:",[104,2628,2630],{"className":742,"code":2629,"language":744,"meta":109,"style":109},"const USER_FRIENDLY_MESSAGES = {\n  400: 'Something went wrong with the request. Please try again.',\n  401: 'Unable to connect to the quotes service. Please check your configuration.',\n  404: 'The requested quote or author could not be found.',\n  429: 'We\\'re making too many requests right now. Please wait a moment and try again.',\n  500: 'The quotes service is experiencing issues. Please try again later.',\n  503: 'The quotes service is temporarily unavailable. Please try again in a few minutes.',\n}\n\nfunction getUserMessage(statusCode) {\n  return USER_FRIENDLY_MESSAGES[statusCode]\n    ?? 'An unexpected error occurred. Please try again later.'\n}\n",[111,2631,2632,2645,2661,2677,2693,2715,2731,2747,2751,2755,2770,2785,2798],{"__ignoreMap":109},[114,2633,2634,2637,2640,2643],{"class":116,"line":60},[114,2635,2636],{"class":128},"const",[114,2638,2639],{"class":778}," USER_FRIENDLY_MESSAGES ",[114,2641,2642],{"class":119},"=",[114,2644,770],{"class":119},[114,2646,2647,2650,2652,2654,2657,2659],{"class":116,"line":81},[114,2648,2649],{"class":161},"  400",[114,2651,135],{"class":119},[114,2653,818],{"class":119},[114,2655,2656],{"class":141},"Something went wrong with the request. Please try again.",[114,2658,795],{"class":119},[114,2660,147],{"class":119},[114,2662,2663,2666,2668,2670,2673,2675],{"class":116,"line":38},[114,2664,2665],{"class":161},"  401",[114,2667,135],{"class":119},[114,2669,818],{"class":119},[114,2671,2672],{"class":141},"Unable to connect to the quotes service. Please check your configuration.",[114,2674,795],{"class":119},[114,2676,147],{"class":119},[114,2678,2679,2682,2684,2686,2689,2691],{"class":116,"line":8},[114,2680,2681],{"class":161},"  404",[114,2683,135],{"class":119},[114,2685,818],{"class":119},[114,2687,2688],{"class":141},"The requested quote or author could not be found.",[114,2690,795],{"class":119},[114,2692,147],{"class":119},[114,2694,2695,2698,2700,2702,2705,2708,2711,2713],{"class":116,"line":841},[114,2696,2697],{"class":161},"  429",[114,2699,135],{"class":119},[114,2701,818],{"class":119},[114,2703,2704],{"class":141},"We",[114,2706,2707],{"class":778},"\\'",[114,2709,2710],{"class":141},"re making too many requests right now. Please wait a moment and try again.",[114,2712,795],{"class":119},[114,2714,147],{"class":119},[114,2716,2717,2720,2722,2724,2727,2729],{"class":116,"line":848},[114,2718,2719],{"class":161},"  500",[114,2721,135],{"class":119},[114,2723,818],{"class":119},[114,2725,2726],{"class":141},"The quotes service is experiencing issues. Please try again later.",[114,2728,795],{"class":119},[114,2730,147],{"class":119},[114,2732,2733,2736,2738,2740,2743,2745],{"class":116,"line":873},[114,2734,2735],{"class":161},"  503",[114,2737,135],{"class":119},[114,2739,818],{"class":119},[114,2741,2742],{"class":141},"The quotes service is temporarily unavailable. Please try again in a few minutes.",[114,2744,795],{"class":119},[114,2746,147],{"class":119},[114,2748,2749],{"class":116,"line":895},[114,2750,167],{"class":119},[114,2752,2753],{"class":116,"line":943},[114,2754,845],{"emptyLinePlaceholder":844},[114,2756,2757,2759,2762,2764,2766,2768],{"class":116,"line":949},[114,2758,2343],{"class":128},[114,2760,2761],{"class":757}," getUserMessage",[114,2763,761],{"class":119},[114,2765,2474],{"class":764},[114,2767,705],{"class":119},[114,2769,770],{"class":119},[114,2771,2772,2774,2777,2780,2782],{"class":116,"line":954},[114,2773,957],{"class":785},[114,2775,2776],{"class":778}," USER_FRIENDLY_MESSAGES",[114,2778,2779],{"class":792},"[",[114,2781,2474],{"class":778},[114,2783,2784],{"class":792},"]\n",[114,2786,2787,2790,2792,2795],{"class":116,"line":968},[114,2788,2789],{"class":119},"    ??",[114,2791,818],{"class":119},[114,2793,2794],{"class":141},"An unexpected error occurred. Please try again later.",[114,2796,2797],{"class":119},"'\n",[114,2799,2800],{"class":116,"line":1040},[114,2801,167],{"class":119},[96,2803,2805],{"id":2804},"building-a-robust-api-client","Building a Robust API Client",[92,2807,2808],{},"Here's a complete example of a resilient API client that incorporates all the best practices above:",[104,2810,2812],{"className":742,"code":2811,"language":744,"meta":109,"style":109},"class QuoteGalleryClient {\n  constructor(apiKey, options = {}) {\n    this.apiKey = apiKey\n    this.baseUrl = options.baseUrl ?? 'https:\u002F\u002Fquotegallery.nl\u002Fapi\u002Fv1'\n    this.maxRetries = options.maxRetries ?? 3\n    this.timeout = options.timeout ?? 10000\n  }\n\n  async request(endpoint, params = {}) {\n    const url = new URL(`${this.baseUrl}${endpoint}`)\n    Object.entries(params).forEach(([key, value]) => {\n      if (value !== undefined && value !== null) {\n        url.searchParams.set(key, String(value))\n      }\n    })\n\n    for (let attempt = 0; attempt \u003C= this.maxRetries; attempt++) {\n      const controller = new AbortController()\n      const timeoutId = setTimeout(() => controller.abort(), this.timeout)\n\n      try {\n        const response = await fetch(url.toString(), {\n          headers: { 'X-API-Key': this.apiKey },\n          signal: controller.signal,\n        })\n\n        clearTimeout(timeoutId)\n\n        if (response.ok) {\n          return response.json()\n        }\n\n        const error = await response.json()\n\n        \u002F\u002F Don't retry client errors (except rate limits)\n        if (response.status !== 429 && response.status \u003C 500) {\n          throw new ApiError(error.error, response.status)\n        }\n\n        \u002F\u002F Retry rate limits and server errors\n        if (attempt \u003C this.maxRetries) {\n          const delay = this.getRetryDelay(response, attempt)\n          await new Promise((resolve) => setTimeout(resolve, delay))\n          continue\n        }\n\n        throw new ApiError(error.error, response.status)\n      } catch (err) {\n        clearTimeout(timeoutId)\n\n        if (err instanceof ApiError) throw err\n\n        if (err.name === 'AbortError') {\n          throw new ApiError('Request timed out', 408)\n        }\n\n        throw new ApiError(`Network error: ${err.message}`, 0)\n      }\n    }\n  }\n\n  getRetryDelay(response, attempt) {\n    if (response.status === 429) {\n      const reset = response.headers.get('X-RateLimit-Reset')\n      if (reset) {\n        return Math.max((Number(reset) * 1000) - Date.now(), 1000)\n      }\n    }\n    return Math.min(1000 * Math.pow(2, attempt) + Math.random() * 1000, 30000)\n  }\n\n  \u002F\u002F Convenience methods\n  getQuotes(params) { return this.request('\u002Fquotes', params) }\n  getRandomQuote(params) { return this.request('\u002Fquotes\u002Frandom', params) }\n  getQuote(id, params) { return this.request(`\u002Fquotes\u002F${id}`, params) }\n  getAuthors(params) { return this.request('\u002Fauthors', params) }\n  getAuthor(id, params) { return this.request(`\u002Fauthors\u002F${id}`, params) }\n  getPlaylists(params) { return this.request('\u002Fplaylists', params) }\n  getPlaylist(id, params) { return this.request(`\u002Fplaylists\u002F${id}`, params) }\n  getCategories() { return this.request('\u002Fcategories') }\n}\n\nclass ApiError extends Error {\n  constructor(message, statusCode) {\n    super(message)\n    this.name = 'ApiError'\n    this.statusCode = statusCode\n  }\n}\n",[111,2813,2814,2824,2844,2856,2881,2901,2921,2925,2929,2952,2985,3027,3055,3085,3090,3096,3100,3136,3152,3186,3190,3197,3225,3248,3264,3271,3275,3287,3291,3308,3321,3326,3330,3348,3352,3357,3389,3417,3421,3425,3430,3448,3472,3504,3510,3515,3520,3548,3566,3577,3582,3604,3609,3636,3661,3666,3671,3704,3709,3714,3719,3724,3742,3763,3793,3807,3851,3856,3861,3917,3922,3927,3933,3972,4009,4055,4092,4137,4174,4219,4248,4253,4258,4272,4289,4301,4317,4329,4334],{"__ignoreMap":109},[114,2815,2816,2819,2822],{"class":116,"line":60},[114,2817,2818],{"class":128},"class",[114,2820,2821],{"class":2249}," QuoteGalleryClient",[114,2823,770],{"class":119},[114,2825,2826,2829,2831,2833,2835,2838,2840,2842],{"class":116,"line":81},[114,2827,2828],{"class":128},"  constructor",[114,2830,761],{"class":119},[114,2832,765],{"class":764},[114,2834,803],{"class":119},[114,2836,2837],{"class":764}," options",[114,2839,782],{"class":119},[114,2841,2371],{"class":119},[114,2843,770],{"class":119},[114,2845,2846,2849,2851,2853],{"class":116,"line":38},[114,2847,2848],{"class":119},"    this.",[114,2850,765],{"class":778},[114,2852,782],{"class":119},[114,2854,2855],{"class":778}," apiKey\n",[114,2857,2858,2860,2863,2865,2867,2869,2871,2874,2876,2879],{"class":116,"line":8},[114,2859,2848],{"class":119},[114,2861,2862],{"class":778},"baseUrl",[114,2864,782],{"class":119},[114,2866,2837],{"class":778},[114,2868,349],{"class":119},[114,2870,2862],{"class":778},[114,2872,2873],{"class":119}," ??",[114,2875,818],{"class":119},[114,2877,2878],{"class":141},"https:\u002F\u002Fquotegallery.nl\u002Fapi\u002Fv1",[114,2880,2797],{"class":119},[114,2882,2883,2885,2888,2890,2892,2894,2896,2898],{"class":116,"line":841},[114,2884,2848],{"class":119},[114,2886,2887],{"class":778},"maxRetries",[114,2889,782],{"class":119},[114,2891,2837],{"class":778},[114,2893,349],{"class":119},[114,2895,2887],{"class":778},[114,2897,2873],{"class":119},[114,2899,2900],{"class":161}," 3\n",[114,2902,2903,2905,2908,2910,2912,2914,2916,2918],{"class":116,"line":848},[114,2904,2848],{"class":119},[114,2906,2907],{"class":778},"timeout",[114,2909,782],{"class":119},[114,2911,2837],{"class":778},[114,2913,349],{"class":119},[114,2915,2907],{"class":778},[114,2917,2873],{"class":119},[114,2919,2920],{"class":161}," 10000\n",[114,2922,2923],{"class":116,"line":873},[114,2924,946],{"class":119},[114,2926,2927],{"class":116,"line":895},[114,2928,845],{"emptyLinePlaceholder":844},[114,2930,2931,2934,2937,2939,2941,2943,2946,2948,2950],{"class":116,"line":943},[114,2932,2933],{"class":128},"  async",[114,2935,2936],{"class":792}," request",[114,2938,761],{"class":119},[114,2940,2351],{"class":764},[114,2942,803],{"class":119},[114,2944,2945],{"class":764}," params",[114,2947,782],{"class":119},[114,2949,2371],{"class":119},[114,2951,770],{"class":119},[114,2953,2954,2956,2959,2961,2963,2966,2968,2971,2974,2976,2979,2981,2983],{"class":116,"line":949},[114,2955,876],{"class":128},[114,2957,2958],{"class":778}," url",[114,2960,782],{"class":119},[114,2962,901],{"class":119},[114,2964,2965],{"class":757}," URL",[114,2967,761],{"class":792},[114,2969,2970],{"class":119},"`${",[114,2972,2973],{"class":119},"this.",[114,2975,2862],{"class":778},[114,2977,2978],{"class":119},"}${",[114,2980,2351],{"class":778},[114,2982,938],{"class":119},[114,2984,838],{"class":792},[114,2986,2987,2990,2992,2995,2997,3000,3002,3004,3007,3009,3012,3015,3017,3020,3023,3025],{"class":116,"line":954},[114,2988,2989],{"class":778},"    Object",[114,2991,349],{"class":119},[114,2993,2994],{"class":757},"entries",[114,2996,761],{"class":792},[114,2998,2999],{"class":778},"params",[114,3001,705],{"class":792},[114,3003,349],{"class":119},[114,3005,3006],{"class":757},"forEach",[114,3008,761],{"class":792},[114,3010,3011],{"class":119},"([",[114,3013,3014],{"class":764},"key",[114,3016,803],{"class":119},[114,3018,3019],{"class":764}," value",[114,3021,3022],{"class":119},"])",[114,3024,2262],{"class":128},[114,3026,770],{"class":119},[114,3028,3029,3032,3034,3037,3039,3042,3044,3046,3048,3051,3053],{"class":116,"line":968},[114,3030,3031],{"class":785},"      if",[114,3033,854],{"class":792},[114,3035,3036],{"class":778},"value",[114,3038,1999],{"class":119},[114,3040,3041],{"class":119}," undefined",[114,3043,2004],{"class":119},[114,3045,3019],{"class":778},[114,3047,1999],{"class":119},[114,3049,3050],{"class":119}," null",[114,3052,868],{"class":792},[114,3054,120],{"class":119},[114,3056,3057,3060,3062,3065,3067,3070,3072,3074,3076,3079,3081,3083],{"class":116,"line":1040},[114,3058,3059],{"class":778},"        url",[114,3061,349],{"class":119},[114,3063,3064],{"class":778},"searchParams",[114,3066,349],{"class":119},[114,3068,3069],{"class":757},"set",[114,3071,761],{"class":792},[114,3073,3014],{"class":778},[114,3075,803],{"class":119},[114,3077,3078],{"class":757}," String",[114,3080,761],{"class":792},[114,3082,3036],{"class":778},[114,3084,2276],{"class":792},[114,3086,3087],{"class":116,"line":1240},[114,3088,3089],{"class":119},"      }\n",[114,3091,3092,3094],{"class":116,"line":1247},[114,3093,1935],{"class":119},[114,3095,838],{"class":792},[114,3097,3098],{"class":116,"line":1276},[114,3099,845],{"emptyLinePlaceholder":844},[114,3101,3102,3105,3107,3109,3111,3113,3115,3117,3119,3121,3124,3126,3128,3130,3132,3134],{"class":116,"line":1315},[114,3103,3104],{"class":785},"    for",[114,3106,854],{"class":792},[114,3108,1860],{"class":128},[114,3110,1863],{"class":778},[114,3112,782],{"class":119},[114,3114,1868],{"class":161},[114,3116,1871],{"class":119},[114,3118,1863],{"class":778},[114,3120,1876],{"class":119},[114,3122,3123],{"class":119}," this.",[114,3125,2887],{"class":778},[114,3127,1871],{"class":119},[114,3129,1863],{"class":778},[114,3131,1885],{"class":119},[114,3133,868],{"class":792},[114,3135,120],{"class":119},[114,3137,3138,3140,3143,3145,3147,3150],{"class":116,"line":1320},[114,3139,1507],{"class":128},[114,3141,3142],{"class":778}," controller",[114,3144,782],{"class":119},[114,3146,901],{"class":119},[114,3148,3149],{"class":757}," AbortController",[114,3151,892],{"class":792},[114,3153,3154,3156,3159,3161,3163,3165,3167,3169,3171,3173,3176,3178,3180,3182,3184],{"class":116,"line":1330},[114,3155,1507],{"class":128},[114,3157,3158],{"class":778}," timeoutId",[114,3160,782],{"class":119},[114,3162,2265],{"class":757},[114,3164,761],{"class":792},[114,3166,1596],{"class":119},[114,3168,2262],{"class":128},[114,3170,3142],{"class":778},[114,3172,349],{"class":119},[114,3174,3175],{"class":757},"abort",[114,3177,1596],{"class":792},[114,3179,803],{"class":119},[114,3181,3123],{"class":119},[114,3183,2907],{"class":778},[114,3185,838],{"class":792},[114,3187,3188],{"class":116,"line":1336},[114,3189,845],{"emptyLinePlaceholder":844},[114,3191,3192,3195],{"class":116,"line":1364},[114,3193,3194],{"class":785},"      try",[114,3196,770],{"class":119},[114,3198,3199,3202,3204,3206,3208,3210,3212,3214,3216,3219,3221,3223],{"class":116,"line":1399},[114,3200,3201],{"class":128},"        const",[114,3203,779],{"class":778},[114,3205,782],{"class":119},[114,3207,786],{"class":785},[114,3209,789],{"class":757},[114,3211,761],{"class":792},[114,3213,1069],{"class":778},[114,3215,349],{"class":119},[114,3217,3218],{"class":757},"toString",[114,3220,1596],{"class":792},[114,3222,803],{"class":119},[114,3224,770],{"class":119},[114,3226,3227,3230,3232,3234,3236,3238,3240,3242,3244,3246],{"class":116,"line":1404},[114,3228,3229],{"class":792},"          headers",[114,3231,135],{"class":119},[114,3233,815],{"class":119},[114,3235,818],{"class":119},[114,3237,272],{"class":792},[114,3239,795],{"class":119},[114,3241,135],{"class":119},[114,3243,3123],{"class":119},[114,3245,765],{"class":778},[114,3247,830],{"class":119},[114,3249,3250,3253,3255,3257,3259,3262],{"class":116,"line":1414},[114,3251,3252],{"class":792},"          signal",[114,3254,135],{"class":119},[114,3256,3142],{"class":778},[114,3258,349],{"class":119},[114,3260,3261],{"class":778},"signal",[114,3263,147],{"class":119},[114,3265,3266,3269],{"class":116,"line":1420},[114,3267,3268],{"class":119},"        }",[114,3270,838],{"class":792},[114,3272,3273],{"class":116,"line":1448},[114,3274,845],{"emptyLinePlaceholder":844},[114,3276,3277,3280,3282,3285],{"class":116,"line":1483},[114,3278,3279],{"class":757},"        clearTimeout",[114,3281,761],{"class":792},[114,3283,3284],{"class":778},"timeoutId",[114,3286,838],{"class":792},[114,3288,3289],{"class":116,"line":1488},[114,3290,845],{"emptyLinePlaceholder":844},[114,3292,3293,3296,3298,3300,3302,3304,3306],{"class":116,"line":1498},[114,3294,3295],{"class":785},"        if",[114,3297,854],{"class":792},[114,3299,860],{"class":778},[114,3301,349],{"class":119},[114,3303,865],{"class":778},[114,3305,868],{"class":792},[114,3307,120],{"class":119},[114,3309,3310,3313,3315,3317,3319],{"class":116,"line":1504},[114,3311,3312],{"class":785},"          return",[114,3314,779],{"class":778},[114,3316,349],{"class":119},[114,3318,108],{"class":757},[114,3320,892],{"class":792},[114,3322,3323],{"class":116,"line":1537},[114,3324,3325],{"class":119},"        }\n",[114,3327,3328],{"class":116,"line":1550},[114,3329,845],{"emptyLinePlaceholder":844},[114,3331,3332,3334,3336,3338,3340,3342,3344,3346],{"class":116,"line":1605},[114,3333,3201],{"class":128},[114,3335,879],{"class":778},[114,3337,782],{"class":119},[114,3339,786],{"class":785},[114,3341,779],{"class":778},[114,3343,349],{"class":119},[114,3345,108],{"class":757},[114,3347,892],{"class":792},[114,3349,3350],{"class":116,"line":1614},[114,3351,845],{"emptyLinePlaceholder":844},[114,3353,3354],{"class":116,"line":1660},[114,3355,3356],{"class":1243},"        \u002F\u002F Don't retry client errors (except rate limits)\n",[114,3358,3359,3361,3363,3365,3367,3369,3371,3373,3375,3377,3379,3381,3383,3385,3387],{"class":116,"line":1699},[114,3360,3295],{"class":785},[114,3362,854],{"class":792},[114,3364,860],{"class":778},[114,3366,349],{"class":119},[114,3368,154],{"class":778},[114,3370,1999],{"class":119},[114,3372,1493],{"class":161},[114,3374,2004],{"class":119},[114,3376,779],{"class":778},[114,3378,349],{"class":119},[114,3380,154],{"class":778},[114,3382,2013],{"class":119},[114,3384,2016],{"class":161},[114,3386,868],{"class":792},[114,3388,120],{"class":119},[114,3390,3391,3394,3396,3399,3401,3403,3405,3407,3409,3411,3413,3415],{"class":116,"line":1704},[114,3392,3393],{"class":785},"          throw",[114,3395,901],{"class":119},[114,3397,3398],{"class":757}," ApiError",[114,3400,761],{"class":792},[114,3402,129],{"class":778},[114,3404,349],{"class":119},[114,3406,129],{"class":778},[114,3408,803],{"class":119},[114,3410,779],{"class":778},[114,3412,349],{"class":119},[114,3414,154],{"class":778},[114,3416,838],{"class":792},[114,3418,3419],{"class":116,"line":1712},[114,3420,3325],{"class":119},[114,3422,3423],{"class":116,"line":1718},[114,3424,845],{"emptyLinePlaceholder":844},[114,3426,3427],{"class":116,"line":1758},[114,3428,3429],{"class":1243},"        \u002F\u002F Retry rate limits and server errors\n",[114,3431,3432,3434,3436,3438,3440,3442,3444,3446],{"class":116,"line":1793},[114,3433,3295],{"class":785},[114,3435,854],{"class":792},[114,3437,2094],{"class":778},[114,3439,2013],{"class":119},[114,3441,3123],{"class":119},[114,3443,2887],{"class":778},[114,3445,868],{"class":792},[114,3447,120],{"class":119},[114,3449,3450,3453,3455,3457,3459,3462,3464,3466,3468,3470],{"class":116,"line":1798},[114,3451,3452],{"class":128},"          const",[114,3454,2141],{"class":778},[114,3456,782],{"class":119},[114,3458,3123],{"class":119},[114,3460,3461],{"class":757},"getRetryDelay",[114,3463,761],{"class":792},[114,3465,860],{"class":778},[114,3467,803],{"class":119},[114,3469,1863],{"class":778},[114,3471,838],{"class":792},[114,3473,3475,3478,3480,3482,3484,3486,3488,3490,3492,3494,3496,3498,3500,3502],{"class":116,"line":3474},43,[114,3476,3477],{"class":785},"          await",[114,3479,901],{"class":119},[114,3481,2250],{"class":2249},[114,3483,761],{"class":792},[114,3485,761],{"class":119},[114,3487,2257],{"class":764},[114,3489,705],{"class":119},[114,3491,2262],{"class":128},[114,3493,2265],{"class":757},[114,3495,761],{"class":792},[114,3497,2257],{"class":778},[114,3499,803],{"class":119},[114,3501,2141],{"class":778},[114,3503,2276],{"class":792},[114,3505,3507],{"class":116,"line":3506},44,[114,3508,3509],{"class":785},"          continue\n",[114,3511,3513],{"class":116,"line":3512},45,[114,3514,3325],{"class":119},[114,3516,3518],{"class":116,"line":3517},46,[114,3519,845],{"emptyLinePlaceholder":844},[114,3521,3523,3526,3528,3530,3532,3534,3536,3538,3540,3542,3544,3546],{"class":116,"line":3522},47,[114,3524,3525],{"class":785},"        throw",[114,3527,901],{"class":119},[114,3529,3398],{"class":757},[114,3531,761],{"class":792},[114,3533,129],{"class":778},[114,3535,349],{"class":119},[114,3537,129],{"class":778},[114,3539,803],{"class":119},[114,3541,779],{"class":778},[114,3543,349],{"class":119},[114,3545,154],{"class":778},[114,3547,838],{"class":792},[114,3549,3551,3554,3557,3559,3562,3564],{"class":116,"line":3550},48,[114,3552,3553],{"class":119},"      }",[114,3555,3556],{"class":785}," catch",[114,3558,854],{"class":792},[114,3560,3561],{"class":778},"err",[114,3563,868],{"class":792},[114,3565,120],{"class":119},[114,3567,3569,3571,3573,3575],{"class":116,"line":3568},49,[114,3570,3279],{"class":757},[114,3572,761],{"class":792},[114,3574,3284],{"class":778},[114,3576,838],{"class":792},[114,3578,3580],{"class":116,"line":3579},50,[114,3581,845],{"emptyLinePlaceholder":844},[114,3583,3585,3587,3589,3591,3594,3596,3598,3601],{"class":116,"line":3584},51,[114,3586,3295],{"class":785},[114,3588,854],{"class":792},[114,3590,3561],{"class":778},[114,3592,3593],{"class":119}," instanceof",[114,3595,3398],{"class":2249},[114,3597,868],{"class":792},[114,3599,3600],{"class":785},"throw",[114,3602,3603],{"class":778}," err\n",[114,3605,3607],{"class":116,"line":3606},52,[114,3608,845],{"emptyLinePlaceholder":844},[114,3610,3612,3614,3616,3618,3620,3623,3625,3627,3630,3632,3634],{"class":116,"line":3611},53,[114,3613,3295],{"class":785},[114,3615,854],{"class":792},[114,3617,3561],{"class":778},[114,3619,349],{"class":119},[114,3621,3622],{"class":778},"name",[114,3624,2120],{"class":119},[114,3626,818],{"class":119},[114,3628,3629],{"class":141},"AbortError",[114,3631,795],{"class":119},[114,3633,868],{"class":792},[114,3635,120],{"class":119},[114,3637,3639,3641,3643,3645,3647,3649,3652,3654,3656,3659],{"class":116,"line":3638},54,[114,3640,3393],{"class":785},[114,3642,901],{"class":119},[114,3644,3398],{"class":757},[114,3646,761],{"class":792},[114,3648,795],{"class":119},[114,3650,3651],{"class":141},"Request timed out",[114,3653,795],{"class":119},[114,3655,803],{"class":119},[114,3657,3658],{"class":161}," 408",[114,3660,838],{"class":792},[114,3662,3664],{"class":116,"line":3663},55,[114,3665,3325],{"class":119},[114,3667,3669],{"class":116,"line":3668},56,[114,3670,845],{"emptyLinePlaceholder":844},[114,3672,3674,3676,3678,3680,3682,3684,3687,3689,3691,3693,3696,3698,3700,3702],{"class":116,"line":3673},57,[114,3675,3525],{"class":785},[114,3677,901],{"class":119},[114,3679,3398],{"class":757},[114,3681,761],{"class":792},[114,3683,909],{"class":119},[114,3685,3686],{"class":141},"Network error: ",[114,3688,915],{"class":119},[114,3690,3561],{"class":778},[114,3692,349],{"class":119},[114,3694,3695],{"class":778},"message",[114,3697,938],{"class":119},[114,3699,803],{"class":119},[114,3701,1868],{"class":161},[114,3703,838],{"class":792},[114,3705,3707],{"class":116,"line":3706},58,[114,3708,3089],{"class":119},[114,3710,3712],{"class":116,"line":3711},59,[114,3713,1975],{"class":119},[114,3715,3717],{"class":116,"line":3716},60,[114,3718,946],{"class":119},[114,3720,3722],{"class":116,"line":3721},61,[114,3723,845],{"emptyLinePlaceholder":844},[114,3725,3727,3730,3732,3734,3736,3738,3740],{"class":116,"line":3726},62,[114,3728,3729],{"class":792},"  getRetryDelay",[114,3731,761],{"class":119},[114,3733,860],{"class":764},[114,3735,803],{"class":119},[114,3737,1863],{"class":764},[114,3739,705],{"class":119},[114,3741,770],{"class":119},[114,3743,3745,3747,3749,3751,3753,3755,3757,3759,3761],{"class":116,"line":3744},63,[114,3746,1946],{"class":785},[114,3748,854],{"class":792},[114,3750,860],{"class":778},[114,3752,349],{"class":119},[114,3754,154],{"class":778},[114,3756,2120],{"class":119},[114,3758,1493],{"class":161},[114,3760,868],{"class":792},[114,3762,120],{"class":119},[114,3764,3766,3768,3771,3773,3775,3777,3779,3781,3783,3785,3787,3789,3791],{"class":116,"line":3765},64,[114,3767,1507],{"class":128},[114,3769,3770],{"class":778}," reset",[114,3772,782],{"class":119},[114,3774,779],{"class":778},[114,3776,349],{"class":119},[114,3778,1519],{"class":778},[114,3780,349],{"class":119},[114,3782,1524],{"class":757},[114,3784,761],{"class":792},[114,3786,795],{"class":119},[114,3788,712],{"class":141},[114,3790,795],{"class":119},[114,3792,838],{"class":792},[114,3794,3796,3798,3800,3803,3805],{"class":116,"line":3795},65,[114,3797,3031],{"class":785},[114,3799,854],{"class":792},[114,3801,3802],{"class":778},"reset",[114,3804,868],{"class":792},[114,3806,120],{"class":119},[114,3808,3810,3813,3815,3817,3819,3821,3823,3825,3827,3829,3831,3833,3835,3837,3839,3841,3843,3845,3847,3849],{"class":116,"line":3809},66,[114,3811,3812],{"class":785},"        return",[114,3814,1556],{"class":778},[114,3816,349],{"class":119},[114,3818,1561],{"class":757},[114,3820,1564],{"class":792},[114,3822,1567],{"class":757},[114,3824,761],{"class":792},[114,3826,3802],{"class":778},[114,3828,868],{"class":792},[114,3830,1577],{"class":119},[114,3832,1580],{"class":161},[114,3834,868],{"class":792},[114,3836,1585],{"class":119},[114,3838,1588],{"class":778},[114,3840,349],{"class":119},[114,3842,1593],{"class":757},[114,3844,1596],{"class":792},[114,3846,803],{"class":119},[114,3848,1580],{"class":161},[114,3850,838],{"class":792},[114,3852,3854],{"class":116,"line":3853},67,[114,3855,3089],{"class":119},[114,3857,3859],{"class":116,"line":3858},68,[114,3860,1975],{"class":119},[114,3862,3864,3866,3868,3870,3873,3875,3878,3880,3882,3884,3886,3888,3890,3892,3894,3896,3898,3900,3902,3904,3906,3908,3910,3912,3915],{"class":116,"line":3863},69,[114,3865,1148],{"class":785},[114,3867,1556],{"class":778},[114,3869,349],{"class":119},[114,3871,3872],{"class":757},"min",[114,3874,761],{"class":792},[114,3876,3877],{"class":161},"1000",[114,3879,2148],{"class":119},[114,3881,1556],{"class":778},[114,3883,349],{"class":119},[114,3885,2155],{"class":757},[114,3887,761],{"class":792},[114,3889,2160],{"class":161},[114,3891,803],{"class":119},[114,3893,1863],{"class":778},[114,3895,868],{"class":792},[114,3897,2169],{"class":119},[114,3899,1556],{"class":778},[114,3901,349],{"class":119},[114,3903,2176],{"class":757},[114,3905,1177],{"class":792},[114,3907,1577],{"class":119},[114,3909,1580],{"class":161},[114,3911,803],{"class":119},[114,3913,3914],{"class":161}," 30000",[114,3916,838],{"class":792},[114,3918,3920],{"class":116,"line":3919},70,[114,3921,946],{"class":119},[114,3923,3925],{"class":116,"line":3924},71,[114,3926,845],{"emptyLinePlaceholder":844},[114,3928,3930],{"class":116,"line":3929},72,[114,3931,3932],{"class":1243},"  \u002F\u002F Convenience methods\n",[114,3934,3936,3939,3941,3943,3945,3947,3950,3952,3955,3957,3959,3962,3964,3966,3968,3970],{"class":116,"line":3935},73,[114,3937,3938],{"class":792},"  getQuotes",[114,3940,761],{"class":119},[114,3942,2999],{"class":764},[114,3944,705],{"class":119},[114,3946,815],{"class":119},[114,3948,3949],{"class":785}," return",[114,3951,3123],{"class":119},[114,3953,3954],{"class":757},"request",[114,3956,761],{"class":792},[114,3958,795],{"class":119},[114,3960,3961],{"class":141},"\u002Fquotes",[114,3963,795],{"class":119},[114,3965,803],{"class":119},[114,3967,2945],{"class":778},[114,3969,868],{"class":792},[114,3971,167],{"class":119},[114,3973,3975,3978,3980,3982,3984,3986,3988,3990,3992,3994,3996,3999,4001,4003,4005,4007],{"class":116,"line":3974},74,[114,3976,3977],{"class":792},"  getRandomQuote",[114,3979,761],{"class":119},[114,3981,2999],{"class":764},[114,3983,705],{"class":119},[114,3985,815],{"class":119},[114,3987,3949],{"class":785},[114,3989,3123],{"class":119},[114,3991,3954],{"class":757},[114,3993,761],{"class":792},[114,3995,795],{"class":119},[114,3997,3998],{"class":141},"\u002Fquotes\u002Frandom",[114,4000,795],{"class":119},[114,4002,803],{"class":119},[114,4004,2945],{"class":778},[114,4006,868],{"class":792},[114,4008,167],{"class":119},[114,4010,4012,4015,4017,4020,4022,4024,4026,4028,4030,4032,4034,4036,4038,4041,4043,4045,4047,4049,4051,4053],{"class":116,"line":4011},75,[114,4013,4014],{"class":792},"  getQuote",[114,4016,761],{"class":119},[114,4018,4019],{"class":764},"id",[114,4021,803],{"class":119},[114,4023,2945],{"class":764},[114,4025,705],{"class":119},[114,4027,815],{"class":119},[114,4029,3949],{"class":785},[114,4031,3123],{"class":119},[114,4033,3954],{"class":757},[114,4035,761],{"class":792},[114,4037,909],{"class":119},[114,4039,4040],{"class":141},"\u002Fquotes\u002F",[114,4042,915],{"class":119},[114,4044,4019],{"class":778},[114,4046,938],{"class":119},[114,4048,803],{"class":119},[114,4050,2945],{"class":778},[114,4052,868],{"class":792},[114,4054,167],{"class":119},[114,4056,4058,4061,4063,4065,4067,4069,4071,4073,4075,4077,4079,4082,4084,4086,4088,4090],{"class":116,"line":4057},76,[114,4059,4060],{"class":792},"  getAuthors",[114,4062,761],{"class":119},[114,4064,2999],{"class":764},[114,4066,705],{"class":119},[114,4068,815],{"class":119},[114,4070,3949],{"class":785},[114,4072,3123],{"class":119},[114,4074,3954],{"class":757},[114,4076,761],{"class":792},[114,4078,795],{"class":119},[114,4080,4081],{"class":141},"\u002Fauthors",[114,4083,795],{"class":119},[114,4085,803],{"class":119},[114,4087,2945],{"class":778},[114,4089,868],{"class":792},[114,4091,167],{"class":119},[114,4093,4095,4098,4100,4102,4104,4106,4108,4110,4112,4114,4116,4118,4120,4123,4125,4127,4129,4131,4133,4135],{"class":116,"line":4094},77,[114,4096,4097],{"class":792},"  getAuthor",[114,4099,761],{"class":119},[114,4101,4019],{"class":764},[114,4103,803],{"class":119},[114,4105,2945],{"class":764},[114,4107,705],{"class":119},[114,4109,815],{"class":119},[114,4111,3949],{"class":785},[114,4113,3123],{"class":119},[114,4115,3954],{"class":757},[114,4117,761],{"class":792},[114,4119,909],{"class":119},[114,4121,4122],{"class":141},"\u002Fauthors\u002F",[114,4124,915],{"class":119},[114,4126,4019],{"class":778},[114,4128,938],{"class":119},[114,4130,803],{"class":119},[114,4132,2945],{"class":778},[114,4134,868],{"class":792},[114,4136,167],{"class":119},[114,4138,4140,4143,4145,4147,4149,4151,4153,4155,4157,4159,4161,4164,4166,4168,4170,4172],{"class":116,"line":4139},78,[114,4141,4142],{"class":792},"  getPlaylists",[114,4144,761],{"class":119},[114,4146,2999],{"class":764},[114,4148,705],{"class":119},[114,4150,815],{"class":119},[114,4152,3949],{"class":785},[114,4154,3123],{"class":119},[114,4156,3954],{"class":757},[114,4158,761],{"class":792},[114,4160,795],{"class":119},[114,4162,4163],{"class":141},"\u002Fplaylists",[114,4165,795],{"class":119},[114,4167,803],{"class":119},[114,4169,2945],{"class":778},[114,4171,868],{"class":792},[114,4173,167],{"class":119},[114,4175,4177,4180,4182,4184,4186,4188,4190,4192,4194,4196,4198,4200,4202,4205,4207,4209,4211,4213,4215,4217],{"class":116,"line":4176},79,[114,4178,4179],{"class":792},"  getPlaylist",[114,4181,761],{"class":119},[114,4183,4019],{"class":764},[114,4185,803],{"class":119},[114,4187,2945],{"class":764},[114,4189,705],{"class":119},[114,4191,815],{"class":119},[114,4193,3949],{"class":785},[114,4195,3123],{"class":119},[114,4197,3954],{"class":757},[114,4199,761],{"class":792},[114,4201,909],{"class":119},[114,4203,4204],{"class":141},"\u002Fplaylists\u002F",[114,4206,915],{"class":119},[114,4208,4019],{"class":778},[114,4210,938],{"class":119},[114,4212,803],{"class":119},[114,4214,2945],{"class":778},[114,4216,868],{"class":792},[114,4218,167],{"class":119},[114,4220,4222,4225,4227,4229,4231,4233,4235,4237,4239,4242,4244,4246],{"class":116,"line":4221},80,[114,4223,4224],{"class":792},"  getCategories",[114,4226,1596],{"class":119},[114,4228,815],{"class":119},[114,4230,3949],{"class":785},[114,4232,3123],{"class":119},[114,4234,3954],{"class":757},[114,4236,761],{"class":792},[114,4238,795],{"class":119},[114,4240,4241],{"class":141},"\u002Fcategories",[114,4243,795],{"class":119},[114,4245,868],{"class":792},[114,4247,167],{"class":119},[114,4249,4251],{"class":116,"line":4250},81,[114,4252,167],{"class":119},[114,4254,4256],{"class":116,"line":4255},82,[114,4257,845],{"emptyLinePlaceholder":844},[114,4259,4261,4263,4265,4268,4270],{"class":116,"line":4260},83,[114,4262,2818],{"class":128},[114,4264,3398],{"class":2249},[114,4266,4267],{"class":128}," extends",[114,4269,904],{"class":2249},[114,4271,770],{"class":119},[114,4273,4275,4277,4279,4281,4283,4285,4287],{"class":116,"line":4274},84,[114,4276,2828],{"class":128},[114,4278,761],{"class":119},[114,4280,3695],{"class":764},[114,4282,803],{"class":119},[114,4284,2356],{"class":764},[114,4286,705],{"class":119},[114,4288,770],{"class":119},[114,4290,4292,4295,4297,4299],{"class":116,"line":4291},85,[114,4293,4294],{"class":778},"    super",[114,4296,761],{"class":792},[114,4298,3695],{"class":778},[114,4300,838],{"class":792},[114,4302,4304,4306,4308,4310,4312,4315],{"class":116,"line":4303},86,[114,4305,2848],{"class":119},[114,4307,3622],{"class":778},[114,4309,782],{"class":119},[114,4311,818],{"class":119},[114,4313,4314],{"class":141},"ApiError",[114,4316,2797],{"class":119},[114,4318,4320,4322,4324,4326],{"class":116,"line":4319},87,[114,4321,2848],{"class":119},[114,4323,2474],{"class":778},[114,4325,782],{"class":119},[114,4327,4328],{"class":778}," statusCode\n",[114,4330,4332],{"class":116,"line":4331},88,[114,4333,946],{"class":119},[114,4335,4337],{"class":116,"line":4336},89,[114,4338,167],{"class":119},[224,4340,4342],{"id":4341},"usage","Usage",[104,4344,4346],{"className":742,"code":4345,"language":744,"meta":109,"style":109},"const client = new QuoteGalleryClient(process.env.QUOTE_GALLERY_API_KEY)\n\ntry {\n  const { data: quotes } = await client.getQuotes({\n    language: 'en',\n    categories: 'wisdom',\n    limit: 10,\n  })\n\n  quotes.forEach((q) => console.log(`\"${q.text}\" — ${q.author.name}`))\n} catch (err) {\n  if (err instanceof ApiError) {\n    console.error(`API Error ${err.statusCode}: ${err.message}`)\n  } else {\n    console.error('Unexpected error:', err)\n  }\n}\n",[111,4347,4348,4374,4378,4385,4417,4433,4449,4461,4467,4471,4535,4546,4562,4600,4608,4632,4636],{"__ignoreMap":109},[114,4349,4350,4352,4355,4357,4359,4361,4364,4366,4369,4371],{"class":116,"line":60},[114,4351,2636],{"class":128},[114,4353,4354],{"class":778}," client ",[114,4356,2642],{"class":119},[114,4358,901],{"class":119},[114,4360,2821],{"class":757},[114,4362,4363],{"class":778},"(process",[114,4365,349],{"class":119},[114,4367,4368],{"class":778},"env",[114,4370,349],{"class":119},[114,4372,4373],{"class":778},"QUOTE_GALLERY_API_KEY)\n",[114,4375,4376],{"class":116,"line":81},[114,4377,845],{"emptyLinePlaceholder":844},[114,4379,4380,4383],{"class":116,"line":38},[114,4381,4382],{"class":785},"try",[114,4384,770],{"class":119},[114,4386,4387,4389,4391,4393,4395,4398,4401,4403,4405,4408,4410,4413,4415],{"class":116,"line":8},[114,4388,775],{"class":128},[114,4390,815],{"class":119},[114,4392,1164],{"class":792},[114,4394,135],{"class":119},[114,4396,4397],{"class":778}," quotes",[114,4399,4400],{"class":119}," }",[114,4402,782],{"class":119},[114,4404,786],{"class":785},[114,4406,4407],{"class":778}," client",[114,4409,349],{"class":119},[114,4411,4412],{"class":757},"getQuotes",[114,4414,761],{"class":792},[114,4416,120],{"class":119},[114,4418,4419,4422,4424,4426,4429,4431],{"class":116,"line":841},[114,4420,4421],{"class":792},"    language",[114,4423,135],{"class":119},[114,4425,818],{"class":119},[114,4427,4428],{"class":141},"en",[114,4430,795],{"class":119},[114,4432,147],{"class":119},[114,4434,4435,4438,4440,4442,4445,4447],{"class":116,"line":848},[114,4436,4437],{"class":792},"    categories",[114,4439,135],{"class":119},[114,4441,818],{"class":119},[114,4443,4444],{"class":141},"wisdom",[114,4446,795],{"class":119},[114,4448,147],{"class":119},[114,4450,4451,4454,4456,4459],{"class":116,"line":873},[114,4452,4453],{"class":792},"    limit",[114,4455,135],{"class":119},[114,4457,4458],{"class":161}," 10",[114,4460,147],{"class":119},[114,4462,4463,4465],{"class":116,"line":895},[114,4464,835],{"class":119},[114,4466,838],{"class":792},[114,4468,4469],{"class":116,"line":943},[114,4470,845],{"emptyLinePlaceholder":844},[114,4472,4473,4476,4478,4480,4482,4484,4487,4489,4491,4494,4496,4498,4500,4502,4504,4506,4508,4510,4513,4515,4518,4520,4522,4524,4527,4529,4531,4533],{"class":116,"line":949},[114,4474,4475],{"class":778},"  quotes",[114,4477,349],{"class":119},[114,4479,3006],{"class":757},[114,4481,761],{"class":792},[114,4483,761],{"class":119},[114,4485,4486],{"class":764},"q",[114,4488,705],{"class":119},[114,4490,2262],{"class":128},[114,4492,4493],{"class":778}," console",[114,4495,349],{"class":119},[114,4497,2191],{"class":757},[114,4499,761],{"class":792},[114,4501,909],{"class":119},[114,4503,132],{"class":141},[114,4505,915],{"class":119},[114,4507,4486],{"class":778},[114,4509,349],{"class":119},[114,4511,4512],{"class":778},"text",[114,4514,924],{"class":119},[114,4516,4517],{"class":141},"\" — ",[114,4519,915],{"class":119},[114,4521,4486],{"class":778},[114,4523,349],{"class":119},[114,4525,4526],{"class":778},"author",[114,4528,349],{"class":119},[114,4530,3622],{"class":778},[114,4532,938],{"class":119},[114,4534,2276],{"class":792},[114,4536,4537,4539,4541,4544],{"class":116,"line":954},[114,4538,924],{"class":119},[114,4540,3556],{"class":785},[114,4542,4543],{"class":778}," (err) ",[114,4545,120],{"class":119},[114,4547,4548,4550,4552,4554,4556,4558,4560],{"class":116,"line":968},[114,4549,851],{"class":785},[114,4551,854],{"class":792},[114,4553,3561],{"class":778},[114,4555,3593],{"class":119},[114,4557,3398],{"class":2249},[114,4559,868],{"class":792},[114,4561,120],{"class":119},[114,4563,4564,4566,4568,4570,4572,4574,4576,4578,4580,4582,4584,4586,4588,4590,4592,4594,4596,4598],{"class":116,"line":1040},[114,4565,2488],{"class":778},[114,4567,349],{"class":119},[114,4569,129],{"class":757},[114,4571,761],{"class":792},[114,4573,909],{"class":119},[114,4575,912],{"class":141},[114,4577,915],{"class":119},[114,4579,3561],{"class":778},[114,4581,349],{"class":119},[114,4583,2474],{"class":778},[114,4585,924],{"class":119},[114,4587,927],{"class":141},[114,4589,915],{"class":119},[114,4591,3561],{"class":778},[114,4593,349],{"class":119},[114,4595,3695],{"class":778},[114,4597,938],{"class":119},[114,4599,838],{"class":792},[114,4601,4602,4604,4606],{"class":116,"line":1240},[114,4603,835],{"class":119},[114,4605,2525],{"class":785},[114,4607,770],{"class":119},[114,4609,4610,4612,4614,4616,4618,4620,4623,4625,4627,4630],{"class":116,"line":1247},[114,4611,2488],{"class":778},[114,4613,349],{"class":119},[114,4615,129],{"class":757},[114,4617,761],{"class":792},[114,4619,795],{"class":119},[114,4621,4622],{"class":141},"Unexpected error:",[114,4624,795],{"class":119},[114,4626,803],{"class":119},[114,4628,4629],{"class":778}," err",[114,4631,838],{"class":792},[114,4633,4634],{"class":116,"line":1276},[114,4635,946],{"class":119},[114,4637,4638],{"class":116,"line":1315},[114,4639,167],{"class":119},[4641,4642,4643],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html 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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":109,"searchDepth":81,"depth":81,"links":4645},[4646,4647,4651,4657,4664],{"id":98,"depth":81,"text":99},{"id":221,"depth":81,"text":222,"children":4648},[4649,4650],{"id":226,"depth":38,"text":227},{"id":315,"depth":38,"text":316},{"id":378,"depth":81,"text":379,"children":4652},[4653,4654,4655,4656],{"id":382,"depth":38,"text":383},{"id":468,"depth":38,"text":469},{"id":549,"depth":38,"text":550},{"id":616,"depth":38,"text":617},{"id":724,"depth":81,"text":725,"children":4658},[4659,4660,4661,4662,4663],{"id":728,"depth":38,"text":729},{"id":1046,"depth":38,"text":1047},{"id":1803,"depth":38,"text":1804},{"id":2329,"depth":38,"text":2330},{"id":2622,"depth":38,"text":2623},{"id":2804,"depth":81,"text":2805,"children":4665},[4666],{"id":4341,"depth":38,"text":4342},"Learn about API error codes, response formats, and best practices for handling errors gracefully.","md",null,{"icon":4671},"i-lucide-alert-triangle",{"title":71,"description":4667},"sz4a9SqtPfCiSWXHc7BqA-FEcXK6GYjjfm6qYdEU7Bo",[4675,4677],{"title":67,"path":68,"stem":69,"description":4676,"children":-1},"Understand API rate limits, tiers, and pricing for the Quote Gallery API.",{"title":75,"path":76,"stem":77,"description":4678,"children":-1},"Official and community SDKs, libraries, and tools for integrating with the Quote Gallery API.",1774214573889]