addons (RPC і події)
Обмін між аддонами, окремо від events (HTTP). Головний процес маршрутизує запити та підписки на події між воркерами.
addons.request(targetAddonId, method, params?)
Викликає обробник, зареєстрований в іншому увімкненому та запущеному аддоні.
const res = await addons.request('other_addon', 'getChannelId', { platform: 'example' });
if (res.success) {
console.log(res.result);
}
Повертає { success: true, result? } або { success: false, message? }.
addons.onRequest(method, handler)
Експонує метод для інших аддонів.
addons.onRequest('getChannelId', async ({ fromAddonId, params }) => {
console.log('Request from', fromAddonId);
return { channelId: '12345' };
});
Обробник отримує { fromAddonId, params } і повертає payload відповіді.
addons.offRequest(method)
Видаляє раніше зареєстрований обробник.
addons.emit(event, data?)
Публікує подію всім аддонам, підписаним на цю подію у поточного аддона. Доставка fire-and-forget (обробники не відповідають емітеру).
await addons.emit('streamOnline', { title: 'Live now' });
Повертає { success: true, delivered } (delivered — кількість запущених підписників, яким пішла подія) або { success: false, message? }.
addons.subscribe(sourceAddonId, event, handler)
Підписка на події іншого встановленого аддона. Джерело може бути вимкнене або ще не запущене; події надходять, коли воно емітить у робочому стані.
const sub = await addons.subscribe('twitch', 'streamOnline', ({ fromAddonId, data }) => {
console.log('Event from', fromAddonId, data);
});
if (sub.success) {
// later: sub.Destroy();
}
Обробник отримує { fromAddonId, data }. Повертає { success: true, id, Destroy } або { success: false, message? }.
Викличте Destroy(), щоб відписатися. Допускається кілька підписок на одну пару source+event.
addons.getInfo(addonIds?)
Читає маніфест і статус увімкнення встановлених аддонів. Додатковий дозвіл не потрібен.
Без addonIds повертаються всі встановлені аддони. Передайте масив id, щоб запросити конкретні аддони. Невідомі id включаються з missing: true і enabled: false.
const all = await addons.getInfo();
if (all.success) {
for (const addon of all.addons) {
console.log(addon.id, addon.enabled, addon.manifest?.version);
}
}
const pair = await addons.getInfo(['twitch', 'other_addon']);
Кожен запис: { id, enabled, manifest, missing }. manifest — розібраний manifest.json або null, якщо файлів немає.
Залежності в маніфесті
Використовуйте depends_on: ["other_addon"] у manifest.json, якщо аддону потрібно, щоб інший аддон був встановлений і увімкнений до активації.
Коли використовувати RPC, а коли події
| Задача | API |
|---|---|
| Запросити дані / дію в іншого аддона і дочекатися відповіді | request / onRequest |
| Пушити оновлення, щоб інші не поліли | emit / subscribe |