sabre-client 0.5.0 → 0.6.0
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/README.es.md +70 -11
- package/README.md +70 -11
- package/dist/anonymize.d.ts +54 -0
- package/dist/anonymize.js +111 -0
- package/dist/anonymize.js.map +1 -0
- package/dist/index.d.ts +61 -10
- package/dist/index.js +82 -17
- package/dist/index.js.map +1 -1
- package/dist/{reservation-history-bKDqkf8T.d.ts → reservation-history-C6giSdFd.d.ts} +33 -3
- package/dist/testing.d.ts +20 -57
- package/dist/testing.js +423 -24
- package/dist/testing.js.map +1 -1
- package/package.json +5 -1
|
@@ -647,10 +647,33 @@ interface RequestOptions {
|
|
|
647
647
|
type QueueRef = number | string | {
|
|
648
648
|
name: string;
|
|
649
649
|
};
|
|
650
|
+
/** La cola de mensajes del PCC: no tiene PNR y Sabre no la lista (`INVALID ENTRY`). */
|
|
651
|
+
declare const MESSAGE_QUEUE = "S";
|
|
652
|
+
/**
|
|
653
|
+
* Un rango de colas numéricas, de `start` a `end`, las dos incluidas: `{ start: 1, end: 25 }` es el
|
|
654
|
+
* `QC/<PCC>1-25` del host. Lo usan `count` y `activity`. A diferencia de pedir todo el PCC, Sabre
|
|
655
|
+
* devuelve cada cola del rango, también las vacías, con cuenta `0` (CERT y producción, #213).
|
|
656
|
+
*
|
|
657
|
+
* El design también acepta rangos de colas con nombre (`TEST1-TEST2`), pero ninguna prueba los vio:
|
|
658
|
+
* por ahora solo van números.
|
|
659
|
+
*/
|
|
660
|
+
interface QueueRange {
|
|
661
|
+
start: number;
|
|
662
|
+
end: number;
|
|
663
|
+
}
|
|
664
|
+
/** Si la cola es la de mensajes (`'S'`). */
|
|
665
|
+
declare function isMessageQueue(queue: QueueRef): boolean;
|
|
650
666
|
|
|
651
667
|
interface QueueActivityRequest {
|
|
652
668
|
/** PCC cuyas colas se analizan. Por defecto, el de la sesión. */
|
|
653
669
|
pcc?: string;
|
|
670
|
+
/** Analizar solo esta cola (`QA/<PCC><cola>`). No se combina con `range`. */
|
|
671
|
+
queue?: QueueRef;
|
|
672
|
+
/**
|
|
673
|
+
* Analizar un rango de colas (`QA/<PCC>1-25`). No se combina con `queue`. La respuesta trae cada
|
|
674
|
+
* cola del rango, también las que tienen todos los contadores en 0.
|
|
675
|
+
*/
|
|
676
|
+
range?: QueueRange;
|
|
654
677
|
}
|
|
655
678
|
type QueueActivityOptions = RequestOptions;
|
|
656
679
|
/**
|
|
@@ -682,9 +705,16 @@ interface QueueActivity extends QueueActivityCounters {
|
|
|
682
705
|
queue: QueueRef;
|
|
683
706
|
}
|
|
684
707
|
interface QueueActivityResponse {
|
|
685
|
-
/**
|
|
708
|
+
/**
|
|
709
|
+
* Las colas que trae la respuesta, en el orden de Sabre. Sin filtros, Sabre omite las que tienen
|
|
710
|
+
* todos los contadores en 0; con `range`, trae todas las del rango, y con `queue`, solo esa
|
|
711
|
+
* (CERT y producción, #213).
|
|
712
|
+
*/
|
|
686
713
|
queues: QueueActivity[];
|
|
687
|
-
/**
|
|
714
|
+
/**
|
|
715
|
+
* `Totals`: los ocho contadores sumados para el PCC, o para el rango con `range`. Con `queue`,
|
|
716
|
+
* Sabre no manda `Totals` y queda en `undefined` (#213).
|
|
717
|
+
*/
|
|
688
718
|
totals?: QueueActivityCounters;
|
|
689
719
|
/**
|
|
690
720
|
* `QueueInfo@DateTime` tal cual llegó, sin año (`"11-06T11:33"`): la hora del host al analizar.
|
|
@@ -785,4 +815,4 @@ interface ReservationHistoryResponse {
|
|
|
785
815
|
respondedAt?: string;
|
|
786
816
|
}
|
|
787
817
|
|
|
788
|
-
export { type
|
|
818
|
+
export { type PassengerTotalFare as $, type ItineraryMessage as A, type BargainFinderMaxRequest as B, type CurrencyConversion as C, type LegDesc as D, type LegDescription as E, type Fare as F, type GroupedItineraryResponse as G, type LegSchedule as H, type ItineraryGroup as I, type LegScheduleRef as J, type LowFareSearchFlight as K, type Leg as L, type LowFareSearchLocation as M, type LowFareSearchOriginDestination as N, type OtaAirLowFareSearchRq as O, type LowFareSearchPassengerTypeQuantity as P, type QueueRef as Q, type ReservationHistoryTransaction as R, SabreError as S, type LowFareSearchRequestorId as T, type LowFareSearchSource as U, type LowFareSearchTpaExtensions as V, type LowFareSearchTravelPreferences as W, type LowFareSearchTravelerInfoSummary as X, MESSAGE_QUEUE as Y, type ObFeeDesc as Z, type PassengerInfo as _, type QueueActivityCounters as a, type PricingInformation as a0, type QueueActivity as a1, type Ref as a2, type SabreBusinessErrorOptions as a3, type SabreErrorOptions as a4, SabreGatewayError as a5, type SabreGatewayErrorOptions as a6, SabreOrchestrationError as a7, type SabreOrchestrationErrorOptions as a8, type SabreProtocol as a9, type SabreRawRequest as aa, type SabreRawResponse as ab, type SabreServiceErrorOptions as ac, SabreSessionError as ad, type SabreSessionErrorKind as ae, type SabreSessionErrorOptions as af, type ScheduleCarrier as ag, type ScheduleDesc as ah, type ScheduleEndpoint as ai, type ScheduleEquipment as aj, type TaxDesc as ak, type TaxSummaryDesc as al, type TotalFare as am, type ValidatingCarrierDesc as an, isMessageQueue as ao, type ReservationHistoryFlightSegment as b, type ReservationHistoryText as c, type ReservationHistoryAccounting as d, type RetryOptions as e, type SabreRawResponseCallback as f, type SabreRawRequestCallback as g, SabreWarning as h, SabreBusinessError as i, type Itinerary as j, type RequestOptions as k, type BargainFinderMaxResponse as l, type QueueRange as m, type QueueActivityRequest as n, type QueueActivityOptions as o, type QueueActivityResponse as p, type ReservationHistoryOptions as q, type ReservationHistoryResponse as r, type BaggageAllowanceDesc as s, type BaggageInformation as t, type FareComponent as u, type FareComponentDesc as v, type FareComponentDescSegment as w, type FareComponentSegment as x, type FareComponentSegmentDetail as y, type FareMessage as z };
|
package/dist/testing.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { Q as QueueRef,
|
|
1
|
+
import { Q as QueueRef, a as QueueActivityCounters, R as ReservationHistoryTransaction, b as ReservationHistoryFlightSegment, c as ReservationHistoryText, d as ReservationHistoryAccounting } from './reservation-history-C6giSdFd.js';
|
|
2
|
+
export { Anonymizer, AnonymizerLeak, AnonymizerOptions, createAnonymizer, isSafeHostLine } from './anonymize.js';
|
|
2
3
|
|
|
3
4
|
/** Un PNR del fake, con los campos que Sabre manda en `Line`. */
|
|
4
5
|
interface QueueFakePnr {
|
|
@@ -7,12 +8,14 @@ interface QueueFakePnr {
|
|
|
7
8
|
/**
|
|
8
9
|
* Las líneas del PNR en formato de host, como el `Paragraph` de Access Queue. Si no termina en
|
|
9
10
|
* una línea de firma (`… HHMM/DDMMMYY <localizador> H`), el fake agrega una: `place` dentro de
|
|
10
|
-
* una cola saca el localizador de ahí, igual que con Sabre.
|
|
11
|
+
* una cola saca el localizador de ahí, igual que con Sabre. `selection` `AL` y `AC` filtran por
|
|
12
|
+
* los segmentos del párrafo, y `PI` por su aviso de PIC (`011 SEE REMARKS`), como los lee
|
|
13
|
+
* `parseQueueParagraph`.
|
|
11
14
|
*/
|
|
12
15
|
paragraph?: readonly string[];
|
|
13
|
-
/** `Line/DateTime`, tal cual. */
|
|
16
|
+
/** `Line/DateTime`, tal cual. Es la fecha por la que filtra `selection` `QD`. */
|
|
14
17
|
placedAt?: string;
|
|
15
|
-
/** `Line/POS/Source`. */
|
|
18
|
+
/** `Line/POS/Source`. `selection` `AK` filtra por el PCC más la firma (`'ABCDAAT'`). */
|
|
16
19
|
placedBy?: {
|
|
17
20
|
agentSine?: string;
|
|
18
21
|
pseudoCityCode?: string;
|
|
@@ -95,60 +98,13 @@ interface QueueFake {
|
|
|
95
98
|
*/
|
|
96
99
|
expireSessions(): void;
|
|
97
100
|
}
|
|
98
|
-
declare function createQueueFake(options?: QueueFakeOptions): QueueFake;
|
|
99
|
-
|
|
100
|
-
/** Qué dato real quedó en un texto: lo que devuelve `Anonymizer.leaks`. */
|
|
101
|
-
type AnonymizerLeak = 'secreto' | 'localizador' | 'nombre' | 'línea del PNR' | 'token';
|
|
102
|
-
interface AnonymizerOptions {
|
|
103
|
-
/**
|
|
104
|
-
* Valores que nunca deben quedar: credenciales, usuario, PCC. Cada uno pasa a `XXXX` donde
|
|
105
|
-
* aparezca. Se ignoran los que no son string o tienen menos de 3 caracteres.
|
|
106
|
-
*/
|
|
107
|
-
secrets?: ReadonlyArray<string | undefined>;
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Una anonimización con memoria: el mismo localizador da siempre el mismo alias y el mismo
|
|
111
|
-
* pasajero el mismo nombre falso, en todos los textos que pasen por ella. Una por grabación.
|
|
112
|
-
*/
|
|
113
|
-
interface Anonymizer {
|
|
114
|
-
/**
|
|
115
|
-
* Un sobre SOAP o cualquier texto con su XML (también un JSON con XML adentro):
|
|
116
|
-
* - cada `UniqueID@ID` pasa a un alias (`AAAAAA`, `AAAAAB`…), y el localizador real se reemplaza
|
|
117
|
-
* por su alias en todo el texto;
|
|
118
|
-
* - `PassengerName` a `PASAJERO/UNO`, `PASAJERO/DOS`…, y `Group` a `GRUPO`;
|
|
119
|
-
* - `AgentSine` a `AAA` (salvo `SABRE`), `PseudoCityCode` a `XXXX` y `LNIATA` a `XXXXXX`;
|
|
120
|
-
* - cada `<Text>` pasa por `maskLine`;
|
|
121
|
-
* - los `secrets`, a `XXXX`.
|
|
122
|
-
*/
|
|
123
|
-
anonymize(text: string): string;
|
|
124
|
-
/**
|
|
125
|
-
* Una línea del PNR en formato de host. Las de la lista blanca (`isSafeHostLine`) quedan tal
|
|
126
|
-
* cual; en las demás, letras a `X` y dígitos a `9`. La cabecera `QUEUE LIST FOR <PCC>` solo
|
|
127
|
-
* tapa el PCC, y `RECEIVED FROM - ` conserva el prefijo. La línea de firma
|
|
128
|
-
* (`… HHMM/DDMMMYY <localizador> H`) conserva su forma, y el localizador solo si ya es un alias:
|
|
129
|
-
* de ella sale el localizador del PNR siguiente en `place` dentro de una cola. Llamarla después
|
|
130
|
-
* de dar alias a los localizadores.
|
|
131
|
-
*/
|
|
132
|
-
maskLine(line: string): string;
|
|
133
|
-
/** `maskLine` sobre cada línea de un párrafo, p. ej. `QueueItem.paragraph`. */
|
|
134
|
-
maskParagraph(lines: readonly string[]): string[];
|
|
135
|
-
/** El alias de un localizador: lo asigna la primera vez, en orden (`AAAAAA`, `AAAAAB`…). */
|
|
136
|
-
aliasOf(locator: string): string;
|
|
137
|
-
/**
|
|
138
|
-
* Qué datos reales siguen en `text`, sin repetir: un `secret`, un localizador o un nombre que ya
|
|
139
|
-
* tienen alias, una línea del PNR que se enmascaró, o un token de sesión. Vacío si no queda
|
|
140
|
-
* ninguno. Sirve para no escribir una fixture que todavía trae datos reales.
|
|
141
|
-
*/
|
|
142
|
-
leaks(text: string): AnonymizerLeak[];
|
|
143
|
-
}
|
|
144
101
|
/**
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
* de
|
|
102
|
+
* Las funciones de `selection` que simula el fake (#202). En `list`, Sabre acepta solo `QD` y `AK`
|
|
103
|
+
* (producción, #155); en `access` y `count`, cualquiera (#213), pero el fake simula solo estas.
|
|
104
|
+
* Las demás dan un error de host marcado como no simulado.
|
|
148
105
|
*/
|
|
149
|
-
declare
|
|
150
|
-
|
|
151
|
-
declare function createAnonymizer(options?: AnonymizerOptions): Anonymizer;
|
|
106
|
+
declare const QUEUE_FAKE_SELECTION_FUNCTIONS: readonly ["QD", "AK", "AL", "PI", "AC"];
|
|
107
|
+
declare function createQueueFake(options?: QueueFakeOptions): QueueFake;
|
|
152
108
|
|
|
153
109
|
/** Una respuesta grabada: la operación del SDK, el HTTP status y el sobre SOAP tal cual llegó. */
|
|
154
110
|
interface RecordedResponse {
|
|
@@ -176,6 +132,9 @@ interface RecordedFixture {
|
|
|
176
132
|
* - `place`: `place` fuera y dentro de una cola, y `remove` hasta el fin de cola;
|
|
177
133
|
* - `placeWithoutInstructionCode` y `placeWithoutInstructionCodeInside`: `place` sin PIC, fuera
|
|
178
134
|
* (`INSTRUCTION NUMBER NOT IN RANGE`) y dentro de una cola (`NEED INSTRUCTION NUMBER`).
|
|
135
|
+
*
|
|
136
|
+
* El `list` de `walk` se grabó sin `primaryPassenger: true` (sin `/LN`), así que ningún `Line`
|
|
137
|
+
* trae `PassengerName` (#193).
|
|
179
138
|
*/
|
|
180
139
|
declare const queueFixtures: Readonly<{
|
|
181
140
|
walk: RecordedFixture;
|
|
@@ -193,6 +152,10 @@ declare const queueFixtures: Readonly<{
|
|
|
193
152
|
* - `placedAt`, `placedBy` y `primaryPassenger` salen del `Line` de `list`. Si el PNR no está en la
|
|
194
153
|
* lista, salen del `Line` del primer `access`, `ignore` o `remove` que lo trae (ahí `placedAt` es
|
|
195
154
|
* la última modificación del PNR, no su colocación en la cola).
|
|
155
|
+
* - `primaryPassenger` solo sale si el `Line` trae `PassengerName`, y Sabre solo lo manda en un
|
|
156
|
+
* `list` con `primaryPassenger: true` (`/LN`). Las fixtures de `queueFixtures` se grabaron sin
|
|
157
|
+
* `/LN`, así que sus PNR van sin pasajero. Si el consumidor necesita uno, lo agrega con un
|
|
158
|
+
* `map`; el helper no inventa datos que la grabación no tiene (#193).
|
|
196
159
|
* - `paragraph` es el del primer `access`, `ignore`, `remove` o `place` que muestra el PNR, tal
|
|
197
160
|
* cual. El localizador del párrafo sale del `Line`, o de la línea de firma si no hay `Line`
|
|
198
161
|
* (`place` dentro de una cola).
|
|
@@ -211,4 +174,4 @@ declare const queueFixtures: Readonly<{
|
|
|
211
174
|
*/
|
|
212
175
|
declare function queueFakePnrs(fixture: RecordedFixture): QueueFakePnr[];
|
|
213
176
|
|
|
214
|
-
export {
|
|
177
|
+
export { QUEUE_FAKE_SELECTION_FUNCTIONS, type QueueFake, type QueueFakeActivity, type QueueFakeCall, type QueueFakeCommand, type QueueFakeHistoryTransaction, type QueueFakeItem, type QueueFakeOptions, type QueueFakePnr, type RecordedFixture, type RecordedResponse, createQueueFake, queueFakePnrs, queueFixtures };
|