ref: Update template to use the new plugin manifest structure (#10)
* [manifest-structure] - added manifest structure to template * Update README.md Co-authored-by: Anton Georgiev <antobinary@users.noreply.github.com> --------- Co-authored-by: Anton Georgiev <antobinary@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
1a8d354945
commit
3eba8525da
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,5 +1,6 @@
|
|||||||
node_modules
|
node_modules
|
||||||
dist
|
dist
|
||||||
|
dist-tsc
|
||||||
debian/.debhelper/
|
debian/.debhelper/
|
||||||
debian/debhelper-build-stamp
|
debian/debhelper-build-stamp
|
||||||
debian/files
|
debian/files
|
||||||
|
|||||||
29
README.md
29
README.md
@@ -2,16 +2,31 @@
|
|||||||
|
|
||||||
## Description
|
## Description
|
||||||
|
|
||||||
A brief description of the plugin including a screenshot or a short video.
|
A brief description of the plugin including a screenshot and/or a short video.
|
||||||
|
|
||||||
## Running the Plugin From Source Code
|
|
||||||
|
|
||||||
## Building the Plugin
|
## Building the Plugin
|
||||||
|
|
||||||
|
To build the plugin for production use, follow these steps:
|
||||||
|
|
||||||
## Background
|
```bash
|
||||||
|
cd $HOME/src/plugin-template
|
||||||
|
npm ci
|
||||||
|
npm run build-bundle
|
||||||
|
```
|
||||||
|
|
||||||
BigBlueButton added supports for plugins in 2024 with BBB 3.0.
|
The above command will generate the `dist` folder, containing the bundled JavaScript file named `<plugin-name>.js`. This file can be hosted on any HTTPS server along with its `manifest.json`.
|
||||||
Check the official [documentation website](https://docs.bigbluebutton.org) for more information.
|
|
||||||
|
|
||||||
This plugin repository was created using the plugin [template repository for BigBlueButton](https://github.com/bigbluebutton/plugin-template) hosted on GitHub.
|
If you install the Plugin separated to the manifest, remember to change the `javascriptEntrypointUrl` in the `manifest.json` to the correct endpoint.
|
||||||
|
|
||||||
|
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 the `.properties` file from `bbb-web` in `/usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties`
|
||||||
|
|
||||||
|
|
||||||
|
## Development mode
|
||||||
|
|
||||||
|
As for development mode (running this plugin from source), please, refer back to https://github.com/bigbluebutton/bigbluebutton-html-plugin-sdk section `Running the Plugin from Source`
|
||||||
|
|||||||
29
manifest.json
Normal file
29
manifest.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"requiredSdkVersion": "~0.0.59",
|
||||||
|
"name": "<plugin-name>",
|
||||||
|
"javascriptEntrypointUrl": "<plugin-name>.js",
|
||||||
|
"localesBaseUrl": "https://cdn.dominio.com/pluginabc/",
|
||||||
|
"eventPersistence": {
|
||||||
|
"isEnabled": true,
|
||||||
|
"maximumPayloadSizeInBytes": 1024,
|
||||||
|
"rateLimiting": {
|
||||||
|
"messagesAllowedPerSecond": 10,
|
||||||
|
"messagesAllowedPerMinute": 20
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dataChannels": [
|
||||||
|
{
|
||||||
|
"name": "<data-channel-name>",
|
||||||
|
"pushPermission": ["moderator"],
|
||||||
|
"replaceOrDeletePermission": ["creator", "moderator"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remoteDataSources": [
|
||||||
|
{
|
||||||
|
"name": "<remote-data-source-name>",
|
||||||
|
"url": "${meta_remote-data-uri}",
|
||||||
|
"fetchMode": "onMeetingCreate",
|
||||||
|
"permissions": ["moderator"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
10282
package-lock.json
generated
Normal file
10282
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
27
package.json
27
package.json
@@ -10,13 +10,13 @@
|
|||||||
"@types/react": "^18.2.13",
|
"@types/react": "^18.2.13",
|
||||||
"@types/react-dom": "^18.2.6",
|
"@types/react-dom": "^18.2.6",
|
||||||
"babel-plugin-syntax-dynamic-import": "^6.18.0",
|
"babel-plugin-syntax-dynamic-import": "^6.18.0",
|
||||||
"bigbluebutton-html-plugin-sdk": "0.0.52",
|
"bigbluebutton-html-plugin-sdk": "0.0.66",
|
||||||
"styled-components": "^5.3.3",
|
|
||||||
"path": "^0.12.7",
|
"path": "^0.12.7",
|
||||||
"react-chat-elements": "^12.0.14",
|
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
|
"react-chat-elements": "^12.0.14",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-modal": "^3.16.1"
|
"react-modal": "^3.16.1",
|
||||||
|
"styled-components": "^5.3.3"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build-bundle": "webpack --mode production",
|
"build-bundle": "webpack --mode production",
|
||||||
@@ -42,20 +42,16 @@
|
|||||||
"@babel/core": "^7.21.8",
|
"@babel/core": "^7.21.8",
|
||||||
"@babel/preset-env": "^7.21.5",
|
"@babel/preset-env": "^7.21.5",
|
||||||
"@babel/preset-react": "^7.18.6",
|
"@babel/preset-react": "^7.18.6",
|
||||||
"@types/react-modal": "^3.16.0",
|
|
||||||
"babel-loader": "^9.1.2",
|
|
||||||
"css-loader": "^6.7.4",
|
|
||||||
"style-loader": "^3.3.3",
|
|
||||||
"ts-loader": "^9.4.3",
|
|
||||||
"webpack": "^5.83.1",
|
|
||||||
"webpack-cli": "^5.1.1",
|
|
||||||
"webpack-dev-server": "^4.15.1",
|
|
||||||
"@types/node": "^20.4.4",
|
"@types/node": "^20.4.4",
|
||||||
"@types/react": "^18.2.15",
|
"@types/react": "^18.2.15",
|
||||||
"@types/react-dom": "^18.2.7",
|
"@types/react-dom": "^18.2.7",
|
||||||
|
"@types/react-modal": "^3.16.0",
|
||||||
"@types/styled-components": "^5.1.26",
|
"@types/styled-components": "^5.1.26",
|
||||||
"@typescript-eslint/eslint-plugin": "^6.2.0",
|
"@typescript-eslint/eslint-plugin": "^6.2.0",
|
||||||
"@typescript-eslint/parser": "^6.2.0",
|
"@typescript-eslint/parser": "^6.2.0",
|
||||||
|
"babel-loader": "^9.1.2",
|
||||||
|
"copy-webpack-plugin": "^12.0.2",
|
||||||
|
"css-loader": "^6.7.4",
|
||||||
"eslint": "^8.45.0",
|
"eslint": "^8.45.0",
|
||||||
"eslint-config-airbnb": "^19.0.4",
|
"eslint-config-airbnb": "^19.0.4",
|
||||||
"eslint-config-airbnb-base": "^15.0.0",
|
"eslint-config-airbnb-base": "^15.0.0",
|
||||||
@@ -66,7 +62,12 @@
|
|||||||
"eslint-watch": "^8.0.0",
|
"eslint-watch": "^8.0.0",
|
||||||
"lint-staged": "11.2.0",
|
"lint-staged": "11.2.0",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
|
"style-loader": "^3.3.3",
|
||||||
|
"ts-loader": "^9.4.3",
|
||||||
"typescript": "^5.1.6",
|
"typescript": "^5.1.6",
|
||||||
"watch": "^1.0.2"
|
"watch": "^0.13.0",
|
||||||
|
"webpack": "^5.83.1",
|
||||||
|
"webpack-cli": "^5.1.1",
|
||||||
|
"webpack-dev-server": "^4.15.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"outDir": "./dist/",
|
"outDir": "./dist-tsc/",
|
||||||
"noImplicitAny": true,
|
"noImplicitAny": true,
|
||||||
"module": "es6",
|
"module": "es6",
|
||||||
"target": "es5",
|
"target": "es5",
|
||||||
@@ -8,7 +8,11 @@
|
|||||||
"allowJs": true,
|
"allowJs": true,
|
||||||
"moduleResolution": "node"
|
"moduleResolution": "node"
|
||||||
},
|
},
|
||||||
|
"include": ["src/*"],
|
||||||
"paths": {
|
"paths": {
|
||||||
"*": ["node_modules/@types/*", "node_modules/*"]
|
"*": ["node_modules"]
|
||||||
}
|
},
|
||||||
|
"exclude": [
|
||||||
|
"node_modules"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,21 +1,35 @@
|
|||||||
|
/* eslint-disable @typescript-eslint/no-var-requires */
|
||||||
|
const CopyWebpackPlugin = require('copy-webpack-plugin');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
entry: './src/index.tsx',
|
entry: './src/index.tsx',
|
||||||
output: {
|
output: {
|
||||||
filename: '<PluginName>.js',
|
filename: '<plugin-name>.js',
|
||||||
library: '<PluginName>',
|
library: '<plugin-name>',
|
||||||
libraryTarget: 'umd',
|
libraryTarget: 'umd',
|
||||||
publicPath: '/static/',
|
publicPath: '/',
|
||||||
globalObject: 'this',
|
globalObject: 'this',
|
||||||
},
|
},
|
||||||
devServer: {
|
devServer: {
|
||||||
allowedHosts: 'all',
|
allowedHosts: 'all',
|
||||||
port: 4701,
|
port: 4701,
|
||||||
host: 'localhost',
|
host: '0.0.0.0',
|
||||||
hot: false,
|
hot: false,
|
||||||
liveReload: false,
|
liveReload: false,
|
||||||
client: {
|
client: {
|
||||||
overlay: false,
|
overlay: false,
|
||||||
},
|
},
|
||||||
|
onBeforeSetupMiddleware: (devServer) => {
|
||||||
|
if (!devServer) {
|
||||||
|
throw new Error('webpack-dev-server is not defined');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Serve manifest.json from the project root when requested at /manifest.json
|
||||||
|
devServer.app.get('/manifest.json', (req, res) => {
|
||||||
|
res.sendFile(path.resolve(__dirname, 'manifest.json'));
|
||||||
|
});
|
||||||
|
},
|
||||||
},
|
},
|
||||||
module: {
|
module: {
|
||||||
rules: [
|
rules: [
|
||||||
@@ -40,4 +54,11 @@ module.exports = {
|
|||||||
resolve: {
|
resolve: {
|
||||||
extensions: ['.js', '.jsx', '.tsx', '.ts'],
|
extensions: ['.js', '.jsx', '.tsx', '.ts'],
|
||||||
},
|
},
|
||||||
|
plugins: [
|
||||||
|
new CopyWebpackPlugin({
|
||||||
|
patterns: [
|
||||||
|
{ from: 'manifest.json', to: './' }, // Copy manifest.json to static/ in the output folder
|
||||||
|
],
|
||||||
|
}),
|
||||||
|
],
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user