npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

guestia_client

v3.2.4

Published

`guestia_client` — web-клиент для работы с юзером aviasales имеет следующий функционал:

Downloads

32

Readme

Guestia client

guestia_client — web-клиент для работы с юзером aviasales имеет следующий функционал:

  • Аутентификацию и авторизацию пользователя;
  • Хранение и изменение настроек пользователя как на сервере, так и локально используя cookie и localStorage;

Установка

$ npm install guestia_client

Начало использования

Для использования, необходимо создать инстанс класса со следующими параметрами:

{
  // Обязательные поля

  // Идентификатор девайса
  uid: string
  // Схема настроек пользователя.
  // Определяем как будут хранится те или иные настройки при использовании этого инстанса
  schema: {
  }

  // Опциональные поля
  host: string
  authHost: string
  apiVersion: number
  // Источник хранения локально. По-умолчанию 'cookie'
  storageProvider: 'localStorage' | 'cookie' | undefined
}

Пример использования:

const client = new Guestia({
  uid: Cookie.get('auid'),
  schema: {
    passengers: {
      storageProvider: 'localStorage',
    },
    currency: {
      domain: '.aviasales.ru',
      expires: Infinity,
      defaultValue: 'rub',
    },
  },
})

export default client

Доступные методы класса

Login

Чтобы залогинить пользователя необходимо вызвать метод login с указанием соответствующего метода (провайдера) авторизации.

Пример использования:

const { jwt, userInfo } = await client.login(method)

Где method — строка, один из доступных провайдеров авторизации: vk, facebook, twitter, ok, google, mail_ru, yandex, wechat, line, apple

Logout

Пример использования:

client.logout()

Authorization

Пример использования:

const { jwt } = await client.authorize()
if (jwt) {
  console.log('User authorized')
} else {
  console.log('User unauthorized')
}

Получение информации о пользователе

Метод getUserInfo() возвращает Promise со следующей схемой userInfo:

interface UserInfo {
  details: {
    auid: string[]
    email: string[]
    photos: {
      max: string | null
      medium: string | null
      small: string | null
    }
  }
  first_name: string
  id: string
  last_ip_address: string
  last_login_at: string
  last_login_method: string
  last_name: string
  name: string
}

Пример использования:

const { name } = await client.getUserInfo()

Получение настройки пользователя

Настройки пользователя всегда хранятся в строчном значении. Если сохраняем объект, то храним json

Пример использования:

const currency = client.getSettings(‘currency’) // rub

Получение всех настроек пользователя

const { currency } = client.getAllSettings() // { passenger: null, currency: "rub" }

Сохранение настройки

client.setSettings('currency', 'usd')

Возвращает Promise, который зарезолвится когда произойдёт успешное сохранение

Получение JWT

client.getJWT()

Вернёт string | null

Получение userId в базе guestia

По-сути, метод просто декодирует и парсит jwt пользователя. Поэтому он синхронный и возвращает строку

client.getUserId()

Авторизация по jwt стороннего ресурса

На данный момент доступна для google(one-tap) и yandex. В этом случае, sdk возвращает jwt, по которому мы можем авторизовать юзера минуя классическую схему OAuth.

client.jwtAuth(provider: AvailableJwtAuthProviders, idToken: string)

Метод асинхронный и возвращает такой же Promise как и в методе login


Поведение guestia_client в webview

Проблема

Текущая реализация gustia_client работает с авторизационным всплывающим окном и передаёт значение jwt через postMessage в основное окно. Но в такой реализации, есть проблема с webview, т.к. там всплывающие окна являются обычным новым окном из которого мы не можем послать postMessage.

Решение

Мы делаем редирект обратно на страницу, с которого было открыто окно авторизации и при этом записываем в куки необходимую информацию о юзере, чтобы его в дальнейшем идентефицировать. Что бы после такого редиректа понять авторизован пользователь или нет, нужно:

const client = new Guestia({…})
const { jwt } = await client.authorize() // Авторизуем, получаем jwt
const isAuthorized = !!jwt // jwt: string | null