{"_id":"@artim-academy/lms-lesson-sdk","_rev":"3-d2c31bd04f23f07fe6e768f1839f372d","name":"@artim-academy/lms-lesson-sdk","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@artim-academy/lms-lesson-sdk","version":"0.1.0","keywords":["lms","lesson","sdk","artim"],"license":"UNLICENSED","_id":"@artim-academy/lms-lesson-sdk@0.1.0","maintainers":[{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"}],"dist":{"shasum":"9c52d07c09e3b44f588991625faa5679b0ab7b33","tarball":"https://registry.npmjs.org/@artim-academy/lms-lesson-sdk/-/lms-lesson-sdk-0.1.0.tgz","fileCount":6,"integrity":"sha512-Loa7FWdsLt4Ss1U6sSqlEpZNFTdfzuaTEb1FF0E8dCGSBdSInkOS3vLajRZyb4m5WQ39RWXv95o1k8eBYX0L8g==","signatures":[{"sig":"MEUCIFnv4ag8dsS/3wWUoMnFrVCNXB7p9yRhE+M2wcGoOzDoAiEA8S3HFr0r9v85uCqoQnvvVA4uU2ahIVl9FeY9YB/oIDw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23576},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"b2269aa857332e110ce16b6af5942b4251bd4fd9","scripts":{"build":"tsup src/index.ts --format esm,cjs --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"},"_npmVersion":"11.12.1","description":"SDK for building external lesson apps for the Artim Academy LMS. Parse launch tokens, fetch lesson/user/course data and control lesson progress.","directories":{},"_nodeVersion":"26.0.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/lms-lesson-sdk_0.1.0_1781204835527_0.515191110053079","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@artim-academy/lms-lesson-sdk","version":"0.1.1","keywords":["lms","lesson","sdk","artim"],"license":"UNLICENSED","_id":"@artim-academy/lms-lesson-sdk@0.1.1","maintainers":[{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"}],"dist":{"shasum":"1955f2f62f64ac34b92efa8c58dfdce3ce88df78","tarball":"https://registry.npmjs.org/@artim-academy/lms-lesson-sdk/-/lms-lesson-sdk-0.1.1.tgz","fileCount":6,"integrity":"sha512-Sc/I3pdeWJKYXddRE3Cz+eFJTjAZZce27wkFtDY3yas6ErpIiJGqfL+i+SBEM0KMIR5RGT1nKff9zg+ITy1acA==","signatures":[{"sig":"MEUCIC7OLp0r0JC8E3fUW+bkHLXR5fF722jMscRcQiJp/NgTAiEA3yq0VtrItMd5rqjOQ4bxIHjSHXjqEFbRfHLNwh+3+f4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23576},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"4c4f32c9764af34729027a27435cbf70264754e8","scripts":{"build":"tsup src/index.ts --format esm,cjs --dts --clean","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"},"_npmVersion":"11.12.1","description":"SDK for building external lesson apps for the Artim Academy LMS. Parse launch tokens, fetch lesson/user/course data and control lesson progress.","directories":{},"_nodeVersion":"26.0.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/lms-lesson-sdk_0.1.1_1781223403523_0.45549238450425533","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@artim-academy/lms-lesson-sdk","version":"0.1.2","description":"SDK for building external lesson apps for the Artim Academy LMS. Parse launch tokens, fetch lesson/user/course data and control lesson progress.","license":"UNLICENSED","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"publishConfig":{"access":"public"},"scripts":{"build":"tsup src/index.ts --format esm,cjs --dts --clean","typecheck":"tsc --noEmit"},"devDependencies":{"tsup":"^8.0.0","typescript":"^5.4.0"},"keywords":["lms","lesson","sdk","artim"],"gitHead":"57b18a049ab5f1a0c8fbc83cd13b2465b1972b5e","_id":"@artim-academy/lms-lesson-sdk@0.1.2","_nodeVersion":"26.0.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-BaVSFcEhCjqQ6lYHlWWLuQXy1p5aE4yKH/ihCJGsNFDEwpN5oiNhu9BIel72G7MiTXHFhok7/YjB6705KkD6Wg==","shasum":"e5b7fb6ba2e8867588351300f94328a5e9b8651b","tarball":"https://registry.npmjs.org/@artim-academy/lms-lesson-sdk/-/lms-lesson-sdk-0.1.2.tgz","fileCount":6,"unpackedSize":23576,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHVQzeF72IVgnKdHjh3rAs1mYWhC/BkSjWsLUcNL/nY7AiAjMaOaPZnVj4xoLWIb3+TZ342EAQQl1oAvTGJyBs6Cyw=="}]},"_npmUser":{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"},"directories":{},"maintainers":[{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lms-lesson-sdk_0.1.2_1781266037798_0.7739646742630002"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-11T19:07:15.302Z","modified":"2026-06-12T12:07:18.132Z","0.1.0":"2026-06-11T19:07:15.683Z","0.1.1":"2026-06-12T00:16:43.668Z","0.1.2":"2026-06-12T12:07:18.000Z"},"license":"UNLICENSED","keywords":["lms","lesson","sdk","artim"],"description":"SDK for building external lesson apps for the Artim Academy LMS. Parse launch tokens, fetch lesson/user/course data and control lesson progress.","maintainers":[{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"}],"readme":"# @artim-academy/lms-lesson-sdk\n\nSDK zum Bauen externer Lesson-Apps für das Artim Academy LMS. Eine externe App wird im LMS als **App** registriert (Trainer → Apps → New App bzw. Course → Add Lesson → Apply), vom Platform-Administrator approved und dann als Lesson vom Typ **External** in einen Kurs eingebunden.\n\n## Ablauf\n\n1. Student öffnet die External Lesson im LMS.\n2. Beim ersten Mal erscheint ein Authorization-Screen (pro User, pro Tenant) mit den Scopes der App.\n3. Nach Autorisierung stellt das LMS ein kurzlebiges Launch-Token aus und leitet auf die hinterlegte URL weiter:\n\n```\nhttps://deine-app.example.com/lesson?lms_token=…&lms_tenant_id=…&lms_course_id=…&lms_lesson_id=…&lms_client_id=…\n```\n\n4. Deine App nutzt das Token über dieses SDK, um Daten zu lesen und die Lesson zu steuern.\n\n## Installation\n\n```bash\nnpm install @artim-academy/lms-lesson-sdk\n```\n\n## Nutzung (Next.js)\n\n### Client Component\n\n```tsx\n\"use client\"\nimport { LmsLessonClient } from \"@artim-academy/lms-lesson-sdk\"\n\nconst lms = LmsLessonClient.fromCurrentUrl()\n\nconst ctx = await lms.getContext()     // App, Tenant, Lesson, User-Id, Scopes\nconst lesson = await lms.getLesson()   // scope: lesson:read\nconst user = await lms.getUser()       // scope: user:profile\nconst progress = await lms.getProgress() // scope: progress:read\n\n// Wenn der Student fertig ist:\nawait lms.completeLesson()             // scope: lesson:complete\nlms.returnToLms()                      // zurück zur Lesson-Seite im LMS\n```\n\n### Server (App Router)\n\n```tsx\nimport { LmsLessonClient } from \"@artim-academy/lms-lesson-sdk\"\n\nexport default async function Page({ searchParams }: { searchParams: Record<string, string> }) {\n  if (!LmsLessonClient.isLaunchRequest(searchParams)) return <p>Bitte über das LMS öffnen.</p>\n  const lms = LmsLessonClient.fromSearchParams(searchParams)\n  const ctx = await lms.getContext()\n  return <h1>Hallo, Lesson {ctx.lessonId}</h1>\n}\n```\n\n## Scopes\n\n| Scope | Erlaubt |\n| --- | --- |\n| `lesson:read` | Lesson-Details lesen (`getLesson`) |\n| `lesson:complete` | Lesson als abgeschlossen markieren (`completeLesson`) |\n| `course:read` | Kursdaten lesen (`getCourse`) |\n| `user:profile` | Basisprofil des Studenten lesen (`getUser`) |\n| `progress:read` | Kursfortschritt lesen (`getProgress`) |\n\n`getContext()` funktioniert immer (nur mit gültigem Token), unabhängig von Scopes.\n\n## Token-Lebensdauer\n\nLaunch-Tokens sind opak, an genau eine Lesson + einen User gebunden und laufen nach 2 Stunden ab. Eine abgelaufene Session erkennt man an `LmsSdkError` mit `status === 403` — dann den Studenten über `returnToLms()` zurückschicken, ein erneutes Öffnen erzeugt ein frisches Token.\n\n## Build\n\n```bash\nnpm install\nnpm run build   # dist/ (ESM + CJS + Typen)\n```\n","readmeFilename":"README.md"}