[{"data":1,"prerenderedAt":1155},["ShallowReactive",2],{"docs-\u002Fcloudinary":3},{"id":4,"title":5,"body":6,"description":1148,"extension":1149,"meta":1150,"navigation":388,"path":1151,"seo":1152,"stem":1153,"__hash__":1154},"docs\u002Fdocs\u002Fcloudinary.md","Cloudinary Integration",{"type":7,"value":8,"toc":1126},"minimark",[9,13,17,20,25,28,34,45,50,56,61,67,73,79,82,88,90,94,101,148,151,171,174,176,180,195,198,200,204,211,216,223,266,277,281,300,303,309,312,324,326,330,333,356,360,560,564,567,584,591,595,606,621,649,653,656,779,783,790,851,853,857,871,882,885,887,891,895,898,989,993,996,1055,1059,1062,1122],[10,11,5],"h1",{"id":12},"cloudinary-integration",[14,15,16],"p",{},"Cachely has first-class support for Cloudinary. It handles both image and video asset URLs and provides a response transformer that rewrites Cloudinary CDN URLs in your API responses.",[18,19],"hr",{},[21,22,24],"h2",{"id":23},"supported-url-patterns","Supported URL patterns",[14,26,27],{},"Cloudinary serves all assets from a single domain using your cloud name and different resource type prefixes:",[14,29,30],{},[31,32,33],"strong",{},"Images:",[35,36,41],"pre",{"className":37,"code":39,"language":40},[38],"language-text","https:\u002F\u002Fres.cloudinary.com\u002F{cloudName}\u002Fimage\u002Fupload\u002Fv1234567890\u002Ffolder\u002Fphoto.jpg\n","text",[42,43,39],"code",{"__ignoreMap":44},"",[14,46,47],{},[31,48,49],{},"Videos:",[35,51,54],{"className":52,"code":53,"language":40},[38],"https:\u002F\u002Fres.cloudinary.com\u002F{cloudName}\u002Fvideo\u002Fupload\u002Fv1234567890\u002Ffolder\u002Fclip.mp4\n",[42,55,53],{"__ignoreMap":44},[14,57,58],{},[31,59,60],{},"With transformations:",[35,62,65],{"className":63,"code":64,"language":40},[38],"https:\u002F\u002Fres.cloudinary.com\u002F{cloudName}\u002Fimage\u002Fupload\u002Fw_800,h_600,c_fill\u002Fv1234567890\u002Ffolder\u002Fphoto.jpg\n",[42,66,64],{"__ignoreMap":44},[14,68,69,72],{},[31,70,71],{},"Private CDN distribution"," (Advanced plan and higher):",[35,74,77],{"className":75,"code":76,"language":40},[38],"https:\u002F\u002F{cloudName}-res.cloudinary.com\u002Fimage\u002Fupload\u002Fv1234567890\u002Ffolder\u002Fphoto.jpg\n",[42,78,76],{"__ignoreMap":44},[14,80,81],{},"All of the above are rewritten to:",[35,83,86],{"className":84,"code":85,"language":40},[38],"https:\u002F\u002Fyour-tenant.cmsassets.com\u002Fimage\u002Fupload\u002Fv1234567890\u002Ffolder\u002Fphoto.jpg\n",[42,87,85],{"__ignoreMap":44},[18,89],{},[21,91,93],{"id":92},"tenant-setup","Tenant setup",[14,95,96,97,100],{},"When creating your tenant, select ",[31,98,99],{},"Cloudinary"," as the CMS type and provide your cloud name:",[102,103,104,117],"table",{},[105,106,107],"thead",{},[108,109,110,114],"tr",{},[111,112,113],"th",{},"Field",[111,115,116],{},"Value",[118,119,120,128,138],"tbody",{},[108,121,122,126],{},[123,124,125],"td",{},"CMS",[123,127,99],{},[108,129,130,133],{},[123,131,132],{},"Cloud name",[123,134,135],{},[42,136,137],{},"my-cloud",[108,139,140,143],{},[123,141,142],{},"Website domain",[123,144,145],{},[42,146,147],{},"your-site.com",[14,149,150],{},"Two origins are automatically configured:",[152,153,154,164],"ul",{},[155,156,157,160,161],"li",{},[31,158,159],{},"Image origin:"," ",[42,162,163],{},"https:\u002F\u002Fres.cloudinary.com\u002F{cloudName}",[155,165,166,160,169],{},[31,167,168],{},"Video origin:",[42,170,163],{},[14,172,173],{},"Both use the same base URL since Cloudinary serves all asset types from a single domain. Cachely routes requests to the correct resource type based on the URL path.",[18,175],{},[21,177,179],{"id":178},"video-support","Video support",[14,181,182,183,186,187,190,191,194],{},"Cloudinary serves images and videos from the same domain (",[42,184,185],{},"res.cloudinary.com",") using different path prefixes (",[42,188,189],{},"\u002Fimage\u002Fupload\u002F"," vs ",[42,192,193],{},"\u002Fvideo\u002Fupload\u002F","). Cachely handles both automatically.",[14,196,197],{},"Range requests for video seeking and streaming are fully supported.",[18,199],{},[21,201,203],{"id":202},"api-proxy-read-only","API proxy (read-only)",[14,205,206,207,210],{},"Cachely can proxy read-only Cloudinary Admin API requests through its ",[42,208,209],{},"\u002F~api\u002F"," endpoint. This means your API key and secret are stored encrypted on the server and never exposed to the browser.",[212,213,215],"h3",{"id":214},"configuration","Configuration",[14,217,218,219,222],{},"In the tenant settings under ",[31,220,221],{},"API Proxy",":",[102,224,225,233],{},[105,226,227],{},[108,228,229,231],{},[111,230,113],{},[111,232,116],{},[118,234,235,245,255],{},[108,236,237,240],{},[123,238,239],{},"API Origin URL",[123,241,242],{},[42,243,244],{},"https:\u002F\u002Fapi.cloudinary.com\u002Fv1_1\u002F\u003Ccloud_name>",[108,246,247,250],{},[123,248,249],{},"Auth mode",[123,251,252],{},[31,253,254],{},"Basic auth",[108,256,257,260],{},[123,258,259],{},"Token",[123,261,262,265],{},[42,263,264],{},"btoa(\"api_key:api_secret\")"," — your credentials base64-encoded",[14,267,268,269,272,273,276],{},"The Cloudinary Admin API uses HTTP Basic authentication with your API key and secret concatenated as ",[42,270,271],{},"api_key:api_secret",". Encode this string with ",[42,274,275],{},"btoa()"," before saving it as the token.",[212,278,280],{"id":279},"proxied-requests","Proxied requests",[14,282,283,284,287,288,291,292,295,296,299],{},"Any ",[42,285,286],{},"GET"," request to ",[42,289,290],{},"https:\u002F\u002Fyour-tenant.cmsassets.com\u002F~api\u002F\u003Cpath>"," is forwarded to ",[42,293,294],{},"https:\u002F\u002Fapi.cloudinary.com\u002Fv1_1\u002F\u003Ccloud_name>\u002F\u003Cpath>"," with the ",[42,297,298],{},"Authorization: Basic \u003Ctoken>"," header injected automatically.",[14,301,302],{},"Examples:",[35,304,307],{"className":305,"code":306,"language":40},[38],"# List image resources\nGET https:\u002F\u002Fyour-tenant.cmsassets.com\u002F~api\u002Fresources\u002Fimage\n\n# Search assets\nGET https:\u002F\u002Fyour-tenant.cmsassets.com\u002F~api\u002Fresources\u002Fimage\u002Fupload?prefix=products\n",[42,308,306],{"__ignoreMap":44},[14,310,311],{},"Responses are cached (default 60s) and Cloudinary delivery URLs in the JSON body are rewritten to proxy URLs automatically.",[313,314,315],"blockquote",{},[14,316,317,320,321,323],{},[31,318,319],{},"Note:"," Only ",[42,322,286],{}," requests are proxied. Upload, rename, destroy, and other write operations are not supported through the Cachely API proxy.",[18,325],{},[21,327,329],{"id":328},"response-transformer","Response transformer",[14,331,332],{},"Install the response transformer to automatically rewrite Cloudinary asset URLs in your API responses:",[35,334,338],{"className":335,"code":336,"language":337,"meta":44,"style":44},"language-bash shiki shiki-themes github-dark","npm install @synchronized-studio\u002Fresponse-transformer\n","bash",[42,339,340],{"__ignoreMap":44},[341,342,345,349,353],"span",{"class":343,"line":344},"line",1,[341,346,348],{"class":347},"svObZ","npm",[341,350,352],{"class":351},"sU2Wk"," install",[341,354,355],{"class":351}," @synchronized-studio\u002Fresponse-transformer\n",[212,357,359],{"id":358},"basic-usage","Basic usage",[35,361,365],{"className":362,"code":363,"language":364,"meta":44,"style":44},"language-typescript shiki shiki-themes github-dark","import { transformCloudinaryAssetUrls } from \"@synchronized-studio\u002Fresponse-transformer\"\n\nconst response = await fetch(\n  `https:\u002F\u002Fapi.cloudinary.com\u002Fv1_1\u002F${cloudName}\u002Fresources\u002Fimage`,\n  {\n    headers: {\n      Authorization: `Basic ${btoa(apiKey + \":\" + apiSecret)}`\n    }\n  }\n)\nconst data = await response.json()\n\nconst transformed = transformCloudinaryAssetUrls(data, {\n  cloudName: \"my-cloud\",\n  cmsAssetsUrl: \"https:\u002F\u002Fyour-tenant.cmsassets.com\"\n})\n","typescript",[42,366,367,383,390,412,427,433,439,474,480,486,492,513,518,534,545,554],{"__ignoreMap":44},[341,368,369,373,377,380],{"class":343,"line":344},[341,370,372],{"class":371},"snl16","import",[341,374,376],{"class":375},"s95oV"," { transformCloudinaryAssetUrls } ",[341,378,379],{"class":371},"from",[341,381,382],{"class":351}," \"@synchronized-studio\u002Fresponse-transformer\"\n",[341,384,386],{"class":343,"line":385},2,[341,387,389],{"emptyLinePlaceholder":388},true,"\n",[341,391,393,396,400,403,406,409],{"class":343,"line":392},3,[341,394,395],{"class":371},"const",[341,397,399],{"class":398},"sDLfK"," response",[341,401,402],{"class":371}," =",[341,404,405],{"class":371}," await",[341,407,408],{"class":347}," fetch",[341,410,411],{"class":375},"(\n",[341,413,415,418,421,424],{"class":343,"line":414},4,[341,416,417],{"class":351},"  `https:\u002F\u002Fapi.cloudinary.com\u002Fv1_1\u002F${",[341,419,420],{"class":375},"cloudName",[341,422,423],{"class":351},"}\u002Fresources\u002Fimage`",[341,425,426],{"class":375},",\n",[341,428,430],{"class":343,"line":429},5,[341,431,432],{"class":375},"  {\n",[341,434,436],{"class":343,"line":435},6,[341,437,438],{"class":375},"    headers: {\n",[341,440,442,445,448,451,454,457,460,463,465,468,471],{"class":343,"line":441},7,[341,443,444],{"class":375},"      Authorization: ",[341,446,447],{"class":351},"`Basic ${",[341,449,450],{"class":347},"btoa",[341,452,453],{"class":351},"(",[341,455,456],{"class":375},"apiKey",[341,458,459],{"class":371}," +",[341,461,462],{"class":351}," \":\"",[341,464,459],{"class":371},[341,466,467],{"class":375}," apiSecret",[341,469,470],{"class":351},")",[341,472,473],{"class":351},"}`\n",[341,475,477],{"class":343,"line":476},8,[341,478,479],{"class":375},"    }\n",[341,481,483],{"class":343,"line":482},9,[341,484,485],{"class":375},"  }\n",[341,487,489],{"class":343,"line":488},10,[341,490,491],{"class":375},")\n",[341,493,495,497,500,502,504,507,510],{"class":343,"line":494},11,[341,496,395],{"class":371},[341,498,499],{"class":398}," data",[341,501,402],{"class":371},[341,503,405],{"class":371},[341,505,506],{"class":375}," response.",[341,508,509],{"class":347},"json",[341,511,512],{"class":375},"()\n",[341,514,516],{"class":343,"line":515},12,[341,517,389],{"emptyLinePlaceholder":388},[341,519,521,523,526,528,531],{"class":343,"line":520},13,[341,522,395],{"class":371},[341,524,525],{"class":398}," transformed",[341,527,402],{"class":371},[341,529,530],{"class":347}," transformCloudinaryAssetUrls",[341,532,533],{"class":375},"(data, {\n",[341,535,537,540,543],{"class":343,"line":536},14,[341,538,539],{"class":375},"  cloudName: ",[341,541,542],{"class":351},"\"my-cloud\"",[341,544,426],{"class":375},[341,546,548,551],{"class":343,"line":547},15,[341,549,550],{"class":375},"  cmsAssetsUrl: ",[341,552,553],{"class":351},"\"https:\u002F\u002Fyour-tenant.cmsassets.com\"\n",[341,555,557],{"class":343,"line":556},16,[341,558,559],{"class":375},"})\n",[212,561,563],{"id":562},"what-gets-transformed","What gets transformed",[14,565,566],{},"The transformer processes the entire JSON response and rewrites all matching URLs. This includes:",[152,568,569,572,575,578],{},[155,570,571],{},"Image asset URLs",[155,573,574],{},"Video asset URLs",[155,576,577],{},"Derived\u002Ftransformed asset URLs",[155,579,580,581],{},"Any URL matching ",[42,582,583],{},"res.cloudinary.com\u002F{cloudName}",[14,585,586,587,590],{},"Cloudinary transformation segments in the URL path (like ",[42,588,589],{},"\u002Fw_800,h_600,c_fill\u002F",") are preserved during rewriting.",[212,592,594],{"id":593},"using-an-environment-variable","Using an environment variable",[14,596,597,598,601,602,605],{},"Set ",[42,599,600],{},"CMS_ASSETS_URL"," in your environment and omit the ",[42,603,604],{},"cmsAssetsUrl"," option:",[35,607,609],{"className":335,"code":608,"language":337,"meta":44,"style":44},"CMS_ASSETS_URL=https:\u002F\u002Fyour-tenant.cmsassets.com\n",[42,610,611],{"__ignoreMap":44},[341,612,613,615,618],{"class":343,"line":344},[341,614,600],{"class":375},[341,616,617],{"class":371},"=",[341,619,620],{"class":351},"https:\u002F\u002Fyour-tenant.cmsassets.com\n",[35,622,624],{"className":362,"code":623,"language":364,"meta":44,"style":44},"const transformed = transformCloudinaryAssetUrls(data, {\n  cloudName: \"my-cloud\"\n})\n",[42,625,626,638,645],{"__ignoreMap":44},[341,627,628,630,632,634,636],{"class":343,"line":344},[341,629,395],{"class":371},[341,631,525],{"class":398},[341,633,402],{"class":371},[341,635,530],{"class":347},[341,637,533],{"class":375},[341,639,640,642],{"class":343,"line":385},[341,641,539],{"class":375},[341,643,644],{"class":351},"\"my-cloud\"\n",[341,646,647],{"class":343,"line":392},[341,648,559],{"class":375},[212,650,652],{"id":651},"nuxt-ssr-integration","Nuxt \u002F SSR integration",[14,654,655],{},"For Nuxt or other SSR frameworks, wrap your Cloudinary API calls:",[35,657,659],{"className":362,"code":658,"language":364,"meta":44,"style":44},"\u002F\u002F composables\u002FuseCloudinaryData.ts\nimport { transformCloudinaryAssetUrls } from \"@synchronized-studio\u002Fresponse-transformer\"\n\nexport async function useCloudinaryAssets() {\n  const data = await cloudinaryClient.search\n    .expression(\"folder:products\")\n    .execute()\n\n  return transformCloudinaryAssetUrls(data, {\n    cloudName: \"my-cloud\",\n    cmsAssetsUrl: useRuntimeConfig().public.cmsAssetsUrl\n  })\n}\n",[42,660,661,667,677,681,698,712,727,736,740,749,758,769,774],{"__ignoreMap":44},[341,662,663],{"class":343,"line":344},[341,664,666],{"class":665},"sAwPA","\u002F\u002F composables\u002FuseCloudinaryData.ts\n",[341,668,669,671,673,675],{"class":343,"line":385},[341,670,372],{"class":371},[341,672,376],{"class":375},[341,674,379],{"class":371},[341,676,382],{"class":351},[341,678,679],{"class":343,"line":392},[341,680,389],{"emptyLinePlaceholder":388},[341,682,683,686,689,692,695],{"class":343,"line":414},[341,684,685],{"class":371},"export",[341,687,688],{"class":371}," async",[341,690,691],{"class":371}," function",[341,693,694],{"class":347}," useCloudinaryAssets",[341,696,697],{"class":375},"() {\n",[341,699,700,703,705,707,709],{"class":343,"line":429},[341,701,702],{"class":371},"  const",[341,704,499],{"class":398},[341,706,402],{"class":371},[341,708,405],{"class":371},[341,710,711],{"class":375}," cloudinaryClient.search\n",[341,713,714,717,720,722,725],{"class":343,"line":435},[341,715,716],{"class":375},"    .",[341,718,719],{"class":347},"expression",[341,721,453],{"class":375},[341,723,724],{"class":351},"\"folder:products\"",[341,726,491],{"class":375},[341,728,729,731,734],{"class":343,"line":441},[341,730,716],{"class":375},[341,732,733],{"class":347},"execute",[341,735,512],{"class":375},[341,737,738],{"class":343,"line":476},[341,739,389],{"emptyLinePlaceholder":388},[341,741,742,745,747],{"class":343,"line":482},[341,743,744],{"class":371},"  return",[341,746,530],{"class":347},[341,748,533],{"class":375},[341,750,751,754,756],{"class":343,"line":488},[341,752,753],{"class":375},"    cloudName: ",[341,755,542],{"class":351},[341,757,426],{"class":375},[341,759,760,763,766],{"class":343,"line":494},[341,761,762],{"class":375},"    cmsAssetsUrl: ",[341,764,765],{"class":347},"useRuntimeConfig",[341,767,768],{"class":375},"().public.cmsAssetsUrl\n",[341,770,771],{"class":343,"line":515},[341,772,773],{"class":375},"  })\n",[341,775,776],{"class":343,"line":520},[341,777,778],{"class":375},"}\n",[212,780,782],{"id":781},"using-the-generic-transformer","Using the generic transformer",[14,784,785,786,789],{},"You can also use the unified ",[42,787,788],{},"transformCmsAssetUrls"," function:",[35,791,793],{"className":362,"code":792,"language":364,"meta":44,"style":44},"import { transformCmsAssetUrls } from \"@synchronized-studio\u002Fresponse-transformer\"\n\nconst transformed = transformCmsAssetUrls(data, {\n  cms: \"cloudinary\",\n  cloudName: \"my-cloud\",\n  cmsAssetsUrl: \"https:\u002F\u002Fyour-tenant.cmsassets.com\"\n})\n",[42,794,795,806,810,823,833,841,847],{"__ignoreMap":44},[341,796,797,799,802,804],{"class":343,"line":344},[341,798,372],{"class":371},[341,800,801],{"class":375}," { transformCmsAssetUrls } ",[341,803,379],{"class":371},[341,805,382],{"class":351},[341,807,808],{"class":343,"line":385},[341,809,389],{"emptyLinePlaceholder":388},[341,811,812,814,816,818,821],{"class":343,"line":392},[341,813,395],{"class":371},[341,815,525],{"class":398},[341,817,402],{"class":371},[341,819,820],{"class":347}," transformCmsAssetUrls",[341,822,533],{"class":375},[341,824,825,828,831],{"class":343,"line":414},[341,826,827],{"class":375},"  cms: ",[341,829,830],{"class":351},"\"cloudinary\"",[341,832,426],{"class":375},[341,834,835,837,839],{"class":343,"line":429},[341,836,539],{"class":375},[341,838,542],{"class":351},[341,840,426],{"class":375},[341,842,843,845],{"class":343,"line":435},[341,844,550],{"class":375},[341,846,553],{"class":351},[341,848,849],{"class":343,"line":441},[341,850,559],{"class":375},[18,852],{},[21,854,856],{"id":855},"cloudinary-transformations","Cloudinary Transformations",[14,858,859,860,867,868,870],{},"Cloudinary's ",[861,862,866],"a",{"href":863,"rel":864},"https:\u002F\u002Fcloudinary.com\u002Fdocumentation\u002Fimage_transformations",[865],"nofollow","transformation URL API"," embeds transformations directly in the URL path (e.g. ",[42,869,589],{},"). When assets are proxied through Cachely:",[152,872,873,876,879],{},[155,874,875],{},"The edge cache uses the full URL path (including transformation segments) as the cache key",[155,877,878],{},"Different transformation variants are cached separately since they have different paths",[155,880,881],{},"This means Cloudinary transformations generally work as expected through the proxy",[14,883,884],{},"However, query parameters appended to Cloudinary URLs are stripped from the cache key for image types.",[18,886],{},[21,888,890],{"id":889},"advanced-options","Advanced options",[212,892,894],{"id":893},"custom-transformers","Custom transformers",[14,896,897],{},"Add additional transformers that run after the default Cloudinary ones:",[35,899,901],{"className":362,"code":900,"language":364,"meta":44,"style":44},"const transformed = transformCloudinaryAssetUrls(data, {\n  cloudName: \"my-cloud\",\n  transformers: [\n    (jsonStr, { base }) => {\n      return jsonStr.replaceAll(\"old-pattern\", \"new-pattern\")\n    }\n  ]\n})\n",[42,902,903,915,923,928,952,976,980,985],{"__ignoreMap":44},[341,904,905,907,909,911,913],{"class":343,"line":344},[341,906,395],{"class":371},[341,908,525],{"class":398},[341,910,402],{"class":371},[341,912,530],{"class":347},[341,914,533],{"class":375},[341,916,917,919,921],{"class":343,"line":385},[341,918,539],{"class":375},[341,920,542],{"class":351},[341,922,426],{"class":375},[341,924,925],{"class":343,"line":392},[341,926,927],{"class":375},"  transformers: [\n",[341,929,930,933,937,940,943,946,949],{"class":343,"line":414},[341,931,932],{"class":375},"    (",[341,934,936],{"class":935},"s9osk","jsonStr",[341,938,939],{"class":375},", { ",[341,941,942],{"class":935},"base",[341,944,945],{"class":375}," }) ",[341,947,948],{"class":371},"=>",[341,950,951],{"class":375}," {\n",[341,953,954,957,960,963,965,968,971,974],{"class":343,"line":429},[341,955,956],{"class":371},"      return",[341,958,959],{"class":375}," jsonStr.",[341,961,962],{"class":347},"replaceAll",[341,964,453],{"class":375},[341,966,967],{"class":351},"\"old-pattern\"",[341,969,970],{"class":375},", ",[341,972,973],{"class":351},"\"new-pattern\"",[341,975,491],{"class":375},[341,977,978],{"class":343,"line":435},[341,979,479],{"class":375},[341,981,982],{"class":343,"line":441},[341,983,984],{"class":375},"  ]\n",[341,986,987],{"class":343,"line":476},[341,988,559],{"class":375},[212,990,992],{"id":991},"post-transform-hook","Post-transform hook",[14,994,995],{},"Run a function on the parsed result after all URL replacements:",[35,997,999],{"className":362,"code":998,"language":364,"meta":44,"style":44},"const transformed = transformCloudinaryAssetUrls(data, {\n  cloudName: \"my-cloud\",\n  postTransform: (data) => {\n    return data\n  }\n})\n",[42,1000,1001,1013,1021,1039,1047,1051],{"__ignoreMap":44},[341,1002,1003,1005,1007,1009,1011],{"class":343,"line":344},[341,1004,395],{"class":371},[341,1006,525],{"class":398},[341,1008,402],{"class":371},[341,1010,530],{"class":347},[341,1012,533],{"class":375},[341,1014,1015,1017,1019],{"class":343,"line":385},[341,1016,539],{"class":375},[341,1018,542],{"class":351},[341,1020,426],{"class":375},[341,1022,1023,1026,1029,1032,1035,1037],{"class":343,"line":392},[341,1024,1025],{"class":347},"  postTransform",[341,1027,1028],{"class":375},": (",[341,1030,1031],{"class":935},"data",[341,1033,1034],{"class":375},") ",[341,1036,948],{"class":371},[341,1038,951],{"class":375},[341,1040,1041,1044],{"class":343,"line":414},[341,1042,1043],{"class":371},"    return",[341,1045,1046],{"class":375}," data\n",[341,1048,1049],{"class":343,"line":429},[341,1050,485],{"class":375},[341,1052,1053],{"class":343,"line":435},[341,1054,559],{"class":375},[212,1056,1058],{"id":1057},"error-handling","Error handling",[14,1060,1061],{},"By default, transform errors are logged as warnings and the original data is returned unchanged. You can provide a custom error handler:",[35,1063,1065],{"className":362,"code":1064,"language":364,"meta":44,"style":44},"const transformed = transformCloudinaryAssetUrls(data, {\n  cloudName: \"my-cloud\",\n  onError: (error) => {\n    Sentry.captureException(error)\n  }\n})\n",[42,1066,1067,1079,1087,1103,1114,1118],{"__ignoreMap":44},[341,1068,1069,1071,1073,1075,1077],{"class":343,"line":344},[341,1070,395],{"class":371},[341,1072,525],{"class":398},[341,1074,402],{"class":371},[341,1076,530],{"class":347},[341,1078,533],{"class":375},[341,1080,1081,1083,1085],{"class":343,"line":385},[341,1082,539],{"class":375},[341,1084,542],{"class":351},[341,1086,426],{"class":375},[341,1088,1089,1092,1094,1097,1099,1101],{"class":343,"line":392},[341,1090,1091],{"class":347},"  onError",[341,1093,1028],{"class":375},[341,1095,1096],{"class":935},"error",[341,1098,1034],{"class":375},[341,1100,948],{"class":371},[341,1102,951],{"class":375},[341,1104,1105,1108,1111],{"class":343,"line":414},[341,1106,1107],{"class":375},"    Sentry.",[341,1109,1110],{"class":347},"captureException",[341,1112,1113],{"class":375},"(error)\n",[341,1115,1116],{"class":343,"line":429},[341,1117,485],{"class":375},[341,1119,1120],{"class":343,"line":435},[341,1121,559],{"class":375},[1123,1124,1125],"style",{},"html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}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 pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}",{"title":44,"searchDepth":385,"depth":385,"links":1127},[1128,1129,1130,1131,1135,1142,1143],{"id":23,"depth":385,"text":24},{"id":92,"depth":385,"text":93},{"id":178,"depth":385,"text":179},{"id":202,"depth":385,"text":203,"children":1132},[1133,1134],{"id":214,"depth":392,"text":215},{"id":279,"depth":392,"text":280},{"id":328,"depth":385,"text":329,"children":1136},[1137,1138,1139,1140,1141],{"id":358,"depth":392,"text":359},{"id":562,"depth":392,"text":563},{"id":593,"depth":392,"text":594},{"id":651,"depth":392,"text":652},{"id":781,"depth":392,"text":782},{"id":855,"depth":385,"text":856},{"id":889,"depth":385,"text":890,"children":1144},[1145,1146,1147],{"id":893,"depth":392,"text":894},{"id":991,"depth":392,"text":992},{"id":1057,"depth":392,"text":1058},"Proxy Cloudinary images and videos through your own edge domain. Global edge caching with all transformation path segments preserved.","md",{},"\u002Fdocs\u002Fcloudinary",{"title":5,"description":1148},"docs\u002Fcloudinary","1-nQy0KIPwnTimL64SgvnpVqM_XlQW9ROHDgpgO06ic",1777579477911]