@mirai/services

0.2.144 • Public • Published

💾 @mirai/services

A naive isomorphic storage manager

📦 Setup

Add the package in your project:

yarn add @mirai/services

Configure the endpoints for each type of service

SERVICE_CURRENCY={{url}}
SERVICE_PRICING={{url}}

For development purpouses we will use .env file for this setup.

ServiceCountry

info(country)

Returns all the information available for a determinate country.

const country = await ServiceCountry.info('ES');
>> {
    "prefix": "93"
   }

list(locale)

Returns a map with the properties of each country.

const countries = await ServiceCountry.list('es-ES');
>> {
    "AF": { "prefix": "93" },
    "AL": { "prefix": "355" },
    "DZ": { "prefix": "213" },
    ...
  }

ℹ️ ServiceCountry has an auto-cache system that expires in 24 hours.

ServiceCurrency

convert(from , to, amount, reverse)

Convert the value from one currency to another

const conversion = ServiceCurrency.convert('USD', 'EUR', 10);
>> 10.08

exchange(currency)

Returns all the conversions rates for a determinate currency.

const rates = ServiceCurrency.exchange('USD');
>> {
     "AED": 4.06,
     "ARS": 121.31,
     "AUD": 1.5,
     ...
   }

ServiceDictionary

get()

Returns a dictionary of translations for a determinate locale.

const dictionary = ServiceDictionary.get('es-ES');

ServiceFeatures

initialize()

Initialize the service of "feature flag" downloading all rules from an endpoint.

const features = await ServiceFeatures.initialize();
>> {
     "occupation": false,
     "calendarPrices": true,
     "variants": {
       "00001": { "occupation": true },
       "00002": { "calendarPrices": false }
     }
   }

get(id, hotelId)

Returns a rule for a determinate hotel.

const hasOccupation = ServiceFeatures.get('occupation', '501404');
>> true

ServiceHotel

getCurrencies(id)

Returns for a given hotelId an object with the default currency per country.

const currencies = ServiceHotel.getCurrencies('501404');
>> {
     "AD": "EUR",
     "AR": "ARS",
     "AS": "USD",
     ...
   }

ServiceHotelVerse

getToken({ checkin, idHotel })

Returns for a given idHotel and checkin date the token for can communicate with Hotel Verse in case this is possible. If is not possible the function returns undefined

const accessTokenHv = ServiceHotelVerse.getToken({checkin:'01/05/2023', idHotel:'100376546'});
>> "YmxhIGJsYSBleGFtcGxl"

ServicePricing

get(id, from, months, currency)

Returns a list of prices sort by date and the hotel default currency.

const prices = ServicePricing.get('501404', '15/04/2022', 1, 'USD');
>> {
     "currency": "USD",
     "prices": {
       "22/04/2022": 216.00,
       "24/04/2022": 188.10,
       "25/04/2022": 180.00,
       ...
     }
   }

getStatic(id, from, months, userCurrency)

This method is a little bit tricky, because the last parameter userCurrency is optional. As the previous service (get) returns a list of prices sort by date, plus the hotel default currency and country.

const prices = ServicePricing.getStatic('501404', '15/04/2022', 1, 'USD');
>> {
     "country": "US",
     "currency": "USD",
     "prices": {
       "22/04/2022": 216.00,
       "24/04/2022": 188.10,
       "25/04/2022": 180.00,
       ...
     }
   }

ServiceUser

booking({ idHotel, env, lang, pinCode, reservationCode })

Get de token of a booking. All the params are mandatory. If exists an error related with the authentication, return a error with code 10. In other cases return a error with code 0

const response = await ServiceUser.booking({
  id: 55,
  idHotel: 1111,
  pinCode: 44
  });
>> {
     "token": "01F7D0EF7ED54F75DC79CAD00B46C116B31C687F"
   }

signup(properties)

⚠️ This method is pending of a refactor, because right now ask to many mandatory fields.

