Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
171 commits
Select commit Hold shift + click to select a range
9df5ad0
[unmount-plugin-on-meeting-end] - Implement function to unmount plugi…
GuiLeme Mar 12, 2025
5ea56e3
docs: Update path for bbb-web configs in README.md
antobinary Mar 24, 2025
cf2995a
chore: bump version to 0.2.0
antobinary Mar 24, 2025
9126da2
[migrate-to-styled-components] start of styled-component migration
GuiLeme Mar 31, 2025
5903a29
[migrate-to-styled-components] fix indefinitely growth of picked-user…
GuiLeme Apr 1, 2025
ca220e5
[migrate-to-styled-components] finish styled-components migration
GuiLeme Apr 1, 2025
232dc27
[migrate-to-styled-components] skip libcheck for tsc
GuiLeme Apr 1, 2025
271c321
[ping-selected-user] implemented ping for randomly picked user
GuiLeme Apr 1, 2025
6fe8023
[ping-selected-user] Added documentation for new feature
GuiLeme Apr 1, 2025
1d46802
[ping-selected-user] added cluster setups comments and fix
GuiLeme Apr 2, 2025
96809c5
Merge pull request #37 from GuiLeme/ping-selected-user
antobinary Apr 2, 2025
9f6bcca
[issue-34] add avatar picture (when present) to the selected user
GuiLeme Apr 2, 2025
66359dd
[add-localization] added localization to pick-random-user
GuiLeme Apr 3, 2025
30a802a
[add-localization] merge upstream/main
GuiLeme Apr 3, 2025
31c5d32
[migrate-to-styled-components] merge upstream/main
GuiLeme Apr 15, 2025
fcb082e
[add-localization] resolve tsc issues
GuiLeme Apr 15, 2025
f8a8d94
Merge pull request #39 from GuiLeme/add-localization
antobinary Apr 16, 2025
69fada8
chore: set version to 0.0.1
antobinary Apr 17, 2025
71bf0e1
Merge remote-tracking branch 'upstream/v0.0.x' into migrate-to-styled…
GuiLeme Apr 23, 2025
1605398
[migrate-to-styled-components] fix lint errors
GuiLeme Apr 23, 2025
850963a
Merge remote-tracking branch 'upstream/v0.0.x' into issue-34
GuiLeme Apr 23, 2025
89fb6af
Merge pull request #36 from GuiLeme/migrate-to-styled-components
antobinary Apr 23, 2025
25aaa57
[issue-34] - resolve conflicts with upstream and change avatar to sty…
GuiLeme Apr 23, 2025
0a5e054
[issue-34] localize alternative text descriptor for avatar image
GuiLeme Apr 24, 2025
e33d46c
Merge pull request #38 from GuiLeme/issue-34
antobinary Apr 25, 2025
9fc829c
chore: bump version to 0.0.2
antobinary Apr 25, 2025
b6de68d
[update-v0.0.79] update plugin-sdk to version 0.0.79
GuiLeme Apr 30, 2025
37b67ee
Merge pull request #43 from GuiLeme/update-v0.0.79
antobinary Apr 30, 2025
034acac
[fix-modal-behaviour] - Fix modal appearing to viewer after they clos…
GuiLeme May 9, 2025
2f56ca3
[add-locales-to-build]
GuiLeme May 12, 2025
5565293
Update webpack.config.js
antobinary May 12, 2025
ddc54ff
Merge pull request #45 from GuiLeme/add-locales-to-build
antobinary May 12, 2025
ba54720
chore: bump version to 0.0.3
antobinary May 12, 2025
308675a
Merge pull request #44 from GuiLeme/fix-modal-behaviour
antobinary May 13, 2025
a2ab391
chore: bump version to 0.0.4
antobinary May 14, 2025
18ab6e2
[add-hardcoded-fallback] - add hardcode fallback instead of the key i…
GuiLeme May 14, 2025
8e93147
Merge pull request #46 from GuiLeme/add-hardcoded-fallback
antobinary May 14, 2025
c251d0b
add german translations
Ithanil May 15, 2025
3a9d6cd
Create it.json
albanobattistella May 22, 2025
a58256a
add german translations (#47)
antobinary May 22, 2025
f492c0f
Merge pull request #49 from albanobattistella/patch-1
antobinary May 22, 2025
e331a8b
Add files via upload
hiroshisuga May 24, 2025
4e1f44e
Merge pull request #50 from hiroshisuga/v0.0.x
antobinary May 26, 2025
9c04fe7
docs: Update list of dist contents
antobinary May 26, 2025
b374609
Create fr-FR.json
pielonet May 15, 2025
35afcd1
Merge pull request #53 from bigbluebutton/port-52
antobinary Jun 2, 2025
3680eed
Merge remote-tracking branch 'upstream/v0.0.x' into unmount-plugin-on…
GuiLeme Jun 9, 2025
27da28b
Fix button styles
samuelwei Jun 10, 2025
6c681f8
Merge pull request #31 from GuiLeme/unmount-plugin-on-meeting-end
antobinary Jun 11, 2025
d813310
Update ja.json
hiroshisuga Jul 18, 2025
4d25d41
Merge pull request #56 from SamuelWei/style-buttons
antobinary Jul 23, 2025
740f2e1
Merge pull request #61 from hiroshisuga/v0.0.x_translation2
antobinary Jul 23, 2025
ccf8130
Merge pull request #51 from bigbluebutton/antobinary-patch-1
antobinary Jul 23, 2025
71dc786
Added Plugin Versioning info
antobinary Jul 23, 2025
5803924
Merge pull request #62 from bigbluebutton/antobinary-patch-1
antobinary Jul 23, 2025
5277ad7
[fix-no-notification] fix no notification when changing presenter
GuiLeme Jul 28, 2025
63012da
[fix-no-notification] - fix lint error
GuiLeme Jul 28, 2025
907b256
[fix-no-notification] fix notification should not appear once the use…
GuiLeme Jul 28, 2025
c597639
[feat-implement-time-window] implemented time window for new users th…
GuiLeme Jul 28, 2025
f2ab0e3
Merge pull request #63 from GuiLeme/fix-no-notification
antobinary Jul 29, 2025
9eae9ca
Merge pull request #64 from GuiLeme/feat-implement-time-window
antobinary Jul 29, 2025
1809e75
[feat-implement-time-window] - changed default from 30 seconds to 10 …
GuiLeme Jul 29, 2025
a91bf87
Merge pull request #65 from GuiLeme/feat-implement-time-window
antobinary Jul 30, 2025
5b822d1
[update-sdk] update SDK and include index.json for the new useLocaleM…
GuiLeme Aug 4, 2025
640b222
Merge pull request #67 from GuiLeme/update-sdk
antobinary Aug 5, 2025
533d679
[general-refactor] refactor settings fetching and use behavior
GuiLeme Aug 14, 2025
08361bb
[general-refactor] Filter Options have been moved to be controlled by…
GuiLeme Aug 15, 2025
ee3a66a
[general-refactor] simplify with some more hooks and utilities new fl…
GuiLeme Aug 15, 2025
1a32f7e
[general-refactor] return back the original initial state of filterOp…
GuiLeme Aug 15, 2025
8c176e8
[general-refactor] rename skip presenter/moderator to include present…
GuiLeme Aug 15, 2025
21803c5
[browser-notification-enabled] separate ping sound from browser notif…
GuiLeme Aug 15, 2025
c1316c8
Merge pull request #68 from GuiLeme/general-refactor
antobinary Aug 19, 2025
39f85d8
[browser-notification-enabled] Fixed multiple ping sounds and fix no …
GuiLeme Aug 21, 2025
16de812
fix: rename main branch to v0.0.x in build workflow
antobinary Aug 25, 2025
ada892c
Merge pull request #72 from bigbluebutton/antobinary-patch-1
antobinary Aug 25, 2025
81af8fd
Merge pull request #69 from GuiLeme/browser-notification-enabled
antobinary Aug 28, 2025
77aa69f
chore: bump version to 0.0.5
antobinary Aug 28, 2025
4c3b690
chore: bump version to 0.0.6
antobinary Aug 28, 2025
68e998f
fix: Render modal in core container element with low priority
JoVictorNunes Sep 4, 2025
900293c
Merge pull request #74 from JoVictorNunes/render-modal-in-core-container
antobinary Sep 4, 2025
7129840
chore: bump version to 0.0.7
antobinary Sep 8, 2025
fd8e117
[fix-notification-when-not-picked] fix issue where current user hears…
GuiLeme Sep 10, 2025
d82764f
[fix-notification-when-not-picked] refactor flow to a more readable a…
GuiLeme Sep 11, 2025
7259ec7
Merge pull request #75 from GuiLeme/fix-notification-when-not-picked
antobinary Sep 12, 2025
d1ff422
chore: bump version to 0.0.8
antobinary Oct 2, 2025
530c2b7
[fix-error-logs] fixed some error logs in the console.
GuiLeme Oct 29, 2025
8f0944e
[add-manifest-version] added version directive to manifest
GuiLeme Nov 5, 2025
8ed1243
[countdown-close-modal] added of modal lock countdown
GuiLeme Nov 17, 2025
fd02c39
[countdown-close-modal] fix lint errors
GuiLeme Nov 17, 2025
01a4e9b
[add-manifest-version] added version control in github workflow
GuiLeme Nov 19, 2025
23a44d4
[i-79] filtered out users with bot flag
GuiLeme Jan 9, 2026
e850623
Add translation for moderators and presenter includes. Fixes #70
gschwienbacher Feb 16, 2026
8979532
Merge pull request #82 from gschwienbacher/add-missing-translation
antobinary Feb 17, 2026
b20ddc5
Merge pull request #76 from GuiLeme/fix-error-logs
antobinary Feb 17, 2026
b541204
Merge pull request #77 from GuiLeme/add-manifest-version
antobinary Feb 17, 2026
cb35c67
Merge pull request #78 from GuiLeme/countdown-close-modal
antobinary Feb 17, 2026
2d2e6a9
Merge pull request #80 from GuiLeme/i-79
antobinary Feb 17, 2026
e64f990
[close-button-enabled] enable back close button even when modal is in…
GuiLeme Mar 4, 2026
ea38868
implement a better solution for that
GuiLeme Mar 4, 2026
8cb19e7
Merge pull request #84 from GuiLeme/close-button-enabled
antobinary Mar 5, 2026
b2ccc16
[lock-countdown-change] Change lock countdown span to 1 second
GuiLeme Mar 9, 2026
63c9c66
[automated-test-implementation] Implemented boilerplate testing
GuiLeme Apr 10, 2026
74c5a14
[automated-test-implementation] enhance performance by creating sequ…
GuiLeme Apr 13, 2026
c80d0fa
chore: rename repository references from plugin-X to bbb-plugin-X (#90)
Copilot Apr 17, 2026
8469b0c
Merge pull request #87 from GuiLeme/automated-test-implementation
antobinary Apr 28, 2026
0dc06b1
[ref-ui] refactor the ui and design to feel more up-to-date - Updated…
GuiLeme May 15, 2026
ab5ff32
[ref-ui] added test:isolated documentation on the tests/readme file
GuiLeme May 15, 2026
4fcc1ad
[ref-ui] fix labels based on review
GuiLeme May 21, 2026
6f3c373
[ref-ui] change options to improve user experience.
GuiLeme May 21, 2026
bde4706
[ref-ui] Fixed tests due to change in the UI
GuiLeme May 21, 2026
2a85b5b
[ref-ui] change some labels of pick random user button
GuiLeme May 21, 2026
d9ae717
[ref-ui] Fixed picked user modal
GuiLeme May 21, 2026
ce1581a
[ref-ui] remove previous custom subscription and adjust order of appe…
GuiLeme May 21, 2026
e285e2c
[ref-ui] improve scrollbar of the users list and added the timestamp …
GuiLeme May 21, 2026
86236be
Merge pull request #92 from GuiLeme/ref-ui
antobinary May 25, 2026
77b0f35
Bump axios from 1.15.0 to 1.15.2
dependabot[bot] May 25, 2026
8fc8f0b
Merge pull request #96 from bigbluebutton/dependabot/npm_and_yarn/axi…
antobinary May 25, 2026
a783812
Bump follow-redirects from 1.15.11 to 1.16.0
dependabot[bot] May 25, 2026
85605db
Bump fast-uri from 3.0.3 to 3.1.2
dependabot[bot] May 25, 2026
77f20ae
Bump postcss from 8.4.47 to 8.5.15
dependabot[bot] May 25, 2026
a0d22fa
Merge pull request #98 from bigbluebutton/dependabot/npm_and_yarn/fas…
antobinary May 25, 2026
0baba24
Merge pull request #99 from bigbluebutton/dependabot/npm_and_yarn/pos…
antobinary May 25, 2026
1a27f1d
Merge pull request #97 from bigbluebutton/dependabot/npm_and_yarn/fol…
antobinary May 25, 2026
8d8ea52
[ref-perf] refactor user-basic-info hook to be used only by the prese…
GuiLeme May 26, 2026
8ad4276
[ref-perf] move data-filter options channel reading up to fix bugs re…
GuiLeme May 27, 2026
68440e9
[ref-perf] Unify countdown message for both presenter and viewer - H…
GuiLeme May 28, 2026
1f8e8bb
[ref-perf] Added different shapes for moderator and viewer
GuiLeme May 28, 2026
3a3794d
[ref-perf] improved timeout experience.
GuiLeme May 28, 2026
01e9232
Bump axios from 1.15.2 to 1.16.0
dependabot[bot] May 29, 2026
5f18b43
Merge pull request #102 from bigbluebutton/dependabot/npm_and_yarn/ax…
antobinary May 29, 2026
a981f90
Bump qs and express
dependabot[bot] May 29, 2026
cd72f73
Merge pull request #104 from bigbluebutton/dependabot/npm_and_yarn/mu…
antobinary May 29, 2026
9ef9ed8
[ref-perf] changes in review - add locale, and fix some css and lint …
GuiLeme Jun 3, 2026
7f4d9ad
[ref-perf] changes in review - fix tests and lint errors
GuiLeme Jun 3, 2026
ab49843
Merge pull request #101 from GuiLeme/ref-perf
antobinary Jun 3, 2026
99135b7
chore: bump version to 0.0.9
GuiLeme Jun 4, 2026
b6d9865
fix(tsconfig): drop misplaced "paths" key
imdt-claudiop Jun 11, 2026
9a6f52f
refactor: make core logic reachable from unit tests
imdt-claudiop Jun 11, 2026
ee441ae
test: set up Vitest unit-test environment
imdt-claudiop Jun 11, 2026
20f2c36
test: add unit tests for commons utils (isNumber, hasCurrentUserSeenP…
imdt-claudiop Jun 11, 2026
7f316c2
test: add unit tests for the settings resolvers
imdt-claudiop Jun 11, 2026
0f4bbbb
test: add unit tests for filterPossibleUsersToBePicked
imdt-claudiop Jun 11, 2026
ed13454
test: add unit tests for formatPickedTime
imdt-claudiop Jun 11, 2026
c3ba779
test: add unit tests for the filter-options helpers
imdt-claudiop Jun 11, 2026
ddd6485
test: add unit tests for usePreviousValue
imdt-claudiop Jun 11, 2026
6087612
test: add unit tests for useGetCurrentPickedUser
imdt-claudiop Jun 11, 2026
8d1d0ac
test: add unit tests for useGetAllSettings
imdt-claudiop Jun 11, 2026
eeaae5e
test: add unit tests for usePreventCloseModalCountdown
imdt-claudiop Jun 11, 2026
a699c3f
ci: run unit tests on every pull request
imdt-claudiop Jun 11, 2026
55af8d6
Merge pull request #2 from imdt-claudiop/add-unit-tests
GuiLeme Jun 22, 2026
44d10d9
[add-unit-tests] configure CI for unit test coverage
GuiLeme Jun 22, 2026
67b28b2
Merge pull request #3 from GuiLeme/unit-tests-implementation-1
GuiLeme Jun 22, 2026
af5f2ed
[increase-modal-size] increase overall size of plugin for better visu…
GuiLeme Jun 22, 2026
5dd6d1f
[increase-modal-size] create configurable ui size multiplier
GuiLeme Jun 22, 2026
ba1efda
[unit-test-implementation] removed hardcoded node version from CI wor…
GuiLeme Jun 29, 2026
5a7427d
[post-release-ci] added ci workflows for publishing the dist folder f…
GuiLeme Jun 30, 2026
7acab06
[post-release-ci] Added deploy remote and env file for external confi…
GuiLeme Jun 30, 2026
6352af6
[post-release-ci] change tests files so it does not use the bbb custo…
GuiLeme Jun 30, 2026
f44e011
Merge pull request #113 from GuiLeme/unit-tests-implementation
GuiLeme Jul 1, 2026
9030775
[add-debug-log] to try finding the bug
GuiLeme Jul 24, 2026
e76d23e
[add-debug-log] And added loading state for the list of users to be s…
GuiLeme Jul 24, 2026
41b8df5
[add-debug-log] hoist the UsersBasicInfo one component up so that the…
GuiLeme Jul 24, 2026
2a9cb1d
Merge pull request #114 from GuiLeme/increase-modal-size
ramonlsouza Jul 30, 2026
7884865
Merge pull request #122 from GuiLeme/add-debug-log
ramonlsouza Jul 30, 2026
0f55f43
Merge pull request #116 from GuiLeme/post-release-ci
ramonlsouza Jul 30, 2026
49718df
chore: bump version to 0.0.10
ramonlsouza Jul 30, 2026
ac18f30
Merge branch 'v0.0.x' (upstream) into v0.1.x
GuiLeme Jul 31, 2026
cfb9b41
[merge-0.0.x-into-0.1.x] Resolve problem of not loading correctly the…
GuiLeme Aug 2, 2026
7ab4441
[merge-0.0.x-into-0.1.x] fixed e2e tests for plugin
GuiLeme Aug 2, 2026
7e08f0c
[merge-0.0.x-into-0.1.x] fixed unit tests
GuiLeme Aug 3, 2026
ab51115
fix typo
ramonlsouza Aug 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions .env.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# ── Required ────────────────────────────────────────────────────────────────
# Full URL of the BigBlueButton server API (must end with /bigbluebutton/)
BBB_URL="https://your.bbb.server/bigbluebutton/"

# Shared secret of the BigBlueButton server
BBB_SECRET="yoursupersecretkey"

# ── Optional ────────────────────────────────────────────────────────────────
# Direct URL to the plugin manifest (skips the server-side availability check).
# Use this when the plugin is not deployed to the default BBB plugins path.
# Example: PICK_RANDOM_USER_PLUGIN_URL="https://your.bbb.server/plugins/pick-random-user-plugin/dist/manifest.json"
PICK_RANDOM_USER_PLUGIN_URL=""

# Name of the local Docker container running BigBlueButton (only needed when
# deploying the built plugin into a local container with the copy script).
LOCAL_CONTAINER_NAME="bbb-local-container"

# Multiply all Playwright timeouts by this factor.
# Defaults to 2 in CI and 1 locally when not set.
TIMEOUT_MULTIPLIER=1

# Set to "true" to enable CI mode (1 worker, retries, blob reporter).
CI="false"

# Public URL of a clientSettingsOverride JSON that sets preventCloseDelaySeconds: 10.
# Required for the countdown / close-prevention behavioural tests.
# Must be reachable by the BBB server (a GitHub Gist raw URL works well).
# Leave empty to skip those tests.
# Example: PREVENT_CLOSE_DELAY_SETTINGS_URL="https://gist.githubusercontent.com/<user>/<id>/raw/<hash>/bbb-pick-random-user-prevent-close-delay.json"
PREVENT_CLOSE_DELAY_SETTINGS_URL="https://bigbluebutton.nyc3.digitaloceanspaces.com/plugins/assets/bbb-plugin-pick-random-user/prevent-close-delay-10s.json"
4 changes: 2 additions & 2 deletions .github/workflows/build-plugin-deb-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
name: "📦 Build .deb package for plugin"
on:
push:
branches: [ "main"]
branches: [ "v0.0.x"]
paths-ignore:
- debian/changelog
pull_request:
branches: [ "main" ]
branches: [ "v0.0.x" ]
paths-ignore:
- debian/changelog

Expand Down
26 changes: 22 additions & 4 deletions .github/workflows/publish-tag.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '20'
node-version-file: '.nvmrc'

- name: Get triggering user's email
run: |
Expand All @@ -34,11 +34,29 @@ jobs:
git config user.name "${{ github.actor }}"
git config user.email "${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com"


- name: Bump version and push tag
- name: Bump version, update manifest, commit and tag
run: |
set -euo pipefail

npm install
npm version ${{ github.event.inputs.release_type }} -m "chore: bump version to %s"

# 1) Bump package.json + package-lock.json but DO NOT commit/tag yet
npm version ${{ github.event.inputs.release_type }} --no-git-tag-version

# 2) Read the new version from package.json
NEW_VERSION=$(node -p "require('./package.json').version")
echo "New version is: $NEW_VERSION"

# 3) Update manifest.json's "version" field to match
jq --arg v "$NEW_VERSION" '.version = $v' manifest.json > manifest.json.tmp
mv manifest.json.tmp manifest.json

# 4) Commit everything and create an annotated tag
git add package.json package-lock.json manifest.json
git commit -m "chore: bump version to $NEW_VERSION"
git tag -a "v$NEW_VERSION" -m "v$NEW_VERSION"

# 5) Push commit and tag
git push --follow-tags
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
50 changes: 50 additions & 0 deletions .github/workflows/release-publish-do-spaces.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: Release - publish to DO Spaces
on:
push:
tags:
- 'v*'
jobs:
publish-to-do-spaces:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1

- name: Check DO Spaces secrets
id: check-secrets
env:
S3_ACCESS_KEY: ${{ secrets.S3_ACCESS_KEY }}
S3_SECRET_KEY: ${{ secrets.S3_SECRET_KEY }}
S3_BUCKET: ${{ secrets.S3_BUCKET }}
S3_ENDPOINT_URL: ${{ secrets.S3_ENDPOINT_URL }}
run: |
if [ -z "$S3_ACCESS_KEY" ] || [ -z "$S3_SECRET_KEY" ] || [ -z "$S3_BUCKET" ] || [ -z "$S3_ENDPOINT_URL" ]; then
echo "DO Spaces secrets not configured, skipping."
echo "configured=false" >> $GITHUB_OUTPUT
else
echo "configured=true" >> $GITHUB_OUTPUT
fi

- name: Install node
if: steps.check-secrets.outputs.configured == 'true'
uses: actions/setup-node@v4
with:
node-version: 20.x

- name: Install dependencies
if: steps.check-secrets.outputs.configured == 'true'
run: npm ci

- name: Build dist
if: steps.check-secrets.outputs.configured == 'true'
run: npm run build-bundle

- name: Publish dist to Digital Ocean Spaces
if: steps.check-secrets.outputs.configured == 'true'
env:
AWS_ACCESS_KEY_ID: ${{ secrets.S3_ACCESS_KEY }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_KEY }}
run: |
aws s3 sync dist/ s3://${{ secrets.S3_BUCKET }}/${{ github.ref_name }}/ \
--endpoint-url ${{ secrets.S3_ENDPOINT_URL }}
33 changes: 33 additions & 0 deletions .github/workflows/release-upload-assets.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: Release - upload assets
on:
push:
tags:
- 'v*'
permissions:
contents: write
jobs:
upload-assets:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1

- name: Install node
uses: actions/setup-node@v4
with:
node-version: 20.x

- name: Install dependencies
run: npm ci

- name: Build dist
run: npm run build-bundle

- name: Zip dist
run: zip -r dist.zip dist/

- name: Upload dist to GitHub Release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh release upload ${{ github.ref_name }} dist.zip
2 changes: 1 addition & 1 deletion .github/workflows/ts-code-compilation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
- name: install node
uses: actions/setup-node@v4
with:
node-version: 20.x
node-version-file: '.nvmrc'
- name: run npm install
run: npm install
- name: typescript code compilation
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ts-code-validation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
- name: install node
uses: actions/setup-node@v4
with:
node-version: 20.x
node-version-file: '.nvmrc'
- name: run npm install
run: npm install
- name: typescript code validation with eslint
Expand Down
28 changes: 28 additions & 0 deletions .github/workflows/unit-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: Unit tests
on: [pull_request]

permissions:
contents: read
jobs:
unit-tests:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Merge branches
uses: ./.github/actions/merge-branches
- name: install node
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
- name: run npm install
run: npm install
- name: run unit tests
run: npm run test:unit:coverage
- name: Upload coverage report
if: always()
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: coverage/
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,8 @@ debian/**/copyright
debian/**/changelog.gz
debian/**/md5sums
debian/**/var/www/*
memory
playwright-report
test-results
.env
coverage/*
1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
22
138 changes: 134 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,149 @@ The Pick Random User Plugin is listed in the apps gallery for presenters to pick

![Gif of plugin demo](./public/assets/plugin.gif)

## Plugin Versioning

Please be aware that we have a separate branch of this plugin for each version of the SDK. This ensures that everything merged into a branch is compatible with the corresponding version of the BigBlueButton core. As of now, here’s the correspondence between the branches, SDK versions, and BigBlueButton core versions:

| Repository Branch | Plugin-SDK Version | BigBlueButton Core Version |
|------------------|--------------------|----------------------------|
| v0.0.x | v0.0.x | v3.x |
| v0.1.x | v0.1.x | v4.0.x |

For more information about the plugin API features, see the documentation (`readme` files) within the specific branch you are interested in. We separate the branches because, going forward, `v0.1.x` is becoming more and more different from `v0.0.x`.

If you have any suggestions, requirements, or questions, don’t hesitate to contact us.

## Configurations

Down below, we list all the possible configurations this plugin supports, and then a brief explanation:

```yaml
- name: BbbPluginPickRandomUser
settings:
pingSoundEnabled: true
pingSoundUrl: resources/sounds/doorbell.mp3
browserNotificationEnabled: true
pickedUserTimeWindow: 10 # seconds
preventCloseDelaySeconds: 3 # seconds
modalUiScale: 1
```

| Name | Description | Default |
|------------------------|--------------------------------------|-----------------------------|
| `pingSoundEnabled` | Flag that decides whether the ping sound is enabled for picked user | `true` |
| `pingSoundUrl` | URL of the ping sound file | `resources/sounds/doorbell.mp3` |
| `browserNotificationEnabled` | Flag that decides whether to send browser notification when user is picked | `false` |
| `pickedUserTimeWindow` | Time window to consider a user as recently picked (users that join after that time will not see the last modal) | `10` |
| `preventCloseDelaySeconds` | Delay in seconds before the modal can be closed to prevent accidental closures | `3` |
| `modalUiScale` | Multiplier applied to all font sizes and spacing values in the modal UI | `1` |


### Size Multiplier

By default, the modal uses a base set of font sizes and spacing values (`modalUiScale: 1`). You can scale all of them up or down uniformly by setting `modalUiScale` to any positive number. For example, `0.8` makes everything 20% smaller and `1.5` makes everything 50% larger.

```yaml
public:
# ...
plugins:
- name: BbbPluginPickRandomUser
settings:
modalUiScale: 0.8 # shrink all fonts and spacing by 20%
```

The multiplier applies to: font sizes, padding, margins, gaps, and list max-heights throughout the picked-user modal and the presenter's sidekick panel.

### Prevent Close Delay

By default, when the modal appears showing the picked user (the view that displays the selected user's name and avatar), it cannot be closed for 3 seconds. This prevents accidental closures from misclicks. During this time:
- The close button (X) is disabled and grayed out
- Clicking outside the modal does nothing
- Pressing the Escape key does nothing
- Visual countdown indicator:
- **For viewers**: A text message below the user's name: "You can close this modal in X seconds"
- **For presenters**: A blue progress bar (similar to YouTube's) that shrinks as time passes

**Note:** This delay only applies to the picked user modal. On BigBlueButton 4.0 the presenter view (used for selecting users) lives in the plugin's sidekick panel, opened from the apps gallery, and is not affected by this delay.

After the countdown finishes, all close methods become available. To change this delay, add the following settings in the `/etc/bigbluebutton/bbb-html5.yml` file:

```yaml
public:
# ...
plugins:
- name: BbbPluginPickRandomUser
settings:
preventCloseDelaySeconds: 5 # Set to 0 to disable the delay
```

### Notification

By default, browser notification when user is randomly picked is not enabled. To enable it, add the following settings in the `/etc/bigbluebutton/bbb-html5.yml` file:

```yaml
public:
# ...
plugins:
- name: BbbPluginPickRandomUser
settings:
browserNotificationEnabled: false
```

### Ping sound

By default, ping sound is played for the randomly picked user. To remove this feature, one must add the following configurations in their `/etc/bigbluebutton/bbb-html5.yml` file.

So within that file and in `public.plugins` add the following configurations:

```yaml
- name: BbbPluginPickRandomUser
settings:
pingSoundEnabled: false
```

The result yaml will look like:

```yaml
public:
# ...
plugins:
- name: BbbPluginPickRandomUser
settings:
pingSoundEnabled: false
```

Just a minor comment: This relative URLs can only be configured if the server on which BBB is running is not a cluster setup. If that's your case, you'll need to put the whole URL into the configuration. It's also worth mentioning that the default `pingSoundUrl` will work in cluster setups, so no worries on that.

Some other possible `pingSoundUrl` are (and notice that this URL can be relative, if the `mp3` sound is being served from within the BBB server - and it's not a cluster setup - as showed right below):
- resources/sounds/alarm.mp3
- resources/sounds/bbb-handRaise.mp3
- resources/sounds/LeftCall.mp3
- resources/sounds/RelaxingMusic.mp3
- resources/sounds/aristocratDrums.mp3
- resources/sounds/CalmMusic.mp3
- resources/sounds/notify.mp3
- resources/sounds/ScreenshareOff.mp3
- resources/sounds/audioSample.mp3
- resources/sounds/doorbell.mp3
- resources/sounds/Poll.mp3
- resources/sounds/userJoin.mp3

These are the possible `mp3` that already come within a BBB server, if you want a custom sound, just add the URL to the `mp3` file there and it will work out of the box.

## Building the Plugin

First, double check what branch of the repository you are working with. At time of writing branch `main` produces a version of the plugin that is suitable with BigBlueButton 3.0. Branch `v3.1.x-release` is compatible with BigBlueButton 3.1.
First, double check what branch of the repository you are working with — see [Plugin Versioning](#plugin-versioning) above. This branch (`v0.1.x`) is the one compatible with BigBlueButton 4.0.

To build the plugin for production use, follow these steps:

```bash
cd $HOME/src/plugin-pick-random-user-plugin
cd $HOME/src/bbb-plugin-pick-random-user
npm ci
npm run build-bundle
```

The above command will generate the `dist` folder, containing the bundled JavaScript file named `PickRandomUserPlugin.js`. This file can be hosted on any HTTPS server along with its `manifest.json`.
The above command will generate the `dist` folder, containing the bundled JavaScript file named `BbbPluginPickRandomUser.js`, a directory of locale files and a license files. These files can be hosted on any HTTPS server along with the `manifest.json` which is also part of the `dist/` directory.

If you install the Plugin separated to the manifest, remember to change the `javascriptEntrypointUrl` in the `manifest.json` to the correct endpoint.

Expand All @@ -28,7 +158,7 @@ To use the plugin in BigBlueButton, send this parameter along in create call:
pluginManifests=[{"url":"<your-domain>/path/to/manifest.json"}]
```

Or additionally, you can add this same configuration in `bbb-web`'s properties in `/etc/bigbluebutton/bbb-web.properties`
Or additionally, you can add this same configuration in `bbb-web`'s properties in `/etc/bigbluebutton/bbb-web.properties`.


## Development mode
Expand Down
Loading
Loading