Saltar al contenido principal

moodle-driver

Control total de Moodle como cualquier usuario, con su propio inicio de sesión: sin servicios web, sin tokens, sin administrador.

Sin servicios web, sin tokens

Funciona donde los servicios web están desactivados o no se permiten tokens: la persona inicia sesión una vez, con inicio de sesión único y doble factor incluidos, y el driver trabaja con esa sesión. Nunca maneja una contraseña.

Control total como cualquier usuario

Todo lo que la persona puede hacer: leer cursos y contenidos, entregar y responder como estudiante, calificar, crear actividades, llevar foros y el libro de calificaciones como profesor.

Los propios servicios de Moodle

Llama a los servicios AJAX que llaman las páginas de Moodle, con la sesión de la persona, y rellena los formularios de Moodle donde ningún servicio sirve, con la validación de Moodle.

Cualquier idioma, cualquier tema

Lee Moodle por ids, atributos de datos, nombres de campo y URL, nunca por el texto visible. Los resultados son datos simples con fechas ISO.

Al ritmo de una persona

Las acciones de estudiante pueden leer y responder página a página al ritmo de un lector, para que Moodle registre las vistas y la finalización como las de una persona.

Preparado para políticas

Cada función declara los datos que toca: los propios, el contenido del curso, el trabajo de otros, la calificación, la comunicación. Permite solo los tipos en los que confías.

Inicia sesión una vez y trabaja en el sitio

La persona inicia sesión a mano en una ventana del navegador, una sola vez; la sesión queda en un perfil en disco. Cada operación es un método del objeto Moodle, recibe ids y opciones, y devuelve datos simples.

import { createMoodle } from "@falkenslab/moodle-driver";

const moodle = createMoodle({ site: "https://campus.example.org/", profileDir: "/home/me/.moodle-profile", headless: true, downloadBrowser: true });
await moodle.logIn({ timeoutMs: 300_000 }); // a window opens only the first time

const courses = await moodle.listCourses();
const { submissions } = await moodle.assignmentSubmissions(35);
for (const s of submissions.filter((s) => s.needsGrading)) {
await moodle.gradeSubmission(35, s.userId, { grade: "8", feedback: "<p>Good work.</p>" });
}
await moodle.close();