@czlonkowski/n8n-nodes-librus 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,18 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.0Unreleased
3
+ ## 0.1.22026-09-08
4
+
5
+ - Diagnose protocol failures with fixed validation labels, primitive type names and inbox page/item positions, without response values, message IDs or credentials.
6
+ - Distinguish authentication failures from inbox scan failures while preserving strict validation and trigger history on failed scans.
7
+
8
+ ## 0.1.1 — 2026-09-08
9
+
10
+ - Fix credential connection tests failing with PROTOCOL_ERROR on empty HTTP redirects returned by n8n's legacy request helper.
11
+ - Normalize missing response bodies without accepting malformed JSON or exposing request metadata.
12
+ - Add regression coverage for the complete credential login flow and invalid inbox responses.
13
+ - Simplify the Polish README around community node installation and usage; move development and release instructions to docs/development.md.
14
+
15
+ ## 0.1.0 — 2026-09-07
4
16
 
5
17
  - Scaffold an MIT-licensed, unofficial self-hosted n8n community node.
6
18
  - Add browser-session credentials and a credential connection test.
package/README.md CHANGED
@@ -1,152 +1,88 @@
1
- <img src="nodes/Librus/librus.png" alt="Logo integracji Librus: otwarta książka, koperta i kropka oznaczająca nową wiadomość" width="112" height="112">
1
+ <img src="https://raw.githubusercontent.com/czlonkowski/n8n-nodes-librus/main/nodes/Librus/librus.png" alt="Logo integracji Librus" width="112" height="112">
2
2
 
3
- # @czlonkowski/n8n-nodes-librus
3
+ # Librus dla n8n
4
4
 
5
- Nieoficjalna paczka węzłów społecznościowych n8n do odczytywania wiadomości z dziennika Librus Synergia. Otwarty kod źródłowy, licencja MIT.
5
+ Pobieraj wiadomości z Librus Synergia i uruchamiaj automatyzacje po otrzymaniu nowych wiadomości. Paczka zawiera dwa węzły: **Librus** i **Librus Trigger**.
6
6
 
7
- **Projekt jest na etapie eksperymentalnym.** Na rzeczywistym koncie sprawdzono logowanie, pobranie danych jednej wiadomości oraz jej treści z modułu szczegółów. Do zweryfikowania pozostają: zachowanie statusu nieprzeczytanych wiadomości, kompletność treści w różnych typach wiadomości, pobieranie kolejnych stron skrzynki oraz działanie przy cyklicznym uruchamianiu.
7
+ To nieoficjalna, eksperymentalna integracja do **samodzielnie hostowanego n8n**. Nie jest dostępna w n8n Cloud. Instancja n8n musi korzystać z Node.js 24 lub nowszego.
8
8
 
9
- ## Dostępne funkcje
9
+ ## Instalacja
10
10
 
11
- Operacja **Librus Message Get Many** loguje się do Librusa, otwiera sesję modułu wiadomości i zwraca każdą wiadomość jako osobny element danych n8n.
11
+ 1. W n8n przejdź do **Settings Community nodes Install**.
12
+ 2. Wklej pełną nazwę paczki, razem ze znakiem `@`:
12
13
 
13
- Można pobrać określoną liczbę wiadomości albo całą skrzynkę, strona po stronie. **Read Status** pozwala wybrać wszystkie (**All**), tylko nieprzeczytane (**Unread**) lub przeczytane (**Read**). Filtr działa na dacie odczytania z listy: brak daty albo pusty tekst oznacza wiadomość nieprzeczytaną. **Limit dotyczy pasujących wiadomości**. Węzeł przegląda metadane kolejnych stron lokalnie, więc znalezienie starszych nieprzeczytanych może wymagać zwiększenia Maximum Pages. Pełną treść pobiera dopiero dla wiadomości wybranych przez filtr i limit. Wynik zawiera identyfikator wiadomości zapisany jako tekst, dane nadawcy, temat, daty w oryginalnym formacie, datę odczytania, informację o załącznikach i tagi. Opcja **Include Content** dołącza treść, a **Content Source** określa jej źródło:
14
+ ```text
15
+ @czlonkowski/n8n-nodes-librus
16
+ ```
14
17
 
