11import { Server } from "node:http" ;
2+ import { readFile } from "node:fs/promises" ;
23import supertest , { SuperTest , Test } from "supertest" ;
34import { describe , it , expect , beforeEach , afterEach } from "vitest" ;
45import { fetch } from "node-fetch-native" ;
@@ -12,6 +13,7 @@ import {
1213 setHeader ,
1314 readRawBody ,
1415 setCookie ,
16+ setResponseHeader ,
1517} from "../src" ;
1618import { sendProxy , proxyRequest } from "../src/utils/proxy" ;
1719
@@ -106,6 +108,44 @@ describe("", () => {
106108 }
107109 ` ) ;
108110 } ) ;
111+
112+ it ( "can proxy binary request" , async ( ) => {
113+ app . use (
114+ "/debug" ,
115+ eventHandler ( async ( event ) => {
116+ const body = await readRawBody ( event , false ) ;
117+ return {
118+ headers : getHeaders ( event ) ,
119+ bytes : body ! . length ,
120+ } ;
121+ } )
122+ ) ;
123+
124+ app . use (
125+ "/" ,
126+ eventHandler ( ( event ) => {
127+ setResponseHeader ( event , "x-res-header" , "works" ) ;
128+ return proxyRequest ( event , url + "/debug" , { fetch } ) ;
129+ } )
130+ ) ;
131+
132+ const dummyFile = await readFile (
133+ new URL ( "assets/dummy.pdf" , import . meta. url )
134+ ) ;
135+
136+ const res = await fetch ( url + "/" , {
137+ method : "POST" ,
138+ body : dummyFile ,
139+ headers : {
140+ "x-req-header" : "works" ,
141+ } ,
142+ } ) ;
143+ const resBody = await res . json ( ) ;
144+
145+ expect ( res . headers . get ( "x-res-header" ) ) . toEqual ( "works" ) ;
146+ expect ( resBody . headers [ "x-req-header" ] ) . toEqual ( "works" ) ;
147+ expect ( resBody . bytes ) . toEqual ( dummyFile . length ) ;
148+ } ) ;
109149 } ) ;
110150
111151 describe ( "multipleCookies" , ( ) => {
0 commit comments