sabre-client 0.2.3 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +14 -1
- package/dist/index.d.ts +14 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/air/search.ts","../src/air/ticketing.ts","../src/authentication/authentication.ts","../src/booking-management/booking.ts","../src/booking-management/flight-tickets.ts","../package.json","../src/config.ts","../src/errors.ts","../src/trip-management/reservation.ts","../src/sabre.ts"],"sourcesContent":["export { Sabre } from './sabre'\n\nexport * from './booking-management/interfaces'\nexport * from './trip-management/interfaces'\nexport * from './authentication/interfaces'\nexport * from './air/interfaces'","import { Sabre } from \"../sabre\"\nimport { BargainFinderMaxOptions, BargainFinderMaxResponseSuccess, RevalidateItineraryOptions, RevalidateItineraryResponseSuccess } from \"./interfaces\";\n\nexport class Search {\n /**\n * Bargain Finder Max v5\n * \n * Bargain Finder Max (BFM), \n * nuestro producto de búsqueda de tarifas bajas líder en su clase, \n * se utiliza para buscar los itinerarios con los precios más bajos disponibles según una fecha específica.\n * \n * Revalidate Itinerary v5\n * \n * La API Revalidate Itinerary permite volver a consultar la disponibilidad \n * y el precio de una opción de itinerario específica sin tener que reservarla. \n * La solución revalida si la opción de itinerario es válida para la compra. \n * Revalidate Itinerary no admite contenido NDC.\n * \n * @param sabre Sabre Client Reference\n */\n constructor (\n private sabre: Sabre\n ) {}\n\n /**\n * Crear solicitud de Buscador de ofertas Max.\n * \n * payload - El mensaje de solicitud de búsqueda de tarifa baja solicita opciones \n * de itinerario para vuelos entre pares de ciudades específicos, en fechas específicas, \n * para un número y tipo de pasajeros específicos. \n * La información opcional de la solicitud puede incluir: \n * hora/ventana horaria, ciudades de conexión \n * y preferencias del cliente (aerolíneas, cabina, tipo de vuelo, etc.). \n * La solicitud de búsqueda de tarifa baja contiene información similar a \n * la de una búsqueda de tarifa baja en el CRS o GDS de una aerolínea.\n * @param payload BargainFinderMaxOptions \n * @returns {Promise<BargainFinderMaxResponseSuccess>}\n */\n async shop(payload: BargainFinderMaxOptions): Promise<BargainFinderMaxResponseSuccess> {\n const path = \"/v5/offers/shop\";\n return this.sabre.post<BargainFinderMaxResponseSuccess>(path, payload)\n }\n /**\n * Crear solicitud de revalidación de itinerario.\n * \n * payload - El mensaje de solicitud de búsqueda de tarifa baja solicita opciones\n * de itinerario para vuelos entre pares de ciudades específicos, en fechas específicas, \n * para un número y tipo de pasajeros específicos. \n * La información opcional de la solicitud puede incluir: \n * hora/ventana horaria, ciudades de conexión \n * y preferencias del cliente (aerolíneas, cabina, tipo de vuelo, etc.). \n * La solicitud de búsqueda de tarifa baja contiene información similar a \n * la de una búsqueda de tarifa baja en el CRS o GDS de una aerolínea.\n * @param payload RevalidateItineraryOptions\n * @returns {Promise<RevalidateItineraryResponseSuccess>}\n */\n async revalidate(payload: RevalidateItineraryOptions): Promise<RevalidateItineraryResponseSuccess> {\n const path = \"/v5/shop/flights/revalidate\";\n return this.sabre.post<RevalidateItineraryResponseSuccess>(path, payload)\n }\n}","import { Sabre } from \"../sabre\"\nimport { EnhancedAirTicketOptions, EnhancedAirTicketResponseSuccess } from \"./interfaces\";\n\nexport class Ticketing {\n /**\n * Enhanced Air Ticket v1.3.0\n * \n * La API de boletos aéreos mejorados se utiliza para emitir uno o varios boletos aéreos \n * y/o EMD (documentos electrónicos varios) dentro de una sola llamada API.\n * \n * @param sabre Sabre Client Reference\n */\n constructor (\n private sabre: Sabre\n ) {}\n\n /**\n * La API de boletos aéreos mejorados (AirTicketRQ) \n * se utiliza para emitir boletos aéreos y documentos electrónicos varios (EMD) en una sola solicitud.\n * \n * payload - Solicitud de API de boletos aéreos orquestada.\n * @param payload EnhancedAirTicketOptions \n * @returns {Promise<EnhancedAirTicketResponseSuccess>}\n */\n async issue(payload: EnhancedAirTicketOptions): Promise<EnhancedAirTicketResponseSuccess> {\n const path = \"/v1.3.0/air/ticket\";\n return this.sabre.post<EnhancedAirTicketResponseSuccess>(path, payload)\n }\n}","import { Sabre } from \"../sabre\";\nimport { CreateTokenResponseSuccess } from \"./interfaces\";\n\nconst grantType = new URLSearchParams({ 'grant_type': 'client_credentials' }).toString()\n\nexport class Authentication {\n constructor(private readonly sabre: Sabre) {}\n /**\n * OAuth Token Create REST API v2\n * See https://developer.sabre.com/docs/rest_apis/session_management/token_create_api/v2\n * @param payload El tipo de concesión utilizado para obtener el token. Sólo se admiten 'client_credentials'.\n * @returns TokenResponse\n */\n async OAuthTokenV2(\n payload: string = grantType\n ): Promise<CreateTokenResponseSuccess> {\n const data = await this.sabre.auth<CreateTokenResponseSuccess>(\n '/v2/auth/token',\n payload\n );\n this.sabre.setAuthorization(data.access_token)\n return data\n }\n}","import { Sabre } from \"../sabre\"\nimport {\n CancelBookingOptions,\n CancelBookingResponseSuccess,\n CreateBookingOptions,\n CreateBookingResponseSuccess,\n GetBookingOptions,\n GetBookingResponseSuccess,\n ModifyBookingOptions,\n ModifyBookingResponseSuccess,\n} from \"./interfaces\"\n\nexport class Booking {\n /**\n * Booking\n * \n * La API de reservas está diseñada para proporcionar una vista normalizada de una reserva de Sabre combinando el PNR de Sabre y el pedido de Sabre.\n * \n * @param sabre Sabre Client Reference\n */\n constructor (\n private sabre: Sabre\n ) {}\n /**\n * Crea una solicitud que contiene un \"Id. de confirmación\" y un \"apellido\" del viajero para obtener información de la reserva.\n * \n * payload - Contiene elementos tanto obligatorios como opcionales para realizar una solicitud de reserva.\n * @param payload GetBookingOptions\n * @returns {Promise<GetBookingResponseSuccess>}\n */\n get(payload: GetBookingOptions): Promise<GetBookingResponseSuccess>{\n const path = '/v1/trip/orders/getBooking'\n return this.sabre.post<GetBookingResponseSuccess>(path, payload)\n }\n /**\n * Crea una reserva aérea (NDC/ATPCO/LCC).\n * \n * payload - Contiene elementos obligatorios y opcionales para realizar una solicitud de reserva.\n * @param payload CreateBookingOptions\n * @returns {Promise<CreateBookingResponseSuccess>}\n */\n async create(payload: CreateBookingOptions): Promise<CreateBookingResponseSuccess> {\n const path = '/v1/trip/orders/createBooking'\n return this.sabre.post<CreateBookingResponseSuccess>(path, payload)\n }\n /**\n * Crea una lista de elementos de reserva que deben cancelarse.\n * \n * payload - Contiene elementos obligatorios y opcionales para cancelar la totalidad o partes de una reserva.\n * @param payload CancelBookingOptions\n * @returns {Promise<CancelBookingResponseSuccess>}\n */\n async cancel(payload: CancelBookingOptions): Promise<CancelBookingResponseSuccess> {\n const path = '/v1/trip/orders/cancelBooking'\n return this.sabre.post<CancelBookingResponseSuccess>(path, payload)\n }\n /**\n * Crea una lista de elementos de reserva que deben modificarse.\n * \n * payload - Contiene elementos obligatorios y opcionales para modificar datos no relacionados con el itinerario en la reserva existente. \n * @param payload ModifyBookingOptions \n * @returns {Promise<ModifyBookingResponseSuccess>}\n */\n async modify(payload: ModifyBookingOptions): Promise<ModifyBookingResponseSuccess> {\n const path = '/v1/trip/orders/modifyBooking'\n return this.sabre.post<ModifyBookingResponseSuccess>(path, payload)\n }\n\n}","import { Sabre } from \"../sabre\"\nimport {\n CheckTicketsOptions,\n CheckTicketsResponseSuccess,\n FulfillTicketsOptions,\n FulfillTicketsResponseSuccess,\n RefundTicketsOptions,\n RefundTicketsResponseSuccess,\n VoidTicketsOptions,\n VoidTicketsResponseSuccess,\n} from \"./interfaces\"\n\nexport class FlightTickets {\n /**\n * Flight Tickets\n * \n * Los endpoint de Flight Tickets son un conjunto de métodos diseñados para obtener detalles de los billetes y \n * realizar operaciones específicas (anulación/reembolso) sobre ellos.\n * \n * @param sabre Sabre Client Reference\n */\n constructor (\n private sabre: Sabre\n ) {}\n\n /**\n * Procesa tickets proporcionando una solicitud que contiene una lista de números de ticket que se anularán.\n * \n * payload - Contiene elementos obligatorios y opcionales para anular los billetes.\n * @param payload VoidTicketsOptions\n * @returns {Promise<VoidTicketsResponseSuccess>}\n */\n async void(payload: VoidTicketsOptions): Promise<VoidTicketsResponseSuccess> {\n const path = '/v1/trip/orders/voidFlightTickets'\n return this.sabre.post<VoidTicketsResponseSuccess>(path, payload)\n }\n\n /**\n * Procesa los boletos proporcionando una solicitud que contiene una lista de números de boletos que deben reembolsarse. \n * Actualmente, los EMD no son compatibles.\n * \n * payload - Contiene elementos obligatorios y opcionales para el reembolso de los billetes.\n * @param payload RefundTicketsOptions\n * @returns {Promise<RefundTicketsResponseSuccess>}\n */\n async refund(payload: RefundTicketsOptions): Promise<RefundTicketsResponseSuccess> {\n const path = '/v1/trip/orders/refundFlightTickets'\n return this.sabre.post<RefundTicketsResponseSuccess>(path, payload)\n }\n \n /**\n * Procesa tickets proporcionando una solicitud que contiene una lista de números de ticket que se verificarán. \n * Actualmente, los EMD no son compatibles.\n * \n * payload - Contiene elementos obligatorios y opcionales para consultar los tickets.\n * @param payload CheckTicketsOptions\n * @returns {Promise<CheckTicketsResponseSuccess>} CheckTicketsResponse\n */\n async check(payload: CheckTicketsOptions): Promise<CheckTicketsResponseSuccess> {\n const path = '/v1/trip/orders/checkFlightTickets'\n return this.sabre.post<CheckTicketsResponseSuccess>(path, payload)\n }\n\n /**\n * Procesa la emisión de billetes y documentos varios electrónicos (EMD).\n * Actualmente, los EMD no son compatibles.\n * \n * payload - Contiene elementos obligatorios y opcionales para la emisión de billetes.\n * @param payload FulfillTicketsOptions\n * @returns {Promise<FulfillTicketsResponseSuccess>}\n */\n async fulfill(payload: FulfillTicketsOptions): Promise<FulfillTicketsResponseSuccess> {\n const path = '/v1/trip/orders/fulfillFlightTickets'\n return this.sabre.post<FulfillTicketsResponseSuccess>(path, payload)\n }\n}","{\n \"name\": \"sabre-client\",\n \"version\": \"0.2.3\",\n \"description\": \"Sabre Node.js SDK\",\n \"keywords\": [\n \"sabre\",\n \"client\",\n \"devStudio\",\n \"rest\"\n ],\n \"homepage\": \"https://github.com/CarlosIvanSoto/sabre#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/CarlosIvanSoto/sabre/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/CarlosIvanSoto/sabre.git\"\n },\n \"license\": \"MIT\",\n \"author\": \"Carlos Ivan Soto <csoto_99@outlook.com>\",\n \"type\": \"module\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\n \"dist/**\"\n ],\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n }\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"prepublishOnly\": \"npm run build\",\n \"test\": \"jest --passWithNoTests\",\n \"test:watch\": \"jest --watch\",\n \"lint\": \"eslint . --ext .ts --report-unused-disable-directives --max-warnings 0\",\n \"type-check\": \"tsc --noEmit\",\n \"example:auth-atk\": \"node --env-file=.env --import=tsx examples/auth-atk.ts\",\n \"example:search-shop\": \"node --env-file=.env --import=tsx examples/search-shop.ts\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^9.38.0\",\n \"@types/jest\": \"^30.0.0\",\n \"@types/node\": \"^24.8.1\",\n \"eslint\": \"^9.38.0\",\n \"jest\": \"^30.2.0\",\n \"ts-jest\": \"^29.4.5\",\n \"ts-node\": \"^10.9.2\",\n \"tsup\": \"^8.5.0\",\n \"tsx\": \"^4.20.6\",\n \"typescript\": \"^5.9.3\",\n \"typescript-eslint\": \"^8.46.1\"\n }\n}\n","import { version } from '../package.json';\n\nconst defaultBaseUrl = 'https://api.platform.sabre.com';\nconst defaultUserAgent = `sabre-client-node:${version}`;\nconst defaultConversationId = `sabre.client.node:${version}`\nconst defaultDomain = 'AA'\n\nconst baseUrl =\n typeof process !== 'undefined' && process.env\n ? process.env.SABRE_REST_URL || defaultBaseUrl\n : defaultBaseUrl;\n\nconst userAgent =\n typeof process !== 'undefined' && process.env\n ? process.env.SABRE_USER_AGENT || defaultUserAgent\n : defaultUserAgent;\n\nconst domain =\n typeof process !== 'undefined' && process.env\n ? process.env.SABRE_DOMAIN || defaultDomain\n : defaultDomain;\n\nconst conversationId = \n typeof process !== 'undefined' && process.env\n ? process.env.SABRE_CONVERSATION_ID || defaultConversationId\n : defaultConversationId\n \nexport { baseUrl, userAgent, domain, conversationId };","/**\n * Clase de error personalizada para los errores de la API de Sabre.\n * Extiende la clase Error nativa para proporcionar más contexto.\n */\nexport class SabreError extends Error {\n public readonly details: string;\n public readonly statusCode: number;\n\n constructor(message: string, statusCode: number, details: string) {\n super(message);\n this.name = 'SabreError';\n this.statusCode = statusCode;\n this.details = details;\n }\n}","import { Sabre } from \"../sabre\"\nimport { CreatePassengerNameRecordOptions, CreatePassengerNameRecordResponseSuccess } from \"./interfaces\"\n\nexport class Reservation {\n /**\n * Reservation\n * \n * La API para crear un registro de nombre de pasajero es una API \n * orquestada que integra varias funciones y operaciones en una sola llamada.\n * \n * Esta API permite crear un registro de nombre de pasajero (PNR), \n * incluyendo segmentos aéreos, en una sola llamada.\n * \n * @param sabre Sabre Client Reference\n */\n constructor (\n private sabre: Sabre\n ) {}\n /**\n * Cree una reserva completa de contenido aéreo, hotel y automóvil de alquiler, todo dentro de una sola solicitud.\n * \n * payload - Contiene elementos obligatorios y opcionales para realizar una solicitud de reserva.\n * @param payload CreatePassengerNameRecordOptions\n * @returns {Promise<CreatePassengerNameRecordResponseSuccess>}\n */\n create(payload: CreatePassengerNameRecordOptions): Promise<CreatePassengerNameRecordResponseSuccess> {\n const path = '/v2.5.0/passenger/records?mode=create'\n return this.sabre.post<CreatePassengerNameRecordResponseSuccess>(path, payload)\n }\n\n}","import { Search, Ticketing } from \"./air\";\nimport { Authentication } from \"./authentication/authentication\";\nimport { Booking, FlightTickets } from \"./booking-management\";\nimport { PostOptions } from \"./common/interfaces\";\nimport { baseUrl, conversationId, domain, userAgent } from \"./config\";\nimport { SabreError } from \"./errors\";\nimport { SabreOptions } from \"./interfaces\";\nimport { Reservation } from \"./trip-management/reservation\";\n\nexport class Sabre {\n private readonly headers: Headers;\n private readonly secret: string;\n\n readonly authentication = new Authentication(this)\n readonly booking = new Booking(this)\n readonly flightTickets = new FlightTickets(this)\n readonly search = new Search(this)\n readonly ticketing = new Ticketing(this)\n readonly reservation = new Reservation(this)\n\n constructor(private readonly options: SabreOptions = {}) {\n const processEnv = typeof process !== 'undefined' && process.env\n if (!this.options.username && processEnv)\n this.options.username = processEnv.SABRE_USERNAME\n if (!this.options.password && processEnv)\n this.options.password = processEnv.SABRE_PASSWORD\n if (!this.options.organization && processEnv)\n this.options.organization = processEnv.SABRE_ORGANIZATION\n\n if (!this.options.username || !this.options.password || !this.options.organization) {\n throw new Error(`Missing Sabre authorization. Pass it to the constructor new Sabre({\n username: '773400', \n password: 'PASSWORD_GOES_HERE',\n organization: '7TZA', // pcc\n });})`)\n }\n\n this.headers = new Headers({\n 'User-Agent': userAgent,\n 'Conversation-ID': conversationId\n });\n\n this.secret = this.getSecret()\n }\n\n setAuthorization(token: string): void {\n this.headers.set('Authorization', `Bearer ${token}`)\n this.headers.set('Content-Type', 'application/json')\n }\n\n async fetchRequest<T>(\n path: string,\n options = {},\n ): Promise<T> {\n const response = await fetch(`${baseUrl}${path}`, options);\n \n if (!response.ok) {\n let errorDetails = `Request failed with status ${response.status}`;\n try {\n const jsonError = await response.json() as unknown;\n errorDetails = JSON.stringify(jsonError);\n } catch (e) {\n console.error(e)\n errorDetails = response.statusText;\n }\n throw new SabreError(\n `Request failed with status ${response.status}`, \n response.status, \n errorDetails);\n }\n\n const data = await response.json() as T;\n return data;\n }\n async post<T>(path: string, entity?: unknown, options: PostOptions = {}): Promise<T> {\n const requestOptions = {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(entity),\n ...options,\n };\n\n return this.fetchRequest<T>(path, requestOptions);\n }\n\n async auth<T>(path: string, entity?: unknown, options: PostOptions = {}): Promise<T> {\n /**\n * La palabra 'basic' seguida de un EPR codificado en base64 \n * como par base64(base64(V1:usuario:grupo:dominio):base64(contraseña)), \n * p.e. basic VmpFNmRYTmxjbWxrT21keWIzVndPbVJ2YldGcGJnPT06TVRJek5EVT0=\n */\n this.headers.set('Authorization', `Basic ${this.secret}`)\n this.headers.set('Content-Type', 'application/x-www-form-urlencoded')\n\n const requestOptions = {\n method: 'POST',\n headers: this.headers,\n body: entity,\n ...options,\n };\n\n return this.fetchRequest<T>(path, requestOptions);\n }\n\n private getSecret(): string {\n if (!this.options.password) throw new Error('Missing Sabre password')\n return btoa(`${this.userID()}:${btoa(this.options.password)}`)\n }\n private userID(): string {\n return btoa(`V1:${this.options.username}:${this.options.organization}:${domain}`)\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/air/search.ts","../src/air/ticketing.ts","../src/authentication/authentication.ts","../src/booking-management/booking.ts","../src/booking-management/flight-tickets.ts","../package.json","../src/config.ts","../src/errors.ts","../src/trip-management/reservation.ts","../src/sabre.ts"],"sourcesContent":["export { Sabre } from './sabre'\n\nexport * from './booking-management/interfaces'\nexport * from './trip-management/interfaces'\nexport * from './authentication/interfaces'\nexport * from './air/interfaces'","import { Sabre } from \"../sabre\"\nimport { BargainFinderMaxOptions, BargainFinderMaxResponseSuccess, RevalidateItineraryOptions, RevalidateItineraryResponseSuccess } from \"./interfaces\";\n\nexport class Search {\n /**\n * Bargain Finder Max v5\n * \n * Bargain Finder Max (BFM), \n * nuestro producto de búsqueda de tarifas bajas líder en su clase, \n * se utiliza para buscar los itinerarios con los precios más bajos disponibles según una fecha específica.\n * \n * Revalidate Itinerary v5\n * \n * La API Revalidate Itinerary permite volver a consultar la disponibilidad \n * y el precio de una opción de itinerario específica sin tener que reservarla. \n * La solución revalida si la opción de itinerario es válida para la compra. \n * Revalidate Itinerary no admite contenido NDC.\n * \n * @param sabre Sabre Client Reference\n */\n constructor (\n private sabre: Sabre\n ) {}\n\n /**\n * Crear solicitud de Buscador de ofertas Max.\n * \n * payload - El mensaje de solicitud de búsqueda de tarifa baja solicita opciones \n * de itinerario para vuelos entre pares de ciudades específicos, en fechas específicas, \n * para un número y tipo de pasajeros específicos. \n * La información opcional de la solicitud puede incluir: \n * hora/ventana horaria, ciudades de conexión \n * y preferencias del cliente (aerolíneas, cabina, tipo de vuelo, etc.). \n * La solicitud de búsqueda de tarifa baja contiene información similar a \n * la de una búsqueda de tarifa baja en el CRS o GDS de una aerolínea.\n * @param payload BargainFinderMaxOptions \n * @returns {Promise<BargainFinderMaxResponseSuccess>}\n */\n async shop(payload: BargainFinderMaxOptions): Promise<BargainFinderMaxResponseSuccess> {\n const path = \"/v5/offers/shop\";\n return this.sabre.post<BargainFinderMaxResponseSuccess>(path, payload)\n }\n /**\n * Crear solicitud de revalidación de itinerario.\n * \n * payload - El mensaje de solicitud de búsqueda de tarifa baja solicita opciones\n * de itinerario para vuelos entre pares de ciudades específicos, en fechas específicas, \n * para un número y tipo de pasajeros específicos. \n * La información opcional de la solicitud puede incluir: \n * hora/ventana horaria, ciudades de conexión \n * y preferencias del cliente (aerolíneas, cabina, tipo de vuelo, etc.). \n * La solicitud de búsqueda de tarifa baja contiene información similar a \n * la de una búsqueda de tarifa baja en el CRS o GDS de una aerolínea.\n * @param payload RevalidateItineraryOptions\n * @returns {Promise<RevalidateItineraryResponseSuccess>}\n */\n async revalidate(payload: RevalidateItineraryOptions): Promise<RevalidateItineraryResponseSuccess> {\n const path = \"/v5/shop/flights/revalidate\";\n return this.sabre.post<RevalidateItineraryResponseSuccess>(path, payload)\n }\n}","import { Sabre } from \"../sabre\"\nimport { EnhancedAirTicketOptions, EnhancedAirTicketResponseSuccess } from \"./interfaces\";\n\nexport class Ticketing {\n /**\n * Enhanced Air Ticket v1.3.0\n * \n * La API de boletos aéreos mejorados se utiliza para emitir uno o varios boletos aéreos \n * y/o EMD (documentos electrónicos varios) dentro de una sola llamada API.\n * \n * @param sabre Sabre Client Reference\n */\n constructor (\n private sabre: Sabre\n ) {}\n\n /**\n * La API de boletos aéreos mejorados (AirTicketRQ) \n * se utiliza para emitir boletos aéreos y documentos electrónicos varios (EMD) en una sola solicitud.\n * \n * payload - Solicitud de API de boletos aéreos orquestada.\n * @param payload EnhancedAirTicketOptions \n * @returns {Promise<EnhancedAirTicketResponseSuccess>}\n */\n async issue(payload: EnhancedAirTicketOptions): Promise<EnhancedAirTicketResponseSuccess> {\n const path = \"/v1.3.0/air/ticket\";\n return this.sabre.post<EnhancedAirTicketResponseSuccess>(path, payload)\n }\n}","import { Sabre } from \"../sabre\";\nimport { CreateTokenResponseSuccess } from \"./interfaces\";\n\nconst grantType = new URLSearchParams({ 'grant_type': 'client_credentials' }).toString()\n\nexport class Authentication {\n constructor(private readonly sabre: Sabre) {}\n /**\n * OAuth Token Create REST API v2\n * See https://developer.sabre.com/docs/rest_apis/session_management/token_create_api/v2\n * @param payload El tipo de concesión utilizado para obtener el token. Sólo se admiten 'client_credentials'.\n * @returns TokenResponse\n */\n async OAuthTokenV2(\n payload: string = grantType\n ): Promise<CreateTokenResponseSuccess> {\n const data = await this.sabre.auth<CreateTokenResponseSuccess>(\n '/v2/auth/token',\n payload\n );\n this.sabre.setAuthorization(data.access_token)\n return data\n }\n}","import { Sabre } from \"../sabre\"\nimport {\n CancelBookingOptions,\n CancelBookingResponseSuccess,\n CreateBookingOptions,\n CreateBookingResponseSuccess,\n GetBookingOptions,\n GetBookingResponseSuccess,\n ModifyBookingOptions,\n ModifyBookingResponseSuccess,\n} from \"./interfaces\"\n\nexport class Booking {\n /**\n * Booking\n * \n * La API de reservas está diseñada para proporcionar una vista normalizada de una reserva de Sabre combinando el PNR de Sabre y el pedido de Sabre.\n * \n * @param sabre Sabre Client Reference\n */\n constructor (\n private sabre: Sabre\n ) {}\n /**\n * Crea una solicitud que contiene un \"Id. de confirmación\" y un \"apellido\" del viajero para obtener información de la reserva.\n * \n * payload - Contiene elementos tanto obligatorios como opcionales para realizar una solicitud de reserva.\n * @param payload GetBookingOptions\n * @returns {Promise<GetBookingResponseSuccess>}\n */\n get(payload: GetBookingOptions): Promise<GetBookingResponseSuccess>{\n const path = '/v1/trip/orders/getBooking'\n return this.sabre.post<GetBookingResponseSuccess>(path, payload)\n }\n /**\n * Crea una reserva aérea (NDC/ATPCO/LCC).\n * \n * payload - Contiene elementos obligatorios y opcionales para realizar una solicitud de reserva.\n * @param payload CreateBookingOptions\n * @returns {Promise<CreateBookingResponseSuccess>}\n */\n async create(payload: CreateBookingOptions): Promise<CreateBookingResponseSuccess> {\n const path = '/v1/trip/orders/createBooking'\n return this.sabre.post<CreateBookingResponseSuccess>(path, payload)\n }\n /**\n * Crea una lista de elementos de reserva que deben cancelarse.\n * \n * payload - Contiene elementos obligatorios y opcionales para cancelar la totalidad o partes de una reserva.\n * @param payload CancelBookingOptions\n * @returns {Promise<CancelBookingResponseSuccess>}\n */\n async cancel(payload: CancelBookingOptions): Promise<CancelBookingResponseSuccess> {\n const path = '/v1/trip/orders/cancelBooking'\n return this.sabre.post<CancelBookingResponseSuccess>(path, payload)\n }\n /**\n * Crea una lista de elementos de reserva que deben modificarse.\n * \n * payload - Contiene elementos obligatorios y opcionales para modificar datos no relacionados con el itinerario en la reserva existente. \n * @param payload ModifyBookingOptions \n * @returns {Promise<ModifyBookingResponseSuccess>}\n */\n async modify(payload: ModifyBookingOptions): Promise<ModifyBookingResponseSuccess> {\n const path = '/v1/trip/orders/modifyBooking'\n return this.sabre.post<ModifyBookingResponseSuccess>(path, payload)\n }\n\n}","import { Sabre } from \"../sabre\"\nimport {\n CheckTicketsOptions,\n CheckTicketsResponseSuccess,\n FulfillTicketsOptions,\n FulfillTicketsResponseSuccess,\n RefundTicketsOptions,\n RefundTicketsResponseSuccess,\n VoidTicketsOptions,\n VoidTicketsResponseSuccess,\n} from \"./interfaces\"\n\nexport class FlightTickets {\n /**\n * Flight Tickets\n * \n * Los endpoint de Flight Tickets son un conjunto de métodos diseñados para obtener detalles de los billetes y \n * realizar operaciones específicas (anulación/reembolso) sobre ellos.\n * \n * @param sabre Sabre Client Reference\n */\n constructor (\n private sabre: Sabre\n ) {}\n\n /**\n * Procesa tickets proporcionando una solicitud que contiene una lista de números de ticket que se anularán.\n * \n * payload - Contiene elementos obligatorios y opcionales para anular los billetes.\n * @param payload VoidTicketsOptions\n * @returns {Promise<VoidTicketsResponseSuccess>}\n */\n async void(payload: VoidTicketsOptions): Promise<VoidTicketsResponseSuccess> {\n const path = '/v1/trip/orders/voidFlightTickets'\n return this.sabre.post<VoidTicketsResponseSuccess>(path, payload)\n }\n\n /**\n * Procesa los boletos proporcionando una solicitud que contiene una lista de números de boletos que deben reembolsarse. \n * Actualmente, los EMD no son compatibles.\n * \n * payload - Contiene elementos obligatorios y opcionales para el reembolso de los billetes.\n * @param payload RefundTicketsOptions\n * @returns {Promise<RefundTicketsResponseSuccess>}\n */\n async refund(payload: RefundTicketsOptions): Promise<RefundTicketsResponseSuccess> {\n const path = '/v1/trip/orders/refundFlightTickets'\n return this.sabre.post<RefundTicketsResponseSuccess>(path, payload)\n }\n \n /**\n * Procesa tickets proporcionando una solicitud que contiene una lista de números de ticket que se verificarán. \n * Actualmente, los EMD no son compatibles.\n * \n * payload - Contiene elementos obligatorios y opcionales para consultar los tickets.\n * @param payload CheckTicketsOptions\n * @returns {Promise<CheckTicketsResponseSuccess>} CheckTicketsResponse\n */\n async check(payload: CheckTicketsOptions): Promise<CheckTicketsResponseSuccess> {\n const path = '/v1/trip/orders/checkFlightTickets'\n return this.sabre.post<CheckTicketsResponseSuccess>(path, payload)\n }\n\n /**\n * Procesa la emisión de billetes y documentos varios electrónicos (EMD).\n * Actualmente, los EMD no son compatibles.\n * \n * payload - Contiene elementos obligatorios y opcionales para la emisión de billetes.\n * @param payload FulfillTicketsOptions\n * @returns {Promise<FulfillTicketsResponseSuccess>}\n */\n async fulfill(payload: FulfillTicketsOptions): Promise<FulfillTicketsResponseSuccess> {\n const path = '/v1/trip/orders/fulfillFlightTickets'\n return this.sabre.post<FulfillTicketsResponseSuccess>(path, payload)\n }\n}","{\n \"name\": \"sabre-client\",\n \"version\": \"0.2.4\",\n \"description\": \"Sabre Node.js SDK\",\n \"keywords\": [\n \"sabre\",\n \"client\",\n \"devStudio\",\n \"rest\"\n ],\n \"homepage\": \"https://github.com/CarlosIvanSoto/sabre#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/CarlosIvanSoto/sabre/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/CarlosIvanSoto/sabre.git\"\n },\n \"license\": \"MIT\",\n \"author\": \"Carlos Ivan Soto <csoto_99@outlook.com>\",\n \"type\": \"module\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\n \"dist/**\"\n ],\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n }\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"prepublishOnly\": \"npm run build\",\n \"test\": \"jest --passWithNoTests\",\n \"test:watch\": \"jest --watch\",\n \"lint\": \"eslint . --ext .ts --report-unused-disable-directives --max-warnings 0\",\n \"type-check\": \"tsc --noEmit\",\n \"example:auth-atk\": \"node --env-file=.env --import=tsx examples/auth-atk.ts\",\n \"example:search-shop\": \"node --env-file=.env --import=tsx examples/search-shop.ts\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^9.38.0\",\n \"@types/jest\": \"^30.0.0\",\n \"@types/node\": \"^24.8.1\",\n \"eslint\": \"^9.38.0\",\n \"jest\": \"^30.2.0\",\n \"ts-jest\": \"^29.4.5\",\n \"ts-node\": \"^10.9.2\",\n \"tsup\": \"^8.5.0\",\n \"tsx\": \"^4.20.6\",\n \"typescript\": \"^5.9.3\",\n \"typescript-eslint\": \"^8.46.1\"\n }\n}\n","import { version } from '../package.json';\n\nconst defaultBaseUrl = 'https://api.platform.sabre.com';\nconst defaultUserAgent = `sabre-client-node:${version}`;\nconst defaultConversationId = `sabre.client.node:${version}`\nconst defaultDomain = 'AA'\n\nconst baseUrl =\n typeof process !== 'undefined' && process.env\n ? process.env.SABRE_REST_URL || defaultBaseUrl\n : defaultBaseUrl;\n\nconst userAgent =\n typeof process !== 'undefined' && process.env\n ? process.env.SABRE_USER_AGENT || defaultUserAgent\n : defaultUserAgent;\n\nconst domain =\n typeof process !== 'undefined' && process.env\n ? process.env.SABRE_DOMAIN || defaultDomain\n : defaultDomain;\n\nconst conversationId = \n typeof process !== 'undefined' && process.env\n ? process.env.SABRE_CONVERSATION_ID || defaultConversationId\n : defaultConversationId\n \nexport { baseUrl, userAgent, domain, conversationId };","/**\n * Clase de error personalizada para los errores de la API de Sabre.\n * Extiende la clase Error nativa para proporcionar más contexto.\n */\nexport class SabreError extends Error {\n public readonly details: string;\n public readonly statusCode: number;\n\n constructor(message: string, statusCode: number, details: string) {\n super(message);\n this.name = 'SabreError';\n this.statusCode = statusCode;\n this.details = details;\n }\n}","import { Sabre } from \"../sabre\"\nimport { CreatePassengerNameRecordOptions, CreatePassengerNameRecordResponseSuccess } from \"./interfaces\"\n\nexport class Reservation {\n /**\n * Reservation\n * \n * La API para crear un registro de nombre de pasajero es una API \n * orquestada que integra varias funciones y operaciones en una sola llamada.\n * \n * Esta API permite crear un registro de nombre de pasajero (PNR), \n * incluyendo segmentos aéreos, en una sola llamada.\n * \n * @param sabre Sabre Client Reference\n */\n constructor (\n private sabre: Sabre\n ) {}\n /**\n * Cree una reserva completa de contenido aéreo, hotel y automóvil de alquiler, todo dentro de una sola solicitud.\n * \n * payload - Contiene elementos obligatorios y opcionales para realizar una solicitud de reserva.\n * @param payload CreatePassengerNameRecordOptions\n * @returns {Promise<CreatePassengerNameRecordResponseSuccess>}\n */\n create(payload: CreatePassengerNameRecordOptions): Promise<CreatePassengerNameRecordResponseSuccess> {\n const path = '/v2.5.0/passenger/records?mode=create'\n return this.sabre.post<CreatePassengerNameRecordResponseSuccess>(path, payload)\n }\n\n}","import { Search, Ticketing } from \"./air\";\nimport { Authentication } from \"./authentication/authentication\";\nimport { Booking, FlightTickets } from \"./booking-management\";\nimport { PostOptions } from \"./common/interfaces\";\nimport { baseUrl, conversationId, domain, userAgent } from \"./config\";\nimport { SabreError } from \"./errors\";\nimport { SabreOptions } from \"./interfaces\";\nimport { Reservation } from \"./trip-management/reservation\";\n\nexport class Sabre {\n private readonly headers: Headers;\n private readonly secret: string;\n\n readonly authentication = new Authentication(this)\n readonly booking = new Booking(this)\n readonly flightTickets = new FlightTickets(this)\n readonly search = new Search(this)\n readonly ticketing = new Ticketing(this)\n readonly reservation = new Reservation(this)\n\n constructor(private readonly options: SabreOptions = {}) {\n const processEnv = typeof process !== 'undefined' && process.env\n if (!this.options.username && processEnv)\n this.options.username = processEnv.SABRE_USERNAME\n if (!this.options.password && processEnv)\n this.options.password = processEnv.SABRE_PASSWORD\n if (!this.options.organization && processEnv)\n this.options.organization = processEnv.SABRE_ORGANIZATION\n\n if (!this.options.username || !this.options.password || !this.options.organization) {\n throw new Error(`Missing Sabre authorization. Pass it to the constructor new Sabre({\n username: '773400', \n password: 'PASSWORD_GOES_HERE',\n organization: '7TZA', // pcc\n });})`)\n }\n\n this.headers = new Headers({\n 'User-Agent': userAgent,\n 'Conversation-ID': conversationId\n });\n\n this.secret = this.getSecret()\n }\n\n setAuthorization(token: string): void {\n this.headers.set('Authorization', `Bearer ${token}`)\n this.headers.set('Content-Type', 'application/json')\n }\n\n async fetchRequest<T>(\n path: string,\n options = {},\n ): Promise<T> {\n const response = await fetch(`${baseUrl}${path}`, options);\n \n if (!response.ok) {\n let errorDetails = `Request failed with status ${response.status}`;\n try {\n const jsonError = await response.json() as unknown;\n errorDetails = JSON.stringify(jsonError);\n } catch (e) {\n console.error(e)\n errorDetails = response.statusText;\n }\n throw new SabreError(\n `Request failed with status ${response.status}`, \n response.status, \n errorDetails);\n }\n\n const data = await response.json() as T;\n return data;\n }\n async post<T>(path: string, entity?: unknown, options: PostOptions = {}): Promise<T> {\n const requestOptions = {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(entity),\n ...options,\n };\n\n return this.fetchRequest<T>(path, requestOptions);\n }\n\n async auth<T>(path: string, entity?: unknown, options: PostOptions = {}): Promise<T> {\n /**\n * La palabra 'basic' seguida de un EPR codificado en base64 \n * como par base64(base64(V1:usuario:grupo:dominio):base64(contraseña)), \n * p.e. basic VmpFNmRYTmxjbWxrT21keWIzVndPbVJ2YldGcGJnPT06TVRJek5EVT0=\n */\n this.headers.set('Authorization', `Basic ${this.secret}`)\n this.headers.set('Content-Type', 'application/x-www-form-urlencoded')\n\n const requestOptions = {\n method: 'POST',\n headers: this.headers,\n body: entity,\n ...options,\n };\n\n return this.fetchRequest<T>(path, requestOptions);\n }\n\n private getSecret(): string {\n if (!this.options.password) throw new Error('Missing Sabre password')\n return btoa(`${this.userID()}:${btoa(this.options.password)}`)\n }\n private userID(): string {\n return btoa(`V1:${this.options.username}:${this.options.organization}:${domain}`)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACGO,IAAM,SAAN,MAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBlB,YACU,OACR;AADQ;AAAA,EACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBH,MAAM,KAAK,SAA4E;AACrF,UAAM,OAAO;AACb,WAAO,KAAK,MAAM,KAAsC,MAAM,OAAO;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,MAAM,WAAW,SAAkF;AACjG,UAAM,OAAO;AACb,WAAO,KAAK,MAAM,KAAyC,MAAM,OAAO;AAAA,EAC1E;AACF;;;ACzDO,IAAM,YAAN,MAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASrB,YACU,OACR;AADQ;AAAA,EACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUH,MAAM,MAAM,SAA8E;AACxF,UAAM,OAAO;AACb,WAAO,KAAK,MAAM,KAAuC,MAAM,OAAO;AAAA,EACxE;AACF;;;ACzBA,IAAM,YAAY,IAAI,gBAAgB,EAAE,cAAc,qBAAqB,CAAC,EAAE,SAAS;AAEhF,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAA6B,OAAc;AAAd;AAAA,EAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO5C,MAAM,aACJ,UAAkB,WACmB;AACrC,UAAM,OAAO,MAAM,KAAK,MAAM;AAAA,MAC5B;AAAA,MACA;AAAA,IACF;AACA,SAAK,MAAM,iBAAiB,KAAK,YAAY;AAC7C,WAAO;AAAA,EACT;AACF;;;ACXO,IAAM,UAAN,MAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQnB,YACU,OACR;AADQ;AAAA,EACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQH,IAAI,SAA+D;AACjE,UAAM,OAAO;AACb,WAAO,KAAK,MAAM,KAAgC,MAAM,OAAO;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,OAAO,SAAsE;AACjF,UAAM,OAAO;AACb,WAAO,KAAK,MAAM,KAAmC,MAAM,OAAO;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,OAAO,SAAsE;AACjF,UAAM,OAAO;AACb,WAAO,KAAK,MAAM,KAAmC,MAAM,OAAO;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,OAAO,SAAsE;AACjF,UAAM,OAAO;AACb,WAAO,KAAK,MAAM,KAAmC,MAAM,OAAO;AAAA,EACpE;AAEF;;;ACxDO,IAAM,gBAAN,MAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASzB,YACU,OACR;AADQ;AAAA,EACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASH,MAAM,KAAK,SAAkE;AAC3E,UAAM,OAAO;AACb,WAAO,KAAK,MAAM,KAAiC,MAAM,OAAO;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,OAAO,SAAsE;AACjF,UAAM,OAAO;AACb,WAAO,KAAK,MAAM,KAAmC,MAAM,OAAO;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,MAAM,SAAoE;AAC9E,UAAM,OAAO;AACb,WAAO,KAAK,MAAM,KAAkC,MAAM,OAAO;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,QAAQ,SAAwE;AACpF,UAAM,OAAO;AACb,WAAO,KAAK,MAAM,KAAoC,MAAM,OAAO;AAAA,EACrE;AACF;;;ACzEE,cAAW;;;ACAb,IAAM,iBAAiB;AACvB,IAAM,mBAAmB,qBAAqB,OAAO;AACrD,IAAM,wBAAwB,qBAAqB,OAAO;AAC1D,IAAM,gBAAgB;AAEtB,IAAM,UACJ,OAAO,YAAY,eAAe,QAAQ,MACtC,QAAQ,IAAI,kBAAkB,iBAC9B;AAEN,IAAM,YACJ,OAAO,YAAY,eAAe,QAAQ,MACtC,QAAQ,IAAI,oBAAoB,mBAChC;AAEN,IAAM,SACJ,OAAO,YAAY,eAAe,QAAQ,MACtC,QAAQ,IAAI,gBAAgB,gBAC5B;AAEN,IAAM,iBACJ,OAAO,YAAY,eAAe,QAAQ,MACtC,QAAQ,IAAI,yBAAyB,wBACrC;;;ACrBC,IAAM,aAAN,cAAyB,MAAM;AAAA,EACpB;AAAA,EACA;AAAA,EAEhB,YAAY,SAAiB,YAAoB,SAAiB;AAChE,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,aAAa;AAClB,SAAK,UAAU;AAAA,EACjB;AACF;;;ACXO,IAAM,cAAN,MAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYvB,YACU,OACR;AADQ;AAAA,EACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQH,OAAO,SAA8F;AACnG,UAAM,OAAO;AACb,WAAO,KAAK,MAAM,KAA+C,MAAM,OAAO;AAAA,EAChF;AAEF;;;ACrBO,IAAM,QAAN,MAAY;AAAA,EAWjB,YAA6B,UAAwB,CAAC,GAAG;AAA5B;AAC3B,UAAM,aAAa,OAAO,YAAY,eAAe,QAAQ;AAC7D,QAAI,CAAC,KAAK,QAAQ,YAAY;AAC5B,WAAK,QAAQ,WAAW,WAAW;AACrC,QAAI,CAAC,KAAK,QAAQ,YAAY;AAC5B,WAAK,QAAQ,WAAW,WAAW;AACrC,QAAI,CAAC,KAAK,QAAQ,gBAAgB;AAChC,WAAK,QAAQ,eAAe,WAAW;AAEzC,QAAI,CAAC,KAAK,QAAQ,YAAY,CAAC,KAAK,QAAQ,YAAY,CAAC,KAAK,QAAQ,cAAc;AAClF,YAAM,IAAI,MAAM;AAAA;AAAA;AAAA;AAAA,YAIV;AAAA,IACR;AAEA,SAAK,UAAU,IAAI,QAAQ;AAAA,MACzB,cAAc;AAAA,MACd,mBAAmB;AAAA,IACrB,CAAC;AAED,SAAK,SAAS,KAAK,UAAU;AAAA,EAC/B;AAAA,EAjCiB;AAAA,EACA;AAAA,EAER,iBAAiB,IAAI,eAAe,IAAI;AAAA,EACxC,UAAU,IAAI,QAAQ,IAAI;AAAA,EAC1B,gBAAgB,IAAI,cAAc,IAAI;AAAA,EACtC,SAAS,IAAI,OAAO,IAAI;AAAA,EACxB,YAAY,IAAI,UAAU,IAAI;AAAA,EAC9B,cAAc,IAAI,YAAY,IAAI;AAAA,EA2B3C,iBAAiB,OAAqB;AACpC,SAAK,QAAQ,IAAI,iBAAiB,UAAU,KAAK,EAAE;AACnD,SAAK,QAAQ,IAAI,gBAAgB,kBAAkB;AAAA,EACrD;AAAA,EAEA,MAAM,aACJ,MACA,UAAU,CAAC,GACC;AACZ,UAAM,WAAW,MAAM,MAAM,GAAG,OAAO,GAAG,IAAI,IAAI,OAAO;AAEzD,QAAI,CAAC,SAAS,IAAI;AAChB,UAAI,eAAgB,8BAA8B,SAAS,MAAM;AACjE,UAAI;AACF,cAAM,YAAY,MAAM,SAAS,KAAK;AACtC,uBAAe,KAAK,UAAU,SAAS;AAAA,MACzC,SAAS,GAAG;AACV,gBAAQ,MAAM,CAAC;AACf,uBAAe,SAAS;AAAA,MAC1B;AACA,YAAM,IAAI;AAAA,QACR,8BAA8B,SAAS,MAAM;AAAA,QAC7C,SAAS;AAAA,QACT;AAAA,MAAY;AAAA,IAChB;AAEA,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,WAAO;AAAA,EACT;AAAA,EACA,MAAM,KAAQ,MAAc,QAAkB,UAAuB,CAAC,GAAe;AACnF,UAAM,iBAAiB;AAAA,MACrB,QAAQ;AAAA,MACR,SAAS,KAAK;AAAA,MACd,MAAM,KAAK,UAAU,MAAM;AAAA,MAC3B,GAAG;AAAA,IACL;AAEA,WAAO,KAAK,aAAgB,MAAM,cAAc;AAAA,EAClD;AAAA,EAEA,MAAM,KAAQ,MAAc,QAAkB,UAAuB,CAAC,GAAgB;AAMpF,SAAK,QAAQ,IAAI,iBAAiB,SAAS,KAAK,MAAM,EAAE;AACxD,SAAK,QAAQ,IAAI,gBAAgB,mCAAmC;AAEpE,UAAM,iBAAiB;AAAA,MACrB,QAAQ;AAAA,MACR,SAAS,KAAK;AAAA,MACd,MAAM;AAAA,MACN,GAAG;AAAA,IACL;AAEA,WAAO,KAAK,aAAgB,MAAM,cAAc;AAAA,EAClD;AAAA,EAEQ,YAAoB;AAC1B,QAAI,CAAC,KAAK,QAAQ,SAAU,OAAM,IAAI,MAAM,wBAAwB;AACpE,WAAO,KAAK,GAAG,KAAK,OAAO,CAAC,IAAI,KAAK,KAAK,QAAQ,QAAQ,CAAC,EAAE;AAAA,EAC/D;AAAA,EACQ,SAAiB;AACvB,WAAO,KAAK,MAAM,KAAK,QAAQ,QAAQ,IAAI,KAAK,QAAQ,YAAY,IAAI,MAAM,EAAE;AAAA,EAClF;AACF;","names":[]}
|
package/dist/index.d.cts
CHANGED
|
@@ -14162,10 +14162,13 @@ interface components$3 {
|
|
|
14162
14162
|
pathItems: never;
|
|
14163
14163
|
}
|
|
14164
14164
|
|
|
14165
|
+
type EnhancedAirTicketSchema = components$5["schemas"];
|
|
14165
14166
|
type EnhancedAirTicketOptions = components$5["schemas"]["EnhancedAirTicketRequest"];
|
|
14166
14167
|
type EnhancedAirTicketResponseSuccess = components$5["schemas"]["EnhancedAirTicketResponse"];
|
|
14168
|
+
type BargainFinderMaxSchema = components$3["schemas"];
|
|
14167
14169
|
type BargainFinderMaxOptions = components$3["schemas"]["BargainFinderMaxRequest"];
|
|
14168
14170
|
type BargainFinderMaxResponseSuccess = components$3["schemas"]["GroupedItineraryResponse"];
|
|
14171
|
+
type RevalidatedItinerarySchema = components$4["schemas"];
|
|
14169
14172
|
type RevalidateItineraryOptions = components$4["schemas"]["RevalidateItineraryRequest"];
|
|
14170
14173
|
type RevalidateItineraryResponseSuccess = components$4["schemas"]["GroupedItineraryResponse"];
|
|
14171
14174
|
|
|
@@ -14348,6 +14351,7 @@ interface components$2 {
|
|
|
14348
14351
|
pathItems: never;
|
|
14349
14352
|
}
|
|
14350
14353
|
|
|
14354
|
+
type CreateTokenSchema = components$2["schemas"];
|
|
14351
14355
|
type CreateTokenRequestOptions = never;
|
|
14352
14356
|
type CreateTokenResponseSuccess = components$2["schemas"]["CreateSuccessful"];
|
|
14353
14357
|
|
|
@@ -19490,20 +19494,28 @@ interface components$1 {
|
|
|
19490
19494
|
pathItems: never;
|
|
19491
19495
|
}
|
|
19492
19496
|
|
|
19497
|
+
type CancelBookingSchema = components$1["schemas"];
|
|
19493
19498
|
type CancelBookingOptions = components$1["schemas"]["CancelBookingRequest"];
|
|
19494
19499
|
type CancelBookingResponseSuccess = components$1["schemas"]["CancelBookingResponse"];
|
|
19500
|
+
type CreateBookingSchema = components$1["schemas"];
|
|
19495
19501
|
type CreateBookingOptions = components$1["schemas"]["CreateBookingRequest"];
|
|
19496
19502
|
type CreateBookingResponseSuccess = components$1["schemas"]["CreateBookingResponse"];
|
|
19503
|
+
type GetBookingSchema = components$1["schemas"];
|
|
19497
19504
|
type GetBookingOptions = components$1["schemas"]["GetBookingRequest"];
|
|
19498
19505
|
type GetBookingResponseSuccess = components$1["schemas"]["GetBookingResponse"];
|
|
19506
|
+
type ModifyBookingSchema = components$1["schemas"];
|
|
19499
19507
|
type ModifyBookingOptions = components$1["schemas"]["ModifyBookingRequest"];
|
|
19500
19508
|
type ModifyBookingResponseSuccess = components$1["schemas"]["ModifyBookingResponse"];
|
|
19509
|
+
type CheckTicketsSchema = components$1["schemas"];
|
|
19501
19510
|
type CheckTicketsOptions = components$1["schemas"]["CheckTicketsRequest"];
|
|
19502
19511
|
type CheckTicketsResponseSuccess = components$1["schemas"]["CheckTicketsResponse"];
|
|
19512
|
+
type FulfillTicketsSchema = components$1["schemas"];
|
|
19503
19513
|
type FulfillTicketsOptions = components$1["schemas"]["FulfillTicketsRequest"];
|
|
19504
19514
|
type FulfillTicketsResponseSuccess = components$1["schemas"]["FulfillTicketsResponse"];
|
|
19515
|
+
type RefundTicketsSchema = components$1["schemas"];
|
|
19505
19516
|
type RefundTicketsOptions = components$1["schemas"]["RefundTicketsRequest"];
|
|
19506
19517
|
type RefundTicketsResponseSuccess = components$1["schemas"]["RefundTicketsResponse"];
|
|
19518
|
+
type VoidTicketsSchema = components$1["schemas"];
|
|
19507
19519
|
type VoidTicketsOptions = components$1["schemas"]["VoidTicketsRequest"];
|
|
19508
19520
|
type VoidTicketsResponseSuccess = components$1["schemas"]["VoidTicketsResponse"];
|
|
19509
19521
|
|
|
@@ -30408,6 +30420,7 @@ interface components {
|
|
|
30408
30420
|
pathItems: never;
|
|
30409
30421
|
}
|
|
30410
30422
|
|
|
30423
|
+
type CreatePassengerNameRecordSchema = components["schemas"];
|
|
30411
30424
|
type CreatePassengerNameRecordOptions = components["schemas"]["CreatePassengerNameRecordRequest"];
|
|
30412
30425
|
type CreatePassengerNameRecordResponseSuccess = components["schemas"]["CreatePassengerNameRecordResponse"];
|
|
30413
30426
|
|
|
@@ -30454,4 +30467,4 @@ declare class Sabre {
|
|
|
30454
30467
|
private userID;
|
|
30455
30468
|
}
|
|
30456
30469
|
|
|
30457
|
-
export { type BargainFinderMaxOptions, type BargainFinderMaxResponseSuccess, type CancelBookingOptions, type CancelBookingResponseSuccess, type CheckTicketsOptions, type CheckTicketsResponseSuccess, type CreateBookingOptions, type CreateBookingResponseSuccess, type CreatePassengerNameRecordOptions, type CreatePassengerNameRecordResponseSuccess, type CreateTokenRequestOptions, type CreateTokenResponseSuccess, type EnhancedAirTicketOptions, type EnhancedAirTicketResponseSuccess, type FulfillTicketsOptions, type FulfillTicketsResponseSuccess, type GetBookingOptions, type GetBookingResponseSuccess, type ModifyBookingOptions, type ModifyBookingResponseSuccess, type RefundTicketsOptions, type RefundTicketsResponseSuccess, type RevalidateItineraryOptions, type RevalidateItineraryResponseSuccess, Sabre, type VoidTicketsOptions, type VoidTicketsResponseSuccess };
|
|
30470
|
+
export { type BargainFinderMaxOptions, type BargainFinderMaxResponseSuccess, type BargainFinderMaxSchema, type CancelBookingOptions, type CancelBookingResponseSuccess, type CancelBookingSchema, type CheckTicketsOptions, type CheckTicketsResponseSuccess, type CheckTicketsSchema, type CreateBookingOptions, type CreateBookingResponseSuccess, type CreateBookingSchema, type CreatePassengerNameRecordOptions, type CreatePassengerNameRecordResponseSuccess, type CreatePassengerNameRecordSchema, type CreateTokenRequestOptions, type CreateTokenResponseSuccess, type CreateTokenSchema, type EnhancedAirTicketOptions, type EnhancedAirTicketResponseSuccess, type EnhancedAirTicketSchema, type FulfillTicketsOptions, type FulfillTicketsResponseSuccess, type FulfillTicketsSchema, type GetBookingOptions, type GetBookingResponseSuccess, type GetBookingSchema, type ModifyBookingOptions, type ModifyBookingResponseSuccess, type ModifyBookingSchema, type RefundTicketsOptions, type RefundTicketsResponseSuccess, type RefundTicketsSchema, type RevalidateItineraryOptions, type RevalidateItineraryResponseSuccess, type RevalidatedItinerarySchema, Sabre, type VoidTicketsOptions, type VoidTicketsResponseSuccess, type VoidTicketsSchema };
|
package/dist/index.d.ts
CHANGED
|
@@ -14162,10 +14162,13 @@ interface components$3 {
|
|
|
14162
14162
|
pathItems: never;
|
|
14163
14163
|
}
|
|
14164
14164
|
|
|
14165
|
+
type EnhancedAirTicketSchema = components$5["schemas"];
|
|
14165
14166
|
type EnhancedAirTicketOptions = components$5["schemas"]["EnhancedAirTicketRequest"];
|
|
14166
14167
|
type EnhancedAirTicketResponseSuccess = components$5["schemas"]["EnhancedAirTicketResponse"];
|
|
14168
|
+
type BargainFinderMaxSchema = components$3["schemas"];
|
|
14167
14169
|
type BargainFinderMaxOptions = components$3["schemas"]["BargainFinderMaxRequest"];
|
|
14168
14170
|
type BargainFinderMaxResponseSuccess = components$3["schemas"]["GroupedItineraryResponse"];
|
|
14171
|
+
type RevalidatedItinerarySchema = components$4["schemas"];
|
|
14169
14172
|
type RevalidateItineraryOptions = components$4["schemas"]["RevalidateItineraryRequest"];
|
|
14170
14173
|
type RevalidateItineraryResponseSuccess = components$4["schemas"]["GroupedItineraryResponse"];
|
|
14171
14174
|
|
|
@@ -14348,6 +14351,7 @@ interface components$2 {
|
|
|
14348
14351
|
pathItems: never;
|
|
14349
14352
|
}
|
|
14350
14353
|
|
|
14354
|
+
type CreateTokenSchema = components$2["schemas"];
|
|
14351
14355
|
type CreateTokenRequestOptions = never;
|
|
14352
14356
|
type CreateTokenResponseSuccess = components$2["schemas"]["CreateSuccessful"];
|
|
14353
14357
|
|
|
@@ -19490,20 +19494,28 @@ interface components$1 {
|
|
|
19490
19494
|
pathItems: never;
|
|
19491
19495
|
}
|
|
19492
19496
|
|
|
19497
|
+
type CancelBookingSchema = components$1["schemas"];
|
|
19493
19498
|
type CancelBookingOptions = components$1["schemas"]["CancelBookingRequest"];
|
|
19494
19499
|
type CancelBookingResponseSuccess = components$1["schemas"]["CancelBookingResponse"];
|
|
19500
|
+
type CreateBookingSchema = components$1["schemas"];
|
|
19495
19501
|
type CreateBookingOptions = components$1["schemas"]["CreateBookingRequest"];
|
|
19496
19502
|
type CreateBookingResponseSuccess = components$1["schemas"]["CreateBookingResponse"];
|
|
19503
|
+
type GetBookingSchema = components$1["schemas"];
|
|
19497
19504
|
type GetBookingOptions = components$1["schemas"]["GetBookingRequest"];
|
|
19498
19505
|
type GetBookingResponseSuccess = components$1["schemas"]["GetBookingResponse"];
|
|
19506
|
+
type ModifyBookingSchema = components$1["schemas"];
|
|
19499
19507
|
type ModifyBookingOptions = components$1["schemas"]["ModifyBookingRequest"];
|
|
19500
19508
|
type ModifyBookingResponseSuccess = components$1["schemas"]["ModifyBookingResponse"];
|
|
19509
|
+
type CheckTicketsSchema = components$1["schemas"];
|
|
19501
19510
|
type CheckTicketsOptions = components$1["schemas"]["CheckTicketsRequest"];
|
|
19502
19511
|
type CheckTicketsResponseSuccess = components$1["schemas"]["CheckTicketsResponse"];
|
|
19512
|
+
type FulfillTicketsSchema = components$1["schemas"];
|
|
19503
19513
|
type FulfillTicketsOptions = components$1["schemas"]["FulfillTicketsRequest"];
|
|
19504
19514
|
type FulfillTicketsResponseSuccess = components$1["schemas"]["FulfillTicketsResponse"];
|
|
19515
|
+
type RefundTicketsSchema = components$1["schemas"];
|
|
19505
19516
|
type RefundTicketsOptions = components$1["schemas"]["RefundTicketsRequest"];
|
|
19506
19517
|
type RefundTicketsResponseSuccess = components$1["schemas"]["RefundTicketsResponse"];
|
|
19518
|
+
type VoidTicketsSchema = components$1["schemas"];
|
|
19507
19519
|
type VoidTicketsOptions = components$1["schemas"]["VoidTicketsRequest"];
|
|
19508
19520
|
type VoidTicketsResponseSuccess = components$1["schemas"]["VoidTicketsResponse"];
|
|
19509
19521
|
|
|
@@ -30408,6 +30420,7 @@ interface components {
|
|
|
30408
30420
|
pathItems: never;
|
|
30409
30421
|
}
|
|
30410
30422
|
|
|
30423
|
+
type CreatePassengerNameRecordSchema = components["schemas"];
|
|
30411
30424
|
type CreatePassengerNameRecordOptions = components["schemas"]["CreatePassengerNameRecordRequest"];
|
|
30412
30425
|
type CreatePassengerNameRecordResponseSuccess = components["schemas"]["CreatePassengerNameRecordResponse"];
|
|
30413
30426
|
|
|
@@ -30454,4 +30467,4 @@ declare class Sabre {
|
|
|
30454
30467
|
private userID;
|
|
30455
30468
|
}
|
|
30456
30469
|
|
|
30457
|
-
export { type BargainFinderMaxOptions, type BargainFinderMaxResponseSuccess, type CancelBookingOptions, type CancelBookingResponseSuccess, type CheckTicketsOptions, type CheckTicketsResponseSuccess, type CreateBookingOptions, type CreateBookingResponseSuccess, type CreatePassengerNameRecordOptions, type CreatePassengerNameRecordResponseSuccess, type CreateTokenRequestOptions, type CreateTokenResponseSuccess, type EnhancedAirTicketOptions, type EnhancedAirTicketResponseSuccess, type FulfillTicketsOptions, type FulfillTicketsResponseSuccess, type GetBookingOptions, type GetBookingResponseSuccess, type ModifyBookingOptions, type ModifyBookingResponseSuccess, type RefundTicketsOptions, type RefundTicketsResponseSuccess, type RevalidateItineraryOptions, type RevalidateItineraryResponseSuccess, Sabre, type VoidTicketsOptions, type VoidTicketsResponseSuccess };
|
|
30470
|
+
export { type BargainFinderMaxOptions, type BargainFinderMaxResponseSuccess, type BargainFinderMaxSchema, type CancelBookingOptions, type CancelBookingResponseSuccess, type CancelBookingSchema, type CheckTicketsOptions, type CheckTicketsResponseSuccess, type CheckTicketsSchema, type CreateBookingOptions, type CreateBookingResponseSuccess, type CreateBookingSchema, type CreatePassengerNameRecordOptions, type CreatePassengerNameRecordResponseSuccess, type CreatePassengerNameRecordSchema, type CreateTokenRequestOptions, type CreateTokenResponseSuccess, type CreateTokenSchema, type EnhancedAirTicketOptions, type EnhancedAirTicketResponseSuccess, type EnhancedAirTicketSchema, type FulfillTicketsOptions, type FulfillTicketsResponseSuccess, type FulfillTicketsSchema, type GetBookingOptions, type GetBookingResponseSuccess, type GetBookingSchema, type ModifyBookingOptions, type ModifyBookingResponseSuccess, type ModifyBookingSchema, type RefundTicketsOptions, type RefundTicketsResponseSuccess, type RefundTicketsSchema, type RevalidateItineraryOptions, type RevalidateItineraryResponseSuccess, type RevalidatedItinerarySchema, Sabre, type VoidTicketsOptions, type VoidTicketsResponseSuccess, type VoidTicketsSchema };
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/air/search.ts","../src/air/ticketing.ts","../src/authentication/authentication.ts","../src/booking-management/booking.ts","../src/booking-management/flight-tickets.ts","../package.json","../src/config.ts","../src/errors.ts","../src/trip-management/reservation.ts","../src/sabre.ts"],"sourcesContent":["import { Sabre } from \"../sabre\"\nimport { BargainFinderMaxOptions, BargainFinderMaxResponseSuccess, RevalidateItineraryOptions, RevalidateItineraryResponseSuccess } from \"./interfaces\";\n\nexport class Search {\n /**\n * Bargain Finder Max v5\n * \n * Bargain Finder Max (BFM), \n * nuestro producto de búsqueda de tarifas bajas líder en su clase, \n * se utiliza para buscar los itinerarios con los precios más bajos disponibles según una fecha específica.\n * \n * Revalidate Itinerary v5\n * \n * La API Revalidate Itinerary permite volver a consultar la disponibilidad \n * y el precio de una opción de itinerario específica sin tener que reservarla. \n * La solución revalida si la opción de itinerario es válida para la compra. \n * Revalidate Itinerary no admite contenido NDC.\n * \n * @param sabre Sabre Client Reference\n */\n constructor (\n private sabre: Sabre\n ) {}\n\n /**\n * Crear solicitud de Buscador de ofertas Max.\n * \n * payload - El mensaje de solicitud de búsqueda de tarifa baja solicita opciones \n * de itinerario para vuelos entre pares de ciudades específicos, en fechas específicas, \n * para un número y tipo de pasajeros específicos. \n * La información opcional de la solicitud puede incluir: \n * hora/ventana horaria, ciudades de conexión \n * y preferencias del cliente (aerolíneas, cabina, tipo de vuelo, etc.). \n * La solicitud de búsqueda de tarifa baja contiene información similar a \n * la de una búsqueda de tarifa baja en el CRS o GDS de una aerolínea.\n * @param payload BargainFinderMaxOptions \n * @returns {Promise<BargainFinderMaxResponseSuccess>}\n */\n async shop(payload: BargainFinderMaxOptions): Promise<BargainFinderMaxResponseSuccess> {\n const path = \"/v5/offers/shop\";\n return this.sabre.post<BargainFinderMaxResponseSuccess>(path, payload)\n }\n /**\n * Crear solicitud de revalidación de itinerario.\n * \n * payload - El mensaje de solicitud de búsqueda de tarifa baja solicita opciones\n * de itinerario para vuelos entre pares de ciudades específicos, en fechas específicas, \n * para un número y tipo de pasajeros específicos. \n * La información opcional de la solicitud puede incluir: \n * hora/ventana horaria, ciudades de conexión \n * y preferencias del cliente (aerolíneas, cabina, tipo de vuelo, etc.). \n * La solicitud de búsqueda de tarifa baja contiene información similar a \n * la de una búsqueda de tarifa baja en el CRS o GDS de una aerolínea.\n * @param payload RevalidateItineraryOptions\n * @returns {Promise<RevalidateItineraryResponseSuccess>}\n */\n async revalidate(payload: RevalidateItineraryOptions): Promise<RevalidateItineraryResponseSuccess> {\n const path = \"/v5/shop/flights/revalidate\";\n return this.sabre.post<RevalidateItineraryResponseSuccess>(path, payload)\n }\n}","import { Sabre } from \"../sabre\"\nimport { EnhancedAirTicketOptions, EnhancedAirTicketResponseSuccess } from \"./interfaces\";\n\nexport class Ticketing {\n /**\n * Enhanced Air Ticket v1.3.0\n * \n * La API de boletos aéreos mejorados se utiliza para emitir uno o varios boletos aéreos \n * y/o EMD (documentos electrónicos varios) dentro de una sola llamada API.\n * \n * @param sabre Sabre Client Reference\n */\n constructor (\n private sabre: Sabre\n ) {}\n\n /**\n * La API de boletos aéreos mejorados (AirTicketRQ) \n * se utiliza para emitir boletos aéreos y documentos electrónicos varios (EMD) en una sola solicitud.\n * \n * payload - Solicitud de API de boletos aéreos orquestada.\n * @param payload EnhancedAirTicketOptions \n * @returns {Promise<EnhancedAirTicketResponseSuccess>}\n */\n async issue(payload: EnhancedAirTicketOptions): Promise<EnhancedAirTicketResponseSuccess> {\n const path = \"/v1.3.0/air/ticket\";\n return this.sabre.post<EnhancedAirTicketResponseSuccess>(path, payload)\n }\n}","import { Sabre } from \"../sabre\";\nimport { CreateTokenResponseSuccess } from \"./interfaces\";\n\nconst grantType = new URLSearchParams({ 'grant_type': 'client_credentials' }).toString()\n\nexport class Authentication {\n constructor(private readonly sabre: Sabre) {}\n /**\n * OAuth Token Create REST API v2\n * See https://developer.sabre.com/docs/rest_apis/session_management/token_create_api/v2\n * @param payload El tipo de concesión utilizado para obtener el token. Sólo se admiten 'client_credentials'.\n * @returns TokenResponse\n */\n async OAuthTokenV2(\n payload: string = grantType\n ): Promise<CreateTokenResponseSuccess> {\n const data = await this.sabre.auth<CreateTokenResponseSuccess>(\n '/v2/auth/token',\n payload\n );\n this.sabre.setAuthorization(data.access_token)\n return data\n }\n}","import { Sabre } from \"../sabre\"\nimport {\n CancelBookingOptions,\n CancelBookingResponseSuccess,\n CreateBookingOptions,\n CreateBookingResponseSuccess,\n GetBookingOptions,\n GetBookingResponseSuccess,\n ModifyBookingOptions,\n ModifyBookingResponseSuccess,\n} from \"./interfaces\"\n\nexport class Booking {\n /**\n * Booking\n * \n * La API de reservas está diseñada para proporcionar una vista normalizada de una reserva de Sabre combinando el PNR de Sabre y el pedido de Sabre.\n * \n * @param sabre Sabre Client Reference\n */\n constructor (\n private sabre: Sabre\n ) {}\n /**\n * Crea una solicitud que contiene un \"Id. de confirmación\" y un \"apellido\" del viajero para obtener información de la reserva.\n * \n * payload - Contiene elementos tanto obligatorios como opcionales para realizar una solicitud de reserva.\n * @param payload GetBookingOptions\n * @returns {Promise<GetBookingResponseSuccess>}\n */\n get(payload: GetBookingOptions): Promise<GetBookingResponseSuccess>{\n const path = '/v1/trip/orders/getBooking'\n return this.sabre.post<GetBookingResponseSuccess>(path, payload)\n }\n /**\n * Crea una reserva aérea (NDC/ATPCO/LCC).\n * \n * payload - Contiene elementos obligatorios y opcionales para realizar una solicitud de reserva.\n * @param payload CreateBookingOptions\n * @returns {Promise<CreateBookingResponseSuccess>}\n */\n async create(payload: CreateBookingOptions): Promise<CreateBookingResponseSuccess> {\n const path = '/v1/trip/orders/createBooking'\n return this.sabre.post<CreateBookingResponseSuccess>(path, payload)\n }\n /**\n * Crea una lista de elementos de reserva que deben cancelarse.\n * \n * payload - Contiene elementos obligatorios y opcionales para cancelar la totalidad o partes de una reserva.\n * @param payload CancelBookingOptions\n * @returns {Promise<CancelBookingResponseSuccess>}\n */\n async cancel(payload: CancelBookingOptions): Promise<CancelBookingResponseSuccess> {\n const path = '/v1/trip/orders/cancelBooking'\n return this.sabre.post<CancelBookingResponseSuccess>(path, payload)\n }\n /**\n * Crea una lista de elementos de reserva que deben modificarse.\n * \n * payload - Contiene elementos obligatorios y opcionales para modificar datos no relacionados con el itinerario en la reserva existente. \n * @param payload ModifyBookingOptions \n * @returns {Promise<ModifyBookingResponseSuccess>}\n */\n async modify(payload: ModifyBookingOptions): Promise<ModifyBookingResponseSuccess> {\n const path = '/v1/trip/orders/modifyBooking'\n return this.sabre.post<ModifyBookingResponseSuccess>(path, payload)\n }\n\n}","import { Sabre } from \"../sabre\"\nimport {\n CheckTicketsOptions,\n CheckTicketsResponseSuccess,\n FulfillTicketsOptions,\n FulfillTicketsResponseSuccess,\n RefundTicketsOptions,\n RefundTicketsResponseSuccess,\n VoidTicketsOptions,\n VoidTicketsResponseSuccess,\n} from \"./interfaces\"\n\nexport class FlightTickets {\n /**\n * Flight Tickets\n * \n * Los endpoint de Flight Tickets son un conjunto de métodos diseñados para obtener detalles de los billetes y \n * realizar operaciones específicas (anulación/reembolso) sobre ellos.\n * \n * @param sabre Sabre Client Reference\n */\n constructor (\n private sabre: Sabre\n ) {}\n\n /**\n * Procesa tickets proporcionando una solicitud que contiene una lista de números de ticket que se anularán.\n * \n * payload - Contiene elementos obligatorios y opcionales para anular los billetes.\n * @param payload VoidTicketsOptions\n * @returns {Promise<VoidTicketsResponseSuccess>}\n */\n async void(payload: VoidTicketsOptions): Promise<VoidTicketsResponseSuccess> {\n const path = '/v1/trip/orders/voidFlightTickets'\n return this.sabre.post<VoidTicketsResponseSuccess>(path, payload)\n }\n\n /**\n * Procesa los boletos proporcionando una solicitud que contiene una lista de números de boletos que deben reembolsarse. \n * Actualmente, los EMD no son compatibles.\n * \n * payload - Contiene elementos obligatorios y opcionales para el reembolso de los billetes.\n * @param payload RefundTicketsOptions\n * @returns {Promise<RefundTicketsResponseSuccess>}\n */\n async refund(payload: RefundTicketsOptions): Promise<RefundTicketsResponseSuccess> {\n const path = '/v1/trip/orders/refundFlightTickets'\n return this.sabre.post<RefundTicketsResponseSuccess>(path, payload)\n }\n \n /**\n * Procesa tickets proporcionando una solicitud que contiene una lista de números de ticket que se verificarán. \n * Actualmente, los EMD no son compatibles.\n * \n * payload - Contiene elementos obligatorios y opcionales para consultar los tickets.\n * @param payload CheckTicketsOptions\n * @returns {Promise<CheckTicketsResponseSuccess>} CheckTicketsResponse\n */\n async check(payload: CheckTicketsOptions): Promise<CheckTicketsResponseSuccess> {\n const path = '/v1/trip/orders/checkFlightTickets'\n return this.sabre.post<CheckTicketsResponseSuccess>(path, payload)\n }\n\n /**\n * Procesa la emisión de billetes y documentos varios electrónicos (EMD).\n * Actualmente, los EMD no son compatibles.\n * \n * payload - Contiene elementos obligatorios y opcionales para la emisión de billetes.\n * @param payload FulfillTicketsOptions\n * @returns {Promise<FulfillTicketsResponseSuccess>}\n */\n async fulfill(payload: FulfillTicketsOptions): Promise<FulfillTicketsResponseSuccess> {\n const path = '/v1/trip/orders/fulfillFlightTickets'\n return this.sabre.post<FulfillTicketsResponseSuccess>(path, payload)\n }\n}","{\n \"name\": \"sabre-client\",\n \"version\": \"0.2.3\",\n \"description\": \"Sabre Node.js SDK\",\n \"keywords\": [\n \"sabre\",\n \"client\",\n \"devStudio\",\n \"rest\"\n ],\n \"homepage\": \"https://github.com/CarlosIvanSoto/sabre#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/CarlosIvanSoto/sabre/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/CarlosIvanSoto/sabre.git\"\n },\n \"license\": \"MIT\",\n \"author\": \"Carlos Ivan Soto <csoto_99@outlook.com>\",\n \"type\": \"module\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\n \"dist/**\"\n ],\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n }\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"prepublishOnly\": \"npm run build\",\n \"test\": \"jest --passWithNoTests\",\n \"test:watch\": \"jest --watch\",\n \"lint\": \"eslint . --ext .ts --report-unused-disable-directives --max-warnings 0\",\n \"type-check\": \"tsc --noEmit\",\n \"example:auth-atk\": \"node --env-file=.env --import=tsx examples/auth-atk.ts\",\n \"example:search-shop\": \"node --env-file=.env --import=tsx examples/search-shop.ts\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^9.38.0\",\n \"@types/jest\": \"^30.0.0\",\n \"@types/node\": \"^24.8.1\",\n \"eslint\": \"^9.38.0\",\n \"jest\": \"^30.2.0\",\n \"ts-jest\": \"^29.4.5\",\n \"ts-node\": \"^10.9.2\",\n \"tsup\": \"^8.5.0\",\n \"tsx\": \"^4.20.6\",\n \"typescript\": \"^5.9.3\",\n \"typescript-eslint\": \"^8.46.1\"\n }\n}\n","import { version } from '../package.json';\n\nconst defaultBaseUrl = 'https://api.platform.sabre.com';\nconst defaultUserAgent = `sabre-client-node:${version}`;\nconst defaultConversationId = `sabre.client.node:${version}`\nconst defaultDomain = 'AA'\n\nconst baseUrl =\n typeof process !== 'undefined' && process.env\n ? process.env.SABRE_REST_URL || defaultBaseUrl\n : defaultBaseUrl;\n\nconst userAgent =\n typeof process !== 'undefined' && process.env\n ? process.env.SABRE_USER_AGENT || defaultUserAgent\n : defaultUserAgent;\n\nconst domain =\n typeof process !== 'undefined' && process.env\n ? process.env.SABRE_DOMAIN || defaultDomain\n : defaultDomain;\n\nconst conversationId = \n typeof process !== 'undefined' && process.env\n ? process.env.SABRE_CONVERSATION_ID || defaultConversationId\n : defaultConversationId\n \nexport { baseUrl, userAgent, domain, conversationId };","/**\n * Clase de error personalizada para los errores de la API de Sabre.\n * Extiende la clase Error nativa para proporcionar más contexto.\n */\nexport class SabreError extends Error {\n public readonly details: string;\n public readonly statusCode: number;\n\n constructor(message: string, statusCode: number, details: string) {\n super(message);\n this.name = 'SabreError';\n this.statusCode = statusCode;\n this.details = details;\n }\n}","import { Sabre } from \"../sabre\"\nimport { CreatePassengerNameRecordOptions, CreatePassengerNameRecordResponseSuccess } from \"./interfaces\"\n\nexport class Reservation {\n /**\n * Reservation\n * \n * La API para crear un registro de nombre de pasajero es una API \n * orquestada que integra varias funciones y operaciones en una sola llamada.\n * \n * Esta API permite crear un registro de nombre de pasajero (PNR), \n * incluyendo segmentos aéreos, en una sola llamada.\n * \n * @param sabre Sabre Client Reference\n */\n constructor (\n private sabre: Sabre\n ) {}\n /**\n * Cree una reserva completa de contenido aéreo, hotel y automóvil de alquiler, todo dentro de una sola solicitud.\n * \n * payload - Contiene elementos obligatorios y opcionales para realizar una solicitud de reserva.\n * @param payload CreatePassengerNameRecordOptions\n * @returns {Promise<CreatePassengerNameRecordResponseSuccess>}\n */\n create(payload: CreatePassengerNameRecordOptions): Promise<CreatePassengerNameRecordResponseSuccess> {\n const path = '/v2.5.0/passenger/records?mode=create'\n return this.sabre.post<CreatePassengerNameRecordResponseSuccess>(path, payload)\n }\n\n}","import { Search, Ticketing } from \"./air\";\nimport { Authentication } from \"./authentication/authentication\";\nimport { Booking, FlightTickets } from \"./booking-management\";\nimport { PostOptions } from \"./common/interfaces\";\nimport { baseUrl, conversationId, domain, userAgent } from \"./config\";\nimport { SabreError } from \"./errors\";\nimport { SabreOptions } from \"./interfaces\";\nimport { Reservation } from \"./trip-management/reservation\";\n\nexport class Sabre {\n private readonly headers: Headers;\n private readonly secret: string;\n\n readonly authentication = new Authentication(this)\n readonly booking = new Booking(this)\n readonly flightTickets = new FlightTickets(this)\n readonly search = new Search(this)\n readonly ticketing = new Ticketing(this)\n readonly reservation = new Reservation(this)\n\n constructor(private readonly options: SabreOptions = {}) {\n const processEnv = typeof process !== 'undefined' && process.env\n if (!this.options.username && processEnv)\n this.options.username = processEnv.SABRE_USERNAME\n if (!this.options.password && processEnv)\n this.options.password = processEnv.SABRE_PASSWORD\n if (!this.options.organization && processEnv)\n this.options.organization = processEnv.SABRE_ORGANIZATION\n\n if (!this.options.username || !this.options.password || !this.options.organization) {\n throw new Error(`Missing Sabre authorization. Pass it to the constructor new Sabre({\n username: '773400', \n password: 'PASSWORD_GOES_HERE',\n organization: '7TZA', // pcc\n });})`)\n }\n\n this.headers = new Headers({\n 'User-Agent': userAgent,\n 'Conversation-ID': conversationId\n });\n\n this.secret = this.getSecret()\n }\n\n setAuthorization(token: string): void {\n this.headers.set('Authorization', `Bearer ${token}`)\n this.headers.set('Content-Type', 'application/json')\n }\n\n async fetchRequest<T>(\n path: string,\n options = {},\n ): Promise<T> {\n const response = await fetch(`${baseUrl}${path}`, options);\n \n if (!response.ok) {\n let errorDetails = `Request failed with status ${response.status}`;\n try {\n const jsonError = await response.json() as unknown;\n errorDetails = JSON.stringify(jsonError);\n } catch (e) {\n console.error(e)\n errorDetails = response.statusText;\n }\n throw new SabreError(\n `Request failed with status ${response.status}`, \n response.status, \n errorDetails);\n }\n\n const data = await response.json() as T;\n return data;\n }\n async post<T>(path: string, entity?: unknown, options: PostOptions = {}): Promise<T> {\n const requestOptions = {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(entity),\n ...options,\n };\n\n return this.fetchRequest<T>(path, requestOptions);\n }\n\n async auth<T>(path: string, entity?: unknown, options: PostOptions = {}): Promise<T> {\n /**\n * La palabra 'basic' seguida de un EPR codificado en base64 \n * como par base64(base64(V1:usuario:grupo:dominio):base64(contraseña)), \n * p.e. basic VmpFNmRYTmxjbWxrT21keWIzVndPbVJ2YldGcGJnPT06TVRJek5EVT0=\n */\n this.headers.set('Authorization', `Basic ${this.secret}`)\n this.headers.set('Content-Type', 'application/x-www-form-urlencoded')\n\n const requestOptions = {\n method: 'POST',\n headers: this.headers,\n body: entity,\n ...options,\n };\n\n return this.fetchRequest<T>(path, requestOptions);\n }\n\n private getSecret(): string {\n if (!this.options.password) throw new Error('Missing Sabre password')\n return btoa(`${this.userID()}:${btoa(this.options.password)}`)\n }\n private userID(): string {\n return btoa(`V1:${this.options.username}:${this.options.organization}:${domain}`)\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/air/search.ts","../src/air/ticketing.ts","../src/authentication/authentication.ts","../src/booking-management/booking.ts","../src/booking-management/flight-tickets.ts","../package.json","../src/config.ts","../src/errors.ts","../src/trip-management/reservation.ts","../src/sabre.ts"],"sourcesContent":["import { Sabre } from \"../sabre\"\nimport { BargainFinderMaxOptions, BargainFinderMaxResponseSuccess, RevalidateItineraryOptions, RevalidateItineraryResponseSuccess } from \"./interfaces\";\n\nexport class Search {\n /**\n * Bargain Finder Max v5\n * \n * Bargain Finder Max (BFM), \n * nuestro producto de búsqueda de tarifas bajas líder en su clase, \n * se utiliza para buscar los itinerarios con los precios más bajos disponibles según una fecha específica.\n * \n * Revalidate Itinerary v5\n * \n * La API Revalidate Itinerary permite volver a consultar la disponibilidad \n * y el precio de una opción de itinerario específica sin tener que reservarla. \n * La solución revalida si la opción de itinerario es válida para la compra. \n * Revalidate Itinerary no admite contenido NDC.\n * \n * @param sabre Sabre Client Reference\n */\n constructor (\n private sabre: Sabre\n ) {}\n\n /**\n * Crear solicitud de Buscador de ofertas Max.\n * \n * payload - El mensaje de solicitud de búsqueda de tarifa baja solicita opciones \n * de itinerario para vuelos entre pares de ciudades específicos, en fechas específicas, \n * para un número y tipo de pasajeros específicos. \n * La información opcional de la solicitud puede incluir: \n * hora/ventana horaria, ciudades de conexión \n * y preferencias del cliente (aerolíneas, cabina, tipo de vuelo, etc.). \n * La solicitud de búsqueda de tarifa baja contiene información similar a \n * la de una búsqueda de tarifa baja en el CRS o GDS de una aerolínea.\n * @param payload BargainFinderMaxOptions \n * @returns {Promise<BargainFinderMaxResponseSuccess>}\n */\n async shop(payload: BargainFinderMaxOptions): Promise<BargainFinderMaxResponseSuccess> {\n const path = \"/v5/offers/shop\";\n return this.sabre.post<BargainFinderMaxResponseSuccess>(path, payload)\n }\n /**\n * Crear solicitud de revalidación de itinerario.\n * \n * payload - El mensaje de solicitud de búsqueda de tarifa baja solicita opciones\n * de itinerario para vuelos entre pares de ciudades específicos, en fechas específicas, \n * para un número y tipo de pasajeros específicos. \n * La información opcional de la solicitud puede incluir: \n * hora/ventana horaria, ciudades de conexión \n * y preferencias del cliente (aerolíneas, cabina, tipo de vuelo, etc.). \n * La solicitud de búsqueda de tarifa baja contiene información similar a \n * la de una búsqueda de tarifa baja en el CRS o GDS de una aerolínea.\n * @param payload RevalidateItineraryOptions\n * @returns {Promise<RevalidateItineraryResponseSuccess>}\n */\n async revalidate(payload: RevalidateItineraryOptions): Promise<RevalidateItineraryResponseSuccess> {\n const path = \"/v5/shop/flights/revalidate\";\n return this.sabre.post<RevalidateItineraryResponseSuccess>(path, payload)\n }\n}","import { Sabre } from \"../sabre\"\nimport { EnhancedAirTicketOptions, EnhancedAirTicketResponseSuccess } from \"./interfaces\";\n\nexport class Ticketing {\n /**\n * Enhanced Air Ticket v1.3.0\n * \n * La API de boletos aéreos mejorados se utiliza para emitir uno o varios boletos aéreos \n * y/o EMD (documentos electrónicos varios) dentro de una sola llamada API.\n * \n * @param sabre Sabre Client Reference\n */\n constructor (\n private sabre: Sabre\n ) {}\n\n /**\n * La API de boletos aéreos mejorados (AirTicketRQ) \n * se utiliza para emitir boletos aéreos y documentos electrónicos varios (EMD) en una sola solicitud.\n * \n * payload - Solicitud de API de boletos aéreos orquestada.\n * @param payload EnhancedAirTicketOptions \n * @returns {Promise<EnhancedAirTicketResponseSuccess>}\n */\n async issue(payload: EnhancedAirTicketOptions): Promise<EnhancedAirTicketResponseSuccess> {\n const path = \"/v1.3.0/air/ticket\";\n return this.sabre.post<EnhancedAirTicketResponseSuccess>(path, payload)\n }\n}","import { Sabre } from \"../sabre\";\nimport { CreateTokenResponseSuccess } from \"./interfaces\";\n\nconst grantType = new URLSearchParams({ 'grant_type': 'client_credentials' }).toString()\n\nexport class Authentication {\n constructor(private readonly sabre: Sabre) {}\n /**\n * OAuth Token Create REST API v2\n * See https://developer.sabre.com/docs/rest_apis/session_management/token_create_api/v2\n * @param payload El tipo de concesión utilizado para obtener el token. Sólo se admiten 'client_credentials'.\n * @returns TokenResponse\n */\n async OAuthTokenV2(\n payload: string = grantType\n ): Promise<CreateTokenResponseSuccess> {\n const data = await this.sabre.auth<CreateTokenResponseSuccess>(\n '/v2/auth/token',\n payload\n );\n this.sabre.setAuthorization(data.access_token)\n return data\n }\n}","import { Sabre } from \"../sabre\"\nimport {\n CancelBookingOptions,\n CancelBookingResponseSuccess,\n CreateBookingOptions,\n CreateBookingResponseSuccess,\n GetBookingOptions,\n GetBookingResponseSuccess,\n ModifyBookingOptions,\n ModifyBookingResponseSuccess,\n} from \"./interfaces\"\n\nexport class Booking {\n /**\n * Booking\n * \n * La API de reservas está diseñada para proporcionar una vista normalizada de una reserva de Sabre combinando el PNR de Sabre y el pedido de Sabre.\n * \n * @param sabre Sabre Client Reference\n */\n constructor (\n private sabre: Sabre\n ) {}\n /**\n * Crea una solicitud que contiene un \"Id. de confirmación\" y un \"apellido\" del viajero para obtener información de la reserva.\n * \n * payload - Contiene elementos tanto obligatorios como opcionales para realizar una solicitud de reserva.\n * @param payload GetBookingOptions\n * @returns {Promise<GetBookingResponseSuccess>}\n */\n get(payload: GetBookingOptions): Promise<GetBookingResponseSuccess>{\n const path = '/v1/trip/orders/getBooking'\n return this.sabre.post<GetBookingResponseSuccess>(path, payload)\n }\n /**\n * Crea una reserva aérea (NDC/ATPCO/LCC).\n * \n * payload - Contiene elementos obligatorios y opcionales para realizar una solicitud de reserva.\n * @param payload CreateBookingOptions\n * @returns {Promise<CreateBookingResponseSuccess>}\n */\n async create(payload: CreateBookingOptions): Promise<CreateBookingResponseSuccess> {\n const path = '/v1/trip/orders/createBooking'\n return this.sabre.post<CreateBookingResponseSuccess>(path, payload)\n }\n /**\n * Crea una lista de elementos de reserva que deben cancelarse.\n * \n * payload - Contiene elementos obligatorios y opcionales para cancelar la totalidad o partes de una reserva.\n * @param payload CancelBookingOptions\n * @returns {Promise<CancelBookingResponseSuccess>}\n */\n async cancel(payload: CancelBookingOptions): Promise<CancelBookingResponseSuccess> {\n const path = '/v1/trip/orders/cancelBooking'\n return this.sabre.post<CancelBookingResponseSuccess>(path, payload)\n }\n /**\n * Crea una lista de elementos de reserva que deben modificarse.\n * \n * payload - Contiene elementos obligatorios y opcionales para modificar datos no relacionados con el itinerario en la reserva existente. \n * @param payload ModifyBookingOptions \n * @returns {Promise<ModifyBookingResponseSuccess>}\n */\n async modify(payload: ModifyBookingOptions): Promise<ModifyBookingResponseSuccess> {\n const path = '/v1/trip/orders/modifyBooking'\n return this.sabre.post<ModifyBookingResponseSuccess>(path, payload)\n }\n\n}","import { Sabre } from \"../sabre\"\nimport {\n CheckTicketsOptions,\n CheckTicketsResponseSuccess,\n FulfillTicketsOptions,\n FulfillTicketsResponseSuccess,\n RefundTicketsOptions,\n RefundTicketsResponseSuccess,\n VoidTicketsOptions,\n VoidTicketsResponseSuccess,\n} from \"./interfaces\"\n\nexport class FlightTickets {\n /**\n * Flight Tickets\n * \n * Los endpoint de Flight Tickets son un conjunto de métodos diseñados para obtener detalles de los billetes y \n * realizar operaciones específicas (anulación/reembolso) sobre ellos.\n * \n * @param sabre Sabre Client Reference\n */\n constructor (\n private sabre: Sabre\n ) {}\n\n /**\n * Procesa tickets proporcionando una solicitud que contiene una lista de números de ticket que se anularán.\n * \n * payload - Contiene elementos obligatorios y opcionales para anular los billetes.\n * @param payload VoidTicketsOptions\n * @returns {Promise<VoidTicketsResponseSuccess>}\n */\n async void(payload: VoidTicketsOptions): Promise<VoidTicketsResponseSuccess> {\n const path = '/v1/trip/orders/voidFlightTickets'\n return this.sabre.post<VoidTicketsResponseSuccess>(path, payload)\n }\n\n /**\n * Procesa los boletos proporcionando una solicitud que contiene una lista de números de boletos que deben reembolsarse. \n * Actualmente, los EMD no son compatibles.\n * \n * payload - Contiene elementos obligatorios y opcionales para el reembolso de los billetes.\n * @param payload RefundTicketsOptions\n * @returns {Promise<RefundTicketsResponseSuccess>}\n */\n async refund(payload: RefundTicketsOptions): Promise<RefundTicketsResponseSuccess> {\n const path = '/v1/trip/orders/refundFlightTickets'\n return this.sabre.post<RefundTicketsResponseSuccess>(path, payload)\n }\n \n /**\n * Procesa tickets proporcionando una solicitud que contiene una lista de números de ticket que se verificarán. \n * Actualmente, los EMD no son compatibles.\n * \n * payload - Contiene elementos obligatorios y opcionales para consultar los tickets.\n * @param payload CheckTicketsOptions\n * @returns {Promise<CheckTicketsResponseSuccess>} CheckTicketsResponse\n */\n async check(payload: CheckTicketsOptions): Promise<CheckTicketsResponseSuccess> {\n const path = '/v1/trip/orders/checkFlightTickets'\n return this.sabre.post<CheckTicketsResponseSuccess>(path, payload)\n }\n\n /**\n * Procesa la emisión de billetes y documentos varios electrónicos (EMD).\n * Actualmente, los EMD no son compatibles.\n * \n * payload - Contiene elementos obligatorios y opcionales para la emisión de billetes.\n * @param payload FulfillTicketsOptions\n * @returns {Promise<FulfillTicketsResponseSuccess>}\n */\n async fulfill(payload: FulfillTicketsOptions): Promise<FulfillTicketsResponseSuccess> {\n const path = '/v1/trip/orders/fulfillFlightTickets'\n return this.sabre.post<FulfillTicketsResponseSuccess>(path, payload)\n }\n}","{\n \"name\": \"sabre-client\",\n \"version\": \"0.2.4\",\n \"description\": \"Sabre Node.js SDK\",\n \"keywords\": [\n \"sabre\",\n \"client\",\n \"devStudio\",\n \"rest\"\n ],\n \"homepage\": \"https://github.com/CarlosIvanSoto/sabre#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/CarlosIvanSoto/sabre/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/CarlosIvanSoto/sabre.git\"\n },\n \"license\": \"MIT\",\n \"author\": \"Carlos Ivan Soto <csoto_99@outlook.com>\",\n \"type\": \"module\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\n \"dist/**\"\n ],\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n }\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"prepublishOnly\": \"npm run build\",\n \"test\": \"jest --passWithNoTests\",\n \"test:watch\": \"jest --watch\",\n \"lint\": \"eslint . --ext .ts --report-unused-disable-directives --max-warnings 0\",\n \"type-check\": \"tsc --noEmit\",\n \"example:auth-atk\": \"node --env-file=.env --import=tsx examples/auth-atk.ts\",\n \"example:search-shop\": \"node --env-file=.env --import=tsx examples/search-shop.ts\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^9.38.0\",\n \"@types/jest\": \"^30.0.0\",\n \"@types/node\": \"^24.8.1\",\n \"eslint\": \"^9.38.0\",\n \"jest\": \"^30.2.0\",\n \"ts-jest\": \"^29.4.5\",\n \"ts-node\": \"^10.9.2\",\n \"tsup\": \"^8.5.0\",\n \"tsx\": \"^4.20.6\",\n \"typescript\": \"^5.9.3\",\n \"typescript-eslint\": \"^8.46.1\"\n }\n}\n","import { version } from '../package.json';\n\nconst defaultBaseUrl = 'https://api.platform.sabre.com';\nconst defaultUserAgent = `sabre-client-node:${version}`;\nconst defaultConversationId = `sabre.client.node:${version}`\nconst defaultDomain = 'AA'\n\nconst baseUrl =\n typeof process !== 'undefined' && process.env\n ? process.env.SABRE_REST_URL || defaultBaseUrl\n : defaultBaseUrl;\n\nconst userAgent =\n typeof process !== 'undefined' && process.env\n ? process.env.SABRE_USER_AGENT || defaultUserAgent\n : defaultUserAgent;\n\nconst domain =\n typeof process !== 'undefined' && process.env\n ? process.env.SABRE_DOMAIN || defaultDomain\n : defaultDomain;\n\nconst conversationId = \n typeof process !== 'undefined' && process.env\n ? process.env.SABRE_CONVERSATION_ID || defaultConversationId\n : defaultConversationId\n \nexport { baseUrl, userAgent, domain, conversationId };","/**\n * Clase de error personalizada para los errores de la API de Sabre.\n * Extiende la clase Error nativa para proporcionar más contexto.\n */\nexport class SabreError extends Error {\n public readonly details: string;\n public readonly statusCode: number;\n\n constructor(message: string, statusCode: number, details: string) {\n super(message);\n this.name = 'SabreError';\n this.statusCode = statusCode;\n this.details = details;\n }\n}","import { Sabre } from \"../sabre\"\nimport { CreatePassengerNameRecordOptions, CreatePassengerNameRecordResponseSuccess } from \"./interfaces\"\n\nexport class Reservation {\n /**\n * Reservation\n * \n * La API para crear un registro de nombre de pasajero es una API \n * orquestada que integra varias funciones y operaciones en una sola llamada.\n * \n * Esta API permite crear un registro de nombre de pasajero (PNR), \n * incluyendo segmentos aéreos, en una sola llamada.\n * \n * @param sabre Sabre Client Reference\n */\n constructor (\n private sabre: Sabre\n ) {}\n /**\n * Cree una reserva completa de contenido aéreo, hotel y automóvil de alquiler, todo dentro de una sola solicitud.\n * \n * payload - Contiene elementos obligatorios y opcionales para realizar una solicitud de reserva.\n * @param payload CreatePassengerNameRecordOptions\n * @returns {Promise<CreatePassengerNameRecordResponseSuccess>}\n */\n create(payload: CreatePassengerNameRecordOptions): Promise<CreatePassengerNameRecordResponseSuccess> {\n const path = '/v2.5.0/passenger/records?mode=create'\n return this.sabre.post<CreatePassengerNameRecordResponseSuccess>(path, payload)\n }\n\n}","import { Search, Ticketing } from \"./air\";\nimport { Authentication } from \"./authentication/authentication\";\nimport { Booking, FlightTickets } from \"./booking-management\";\nimport { PostOptions } from \"./common/interfaces\";\nimport { baseUrl, conversationId, domain, userAgent } from \"./config\";\nimport { SabreError } from \"./errors\";\nimport { SabreOptions } from \"./interfaces\";\nimport { Reservation } from \"./trip-management/reservation\";\n\nexport class Sabre {\n private readonly headers: Headers;\n private readonly secret: string;\n\n readonly authentication = new Authentication(this)\n readonly booking = new Booking(this)\n readonly flightTickets = new FlightTickets(this)\n readonly search = new Search(this)\n readonly ticketing = new Ticketing(this)\n readonly reservation = new Reservation(this)\n\n constructor(private readonly options: SabreOptions = {}) {\n const processEnv = typeof process !== 'undefined' && process.env\n if (!this.options.username && processEnv)\n this.options.username = processEnv.SABRE_USERNAME\n if (!this.options.password && processEnv)\n this.options.password = processEnv.SABRE_PASSWORD\n if (!this.options.organization && processEnv)\n this.options.organization = processEnv.SABRE_ORGANIZATION\n\n if (!this.options.username || !this.options.password || !this.options.organization) {\n throw new Error(`Missing Sabre authorization. Pass it to the constructor new Sabre({\n username: '773400', \n password: 'PASSWORD_GOES_HERE',\n organization: '7TZA', // pcc\n });})`)\n }\n\n this.headers = new Headers({\n 'User-Agent': userAgent,\n 'Conversation-ID': conversationId\n });\n\n this.secret = this.getSecret()\n }\n\n setAuthorization(token: string): void {\n this.headers.set('Authorization', `Bearer ${token}`)\n this.headers.set('Content-Type', 'application/json')\n }\n\n async fetchRequest<T>(\n path: string,\n options = {},\n ): Promise<T> {\n const response = await fetch(`${baseUrl}${path}`, options);\n \n if (!response.ok) {\n let errorDetails = `Request failed with status ${response.status}`;\n try {\n const jsonError = await response.json() as unknown;\n errorDetails = JSON.stringify(jsonError);\n } catch (e) {\n console.error(e)\n errorDetails = response.statusText;\n }\n throw new SabreError(\n `Request failed with status ${response.status}`, \n response.status, \n errorDetails);\n }\n\n const data = await response.json() as T;\n return data;\n }\n async post<T>(path: string, entity?: unknown, options: PostOptions = {}): Promise<T> {\n const requestOptions = {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(entity),\n ...options,\n };\n\n return this.fetchRequest<T>(path, requestOptions);\n }\n\n async auth<T>(path: string, entity?: unknown, options: PostOptions = {}): Promise<T> {\n /**\n * La palabra 'basic' seguida de un EPR codificado en base64 \n * como par base64(base64(V1:usuario:grupo:dominio):base64(contraseña)), \n * p.e. basic VmpFNmRYTmxjbWxrT21keWIzVndPbVJ2YldGcGJnPT06TVRJek5EVT0=\n */\n this.headers.set('Authorization', `Basic ${this.secret}`)\n this.headers.set('Content-Type', 'application/x-www-form-urlencoded')\n\n const requestOptions = {\n method: 'POST',\n headers: this.headers,\n body: entity,\n ...options,\n };\n\n return this.fetchRequest<T>(path, requestOptions);\n }\n\n private getSecret(): string {\n if (!this.options.password) throw new Error('Missing Sabre password')\n return btoa(`${this.userID()}:${btoa(this.options.password)}`)\n }\n private userID(): string {\n return btoa(`V1:${this.options.username}:${this.options.organization}:${domain}`)\n }\n}\n"],"mappings":"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","names":[]}
|