BigBlueButton HTML5 client plugin for Kayer classroom textbook library presentation
  • TypeScript 98%
  • JavaScript 1.2%
  • Ruby 0.8%
Find a file
wardaddyov 32690d6f0b
All checks were successful
CI/CD Pipeline / pipeline (push) Successful in 35s
feat(annotation): added annotations persistance mechansim
2026-09-11 10:21:20 +03:30
.forgejo/workflows feat(library-plugin): initialize standalone BigBlueButton textbook library plugin 2026-09-10 13:07:59 +03:30
src feat(annotation): added annotations persistance mechansim 2026-09-11 10:21:20 +03:30
tests feat(annotation): added annotations persistance mechansim 2026-09-11 10:21:20 +03:30
.gitignore feat(annotation): added annotations persistance mechansim 2026-09-11 10:21:20 +03:30
Dockerfile.builder feat(library-plugin): initialize standalone BigBlueButton textbook library plugin 2026-09-10 13:07:59 +03:30
manifest.json feat(library-plugin): initialize standalone BigBlueButton textbook library plugin 2026-09-10 13:07:59 +03:30
package-lock.json feat(annotation): added annotations persistance mechansim 2026-09-11 10:21:20 +03:30
package.json feat(annotation): added annotations persistance mechansim 2026-09-11 10:21:20 +03:30
README.md feat(annotation): added annotations persistance mechansim 2026-09-11 10:21:20 +03:30
tsconfig.json feat(library-plugin): initialize standalone BigBlueButton textbook library plugin 2026-09-10 13:07:59 +03:30
tsconfig.test.json feat(annotation): added annotations persistance mechansim 2026-09-11 10:21:20 +03:30
webpack.config.js feat(library-plugin): initialize standalone BigBlueButton textbook library plugin 2026-09-10 13:07:59 +03:30

Kayer Library Plugin

The existing Farsi BBB library panel now includes classroom-scoped persistence of native drawing annotations for managed library PDFs. The capture/restore worker remains mounted when the library panel closes. It needs the companion Kayer V3 annotation API and a fresh authenticated teacher join link.

Build and verify

npm ci
npm run typecheck
npm test
npm run build

Output: dist/KayerLibraryPlugin.js and manifest.json. Publish them together under a new versioned asset directory; do not overwrite a live shared bundle before testing. Keep javascriptEntrypointUrl relative to that directory and retain other configured BBB plugins. The production build currently exceeds webpack's advisory 244 KiB asset budget; the warning does not fail the build.

Integration contract

  • BBB adapter: 3.0.35, stored scene codec bbb-3.0.35-v1.
  • SDK dependency stays pinned to the existing 0.0.99; the manifest retains ~0.0.99. Custom GraphQL interfaces require review on each BBB upgrade.
  • Private user_metadata supplies kayer_annotation_token and kayer_api_base. No capability is embedded in the public manifest or JavaScript bundle.
  • A single teacher browser acquires a fenced writer lease per classroom/PDF. Capture is browser-only; the API persists snapshots but never subscribes to BBB on the teacher's behalf.
  • pres_annotation_curr.annotationInfo is JSON text. An empty string is a deletion; an empty query after navigation is not. Poll results are excluded.
  • Imports call native presAnnotationSubmit, remap ownership/references, and wait for observed BBB records before saving. Restoring needs presenter or whiteboard-write access. Existing live edits/deletions are not overwritten by an interrupted import retry once observed. Wait for import confirmation before editing: native upserts cannot atomically protect edits not yet observed by this browser.
  • The library uses server-resolved catalog IDs and insertion-specific filenames to correlate conversions. The stable key is classroom + actual PDF SHA-256, not the filename. PDF bytes and BBB's conversion-cache configuration stay unchanged.

Foreground saves target 1 second after idle / roughly 5 seconds of continuous observed changes, plus scheduling and network latency. Unsaved state is only in browser memory. Closing the last writer or a prolonged outage can lose changes since the last confirmed save. The Farsi status and warnings report save state. Only visited pages are restored, so native full-PDF export may omit unvisited saved pages.

Release gate

The core protocol tests and build are locally verified. The updated bundle has not been deployed or verified in a real BBB browser across two meetings. Do not infer recording/export or native editing compatibility from unit tests.

The full architecture, API routes, SQL migration, retention/recovery policy, configuration, rollout/rollback procedure, and live acceptance checklist are in the sibling backend document: ../kayer-full-backend-v3/docs/integrations/bigbluebutton-annotations.md.

No BBB core/DOM modification, BBB restart, Redis daemon, or Scalelite patch is part of this feature. Old join links keep ordinary library controls but do not provide durable annotation capture.