npm install @lingara/embed@0.1.0-alpha.6# No bundler? One module script instead:# <script type="module" src="https://cdn.jsdelivr.net/npm/@lingara/embed@0.1.0-alpha.6/dist/lingara-embed.min.js"></script>
<!-- plan-id is a lesson plan your server made for this player. --><lingara-embed surface="practice" plan-id="0b9d4f2e-3c1a-4e8b-9f6d-2a7c5e1b8d40" theme="auto" title="Practice"></lingara-embed><script type="module"> import { defineLingaraEmbed } from '@lingara/embed' defineLingaraEmbed()</script>
// Your own endpoint, on your own server. It mints with this page's origin and// returns exactly { token, expires_at }: the token (lgr_et_…) never touches a URL.widget.tokenProvider = async () => { const response = await fetch('/lingara/token', { method: 'POST', credentials: 'same-origin' }) if (!response.ok) throw new Error(`token endpoint answered ${response.status}`) return response.json()}
widget.addEventListener('lingara:practice-completed', (event) => { const { planId, setNumber, correct, total } = (event as CustomEvent).detail console.log(`set ${setNumber} of ${planId}: ${correct}/${total}`)})widget.addEventListener('lingara:error', (event) => { const { code, retryable } = (event as CustomEvent).detail // `retryable` means a remount may succeed; when to try is yours to decide. if (retryable) setTimeout(() => widget.reload(), 30_000) else console.warn('Lingara practice stopped:', code)})