No description
  • TypeScript 67.9%
  • JavaScript 30.9%
  • Ruby 1.2%
Find a file
wardaddyov 0dfe3a9aa5
All checks were successful
CI/CD Pipeline / pipeline (push) Successful in 42s
ui(attendance): show disconnect times without seconds
2026-10-05 14:25:30 +03:30
.forgejo/workflows feat(ci): make CI/CD pipeline 100% self-contained and intranet-independent 2026-09-10 11:26:50 +03:30
src ui(attendance): show disconnect times without seconds 2026-10-05 14:25:30 +03:30
tests ui(attendance): show disconnect times without seconds 2026-10-05 14:25:30 +03:30
.gitignore feat(plugin): initial implementation of Kayer BBB Attendance Plugin 2026-09-08 09:46:54 +03:30
Dockerfile.builder feat(ci): make CI/CD pipeline 100% self-contained and intranet-independent 2026-09-10 11:26:50 +03:30
manifest.json feat(plugin): initial implementation of Kayer BBB Attendance Plugin 2026-09-08 09:46:54 +03:30
package-lock.json feat(plugin): initial implementation of Kayer BBB Attendance Plugin 2026-09-08 09:46:54 +03:30
package.json fix(attendance): preserve React hook order during SDK initialization 2026-10-05 11:39:26 +03:30
README.md fix(attendance): preserve React hook order during SDK initialization 2026-10-05 11:39:26 +03:30
tsconfig.json feat(plugin): initial implementation of Kayer BBB Attendance Plugin 2026-09-08 09:46:54 +03:30
webpack.config.js feat(plugin): initial implementation of Kayer BBB Attendance Plugin 2026-09-08 09:46:54 +03:30

Kayer attendance plugin

The moderator's attendance panel combines the Kayer classroom roster, BBB's current users, and the BBB 3.0 learning dashboard. Students are matched by their Kayer PersonId / BBB external user ID.

  • حاضر: currently connected, with accumulated attendance duration.
  • قطع اتصال: has recorded sessions but is currently absent; shows duration and the latest BBB-detected disconnect or final leave time.
  • هنوز وارد نشده: absent with no recorded sessions in the successful dashboard response.

The dashboard is fetched from the current worker every five seconds using the SDK's moderator session token, including while the panel is closed. Current-session durations advance locally every second. Reconnects add their session durations; the plugin assumes one concurrent device per person and stores nothing durably. Departure times use Asia/Tehran. Failed requests retain the last successful history and display an error; an initial failure does not classify students as never joined.

The internal endpoint /bigbluebutton/api/learningDashboard requires an active moderator, a running meeting, and the learningDashboard feature enabled. Its double-encoded JSON response is validated against the BBB 3.0 session schema. Check compatibility when upgrading BBB.

Build and verify

npm ci
npm test
npm run build

For SDK lifecycle changes, run npm run test:browser with an installed Playwright package and Chromium browser. If Playwright is installed outside this checkout, set PLAYWRIGHT_MODULE_PATH to its package directory. This optional check uses the real production SDK, simulates BBB's initial data and subsequent updates, and fails if React crashes or the attendance sidekick does not register. The offline builder's npm dependency set is unchanged.

The build produces dist/KayerAttendancePlugin.js and dist/manifest.json. Deployment is separate from building. In a live BBB meeting, verify a student who never joined, another who leaves and rejoins, abrupt network loss, the latest disconnect time, polling with the panel closed, and dashboard-disabled errors.