/* * Copyright (C) 2023 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). * https://openapi-generator.tech * Do not edit the class manually. */ import { ExpediaGroupApiError, Serializer } from '../../core' import { AccountTakeoverBadRequestError } from '../AccountTakeoverBadRequestError' import { AccountTakeoverUnauthorizedError } from '../AccountTakeoverUnauthorizedError' import { AccountUpdateNotFoundError } from '../AccountUpdateNotFoundError' import { BadGatewayError } from '../BadGatewayError' import { BadRequestError } from '../BadRequestError' import { ForbiddenError } from '../ForbiddenError' import { GatewayTimeoutError } from '../GatewayTimeoutError' import { InternalServerError } from '../InternalServerError' import { NotFoundError } from '../NotFoundError' import { OrderPurchaseUpdateNotFoundError } from '../OrderPurchaseUpdateNotFoundError' import { RetryableOrderPurchaseScreenFailure } from '../RetryableOrderPurchaseScreenFailure' import { RetryableOrderPurchaseUpdateFailure } from '../RetryableOrderPurchaseUpdateFailure' import { ServiceUnavailableError } from '../ServiceUnavailableError' import { TooManyRequestsError } from '../TooManyRequestsError' import { UnauthorizedError } from '../UnauthorizedError' interface ErrorResponse { response: { status: number data: string } } class HttpStatusCodeRange { constructor( private readonly statusCode: string, readonly getFunction: (error: ErrorResponse) => ExpediaGroupApiError, ) {} matches = (statusCode?: string): boolean => statusCode !== undefined && (this.isRangeDefinition() ? this.statusCode[0] === statusCode[0] : this.statusCode === statusCode) isRangeDefinition = (): boolean => /^[1-5]XX$/g.test(this.statusCode) static compareFn = ( a: HttpStatusCodeRange, b: HttpStatusCodeRange, ): number => (a.isRangeDefinition() ? 1 : 0) - (b.isRangeDefinition() ? 1 : 0) } export class ExpediaGroupApiAccountTakeoverBadRequestError extends ExpediaGroupApiError { constructor( readonly statusCode: number, readonly errorObject: AccountTakeoverBadRequestError, ) { super(statusCode, errorObject) } } export class ExpediaGroupApiAccountTakeoverUnauthorizedError extends ExpediaGroupApiError { constructor( readonly statusCode: number, readonly errorObject: AccountTakeoverUnauthorizedError, ) { super(statusCode, errorObject) } } export class ExpediaGroupApiForbiddenError extends ExpediaGroupApiError { constructor( readonly statusCode: number, readonly errorObject: ForbiddenError, ) { super(statusCode, errorObject) } } export class ExpediaGroupApiAccountUpdateNotFoundError extends ExpediaGroupApiError { constructor( readonly statusCode: number, readonly errorObject: AccountUpdateNotFoundError, ) { super(statusCode, errorObject) } } export class ExpediaGroupApiTooManyRequestsError extends ExpediaGroupApiError { constructor( readonly statusCode: number, readonly errorObject: TooManyRequestsError, ) { super(statusCode, errorObject) } } export class ExpediaGroupApiInternalServerError extends ExpediaGroupApiError { constructor( readonly statusCode: number, readonly errorObject: InternalServerError, ) { super(statusCode, errorObject) } } export class ExpediaGroupApiBadGatewayError extends ExpediaGroupApiError { constructor( readonly statusCode: number, readonly errorObject: BadGatewayError, ) { super(statusCode, errorObject) } } export class ExpediaGroupApiServiceUnavailableError extends ExpediaGroupApiError { constructor( readonly statusCode: number, readonly errorObject: ServiceUnavailableError, ) { super(statusCode, errorObject) } } export class ExpediaGroupApiGatewayTimeoutError extends ExpediaGroupApiError { constructor( readonly statusCode: number, readonly errorObject: GatewayTimeoutError, ) { super(statusCode, errorObject) } } export class ExpediaGroupApiBadRequestError extends ExpediaGroupApiError { constructor( readonly statusCode: number, readonly errorObject: BadRequestError, ) { super(statusCode, errorObject) } } export class ExpediaGroupApiUnauthorizedError extends ExpediaGroupApiError { constructor( readonly statusCode: number, readonly errorObject: UnauthorizedError, ) { super(statusCode, errorObject) } } export class ExpediaGroupApiOrderPurchaseUpdateNotFoundError extends ExpediaGroupApiError { constructor( readonly statusCode: number, readonly errorObject: OrderPurchaseUpdateNotFoundError, ) { super(statusCode, errorObject) } } export class ExpediaGroupApiRetryableOrderPurchaseUpdateFailure extends ExpediaGroupApiError { constructor( readonly statusCode: number, readonly errorObject: RetryableOrderPurchaseUpdateFailure, ) { super(statusCode, errorObject) } } export class ExpediaGroupApiNotFoundError extends ExpediaGroupApiError { constructor( readonly statusCode: number, readonly errorObject: NotFoundError, ) { super(statusCode, errorObject) } } export class ExpediaGroupApiRetryableOrderPurchaseScreenFailure extends ExpediaGroupApiError { constructor( readonly statusCode: number, readonly errorObject: RetryableOrderPurchaseScreenFailure, ) { super(statusCode, errorObject) } } export class ExpediaGroupDefaultApiError extends ExpediaGroupApiError { constructor( readonly statusCode: number, readonly errorObject: any, ) { super(statusCode, errorObject) } } class DefaultHttpStatusCodeRange extends HttpStatusCodeRange { constructor() { super( 'DefaultHttpStatusCodeRange', (error: ErrorResponse) => new ExpediaGroupDefaultApiError( error.response.status, error.response.data, ), ) } override matches = (_?: string): boolean => true override isRangeDefinition = (): boolean => true } const httpStatusCodeRanges: Map = new Map< string, HttpStatusCodeRange[] >([ [ 'notifyWithAccountUpdate', [ new HttpStatusCodeRange( '400', (error: ErrorResponse) => new ExpediaGroupApiAccountTakeoverBadRequestError( error.response.status, Serializer.deserializeObject( error.response.data, AccountTakeoverBadRequestError, ) as AccountTakeoverBadRequestError, ), ), new HttpStatusCodeRange( '401', (error: ErrorResponse) => new ExpediaGroupApiAccountTakeoverUnauthorizedError( error.response.status, Serializer.deserializeObject( error.response.data, AccountTakeoverUnauthorizedError, ) as AccountTakeoverUnauthorizedError, ), ), new HttpStatusCodeRange( '403', (error: ErrorResponse) => new ExpediaGroupApiForbiddenError( error.response.status, Serializer.deserializeObject( error.response.data, ForbiddenError, ) as ForbiddenError, ), ), new HttpStatusCodeRange( '404', (error: ErrorResponse) => new ExpediaGroupApiAccountUpdateNotFoundError( error.response.status, Serializer.deserializeObject( error.response.data, AccountUpdateNotFoundError, ) as AccountUpdateNotFoundError, ), ), new HttpStatusCodeRange( '429', (error: ErrorResponse) => new ExpediaGroupApiTooManyRequestsError( error.response.status, Serializer.deserializeObject( error.response.data, TooManyRequestsError, ) as TooManyRequestsError, ), ), new HttpStatusCodeRange( '500', (error: ErrorResponse) => new ExpediaGroupApiInternalServerError( error.response.status, Serializer.deserializeObject( error.response.data, InternalServerError, ) as InternalServerError, ), ), new HttpStatusCodeRange( '502', (error: ErrorResponse) => new ExpediaGroupApiBadGatewayError( error.response.status, Serializer.deserializeObject( error.response.data, BadGatewayError, ) as BadGatewayError, ), ), new HttpStatusCodeRange( '503', (error: ErrorResponse) => new ExpediaGroupApiServiceUnavailableError( error.response.status, Serializer.deserializeObject( error.response.data, ServiceUnavailableError, ) as ServiceUnavailableError, ), ), new HttpStatusCodeRange( '504', (error: ErrorResponse) => new ExpediaGroupApiGatewayTimeoutError( error.response.status, Serializer.deserializeObject( error.response.data, GatewayTimeoutError, ) as GatewayTimeoutError, ), ), new DefaultHttpStatusCodeRange(), ], ], [ 'notifyWithOrderUpdate', [ new HttpStatusCodeRange( '400', (error: ErrorResponse) => new ExpediaGroupApiBadRequestError( error.response.status, Serializer.deserializeObject( error.response.data, BadRequestError, ) as BadRequestError, ), ), new HttpStatusCodeRange( '401', (error: ErrorResponse) => new ExpediaGroupApiUnauthorizedError( error.response.status, Serializer.deserializeObject( error.response.data, UnauthorizedError, ) as UnauthorizedError, ), ), new HttpStatusCodeRange( '403', (error: ErrorResponse) => new ExpediaGroupApiForbiddenError( error.response.status, Serializer.deserializeObject( error.response.data, ForbiddenError, ) as ForbiddenError, ), ), new HttpStatusCodeRange( '404', (error: ErrorResponse) => new ExpediaGroupApiOrderPurchaseUpdateNotFoundError( error.response.status, Serializer.deserializeObject( error.response.data, OrderPurchaseUpdateNotFoundError, ) as OrderPurchaseUpdateNotFoundError, ), ), new HttpStatusCodeRange( '429', (error: ErrorResponse) => new ExpediaGroupApiTooManyRequestsError( error.response.status, Serializer.deserializeObject( error.response.data, TooManyRequestsError, ) as TooManyRequestsError, ), ), new HttpStatusCodeRange( '500', (error: ErrorResponse) => new ExpediaGroupApiInternalServerError( error.response.status, Serializer.deserializeObject( error.response.data, InternalServerError, ) as InternalServerError, ), ), new HttpStatusCodeRange( '502', (error: ErrorResponse) => new ExpediaGroupApiBadGatewayError( error.response.status, Serializer.deserializeObject( error.response.data, BadGatewayError, ) as BadGatewayError, ), ), new HttpStatusCodeRange( '503', (error: ErrorResponse) => new ExpediaGroupApiRetryableOrderPurchaseUpdateFailure( error.response.status, Serializer.deserializeObject( error.response.data, RetryableOrderPurchaseUpdateFailure, ) as RetryableOrderPurchaseUpdateFailure, ), ), new HttpStatusCodeRange( '504', (error: ErrorResponse) => new ExpediaGroupApiGatewayTimeoutError( error.response.status, Serializer.deserializeObject( error.response.data, GatewayTimeoutError, ) as GatewayTimeoutError, ), ), new DefaultHttpStatusCodeRange(), ], ], [ 'screenAccount', [ new HttpStatusCodeRange( '400', (error: ErrorResponse) => new ExpediaGroupApiAccountTakeoverBadRequestError( error.response.status, Serializer.deserializeObject( error.response.data, AccountTakeoverBadRequestError, ) as AccountTakeoverBadRequestError, ), ), new HttpStatusCodeRange( '401', (error: ErrorResponse) => new ExpediaGroupApiAccountTakeoverUnauthorizedError( error.response.status, Serializer.deserializeObject( error.response.data, AccountTakeoverUnauthorizedError, ) as AccountTakeoverUnauthorizedError, ), ), new HttpStatusCodeRange( '403', (error: ErrorResponse) => new ExpediaGroupApiForbiddenError( error.response.status, Serializer.deserializeObject( error.response.data, ForbiddenError, ) as ForbiddenError, ), ), new HttpStatusCodeRange( '404', (error: ErrorResponse) => new ExpediaGroupApiNotFoundError( error.response.status, Serializer.deserializeObject( error.response.data, NotFoundError, ) as NotFoundError, ), ), new HttpStatusCodeRange( '429', (error: ErrorResponse) => new ExpediaGroupApiTooManyRequestsError( error.response.status, Serializer.deserializeObject( error.response.data, TooManyRequestsError, ) as TooManyRequestsError, ), ), new HttpStatusCodeRange( '500', (error: ErrorResponse) => new ExpediaGroupApiInternalServerError( error.response.status, Serializer.deserializeObject( error.response.data, InternalServerError, ) as InternalServerError, ), ), new HttpStatusCodeRange( '502', (error: ErrorResponse) => new ExpediaGroupApiBadGatewayError( error.response.status, Serializer.deserializeObject( error.response.data, BadGatewayError, ) as BadGatewayError, ), ), new HttpStatusCodeRange( '503', (error: ErrorResponse) => new ExpediaGroupApiServiceUnavailableError( error.response.status, Serializer.deserializeObject( error.response.data, ServiceUnavailableError, ) as ServiceUnavailableError, ), ), new HttpStatusCodeRange( '504', (error: ErrorResponse) => new ExpediaGroupApiGatewayTimeoutError( error.response.status, Serializer.deserializeObject( error.response.data, GatewayTimeoutError, ) as GatewayTimeoutError, ), ), new DefaultHttpStatusCodeRange(), ], ], [ 'screenOrder', [ new HttpStatusCodeRange( '400', (error: ErrorResponse) => new ExpediaGroupApiBadRequestError( error.response.status, Serializer.deserializeObject( error.response.data, BadRequestError, ) as BadRequestError, ), ), new HttpStatusCodeRange( '401', (error: ErrorResponse) => new ExpediaGroupApiUnauthorizedError( error.response.status, Serializer.deserializeObject( error.response.data, UnauthorizedError, ) as UnauthorizedError, ), ), new HttpStatusCodeRange( '403', (error: ErrorResponse) => new ExpediaGroupApiForbiddenError( error.response.status, Serializer.deserializeObject( error.response.data, ForbiddenError, ) as ForbiddenError, ), ), new HttpStatusCodeRange( '404', (error: ErrorResponse) => new ExpediaGroupApiNotFoundError( error.response.status, Serializer.deserializeObject( error.response.data, NotFoundError, ) as NotFoundError, ), ), new HttpStatusCodeRange( '429', (error: ErrorResponse) => new ExpediaGroupApiTooManyRequestsError( error.response.status, Serializer.deserializeObject( error.response.data, TooManyRequestsError, ) as TooManyRequestsError, ), ), new HttpStatusCodeRange( '500', (error: ErrorResponse) => new ExpediaGroupApiInternalServerError( error.response.status, Serializer.deserializeObject( error.response.data, InternalServerError, ) as InternalServerError, ), ), new HttpStatusCodeRange( '502', (error: ErrorResponse) => new ExpediaGroupApiBadGatewayError( error.response.status, Serializer.deserializeObject( error.response.data, BadGatewayError, ) as BadGatewayError, ), ), new HttpStatusCodeRange( '503', (error: ErrorResponse) => new ExpediaGroupApiRetryableOrderPurchaseScreenFailure( error.response.status, Serializer.deserializeObject( error.response.data, RetryableOrderPurchaseScreenFailure, ) as RetryableOrderPurchaseScreenFailure, ), ), new HttpStatusCodeRange( '504', (error: ErrorResponse) => new ExpediaGroupApiGatewayTimeoutError( error.response.status, Serializer.deserializeObject( error.response.data, GatewayTimeoutError, ) as GatewayTimeoutError, ), ), new DefaultHttpStatusCodeRange(), ], ], ]) const process = ( error: ErrorResponse, operationId: string, ): ExpediaGroupApiError => (httpStatusCodeRanges.has(operationId) ? httpStatusCodeRanges.get(operationId)!! : [new DefaultHttpStatusCodeRange()] ) .filter((httpStatusCodeRange: HttpStatusCodeRange) => httpStatusCodeRange.matches(error.response.status.toString()), ) .sort(HttpStatusCodeRange.compareFn)[0] .getFunction(error) export const ErrorObjectMapper = { process }