import { deepFreeze } from '../utils/deepFreeze.js'; import { FilterLiteral } from '../utils/FilterLiteral.js'; export const specifyErrors = makeSpecifyErrorMap({ UNEXPECTED_ERROR: { errorKey: 'UNEXPECTED_ERROR', statusCode: 500, }, // Authentication AUTHENTICATION_UNEXPECTED_ERROR: { errorKey: 'AUTHENTICATION_UNEXPECTED_ERROR', statusCode: 401, }, AUTHENTICATION_TOKEN_NOT_PROVIDED: { errorKey: 'AUTHENTICATION_TOKEN_NOT_PROVIDED', statusCode: 401, }, AUTHENTICATION_INVALID_TOKEN: { errorKey: 'AUTHENTICATION_INVALID_TOKEN', statusCode: 401, }, AUTHENTICATION_MISUSED_CREDENTIALS: { errorKey: 'AUTHENTICATION_MISUSED_CREDENTIALS', statusCode: 401, }, AUTHENTICATION_NOT_MATCHING_ORGANIZATIONS_LENGTH: { errorKey: 'AUTHENTICATION_NOT_MATCHING_ORGANIZATIONS_LENGTH', statusCode: 401, }, // Authorization UNAUTHORIZED_UNEXPECTED: { errorKey: 'UNAUTHORIZED_UNEXPECTED', statusCode: 401, }, AUTHORIZATION_ORGANIZATION_NOT_FOUND: { errorKey: 'AUTHORIZATION_ORGANIZATION_NOT_FOUND', statusCode: 403, }, AUTHORIZATION_NOT_AUTHORIZED_RESOURCE: { errorKey: 'AUTHORIZATION_NOT_AUTHORIZED_RESOURCE', statusCode: 403, }, // Payment Authorization Errors AUTHORIZATION_MISSING_PAYMENT_METHOD: { errorKey: 'AUTHORIZATION_MISSING_PAYMENT_METHOD', statusCode: 403, }, AUTHORIZATION_PLAN_EXPIRED: { errorKey: 'AUTHORIZATION_PLAN_EXPIRED', statusCode: 403, }, AUTHORIZATION_TRIAL_ENDED: { errorKey: 'AUTHORIZATION_TRIAL_ENDED', statusCode: 403, }, AUTHORIZATION_UNEXPECTED: { errorKey: 'AUTHORIZATION_UNEXPECTED', statusCode: 401, }, // Limitations REPOSITORY_SOURCES_LIMIT_REACHED: { errorKey: 'REPOSITORY_SOURCES_LIMIT_REACHED', statusCode: 403, }, REPOSITORIES_LIMIT_REACHED: { errorKey: 'REPOSITORIES_LIMIT_REACHED', statusCode: 403, }, USERS_LIMIT_REACHED: { errorKey: 'USERS_LIMIT_REACHED', statusCode: 403, }, UNEXPECTED_LIMITATION_AUTHORIZATION_ERROR: { errorKey: 'UNEXPECTED_LIMITATION_AUTHORIZATION_ERROR', statusCode: 401, }, UNABLE_TO_DOWNGRADE_DUE_TO_OUTREACHED_LIMITATIONS: { errorKey: 'UNABLE_TO_DOWNGRADE_DUE_TO_OUTREACHED_LIMITATIONS', statusCode: 403, }, MISSING_DEFAULT_PAYMENT_METHOD: { errorKey: 'MISSING_DEFAULT_PAYMENT_METHOD', statusCode: 400, }, // Signup INVITATION_EXPIRED: { errorKey: 'INVITATION_EXPIRED', statusCode: 410, }, UNABLE_TO_CREATE_ACCOUNT: { errorKey: 'UNABLE_TO_CREATE_ACCOUNT', statusCode: 403, }, // User error INVALID_BODY_PARAMS: { errorKey: 'INVALID_BODY_PARAMS', statusCode: 400, }, INVALID_URL_PARAMS: { errorKey: 'INVALID_URL_PARAMS', statusCode: 400, }, // Server error RESOLVER_UNEXPECTED_ERROR: { errorKey: 'RESOLVER_UNEXPECTED_ERROR', statusCode: 500, }, // Resources RESOURCE_NOT_FOUND: { errorKey: 'RESOURCE_NOT_FOUND', statusCode: 404, }, RESOURCE_REPOSITORY_VERSION_COLLISION: { errorKey: 'RESOURCE_REPOSITORY_VERSION_COLLISION', statusCode: 400, }, // Pipe Engine PARSERS_ENGINE_UNKNOWN_ERROR: { errorKey: 'PARSERS_ENGINE_UNKNOWN_ERROR', statusCode: 500, }, PARSERS_ENGINE_VALIDATION_ERROR: { errorKey: 'PARSERS_ENGINE_VALIDATION_ERROR', statusCode: 400, }, PARSERS_ENGINE_INVALID_INITIAL_GRAPH: { errorKey: 'PARSERS_ENGINE_INVALID_INITIAL_GRAPH', statusCode: 400, }, PARSERS_ENGINE_INVALID_RULE_CONFIGURATION: { errorKey: 'PARSERS_ENGINE_INVALID_RULE_CONFIGURATION', statusCode: 400, }, PARSERS_ENGINE_NO_RULES_TO_EXECUTE: { errorKey: 'PARSERS_ENGINE_NO_RULES_TO_EXECUTE', statusCode: 200, }, PARSERS_ENGINE_RULE_EXECUTION_FAILED: { errorKey: 'PARSERS_ENGINE_RULE_EXECUTION_FAILED', statusCode: 500, }, PARSERS_ENGINE_RPC_EXECUTION_FAILED: { errorKey: 'PARSERS_ENGINE_RPC_EXECUTION_FAILED', statusCode: 500, }, PARSERS_ENGINE_RESOLVE_REPOSITORY_FAILED: { errorKey: 'PARSERS_ENGINE_RESOLVE_REPOSITORY_FAILED', statusCode: 500, }, PARSERS_ENGINE_HAS_TOO_MANY_OUTPUTS: { errorKey: 'PARSERS_ENGINE_HAS_TOO_MANY_OUTPUTS', statusCode: 500, }, PARSERS_ENGINE_INVALID_OUTPUTS: { errorKey: 'PARSERS_ENGINE_INVALID_OUTPUTS', statusCode: 500, }, PARSERS_ENGINE_RULE_DID_NOT_POPULATE_OUTPUTS: { errorKey: 'PARSERS_ENGINE_RULE_DID_NOT_POPULATE_OUTPUTS', statusCode: 200, }, PARSERS_ENGINE_RULE_DOES_NOT_USE_PARSERS: { errorKey: 'PARSERS_ENGINE_RULE_DOES_NOT_USE_PARSERS', statusCode: 200, }, PARSERS_ENGINE_INVALID_ALIAS: { errorKey: 'PARSERS_ENGINE_INVALID_ALIAS', statusCode: 400, }, PARSERS_ENGINE_PARSER_DOES_NOT_EXIST: { errorKey: 'PARSERS_ENGINE_PARSER_DOES_NOT_EXIST', statusCode: 500, }, PARSERS_ENGINE_PARSER_EXECUTION_FAILED: { errorKey: 'PARSERS_ENGINE_PARSER_EXECUTION_FAILED', statusCode: 500, }, PARSERS_ENGINE_INVALID_PARSER_INPUT: { errorKey: 'PARSERS_ENGINE_INVALID_PARSER_INPUT', statusCode: 500, }, PARSERS_ENGINE_INVALID_OUTPUT_TYPE: { errorKey: 'PARSERS_ENGINE_INVALID_OUTPUT_TYPE', statusCode: 500, }, PARSERS_ENGINE_INVALID_OPTION: { errorKey: 'PARSERS_ENGINE_INVALID_OPTION', statusCode: 500, }, PARSERS_ENGINE_INVALID_INPUT_TYPE: { errorKey: 'PARSERS_ENGINE_INVALID_INPUT_TYPE', statusCode: 500, }, PARSERS_ENGINE_PARTIAL_OUTPUT: { errorKey: 'PARSERS_ENGINE_PARTIAL_OUTPUT', statusCode: 200, }, PARSERS_ENGINE_POST_PROCESS_FAILED: { errorKey: 'PARSERS_ENGINE_POST_PROCESS_FAILED', statusCode: 500, }, // Network NETWORK_UNEXPECTED_ERROR: { errorKey: 'NETWORK_UNEXPECTED_ERROR', statusCode: 500, }, // SDK SDK_UNEXPECTED_ERROR: { errorKey: 'SDK_UNEXPECTED_ERROR', statusCode: 500, }, SDK_NETWORK_ERROR: { errorKey: 'SDK_NETWORK_ERROR', statusCode: 500, }, SDK_DATA_NOT_FETCHED: { errorKey: 'SDK_DATA_NOT_FETCHED', statusCode: 500, }, SDK_INVALID_PARSERS_ENGINE_OUTPUT: { errorKey: 'SDK_INVALID_PARSERS_ENGINE_OUTPUT', statusCode: 500, }, SDK_INVALID_TREE_PATH: { errorKey: 'SDK_INVALID_TREE_PATH', statusCode: 500, }, // Node utils NODE_UTILS_UNSUPPORTED_OUTPUT_TYPE: { errorKey: 'NODE_UTILS_UNSUPPORTED_OUTPUT_TYPE', statusCode: 500, }, NODE_UTILS_UNSUPPORTED_FILE_CONTENT_TYPE: { errorKey: 'NODE_UTILS_UNSUPPORTED_FILE_CONTENT_TYPE', statusCode: 500, }, NODE_UTILS_UNDEFINED_PARSERS_ENGINE_RULE_OUTPUT: { errorKey: 'NODE_UTILS_UNDEFINED_PARSERS_ENGINE_RULE_OUTPUT', statusCode: 500, }, CLI_MISSING_CREDENTIALS: { errorKey: 'CLI_MISSING_CREDENTIALS', statusCode: 422, }, CLI_INVALID_CONFIGURATION_FILE_EXTENSION: { errorKey: 'CLI_INVALID_CONFIGURATION_FILE_EXTENSION', statusCode: 422, }, CLI_COULD_NOT_FIND_CONFIGURATION_FILE: { errorKey: 'CLI_COULD_NOT_FIND_CONFIGURATION_FILE', statusCode: 422, }, CLI_INVALID_CONFIGURATION_FILE: { errorKey: 'CLI_INVALID_CONFIGURATION_FILE', statusCode: 422, }, CLI_FLAGS_PARSING: { errorKey: 'CLI_FLAGS_PARSING', statusCode: 422, }, }); function makeSpecifyErrorMap(errors: { [K in T]: { errorKey: K; statusCode: number }; }) { return deepFreeze(errors); } export type SpecifyErrorKey = keyof typeof specifyErrors; export type SpecifyParsersEngineErrorKey = FilterLiteral; export type SpecifyErrorDefinition = { readonly errorKey: T; readonly statusCode: number; };