@@ -14,28 +14,36 @@ import type {
1414 UploadFilesOptions ,
1515} from "../types" ;
1616import { logDeprecationWarning } from "./deprecations" ;
17+ import type { TraceHeaders } from "./random-hex" ;
18+ import { generateTraceHeaders } from "./random-hex" ;
1719import type { UploadPutResult } from "./types" ;
1820import { createUTReporter } from "./ut-reporter" ;
1921
2022const uploadWithProgress = (
2123 file : File ,
2224 rangeStart : number ,
2325 presigned : NewPresignedUrl ,
24- onUploadProgress ?:
25- | ( ( opts : { loaded : number ; delta : number } ) => void )
26- | undefined ,
26+ opts : {
27+ traceHeaders : TraceHeaders ;
28+ onUploadProgress ?:
29+ | ( ( opts : { loaded : number ; delta : number } ) => void )
30+ | undefined ;
31+ } ,
2732) =>
2833 Micro . async < unknown , UploadThingError , FetchContext > ( ( resume ) => {
2934 const xhr = new XMLHttpRequest ( ) ;
3035 xhr . open ( "PUT" , presigned . url , true ) ;
3136 xhr . setRequestHeader ( "Range" , `bytes=${ rangeStart } -` ) ;
3237 xhr . setRequestHeader ( "x-uploadthing-version" , version ) ;
38+ xhr . setRequestHeader ( "b3" , opts . traceHeaders . b3 ) ;
39+ xhr . setRequestHeader ( "traceparent" , opts . traceHeaders . traceparent ) ;
40+
3341 xhr . responseType = "json" ;
3442
3543 let previousLoaded = 0 ;
3644 xhr . upload . addEventListener ( "progress" , ( { loaded } ) => {
3745 const delta = loaded - previousLoaded ;
38- onUploadProgress ?.( { loaded, delta } ) ;
46+ opts . onUploadProgress ?.( { loaded, delta } ) ;
3947 previousLoaded = loaded ;
4048 } ) ;
4149 xhr . addEventListener ( "load" , ( ) => {
@@ -108,13 +116,17 @@ export const uploadFile = <
108116 file : File ,
109117 presigned : NewPresignedUrl ,
110118 opts : {
119+ traceHeaders : TraceHeaders ;
111120 onUploadProgress ?: ( progressEvent : {
112121 loaded : number ;
113122 delta : number ;
114123 } ) => void ;
115124 } ,
116125) =>
117- fetchEff ( presigned . url , { method : "HEAD" } ) . pipe (
126+ fetchEff ( presigned . url , {
127+ method : "HEAD" ,
128+ headers : opts . traceHeaders ,
129+ } ) . pipe (
118130 Micro . map ( ( { headers } ) =>
119131 parseInt ( headers . get ( "x-ut-range-start" ) ?? "0" , 10 ) ,
120132 ) ,
@@ -125,12 +137,14 @@ export const uploadFile = <
125137 } ) ,
126138 ) ,
127139 Micro . flatMap ( ( start ) =>
128- uploadWithProgress ( file , start , presigned , ( progressEvent ) =>
129- opts . onUploadProgress ?.( {
130- delta : progressEvent . delta ,
131- loaded : progressEvent . loaded + start ,
132- } ) ,
133- ) ,
140+ uploadWithProgress ( file , start , presigned , {
141+ traceHeaders : opts . traceHeaders ,
142+ onUploadProgress : ( progressEvent ) =>
143+ opts . onUploadProgress ?.( {
144+ delta : progressEvent . delta ,
145+ loaded : progressEvent . loaded + start ,
146+ } ) ,
147+ } ) ,
134148 ) ,
135149 Micro . map ( unsafeCoerce < unknown , UploadPutResult < TServerOutput > > ) ,
136150 Micro . map ( ( uploadResponse ) => ( {
@@ -171,11 +185,13 @@ export const uploadFilesInternal = <
171185 FetchContext
172186> => {
173187 // classic service right here
188+ const traceHeaders = generateTraceHeaders ( ) ;
174189 const reportEventToUT = createUTReporter ( {
175190 endpoint : String ( endpoint ) ,
176191 package : opts . package ,
177192 url : opts . url ,
178193 headers : opts . headers ,
194+ traceHeaders,
179195 } ) ;
180196
181197 const totalSize = opts . files . reduce ( ( acc , f ) => acc + f . size , 0 ) ;
@@ -204,6 +220,7 @@ export const uploadFilesInternal = <
204220 opts . files [ i ] ! ,
205221 presigned ,
206222 {
223+ traceHeaders,
207224 onUploadProgress : ( ev ) => {
208225 totalLoaded += ev . delta ;
209226 opts . onUploadProgress ?.( {
0 commit comments