@robertying/thu-learn-lib 0.0.0-stage → 4.1.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.
Files changed (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +324 -2
  3. package/lib/auth.d.ts +11 -0
  4. package/lib/auth.d.ts.map +1 -0
  5. package/lib/auth.js +99 -0
  6. package/lib/auth.js.map +1 -0
  7. package/lib/calendar.d.ts +16 -0
  8. package/lib/calendar.d.ts.map +1 -0
  9. package/lib/calendar.js +81 -0
  10. package/lib/calendar.js.map +1 -0
  11. package/lib/contents.d.ts +9 -0
  12. package/lib/contents.d.ts.map +1 -0
  13. package/lib/contents.js +52 -0
  14. package/lib/contents.js.map +1 -0
  15. package/lib/courses.d.ts +9 -0
  16. package/lib/courses.d.ts.map +1 -0
  17. package/lib/courses.js +82 -0
  18. package/lib/courses.js.map +1 -0
  19. package/lib/discussions.d.ts +11 -0
  20. package/lib/discussions.d.ts.map +1 -0
  21. package/lib/discussions.js +56 -0
  22. package/lib/discussions.js.map +1 -0
  23. package/lib/favorites.d.ts +35 -0
  24. package/lib/favorites.d.ts.map +1 -0
  25. package/lib/favorites.js +150 -0
  26. package/lib/favorites.js.map +1 -0
  27. package/lib/files.d.ts +13 -0
  28. package/lib/files.d.ts.map +1 -0
  29. package/lib/files.js +167 -0
  30. package/lib/files.js.map +1 -0
  31. package/lib/homework.d.ts +9 -0
  32. package/lib/homework.d.ts.map +1 -0
  33. package/lib/homework.js +193 -0
  34. package/lib/homework.js.map +1 -0
  35. package/lib/index.d.ts +105 -0
  36. package/lib/index.d.ts.map +1 -0
  37. package/lib/index.js +181 -0
  38. package/lib/index.js.map +1 -0
  39. package/lib/notices.d.ts +6 -0
  40. package/lib/notices.d.ts.map +1 -0
  41. package/lib/notices.js +84 -0
  42. package/lib/notices.js.map +1 -0
  43. package/lib/questionnaires.d.ts +7 -0
  44. package/lib/questionnaires.d.ts.map +1 -0
  45. package/lib/questionnaires.js +62 -0
  46. package/lib/questionnaires.js.map +1 -0
  47. package/lib/request.d.ts +31 -0
  48. package/lib/request.d.ts.map +1 -0
  49. package/lib/request.js +90 -0
  50. package/lib/request.js.map +1 -0
  51. package/lib/types.d.ts +392 -0
  52. package/lib/types.d.ts.map +1 -0
  53. package/lib/types.js +97 -0
  54. package/lib/types.js.map +1 -0
  55. package/lib/urls.d.ts +78 -0
  56. package/lib/urls.d.ts.map +1 -0
  57. package/lib/urls.js +160 -0
  58. package/lib/urls.js.map +1 -0
  59. package/lib/user.d.ts +7 -0
  60. package/lib/user.d.ts.map +1 -0
  61. package/lib/user.js +22 -0
  62. package/lib/user.js.map +1 -0
  63. package/lib/utils.d.ts +13 -0
  64. package/lib/utils.d.ts.map +1 -0
  65. package/lib/utils.js +115 -0
  66. package/lib/utils.js.map +1 -0
  67. package/package.json +67 -4
  68. package/src/auth.ts +121 -0
  69. package/src/calendar.ts +102 -0
  70. package/src/contents.ts +67 -0
  71. package/src/courses.ts +97 -0
  72. package/src/discussions.ts +80 -0
  73. package/src/favorites.ts +167 -0
  74. package/src/files.ts +197 -0
  75. package/src/homework.ts +279 -0
  76. package/src/index.ts +282 -0
  77. package/src/notices.ts +110 -0
  78. package/src/questionnaires.ts +76 -0
  79. package/src/request.ts +101 -0
  80. package/src/types.ts +445 -0
  81. package/src/urls.ts +257 -0
  82. package/src/user.ts +28 -0
  83. package/src/utils.ts +120 -0
package/lib/types.js ADDED
@@ -0,0 +1,97 @@
1
+ export var FailReason;
2
+ (function (FailReason) {
3
+ FailReason["NO_CREDENTIAL"] = "no credential provided";
4
+ FailReason["ERROR_FETCH_FROM_ID"] = "could not fetch ticket from id.tsinghua.edu.cn";
5
+ FailReason["BAD_CREDENTIAL"] = "bad credential";
6
+ FailReason["ERROR_ROAMING"] = "could not roam to learn.tsinghua.edu.cn";
7
+ FailReason["NOT_LOGGED_IN"] = "not logged in or login timeout";
8
+ FailReason["NOT_IMPLEMENTED"] = "not implemented";
9
+ FailReason["INVALID_RESPONSE"] = "invalid response";
10
+ FailReason["UNEXPECTED_STATUS"] = "unexpected status";
11
+ FailReason["OPERATION_FAILED"] = "operation failed";
12
+ FailReason["ERROR_SETTING_COOKIES"] = "could not set cookies";
13
+ })(FailReason || (FailReason = {}));
14
+ export var SemesterType;
15
+ (function (SemesterType) {
16
+ SemesterType["FALL"] = "fall";
17
+ SemesterType["SPRING"] = "spring";
18
+ SemesterType["SUMMER"] = "summer";
19
+ SemesterType["UNKNOWN"] = "";
20
+ })(SemesterType || (SemesterType = {}));
21
+ export var ContentType;
22
+ (function (ContentType) {
23
+ ContentType["NOTIFICATION"] = "notification";
24
+ ContentType["FILE"] = "file";
25
+ ContentType["HOMEWORK"] = "homework";
26
+ ContentType["DISCUSSION"] = "discussion";
27
+ ContentType["QUESTION"] = "question";
28
+ ContentType["QUESTIONNAIRE"] = "questionnaire";
29
+ })(ContentType || (ContentType = {}));
30
+ export var CourseType;
31
+ (function (CourseType) {
32
+ CourseType["STUDENT"] = "student";
33
+ CourseType["TEACHER"] = "teacher";
34
+ })(CourseType || (CourseType = {}));
35
+ export var HomeworkGradeLevel;
36
+ (function (HomeworkGradeLevel) {
37
+ /** 已阅 */
38
+ HomeworkGradeLevel["CHECKED"] = "checked";
39
+ HomeworkGradeLevel["A_PLUS"] = "A+";
40
+ HomeworkGradeLevel["A"] = "A";
41
+ HomeworkGradeLevel["A_MINUS"] = "A-";
42
+ HomeworkGradeLevel["B_PLUS"] = "B+";
43
+ /** 优秀 */
44
+ HomeworkGradeLevel["DISTINCTION"] = "distinction";
45
+ HomeworkGradeLevel["B"] = "B";
46
+ HomeworkGradeLevel["B_MINUS"] = "B-";
47
+ HomeworkGradeLevel["C_PLUS"] = "C+";
48
+ HomeworkGradeLevel["C"] = "C";
49
+ HomeworkGradeLevel["C_MINUS"] = "C-";
50
+ HomeworkGradeLevel["G"] = "G";
51
+ HomeworkGradeLevel["D_PLUS"] = "D+";
52
+ HomeworkGradeLevel["D"] = "D";
53
+ /** 免课 */
54
+ HomeworkGradeLevel["EXEMPTED_COURSE"] = "exempted course";
55
+ HomeworkGradeLevel["P"] = "P";
56
+ HomeworkGradeLevel["EX"] = "EX";
57
+ /** 免修 */
58
+ HomeworkGradeLevel["EXEMPTION"] = "exemption";
59
+ /** 通过 */
60
+ HomeworkGradeLevel["PASS"] = "pass";
61
+ /** 不通过 */
62
+ HomeworkGradeLevel["FAILURE"] = "failure";
63
+ HomeworkGradeLevel["W"] = "W";
64
+ HomeworkGradeLevel["I"] = "I";
65
+ /** 缓考 */
66
+ HomeworkGradeLevel["INCOMPLETE"] = "incomplete";
67
+ HomeworkGradeLevel["NA"] = "NA";
68
+ HomeworkGradeLevel["F"] = "F";
69
+ })(HomeworkGradeLevel || (HomeworkGradeLevel = {}));
70
+ export var HomeworkCompletionType;
71
+ (function (HomeworkCompletionType) {
72
+ HomeworkCompletionType[HomeworkCompletionType["INDIVIDUAL"] = 1] = "INDIVIDUAL";
73
+ HomeworkCompletionType[HomeworkCompletionType["GROUP"] = 2] = "GROUP";
74
+ })(HomeworkCompletionType || (HomeworkCompletionType = {}));
75
+ export var HomeworkSubmissionType;
76
+ (function (HomeworkSubmissionType) {
77
+ HomeworkSubmissionType[HomeworkSubmissionType["WEB_LEARNING"] = 2] = "WEB_LEARNING";
78
+ HomeworkSubmissionType[HomeworkSubmissionType["OFFLINE"] = 0] = "OFFLINE";
79
+ })(HomeworkSubmissionType || (HomeworkSubmissionType = {}));
80
+ export var QuestionnaireDetailType;
81
+ (function (QuestionnaireDetailType) {
82
+ QuestionnaireDetailType["SINGLE"] = "dnx";
83
+ QuestionnaireDetailType["MULTI"] = "dox";
84
+ QuestionnaireDetailType["TEXT"] = "wd";
85
+ })(QuestionnaireDetailType || (QuestionnaireDetailType = {}));
86
+ export var QuestionnaireType;
87
+ (function (QuestionnaireType) {
88
+ QuestionnaireType["VOTE"] = "tp";
89
+ QuestionnaireType["FORM"] = "tb";
90
+ QuestionnaireType["SURVEY"] = "wj";
91
+ })(QuestionnaireType || (QuestionnaireType = {}));
92
+ export var Language;
93
+ (function (Language) {
94
+ Language["ZH"] = "zh";
95
+ Language["EN"] = "en";
96
+ })(Language || (Language = {}));
97
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAkBA,MAAM,CAAN,IAAY,UAWX;AAXD,WAAY,UAAU;IACpB,sDAAwC,CAAA;IACxC,oFAAsE,CAAA;IACtE,+CAAiC,CAAA;IACjC,uEAAyD,CAAA;IACzD,8DAAgD,CAAA;IAChD,iDAAmC,CAAA;IACnC,mDAAqC,CAAA;IACrC,qDAAuC,CAAA;IACvC,mDAAqC,CAAA;IACrC,6DAA+C,CAAA;AACjD,CAAC,EAXW,UAAU,KAAV,UAAU,QAWrB;AAOD,MAAM,CAAN,IAAY,YAKX;AALD,WAAY,YAAY;IACtB,6BAAa,CAAA;IACb,iCAAiB,CAAA;IACjB,iCAAiB,CAAA;IACjB,4BAAY,CAAA;AACd,CAAC,EALW,YAAY,KAAZ,YAAY,QAKvB;AAED,MAAM,CAAN,IAAY,WAOX;AAPD,WAAY,WAAW;IACrB,4CAA6B,CAAA;IAC7B,4BAAa,CAAA;IACb,oCAAqB,CAAA;IACrB,wCAAyB,CAAA;IACzB,oCAAqB,CAAA;IACrB,8CAA+B,CAAA;AACjC,CAAC,EAPW,WAAW,KAAX,WAAW,QAOtB;AAoBD,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,iCAAmB,CAAA;IACnB,iCAAmB,CAAA;AACrB,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB;AA6FD,MAAM,CAAN,IAAY,kBAiCX;AAjCD,WAAY,kBAAkB;IAC5B,SAAS;IACT,yCAAmB,CAAA;IACnB,mCAAa,CAAA;IACb,6BAAO,CAAA;IACP,oCAAc,CAAA;IACd,mCAAa,CAAA;IACb,SAAS;IACT,iDAA2B,CAAA;IAC3B,6BAAO,CAAA;IACP,oCAAc,CAAA;IACd,mCAAa,CAAA;IACb,6BAAO,CAAA;IACP,oCAAc,CAAA;IACd,6BAAO,CAAA;IACP,mCAAa,CAAA;IACb,6BAAO,CAAA;IACP,SAAS;IACT,yDAAmC,CAAA;IACnC,6BAAO,CAAA;IACP,+BAAS,CAAA;IACT,SAAS;IACT,6CAAuB,CAAA;IACvB,SAAS;IACT,mCAAa,CAAA;IACb,UAAU;IACV,yCAAmB,CAAA;IACnB,6BAAO,CAAA;IACP,6BAAO,CAAA;IACP,SAAS;IACT,+CAAyB,CAAA;IACzB,+BAAS,CAAA;IACT,6BAAO,CAAA;AACT,CAAC,EAjCW,kBAAkB,KAAlB,kBAAkB,QAiC7B;AA4CD,MAAM,CAAN,IAAY,sBAGX;AAHD,WAAY,sBAAsB;IAChC,+EAAc,CAAA;IACd,qEAAS,CAAA;AACX,CAAC,EAHW,sBAAsB,KAAtB,sBAAsB,QAGjC;AAED,MAAM,CAAN,IAAY,sBAGX;AAHD,WAAY,sBAAsB;IAChC,mFAAgB,CAAA;IAChB,yEAAW,CAAA;AACb,CAAC,EAHW,sBAAsB,KAAtB,sBAAsB,QAGjC;AAqED,MAAM,CAAN,IAAY,uBAIX;AAJD,WAAY,uBAAuB;IACjC,yCAAc,CAAA;IACd,wCAAa,CAAA;IACb,sCAAW,CAAA;AACb,CAAC,EAJW,uBAAuB,KAAvB,uBAAuB,QAIlC;AAgBD,MAAM,CAAN,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,gCAAW,CAAA;IACX,gCAAW,CAAA;IACX,kCAAa,CAAA;AACf,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,QAI5B;AAiGD,MAAM,CAAN,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,qBAAS,CAAA;IACT,qBAAS,CAAA;AACX,CAAC,EAHW,QAAQ,KAAR,QAAQ,QAGnB"}
package/lib/urls.d.ts ADDED
@@ -0,0 +1,78 @@
1
+ import type { ContentType, IHomeworkSubmitAttachment, QuestionnaireType } from './types.ts';
2
+ import { CourseType, Language } from './types.ts';
3
+ export declare const ID_PREFIX = "https://id.tsinghua.edu.cn";
4
+ export declare const LEARN_PREFIX = "https://learn.tsinghua.edu.cn";
5
+ export declare const REGISTRAR_PREFIX = "https://zhjw.cic.tsinghua.edu.cn";
6
+ export declare const ID_LOGIN: () => string;
7
+ export declare const ID_LOGIN_CHECK: () => string;
8
+ export declare const LEARN_AUTH_ROAM: (ticket: string) => string;
9
+ export declare const LEARN_LOGOUT: () => string;
10
+ export declare const LEARN_HOMEPAGE: (courseType: CourseType) => "https://learn.tsinghua.edu.cn/f/wlxt/index/course/student/" | "https://learn.tsinghua.edu.cn/f/wlxt/index/course/teacher/";
11
+ export declare const LEARN_STUDENT_COURSE_LIST_PAGE: () => string;
12
+ export declare const LEARN_SEMESTER_LIST: () => string;
13
+ export declare const LEARN_CURRENT_SEMESTER: () => string;
14
+ export declare const LEARN_COURSE_LIST: (semester: string, courseType: CourseType, lang: Language) => string;
15
+ export declare const LEARN_COURSE_PAGE: (courseID: string, courseType: CourseType) => string;
16
+ export declare const LEARN_COURSE_TIME_LOCATION: (courseID: string) => string;
17
+ export declare const LEARN_FILE_LIST: (courseID: string, courseType: CourseType) => string;
18
+ export declare const LEARN_FILE_CATEGORY_LIST: (courseID: string, courseType: CourseType) => string;
19
+ export declare const LEARN_FILE_LIST_BY_CATEGORY_STUDENT: (courseID: string, categoryId: string) => string;
20
+ export declare const LEARN_FILE_LIST_BY_CATEGORY_TEACHER = "https://learn.tsinghua.edu.cn/b/wlxt/kj/v_kjxxb_wjwjb/teacher/pageList";
21
+ export declare const LEARN_FILE_LIST_BY_CATEGORY_TEACHER_FORM_DATA: (courseID: string, categoryId: string) => FormData;
22
+ export declare const LEARN_FILE_DOWNLOAD: (fileID: string, courseType: CourseType) => string;
23
+ export declare const LEARN_FILE_PREVIEW: (type: ContentType, fileID: string, courseType: CourseType, firstPageOnly?: boolean) => string;
24
+ export declare const LEARN_NOTIFICATION_LIST: (courseType: CourseType, expired: boolean) => string;
25
+ export declare const LEARN_NOTIFICATION_DETAIL: (courseID: string, notificationID: string, courseType: CourseType) => string;
26
+ export declare const LEARN_NOTIFICATION_EDIT: (courseType: CourseType) => string;
27
+ export declare const LEARN_HOMEWORK_LIST_NEW = "https://learn.tsinghua.edu.cn/b/wlxt/kczy/zy/student/zyListWj";
28
+ export declare const LEARN_HOMEWORK_LIST_SUBMITTED = "https://learn.tsinghua.edu.cn/b/wlxt/kczy/zy/student/zyListYjwg";
29
+ export declare const LEARN_HOMEWORK_LIST_GRADED = "https://learn.tsinghua.edu.cn/b/wlxt/kczy/zy/student/zyListYpg";
30
+ export declare const LEARN_HOMEWORK_LIST_EXCELLENT = "https://learn.tsinghua.edu.cn/b/wlxt/kczy/zy/student/yxzylist";
31
+ export declare const LEARN_HOMEWORK_LIST_SOURCE: {
32
+ url: string;
33
+ status: {
34
+ submitted: boolean;
35
+ graded: boolean;
36
+ };
37
+ }[];
38
+ export declare const LEARN_HOMEWORK_PAGE: (courseID: string, id: string) => string;
39
+ export declare const LEARN_HOMEWORK_EXCELLENT_PAGE: (courseID: string, id: string) => string;
40
+ export declare const LEARN_HOMEWORK_DETAIL = "https://learn.tsinghua.edu.cn/b/wlxt/kczy/zy/student/detail";
41
+ export declare const LEARN_HOMEWORK_DETAIL_FORM_DATA: (baseId: string) => FormData;
42
+ export declare const LEARN_HOMEWORK_DOWNLOAD: (courseID: string, attachmentID: string) => string;
43
+ export declare const LEARN_HOMEWORK_SUBMIT_PAGE: (courseID: string, id: string) => string;
44
+ export declare const LEARN_HOMEWORK_SUBMIT: () => string;
45
+ export declare const LEARN_HOMEWORK_SUBMIT_FORM_DATA: (id: string, content?: string, attachment?: IHomeworkSubmitAttachment, removeAttachment?: boolean) => FormData;
46
+ export declare const LEARN_HOMEWORK_LIST_TEACHER = "https://learn.tsinghua.edu.cn/b/wlxt/kczy/zy/teacher/pageList";
47
+ export declare const LEARN_HOMEWORK_DETAIL_TEACHER: (courseID: string, homeworkID: string) => string;
48
+ export declare const LEARN_DISCUSSION_LIST: (courseID: string, courseType: CourseType) => string;
49
+ export declare const LEARN_DISCUSSION_DETAIL: (courseID: string, boardID: string, discussionID: string, courseType: CourseType, tabId?: number) => string;
50
+ export declare const LEARN_QUESTION_LIST_ANSWERED: (courseID: string, courseType: CourseType) => string;
51
+ export declare const LEARN_QUESTION_DETAIL: (courseID: string, questionID: string, courseType: CourseType) => string;
52
+ export declare const LEARN_QNR_LIST_ONGOING = "https://learn.tsinghua.edu.cn/b/wlxt/kcwj/wlkc_wjb/student/pageListWks";
53
+ export declare const LEARN_QNR_LIST_ENDED = "https://learn.tsinghua.edu.cn/b/wlxt/kcwj/wlkc_wjb/student/pageListYjs";
54
+ /** Note: This page is accessible even with an invalid `qnrID` as long as you have access to the given `courseID`. */
55
+ export declare const LEARN_QNR_SUBMIT_PAGE: (courseID: string, qnrID: string, type: QuestionnaireType) => string;
56
+ export declare const LEARN_QNR_DETAIL = "https://learn.tsinghua.edu.cn/b/wlxt/kcwj/wlkc_wjb/student/getWjnr";
57
+ export declare const LEARN_QNR_DETAIL_FORM: (courseID: string, qnrID: string) => FormData;
58
+ export declare const WebsiteShowLanguage: {
59
+ zh: string;
60
+ en: string;
61
+ };
62
+ export declare const LEARN_WEBSITE_LANGUAGE: (lang: Language) => string;
63
+ export declare const LEARN_FAVORITE_ADD: (type: ContentType, id: string) => string;
64
+ export declare const LEARN_FAVORITE_REMOVE: (id: string) => string;
65
+ export declare const LEARN_FAVORITE_LIST: (type?: ContentType) => string;
66
+ export declare const LEARN_FAVORITE_PIN = "https://learn.tsinghua.edu.cn/b/xt/wlkc_xsscb/student/addZd";
67
+ export declare const LEARN_FAVORITE_UNPIN = "https://learn.tsinghua.edu.cn/b/xt/wlkc_xsscb/student/delZd";
68
+ export declare const LEARN_FAVORITE_PIN_UNPIN_FORM_DATA: (id: string) => FormData;
69
+ export declare const LEARN_COMMENT_SET = "https://learn.tsinghua.edu.cn/b/wlxt/xt/wlkc_xsbjb/add";
70
+ export declare const LEARN_COMMENT_SET_FORM_DATA: (type: ContentType, id: string, content: string) => FormData;
71
+ export declare const LEARN_COMMENT_LIST: (type?: ContentType) => string;
72
+ export declare const LEARN_PAGE_LIST_FORM_DATA: (courseID?: string) => FormData;
73
+ export declare const LEARN_SORT_COURSES = "https://learn.tsinghua.edu.cn/b/wlxt/kc/wlkc_kcpxb/addorUpdate";
74
+ export declare const REGISTRAR_TICKET_FORM_DATA: () => FormData;
75
+ export declare const REGISTRAR_TICKET: () => string;
76
+ export declare const REGISTRAR_AUTH: (ticket: string) => string;
77
+ export declare const REGISTRAR_CALENDAR: (startDate: string, endDate: string, graduate?: boolean, callbackName?: string) => string;
78
+ //# sourceMappingURL=urls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urls.d.ts","sourceRoot":"","sources":["../src/urls.ts"],"names":[],"mappings":"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"}
package/lib/urls.js ADDED
@@ -0,0 +1,160 @@
1
+ import { FormData } from 'node-fetch-native';
2
+ import { CourseType, Language } from './types.js';
3
+ import { CONTENT_TYPE_MAP, getMkFromType } from './utils.js';
4
+ export const ID_PREFIX = 'https://id.tsinghua.edu.cn';
5
+ export const LEARN_PREFIX = 'https://learn.tsinghua.edu.cn';
6
+ export const REGISTRAR_PREFIX = 'https://zhjw.cic.tsinghua.edu.cn';
7
+ const MAX_SIZE = 200;
8
+ export const ID_LOGIN = () => 'https://id.tsinghua.edu.cn/do/off/ui/auth/login/form/bb5df85216504820be7bba2b0ae1535b/0';
9
+ export const ID_LOGIN_CHECK = () => 'https://id.tsinghua.edu.cn/do/off/ui/auth/login/check';
10
+ export const LEARN_AUTH_ROAM = (ticket) => `${LEARN_PREFIX}/b/j_spring_security_thauth_roaming_entry?ticket=${ticket}`;
11
+ export const LEARN_LOGOUT = () => `${LEARN_PREFIX}/f/j_spring_security_logout`;
12
+ export const LEARN_HOMEPAGE = (courseType) => {
13
+ if (courseType === CourseType.STUDENT) {
14
+ return `${LEARN_PREFIX}/f/wlxt/index/course/student/`;
15
+ }
16
+ else {
17
+ return `${LEARN_PREFIX}/f/wlxt/index/course/teacher/`;
18
+ }
19
+ };
20
+ export const LEARN_STUDENT_COURSE_LIST_PAGE = () => `${LEARN_PREFIX}/f/wlxt/index/course/student/`;
21
+ export const LEARN_SEMESTER_LIST = () => `${LEARN_PREFIX}/b/wlxt/kc/v_wlkc_xs_xktjb_coassb/queryxnxq`;
22
+ export const LEARN_CURRENT_SEMESTER = () => `${LEARN_PREFIX}/b/kc/zhjw_v_code_xnxq/getCurrentAndNextSemester`;
23
+ export const LEARN_COURSE_LIST = (semester, courseType, lang) => courseType === CourseType.STUDENT
24
+ ? `${LEARN_PREFIX}/b/wlxt/kc/v_wlkc_xs_xkb_kcb_extend/student/loadCourseBySemesterId/${semester}/${lang}`
25
+ : `${LEARN_PREFIX}/b/kc/v_wlkc_kcb/queryAsorCoCourseList/${semester}/0`;
26
+ export const LEARN_COURSE_PAGE = (courseID, courseType) => `${LEARN_PREFIX}/f/wlxt/index/course/${courseType}/course?wlkcid=${courseID}`;
27
+ export const LEARN_COURSE_TIME_LOCATION = (courseID) => `${LEARN_PREFIX}/b/kc/v_wlkc_xk_sjddb/detail?id=${courseID}`;
28
+ export const LEARN_FILE_LIST = (courseID, courseType) => courseType === CourseType.STUDENT
29
+ ? `${LEARN_PREFIX}/b/wlxt/kj/wlkc_kjxxb/student/kjxxbByWlkcidAndSizeForStudent?wlkcid=${courseID}&size=${MAX_SIZE}`
30
+ : `${LEARN_PREFIX}/b/wlxt/kj/v_kjxxb_wjwjb/teacher/queryByWlkcid?wlkcid=${courseID}&size=${MAX_SIZE}`;
31
+ export const LEARN_FILE_CATEGORY_LIST = (courseID, courseType) => `${LEARN_PREFIX}/b/wlxt/kj/wlkc_kjflb/${courseType}/pageList?wlkcid=${courseID}`;
32
+ export const LEARN_FILE_LIST_BY_CATEGORY_STUDENT = (courseID, categoryId) => `${LEARN_PREFIX}/b/wlxt/kj/wlkc_kjxxb/student/kjxxb/${courseID}/${categoryId}`;
33
+ export const LEARN_FILE_LIST_BY_CATEGORY_TEACHER = `${LEARN_PREFIX}/b/wlxt/kj/v_kjxxb_wjwjb/teacher/pageList`;
34
+ export const LEARN_FILE_LIST_BY_CATEGORY_TEACHER_FORM_DATA = (courseID, categoryId) => {
35
+ const form = new FormData();
36
+ form.append('aoData', JSON.stringify([
37
+ { name: 'wlkcid', value: courseID },
38
+ { name: 'kjflid', value: categoryId },
39
+ ]));
40
+ return form;
41
+ };
42
+ export const LEARN_FILE_DOWNLOAD = (fileID, courseType) => `${LEARN_PREFIX}/b/wlxt/kj/wlkc_kjxxb/${courseType}/downloadFile?sfgk=0&wjid=${fileID}`;
43
+ export const LEARN_FILE_PREVIEW = (type, fileID, courseType, firstPageOnly = false) => `${LEARN_PREFIX}/f/wlxt/kc/wj_wjb/${courseType}/beforePlay?wjid=${fileID}&mk=${getMkFromType(type)}&browser=-1&sfgk=0&pageType=${firstPageOnly ? 'first' : 'all'}`;
44
+ export const LEARN_NOTIFICATION_LIST = (courseType, expired) => `${LEARN_PREFIX}/b/wlxt/kcgg/wlkc_ggb/` +
45
+ (courseType === CourseType.STUDENT ? 'student/pageListXsby' : 'teacher/pageListby') +
46
+ (expired ? 'Ygq' : 'Wgq');
47
+ export const LEARN_NOTIFICATION_DETAIL = (courseID, notificationID, courseType) => courseType === CourseType.STUDENT
48
+ ? `${LEARN_PREFIX}/f/wlxt/kcgg/wlkc_ggb/student/beforeViewXs?wlkcid=${courseID}&id=${notificationID}`
49
+ : `${LEARN_PREFIX}/f/wlxt/kcgg/wlkc_ggb/teacher/beforeViewJs?wlkcid=${courseID}&id=${notificationID}`;
50
+ export const LEARN_NOTIFICATION_EDIT = (courseType) => `${LEARN_PREFIX}/b/wlxt/kcgg/wlkc_ggb/${courseType}/editKcgg`;
51
+ export const LEARN_HOMEWORK_LIST_NEW = `${LEARN_PREFIX}/b/wlxt/kczy/zy/student/zyListWj`;
52
+ export const LEARN_HOMEWORK_LIST_SUBMITTED = `${LEARN_PREFIX}/b/wlxt/kczy/zy/student/zyListYjwg`;
53
+ export const LEARN_HOMEWORK_LIST_GRADED = `${LEARN_PREFIX}/b/wlxt/kczy/zy/student/zyListYpg`;
54
+ export const LEARN_HOMEWORK_LIST_EXCELLENT = `${LEARN_PREFIX}/b/wlxt/kczy/zy/student/yxzylist`;
55
+ export const LEARN_HOMEWORK_LIST_SOURCE = [
56
+ {
57
+ url: LEARN_HOMEWORK_LIST_NEW,
58
+ status: {
59
+ submitted: false,
60
+ graded: false,
61
+ },
62
+ },
63
+ {
64
+ url: LEARN_HOMEWORK_LIST_SUBMITTED,
65
+ status: {
66
+ submitted: true,
67
+ graded: false,
68
+ },
69
+ },
70
+ {
71
+ url: LEARN_HOMEWORK_LIST_GRADED,
72
+ status: {
73
+ submitted: true,
74
+ graded: true,
75
+ },
76
+ },
77
+ ];
78
+ export const LEARN_HOMEWORK_PAGE = (courseID, id) => `${LEARN_PREFIX}/f/wlxt/kczy/zy/student/viewCj?wlkcid=${courseID}&xszyid=${id}`;
79
+ export const LEARN_HOMEWORK_EXCELLENT_PAGE = (courseID, id) => `${LEARN_PREFIX}/f/wlxt/kczy/zy/student/viewYxzy?wlkcid=${courseID}&xszyid=${id}`;
80
+ export const LEARN_HOMEWORK_DETAIL = `${LEARN_PREFIX}/b/wlxt/kczy/zy/student/detail`;
81
+ export const LEARN_HOMEWORK_DETAIL_FORM_DATA = (baseId) => {
82
+ const form = new FormData();
83
+ form.append('id', baseId);
84
+ return form;
85
+ };
86
+ export const LEARN_HOMEWORK_DOWNLOAD = (courseID, attachmentID) => `${LEARN_PREFIX}/b/wlxt/kczy/zy/student/downloadFile/${courseID}/${attachmentID}`;
87
+ export const LEARN_HOMEWORK_SUBMIT_PAGE = (courseID, id) => `${LEARN_PREFIX}/f/wlxt/kczy/zy/student/tijiao?wlkcid=${courseID}&xszyid=${id}`;
88
+ export const LEARN_HOMEWORK_SUBMIT = () => `${LEARN_PREFIX}/b/wlxt/kczy/zy/student/tjzy`;
89
+ export const LEARN_HOMEWORK_SUBMIT_FORM_DATA = (id, content = '', attachment, removeAttachment = false) => {
90
+ const form = new FormData();
91
+ form.append('xszyid', id);
92
+ form.append('zynr', content ?? '');
93
+ if (attachment)
94
+ form.append('fileupload', attachment.content, attachment.filename);
95
+ else
96
+ form.append('fileupload', 'undefined');
97
+ if (removeAttachment)
98
+ form.append('isDeleted', '1');
99
+ else
100
+ form.append('isDeleted', '0');
101
+ return form;
102
+ };
103
+ export const LEARN_HOMEWORK_LIST_TEACHER = `${LEARN_PREFIX}/b/wlxt/kczy/zy/teacher/pageList`;
104
+ export const LEARN_HOMEWORK_DETAIL_TEACHER = (courseID, homeworkID) => `${LEARN_PREFIX}/f/wlxt/kczy/xszy/teacher/beforePageList?zyid=${homeworkID}&wlkcid=${courseID}`;
105
+ export const LEARN_DISCUSSION_LIST = (courseID, courseType) => `${LEARN_PREFIX}/b/wlxt/bbs/bbs_tltb/${courseType}/kctlList?wlkcid=${courseID}&size=${MAX_SIZE}`;
106
+ export const LEARN_DISCUSSION_DETAIL = (courseID, boardID, discussionID, courseType, tabId = 1) => `${LEARN_PREFIX}/f/wlxt/bbs/bbs_tltb/${courseType}/viewTlById?wlkcid=${courseID}&id=${discussionID}&tabbh=${tabId}&bqid=${boardID}`;
107
+ export const LEARN_QUESTION_LIST_ANSWERED = (courseID, courseType) => `${LEARN_PREFIX}/b/wlxt/bbs/bbs_tltb/${courseType}/kcdyList?wlkcid=${courseID}&size=${MAX_SIZE}`;
108
+ export const LEARN_QUESTION_DETAIL = (courseID, questionID, courseType) => courseType === CourseType.STUDENT
109
+ ? `${LEARN_PREFIX}/f/wlxt/bbs/bbs_kcdy/student/viewDyById?wlkcid=${courseID}&id=${questionID}`
110
+ : `${LEARN_PREFIX}/f/wlxt/bbs/bbs_kcdy/teacher/beforeEditDy?wlkcid=${courseID}&id=${questionID}`;
111
+ export const LEARN_QNR_LIST_ONGOING = `${LEARN_PREFIX}/b/wlxt/kcwj/wlkc_wjb/student/pageListWks`;
112
+ export const LEARN_QNR_LIST_ENDED = `${LEARN_PREFIX}/b/wlxt/kcwj/wlkc_wjb/student/pageListYjs`;
113
+ /** Note: This page is accessible even with an invalid `qnrID` as long as you have access to the given `courseID`. */
114
+ export const LEARN_QNR_SUBMIT_PAGE = (courseID, qnrID, type) => `${LEARN_PREFIX}/f/wlxt/kcwj/wlkc_wjb/student/beforeAdd?wlkcid=${courseID}&wjid=${qnrID}&wjlx=${type}&jswj=no`;
115
+ export const LEARN_QNR_DETAIL = `${LEARN_PREFIX}/b/wlxt/kcwj/wlkc_wjb/student/getWjnr`;
116
+ export const LEARN_QNR_DETAIL_FORM = (courseID, qnrID) => {
117
+ const form = new FormData();
118
+ form.append('wlkcid', courseID);
119
+ form.append('wjid', qnrID);
120
+ return form;
121
+ };
122
+ export const WebsiteShowLanguage = {
123
+ [Language.ZH]: 'zh_CN',
124
+ [Language.EN]: 'en_US',
125
+ };
126
+ export const LEARN_WEBSITE_LANGUAGE = (lang) => `${LEARN_PREFIX}/f/wlxt/common/language?websiteShowLanguage=${WebsiteShowLanguage[lang]}`;
127
+ export const LEARN_FAVORITE_ADD = (type, id) => `${LEARN_PREFIX}/b/xt/wlkc_xsscb/student/add?ywid=${id}&ywlx=${CONTENT_TYPE_MAP.get(type)}`;
128
+ export const LEARN_FAVORITE_REMOVE = (id) => `${LEARN_PREFIX}/b/xt/wlkc_xsscb/student/delete?ywid=${id}`;
129
+ export const LEARN_FAVORITE_LIST = (type) => `${LEARN_PREFIX}/b/xt/wlkc_xsscb/student/pageList?ywlx=${type ? CONTENT_TYPE_MAP.get(type) : 'ALL'}`;
130
+ export const LEARN_FAVORITE_PIN = `${LEARN_PREFIX}/b/xt/wlkc_xsscb/student/addZd`;
131
+ export const LEARN_FAVORITE_UNPIN = `${LEARN_PREFIX}/b/xt/wlkc_xsscb/student/delZd`;
132
+ export const LEARN_FAVORITE_PIN_UNPIN_FORM_DATA = (id) => {
133
+ const form = new FormData();
134
+ form.append('ywid', id);
135
+ return form;
136
+ };
137
+ export const LEARN_COMMENT_SET = `${LEARN_PREFIX}/b/wlxt/xt/wlkc_xsbjb/add`;
138
+ export const LEARN_COMMENT_SET_FORM_DATA = (type, id, content) => {
139
+ const form = new FormData();
140
+ form.append('ywlx', CONTENT_TYPE_MAP.get(type) ?? '');
141
+ form.append('ywid', id);
142
+ form.append('bznr', content);
143
+ return form;
144
+ };
145
+ export const LEARN_COMMENT_LIST = (type) => `${LEARN_PREFIX}/b/wlxt/xt/wlkc_xsbjb/student/pageList?ywlx=${type ? CONTENT_TYPE_MAP.get(type) : 'ALL'}`;
146
+ export const LEARN_PAGE_LIST_FORM_DATA = (courseID) => {
147
+ const form = new FormData();
148
+ form.append('aoData', JSON.stringify(courseID ? [{ name: 'wlkcid', value: courseID }] : []));
149
+ return form;
150
+ };
151
+ export const LEARN_SORT_COURSES = `${LEARN_PREFIX}/b/wlxt/kc/wlkc_kcpxb/addorUpdate`;
152
+ export const REGISTRAR_TICKET_FORM_DATA = () => {
153
+ const form = new FormData();
154
+ form.append('appId', 'ALL_ZHJW');
155
+ return form;
156
+ };
157
+ export const REGISTRAR_TICKET = () => `${LEARN_PREFIX}/b/wlxt/common/auth/gnt`;
158
+ export const REGISTRAR_AUTH = (ticket) => `${REGISTRAR_PREFIX}/j_acegi_login.do?url=/&ticket=${ticket}`;
159
+ export const REGISTRAR_CALENDAR = (startDate, endDate, graduate = false, callbackName = 'unknown') => `${REGISTRAR_PREFIX}/jxmh_out.do?m=${graduate ? 'yjs' : 'bks'}_jxrl_all&p_start_date=${startDate}&p_end_date=${endDate}&jsoncallback=${callbackName}`;
160
+ //# sourceMappingURL=urls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urls.js","sourceRoot":"","sources":["../src/urls.ts"],"names":[],"mappings":"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"}
package/lib/user.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ import type { Session } from './request.ts';
2
+ import type { UserInfo, Language } from './types.ts';
3
+ import { CourseType } from './types.ts';
4
+ /** get user's name and department */
5
+ export declare function getUserInfo(s: Session, courseType?: CourseType): Promise<UserInfo>;
6
+ export declare function setLanguage(s: Session, lang: Language): Promise<void>;
7
+ //# sourceMappingURL=user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../src/user.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxC,qCAAqC;AACrC,wBAAsB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,aAAqB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAWhG;AAED,wBAAsB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAK3E"}
package/lib/user.js ADDED
@@ -0,0 +1,22 @@
1
+ // User info and website language.
2
+ import { $ } from './request.js';
3
+ import { CourseType } from './types.js';
4
+ import * as URLS from './urls.js';
5
+ /** get user's name and department */
6
+ export async function getUserInfo(s, courseType = CourseType.STUDENT) {
7
+ const content = await (await s.fetchWithToken(URLS.LEARN_HOMEPAGE(courseType))).text();
8
+ const dom = $(content);
9
+ const name = dom('a.user-log').text().trim();
10
+ const department = dom('.fl.up-img-info p:nth-child(2) label').text().trim();
11
+ return {
12
+ name,
13
+ department,
14
+ };
15
+ }
16
+ export async function setLanguage(s, lang) {
17
+ await s.fetchWithToken(URLS.LEARN_WEBSITE_LANGUAGE(lang), {
18
+ method: 'POST',
19
+ });
20
+ s.lang = lang;
21
+ }
22
+ //# sourceMappingURL=user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../src/user.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAGlC,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,CAAU,EAAE,UAAU,GAAG,UAAU,CAAC,OAAO;IAC3E,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAEvF,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IACvB,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;IAC7C,MAAM,UAAU,GAAG,GAAG,CAAC,sCAAsC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;IAE7E,OAAO;QACL,IAAI;QACJ,UAAU;KACX,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,CAAU,EAAE,IAAc;IAC1D,MAAM,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE;QACxD,MAAM,EAAE,MAAM;KACf,CAAC,CAAC;IACH,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;AAChB,CAAC"}
package/lib/utils.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ import { ContentType, HomeworkGradeLevel, QuestionnaireType, SemesterType } from './types.ts';
2
+ export declare function parseSemesterType(n: number): SemesterType;
3
+ export declare function getMkFromType(type: ContentType): string;
4
+ export declare function decodeHTML(html: string): string;
5
+ export declare function trimAndDefine(text: string | undefined | null): string | undefined;
6
+ export declare const GRADE_LEVEL_MAP: Map<number, HomeworkGradeLevel>;
7
+ export declare const JSONP_EXTRACTOR_NAME = "thu_learn_lib_jsonp_extractor";
8
+ export declare function extractJSONPResult(jsonp: string): any;
9
+ export declare function formatFileSize(size: number): string;
10
+ export declare const CONTENT_TYPE_MAP: Map<ContentType, string>;
11
+ export declare const CONTENT_TYPE_MAP_REVERSE: Map<string, ContentType>;
12
+ export declare const QNR_TYPE_MAP: Map<string, QuestionnaireType>;
13
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAc,kBAAkB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1G,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY,CAUzD;AAWD,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAEvD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAU/C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAMjF;AAED,eAAO,MAAM,eAAe,iCA0B1B,CAAC;AAEH,eAAO,MAAM,oBAAoB,kCAAkC,CAAC;AAEpE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAQrD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMnD;AAED,eAAO,MAAM,gBAAgB,0BAQ3B,CAAC;AACH,eAAO,MAAM,wBAAwB,0BAOnC,CAAC;AAEH,eAAO,MAAM,YAAY,gCAIvB,CAAC"}
package/lib/utils.js ADDED
@@ -0,0 +1,115 @@
1
+ import { decodeHTML as _decodeHTML } from 'entities';
2
+ import { ContentType, FailReason, HomeworkGradeLevel, QuestionnaireType, SemesterType } from './types.js';
3
+ export function parseSemesterType(n) {
4
+ if (n === 1) {
5
+ return SemesterType.FALL;
6
+ }
7
+ else if (n === 2) {
8
+ return SemesterType.SPRING;
9
+ }
10
+ else if (n === 3) {
11
+ return SemesterType.SUMMER;
12
+ }
13
+ else {
14
+ return SemesterType.UNKNOWN;
15
+ }
16
+ }
17
+ const CONTENT_TYPE_MK_MAP = {
18
+ [ContentType.NOTIFICATION]: 'kcgg',
19
+ [ContentType.FILE]: 'kcwj',
20
+ [ContentType.HOMEWORK]: 'kczy',
21
+ [ContentType.DISCUSSION]: '',
22
+ [ContentType.QUESTION]: '',
23
+ [ContentType.QUESTIONNAIRE]: '',
24
+ };
25
+ export function getMkFromType(type) {
26
+ return 'mk_' + (CONTENT_TYPE_MK_MAP[type] ?? 'UNKNOWN');
27
+ }
28
+ export function decodeHTML(html) {
29
+ const text = _decodeHTML(html ?? '');
30
+ // remove strange prefixes returned by web learning
31
+ return text.startsWith('\xC2\x9E\xC3\xA9\x65')
32
+ ? text.slice(5)
33
+ : text.startsWith('\x9E\xE9\x65')
34
+ ? text.slice(3)
35
+ : text.startsWith('\xE9\x65')
36
+ ? text.slice(2)
37
+ : text;
38
+ }
39
+ export function trimAndDefine(text) {
40
+ if (text === undefined || text === null) {
41
+ return undefined;
42
+ }
43
+ const trimmed = text.trim();
44
+ return trimmed === '' ? undefined : decodeHTML(trimmed);
45
+ }
46
+ export const GRADE_LEVEL_MAP = new Map([
47
+ [-100, HomeworkGradeLevel.CHECKED],
48
+ [-99, HomeworkGradeLevel.A_PLUS],
49
+ [-98, HomeworkGradeLevel.A],
50
+ [-92, HomeworkGradeLevel.A_MINUS],
51
+ [-87, HomeworkGradeLevel.B_PLUS],
52
+ [-85, HomeworkGradeLevel.DISTINCTION],
53
+ [-82, HomeworkGradeLevel.B],
54
+ [-78, HomeworkGradeLevel.B_MINUS],
55
+ [-74, HomeworkGradeLevel.C_PLUS],
56
+ [-71, HomeworkGradeLevel.C],
57
+ [-68, HomeworkGradeLevel.C_MINUS],
58
+ [-67, HomeworkGradeLevel.G],
59
+ [-66, HomeworkGradeLevel.D_PLUS],
60
+ [-64, HomeworkGradeLevel.D],
61
+ [-65, HomeworkGradeLevel.EXEMPTED_COURSE],
62
+ [-63, HomeworkGradeLevel.PASS],
63
+ [-62, HomeworkGradeLevel.EX],
64
+ [-61, HomeworkGradeLevel.EXEMPTION],
65
+ [-60, HomeworkGradeLevel.PASS],
66
+ [-59, HomeworkGradeLevel.FAILURE],
67
+ [-55, HomeworkGradeLevel.W],
68
+ [-51, HomeworkGradeLevel.I],
69
+ [-50, HomeworkGradeLevel.INCOMPLETE],
70
+ [-31, HomeworkGradeLevel.NA],
71
+ [-30, HomeworkGradeLevel.F],
72
+ ]);
73
+ export const JSONP_EXTRACTOR_NAME = 'thu_learn_lib_jsonp_extractor';
74
+ export function extractJSONPResult(jsonp) {
75
+ // check jsonp format
76
+ if (!jsonp.startsWith(JSONP_EXTRACTOR_NAME)) {
77
+ throw FailReason.INVALID_RESPONSE;
78
+ }
79
+ // evaluate the result
80
+ // oxlint-disable-next-line typescript/no-implied-eval -- JSONP from the registrar is a JS expression, not JSON
81
+ return Function(`"use strict";const ${JSONP_EXTRACTOR_NAME}=(s)=>s;return ${jsonp};`)();
82
+ }
83
+ export function formatFileSize(size) {
84
+ // this logic is extracted from `judgeSize` function from Web Learning
85
+ if (size < 1024)
86
+ return size + 'B';
87
+ if (size < 1024 * 1024)
88
+ return (size / 1024).toFixed(2) + 'K';
89
+ if (size < 1024 * 1024 * 1024)
90
+ return (size / 1024 / 1024).toFixed(2) + 'M';
91
+ return (size / 1024 / 1024 / 1024).toFixed(2) + 'G';
92
+ }
93
+ export const CONTENT_TYPE_MAP = new Map([
94
+ [ContentType.NOTIFICATION, 'KCGG'],
95
+ [ContentType.FILE, 'KCKJ'],
96
+ [ContentType.HOMEWORK, 'KCZY'],
97
+ [ContentType.DISCUSSION, 'KCTL'],
98
+ [ContentType.QUESTION, 'KCDY'],
99
+ [ContentType.QUESTIONNAIRE, 'KCWJ'],
100
+ // omitted: 课表(KCKB)
101
+ ]);
102
+ export const CONTENT_TYPE_MAP_REVERSE = new Map([
103
+ [CONTENT_TYPE_MAP.get(ContentType.NOTIFICATION), ContentType.NOTIFICATION],
104
+ [CONTENT_TYPE_MAP.get(ContentType.FILE), ContentType.FILE],
105
+ [CONTENT_TYPE_MAP.get(ContentType.HOMEWORK), ContentType.HOMEWORK],
106
+ [CONTENT_TYPE_MAP.get(ContentType.DISCUSSION), ContentType.DISCUSSION],
107
+ [CONTENT_TYPE_MAP.get(ContentType.QUESTION), ContentType.QUESTION],
108
+ [CONTENT_TYPE_MAP.get(ContentType.QUESTIONNAIRE), ContentType.QUESTIONNAIRE],
109
+ ]);
110
+ export const QNR_TYPE_MAP = new Map([
111
+ ['投票', QuestionnaireType.VOTE],
112
+ ['填表', QuestionnaireType.FORM],
113
+ ['问卷', QuestionnaireType.SURVEY],
114
+ ]);
115
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,69 @@
1
1
  {
2
2
  "name": "@robertying/thu-learn-lib",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "4.1.0",
4
+ "description": "a JavaScript library to provide a program-friendly interface to Web Learning (2018) of Tsinghua University",
5
+ "keywords": [
6
+ "learn2018",
7
+ "tsinghua"
8
+ ],
9
+ "license": "MIT",
10
+ "author": "Harry Chen <harry-chen@outlook.com> (https://harrychen.xyz)",
11
+ "contributors": [
12
+ "Rui Ying (https://github.com/robertying)"
13
+ ],
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://github.com/robertying/thu-learn-lib.git"
17
+ },
18
+ "files": [
19
+ "lib",
20
+ "src"
21
+ ],
22
+ "type": "module",
23
+ "sideEffects": false,
24
+ "main": "./lib/index.js",
25
+ "types": "./lib/index.d.ts",
26
+ "exports": {
27
+ ".": {
28
+ "types": "./lib/index.d.ts",
29
+ "default": "./lib/index.js"
30
+ }
31
+ },
32
+ "publishConfig": {
33
+ "access": "public",
34
+ "provenance": true
35
+ },
36
+ "scripts": {
37
+ "build": "rm -rf lib && tsc -p tsconfig.build.json",
38
+ "typecheck": "tsc",
39
+ "lint": "oxlint",
40
+ "format": "oxfmt",
41
+ "test": "vitest run",
42
+ "test:live": "OPENSSL_CONF=openssl.cnf vitest run --config vitest.live.config.ts",
43
+ "prepublishOnly": "pnpm build"
44
+ },
45
+ "dependencies": {
46
+ "cheerio": "1.0.0-rc.12",
47
+ "entities": "^8.1.0",
48
+ "fetch-cookie": "3.0.1",
49
+ "js-base64": "^3.9.3",
50
+ "node-fetch-native": "^1.6.7",
51
+ "sm-crypto": "^0.5.7",
52
+ "tough-cookie": "4.1.4"
53
+ },
54
+ "devDependencies": {
55
+ "@types/node": "26.6.6",
56
+ "@types/sm-crypto": "0.3.4",
57
+ "@types/tough-cookie": "4.0.5",
58
+ "dotenv": "17.4.2",
59
+ "oxfmt": "0.77.0",
60
+ "oxlint": "1.92.0",
61
+ "oxlint-tsgolint": "7.0.2006",
62
+ "typescript": "7.0.2",
63
+ "vitest": "5.1.0"
64
+ },
65
+ "engines": {
66
+ "node": ">=26"
67
+ },
68
+ "packageManager": "pnpm@12.18.0"
69
+ }