From 2b43e662a727e769ab22d1b95e2e894b52a54bbf Mon Sep 17 00:00:00 2001 From: Rob Holland Date: Tue, 29 Mar 2022 08:32:29 +0100 Subject: [PATCH] Markers encoding (#446) * Codec support for markers (side effects, local activities). --- client/features/data-conversion.js | 58 ++++++++++++++++-------------- server/config.yml | 2 +- 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/client/features/data-conversion.js b/client/features/data-conversion.js index f7357ed1..12a69e4c 100644 --- a/client/features/data-conversion.js +++ b/client/features/data-conversion.js @@ -12,40 +12,46 @@ export const convertEventPayloadsWithCodec = async (namespace, events, endpointT const endpoint = endpointTemplate.replaceAll('{namespace}', namespace); events.forEach(event => { - let payloadsWrapper; + let payloadsPBs = []; if (event.details.input) { - payloadsWrapper = event.details.input; - } else if (event.details.result) { - payloadsWrapper = event.details.result; + payloadsPBs.push(event.details.input); } - if (!payloadsWrapper) { - return; + if (event.details.result) { + payloadsPBs.push(event.details.result); } - requests.push( - fetch(`${endpoint}/decode`, { method: 'POST', headers: headers, body: JSON.stringify(payloadsWrapper) }) - .then((response) => response.json()) - .then((decodedPayloadsWrapper) => decodedPayloadsWrapper.payloads) - .then((decodedPayloads) => { - decodedPayloads.forEach((payload, i) => { - let data = window.atob(payload.data); - try { - decodedPayloads[i] = JSON.parse(data); - } catch { - decodedPayloads[i] = data; - } - }); + if (event.details.details) { + Object.values(event.details.details).forEach(field => { + payloadsPBs.push(field) + }) + } - payloadsWrapper.payloads = decodedPayloads - }) - .catch(() => { - payloadsWrapper.payloads.forEach((payload) => { - payload.error = "Could not decode payload, remote decoder returned an error." + payloadsPBs.forEach(payloadsPB => { + requests.push( + fetch(`${endpoint}/decode`, { method: 'POST', headers: headers, body: JSON.stringify(payloadsPB) }) + .then((response) => response.json()) + .then((decodedPayloadsPB) => decodedPayloadsPB.payloads) + .then((decodedPayloads) => { + decodedPayloads.forEach((payload, i) => { + let data = window.atob(payload.data); + try { + decodedPayloads[i] = JSON.parse(data); + } catch { + decodedPayloads[i] = data; + } + }); + + payloadsPB.payloads = decodedPayloads + }) + .catch(() => { + payloadsPB.payloads.forEach((payload) => { + payload.error = "Could not decode payload, remote decoder returned an error." + }) }) - }) - ) + ); + }) }) // We catch and handle errors above so no error handling needed here. diff --git a/server/config.yml b/server/config.yml index 5a452daf..42f6bf19 100644 --- a/server/config.yml +++ b/server/config.yml @@ -20,4 +20,4 @@ routing: # codec: # Codec Server Endpoint # endpoint: https://codec.myorg.com - # pass_access_token: false \ No newline at end of file + # pass_access_token: false