@eldev/business-central-api
Version:
A Dynamics 365 Business Central client for TypeScript
85 lines • 3.04 kB
JavaScript
const errorCategories = [
"AUTHENTICATION",
"AUTHORIZATION",
"BAD_REQUEST",
"NOT_FOUND",
"CONFLICT",
"SCHEMA_MISMATCH",
"NETWORK_ERROR",
"UNEXPECTED_RESPONSE",
"SERVER_ERROR",
"UNKNOWN",
];
const retryStrategies = [
"NO_RETRY",
"EXPONENTIAL_BACKOFF",
"REFRESH_TOKEN",
];
const errorCodeMappings = new Map([
["BadRequest_InvalidToken", "AUTHENTICATION"],
["Unauthorized", "AUTHENTICATION"],
["Authentication_TokenError", "AUTHENTICATION"],
["Forbidden", "AUTHORIZATION"],
["Authorization_InsufficientPermissions", "AUTHORIZATION"],
["BadRequest", "BAD_REQUEST"],
["BadRequest_InvalidRequestUrl", "BAD_REQUEST"],
["BadRequest_NotFound", "BAD_REQUEST"],
["BadRequest_MethodNotAllowed", "BAD_REQUEST"],
["BadRequest_MethodNotImplemented", "BAD_REQUEST"],
["BadRequest_RequiredParamNotProvided", "BAD_REQUEST"],
["BadRequest_InvalidOperation", "BAD_REQUEST"],
["SkipTokenIsNoLongerValid", "BAD_REQUEST"],
["Application_FieldValidationException", "BAD_REQUEST"],
["Application_StringExceededLength", "BAD_REQUEST"],
["Application_InvalidGUID", "BAD_REQUEST"],
["Application_FilterErrorException", "BAD_REQUEST"],
["BadRequest_ResourceNotFound", "NOT_FOUND"],
["Internal_RecordNotFound", "NOT_FOUND"],
["Internal_CompanyNotFound", "NOT_FOUND"],
["Internal_DataNotFoundFilter", "NOT_FOUND"],
["Request_EntityChanged", "CONFLICT"],
["Internal_EntityWithSameKeyExists", "CONFLICT"],
["Internal_ServerError", "SERVER_ERROR"],
["Internal_TenantUnavailable", "SERVER_ERROR"],
["Internal_DatabaseConnection", "SERVER_ERROR"],
["Application_DialogException", "BAD_REQUEST"],
["Application_EvaluateException", "BAD_REQUEST"],
["Application_CallbackNotAllowed", "BAD_REQUEST"],
]);
const prefixDefaults = new Map([
["BadRequest_", "BAD_REQUEST"],
["Request_", "CONFLICT"],
["Internal_", "SERVER_ERROR"],
["Application_", "BAD_REQUEST"],
["Authentication_", "AUTHENTICATION"],
["Authorization_", "AUTHORIZATION"],
]);
const categoryToRetryStrategy = new Map([
["AUTHENTICATION", "REFRESH_TOKEN"],
["AUTHORIZATION", "NO_RETRY"],
["BAD_REQUEST", "NO_RETRY"],
["NOT_FOUND", "NO_RETRY"],
["CONFLICT", "NO_RETRY"],
["SCHEMA_MISMATCH", "NO_RETRY"],
["NETWORK_ERROR", "EXPONENTIAL_BACKOFF"],
["UNEXPECTED_RESPONSE", "NO_RETRY"],
["SERVER_ERROR", "EXPONENTIAL_BACKOFF"],
["UNKNOWN", "NO_RETRY"],
]);
export function categorizeError(code) {
let category = errorCodeMappings.get(code);
if (!category) {
for (const [prefix, defaultCategory] of prefixDefaults) {
if (code.startsWith(prefix)) {
category = defaultCategory;
break;
}
}
}
if (!category) {
category = "UNKNOWN";
}
const retryStrategy = categoryToRetryStrategy.get(category) ?? "NO_RETRY";
return { category, retryStrategy };
}
//# sourceMappingURL=categorize.js.map