@robertying/thu-learn-lib 4.1.0 → 5.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.
- package/README.md +41 -7
- package/lib/auth.d.ts +1 -1
- package/lib/auth.d.ts.map +1 -1
- package/lib/auth.js +17 -5
- package/lib/auth.js.map +1 -1
- package/lib/calendar.d.ts +6 -4
- package/lib/calendar.d.ts.map +1 -1
- package/lib/calendar.js +21 -8
- package/lib/calendar.js.map +1 -1
- package/lib/contents.d.ts +4 -4
- package/lib/contents.d.ts.map +1 -1
- package/lib/contents.js +28 -20
- package/lib/contents.js.map +1 -1
- package/lib/courses.d.ts +5 -3
- package/lib/courses.d.ts.map +1 -1
- package/lib/courses.js +24 -12
- package/lib/courses.js.map +1 -1
- package/lib/discussions.js +2 -2
- package/lib/discussions.js.map +1 -1
- package/lib/favorites.d.ts.map +1 -1
- package/lib/favorites.js +12 -12
- package/lib/favorites.js.map +1 -1
- package/lib/files.d.ts +1 -1
- package/lib/files.d.ts.map +1 -1
- package/lib/files.js +10 -8
- package/lib/files.js.map +1 -1
- package/lib/homework.d.ts +11 -4
- package/lib/homework.d.ts.map +1 -1
- package/lib/homework.js +46 -43
- package/lib/homework.js.map +1 -1
- package/lib/index.d.ts +47 -13
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +63 -17
- package/lib/index.js.map +1 -1
- package/lib/notices.d.ts +11 -3
- package/lib/notices.d.ts.map +1 -1
- package/lib/notices.js +40 -36
- package/lib/notices.js.map +1 -1
- package/lib/questionnaires.d.ts +6 -3
- package/lib/questionnaires.d.ts.map +1 -1
- package/lib/questionnaires.js +20 -12
- package/lib/questionnaires.js.map +1 -1
- package/lib/request.d.ts +66 -10
- package/lib/request.d.ts.map +1 -1
- package/lib/request.js +234 -50
- package/lib/request.js.map +1 -1
- package/lib/types.d.ts +52 -3
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js +1 -0
- package/lib/types.js.map +1 -1
- package/lib/user.js +1 -1
- package/lib/user.js.map +1 -1
- package/lib/utils.d.ts +3 -0
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js +11 -3
- package/lib/utils.js.map +1 -1
- package/package.json +2 -2
- package/src/auth.ts +18 -5
- package/src/calendar.ts +28 -10
- package/src/contents.ts +30 -25
- package/src/courses.ts +31 -19
- package/src/discussions.ts +2 -2
- package/src/favorites.ts +22 -32
- package/src/files.ts +12 -12
- package/src/homework.ts +118 -123
- package/src/index.ts +94 -19
- package/src/notices.ts +58 -59
- package/src/questionnaires.ts +51 -37
- package/src/request.ts +260 -48
- package/src/types.ts +62 -2
- package/src/user.ts +1 -1
- package/src/utils.ts +14 -3
package/lib/favorites.js
CHANGED
|
@@ -7,7 +7,7 @@ import { CONTENT_TYPE_MAP_REVERSE, decodeHTML } from './utils.js';
|
|
|
7
7
|
* Add an item to favorites. (收藏)
|
|
8
8
|
*/
|
|
9
9
|
export async function addToFavorites(s, type, id) {
|
|
10
|
-
const json = await
|
|
10
|
+
const json = await s.fetchJsonWithToken(URLS.LEARN_FAVORITE_ADD(type, id));
|
|
11
11
|
if (json.result !== 'success' || !json.msg?.endsWith?.('成功')) {
|
|
12
12
|
return Promise.reject({
|
|
13
13
|
reason: FailReason.OPERATION_FAILED,
|
|
@@ -19,7 +19,7 @@ export async function addToFavorites(s, type, id) {
|
|
|
19
19
|
* Remove an item from favorites. (取消收藏)
|
|
20
20
|
*/
|
|
21
21
|
export async function removeFromFavorites(s, id) {
|
|
22
|
-
const json = await
|
|
22
|
+
const json = await s.fetchJsonWithToken(URLS.LEARN_FAVORITE_REMOVE(id));
|
|
23
23
|
if (json.result !== 'success' || !json.msg?.endsWith?.('成功')) {
|
|
24
24
|
return Promise.reject({
|
|
25
25
|
reason: FailReason.OPERATION_FAILED,
|
|
@@ -32,10 +32,10 @@ export async function removeFromFavorites(s, id) {
|
|
|
32
32
|
* If `courseID` or `type` is specified, only return favorites of that course or type.
|
|
33
33
|
*/
|
|
34
34
|
export async function getFavorites(s, courseID, type) {
|
|
35
|
-
const json = await
|
|
35
|
+
const json = await s.fetchJsonWithToken(URLS.LEARN_FAVORITE_LIST(type), {
|
|
36
36
|
method: 'POST',
|
|
37
37
|
body: URLS.LEARN_PAGE_LIST_FORM_DATA(courseID),
|
|
38
|
-
})
|
|
38
|
+
});
|
|
39
39
|
if (json.result !== 'success') {
|
|
40
40
|
return Promise.reject({
|
|
41
41
|
reason: FailReason.INVALID_RESPONSE,
|
|
@@ -70,10 +70,10 @@ export async function getFavorites(s, courseID, type) {
|
|
|
70
70
|
* Pin a favorite item. (置顶)
|
|
71
71
|
*/
|
|
72
72
|
export async function pinFavoriteItem(s, id) {
|
|
73
|
-
const json = await
|
|
73
|
+
const json = await s.fetchJsonWithToken(URLS.LEARN_FAVORITE_PIN, {
|
|
74
74
|
method: 'POST',
|
|
75
75
|
body: URLS.LEARN_FAVORITE_PIN_UNPIN_FORM_DATA(id),
|
|
76
|
-
})
|
|
76
|
+
});
|
|
77
77
|
if (json.result !== 'success') {
|
|
78
78
|
return Promise.reject({
|
|
79
79
|
reason: FailReason.OPERATION_FAILED,
|
|
@@ -85,10 +85,10 @@ export async function pinFavoriteItem(s, id) {
|
|
|
85
85
|
* Unpin a favorite item. (取消置顶)
|
|
86
86
|
*/
|
|
87
87
|
export async function unpinFavoriteItem(s, id) {
|
|
88
|
-
const json = await
|
|
88
|
+
const json = await s.fetchJsonWithToken(URLS.LEARN_FAVORITE_UNPIN, {
|
|
89
89
|
method: 'POST',
|
|
90
90
|
body: URLS.LEARN_FAVORITE_PIN_UNPIN_FORM_DATA(id),
|
|
91
|
-
})
|
|
91
|
+
});
|
|
92
92
|
if (json.result !== 'success') {
|
|
93
93
|
return Promise.reject({
|
|
94
94
|
reason: FailReason.OPERATION_FAILED,
|
|
@@ -101,10 +101,10 @@ export async function unpinFavoriteItem(s, id) {
|
|
|
101
101
|
* Set an empty string to remove the comment.
|
|
102
102
|
*/
|
|
103
103
|
export async function setComment(s, type, id, content) {
|
|
104
|
-
const json = await
|
|
104
|
+
const json = await s.fetchJsonWithToken(URLS.LEARN_COMMENT_SET, {
|
|
105
105
|
method: 'POST',
|
|
106
106
|
body: URLS.LEARN_COMMENT_SET_FORM_DATA(type, id, content),
|
|
107
|
-
})
|
|
107
|
+
});
|
|
108
108
|
if (json.result !== 'success' || !json.msg?.endsWith?.('成功')) {
|
|
109
109
|
return Promise.reject({
|
|
110
110
|
reason: FailReason.OPERATION_FAILED,
|
|
@@ -117,10 +117,10 @@ export async function setComment(s, type, id, content) {
|
|
|
117
117
|
* If `courseID` or `type` is specified, only return favorites of that course or type.
|
|
118
118
|
*/
|
|
119
119
|
export async function getComments(s, courseID, type) {
|
|
120
|
-
const json = await
|
|
120
|
+
const json = await s.fetchJsonWithToken(URLS.LEARN_COMMENT_LIST(type), {
|
|
121
121
|
method: 'POST',
|
|
122
122
|
body: URLS.LEARN_PAGE_LIST_FORM_DATA(courseID),
|
|
123
|
-
})
|
|
123
|
+
});
|
|
124
124
|
if (json.result !== 'success') {
|
|
125
125
|
return Promise.reject({
|
|
126
126
|
reason: FailReason.INVALID_RESPONSE,
|
package/lib/favorites.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"favorites.js","sourceRoot":"","sources":["../src/favorites.ts"],"names":[],"mappings":"AAAA,oCAAoC;AAGpC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAElE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,CAAU,EAAE,IAAiB,EAAE,EAAU;IAC5E,MAAM,IAAI,GAAG,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"favorites.js","sourceRoot":"","sources":["../src/favorites.ts"],"names":[],"mappings":"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"}
|
package/lib/files.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Session } from './request.ts';
|
|
2
2
|
import type { File, FileCategory } from './types.ts';
|
|
3
3
|
import { CourseType } from './types.ts';
|
|
4
|
-
/** Get all files (课程文件) of the specified course. */
|
|
4
|
+
/** Get all files (课程文件) of the specified course; `category` is left out if the categories can't be fetched. */
|
|
5
5
|
export declare function getFileList(s: Session, courseID: string, courseType?: CourseType): Promise<File[]>;
|
|
6
6
|
/** Get file categories of the specified course. */
|
|
7
7
|
export declare function getFileCategoryList(s: Session, courseID: string, courseType?: CourseType): Promise<FileCategory[]>;
|
package/lib/files.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAe,UAAU,EAAc,MAAM,YAAY,CAAC;AAIjE
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAe,UAAU,EAAc,MAAM,YAAY,CAAC;AAIjE,+GAA+G;AAC/G,wBAAsB,WAAW,CAC/B,CAAC,EAAE,OAAO,EACV,QAAQ,EAAE,MAAM,EAChB,UAAU,GAAE,UAA+B,GAC1C,OAAO,CAAC,IAAI,EAAE,CAAC,CAsDjB;AAED,mDAAmD;AACnD,wBAAsB,mBAAmB,CACvC,CAAC,EAAE,OAAO,EACV,QAAQ,EAAE,MAAM,EAChB,UAAU,GAAE,UAA+B,GAC1C,OAAO,CAAC,YAAY,EAAE,CAAC,CAmBzB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,CAAC,EAAE,OAAO,EACV,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,UAAU,GAAE,UAA+B,GAC1C,OAAO,CAAC,IAAI,EAAE,CAAC,CA4FjB"}
|
package/lib/files.js
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
import { ContentType, CourseType, FailReason } from './types.js';
|
|
3
3
|
import * as URLS from './urls.js';
|
|
4
4
|
import { decodeHTML, formatFileSize } from './utils.js';
|
|
5
|
-
/** Get all files (课程文件) of the specified course. */
|
|
5
|
+
/** Get all files (课程文件) of the specified course; `category` is left out if the categories can't be fetched. */
|
|
6
6
|
export async function getFileList(s, courseID, courseType = CourseType.STUDENT) {
|
|
7
|
-
const json = await
|
|
7
|
+
const json = await s.fetchJsonWithToken(URLS.LEARN_FILE_LIST(courseID, courseType));
|
|
8
8
|
if (json.result !== 'success') {
|
|
9
9
|
return Promise.reject({
|
|
10
10
|
reason: FailReason.INVALID_RESPONSE,
|
|
@@ -20,7 +20,9 @@ export async function getFileList(s, courseID, courseType = CourseType.STUDENT)
|
|
|
20
20
|
// student
|
|
21
21
|
result = json.object;
|
|
22
22
|
}
|
|
23
|
-
|
|
23
|
+
// categories only fill `category`; don't fail the whole list when they can't be fetched
|
|
24
|
+
const categoryList = await getFileCategoryList(s, courseID, courseType).catch(() => []);
|
|
25
|
+
const categories = new Map(categoryList.map((c) => [c.id, c]));
|
|
24
26
|
return result.map((f) => {
|
|
25
27
|
const title = decodeHTML(f.bt);
|
|
26
28
|
const fileId = f.wjid;
|
|
@@ -56,7 +58,7 @@ export async function getFileList(s, courseID, courseType = CourseType.STUDENT)
|
|
|
56
58
|
}
|
|
57
59
|
/** Get file categories of the specified course. */
|
|
58
60
|
export async function getFileCategoryList(s, courseID, courseType = CourseType.STUDENT) {
|
|
59
|
-
const json = await
|
|
61
|
+
const json = await s.fetchJsonWithToken(URLS.LEARN_FILE_CATEGORY_LIST(courseID, courseType));
|
|
60
62
|
if (json.result !== 'success') {
|
|
61
63
|
return Promise.reject({
|
|
62
64
|
reason: FailReason.INVALID_RESPONSE,
|
|
@@ -76,7 +78,7 @@ export async function getFileCategoryList(s, courseID, courseType = CourseType.S
|
|
|
76
78
|
*/
|
|
77
79
|
export async function getFileListByCategory(s, courseID, categoryId, courseType = CourseType.STUDENT) {
|
|
78
80
|
if (courseType === CourseType.STUDENT) {
|
|
79
|
-
const json = await
|
|
81
|
+
const json = await s.fetchJsonWithToken(URLS.LEARN_FILE_LIST_BY_CATEGORY_STUDENT(courseID, categoryId));
|
|
80
82
|
if (json.result !== 'success') {
|
|
81
83
|
return Promise.reject({
|
|
82
84
|
reason: FailReason.INVALID_RESPONSE,
|
|
@@ -120,17 +122,17 @@ export async function getFileListByCategory(s, courseID, categoryId, courseType
|
|
|
120
122
|
});
|
|
121
123
|
}
|
|
122
124
|
else {
|
|
123
|
-
const json = await
|
|
125
|
+
const json = await s.fetchJsonWithToken(URLS.LEARN_FILE_LIST_BY_CATEGORY_TEACHER, {
|
|
124
126
|
method: 'POST',
|
|
125
127
|
body: URLS.LEARN_FILE_LIST_BY_CATEGORY_TEACHER_FORM_DATA(courseID, categoryId),
|
|
126
|
-
})
|
|
128
|
+
});
|
|
127
129
|
if (json.result !== 'success') {
|
|
128
130
|
return Promise.reject({
|
|
129
131
|
reason: FailReason.INVALID_RESPONSE,
|
|
130
132
|
extra: json,
|
|
131
133
|
});
|
|
132
134
|
}
|
|
133
|
-
const result = (json.object
|
|
135
|
+
const result = (json.object?.aaData ?? []);
|
|
134
136
|
return result.map((f) => {
|
|
135
137
|
const title = decodeHTML(f.bt);
|
|
136
138
|
const fileId = f.wjid;
|
package/lib/files.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAI3C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAExD
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"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"}
|
package/lib/homework.d.ts
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
import type { Session } from './request.ts';
|
|
2
|
-
import type { Homework, HomeworkTA, IHomeworkSubmitAttachment } from './types.ts';
|
|
2
|
+
import type { Homework, HomeworkListOptions, HomeworkTA, IExcellentHomework, IHomework, IHomeworkDetail, IHomeworkSubmitAttachment } from './types.ts';
|
|
3
3
|
import { CourseType } from './types.ts';
|
|
4
|
-
/**
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Get all homeworks (课程作业) of the specified course: 3 status lists and the excellent homework list.
|
|
6
|
+
* Details (page + description) only for the homework `options.details` selects.
|
|
7
|
+
*/
|
|
8
|
+
export declare function getHomeworkList(s: Session, courseID: string, courseType?: CourseType.STUDENT, options?: HomeworkListOptions): Promise<Homework[]>;
|
|
7
9
|
export declare function getHomeworkList(s: Session, courseID: string, courseType: CourseType.TEACHER): Promise<HomeworkTA[]>;
|
|
10
|
+
/**
|
|
11
|
+
* Get the detail of one homework or excellent homework: its page (answer, submitted content, attachments) and the
|
|
12
|
+
* description JSON (which wins for `description`). 2 requests.
|
|
13
|
+
*/
|
|
14
|
+
export declare function getHomeworkDetail(s: Session, homework: Pick<IHomework | IExcellentHomework, 'url' | 'baseId'>): Promise<IHomeworkDetail>;
|
|
8
15
|
export declare function submitHomework(s: Session, id: string, content?: string, attachment?: IHomeworkSubmitAttachment, removeAttachment?: boolean): Promise<void>;
|
|
9
16
|
//# sourceMappingURL=homework.d.ts.map
|
package/lib/homework.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"homework.d.ts","sourceRoot":"","sources":["../src/homework.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAGV,QAAQ,EACR,UAAU,
|
|
1
|
+
{"version":3,"file":"homework.d.ts","sourceRoot":"","sources":["../src/homework.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAGV,QAAQ,EACR,mBAAmB,EACnB,UAAU,EACV,kBAAkB,EAClB,SAAS,EACT,eAAe,EAEf,yBAAyB,EAE1B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAe,UAAU,EAAc,MAAM,YAAY,CAAC;AAIjE;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,CAAC,EAAE,OAAO,EACV,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,UAAU,CAAC,OAAO,EAC/B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;AAEvB,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;AAoKrH;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,CAAC,EAAE,OAAO,EACV,QAAQ,EAAE,IAAI,CAAC,SAAS,GAAG,kBAAkB,EAAE,KAAK,GAAG,QAAQ,CAAC,GAC/D,OAAO,CAAC,eAAe,CAAC,CAM1B;AA0CD,wBAAsB,cAAc,CAClC,CAAC,EAAE,OAAO,EACV,EAAE,EAAE,MAAM,EACV,OAAO,SAAK,EACZ,UAAU,CAAC,EAAE,yBAAyB,EACtC,gBAAgB,UAAQ,GACvB,OAAO,CAAC,IAAI,CAAC,CAaf"}
|
package/lib/homework.js
CHANGED
|
@@ -3,13 +3,13 @@ import { Base64 } from 'js-base64';
|
|
|
3
3
|
import { $, YES } from './request.js';
|
|
4
4
|
import { ContentType, CourseType, FailReason } from './types.js';
|
|
5
5
|
import * as URLS from './urls.js';
|
|
6
|
-
import { GRADE_LEVEL_MAP, decodeHTML, trimAndDefine } from './utils.js';
|
|
7
|
-
export async function getHomeworkList(s, courseID, courseType = CourseType.STUDENT) {
|
|
6
|
+
import { GRADE_LEVEL_MAP, decodeHTML, isSelected, trimAndDefine } from './utils.js';
|
|
7
|
+
export async function getHomeworkList(s, courseID, courseType = CourseType.STUDENT, options = {}) {
|
|
8
8
|
if (courseType === CourseType.TEACHER) {
|
|
9
|
-
const json = await
|
|
9
|
+
const json = await s.fetchJsonWithToken(URLS.LEARN_HOMEWORK_LIST_TEACHER, {
|
|
10
10
|
method: 'POST',
|
|
11
11
|
body: URLS.LEARN_PAGE_LIST_FORM_DATA(courseID),
|
|
12
|
-
})
|
|
12
|
+
});
|
|
13
13
|
if (json.result !== 'success') {
|
|
14
14
|
return Promise.reject({
|
|
15
15
|
reason: FailReason.INVALID_RESPONSE,
|
|
@@ -36,14 +36,22 @@ export async function getHomeworkList(s, courseID, courseType = CourseType.STUDE
|
|
|
36
36
|
}));
|
|
37
37
|
}
|
|
38
38
|
else {
|
|
39
|
-
|
|
39
|
+
const [lists, excellentHomeworkListByHomework] = await Promise.all([
|
|
40
|
+
Promise.all(URLS.LEARN_HOMEWORK_LIST_SOURCE.map((source) => getHomeworkListAtUrl(s, courseID, source.url, source.status))),
|
|
41
|
+
// Don't block the whole process if excellent homework list cannot be fetched
|
|
42
|
+
getExcellentHomeworkListByHomework(s, courseID).catch(() => ({})),
|
|
43
|
+
]);
|
|
44
|
+
return Promise.all(lists.flat().map(async (h) => {
|
|
45
|
+
const homework = { ...h, excellentHomeworkList: excellentHomeworkListByHomework[h.baseId] };
|
|
46
|
+
return isSelected(options.details, homework) ? { ...homework, ...(await getHomeworkDetail(s, h)) } : homework;
|
|
47
|
+
}));
|
|
40
48
|
}
|
|
41
49
|
}
|
|
42
50
|
async function getHomeworkListAtUrl(s, courseID, url, status) {
|
|
43
|
-
const json = await
|
|
51
|
+
const json = await s.fetchJsonWithToken(url, {
|
|
44
52
|
method: 'POST',
|
|
45
53
|
body: URLS.LEARN_PAGE_LIST_FORM_DATA(courseID),
|
|
46
|
-
})
|
|
54
|
+
});
|
|
47
55
|
if (json.result !== 'success') {
|
|
48
56
|
return Promise.reject({
|
|
49
57
|
reason: FailReason.INVALID_RESPONSE,
|
|
@@ -51,15 +59,7 @@ async function getHomeworkListAtUrl(s, courseID, url, status) {
|
|
|
51
59
|
});
|
|
52
60
|
}
|
|
53
61
|
const result = (json.object?.aaData ?? []);
|
|
54
|
-
|
|
55
|
-
try {
|
|
56
|
-
excellentHomeworkListByHomework = await getExcellentHomeworkListByHomework(s, courseID);
|
|
57
|
-
}
|
|
58
|
-
catch (e) {
|
|
59
|
-
// Don't block the whole process if excellent homework list cannot be fetched
|
|
60
|
-
}
|
|
61
|
-
return Promise.all(result
|
|
62
|
-
.map((h) => ({
|
|
62
|
+
return result.map((h) => ({
|
|
63
63
|
id: h.xszyid,
|
|
64
64
|
studentHomeworkId: h.xszyid,
|
|
65
65
|
baseId: h.zyid,
|
|
@@ -80,20 +80,14 @@ async function getHomeworkListAtUrl(s, courseID, url, status) {
|
|
|
80
80
|
isFavorite: h.sfsc === YES,
|
|
81
81
|
favoriteTime: h.scsj === null || h.sfsc !== YES ? undefined : h.scsj,
|
|
82
82
|
comment: h.bznr ?? undefined,
|
|
83
|
-
excellentHomeworkList: excellentHomeworkListByHomework[h.zyid],
|
|
84
83
|
...status,
|
|
85
|
-
}))
|
|
86
|
-
.map(async (h) => ({
|
|
87
|
-
...h,
|
|
88
|
-
...(await parseHomeworkAtUrl(s, h.url)),
|
|
89
|
-
...(await getHomeworkDetail(s, h.baseId)),
|
|
90
|
-
})));
|
|
84
|
+
}));
|
|
91
85
|
}
|
|
92
86
|
async function getExcellentHomeworkListByHomework(s, courseID) {
|
|
93
|
-
const json = await
|
|
87
|
+
const json = await s.fetchJsonWithToken(URLS.LEARN_HOMEWORK_LIST_EXCELLENT, {
|
|
94
88
|
method: 'POST',
|
|
95
89
|
body: URLS.LEARN_PAGE_LIST_FORM_DATA(courseID),
|
|
96
|
-
})
|
|
90
|
+
});
|
|
97
91
|
if (json.result !== 'success') {
|
|
98
92
|
return Promise.reject({
|
|
99
93
|
reason: FailReason.INVALID_RESPONSE,
|
|
@@ -101,7 +95,7 @@ async function getExcellentHomeworkListByHomework(s, courseID) {
|
|
|
101
95
|
});
|
|
102
96
|
}
|
|
103
97
|
const result = (json.object?.aaData ?? []);
|
|
104
|
-
return
|
|
98
|
+
return result
|
|
105
99
|
.map((h) => ({
|
|
106
100
|
id: h.xszyid,
|
|
107
101
|
baseId: h.zyid,
|
|
@@ -114,11 +108,7 @@ async function getExcellentHomeworkListByHomework(s, courseID) {
|
|
|
114
108
|
anonymous: h.sfzm === YES,
|
|
115
109
|
},
|
|
116
110
|
}))
|
|
117
|
-
.
|
|
118
|
-
...h,
|
|
119
|
-
...(await parseHomeworkAtUrl(s, h.url)),
|
|
120
|
-
...(await getHomeworkDetail(s, h.baseId)),
|
|
121
|
-
})))).reduce((acc, cur) => {
|
|
111
|
+
.reduce((acc, cur) => {
|
|
122
112
|
if (!acc[cur.baseId]) {
|
|
123
113
|
acc[cur.baseId] = [];
|
|
124
114
|
}
|
|
@@ -127,8 +117,7 @@ async function getExcellentHomeworkListByHomework(s, courseID) {
|
|
|
127
117
|
}, {});
|
|
128
118
|
}
|
|
129
119
|
async function parseHomeworkAtUrl(s, url) {
|
|
130
|
-
const
|
|
131
|
-
const result = $(await response.text());
|
|
120
|
+
const result = $(await s.fetchTextWithToken(url));
|
|
132
121
|
const fileDivs = result('div.list.fujian.clearfix');
|
|
133
122
|
return {
|
|
134
123
|
description: trimAndDefine(result('div.list.calendar.clearfix > div.fl.right > div.c55').slice(0, 1).html()),
|
|
@@ -140,11 +129,22 @@ async function parseHomeworkAtUrl(s, url) {
|
|
|
140
129
|
gradeAttachment: parseHomeworkFile(s, fileDivs[3]),
|
|
141
130
|
};
|
|
142
131
|
}
|
|
143
|
-
|
|
144
|
-
|
|
132
|
+
/**
|
|
133
|
+
* Get the detail of one homework or excellent homework: its page (answer, submitted content, attachments) and the
|
|
134
|
+
* description JSON (which wins for `description`). 2 requests.
|
|
135
|
+
*/
|
|
136
|
+
export async function getHomeworkDetail(s, homework) {
|
|
137
|
+
const [page, description] = await Promise.all([
|
|
138
|
+
parseHomeworkAtUrl(s, homework.url),
|
|
139
|
+
getHomeworkDescription(s, homework.baseId),
|
|
140
|
+
]);
|
|
141
|
+
return { ...page, ...description };
|
|
142
|
+
}
|
|
143
|
+
async function getHomeworkDescription(s, baseId) {
|
|
144
|
+
const json = await s.fetchJsonWithToken(URLS.LEARN_HOMEWORK_DETAIL, {
|
|
145
145
|
method: 'POST',
|
|
146
146
|
body: URLS.LEARN_HOMEWORK_DETAIL_FORM_DATA(baseId),
|
|
147
|
-
})
|
|
147
|
+
});
|
|
148
148
|
if (json.result !== 'success') {
|
|
149
149
|
throw {
|
|
150
150
|
reason: FailReason.INVALID_RESPONSE,
|
|
@@ -157,18 +157,19 @@ async function getHomeworkDetail(s, baseId) {
|
|
|
157
157
|
}
|
|
158
158
|
function parseHomeworkFile(s, fileDiv) {
|
|
159
159
|
const fileNode = $(fileDiv)('.ftitle').children('a')[0] ?? $(fileDiv)('.fl').children('a')[0];
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
const
|
|
160
|
+
const href = fileNode?.attribs.href;
|
|
161
|
+
if (fileNode !== undefined && href) {
|
|
162
|
+
const size = trimAndDefine($(fileDiv)('.fl > span[class^="color"]').first().text()) ?? '';
|
|
163
|
+
const params = new URLSearchParams(href.split('?').slice(-1)[0]);
|
|
163
164
|
const attachmentId = params.get('fileId');
|
|
164
165
|
// so dirty here...
|
|
165
|
-
let downloadUrl = URLS.LEARN_PREFIX +
|
|
166
|
+
let downloadUrl = URLS.LEARN_PREFIX + href;
|
|
166
167
|
if (params.has('downloadUrl')) {
|
|
167
168
|
downloadUrl = URLS.LEARN_PREFIX + params.get('downloadUrl');
|
|
168
169
|
}
|
|
169
170
|
return {
|
|
170
171
|
id: attachmentId,
|
|
171
|
-
name: fileNode.children[0]
|
|
172
|
+
name: fileNode.children[0]?.data ?? '',
|
|
172
173
|
downloadUrl,
|
|
173
174
|
previewUrl: URLS.LEARN_FILE_PREVIEW(ContentType.HOMEWORK, attachmentId, CourseType.STUDENT, s.previewFirstPage),
|
|
174
175
|
size,
|
|
@@ -179,10 +180,12 @@ function parseHomeworkFile(s, fileDiv) {
|
|
|
179
180
|
}
|
|
180
181
|
}
|
|
181
182
|
export async function submitHomework(s, id, content = '', attachment, removeAttachment = false) {
|
|
182
|
-
const json = await
|
|
183
|
+
const json = await s.fetchJsonWithToken(URLS.LEARN_HOMEWORK_SUBMIT(), {
|
|
183
184
|
method: 'POST',
|
|
184
185
|
body: URLS.LEARN_HOMEWORK_SUBMIT_FORM_DATA(id, content, attachment, removeAttachment),
|
|
185
|
-
|
|
186
|
+
// the response only starts after the whole upload, which can take longer than `requestTimeout`
|
|
187
|
+
timeout: attachment ? 0 : undefined,
|
|
188
|
+
});
|
|
186
189
|
if (json.result !== 'success') {
|
|
187
190
|
return Promise.reject({
|
|
188
191
|
reason: FailReason.OPERATION_FAILED,
|
package/lib/homework.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"homework.js","sourceRoot":"","sources":["../src/homework.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAG/D,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGnC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"homework.js","sourceRoot":"","sources":["../src/homework.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CalendarOptions, CalendarResult, CommentItem, CourseInfo, Discussion, FavoriteItem, File, FileCategory, HelperConfig, Homework, HomeworkTA, IHomeworkSubmitAttachment, Language, Notification, Question, Questionnaire, SemesterInfo, UserInfo, ContentType } from './types.ts';
|
|
1
|
+
import type { AllContentsOptions, AllContentsResult, CalendarOptions, CalendarResult, CourseListOptions, ExcellentHomework, HomeworkListOptions, IHomeworkDetail, NotificationListOptions, RemoteFile, CommentItem, CourseInfo, Discussion, FavoriteItem, File, FileCategory, HelperConfig, Homework, HomeworkTA, IHomeworkSubmitAttachment, Language, Notification, Question, Questionnaire, QuestionnaireDetail, QuestionnaireListOptions, SemesterInfo, UserInfo, ContentType } from './types.ts';
|
|
2
2
|
import { CourseType } from './types.ts';
|
|
3
3
|
export { addCSRFTokenToUrl } from './request.ts';
|
|
4
4
|
export * from './types.ts';
|
|
@@ -19,8 +19,18 @@ export declare class Learn2018Helper {
|
|
|
19
19
|
* be sure to clear id.tsinghua.edu.cn cookies before calling this function
|
|
20
20
|
*/
|
|
21
21
|
getRoamingTicket(username: string, password: string, fingerPrint: string, fingerGenPrint?: string, fingerGenPrint3?: string): Promise<string>;
|
|
22
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* Login is necessary if you do not provide a `CredentialProvider`.
|
|
24
|
+
* Without credentials it uses the provider, and concurrent calls share one SSO login. Logins never overlap: one with
|
|
25
|
+
* credentials waits for a login in progress, and requests that find the session expired meanwhile wait for it.
|
|
26
|
+
*/
|
|
23
27
|
login(username?: string, password?: string, fingerPrint?: string, fingerGenPrint?: string, fingerGenPrint3?: string): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Make sure the session is usable without a full SSO login when possible: with a CSRF token (from an earlier login
|
|
30
|
+
* or `setCSRFToken`), make one cheap request and log in again only if the session has expired; without one, log in.
|
|
31
|
+
* Use it when resuming an app instead of `login()`.
|
|
32
|
+
*/
|
|
33
|
+
ensureSession(): Promise<void>;
|
|
24
34
|
/** logout (to make everyone happy) */
|
|
25
35
|
logout(): Promise<void>;
|
|
26
36
|
/** get user's name and department */
|
|
@@ -28,20 +38,33 @@ export declare class Learn2018Helper {
|
|
|
28
38
|
/**
|
|
29
39
|
* Get calendar items during the specified period (in yyyymmdd format, both inclusive).
|
|
30
40
|
* Ranges longer than 28 days are fetched in windows and merged; windows that fail even after a retry are listed in
|
|
31
|
-
* `failedRanges`. Rejects only when every window fails (usually with `FailReason.INVALID_RESPONSE`)
|
|
41
|
+
* `failedRanges`. Rejects only when every window fails (usually with `FailReason.INVALID_RESPONSE`), or with a
|
|
42
|
+
* `RangeError` for a date that is not a valid yyyymmdd.
|
|
32
43
|
*/
|
|
33
44
|
getCalendar(startDate: string, endDate: string, options?: CalendarOptions): Promise<CalendarResult>;
|
|
34
45
|
getSemesterIdList(): Promise<string[]>;
|
|
35
46
|
getCurrentSemester(): Promise<SemesterInfo>;
|
|
36
|
-
/**
|
|
37
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Get all courses in the specified semester.
|
|
49
|
+
* `timeAndLocation` is only fetched (one request per course) with `options.timeAndLocation`.
|
|
50
|
+
*/
|
|
51
|
+
getCourseList(semesterID: string, courseType?: CourseType, lang?: Language, options?: CourseListOptions): Promise<CourseInfo[]>;
|
|
52
|
+
/** Get the time and location of one course. */
|
|
53
|
+
getCourseTimeAndLocation(courseID: string): Promise<string[]>;
|
|
38
54
|
/**
|
|
39
55
|
* Get certain type of content of all specified courses.
|
|
40
|
-
* It
|
|
56
|
+
* It wraps around the `getXXX` list functions; a course that fails is reported in `errors` instead of failing
|
|
57
|
+
* the rest. `options.details` is passed on as homework `details` or notification `attachments`.
|
|
58
|
+
*/
|
|
59
|
+
getAllContents<T extends ContentType>(courseIDs: string[], type: T, options?: AllContentsOptions<T>): Promise<AllContentsResult<T>>;
|
|
60
|
+
/**
|
|
61
|
+
* Get all notifications (课程公告) of the specified course.
|
|
62
|
+
* Attachments are only fetched (one request per notice) for the notices `options.attachments` selects;
|
|
63
|
+
* use `getNotificationAttachment` for the others.
|
|
41
64
|
*/
|
|
42
|
-
|
|
43
|
-
/** Get
|
|
44
|
-
|
|
65
|
+
getNotificationList(courseID: string, courseType?: CourseType, options?: NotificationListOptions): Promise<Notification[]>;
|
|
66
|
+
/** Get the attachment of a notice (one request), `undefined` if it has none. */
|
|
67
|
+
getNotificationAttachment(notification: Pick<Notification, 'url' | 'attachmentName'>, courseType?: CourseType): Promise<RemoteFile | undefined>;
|
|
45
68
|
/** Get all files (课程文件) of the specified course. */
|
|
46
69
|
getFileList(courseID: string, courseType?: CourseType): Promise<File[]>;
|
|
47
70
|
/** Get file categories of the specified course. */
|
|
@@ -51,10 +74,17 @@ export declare class Learn2018Helper {
|
|
|
51
74
|
* Note: this cannot get correct `visitCount` and `downloadCount` for student
|
|
52
75
|
*/
|
|
53
76
|
getFileListByCategory(courseID: string, categoryId: string, courseType?: CourseType): Promise<File[]>;
|
|
54
|
-
/**
|
|
55
|
-
|
|
56
|
-
|
|
77
|
+
/**
|
|
78
|
+
* Get all homeworks (课程作业) of the specified course, with the excellent homework list (without details).
|
|
79
|
+
* Details (page + description, two requests per homework) are only fetched for the homework `options.details`
|
|
80
|
+
* selects; use `getHomeworkDetail` for the others.
|
|
81
|
+
*/
|
|
82
|
+
getHomeworkList(courseID: string, courseType?: CourseType.STUDENT, options?: HomeworkListOptions): Promise<Homework[]>;
|
|
57
83
|
getHomeworkList(courseID: string, courseType: CourseType.TEACHER): Promise<HomeworkTA[]>;
|
|
84
|
+
/** Get the detail (page content, attachments and description) of one homework. */
|
|
85
|
+
getHomeworkDetail(item: Pick<Homework, 'url' | 'baseId'>): Promise<IHomeworkDetail>;
|
|
86
|
+
/** Get the detail (page content, attachments and description) of one excellent homework. */
|
|
87
|
+
getExcellentHomeworkDetail(item: Pick<ExcellentHomework, 'url' | 'baseId'>): Promise<IHomeworkDetail>;
|
|
58
88
|
/** Get all discussions (课程讨论) of the specified course. */
|
|
59
89
|
getDiscussionList(courseID: string, courseType?: CourseType): Promise<Discussion[]>;
|
|
60
90
|
/**
|
|
@@ -64,8 +94,12 @@ export declare class Learn2018Helper {
|
|
|
64
94
|
getAnsweredQuestionList(courseID: string, courseType?: CourseType): Promise<Question[]>;
|
|
65
95
|
/**
|
|
66
96
|
* Get all questionnaires (课程问卷/QNR) of the specified course.
|
|
97
|
+
* Questions (`detail`, one request per questionnaire) for the questionnaires `options.details` selects, by default
|
|
98
|
+
* all; use `getQuestionnaireDetail` for the others.
|
|
67
99
|
*/
|
|
68
|
-
getQuestionnaireList(courseID: string): Promise<Questionnaire[]>;
|
|
100
|
+
getQuestionnaireList(courseID: string, options?: QuestionnaireListOptions): Promise<Questionnaire[]>;
|
|
101
|
+
/** Get the questions of one questionnaire (one request). */
|
|
102
|
+
getQuestionnaireDetail(courseID: string, questionnaireID: string): Promise<QuestionnaireDetail[]>;
|
|
69
103
|
/**
|
|
70
104
|
* Add an item to favorites. (收藏)
|
|
71
105
|
*/
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,WAAW,EACX,UAAU,EACV,UAAU,EACV,YAAY,EACZ,IAAI,EACJ,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,yBAAyB,EACzB,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|