const session = await ServiceUser.signup({
  // country: 'ES',
  dateOfBirth: '10/04/1980',
  email: 'mirai@soyjavi.com',
  firstName: 'javi',
  idClub: '6509887230248306646',
  idHotel: '501404',
  // language: 'es',
  lastName: 'jimenez',
  password: '12345678J',
  // privacy: true,
  // source: 'website',
  // subscribed: false,
}).catch((error) => {
  console.error(error);
});
>> true

login(username, password)

⚠️ This method is pending of a refactor, because right now is using oAuth protocol

const session = await ServiceUser.login(email, password).catch((error) => console.error(error));
>> {
      access_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',
      club_name: 'Garden Direct'
      email: 'mirai@soyjavi.com',
      expires_in: 43199,
      first_name: 'j',
      id_club: 6509887230248307000,
      jti: 'a3b55543-b7c1-4aa5-a8b1-f97a1e15a082',
      last_name: 'j',
      refresh_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',
      scope: 'read',
      subscribed: false,
      token_type: 'bearer',
   }

resetPassword({ email, idClub, idHotel })

Resets the password of an active user, the new password will send by email.

const response = await ServiceUser.resetPassword({
  email: 'mirai@soyjavi.com',
  idClub: 6509887230248307000,
  idHotel: '501404'
]);
>> {
     "result": "SUCCESS"
   }

signout()

Signout from the membership club.

const response = await ServiceUser.signout();
>> {
     joinedMembersConfirmationKeys: [593ZODOTrFIR_NRIvFssdP-PXZKCAbVnVvYZZkr_D98],
     result: SUCCESS
   }

⚠️ I think this method should return a boolean

logout()

Logout the current session.

const response = await ServiceUser.logout();
>> true

profile()

Returns the actual data of the user.

const profile = await ServiceUser.profile();
>> {
     idMember: 8973108064730172000,
     idClub: 6509887230248307000,
     email: 'mirai@soyjavi.com',
     active: true,
     role: 'MEMBER',
     firstName: 'j',
     lastName: 'j',
     country: 'ES',
     language: 'es',
     joiningDate: '04/10/2022',
     source: 'WEBSITE',
     subscribed: false,
     dateOfBirth: '01/01/1960',
     extraFields: {},
     idJoinReservation: 0
  }

update({ firstname, lastname, dateOfBirth, country, subscribed })

Update some fields of the user.

const profile = await ServiceUser.update({
  firstName: 'javi',
  lastName: 'jimenez',
  dateOfBirth: '10/04/1980',
  country: 'TH',
  subscribed: true,
});
>> {
     "result": "SUCCESS"
   }

bookings()

Returns a list of bookings of the user.

const bookings = await ServiceUser.bookings();
>> [{
      hotelInfo: {
        name: 'Alcudia Garden Aparthotel ',
        address: 'Avinguda de la Platja, 1',
        location: 'Port d Alcúdia',
        province: 'Baleares',
        telephone: '+34 971 081 625',
        latitude: '39.842319',
        longitude: '3.1260377',
        countryIsoCode: 'ES',
        url: 'https://www.gardenhotels.com/alcudia-garden-aparthotel/',
        image: 'https://images.mirai.com/HOTEL_PHOTOS/100376538/NJVRSMFKMZFNMHYSVCYZ.jpg'
      },
      hotelCurrency: 'EUR',
      idTokenProvider: 100376538,
      idReservation: '20022077925',
      cancellationCode: 2258850,
      checkin: '08/10/2020',
      checkout: '10/10/2020',
      nights: 2,
      paymentDescription: 'Fizetés a létesítménybe való megérkezéskor. Bankkártya kizárólag a foglalás garanciájaként.',
      cancellationPolicySortText: 'Különleges feltételek: A lemondásnak költsége van',
      cancellationPolicy: 'CANCELLATION: Free up to 12:00 hours of the day okt.-06-2020. After that time, 20% of the total reservation will be charged on your card.',
      cancelDate: '20/02/2020'
    },
    ...
  ]

Readme

Keywords

none

Package Sidebar

Install

npm i @mirai/services

Weekly Downloads

119

Version

0.2.144

License

MIT

Unpacked Size

395 kB

Total Files

210

Last publish

Collaborators

  • mirai