@@ -228,19 +228,20 @@ class authenticatedTransport implements Transport {
228
228
method : MethodInfo < I , O > ,
229
229
signal : AbortSignal | undefined ,
230
230
timeoutMs : number | undefined ,
231
- header : Headers ,
231
+ header : HeadersInit | undefined ,
232
232
message : PartialMessage < I > ,
233
233
contextValues ?: ContextValues
234
234
) : Promise < UnaryResponse < I , O > > {
235
- this . extraHeaders . forEach ( ( key : string , value : string ) => {
236
- header . set ( key , value ) ;
235
+ let newHeaders = cloneHeaders ( header ) ;
236
+ this . extraHeaders . forEach ( ( value : string , key : string ) => {
237
+ newHeaders . set ( key , value ) ;
237
238
} ) ;
238
239
return this . transport . unary (
239
240
service ,
240
241
method ,
241
242
signal ,
242
243
timeoutMs ,
243
- header ,
244
+ newHeaders ,
244
245
message ,
245
246
contextValues
246
247
) ;
@@ -254,25 +255,50 @@ class authenticatedTransport implements Transport {
254
255
method : MethodInfo < I , O > ,
255
256
signal : AbortSignal | undefined ,
256
257
timeoutMs : number | undefined ,
257
- header : Headers ,
258
+ header : HeadersInit | undefined ,
258
259
input : AsyncIterable < PartialMessage < I > > ,
259
260
contextValues ?: ContextValues
260
261
) : Promise < StreamResponse < I , O > > {
261
- this . extraHeaders . forEach ( ( key : string , value : string ) => {
262
- header . set ( key , value ) ;
262
+ let newHeaders = cloneHeaders ( header ) ;
263
+ this . extraHeaders . forEach ( ( value : string , key : string ) => {
264
+ newHeaders . set ( key , value ) ;
263
265
} ) ;
264
266
return this . transport . stream (
265
267
service ,
266
268
method ,
267
269
signal ,
268
270
timeoutMs ,
269
- header ,
271
+ newHeaders ,
270
272
input ,
271
273
contextValues
272
274
) ;
273
275
}
274
276
}
275
277
278
+ function cloneHeaders ( headers : HeadersInit | undefined ) : Headers {
279
+ let cloned = new Headers ( ) ;
280
+ if ( headers ) {
281
+ if ( headers !== undefined ) {
282
+ if ( Array . isArray ( headers ) ) {
283
+ for ( const [ key , value ] of headers ) {
284
+ cloned . append ( key , value ) ;
285
+ }
286
+ } else if ( "forEach" in headers ) {
287
+ if ( typeof headers . forEach == "function" ) {
288
+ headers . forEach ( ( value , key ) => {
289
+ cloned . append ( key , value ) ;
290
+ } ) ;
291
+ }
292
+ } else {
293
+ for ( const [ key , value ] of Object . entries < string > ( headers ) ) {
294
+ cloned . append ( key , value ) ;
295
+ }
296
+ }
297
+ }
298
+ }
299
+ return cloned ;
300
+ }
301
+
276
302
export interface WebRTCConnection {
277
303
transport : Transport ;
278
304
peerConnection : RTCPeerConnection ;
0 commit comments