zdu-student-api 1.1.5 → 1.1.7

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.
Files changed (54) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +242 -18
  3. package/dist/audience.d.ts +44 -44
  4. package/dist/audience.js +50 -48
  5. package/dist/cabinet/cabinet.d.ts +79 -0
  6. package/dist/cabinet/cabinet.js +162 -0
  7. package/dist/cabinet/data.d.ts +66 -0
  8. package/dist/cabinet/data.js +115 -0
  9. package/dist/cabinet/disciplines.d.ts +19 -0
  10. package/dist/cabinet/disciplines.js +87 -0
  11. package/dist/cabinet/index.d.ts +3 -2
  12. package/dist/cabinet/index.js +3 -2
  13. package/dist/cabinet/parsers.d.ts +37 -0
  14. package/dist/cabinet/parsers.js +284 -0
  15. package/dist/cabinet/scores.d.ts +12 -0
  16. package/dist/cabinet/scores.js +101 -0
  17. package/dist/cabinet/sesId.d.ts +10 -9
  18. package/dist/cabinet/sesId.js +40 -39
  19. package/dist/cabinet/session.d.ts +33 -0
  20. package/dist/cabinet/session.js +99 -0
  21. package/dist/cabinet/types.d.ts +2 -2
  22. package/dist/cabinet/utils.d.ts +8 -0
  23. package/dist/cabinet/utils.js +19 -0
  24. package/dist/cabinet/validSession.d.ts +8 -0
  25. package/dist/cabinet/validSession.js +29 -0
  26. package/dist/cabinetStudent/cabinetStudent.d.ts +87 -0
  27. package/dist/cabinetStudent/cabinetStudent.js +181 -0
  28. package/dist/cabinetStudent/disciplines.d.ts +19 -0
  29. package/dist/cabinetStudent/disciplines.js +86 -0
  30. package/dist/cabinetStudent/index.d.ts +4 -0
  31. package/dist/cabinetStudent/index.js +4 -0
  32. package/dist/cabinetStudent/scores.d.ts +12 -0
  33. package/dist/cabinetStudent/scores.js +101 -0
  34. package/dist/cabinetStudent/types.d.ts +137 -0
  35. package/dist/cabinetStudent/types.js +1 -0
  36. package/dist/cabinetTeacher/academicGroups.d.ts +10 -0
  37. package/dist/cabinetTeacher/academicGroups.js +36 -0
  38. package/dist/cabinetTeacher/cabinetTeacher.d.ts +71 -0
  39. package/dist/cabinetTeacher/cabinetTeacher.js +132 -0
  40. package/dist/cabinetTeacher/index.d.ts +3 -0
  41. package/dist/cabinetTeacher/index.js +3 -0
  42. package/dist/cabinetTeacher/types.d.ts +68 -0
  43. package/dist/cabinetTeacher/types.js +1 -0
  44. package/dist/constants.d.ts +49 -49
  45. package/dist/constants.js +55 -52
  46. package/dist/examples.d.ts +1 -1
  47. package/dist/examples.js +70 -15
  48. package/dist/index.d.ts +12 -10
  49. package/dist/index.js +12 -10
  50. package/dist/schedule.d.ts +62 -62
  51. package/dist/schedule.js +74 -68
  52. package/dist/types.d.ts +17 -16
  53. package/dist/types.js +0 -1
  54. package/package.json +35 -33
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 NIKITA KHORECHKO
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -2,19 +2,55 @@
2
2
 
3
3
  API для **Житомирського державного університету імені Івана Франка**.
4
4
 
5
+ ### СТАБІЛЬНЕ API:
6
+
5
7
  Бібліотека надає програмний доступ до відкритих сервісів університету, зокрема:
6
8
 
