Skip to content
This repository has been archived by the owner on May 26, 2023. It is now read-only.

Commit

Permalink
Markers encoding (#446)
Browse files Browse the repository at this point in the history
* Codec support for markers (side effects, local activities).
  • Loading branch information
robholland committed Mar 29, 2022
1 parent 550b487 commit 2b43e66
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 27 deletions.
58 changes: 32 additions & 26 deletions client/features/data-conversion.js
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
2 changes: 1 addition & 1 deletion server/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,4 @@ routing:
# codec:
# Codec Server Endpoint
# endpoint: https://codec.myorg.com
# pass_access_token: false
# pass_access_token: false

0 comments on commit 2b43e66

Please sign in to comment.