@lessonkit/xapi
v1.7.3
Published
xAPI statement generation primitives for LessonKit.
Maintainers
Readme
@lessonkit/xapi
xAPI statement generation, in-memory queueing, and telemetry-to-xAPI mapping.
Requires Node.js 18+ minimum; 20.19+ recommended for CLI scaffold workflows (Vite 8).
Install
npm install @lessonkit/xapi @lessonkit/coreUsage
import { createFetchTransport, createXAPIClient, telemetryEventToXAPIStatement } from "@lessonkit/xapi";
const { transport, exitTransport } = createFetchTransport({
url: "/api/xapi/statements",
timeoutMs: 30_000,
});
const xapi = createXAPIClient({
courseId: "my-course",
transport,
exitTransport,
});
xapi.completeLesson({ lessonId: "lesson-1", durationMs: 1200, success: true });
await xapi.flush();
xapi.flushOnExit?.(); // pagehide keepalive deliveryMap from telemetry events: telemetryEventToXAPIStatement(event) — uses canonical LessonKit URNs.
Batch analytics sink:
import { createFetchBatchSink } from "@lessonkit/xapi";
const { batchSink, exitBatchSink } = createFetchBatchSink({ url: "/api/telemetry/batch" });Behavior
- No transport → statements queue in memory (dev warns once).
- Transport failure → re-queue; call
flush()to retry. - Queue capped at 1000 statements by default; oldest dropped when full (
onCap/createInMemoryXAPIQueue({ onCap })). - Concurrent
flush()calls are coalesced. createFetchTransportretries with exponential backoff and usesAbortSignal.timeoutwhen available.
Docs
5-minute guide · LMS Go-Live · Backend proxy cookbook · TypeDoc API index
License
Apache-2.0