15
- | Content Source | Zawartość pola `content` |
16
- | --- | --- |
17
- | **Preview** — domyślnie | Skrót z listy wiadomości. Może urwać się w środku zdania. |
18
- | **Full Message** | Treść pobrana osobno ze szczegółów każdej wiadomości. |
19
-
20
- W obu trybach treść jest dekodowana z base64 do UTF-8, z zachowaniem HTML. Pole `contentSource` w wyniku ma wartość `preview` albo `full`. Przy wyłączonym **Include Content** oba pola są pomijane.
21
-
22
- **Aby otrzymać pełną treść, włącz Include Content i wybierz Content Source → Full Message.** Samo włączenie Include Content zachowuje dotychczasowe działanie — podgląd z listy. W próbie na rzeczywistym koncie podgląd miał 95 znaków, a odpowiedź ze szczegółów tej samej wiadomości zawierała 463 znaki i zaczynała się od całego podglądu.
23
-
24
- Pobranie szczegółów **może oznaczyć wiadomość jako przeczytaną w Librusie**. Nie sprawdzono jeszcze tego efektu na nieprzeczytanej wiadomości; próbę wykonano na wiadomości już przeczytanej. Wybierz Full Message świadomie, szczególnie w przepływach uruchamianych automatycznie.
25
-
26
- **Librus → Message → Get Content** pobiera pełną treść pojedynczej wiadomości po **Message ID** i zwraca `messageId`, `content` oraz `contentSource: "full"`. Można przekazać ID z triggera wyrażeniem `{{ $json.messageId }}`. Metadane pozostają dostępne w danych poprzedniego węzła. Także ta operacja może oznaczyć wiadomość jako przeczytaną.
27
-
28
- Paczka nie udostępnia wysyłania, usuwania, pobierania załączników ani osobnych operacji **Mark as Read / Mark as Unread**. W zbadanym interfejsie nowego modułu wiadomości Librusa nie znaleziono operacji przywracania statusu nieprzeczytanej; dlatego nie deklarujemy jej obsługi. Nadal trzeba sprawdzić, czy samo pobranie listy przez Librusa zmienia status odczytania.
29
-
30
- Dla każdego elementu wejściowego powstaje nowa sesja oparta na ciasteczkach. Nie ma jeszcze trwałego przechowywania sesji ani obsługi tokena odświeżającego. Jeśli podczas pobierania wiadomości zostanie rozpoznane wygaśnięcie sesji, węzeł może zalogować się ponownie jeden raz. Błędne dane logowania, brak dostępu, ograniczenie liczby żądań i błędy serwera nie uruchamiają pętli logowania.
31
-
32
- ## Uruchomienie lokalne
33
-
34
- Wymagane są **Node.js 24 LTS** i npm. Testowano na Node.js 24.20.0.
35
-
36
- ```sh
37
- git clone https://github.com/czlonkowski/n8n-nodes-librus.git
38
- cd n8n-nodes-librus
39
- npm ci
40
- npm run check
41
- N8N_LISTEN_ADDRESS=127.0.0.1 N8N_PORT=5689 npm run dev
42
- ```
43
-
44
- Edytor n8n będzie dostępny pod adresem **http://localhost:5689**.
45
-
46
- Przed uruchomieniem sprawdź `node --version`: potrzebna jest wersja 24 lub nowsza. Plik `.nvmrc` nie przełącza wersji Node.js automatycznie. Jeśli używasz nvm, wykonaj najpierw `nvm use`.
47
-
48
- Projekt korzysta z oficjalnego narzędzia `@n8n/node-cli` do budowania paczki, sprawdzania kodu i uruchamiania środowiska deweloperskiego. Skrypt `dev` przechowuje osobny profil n8n w katalogu **`../.n8n-librus-dev`**, poza repozytorium. Nie przenoś profilu do środka projektu: narzędzie tworzy w nim dowiązanie do repozytorium, co prowadziłoby do zapętlenia skanowania katalogów i błędu `ENAMETOOLONG`.
49
-
50
- Nie dodawaj do repozytorium profilu n8n ani danych konta. Testy automatyczne korzystają wyłącznie z fikcyjnych odpowiedzi HTTP — nie łączą się z Librusem i nie wymagają prawdziwych danych logowania.
51
-
52
- Szczegóły techniczne opisano w dokumentach: [architektura](docs/architecture.md), [testy na rzeczywistym koncie](docs/live-verification.md), [wyniki weryfikacji](docs/verification.md) i [bezpieczeństwo](SECURITY.md). Te dokumenty techniczne są obecnie po angielsku.
53
-
54
- ## Instalacja we własnej instancji n8n
18
+ 3. Zatwierdź instalację. W edytorze workflow wyszukaj **Librus** lub **Librus Trigger**.
55
19
 
