From bb21059c55ccae46c5e80e23fbb709a733a7d0bd Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 22 Apr 2026 09:02:01 +0000 Subject: [PATCH 1/3] Initial plan From 1d36cb0a97d431e584e3d7af241bbb405f734f0f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 22 Apr 2026 09:07:28 +0000 Subject: [PATCH 2/3] fix: parse PUT/PATCH/DELETE request bodies in local dev action params Agent-Logs-Url: https://github.com/adobe/aio-cli-plugin-app-dev/sessions/947fbd2a-5e93-4c14-91a0-65ff85d22a09 Co-authored-by: shazron <36107+shazron@users.noreply.github.com> --- src/lib/run-dev.js | 2 +- test/lib/run-dev.test.js | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/lib/run-dev.js b/src/lib/run-dev.js index 190173b..fec3413 100644 --- a/src/lib/run-dev.js +++ b/src/lib/run-dev.js @@ -601,7 +601,7 @@ function createActionParametersFromRequest ({ req, contextItem, actionInputs = { const isFormData = req.is('application/x-www-form-urlencoded') const isRaw = isRawWebAction(contextItem) - if (params.__ow_method === 'post' && req.body !== null) { + if (['post', 'put', 'patch', 'delete'].includes(params.__ow_method) && req.body !== null) { if (isRaw) { if (isFormData) { params.__ow_body = new URLSearchParams(req.body).toString() // convert json back to query string diff --git a/test/lib/run-dev.test.js b/test/lib/run-dev.test.js index 5eb0ce7..a60248f 100644 --- a/test/lib/run-dev.test.js +++ b/test/lib/run-dev.test.js @@ -192,6 +192,8 @@ test('exports', () => { }) describe('createActionParametersFromRequest', () => { + const methodsWithBody = ['PUT', 'PATCH', 'DELETE'] + /** @private */ async function createAsyncFnCall ({ isRaw, mimeType, body, method }) { const is = jest.fn((_type) => _type === mimeType) @@ -243,6 +245,16 @@ describe('createActionParametersFromRequest', () => { expect(actionParams.__ow_body).not.toBeDefined() }) + test.each(methodsWithBody)('non-raw: %s application/json', async (method) => { + const isRaw = false + const mimeType = 'application/json' + const body = { some: 'json' } + + const actionParams = await createAsyncFnCall({ isRaw, mimeType, body, method }) + expect(actionParams).toMatchObject(body) + expect(actionParams.__ow_body).not.toBeDefined() + }) + test('non-raw: POST application/x-www-form-urlencoded', async () => { const isRaw = false const method = 'POST' @@ -295,6 +307,15 @@ describe('createActionParametersFromRequest', () => { expect(actionParams.__ow_body).toEqual(Buffer.from(JSON.stringify(body)).toString('base64')) // raw body will be base64'ed }) + test.each(methodsWithBody)('raw: %s application/json', async (method) => { + const isRaw = true + const mimeType = 'application/json' + const body = { some: 'json' } // simulate middleware processing + + const actionParams = await createAsyncFnCall({ isRaw, mimeType, body, method }) + expect(actionParams.__ow_body).toEqual(Buffer.from(JSON.stringify(body)).toString('base64')) // raw body will be base64'ed + }) + test('raw: POST application/x-www-form-urlencoded', async () => { const isRaw = true const method = 'POST' From bda4b593beb86cbec6454d37ccff8d324d91ae0d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 22 Apr 2026 09:26:27 +0000 Subject: [PATCH 3/3] fix: lowercase __ow_method before HTTP method comparison Agent-Logs-Url: https://github.com/adobe/aio-cli-plugin-app-dev/sessions/43165f12-7307-4f74-a8ff-c5760db64dfa Co-authored-by: shazron <36107+shazron@users.noreply.github.com> --- src/lib/run-dev.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/run-dev.js b/src/lib/run-dev.js index fec3413..70dbb05 100644 --- a/src/lib/run-dev.js +++ b/src/lib/run-dev.js @@ -601,7 +601,7 @@ function createActionParametersFromRequest ({ req, contextItem, actionInputs = { const isFormData = req.is('application/x-www-form-urlencoded') const isRaw = isRawWebAction(contextItem) - if (['post', 'put', 'patch', 'delete'].includes(params.__ow_method) && req.body !== null) { + if (['post', 'put', 'patch', 'delete'].includes(params.__ow_method?.toLowerCase()) && req.body !== null) { if (isRaw) { if (isFormData) { params.__ow_body = new URLSearchParams(req.body).toString() // convert json back to query string