7
- * 📅 розклад занять студентів / викладачів / аудиторій
8
- * 🚪 зайняті / вільні аудиторії
9
- * 🏫 списки аудиторій
10
- * 👥 списки груп
11
- * 👨‍🏫 списки викладачів
9
+ - 📅 розклад занять студентів / викладачів / аудиторій
10
+ - 🚪 зайняті / вільні аудиторії
11
+ - 🏫 списки аудиторій
12
+ - 👥 списки груп
13
+ - 👨‍🏫 списки викладачів
14
+ - 🎯 TypeScript підтримка з повною типізацією
15
+ - 📱 Сумісність з Node.js та браузерними середовищами
16
+
17
+ ### BETA API:
18
+
19
+ #### 📚 Кабінет студента (CabinetStudent)
20
+
21
+ - 🔐 Авторизація в кабінеті студента
22
+ - 📝 Отримання анкетних даних студента (ПІБ, дата народження, стать, контакти, факультет, спеціальність, група, форма навчання)
23
+ - 📖 Отримання дисциплін поточного семестру
24
+ - 📊 Отримання оцінок з окремого предмета (з деталізацією по заняттях, пропускам та фінальною оцінкою)
25
+ - 📈 Отримання оцінок з усіх дисциплін одночасно
26
+ - 🎓 Отримання оцінок за конкретний семестр (1 або 2)
27
+ - 🆔 Отримання ID студента в системі оцінювання
28
+ - 💾 Відновлення попередньої сесії без повторної авторизації
29
+ - ✅ Перевірка валідності поточної сесії
30
+ - 🔄 Автоматичне визначення поточного семестру
31
+ - 📦 Масове завантаження всіх даних (анкетні дані + дисципліни + оцінки)
32
+ - 📅 Інформація про розклад занять для кожної дисципліни (викладач, дата, час, тип заняття)
33
+
34
+ #### 👨‍🏫 Кабінет викладача (CabinetTeacher)
35
+
36
+ - 🔐 Авторизація в кабінеті викладача
37
+ - 📝 Отримання анкетних даних викладача (ПІБ, кафедра, години роботи, навантаження)
38
+ - 👥 Отримання списку всіх академічних груп викладача
39
+ - 📊 Деталізована інформація про кожну групу (назва, курс, семестр, спеціальність, факультет)
40
+ - 🔗 URL-посилання на журнали академічних груп
41
+ - 💼 Інформація про навчальне навантаження (години за штатом, за сумісництвом, загальне)
42
+ - 📆 Тривалість роботи в навчальному році
43
+ - 💾 Відновлення попередньої сесії без повторної авторизації
44
+ - ✅ Перевірка валідності поточної сесії
45
+ - 📦 Масове завантаження всіх даних (анкетні дані + академічні групи)
12
46
 
13
47
  ### 🔮 У планах
14
48
 
15
- * API кабінету студента
16
- * оцінки
17
- * рейтинги
49
+ - стабільне API кабінету студента
50
+ - стабільне API кабінету викладача
51
+ - Отримання історії оцінок з усіх предметів
52
+ - Отримання айді всіх доступних студентів для окремого викладача
53
+ - Отримання всіх оцінок через кабінет викладача
18
54
 
19
55
  > ⚠️ Проєкт **не є офіційним** API університету.
20
56
 
@@ -26,6 +62,12 @@ API для **Житомирського державного університ
26
62
  npm install zdu-student-api
27
63
  ```
28
64
 
65
+ або
66
+
67
+ ```bash
68
+ pnpm install zdu-student-api
69
+ ```
70
+
29
71
  ---
30
72
 
31
73
  ## Базове використання
@@ -42,11 +84,11 @@ schedule.rosText = true;
42
84
  schedule.allStreamComponents = true;
43
85
 
44
86
  try {
45
- const sc = await schedule.getSchedule();
46
- console.log('Розклад:', sc);
87
+ const sc = await schedule.getSchedule();
88
+ console.log('Розклад:', sc);
47
89
  } catch (err: any) {
48
- console.error(err.message);
49
- console.error(scheduleErrors[JSON.parse(err.message).errorcode]);
90
+ console.error(err.message);
91
+ console.error(scheduleErrors[JSON.parse(err.message).errorcode]);
50
92
  }
51
93
  ```
