const required = name => { const value = process.env[name]; if (!value) throw new Error("Set " + name); return value; }; const authorization = "Basic " + Buffer.from( required("SCORMBOX_API_KEY") + ":" + required("SCORMBOX_API_SECRET") ).toString("base64"); const course_path = "/courses/" + encodeURIComponent(required("SCORMBOX_COURSE_ID")); const user = { name: required("SCORMBOX_LEARNER_NAME"), email: required("SCORMBOX_LEARNER_EMAIL") }; async function request(path, body) { const response = await fetch("https://scormbox.com/api/v1" + path, { method: body === undefined ? "GET" : "POST", redirect: "error", signal: AbortSignal.timeout(20000), headers: { Authorization: authorization, "Content-Type": "application/json" }, body: body === undefined ? undefined : JSON.stringify(body) }); if (!response.ok) throw new Error("SCORMBox HTTP " + response.status); return response.json(); } const session = await request(course_path + "/sessions", { user, origin: required("SCORMBOX_ORIGIN"), attempt_mode: "resume" }); // Deliver session.launch_token only to this learner's authorized browser page. const result = await request(course_path + "/results?" + new URLSearchParams({ email: user.email })); console.log(JSON.stringify(result, null, 2));