📘 API для работы с модулями Inn-Book

🧩 Архитектура модулей Inn-Book

Модули в Inn-Book создаются с использованием стандартных веб-технологий:
- UI: HTML + CSS + JavaScript
- Серверная логика: Node.js

🖥️ Гибкая интеграция интерфейса

Интерфейс (UI) модуля может быть встроен:
- В любую страницу системы Inn-Book (например, в карточку бронирования)
- В отдельный раздел программы
- В мобильное приложение Inn-Book
UI может:
- Обращаться к серверным скриптам модуля через execution
- Работать напрямую с внешними системами через API
- Использоваться в мобильном клиенте

🔐 Защита кода

Все модули, установленные из Inn-Book App Store, автоматически шифруются. Это обеспечивает защиту вашего исходного кода от несанкционированного доступа и копирования.

Описание:

Сервер отеля Inn-Book содержит встроенный API-сервер, обеспечивающий работу с модулями. Доступ осуществляется по API-ключу, который привязан к конкретному модулю.

⚠️ Доступ к API-методам запрашивается при установке модуля.
Без явного согласия пользователя все методы API для модуля будут заблокированы. Это обеспечивает контроль и безопасность, исключая несанкционированный доступ к данным отеля.

🔑 Получение API-ключа

API-ключ генерируется автоматически при установке модуля.
Для получения отдельно ключа без использования модуля можно:
- Создать пустой модуль вручную.
- Установить специальный модуль из магазина приложений, который отображает API-ключ и IP-адрес сервера.
Ключ доступен в любой HTML-странице модуля через глобальную переменную APIKEY

🌐 Общая структура API-запросов
Запросы отправляются через REST API следующим образом:
	
function send(m, d) {
  fetch(`/modules/api_v1/${m}`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'token': APIKEY
    },
    body: JSON.stringify(d)
  })
  .then(r => r.ok ? r.json() : Promise.reject(r.status))
  .then(console.log)
  .catch(e => console.error('Ошибка:', e));
}
			
	
Примеры:
	
// Получение данных по брони
const booking = send('booking', {
  act: 'getBookingDataByID',
  idBooking: 922
});

// Вызов серверного скрипта из папки execution
const bookingExecution = send('execution', {
  act: 'index.js',
  idBooking: 922
});
		
⚙️ Модуль execution

В структуре модуля есть папка execution, содержащая Node.js-скрипты, реализующие серверную логику.
Способы запуска:
- По cron'у — настраивается в конфигурации модуля.
- Как служба (daemon) — также через конфигурацию.
Ручной вызов:
- Через веб-интерфейс
- Из других скриптов
Пример вызова:

send('execution', {act: 'index.js',idBooking: 922});

При вызове скрипта через execution, API-ключ доступен как глобальная переменная APIKEY.

⚠️ Ограничения для серверных скриптов.
Скрипты в папке execution выполняются в ограниченной среде. Они имеют доступ только к файловой системе внутри директории своего модуля. Любая попытка обращения к внешним директориям или системным файлам будет заблокирована

🧩 Модули и архитектура

Каждый модуль — это изолированный функциональный блок. Он может:
- Принимать и обрабатывать запросы через REST API
- Выполнять свою логику на стороне сервера
- Иметь собственный UI на HTML/JS
- Работать с другими модулями и компонентами Inn-Book