Ograniczenia modułu
Model bezpieczeństwa Orbito opiera się na zasadzie minimalnego zaufania do kodu modułu. Moduł działa w ściśle kontrolowanym środowisku, co chroni zarówno platformę, jak i dane firm korzystających z Twojego modułu. Poniżej opisano ograniczenia, z którymi musisz się liczyć podczas tworzenia modułu.
Izolacja sieciowa
Kontener Docker, w którym działa moduł, nie ma bezpośredniego dostępu do internetu ani do sieci wewnętrznej. Próba nawiązania połączenia TCP/UDP z zewnętrznym hostem bezpośrednio z kodu modułu zakończy się błędem.
Dotyczy to m.in.:
- bibliotek HTTP jak
axios,node-fetch, wbudowanegohttpsNode.js, - klientów baz danych łączących się z zewnętrznymi serwerami,
- połączeń WebSocket do zewnętrznych serwisów.
Brak wyjątków
Izolacja sieciowa jest egzekwowana na poziomie infrastruktury Docker, nie w warstwie aplikacyjnej. Żaden kod JavaScript nie jest w stanie jej obejść.
Z tego samego powodu moduł nie ma własnego publicznego adresu, więc nie odbiera też przekierowań od zewnętrznych serwisów. Callbacki OAuth odbiera rdzeń Orbito i przekazuje ich parametry modułowi dopiero po powrocie zalogowanego użytkownika. Szczegóły opisuje OAuth.
Zapytania HTTP przez Core.fetch
Jedynym sposobem na komunikację z zewnętrznymi API jest metoda Core.fetch, która przekierowuje żądanie przez serwer Orbito.
const { Core } = require('@orbito/api-lib');
// ✅ Poprawnie – przez Core.fetch
const response = await Core.fetch('https://api.przykladowy-serwis.pl/v1/data', {
method: 'POST',
headers: { 'Authorization': `Bearer ${token}` },
body: JSON.stringify({ key: 'value' })
});
const data = await response.json();
// ❌ Błąd – bezpośrednie połączenie jest zablokowane
const axios = require('axios');
const data = await axios.get('https://api.przykladowy-serwis.pl/v1/data');
Biała lista domen
Serwer Orbito przed przekazaniem żądania sprawdza, czy domena docelowa jest na liście domen zatwierdzonych przez administratora firmy w panelu Orbito. Jeśli domeny nie ma na liście, żądanie zostanie odrzucone z błędem autoryzacji.
Oznacza to, że:
- W dokumentacji Twojego modułu powinieneś poinformować administratorów, jakie domeny wymagają dodania do białej listy.
- Żądania do niezatwierdzonych domen nie dotrą do celu – zaplanuj odpowiednią obsługę błędu.
try {
const response = await Core.fetch('https://api.zewnetrzne.pl/endpoint', options);
// ...
} catch (err) {
// może to być błąd białej listy lub błąd sieci
Log.error('Błąd żądania HTTP', { err });
}
Izolacja systemu plików
Moduł widzi wyłącznie własny katalog roboczy – ten sam, który został wgrany jako archiwum ZIP. Nie ma dostępu do:
- systemu plików hosta (serwera, na którym działa Orbito),
- katalogów innych modułów,
- jakichkolwiek ścieżek poza własnym katalogiem.
Moduł może odczytywać pliki, które sam ze sobą dostarcza (np. szablony, pliki konfiguracyjne statyczne), ale nie powinien zapisywać danych do systemu plików. Kontener może zostać zrestartowany lub zastąpiony nową wersją modułu w dowolnym momencie, co spowoduje utratę zapisanych plików.
Persystencja danych
Do przechowywania danych używaj bazy MongoDB przez moduł DB, a do przechowywania plików (logo, wygenerowane miniatury, dokumenty) modułu Files — bucketu plików instalacji. Dane zapisane w systemie plików kontenera są tymczasowe.
