UNPKG

tipi-cloudbeds

Version:

Node.js library to connect to cloudbeds REST API

257 lines (231 loc) 7.79 kB
const Joi = require('joi') const GrantType = require('./enums/GrantType') const WebHookEventAction = require('./enums/WebHookEventAction') const WebHookEventObject = require('./enums/WebHookEventObject') const AppState = require('./enums/AppState') const Gender = require('./enums/Gender') const IdType = require('./enums/IdType') const GuestStatus = require('./enums/GuestStatus') const dateRegex = /^([12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01]))$/ const tokensSchema = Joi.object().unknown().keys({ accessToken: Joi.string().required(), tokenType: Joi.string().required() }) exports.generateToken = Joi.object().keys({ grantType: Joi.string().valid(Object.values(GrantType)).required(), redirectUri: Joi.string().uri().when('grantType', { is: `${GrantType.authorizationCode}`, then: Joi.required() }), code: Joi.string().when('grantType', { is: `${GrantType.authorizationCode}`, then: Joi.required() }), refreshToken: Joi.string().when('grantType', { is: `${GrantType.refreshToken}`, then: Joi.required() }), }) exports.generateTokenByCode = Joi.object().keys({ redirectUri: Joi.string().uri().required(), code: Joi.string().required() }) exports.generateTokenByRefreshToken = Joi.object().keys({ refreshToken: Joi.string().required() }) exports.checkAccessToken = tokensSchema exports.refreshAccessToken = Joi.object().keys({ accessToken: Joi.string().required(), refreshToken: Joi.string().required(), tokenType: Joi.string().required() }) exports.subscribeToEvent = Joi.object().keys({ tokens: tokensSchema, data: Joi.object().keys({ object: Joi.string().valid(Object.values(WebHookEventObject)).required(), action: Joi.string().valid(Object.values(WebHookEventAction)).required(), endpointUrl: Joi.string().uri().required() }) }) exports.unSubscribeFromEvent = Joi.object().keys({ tokens: tokensSchema, data: Joi.object().keys({ subscriptionId: Joi.string().required() }) }) exports.getReservationById = Joi.object().keys({ tokens: tokensSchema, data: Joi.object().keys({ reservationId: Joi.string().required() }) }) exports.getReservations = Joi.object().keys({ tokens: tokensSchema, data: Joi.object().keys({ propertyId: Joi.string(), modifiedFrom: Joi.date(), modifiedTo: Joi.date(), checkOutFrom: Joi.date(), checkOutTo: Joi.date(), resultsFrom: Joi.date(), resultsTo: Joi.date(), status: Joi.string(), pageNumber: Joi.number().integer().min(1), pageSize: Joi.number().integer().min(1).max(100), sortByRecent: Joi.boolean(), includeGuestsDetails: Joi.boolean(), }) }) exports.postAppState = Joi.object().keys({ tokens: tokensSchema, data: Joi.object().keys({ propertyId: Joi.string().required(), appState: Joi.string().valid(Object.values(AppState)).required() }) }) exports.getHotels = tokensSchema exports.getRooms = Joi.object().keys({ tokens: tokensSchema, data: Joi.object().keys({ page: Joi.number().default(1), size: Joi.number().default(10000) }) }) exports.getReservationsWithRateDetails = Joi.object().keys({ tokens: tokensSchema, data: Joi.object().keys({ reservationId: Joi.string().required() }) }) exports.postRoomCheckIn = Joi.object().keys({ tokens: tokensSchema, data: Joi.object().unknown().keys({ reservationId: Joi.string().required(), subReservationId: Joi.string(), roomId: Joi.string() }) }) exports.getHousekeepingStatus = Joi.object().keys({ tokens: tokensSchema, data: Joi.object().keys({ roomTypeIds: Joi.string(), housekeeperIds: Joi.string(), roomCondition: Joi.string(), roomOccupied: Joi.boolean(), pageNumber: Joi.number(), pageSize: Joi.number() }) }) exports.postReservationNote = Joi.object().keys({ tokens: tokensSchema, data: Joi.object().unknown().keys({ reservationId: Joi.string().required(), reservationNote: Joi.string().required() }) }) exports.getWebhooks = Joi.object().keys({ tokens: tokensSchema }) exports.getGuestsByFilter = Joi.object().keys({ tokens: tokensSchema, data: Joi.object().unknown().keys({ propertyIds: Joi.string(), reservationId: Joi.string(), roomId: Joi.string(), status: Joi.string().valid(Object.values(GuestStatus)), guestName: Joi.string(), checkInFrom: Joi.string().regex(dateRegex), checkInTo: Joi.string().regex(dateRegex), checkOutFrom: Joi.string().regex(dateRegex), checkOutTo: Joi.string().regex(dateRegex), }) }) exports.getGuest = Joi.object().keys({ tokens: tokensSchema, data: Joi.object().unknown().keys({ propertyId: Joi.string(), reservationId: Joi.string(), guestId: Joi.string() }).or('reservationId', 'guestId') }) exports.putGuest = Joi.object().keys({ tokens: tokensSchema, data: Joi.object().unknown().keys({ guestId: Joi.string().required(), propertyId: Joi.string(), guestFirstName: Joi.string(), guestLastName: Joi.string(), guestGender: Joi.string().valid(Object.values(Gender)), guestEmail: Joi.string(), guestPhone: Joi.string(), guestCellPhone: Joi.string(), guestAddress1: Joi.string(), guestAddress2: Joi.string(), guestCity: Joi.string(), guestCountry: Joi.string(), guestState: Joi.string(), guestZip: Joi.string(), guestBirthDate: Joi.string().regex(dateRegex), guestDocumentType: Joi.string().valid(Object.values(IdType)), guestDocumentNumber: Joi.string(), guestDocumentIssueDate: Joi.string().regex(dateRegex), guestDocumentIssuingCountry: Joi.string(), guestDocumentExpirationDate: Joi.string().regex(dateRegex), guestCompanyName: Joi.string(), guestCompanyTaxId: Joi.string(), guestTaxId: Joi.string() }).and( 'guestDocumentType', 'guestDocumentNumber', 'guestDocumentIssueDate', 'guestDocumentIssuingCountry', 'guestDocumentExpirationDate' ) }) exports.postGuest = Joi.object().keys({ tokens: tokensSchema, data: Joi.object().unknown().keys({ reservationId: Joi.string().required(), guestFirstName: Joi.string().required(), guestLastName: Joi.string().required(), guestEmail: Joi.string().required(), guestCountry: Joi.string().required(), propertyId: Joi.string(), guestGender: Joi.string().valid(Object.values(Gender)), guestPhone: Joi.string(), guestCellPhone: Joi.string(), guestAddress1: Joi.string(), guestAddress2: Joi.string(), guestCity: Joi.string(), guestState: Joi.string(), guestZip: Joi.string(), guestBirthDate: Joi.string().regex(dateRegex), guestDocumentType: Joi.string().valid(Object.values(IdType)), guestDocumentNumber: Joi.string(), guestDocumentIssueDate: Joi.string().regex(dateRegex), guestDocumentIssuingCountry: Joi.string(), guestDocumentExpirationDate: Joi.string().regex(dateRegex), guestNote: Joi.string(), reservationNote: Joi.string(), guestCompanyName: Joi.string(), guestCompanyTaxId: Joi.string(), guestTaxId: Joi.string() }).and( 'guestDocumentType', 'guestDocumentNumber', 'guestDocumentIssueDate', 'guestDocumentIssuingCountry', 'guestDocumentExpirationDate' ) }) exports.postGuestsToRoom = Joi.object().keys({ tokens: tokensSchema, data: Joi.object().unknown().keys({ reservationId: Joi.string().required(), roomId: Joi.string().required(), guestIds: Joi.string().required(), propertyId: Joi.string(), removeGuestIds: Joi.string(), removeAll: Joi.boolean() }) })