@czlonkowski/n8n-nodes-librus 0.1.4 → 0.2.0

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,5 +1,32 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.0 — 2026-09-12
4
+
5
+ - Add two calendar events, Nowe wydarzenie w terminarzu and Zmiana wydarzenia w terminarzu, to the shared Librus Trigger node; removals and cancellations are reported on the change event, not a separate one.
6
+ - Scan the current month plus a configurable number of months ahead through a credential-free POST to the Librus terminarz month form, guarded by a day-grid completeness check so a malformed or mis-rendered grid fails the poll instead of silently mis-dating or dropping events.
7
+ - Fetch event detail pages only for new or changed entries, hydrating up to 50 per poll and deferring the remainder to later polls without failing or losing already-detected changes.
8
+ - Record calendar discovery history under its own librusCalendar state key, separate from the existing message history, with an independent silent baseline, window pruning and account-change reset.
9
+ - Add a free-text, case-insensitive event-kind filter that always passes an unknown kind, so an unrecognized or not-yet-hydrated event type is never silently dropped.
10
+ - Leave message behaviour, the newMessage event and its defaults unchanged for existing workflows.
11
+ - Bound each day block of the month grid to its own element, so a page legend or footer after the grid is no longer read as events dated to the last day of the month, and a footer that changes between polls no longer emits a phantom change every poll; an unbalanced grid fails the poll instead.
12
+ - Fix calendar polling aborting silently and permanently after a credential or username change: the concurrency guard now compares the stored owner against the owner seen when the poll was planned, so an account change commits its silent baseline and the next poll emits again.
13
+ - Give each calendar attempt its own request budget so a session expiry late in detail hydration can still complete its single retry, and report an exhausted calendar scan with its own message pointing at Liczba miesięcy do przodu instead of the inbox page limit.
14
+ - Silence only the months a larger window actually added, so months that the passage of time had already brought into range still emit instead of being baselined away.
15
+ - Skip entries with no detail link before applying the 50-page hydration budget, so a real backlog of linked events drains faster.
16
+ - Reject stored calendar records whose month is malformed, which would otherwise be neither prunable nor removable.
17
+ - Reject a calendar detail response whose final address is not the requested event page, so a redirect to another Synergia page can no longer be parsed as event details.
18
+ - Stop detail hydration on the remaining request budget instead of failing the whole poll, so redirected detail pages leave a partial, committed scan that the next poll finishes rather than a backlog retried forever.
19
+ - Report invalid calendar settings with their own message naming Liczba miesięcy do przodu instead of the message-fetching settings, which the calendar events do not have.
20
+ - Rename the parameter label to Liczba miesięcy do przodu, fall back to Nowa wiadomość in the node subtitle for an unexpected event value, and keep internal planning documents out of the published npm package.
21
+ - Describe both message and calendar automation in the package description.
22
+ - Fix calendar state pruning keeping records for months beyond a shrunk window indefinitely: prune against the exact set of scanned months instead of only the window's start.
23
+ - Decode named HTML entities for code points 160-255 and the twice-encoded month-grid tooltip, so Polish letters no longer reach the output as raw entity text; this affected above all the entries with no detail page to correct them, the free days and the parent-teacher meetings.
24
+ - Report as changed only the fields a poll can detect a change in, so the first edit of an entry no longer also reports the detail-page fields that the silent baseline had simply never fetched.
25
+
26
+ ## 0.1.5 — 2026-09-08
27
+
28
+ - Add the author’s standard AiAdvisors automation services CTA in Polish to the README.
29
+
3
30
  ## 0.1.4 — 2026-09-08
4
31
 
5
32
  - Describe both message retrieval and new-message detection on the shared Librus card in n8n.
package/README.md CHANGED
@@ -2,10 +2,12 @@
2
2
 
3
3
  # Librus dla n8n
4
4
 
5
- Pobieraj wiadomości z Librus Synergia i uruchamiaj automatyzacje po otrzymaniu nowych wiadomości. Paczka zawiera dwa węzły, dostępne na wspólnej karcie **Librus**: akcje pobierania wiadomości oraz zdarzenie **Nowa wiadomość**, które uruchamia workflow.
5
+ Pobieraj wiadomości z Librus Synergia i uruchamiaj automatyzacje po otrzymaniu nowych wiadomości albo po zmianach w terminarzu. Paczka zawiera dwa węzły, dostępne na wspólnej karcie **Librus**: akcje pobierania wiadomości oraz zdarzenia wyzwalające workflow — **Nowa wiadomość**, **Nowe wydarzenie w terminarzu** i **Zmiana wydarzenia w terminarzu**.
6
6
 
