mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-09-29 22:34:33 +00:00
68 lines
1.6 KiB
TypeScript
68 lines
1.6 KiB
TypeScript
import {t} from 'sentry/locale';
|
|
|
|
export enum ErrorType {
|
|
UNKNOWN = 'unknown',
|
|
INVALID_SELECTOR = 'invalid-selector',
|
|
REGEX_PARSE = 'regex-parse',
|
|
}
|
|
|
|
type Error = {
|
|
message: string;
|
|
type: ErrorType;
|
|
};
|
|
|
|
type ResponseFields = 'relayPiiConfig';
|
|
|
|
type ResponseError = {
|
|
responseJSON?: Record<ResponseFields, Array<string>>;
|
|
};
|
|
|
|
function handleError(error: ResponseError): Error {
|
|
const errorMessage = error.responseJSON?.relayPiiConfig[0];
|
|
|
|
if (!errorMessage) {
|
|
return {
|
|
type: ErrorType.UNKNOWN,
|
|
message: t('Unknown error occurred while saving data scrubbing rule'),
|
|
};
|
|
}
|
|
|
|
if (errorMessage.startsWith('invalid selector: ')) {
|
|
for (const line of errorMessage.split('\n')) {
|
|
if (line.startsWith('1 | ')) {
|
|
const selector = line.slice(3);
|
|
return {
|
|
type: ErrorType.INVALID_SELECTOR,
|
|
message: t('Invalid source value: %s', selector),
|
|
};
|
|
}
|
|
}
|
|
}
|
|
|
|
if (errorMessage.startsWith('regex parse error:')) {
|
|
for (const line of errorMessage.split('\n')) {
|
|
if (line.startsWith('error:')) {
|
|
const regex = line.slice(6).replace(/at line \d+ column \d+/, '');
|
|
return {
|
|
type: ErrorType.REGEX_PARSE,
|
|
message: t('Invalid regex: %s', regex),
|
|
};
|
|
}
|
|
}
|
|
}
|
|
|
|
if (errorMessage.startsWith('Compiled regex exceeds size limit')) {
|
|
return {
|
|
type: ErrorType.REGEX_PARSE,
|
|
message: t('Compiled regex is too large, simplify your regex'),
|
|
};
|
|
}
|
|
|
|
return {
|
|
type: ErrorType.UNKNOWN,
|
|
message: t('An unknown error occurred while saving data scrubbing rule'),
|
|
};
|
|
}
|
|
|
|
export default handleError;
|