@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
package/script/src/lib/auth.js
CHANGED
|
@@ -1,4 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
@@ -6,6 +39,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
39
|
exports.findEdgePath = findEdgePath;
|
|
7
40
|
exports.launchAuthenticated = launchAuthenticated;
|
|
8
41
|
exports.closeBrowserSafely = closeBrowserSafely;
|
|
42
|
+
exports.createApiContext = createApiContext;
|
|
9
43
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
10
44
|
const node_path_1 = __importDefault(require("node:path"));
|
|
11
45
|
const playwright_core_1 = require("playwright-core");
|
|
@@ -96,17 +130,20 @@ async function launchAuthenticated(config, log) {
|
|
|
96
130
|
* Safely close browser and context with timeout.
|
|
97
131
|
* Designed for AI agent usage - no human interaction needed.
|
|
98
132
|
* If noWait is true, initiates cleanup but doesn't wait for completion.
|
|
133
|
+
*
|
|
134
|
+
* Note: Closes sequentially (context first, then browser) to avoid libuv
|
|
135
|
+
* assertion failures on Windows when handles are closed concurrently.
|
|
99
136
|
*/
|
|
100
137
|
async function closeBrowserSafely(browser, context, timeoutMs = 5000, noWait = false) {
|
|
101
138
|
const closePromises = [];
|
|
102
|
-
// Close context with error handling
|
|
139
|
+
// Close context first with error handling
|
|
103
140
|
if (context) {
|
|
104
141
|
closePromises.push(Promise.race([
|
|
105
142
|
context.close().catch(() => { }),
|
|
106
143
|
new Promise(resolve => setTimeout(() => resolve(), timeoutMs))
|
|
107
144
|
]));
|
|
108
145
|
}
|
|
109
|
-
// Close browser with error handling
|
|
146
|
+
// Close browser after context with error handling
|
|
110
147
|
closePromises.push(Promise.race([
|
|
111
148
|
browser.close().catch(() => { }),
|
|
112
149
|
new Promise(resolve => setTimeout(() => resolve(), timeoutMs))
|
|
@@ -116,7 +153,10 @@ async function closeBrowserSafely(browser, context, timeoutMs = 5000, noWait = f
|
|
|
116
153
|
Promise.allSettled(closePromises);
|
|
117
154
|
return;
|
|
118
155
|
}
|
|
119
|
-
|
|
156
|
+
// Wait sequentially to avoid libuv issues on Windows
|
|
157
|
+
for (const promise of closePromises) {
|
|
158
|
+
await promise.catch(() => { });
|
|
159
|
+
}
|
|
120
160
|
}
|
|
121
161
|
/**
|
|
122
162
|
* Attempt to restore a session from stored state.
|
|
@@ -200,3 +240,30 @@ async function login(page, config, log) {
|
|
|
200
240
|
}
|
|
201
241
|
log.success("Login completed successfully.");
|
|
202
242
|
}
|
|
243
|
+
/**
|
|
244
|
+
* Create API context for WS token operations (no browser required).
|
|
245
|
+
* Returns null if session is invalid or WS token is missing.
|
|
246
|
+
*/
|
|
247
|
+
async function createApiContext(options, command) {
|
|
248
|
+
const { createLogger } = await Promise.resolve().then(() => __importStar(require("./logger.js")));
|
|
249
|
+
const { loadWsToken } = await Promise.resolve().then(() => __importStar(require("./token.js")));
|
|
250
|
+
const { getOutputFormat, getSessionPath } = await Promise.resolve().then(() => __importStar(require("./utils.js")));
|
|
251
|
+
const opts = command?.optsWithGlobals ? command.optsWithGlobals() : options;
|
|
252
|
+
const outputFormat = command ? getOutputFormat(command) : "json";
|
|
253
|
+
const silent = outputFormat === "json" && !opts.verbose;
|
|
254
|
+
const log = createLogger(opts.verbose, silent, outputFormat);
|
|
255
|
+
const sessionPath = getSessionPath();
|
|
256
|
+
// Try to load WS token
|
|
257
|
+
const wsToken = loadWsToken(sessionPath);
|
|
258
|
+
if (!wsToken) {
|
|
259
|
+
console.error("未找到 WS token。請先執行 'openape login' 進行登入。");
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
return {
|
|
263
|
+
log,
|
|
264
|
+
session: {
|
|
265
|
+
wsToken,
|
|
266
|
+
moodleBaseUrl: "https://ilearning.cycu.edu.tw",
|
|
267
|
+
},
|
|
268
|
+
};
|
|
269
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/src/lib/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAOzC,wBAAgB,YAAY,CAAC,OAAO,UAAQ,EAAE,MAAM,UAAQ,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/src/lib/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAOzC,wBAAgB,YAAY,CAAC,OAAO,UAAQ,EAAE,MAAM,UAAQ,EAAE,YAAY,GAAE,MAAe,GAAG,MAAM,CAwBnG"}
|
package/script/src/lib/logger.js
CHANGED
|
@@ -3,14 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createLogger = createLogger;
|
|
4
4
|
const NO_COLOR = !!process.env.NO_COLOR;
|
|
5
5
|
const c = (code, text) => NO_COLOR ? text : `\x1b[${code}m${text}\x1b[0m`;
|
|
6
|
-
function createLogger(verbose = false, silent = false) {
|
|
6
|
+
function createLogger(verbose = false, silent = false, outputFormat = "json") {
|
|
7
|
+
const jsonError = outputFormat === "json";
|
|
8
|
+
const errorFn = jsonError
|
|
9
|
+
? (msg) => console.error(JSON.stringify({ error: msg }))
|
|
10
|
+
: (msg) => console.error(c("31", "[ERR]") + ` ${msg}`);
|
|
7
11
|
if (silent) {
|
|
8
|
-
// Silent logger - no output at all
|
|
9
12
|
return {
|
|
10
13
|
info: (_msg) => { },
|
|
11
14
|
success: (_msg) => { },
|
|
12
15
|
warn: (_msg) => { },
|
|
13
|
-
error:
|
|
16
|
+
error: errorFn,
|
|
14
17
|
debug: (_msg) => { },
|
|
15
18
|
};
|
|
16
19
|
}
|
|
@@ -18,7 +21,7 @@ function createLogger(verbose = false, silent = false) {
|
|
|
18
21
|
info: (msg) => console.error(c("36", "[INFO]") + ` ${msg}`),
|
|
19
22
|
success: (msg) => console.error(c("32", "[OK]") + ` ${msg}`),
|
|
20
23
|
warn: (msg) => console.error(c("33", "[WARN]") + ` ${msg}`),
|
|
21
|
-
error:
|
|
24
|
+
error: errorFn,
|
|
22
25
|
debug: (msg) => {
|
|
23
26
|
if (verbose)
|
|
24
27
|
console.error(c("90", "[DBG]") + ` ${msg}`);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Page } from "playwright-core";
|
|
2
|
-
import type { SessionInfo, Logger, EnrolledCourse, SuperVideoModule, QuizModule, ResourceModule, ForumDiscussion, ForumPost, CalendarEvent, CourseGrade } from "./types.js";
|
|
2
|
+
import type { SessionInfo, Logger, EnrolledCourse, SuperVideoModule, QuizModule, QuizAttemptData, QuizStartResult, ResourceModule, ForumDiscussion, ForumPost, CalendarEvent, CourseGrade } from "./types.js";
|
|
3
3
|
/**
|
|
4
4
|
* Direct HTTP API call without browser (for WS API only).
|
|
5
5
|
* This is much faster than browser-based calls.
|
|
@@ -53,6 +53,7 @@ export declare function getForumsApi(session: {
|
|
|
53
53
|
id: number;
|
|
54
54
|
cmid: number;
|
|
55
55
|
name: string;
|
|
56
|
+
intro: string;
|
|
56
57
|
courseid: number;
|
|
57
58
|
timemodified: number;
|
|
58
59
|
}>>;
|
|
@@ -77,6 +78,43 @@ export declare function getDiscussionPostsApi(session: {
|
|
|
77
78
|
wsToken: string;
|
|
78
79
|
moodleBaseUrl: string;
|
|
79
80
|
}, discussionId: number): Promise<ForumPost[]>;
|
|
81
|
+
/**
|
|
82
|
+
* Delete a forum post. If the post is a discussion's topic post,
|
|
83
|
+
* the entire discussion is deleted.
|
|
84
|
+
*/
|
|
85
|
+
export declare function deleteForumPostApi(session: {
|
|
86
|
+
wsToken: string;
|
|
87
|
+
moodleBaseUrl: string;
|
|
88
|
+
}, postId: number): Promise<{
|
|
89
|
+
success: boolean;
|
|
90
|
+
error?: string;
|
|
91
|
+
}>;
|
|
92
|
+
/**
|
|
93
|
+
* Add a new discussion to a forum.
|
|
94
|
+
*/
|
|
95
|
+
export declare function addForumDiscussionApi(session: {
|
|
96
|
+
wsToken: string;
|
|
97
|
+
moodleBaseUrl: string;
|
|
98
|
+
}, forumId: number, subject: string, message: string): Promise<{
|
|
99
|
+
success: boolean;
|
|
100
|
+
discussionId?: number;
|
|
101
|
+
error?: string;
|
|
102
|
+
}>;
|
|
103
|
+
/**
|
|
104
|
+
* Add a reply post to a discussion.
|
|
105
|
+
*/
|
|
106
|
+
export declare function addForumPostApi(session: {
|
|
107
|
+
wsToken: string;
|
|
108
|
+
moodleBaseUrl: string;
|
|
109
|
+
}, postId: number, // Parent post ID to reply to
|
|
110
|
+
subject: string, message: string, options?: {
|
|
111
|
+
inlineAttachmentId?: number;
|
|
112
|
+
attachmentId?: number;
|
|
113
|
+
}): Promise<{
|
|
114
|
+
success: boolean;
|
|
115
|
+
postId?: number;
|
|
116
|
+
error?: string;
|
|
117
|
+
}>;
|
|
80
118
|
/**
|
|
81
119
|
* Get all resource modules in a course.
|
|
82
120
|
*/
|
|
@@ -218,6 +256,52 @@ export declare function getQuizzesByCoursesApi(session: {
|
|
|
218
256
|
wsToken: string;
|
|
219
257
|
moodleBaseUrl: string;
|
|
220
258
|
}, courseIds: number[]): Promise<QuizModuleWithCourse[]>;
|
|
259
|
+
/**
|
|
260
|
+
* Start a new quiz attempt via pure WS API.
|
|
261
|
+
*/
|
|
262
|
+
export declare function startQuizAttemptApi(session: {
|
|
263
|
+
wsToken: string;
|
|
264
|
+
moodleBaseUrl: string;
|
|
265
|
+
}, quizId: string, options?: {
|
|
266
|
+
forcenew?: boolean;
|
|
267
|
+
precheck?: boolean;
|
|
268
|
+
}): Promise<QuizStartResult>;
|
|
269
|
+
/**
|
|
270
|
+
* Get quiz attempt data including questions via pure WS API.
|
|
271
|
+
*/
|
|
272
|
+
export declare function getAllQuizAttemptDataApi(session: {
|
|
273
|
+
wsToken: string;
|
|
274
|
+
moodleBaseUrl: string;
|
|
275
|
+
}, attemptId: number): Promise<QuizAttemptData>;
|
|
276
|
+
export declare function getQuizAttemptDataApi(session: {
|
|
277
|
+
wsToken: string;
|
|
278
|
+
moodleBaseUrl: string;
|
|
279
|
+
}, attemptId: number, page?: number): Promise<QuizAttemptData>;
|
|
280
|
+
/**
|
|
281
|
+
* Process (save answers / finish) a quiz attempt via WS API.
|
|
282
|
+
*
|
|
283
|
+
* Answer formats:
|
|
284
|
+
* - Single choice (multichoice): { slot, answer: "0" }
|
|
285
|
+
* - Multiple choice (multichoices): { slot, answer: "0,2,3" } (comma-separated choice indices)
|
|
286
|
+
* - Short answer (shortanswer): { slot, answer: "text answer" }
|
|
287
|
+
*
|
|
288
|
+
* @param session - WS session
|
|
289
|
+
* @param attemptId - The attempt ID
|
|
290
|
+
* @param uniqueId - The usage attempt uniqueid (from attempt data)
|
|
291
|
+
* @param answers - Array of { slot, answer } pairs
|
|
292
|
+
* @param sequenceChecks - Map of slot -> sequencecheck value (required for deferredfeedback)
|
|
293
|
+
* @param finish - Whether to finish the attempt after saving
|
|
294
|
+
*/
|
|
295
|
+
export declare function processQuizAttemptApi(session: {
|
|
296
|
+
wsToken: string;
|
|
297
|
+
moodleBaseUrl: string;
|
|
298
|
+
}, attemptId: number, uniqueId: number, answers: Array<{
|
|
299
|
+
slot: number;
|
|
300
|
+
answer: string;
|
|
301
|
+
}>, sequenceChecks: Map<number, number>, finish?: boolean): Promise<{
|
|
302
|
+
state: string;
|
|
303
|
+
warnings?: unknown[];
|
|
304
|
+
}>;
|
|
221
305
|
/**
|
|
222
306
|
* Get resources in courses via pure WS API.
|
|
223
307
|
*/
|
|
@@ -225,6 +309,104 @@ export declare function getResourcesByCoursesApi(session: {
|
|
|
225
309
|
wsToken: string;
|
|
226
310
|
moodleBaseUrl: string;
|
|
227
311
|
}, courseIds: number[]): Promise<ResourceModule[]>;
|
|
312
|
+
/**
|
|
313
|
+
* Extended AssignmentModule with courseId for API responses.
|
|
314
|
+
*/
|
|
315
|
+
export interface AssignmentModuleWithCourse {
|
|
316
|
+
id: number;
|
|
317
|
+
cmid: string;
|
|
318
|
+
name: string;
|
|
319
|
+
url: string;
|
|
320
|
+
courseId: number;
|
|
321
|
+
duedate?: number;
|
|
322
|
+
cutoffdate?: number;
|
|
323
|
+
allowSubmissionsFromDate?: number;
|
|
324
|
+
gradingduedate?: number;
|
|
325
|
+
lateSubmission?: boolean;
|
|
326
|
+
extensionduedate?: number;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Get assignments in courses via pure WS API.
|
|
330
|
+
*/
|
|
331
|
+
export declare function getAssignmentsByCoursesApi(session: {
|
|
332
|
+
wsToken: string;
|
|
333
|
+
moodleBaseUrl: string;
|
|
334
|
+
}, courseIds: number[]): Promise<AssignmentModuleWithCourse[]>;
|
|
335
|
+
/**
|
|
336
|
+
* Get assignment submission status via pure WS API.
|
|
337
|
+
*/
|
|
338
|
+
export declare function getSubmissionStatusApi(session: {
|
|
339
|
+
wsToken: string;
|
|
340
|
+
moodleBaseUrl: string;
|
|
341
|
+
}, assignmentId: number): Promise<{
|
|
342
|
+
submitted: boolean;
|
|
343
|
+
graded: boolean;
|
|
344
|
+
grader: string | null;
|
|
345
|
+
grade: string | null;
|
|
346
|
+
feedback: string | null;
|
|
347
|
+
lastModified: number | null;
|
|
348
|
+
extensions: Array<{
|
|
349
|
+
id: number;
|
|
350
|
+
filename: string;
|
|
351
|
+
filesize: number;
|
|
352
|
+
}>;
|
|
353
|
+
}>;
|
|
354
|
+
/**
|
|
355
|
+
* Save/submit an assignment via pure WS API.
|
|
356
|
+
* Supports online text submissions and file submissions (by draft ID).
|
|
357
|
+
*/
|
|
358
|
+
export declare function saveSubmissionApi(session: {
|
|
359
|
+
wsToken: string;
|
|
360
|
+
moodleBaseUrl: string;
|
|
361
|
+
}, assignmentId: number, options: {
|
|
362
|
+
onlineText?: {
|
|
363
|
+
text: string;
|
|
364
|
+
format?: number;
|
|
365
|
+
};
|
|
366
|
+
fileId?: number;
|
|
367
|
+
plugintype?: "onlinetext" | "file" | "comments";
|
|
368
|
+
}): Promise<{
|
|
369
|
+
success: boolean;
|
|
370
|
+
error?: string;
|
|
371
|
+
}>;
|
|
372
|
+
/**
|
|
373
|
+
* Generate a unique draft item ID.
|
|
374
|
+
* Uses timestamp (last 8 digits) to ensure uniqueness.
|
|
375
|
+
*/
|
|
376
|
+
export declare function generateDraftItemId(): number;
|
|
377
|
+
/**
|
|
378
|
+
* Upload a file to Moodle draft area via pure WS API.
|
|
379
|
+
* This is the first step before submitting files to assignments, forums, etc.
|
|
380
|
+
*
|
|
381
|
+
* Note: We generate our own draft item ID instead of asking Moodle for one.
|
|
382
|
+
*/
|
|
383
|
+
export declare function uploadFileApi(session: {
|
|
384
|
+
wsToken: string;
|
|
385
|
+
moodleBaseUrl: string;
|
|
386
|
+
}, filePath: string, options?: {
|
|
387
|
+
draftId?: number;
|
|
388
|
+
filename?: string;
|
|
389
|
+
filepath?: string;
|
|
390
|
+
}): Promise<{
|
|
391
|
+
success: boolean;
|
|
392
|
+
draftId?: number;
|
|
393
|
+
error?: string;
|
|
394
|
+
}>;
|
|
395
|
+
/**
|
|
396
|
+
* Get user's private files (not draft) via pure WS API.
|
|
397
|
+
* Draft files are temporary and cannot be listed, but private files can.
|
|
398
|
+
*/
|
|
399
|
+
export declare function getDraftFilesApi(session: {
|
|
400
|
+
wsToken: string;
|
|
401
|
+
moodleBaseUrl: string;
|
|
402
|
+
}): Promise<Array<{
|
|
403
|
+
itemId: number;
|
|
404
|
+
filename: string;
|
|
405
|
+
filesize: number;
|
|
406
|
+
filepath: string;
|
|
407
|
+
timeModified: number;
|
|
408
|
+
url: string;
|
|
409
|
+
}>>;
|
|
228
410
|
export interface Message {
|
|
229
411
|
id: number;
|
|
230
412
|
useridfrom: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moodle.d.ts","sourceRoot":"","sources":["../../../src/src/lib/moodle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"moodle.d.ts","sourceRoot":"","sources":["../../../src/src/lib/moodle.ts"],"names":[],"mappings":"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"}
|