52
94
 
@@ -137,16 +179,198 @@ console.log(dops);
137
179
 
138
180
  ---
139
181
 
140
- ### Кабінет студента (WIP)
182
+ ## Кабінет студента
183
+
184
+ ### Базове використання
185
+
186
+ ```ts
187
+ import { CabinetStudent } from 'zdu-student-api';
188
+
189
+ const cabinet = new CabinetStudent('ПРІЗВИЩЕ', 'ПАРОЛЬ');
190
+
191
+ // Авторизація
192
+ const authSuccess = await cabinet.auth();
193
+ if (authSuccess) {
194
+ console.log('Авторизовано успішно!');
195
+ console.log('Session ID:', cabinet.sesID);
196
+ }
197
+ ```
198
+
199
+ ---
200
+
201
+ ### Отримання всіх даних студента
202
+
203
+ ```ts
204
+ const cabinet = new CabinetStudent('ПРІЗВИЩЕ', 'ПАРОЛЬ');
205
+ await cabinet.auth();
206
+
207
+ // Завантажити всі дані (анкетні дані, дисципліни, оцінки)
208
+ await cabinet.loadData();
209
+
210
+ console.log('Дані студента:', cabinet.data);
211
+ console.log('Дисципліни:', cabinet.disciplines);
212
+ console.log('Оцінки:', cabinet.allScores);
213
+ ```
214
+
215
+ ---
216
+
217
+ ### Робота з дисциплінами та оцінками
218
+
219
+ ```ts
220
+ const cabinet = new CabinetStudent('ПРІЗВИЩЕ', 'ПАРОЛЬ');
221
+ await cabinet.auth();
222
+
223
+ // Отримати дисципліни поточного семестру
224
+ const disciplines = await cabinet.getDisciplines();
225
+ console.log('Дисципліни:', disciplines);
226
+
227
+ // Отримати оцінки з усіх дисциплін
228
+ const allScores = await cabinet.getAllScores();
229
+ console.log('Всі оцінки:', allScores);
230
+
231
+ // Отримати оцінки за конкретний семестр
232
+ const firstSemesterScores = await cabinet.getAllScores(1);
233
+ const secondSemesterScores = await cabinet.getAllScores(2);
234
+ ```
235
+
236
+ ---
237
+
238
+ ### Відновлення сесії
239
+
240
+ ```ts
241
+ const cabinet = new CabinetStudent('ПРІЗВИЩЕ', 'ПАРОЛЬ');
242
+
243
+ // Відновити попередню сесію
244
+ const sesID = 'YOUR_SESSION_ID';
245
+ const sessGUID = 'YOUR_SESSION_GUID';
246
+
247
+ // Сесія активна тільки 24 години і стає застарілою як тільки відбувається нова авторизація викладача в кабінеті
248
+ const sessionValid = await cabinet.setSession(sesID, sessGUID);
249
+ if (sessionValid) {
250
+ console.log('Сесію відновлено!');
251
+ await cabinet.loadData();
252
+ }
253
+ ```
254
+
255
+ ---
256
+
257
+ ### Перевірка валідності сесії
258
+
259
+ ```ts
260
+ const cabinet = new CabinetStudent('ПРІЗВИЩЕ', 'ПАРОЛЬ');
261
+ await cabinet.auth();
262
+
263
+ // Перевірити чи сесія ще дійсна
264
+ const isValid = await cabinet.isValidSession();
265
+ console.log('Сесія дійсна:', isValid);
266
+ ```
267
+
268
+ ---
269
+
270
+ ### Отримання ID студента
271
+
272
+ ```ts
273
+ const cabinet = new CabinetStudent('ПРІЗВИЩЕ', 'ПАРОЛЬ');
274
+ await cabinet.auth();
275
+
276
+ const studentId = await cabinet.getId();
277
+ console.log('ID студента:', studentId);
278
+ ```
279
+
280
+ ---
281
+
282
+ ## Кабінет викладача
283
+
284
+ ### Базове використання
141
285
 
