network

Вхідний HTTP — network.endpoints

Потрібно: WEB_END_POINTS

await network.endpoints.create(path, method, callbackName);
Аргумент Опис
path Суфікс після /addon/{addonId}/
method 'GET' або 'POST'
callbackName Ім'я для events.On

Повертає { success: true } або { success: false, message }.

Стрімінг файлу з ADDON_TMP_DIR

Обробник може повернути { file: absolutePath, contentType? } замість JSON. Головний процес віддає файл лише якщо шлях лежить всередині ADDON_TMP_DIR цього аддона (підтримується HTTP Range для перемотування медіа).

events.On('onMedia', ({ query }) => {
  if (query.token !== data.token) {
    return { success: false, message: 'Unauthorized' };
  }
  return { file: `${ADDON_TMP_DIR}/clip.mp4` };
});

Ендпоінт, захищений токеном, для web UI

events.On('onParams', ({ query }) => {
  if (query.token !== data.token) {
    return { success: false, message: 'Unauthorized' };
  }
  return api.config.getParams();
});

Socket.IO — network.socketEndpoints

Потрібно: SOCKET_END_POINTS

await network.socketEndpoints.create(path, callbackName);
events.On(callbackName, payload => { /* see api-events.md */ });

await network.socketEndpoints.emit(path, event, data, socketId?);

Підключення клієнта:

// path: /addon/socket.io
// namespace: /addon/{addonId}/{path}
const socket = io('http://localhost:3000/addon/my_addon/live', {
  path: '/addon/socket.io',
});

Пропустіть socketId в emit для broadcast.

Вихідний HTTP — network.request

Потрібно: NETWORK_REQUEST

Method Опис
get(url, headers?) GET, відповідь як текст
post(url, body, headers?) POST JSON (Content-Type: application/json)
put(url, body, headers?) PUT JSON
delete(url, headers?) DELETE
postForm(url, fields, headers?) POST application/x-www-form-urlencoded

Обмеження: 5 одночасних, таймаут 10 с, без приватних хостів, перенаправлення не слідуються.

const text = await network.request.get('https://api.example.com/v1/me');
const created = await network.request.post('https://api.example.com/v1/items', { title: 'Hello' });

Вихідний WebSocket — network.websocket

Потрібно: NETWORK_WEBSOCKET

const ws = await network.websocket.connect('wss://example.com/socket', {
  headers: { Authorization: 'Bearer token' },
  protocols: 'json',
});

ws.On('open', () => ws.Send({ type: 'hello' }));
ws.On('message', data => console.log(data));
ws.On('close', ({ code, reason }) => console.log(code, reason));
ws.On('error', err => console.error(err));

ws.Close();
ws.Destroy();

Send приймає рядок або JSON-серіалізований об'єкт. Максимум 5 одночасних з'єднань.

Вихідний Server-Sent Events — network.sse

Потрібно: NETWORK_SSE

const sse = await network.sse.connect('https://example.com/events', {
  headers: { Authorization: 'Bearer token' },
  lastEventId: '42',
  autoReconnect: true,
  reconnectInterval: 3000,
});

sse.On('open', () => console.log('stream open'));
sse.On('message', ({ data, event, id }) => console.log(event, data, id));
sse.On('error', err => console.error(err));
sse.On('close', () => console.log('stream closed'));

sse.Close();
sse.Destroy();

Корисне навантаження message: { data: string, event: string, id?: string } (event дорівнює "message", якщо поле SSE event: пропущено). Опційний lastEventId надсилається як заголовок Last-Event-ID (також оновлюється з отриманих полів id: при перепідключенні).

Опція За замовчуванням Опис
autoReconnect false При true перепідключається після кінця потоку або мережевої помилки (як браузерний EventSource). close спрацьовує лише після Close() / Destroy().
reconnectInterval 3000 Початкова затримка перепідключення в мс (обмеження 50–60000). Перевизначається полями SSE retry: з сервера.

Максимум 5 одночасних з'єднань; перенаправлення не слідуються.

Вихідний SignalR — network.signalr

Потрібно: NETWORK_SIGNALR

Глобали LogLevel і HttpTransportType з @microsoft/signalr доступні в пісочниці.

const connection = (
  await network.signalr.CreateSignalRConnection(
    'https://example.com/hub?access_token=TOKEN',
    { transport: HttpTransportType.WebSockets }
  )
)
  .withAutomaticReconnect()
  .configureLogging(LogLevel.Information)
  .build();

connection.on('DonationCreated', donation => console.log(donation));
await connection.start();
await connection.invoke('SomeMethod', arg);
await connection.stop();

CreateSignalRConnection перевіряє URL (лише http:// / https://, той самий blocklist хостів, що й HTTP) і повертає HubConnectionBuilder з уже викликаним withUrl. Повторний withUrl і зміна connection.baseUrl заборонені. Максимум 5 одночасних запущених з'єднань. Кастомні httpClient і об'єкти транспорту не дозволені.