Сервис для создания сессии
Установка
npm
Через$ npm install --save session-connector
yarn
Через$ yarn add session-connector
Для начала вызова любых методов необходимо инициализировать сервис:
import { initial } from 'session-connector';
const config = {
URI: string,
SOCKET_URI: string,
hasLogger: boolean,
onSocketOpen?: () => {},
onSocketClose?: () => {},
onSocketError?: () => {},
onSessionRefresh?: (sessionInfo: MainSessionInfo) => {},
}
initial(config);
Авторизация
По токену
import { authByToken } from 'session-connector';
const token = '<base64string>';
const {
userId,
email,
sessionServerKey,
sessionSalt,
sessionId,
ttl,
sessionTime
} = await authByToken(token);
По логину (телефон или электронная почта)
Авторизация по логину происходит в два этапа:
import { createPreparedSession } from 'session-connector';
const login = '79999999999';
const { clientPublicKey, clientSecretKey, ttl, userId, email } = await createPreparedSession(login);
После получения открытого ключа необходимо подписаться на ON_LOGIN.
const fetchResult = makeSubscription(ON_LOGIN, {
[connectionTypeName]: login,
publicKey: clientPublicKey,
metadata, // информация о браузере и геолокации
});
После получения ответа создать ApolloClient:
import { authByLogin } from 'session-connector';
const sessionTime = +new Date();
authByLogin({
salt,
secretKey, // секретный ключ клиента
publicKey, // публичный ключ сервера
sessionId,
ttl,
sessionTime // время создания сессии
});
Создание сессии в meta trust
Генерируем зашифрованные userId и salt
import { createSignedInfo } from 'session-connector';
const phone = '79999999999';
await createSignedInfo(phone);
Генерируем данные для создания сессии
import { createSignedInfo } from 'session-connector';
const fcmToken = '<token>';
const smsCode = '5555'
const modelPhone = 'iPhone 12'
const {
ttl,;
sessionId,
sessionServerKey,
sessionSalt,
sessionTime,
clientSecretKey,
} = await generateSession(fcmToken, smsCode, modelPhone);
Выполнение запросов
function makeQuery<T>(query: DocumentNode, variables: OperationVariables): Promise<ApolloQueryResult<T>>
function makeMutation(mutation: DocumentNode, variables: OperationVariables, fetchPolicy: FetchPolicy): Promise<any>
function makeSubscription(query: DocumentNode, variables: any): Observable<any>
Передача файлов
Открытие/получение канала для передачи данных
import { getUploadsChannel } from 'session-connector';
const channel = getUploadsChannel();
Открытие канала для передачи одного файла
import { createDataChannel } from 'session-connector';
const id = 'Идентификатор сессии начала передачи файла';
const channel = createDataChannel(id);
Типы данных
/**
* Конфигурация сервиса
*/
export type Config = {
URI: string,
SOCKET_URI: string,
hasLogger: boolean,
onSocketOpen?: VoidFunction,
onSocketClose?: VoidFunction,
onSocketError?: VoidFunction,
onSessionRefresh?: (sessionInfo: ClientSessionInfo) => {},
}