mirror of
https://github.com/public-transport/db-vendo-client.git
synced 2025-02-22 22:59:35 +02:00
302 lines
6 KiB
JavaScript
302 lines
6 KiB
JavaScript
const ACCESS_DENIED = 'ACCESS_DENIED';
|
|
const INVALID_REQUEST = 'INVALID_REQUEST';
|
|
const NOT_FOUND = 'NOT_FOUND';
|
|
const SERVER_ERROR = 'SERVER_ERROR';
|
|
|
|
class HafasError extends Error {
|
|
constructor (cleanMessage, hafasCode, props) {
|
|
const msg = hafasCode
|
|
? hafasCode + ': ' + cleanMessage
|
|
: cleanMessage;
|
|
super(msg);
|
|
|
|
// generic props
|
|
this.isHafasError = true;
|
|
|
|
// error-specific props
|
|
this.code = null;
|
|
// By default, we take the blame, unless we know for sure.
|
|
this.isCausedByServer = false;
|
|
this.hafasCode = hafasCode;
|
|
Object.assign(this, props);
|
|
|
|
return this;
|
|
}
|
|
}
|
|
|
|
class HafasAccessDeniedError extends HafasError {
|
|
constructor (cleanMessage, hafasCode, props) {
|
|
super(cleanMessage, hafasCode, props);
|
|
this.code = ACCESS_DENIED;
|
|
return this;
|
|
}
|
|
}
|
|
|
|
class HafasInvalidRequestError extends HafasError {
|
|
constructor (cleanMessage, hafasCode, props) {
|
|
super(cleanMessage, hafasCode, props);
|
|
this.code = INVALID_REQUEST;
|
|
return this;
|
|
}
|
|
}
|
|
|
|
class HafasNotFoundError extends HafasError {
|
|
constructor (cleanMessage, hafasCode, props) {
|
|
super(cleanMessage, hafasCode, props);
|
|
this.code = NOT_FOUND;
|
|
return this;
|
|
}
|
|
}
|
|
|
|
class HafasServerError extends HafasError {
|
|
constructor (cleanMessage, hafasCode, props) {
|
|
super(cleanMessage, hafasCode, props);
|
|
this.code = SERVER_ERROR;
|
|
this.isCausedByServer = true;
|
|
return this;
|
|
}
|
|
}
|
|
|
|
const byErrorCode = Object.assign(Object.create(null), {
|
|
H_UNKNOWN: {
|
|
Error: HafasError,
|
|
message: 'unknown internal error',
|
|
props: {
|
|
shouldRetry: true,
|
|
},
|
|
},
|
|
AUTH: {
|
|
Error: HafasAccessDeniedError,
|
|
message: 'invalid or missing authentication data',
|
|
props: {
|
|
},
|
|
},
|
|
METHOD_NA: {
|
|
Error: HafasServerError,
|
|
message: 'method is not enabled',
|
|
props: {
|
|
},
|
|
},
|
|
R0001: {
|
|
Error: HafasInvalidRequestError,
|
|
message: 'unknown method',
|
|
props: {
|
|
},
|
|
},
|
|
R0002: {
|
|
Error: HafasInvalidRequestError,
|
|
message: 'invalid or missing request parameters',
|
|
props: {
|
|
},
|
|
},
|
|
R0007: {
|
|
Error: HafasServerError,
|
|
message: 'internal communication error',
|
|
props: {
|
|
shouldRetry: true,
|
|
},
|
|
},
|
|
R5000: {
|
|
Error: HafasAccessDeniedError,
|
|
message: 'access denied',
|
|
props: {
|
|
},
|
|
},
|
|
S1: {
|
|
Error: HafasServerError,
|
|
message: 'journeys search: a connection to the backend server couldn\'t be established',
|
|
props: {
|
|
shouldRetry: true,
|
|
},
|
|
},
|
|
PROBLEMS: {
|
|
Error: HafasServerError,
|
|
message: 'an unknown problem occured during search',
|
|
props: {
|
|
shouldRetry: true,
|
|
},
|
|
},
|
|
LOCATION: {
|
|
Error: HafasNotFoundError,
|
|
message: 'location/stop not found',
|
|
props: {
|
|
},
|
|
},
|
|
NO_MATCH: {
|
|
Error: HafasNotFoundError,
|
|
message: 'no results found',
|
|
props: {
|
|
},
|
|
},
|
|
PARAMETER: {
|
|
Error: HafasInvalidRequestError,
|
|
message: 'invalid parameter',
|
|
props: {
|
|
},
|
|
},
|
|
H390: {
|
|
Error: HafasInvalidRequestError,
|
|
message: 'journeys search: departure/arrival station replaced',
|
|
props: {
|
|
},
|
|
},
|
|
H410: {
|
|
// todo: or is it a client error?
|
|
Error: HafasServerError,
|
|
message: 'journeys search: incomplete response due to timetable change',
|
|
props: {
|
|
},
|
|
},
|
|
H455: {
|
|
Error: HafasInvalidRequestError,
|
|
message: 'journeys search: prolonged stop',
|
|
props: {
|
|
},
|
|
},
|
|
H460: {
|
|
Error: HafasInvalidRequestError,
|
|
message: 'journeys search: stop(s) passed multiple times',
|
|
props: {
|
|
},
|
|
},
|
|
H500: {
|
|
Error: HafasInvalidRequestError,
|
|
message: 'journeys search: too many trains, connection is not complete',
|
|
props: {
|
|
},
|
|
},
|
|
H890: {
|
|
Error: HafasNotFoundError,
|
|
message: 'journeys search unsuccessful',
|
|
props: {
|
|
shouldRetry: true,
|
|
},
|
|
},
|
|
H891: {
|
|
Error: HafasNotFoundError,
|
|
message: 'journeys search: no route found, try with an intermediate stations',
|
|
props: {
|
|
},
|
|
},
|
|
H892: {
|
|
Error: HafasInvalidRequestError,
|
|
message: 'journeys search: query too complex, try less intermediate stations',
|
|
props: {
|
|
},
|
|
},
|
|
H895: {
|
|
Error: HafasInvalidRequestError,
|
|
message: 'journeys search: departure & arrival are too near',
|
|
props: {
|
|
},
|
|
},
|
|
H899: {
|
|
// todo: or is it a client error?
|
|
Error: HafasServerError,
|
|
message: 'journeys search unsuccessful or incomplete due to timetable change',
|
|
props: {
|
|
},
|
|
},
|
|
H900: {
|
|
// todo: or is it a client error?
|
|
Error: HafasServerError,
|
|
message: 'journeys search unsuccessful or incomplete due to timetable change',
|
|
props: {
|
|
},
|
|
},
|
|
H9220: {
|
|
Error: HafasNotFoundError,
|
|
message: 'journeys search: no stations found close to the address',
|
|
props: {
|
|
},
|
|
},
|
|
H9230: {
|
|
Error: HafasServerError,
|
|
message: 'journeys search: an internal error occured',
|
|
props: {
|
|
shouldRetry: true,
|
|
},
|
|
},
|
|
H9240: {
|
|
Error: HafasNotFoundError,
|
|
message: 'journeys search unsuccessful',
|
|
props: {
|
|
shouldRetry: true,
|
|
},
|
|
},
|
|
H9250: {
|
|
Error: HafasServerError,
|
|
message: 'journeys search: leg query interrupted',
|
|
props: {
|
|
shouldRetry: true,
|
|
},
|
|
},
|
|
H9260: {
|
|
Error: HafasInvalidRequestError,
|
|
message: 'journeys search: unknown departure station',
|
|
props: {
|
|
},
|
|
},
|
|
H9280: {
|
|
Error: HafasInvalidRequestError,
|
|
message: 'journeys search: unknown intermediate station',
|
|
props: {
|
|
},
|
|
},
|
|
H9300: {
|
|
Error: HafasInvalidRequestError,
|
|
message: 'journeys search: unknown arrival station',
|
|
props: {
|
|
},
|
|
},
|
|
H9320: {
|
|
Error: HafasInvalidRequestError,
|
|
message: 'journeys search: the input is incorrect or incomplete',
|
|
props: {
|
|
},
|
|
},
|
|
H9360: {
|
|
Error: HafasInvalidRequestError,
|
|
message: 'journeys search: invalid date/time',
|
|
props: {
|
|
},
|
|
},
|
|
H9380: {
|
|
Error: HafasInvalidRequestError,
|
|
message: 'journeys search: departure/arrival/intermediate station defined more than once',
|
|
props: {
|
|
},
|
|
},
|
|
SQ001: {
|
|
Error: HafasServerError,
|
|
message: 'no departures/arrivals data available',
|
|
props: {
|
|
},
|
|
},
|
|
SQ005: {
|
|
Error: HafasNotFoundError,
|
|
message: 'no trips found',
|
|
props: {
|
|
},
|
|
},
|
|
TI001: {
|
|
Error: HafasServerError,
|
|
message: 'no trip info available',
|
|
props: {
|
|
shouldRetry: true,
|
|
},
|
|
},
|
|
});
|
|
|
|
export {
|
|
ACCESS_DENIED,
|
|
INVALID_REQUEST,
|
|
NOT_FOUND,
|
|
SERVER_ERROR,
|
|
HafasError,
|
|
HafasAccessDeniedError,
|
|
HafasInvalidRequestError,
|
|
HafasNotFoundError,
|
|
HafasServerError,
|
|
byErrorCode,
|
|
};
|