@syntropylog/adapters
Version:
External adapters for SyntropyLog framework
63 lines • 2.13 kB
JavaScript
/**
* Utility class for handling payload serialization/deserialization
* across different broker adapters.
*/
export class PayloadSerializer {
/**
* Serializes a BrokerMessage payload for sending to a broker.
* Handles Buffer objects by extracting their JSON content.
*/
static serializeForBroker(message) {
let payloadToSend;
if (Buffer.isBuffer(message.payload)) {
// If it's already a Buffer, decode it as JSON and re-encode
try {
const jsonString = message.payload.toString();
payloadToSend = JSON.parse(jsonString);
}
catch {
// If it's not valid JSON, send as string
payloadToSend = message.payload.toString();
}
}
else {
payloadToSend = message.payload;
}
return JSON.stringify(payloadToSend);
}
/**
* Deserializes a payload received from a broker into a Buffer
* that the SyntropyLog framework expects.
*/
static deserializeFromBroker(brokerPayload) {
if (!brokerPayload) {
return Buffer.alloc(0);
}
try {
// Convert to string if it's a Buffer
const jsonString = Buffer.isBuffer(brokerPayload)
? brokerPayload.toString()
: brokerPayload;
// Parse the JSON
const parsedPayload = JSON.parse(jsonString);
// Return as Buffer with JSON stringified content
return Buffer.from(JSON.stringify(parsedPayload));
}
catch {
// If it's not valid JSON, return as Buffer
return Buffer.isBuffer(brokerPayload)
? brokerPayload
: Buffer.from(brokerPayload);
}
}
/**
* Creates a BrokerMessage with properly deserialized payload
*/
static createBrokerMessage(brokerPayload, headers) {
return {
payload: this.deserializeFromBroker(brokerPayload),
headers: headers || {},
};
}
}
//# sourceMappingURL=PayloadSerializer.js.map