[{"data":1,"prerenderedAt":1711},["ShallowReactive",2],{"navigation_docs":3,"-frameworks-dart":57,"-frameworks-dart-surround":1707},[4,8,12,16,20,24,28],{"title":5,"path":6,"stem":7},"Introduction","\u002Fintroduction","1.introduction",{"title":9,"path":10,"stem":11},"Installation","\u002Finstallation","2.installation",{"title":13,"path":14,"stem":15},"SDKs","\u002Fsdk","3.sdk",{"title":17,"path":18,"stem":19},"Dashboard","\u002Fdashboard","4.dashboard",{"title":21,"path":22,"stem":23},"HTTP API","\u002Fhttp-api","5.http-api",{"title":25,"path":26,"stem":27},"Image Transformations","\u002Ftransformations","6.transformations",{"title":29,"path":30,"stem":31,"children":32},"Framework Components","\u002Fframeworks","frameworks",[33,37,41,45,49,53],{"title":34,"path":35,"stem":36},"Dart","\u002Fframeworks\u002Fdart","frameworks\u002Fdart",{"title":38,"path":39,"stem":40},"Flutter","\u002Fframeworks\u002Fflutter","frameworks\u002Fflutter",{"title":42,"path":43,"stem":44},"Qwik","\u002Fframeworks\u002Fqwik","frameworks\u002Fqwik",{"title":46,"path":47,"stem":48},"React","\u002Fframeworks\u002Freact","frameworks\u002Freact",{"title":50,"path":51,"stem":52},"Svelte","\u002Fframeworks\u002Fsvelte","frameworks\u002Fsvelte",{"title":54,"path":55,"stem":56},"Vue","\u002Fframeworks\u002Fvue","frameworks\u002Fvue",{"id":58,"title":34,"body":59,"description":1701,"extension":1702,"links":1703,"meta":1704,"navigation":161,"path":35,"seo":1705,"stem":36,"__hash__":1706},"docs\u002Fframeworks\u002Fdart.md",{"type":60,"value":61,"toc":1693},"minimark",[62,80,84,94,128,131,135,138,472,474,478,487,490,508,625,640,804,809,812,1599,1603,1606,1689],[63,64,65,66,70,71,75,76,79],"p",{},"The ",[67,68,69],"code",{},"pichaflow_dart"," SDK is the core Dart client for the ",[72,73,74],"strong",{},"PichaFlow Engine",". This package provides the foundational ",[67,77,78],{},"PichaFlowClient"," for communicating with the PichaFlow API, uploading assets, generating delivery URLs, and deleting media files.",[81,82,9],"h2",{"id":83},"installation",[63,85,86,87,89,90,93],{},"Add ",[67,88,69],{}," to your ",[67,91,92],{},"pubspec.yaml",":",[95,96,101],"pre",{"className":97,"code":98,"language":99,"meta":100,"style":100},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","dependencies:\n  pichaflow_dart: ^0.1.0\n","yaml","",[67,102,103,116],{"__ignoreMap":100},[104,105,108,112],"span",{"class":106,"line":107},"line",1,[104,109,111],{"class":110},"swJcz","dependencies",[104,113,115],{"class":114},"sMK4o",":\n",[104,117,119,122,124],{"class":106,"line":118},2,[104,120,121],{"class":110},"  pichaflow_dart",[104,123,93],{"class":114},[104,125,127],{"class":126},"sfazB"," ^0.1.0\n",[129,130],"hr",{},[81,132,134],{"id":133},"direct-to-edge-uploads","Direct-to-Edge Uploads",[63,136,137],{},"If your environment is secure (e.g., server-side Dart, CLI tool, or test environment), you can initialize the client using your secret\u002FAPI key directly:",[95,139,143],{"className":140,"code":141,"language":142,"meta":100,"style":100},"language-dart shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import 'package:pichaflow_dart\u002Fpichaflow_dart.dart';\n\nvoid main() async {\n  final client = PichaFlowClient(\n    PichaFlowConfig(\n      apiKey: 'sk_live_your_secret_key',\n    ),\n  );\n\n  final List\u003Cint> fileBytes = [\u002F* raw image\u002Ffile bytes *\u002F];\n\n  try {\n    final response = await client.upload(\n      fileBytes,\n      'avatar.jpg',\n      options: UploadOptions(\n        tags: ['user-avatar'],\n      ),\n    );\n    print('Uploaded! ID: ${response.id}, URL: ${response.url}');\n  } catch (e) {\n    print('Failed: $e');\n  }\n}\n","dart",[67,144,145,157,163,185,204,212,226,234,242,247,278,283,291,316,324,332,345,362,370,377,426,438,460,466],{"__ignoreMap":100},[104,146,147,151,154],{"class":106,"line":107},[104,148,150],{"class":149},"sbssI","import",[104,152,153],{"class":126}," 'package:pichaflow_dart\u002Fpichaflow_dart.dart'",[104,155,156],{"class":114},";\n",[104,158,159],{"class":106,"line":118},[104,160,162],{"emptyLinePlaceholder":161},true,"\n",[104,164,166,170,174,178,182],{"class":106,"line":165},3,[104,167,169],{"class":168},"spNyl","void",[104,171,173],{"class":172},"s2Zo4"," main",[104,175,177],{"class":176},"sTEyZ","() ",[104,179,181],{"class":180},"s7zQu","async",[104,183,184],{"class":176}," {\n",[104,186,188,191,194,197,201],{"class":106,"line":187},4,[104,189,190],{"class":168},"  final",[104,192,193],{"class":176}," client ",[104,195,196],{"class":114},"=",[104,198,200],{"class":199},"sBMFI"," PichaFlowClient",[104,202,203],{"class":176},"(\n",[104,205,207,210],{"class":106,"line":206},5,[104,208,209],{"class":199},"    PichaFlowConfig",[104,211,203],{"class":176},[104,213,215,218,220,223],{"class":106,"line":214},6,[104,216,217],{"class":176},"      apiKey",[104,219,93],{"class":114},[104,221,222],{"class":126}," 'sk_live_your_secret_key'",[104,224,225],{"class":114},",\n",[104,227,229,232],{"class":106,"line":228},7,[104,230,231],{"class":176},"    )",[104,233,225],{"class":114},[104,235,237,240],{"class":106,"line":236},8,[104,238,239],{"class":176},"  )",[104,241,156],{"class":114},[104,243,245],{"class":106,"line":244},9,[104,246,162],{"emptyLinePlaceholder":161},[104,248,250,252,255,258,261,264,266,269,273,276],{"class":106,"line":249},10,[104,251,190],{"class":168},[104,253,254],{"class":199}," List",[104,256,257],{"class":176},"\u003C",[104,259,260],{"class":199},"int",[104,262,263],{"class":176},"> fileBytes ",[104,265,196],{"class":114},[104,267,268],{"class":176}," [",[104,270,272],{"class":271},"sHwdD","\u002F* raw image\u002Ffile bytes *\u002F",[104,274,275],{"class":176},"]",[104,277,156],{"class":114},[104,279,281],{"class":106,"line":280},11,[104,282,162],{"emptyLinePlaceholder":161},[104,284,286,289],{"class":106,"line":285},12,[104,287,288],{"class":180},"  try",[104,290,184],{"class":176},[104,292,294,297,300,302,305,308,311,314],{"class":106,"line":293},13,[104,295,296],{"class":168},"    final",[104,298,299],{"class":176}," response ",[104,301,196],{"class":114},[104,303,304],{"class":180}," await",[104,306,307],{"class":176}," client",[104,309,310],{"class":114},".",[104,312,313],{"class":172},"upload",[104,315,203],{"class":176},[104,317,319,322],{"class":106,"line":318},14,[104,320,321],{"class":176},"      fileBytes",[104,323,225],{"class":114},[104,325,327,330],{"class":106,"line":326},15,[104,328,329],{"class":126},"      'avatar.jpg'",[104,331,225],{"class":114},[104,333,335,338,340,343],{"class":106,"line":334},16,[104,336,337],{"class":176},"      options",[104,339,93],{"class":114},[104,341,342],{"class":199}," UploadOptions",[104,344,203],{"class":176},[104,346,348,351,353,355,358,360],{"class":106,"line":347},17,[104,349,350],{"class":176},"        tags",[104,352,93],{"class":114},[104,354,268],{"class":176},[104,356,357],{"class":126},"'user-avatar'",[104,359,275],{"class":176},[104,361,225],{"class":114},[104,363,365,368],{"class":106,"line":364},18,[104,366,367],{"class":176},"      )",[104,369,225],{"class":114},[104,371,373,375],{"class":106,"line":372},19,[104,374,231],{"class":176},[104,376,156],{"class":114},[104,378,380,383,386,389,392,396,398,401,404,407,409,411,413,416,418,421,424],{"class":106,"line":379},20,[104,381,382],{"class":172},"    print",[104,384,385],{"class":176},"(",[104,387,388],{"class":126},"'Uploaded! ID: ",[104,390,391],{"class":176},"${",[104,393,395],{"class":394},"sHdIc","response",[104,397,310],{"class":176},[104,399,400],{"class":394},"id",[104,402,403],{"class":176},"}",[104,405,406],{"class":126},", URL: ",[104,408,391],{"class":176},[104,410,395],{"class":394},[104,412,310],{"class":176},[104,414,415],{"class":394},"url",[104,417,403],{"class":176},[104,419,420],{"class":126},"'",[104,422,423],{"class":176},")",[104,425,156],{"class":114},[104,427,429,432,435],{"class":106,"line":428},21,[104,430,431],{"class":176},"  } ",[104,433,434],{"class":180},"catch",[104,436,437],{"class":176}," (e) {\n",[104,439,441,443,445,448,451,454,456,458],{"class":106,"line":440},22,[104,442,382],{"class":172},[104,444,385],{"class":176},[104,446,447],{"class":126},"'Failed: ",[104,449,450],{"class":176},"$",[104,452,453],{"class":394},"e",[104,455,420],{"class":126},[104,457,423],{"class":176},[104,459,156],{"class":114},[104,461,463],{"class":106,"line":462},23,[104,464,465],{"class":176},"  }\n",[104,467,469],{"class":106,"line":468},24,[104,470,471],{"class":176},"}\n",[129,473],{},[81,475,477],{"id":476},"secure-handshake-uploads-hmac-proxy","Secure Handshake Uploads (HMAC Proxy)",[63,479,480,481,310],{},"When running inside client applications (like Flutter mobile or web apps), ",[72,482,483,484,423],{},"never expose your PichaFlow Secret Key (",[67,485,486],{},"sk_live_...",[63,488,489],{},"Instead, use the secure HMAC handshake flow:",[491,492,493,501],"ol",{},[494,495,496,497,500],"li",{},"Provide a ",[67,498,499],{},"signatureUrl"," pointing to your backend signing endpoint.",[494,502,503,504,507],{},"Call ",[67,505,506],{},"secureUpload()",". The client fetches a temporary upload token from your signing backend and uploads the file directly to PichaFlow.",[95,509,511],{"className":140,"code":510,"language":142,"meta":100,"style":100},"final client = PichaFlowClient(\n  PichaFlowConfig(\n    signatureUrl: 'https:\u002F\u002Fyour-api.com\u002Fv1\u002Fpichaflow-upload', \u002F\u002F Signing endpoint\n  ),\n);\n\nfinal response = await client.secureUpload(\n  fileBytes,\n  'photo.png',\n  options: UploadOptions(directory: 'photos'),\n);\n",[67,512,513,526,533,549,555,561,565,584,591,598,619],{"__ignoreMap":100},[104,514,515,518,520,522,524],{"class":106,"line":107},[104,516,517],{"class":168},"final",[104,519,193],{"class":176},[104,521,196],{"class":114},[104,523,200],{"class":199},[104,525,203],{"class":176},[104,527,528,531],{"class":106,"line":118},[104,529,530],{"class":199},"  PichaFlowConfig",[104,532,203],{"class":176},[104,534,535,538,540,543,546],{"class":106,"line":165},[104,536,537],{"class":176},"    signatureUrl",[104,539,93],{"class":114},[104,541,542],{"class":126}," 'https:\u002F\u002Fyour-api.com\u002Fv1\u002Fpichaflow-upload'",[104,544,545],{"class":114},",",[104,547,548],{"class":271}," \u002F\u002F Signing endpoint\n",[104,550,551,553],{"class":106,"line":187},[104,552,239],{"class":176},[104,554,225],{"class":114},[104,556,557,559],{"class":106,"line":206},[104,558,423],{"class":176},[104,560,156],{"class":114},[104,562,563],{"class":106,"line":214},[104,564,162],{"emptyLinePlaceholder":161},[104,566,567,569,571,573,575,577,579,582],{"class":106,"line":228},[104,568,517],{"class":168},[104,570,299],{"class":176},[104,572,196],{"class":114},[104,574,304],{"class":180},[104,576,307],{"class":176},[104,578,310],{"class":114},[104,580,581],{"class":172},"secureUpload",[104,583,203],{"class":176},[104,585,586,589],{"class":106,"line":236},[104,587,588],{"class":176},"  fileBytes",[104,590,225],{"class":114},[104,592,593,596],{"class":106,"line":244},[104,594,595],{"class":126},"  'photo.png'",[104,597,225],{"class":114},[104,599,600,603,605,607,610,612,615,617],{"class":106,"line":249},[104,601,602],{"class":176},"  options",[104,604,93],{"class":114},[104,606,342],{"class":199},[104,608,609],{"class":176},"(directory",[104,611,93],{"class":114},[104,613,614],{"class":126}," 'photos'",[104,616,423],{"class":176},[104,618,225],{"class":114},[104,620,621,623],{"class":106,"line":280},[104,622,423],{"class":176},[104,624,156],{"class":114},[626,627,628],"blockquote",{},[63,629,630,633,636,637,639],{},[104,631,632],{},"!CAUTION",[72,634,635],{},"Authentication Check Required",": You must secure your backend ",[67,638,499],{}," endpoint with appropriate session or token authentication middleware. If this route is left public and unauthenticated, any user or bot can request valid signatures to upload files directly to your account, risking billing spikes or bucket abuse.",[626,641,642,658,795],{},[63,643,644,647,650,651,653,654,657],{},[104,645,646],{},"!NOTE",[72,648,649],{},"Signature Response Contract",": Your ",[67,652,499],{}," endpoint must return a JSON body with the following fields. The component uses all of them to construct the five ",[67,655,656],{},"X-Picha-*"," headers sent to the Edge Engine:",[95,659,663],{"className":660,"code":661,"language":662,"meta":100,"style":100},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"signature\":    \"\u003Chmac-sha256-hex>\",\n  \"timestamp\":    1234567890000,\n  \"tenantId\":     \"pf_prj_...\",\n  \"directory\":    \"products\u002Fsummer\u002F\",\n  \"maxSize\":      \"5242880\",\n  \"allowedTypes\": \"image\u002Fwebp,image\u002Fjpeg\"\n}\n","json",[67,664,665,670,693,709,730,750,771,791],{"__ignoreMap":100},[104,666,667],{"class":106,"line":107},[104,668,669],{"class":114},"{\n",[104,671,672,675,678,681,683,686,689,691],{"class":106,"line":118},[104,673,674],{"class":114},"  \"",[104,676,677],{"class":168},"signature",[104,679,680],{"class":114},"\"",[104,682,93],{"class":114},[104,684,685],{"class":114},"    \"",[104,687,688],{"class":126},"\u003Chmac-sha256-hex>",[104,690,680],{"class":114},[104,692,225],{"class":114},[104,694,695,697,700,702,704,707],{"class":106,"line":165},[104,696,674],{"class":114},[104,698,699],{"class":168},"timestamp",[104,701,680],{"class":114},[104,703,93],{"class":114},[104,705,706],{"class":149},"    1234567890000",[104,708,225],{"class":114},[104,710,711,713,716,718,720,723,726,728],{"class":106,"line":187},[104,712,674],{"class":114},[104,714,715],{"class":168},"tenantId",[104,717,680],{"class":114},[104,719,93],{"class":114},[104,721,722],{"class":114},"     \"",[104,724,725],{"class":126},"pf_prj_...",[104,727,680],{"class":114},[104,729,225],{"class":114},[104,731,732,734,737,739,741,743,746,748],{"class":106,"line":206},[104,733,674],{"class":114},[104,735,736],{"class":168},"directory",[104,738,680],{"class":114},[104,740,93],{"class":114},[104,742,685],{"class":114},[104,744,745],{"class":126},"products\u002Fsummer\u002F",[104,747,680],{"class":114},[104,749,225],{"class":114},[104,751,752,754,757,759,761,764,767,769],{"class":106,"line":214},[104,753,674],{"class":114},[104,755,756],{"class":168},"maxSize",[104,758,680],{"class":114},[104,760,93],{"class":114},[104,762,763],{"class":114},"      \"",[104,765,766],{"class":126},"5242880",[104,768,680],{"class":114},[104,770,225],{"class":114},[104,772,773,775,778,780,782,785,788],{"class":106,"line":228},[104,774,674],{"class":114},[104,776,777],{"class":168},"allowedTypes",[104,779,680],{"class":114},[104,781,93],{"class":114},[104,783,784],{"class":114}," \"",[104,786,787],{"class":126},"image\u002Fwebp,image\u002Fjpeg",[104,789,790],{"class":114},"\"\n",[104,792,793],{"class":106,"line":236},[104,794,471],{"class":114},[63,796,797,798,803],{},"See ",[799,800,802],"a",{"href":801},"\u002Fhttp-api#_10-client-side-upload-signatures","HTTP API → Client-Side Upload Signatures"," for the full HMAC construction guide.",[805,806,808],"h3",{"id":807},"implementing-the-secure-signing-backend","Implementing the Secure Signing Backend",[63,810,811],{},"Below is a complete Deno \u002F Supabase Edge Function implementation for the signing endpoint:",[95,813,817],{"className":814,"code":815,"language":816,"meta":100,"style":100},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { serve } from \"https:\u002F\u002Fdeno.land\u002Fstd@0.168.0\u002Fhttp\u002Fserver.ts\"\n\nconst corsHeaders = {\n  'Access-Control-Allow-Origin': '*',\n  'Access-Control-Allow-Headers': 'authorization, x-client-info, apikey, content-type',\n}\n\nserve(async (req: Request) => {\n  \u002F\u002F CORS Preflight\n  if (req.method === 'OPTIONS') {\n    return new Response('ok', { headers: corsHeaders })\n  }\n\n  try {\n    const pichaFlowKey = Deno.env.get('PICHAFLOW_SECRET_KEY')\n    if (!pichaFlowKey) {\n      throw new Error('Server configuration error: Missing PICHAFLOW_SECRET_KEY')\n    }\n\n    const body = await req.json().catch(() => ({}))\n\n    \u002F\u002F Call PichaFlow Management API to generate a signed upload token\n    const response = await fetch('https:\u002F\u002Fapi.pichaflow.com\u002Fv1\u002Fupload\u002Fsign', {\n      method: 'POST',\n      headers: {\n        'Authorization': `Bearer ${pichaFlowKey}`,\n        'Content-Type': 'application\u002Fjson'\n      },\n      body: JSON.stringify({\n        tenantId: body?.tenantId,\n        directory: body?.directory,\n        maxSize: body?.maxSize,\n        allowedTypes: body?.allowedTypes\n      })\n    })\n\n    const data = await response.json()\n\n    return new Response(JSON.stringify(data), {\n      headers: { ...corsHeaders, 'Content-Type': 'application\u002Fjson' },\n      status: response.status\n    })\n  } catch (err: any) {\n    return new Response(JSON.stringify({ error: err.message }), {\n      headers: { ...corsHeaders, 'Content-Type': 'application\u002Fjson' },\n      status: 500\n    })\n  }\n})\n","typescript",[67,818,819,842,846,858,880,900,904,908,935,940,969,1006,1010,1014,1020,1055,1072,1093,1098,1102,1141,1145,1150,1177,1193,1203,1231,1251,1257,1277,1294,1310,1326,1341,1349,1357,1362,1383,1388,1417,1451,1466,1473,1496,1539,1570,1580,1587,1592],{"__ignoreMap":100},[104,820,821,823,826,829,832,835,837,840],{"class":106,"line":107},[104,822,150],{"class":180},[104,824,825],{"class":114}," {",[104,827,828],{"class":176}," serve",[104,830,831],{"class":114}," }",[104,833,834],{"class":180}," from",[104,836,784],{"class":114},[104,838,839],{"class":126},"https:\u002F\u002Fdeno.land\u002Fstd@0.168.0\u002Fhttp\u002Fserver.ts",[104,841,790],{"class":114},[104,843,844],{"class":106,"line":118},[104,845,162],{"emptyLinePlaceholder":161},[104,847,848,851,854,856],{"class":106,"line":165},[104,849,850],{"class":168},"const",[104,852,853],{"class":176}," corsHeaders ",[104,855,196],{"class":114},[104,857,184],{"class":114},[104,859,860,863,866,868,870,873,876,878],{"class":106,"line":187},[104,861,862],{"class":114},"  '",[104,864,865],{"class":110},"Access-Control-Allow-Origin",[104,867,420],{"class":114},[104,869,93],{"class":114},[104,871,872],{"class":114}," '",[104,874,875],{"class":126},"*",[104,877,420],{"class":114},[104,879,225],{"class":114},[104,881,882,884,887,889,891,893,896,898],{"class":106,"line":206},[104,883,862],{"class":114},[104,885,886],{"class":110},"Access-Control-Allow-Headers",[104,888,420],{"class":114},[104,890,93],{"class":114},[104,892,872],{"class":114},[104,894,895],{"class":126},"authorization, x-client-info, apikey, content-type",[104,897,420],{"class":114},[104,899,225],{"class":114},[104,901,902],{"class":106,"line":214},[104,903,471],{"class":114},[104,905,906],{"class":106,"line":228},[104,907,162],{"emptyLinePlaceholder":161},[104,909,910,913,915,917,920,923,925,928,930,933],{"class":106,"line":236},[104,911,912],{"class":172},"serve",[104,914,385],{"class":176},[104,916,181],{"class":168},[104,918,919],{"class":114}," (",[104,921,922],{"class":394},"req",[104,924,93],{"class":114},[104,926,927],{"class":199}," Request",[104,929,423],{"class":114},[104,931,932],{"class":168}," =>",[104,934,184],{"class":114},[104,936,937],{"class":106,"line":244},[104,938,939],{"class":271},"  \u002F\u002F CORS Preflight\n",[104,941,942,945,947,949,951,954,957,959,962,964,967],{"class":106,"line":249},[104,943,944],{"class":180},"  if",[104,946,919],{"class":110},[104,948,922],{"class":176},[104,950,310],{"class":114},[104,952,953],{"class":176},"method",[104,955,956],{"class":114}," ===",[104,958,872],{"class":114},[104,960,961],{"class":126},"OPTIONS",[104,963,420],{"class":114},[104,965,966],{"class":110},") ",[104,968,669],{"class":114},[104,970,971,974,977,980,982,984,987,989,991,993,996,998,1001,1003],{"class":106,"line":280},[104,972,973],{"class":180},"    return",[104,975,976],{"class":114}," new",[104,978,979],{"class":172}," Response",[104,981,385],{"class":110},[104,983,420],{"class":114},[104,985,986],{"class":126},"ok",[104,988,420],{"class":114},[104,990,545],{"class":114},[104,992,825],{"class":114},[104,994,995],{"class":110}," headers",[104,997,93],{"class":114},[104,999,1000],{"class":176}," corsHeaders",[104,1002,831],{"class":114},[104,1004,1005],{"class":110},")\n",[104,1007,1008],{"class":106,"line":285},[104,1009,465],{"class":114},[104,1011,1012],{"class":106,"line":293},[104,1013,162],{"emptyLinePlaceholder":161},[104,1015,1016,1018],{"class":106,"line":318},[104,1017,288],{"class":180},[104,1019,184],{"class":114},[104,1021,1022,1025,1028,1031,1034,1036,1039,1041,1044,1046,1048,1051,1053],{"class":106,"line":326},[104,1023,1024],{"class":168},"    const",[104,1026,1027],{"class":176}," pichaFlowKey",[104,1029,1030],{"class":114}," =",[104,1032,1033],{"class":176}," Deno",[104,1035,310],{"class":114},[104,1037,1038],{"class":176},"env",[104,1040,310],{"class":114},[104,1042,1043],{"class":172},"get",[104,1045,385],{"class":110},[104,1047,420],{"class":114},[104,1049,1050],{"class":126},"PICHAFLOW_SECRET_KEY",[104,1052,420],{"class":114},[104,1054,1005],{"class":110},[104,1056,1057,1060,1062,1065,1068,1070],{"class":106,"line":334},[104,1058,1059],{"class":180},"    if",[104,1061,919],{"class":110},[104,1063,1064],{"class":114},"!",[104,1066,1067],{"class":176},"pichaFlowKey",[104,1069,966],{"class":110},[104,1071,669],{"class":114},[104,1073,1074,1077,1079,1082,1084,1086,1089,1091],{"class":106,"line":347},[104,1075,1076],{"class":180},"      throw",[104,1078,976],{"class":114},[104,1080,1081],{"class":172}," Error",[104,1083,385],{"class":110},[104,1085,420],{"class":114},[104,1087,1088],{"class":126},"Server configuration error: Missing PICHAFLOW_SECRET_KEY",[104,1090,420],{"class":114},[104,1092,1005],{"class":110},[104,1094,1095],{"class":106,"line":364},[104,1096,1097],{"class":114},"    }\n",[104,1099,1100],{"class":106,"line":372},[104,1101,162],{"emptyLinePlaceholder":161},[104,1103,1104,1106,1109,1111,1113,1116,1118,1120,1123,1125,1127,1129,1131,1133,1135,1138],{"class":106,"line":379},[104,1105,1024],{"class":168},[104,1107,1108],{"class":176}," body",[104,1110,1030],{"class":114},[104,1112,304],{"class":180},[104,1114,1115],{"class":176}," req",[104,1117,310],{"class":114},[104,1119,662],{"class":172},[104,1121,1122],{"class":110},"()",[104,1124,310],{"class":114},[104,1126,434],{"class":172},[104,1128,385],{"class":110},[104,1130,1122],{"class":114},[104,1132,932],{"class":168},[104,1134,919],{"class":110},[104,1136,1137],{"class":114},"{}",[104,1139,1140],{"class":110},"))\n",[104,1142,1143],{"class":106,"line":428},[104,1144,162],{"emptyLinePlaceholder":161},[104,1146,1147],{"class":106,"line":440},[104,1148,1149],{"class":271},"    \u002F\u002F Call PichaFlow Management API to generate a signed upload token\n",[104,1151,1152,1154,1157,1159,1161,1164,1166,1168,1171,1173,1175],{"class":106,"line":462},[104,1153,1024],{"class":168},[104,1155,1156],{"class":176}," response",[104,1158,1030],{"class":114},[104,1160,304],{"class":180},[104,1162,1163],{"class":172}," fetch",[104,1165,385],{"class":110},[104,1167,420],{"class":114},[104,1169,1170],{"class":126},"https:\u002F\u002Fapi.pichaflow.com\u002Fv1\u002Fupload\u002Fsign",[104,1172,420],{"class":114},[104,1174,545],{"class":114},[104,1176,184],{"class":114},[104,1178,1179,1182,1184,1186,1189,1191],{"class":106,"line":468},[104,1180,1181],{"class":110},"      method",[104,1183,93],{"class":114},[104,1185,872],{"class":114},[104,1187,1188],{"class":126},"POST",[104,1190,420],{"class":114},[104,1192,225],{"class":114},[104,1194,1196,1199,1201],{"class":106,"line":1195},25,[104,1197,1198],{"class":110},"      headers",[104,1200,93],{"class":114},[104,1202,184],{"class":114},[104,1204,1206,1209,1212,1214,1216,1219,1222,1224,1226,1229],{"class":106,"line":1205},26,[104,1207,1208],{"class":114},"        '",[104,1210,1211],{"class":110},"Authorization",[104,1213,420],{"class":114},[104,1215,93],{"class":114},[104,1217,1218],{"class":114}," `",[104,1220,1221],{"class":126},"Bearer ",[104,1223,391],{"class":114},[104,1225,1067],{"class":176},[104,1227,1228],{"class":114},"}`",[104,1230,225],{"class":114},[104,1232,1234,1236,1239,1241,1243,1245,1248],{"class":106,"line":1233},27,[104,1235,1208],{"class":114},[104,1237,1238],{"class":110},"Content-Type",[104,1240,420],{"class":114},[104,1242,93],{"class":114},[104,1244,872],{"class":114},[104,1246,1247],{"class":126},"application\u002Fjson",[104,1249,1250],{"class":114},"'\n",[104,1252,1254],{"class":106,"line":1253},28,[104,1255,1256],{"class":114},"      },\n",[104,1258,1260,1263,1265,1268,1270,1273,1275],{"class":106,"line":1259},29,[104,1261,1262],{"class":110},"      body",[104,1264,93],{"class":114},[104,1266,1267],{"class":176}," JSON",[104,1269,310],{"class":114},[104,1271,1272],{"class":172},"stringify",[104,1274,385],{"class":110},[104,1276,669],{"class":114},[104,1278,1280,1283,1285,1287,1290,1292],{"class":106,"line":1279},30,[104,1281,1282],{"class":110},"        tenantId",[104,1284,93],{"class":114},[104,1286,1108],{"class":176},[104,1288,1289],{"class":114},"?.",[104,1291,715],{"class":176},[104,1293,225],{"class":114},[104,1295,1297,1300,1302,1304,1306,1308],{"class":106,"line":1296},31,[104,1298,1299],{"class":110},"        directory",[104,1301,93],{"class":114},[104,1303,1108],{"class":176},[104,1305,1289],{"class":114},[104,1307,736],{"class":176},[104,1309,225],{"class":114},[104,1311,1313,1316,1318,1320,1322,1324],{"class":106,"line":1312},32,[104,1314,1315],{"class":110},"        maxSize",[104,1317,93],{"class":114},[104,1319,1108],{"class":176},[104,1321,1289],{"class":114},[104,1323,756],{"class":176},[104,1325,225],{"class":114},[104,1327,1329,1332,1334,1336,1338],{"class":106,"line":1328},33,[104,1330,1331],{"class":110},"        allowedTypes",[104,1333,93],{"class":114},[104,1335,1108],{"class":176},[104,1337,1289],{"class":114},[104,1339,1340],{"class":176},"allowedTypes\n",[104,1342,1344,1347],{"class":106,"line":1343},34,[104,1345,1346],{"class":114},"      }",[104,1348,1005],{"class":110},[104,1350,1352,1355],{"class":106,"line":1351},35,[104,1353,1354],{"class":114},"    }",[104,1356,1005],{"class":110},[104,1358,1360],{"class":106,"line":1359},36,[104,1361,162],{"emptyLinePlaceholder":161},[104,1363,1365,1367,1370,1372,1374,1376,1378,1380],{"class":106,"line":1364},37,[104,1366,1024],{"class":168},[104,1368,1369],{"class":176}," data",[104,1371,1030],{"class":114},[104,1373,304],{"class":180},[104,1375,1156],{"class":176},[104,1377,310],{"class":114},[104,1379,662],{"class":172},[104,1381,1382],{"class":110},"()\n",[104,1384,1386],{"class":106,"line":1385},38,[104,1387,162],{"emptyLinePlaceholder":161},[104,1389,1391,1393,1395,1397,1399,1402,1404,1406,1408,1411,1413,1415],{"class":106,"line":1390},39,[104,1392,973],{"class":180},[104,1394,976],{"class":114},[104,1396,979],{"class":172},[104,1398,385],{"class":110},[104,1400,1401],{"class":176},"JSON",[104,1403,310],{"class":114},[104,1405,1272],{"class":172},[104,1407,385],{"class":110},[104,1409,1410],{"class":176},"data",[104,1412,423],{"class":110},[104,1414,545],{"class":114},[104,1416,184],{"class":114},[104,1418,1420,1422,1424,1426,1429,1432,1434,1436,1438,1440,1442,1444,1446,1448],{"class":106,"line":1419},40,[104,1421,1198],{"class":110},[104,1423,93],{"class":114},[104,1425,825],{"class":114},[104,1427,1428],{"class":114}," ...",[104,1430,1431],{"class":176},"corsHeaders",[104,1433,545],{"class":114},[104,1435,872],{"class":114},[104,1437,1238],{"class":110},[104,1439,420],{"class":114},[104,1441,93],{"class":114},[104,1443,872],{"class":114},[104,1445,1247],{"class":126},[104,1447,420],{"class":114},[104,1449,1450],{"class":114}," },\n",[104,1452,1454,1457,1459,1461,1463],{"class":106,"line":1453},41,[104,1455,1456],{"class":110},"      status",[104,1458,93],{"class":114},[104,1460,1156],{"class":176},[104,1462,310],{"class":114},[104,1464,1465],{"class":176},"status\n",[104,1467,1469,1471],{"class":106,"line":1468},42,[104,1470,1354],{"class":114},[104,1472,1005],{"class":110},[104,1474,1476,1479,1482,1484,1487,1489,1492,1494],{"class":106,"line":1475},43,[104,1477,1478],{"class":114},"  }",[104,1480,1481],{"class":180}," catch",[104,1483,919],{"class":114},[104,1485,1486],{"class":394},"err",[104,1488,93],{"class":114},[104,1490,1491],{"class":199}," any",[104,1493,423],{"class":114},[104,1495,184],{"class":114},[104,1497,1499,1501,1503,1505,1507,1509,1511,1513,1515,1518,1521,1523,1526,1528,1531,1533,1535,1537],{"class":106,"line":1498},44,[104,1500,973],{"class":180},[104,1502,976],{"class":114},[104,1504,979],{"class":172},[104,1506,385],{"class":110},[104,1508,1401],{"class":176},[104,1510,310],{"class":114},[104,1512,1272],{"class":172},[104,1514,385],{"class":110},[104,1516,1517],{"class":114},"{",[104,1519,1520],{"class":110}," error",[104,1522,93],{"class":114},[104,1524,1525],{"class":176}," err",[104,1527,310],{"class":114},[104,1529,1530],{"class":176},"message",[104,1532,831],{"class":114},[104,1534,423],{"class":110},[104,1536,545],{"class":114},[104,1538,184],{"class":114},[104,1540,1542,1544,1546,1548,1550,1552,1554,1556,1558,1560,1562,1564,1566,1568],{"class":106,"line":1541},45,[104,1543,1198],{"class":110},[104,1545,93],{"class":114},[104,1547,825],{"class":114},[104,1549,1428],{"class":114},[104,1551,1431],{"class":176},[104,1553,545],{"class":114},[104,1555,872],{"class":114},[104,1557,1238],{"class":110},[104,1559,420],{"class":114},[104,1561,93],{"class":114},[104,1563,872],{"class":114},[104,1565,1247],{"class":126},[104,1567,420],{"class":114},[104,1569,1450],{"class":114},[104,1571,1573,1575,1577],{"class":106,"line":1572},46,[104,1574,1456],{"class":110},[104,1576,93],{"class":114},[104,1578,1579],{"class":149}," 500\n",[104,1581,1583,1585],{"class":106,"line":1582},47,[104,1584,1354],{"class":114},[104,1586,1005],{"class":110},[104,1588,1590],{"class":106,"line":1589},48,[104,1591,465],{"class":114},[104,1593,1595,1597],{"class":106,"line":1594},49,[104,1596,403],{"class":114},[104,1598,1005],{"class":176},[81,1600,1602],{"id":1601},"delivery-urls","Delivery URLs",[63,1604,1605],{},"Generate optimized CDN URLs with presets and resize transformations:",[95,1607,1609],{"className":140,"code":1608,"language":142,"meta":100,"style":100},"final url = client.getDeliveryUrl(\n  'users-photos\u002Favatar.jpg',\n  w: 300,\n  h: 300,\n  q: 85,\n  f: 'webp',\n);\n",[67,1610,1611,1629,1636,1648,1659,1671,1683],{"__ignoreMap":100},[104,1612,1613,1615,1618,1620,1622,1624,1627],{"class":106,"line":107},[104,1614,517],{"class":168},[104,1616,1617],{"class":176}," url ",[104,1619,196],{"class":114},[104,1621,307],{"class":176},[104,1623,310],{"class":114},[104,1625,1626],{"class":172},"getDeliveryUrl",[104,1628,203],{"class":176},[104,1630,1631,1634],{"class":106,"line":118},[104,1632,1633],{"class":126},"  'users-photos\u002Favatar.jpg'",[104,1635,225],{"class":114},[104,1637,1638,1641,1643,1646],{"class":106,"line":165},[104,1639,1640],{"class":176},"  w",[104,1642,93],{"class":114},[104,1644,1645],{"class":149}," 300",[104,1647,225],{"class":114},[104,1649,1650,1653,1655,1657],{"class":106,"line":187},[104,1651,1652],{"class":176},"  h",[104,1654,93],{"class":114},[104,1656,1645],{"class":149},[104,1658,225],{"class":114},[104,1660,1661,1664,1666,1669],{"class":106,"line":206},[104,1662,1663],{"class":176},"  q",[104,1665,93],{"class":114},[104,1667,1668],{"class":149}," 85",[104,1670,225],{"class":114},[104,1672,1673,1676,1678,1681],{"class":106,"line":214},[104,1674,1675],{"class":176},"  f",[104,1677,93],{"class":114},[104,1679,1680],{"class":126}," 'webp'",[104,1682,225],{"class":114},[104,1684,1685,1687],{"class":106,"line":228},[104,1686,423],{"class":176},[104,1688,156],{"class":114},[1690,1691,1692],"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 .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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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}",{"title":100,"searchDepth":118,"depth":118,"links":1694},[1695,1696,1697,1700],{"id":83,"depth":118,"text":9},{"id":133,"depth":118,"text":134},{"id":476,"depth":118,"text":477,"children":1698},[1699],{"id":807,"depth":165,"text":808},{"id":1601,"depth":118,"text":1602},"Integrate PichaFlow into your Dart applications and server-side environments.","md",null,{},{"title":34,"description":1701},"dmA_-eIGGrzz7Sr5UfuVJ9rwRRXw5mrrKVSh4EIjjSE",[1708,1709],{"title":29,"path":30,"stem":31,"children":-1,"description":100},{"title":38,"path":39,"stem":40,"description":1710,"children":-1},"Integrate PichaFlow into your Flutter applications.",1786829280665]