7
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
+ > 💼 **Chcesz zlecić budowę automatyzacji?** Zleć audyt, budowę lub utrzymanie automatyzacji n8n firmie [AiAdvisors](https://aiadvisors.pl), prowadzonej przez autora n8n-mcp i n8n-skills.
10
+
9
11
  ## Instalacja
10
12
 
11
13
  1. W n8n przejdź do **Settings → Community nodes → Install**.
@@ -65,6 +67,24 @@ Trigger domyślnie zwraca metadane i skrócony podgląd. Aby dołączyć pełną
65
67
 
66
68
  Przykładowy workflow: **Librus — Nowa wiadomość → Librus (Pobierz treść wiadomości) → wybrany kanał powiadomień**. Jeśli wystarczy temat i podgląd, pomiń Pobierz treść wiadomości.
67
69
 
70
+ ## Automatyzacja po zmianach w terminarzu
71
+
72
+ 1. Wyszukaj **Librus Trigger** i wybierz zdarzenie **Nowe wydarzenie w terminarzu** albo **Zmiana wydarzenia w terminarzu** oraz zapisane dane logowania.
73
+ 2. Ustaw **Liczba miesięcy do przodu** — ile miesięcy po bieżącym miesiącu sprawdzać (0–6, domyślnie 1). Każdy dodatkowy miesiąc to jedno kolejne zapytanie do Librusa; wydarzeń spoza tego zakresu węzeł nie wykryje.
74
+ 3. Opcjonalnie wypełnij **Rodzaje wydarzeń** listą rodzajów po przecinku (np. `Sprawdzian, Kartkówka`), dopasowywaną bez rozróżniania wielkości liter. Puste pole przepuszcza wszystkie wydarzenia. **Wydarzenie o nieznanym rodzaju zawsze przechodzi przez filtr** — dotyczy to też usuniętych wydarzeń, których szczegółów węzeł nie zdążył jeszcze pobrać — żeby filtr nigdy nie zgubił odwołanego sprawdzianu.
75
+ 4. Ustaw **Poll Times** na co najmniej 15 minut.
76
+ 5. Ręcznie przetestuj węzeł. Zwróci do pięciu najbliższych wydarzeń z bieżącego miesiąca jako próbkę (`changeType: "sample"`) i nie zmieni historii. Próbka **celowo pomija filtr Rodzaje wydarzeń** — dzięki temu odczytasz z wyniku prawdziwe wartości pola `rodzaj` i wpiszesz je do filtra, a wąski filtr nie zwróci pustej próbki wyglądającej na zepsute połączenie.
77
+ 6. Dodaj dalsze kroki i opublikuj/aktywuj workflow.
78
+
79
+ **Pierwsze automatyczne sprawdzenie zapamiętuje obecny terminarz bez uruchamiania workflow dla już istniejących wydarzeń.** Kolejne sprawdzenia porównują terminarz z zapamiętanym stanem:
80
+
81
+ - **Nowe wydarzenie w terminarzu** uruchamia się, gdy w terminarzu pojawi się wydarzenie, którego wcześniej nie było.
82
+ - **Zmiana wydarzenia w terminarzu** uruchamia się dla edycji istniejącego wydarzenia (np. zmiana opisu albo przeniesienie na inny dzień) **oraz dla wydarzeń, które zniknęły z terminarza** — usunięcie lub odwołanie wydarzenia trafia na to samo zdarzenie co zmiana (`changeType: "removed"`), a nie na osobne zdarzenie.
83
+
84
+ Każdy element zawiera m.in. `changeType`, `eventKey`, `eventId`, `route`, `date`, `subject`, `teacher`, `description`, `rodzaj`, `room`, `addedAt`, `details`, `changedFields` oraz `previous`; dla nowych wydarzeń te dwa ostatnie pola są puste (`changedFields: []`, `previous: null`), a przy zmianach niosą listę zmienionych pól i poprzednią wersję, przy usunięciach zaś poprzednią wersję.
85
+
86
+ Wykrywanie zmian opiera się wyłącznie na tym, co pokazuje siatka terminarza — na dacie, tekście komórki, nauczycielu i opisie. Edycja widoczna tylko na stronie szczegółów wydarzenia (np. sama zmiana sali) nie wywoła zdarzenia zmiany, dopóki nie zajdzie razem z inną, widoczną w siatce edycją. Usunięcie wydarzenia nigdy nie niesie pola `details` (jest `null`) — to, co zniknęło, opisuje pole `previous`.
87
+
68
88
  ## Ograniczenia i rozwiązywanie problemów
69
89
 
70
90
  - **Oznaczanie jako nieprzeczytane lub przeczytane**, wysyłanie, usuwanie i pobieranie załączników nie są obsługiwane. Odczyt pełnej treści może sam zmienić status wiadomości w Librusie.
@@ -1,3 +1,6 @@
1
+ import { LibrusError, safeError } from './errors';
2
+ import { type CalendarDetail, type CalendarEntry } from './terminarz';
3
+ export { LibrusError, safeError };
1
4
  export interface Request {
2
5
  url: string;
3
6
  method: 'GET' | 'POST';
@@ -25,6 +28,14 @@ export interface Scan {
25
28
  contentSource?: ContentSource;
26
29
  readStatus?: ReadStatus;
27
30
  }
31
+ export interface CalendarScan {
32
+ months: string[];
33
+ }
34
+ export type CalendarSelect = (entries: CalendarEntry[]) => string[];
35
+ export interface CalendarResult {
36
+ entries: CalendarEntry[];
37
+ details: Map<string, CalendarDetail | null>;
38
+ }
28
39
  export interface Message {
29
40
  messageId: string;
30
41
  senderFirstName: string;
@@ -39,19 +50,13 @@ export interface Message {
39
50
  content?: string;
40
51
  contentSource?: ContentSource;
41
52
  }
42
- type AuthStage = 'rozpoczęcie logowania' | 'przesłanie danych logowania' | 'kontynuacja autoryzacji' | 'otwarcie skrzynki';
43
- type AuthDestination = 'autoryzacja OAuth' | 'powrót OAuth do Synergii' | 'logowanie do Synergii' | 'strona Synergii' | 'serwis wiadomości' | 'inna dozwolona strona';
44
- export declare class LibrusError extends Error {
45
- readonly code: string;
46
- constructor(code: string, stage?: AuthStage, destination?: AuthDestination, rejection?: 'adres bez HTTPS' | 'dane logowania w adresie URL' | 'niestandardowy port' | 'nierozpoznana domena');
47
- }
48
- export declare function safeError(error: unknown): LibrusError;
49
53
  export declare class LibrusClient {
50
54
  private readonly transport;
51
55
  private readonly login;
52
56
  private jar;
53
57
  private deadline;
54
58
  private requests;
59
+ private budgetCode;
55
60
  constructor(transport: Transport, login: Login);
56
61
  private request;
57
62
  private authenticate;
@@ -63,5 +68,7 @@ export declare class LibrusClient {
63
68
  }>;
64
69
  private fullContent;
65
70
  private scan;
71
+ private monthPage;
72
+ private eventDetail;
73
+ getCalendar(options: CalendarScan, select: CalendarSelect): Promise<CalendarResult>;
66
74
  }
67
- export {};
@@ -1,42 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LibrusClient = exports.LibrusError = void 0;
4
- exports.safeError = safeError;
3
+ exports.LibrusClient = exports.safeError = exports.LibrusError = void 0;
5
4
  const tough_cookie_1 = require("tough-cookie");
6
- const messages = {
7
- UNSAFE_URL: 'Librus wskazał niedozwolony adres. Nie wysłano do niego zapytania.',
8
- TRANSPORT_ERROR: 'Nie udało się połączyć z Librusem. Sprawdź połączenie i spróbuj ponownie później.',
9
- PROTOCOL_ERROR: 'Librus zwrócił odpowiedź w nieoczekiwanym formacie. Integracja może wymagać aktualizacji.',
10
- AUTH_FAILED: 'Librus odrzucił logowanie. Sprawdź login i hasło na stronie Librusa.',
11
- ACTION_REQUIRED: 'Zaloguj się na stronie Librusa i uzupełnij wymagane potwierdzenia konta.',
12
- SESSION_EXPIRED: 'Sesja Librusa wygasła podczas zapytania.',
13
- RATE_LIMITED: 'Librus ogranicza liczbę zapytań. Odczekaj przed kolejną próbą.',
14
- ACCESS_DENIED: 'Librus odmówił dostępu. Sprawdź uprawnienia konta na stronie Librusa.',
15
- SERVICE_ERROR: 'Librus jest niedostępny lub zwrócił nieoczekiwany status HTTP.',
16
- SCAN_INCOMPLETE: 'Nie udało się sprawdzić całej skrzynki w wyznaczonych granicach. Zwiększ Maksymalną liczbę stron lub ogranicz liczbę pobieranych wiadomości.',
17
- FULL_CONTENT_LIMIT: 'W jednym wykonaniu można pobrać pełną treść maksymalnie 50 wiadomości. Wyłącz Pobierz wszystkie i ustaw Limit na 50 lub mniej.',
18
- INVALID_OPTIONS: 'Nieprawidłowe dane logowania do Librusa lub ustawienia pobierania wiadomości.',
19
- TRIGGER_STATE_INVALID: 'Zapisana historia wykrytych wiadomości jest nieprawidłowa. Utwórz ponownie węzeł Nowa wiadomość, aby zapamiętać aktualną skrzynkę.',
20
- TRIGGER_STATE_LIMIT: 'Osiągnięto limit historii 10 000 wiadomości. Utwórz ponownie węzeł Nowa wiadomość, aby zapamiętać aktualną skrzynkę.',
21
- };
22
- class LibrusError extends Error {
23
- constructor(code, stage, destination, rejection) {
24
- var _a;
25
- super(((_a = messages[code]) !== null && _a !== void 0 ? _a : messages.PROTOCOL_ERROR) +
26
- (stage ? ` [Etap: ${stage}; strona: ${destination}]` : '') +
27
- (rejection ? ` [Odrzucone przekierowanie: ${rejection}]` : ''));
28
- this.code = code;
29
- }
30
- }
31
- exports.LibrusError = LibrusError;
32
- function safeError(error) {
33
- return error instanceof LibrusError ? error : new LibrusError('PROTOCOL_ERROR');
34
- }
5
+ const errors_1 = require("./errors");
6
+ Object.defineProperty(exports, "LibrusError", { enumerable: true, get: function () { return errors_1.LibrusError; } });
7
+ Object.defineProperty(exports, "safeError", { enumerable: true, get: function () { return errors_1.safeError; } });
8
+ const terminarz_1 = require("./terminarz");
35
9
  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 += ` [Walidacja: ${check}; otrzymany typ: ${type}]`;
39
- return error;
10
+ return (0, errors_1.protocolError)(check, value);
40
11
  }
41
12
  const allowedHosts = new Set([
42
13
  'portal.librus.pl',
@@ -44,13 +15,18 @@ const allowedHosts = new Set([
44
15
  'api.librus.pl',
45
16
  'wiadomosci.librus.pl',
46
17
  ]);
18
+ const allowedPostUrls = new Set(['https://synergia.librus.pl/terminarz']);
19
+ const MAX_DETAILS = 50;
20
+ const MAX_REQUESTS = 100;
21
+ const MAX_REDIRECTS = 10;
22
+ const DETAIL_HEADROOM = MAX_REDIRECTS + 1;
47
23
  function checkedUrl(value, base) {
48
24
  let url;
49
25
  try {
50
26
  url = new URL(value, base);
51
27
  }
52
28
  catch {
53
- throw new LibrusError('UNSAFE_URL');
29
+ throw new errors_1.LibrusError('UNSAFE_URL');
54
30
  }
55
31
  if (url.protocol !== 'https:' ||
56
32
  url.port ||
@@ -64,7 +40,7 @@ function checkedUrl(value, base) {
64
40
  : url.port
65
41
  ? 'niestandardowy port'
66
42
  : 'nierozpoznana domena';
67
- throw new LibrusError('UNSAFE_URL', undefined, undefined, rejection);
43
+ throw new errors_1.LibrusError('UNSAFE_URL', undefined, undefined, rejection);
68
44
  }
69
45
  return url;
70
46
  }
@@ -74,7 +50,7 @@ function checkedRedirect(value, base) {
74
50
  url = new URL(value, base);
75
51
  }
76
52
  catch {
77
- throw new LibrusError('UNSAFE_URL');
53
+ throw new errors_1.LibrusError('UNSAFE_URL');
78
54
  }
79
55
  if (url.protocol === 'http:' &&
80
56
  allowedHosts.has(url.hostname) &&
@@ -99,7 +75,7 @@ function actionRequired(stage, url) {
99
75
  : url.hostname === 'wiadomosci.librus.pl'
100
76
  ? 'serwis wiadomości'
101
77
  : 'inna dozwolona strona';
102
- return new LibrusError('ACTION_REQUIRED', stage, destination);
78
+ return new errors_1.LibrusError('ACTION_REQUIRED', stage, destination);
103
79
  }
104
80
  function object(value) {
105
81
  return typeof value === 'object' && value !== null && !Array.isArray(value);
@@ -187,14 +163,17 @@ class LibrusClient {
187
163
  this.jar = new tough_cookie_1.CookieJar();
188
164
  this.deadline = 0;
189
165
  this.requests = 0;
166
+ this.budgetCode = 'SCAN_INCOMPLETE';
190
167
  }
191
168
  async request(value, body) {
192
169
  let url = checkedUrl(value);
193
- for (let hop = 0; hop <= 10; hop++) {
194
- if (++this.requests > 100 || Date.now() >= this.deadline)
195
- throw new LibrusError('SCAN_INCOMPLETE');
196
- if (body !== undefined && !authUrl(url))
197
- throw new LibrusError('UNSAFE_URL');
170
+ for (let hop = 0; hop <= MAX_REDIRECTS; hop++) {
171
+ if (++this.requests > MAX_REQUESTS || Date.now() >= this.deadline)
172
+ throw new errors_1.LibrusError(this.budgetCode);
173
+ if (body !== undefined &&
174
+ !authUrl(url) &&
175
+ !allowedPostUrls.has(`${url.origin}${url.pathname}`))
176
+ throw new errors_1.LibrusError('UNSAFE_URL');
198
177
  const headers = {
199
178
  Accept: 'application/json, text/html;q=0.9',
200
179
  'User-Agent': 'n8n-nodes-librus/0.1',
@@ -206,7 +185,7 @@ class LibrusClient {
206
185
  headers['Content-Type'] = 'application/x-www-form-urlencoded';
207
186
  const remaining = this.deadline - Date.now();
208
187
  if (remaining <= 0)
209
- throw new LibrusError('SCAN_INCOMPLETE');
188
+ throw new errors_1.LibrusError(this.budgetCode);
210
189
  let response;
211
190
  try {
212
191
  response = await this.transport({
@@ -218,7 +197,7 @@ class LibrusClient {
218
197
  });
219
198
  }
220
199
  catch {
221
- throw new LibrusError('TRANSPORT_ERROR');
200
+ throw new errors_1.LibrusError('TRANSPORT_ERROR');
222
201
  }
223
202
  if (typeof response.body !== 'string')
224
203
  throw protocolError('typ treści odpowiedzi HTTP', response.body);
@@ -239,8 +218,21 @@ class LibrusClient {
239
218
  }
240
219
  }
241
220
  if ([301, 302, 303, 307, 308].includes(response.statusCode)) {
242
- if (body !== undefined)
221
+ if (body !== undefined) {
222
+ const location = normalized.location;
223
+ if (!authUrl(url) && typeof location === 'string') {
224
+ let target;
225
+ try {
226
+ target = checkedRedirect(location, url.href);
227
+ }
228
+ catch {
229
+ target = undefined;
230
+ }
231
+ if (target && (authUrl(target) || /^\/loguj(?:\/|$)/.test(target.pathname)))
232
+ throw new errors_1.LibrusError('SESSION_EXPIRED');
233
+ }
243
234
  throw protocolError('przekierowanie POST');
235
+ }
244
236
  const location = normalized.location;
245
237
  if (typeof location !== 'string')
246
238
  throw protocolError('adres przekierowania', location);
@@ -248,18 +240,21 @@ class LibrusClient {
248
240
  continue;
249
241
  }
250
242
  if (response.statusCode === 429)
251
- throw new LibrusError('RATE_LIMITED');
243
+ throw new errors_1.LibrusError('RATE_LIMITED');
252
244
  if (response.statusCode === 401)
253
- throw new LibrusError('SESSION_EXPIRED');
245
+ throw new errors_1.LibrusError('SESSION_EXPIRED');
254
246
  if ((response.statusCode === 403 || response.statusCode === 200) &&
255
247
  url.hostname === 'wiadomosci.librus.pl' &&
256
248
  /^\/api\/inbox\/messages(?:\/[A-Za-z0-9_-]+)?$/.test(url.pathname) &&
257
249
  isLoginForm(response.body))
258
- throw new LibrusError('SESSION_EXPIRED');
250
+ throw new errors_1.LibrusError('SESSION_EXPIRED');
259
251
  if (response.statusCode === 403)
260
- throw new LibrusError('ACCESS_DENIED');
261
- if (response.statusCode < 200 || response.statusCode >= 300)
262
- throw new LibrusError('SERVICE_ERROR');
252
+ throw new errors_1.LibrusError('ACCESS_DENIED');
253
+ if (response.statusCode < 200 || response.statusCode >= 300) {
254
+ const error = new errors_1.LibrusError('SERVICE_ERROR');
255
+ error.status = response.statusCode;
256
+ throw error;
257
+ }
263
258
  return { ...response, url };
264
259
  }
265
260
  throw protocolError('limit przekierowań');
@@ -280,10 +275,10 @@ class LibrusClient {
280
275
  throw actionRequired('przesłanie danych logowania', loginReply.url);
281
276
  const reply = parseJson(loginReply.body);
282
277
  if (!object(reply) || typeof reply.goTo !== 'string' || !reply.goTo)
283
- throw new LibrusError('AUTH_FAILED');
278
+ throw new errors_1.LibrusError('AUTH_FAILED');
284
279
  const continuation = checkedUrl(reply.goTo, 'https://api.librus.pl');
285
280
  if (!authUrl(continuation))
286
- throw new LibrusError('UNSAFE_URL');
281
+ throw new errors_1.LibrusError('UNSAFE_URL');
287
282
  const authorized = await this.request(continuation.href);
288
283
  if (authorized.url.hostname !== 'synergia.librus.pl' ||
289
284
  (/\/loguj(?:\/|$)/.test(authorized.url.pathname) &&
@@ -296,7 +291,7 @@ class LibrusClient {
296
291
  throw actionRequired('otwarcie skrzynki', inbox.url);
297
292
  }
298
293
  catch (error) {
299
- if (error instanceof LibrusError && error.code === 'PROTOCOL_ERROR')
294
+ if (error instanceof errors_1.LibrusError && error.code === 'PROTOCOL_ERROR')
300
295
  error.message += ' [Faza: logowanie]';
301
296
  throw error;
302
297
  }
@@ -315,7 +310,8 @@ class LibrusClient {
315
310
  (options.contentSource !== undefined &&
316
311
  options.contentSource !== 'preview' &&
317
312
  options.contentSource !== 'full'))
318
- throw new LibrusError('INVALID_OPTIONS');
313
+ throw new errors_1.LibrusError('INVALID_OPTIONS');
314
+ this.budgetCode = 'SCAN_INCOMPLETE';
319
315
  this.deadline = Date.now() + 120000;
320
316
  this.requests = 0;
321
317
  await this.authenticate();
@@ -325,7 +321,7 @@ class LibrusClient {
325
321
  const result = unreadSelection !== null && unreadSelection !== void 0 ? unreadSelection : (await this.scan(options));
326
322
  if (options.includeContent && options.contentSource === 'full') {
327
323
  if (result.length > 50)
328
- throw new LibrusError('FULL_CONTENT_LIMIT');
324
+ throw new errors_1.LibrusError('FULL_CONTENT_LIMIT');
329
325
  if (options.readStatus === 'unread')
330
326
  unreadSelection = result;
331
327
  for (const message of result) {
@@ -336,19 +332,20 @@ class LibrusClient {
336
332
  return result;
337
333
  }
338
334
  catch (error) {
339
- if (!(error instanceof LibrusError) || error.code !== 'SESSION_EXPIRED' || attempt === 1)
335
+ if (!(error instanceof errors_1.LibrusError) || error.code !== 'SESSION_EXPIRED' || attempt === 1)
340
336
  throw error;
341
337
  await this.authenticate();
342
338
  }
343
339
  }
344
- throw new LibrusError('SESSION_EXPIRED');
340
+ throw new errors_1.LibrusError('SESSION_EXPIRED');
345
341
  }
346
342
  async getMessageContent(messageId) {
347
343
  if (!this.login.username ||
348
344
  !this.login.password ||
349
345
  typeof messageId !== 'string' ||
350
346
  !/^[A-Za-z0-9_-]+$/.test(messageId))
351
- throw new LibrusError('INVALID_OPTIONS');
347
+ throw new errors_1.LibrusError('INVALID_OPTIONS');
348
+ this.budgetCode = 'SCAN_INCOMPLETE';
352
349
  this.deadline = Date.now() + 120000;
353
350
  this.requests = 0;
354
351
  await this.authenticate();
@@ -357,25 +354,25 @@ class LibrusClient {
357
354
  return { messageId, content: await this.fullContent(messageId), contentSource: 'full' };
358
355
  }
359
356
  catch (error) {
360
- if (!(error instanceof LibrusError) || error.code !== 'SESSION_EXPIRED' || attempt === 1)
357
+ if (!(error instanceof errors_1.LibrusError) || error.code !== 'SESSION_EXPIRED' || attempt === 1)
361
358
  throw error;
362
359
  await this.authenticate();
363
360
  }
364
361
  }
365
- throw new LibrusError('SESSION_EXPIRED');
362
+ throw new errors_1.LibrusError('SESSION_EXPIRED');
366
363
  }
367
364
  async fullContent(messageId) {
368
365
  if (!/^[A-Za-z0-9_-]+$/.test(messageId))
369
- throw new LibrusError('PROTOCOL_ERROR');
366
+ throw new errors_1.LibrusError('PROTOCOL_ERROR');
370
367
  const path = `/api/inbox/messages/${encodeURIComponent(messageId)}`;
371
368
  const response = await this.request(`https://wiadomosci.librus.pl${path}`);
372
369
  if (authUrl(response.url) || /\/loguj(?:\/|$)/.test(response.url.pathname))
373
- throw new LibrusError('SESSION_EXPIRED');
370
+ throw new errors_1.LibrusError('SESSION_EXPIRED');
374
371
  if (response.url.hostname !== 'wiadomosci.librus.pl' || response.url.pathname !== path)
375
- throw new LibrusError('PROTOCOL_ERROR');
372
+ throw new errors_1.LibrusError('PROTOCOL_ERROR');
376
373
  const payload = parseJson(response.body);
377
374
  if (!object(payload) || !object(payload.data) || payload.data.messageId !== messageId)
378
- throw new LibrusError('PROTOCOL_ERROR');
375
+ throw new errors_1.LibrusError('PROTOCOL_ERROR');
379
376
  return decodeContent(payload.data.Message);
380
377
  }
381
378
  async scan(options) {
@@ -389,7 +386,7 @@ class LibrusClient {
389
386
  try {
390
387
  const response = await this.request(`https://wiadomosci.librus.pl/api/inbox/messages?page=${page}&limit=${pageSize}`);
391
388
  if (authUrl(response.url) || /\/loguj(?:\/|$)/.test(response.url.pathname))
392
- throw new LibrusError('SESSION_EXPIRED');
389
+ throw new errors_1.LibrusError('SESSION_EXPIRED');
393
390
  if (response.url.hostname !== 'wiadomosci.librus.pl' ||
394
391
  response.url.pathname !== '/api/inbox/messages')
395
392
  throw protocolError('adres skrzynki');
@@ -416,18 +413,117 @@ class LibrusClient {
416
413
  if (payload.data.length === 0)
417
414
  return [...found.values()];
418
415
  if (scanned.size === before)
419
- throw new LibrusError('SCAN_INCOMPLETE');
416
+ throw new errors_1.LibrusError('SCAN_INCOMPLETE');
420
417
  if (payload.data.length < pageSize)
421
418
  return [...found.values()];
422
419
  }
423
420
  catch (error) {
424
- if (error instanceof LibrusError && error.code === 'PROTOCOL_ERROR') {
421
+ if (error instanceof errors_1.LibrusError && error.code === 'PROTOCOL_ERROR') {
425
422
  error.message += ` [Strona skrzynki: ${page}; rozmiar strony: ${pageSize}${itemIndex === undefined ? '' : `; pozycja: ${itemIndex}`}]`;
426
423
  }
427
424
  throw error;
428
425
  }
429
426
  }
430
- throw new LibrusError('SCAN_INCOMPLETE');
427
+ throw new errors_1.LibrusError('SCAN_INCOMPLETE');
428
+ }
429
+ async monthPage(year, month) {
430
+ const body = new URLSearchParams({
431
+ rok: String(year),
432
+ miesiac: String(month),
433
+ }).toString();
434
+ const response = await this.request('https://synergia.librus.pl/terminarz', body);
435
+ if (authUrl(response.url) ||
436
+ /\/loguj(?:\/|$)/.test(response.url.pathname) ||
437
+ isLoginForm(response.body))
438
+ throw new errors_1.LibrusError('SESSION_EXPIRED');
439
+ if (response.url.hostname !== 'synergia.librus.pl' ||
440
+ !/^\/terminarz\/?$/.test(response.url.pathname))
441
+ throw protocolError('adres terminarza');
442
+ try {
443
+ return (0, terminarz_1.parseMonth)(response.body, year, month);
444
+ }
445
+ catch (error) {
446
+ if (error instanceof errors_1.LibrusError && error.code === 'PROTOCOL_ERROR')
447
+ error.message += ` [Miesiąc terminarza: ${year}-${String(month).padStart(2, '0')}]`;
448
+ throw error;
449
+ }
450
+ }
451
+ async eventDetail(route, id) {
452
+ if ((route !== 'szczegoly' && route !== 'szczegoly_wolne') || !/^\d+$/.test(id))
453
+ throw new errors_1.LibrusError('PROTOCOL_ERROR');
454
+ const path = `/terminarz/${route}/${id}`;
455
+ let response;
456
+ try {
457
+ response = await this.request(`https://synergia.librus.pl${path}`);
458
+ }
459
+ catch (error) {
460
+ if (error instanceof errors_1.LibrusError && error.code === 'SERVICE_ERROR' && error.status === 404)
461
+ return null;
462
+ throw error;
463
+ }
464
+ if (authUrl(response.url) ||
465
+ /\/loguj(?:\/|$)/.test(response.url.pathname) ||
466
+ isLoginForm(response.body))
467
+ throw new errors_1.LibrusError('SESSION_EXPIRED');
468
+ if (response.url.hostname !== 'synergia.librus.pl' || response.url.pathname !== path)
469
+ throw protocolError('adres wydarzenia terminarza');
470
+ return (0, terminarz_1.parseEventDetail)(response.body);
471
+ }
472
+ async getCalendar(options, select) {
473
+ if (!this.login.username ||
474
+ !this.login.password ||
475
+ typeof select !== 'function' ||
476
+ !Array.isArray(options.months) ||
477
+ options.months.length < 1 ||
478
+ options.months.length > 7 ||
479
+ options.months.some((month) => !/^\d{4}-(?:0[1-9]|1[0-2])$/.test(month)))
480
+ throw new errors_1.LibrusError('CALENDAR_INVALID_OPTIONS');
481
+ this.budgetCode = 'CALENDAR_SCAN_INCOMPLETE';
482
+ this.deadline = Date.now() + 120000;
483
+ this.requests = 0;
484
+ await this.authenticate();
485
+ for (let attempt = 0; attempt < 2; attempt++) {
486
+ try {
487
+ const entries = [];
488
+ for (const month of options.months) {
489
+ const [year, index] = month.split('-').map(Number);
490
+ if (year < 2000 || year > 2100)
491
+ throw new errors_1.LibrusError('CALENDAR_INVALID_OPTIONS');
492
+ entries.push(...(await this.monthPage(year, index)));
493
+ }
494
+ const known = new Map(entries.map((entry) => [entry.key, entry]));
495
+ const selected = select(entries);
496
+ if (!Array.isArray(selected))
497
+ throw new errors_1.LibrusError('CALENDAR_INVALID_OPTIONS');
498
+ const details = new Map();
499
+ const fetchable = [];
500
+ for (const key of selected) {
501
+ const entry = known.get(key);
502
+ if (!entry)
503
+ continue;
504
+ if (!entry.route || !entry.eventId) {
505
+ details.set(key, null);
506
+ continue;
507
+ }
508
+ fetchable.push({ key, route: entry.route, id: entry.eventId });
509
+ }
510
+ for (const { key, route, id } of fetchable.slice(0, MAX_DETAILS)) {
511
+ if (MAX_REQUESTS - this.requests < DETAIL_HEADROOM)
512
+ break;
513
+ const detail = await this.eventDetail(route, id);
514
+ if (detail !== null)
515
+ details.set(key, detail);
516
+ }
517
+ return { entries, details };
518
+ }
519
+ catch (error) {
520
+ if (!(error instanceof errors_1.LibrusError) || error.code !== 'SESSION_EXPIRED' || attempt === 1)
521
+ throw error;
522
+ this.requests = 0;
523
+ await this.authenticate();
524
+ }
525
+ }
526
+ throw new errors_1.LibrusError('SESSION_EXPIRED');
431
527
  }
432
528
  }
433
529
  exports.LibrusClient = LibrusClient;
@@ -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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"}