reddy-api-srm 1.0.8 → 1.0.10
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/dist/src/auth/terminateSessions.js +2 -2
- package/dist/src/auth/validatePassword.js +73 -10
- package/dist/src/auth/validateUser.js +35 -8
- package/dist/src/fetch/fetchAttendance.js +4 -8
- package/dist/src/fetch/fetchCalender.js +4 -8
- package/dist/src/fetch/fetchCourseDetails.js +4 -8
- package/dist/src/fetch/fetchDayOrder.js +4 -8
- package/dist/src/fetch/fetchMarks.js +4 -8
- package/dist/src/fetch/fetchTimetable.js +4 -8
- package/dist/src/fetch/fetchUserInfo.js +7 -10
- package/dist/src/index.js +3 -3
- package/dist/utils/dynamicUrl.js +8 -3
- package/package.json +1 -1
|
@@ -62,7 +62,7 @@ async function terminateSessions({ flowId, identifier, digest, csrfToken }) {
|
|
|
62
62
|
? { "x-zcsrf-token": `iamcsrcoo=${csrfToken}` }
|
|
63
63
|
: {}),
|
|
64
64
|
Referer:
|
|
65
|
-
"https://academia.srmist.edu.in/accounts/p/10002227248/signin?hide_fp=true&servicename=ZohoCreator&service_language=en&dcc=true&serviceurl=https%3A%2F%2Facademia.srmist.edu.in%2Fportal%2Facademia-academic-services%2FredirectFromLogin",
|
|
65
|
+
"https://academia.srmist.edu.in/accounts/p/40-10002227248/signin?hide_fp=true&servicename=ZohoCreator&service_language=en&dcc=true&serviceurl=https%3A%2F%2Facademia.srmist.edu.in%2Fportal%2Facademia-academic-services%2FredirectFromLogin",
|
|
66
66
|
"Referrer-Policy": "strict-origin-when-cross-origin",
|
|
67
67
|
},
|
|
68
68
|
body: body.toString(),
|
|
@@ -100,7 +100,7 @@ async function terminateSessions({ flowId, identifier, digest, csrfToken }) {
|
|
|
100
100
|
},
|
|
101
101
|
});
|
|
102
102
|
|
|
103
|
-
if (res2.ok || res2.status === 200 || res2.status === 204) {
|
|
103
|
+
if (res2.ok || res2.status === 200 || res2.status === 202 || res2.status === 204) {
|
|
104
104
|
let data = null;
|
|
105
105
|
try { data = await res2.json(); } catch { /* 204 No Content is fine */ }
|
|
106
106
|
return { success: true, status: res2.status, strategy: "webclient-delete", data };
|
|
@@ -1,9 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.validatePassword = validatePassword;
|
|
4
|
+
async function getSigninSessionHeaders() {
|
|
5
|
+
const signinUrl = "https://academia.srmist.edu.in/accounts/p/40-10002227248/signin?hide_fp=true&servicename=ZohoCreator&service_language=en&dcc=true&serviceurl=https%3A%2F%2Facademia.srmist.edu.in%2Fportal%2Facademia-academic-services%2FredirectFromLogin";
|
|
6
|
+
const seedRes = await fetch(signinUrl, {
|
|
7
|
+
method: "GET",
|
|
8
|
+
redirect: "manual",
|
|
9
|
+
headers: {
|
|
10
|
+
accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
|
11
|
+
"accept-language": "en-US,en;q=0.9",
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
const setCookieHeaders = (typeof seedRes.headers.getSetCookie === "function"
|
|
15
|
+
? seedRes.headers.getSetCookie()
|
|
16
|
+
: [seedRes.headers.get("set-cookie")].filter(Boolean));
|
|
17
|
+
const cookiePairs = [];
|
|
18
|
+
let csrfToken = null;
|
|
19
|
+
for (const header of setCookieHeaders) {
|
|
20
|
+
const pair = header.split(";")[0]?.trim();
|
|
21
|
+
if (!pair || !pair.includes("="))
|
|
22
|
+
continue;
|
|
23
|
+
cookiePairs.push(pair);
|
|
24
|
+
if (pair.startsWith("iamcsr="))
|
|
25
|
+
csrfToken = pair.slice("iamcsr=".length);
|
|
26
|
+
if (!csrfToken && pair.startsWith("_zcsr_tmp="))
|
|
27
|
+
csrfToken = pair.slice("_zcsr_tmp=".length);
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
cookie: cookiePairs.join("; "),
|
|
31
|
+
csrfToken,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
4
34
|
async function validatePassword({ identifier, digest, password, }) {
|
|
5
35
|
let res;
|
|
6
36
|
try {
|
|
37
|
+
const seed = await getSigninSessionHeaders();
|
|
7
38
|
res = await fetch(`https://academia.srmist.edu.in/accounts/p/40-10002227248/signin/v2/primary/${identifier}/password?digest=${digest}&cli_time=${Date.now()}&servicename=ZohoCreator&service_language=en&serviceurl=https%3A%2F%2Facademia.srmist.edu.in%2Fportal%2Facademia-academic-services%2FredirectFromLogin`, {
|
|
8
39
|
headers: {
|
|
9
40
|
accept: "*/*",
|
|
@@ -12,14 +43,25 @@ async function validatePassword({ identifier, digest, password, }) {
|
|
|
12
43
|
"sec-fetch-dest": "empty",
|
|
13
44
|
"sec-fetch-mode": "cors",
|
|
14
45
|
"sec-fetch-site": "same-origin",
|
|
15
|
-
"x-zcsrf-token":
|
|
16
|
-
cookie
|
|
17
|
-
Referer: "https://academia.srmist.edu.in/accounts/p/10002227248/signin?hide_fp=true&servicename=ZohoCreator&service_language=en&
|
|
46
|
+
...(seed.csrfToken ? { "x-zcsrf-token": `iamcsrcoo=${seed.csrfToken}` } : {}),
|
|
47
|
+
...(seed.cookie ? { cookie: seed.cookie } : {}),
|
|
48
|
+
Referer: "https://academia.srmist.edu.in/accounts/p/40-10002227248/signin?hide_fp=true&servicename=ZohoCreator&service_language=en&dcc=true&serviceurl=https%3A%2F%2Facademia.srmist.edu.in%2Fportal%2Facademia-academic-services%2FredirectFromLogin",
|
|
18
49
|
"Referrer-Policy": "strict-origin-when-cross-origin",
|
|
19
50
|
},
|
|
20
51
|
body: `{"passwordauth":{"password":"${password}"}}`,
|
|
21
52
|
method: "POST",
|
|
53
|
+
redirect: "manual",
|
|
22
54
|
});
|
|
55
|
+
const location = res.headers.get("location") ?? "";
|
|
56
|
+
if ([301, 302, 303, 307, 308].includes(res.status) && location.includes("sessions-reminder")) {
|
|
57
|
+
let flowId = null;
|
|
58
|
+
try {
|
|
59
|
+
const u = new URL(location, "https://academia.srmist.edu.in");
|
|
60
|
+
flowId = u.searchParams.get("flowId") ?? u.searchParams.get("flow_id") ?? null;
|
|
61
|
+
}
|
|
62
|
+
catch (_) { }
|
|
63
|
+
return { data: { statusCode: 435, message: "Maximum concurrent sessions reached. Please terminate existing sessions to continue.", captcha: { required: false, digest: null }, isConcurrentLimit: true, flowId }, isAuthenticated: false };
|
|
64
|
+
}
|
|
23
65
|
// ── Detect redirect to Zoho sessions-reminder page ───────────────────────
|
|
24
66
|
if (res.redirected && res.url && res.url.includes("sessions-reminder")) {
|
|
25
67
|
let flowId = null;
|
|
@@ -38,21 +80,42 @@ async function validatePassword({ identifier, digest, password, }) {
|
|
|
38
80
|
}
|
|
39
81
|
return { error: "Internal Server Error", errorReason: new Error("Non-JSON response from login endpoint") };
|
|
40
82
|
}
|
|
41
|
-
if (response.status_code === 201) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
83
|
+
if (response.status_code === 201 || response.status_code === 200) {
|
|
84
|
+
const setCookieHeaders = (typeof res.headers.getSetCookie === "function"
|
|
85
|
+
? res.headers.getSetCookie()
|
|
86
|
+
: [res.headers.get("set-cookie")].filter(Boolean));
|
|
87
|
+
if (!setCookieHeaders.length)
|
|
45
88
|
throw new Error("Couldn't able to get cookie from response header ");
|
|
89
|
+
const combinedCookieHeader = setCookieHeaders.join("; ");
|
|
46
90
|
const matches = [
|
|
47
|
-
...
|
|
91
|
+
...combinedCookieHeader.matchAll(/(_(?:iamadt|iambdt)_client_\d+|_z_identity)=[^;]+/g),
|
|
48
92
|
];
|
|
49
93
|
const extractedCookies = matches.map((m) => m[0]).join("; ") + ";";
|
|
50
94
|
const data = {
|
|
51
95
|
cookies: extractedCookies,
|
|
52
|
-
statusCode:
|
|
96
|
+
statusCode: response.status_code,
|
|
53
97
|
};
|
|
54
98
|
return { data, isAuthenticated: true };
|
|
55
99
|
}
|
|
100
|
+
if ([301, 302, 303, 307, 308].includes(res.status) &&
|
|
101
|
+
(location.includes("redirectFromLogin") || location.includes("/portal/academia-academic-services"))) {
|
|
102
|
+
const setCookieHeaders = (typeof res.headers.getSetCookie === "function"
|
|
103
|
+
? res.headers.getSetCookie()
|
|
104
|
+
: [res.headers.get("set-cookie")].filter(Boolean));
|
|
105
|
+
const combinedCookieHeader = setCookieHeaders.join("; ");
|
|
106
|
+
const matches = [
|
|
107
|
+
...combinedCookieHeader.matchAll(/(_(?:iamadt|iambdt)_client_\d+|_z_identity)=[^;]+/g),
|
|
108
|
+
];
|
|
109
|
+
if (matches.length > 0) {
|
|
110
|
+
return {
|
|
111
|
+
data: {
|
|
112
|
+
cookies: matches.map((m) => m[0]).join("; ") + ";",
|
|
113
|
+
statusCode: 201,
|
|
114
|
+
},
|
|
115
|
+
isAuthenticated: true,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
}
|
|
56
119
|
// ── Concurrent / device-limit detection ──────────────────────────────────
|
|
57
120
|
const msg = (response.localized_message ?? response.message ?? "").toLowerCase();
|
|
58
121
|
const isConcurrentLimit =
|
|
@@ -90,4 +153,4 @@ async function validatePassword({ identifier, digest, password, }) {
|
|
|
90
153
|
return { error: "Internal Server Error", errorReason: e };
|
|
91
154
|
}
|
|
92
155
|
}
|
|
93
|
-
//# sourceMappingURL=validatePassword.js.map
|
|
156
|
+
//# sourceMappingURL=validatePassword.js.map
|
|
@@ -1,22 +1,50 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.validateUser = validateUser;
|
|
4
|
+
async function getSigninSessionHeaders() {
|
|
5
|
+
const signinUrl = "https://academia.srmist.edu.in/accounts/p/40-10002227248/signin?hide_fp=true&servicename=ZohoCreator&service_language=en&dcc=true&serviceurl=https%3A%2F%2Facademia.srmist.edu.in%2Fportal%2Facademia-academic-services%2FredirectFromLogin";
|
|
6
|
+
const seedRes = await fetch(signinUrl, {
|
|
7
|
+
method: "GET",
|
|
8
|
+
redirect: "manual",
|
|
9
|
+
headers: {
|
|
10
|
+
accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
|
11
|
+
"accept-language": "en-US,en;q=0.9",
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
const setCookieHeaders = (typeof seedRes.headers.getSetCookie === "function"
|
|
15
|
+
? seedRes.headers.getSetCookie()
|
|
16
|
+
: [seedRes.headers.get("set-cookie")].filter(Boolean));
|
|
17
|
+
const cookiePairs = [];
|
|
18
|
+
let csrfToken = null;
|
|
19
|
+
for (const header of setCookieHeaders) {
|
|
20
|
+
const pair = header.split(";")[0]?.trim();
|
|
21
|
+
if (!pair || !pair.includes("="))
|
|
22
|
+
continue;
|
|
23
|
+
cookiePairs.push(pair);
|
|
24
|
+
if (pair.startsWith("iamcsr="))
|
|
25
|
+
csrfToken = pair.slice("iamcsr=".length);
|
|
26
|
+
if (!csrfToken && pair.startsWith("_zcsr_tmp="))
|
|
27
|
+
csrfToken = pair.slice("_zcsr_tmp=".length);
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
cookie: cookiePairs.join("; "),
|
|
31
|
+
csrfToken,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
4
34
|
async function validateUser(username) {
|
|
5
35
|
try {
|
|
36
|
+
const seed = await getSigninSessionHeaders();
|
|
6
37
|
const res = await fetch(`https://academia.srmist.edu.in/accounts/p/40-10002227248/signin/v2/lookup/${username}`, {
|
|
7
38
|
headers: {
|
|
8
39
|
accept: "*/*",
|
|
9
40
|
"accept-language": "en-US,en;q=0.9",
|
|
10
41
|
"content-type": "application/x-www-form-urlencoded;charset=UTF-8",
|
|
11
|
-
"sec-ch-ua": '"Chromium";v="136", "Google Chrome";v="136", "Not.A/Brand";v="99"',
|
|
12
|
-
"sec-ch-ua-mobile": "?1",
|
|
13
|
-
"sec-ch-ua-platform": '"Android"',
|
|
14
42
|
"sec-fetch-dest": "empty",
|
|
15
43
|
"sec-fetch-mode": "cors",
|
|
16
44
|
"sec-fetch-site": "same-origin",
|
|
17
|
-
"x-zcsrf-token":
|
|
18
|
-
cookie
|
|
19
|
-
Referer: "https://academia.srmist.edu.in/accounts/p/10002227248/signin?hide_fp=true&servicename=ZohoCreator&service_language=en&
|
|
45
|
+
...(seed.csrfToken ? { "x-zcsrf-token": `iamcsrcoo=${seed.csrfToken}` } : {}),
|
|
46
|
+
...(seed.cookie ? { cookie: seed.cookie } : {}),
|
|
47
|
+
Referer: "https://academia.srmist.edu.in/accounts/p/40-10002227248/signin?hide_fp=true&servicename=ZohoCreator&service_language=en&dcc=true&serviceurl=https%3A%2F%2Facademia.srmist.edu.in%2Fportal%2Facademia-academic-services%2FredirectFromLogin",
|
|
20
48
|
"Referrer-Policy": "strict-origin-when-cross-origin",
|
|
21
49
|
},
|
|
22
50
|
body: `mode=primary&cli_time=${Date.now()}&servicename=ZohoCreator&service_language=en&serviceurl=https%3A%2F%2Facademia.srmist.edu.in%2Fportal%2Facademia-academic-services%2FredirectFromLogin`,
|
|
@@ -32,11 +60,10 @@ async function validateUser(username) {
|
|
|
32
60
|
return { data };
|
|
33
61
|
}
|
|
34
62
|
catch (e) {
|
|
35
|
-
console.error(e);
|
|
36
63
|
return {
|
|
37
64
|
error: "Internal Server Error",
|
|
38
65
|
errorReason: e,
|
|
39
66
|
};
|
|
40
67
|
}
|
|
41
68
|
}
|
|
42
|
-
//# sourceMappingURL=validateUser.js.map
|
|
69
|
+
//# sourceMappingURL=validateUser.js.map
|
|
@@ -25,18 +25,14 @@ async function fetchAttendance(cookie) {
|
|
|
25
25
|
return request.data;
|
|
26
26
|
}
|
|
27
27
|
catch (error) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
"status" in error &&
|
|
31
|
-
error.status === 500) {
|
|
28
|
+
const statusCode = axios_1.default.isAxiosError(error) ? error.response?.status : undefined;
|
|
29
|
+
if (statusCode === 401 || statusCode === 403 || statusCode === 500) {
|
|
32
30
|
return { error: "Unauthorized", status: 401 };
|
|
33
31
|
}
|
|
34
32
|
return {
|
|
35
33
|
error: error instanceof Error ? error.message : "Failed to fetch attendance",
|
|
36
|
-
status:
|
|
37
|
-
? error.status
|
|
38
|
-
: 500,
|
|
34
|
+
status: statusCode ?? 500,
|
|
39
35
|
};
|
|
40
36
|
}
|
|
41
37
|
}
|
|
42
|
-
//# sourceMappingURL=fetchAttendance.js.map
|
|
38
|
+
//# sourceMappingURL=fetchAttendance.js.map
|
|
@@ -30,18 +30,14 @@ async function fetchCalendar(cookie) {
|
|
|
30
30
|
return response.data;
|
|
31
31
|
}
|
|
32
32
|
catch (error) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
"status" in error &&
|
|
36
|
-
error.status === 500) {
|
|
33
|
+
const statusCode = axios_1.default.isAxiosError(error) ? error.response?.status : undefined;
|
|
34
|
+
if (statusCode === 401 || statusCode === 403 || statusCode === 500) {
|
|
37
35
|
return { error: "Unauthorized", status: 401 };
|
|
38
36
|
}
|
|
39
37
|
return {
|
|
40
38
|
error: error instanceof Error ? error.message : "Failed to fetch calendar",
|
|
41
|
-
status:
|
|
42
|
-
? error.status
|
|
43
|
-
: 500,
|
|
39
|
+
status: statusCode ?? 500,
|
|
44
40
|
};
|
|
45
41
|
}
|
|
46
42
|
}
|
|
47
|
-
//# sourceMappingURL=fetchCalender.js.map
|
|
43
|
+
//# sourceMappingURL=fetchCalender.js.map
|
|
@@ -30,20 +30,16 @@ async function fetchCourseDetails(cookie) {
|
|
|
30
30
|
return request.data;
|
|
31
31
|
}
|
|
32
32
|
catch (error) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
"status" in error &&
|
|
36
|
-
error.status === 500) {
|
|
33
|
+
const statusCode = axios_1.default.isAxiosError(error) ? error.response?.status : undefined;
|
|
34
|
+
if (statusCode === 401 || statusCode === 403 || statusCode === 500) {
|
|
37
35
|
return { error: "Unauthorized", status: 401 };
|
|
38
36
|
}
|
|
39
37
|
return {
|
|
40
38
|
error: error instanceof Error
|
|
41
39
|
? error.message
|
|
42
40
|
: "Failed to fetch course details",
|
|
43
|
-
status:
|
|
44
|
-
? error.status
|
|
45
|
-
: 500,
|
|
41
|
+
status: statusCode ?? 500,
|
|
46
42
|
};
|
|
47
43
|
}
|
|
48
44
|
}
|
|
49
|
-
//# sourceMappingURL=fetchCourseDetails.js.map
|
|
45
|
+
//# sourceMappingURL=fetchCourseDetails.js.map
|
|
@@ -25,18 +25,14 @@ async function fetchDayOrder(cookie) {
|
|
|
25
25
|
return request.data;
|
|
26
26
|
}
|
|
27
27
|
catch (error) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
"status" in error &&
|
|
31
|
-
error.status === 500) {
|
|
28
|
+
const statusCode = axios_1.default.isAxiosError(error) ? error.response?.status : undefined;
|
|
29
|
+
if (statusCode === 401 || statusCode === 403 || statusCode === 500) {
|
|
32
30
|
return { error: "Unauthorized", status: 401 };
|
|
33
31
|
}
|
|
34
32
|
return {
|
|
35
33
|
error: error instanceof Error ? error.message : "Failed to fetch attendance",
|
|
36
|
-
status:
|
|
37
|
-
? error.status
|
|
38
|
-
: 500,
|
|
34
|
+
status: statusCode ?? 500,
|
|
39
35
|
};
|
|
40
36
|
}
|
|
41
37
|
}
|
|
42
|
-
//# sourceMappingURL=fetchDayOrder.js.map
|
|
38
|
+
//# sourceMappingURL=fetchDayOrder.js.map
|
|
@@ -25,18 +25,14 @@ async function fetchMarks(cookie) {
|
|
|
25
25
|
return request.data;
|
|
26
26
|
}
|
|
27
27
|
catch (error) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
"status" in error &&
|
|
31
|
-
error.status === 500) {
|
|
28
|
+
const statusCode = axios_1.default.isAxiosError(error) ? error.response?.status : undefined;
|
|
29
|
+
if (statusCode === 401 || statusCode === 403 || statusCode === 500) {
|
|
32
30
|
return { error: "Unauthorized", status: 401 };
|
|
33
31
|
}
|
|
34
32
|
return {
|
|
35
33
|
error: error instanceof Error ? error.message : "Failed to fetch attendance",
|
|
36
|
-
status:
|
|
37
|
-
? error.status
|
|
38
|
-
: 500,
|
|
34
|
+
status: statusCode ?? 500,
|
|
39
35
|
};
|
|
40
36
|
}
|
|
41
37
|
}
|
|
42
|
-
//# sourceMappingURL=fetchMarks.js.map
|
|
38
|
+
//# sourceMappingURL=fetchMarks.js.map
|
|
@@ -30,20 +30,16 @@ async function fetchTimetable(cookie) {
|
|
|
30
30
|
return request.data;
|
|
31
31
|
}
|
|
32
32
|
catch (error) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
"status" in error &&
|
|
36
|
-
error.status === 500) {
|
|
33
|
+
const statusCode = axios_1.default.isAxiosError(error) ? error.response?.status : undefined;
|
|
34
|
+
if (statusCode === 401 || statusCode === 403 || statusCode === 500) {
|
|
37
35
|
return { error: "Unauthorized", status: 401 };
|
|
38
36
|
}
|
|
39
37
|
return {
|
|
40
38
|
error: error instanceof Error
|
|
41
39
|
? error.message
|
|
42
40
|
: "Failed to fetch course details",
|
|
43
|
-
status:
|
|
44
|
-
? error.status
|
|
45
|
-
: 500,
|
|
41
|
+
status: statusCode ?? 500,
|
|
46
42
|
};
|
|
47
43
|
}
|
|
48
44
|
}
|
|
49
|
-
//# sourceMappingURL=fetchTimetable.js.map
|
|
45
|
+
//# sourceMappingURL=fetchTimetable.js.map
|
|
@@ -5,9 +5,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.fetchUserInfo = fetchUserInfo;
|
|
7
7
|
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const dynamicUrl_1 = require("../../utils/dynamicUrl");
|
|
8
9
|
async function fetchUserInfo(cookie) {
|
|
10
|
+
const url = await (0, dynamicUrl_1.courseDynamicUrl)();
|
|
9
11
|
try {
|
|
10
|
-
const request = await (0, axios_1.default)(
|
|
12
|
+
const request = await (0, axios_1.default)(url, {
|
|
11
13
|
headers: {
|
|
12
14
|
accept: "*/*",
|
|
13
15
|
"accept-language": "en-US,en;q=0.9",
|
|
@@ -25,19 +27,14 @@ async function fetchUserInfo(cookie) {
|
|
|
25
27
|
return request.data;
|
|
26
28
|
}
|
|
27
29
|
catch (error) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
"status" in error &&
|
|
31
|
-
error.status === 500) {
|
|
30
|
+
const statusCode = axios_1.default.isAxiosError(error) ? error.response?.status : undefined;
|
|
31
|
+
if (statusCode === 401 || statusCode === 403 || statusCode === 500) {
|
|
32
32
|
return { error: "Unauthorized", status: 401 };
|
|
33
33
|
}
|
|
34
|
-
// Handle other errors
|
|
35
34
|
return {
|
|
36
35
|
error: error instanceof Error ? error.message : "Failed to fetch user info",
|
|
37
|
-
status:
|
|
38
|
-
? error.status
|
|
39
|
-
: 500,
|
|
36
|
+
status: statusCode ?? 500,
|
|
40
37
|
};
|
|
41
38
|
}
|
|
42
39
|
}
|
|
43
|
-
//# sourceMappingURL=fetchUserInfo.js.map
|
|
40
|
+
//# sourceMappingURL=fetchUserInfo.js.map
|
package/dist/src/index.js
CHANGED
|
@@ -42,8 +42,8 @@ async function logoutUser(cookie) {
|
|
|
42
42
|
return await (0, fetchLogout_1.fetchLogout)(cookie);
|
|
43
43
|
}
|
|
44
44
|
// Terminate concurrent sessions (2-device limit bypass)
|
|
45
|
-
async function terminateSessions({ flowId, identifier, digest }) {
|
|
46
|
-
return await (0, terminateSessions_1.terminateSessions)({ flowId, identifier, digest });
|
|
45
|
+
async function terminateSessions({ flowId, identifier, digest, csrfToken }) {
|
|
46
|
+
return await (0, terminateSessions_1.terminateSessions)({ flowId, identifier, digest, csrfToken });
|
|
47
47
|
}
|
|
48
48
|
// Get TimeTable
|
|
49
49
|
async function getTimetable(cookie) {
|
|
@@ -115,4 +115,4 @@ async function getCourse(cookie) {
|
|
|
115
115
|
return { error: parse.error, status: parse.status };
|
|
116
116
|
return parse;
|
|
117
117
|
}
|
|
118
|
-
//# sourceMappingURL=index.js.map
|
|
118
|
+
//# sourceMappingURL=index.js.map
|
package/dist/utils/dynamicUrl.js
CHANGED
|
@@ -25,7 +25,12 @@ async function calendarDynamicUrl() {
|
|
|
25
25
|
return dynamicUrl;
|
|
26
26
|
}
|
|
27
27
|
async function courseDynamicUrl() {
|
|
28
|
-
const
|
|
29
|
-
|
|
28
|
+
const currentDate = new Date();
|
|
29
|
+
const currentYear = currentDate.getFullYear();
|
|
30
|
+
const currentMonth = currentDate.getMonth() + 1;
|
|
31
|
+
const academicYearString = currentMonth >= 1 && currentMonth <= 6
|
|
32
|
+
? `${currentYear - 1}_${currentYear.toString().slice(-2)}`
|
|
33
|
+
: `${currentYear}_${(currentYear + 1).toString().slice(-2)}`;
|
|
34
|
+
return `https://academia.srmist.edu.in/srm_university/academia-academic-services/page/My_Time_Table_${academicYearString}`;
|
|
30
35
|
}
|
|
31
|
-
//# sourceMappingURL=dynamicUrl.js.map
|
|
36
|
+
//# sourceMappingURL=dynamicUrl.js.map
|