sabre-client 0.2.2 → 0.2.3

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 CHANGED
@@ -253,7 +253,7 @@ var FlightTickets = class {
253
253
  };
254
254
 
255
255
  // package.json
256
- var version = "0.2.1";
256
+ var version = "0.2.3";
257
257
 
258
258
  // src/config.ts
259
259
  var defaultBaseUrl = "https://api.platform.sabre.com";
@@ -394,3 +394,4 @@ var Sabre = class {
394
394
  0 && (module.exports = {
395
395
  Sabre
396
396
  });
397
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +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":[]}
package/dist/index.js CHANGED
@@ -227,7 +227,7 @@ var FlightTickets = class {
227
227
  };
228
228
 
229
229
  // package.json
230
- var version = "0.2.1";
230
+ var version = "0.2.3";
231
231
 
232
232
  // src/config.ts
233
233
  var defaultBaseUrl = "https://api.platform.sabre.com";
@@ -367,3 +367,4 @@ var Sabre = class {
367
367
  export {
368
368
  Sabre
369
369
  };
370
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sabre-client",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "description": "Sabre Node.js SDK",
5
5
  "keywords": [
6
6
  "sabre",
@@ -19,26 +19,21 @@
19
19
  "license": "MIT",
20
20
  "author": "Carlos Ivan Soto <csoto_99@outlook.com>",
21
21
  "type": "module",
22
- "main": "./dist/index.js",
23
- "module": "./dist/index.mjs",
22
+ "main": "./dist/index.cjs",
23
+ "module": "./dist/index.js",
24
24
  "types": "./dist/index.d.ts",
25
25
  "files": [
26
26
  "dist/**"
27
27
  ],
28
28
  "exports": {
29
29
  ".": {
30
- "import": {
31
- "types": "./dist/index.d.ts",
32
- "default": "./dist/index.mjs"
33
- },
34
- "require": {
35
- "types": "./dist/index.d.ts",
36
- "default": "./dist/index.js"
37
- }
30
+ "import": "./dist/index.js",
31
+ "require": "./dist/index.cjs"
38
32
  }
39
33
  },
40
34
  "scripts": {
41
- "build": "tsup src/index.ts --format esm,cjs --dts",
35
+ "build": "tsup",
36
+ "prepublishOnly": "npm run build",
42
37
  "test": "jest --passWithNoTests",
43
38
  "test:watch": "jest --watch",
44
39
  "lint": "eslint . --ext .ts --report-unused-disable-directives --max-warnings 0",