- TypeScript 98%
- JavaScript 1.2%
- Ruby 0.8%
|
|
||
|---|---|---|
| .forgejo/workflows | ||
| src | ||
| tests | ||
| .gitignore | ||
| Dockerfile.builder | ||
| manifest.json | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
| tsconfig.test.json | ||
| webpack.config.js | ||
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_metadatasupplieskayer_annotation_tokenandkayer_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.annotationInfois 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.