Перейти к содержанию

Расширения

Расширения — это специализированные программы, которые расширяют функциональные возможности MONO, добавляя новые инструменты, сервисы и автоматизированные процессы. Они позволяют гибко адаптировать систему под потребности кооператива, улучшая взаимодействие между пайщиками, советом и инфраструктурой MONO.

Расширения бывают: внутренними и внешними.

Внутренние расширения реализуются непосредственно в моно-репозитории на Github. Они глубоко интегрированы в само приложение MONO и выстраиваются по его же архитектурным принципам. При подключении внутреннего расширения разворачивается микросервис, который добавляет в единую точку graphQL-API новые запросы, методы и подписки, которые отвечают за работу с конкретно этим расширением, или не добавляет ничего и просто выполняет свою функцию.

Внешние расширения реализуются отдельно и интегрируются с MONO посредством iframe с возможностью обмена сообщениями. Это позволяет интегрировать в MONO любой внешний сервис, основываясь только на обмене простыми сообщениями о запросе подписи или предоставления доступа. На текущий момент внешние расширения временно недоступны.

Внутренние расширения MONO можно разделить на две основные категории: утилиты и витрины. Однако явной границы между ними нет, т.к. любая витрина может быть слегка утилитой, а любая утилита - слегка витриной. Это разделение условное.

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

Витрины предоставляет пайщикам интерфейсы для кооперации, основанные доступных кооперативных смарт-контрактах в Кооперативной Экономики. Это могут быть: маркетплейсы, страницы предложений поставки имущества, страницы аренды, коллективных закупок, и т.д. и т.п. Т.е. предлагают пайщикам и совету кнопки, запросы, мутации или подписки, которые позволяют кооперарировать иначе.

Каждое расширение содержит в себе схему данных zod в поле schema с описаниями каждого поля, и поле config, в которое устанавливаются используемая расширением конфигурация согласно его схеме, и, возможно, отображаются какие-то неизменямые извне данные. Поэтому, для установки, необходимо передать config согласно zod-схеме в поле schema.

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

🛠️ SDK: Queries.Extensions.GetExtensions | 🔗 GraphQL API: Query.getExtensions

import { Queries } from '@coopenomics/sdk'; 

const variables = {
  data: {
    enabled?: <null | boolean>; // Фильтр включенных расширений
    installed?: <null | boolean>; // Фильтр установленных расширений
    name?: <null | string>; // Фильтр по имени
  };
};

const { [Queries.Extensions.GetExtensions.name]: result } = await client.Query(
  Queries.Extensions.GetExtensions.query,
  { variables }
);

Результат:

interface IOutput {
  getExtensions: <{
      available: <boolean>; // Показывает, доступно ли расширение
      config?: <unknown>; // Настройки конфигурации для расширения
      created_at: <unknown>; // Дата создания расширения
      description?: <null | string>; // Описание расширения
      enabled: <boolean>; // Показывает, включено ли расширение
      image?: <null | string>; // Изображение для расширения
      installed: <boolean>; // Показывает, установлено ли расширение
      instructions: <string>; // Поле инструкция для установки
      name: <string>; // Уникальное имя расширения
      readme: <string>; // Поле подробного текстового описания
      schema?: <unknown>; // Схема настроек конфигурации для расширения
      tags: <string[]>; // Массив тегов для расширения
      title?: <null | string>; // Заголовок расширения
      updated_at: <unknown>; // Дата последнего обновления расширения
    }[]>; // Получить список расширений
}

Установить расширение

🛠️ SDK: Mutations.Extensions.InstallExtension | 🔗 GraphQL API: Mutation.installExtension

import { Mutations } from '@coopenomics/sdk'; 

const variables = {
  data: {
    config: <any>; // Configuration settings for the extension
    created_at?: <any>; // Timestamp of when the extension was created
    enabled: <boolean>; // Indicates whether the extension is enabled
    name: <string>; // Unique name of the extension
    updated_at?: <any>; // Timestamp of the last update to the extension
  };
};

const { [Mutations.Extensions.InstallExtension.name]: result } = await client.Mutation(
  Mutations.Extensions.InstallExtension.mutation,
  { variables }
);

Результат:

interface IOutput {
  installExtension: {
    available: <boolean>; // Показывает, доступно ли расширение
    config?: <unknown>; // Настройки конфигурации для расширения
    created_at: <unknown>; // Дата создания расширения
    description?: <null | string>; // Описание расширения
    enabled: <boolean>; // Показывает, включено ли расширение
    image?: <null | string>; // Изображение для расширения
    installed: <boolean>; // Показывает, установлено ли расширение
    instructions: <string>; // Поле инструкция для установки
    name: <string>; // Уникальное имя расширения
    readme: <string>; // Поле подробного текстового описания
    schema?: <unknown>; // Схема настроек конфигурации для расширения
    tags: <string[]>; // Массив тегов для расширения
    title?: <null | string>; // Заголовок расширения
    updated_at: <unknown>; // Дата последнего обновления расширения
  };
}

Удалить расширение

🛠️ SDK: Mutations.Extensions.UninstallExtension | 🔗 GraphQL API: Mutation.uninstallExtension

import { Mutations } from '@coopenomics/sdk'; 

const variables = {
  data: {
    name: <string>; // Фильтр по имени
  };
};

const { [Mutations.Extensions.UninstallExtension.name]: result } = await client.Mutation(
  Mutations.Extensions.UninstallExtension.mutation,
  { variables }
);

Результат:

interface IOutput {
  uninstallExtension: <boolean>; // Удалить расширение
}

Обновить расширение

🛠️ SDK: Mutations.Extensions.UpdateExtension | 🔗 GraphQL API: Mutation.updateExtension

Для временного отключения расширения флаг enabled установить в false.

import { Mutations } from '@coopenomics/sdk'; 

const variables = {
  data: {
    config: <any>; // Configuration settings for the extension
    created_at?: <any>; // Timestamp of when the extension was created
    enabled: <boolean>; // Indicates whether the extension is enabled
    name: <string>; // Unique name of the extension
    updated_at?: <any>; // Timestamp of the last update to the extension
  };
};

const { [Mutations.Extensions.UpdateExtension.name]: result } = await client.Mutation(
  Mutations.Extensions.UpdateExtension.mutation,
  { variables }
);

Результат:

interface IOutput {
  updateExtension: {
    available: <boolean>; // Показывает, доступно ли расширение
    config?: <unknown>; // Настройки конфигурации для расширения
    created_at: <unknown>; // Дата создания расширения
    description?: <null | string>; // Описание расширения
    enabled: <boolean>; // Показывает, включено ли расширение
    image?: <null | string>; // Изображение для расширения
    installed: <boolean>; // Показывает, установлено ли расширение
    instructions: <string>; // Поле инструкция для установки
    name: <string>; // Уникальное имя расширения
    readme: <string>; // Поле подробного текстового описания
    schema?: <unknown>; // Схема настроек конфигурации для расширения
    tags: <string[]>; // Массив тегов для расширения
    title?: <null | string>; // Заголовок расширения
    updated_at: <unknown>; // Дата последнего обновления расширения
  };
}

Опубликовать расширение

Функционал добавления внешних расширений временно не доступен.