From 5359aa88a5752b52d501cd73862da61055b02d69 Mon Sep 17 00:00:00 2001 From: Niccari Date: Wed, 15 Oct 2025 17:51:05 +0900 Subject: [PATCH 1/5] fix: throw TypeError at header.has to mimic actual runtimes --- src/__tests__/test_helpers/mockFetch.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/__tests__/test_helpers/mockFetch.js b/src/__tests__/test_helpers/mockFetch.js index 60cd15453..acb69af1a 100644 --- a/src/__tests__/test_helpers/mockFetch.js +++ b/src/__tests__/test_helpers/mockFetch.js @@ -25,7 +25,12 @@ function mockFetch(results, headers = {}, error) { }, headers: { get: header => headers[header], - has: header => headers[header] !== undefined, + has: header => { + if (header === '') { + throw new TypeError('Headers.has: "" is an invalid header name.'); + } + return headers[header] !== undefined; + }, }, body: { getReader: () => ({ From cced7d1764ae490608ae839e279d4729622566b3 Mon Sep 17 00:00:00 2001 From: Niccari Date: Wed, 15 Oct 2025 17:51:16 +0900 Subject: [PATCH 2/5] fix: RESTController - added header emptiness check --- src/RESTController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/RESTController.ts b/src/RESTController.ts index d9c225439..681d73198 100644 --- a/src/RESTController.ts +++ b/src/RESTController.ts @@ -158,7 +158,7 @@ const RESTController = { const responseHeaders = {}; const availableHeaders = response.headers.get('access-control-expose-headers') || ''; availableHeaders.split(', ').forEach((header: string) => { - if (response.headers.has(header)) { + if (header && response.headers.has(header)) { responseHeaders[header] = response.headers.get(header); } }); From 4397cb168302c3ffa69160e34bda4c00c191a552 Mon Sep 17 00:00:00 2001 From: Niccari Date: Sat, 25 Oct 2025 09:15:22 +0900 Subject: [PATCH 3/5] test: added RESTController test with missing 'access-control-expose-headers' patterns --- src/__tests__/RESTController-test.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/__tests__/RESTController-test.js b/src/__tests__/RESTController-test.js index 43ecfb45d..de8e1f38a 100644 --- a/src/__tests__/RESTController-test.js +++ b/src/__tests__/RESTController-test.js @@ -55,6 +55,20 @@ describe('RESTController', () => { expect(status).toBe(200); }); + it('resolves without error when access-control-expose-headers header is missing', async () => { + mockFetch([{ status: 200, response: { success: true } }], {}); + const { response, status } = await RESTController.ajax('POST', 'users', {}); + expect(response).toEqual({ success: true }); + expect(status).toBe(200); + }); + + it('resolves without error when access-control-expose-headers header is empty', async () => { + mockFetch([{ status: 200, response: { success: true } }], { 'access-control-expose-headers': '' }); + const { response, status } = await RESTController.ajax('POST', 'users', {}); + expect(response).toEqual({ success: true }); + expect(status).toBe(200); + }); + it('retries on 5XX errors', async () => { mockFetch([{ status: 500 }, { status: 500 }, { status: 200, response: { success: true } }]) const { response, status } = await RESTController.ajax('POST', 'users', {}); From d043035baa0115678fdef3068b270a07866ade9d Mon Sep 17 00:00:00 2001 From: Manuel <5673677+mtrezza@users.noreply.github.com> Date: Sat, 25 Oct 2025 02:52:48 +0200 Subject: [PATCH 4/5] Apply suggestion from @mtrezza Signed-off-by: Manuel <5673677+mtrezza@users.noreply.github.com> --- src/__tests__/test_helpers/mockFetch.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/__tests__/test_helpers/mockFetch.js b/src/__tests__/test_helpers/mockFetch.js index acb69af1a..269e7fdef 100644 --- a/src/__tests__/test_helpers/mockFetch.js +++ b/src/__tests__/test_helpers/mockFetch.js @@ -27,7 +27,7 @@ function mockFetch(results, headers = {}, error) { get: header => headers[header], has: header => { if (header === '') { - throw new TypeError('Headers.has: "" is an invalid header name.'); + throw new TypeError('Invalid empty header name.'); } return headers[header] !== undefined; }, From 1854232199785d76d2c853d350cd9b65e28952c5 Mon Sep 17 00:00:00 2001 From: Manuel <5673677+mtrezza@users.noreply.github.com> Date: Sat, 25 Oct 2025 04:19:05 +0200 Subject: [PATCH 5/5] Apply suggestion from @mtrezza Signed-off-by: Manuel <5673677+mtrezza@users.noreply.github.com> --- src/__tests__/test_helpers/mockFetch.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/__tests__/test_helpers/mockFetch.js b/src/__tests__/test_helpers/mockFetch.js index 269e7fdef..acb69af1a 100644 --- a/src/__tests__/test_helpers/mockFetch.js +++ b/src/__tests__/test_helpers/mockFetch.js @@ -27,7 +27,7 @@ function mockFetch(results, headers = {}, error) { get: header => headers[header], has: header => { if (header === '') { - throw new TypeError('Invalid empty header name.'); + throw new TypeError('Headers.has: "" is an invalid header name.'); } return headers[header] !== undefined; },