Агент функціональності
Агент функціональності призначений для надання бізнес-схемі переліку можливостей для опису обробників бізнес-схеми. Функціональність поділена на простори імен, в які входить цільовий функціонал.
Структура агента
Доступ до функціональності агента може бути отриманий наступним чином на прикладі опису кінцевого маршруту документа "Маршрутизатор":
import { setRouter } from "@x-fiber/proton";
export const BusUsersAggRouter = setRouter<'getOne'>({
getOne: {
GET: {
scope: "private:user",
params: [
{
name: 'userId',
scope: 'required',
}
],
handler: async (request, agents, context) => {
agents.fnAgent // .{namespace}.{namespace-method}
},
},
},
});
Наразі доступні наступні простори імен:
| Простір | Призначення |
|---|---|
discovery | Робота з конфігураційними змінними |
logger | Робота з логуванням |
utils | Загальні, допоміжні функції |
scrambler | Робота з шифруванням, дешифруванням та хешуванням |
sessions | Робота з сесіями |
exception | Робота з виключеннями |
permissions | Робота з правами доступу |
scheduler | Робота з планувальником задач |
fileStorage | Робота з файловим сховищем |
ws | Організація роботи з ws подіями |
broker | Організація роботи з брокером повідомлень broker |
cache | Кешування даних |
discovery
Простір імен discovery призначений для орга нізації роботи з конфігураційними даними. Простір імен надає можливість
отримувати конфігураційні дані здійснюючи перевірку на тип відповідної конфігураційної змінної.
getMandatory
Метод для отримання конфігураційної змінної заданого типу, або, в разі її відсутності - виклик помилки.
type ConfigParameter = string | boolean | number | (string | boolean | number)[]
type ExtendedObject = Record<string, ExtendedObject | ConfigParameter>
type KeyConfigLiteralBuilder<
T,
F extends ConfigParameter
> = T extends Record<string, unknown>
? {
[K in keyof T]: T[K] extends F
? `${string & K}`
: K extends string
? `${string & K}.${KeyConfigLiteralBuilder<T[K], F>}`
: never;
}[keyof T]
: string;
type getMandatory<T, C extends ExtendedObject = ExtendedObject> = (
name: KeyConfigLiteralBuilder<C, T>
) => T;
де:
- Тип функції: Синхронна.
- Типи даних:
ConfigParameter- Перелік можливих типів даних конфігурації.ExtendedObject- Тип обʼєкта, який передбачає будь-яку кількість вкладенностей, але кінцевим значенням повинен бути типConfigParameter.KeyConfigLiteralBuilder- Тип який аналізує тип конфігурації та надає відповідні шляхи доступу до можливих змінних.T- Тип даних конфігураційної змінної.C- Тип обʼєкта конфігурації, який має структуруExtendedObject
- Аргументи:
- Шлях доступу до змінної, який будується на основі структури типу конфігурації.
- Результат:
- Повернення змінної з типом даних
Tабо виклик помилкиthrow e
- Повернення змінної з типом даних
import { setRouter } from "@x-fiber/proton";
export const BusUsersAggRouter = setRouter<'getOne'>({
getOne: {
GET: {
scope: "private:user",
params: [
{
name: 'userId',
scope: 'required',
}
],
handler: async (request, agents, context) => {
const { discovery } = agents.fnAgent;
type Config = {
integrations: {
system1: {
enable: boolean;
path: string;
fallbackPath: string;
};
};
urls: {
callbackUrl: string;
robinUrls: string[]
};
retryNumber: number;
certificatePath: string
};
const path = discovery.getMandatory<string, Config>("integrations.system1.path");
console.log(path) // string environment or throw e
},
},
},
});
getString
Метод для отримання конфігураційної змінної строкового типу або, в разі її відсутності - повернення значення за замовчуванням.
type ConfigParameter = string | boolean | number | (string | boolean | number)[]
type ExtendedObject = Record<string, ExtendedObject | ConfigParameter>
type KeyConfigLiteralBuilder<
T,
F extends ConfigParameter
> = T extends Record<string, unknown>
? {
[K in keyof T]: T[K] extends F
? `${string & K}`
: K extends string
? `${string & K}.${KeyConfigLiteralBuilder<T[K], F>}`
: never;
}[keyof T]
: string;
type getString<C extends ExtendedObject = ExtendedObject> = (
name: KeyConfigLiteralBuilder<C, string>,
def: string
) => string;
де:
- Тип функції: Синхронна.
- Типи даних:
ConfigParameter- Перелік можливих типів даних конфігурації.ExtendedObject- Тип обʼєкта, який передбачає будь-яку кількість вкладенностей, але кінцевим значенням повинен бути типConfigParameter.KeyConfigLiteralBuilder- Тип який аналізує тип конфігурації та надає відповідні шляхи доступу до можливих змінних.C- Тип обʼєкта конфігурації, який має структуруExtendedObject
- Аргументи:
- Шлях доступу до змінної, який будується на основі структури типу конфігурації.
- Значення за замовчуванням, яке буде повернуто, в разі відсутності змінної або даних в змінній.
- Результат:
- Повернення змінної зі строковим типом або значення за замовчуванням
import { setRouter } from "@x-fiber/proton";
export const BusUsersAggRouter = setRouter<'getOne'>({
getOne: {
GET: {
scope: "private:user",
params: [
{
name: 'userId',
scope: 'required',
}
],
handler: async (request, agents, context) => {
const { discovery } = agents.fnAgent;
type Config = {
integrations: {
system1: {
enable: boolean;
path: string;
fallbackPath: string;
};
};
urls: {
callbackUrl: string;
robinUrls: string[]
};
retryNumber: number;
certificatePath: string
};
const url = discovery.getString<Config>("integrations.urls.callbackUrl", 'v1/result-callback');
console.log(url) // string environment or 'v1/result-callback'
},
},
},
});
getNumber
Метод для отримання конфігураційної змінної числового типу або, в разі її відсутності - повернення значення за замовчуванням.
type ConfigParameter = string | boolean | number | (string | boolean | number)[]
type ExtendedObject = Record<string, ExtendedObject | ConfigParameter>
type KeyConfigLiteralBuilder<
T,
F extends ConfigParameter
> = T extends Record<string, unknown>
? {
[K in keyof T]: T[K] extends F
? `${string & K}`
: K extends string
? `${string & K}.${KeyConfigLiteralBuilder<T[K], F>}`
: never;
}[keyof T]
: string;
type getNumber<C extends ExtendedObject = ExtendedObject> = (
name: KeyConfigLiteralBuilder<C, number>,
def: number
) => string;
де:
- Тип функції: Синхронна.
- Типи даних:
ConfigParameter- Перелік можливих типів даних конфігурації.ExtendedObject- Тип обʼєкта, який передбачає будь-яку кількість вкладенностей, але кінцевим значенням повинен бути типConfigParameter.KeyConfigLiteralBuilder- Тип який аналізує тип конфігурації та надає відповідні шляхи доступу до можливих змінних.C- Тип обʼєкта конфігурації, який має структуруExtendedObject
- Аргументи:
- Шлях доступу до змінної, який будується на основі структури типу конфігурації.
- Значення за замовчуванням, яке буде повернуто, в разі відсутності змінної або даних в змінній.
- Результат:
- Повернення змінної з числовим типом або значення за замовчуванням
import { setRouter } from "@x-fiber/proton";
export const BusUsersAggRouter = setRouter<'getOne'>({
getOne: {
GET: {
scope: "private:user",
handler: async (request, agents, context) => {
const { discovery } = agents.fnAgent;
type Config = {
integrations: {
system1: {
enable: boolean;
path: string;
fallbackPath: string;
};
};
urls: {
callbackUrl: string;
robinUrls: string[]
};
retryNumber: number;
certificatePath: string
};
const retryNumber = discovery.getNumber<Config>("integrations.retryNumber", 4);
console.log(retryNumber) // number environment or 4
},
},
},
});
getBoolean
Метод для отримання конфігураційної змінної булевого типу або, в разі її відсутності - повернення значення за замовчуванням.
type ConfigParameter = string | boolean | number | (string | boolean | number)[]
type ExtendedObject = Record<string, ExtendedObject | ConfigParameter>
type KeyConfigLiteralBuilder<
T,
F extends ConfigParameter
> = T extends Record<string, unknown>
? {
[K in keyof T]: T[K] extends F
? `${string & K}`
: K extends string
? `${string & K}.${KeyConfigLiteralBuilder<T[K], F>}`
: never;
}[keyof T]
: string;
type getBoolean<C extends ExtendedObject = ExtendedObject> = (
name: KeyConfigLiteralBuilder<C, boolean>,
def: boolean
) => string;
де:
- Тип функції: Синхронна.
- Типи даних:
ConfigParameter- Перелік можливих типів даних конфігурації.ExtendedObject- Тип обʼєкта, який передбачає будь-яку кількість вкладенностей, але кінцевим значенням повинен бути типConfigParameter.KeyConfigLiteralBuilder- Тип який аналізує тип конфігурації та надає відповідні шляхи доступу до можливих змінних.C- Тип обʼєкта конфігурації, який має структуруExtendedObject
- Аргументи:
- Шлях доступу до змінної, який будується на основі структури типу конфігурації.
- Значення за замовчуванням, яке буде повернуто, в разі відсутності змінної або даних в змінній.
- Результат:
- Повернення змінної з числовим типом або значення за замовчуванням
import { setRouter } from "@x-fiber/proton";
export const BusUsersAggRouter = setRouter<'getOne'>({
getOne: {
GET: {
scope: "private:user",
params: [
{
name: 'userId',
scope: 'required',
}
],
handler: async (request, agents, context) => {
const { discovery } = agents.fnAgent;
type Config = {
integrations: {
system1: {
enable: boolean;
path: string;
fallbackPath: string;
};
};
urls: {
callbackUrl: string;
robinUrls: string[]
};
retryNumber: number;
certificatePath: string
};
const isEnable = discovery.getBoolean<Config>("integrations.system1.enable", false);
console.log(isEnable) // boolean environment or false
},
},
},
});
getArray
Метод для отримання конфігураційної змінної булевого типу або, в разі її відсутності - повернення значення за замовчуванням.
type ConfigParameter = string | boolean | number | (string | boolean | number)[]
type ExtendedObject = Record<string, ExtendedObject | ConfigParameter>
type KeyConfigLiteralBuilder<
T,
F extends ConfigParameter
> = T extends Record<string, unknown>
? {
[K in keyof T]: T[K] extends F
? `${string & K}`
: K extends string
? `${string & K}.${KeyConfigLiteralBuilder<T[K], F>}`
: never;
}[keyof T]
: string;
type getArray<T, C extends ExtendedObject = ExtendedObject> = (
name: KeyConfigLiteralBuilder<C, Array<T>>,
def: Array<T>
) => Array<T>;
де:
- Тип функції: Синхронна.
- Типи даних:
ConfigParameter- Перелік можливих типів даних конфігурації.ExtendedObject- Тип обʼєкта, який передбачає будь-яку кількість вкладенностей, але кінцевим значенням повинен бути типConfigParameter.KeyConfigLiteralBuilder- Тип який аналізує тип конфігурації та надає відповідні шляхи доступу до можливих змінних.T- Тип даних елементу масиву.C- Тип обʼєкта конфігурації, який має структуруExtendedObject
- Аргументи:
- Шлях доступу до змінної, який будується на основі структури типу конфігурації.
- Значення за замовчуванням, яке буде повернуто, в разі відсутності змінної або даних в змінній.
- Результат:
- Повернення змінної з масивом значень або значення за замовчуванням
import { setRouter } from "@x-fiber/proton";
export const BusUsersAggRouter = setRouter<'getOne'>({
getOne: {
GET: {
scope: "private:user",
params: [
{
name: 'userId',
scope: 'required',
}
],
handler: async (request, agents, context) => {
const { discovery } = agents.fnAgent;
type Config = {
integrations: {
system1: {
enable: boolean;
path: string;
fallbackPath: string;
};
};
urls: {
callbackUrl: string;
robinUrls: string[]
};
retryNumber: number;
certificatePath: string
};
const urls = discovery.getArray<string, Config>("integrations.urls.robinUrls", []);
console.log(urls) // string[] environment or []
},
},
},
});
getBuffer
Метод призначений для отримання буфера файлу або null або виклику помилки throw e в залежності від типу ознаки.
type ConfigParameter = string | boolean | number | (string | boolean | number)[]
type ExtendedObject = Record<string, ExtendedObject | ConfigParameter>
type KeyConfigLiteralBuilder<
T,
F extends ConfigParameter
> = T extends Record<string, unknown>
? {
[K in keyof T]: T[K] extends F
? `${string & K}`
: K extends string
? `${string & K}.${KeyConfigLiteralBuilder<T[K], F>}`
: never;
}[keyof T]
: string;
type getBuffer<C extends ExtendedObject = ExtendedObject> = (
name: KeyConfigLiteralBuilder<C, string>,
err?: boolean
) => Promise<Buffer | null>;
де:
- Тип функції: Асинхронна.
- Типи даних:
ConfigParameter- Перелік можливих типів даних конфігурації.ExtendedObject- Тип обʼєкта, який передбачає будь-яку кількість вкладенностей, але кінцевим значенням повинен бути типConfigParameter.KeyConfigLiteralBuilder- Тип який аналізує тип конфігурації та надає відповідні шляхи доступу до можливих змінних.C- Тип обʼєкта конфігурації, який має структуруExtendedObject
- Аргументи:
- Шлях доступу до змінної, який будується на основі структури типу конфігурації.
- Ознака дії, в разі відсутності файлу або невірного шляху до файлу, якщо
false- повертатиnull, якщоtrue- викликати помилку.
- Результат:
- Повернення буфера файлу або
nullабо відбувається викликання помилки в разі ознакиerr-trueта відсутності файлу.
- Повернення буфера файлу або
import { setRouter } from "@x-fiber/proton";
export const BusUsersAggRouter = setRouter<'getOne'>({
getOne: {
GET: {
scope: "private:user",
params: [
{
name: 'userId',
scope: 'required',
}
],
handler: async (request, agents, context) => {
const { discovery } = agents.fnAgent;
type Config = {
integrations: {
system1: {
enable: boolean;
path: string;
fallbackPath: string;
};
};
urls: {
callbackUrl: string;
robinUrls: string[]
};
retryNumber: number;
certificatePath: string
};
const cert = await iscovery.getBuffer<Config>("integrations.certificatePath", false);
console.log(cert) // buffer environment or 'null'
},
},
},
});
logger
Простір імен logger призначений для організації роботи з логуванням. Логування здійснюється в відповідністю до рівня.
Рівень логування та тип транспорту визначається конфігураційними параметрами.
Опис переліку функцій простору імен logger знаходиться в активній розробці.
utils
Простір імен utils призначений для опису допоміжних загальних функцій, такий як uuid v4(), який надає унікальний ідентифікатор.
Опис переліку допоміжних функцій простору імен utils знаходиться в активній розробці.
scrambler
Простір імен scrambler надає перелік методів шифрування, дешифрування чи хешування. Окрім цього простір імен надає можливість
перевірки збігу хешів тощо.
Опис переліку функцій простору імен scrambler знаходиться в активній розробці.
sessions
Простір імен sessions надає перелік методів по роботі з сесіями, ці методи полягають в можливості створити, закрити,
оновити та інших можливостях роботи з сесіями.
Опис переліку функцій простору імен sessions знаходиться в активній розробці.
exception
Простір імен exception надає перелік методів для генерації виключень. Різні типи виключень дозволяють генерувати та
обробляти виключення ядром обчислень по різному.
Опис переліку функцій простору імен exception знаходиться в активній ро зробці.
permissions
Простір імен permissions надає перелік методів для роботи з правами доступу. X-Fiber описує модель прав доступу через атрибути ролі.
Так у відповідної ролі є набір атрибутів - доступні дії, представлення, події, тощо. В перспективі X-Fiber додасть
також умови для організацію та власний атрибутивний склад. Таким чином простір імен permissions дозволяє створити роль,
яка описує перелік атрибутів доступу.
Опис переліку функцій простору імен permissions знаходиться в активній розробці.
scheduler
Простір імен scheduler надає перелік методів для прослуховування подій звʼязаних з виконанням дій, а також перелік
методів по організації роботи з задачами планувальника задач.
Опис переліку функцій простору імен scheduler знаходиться в активній розробці.
fileStorage
Простір імен fileStorage надає два простори імен - для організації роботи файлів, які зберігаються в памʼяті роботи вер-сервера,
та організації роботи файлів, які зберігаються в Redis сховищі даних. Простір імен дозволяє організувати роботу з файлами.
Опис переліку функцій простору імен fileStorage знаходиться в активній розробці.
ws
Простір імен ws надає перелік методів для генерації ws подій.
Опис переліку функцій простору імен ws знаходиться в активній розробці.
broker
Простір імен broker надає перелік методів для генерації повідомлень, які відносяться до брокера повідомлень.
Опис переліку функцій простору імен broker знаходиться в активній розробці.
cache
Простір імен cache надає перелік методів по роботі з кешуванням
Опис переліку функцій простору імен cache знаходиться в активній розробці.