chukyo-sdk 0.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/LICENSE +21 -0
- package/README.md +227 -0
- package/dist/cjs/albo/client.js +133 -0
- package/dist/cjs/albo/index.js +55 -0
- package/dist/cjs/albo/parser/albo.js +110 -0
- package/dist/cjs/albo/types/albo.js +351 -0
- package/dist/cjs/albo/types/alboCalendar.js +51 -0
- package/dist/cjs/albo/types/alboCommon.js +55 -0
- package/dist/cjs/albo/types/alboInformation.js +136 -0
- package/dist/cjs/albo/types/alboMenu.js +92 -0
- package/dist/cjs/albo/types/alboQuestionnaire.js +229 -0
- package/dist/cjs/albo/types/alboSharedItem.js +137 -0
- package/dist/cjs/albo/types/alboSystem.js +103 -0
- package/dist/cjs/albo/types/alboUniversalForm.js +51 -0
- package/dist/cjs/common/dom.js +137 -0
- package/dist/cjs/common/utils.js +29 -0
- package/dist/cjs/constants.js +127 -0
- package/dist/cjs/core/request.js +39 -0
- package/dist/cjs/cubics/client.js +49 -0
- package/dist/cjs/cubics/index.js +22 -0
- package/dist/cjs/cubics/parser/cubics.js +103 -0
- package/dist/cjs/cubics/types/cubics.js +90 -0
- package/dist/cjs/errors.js +55 -0
- package/dist/cjs/index.js +50 -0
- package/dist/cjs/manabo/client.js +135 -0
- package/dist/cjs/manabo/index.js +44 -0
- package/dist/cjs/manabo/parser/manaboClass.js +386 -0
- package/dist/cjs/manabo/parser/manaboEntry.js +38 -0
- package/dist/cjs/manabo/parser/manaboMail.js +153 -0
- package/dist/cjs/manabo/parser/manaboNews.js +26 -0
- package/dist/cjs/manabo/parser/manaboTimetable.js +93 -0
- package/dist/cjs/manabo/types/manaboClass.js +223 -0
- package/dist/cjs/manabo/types/manaboEntry.js +43 -0
- package/dist/cjs/manabo/types/manaboMail.js +117 -0
- package/dist/cjs/manabo/types/manaboNews.js +20 -0
- package/dist/cjs/manabo/types/manaboTimetable.js +79 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/shib/builder.js +239 -0
- package/dist/cjs/shib/index.js +32 -0
- package/dist/cjs/shib/parser/shibLogin.js +138 -0
- package/dist/cjs/shib/parser/shibUser.js +51 -0
- package/dist/cjs/shib/types/common.js +2 -0
- package/dist/cjs/shib/types/shibLogin.js +92 -0
- package/dist/cjs/shib/types/shibUser.js +44 -0
- package/dist/cjs/transports/fetch.js +84 -0
- package/dist/cjs/types.js +9 -0
- package/dist/esm/albo/client.d.ts +80 -0
- package/dist/esm/albo/client.d.ts.map +1 -0
- package/dist/esm/albo/client.js +129 -0
- package/dist/esm/albo/index.d.ts +12 -0
- package/dist/esm/albo/index.d.ts.map +1 -0
- package/dist/esm/albo/index.js +11 -0
- package/dist/esm/albo/parser/albo.d.ts +69 -0
- package/dist/esm/albo/parser/albo.d.ts.map +1 -0
- package/dist/esm/albo/parser/albo.js +84 -0
- package/dist/esm/albo/types/albo.d.ts +460 -0
- package/dist/esm/albo/types/albo.d.ts.map +1 -0
- package/dist/esm/albo/types/albo.js +348 -0
- package/dist/esm/albo/types/alboCalendar.d.ts +58 -0
- package/dist/esm/albo/types/alboCalendar.d.ts.map +1 -0
- package/dist/esm/albo/types/alboCalendar.js +48 -0
- package/dist/esm/albo/types/alboCommon.d.ts +52 -0
- package/dist/esm/albo/types/alboCommon.d.ts.map +1 -0
- package/dist/esm/albo/types/alboCommon.js +51 -0
- package/dist/esm/albo/types/alboInformation.d.ts +214 -0
- package/dist/esm/albo/types/alboInformation.d.ts.map +1 -0
- package/dist/esm/albo/types/alboInformation.js +133 -0
- package/dist/esm/albo/types/alboMenu.d.ts +114 -0
- package/dist/esm/albo/types/alboMenu.d.ts.map +1 -0
- package/dist/esm/albo/types/alboMenu.js +89 -0
- package/dist/esm/albo/types/alboQuestionnaire.d.ts +442 -0
- package/dist/esm/albo/types/alboQuestionnaire.d.ts.map +1 -0
- package/dist/esm/albo/types/alboQuestionnaire.js +226 -0
- package/dist/esm/albo/types/alboSharedItem.d.ts +205 -0
- package/dist/esm/albo/types/alboSharedItem.d.ts.map +1 -0
- package/dist/esm/albo/types/alboSharedItem.js +134 -0
- package/dist/esm/albo/types/alboSystem.d.ts +129 -0
- package/dist/esm/albo/types/alboSystem.d.ts.map +1 -0
- package/dist/esm/albo/types/alboSystem.js +100 -0
- package/dist/esm/albo/types/alboUniversalForm.d.ts +63 -0
- package/dist/esm/albo/types/alboUniversalForm.d.ts.map +1 -0
- package/dist/esm/albo/types/alboUniversalForm.js +48 -0
- package/dist/esm/common/dom.d.ts +35 -0
- package/dist/esm/common/dom.d.ts.map +1 -0
- package/dist/esm/common/dom.js +120 -0
- package/dist/esm/common/utils.d.ts +15 -0
- package/dist/esm/common/utils.d.ts.map +1 -0
- package/dist/esm/common/utils.js +22 -0
- package/dist/esm/constants.d.ts +113 -0
- package/dist/esm/constants.d.ts.map +1 -0
- package/dist/esm/constants.js +124 -0
- package/dist/esm/core/request.d.ts +29 -0
- package/dist/esm/core/request.d.ts.map +1 -0
- package/dist/esm/core/request.js +33 -0
- package/dist/esm/cubics/client.d.ts +13 -0
- package/dist/esm/cubics/client.d.ts.map +1 -0
- package/dist/esm/cubics/client.js +45 -0
- package/dist/esm/cubics/index.d.ts +4 -0
- package/dist/esm/cubics/index.d.ts.map +1 -0
- package/dist/esm/cubics/index.js +3 -0
- package/dist/esm/cubics/parser/cubics.d.ts +8 -0
- package/dist/esm/cubics/parser/cubics.d.ts.map +1 -0
- package/dist/esm/cubics/parser/cubics.js +99 -0
- package/dist/esm/cubics/types/cubics.d.ts +94 -0
- package/dist/esm/cubics/types/cubics.d.ts.map +1 -0
- package/dist/esm/cubics/types/cubics.js +87 -0
- package/dist/esm/errors.d.ts +46 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +46 -0
- package/dist/esm/index.d.ts +19 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +25 -0
- package/dist/esm/manabo/client.d.ts +75 -0
- package/dist/esm/manabo/client.d.ts.map +1 -0
- package/dist/esm/manabo/client.js +131 -0
- package/dist/esm/manabo/index.d.ts +12 -0
- package/dist/esm/manabo/index.d.ts.map +1 -0
- package/dist/esm/manabo/index.js +11 -0
- package/dist/esm/manabo/parser/manaboClass.d.ts +9 -0
- package/dist/esm/manabo/parser/manaboClass.d.ts.map +1 -0
- package/dist/esm/manabo/parser/manaboClass.js +377 -0
- package/dist/esm/manabo/parser/manaboEntry.d.ts +8 -0
- package/dist/esm/manabo/parser/manaboEntry.d.ts.map +1 -0
- package/dist/esm/manabo/parser/manaboEntry.js +33 -0
- package/dist/esm/manabo/parser/manaboMail.d.ts +8 -0
- package/dist/esm/manabo/parser/manaboMail.d.ts.map +1 -0
- package/dist/esm/manabo/parser/manaboMail.js +145 -0
- package/dist/esm/manabo/parser/manaboNews.d.ts +7 -0
- package/dist/esm/manabo/parser/manaboNews.d.ts.map +1 -0
- package/dist/esm/manabo/parser/manaboNews.js +22 -0
- package/dist/esm/manabo/parser/manaboTimetable.d.ts +4 -0
- package/dist/esm/manabo/parser/manaboTimetable.d.ts.map +1 -0
- package/dist/esm/manabo/parser/manaboTimetable.js +89 -0
- package/dist/esm/manabo/types/manaboClass.d.ts +294 -0
- package/dist/esm/manabo/types/manaboClass.d.ts.map +1 -0
- package/dist/esm/manabo/types/manaboClass.js +220 -0
- package/dist/esm/manabo/types/manaboEntry.d.ts +24 -0
- package/dist/esm/manabo/types/manaboEntry.d.ts.map +1 -0
- package/dist/esm/manabo/types/manaboEntry.js +40 -0
- package/dist/esm/manabo/types/manaboMail.d.ts +103 -0
- package/dist/esm/manabo/types/manaboMail.d.ts.map +1 -0
- package/dist/esm/manabo/types/manaboMail.js +114 -0
- package/dist/esm/manabo/types/manaboNews.d.ts +15 -0
- package/dist/esm/manabo/types/manaboNews.d.ts.map +1 -0
- package/dist/esm/manabo/types/manaboNews.js +17 -0
- package/dist/esm/manabo/types/manaboTimetable.d.ts +88 -0
- package/dist/esm/manabo/types/manaboTimetable.d.ts.map +1 -0
- package/dist/esm/manabo/types/manaboTimetable.js +76 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/shib/builder.d.ts +154 -0
- package/dist/esm/shib/builder.d.ts.map +1 -0
- package/dist/esm/shib/builder.js +212 -0
- package/dist/esm/shib/index.d.ts +15 -0
- package/dist/esm/shib/index.d.ts.map +1 -0
- package/dist/esm/shib/index.js +14 -0
- package/dist/esm/shib/parser/shibLogin.d.ts +47 -0
- package/dist/esm/shib/parser/shibLogin.d.ts.map +1 -0
- package/dist/esm/shib/parser/shibLogin.js +127 -0
- package/dist/esm/shib/parser/shibUser.d.ts +11 -0
- package/dist/esm/shib/parser/shibUser.d.ts.map +1 -0
- package/dist/esm/shib/parser/shibUser.js +46 -0
- package/dist/esm/shib/types/common.d.ts +20 -0
- package/dist/esm/shib/types/common.d.ts.map +1 -0
- package/dist/esm/shib/types/common.js +1 -0
- package/dist/esm/shib/types/shibLogin.d.ts +62 -0
- package/dist/esm/shib/types/shibLogin.d.ts.map +1 -0
- package/dist/esm/shib/types/shibLogin.js +89 -0
- package/dist/esm/shib/types/shibUser.d.ts +36 -0
- package/dist/esm/shib/types/shibUser.d.ts.map +1 -0
- package/dist/esm/shib/types/shibUser.js +41 -0
- package/dist/esm/transports/fetch.d.ts +36 -0
- package/dist/esm/transports/fetch.d.ts.map +1 -0
- package/dist/esm/transports/fetch.js +80 -0
- package/dist/esm/types.d.ts +71 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +8 -0
- package/package.json +72 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CUBICS(教務システム)週間時間割ページのパーサ。
|
|
3
|
+
* 画面遷移型の HTML で、値は hidden input に格納されている。
|
|
4
|
+
*/
|
|
5
|
+
import type { ZodSafeParseResult } from "zod";
|
|
6
|
+
import { type CubicsAsTimetableDTO } from "../types/cubics";
|
|
7
|
+
export declare const parseCubicsAsTimetable: (html: string) => ZodSafeParseResult<CubicsAsTimetableDTO>;
|
|
8
|
+
//# sourceMappingURL=cubics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cubics.d.ts","sourceRoot":"","sources":["../../../../src/cubics/parser/cubics.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,KAAK,CAAC;AAI9C,OAAO,EAA2B,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAcrF,eAAO,MAAM,sBAAsB,GAAI,MAAM,MAAM,KAAG,kBAAkB,CAAC,oBAAoB,CAyG5F,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { getAttribute, getInnerHtml, getTextContent, loadDocument, queryAll, queryOne } from "../../common/dom";
|
|
2
|
+
import { extractFirstQuotedValue, normalizeWhitespace } from "../../common/utils";
|
|
3
|
+
import { CubicsAsTimetableSchema } from "../types/cubics";
|
|
4
|
+
const BR_PATTERN = /<br\s*\/?\s*>/gi;
|
|
5
|
+
const emptyOrNull = (value) => {
|
|
6
|
+
if (value === null || value === undefined) {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
return value.length > 0 ? value : null;
|
|
10
|
+
};
|
|
11
|
+
const getInputValue = (selector, root) => emptyOrNull(getAttribute(queryOne(selector, root), "value"));
|
|
12
|
+
export const parseCubicsAsTimetable = (html) => {
|
|
13
|
+
const document = loadDocument(html);
|
|
14
|
+
// --- 学生情報(table.output) ---
|
|
15
|
+
const studentTable = queryOne("table.output", document);
|
|
16
|
+
const studentRows = studentTable ? queryAll("tr", studentTable) : [];
|
|
17
|
+
const row1Cells = studentRows[0] ? queryAll("td", studentRows[0]) : [];
|
|
18
|
+
const row2Cells = studentRows[1] ? queryAll("td", studentRows[1]) : [];
|
|
19
|
+
const row3Cells = studentRows[2] ? queryAll("td", studentRows[2]) : [];
|
|
20
|
+
const row4Cells = studentRows[3] ? queryAll("td", studentRows[3]) : [];
|
|
21
|
+
const getCellText = (cells, index) => normalizeWhitespace(getTextContent(cells[index] ?? null));
|
|
22
|
+
// 氏名セルは "日本語氏名<BR />(ALPHABET NAME)" 形式。<BR> で分割し、後半の括弧を除去する。
|
|
23
|
+
const nameCellHtml = getInnerHtml(row1Cells[1] ?? null);
|
|
24
|
+
const nameParts = nameCellHtml.split(BR_PATTERN);
|
|
25
|
+
const name = normalizeWhitespace(getTextContent(loadDocument(nameParts[0] ?? "")));
|
|
26
|
+
const alphabetRaw = normalizeWhitespace(getTextContent(loadDocument(nameParts[1] ?? "")));
|
|
27
|
+
const alphabetInner = alphabetRaw.replace(/^\(/, "").replace(/\)$/, "");
|
|
28
|
+
const nameAlphabet = emptyOrNull(normalizeWhitespace(alphabetInner));
|
|
29
|
+
const student = {
|
|
30
|
+
id: getCellText(row1Cells, 0),
|
|
31
|
+
name,
|
|
32
|
+
nameAlphabet,
|
|
33
|
+
division: getCellText(row2Cells, 0),
|
|
34
|
+
affiliation: getCellText(row2Cells, 1),
|
|
35
|
+
status: getCellText(row2Cells, 2),
|
|
36
|
+
className: getCellText(row2Cells, 3),
|
|
37
|
+
faculty: getCellText(row3Cells, 0),
|
|
38
|
+
department: getCellText(row3Cells, 1),
|
|
39
|
+
course: getCellText(row3Cells, 2),
|
|
40
|
+
address: getCellText(row4Cells, 0),
|
|
41
|
+
};
|
|
42
|
+
// --- 表示期間 ---
|
|
43
|
+
const periodInput = queryOne("input[name='lblSpcfProd']", document);
|
|
44
|
+
const periodRange = normalizeWhitespace(getAttribute(periodInput, "value") ?? "");
|
|
45
|
+
// --- 時間割表(table.output_curriculum) ---
|
|
46
|
+
const curriculumTable = queryOne("table.output_curriculum", document);
|
|
47
|
+
const headerRow = curriculumTable ? queryOne("tr", curriculumTable) : null;
|
|
48
|
+
const headerCells = headerRow ? queryAll("th", headerRow).slice(1) : [];
|
|
49
|
+
const days = headerCells.map((element) => {
|
|
50
|
+
// input[name$=".lblLsnDt"] の value は "月<BR/>06/16"(属性値なのでエンティティは復号済み)。
|
|
51
|
+
const raw = getAttribute(queryOne('input[name$=".lblLsnDt"]', element), "value");
|
|
52
|
+
const parts = (raw ?? "").split(BR_PATTERN).map((part) => normalizeWhitespace(part));
|
|
53
|
+
return {
|
|
54
|
+
weekday: parts[0] ?? "",
|
|
55
|
+
date: parts[1] ?? "",
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
const periodRows = curriculumTable ? queryAll("tr", curriculumTable).slice(1) : [];
|
|
59
|
+
const periods = periodRows.map((row) => {
|
|
60
|
+
const periodLabel = normalizeWhitespace(getTextContent(queryOne("th", row)));
|
|
61
|
+
const cells = queryAll("td", row);
|
|
62
|
+
const slots = cells.map((cell) => {
|
|
63
|
+
const lessonCode = getInputValue('input[name$=".hdnLsnCd1"]', cell);
|
|
64
|
+
const lessonYear = getInputValue('input[name$=".hdnLsnOpcFcy1"]', cell);
|
|
65
|
+
const termCode = getInputValue('input[name$=".hdnTacTrmCd1"]', cell);
|
|
66
|
+
const timetableCode = getInputValue('input[name$=".hdnTmtxCd"]', cell);
|
|
67
|
+
const lessonDate = getInputValue('input[name$=".hdnOpcDt"]', cell);
|
|
68
|
+
// 科目名: hdnSbjKnjNm(完全名称)を優先し、空なら lblSbjKnjNm(表示名称)へフォールバック。
|
|
69
|
+
const subject = getInputValue('input[name$=".hdnSbjKnjNm"]', cell) ?? getInputValue('input[name$=".lblSbjKnjNm"]', cell);
|
|
70
|
+
// 教室名: hdnClrNm の <BR/> を半角スペースへ。空なら lblClrNm へフォールバック。
|
|
71
|
+
const classroomFull = getAttribute(queryOne('input[name$=".hdnClrNm"]', cell), "value");
|
|
72
|
+
const classroomNormalized = emptyOrNull(normalizeWhitespace((classroomFull ?? "").replace(BR_PATTERN, " ")));
|
|
73
|
+
const classroom = classroomNormalized ?? getInputValue('input[name$=".lblClrNm"]', cell);
|
|
74
|
+
// 詳細URL: execPopupWindowOpen(...) を含む onclick の最初のシングルクォート引数。
|
|
75
|
+
const detailAnchor = queryAll("a", cell).find((anchor) => (getAttribute(anchor, "onclick") ?? "").includes("execPopupWindowOpen"));
|
|
76
|
+
const detailUrl = extractFirstQuotedValue(detailAnchor ? getAttribute(detailAnchor, "onclick") : null);
|
|
77
|
+
// ステータスアイコン: img の src で判定。
|
|
78
|
+
const iconSources = queryAll("img", cell).map((img) => getAttribute(img, "src") ?? "");
|
|
79
|
+
const isCancelled = iconSources.some((src) => src.includes("icon_kyukou"));
|
|
80
|
+
const isSupplementary = iconSources.some((src) => src.includes("icon_hokou"));
|
|
81
|
+
const isChanged = iconSources.some((src) => src.includes("icon_jyugyouhenkou"));
|
|
82
|
+
return {
|
|
83
|
+
subject,
|
|
84
|
+
classroom,
|
|
85
|
+
lessonCode,
|
|
86
|
+
lessonYear,
|
|
87
|
+
termCode,
|
|
88
|
+
timetableCode,
|
|
89
|
+
lessonDate,
|
|
90
|
+
detailUrl,
|
|
91
|
+
isCancelled,
|
|
92
|
+
isSupplementary,
|
|
93
|
+
isChanged,
|
|
94
|
+
};
|
|
95
|
+
});
|
|
96
|
+
return { periodLabel, slots };
|
|
97
|
+
});
|
|
98
|
+
return CubicsAsTimetableSchema.safeParse({ student, periodRange, days, periods });
|
|
99
|
+
};
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** CUBICS 時間割の1コマ(空きコマは文字列フィールドが null / フラグが false) */
|
|
3
|
+
export declare const CubicsAsTimetableSlotSchema: z.ZodObject<{
|
|
4
|
+
subject: z.ZodNullable<z.ZodString>;
|
|
5
|
+
classroom: z.ZodNullable<z.ZodString>;
|
|
6
|
+
lessonCode: z.ZodNullable<z.ZodString>;
|
|
7
|
+
lessonYear: z.ZodNullable<z.ZodString>;
|
|
8
|
+
termCode: z.ZodNullable<z.ZodString>;
|
|
9
|
+
timetableCode: z.ZodNullable<z.ZodString>;
|
|
10
|
+
lessonDate: z.ZodNullable<z.ZodString>;
|
|
11
|
+
detailUrl: z.ZodNullable<z.ZodString>;
|
|
12
|
+
isCancelled: z.ZodBoolean;
|
|
13
|
+
isSupplementary: z.ZodBoolean;
|
|
14
|
+
isChanged: z.ZodBoolean;
|
|
15
|
+
}, z.core.$strip>;
|
|
16
|
+
export type CubicsAsTimetableSlotDTO = z.infer<typeof CubicsAsTimetableSlotSchema>;
|
|
17
|
+
/** 1時限分の行(曜日順のコマ配列) */
|
|
18
|
+
export declare const CubicsAsTimetablePeriodSchema: z.ZodObject<{
|
|
19
|
+
periodLabel: z.ZodString;
|
|
20
|
+
slots: z.ZodArray<z.ZodObject<{
|
|
21
|
+
subject: z.ZodNullable<z.ZodString>;
|
|
22
|
+
classroom: z.ZodNullable<z.ZodString>;
|
|
23
|
+
lessonCode: z.ZodNullable<z.ZodString>;
|
|
24
|
+
lessonYear: z.ZodNullable<z.ZodString>;
|
|
25
|
+
termCode: z.ZodNullable<z.ZodString>;
|
|
26
|
+
timetableCode: z.ZodNullable<z.ZodString>;
|
|
27
|
+
lessonDate: z.ZodNullable<z.ZodString>;
|
|
28
|
+
detailUrl: z.ZodNullable<z.ZodString>;
|
|
29
|
+
isCancelled: z.ZodBoolean;
|
|
30
|
+
isSupplementary: z.ZodBoolean;
|
|
31
|
+
isChanged: z.ZodBoolean;
|
|
32
|
+
}, z.core.$strip>>;
|
|
33
|
+
}, z.core.$strip>;
|
|
34
|
+
export type CubicsAsTimetablePeriodDTO = z.infer<typeof CubicsAsTimetablePeriodSchema>;
|
|
35
|
+
/** 時間割表ヘッダの1日分 */
|
|
36
|
+
export declare const CubicsAsTimetableDaySchema: z.ZodObject<{
|
|
37
|
+
weekday: z.ZodString;
|
|
38
|
+
date: z.ZodString;
|
|
39
|
+
}, z.core.$strip>;
|
|
40
|
+
export type CubicsAsTimetableDayDTO = z.infer<typeof CubicsAsTimetableDaySchema>;
|
|
41
|
+
/** 学生情報ブロック(PII を含む) */
|
|
42
|
+
export declare const CubicsAsTimetableStudentSchema: z.ZodObject<{
|
|
43
|
+
id: z.ZodString;
|
|
44
|
+
name: z.ZodString;
|
|
45
|
+
nameAlphabet: z.ZodNullable<z.ZodString>;
|
|
46
|
+
division: z.ZodString;
|
|
47
|
+
affiliation: z.ZodString;
|
|
48
|
+
status: z.ZodString;
|
|
49
|
+
className: z.ZodString;
|
|
50
|
+
faculty: z.ZodString;
|
|
51
|
+
department: z.ZodString;
|
|
52
|
+
course: z.ZodString;
|
|
53
|
+
address: z.ZodString;
|
|
54
|
+
}, z.core.$strip>;
|
|
55
|
+
export type CubicsAsTimetableStudentDTO = z.infer<typeof CubicsAsTimetableStudentSchema>;
|
|
56
|
+
/** CUBICS 週間時間割(学生情報 + 表示期間 + 曜日ヘッダ + 時限×コマ) */
|
|
57
|
+
export declare const CubicsAsTimetableSchema: z.ZodObject<{
|
|
58
|
+
student: z.ZodObject<{
|
|
59
|
+
id: z.ZodString;
|
|
60
|
+
name: z.ZodString;
|
|
61
|
+
nameAlphabet: z.ZodNullable<z.ZodString>;
|
|
62
|
+
division: z.ZodString;
|
|
63
|
+
affiliation: z.ZodString;
|
|
64
|
+
status: z.ZodString;
|
|
65
|
+
className: z.ZodString;
|
|
66
|
+
faculty: z.ZodString;
|
|
67
|
+
department: z.ZodString;
|
|
68
|
+
course: z.ZodString;
|
|
69
|
+
address: z.ZodString;
|
|
70
|
+
}, z.core.$strip>;
|
|
71
|
+
periodRange: z.ZodString;
|
|
72
|
+
days: z.ZodArray<z.ZodObject<{
|
|
73
|
+
weekday: z.ZodString;
|
|
74
|
+
date: z.ZodString;
|
|
75
|
+
}, z.core.$strip>>;
|
|
76
|
+
periods: z.ZodArray<z.ZodObject<{
|
|
77
|
+
periodLabel: z.ZodString;
|
|
78
|
+
slots: z.ZodArray<z.ZodObject<{
|
|
79
|
+
subject: z.ZodNullable<z.ZodString>;
|
|
80
|
+
classroom: z.ZodNullable<z.ZodString>;
|
|
81
|
+
lessonCode: z.ZodNullable<z.ZodString>;
|
|
82
|
+
lessonYear: z.ZodNullable<z.ZodString>;
|
|
83
|
+
termCode: z.ZodNullable<z.ZodString>;
|
|
84
|
+
timetableCode: z.ZodNullable<z.ZodString>;
|
|
85
|
+
lessonDate: z.ZodNullable<z.ZodString>;
|
|
86
|
+
detailUrl: z.ZodNullable<z.ZodString>;
|
|
87
|
+
isCancelled: z.ZodBoolean;
|
|
88
|
+
isSupplementary: z.ZodBoolean;
|
|
89
|
+
isChanged: z.ZodBoolean;
|
|
90
|
+
}, z.core.$strip>>;
|
|
91
|
+
}, z.core.$strip>>;
|
|
92
|
+
}, z.core.$strip>;
|
|
93
|
+
export type CubicsAsTimetableDTO = z.infer<typeof CubicsAsTimetableSchema>;
|
|
94
|
+
//# sourceMappingURL=cubics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cubics.d.ts","sourceRoot":"","sources":["../../../../src/cubics/types/cubics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,uDAAuD;AACvD,eAAO,MAAM,2BAA2B;;;;;;;;;;;;iBA6BtC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEnF,uBAAuB;AACvB,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;iBAKxC,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEvF,kBAAkB;AAClB,eAAO,MAAM,0BAA0B;;;iBAKrC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAEjF,wBAAwB;AACxB,eAAO,MAAM,8BAA8B;;;;;;;;;;;;iBA4BzC,CAAC;AAEH,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAEzF,gDAAgD;AAChD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBASlC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** CUBICS 時間割の1コマ(空きコマは文字列フィールドが null / フラグが false) */
|
|
3
|
+
export const CubicsAsTimetableSlotSchema = z.object({
|
|
4
|
+
/** 科目名(正式名称) @example "情報リテラシー" */
|
|
5
|
+
subject: z
|
|
6
|
+
.string()
|
|
7
|
+
.nullable()
|
|
8
|
+
.meta({ description: "科目名(正式名称。hdnSbjKnjNm から復元)", example: "情報リテラシー" }),
|
|
9
|
+
/** 教室名(複数教室は半角スペース区切り) @example "1731 1732" */
|
|
10
|
+
classroom: z.string().nullable().meta({ description: "教室名(複数は半角スペース区切り)", example: "1731 1732" }),
|
|
11
|
+
/** 授業コード(hdnLsnCd1) @example "12345" */
|
|
12
|
+
lessonCode: z.string().nullable().meta({ description: "授業コード(hdnLsnCd1)", example: "12345" }),
|
|
13
|
+
/** 開講年度(hdnLsnOpcFcy1) @example "2025" */
|
|
14
|
+
lessonYear: z.string().nullable().meta({ description: "開講年度(hdnLsnOpcFcy1)", example: "2025" }),
|
|
15
|
+
/** 学期コード(hdnTacTrmCd1) @example "01" */
|
|
16
|
+
termCode: z.string().nullable().meta({ description: "学期コード(hdnTacTrmCd1)", example: "01" }),
|
|
17
|
+
/** 時間割コード(hdnTmtxCd) @example "A1" */
|
|
18
|
+
timetableCode: z.string().nullable().meta({ description: "時間割コード(hdnTmtxCd)", example: "A1" }),
|
|
19
|
+
/** 開講日(hdnOpcDt。yyyymmdd) @example "20250616" */
|
|
20
|
+
lessonDate: z.string().nullable().meta({ description: "開講日(hdnOpcDt。yyyymmdd)", example: "20250616" }),
|
|
21
|
+
/** 授業詳細ポップアップの URL(onclick から抽出) @example "/unias/ARF010Popup.do?..." */
|
|
22
|
+
detailUrl: z
|
|
23
|
+
.string()
|
|
24
|
+
.nullable()
|
|
25
|
+
.meta({ description: "授業詳細ポップアップの URL", example: "/unias/ARF010Popup.do?..." }),
|
|
26
|
+
/** 休講フラグ(icon_kyukou) @example false */
|
|
27
|
+
isCancelled: z.boolean().meta({ description: "休講(icon_kyukou)", example: false }),
|
|
28
|
+
/** 補講フラグ(icon_hokou) @example false */
|
|
29
|
+
isSupplementary: z.boolean().meta({ description: "補講(icon_hokou)", example: false }),
|
|
30
|
+
/** 授業変更フラグ(icon_jyugyouhenkou) @example false */
|
|
31
|
+
isChanged: z.boolean().meta({ description: "授業変更(icon_jyugyouhenkou)", example: false }),
|
|
32
|
+
});
|
|
33
|
+
/** 1時限分の行(曜日順のコマ配列) */
|
|
34
|
+
export const CubicsAsTimetablePeriodSchema = z.object({
|
|
35
|
+
/** 時限ラベル @example "1時限" */
|
|
36
|
+
periodLabel: z.string().meta({ description: "時限ラベル", example: "1時限" }),
|
|
37
|
+
/** 曜日順のスロット。空きコマは全フィールド null / false */
|
|
38
|
+
slots: z.array(CubicsAsTimetableSlotSchema).meta({ description: "曜日順のスロット" }),
|
|
39
|
+
});
|
|
40
|
+
/** 時間割表ヘッダの1日分 */
|
|
41
|
+
export const CubicsAsTimetableDaySchema = z.object({
|
|
42
|
+
/** 曜日 @example "月" */
|
|
43
|
+
weekday: z.string().meta({ description: "曜日", example: "月" }),
|
|
44
|
+
/** 日付(MM/DD) @example "06/16" */
|
|
45
|
+
date: z.string().meta({ description: "日付(MM/DD)", example: "06/16" }),
|
|
46
|
+
});
|
|
47
|
+
/** 学生情報ブロック(PII を含む) */
|
|
48
|
+
export const CubicsAsTimetableStudentSchema = z.object({
|
|
49
|
+
/** 学籍番号 @example "T000000" */
|
|
50
|
+
id: z.string().meta({ description: "学籍番号", example: "T000000" }),
|
|
51
|
+
/** 氏名(日本語表記) @example "田中太郎" */
|
|
52
|
+
name: z.string().meta({ description: "氏名(日本語表記)", example: "田中太郎" }),
|
|
53
|
+
/** 氏名(アルファベット表記。取得不可なら null) @example "TANAKA TARO" */
|
|
54
|
+
nameAlphabet: z
|
|
55
|
+
.string()
|
|
56
|
+
.nullable()
|
|
57
|
+
.meta({ description: "氏名(アルファベット表記)", example: "TANAKA TARO" }),
|
|
58
|
+
/** 学生区分 @example "学部(正規)" */
|
|
59
|
+
division: z.string().meta({ description: "学生区分", example: "学部(正規)" }),
|
|
60
|
+
/** 所属区分 @example "学部生" */
|
|
61
|
+
affiliation: z.string().meta({ description: "所属区分", example: "学部生" }),
|
|
62
|
+
/** 学生状態 @example "在学" */
|
|
63
|
+
status: z.string().meta({ description: "学生状態", example: "在学" }),
|
|
64
|
+
/** クラス @example "F" */
|
|
65
|
+
className: z.string().meta({ description: "クラス", example: "F" }),
|
|
66
|
+
/** 学部 @example "工学部" */
|
|
67
|
+
faculty: z.string().meta({ description: "学部", example: "工学部" }),
|
|
68
|
+
/** 学科 @example "情報工学科" */
|
|
69
|
+
department: z.string().meta({ description: "学科", example: "情報工学科" }),
|
|
70
|
+
/** コース @example "メディア工学コース" */
|
|
71
|
+
course: z.string().meta({ description: "コース", example: "メディア工学コース" }),
|
|
72
|
+
/** 住所・電話番号(固定)(携帯)の結合文字列 @example "愛知県名古屋市... 052-000-0000 090-0000-0000" */
|
|
73
|
+
address: z
|
|
74
|
+
.string()
|
|
75
|
+
.meta({ description: "住所・電話番号の結合文字列", example: "愛知県名古屋市... 052-000-0000 090-0000-0000" }),
|
|
76
|
+
});
|
|
77
|
+
/** CUBICS 週間時間割(学生情報 + 表示期間 + 曜日ヘッダ + 時限×コマ) */
|
|
78
|
+
export const CubicsAsTimetableSchema = z.object({
|
|
79
|
+
/** 学生情報 */
|
|
80
|
+
student: CubicsAsTimetableStudentSchema,
|
|
81
|
+
/** 表示期間 @example "2025年06月16日~2025年06月21日" */
|
|
82
|
+
periodRange: z.string().meta({ description: "表示期間", example: "2025年06月16日~2025年06月21日" }),
|
|
83
|
+
/** 曜日ヘッダ */
|
|
84
|
+
days: z.array(CubicsAsTimetableDaySchema).meta({ description: "曜日ヘッダ" }),
|
|
85
|
+
/** 時限ごとの行 */
|
|
86
|
+
periods: z.array(CubicsAsTimetablePeriodSchema).meta({ description: "時限ごとの行" }),
|
|
87
|
+
});
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK が投げるエラー型。呼び出し側はこれらを `instanceof` で判別してハンドリングする。
|
|
3
|
+
*/
|
|
4
|
+
/** すべての SDK エラーの基底 */
|
|
5
|
+
export declare class ChukyoSdkError extends Error {
|
|
6
|
+
constructor(message: string, options?: {
|
|
7
|
+
cause?: unknown;
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* パース失敗。fetch は成功したがレスポンスが期待スキーマに一致しなかった場合。
|
|
12
|
+
* `cause` に Zod のエラーが入る(サイトの HTML/JSON 構造変化の疑い)。
|
|
13
|
+
*/
|
|
14
|
+
export declare class ParseError extends ChukyoSdkError {
|
|
15
|
+
constructor(options?: {
|
|
16
|
+
cause?: unknown;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* セッション失効。Cookie が無効で、再認証を試みても回復しなかった場合。
|
|
21
|
+
* CUBICS のように画面遷移型でセッションが不安定なサービスで発生しうる。
|
|
22
|
+
*/
|
|
23
|
+
export declare class ExpiredSessionError extends ChukyoSdkError {
|
|
24
|
+
constructor(options?: {
|
|
25
|
+
cause?: unknown;
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/** 大学側メンテナンス(HTTP 503)。UI 側で案内を出すために区別する。 */
|
|
29
|
+
export declare class ChukyoMaintenanceError extends ChukyoSdkError {
|
|
30
|
+
constructor(options?: {
|
|
31
|
+
cause?: unknown;
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/** ネットワーク到達失敗(DNS・接続拒否・TLS 等、HTTP レスポンスを受け取れていない)。 */
|
|
35
|
+
export declare class NetworkError extends ChukyoSdkError {
|
|
36
|
+
constructor(options?: {
|
|
37
|
+
cause?: unknown;
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/** リクエストがタイムアウトした。 */
|
|
41
|
+
export declare class TimeoutError extends ChukyoSdkError {
|
|
42
|
+
constructor(options?: {
|
|
43
|
+
cause?: unknown;
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,sBAAsB;AACtB,qBAAa,cAAe,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAI7D;AAED;;;GAGG;AACH,qBAAa,UAAW,SAAQ,cAAc;gBAC9B,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAG5C;AAED;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,cAAc;gBACvC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAG5C;AAED,6CAA6C;AAC7C,qBAAa,sBAAuB,SAAQ,cAAc;gBAC1C,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAG5C;AAED,sDAAsD;AACtD,qBAAa,YAAa,SAAQ,cAAc;gBAChC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAG5C;AAED,sBAAsB;AACtB,qBAAa,YAAa,SAAQ,cAAc;gBAChC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAG5C"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK が投げるエラー型。呼び出し側はこれらを `instanceof` で判別してハンドリングする。
|
|
3
|
+
*/
|
|
4
|
+
/** すべての SDK エラーの基底 */
|
|
5
|
+
export class ChukyoSdkError extends Error {
|
|
6
|
+
constructor(message, options) {
|
|
7
|
+
super(message, options);
|
|
8
|
+
this.name = new.target.name;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* パース失敗。fetch は成功したがレスポンスが期待スキーマに一致しなかった場合。
|
|
13
|
+
* `cause` に Zod のエラーが入る(サイトの HTML/JSON 構造変化の疑い)。
|
|
14
|
+
*/
|
|
15
|
+
export class ParseError extends ChukyoSdkError {
|
|
16
|
+
constructor(options) {
|
|
17
|
+
super("レスポンスのパースに失敗しました", options);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* セッション失効。Cookie が無効で、再認証を試みても回復しなかった場合。
|
|
22
|
+
* CUBICS のように画面遷移型でセッションが不安定なサービスで発生しうる。
|
|
23
|
+
*/
|
|
24
|
+
export class ExpiredSessionError extends ChukyoSdkError {
|
|
25
|
+
constructor(options) {
|
|
26
|
+
super("ポータルのセッションが失効しています", options);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/** 大学側メンテナンス(HTTP 503)。UI 側で案内を出すために区別する。 */
|
|
30
|
+
export class ChukyoMaintenanceError extends ChukyoSdkError {
|
|
31
|
+
constructor(options) {
|
|
32
|
+
super("中京大学ポータルがメンテナンス中です", options);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/** ネットワーク到達失敗(DNS・接続拒否・TLS 等、HTTP レスポンスを受け取れていない)。 */
|
|
36
|
+
export class NetworkError extends ChukyoSdkError {
|
|
37
|
+
constructor(options) {
|
|
38
|
+
super("ネットワークエラーが発生しました", options);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/** リクエストがタイムアウトした。 */
|
|
42
|
+
export class TimeoutError extends ChukyoSdkError {
|
|
43
|
+
constructor(options) {
|
|
44
|
+
super("リクエストがタイムアウトしました", options);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ChukyoClientOptions } from "./types";
|
|
2
|
+
import { CubicsClient } from "./cubics/client";
|
|
3
|
+
import { AlboClient } from "./albo/client";
|
|
4
|
+
import { ManaboClient } from "./manabo/client";
|
|
5
|
+
export interface ChukyoClient {
|
|
6
|
+
readonly cubics: CubicsClient;
|
|
7
|
+
readonly albo: AlboClient;
|
|
8
|
+
readonly manabo: ManaboClient;
|
|
9
|
+
}
|
|
10
|
+
/** SDK クライアントを生成する。 */
|
|
11
|
+
export declare const createChukyoClient: (options: ChukyoClientOptions) => ChukyoClient;
|
|
12
|
+
export type { Transport, TransportRequest, TransportResponse, SessionProvider, PortalService, ChukyoClientOptions, } from "./types";
|
|
13
|
+
export { ChukyoSdkError, ParseError, ExpiredSessionError, ChukyoMaintenanceError, NetworkError, TimeoutError, } from "./errors";
|
|
14
|
+
export { fetchTransport, type FetchTransportOptions } from "./transports/fetch";
|
|
15
|
+
export * from "./cubics/index";
|
|
16
|
+
export * from "./albo/index";
|
|
17
|
+
export * from "./manabo/index";
|
|
18
|
+
export * from "./shib/index";
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;CACjC;AAED,uBAAuB;AACvB,eAAO,MAAM,kBAAkB,GAAI,SAAS,mBAAmB,KAAG,YAUjE,CAAC;AAGF,YAAY,EACR,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,mBAAmB,GACtB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACH,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,sBAAsB,EACtB,YAAY,EACZ,YAAY,GACf,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAGhF,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { CubicsClient } from "./cubics/client";
|
|
2
|
+
import { AlboClient } from "./albo/client";
|
|
3
|
+
import { ManaboClient } from "./manabo/client";
|
|
4
|
+
/** SDK クライアントを生成する。 */
|
|
5
|
+
export const createChukyoClient = (options) => {
|
|
6
|
+
const ctx = {
|
|
7
|
+
transport: options.transport,
|
|
8
|
+
...(options.session ? { session: options.session } : {}),
|
|
9
|
+
};
|
|
10
|
+
return {
|
|
11
|
+
cubics: new CubicsClient(ctx),
|
|
12
|
+
albo: new AlboClient(ctx),
|
|
13
|
+
manabo: new ManaboClient(ctx),
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
// ---- エラー ----
|
|
17
|
+
export { ChukyoSdkError, ParseError, ExpiredSessionError, ChukyoMaintenanceError, NetworkError, TimeoutError, } from "./errors";
|
|
18
|
+
// ---- Transport Adapter ----
|
|
19
|
+
export { fetchTransport } from "./transports/fetch";
|
|
20
|
+
// ---- ポータル別 parser / 型 / クライアント ----
|
|
21
|
+
export * from "./cubics/index";
|
|
22
|
+
export * from "./albo/index";
|
|
23
|
+
export * from "./manabo/index";
|
|
24
|
+
// ---- 認証フロー(Shibboleth)の構造化ヘルパ(実行はしない) ----
|
|
25
|
+
export * from "./shib/index";
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { type RequestContext } from "../core/request";
|
|
2
|
+
import type { ManaboClassContentDTO, ManaboClassDirectoryDTO, ManaboClassEntryDTO, ManaboClassNewsDTO, ManaboClassSyllabusDTO } from "./types/manaboClass";
|
|
3
|
+
import type { ManaboEntryFormDTO, ManaboEntryResponseDTO } from "./types/manaboEntry";
|
|
4
|
+
import type { ManaboMailMemberDTO, ManaboMailViewDTO, ManaboReceivedMailDTO, ManaboSentMailDTO } from "./types/manaboMail";
|
|
5
|
+
import type { ManaboTimetableDTO } from "./types/manaboTimetable";
|
|
6
|
+
export declare class ManaboClient {
|
|
7
|
+
private readonly ctx;
|
|
8
|
+
constructor(ctx: RequestContext);
|
|
9
|
+
private fetchText;
|
|
10
|
+
/** トップページに `action=...` を POST して HTML 断片を得る */
|
|
11
|
+
private postAction;
|
|
12
|
+
/** 時間割を取得する */
|
|
13
|
+
getTimetable(): Promise<ManaboTimetableDTO>;
|
|
14
|
+
/** 授業のお知らせ一覧を取得する */
|
|
15
|
+
getClassNews(classId: string): Promise<ManaboClassNewsDTO>;
|
|
16
|
+
/** 授業のシラバスを取得する */
|
|
17
|
+
getClassSyllabus(classId: string): Promise<ManaboClassSyllabusDTO>;
|
|
18
|
+
/** 授業の出席表(各回の出欠一覧)を取得する */
|
|
19
|
+
getClassEntry(classId: string): Promise<ManaboClassEntryDTO>;
|
|
20
|
+
/** 授業のディレクトリ(週・回)一覧を取得する */
|
|
21
|
+
getClassDirectory(classId: string): Promise<ManaboClassDirectoryDTO>;
|
|
22
|
+
/** 授業のディレクトリ配下の教材一覧を取得する */
|
|
23
|
+
getClassContent(classId: string, directoryId: string, viewType?: string): Promise<ManaboClassContentDTO>;
|
|
24
|
+
/**
|
|
25
|
+
* 出席受付モーダル(出欠カード)のフォームを取得する。
|
|
26
|
+
* 返り値の `requiresCode` が `true` なら出席コード(パスワード)が必要で、
|
|
27
|
+
* {@link submitEntry} の `code` に教員指示のコードを渡す。`false`(パスワードなし授業)
|
|
28
|
+
* なら `code` を省略してそのまま送信できる。
|
|
29
|
+
*/
|
|
30
|
+
getEntryForm(classId: string): Promise<ManaboEntryFormDTO>;
|
|
31
|
+
/**
|
|
32
|
+
* 出席登録を送信する({@link getEntryForm} で取得した entryId / uniqid を渡す)。
|
|
33
|
+
* 出席コード(パスワード)必須の授業では `code` に教員指示のコードを渡す。
|
|
34
|
+
* パスワードなし授業では `code` を省略する。
|
|
35
|
+
*/
|
|
36
|
+
submitEntry(params: {
|
|
37
|
+
classId: string;
|
|
38
|
+
directoryId: string;
|
|
39
|
+
entryId: string;
|
|
40
|
+
uniqid: string;
|
|
41
|
+
code?: string;
|
|
42
|
+
}): Promise<ManaboEntryResponseDTO>;
|
|
43
|
+
/**
|
|
44
|
+
* 受信メール一覧を取得する。
|
|
45
|
+
* リクエスト形は glexa JS の `glexa.loadMailReceives(p, q, o, unread, start, end)` で確認済み。
|
|
46
|
+
* @param options.page ページ番号(1 始まり) / q 検索語 / order 並び順 / unreadOnly 未読のみ / startDate・endDate 期間(YYYY-MM-DD)
|
|
47
|
+
*/
|
|
48
|
+
getReceivedMail(options?: {
|
|
49
|
+
page?: number | string;
|
|
50
|
+
q?: string;
|
|
51
|
+
order?: string;
|
|
52
|
+
unreadOnly?: boolean;
|
|
53
|
+
startDate?: string;
|
|
54
|
+
endDate?: string;
|
|
55
|
+
}): Promise<ManaboReceivedMailDTO>;
|
|
56
|
+
/**
|
|
57
|
+
* 送信メール一覧を取得する。
|
|
58
|
+
* リクエスト形は glexa JS の `glexa.loadMailSends(p, q, o, start, end)` で確認済み。
|
|
59
|
+
*/
|
|
60
|
+
getSentMail(options?: {
|
|
61
|
+
page?: number | string;
|
|
62
|
+
q?: string;
|
|
63
|
+
order?: string;
|
|
64
|
+
startDate?: string;
|
|
65
|
+
endDate?: string;
|
|
66
|
+
}): Promise<ManaboSentMailDTO>;
|
|
67
|
+
/** メール本文(閲覧モーダル)を取得する */
|
|
68
|
+
getMailView(mailId: string): Promise<ManaboMailViewDTO>;
|
|
69
|
+
/**
|
|
70
|
+
* メール作成モーダルで宛先候補メンバーを検索する(`q` は氏名/学籍番号などの検索語)。
|
|
71
|
+
* リクエスト形は HAR 内の inline JS(`glexa.ajax({ action: 'glexa_modal_mail_ajax_member_list', params: { q } })`)で確認済み。
|
|
72
|
+
*/
|
|
73
|
+
searchMailMembers(q: string): Promise<ManaboMailMemberDTO>;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/manabo/client.ts"],"names":[],"mappings":"AAQA,OAAO,EAA6B,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAWjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC3J,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC3H,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,qBAAa,YAAY;IACT,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,cAAc;IAEhD,OAAO,CAAC,SAAS;IASjB,gDAAgD;IAChD,OAAO,CAAC,UAAU;IAQlB,eAAe;IACT,YAAY,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAIjD,qBAAqB;IACf,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQhE,mBAAmB;IACb,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAIxE,2BAA2B;IACrB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAQlE,4BAA4B;IACtB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAQ1E,4BAA4B;IACtB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAa9G;;;;;OAKG;IACG,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQhE;;;;OAIG;IACG,WAAW,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAapJ;;;;OAIG;IACG,eAAe,CAAC,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAgBvL;;;OAGG;IACG,WAAW,CAAC,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAezJ,yBAAyB;IACnB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQ7D;;;OAGG;IACG,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;CASnE"}
|