diff --git a/package.json b/package.json index a96a0f9c..a8bc6116 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ }, "dependencies": { "@open-draft/until": "^1.0.3", - "@remix-run/web-fetch": "^4.3.1", + "@remix-run/web-fetch": "^4.3.2", "@types/debug": "^4.1.7", "debug": "^4.3.3", "headers-polyfill": "^3.1.0", diff --git a/src/RemoteHttpInterceptor.ts b/src/RemoteHttpInterceptor.ts index 62982634..def69273 100644 --- a/src/RemoteHttpInterceptor.ts +++ b/src/RemoteHttpInterceptor.ts @@ -1,5 +1,5 @@ import { ChildProcess } from 'child_process' -import { Response } from '@remix-run/web-fetch' +import { Request, Response } from '@remix-run/web-fetch' import { Headers, HeadersObject, headersToObject } from 'headers-polyfill' import { HttpRequestEventMap } from './glossary' import { Interceptor } from './Interceptor' @@ -7,7 +7,6 @@ import { BatchInterceptor } from './BatchInterceptor' import { ClientRequestInterceptor } from './interceptors/ClientRequest' import { XMLHttpRequestInterceptor } from './interceptors/XMLHttpRequest' import { toInteractiveRequest } from './utils/toInteractiveRequest' -import { RequestWithCredentials } from './utils/RequestWithCredentials' export interface SerializedRequest { id: string @@ -159,7 +158,7 @@ export class RemoteHttpResolver extends Interceptor { ) as RevivedRequest log('parsed intercepted request', requestJson) - const capturedRequest = new RequestWithCredentials(requestJson.url, { + const capturedRequest = new Request(requestJson.url, { method: requestJson.method, headers: new Headers(requestJson.headers), credentials: requestJson.credentials, diff --git a/src/interceptors/ClientRequest/utils/createRequest.ts b/src/interceptors/ClientRequest/utils/createRequest.ts index 707ff733..9c071cf6 100644 --- a/src/interceptors/ClientRequest/utils/createRequest.ts +++ b/src/interceptors/ClientRequest/utils/createRequest.ts @@ -1,6 +1,5 @@ -import type { Request } from '@remix-run/web-fetch' +import { Request } from '@remix-run/web-fetch' import { Headers } from 'headers-polyfill' -import { RequestWithCredentials } from '../../../utils/RequestWithCredentials' import type { NodeClientRequest } from '../NodeClientRequest' /** @@ -23,7 +22,7 @@ export function createRequest(clientRequest: NodeClientRequest): Request { } } - return new RequestWithCredentials(clientRequest.url, { + return new Request(clientRequest.url, { method: clientRequest.method || 'GET', headers, credentials: 'same-origin', diff --git a/src/interceptors/XMLHttpRequest/XMLHttpRequestOverride.ts b/src/interceptors/XMLHttpRequest/XMLHttpRequestOverride.ts index 7d6bee88..6e10b2ab 100644 --- a/src/interceptors/XMLHttpRequest/XMLHttpRequestOverride.ts +++ b/src/interceptors/XMLHttpRequest/XMLHttpRequestOverride.ts @@ -4,6 +4,7 @@ */ import type { Debugger } from 'debug' import { until } from '@open-draft/until' +import { Request } from '@remix-run/web-fetch' import { Headers, stringToHeaders, headersToString } from 'headers-polyfill' import { parseJson } from '../../utils/parseJson' import { createEvent } from './utils/createEvent' @@ -17,7 +18,6 @@ import { createResponse } from './utils/createResponse' import { concatArrayBuffer } from './utils/concatArrayBuffer' import { toInteractiveRequest } from '../../utils/toInteractiveRequest' import { uuidv4 } from '../../utils/uuid' -import { RequestWithCredentials } from '../../utils/RequestWithCredentials' import { isDomParserSupportedType } from './utils/isDomParserSupportedType' type XMLHttpRequestEventHandler = ( @@ -240,7 +240,7 @@ export const createXMLHttpRequestOverride = ( // Create an intercepted request instance exposed to the request intercepting middleware. const requestId = uuidv4() - const capturedRequest = new RequestWithCredentials(url, { + const capturedRequest = new Request(url, { method: this.method, headers: this._requestHeaders, credentials: this.withCredentials ? 'include' : 'omit', diff --git a/src/utils/RequestWithCredentials.test.ts b/src/utils/RequestWithCredentials.test.ts deleted file mode 100644 index 156badfa..00000000 --- a/src/utils/RequestWithCredentials.test.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Request } from '@remix-run/web-fetch' -import { RequestWithCredentials } from './RequestWithCredentials' - -it('remains an instance of "Request"', () => { - const request = new RequestWithCredentials('https://example.com') - - expect(request).toBeInstanceOf(Request) -}) - -it('sets "credentials" to "same-origin" by default', () => { - const request = new RequestWithCredentials('https://example.com') - - expect(request.url).toBe('https://example.com/') - expect(request.method).toBe('GET') - expect(request.credentials).toBe('same-origin') -}) - -it('sets "credentials" to a custom value', () => { - const request = new RequestWithCredentials('https://example.com', { - method: 'POST', - credentials: 'omit', - }) - - expect(request.url).toBe('https://example.com/') - expect(request.method).toBe('POST') - expect(request.credentials).toBe('omit') -}) diff --git a/src/utils/RequestWithCredentials.ts b/src/utils/RequestWithCredentials.ts deleted file mode 100644 index 87388d0e..00000000 --- a/src/utils/RequestWithCredentials.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { Request } from '@remix-run/web-fetch' - -/** - * Custom wrapper around Remix's "Request" until it - * supports "credentials" correctly. - * @see https://github.com/remix-run/web-std-io/pull/21 - */ -function RequestOverride( - input: string | URL | Request, - init?: RequestInit -): Request { - const request = new Request(input, init) - - Object.defineProperty(request, 'credentials', { - value: init?.credentials || 'same-origin', - enumerable: false, - writable: false, - }) - - return request -} - -export const RequestWithCredentials = - RequestOverride as unknown as typeof Request diff --git a/test/helpers.ts b/test/helpers.ts index 59156c5b..6df1df6c 100644 --- a/test/helpers.ts +++ b/test/helpers.ts @@ -2,12 +2,11 @@ import https from 'https' import http, { ClientRequest, IncomingMessage, RequestOptions } from 'http' import nodeFetch, { Response, RequestInfo, RequestInit } from 'node-fetch' import { objectToHeaders } from 'headers-polyfill' -import type { Request } from '@remix-run/web-fetch' +import { Request } from '@remix-run/web-fetch' import { Page, ScenarioApi } from 'page-with' import { getRequestOptionsByUrl } from '../src/utils/getRequestOptionsByUrl' import { getIncomingMessageBody } from '../src/interceptors/ClientRequest/utils/getIncomingMessageBody' import { SerializedRequest } from '../src/RemoteHttpInterceptor' -import { RequestWithCredentials } from '../src/utils/RequestWithCredentials' export interface PromisifiedResponse { req: ClientRequest @@ -214,7 +213,7 @@ export async function extractRequestFromPage(page: Page): Promise { }) }) - const request = new RequestWithCredentials(requestJson.url, { + const request = new Request(requestJson.url, { method: requestJson.method, headers: objectToHeaders(requestJson.headers), credentials: requestJson.credentials, diff --git a/yarn.lock b/yarn.lock index b4fe251a..99e0421d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -916,10 +916,10 @@ "@remix-run/web-stream" "^1.0.0" web-encoding "1.1.5" -"@remix-run/web-fetch@^4.3.1": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@remix-run/web-fetch/-/web-fetch-4.3.1.tgz#afc88e133bed1a6aecb9d09b1b02127fc844da47" - integrity sha512-TOpuJo3jI7/qJAY0yTnvNJRQl4hlWAOHUHYKAbEddcLFLydv+0/WGT6OaIurJKsBFJJTjooe3FbKiP74sUIB/g== +"@remix-run/web-fetch@^4.3.2": + version "4.3.2" + resolved "https://registry.yarnpkg.com/@remix-run/web-fetch/-/web-fetch-4.3.2.tgz#193758bb7a301535540f0e3a86c743283f81cf56" + integrity sha512-aRNaaa0Fhyegv/GkJ/qsxMhXvyWGjPNgCKrStCvAvV1XXphntZI0nQO/Fl02LIQg3cGL8lDiOXOS1gzqDOlG5w== dependencies: "@remix-run/web-blob" "^3.0.4" "@remix-run/web-form-data" "^3.0.3"