UNPKG

sabre-client

Version:
231 lines (225 loc) 8.2 kB
// src/authentication/authentication.ts var grantType = new URLSearchParams({ "grant_type": "client_credentials" }).toString(); var Authentication = class { constructor(sabre) { this.sabre = sabre; } /** * V2 AUTH TOKEN * See https://developer.sabre.com/docs/rest_apis/session_management/token_create_api/v2 * @param payload El tipo de concesión utilizado para obtener el token. Sólo se admiten 'client_credentials'. * @param options CreateTokenRequestOptions * @returns TokenResponse */ async OAuthTokenV2(payload = grantType, options = {}) { const data = await this.sabre.auth( "/v2/auth/token", payload, options ); this.sabre.setAuthorization(data.access_token); return data; } }; // src/booking-management/booking/booking.ts var Booking = class { /** * Booking * * 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. * * @param sabre Sabre Client Reference */ constructor(sabre) { this.sabre = sabre; } /** * Crea una solicitud que contiene un "Id. de confirmación" y un "apellido" del viajero para obtener información de la reserva. * * payload - Contiene elementos tanto obligatorios como opcionales para realizar una solicitud de reserva. * @param payload GetBookingOptions * @returns GetBookingResponse */ async get(payload) { const path = "/v1/trip/orders/getBooking"; return this.sabre.post(path, payload); } /** * Crea una reserva aérea (NDC/ATPCO/LCC). * * payload - Contiene elementos obligatorios y opcionales para realizar una solicitud de reserva. * @param payload CreateBookingOptions * @returns CreateBookingResponse */ async create(payload) { const path = "/v1/trip/orders/createBooking"; return this.sabre.post(path, payload); } /** * Crea una lista de elementos de reserva que deben cancelarse. * * payload - Contiene elementos obligatorios y opcionales para cancelar la totalidad o partes de una reserva. * @param payload CancelBookingOptions * @returns CancelBookingRequest */ async cancel(payload) { const path = "/v1/trip/orders/cancelBooking"; return this.sabre.post(path, payload); } /** * Crea una lista de elementos de reserva que deben modificarse. * * payload - Contiene elementos obligatorios y opcionales para modificar datos no relacionados con el itinerario en la reserva existente. * @param payload ModifyBookingOptions * @returns ModifyBookingResponse */ async modify(payload) { const path = "/v1/trip/orders/modifyBooking"; return this.sabre.post(path, payload); } }; // src/booking-management/flight-tickets/flight-tickets.ts var FlightTickets = class { /** * Flight Tickets * * Los endpoint de Flight Tickets son un conjunto de métodos diseñados para obtener detalles de los billetes y * realizar operaciones específicas (anulación/reembolso) sobre ellos. * * @param sabre Sabre Client Reference */ constructor(sabre) { this.sabre = sabre; } /** * Procesa tickets proporcionando una solicitud que contiene una lista de números de ticket que se anularán. * * payload - Contiene elementos obligatorios y opcionales para anular los billetes. * @param payload VoidTicketsOptions * @returns VoidTicketsResponse */ async void(payload) { const path = "/v1/trip/orders/voidFlightTickets"; return this.sabre.post(path, payload); } /** * Procesa los boletos proporcionando una solicitud que contiene una lista de números de boletos que deben reembolsarse. * Actualmente, los EMD no son compatibles. * * payload - Contiene elementos obligatorios y opcionales para el reembolso de los billetes. * @param payload RefundTicketsOptions * @returns RefundTicketsResponse */ async refund(payload) { const path = "/v1/trip/orders/refundFlightTickets"; return this.sabre.post(path, payload); } /** * Procesa tickets proporcionando una solicitud que contiene una lista de números de ticket que se verificarán. * Actualmente, los EMD no son compatibles. * * payload - Contiene elementos obligatorios y opcionales para consultar los tickets. * @param payload CheckTicketsOptions * @returns CheckTicketsResponse */ async check(payload) { const path = "/v1/trip/orders/checkFlightTickets"; return this.sabre.post(path, payload); } /** * Procesa tickets proporcionando una solicitud que contiene una lista de números de ticket que se verificarán. * Actualmente, los EMD no son compatibles. * * payload - Contiene elementos obligatorios y opcionales para consultar los tickets. * @param payload CheckTicketsOptions * @returns CheckTicketsResponse */ async fulfill(payload) { const path = "/v1/trip/orders/fulfillFlightTickets"; return this.sabre.post(path, payload); } }; // package.json var version = "0.1.0"; // src/config.ts var defaultBaseUrl = "https://api.platform.sabre.com"; var defaultUserAgent = `sabre-client-node:${version}`; var defaultConversationId = `sabre.client.node:${version}`; var defaultDomain = "AA"; var baseUrl = typeof process !== "undefined" && process.env ? process.env.SABRE_REST_URL || defaultBaseUrl : defaultBaseUrl; var userAgent = typeof process !== "undefined" && process.env ? process.env.SABRE_USER_AGENT || defaultUserAgent : defaultUserAgent; var domain = typeof process !== "undefined" && process.env ? process.env.SABRE_DOMAIN || defaultDomain : defaultDomain; var conversationId = typeof process !== "undefined" && process.env ? process.env.SABRE_CONVERSATION_ID || defaultConversationId : defaultConversationId; // src/sabre.ts var Sabre = class { constructor(options = {}) { this.options = options; const processEnv = typeof process !== "undefined" && process.env; if (!this.options.username && processEnv) this.options.username = processEnv.SABRE_USERNAME; if (!this.options.password && processEnv) this.options.password = processEnv.SABRE_PASSWORD; if (!this.options.organization && processEnv) this.options.organization = processEnv.SABRE_ORGANIZATION; if (!this.options.username || !this.options.password || !this.options.organization) { throw new Error(`Missing Sabre authorization. Pass it to the constructor new Sabre({ username: '773400', password: 'PASSWORD_GOES_HERE', organization: '7TZA', // pcc });})`); } this.headers = new Headers({ "User-Agent": userAgent, "Conversation-ID": conversationId }); this.secret = this.getSecret(); } headers; secret; authentication = new Authentication(this); booking = new Booking(this); flightTickets = new FlightTickets(this); setAuthorization(token) { this.headers.set("Authorization", `Bearer ${token}`); this.headers.set("Content-Type", "application/json"); } async fetchRequest(path, options = {}) { const response = await fetch(`${baseUrl}${path}`, options); if (!response.ok) { const error = await response.json(); throw new Error(JSON.stringify(error)); } const data = await response.json(); return data; } async post(path, entity, options = {}) { const requestOptions = { method: "POST", headers: this.headers, body: JSON.stringify(entity), ...options }; return this.fetchRequest(path, requestOptions); } async auth(path, entity, options = {}) { this.headers.set("Authorization", `Basic ${this.secret}`); this.headers.set("Content-Type", "application/x-www-form-urlencoded"); const requestOptions = { method: "POST", headers: this.headers, body: entity, ...options }; return this.fetchRequest(path, requestOptions); } getSecret() { if (!this.options.password) throw new Error("Missing Sabre password"); return btoa(`${this.userID()}:${btoa(this.options.password)}`); } userID() { return btoa(`V1:${this.options.username}:${this.options.organization}:${domain}`); } }; export { Sabre };