@mo7yw4ng/openape 1.0.3 → 1.0.5
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 +30 -5
- package/esm/deno.js +1 -1
- package/esm/src/commands/announcements.d.ts.map +1 -1
- package/esm/src/commands/announcements.js +16 -17
- package/esm/src/commands/assignments.d.ts +3 -0
- package/esm/src/commands/assignments.d.ts.map +1 -0
- package/esm/src/commands/assignments.js +230 -0
- package/esm/src/commands/auth.d.ts.map +1 -1
- package/esm/src/commands/auth.js +45 -15
- package/esm/src/commands/calendar.d.ts.map +1 -1
- package/esm/src/commands/calendar.js +20 -21
- package/esm/src/commands/courses.js +6 -6
- package/esm/src/commands/forums.d.ts.map +1 -1
- package/esm/src/commands/forums.js +128 -36
- package/esm/src/commands/grades.js +3 -3
- package/esm/src/commands/materials.d.ts.map +1 -1
- package/esm/src/commands/materials.js +115 -224
- package/esm/src/commands/quizzes.d.ts.map +1 -1
- package/esm/src/commands/quizzes.js +179 -68
- package/esm/src/commands/skills.d.ts.map +1 -1
- package/esm/src/commands/skills.js +4 -8
- package/esm/src/commands/upload.d.ts +3 -0
- package/esm/src/commands/upload.d.ts.map +1 -0
- package/esm/src/commands/upload.js +58 -0
- package/esm/src/commands/videos.d.ts.map +1 -1
- package/esm/src/commands/videos.js +10 -9
- package/esm/src/index.d.ts.map +1 -1
- package/esm/src/index.js +12 -1
- package/esm/src/lib/auth.d.ts +23 -1
- package/esm/src/lib/auth.d.ts.map +1 -1
- package/esm/src/lib/auth.js +36 -3
- package/esm/src/lib/logger.d.ts +1 -1
- package/esm/src/lib/logger.d.ts.map +1 -1
- package/esm/src/lib/logger.js +7 -4
- package/esm/src/lib/moodle.d.ts +183 -1
- package/esm/src/lib/moodle.d.ts.map +1 -1
- package/esm/src/lib/moodle.js +498 -13
- package/esm/src/lib/types.d.ts +81 -164
- package/esm/src/lib/types.d.ts.map +1 -1
- package/esm/src/lib/types.js +1 -0
- package/esm/src/lib/utils.d.ts +20 -0
- package/esm/src/lib/utils.d.ts.map +1 -1
- package/esm/src/lib/utils.js +48 -1
- package/package.json +1 -1
- package/script/deno.js +1 -1
- package/script/src/commands/announcements.d.ts.map +1 -1
- package/script/src/commands/announcements.js +15 -16
- package/script/src/commands/assignments.d.ts +3 -0
- package/script/src/commands/assignments.d.ts.map +1 -0
- package/script/src/commands/assignments.js +269 -0
- package/script/src/commands/auth.d.ts.map +1 -1
- package/script/src/commands/auth.js +44 -14
- package/script/src/commands/calendar.d.ts.map +1 -1
- package/script/src/commands/calendar.js +19 -20
- package/script/src/commands/courses.js +5 -5
- package/script/src/commands/forums.d.ts.map +1 -1
- package/script/src/commands/forums.js +128 -36
- package/script/src/commands/grades.js +3 -3
- package/script/src/commands/materials.d.ts.map +1 -1
- package/script/src/commands/materials.js +115 -224
- package/script/src/commands/quizzes.d.ts.map +1 -1
- package/script/src/commands/quizzes.js +177 -66
- package/script/src/commands/skills.d.ts.map +1 -1
- package/script/src/commands/skills.js +4 -8
- package/script/src/commands/upload.d.ts +3 -0
- package/script/src/commands/upload.d.ts.map +1 -0
- package/script/src/commands/upload.js +64 -0
- package/script/src/commands/videos.d.ts.map +1 -1
- package/script/src/commands/videos.js +10 -9
- package/script/src/index.d.ts.map +1 -1
- package/script/src/index.js +12 -1
- package/script/src/lib/auth.d.ts +23 -1
- package/script/src/lib/auth.d.ts.map +1 -1
- package/script/src/lib/auth.js +70 -3
- package/script/src/lib/logger.d.ts +1 -1
- package/script/src/lib/logger.d.ts.map +1 -1
- package/script/src/lib/logger.js +7 -4
- package/script/src/lib/moodle.d.ts +183 -1
- package/script/src/lib/moodle.d.ts.map +1 -1
- package/script/src/lib/moodle.js +511 -13
- package/script/src/lib/types.d.ts +81 -164
- package/script/src/lib/types.d.ts.map +1 -1
- package/script/src/lib/types.js +1 -0
- package/script/src/lib/utils.d.ts +20 -0
- package/script/src/lib/utils.d.ts.map +1 -1
- package/script/src/lib/utils.js +52 -0
- package/skills/openape/SKILL.md +74 -270
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { Page } from "playwright-core";
|
|
2
1
|
export interface AppConfig {
|
|
3
2
|
courseUrl: string;
|
|
4
3
|
moodleBaseUrl: string;
|
|
@@ -21,6 +20,12 @@ export interface Logger {
|
|
|
21
20
|
error: (msg: string) => void;
|
|
22
21
|
debug: (msg: string) => void;
|
|
23
22
|
}
|
|
23
|
+
export type OutputFormat = "json" | "csv" | "table" | "silent";
|
|
24
|
+
export interface OutputOptions {
|
|
25
|
+
format: OutputFormat;
|
|
26
|
+
fields?: string[];
|
|
27
|
+
pretty?: boolean;
|
|
28
|
+
}
|
|
24
29
|
export interface EnrolledCourse {
|
|
25
30
|
id: number;
|
|
26
31
|
fullname: string;
|
|
@@ -38,28 +43,65 @@ export interface SuperVideoModule {
|
|
|
38
43
|
instance?: number;
|
|
39
44
|
isComplete: boolean;
|
|
40
45
|
}
|
|
41
|
-
export interface VideoActivity {
|
|
42
|
-
name: string;
|
|
43
|
-
url: string;
|
|
44
|
-
viewId: number;
|
|
45
|
-
duration: number;
|
|
46
|
-
existingPercent: number;
|
|
47
|
-
}
|
|
48
46
|
export interface QuizModule {
|
|
49
|
-
|
|
47
|
+
quizid: string;
|
|
50
48
|
name: string;
|
|
51
49
|
url: string;
|
|
52
50
|
isComplete: boolean;
|
|
51
|
+
attemptsUsed: number;
|
|
52
|
+
maxAttempts: number;
|
|
53
53
|
timeOpen?: number;
|
|
54
54
|
timeClose?: number;
|
|
55
55
|
}
|
|
56
|
-
export interface
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
56
|
+
export interface QuizAttempt {
|
|
57
|
+
attempt: number;
|
|
58
|
+
attemptid: number;
|
|
59
|
+
quizid: number;
|
|
60
|
+
userid: number;
|
|
61
|
+
attemptnumber: number;
|
|
62
|
+
state: string;
|
|
63
|
+
timestart: number;
|
|
64
|
+
timefinish?: number;
|
|
65
|
+
timemodified?: number;
|
|
66
|
+
timecheckstate?: number;
|
|
67
|
+
sumgrades?: number;
|
|
68
|
+
layout?: string;
|
|
69
|
+
uniqueid?: number;
|
|
70
|
+
preview?: boolean;
|
|
71
|
+
}
|
|
72
|
+
export interface QuizQuestion {
|
|
73
|
+
slot: number;
|
|
74
|
+
type: string;
|
|
75
|
+
typeid?: number;
|
|
76
|
+
id: number;
|
|
77
|
+
category?: number;
|
|
78
|
+
contextid?: number;
|
|
79
|
+
contextlevel?: string;
|
|
80
|
+
contextinstanceid?: number;
|
|
81
|
+
quizid: number;
|
|
82
|
+
maxmark: number;
|
|
83
|
+
minmark?: number;
|
|
84
|
+
number?: number;
|
|
85
|
+
page: number;
|
|
86
|
+
html?: string;
|
|
87
|
+
status?: string;
|
|
88
|
+
stateclass?: string;
|
|
89
|
+
sequencecheck?: number;
|
|
90
|
+
questionnumber?: string;
|
|
91
|
+
}
|
|
92
|
+
export interface QuizAttemptData {
|
|
93
|
+
attempt: QuizAttempt;
|
|
94
|
+
questions: Record<number, QuizQuestion>;
|
|
95
|
+
nextpage?: number;
|
|
96
|
+
prevpage?: number;
|
|
97
|
+
messages?: string[];
|
|
98
|
+
quizflags?: Record<number, boolean>;
|
|
99
|
+
}
|
|
100
|
+
export interface QuizStartResult {
|
|
101
|
+
attempt: QuizAttempt;
|
|
102
|
+
page?: number;
|
|
103
|
+
messages?: string[];
|
|
104
|
+
readonly?: boolean;
|
|
63
105
|
}
|
|
64
106
|
export interface ForumPost {
|
|
65
107
|
id: number;
|
|
@@ -95,88 +137,24 @@ export interface ForumDiscussion {
|
|
|
95
137
|
locked?: boolean;
|
|
96
138
|
starred?: boolean;
|
|
97
139
|
}
|
|
98
|
-
export interface
|
|
99
|
-
id: number;
|
|
100
|
-
subject: string;
|
|
101
|
-
content: string;
|
|
102
|
-
author: string;
|
|
103
|
-
authorId?: number;
|
|
104
|
-
courseId: number;
|
|
105
|
-
createdAt: number;
|
|
106
|
-
modifiedAt?: number;
|
|
107
|
-
attachments?: AnnouncementAttachment[];
|
|
108
|
-
unread?: boolean;
|
|
109
|
-
}
|
|
110
|
-
export interface AnnouncementAttachment {
|
|
111
|
-
filename: string;
|
|
112
|
-
url: string;
|
|
113
|
-
filesize: number;
|
|
114
|
-
mimetype: string;
|
|
115
|
-
}
|
|
116
|
-
export interface ResourceModule {
|
|
117
|
-
cmid: string;
|
|
118
|
-
name: string;
|
|
119
|
-
url: string;
|
|
120
|
-
courseId: number;
|
|
121
|
-
modType: string;
|
|
122
|
-
mimetype?: string;
|
|
123
|
-
filesize?: number;
|
|
124
|
-
modified?: number;
|
|
125
|
-
}
|
|
126
|
-
export interface FolderContents {
|
|
127
|
-
files: ResourceFile[];
|
|
128
|
-
folders: FolderInfo[];
|
|
129
|
-
}
|
|
130
|
-
export interface ResourceFile {
|
|
131
|
-
filename: string;
|
|
132
|
-
url: string;
|
|
133
|
-
filesize: number;
|
|
134
|
-
mimetype: string;
|
|
135
|
-
modified: number;
|
|
136
|
-
path?: string;
|
|
137
|
-
}
|
|
138
|
-
export interface FolderInfo {
|
|
139
|
-
name: string;
|
|
140
|
+
export interface CalendarEvent {
|
|
140
141
|
id: number;
|
|
141
|
-
path: string;
|
|
142
|
-
}
|
|
143
|
-
export interface AssignmentModule {
|
|
144
|
-
cmid: string;
|
|
145
142
|
name: string;
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
id: number;
|
|
159
|
-
assignmentId: number;
|
|
160
|
-
userId: number;
|
|
161
|
-
timemodified: number;
|
|
162
|
-
status: string;
|
|
163
|
-
files?: SubmissionFile[];
|
|
164
|
-
grade?: GradeInfo;
|
|
165
|
-
feedback?: string;
|
|
166
|
-
}
|
|
167
|
-
export interface SubmissionFile {
|
|
168
|
-
filename: string;
|
|
169
|
-
url: string;
|
|
170
|
-
filesize: number;
|
|
171
|
-
mimetype: string;
|
|
172
|
-
timemodified: number;
|
|
173
|
-
}
|
|
174
|
-
export interface GradeInfo {
|
|
175
|
-
grade: string;
|
|
176
|
-
gradeFormatted: string;
|
|
177
|
-
grader?: string;
|
|
143
|
+
description?: string;
|
|
144
|
+
format: number;
|
|
145
|
+
courseid?: number;
|
|
146
|
+
categoryid?: number;
|
|
147
|
+
groupid?: number;
|
|
148
|
+
userid?: number;
|
|
149
|
+
moduleid?: number;
|
|
150
|
+
modulename?: string;
|
|
151
|
+
instance?: number;
|
|
152
|
+
eventtype: string;
|
|
153
|
+
timestart: number;
|
|
154
|
+
timeduration?: number;
|
|
178
155
|
timedue?: number;
|
|
179
|
-
|
|
156
|
+
visible?: number;
|
|
157
|
+
location?: string;
|
|
180
158
|
}
|
|
181
159
|
export interface CourseGrade {
|
|
182
160
|
courseId: number;
|
|
@@ -198,75 +176,14 @@ export interface GradeItem {
|
|
|
198
176
|
feedback?: string;
|
|
199
177
|
graded?: boolean;
|
|
200
178
|
}
|
|
201
|
-
export interface
|
|
202
|
-
|
|
179
|
+
export interface ResourceModule {
|
|
180
|
+
cmid: string;
|
|
203
181
|
name: string;
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
moduleid?: number;
|
|
211
|
-
modulename?: string;
|
|
212
|
-
instance?: number;
|
|
213
|
-
eventtype: string;
|
|
214
|
-
timestart: number;
|
|
215
|
-
timeduration?: number;
|
|
216
|
-
timedue?: number;
|
|
217
|
-
visible?: number;
|
|
218
|
-
location?: string;
|
|
219
|
-
}
|
|
220
|
-
export interface QuestionParsing {
|
|
221
|
-
id: string;
|
|
222
|
-
text: string;
|
|
223
|
-
options: {
|
|
224
|
-
value: string;
|
|
225
|
-
text: string;
|
|
226
|
-
}[];
|
|
227
|
-
type: "radio" | "checkbox";
|
|
228
|
-
}
|
|
229
|
-
export interface QuestionAnswer {
|
|
230
|
-
questionId: string;
|
|
231
|
-
reasoning: string;
|
|
232
|
-
answerValues: string[];
|
|
233
|
-
}
|
|
234
|
-
export type OutputFormat = "json" | "csv" | "table" | "silent";
|
|
235
|
-
export interface OutputOptions {
|
|
236
|
-
format: OutputFormat;
|
|
237
|
-
fields?: string[];
|
|
238
|
-
pretty?: boolean;
|
|
239
|
-
}
|
|
240
|
-
export interface ProgressPayload {
|
|
241
|
-
view_id: number;
|
|
242
|
-
currenttime: number;
|
|
243
|
-
duration: number;
|
|
244
|
-
percent: number;
|
|
245
|
-
mapa: string;
|
|
246
|
-
}
|
|
247
|
-
export interface AjaxResponse {
|
|
248
|
-
error: boolean;
|
|
249
|
-
data?: {
|
|
250
|
-
success?: boolean;
|
|
251
|
-
exec?: string;
|
|
252
|
-
};
|
|
253
|
-
exception?: {
|
|
254
|
-
message: string;
|
|
255
|
-
errorcode: string;
|
|
256
|
-
};
|
|
257
|
-
}
|
|
258
|
-
export interface CommandContext {
|
|
259
|
-
page: Page;
|
|
260
|
-
session: SessionInfo;
|
|
261
|
-
config: AppConfig;
|
|
262
|
-
log: Logger;
|
|
263
|
-
}
|
|
264
|
-
export interface CommandOptions {
|
|
265
|
-
output?: OutputFormat;
|
|
266
|
-
courseUrl?: string;
|
|
267
|
-
courseId?: number;
|
|
268
|
-
verbose?: boolean;
|
|
269
|
-
headed?: boolean;
|
|
270
|
-
dryRun?: boolean;
|
|
182
|
+
url: string;
|
|
183
|
+
courseId: number;
|
|
184
|
+
modType: string;
|
|
185
|
+
mimetype?: string;
|
|
186
|
+
filesize?: number;
|
|
187
|
+
modified?: number;
|
|
271
188
|
}
|
|
272
189
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/lib/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/lib/types.ts"],"names":[],"mappings":"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"}
|
package/script/src/lib/types.js
CHANGED
|
@@ -34,4 +34,24 @@ export declare function shouldSilenceLogs(outputFormat: OutputFormat, verbose?:
|
|
|
34
34
|
* Replaces invalid characters with underscores and limits to maxLength.
|
|
35
35
|
*/
|
|
36
36
|
export declare function sanitizeFilename(name: string, maxLength?: number): string;
|
|
37
|
+
/**
|
|
38
|
+
* Get the session storage file path.
|
|
39
|
+
*/
|
|
40
|
+
export declare function getSessionPath(): string;
|
|
41
|
+
/**
|
|
42
|
+
* Format file size to KB with specified decimal places.
|
|
43
|
+
*/
|
|
44
|
+
export declare function formatFileSize(bytes: number, decimals?: number): string;
|
|
45
|
+
/**
|
|
46
|
+
* Format Moodle timestamp to localized string.
|
|
47
|
+
*/
|
|
48
|
+
export declare function formatMoodleDate(timestamp?: number): string;
|
|
49
|
+
/**
|
|
50
|
+
* 統一時間戳記轉換 (預設:本地時間字串)
|
|
51
|
+
*/
|
|
52
|
+
export declare function formatTimestamp(timestamp: number | undefined | null, format?: "iso" | "local" | "relative"): string;
|
|
53
|
+
/**
|
|
54
|
+
* 相對時間格式 (e.g., "2 hours ago")
|
|
55
|
+
*/
|
|
56
|
+
export declare function formatRelativeTime(timestamp: number): string;
|
|
37
57
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/src/lib/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAcnC;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAelD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAO1D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE;IAAE,eAAe,IAAI;QAAE,MAAM,CAAC,EAAE,YAAY,CAAA;KAAE,CAAA;CAAE,GAAG,YAAY,CAGvG;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAExF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY,GAAG,MAAM,CAK9E"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/src/lib/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAcnC;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAelD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAO1D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE;IAAE,eAAe,IAAI;QAAE,MAAM,CAAC,EAAE,YAAY,CAAA;KAAE,CAAA;CAAE,GAAG,YAAY,CAGvG;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAExF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY,GAAG,MAAM,CAK9E;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,GAAG,MAAM,CAE1E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAAE,MAAM,GAAE,KAAK,GAAG,OAAO,GAAG,UAAoB,GAAG,MAAM,CAQ5H;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAM5D"}
|
package/script/src/lib/utils.js
CHANGED
|
@@ -39,6 +39,11 @@ exports.extractCourseName = extractCourseName;
|
|
|
39
39
|
exports.getOutputFormat = getOutputFormat;
|
|
40
40
|
exports.shouldSilenceLogs = shouldSilenceLogs;
|
|
41
41
|
exports.sanitizeFilename = sanitizeFilename;
|
|
42
|
+
exports.getSessionPath = getSessionPath;
|
|
43
|
+
exports.formatFileSize = formatFileSize;
|
|
44
|
+
exports.formatMoodleDate = formatMoodleDate;
|
|
45
|
+
exports.formatTimestamp = formatTimestamp;
|
|
46
|
+
exports.formatRelativeTime = formatRelativeTime;
|
|
42
47
|
const dntShim = __importStar(require("../../_dnt.shims.js"));
|
|
43
48
|
const node_path_1 = require("node:path");
|
|
44
49
|
/**
|
|
@@ -121,3 +126,50 @@ function sanitizeFilename(name, maxLength = 200) {
|
|
|
121
126
|
.replace(/\s+/g, "_")
|
|
122
127
|
.substring(0, maxLength);
|
|
123
128
|
}
|
|
129
|
+
/**
|
|
130
|
+
* Get the session storage file path.
|
|
131
|
+
*/
|
|
132
|
+
function getSessionPath() {
|
|
133
|
+
const baseDir = getBaseDir();
|
|
134
|
+
return (0, node_path_1.resolve)(baseDir, ".auth", "storage-state.json");
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Format file size to KB with specified decimal places.
|
|
138
|
+
*/
|
|
139
|
+
function formatFileSize(bytes, decimals = 2) {
|
|
140
|
+
return (bytes / 1024).toFixed(decimals);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Format Moodle timestamp to localized string.
|
|
144
|
+
*/
|
|
145
|
+
function formatMoodleDate(timestamp) {
|
|
146
|
+
if (!timestamp || timestamp === 0)
|
|
147
|
+
return "無期限";
|
|
148
|
+
return new Date(timestamp * 1000).toLocaleString("zh-TW");
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* 統一時間戳記轉換 (預設:本地時間字串)
|
|
152
|
+
*/
|
|
153
|
+
function formatTimestamp(timestamp, format = "local") {
|
|
154
|
+
if (!timestamp || timestamp === 0)
|
|
155
|
+
return "無期限";
|
|
156
|
+
const date = new Date(timestamp * 1000);
|
|
157
|
+
if (format === "iso")
|
|
158
|
+
return date.toISOString();
|
|
159
|
+
if (format === "relative")
|
|
160
|
+
return formatRelativeTime(timestamp);
|
|
161
|
+
return date.toLocaleString("zh-TW");
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* 相對時間格式 (e.g., "2 hours ago")
|
|
165
|
+
*/
|
|
166
|
+
function formatRelativeTime(timestamp) {
|
|
167
|
+
const seconds = Math.floor(Date.now() / 1000) - timestamp;
|
|
168
|
+
if (seconds < 60)
|
|
169
|
+
return `${seconds} seconds ago`;
|
|
170
|
+
if (seconds < 3600)
|
|
171
|
+
return `${Math.floor(seconds / 60)} minutes ago`;
|
|
172
|
+
if (seconds < 86400)
|
|
173
|
+
return `${Math.floor(seconds / 3600)} hours ago`;
|
|
174
|
+
return `${Math.floor(seconds / 86400)} days ago`;
|
|
175
|
+
}
|