142
286
  ```ts
143
- import { getSesId } from 'zdu-student-api';
287
+ import { CabinetTeacher } from 'zdu-student-api';
288
+
289
+ const cabinet = new CabinetTeacher('ЛОГІН', 'ПАРОЛЬ');
144
290
 
145
- const sessionId = await getSesId('LOGIN', 'PASSWORD');
146
- console.log(sessionId);
291
+ // Авторизація
292
+ const authSuccess = await cabinet.auth();
293
+ if (authSuccess) {
294
+ console.log('Авторизовано успішно!');
295
+ console.log('Session ID:', cabinet.sesID);
296
+ }
147
297
  ```
148
298
 
149
- > ⚠️ Функціонал у розробці
299
+ ---
300
+
301
+ ### Отримання даних викладача
302
+
303
+ ```ts
304
+ const cabinet = new CabinetTeacher('ЛОГІН', 'ПАРОЛЬ');
305
+ await cabinet.auth();
306
+
307
+ // Отримати анкетні дані викладача
308
+ const data = await cabinet.getData();
309
+ console.log('ПІБ:', data.fullName);
310
+ console.log('Кафедра:', data.department);
311
+ console.log('Навантаження:', data.totalWorkload);
312
+ ```
313
+
314
+ ---
315
+
316
+ ### Робота з академічними групами
317
+
318
+ ```ts
319
+ const cabinet = new CabinetTeacher('ЛОГІН', 'ПАРОЛЬ');
320
+ await cabinet.auth();
321
+
322
+ // Отримати всі академічні групи
323
+ const groups = await cabinet.getAcademicGroups();
324
+ console.log('Академічні групи:', groups);
325
+
326
+ // Інформація зберігається в об'єкті
327
+ console.log('Групи викладача:', cabinet.academicGroups);
328
+
329
+ // Приклад даних групи:
330
+ // {
331
+ // name: '46Бд-Комп',
332
+ // semester: 1,
333
+ // encodedName: '46%C1%E4-%CA%EE%EC%EF',
334
+ // course: 4,
335
+ // specialty: '122 Комп`ютерні науки (Д_Б 2022-2023 н.р.)',
336
+ // faculty: 'Фізико-математичний факультет',
337
+ // teacherId: '1466',
338
+ // journalUrl: './teachers.cgi?sesID={sesID}&n=1&grp=46%C1%E4-%CA%EE%EC%EF&teacher=1466'
339
+ // },
340
+ ```
341
+
342
+ ---
343
+
344
+ ### Отримання всіх даних викладача
345
+
346
+ ```ts
347
+ const cabinet = new CabinetTeacher('ЛОГІН', 'ПАРОЛЬ');
348
+ await cabinet.auth();
349
+
350
+ // Завантажити всі дані (анкетні дані + академічні групи)
351
+ await cabinet.loadData();
352
+
353
+ console.log('Дані викладача:', cabinet.data);
354
+ console.log('Академічні групи:', cabinet.academicGroups);
355
+ ```
356
+
357
+ ---
358
+
359
+ ### Відновлення сесії викладача
360
+
361
+ ```ts
362
+ const cabinet = new CabinetTeacher('ЛОГІН', 'ПАРОЛЬ');
363
+
364
+ // Відновити попередню сесію
365
+ const sesID = 'YOUR_SESSION_ID';
366
+ const sessGUID = 'YOUR_SESSION_GUID';
367
+
368
+ const sessionValid = await cabinet.setSession(sesID, sessGUID);
369
+ if (sessionValid) {
370
+ console.log('Сесію відновлено!');
371
+ await cabinet.loadData();
372
+ }
373
+ ```
150
374
 
151
375
  ---
152
376
 
@@ -159,4 +383,4 @@ console.log(sessionId);
159
383
 
160
384
  ## Ліцензія
161
385
 
162
- MIT © 2025
386
+ MIT © 2026
@@ -5,64 +5,64 @@ import { AudienceRoom, Blocks } from './types.js';
5
5
  */
6
6
  export declare class Audience {
7
7
  /**
8
- * Назва корпусу
9
- */
8
+ * Назва корпусу
9
+ */
10
10
  blockName?: Blocks;
11
11
  /**
12
- * Номер пари
13
- */
12
+ * Номер пари
13
+ */
14
14
  lesson: number;
15
15
  /**
16
- * Тип аудиторій який є в даному корпусі
17
- */
16
+ * Тип аудиторій який є в даному корпусі
17
+ */
18
18
  roomType?: string;
19
19
  /**
20
- * Кількість місць не менше ніж
21
- */
20
+ * Кількість місць не менше ніж
21
+ */
22
22
  size_min?: number;
23
23
  /**
24
- * Кількість місць не більше ніж
25
- */
24
+ * Кількість місць не більше ніж
25
+ */
26
26
  size_max?: number;
27
27
  /**
28
- * Дата аудиторії
29
- */
28
+ * Дата аудиторії
29
+ */
30
30
  roomsDate: Date;
31
31
  /**
32
- * Наявніть доп. обладнання типу 1, 2, 3, 4, 5, 6, 7, 8
33
- */
32
+ * Наявніть доп. обладнання типу 1, 2, 3, 4, 5, 6, 7, 8
33
+ */
34
34
  dops: number[];
35
35
  /**
36
- * Повертає список аудиторій
37
- *
38
- * @throws {Error} Якщо виникають проблеми з запитом або дані некоректні.
39
- *
40
- * @example
41
- * ```ts
42
- * import { Audience } from "./audience.ts";
43
- * const audience = new Audience();
44
- * try {
45
- * const audiences = await audience.getAudience();
46
- * console.log("Аудиторії:", audiences); // Поверне список аудиторій
47
- * } catch (err: any) {
48
- * console.error(err.message);
49
- * }
50
- * ```
51
- *
52
- * @remarks
53
- * У `err.message` може повертатися простий текст помилки,
54
- * або об’єкт у форматі:
55
- * ```JSON
56
- * {
57
- * "error_message": "Текст помилки",
58
- * "errorcode": "Код помилки"
59
- * }
60
- * ```
61
- *
62
- * Де:
63
- * - `error_message` - текст помилки відповідно до {@link scheduleErrors}
64
- * - `errorcode` - код помилки відповідно до {@link scheduleErrors}
65
- */
36
+ * Повертає список аудиторій
37
+ *
38
+ * @throws {Error} Якщо виникають проблеми з запитом або дані некоректні.
39
+ *
40
+ * @example
41
+ * ```ts
42
+ * import { Audience } from "./audience.ts";
43
+ * const audience = new Audience();
44
+ * try {
45
+ * const audiences = await audience.getAudience();
46
+ * console.log("Аудиторії:", audiences); // Поверне список аудиторій
47
+ * } catch (err: any) {
48
+ * console.error(err.message);
49
+ * }
50
+ * ```
51
+ *
52
+ * @remarks
53
+ * У `err.message` може повертатися простий текст помилки,
54
+ * або об’єкт у форматі:
55
+ * ```JSON
56
+ * {
57
+ * "error_message": "Текст помилки",
58
+ * "errorcode": "Код помилки"
59
+ * }
60
+ * ```
61
+ *
62
+ * Де:
63
+ * - `error_message` - текст помилки відповідно до {@link scheduleErrors}
64
+ * - `errorcode` - код помилки відповідно до {@link scheduleErrors}
65
+ */
66
66
  getAudience(): Promise<AudienceRoom[]>;
67
67
  private encodeCP1251;
68
68
  }
package/dist/audience.js CHANGED
@@ -6,72 +6,72 @@ import fetch from 'cross-fetch';
6
6
  */
7
7
  export class Audience {
8
8
  /**
9
- * Назва корпусу
10
- */
9
+ * Назва корпусу
10
+ */
11
11
  blockName;
12
12
  /**
13
- * Номер пари
14
- */
13
+ * Номер пари
14
+ */
15
15
  lesson = 1;
16
16
  /**
17
- * Тип аудиторій який є в даному корпусі
18
- */
17
+ * Тип аудиторій який є в даному корпусі
18
+ */
19
19
  roomType;
20
20
  /**
21
- * Кількість місць не менше ніж
22
- */
21
+ * Кількість місць не менше ніж
22
+ */
23
23
  size_min;
24
24
  /**
25
- * Кількість місць не більше ніж
26
- */
25
+ * Кількість місць не більше ніж
26
+ */
27
27
  size_max;
28
28
  /**
29
- * Дата аудиторії
30
- */
29
+ * Дата аудиторії
30
+ */
31
31
  roomsDate = new Date();
32
32
  /**
33
- * Наявніть доп. обладнання типу 1, 2, 3, 4, 5, 6, 7, 8
34
- */
33
+ * Наявніть доп. обладнання типу 1, 2, 3, 4, 5, 6, 7, 8
34
+ */
35
35
  dops = [];
36
36
  /**
37
- * Повертає список аудиторій
38
- *
39
- * @throws {Error} Якщо виникають проблеми з запитом або дані некоректні.
40
- *
41
- * @example
42
- * ```ts
43
- * import { Audience } from "./audience.ts";
44
- * const audience = new Audience();
45
- * try {
46
- * const audiences = await audience.getAudience();
47
- * console.log("Аудиторії:", audiences); // Поверне список аудиторій
48
- * } catch (err: any) {
49
- * console.error(err.message);
50
- * }
51
- * ```
52
- *
53
- * @remarks
54
- * У `err.message` може повертатися простий текст помилки,
55
- * або об’єкт у форматі:
56
- * ```JSON
57
- * {
58
- * "error_message": "Текст помилки",
59
- * "errorcode": "Код помилки"
60
- * }
61
- * ```
62
- *
63
- * Де:
64
- * - `error_message` - текст помилки відповідно до {@link scheduleErrors}
65
- * - `errorcode` - код помилки відповідно до {@link scheduleErrors}
66
- */
37
+ * Повертає список аудиторій
38
+ *
39
+ * @throws {Error} Якщо виникають проблеми з запитом або дані некоректні.
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * import { Audience } from "./audience.ts";
44
+ * const audience = new Audience();
45
+ * try {
46
+ * const audiences = await audience.getAudience();
47
+ * console.log("Аудиторії:", audiences); // Поверне список аудиторій
48
+ * } catch (err: any) {
49
+ * console.error(err.message);
50
+ * }
51
+ * ```
52
+ *
53
+ * @remarks
54
+ * У `err.message` може повертатися простий текст помилки,
55
+ * або об’єкт у форматі:
56
+ * ```JSON
57
+ * {
58
+ * "error_message": "Текст помилки",
59
+ * "errorcode": "Код помилки"
60
+ * }
61
+ * ```
62
+ *
63
+ * Де:
64
+ * - `error_message` - текст помилки відповідно до {@link scheduleErrors}
65
+ * - `errorcode` - код помилки відповідно до {@link scheduleErrors}
66
+ */
67
67
  async getAudience() {
68
68
  const date = this.roomsDate.toLocaleDateString('uk-UA', {
69
69
  day: '2-digit',
70
70
  month: '2-digit',
71
- year: 'numeric'
71
+ year: 'numeric',
72
72
  });
73
73
  let dops = '';
74
- this.dops.forEach(dop => {
74
+ this.dops.forEach((dop) => {
75
75
  dops += `&dop_${dop}=yes`;
76
76
  });
77
77
  const response = await fetch(`https://dekanat.zu.edu.ua/cgi-bin/timetable_export.cgi?req_type=free_rooms_list&&block_name=${this.blockName !== undefined ? this.encodeCP1251(this.blockName) : ''}&size_min=${this.size_min !== undefined ? this.size_min : ''}&size_max=${this.size_max !== undefined ? this.size_max : ''}&room_type=${this.roomType !== undefined ? this.encodeCP1251(this.roomType) : ''}&begin_date=${date}&lesson=${this.lesson}${dops}&req_format=json&coding_mode=UTF8&bs=%D1%F4%EE%F0%EC%F3%E2%E0%F2%E8+%E7%E0%EF%E8%F2`);
@@ -79,12 +79,14 @@ export class Audience {
79
79
  throw new Error(`HTTP error ${response.status}: ${response.statusText}`);
80
80
  const data = await response.json();
81
81
  if (data.psrozklad_export.code !== '0') {
82
- throw new Error(JSON.stringify(data.psrozklad_export.error) || "Unknown error");
82
+ throw new Error(JSON.stringify(data.psrozklad_export.error) || 'Unknown error');
83
83
  }
84
84
  return data.psrozklad_export.free_rooms.rooms;
85
85
  }
86
86
  encodeCP1251(str) {
87
87
  const buf = iconv.encode(str, 'win1251');
88
- return Array.from(buf).map(b => '%' + b.toString(16).toUpperCase().padStart(2, '0')).join('');
88
+ return Array.from(buf)
89
+ .map((b) => '%' + b.toString(16).toUpperCase().padStart(2, '0'))
90
+ .join('');
89
91
  }
90
92
  }
@@ -0,0 +1,79 @@
1
+ import { Discipline, Disciplines, Data, Scores } from './types.js';
2
+ /**
3
+ * Клас кабінету студента
4
+ * @category Cabinet
5
+ */
6
+ export declare class Cabinet {
7
+ /**
8
+ * Прізвище користувача
9
+ */
10
+ login: string;
11
+ /**
12
+ * Пароль від кабінету студента
13
+ */
14
+ password: string;
15
+ /**
16
+ * ID сесії користувача
17
+ */
18
+ sesID?: string;
19
+ /**
20
+ * GUID сесії з cookie
21
+ */
22
+ sessGUID?: string;
23
+ /**
24
+ * Семестр для пошуку оцінок (0 - перший, 1 - другий)
25
+ */
26
+ semester: 0 | 1;
27
+ /**
28
+ * Список дисциплін {@link Discipline}
29
+ */
30
+ disciplines: Discipline[];
31
+ /**
32
+ * Данні студента {@link Data}
33
+ */
34
+ data?: Data;
35
+ /**
36
+ * Оціки з усіх предметів {@link Scores}
37
+ */
38
+ allScores?: Scores[];
39
+ /**
40
+ * Конструктор
41
+ * @param login - Прізвище користувача
42
+ * @param password - Пароль
43
+ */
44
+ constructor(login: string, password: string);
45
+ /**
46
+ * Авторизація
47
+ */
48
+ auth(login?: string, password?: string): Promise<boolean>;
49
+ /**
50
+ * Базове значення семестру
51
+ */
52
+ private setSemester;
53
+ /**
54
+ * Отримання всіх данних
55
+ */
56
+ loadData(): Promise<boolean>;
57
+ /**
58
+ * Відновлення сесії
59
+ */
60
+ setSession(sesID: string, sessGUID: string): Promise<boolean>;
61
+ /**
62
+ * Перевірка валідності сесії
63
+ */
64
+ isValidSession(): Promise<boolean>;
65
+ /**
66
+ * Отримати дисципліни поточного семестру студента
67
+ * @returns Масив дисциплін {@link Disciplines}
68
+ */
69
+ getDisciplines(): Promise<Disciplines>;
70
+ /**
71
+ * Отримати анкетні данні студента
72
+ * @returns Об'єкт {@link ata}
73
+ */
74
+ getData(): Promise<Data>;
75
+ /**
76
+ * Отримати оцінки з всіх предметів
77
+ */
78
+ getAllScores(semester?: 0 | 1): Promise<Scores[]>;
79
+ }