sabre-client
Version:
Sabre Node.js SDK
231 lines (225 loc) • 8.2 kB
JavaScript
// 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
};