Быстрый старт

Данный раздел описывает технические моменты, необходимые для начала интеграции.

Полноценная реализация и описание API Reference еще в процессе и требует с нашей стороны доработки, но сигнатуры методов менять не планируется.

Доступы к сервисам

Для подключения доступны production и stage окружения, для начала интеграции стоит использовать данные для stage.

Для получения доступа к окружению необходим специальный токен, который генерируется по запросу. Он используется для первоначального соединения между сервисами, далее авторизация происходит посредством пользовательских токенов.

services-stage-mx6hvkth4a-uc.a.run.app
services.stage.galactica.games

Установить зависимости

В данном руководстве приводятся примеры интеграции для NodeJS и TypeScript.

Для начала работы следует установить пакеты @protobuf-ts/grpc-transport и @grpc/grpc-js

# Install via NPM
npm install --save @grpc/grpc-js
npm install --save @protobuf-ts/grpc-transport

Транспорт и авторизация

Для работы с gRPC требуется создать две вспомогательные функции для создания контейнера для передачи команд на удаленный сервис и для авторизации. Необязательно, но повышает удобство использования.

transport.ts
import { GrpcTransport } from "@protobuf-ts/grpc-transport";
import { RpcOptions } from "@protobuf-ts/runtime-rpc";
import { ChannelCredentials } from "@grpc/grpc-js";

export const getTransport = (): GrpcTransport => {
  const host = process.env.SERVICES_API_URL ?? "";
  return new GrpcTransport({
    host,
    channelCredentials: host.includes('localhost')
      ? ChannelCredentials.createInsecure()
      : ChannelCredentials.createSsl(),
  });
};

export const getAuthorization = (accessToken: string): RpcOptions => {
  return {
    meta: {
      authorization: `Bearer ${accessToken}`
    }
  };
};

Обратите внимание, что в данном примере используется переменная окружения SERVICES_API_URL. Если у вас имя данной переменной отличается, необходимо отредактировать пример кода под свои нужды.

Первый запрос

В качестве тестового начального запроса можно использовать запрос к сервису определения местоположения по IP адресу. Он не требует авторизации.

Для начала, стоит скачать сгенерированный клиент для этого сервиса, распаковать и скопировать в папку src/services.

Далее пример использования клиента для вызова необходимых методов у сервиса, в данном случае для получения сведений о текущем местоположении и флага, который сообщает, разрешен доступ или нет.

index.ts
// Import response type
import { Access } from "./services/system/v1alpha1/restrictions";
// Import service client for connecting to the backend
import { RestrictionsServiceClient } from "./services/system/v1alpha1/restrictions.client";
// Import special helpers for building transport and auth
import { getAuthorization, getTransport } from "./utils/transport";

export const accessChecker = async (): Promise<Access> => {
  // creates service instance using transport as a parameter
  const service = new RestrictionsServiceClient(getTransport());
  
  const access = await service.isAccessAllowed({});
  // in case authorization needed, use the next way of doing request
  // auth token - token, which backend gives for user oprations
  // const access = await service.isAccessAllowed({}, getAuthorization('auth token'));

  return access.response;
}

accessChecker().then((access: Access) => {
  console.log(access);
  // will return similar to
  // { allowed: true, location: { country: 'US', region: 'CA', city: 'Palo Alto' } }
});

Пример приложения для проверки локации прикреплен ниже в виде архива.

Last updated