@findhotel/sapi
Advanced tools
Comparing version 0.23.5 to 0.23.6
@@ -0,1 +1,7 @@ | ||
## [0.23.6](https://github.com/FindHotel/sapi/compare/v0.23.5...v0.23.6) (2022-03-21) | ||
### Added | ||
- `hotel()` method to get complete hotel information by hotelId | ||
- `sapiOverride` parameter | ||
## [0.23.5](https://github.com/FindHotel/sapi/compare/v0.23.4...v0.23.5) (2022-03-04) | ||
@@ -2,0 +8,0 @@ ### Added |
@@ -6,3 +6,3 @@ import { ProfileKey, IndexVariation } from './types'; | ||
export declare const PRICE_BUCKET_COUNT = 31; | ||
declare type Features = 'offers' | 'search' | 'suggests' | 'configs' | 'rooms'; | ||
export declare type Features = 'offers' | 'search' | 'suggests' | 'configs' | 'rooms' | 'get-hotel'; | ||
export interface AppConfig { | ||
@@ -24,2 +24,3 @@ daedalus: { | ||
search: string; | ||
hotel: string; | ||
}; | ||
@@ -43,2 +44,1 @@ }; | ||
export declare function getAppConfig(profileKey: ProfileKey, initWithAppConfig?: Partial<AppConfig>): AppConfig; | ||
export {}; |
import { Base, ProfileKey } from '.'; | ||
import { SearchResults, SearchFn, SearchFnParameters } from './search'; | ||
import { SearchResults, SearchHandler, SearchFnParameters } from './search'; | ||
import { SearchParameters } from './types'; | ||
@@ -13,3 +13,3 @@ declare type AttributesToRetrieve = keyof SearchResults; | ||
export declare function createRequestString({ profileKey, searchParameters, options, offset, attributes }: RequestParameters): string; | ||
export declare function backendSearch({ getFeatureEnabled, profileKey, appConfig, offersClient, options }: SearchFnParameters): SearchFn; | ||
export declare function backendSearch({ getFeatureEnabled, profileKey, appConfig, offersClient, options }: SearchFnParameters): SearchHandler; | ||
export {}; |
import { BaseWithConfig } from '.'; | ||
import { RoomsRequestParameters, RoomsRequestOptions, RoomsResults } from './types'; | ||
export declare type RoomsFn = (parameters: RoomsRequestParameters) => Promise<RoomsResults>; | ||
export declare type RoomsHandler = (parameters: RoomsRequestParameters) => Promise<RoomsResults>; | ||
/** | ||
@@ -8,3 +8,3 @@ * Creates rooms request string. | ||
* @param parameters - Rooms request parameters - dynamic parameters that change search | ||
* @param options - Rooms request options - persistent within single SAPI instance | ||
* @param options - Rooms request options - persistent within single SAPI instance | ||
* | ||
@@ -42,2 +42,2 @@ * @returns request string | ||
*/ | ||
export declare function rooms({ appConfig, options }: Pick<BaseWithConfig, 'options' | 'appConfig'>): RoomsFn; | ||
export declare function rooms({ appConfig, options }: Pick<BaseWithConfig, 'options' | 'appConfig'>): RoomsHandler; |
@@ -5,4 +5,4 @@ import { SearchClient } from 'algoliasearch'; | ||
import { Configs } from './algolia'; | ||
import { AppConfig } from './app-config'; | ||
import { ProfileKey, ClientOptions, SapiClient, SapiFeature, Language, Logger } from './types'; | ||
import { AppConfig, Features } from './app-config'; | ||
import { ProfileKey, ClientOptions, SapiClient, Language, Logger } from './types'; | ||
export declare type AlgoliaClient = Pick<SearchClient, 'search'>; | ||
@@ -13,3 +13,3 @@ export interface Base { | ||
/** Check if SAPI feature is enabled */ | ||
getFeatureEnabled: (feature: SapiFeature) => boolean; | ||
getFeatureEnabled: (feature: Features) => boolean; | ||
/** Instance of Algolia Client */ | ||
@@ -16,0 +16,0 @@ algoliaClient: AlgoliaClient; |
@@ -34,3 +34,3 @@ import { Except } from 'type-fest'; | ||
} | ||
export declare type SearchFn = (parameters: ApiSearchParameters, callbacks?: { | ||
export declare type SearchHandler = (parameters: ApiSearchParameters, callbacks?: { | ||
onStart?: OnStart; | ||
@@ -48,3 +48,3 @@ onAnchorReceived?: OnAnchorReceived; | ||
export declare type SearchFnParameters = Pick<BaseWithConfig, 'profileKey' | 'options' | 'appConfig' | 'algoliaClient' | 'offersClient' | 'configs' | 'getFeatureEnabled'>; | ||
export declare function search({ getFeatureEnabled, appConfig, algoliaClient, offersClient, options, configs }: SearchFnParameters): SearchFn; | ||
export declare function search({ getFeatureEnabled, appConfig, algoliaClient, offersClient, options, configs }: SearchFnParameters): SearchHandler; | ||
export {}; |
import { Base } from '.'; | ||
import { Suggestion } from './types'; | ||
export declare type SuggestFn = (query: string, suggestsCount?: number) => Promise<Suggestion[]>; | ||
export declare function suggest(base: Base): SuggestFn; | ||
export declare type SuggestHandler = (query: string, suggestsCount?: number) => Promise<Suggestion[]>; | ||
export declare function suggest(base: Base): SuggestHandler; |
export * from './types'; | ||
export * from './rooms'; | ||
export * from './sapi-client'; | ||
export * from './sapi-configs'; |
import { AlgoliaSearchOptions } from 'algoliasearch'; | ||
import { AnonymousId, Language, Currency, Country, DeviceType, Brand } from './types'; | ||
import { AppConfig } from '../app-config'; | ||
import { SearchFn } from '../search'; | ||
import { RoomsFn } from '../rooms'; | ||
import { SuggestFn } from '../suggest'; | ||
import { SearchHandler } from '../search'; | ||
import { RoomsHandler } from '../rooms'; | ||
import { HotelHandler } from '../hotel'; | ||
import { SuggestHandler } from '../suggest'; | ||
import { Configs } from '../algolia'; | ||
@@ -17,5 +18,6 @@ export declare type ProfileKey = 'findhotel-website' | 'findhotel-website-e2e' | 'findhotel-website-stg' | 'findhotel-website-ci' | 'findhotel-website-dev' | 'findhotel-checkout' | 'findhotel-checkout-e2e' | 'findhotel-checkout-stg'; | ||
export interface SapiClient { | ||
rooms: RoomsFn; | ||
search: SearchFn; | ||
suggest: SuggestFn; | ||
rooms: RoomsHandler; | ||
search: SearchHandler; | ||
suggest: SuggestHandler; | ||
hotel: HotelHandler; | ||
} | ||
@@ -22,0 +24,0 @@ /** Options for initializing the Search API client. Persistent within single SAPI instance but may vary for different users */ |
@@ -0,1 +1,6 @@ | ||
export interface IndexVariation { | ||
name: string; | ||
objectID?: string; | ||
variationID?: string; | ||
} | ||
/** | ||
@@ -139,3 +144,3 @@ * Unique ID identifying users | ||
export declare type SuggestHit = HotelSuggestHit | PlaceSuggestHit; | ||
/** Hit */ | ||
/** Search Hit */ | ||
export interface Hit { | ||
@@ -167,2 +172,14 @@ address: TranslatedString; | ||
*/ | ||
export interface LOVItem { | ||
importance?: number; | ||
categoryID?: number; | ||
id: number; | ||
value: TranslatedString; | ||
} | ||
export interface TranslatedLOVItem { | ||
importance?: number; | ||
categoryID?: number; | ||
id: number; | ||
value: string; | ||
} | ||
export interface Hotel extends Omit<Hit, 'hotelName' | 'address' | 'placeDN' | 'placeADName'> { | ||
@@ -174,2 +191,35 @@ displayAddress: string; | ||
} | ||
export interface ContentHotel { | ||
objectID: HotelId; | ||
_geoloc: Location; | ||
hotelName: string; | ||
imageURIs: string[]; | ||
guestType: GuestType; | ||
guestRating: GuestRating; | ||
isDeleted?: boolean; | ||
propertyTypeId?: number; | ||
starRating?: number; | ||
feesOpt?: string; | ||
checkInSpInst?: string; | ||
policies?: string; | ||
phone?: string; | ||
checkInTime?: string; | ||
checkInInst?: string; | ||
checkInMinAge?: number; | ||
reviewCount?: number; | ||
chainID?: string; | ||
checkInEnd?: string; | ||
lastBooked?: number; | ||
checkOutTime?: string; | ||
feesMnd?: string; | ||
reviewCountBkt?: number; | ||
placeID?: string; | ||
pricing?: Pricing; | ||
placeDisplayName?: string; | ||
displayAddress?: string; | ||
facilities?: TranslatedLOVItem[]; | ||
themes?: TranslatedLOVItem[]; | ||
propertyType?: TranslatedLOVItem; | ||
sentiments?: TranslatedLOVItem[]; | ||
} | ||
export interface HotelAnchor extends Omit<HotelAnchorHit, 'hotelName' | 'placeADN' | 'placeDN'> { | ||
@@ -176,0 +226,0 @@ placeDisplayName: string; |
{ | ||
"name": "@findhotel/sapi", | ||
"version": "0.23.5", | ||
"version": "0.23.6", | ||
"description": "FindHotel Search API", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
161
README.md
@@ -9,3 +9,4 @@ | ||
1. [Hotels search](#tutorial-hotels-search) | ||
2. [Get rooms](#tutorial-get-rooms) | ||
2. [Get rooms data](#tutorial-get-rooms) | ||
3. [Get hotel](#tutorial-get-hotel) | ||
3. [API Reference](#api-reference) | ||
@@ -25,2 +26,5 @@ 1. [SAPI client](#sapi-client) | ||
2. [Response](#rooms-response) | ||
5. [`hotel()` method](#hotel-method) | ||
1. [Hotel parameters](#hotel-parameters) | ||
2. [Response](#hotel-response) | ||
@@ -117,3 +121,3 @@ SDK provides a high level TypeScript/JavaScript API for searching | ||
### Get rooms | ||
### Get rooms data | ||
@@ -132,2 +136,13 @@ Get rooms and rooms' offers: | ||
<a id="tutorial-get-hotel"></a> | ||
### Get hotel | ||
Get hotel by id: | ||
const hotel = await sapiClient.hotel('1196472') | ||
For full documentation, check [hotel method api](#hotel-method). | ||
<a id="api-reference"></a> | ||
@@ -687,3 +702,3 @@ | ||
const rooms = sapiClient.rooms({ | ||
const rooms = await sapiClient.rooms({ | ||
hotelId: '47319', | ||
@@ -790,1 +805,141 @@ checkIn: '2021-10-10', | ||
<a id="hotel-method"></a> | ||
## `hotel()` method | ||
Hotel is a method of **sapiClient** for retrieving a single hotel by id | ||
const hotel = await sapiClient.hotel('1196472') | ||
<a id="hotel-parameters"></a> | ||
### Hotel parameters | ||
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> | ||
<colgroup> | ||
<col class="org-left" /> | ||
<col class="org-left" /> | ||
<col class="org-left" /> | ||
<col class="org-left" /> | ||
<col class="org-left" /> | ||
</colgroup> | ||
<thead> | ||
<tr> | ||
<th scope="col" class="org-left">name</th> | ||
<th scope="col" class="org-left">type</th> | ||
<th scope="col" class="org-left">description</th> | ||
<th scope="col" class="org-left">required</th> | ||
<th scope="col" class="org-left">example</th> | ||
</tr> | ||
</thead> | ||
<tbody> | ||
<tr> | ||
<td class="org-left">`hotelId`</td> | ||
<td class="org-left">`string`</td> | ||
<td class="org-left">Hotel Id</td> | ||
<td class="org-left">yes</td> | ||
<td class="org-left">`1196472`</td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
<a id="hotel-response"></a> | ||
### Response | ||
An example of the response for request with `hotelId` 1196472 and "pt-BR" `language` | ||
{ | ||
"objectID": "1196472", | ||
"guestRating": { | ||
"cleanliness": 8.82, | ||
"dining": 8.73, | ||
"facilities": 8.73, | ||
"location": 8.8, | ||
"overall": 8.54, | ||
"pricing": 4.49, | ||
"rooms": 8.82, | ||
"service": 8.67 | ||
}, | ||
"isDeleted": false, | ||
"starRating": 4, | ||
"_geoloc": { | ||
"lat": 52.377805, | ||
"lon": 4.914172 | ||
}, | ||
"feesOpt": "<p>Os seguintes depósitos e taxas são cobrados pelo hotel no momento do serviço prestado, durante o check-in ou check-out. </p> <ul> <li>Taxa para café da manhã em estilo buffet: EUR 25.00 por pessoa (aproximadamente)</li> <li>Taxa para o acesso à internet com fio no quarto: EUR 15 por dia (as tarifas podem variar)</li> <li>Taxa para o acesso à internet com fio em áreas comuns: EUR 15 por dia (as tarifas podem variar)</li> <li>Taxa para estacionamento coberto sem manobrista: EUR 38.00 por dia</li> <li>Estacionamento pago nos arredores: EUR 15 por dia (aberto 24 horas)</li> </ul> <p>A lista acima pode estar incompleta. As taxas e os depósitos podem não incluir impostos e estão sujeitos a mudanças. </p>", | ||
"checkInSpInst": "O funcionário da recepção receberá os hóspedes na chegada. Para mais informações, entre em contato com o estabelecimento usando os dados que estão na confirmação da reserva. Os hóspedes que forem usar o traslado da Estação Central de Amsterdã devem entrar em contato com o estabelecimento com antecedência. Devido à COVID-19, as opções de comida e bebida deste estabelecimento podem estar limitadas de acordo com os regulamentos locais.", | ||
"policies": "<ul> <li>Este estabelecimento oferece transporte da estação de trem. Os hóspedes devem entrar em contato com o estabelecimento antes da viagem com os detalhes da chegada usando as informações para contato presentes na confirmação da reserva. </li> <li>É necessário reservar os seguintes serviços: serviços de massagem. As reservas podem ser feitas contatando este hotel antes da viagem usando as informações para contato fornecidas na confirmação da reserva. </li> <li>Somente hóspedes registrados podem ter acesso aos quartos. </li><li>O estabelecimento possui quartos conectados ou adjacentes, que podem ser solicitados entrando-se em contato diretamente com o estabelecimento, através do número fornecido na confirmação da reserva. </li><li>Não há necessidade de carro para o transporte de/para o estabelecimento. </li><p>Há restrições de altura no estacionamento. </p><li>Medidas de limpeza aprimorada e segurança dos hóspedes estão atualmente em vigor nesta acomodação.</li><li>A limpeza do estabelecimento é feita com desinfetante, as superfícies tocadas regularmente são desinfetadas entre as estadias e os lençóis e as toalhas são lavados a uma temperatura mínima de 60 °C.</li><li>Equipamentos de proteção individuais , como máscaras, vão estar disponíveis para os hóspedes.</li><li>Medidas de distanciamento social estão em vigor; os funcionários utilizam equipamento de proteção individual no estabelecimento; há um painel protetor de acrílico entre funcionários e hóspedes nas principais áreas de contato; os hóspedes recebem álcool em gel.</li><li>Há possibilidade de check-in sem contato e check-out sem contato.</li><li>Cada quarto permanece vazio por um mínimo de 24 horas entre as estadias.</li><li> Este estabelecimento recebe hóspedes de todas as orientações sexuais e identidades de gênero (LGBTQ friendly). </li> </ul>", | ||
"phone": "+31205191200", | ||
"imageURIs": [ | ||
"https://i.travelapi.com/hotels/2000000/1460000/1452100/1452083/a39e2fc8_w.jpg", | ||
"https://i.travelapi.com/hotels/2000000/1460000/1452100/1452083/3892e861_w.jpg", | ||
"https://i.travelapi.com/hotels/2000000/1460000/1452100/1452083/aed25438_w.jpg" | ||
], | ||
"checkInTime": "15:00", | ||
"checkInInst": "<ul> <li>Pessoas extras podem incorrer em taxas adicionais que variam dependendo da política do estabelecimento</li><li>Documento de identificação oficial com foto e cartão de crédito, cartão de débito ou depósito em dinheiro podem ser exigidos no momento do check-in para despesas extras.</li><li>Solicitações especiais estão sujeitas à disponibilidade no momento do check-in e podem incorrer em taxas adicionais. Essas solicitações não estão garantidas</li><li>Políticas de cancelamento ou cobranças especiais podem se aplicar a reservas de grupos (mais de 8 quartos para o mesmo estabelecimento/mesmas datas)</li><li>Este estabelecimento aceita cartões de crédito – não são aceitos pagamentos em dinheiro.</li><li>Os recursos de segurança disponíveis no estabelecimento incluem itens como detector de fumaça</li><li>As normas culturais e políticas de hóspedes podem variar conforme o país e o estabelecimento. As políticas listadas são fornecidas pelo estabelecimento</li> </ul>", | ||
"reviewCount": 17538, | ||
"chainID": "2101", | ||
"checkInEnd": "01:00", | ||
"lastBooked": 1608030831, | ||
"checkOutTime": "12:00", | ||
"feesMnd": "<p>Você deverá pagar os seguintes encargos no estabelecimento:</p> <ul><li>Depósito: EUR 50 por noite</li><li>A cidade cobra um imposto de EUR 3.00 por pessoa, por noite até 21 noites. Esse imposto não se aplica a crianças de até 16 anos. </li><li>Será cobrado um imposto municipal/local de 6.422 %</li></ul> <p>Incluímos todas as cobranças que o estabelecimento nos forneceu. No entanto, as cobranças podem variar com base, por exemplo, na duração da estadia ou no tipo de quarto reservado. </p>", | ||
"reviewCountBkt": 9, | ||
"hotelName": "Movenpick Hotel Amsterdam City Centre", | ||
"sentiments": [{ | ||
"value": "Gostou do bar", | ||
"id": 46 | ||
}, | ||
{ | ||
"value": "Processo rápido de check-in/check-out", | ||
"id": 180 | ||
} | ||
], | ||
"facilities": [{ | ||
"categoryID": 4, | ||
"importance": 2, | ||
"value": "Centro de Negócios", | ||
"id": 1 | ||
}, | ||
{ | ||
"categoryID": 17, | ||
"importance": 2, | ||
"value": "Serviço de quarto", | ||
"id": 2 | ||
} | ||
], | ||
"placeID": "311007", | ||
"guestType": { | ||
"business": 1333, | ||
"couples": 3125, | ||
"families": 1484, | ||
"groups": 1121, | ||
"solo": 206 | ||
}, | ||
"themes": [{ | ||
"value": "Cidade", | ||
"id": 2 | ||
}, | ||
{ | ||
"value": "Empresarial", | ||
"id": 12 | ||
} | ||
], | ||
"propertyType": { | ||
"value": "Hotel", | ||
"id": 0 | ||
}, | ||
"placeDisplayName": "Oostelijk Havengebied, Amsterdã", | ||
"displayAddress": "Piet Heinkade 11, Oostelijk Havengebied, Amsterdã, Holanda" | ||
} | ||
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
293188
60
2509
940