saleor-dashboard/src/services/errorTracking/trackerFactory.ts

53 lines
1.2 KiB
TypeScript
Raw Normal View History

import { TrackerMethods, TrackerPermission, UserData } from "./types";
type ErrorTrackerFactory = (
ExtensionFactory: TrackerMethods,
permissions?: TrackerPermission[],
) => TrackerMethods;
export const ErrorTrackerFactory: ErrorTrackerFactory = (
extension,
permissions = [],
) => {
let ENABLED = false;
const safelyInvoke = <T extends () => any>(
fn: T,
permission?: TrackerPermission,
): ReturnType<T> => {
const hasPermission =
permission !== undefined ? permissions.includes(permission) : true;
if (ENABLED && hasPermission) {
try {
return fn();
} catch (e) {
throw new Error(`Tracking Extension Error: ${e}`);
}
}
};
const init: TrackerMethods["init"] = () => {
if (!ENABLED) {
ENABLED = extension.init();
}
return ENABLED;
};
const setUserData: TrackerMethods["setUserData"] = (userData: UserData) =>
safelyInvoke(
() => extension.setUserData(userData),
TrackerPermission.USER_DATA,
);
const captureException: TrackerMethods["captureException"] = (e: Error) =>
safelyInvoke(() => extension.captureException(e));
return {
captureException,
init,
setUserData,
};
};