[{"data":1,"prerenderedAt":744},["ShallowReactive",2],{"page:\u002Fextensions\u002Fkubb-labs\u002Fplugin-fetch\u002Fguides\u002Ftransport":3},{"id":4,"frontmatter":5,"title":6,"heading":6,"body":7,"path":743,"source":4},"extensions\u002Fkubb-labs\u002Fplugin-fetch\u002Fguides\u002Ftransport.md",{},"Use a custom transport",{"type":8,"value":9,"toc":734},"minimark",[10,14,17,22,29,321,336,340,343,616,619,623,637,641,652],[11,12,13],"p",{},"Set a transport at runtime to replace the network send. The client still builds URLs, serializes parameters, resolves authentication, and handles results.",[11,15,16],{},"The transport is a function. Use interceptors for request headers or response logging.",[18,19,21],"h2",{"id":20},"write-a-transport-function","Write a transport function",[11,23,24,28],{},[25,26,27],"code",{},"@kubb\u002Fplugin-fetch"," types the transport as a function that receives a fully resolved request and returns a result:",[30,31,35],"pre",{"language":32,"code":33,"class":34},"typescript","type Transport = (request: ResolvedRequest) => Promise\u003CTransportResult>\n\ntype ResolvedRequest = {\n  url: string\n  method: string\n  headers: Record\u003Cstring, string>\n  body?: RequestBody\n  signal?: AbortSignal\n  credentials?: RequestCredentials\n  options?: FetchOptions\n  responseType?: ResponseType\n}\n\ntype TransportResult\u003CTData = unknown> = {\n  data: TData\n  status: number\n  statusText: string\n  headers: Headers\n  contentType?: string\n  request: Request\n  response: Response\n}","highlights",[25,36,38,86,87,86,89,86,101,86,114,86,125,86,148,86,161,86,173,86,185,86,197,86,209,86,214,86,216,86,237,86,249,86,261,86,272,86,283,86,294,86,305,86,317],{"class":37},"language-typescript",[39,40,43,47,51,54,58,62,65,68,71,74,77,80,83],"span",{"class":41,"style":42},"line","display: inline",[39,44,46],{"style":45},"color:#d73a49;--hls-dark:#f97583","type ",[39,48,50],{"style":49},"color:#6f42c1;--hls-dark:#b392f0","Transport ",[39,52,53],{"style":45},"= ",[39,55,57],{"style":56},"color:#005cc5;--hls-dark:#79b8ff","(",[39,59,61],{"style":60},"color:#24292e;--hls-dark:#e1e4e8","request",[39,63,64],{"style":60},": ",[39,66,67],{"style":49},"ResolvedRequest",[39,69,70],{"style":56},") ",[39,72,73],{"style":45},"=> ",[39,75,76],{"style":49},"Promise",[39,78,79],{"style":45},"\u003C",[39,81,82],{"style":49},"TransportResult",[39,84,85],{"style":45},">","\n",[39,88],{"class":41,"style":42},[39,90,91,93,96,98],{"class":41,"style":42},[39,92,46],{"style":45},[39,94,95],{"style":49},"ResolvedRequest ",[39,97,53],{"style":45},[39,99,100],{"style":56},"{",[39,102,103,106,109,111],{"class":41,"style":42},[39,104,105],{"style":56},"  ",[39,107,108],{"style":56},"url",[39,110,64],{"style":60},[39,112,113],{"style":49},"string",[39,115,116,118,121,123],{"class":41,"style":42},[39,117,105],{"style":49},[39,119,120],{"style":60},"method",[39,122,64],{"style":60},[39,124,113],{"style":49},[39,126,127,129,132,134,137,139,141,144,146],{"class":41,"style":42},[39,128,105],{"style":49},[39,130,131],{"style":60},"headers",[39,133,64],{"style":60},[39,135,136],{"style":49},"Record",[39,138,79],{"style":45},[39,140,113],{"style":60},[39,142,143],{"style":45},", ",[39,145,113],{"style":60},[39,147,85],{"style":45},[39,149,150,152,155,158],{"class":41,"style":42},[39,151,105],{"style":45},[39,153,154],{"style":60},"body",[39,156,157],{"style":60},"?: ",[39,159,160],{"style":49},"RequestBody",[39,162,163,165,168,170],{"class":41,"style":42},[39,164,105],{"style":49},[39,166,167],{"style":60},"signal",[39,169,157],{"style":60},[39,171,172],{"style":49},"AbortSignal",[39,174,175,177,180,182],{"class":41,"style":42},[39,176,105],{"style":49},[39,178,179],{"style":60},"credentials",[39,181,157],{"style":60},[39,183,184],{"style":49},"RequestCredentials",[39,186,187,189,192,194],{"class":41,"style":42},[39,188,105],{"style":49},[39,190,191],{"style":60},"options",[39,193,157],{"style":60},[39,195,196],{"style":49},"FetchOptions",[39,198,199,201,204,206],{"class":41,"style":42},[39,200,105],{"style":49},[39,202,203],{"style":60},"responseType",[39,205,157],{"style":60},[39,207,208],{"style":49},"ResponseType",[39,210,211],{"class":41,"style":42},[39,212,213],{"style":56},"}",[39,215],{"class":41,"style":42},[39,217,218,220,222,224,227,229,232,235],{"class":41,"style":42},[39,219,46],{"style":45},[39,221,82],{"style":49},[39,223,79],{"style":45},[39,225,226],{"style":49},"TData ",[39,228,53],{"style":45},[39,230,231],{"style":60},"unknown",[39,233,234],{"style":45},"> = ",[39,236,100],{"style":56},[39,238,239,241,244,246],{"class":41,"style":42},[39,240,105],{"style":56},[39,242,243],{"style":56},"data",[39,245,64],{"style":60},[39,247,248],{"style":49},"TData",[39,250,251,253,256,258],{"class":41,"style":42},[39,252,105],{"style":49},[39,254,255],{"style":60},"status",[39,257,64],{"style":60},[39,259,260],{"style":49},"number",[39,262,263,265,268,270],{"class":41,"style":42},[39,264,105],{"style":49},[39,266,267],{"style":60},"statusText",[39,269,64],{"style":60},[39,271,113],{"style":49},[39,273,274,276,278,280],{"class":41,"style":42},[39,275,105],{"style":49},[39,277,131],{"style":60},[39,279,64],{"style":60},[39,281,282],{"style":49},"Headers",[39,284,285,287,290,292],{"class":41,"style":42},[39,286,105],{"style":49},[39,288,289],{"style":60},"contentType",[39,291,157],{"style":60},[39,293,113],{"style":49},[39,295,296,298,300,302],{"class":41,"style":42},[39,297,105],{"style":49},[39,299,61],{"style":60},[39,301,64],{"style":60},[39,303,304],{"style":49},"Request",[39,306,307,309,312,314],{"class":41,"style":42},[39,308,105],{"style":49},[39,310,311],{"style":60},"response",[39,313,64],{"style":60},[39,315,316],{"style":49},"Response",[39,318,319],{"class":41,"style":42},[39,320,213],{"style":56},[11,322,323,324,326,327,329,330,332,333,335],{},"The core hands you a ",[25,325,67],{}," with the URL built, the query and body serialized, and auth headers set. Return the parsed ",[25,328,243],{}," along with the native ",[25,331,61],{}," and ",[25,334,311],{},", so status, headers, and the raw body stay reachable on the result.",[18,337,339],{"id":338},"mock-the-network-in-tests","Mock the network in tests",[11,341,342],{},"Return a fixed result from an isolated client in tests:",[30,344,346],{"language":32,"code":345,"class":34},"import { createClient } from '.\u002Fgen\u002F.kubb\u002Fclient'\nimport { getPetById } from '.\u002Fgen\u002Fclients\u002FgetPetById'\n\nconst testClient = createClient({\n  transport: async (request) => ({\n    data: { id: 1, name: 'Fluffy' },\n    status: 200,\n    statusText: 'OK',\n    headers: new Headers(),\n    request: new Request(request.url),\n    response: new Response(),\n  }),\n})\n\nconst { data } = await getPetById({ path: { petId: 1 }, client: testClient })\n\u002F\u002F      ^ { id: 1, name: 'Fluffy' }",[25,347,348,86,369,86,385,86,387,86,403,86,425,86,459,86,472,86,485,86,503,86,529,86,545,86,554,86,558,86,560,86,610],{"class":37},[39,349,350,353,356,359,362,365],{"class":41,"style":42},[39,351,352],{"style":45},"import ",[39,354,355],{"style":56},"{ ",[39,357,358],{"style":60},"createClient ",[39,360,361],{"style":56},"} ",[39,363,364],{"style":45},"from ",[39,366,368],{"style":367},"color:#032f62;--hls-dark:#9ecbff","'.\u002Fgen\u002F.kubb\u002Fclient'",[39,370,371,373,375,378,380,382],{"class":41,"style":42},[39,372,352],{"style":45},[39,374,355],{"style":56},[39,376,377],{"style":60},"getPetById ",[39,379,361],{"style":56},[39,381,364],{"style":45},[39,383,384],{"style":367},"'.\u002Fgen\u002Fclients\u002FgetPetById'",[39,386],{"class":41,"style":42},[39,388,389,392,395,397,400],{"class":41,"style":42},[39,390,391],{"style":45},"const ",[39,393,394],{"style":60},"testClient ",[39,396,53],{"style":45},[39,398,399],{"style":49},"createClient",[39,401,402],{"style":56},"({",[39,404,405,407,410,412,415,417,419,421,423],{"class":41,"style":42},[39,406,105],{"style":56},[39,408,409],{"style":56},"transport",[39,411,64],{"style":45},[39,413,414],{"style":45},"async ",[39,416,57],{"style":56},[39,418,61],{"style":60},[39,420,70],{"style":56},[39,422,73],{"style":45},[39,424,402],{"style":56},[39,426,427,430,432,434,436,439,441,444,446,449,451,454,456],{"class":41,"style":42},[39,428,429],{"style":56},"    ",[39,431,243],{"style":56},[39,433,64],{"style":45},[39,435,355],{"style":56},[39,437,438],{"style":56},"id",[39,440,64],{"style":45},[39,442,443],{"style":56},"1",[39,445,143],{"style":45},[39,447,448],{"style":56},"name",[39,450,64],{"style":45},[39,452,453],{"style":367},"'Fluffy' ",[39,455,213],{"style":56},[39,457,458],{"style":45},",",[39,460,461,463,465,467,470],{"class":41,"style":42},[39,462,429],{"style":45},[39,464,255],{"style":56},[39,466,64],{"style":45},[39,468,469],{"style":56},"200",[39,471,458],{"style":45},[39,473,474,476,478,480,483],{"class":41,"style":42},[39,475,429],{"style":45},[39,477,267],{"style":56},[39,479,64],{"style":45},[39,481,482],{"style":367},"'OK'",[39,484,458],{"style":45},[39,486,487,489,491,493,496,498,501],{"class":41,"style":42},[39,488,429],{"style":45},[39,490,131],{"style":56},[39,492,64],{"style":45},[39,494,495],{"style":45},"new ",[39,497,282],{"style":49},[39,499,500],{"style":56},"()",[39,502,458],{"style":45},[39,504,505,507,509,511,513,515,517,519,522,524,527],{"class":41,"style":42},[39,506,429],{"style":45},[39,508,61],{"style":56},[39,510,64],{"style":45},[39,512,495],{"style":45},[39,514,304],{"style":49},[39,516,57],{"style":56},[39,518,61],{"style":60},[39,520,521],{"style":45},".",[39,523,108],{"style":56},[39,525,526],{"style":56},")",[39,528,458],{"style":45},[39,530,531,533,535,537,539,541,543],{"class":41,"style":42},[39,532,429],{"style":45},[39,534,311],{"style":56},[39,536,64],{"style":45},[39,538,495],{"style":45},[39,540,316],{"style":49},[39,542,500],{"style":56},[39,544,458],{"style":45},[39,546,547,549,552],{"class":41,"style":42},[39,548,105],{"style":45},[39,550,551],{"style":56},"})",[39,553,458],{"style":45},[39,555,556],{"class":41,"style":42},[39,557,551],{"style":56},[39,559],{"class":41,"style":42},[39,561,562,564,566,569,571,573,576,579,582,585,587,589,592,594,597,599,601,604,606,608],{"class":41,"style":42},[39,563,391],{"style":45},[39,565,355],{"style":56},[39,567,568],{"style":60},"data ",[39,570,361],{"style":56},[39,572,53],{"style":45},[39,574,575],{"style":45},"await ",[39,577,578],{"style":49},"getPetById",[39,580,581],{"style":56},"({ ",[39,583,584],{"style":56},"path",[39,586,64],{"style":45},[39,588,355],{"style":56},[39,590,591],{"style":56},"petId",[39,593,64],{"style":45},[39,595,596],{"style":56},"1 ",[39,598,213],{"style":56},[39,600,143],{"style":45},[39,602,603],{"style":56},"client",[39,605,64],{"style":45},[39,607,394],{"style":60},[39,609,551],{"style":56},[39,611,612],{"class":41,"style":42},[39,613,615],{"style":614},"color:#6a737d;--hls-dark:#6a737d","\u002F\u002F      ^ { id: 1, name: 'Fluffy' }",[11,617,618],{},"Pass the isolated client per operation or to a query plugin.",[18,620,622],{"id":621},"where-to-set-it","Where to set it",[11,624,625,626,629,630,633,634,636],{},"Use ",[25,627,628],{},"client.setConfig({ transport })"," for shared configuration, ",[25,631,632],{},"createClient({ transport })"," for an isolated instance, or pass ",[25,635,409],{}," on an operation to override it for one call.",[18,638,640],{"id":639},"wrap-the-default-transport","Wrap the default transport",[11,642,643,644,647,648,651],{},"The generated client exports ",[25,645,646],{},"defaultTransport",", the ",[25,649,650],{},"fetch","-based send it uses when no transport is set. Wrap it to add tracing, timing, or headers and keep the built-in request and response handling:",[30,653,655],{"language":32,"code":654,"class":34},"import { client, defaultTransport } from '.\u002Fgen\u002F.kubb\u002Fclient'\n\nclient.setConfig({\n  transport: (request) => withSpan(request, () => defaultTransport(request)),\n})",[25,656,657,86,676,86,678,86,689,86,730],{"class":37},[39,658,659,661,663,665,667,670,672,674],{"class":41,"style":42},[39,660,352],{"style":45},[39,662,355],{"style":56},[39,664,603],{"style":60},[39,666,143],{"style":45},[39,668,669],{"style":60},"defaultTransport ",[39,671,361],{"style":56},[39,673,364],{"style":45},[39,675,368],{"style":367},[39,677],{"class":41,"style":42},[39,679,680,682,684,687],{"class":41,"style":42},[39,681,603],{"style":60},[39,683,521],{"style":45},[39,685,686],{"style":49},"setConfig",[39,688,402],{"style":56},[39,690,691,693,695,697,699,701,703,705,708,710,712,714,717,719,721,723,725,728],{"class":41,"style":42},[39,692,105],{"style":56},[39,694,409],{"style":56},[39,696,64],{"style":45},[39,698,57],{"style":56},[39,700,61],{"style":60},[39,702,70],{"style":56},[39,704,73],{"style":45},[39,706,707],{"style":49},"withSpan",[39,709,57],{"style":56},[39,711,61],{"style":60},[39,713,143],{"style":45},[39,715,716],{"style":56},"() ",[39,718,73],{"style":45},[39,720,646],{"style":49},[39,722,57],{"style":56},[39,724,61],{"style":60},[39,726,727],{"style":56},"))",[39,729,458],{"style":45},[39,731,732],{"class":41,"style":42},[39,733,551],{"style":56},{"title":735,"searchDepth":736,"depth":736,"links":737},"",5,[738,740,741,742],{"id":20,"depth":739,"text":21},2,{"id":338,"depth":739,"text":339},{"id":621,"depth":739,"text":622},{"id":639,"depth":739,"text":640},"\u002Fextensions\u002Fkubb-labs\u002Fplugin-fetch\u002Fguides\u002Ftransport",1793747915128]