56
- **Paczka nie została jeszcze opublikowana w npm.** Aby przygotować archiwum do instalacji, wykonaj w katalogu projektu:
20
+ Jeśli widzisz błąd `Failed to check package version existence`, sprawdź nazwę: `czlonkowski/n8n-nodes-librus` bez początkowego `@` jest niepoprawne. [Paczka w npm](https://www.npmjs.com/package/@czlonkowski/n8n-nodes-librus).
57
21
 
58
- ```sh
59
- npm ci
60
- npm run check
61
- npm pack
62
- ```
63
-
64
- Zainstaluj powstały plik `.tgz` w katalogu węzłów społecznościowych swojej **testowej instancji n8n**, a następnie uruchom ją ponownie. Przy standardowym profilu jest to katalog `~/.n8n/nodes`. Jeśli korzystasz z kontenera, skopiuj archiwum do kontenera i zadbaj o trwały wolumen z danymi użytkownika n8n. Pomocna jest [instrukcja ręcznej instalacji n8n](https://docs.n8n.io/integrations/community-nodes/installation-and-management/manual-installation/).
65
-
66
- Do czasu publikacji paczki nie używaj polecenia `npm install @czlonkowski/n8n-nodes-librus`.
67
-
68
- Projekt jest przeznaczony do **samodzielnie hostowanego n8n jako niezweryfikowany węzeł społecznościowy**. Biblioteka `tough-cookie` zapewnia obsługę ciasteczek z uwzględnieniem ich domen i ścieżek. Ta zależność wyklucza obecną wersję z weryfikacji n8n Cloud według wymogu braku zależności uruchomieniowych, dlatego `n8n.strict` ma wartość `false`.
69
-
70
- Zgodnie z konwencją paczek n8n pole `peerDependencies` zawiera `n8n-workflow: "*"`. Nie oznacza to zgodności ze wszystkimi wersjami n8n. Typy używane podczas budowania pochodzą z `n8n-workflow` 2.38.1; próbę na rzeczywistym koncie przeprowadzono w n8n 2.37.10.
71
-
72
- ## Konfiguracja i pierwszy test
73
-
74
- 1. W interfejsie n8n utwórz dane uwierzytelniające typu **Librus Session API**. Podaj login i hasło akceptowane przez formularz Synergii — login może różnić się od adresu e-mail konta LIBRUS. n8n szyfruje te dane swoim kluczem instancji.
75
- 2. W dzienniku zanotuj, które z ostatnich wiadomości są nieprzeczytane, bez otwierania ich. Zrób to przed testem połączenia: test danych logowania również pobiera jeden wpis z listy wiadomości, choć nie zwraca jego zawartości.
76
- 3. Utwórz przepływ **Manual Trigger → Librus**. Wybierz **Message → Get Many**, wyłącz **Return All**, ustaw **Limit: 10** i pozostaw **Include Content** wyłączone.
77
- 4. Uruchom węzeł i porównaj wyniki z dziennikiem. Odśwież listę w Librusie i sprawdź, czy status nieprzeczytanych wiadomości się nie zmienił.
78
- 5. Włącz **Include Content**, wybierz **Content Source → Full Message** i porównaj treść wiadomości wcześniej przeczytanej w dzienniku. Sprawdź także polskie znaki i formatowanie. Na pierwszą próbę ustaw **Limit: 1**.
79
-
80
- Parametr **Maximum Pages** domyślnie wynosi 20, a jego maksymalna wartość to 50. Jedno żądanie pobiera do 50 wpisów. Po osiągnięciu limitu stron, żądań lub czasu węzeł zgłasza błąd zamiast zwracać niepełny wynik. Daty pozostają w formacie źródłowym, ponieważ interpretacja strefy czasowej nie została jeszcze zweryfikowana.
81
-
82
- Tryb **Full Message** obsługuje do **50 wiadomości na wykonanie**. Szczegóły są pobierane kolejno, w tej samej sesji, dopiero po zakończeniu pobierania listy, zastosowaniu limitu i usunięciu duplikatów identyfikatorów. Jeśli wynik zawiera więcej niż 50 wiadomości, węzeł zgłosi `FULL_CONTENT_LIMIT` przed pobraniem szczegółów. Wyłącz wtedy Return All i ustaw Limit na 50 lub mniej.
22
+ ## Połączenie z Librusem
83
23
 
84
- Błąd pobrania szczegółów zatrzymuje wykonanie węzeł nie zastępuje brakującej pełnej treści skrótem. Nie zwraca też częściowego wyniku, choć wcześniejsze żądania szczegółów mogły już wpłynąć na status odczytania w Librusie. Pole `readDate` pochodzi z listy pobranej przed odczytem szczegółów. Przy filtrze Unread i odnowieniu wygasłej sesji zachowywany jest już wybrany zestaw identyfikatorów, aby wcześniejszy odczyt szczegółów nie usunął ich z bieżącego wyniku.
24
+ W wybranym węźle utwórz dane uwierzytelniające **Librus Session API** i wpisz login oraz hasło używane do logowania w Synergii. Login może różnić się od adresu e-mail konta LIBRUS.
85
25
 
86
- Po włączeniu **Include Content** treść wiadomości trafia do zwykłych danych wykonania n8n. Jej przechowywanie zależy od ustawień zapisywania i usuwania historii wykonań. Podgląd dołączany przez trigger i treść z Get Content również trafiają do danych wykonania. Jeśli wyświetlasz zwrócony HTML w innej aplikacji, potraktuj go jako niezaufaną treść.
26
+ Zapisz dane i sprawdź połączenie. Jeśli pojawi się `ACTION_REQUIRED`, zaloguj się w [serwisie Librus](https://portal.librus.pl/rodzina/synergia/loguj), uzupełnij wymagane potwierdzenia i ponów próbę w n8n.
87
27
 
88
- ## Librus Trigger nowa wiadomość
28
+ Dane logowania przechowywane jako credentials w n8n. Węzeł nie zwraca hasła ani ciasteczek sesji w wynikach.
89
29
 
90
- Osobny węzeł **Librus Trigger** cyklicznie sprawdza skrzynkę i uruchamia przepływ dla nowych identyfikatorów `messageId`. Jest to odpytywanie Librusa według harmonogramu; opóźnienie zależy od **Poll Times**.
30
+ ## Pobieranie wiadomości
91
31
 
92
- 1. Dodaj **Librus Trigger**, wybierz zapisane dane **Librus Session API** i zdarzenie **New Message**.
93
- 2. Ustaw **Poll Times** na **Every X → 5 → Minutes** lub rzadziej. n8n domyślnie ustawia minutę, więc zmień ten parametr. Bezpieczna częstotliwość dla Librusa nadal wymaga sprawdzenia.
94
- 3. Użyj ręcznego testu triggera: zwróci jedną bieżącą wiadomość jako próbkę, niezależnie od jej wieku i statusu. Pusta skrzynka nie zwróci próbki. Test nie zmienia historii wykrytych wiadomości.
95
- 4. Połącz kolejne kroki i zapisz przepływ. Przykład: **Librus Trigger → Librus (Get Content, Message ID: `{{ $json.messageId }}`) → wybrany kanał powiadomień**. Do powiadomienia z samym tematem i podglądem wystarczy bezpośrednie wyjście triggera.
96
- 5. Po opublikowaniu/aktywacji przepływu pierwsze automatyczne sprawdzenie zapamięta całą obecną skrzynkę i nie uruchomi dalszych kroków. Dopiero kolejne sprawdzenia zwrócą nowe wiadomości. Zwykłe zapisanie nieaktywnego workflow nie uruchamia harmonogramu.
32
+ W węźle **Librus** wybierz **Message Get Many**.
97
33
 
98
- Trigger sprawdza zarówno przeczytane, jak i nieprzeczytane wiadomości. Wiadomość odczytana w aplikacji przed kolejnym sprawdzeniem nadal zostanie wykryta. Zmiana statusu starej wiadomości nie jest nowym zdarzeniem. **Include Preview** domyślnie dołącza skróconą treść; trigger nie pobiera szczegółów wiadomości. Możesz wyłączyć podgląd i otrzymywać same metadane.
99
-
100
- Stan triggera jest przechowywany przez n8n osobno dla węzła: wersja formatu, skrót identyfikujący konto i identyfikatory wykrytych wiadomości. Nie zawiera hasła, ciasteczek ani treści. Przy zachowaniu tego stanu restart nie odtwarza historii. Zmiana konta lub utworzenie nowego triggera ustala nowy stan początkowy. Utrata bazy n8n oznacza utratę tej historii.
101
-
102
- Każde automatyczne sprawdzenie musi ukończyć przegląd całej skrzynki w granicach **Maximum Pages** (domyślnie 20, maksymalnie 50), 100 żądań i 120 sekund. Niepełny skan kończy się błędem i nie zmienia historii. Historia mieści do **10 000 identyfikatorów**; po przekroczeniu limitu pojawi się błąd. Utworzenie nowego triggera rozpocznie historię od aktualnej skrzynki bez odtwarzania starych zdarzeń. Wiadomość usunięta lub przeniesiona poza skrzynkę pomiędzy sprawdzeniami może pozostać niewykryta.
34
+ | Ustawienie | Działanie |
35
+ | --- | --- |
36
+ | **Read Status All** | Wszystkie wiadomości. |
37
+ | **Read Status → Unread** | Tylko nieprzeczytane. |
38
+ | **Read Status Read** | Tylko przeczytane. |
39
+ | **Limit** | Maksymalna liczba wiadomości pasujących do filtra. |
40
+ | **Return All** | Wszystkie pasujące wiadomości, w granicach limitu stron. |
41
+ | **Include Content** | Dołączenie treści wiadomości. |
42
+ | **Content Source → Preview** | Skrócony podgląd z listy; może urwać się w środku zdania. |
43
+ | **Content Source → Full Message** | Pełna treść ze szczegółów wiadomości. |
103
44
 
104
- **Błąd dalszego kroku nie cofa historii triggera.** Jeżeli np. wysyłka powiadomienia się nie powiedzie, ponów nieudane wykonanie w n8n. Samo następne sprawdzenie nie wyśle tej wiadomości ponownie. Przy równoległych wykonaniach lub wielu instancjach możliwe są duplikaty. Gdy potrzebujesz gwarancji dostarczenia i deduplikacji także przy awariach, zapisuj zdarzenia w trwałej kolejce z kluczem konto + `messageId` i osobno potwierdzaj udaną wysyłkę.
45
+ Każda wiadomość jest osobnym elementem danych z polami m.in. `messageId`, `senderName`, `topic`, `sendDate`, `readDate` i `isAnyFileAttached`. Po włączeniu treści wynik zawiera także `content` oraz `contentSource` (`preview` lub `full`).
105
46
 
106
- Testy automatyczne obejmują stan początkowy, restart, zmianę statusu, błędy skanowania i równoległe sprawdzenia. Działanie harmonogramu na rzeczywistym koncie, skutki ponownego logowania i zachowanie statusu odczytania wymagają jeszcze próby. Paczka nie aktywuje workflow automatycznie.
47
+ **Aby pobrać pełną treść, włącz Include Content i wybierz Full Message.** Pobranie szczegółów może oznaczyć wiadomość jako przeczytaną w Librusie. W jednym wykonaniu można pobrać pełną treść maksymalnie 50 wiadomości.
107
48
 
108
- ## Zgłaszanie błędów i rozwój
49
+ Jeśli znasz ID wiadomości, wybierz **Message → Get Content** i podaj **Message ID**. Ta operacja zwraca `messageId`, `content` i `contentSource: "full"`.
109
50
 
110
- Błędy i propozycje zmian zgłaszaj w [GitHub Issues](https://github.com/czlonkowski/n8n-nodes-librus/issues). Przed przesłaniem zmian uruchom `npm run check` oraz `npm pack --dry-run`. Do testów dodawaj wyłącznie fikcyjne dane. Opisz sposób odtworzenia problemu, usuwając dane osobowe; nie publikuj loginów, haseł, ciasteczek ani treści prawdziwych wiadomości.
51
+ ## Automatyzacja po nowej wiadomości
111
52
 
112
- ## Ręczna publikacja w npm
53
+ 1. Dodaj **Librus Trigger** i wybierz zapisane dane logowania.
54
+ 2. Wybierz **Event → New Message**.
55
+ 3. Ustaw **Poll Times**, np. **Every X → 5 → Minutes**. Węzeł sprawdza skrzynkę cyklicznie; powiadomienie pojawi się po kolejnym sprawdzeniu.
56
+ 4. Ręcznie przetestuj węzeł. Zwróci jedną obecną wiadomość jako próbkę; pusta skrzynka nie zwróci danych.
57
+ 5. Dodaj dalsze kroki i opublikuj/aktywuj workflow.
113
58
 
114
- Paczka używa nazwy **`@czlonkowski/n8n-nodes-librus`**. Niescopowana nazwa `n8n-nodes-librus` była wcześniej używana przez innego autora. Repozytorium GitHub zachowuje dotychczasową nazwę.
59
+ **Pierwsze automatyczne sprawdzenie zapamiętuje obecną skrzynkę bez uruchamiania workflow dla starych wiadomości.** Kolejne sprawdzenia wykrywają nowe ID, również gdy wiadomość została już przeczytana w aplikacji Librusa. Zmiana statusu starej wiadomości nie uruchamia triggera ponownie. Ręczne testy nie zmieniają tej historii.
115
60
 
116
- Przy Node.js 24 lub nowszym najpierw wykonaj próbę bez publikacji:
61
+ Trigger domyślnie zwraca metadane i skrócony podgląd. Aby dołączyć pełną treść, dodaj po nim **Librus → Get Content** i ustaw **Message ID** na:
117
62
 
118
- ```sh
119
- npm run release -- --dry-run
63
+ ```text
64
+ {{ $json.messageId }}
120
65
  ```
121
66
 
122
- Skrypt instaluje zależności zgodnie z lockfile, uruchamia lint, kompilację i testy, przygotowuje archiwum oraz sprawdza jego zawartość. Tryb próbny nie wymaga zalogowania do npm. Oba tryby wymagają połączenia z rejestrem npm.
123
-
124
- Pierwsza publikacja przygotowanej wersji:
67
+ Przykładowy workflow: **Librus Trigger Librus (Get Content) wybrany kanał powiadomień**. Jeśli wystarczy temat i podgląd, pomiń Get Content.
125
68
 
126
- ```sh
127
- npm login --registry=https://registry.npmjs.org
128
- npm whoami
129
- npm run release
130
- ```
131
-
132
- Użyj konta **czlonkowski**. Przed właściwą publikacją wszystkie zmiany muszą być zapisane w commicie. npm może poprosić o potwierdzenie logowania/publikacji w przeglądarce lub kod 2FA — wykonaj ten krok bezpośrednio w npm. Nie zapisuj kodów ani tokenów w repozytorium.
69
+ ## Ograniczenia i rozwiązywanie problemów
133
70
 
134
- Skrypt publikuje dokładnie sprawdzone archiwum jako paczkę publiczną. Wersje stabilne otrzymują tag `latest`, a wersje z sufiksem (np. `0.2.0-beta.1`) `next`. Nie tworzy tagów Git ani GitHub Release i nie korzysta z GitHub Actions do publikacji. Jeżeli npm zgłosi błąd po wysłaniu paczki, sprawdź rejestr przed ponowieniem; opublikowanej wersji nie można nadpisać:
71
+ - **Mark as Unread / Mark as Read**, wysyłanie, usuwanie i pobieranie załączników nie obsługiwane. Odczyt pełnej treści może sam zmienić status wiadomości w Librusie.
72
+ - **`SCAN_INCOMPLETE`**: zwiększ **Maximum Pages** (domyślnie 20, maksymalnie 50). Przy Get Many możesz też ograniczyć liczbę wyników. Trigger musi sprawdzić całą skrzynkę; niepełny skan nie aktualizuje jego historii.
73
+ - **`FULL_CONTENT_LIMIT`**: wyłącz Return All i ustaw Limit na 50 lub mniej.
74
+ - **Błąd dalszego kroku workflow**: ponów nieudane wykonanie w n8n. Kolejne sprawdzenie triggera nie wyemituje tej samej wiadomości ponownie. Przy równoległych wykonaniach lub wielu instancjach możliwe są duplikaty.
75
+ - Historia triggera obejmuje do **10 000 ID**. Po osiągnięciu limitu utwórz nowy trigger, który zapamięta aktualną skrzynkę jako stan początkowy. Zmiana konta lub utrata zapisanej historii również ustala nowy stan początkowy.
76
+ - Wiadomość usunięta lub przeniesiona poza skrzynkę pomiędzy sprawdzeniami może nie zostać wykryta.
135
77
 
136
- ```sh
137
- npm view @czlonkowski/n8n-nodes-librus version
138
- ```
78
+ Integracja korzysta z nieoficjalnych tras Librusa. Długotrwałe działanie harmonogramu i wpływ pobierania listy na status odczytania wymagają jeszcze weryfikacji. Treść wiadomości trafia do danych wykonania workflow — jej przechowywaniem zarządzają ustawienia historii n8n.
139
79
 
140
- Dla kolejnego wydania zwiększ wersję, uzupełnij `CHANGELOG.md`, zapisz i wypchnij commit, a potem uruchom skrypt:
80
+ ## Pomoc
141
81
 
142
- ```sh
143
- npm version patch --no-git-tag-version
144
- # Uzupełnij CHANGELOG.md, następnie zapisz zmiany w Git.
145
- npm run release
146
- ```
82
+ Błędy i propozycje zgłaszaj w [GitHub Issues](https://github.com/czlonkowski/n8n-nodes-librus/issues). Nie umieszczaj w zgłoszeniach loginów, haseł, ciasteczek ani treści prawdziwych wiadomości.
147
83
 
148
- Po publikacji w samodzielnie hostowanym n8n wejdź w **Settings → Community nodes → Install** i podaj **`@czlonkowski/n8n-nodes-librus`**. Paczka pozostaje niezweryfikowanym węzłem społecznościowym; publikacja w npm nie oznacza dostępności w n8n Cloud.
84
+ Instrukcje pracy nad kodem: [dokumentacja deweloperska](docs/development.md).
149
85
 
150
- ## Licencja i autorstwo
86
+ ## Licencja
151
87
 
152
- Kod udostępniono na [licencji MIT](LICENSE). Projekt nie jest powiązany z firmą LIBRUS ani przez nią zatwierdzony. Informacje o źródłach wykorzystanych do poznania sposobu działania integracji znajdują się w [NOTICE.md](NOTICE.md).
88
+ [MIT](LICENSE). Projekt nie jest powiązany z firmą LIBRUS ani przez nią zatwierdzony. [Informacje o autorstwie i źródłach](NOTICE.md).
@@ -32,6 +32,12 @@ exports.LibrusError = LibrusError;
32
32
  function safeError(error) {
33
33
  return error instanceof LibrusError ? error : new LibrusError('PROTOCOL_ERROR');
34
34
  }
35
+ function protocolError(check, value) {
36
+ const type = value === null ? 'null' : Array.isArray(value) ? 'array' : typeof value;
37
+ const error = new LibrusError('PROTOCOL_ERROR');
38
+ error.message += ` [Check: ${check}; received type: ${type}]`;
39
+ return error;
40
+ }
35
41
  const allowedHosts = new Set([
36
42
  'portal.librus.pl',
37
43
  'synergia.librus.pl',
@@ -103,7 +109,7 @@ function parseJson(body) {
103
109
  return JSON.parse(body);
104
110
  }
105
111
  catch {
106
- throw new LibrusError('PROTOCOL_ERROR');
112
+ throw protocolError(isHtml(body) ? 'HTML instead of JSON' : 'JSON response', body);
107
113
  }
108
114
  }
109
115
  function isHtml(body) {
@@ -118,19 +124,18 @@ function isLoginForm(body) {
118
124
  function decodeContent(value) {
119
125
  if (typeof value !== 'string' ||
120
126
  !/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(value)) {
121
- throw new LibrusError('PROTOCOL_ERROR');
127
+ throw protocolError('base64 content', value);
122
128
  }
123
129
  try {
124
130
  return new TextDecoder('utf-8', { fatal: true }).decode(Buffer.from(value, 'base64'));
125
131
  }
126
132
  catch {
127
- throw new LibrusError('PROTOCOL_ERROR');
133
+ throw protocolError('UTF-8 content', value);
128
134
  }
129
135
  }
130
136
  function parseMessage(value, includeContent) {
131
- var _a, _b;
132
137
  if (!object(value))
133
- throw new LibrusError('PROTOCOL_ERROR');
138
+ throw protocolError('message object', value);
134
139
  const strings = [
135
140
  'messageId',
136
141
  'senderFirstName',
@@ -139,21 +144,25 @@ function parseMessage(value, includeContent) {
139
144
  'topic',
140
145
  'sendDate',
141
146
  ];
142
- if (strings.some((key) => typeof value[key] !== 'string') ||
143
- !value.messageId ||
144
- !(value.readDate === undefined ||
145
- value.readDate === null ||
146
- typeof value.readDate === 'string') ||
147
- !(value.category === undefined ||
148
- value.category === null ||
149
- typeof value.category === 'string') ||
150
- typeof value.isAnyFileAttached !== 'boolean' ||
151
- !Array.isArray(value.tags) ||
152
- value.tags.some((tag) => typeof tag !== 'string'))
153
- throw new LibrusError('PROTOCOL_ERROR');
147
+ for (const key of strings) {
148
+ if (typeof value[key] !== 'string' || (key === 'messageId' && !value[key]))
149
+ throw protocolError(`message.${key}`, value[key]);
150
+ }
154
151
  const result = Object.fromEntries(strings.map((key) => [key, value[key]]));
155
- result.readDate = (_a = value.readDate) !== null && _a !== void 0 ? _a : null;
156
- result.category = (_b = value.category) !== null && _b !== void 0 ? _b : null;
152
+ for (const key of ['readDate', 'category']) {
153
+ const field = value[key];
154
+ if (field !== undefined && field !== null && typeof field !== 'string')
155
+ throw protocolError(`message.${key}`, field);
156
+ result[key] = field !== null && field !== void 0 ? field : null;
157
+ }
158
+ if (typeof value.isAnyFileAttached !== 'boolean')
159
+ throw protocolError('message.isAnyFileAttached', value.isAnyFileAttached);
160
+ if (!Array.isArray(value.tags))
161
+ throw protocolError('message.tags', value.tags);
162
+ for (const tag of value.tags) {
163
+ if (typeof tag !== 'string')
164
+ throw protocolError('message.tags', tag);
165
+ }
157
166
  result.isAnyFileAttached = value.isAnyFileAttached;
158
167
  result.tags = value.tags;
159
168
  if (includeContent) {
@@ -202,8 +211,10 @@ class LibrusClient {
202
211
  catch {
203
212
  throw new LibrusError('TRANSPORT_ERROR');
204
213
  }
205
- if (typeof response.body !== 'string' || response.body.length > 10000000)
206
- throw new LibrusError('PROTOCOL_ERROR');
214
+ if (typeof response.body !== 'string')
215
+ throw protocolError('HTTP body type', response.body);
216
+ if (response.body.length > 10000000)
217
+ throw protocolError('HTTP body size');
207
218
  const normalized = Object.fromEntries(Object.entries(response.headers).map(([key, val]) => [key.toLowerCase(), val]));
208
219
  const cookies = normalized['set-cookie'];
209
220
  for (const entry of cookies === undefined
@@ -215,15 +226,15 @@ class LibrusClient {
215
226
  await this.jar.setCookie(entry, url.href);
216
227
  }
217
228
  catch {
218
- throw new LibrusError('PROTOCOL_ERROR');
229
+ throw protocolError('response cookie');
219
230
  }
220
231
  }
221
232
  if ([301, 302, 303, 307, 308].includes(response.statusCode)) {
222
233
  if (body !== undefined)
223
- throw new LibrusError('PROTOCOL_ERROR');
234
+ throw protocolError('POST redirect');
224
235
  const location = normalized.location;
225
236
  if (typeof location !== 'string')
226
- throw new LibrusError('PROTOCOL_ERROR');
237
+ throw protocolError('redirect location', location);
227
238
  url = checkedRedirect(location, url.href);
228
239
  continue;
229
240
  }
@@ -242,37 +253,44 @@ class LibrusClient {
242
253
  throw new LibrusError('SERVICE_ERROR');
243
254
  return { ...response, url };
244
255
  }
245
- throw new LibrusError('PROTOCOL_ERROR');
256
+ throw protocolError('redirect limit');
246
257
  }
247
258
  async authenticate() {
248
- this.jar = new tough_cookie_1.CookieJar();
249
- const entry = await this.request('https://synergia.librus.pl/loguj/portalRodzina');
250
- if (!authUrl(entry.url))
251
- throw actionRequired('login entry', entry.url);
252
- const form = new URLSearchParams({
253
- action: 'login',
254
- login: this.login.username,
255
- pass: this.login.password,
256
- });
257
- const loginReply = await this.request(entry.url.href, form.toString());
258
- if (isHtml(loginReply.body))
259
- throw actionRequired('credential submission', loginReply.url);
260
- const reply = parseJson(loginReply.body);
261
- if (!object(reply) || typeof reply.goTo !== 'string' || !reply.goTo)
262
- throw new LibrusError('AUTH_FAILED');
263
- const continuation = checkedUrl(reply.goTo, 'https://api.librus.pl');
264
- if (!authUrl(continuation))
265
- throw new LibrusError('UNSAFE_URL');
266
- const authorized = await this.request(continuation.href);
267
- if (authorized.url.hostname !== 'synergia.librus.pl' ||
268
- (/\/loguj(?:\/|$)/.test(authorized.url.pathname) &&
269
- !/^\/loguj\/portalRodzina\/?$/.test(authorized.url.pathname)) ||
270
- isLoginForm(authorized.body))
271
- throw actionRequired('authorization continuation', authorized.url);
272
- await this.request('https://synergia.librus.pl/gateway/api/2.0/Auth/TokenInfo/');
273
- const inbox = await this.request('https://synergia.librus.pl/wiadomosci3');
274
- if (authUrl(inbox.url) || /\/loguj(?:\/|$)/.test(inbox.url.pathname))
275
- throw actionRequired('messages initialization', inbox.url);
259
+ try {
260
+ this.jar = new tough_cookie_1.CookieJar();
261
+ const entry = await this.request('https://synergia.librus.pl/loguj/portalRodzina');
262
+ if (!authUrl(entry.url))
263
+ throw actionRequired('login entry', entry.url);
264
+ const form = new URLSearchParams({
265
+ action: 'login',
266
+ login: this.login.username,
267
+ pass: this.login.password,
268
+ });
269
+ const loginReply = await this.request(entry.url.href, form.toString());
270
+ if (isHtml(loginReply.body))
271
+ throw actionRequired('credential submission', loginReply.url);
272
+ const reply = parseJson(loginReply.body);
273
+ if (!object(reply) || typeof reply.goTo !== 'string' || !reply.goTo)
274
+ throw new LibrusError('AUTH_FAILED');
275
+ const continuation = checkedUrl(reply.goTo, 'https://api.librus.pl');
276
+ if (!authUrl(continuation))
277
+ throw new LibrusError('UNSAFE_URL');
278
+ const authorized = await this.request(continuation.href);
279
+ if (authorized.url.hostname !== 'synergia.librus.pl' ||
280
+ (/\/loguj(?:\/|$)/.test(authorized.url.pathname) &&
281
+ !/^\/loguj\/portalRodzina\/?$/.test(authorized.url.pathname)) ||
282
+ isLoginForm(authorized.body))
283
+ throw actionRequired('authorization continuation', authorized.url);
284
+ await this.request('https://synergia.librus.pl/gateway/api/2.0/Auth/TokenInfo/');
285
+ const inbox = await this.request('https://synergia.librus.pl/wiadomosci3');
286
+ if (authUrl(inbox.url) || /\/loguj(?:\/|$)/.test(inbox.url.pathname))
287
+ throw actionRequired('messages initialization', inbox.url);
288
+ }
289
+ catch (error) {
290
+ if (error instanceof LibrusError && error.code === 'PROTOCOL_ERROR')
291
+ error.message += ' [Phase: authentication]';
292
+ throw error;
293
+ }
276
294
  }
277
295
  async getMessages(options) {
278
296
  if (!this.login.username ||
@@ -358,33 +376,47 @@ class LibrusClient {
358
376
  const found = new Map();
359
377
  const scanned = new Set();
360
378
  for (let page = 1; page <= options.maxPages; page++) {
361
- const response = await this.request(`https://wiadomosci.librus.pl/api/inbox/messages?page=${page}&limit=${pageSize}`);
362
- if (authUrl(response.url) || /\/loguj(?:\/|$)/.test(response.url.pathname))
363
- throw new LibrusError('SESSION_EXPIRED');
364
- if (response.url.hostname !== 'wiadomosci.librus.pl' ||
365
- response.url.pathname !== '/api/inbox/messages')
366
- throw new LibrusError('PROTOCOL_ERROR');
367
- const payload = parseJson(response.body);
368
- if (!object(payload) || !Array.isArray(payload.data) || payload.data.length > pageSize)
369
- throw new LibrusError('PROTOCOL_ERROR');
370
- const before = scanned.size;
371
- for (const raw of payload.data) {
372
- const message = parseMessage(raw, options.includeContent && options.contentSource !== 'full');
373
- scanned.add(message.messageId);
374
- const unread = message.readDate === null || message.readDate === '';
375
- if (!options.readStatus ||
376
- options.readStatus === 'all' ||
377
- (options.readStatus === 'unread' ? unread : !unread))
378
- found.set(message.messageId, message);
379
+ let itemIndex;
380
+ try {
381
+ const response = await this.request(`https://wiadomosci.librus.pl/api/inbox/messages?page=${page}&limit=${pageSize}`);
382
+ if (authUrl(response.url) || /\/loguj(?:\/|$)/.test(response.url.pathname))
383
+ throw new LibrusError('SESSION_EXPIRED');
384
+ if (response.url.hostname !== 'wiadomosci.librus.pl' ||
385
+ response.url.pathname !== '/api/inbox/messages')
386
+ throw protocolError('inbox destination');
387
+ const payload = parseJson(response.body);
388
+ if (!object(payload))
389
+ throw protocolError('inbox response object', payload);
390
+ if (!Array.isArray(payload.data))
391
+ throw protocolError('inbox data array', payload.data);
392
+ if (payload.data.length > pageSize)
393
+ throw protocolError('inbox page size', payload.data);
394
+ const before = scanned.size;
395
+ for (const [index, raw] of payload.data.entries()) {
396
+ itemIndex = index + 1;
397
+ const message = parseMessage(raw, options.includeContent && options.contentSource !== 'full');
398
+ scanned.add(message.messageId);
399
+ const unread = message.readDate === null || message.readDate === '';
400
+ if (!options.readStatus ||
401
+ options.readStatus === 'all' ||
402
+ (options.readStatus === 'unread' ? unread : !unread))
403
+ found.set(message.messageId, message);
404
+ }
405
+ if (!options.returnAll && found.size >= options.limit)
406
+ return [...found.values()].slice(0, options.limit);
407
+ if (payload.data.length === 0)
408
+ return [...found.values()];
409
+ if (scanned.size === before)
410
+ throw new LibrusError('SCAN_INCOMPLETE');
411
+ if (payload.data.length < pageSize)
412
+ return [...found.values()];
413
+ }
414
+ catch (error) {
415
+ if (error instanceof LibrusError && error.code === 'PROTOCOL_ERROR') {
416
+ error.message += ` [Inbox page: ${page}; page size: ${pageSize}${itemIndex === undefined ? '' : `; item: ${itemIndex}`}]`;
417
+ }
418
+ throw error;
379
419
  }
380
- if (!options.returnAll && found.size >= options.limit)
381
- return [...found.values()].slice(0, options.limit);
382
- if (payload.data.length === 0)
383
- return [...found.values()];
384
- if (scanned.size === before)
385
- throw new LibrusError('SCAN_INCOMPLETE');
386
- if (payload.data.length < pageSize)
387
- return [...found.values()];
388
420
  }
389
421
  throw new LibrusError('SCAN_INCOMPLETE');
390
422
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LibrusClient.js","sourceRoot":"","sources":["../../../nodes/Librus/LibrusClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LibrusClient.js","sourceRoot":"","sources":["../../../nodes/Librus/LibrusClient.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createTransport = createTransport;
4
4
  exports.createCredentialTestTransport = createCredentialTestTransport;
5
+ function normalizeResponse(value) {
6
+ const response = value;
7
+ return {
8
+ statusCode: response.statusCode,
9
+ headers: response.headers,
10
+ body: response.body === undefined ? '' : response.body,
11
+ };
12
+ }
5
13
  function createTransport(httpRequest) {
6
14
  return async (request) => {
7
15
  const response = await httpRequest({
@@ -12,11 +20,11 @@ function createTransport(httpRequest) {
12
20
  json: false,
13
21
  encoding: 'text',
14
22
  });
15
- return response;
23
+ return normalizeResponse(response);
16
24
  };
17
25
  }
18
26
  function createCredentialTestTransport(requestHelper) {
19
- return async (request) => (await requestHelper({
27
+ return async (request) => normalizeResponse(await requestHelper({
20
28
  uri: request.url,
21
29
  method: request.method,
22
30
  headers: request.headers,
@@ -1 +1 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../nodes/Librus/transport.ts"],"names":[],"mappings":";;AAGA,0CAcC;AAGD,sEAiBC;AAlCD,SAAgB,eAAe,CAC9B,WAA+D;IAE/D,OAAO,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC;YAClC,GAAG,OAAO;YACV,qBAAqB,EAAE,IAAI;YAC3B,kBAAkB,EAAE,IAAI;YACxB,sBAAsB,EAAE,IAAI;YAC5B,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,MAAM;SAChB,CAAC,CAAC;QACH,OAAO,QAAoB,CAAC;IAC7B,CAAC,CAAC;AACH,CAAC;AAGD,SAAgB,6BAA6B,CAC5C,aAAoD;IAEpD,OAAO,KAAK,EAAE,OAAO,EAAE,EAAE,CACxB,CAAC,MAAM,aAAa,CAAC;QACpB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,cAAc,EAAE,KAAK;QACrB,kBAAkB,EAAE,KAAK;QACzB,uBAAuB,EAAE,IAAI;QAC7B,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,MAAM;KAChB,CAAC,CAAa,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../nodes/Librus/transport.ts"],"names":[],"mappings":";;AAcA,0CAcC;AAGD,sEAmBC;AA7CD,SAAS,iBAAiB,CAAC,KAAc;IACxC,MAAM,QAAQ,GAAG,KAAiB,CAAC;IACnC,OAAO;QACN,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,IAAI,EAAE,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI;KACtD,CAAC;AACH,CAAC;AAED,SAAgB,eAAe,CAC9B,WAA+D;IAE/D,OAAO,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC;YAClC,GAAG,OAAO;YACV,qBAAqB,EAAE,IAAI;YAC3B,kBAAkB,EAAE,IAAI;YACxB,sBAAsB,EAAE,IAAI;YAC5B,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,MAAM;SAChB,CAAC,CAAC;QACH,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC,CAAC;AACH,CAAC;AAGD,SAAgB,6BAA6B,CAC5C,aAAoD;IAEpD,OAAO,KAAK,EAAE,OAAO,EAAE,EAAE,CACxB,iBAAiB,CAChB,MAAM,aAAa,CAAC;QACnB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,cAAc,EAAE,KAAK;QACrB,kBAAkB,EAAE,KAAK;QACzB,uBAAuB,EAAE,IAAI;QAC7B,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,MAAM;KAChB,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,69 @@
1
+ # Rozwój i wydawanie paczki
2
+
3
+ Instrukcja dla osób pracujących nad kodem. Instalację gotowej paczki opisuje [README](../README.md).
4
+
5
+ ## Uruchomienie lokalne
6
+
7
+
8
+ Wymagane są **Node.js 24 LTS** i npm. Testowano na Node.js 24.20.0.
9
+
10
+ ```sh
11
+ git clone https://github.com/czlonkowski/n8n-nodes-librus.git
12
+ cd n8n-nodes-librus
13
+ npm ci
14
+ npm run check
15
+ N8N_LISTEN_ADDRESS=127.0.0.1 N8N_PORT=5689 npm run dev
16
+ ```
17
+
18
+ Edytor n8n będzie dostępny pod adresem **http://localhost:5689**.
19
+
20
+ Przed uruchomieniem sprawdź `node --version`: potrzebna jest wersja 24 lub nowsza. Plik `.nvmrc` nie przełącza wersji Node.js automatycznie. Jeśli używasz nvm, wykonaj najpierw `nvm use`.
21
+
22
+ Projekt korzysta z oficjalnego narzędzia `@n8n/node-cli` do budowania paczki, sprawdzania kodu i uruchamiania środowiska deweloperskiego. Skrypt `dev` przechowuje osobny profil n8n w katalogu **`../.n8n-librus-dev`**, poza repozytorium. Nie przenoś profilu do środka projektu: narzędzie tworzy w nim dowiązanie do repozytorium, co prowadziłoby do zapętlenia skanowania katalogów i błędu `ENAMETOOLONG`.
23
+
24
+ Nie dodawaj do repozytorium profilu n8n ani danych konta. Testy automatyczne korzystają wyłącznie z fikcyjnych odpowiedzi HTTP — nie łączą się z Librusem i nie wymagają prawdziwych danych logowania.
25
+
26
+ Szczegóły techniczne opisano w dokumentach: [architektura](architecture.md), [testy na rzeczywistym koncie](live-verification.md), [wyniki weryfikacji](verification.md) i [bezpieczeństwo](../SECURITY.md). Te dokumenty techniczne są obecnie po angielsku.
27
+
28
+ ## Ręczna publikacja w npm
29
+
30
+
31
+ Paczka używa nazwy **`@czlonkowski/n8n-nodes-librus`**. Niescopowana nazwa `n8n-nodes-librus` była wcześniej używana przez innego autora. Repozytorium GitHub zachowuje dotychczasową nazwę.
32
+
33
+ Przy Node.js 24 lub nowszym najpierw wykonaj próbę bez publikacji:
34
+
35
+ ```sh
36
+ npm run release -- --dry-run
37
+ ```
38
+
39
+ Skrypt instaluje zależności zgodnie z lockfile, uruchamia lint, kompilację i testy, przygotowuje archiwum oraz sprawdza jego zawartość. Tryb próbny nie wymaga zalogowania do npm. Oba tryby wymagają połączenia z rejestrem npm.
40
+
41
+ Publikacja przygotowanej, jeszcze niewydanej wersji:
42
+
43
+ ```sh
44
+ npm login --registry=https://registry.npmjs.org
45
+ npm whoami
46
+ npm run release
47
+ ```
48
+
49
+ Użyj konta **czlonkowski**. Przed właściwą publikacją wszystkie zmiany muszą być zapisane w commicie. npm może poprosić o potwierdzenie logowania/publikacji w przeglądarce lub kod 2FA — wykonaj ten krok bezpośrednio w npm. Nie zapisuj kodów ani tokenów w repozytorium.
50
+
51
+ Skrypt publikuje dokładnie sprawdzone archiwum jako paczkę publiczną. Wersje stabilne otrzymują tag `latest`, a wersje z sufiksem (np. `0.2.0-beta.1`) — `next`. Nie tworzy tagów Git ani GitHub Release i nie korzysta z GitHub Actions do publikacji. Jeżeli npm zgłosi błąd po wysłaniu paczki, sprawdź rejestr przed ponowieniem; opublikowanej wersji nie można nadpisać:
52
+
53
+ ```sh
54
+ npm view @czlonkowski/n8n-nodes-librus version
55
+ ```
56
+
57
+ Przy każdym pushu nowej wersji na GitHub podbij numer w `package.json` i `package-lock.json` oraz uzupełnij `CHANGELOG.md`. Zapisz i wypchnij commit, a potem uruchom skrypt:
58
+
59
+ ```sh
60
+ npm version patch --no-git-tag-version
61
+ # Uzupełnij CHANGELOG.md, następnie zapisz zmiany w Git.
62
+ npm run release
63
+ ```
64
+
65
+ Zmiana README na GitHub nie aktualizuje opisu już opublikowanej wersji w npm; nowy README trafi do npm wraz z kolejnym wydaniem.
66
+
67
+ ## Testy na rzeczywistym koncie
68
+
69
+ Procedura i ograniczenia: [testy integracji](live-verification.md), [wyniki](verification.md), [architektura](architecture.md). Nie dodawaj prawdziwych danych konta ani wiadomości do testów, logów lub zgłoszeń.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@czlonkowski/n8n-nodes-librus",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Nieoficjalny węzeł społecznościowy n8n do odczytywania wiadomości z Librus Synergia.",
5
5
  "license": "MIT",
6
6
  "keywords": [