UNPKG

@qite/tide-client

Version:
319 lines (276 loc) 9.86 kB
import { TideClientConfig } from ".."; import { AvailableCountriesRequest, AvailableCountry, AvailableFlight, AvailableFlightsRequest, BasePrice, BookableDates, BookableDatesRequest, BookingPackage, BookingPackageAvailability, BookingPackageBookRequest, BookingPackageDetailsRequest, BookingPackageDossier, BookingPackageFlightPool, BookingPackageFlightPoolRequest, BookingPackageHotelPool, BookingPackageItem, BookingPackageRequest, BookingPackageSearchRequest, BookingPackageUpdateRequest, BookingPackageVoucherRequest, BookingPriceDetails, BookingTravelAgent, BookingVoucherResult, EntryStatus, PricesRequest, TideResponse, TourCodesRequest, TourCodesResponse, TransportDatesRequest, TransportDatesResponse, } from "../types"; import { get, patch, post } from "./common-client"; const ENDPOINT = "/api/web/booking/v2"; const ENDPOINT_AVAILABLE_FLIGHTS = `${ENDPOINT}/available-flights`; const ENDPOINT_TRANSPORT_DATES = `${ENDPOINT}/transport-dates`; const ENDPOINT_PRICES = `${ENDPOINT}/prices`; const ENDPOINT_AVAILABLE_COUNTRIES = `${ENDPOINT}/available-countries`; const ENDPOINT_SEARCH = `${ENDPOINT}/search`; const ENDPOINT_SEARCH_WITH_ERROR_MAPPING = `${ENDPOINT}/search-with-error-mapping`; // const ENDPOINT_ELASTIC = `${ENDPOINT}/elastic`; // TODO const ENDPOINT_DETAILS = `${ENDPOINT}/details`; const ENDPOINT_VALIDATE_VOUCHER = `${ENDPOINT}/validate-voucher`; const ENDPOINT_ALTERNATE_HOTELS = (transactionId: string, optionId: string) => `${ENDPOINT}/details/${transactionId}/alternate-hotels/${optionId}`; const ENDPOINT_ALTERNATE_FLIGHTS = (transactionId: string) => `${ENDPOINT}/details/${transactionId}/alternate-flights`; const ENDPOINT_BOOKABLE_DATES = `${ENDPOINT}/bookable-dates`; const ENDPOINT_PRICE_DETAILS = `${ENDPOINT}/price-details`; const ENDPOINT_BOOK = `${ENDPOINT}/book`; const ENDPOINT_UPDATE = `${ENDPOINT}/update`; const ENDPOINT_AGENTS = `${ENDPOINT}/agents`; const ENDPOINT_AVAILABLE_ALLOTMENTS = (eventId: string, productCode: string) => `${ENDPOINT}/get-allotment-availability/${eventId}/${productCode}`; const ENDPOINT_FLIGHT_POOL = `${ENDPOINT}/flight-pool`; const ENDPOINT_TOUR_CODES = `${ENDPOINT}/tourcodes`; const ENDPOINT_CUSTOM_ENTRY_STATUS = ( dossierNumber: string, customEntryStatusId: number ) => `${ENDPOINT}/custom-entry-status/${dossierNumber}/${customEntryStatusId}`; const ENDPOINT_ENTRY_STATUS = (dossierNumber: string, entryStatus: number) => `${ENDPOINT}/custom-entry-status/${dossierNumber}/${entryStatus}`; export const availableFlights = ( config: TideClientConfig, request: AvailableFlightsRequest, signal?: AbortSignal ): Promise<AvailableFlight[]> => { const url = `${config.host}${ENDPOINT_AVAILABLE_FLIGHTS}`; const apiKey = config.apiKey; const body = JSON.stringify(request); return post(url, apiKey, body, config.token, signal, true); }; export const transportDates = ( config: TideClientConfig, request: TransportDatesRequest, signal?: AbortSignal ): Promise<TransportDatesResponse> => { const url = `${config.host}${ENDPOINT_TRANSPORT_DATES}`; const apiKey = config.apiKey; const body = JSON.stringify(request); return post(url, apiKey, body, config.token, signal, true); }; export const prices = ( config: TideClientConfig, request: PricesRequest, signal?: AbortSignal ): Promise<BasePrice[]> => { const url = `${config.host}${ENDPOINT_PRICES}`; const apiKey = config.apiKey; const body = JSON.stringify(request); return post(url, apiKey, body, config.token, signal, true); }; export const availableCountries = ( config: TideClientConfig, request: AvailableCountriesRequest, signal?: AbortSignal ): Promise<AvailableCountry[]> => { const url = `${config.host}${ENDPOINT_AVAILABLE_COUNTRIES}`; const apiKey = config.apiKey; const body = JSON.stringify(request); return post(url, apiKey, body, config.token, signal, true); }; // PACKAGE SEARCH export const search = ( config: TideClientConfig, request: BookingPackageRequest<BookingPackageSearchRequest>, signal?: AbortSignal ): Promise<BookingPackageItem[]> => { const url = `${config.host}${ENDPOINT_SEARCH}`; const apiKey = config.apiKey; const body = JSON.stringify(request); return post(url, apiKey, body, config.token, signal, true); }; export const searchWithErrorMapping = ( config: TideClientConfig, request: BookingPackageRequest<BookingPackageSearchRequest>, signal?: AbortSignal ): Promise<TideResponse<BookingPackageItem[]>> => { const url = `${config.host}${ENDPOINT_SEARCH_WITH_ERROR_MAPPING}`; const apiKey = config.apiKey; const body = JSON.stringify(request); return post(url, apiKey, body, config.token, signal, true); }; export const details = ( config: TideClientConfig, request: BookingPackageRequest<BookingPackageDetailsRequest>, signal?: AbortSignal, languageCode?: string ): Promise<TideResponse<BookingPackage>> => { const url = `${config.host}${ENDPOINT_DETAILS}`; const apiKey = config.apiKey; const body = JSON.stringify(request); return post(url, apiKey, body, config.token, signal, true, languageCode); }; export const validateVoucher = ( config: TideClientConfig, request: BookingPackageRequest<BookingPackageVoucherRequest>, signal?: AbortSignal ): Promise<BookingVoucherResult> => { const url = `${config.host}${ENDPOINT_VALIDATE_VOUCHER}`; const apiKey = config.apiKey; const body = JSON.stringify(request); return post(url, apiKey, body, config.token, signal, true); }; export const alternateHotels = ( config: TideClientConfig, transactionId: string, optionId: string, signal?: AbortSignal ): Promise<BookingPackageHotelPool> => { const url = `${config.host}${ENDPOINT_ALTERNATE_HOTELS( transactionId, optionId )}`; const apiKey = config.apiKey; return get(url, apiKey, config.token, signal, true); }; export const alternateFlights = ( config: TideClientConfig, transactionId: string, signal?: AbortSignal ): Promise<BookingPackageFlightPool> => { const url = `${config.host}${ENDPOINT_ALTERNATE_FLIGHTS(transactionId)}`; const apiKey = config.apiKey; return get(url, apiKey, config.token, signal, true); }; export const bookableDates = ( config: TideClientConfig, request: BookableDatesRequest, signal?: AbortSignal ): Promise<BookableDates> => { const url = `${config.host}${ENDPOINT_BOOKABLE_DATES}`; const apiKey = config.apiKey; const body = JSON.stringify(request); return post(url, apiKey, body, config.token, signal, true); }; export const priceDetails = ( config: TideClientConfig, request: BookingPackageRequest<BookingPackageBookRequest>, signal?: AbortSignal, languageCode?: string ): Promise<BookingPriceDetails> => { const url = `${config.host}${ENDPOINT_PRICE_DETAILS}`; const apiKey = config.apiKey; const body = JSON.stringify(request); return post(url, apiKey, body, config.token, signal, true, languageCode); }; export const book = ( config: TideClientConfig, request: BookingPackageRequest<BookingPackageBookRequest>, signal?: AbortSignal, languageCode?: string ): Promise<BookingPackageDossier> => { const url = `${config.host}${ENDPOINT_BOOK}`; const apiKey = config.apiKey; const body = JSON.stringify(request); return post(url, apiKey, body, config.token, signal, true, languageCode); }; export const update = ( config: TideClientConfig, request: BookingPackageRequest<BookingPackageUpdateRequest>, signal?: AbortSignal ): Promise<BookingPackageDossier> => { const url = `${config.host}${ENDPOINT_UPDATE}`; const apiKey = config.apiKey; const body = JSON.stringify(request); return post(url, apiKey, body, config.token, signal, true); }; export const agents = ( config: TideClientConfig, signal?: AbortSignal ): Promise<BookingTravelAgent[]> => { const url = `${config.host}${ENDPOINT_AGENTS}`; const apiKey = config.apiKey; return get(url, apiKey, config.token, signal, true); }; export const getAllotmentAvailability = ( config: TideClientConfig, eventId: string, productCode: string, signal?: AbortSignal ): Promise<BookingPackageAvailability[]> => { const url = `${config.host}${ENDPOINT_AVAILABLE_ALLOTMENTS( eventId, productCode )}`; const apiKey = config.apiKey; return get(url, apiKey, config.token, signal, true); }; export const searchFlightPool = ( config: TideClientConfig, request: BookingPackageRequest<BookingPackageFlightPoolRequest>, signal?: AbortSignal ): Promise<BookingPackageFlightPool> => { const url = `${config.host}${ENDPOINT_FLIGHT_POOL}`; const apiKey = config.apiKey; const body = JSON.stringify(request); return post(url, apiKey, body, config.token, signal, true); }; export const tourCodes = ( config: TideClientConfig, request: TourCodesRequest, signal?: AbortSignal ): Promise<TourCodesResponse> => { const url = `${config.host}${ENDPOINT_TOUR_CODES}`; const apiKey = config.apiKey; const body = JSON.stringify(request); return post(url, apiKey, body, config.token, signal, true); }; export const setCustomEntryStatus = ( config: TideClientConfig, dossierNumber: string, customEntryStatusId: number, signal?: AbortSignal ): Promise<BookingPackageAvailability[]> => { const url = `${config.host}${ENDPOINT_CUSTOM_ENTRY_STATUS( dossierNumber, customEntryStatusId )}`; const apiKey = config.apiKey; return get(url, apiKey, config.token, signal, true); }; export const setEntryStatus = ( config: TideClientConfig, dossierNumber: string, entryStatus: EntryStatus, signal?: AbortSignal ): Promise<BookingPackageAvailability[]> => { const url = `${config.host}${ENDPOINT_ENTRY_STATUS( dossierNumber, entryStatus )}`; const apiKey = config.apiKey; return patch(url, apiKey, null, config.token, signal, true); };