treblle
Version:
Treblle Javascript SDK
95 lines (92 loc) • 3 kB
JavaScript
const { sendPayload } = require("./send-payload");
const { generateFieldsToMaskMap } = require("../maskFields");
const serviceWorkerTreblle = function ({
sdkToken,
apiKey,
additionalFieldsToMask = [],
debug = false,
}) {
const fieldsToMaskMap = generateFieldsToMaskMap(additionalFieldsToMask);
return (fetch) => {
return (event) => {
let requestStartTime;
let respondWith;
let requestClone;
try {
requestStartTime = Date.now();
requestClone = event.request.clone();
respondWith = event.respondWith.bind(event);
} catch (err) {
console.error("Error in Treblle middleware while cloning request", err);
}
event.respondWith = function (responsePromise) {
respondWith(
(async function () {
let response;
const requestEndTime = Date.now();
try {
response = await responsePromise;
try {
await sendPayload(requestClone, response.clone(), {
sdkToken,
apiKey,
fieldsToMaskMap,
debug,
requestExecutionTime: requestEndTime - requestStartTime,
error: null,
});
} catch (err) {
// Just catch and log Treblle error - we do not want to crash app on Treblle's failure
console.error(
"Error occurred when sending payload to Treblle, have you set appropriate headers for your content type?",
err
);
}
} catch (err) {
try {
await sendPayload(requestClone, null, {
sdkToken,
apiKey,
fieldsToMaskMap,
debug,
requestExecutionTime: requestEndTime - requestStartTime,
error: err,
});
} catch (err) {
// Just catch and log Treblle error - we do not want to crash app on Treblle's failure
console.error(
"Error occurred when sending payload to Treblle.",
err
);
}
throw err;
}
return response;
})()
);
};
let error;
try {
fetch(event);
} catch (err) {
const requestEndTime = Date.now();
error = err;
sendPayload(requestClone, null, {
sdkToken,
apiKey,
fieldsToMaskMap,
debug,
requestExecutionTime: requestEndTime - requestStartTime,
error,
}).catch((err) => {
// Just catch and log Treblle error - we do not want to crash app on Treblle's failure
console.error("Error occurred when sending payload to Treblle", err);
});
throw error;
}
};
};
};
module.exports = {
serviceWorkerTreblle,
};