Compare commits
266 Commits
main
...
feat/room-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
94d9c7c50b | ||
|
|
c5bca6e133 | ||
|
|
467ebf6d49 | ||
|
|
8a8951c120 | ||
|
|
f70bd04497 | ||
|
|
1223e3d53b | ||
|
|
eca3acbcf0 | ||
|
|
9cf48fc49e | ||
|
|
2453ce2760 | ||
|
|
7607f134a0 | ||
|
|
5045815a1c | ||
|
|
a81b6edf41 | ||
|
|
b775c37a86 | ||
|
|
a829721ba5 | ||
|
|
e05dfdf001 | ||
|
|
f49fd863b7 | ||
|
|
5b9fa3149c | ||
|
|
fe71d07242 | ||
|
|
63d72c994b | ||
|
|
c563860758 | ||
|
|
43181bd068 | ||
|
|
340d53066c | ||
|
|
e0d811237b | ||
|
|
db279faee4 | ||
|
|
59c464387b | ||
|
|
54bb06adfd | ||
|
|
2572fd3960 | ||
|
|
37023fe077 | ||
|
|
3a8e5e21be | ||
|
|
eaf021f1dc | ||
|
|
22a42e4c63 | ||
|
|
8e5c07710b | ||
|
|
09ac408f32 | ||
|
|
10a9982a57 | ||
|
|
6592dac7fc | ||
|
|
b2380ec12b | ||
|
|
78edf51842 | ||
|
|
cae5a58568 | ||
|
|
cdbfd8c968 | ||
|
|
8ac2631e25 | ||
|
|
161f42f83c | ||
|
|
d51c5ae0c3 | ||
|
|
4794b30ff9 | ||
|
|
177134d2a6 | ||
|
|
78060c0cdf | ||
|
|
fcf21468c2 | ||
|
|
02a9774d72 | ||
|
|
210e5fe3f5 | ||
|
|
e5ebcbaab0 | ||
|
|
1f603a683d | ||
|
|
f1b9f1c6e3 | ||
|
|
a25569b4f7 | ||
|
|
d476b9c715 | ||
|
|
5cbd05be11 | ||
|
|
248015fc06 | ||
|
|
803e4b6704 | ||
|
|
696df4a7a2 | ||
|
|
27d4249c57 | ||
|
|
83583259ba | ||
|
|
a9818f0cdc | ||
|
|
0777f299d9 | ||
|
|
a69c8d0239 | ||
|
|
7f784af12b | ||
|
|
dcf6b5a84e | ||
|
|
99b9f56959 | ||
|
|
41438e20fa | ||
|
|
b695b5f117 | ||
|
|
66e7a8b038 | ||
|
|
7976c99654 | ||
|
|
491c3392ce | ||
|
|
66978509b1 | ||
|
|
c6742fd5eb | ||
|
|
761b205ed0 | ||
|
|
a4d368d856 | ||
|
|
9e85174b69 | ||
|
|
2c216f53c3 | ||
|
|
bc70759837 | ||
|
|
87645efb3c | ||
|
|
b9550aced9 | ||
|
|
333bd0e92f | ||
|
|
92b96f9a34 | ||
|
|
c00c255533 | ||
|
|
c27cc49985 | ||
|
|
dec8307cfb | ||
|
|
2df238f0cc | ||
|
|
583fdbe608 | ||
|
|
71c08dee8c | ||
|
|
bfe97395d0 | ||
|
|
9c187be2b8 | ||
|
|
f780fac60d | ||
|
|
fd13af8e2b | ||
|
|
6c38d615ea | ||
|
|
1856201b87 | ||
|
|
65674e164d | ||
|
|
f42d91ec74 | ||
|
|
4708181628 | ||
|
|
874538a8b7 | ||
|
|
9dc4834edd | ||
|
|
6ca1ace61e | ||
|
|
61b10befec | ||
|
|
14bf154390 | ||
|
|
d55cf45fa5 | ||
|
|
4f96192cc6 | ||
|
|
2566219dd9 | ||
|
|
c7e7674161 | ||
|
|
9c963ccf81 | ||
|
|
5cf2e74eab | ||
|
|
6d3d19ccd0 | ||
|
|
d155846708 | ||
|
|
5c80387244 | ||
|
|
f6dd80e8eb | ||
|
|
28f4bf6b38 | ||
|
|
b8e7baf705 | ||
|
|
c0b77314b5 | ||
|
|
b23445d063 | ||
|
|
cf64838c9b | ||
|
|
d115760e03 | ||
|
|
fedb9c2b44 | ||
|
|
ea5ef99773 | ||
|
|
01c5b695d9 | ||
|
|
5ca46e59d8 | ||
|
|
90edd756a2 | ||
|
|
4ebbaa47ef | ||
|
|
3f108cd161 | ||
|
|
8a7989478a | ||
|
|
ab907bb0e8 | ||
|
|
599a744302 | ||
|
|
4c864b193f | ||
|
|
beb5571983 | ||
|
|
04563a009f | ||
|
|
0e77aba428 | ||
|
|
28bfa609d8 | ||
|
|
9db0e8b29e | ||
|
|
9a2597a997 | ||
|
|
fb4bdbfcfb | ||
|
|
8e8e2670c4 | ||
|
|
01f21a724f | ||
|
|
e45aa91d90 | ||
|
|
7cdfdf20f9 | ||
|
|
dbca91f0c3 | ||
|
|
38b3db6171 | ||
|
|
fd675573fc | ||
|
|
ee55f02aaa | ||
|
|
7099012317 | ||
|
|
9f46d03646 | ||
|
|
5bb9a2f3e1 | ||
|
|
6c4adfeaaa | ||
|
|
35e727cbd0 | ||
|
|
0e37d8cc09 | ||
|
|
1aa6c8a383 | ||
|
|
19e7c48fd0 | ||
|
|
9441343f45 | ||
|
|
eacd629006 | ||
|
|
1c85eaa364 | ||
|
|
af6b5cab28 | ||
|
|
733665b49b | ||
|
|
80ce1a3efd | ||
|
|
d4a87f8a45 | ||
|
|
ecef2844a0 | ||
|
|
336a6751c2 | ||
|
|
70ca7a0fa9 | ||
|
|
f61fa6183c | ||
|
|
ded3c37ab2 | ||
|
|
14c64fdd75 | ||
|
|
eb5144291a | ||
|
|
6c3d87c8bf | ||
|
|
ae4217a4d4 | ||
|
|
85e4a5b8a6 | ||
|
|
b78744b8b6 | ||
|
|
335ab30a48 | ||
|
|
f01ec31c1b | ||
|
|
18426e2111 | ||
|
|
27a6064b61 | ||
|
|
b3ab245dff | ||
|
|
8af5759e4d | ||
|
|
07ac5b91c9 | ||
|
|
6e225fe265 | ||
|
|
d252784a39 | ||
|
|
3df0c54004 | ||
|
|
73e7a1ece7 | ||
|
|
70d51e21a6 | ||
|
|
268a6f9709 | ||
|
|
21f4563202 | ||
|
|
c561cf9bcd | ||
|
|
54c2c79ccb | ||
|
|
cdbb30fc2a | ||
|
|
993681395c | ||
|
|
ad3e0b81e5 | ||
|
|
68477d8ad3 | ||
|
|
1e1d66ae11 | ||
|
|
6a350b07a5 | ||
|
|
0a5852d89a | ||
|
|
7ff040864f | ||
|
|
11f7ac1401 | ||
|
|
1188255210 | ||
|
|
2e7cbeb96a | ||
|
|
89e7d5db88 | ||
|
|
c1a43af260 | ||
|
|
987085a466 | ||
|
|
e0e2fc2a44 | ||
|
|
fb4e7a022c | ||
|
|
503db6c2cb | ||
|
|
e580843b3a | ||
|
|
84a0b2ac6e | ||
|
|
23a25c1c3d | ||
|
|
7c4b5c6724 | ||
|
|
456e890ffe | ||
|
|
de0674d82c | ||
|
|
7d7f66edf3 | ||
|
|
8ab8007c1d | ||
|
|
b2488544e3 | ||
|
|
2bc1d02620 | ||
|
|
35498a5854 | ||
|
|
086e325551 | ||
|
|
136a422fb6 | ||
|
|
086f60d60a | ||
|
|
8d255bd051 | ||
|
|
c0ecc826cb | ||
|
|
1855755cd6 | ||
|
|
4b183fe02c | ||
|
|
6e99b21965 | ||
|
|
1414566f7f | ||
|
|
9293568ccd | ||
|
|
78cfc3035e | ||
|
|
337ba91725 | ||
|
|
c573cf802e | ||
|
|
c9eee9bf9d | ||
|
|
4689c866d6 | ||
|
|
7d462a8f08 | ||
|
|
8d47a7444b | ||
|
|
94fbd55ed8 | ||
|
|
7ee20f31c1 | ||
|
|
f0a6d63f4d | ||
|
|
c60cb244a7 | ||
|
|
23154bd380 | ||
|
|
1498332d28 | ||
|
|
765f8c08d1 | ||
|
|
770a330e7a | ||
|
|
14d10838d6 | ||
|
|
33fd9eabfc | ||
|
|
dccc4bc2f9 | ||
|
|
1d2ebd8be3 | ||
|
|
4390573021 | ||
|
|
f2a84717e5 | ||
|
|
5fe71482f7 | ||
|
|
b8507b824b | ||
|
|
0deae8ad29 | ||
|
|
e7f61aa2c2 | ||
|
|
42c38f82af | ||
|
|
df2d58c3bb | ||
|
|
b017334976 | ||
|
|
92b99764b9 | ||
|
|
577c48fe1b | ||
|
|
a069ebafaf | ||
|
|
93046c8db0 | ||
|
|
a26f2a754b | ||
|
|
6b781aac8e | ||
|
|
459799a716 | ||
|
|
e72566dd8c | ||
|
|
79cef519b8 | ||
|
|
b709ad320a | ||
|
|
5d874f57f5 | ||
|
|
53ac60d37a | ||
|
|
e0736677ca | ||
|
|
e3de4256a8 | ||
|
|
5abd106641 |
46
.github/copilot-instructions.md
vendored
Normal file
46
.github/copilot-instructions.md
vendored
Normal file
@ -0,0 +1,46 @@
|
||||
# Project Guidelines
|
||||
|
||||
## Code Style
|
||||
- TypeScript + ESM across backend packages (`"type": "module"`): keep explicit `.js` suffix for local imports in TS source (example: `meet-ce/backend/src/middlewares/auth.middleware.ts`).
|
||||
- Respect strict TS settings and path aliases from package `tsconfig.json` (example: `meet-ce/frontend/tsconfig.json` with `@app/*`, `@environment/*`, and shared-components source mapping).
|
||||
- In Angular packages, follow existing standalone/signal patterns already documented in `meet-ce/frontend/.github/copilot-instructions.md` for frontend-only edits.
|
||||
- Keep changes small and package-scoped; avoid cross-package refactors unless required by the task.
|
||||
|
||||
## Architecture
|
||||
- Monorepo is pnpm-workspace based (`pnpm-workspace.yaml`) with CE and PRO packages plus `testapp`.
|
||||
- CE is the base product: `meet-ce/backend` (Express + Inversify), `meet-ce/frontend` (Angular), `meet-ce/typings` (shared contracts), `meet-ce/frontend/webcomponent`.
|
||||
- PRO extends CE behavior, especially via route/provider customization (see `meet-ce/frontend/src/app/app.routes.ts` vs `meet-pro/frontend/src/app/app.routes.ts`).
|
||||
- Shared Angular domain logic is in `meet-ce/frontend/projects/shared-meet-components/src/lib/domains/*`.
|
||||
|
||||
## Build and Test
|
||||
- Runtime baseline: Node.js >= 22 and pnpm workspace usage from repo root.
|
||||
- Install all workspaces: `pnpm install`
|
||||
- Preferred orchestrator: `./meet.sh dev`, `./meet.sh build`, `./meet.sh test-unit-backend`, `./meet.sh test-unit-webcomponent`, `./meet.sh test-e2e-webcomponent`
|
||||
- Root filtered commands: `pnpm --filter @openvidu-meet/backend run start:dev|build|test:unit`
|
||||
- Frontend CE: `pnpm --filter @openvidu-meet/frontend run dev|build|test:unit|lib:build`
|
||||
- Typings: `pnpm --filter @openvidu-meet/typings run dev|build`
|
||||
- Webcomponent: `pnpm --filter openvidu-meet-webcomponent run build|test:unit|test:e2e`
|
||||
- Backend integration suites are exposed at root (`test:integration-backend-*`) and backend package (`test:integration-*`).
|
||||
|
||||
## Project Conventions
|
||||
- Use `meet.sh` or `pnpm --filter` commands instead of ad-hoc `cd` workflows for routine tasks.
|
||||
- Backend DI registration order is intentional; keep dependency bind order coherent when adding services (`meet-ce/backend/src/config/dependency-injector.config.ts`).
|
||||
- Treat `meet-ce/typings` as the source of shared API/domain contracts; update typings first when frontend/backend payloads change.
|
||||
- For CI/Docker dependency switching of `openvidu-components-angular`, use only:
|
||||
- `./meet.sh prepare-ci-build --components-angular-version <version>` or
|
||||
- `./meet.sh prepare-ci-build --components-angular-tarball <path>`
|
||||
- `./meet.sh restore-dev-config` after build/test.
|
||||
- Do not manually rewrite workspace dependencies (`workspace:*`) or `pnpm-workspace.yaml`; use scripts above.
|
||||
|
||||
## Integration Points
|
||||
- External sibling repo dependency is `../openvidu/openvidu-components-angular/projects/openvidu-components-angular` (declared in `pnpm-workspace.yaml`).
|
||||
- Development workspace uses `pnpm-workspace.yaml`; CI/Docker mode is switched via `pnpm-workspace.docker.yaml` through `prepare-ci-build`.
|
||||
- Frontend integration relies on `@openvidu-meet/shared-components` and `openvidu-components-angular` via workspace links.
|
||||
- Backend integrations include LiveKit and optional blob providers (S3/ABS/GCS) configured through storage factory and environment (`meet-ce/backend/src/config/dependency-injector.config.ts`).
|
||||
- Local backend development env is `meet-ce/backend/.env.development` (LiveKit URL/API key/secret expected).
|
||||
|
||||
## Security
|
||||
- Auth is a validator chain with priority (`apiKey > roomMemberToken > accessToken > anonymous`) in `meet-ce/backend/src/middlewares/auth.middleware.ts`.
|
||||
- Header contract is centralized in `meet-ce/backend/src/config/internal-config.ts` (`authorization`, `x-refresh-token`, `x-room-member-token`, `x-api-key`).
|
||||
- Request context relies on request-scoped session service (AsyncLocalStorage-backed singleton); avoid bypassing it when adding auth-aware logic.
|
||||
- Frontend token persistence currently uses localStorage (`meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/token-storage.service.ts`); preserve existing flows when modifying auth.
|
||||
397
.github/workflows/.copilot-instructions.md
vendored
397
.github/workflows/.copilot-instructions.md
vendored
@ -1,397 +0,0 @@
|
||||
# OpenVidu Meet - Copilot Instructions
|
||||
|
||||
## Project Overview
|
||||
|
||||
**OpenVidu Meet** is a production-ready videoconferencing application built on top of OpenVidu and LiveKit. It provides a complete, customizable solution for video conferencing with both Community Edition (CE) and Pro versions.
|
||||
|
||||
### Key Technologies
|
||||
- **Frontend**: Angular 20.x, TypeScript, Angular Material
|
||||
- **Backend**: Node.js, Express framework
|
||||
- **Package Manager**: pnpm (v10.18.3+) with workspaces
|
||||
- **Build System**: Nx-like monorepo structure
|
||||
- **Testing**: Playwright (E2E), Jest (Unit)
|
||||
- **Containerization**: Docker multi-stage builds
|
||||
|
||||
---
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
openvidu-meet/
|
||||
├── meet-ce/ # Community Edition
|
||||
│ ├── frontend/ # Angular application
|
||||
│ │ ├── src/ # Main app source
|
||||
│ │ ├── webcomponent/ # Web Component build
|
||||
│ │ └── projects/
|
||||
│ │ └── shared-meet-components/ # Shared Angular library
|
||||
│ ├── backend/ # Express backend
|
||||
│ └── docker/ # Docker configurations
|
||||
├── meet-pro/ # Pro Edition (extends CE)
|
||||
├── testapp/ # Testing application for E2E tests
|
||||
├── meet-demo/ # Demo application for showcasing features
|
||||
├── scripts/ # Build and automation scripts
|
||||
└── meet.sh # Main CLI tool
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Architecture Principles
|
||||
|
||||
### 1. **Monorepo with External Dependencies**
|
||||
- Uses pnpm workspaces for internal packages
|
||||
- **External dependency**: `openvidu-components-angular` (located outside this repo)
|
||||
- **Development**: Uses `workspace:*` protocol for local linking
|
||||
- **CI/Docker**: Uses npm registry or tarball installations
|
||||
|
||||
### 2. **Dual Workspace Configuration**
|
||||
```yaml
|
||||
# Development (pnpm-workspace.yaml)
|
||||
packages:
|
||||
- 'meet-ce/**'
|
||||
- '../openvidu/openvidu-components-angular/projects/openvidu-components-angular'
|
||||
|
||||
# CI/Docker (pnpm-workspace.docker.yaml)
|
||||
packages:
|
||||
- 'meet-ce/**' # No external packages
|
||||
```
|
||||
|
||||
### 3. **Library Structure**
|
||||
- `@openvidu-meet/frontend`: Main Angular application
|
||||
- `@openvidu-meet/shared-components`: Reusable Angular library
|
||||
- Has `openvidu-components-angular` as **peerDependency**
|
||||
- Built as Angular library (ng-packagr)
|
||||
- Does NOT bundle dependencies
|
||||
|
||||
---
|
||||
|
||||
## Coding Standards
|
||||
|
||||
### TypeScript/Angular
|
||||
|
||||
```typescript
|
||||
// ✅ Good: Use interfaces for data models
|
||||
export interface Conference {
|
||||
id: string;
|
||||
name: string;
|
||||
participants: Participant[];
|
||||
}
|
||||
|
||||
// ✅ Good: Use Angular dependency injection
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class ConferenceService {
|
||||
constructor(private http: HttpClient) {}
|
||||
}
|
||||
|
||||
// ✅ Good: Use RxJS operators properly
|
||||
this.participants$.pipe(
|
||||
map(participants => participants.filter(p => p.isActive)),
|
||||
takeUntil(this.destroy$)
|
||||
).subscribe();
|
||||
|
||||
// ❌ Bad: Don't use 'any' type
|
||||
// ❌ Bad: Don't forget to unsubscribe from observables
|
||||
```
|
||||
|
||||
### Express Backend with TypeScript and InversifyJS
|
||||
|
||||
```typescript
|
||||
// ✅ Good: Use decorators and dependency injection
|
||||
@injectable()
|
||||
export class LoggerService {
|
||||
log(message: string): void {
|
||||
console.log(message);
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Build & Development
|
||||
|
||||
### Main CLI Tool: `meet.sh`
|
||||
|
||||
```bash
|
||||
# Development
|
||||
./meet.sh dev # Start development servers
|
||||
./meet.sh dev --skip-install # Skip dependency installation
|
||||
|
||||
# Building
|
||||
./meet.sh build # Build all packages
|
||||
./meet.sh build --skip-install # Build without installing deps
|
||||
./meet.sh build --base-href=/custom/ # Custom base href
|
||||
|
||||
# Docker
|
||||
./meet.sh build-docker ov-meet # Build Docker image (CE)
|
||||
./meet.sh build-docker ov-meet --components-angular-version 3.5.0-beta1
|
||||
|
||||
# CI Preparation (Important!)
|
||||
./meet.sh prepare-ci-build --components-angular-version 3.5.0-beta1
|
||||
./meet.sh prepare-ci-build --components-angular-tarball ./components.tgz
|
||||
./meet.sh restore-dev-config # Restore development config
|
||||
```
|
||||
|
||||
### CI/Docker Dependency Strategy
|
||||
|
||||
**Problem**: External package `openvidu-components-angular` is not in this repo.
|
||||
|
||||
**Solution**: Dual workspace configuration
|
||||
1. **Development**: Uses `workspace:*` (local linking)
|
||||
2. **CI/Docker**: Replaces `workspace:*` with registry/tarball versions
|
||||
|
||||
**Scripts**:
|
||||
- `scripts/prepare-ci-build.sh`: Prepares workspace for CI/Docker builds
|
||||
- `scripts/restore-dev-config.sh`: Restores development configuration
|
||||
|
||||
**Workflow**:
|
||||
```bash
|
||||
# Before CI/Docker build
|
||||
prepare-ci-build.sh --components-angular-version 3.5.0-beta1
|
||||
# Changes: pnpm-workspace.yaml → pnpm-workspace.docker.yaml
|
||||
# .npmrc → .npmrc.docker
|
||||
# package.json: workspace:* → ^3.5.0-beta1
|
||||
|
||||
# After build
|
||||
restore-dev-config.sh
|
||||
# Restores all original files
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Important Conventions
|
||||
|
||||
### 1. **Never Manually Edit package.json in CI**
|
||||
```bash
|
||||
# ❌ Bad: Manual sed in CI
|
||||
sed -i 's/workspace:\*/3.5.0/g' package.json
|
||||
|
||||
# ✅ Good: Use prepare-ci-build script
|
||||
./scripts/prepare-ci-build.sh --components-angular-version 3.5.0-beta1
|
||||
```
|
||||
|
||||
### 2. **peerDependencies Guidelines**
|
||||
- `shared-meet-components` declares `openvidu-components-angular` as **peerDependency**
|
||||
- ✅ Use semver ranges: `"^3.0.0"`
|
||||
- ✅ Use workspace protocol in dev: `"workspace:*"`
|
||||
- ❌ NEVER use `file:` in peerDependencies (invalid)
|
||||
|
||||
### 3. **Angular Version Compatibility**
|
||||
- Current: Angular 20.x
|
||||
- `openvidu-components-angular` must support same Angular version
|
||||
- Check peer dependency warnings carefully
|
||||
|
||||
### 4. **Docker Best Practices**
|
||||
```dockerfile
|
||||
# ✅ Good: Multi-stage build
|
||||
FROM node:22.19.0 AS builder
|
||||
# ... build stage ...
|
||||
FROM node:22.19.0-alpine AS runner
|
||||
# ... runtime stage ...
|
||||
|
||||
# ✅ Good: Use build args
|
||||
ARG COMPONENTS_VERSION=3.5.0-beta1
|
||||
ARG BASE_HREF=/
|
||||
|
||||
# ✅ Good: Use .dockerignore
|
||||
# Avoid copying unnecessary files
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Common Tasks
|
||||
|
||||
### Adding a New Feature
|
||||
1. Create feature in `meet-ce/frontend/src/app/features/`
|
||||
2. If reusable, consider moving to `shared-meet-components`
|
||||
3. Add tests in `*.spec.ts` files
|
||||
4. Update documentation
|
||||
|
||||
### Updating openvidu-components-angular
|
||||
```bash
|
||||
# Development (local changes)
|
||||
cd ../openvidu/openvidu-components-angular
|
||||
npm run lib:build
|
||||
cd -
|
||||
pnpm install
|
||||
|
||||
# CI/Docker (version update)
|
||||
./meet.sh prepare-ci-build --components-angular-version 3.5.0-beta1
|
||||
./meet.sh build
|
||||
./meet.sh restore-dev-config
|
||||
```
|
||||
|
||||
### Working with Shared Components
|
||||
```bash
|
||||
# Build shared library
|
||||
cd meet-ce/frontend/projects/shared-meet-components
|
||||
ng build
|
||||
|
||||
# Use in main app
|
||||
import { SomeComponent } from '@openvidu-meet/shared-components';
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Testing
|
||||
|
||||
### E2E Tests (Playwright)
|
||||
```bash
|
||||
npm run test:e2e # Run all E2E tests
|
||||
npm run test:e2e:ui # Run with UI
|
||||
npm run test:e2e:debug # Debug mode
|
||||
```
|
||||
|
||||
### Unit Tests (Jest)
|
||||
```bash
|
||||
npm run test # Run all unit tests
|
||||
npm run test:watch # Watch mode
|
||||
npm run test:coverage # With coverage
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### "workspace package not found" Error
|
||||
**Cause**: Using `workspace:*` in CI/Docker mode
|
||||
|
||||
**Solution**:
|
||||
```bash
|
||||
./meet.sh prepare-ci-build --components-angular-version 3.5.0-beta1
|
||||
```
|
||||
|
||||
### "Invalid peer dependency" Error
|
||||
**Cause**: Using `file:` in peerDependencies
|
||||
|
||||
**Solution**: Use semver range (`^3.0.0`) in peerDependencies, not `file:` paths
|
||||
|
||||
### Angular Version Mismatch Warnings
|
||||
**Cause**: `openvidu-components-angular` version doesn't support your Angular version
|
||||
|
||||
**Solution**: Update to compatible version
|
||||
```bash
|
||||
./meet.sh prepare-ci-build --components-angular-version 3.5.0-beta1 # Supports Angular 20
|
||||
```
|
||||
|
||||
### pnpm-lock.yaml Conflicts
|
||||
**Solution**: Restore development config first
|
||||
```bash
|
||||
./meet.sh restore-dev-config
|
||||
pnpm install
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## File Naming Conventions
|
||||
|
||||
```
|
||||
✅ Good:
|
||||
- conference.service.ts (Services)
|
||||
- conference.component.ts (Components)
|
||||
- conference.component.spec.ts (Tests)
|
||||
- conference.model.ts (Models/Interfaces)
|
||||
- conference.module.ts (Modules)
|
||||
|
||||
❌ Bad:
|
||||
- ConferenceService.ts (PascalCase in filename)
|
||||
- conference_service.ts (snake_case)
|
||||
- conferenceService.ts (camelCase)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Environment Variables
|
||||
|
||||
### Development
|
||||
```bash
|
||||
# Frontend
|
||||
OPENVIDU_SERVER_URL=ws://localhost:4443
|
||||
OPENVIDU_SECRET=MY_SECRET
|
||||
|
||||
# Backend
|
||||
PORT=3000
|
||||
OPENVIDU_URL=https://localhost:4443
|
||||
OPENVIDU_SECRET=MY_SECRET
|
||||
```
|
||||
|
||||
### Docker
|
||||
Set via `docker-compose.yml` or Dockerfile ARG/ENV
|
||||
|
||||
---
|
||||
|
||||
## Security Considerations
|
||||
|
||||
1. **Never commit secrets** to version control
|
||||
2. Use environment variables for sensitive data
|
||||
3. Validate all user inputs (DTOs in backend)
|
||||
4. Sanitize HTML content in frontend
|
||||
5. Use Angular's built-in XSS protection
|
||||
|
||||
---
|
||||
|
||||
## Performance Guidelines
|
||||
|
||||
1. **Lazy load modules** when possible
|
||||
2. **Use OnPush change detection** for performance-critical components
|
||||
3. **Unsubscribe from observables** (use `takeUntil` or async pipe)
|
||||
4. **Optimize Docker images** (multi-stage builds, alpine images)
|
||||
5. **Use pnpm** for faster installs and efficient disk usage
|
||||
|
||||
---
|
||||
|
||||
## Documentation References
|
||||
|
||||
- Full CI/Docker strategy: `docs/ci-docker-dependencies-strategy.md`
|
||||
- Dependency diagrams: `docs/ci-docker-dependencies-diagrams.md`
|
||||
- Implementation summary: `docs/IMPLEMENTATION_SUMMARY.md`
|
||||
- Validation checklist: `docs/VALIDATION_CHECKLIST.md`
|
||||
|
||||
---
|
||||
|
||||
## When Suggesting Code Changes
|
||||
|
||||
1. **Understand the context**: Is this for development or CI/Docker?
|
||||
2. **Check package.json**: Are dependencies using `workspace:*` or versions?
|
||||
3. **Consider peerDependencies**: Never use `file:` paths in peerDependencies
|
||||
4. **Follow conventions**: Use existing patterns in the codebase
|
||||
5. **Test implications**: Consider impact on both local dev and CI/Docker builds
|
||||
6. **Use prepare-ci-build**: For any CI/Docker related changes
|
||||
|
||||
---
|
||||
|
||||
## Quick Reference Commands
|
||||
|
||||
```bash
|
||||
# Development
|
||||
./meet.sh dev # Start dev servers
|
||||
./meet.sh build # Build all
|
||||
|
||||
# CI/Docker
|
||||
./meet.sh prepare-ci-build --components-angular-version 3.5.0-beta1
|
||||
./meet.sh build-docker ov-meet
|
||||
./meet.sh restore-dev-config
|
||||
|
||||
# Testing
|
||||
npm run test # Unit tests
|
||||
npm run test:e2e # E2E tests
|
||||
|
||||
# Package management
|
||||
pnpm install # Install deps
|
||||
pnpm add <package> --filter @openvidu-meet/frontend # Add to specific package
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Remember
|
||||
|
||||
- **Always use scripts** for CI/Docker preparation, never manual edits
|
||||
- **peerDependencies** are for library compatibility declarations, not installation
|
||||
- **workspace:*** works only when package is in workspace
|
||||
- **Test locally** before pushing CI/Docker changes
|
||||
- **Document breaking changes** and update this file accordingly
|
||||
|
||||
---
|
||||
|
||||
**Last Updated**: 2025-10-27
|
||||
**Project Version**: OpenVidu Meet CE/Pro
|
||||
**Maintained By**: OpenVidu Team
|
||||
@ -38,7 +38,7 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- test-name: 'Room Management API Tests (Rooms, Meetings)'
|
||||
- test-name: 'Room Management API Tests (Rooms, Room Members, Meetings)'
|
||||
test-script: 'test:integration-backend-room-management'
|
||||
- test-name: 'Webhook Tests'
|
||||
test-script: 'test:integration-backend-webhooks'
|
||||
@ -53,7 +53,7 @@ jobs:
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: '22.13'
|
||||
node-version: '24.13.1'
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
@ -191,7 +191,7 @@ jobs:
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: '22.13'
|
||||
node-version: '24.13.1'
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v2
|
||||
with:
|
||||
|
||||
2
.github/workflows/backend-unit-test.yaml
vendored
2
.github/workflows/backend-unit-test.yaml
vendored
@ -12,7 +12,7 @@ jobs:
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: '22.13'
|
||||
node-version: '24.13.1'
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
|
||||
2
.github/workflows/wc-e2e-test.yaml
vendored
2
.github/workflows/wc-e2e-test.yaml
vendored
@ -12,7 +12,7 @@ jobs:
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: '22.13'
|
||||
node-version: '24.13.1'
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
|
||||
2
.github/workflows/wc-unit-test.yaml
vendored
2
.github/workflows/wc-unit-test.yaml
vendored
@ -12,7 +12,7 @@ jobs:
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: '22.13'
|
||||
node-version: '24.13.1'
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
|
||||
2
meet-ce/.vscode/settings.json
vendored
2
meet-ce/.vscode/settings.json
vendored
@ -1,5 +1,5 @@
|
||||
{
|
||||
"jest.jestCommandLine": "node --experimental-vm-modules ../../node_modules/.bin/jest --config jest.integration.config.mjs",
|
||||
"jest.jestCommandLine": "../../node_modules/.bin/jest --config jest.integration.config.mjs",
|
||||
"jest.rootPath": "backend",
|
||||
"jest.nodeEnv": {
|
||||
"NODE_OPTIONS": "--experimental-vm-modules"
|
||||
|
||||
@ -5,8 +5,8 @@ const integrationConfig = {
|
||||
|
||||
runInBand: true,
|
||||
forceExit: true,
|
||||
detectOpenHandles: true,
|
||||
testMatch: ['**/tests/integration/**/*.(spec|test).ts'],
|
||||
detectOpenHandles: true,
|
||||
testMatch: ['**/tests/integration/**/*.(spec|test).ts']
|
||||
};
|
||||
|
||||
export default integrationConfig;
|
||||
|
||||
@ -1,6 +0,0 @@
|
||||
name: secret
|
||||
in: path
|
||||
required: true
|
||||
description: The secret value from the room URL used to access the room.
|
||||
schema:
|
||||
type: string
|
||||
@ -0,0 +1,7 @@
|
||||
name: userId
|
||||
in: path
|
||||
required: true
|
||||
description: The unique identifier of the user.
|
||||
schema:
|
||||
type: string
|
||||
example: 'alice_smith'
|
||||
@ -0,0 +1,9 @@
|
||||
in: query
|
||||
name: userId
|
||||
required: false
|
||||
description: >
|
||||
Filter users by userId. The search matches users that contain the specified text in their userId.
|
||||
For example, 'alice' will match 'alice_smith', 'bob_alice', and 'alice123'.
|
||||
schema:
|
||||
type: string
|
||||
example: 'alice_smith'
|
||||
@ -0,0 +1,9 @@
|
||||
name: userIds
|
||||
in: query
|
||||
required: true
|
||||
description: >
|
||||
Comma-separated list of user IDs to delete.
|
||||
Each ID should correspond to an existing user.
|
||||
schema:
|
||||
type: string
|
||||
example: 'alice_smith,john_doe'
|
||||
@ -0,0 +1,9 @@
|
||||
name: name
|
||||
in: query
|
||||
required: false
|
||||
description: >
|
||||
Filter users by name. The search is case-insensitive and matches users that contain the specified text in their name.
|
||||
For example, 'alice' will match 'Alice Smith' and 'Bob Alice'.
|
||||
schema:
|
||||
type: string
|
||||
example: 'Alice'
|
||||
@ -0,0 +1,8 @@
|
||||
name: role
|
||||
in: query
|
||||
required: false
|
||||
description: Filter users by their role.
|
||||
schema:
|
||||
type: string
|
||||
enum: [admin, user, room_member]
|
||||
example: 'admin'
|
||||
@ -0,0 +1,9 @@
|
||||
name: sortField
|
||||
in: query
|
||||
required: false
|
||||
description: The user field by which to sort the results.
|
||||
schema:
|
||||
type: string
|
||||
enum:
|
||||
- name
|
||||
- registrationDate
|
||||
@ -2,9 +2,9 @@ name: withMeeting
|
||||
in: query
|
||||
description: |
|
||||
Policy for room deletion when it has an active meeting. Options are:
|
||||
- force: The meeting will be ended, and the room will be deleted without waiting for participants to leave.
|
||||
- when_meeting_ends: The room will be deleted when the meeting ends.
|
||||
- fail: The deletion will fail if there is an active meeting.
|
||||
- `force`: The meeting will be ended, and the room will be deleted without waiting for participants to leave.
|
||||
- `when_meeting_ends`: The room will be deleted when the meeting ends.
|
||||
- `fail`: The deletion will fail if there is an active meeting.
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
|
||||
@ -0,0 +1,11 @@
|
||||
name: sortField
|
||||
in: query
|
||||
required: false
|
||||
description: The recording field by which to sort the results.
|
||||
schema:
|
||||
type: string
|
||||
enum:
|
||||
- startDate
|
||||
- roomName
|
||||
- duration
|
||||
- size
|
||||
@ -0,0 +1,15 @@
|
||||
name: X-Fields
|
||||
in: header
|
||||
description: >
|
||||
Comma-separated list of **Recording** fields to include in the response.
|
||||
Use this header to request only the data you need, reducing payload size and improving performance.
|
||||
|
||||
When combined with the `fields` query parameter, values are merged (union of unique fields).
|
||||
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
examples:
|
||||
basic:
|
||||
value: 'recordingId,roomId,status'
|
||||
summary: Only return basic recording information
|
||||
@ -2,9 +2,9 @@ name: withRecordings
|
||||
in: query
|
||||
description: |
|
||||
Policy for room deletion when it has recordings. Options are:
|
||||
- force: The room and its recordings will be deleted.
|
||||
- close: The room will be closed instead of deleted, maintaining its recordings.
|
||||
- fail: The deletion will fail if the room has recordings.
|
||||
- `force`: The room and its recordings will be deleted.
|
||||
- `close`: The room will be closed instead of deleted, maintaining its recordings.
|
||||
- `fail`: The deletion will fail if the room has recordings.
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
|
||||
@ -0,0 +1,10 @@
|
||||
name: extraFields
|
||||
in: query
|
||||
description: >
|
||||
Comma-separated list of additional fields to include in the response that are excluded by default to reduce payload size.
|
||||
<br/><br/>
|
||||
These fields are included even if not listed in `fields` query parameter or `X-Fields` header.
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
example: 'extrafields=config'
|
||||
@ -6,4 +6,4 @@ description: >
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
example: 'roomId,moderatorUrl'
|
||||
example: 'fields=roomId,roomName'
|
||||
|
||||
@ -0,0 +1,9 @@
|
||||
name: fields
|
||||
in: query
|
||||
description: >
|
||||
Specifies which fields to include in the response for the room member resource.
|
||||
Provide a comma-separated list of field names.
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
example: 'accessUrl,baseRole'
|
||||
@ -0,0 +1,7 @@
|
||||
name: memberId
|
||||
in: path
|
||||
required: true
|
||||
description: The unique identifier of the room member.
|
||||
schema:
|
||||
type: string
|
||||
example: 'abc123'
|
||||
@ -0,0 +1,9 @@
|
||||
name: memberIds
|
||||
in: query
|
||||
required: true
|
||||
description: >
|
||||
Comma-separated list of room member IDs to delete.
|
||||
Each ID should correspond to an existing member in the room.
|
||||
schema:
|
||||
type: string
|
||||
example: 'alice_smith,ext:abc123'
|
||||
@ -0,0 +1,9 @@
|
||||
name: name
|
||||
in: query
|
||||
required: false
|
||||
description: >
|
||||
Filter members by name. The search is case-insensitive and matches members whose names contain the specified text.
|
||||
For example, 'ali' will match 'Alice' and 'Malik'.
|
||||
schema:
|
||||
type: string
|
||||
example: 'Alice'
|
||||
@ -0,0 +1,9 @@
|
||||
name: sortField
|
||||
in: query
|
||||
required: false
|
||||
description: The room member field by which to sort the results.
|
||||
schema:
|
||||
type: string
|
||||
enum:
|
||||
- name
|
||||
- membershipDate
|
||||
@ -0,0 +1,10 @@
|
||||
name: sortField
|
||||
in: query
|
||||
required: false
|
||||
description: The room field by which to sort the results.
|
||||
schema:
|
||||
type: string
|
||||
enum:
|
||||
- creationDate
|
||||
- roomName
|
||||
- autoDeletionDate
|
||||
@ -0,0 +1,13 @@
|
||||
name: X-ExtraFields
|
||||
in: header
|
||||
description: >
|
||||
Comma-separated list of extra **Room** fields to include fully in the response.
|
||||
By default, large or nested properties (e.g., `config`) are excluded to reduce payload size.
|
||||
|
||||
These fields are included even if not listed in the `X-Fields` header.
|
||||
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
example: config
|
||||
|
||||
@ -0,0 +1,13 @@
|
||||
name: X-Fields
|
||||
in: header
|
||||
description: >
|
||||
Comma-separated list of **Room** fields to include in the response.
|
||||
Use this header to request only the data you need, reducing payload size and improving performance.
|
||||
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
examples:
|
||||
basic:
|
||||
value: 'roomId,roomName,status'
|
||||
summary: Only return basic room information
|
||||
@ -1,6 +0,0 @@
|
||||
name: sortField
|
||||
in: query
|
||||
required: false
|
||||
description: The field by which to sort the results.
|
||||
schema:
|
||||
type: string
|
||||
@ -0,0 +1,68 @@
|
||||
description: Room member addition options
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
userId:
|
||||
type: string
|
||||
example: 'alice_smith'
|
||||
description: |
|
||||
The unique identifier for a registered OpenVidu Meet user. This field should be provided when adding a registered Meet user as a member.
|
||||
|
||||
If provided:
|
||||
- The member will be associated with the Meet user account identified by this userId.
|
||||
- The 'name' field must be left blank or an error will be fired. It will be automatically set based on the Meet user's profile name.
|
||||
- The memberId will be set to this userId value.
|
||||
|
||||
If omitted, the member will be treated as an external user and 'name' must be provided.
|
||||
|
||||
Important: You must provide either 'userId' (for registered users) or 'name' (for external users), but NOT both.
|
||||
If both are provided, a validation error will be returned.
|
||||
name:
|
||||
type: string
|
||||
maxLength: 50
|
||||
example: 'Alice Smith'
|
||||
description: |
|
||||
The display name for the participant when joining the meeting with this member access. It is recommended to be unique for the members of the room to easily identify them in the meeting.
|
||||
|
||||
This field is required only when adding an external user. The 'userId' field must be left blank or an error will be fired.
|
||||
|
||||
Important: You must provide either 'userId' (for registered users) or 'name' (for external users), but NOT both.
|
||||
If both are provided, a validation error will be returned.
|
||||
baseRole:
|
||||
type: string
|
||||
enum:
|
||||
- moderator
|
||||
- speaker
|
||||
example: 'speaker'
|
||||
description: |
|
||||
The base role that defines the default permissions for this member. Options are:
|
||||
- moderator: By default, has full permissions to manage the room and meeting.
|
||||
- speaker: By default, has permissions to publish audio and video streams.
|
||||
|
||||
Individual permissions can be overridden through the customPermissions object.
|
||||
customPermissions:
|
||||
type: object
|
||||
additionalProperties:
|
||||
type: boolean
|
||||
example:
|
||||
canShareScreen: false
|
||||
canRecord: true
|
||||
description: |
|
||||
An optional object containing custom permission overrides for the base role.
|
||||
Only include the permissions you want to override from the base role defaults.
|
||||
Each property should be a permission name (e.g., 'canRecord', 'canShareScreen') with a boolean value.
|
||||
|
||||
For the complete list of all available permissions, see the full permissions schema:
|
||||
[MeetPermissions](#/schemas/MeetPermissions)
|
||||
required:
|
||||
- baseRole
|
||||
description: |
|
||||
Request body to add a new member to a room.
|
||||
|
||||
Important: You must provide either 'userId' (for registered Meet users) or 'name' (for external users), but NOT both.
|
||||
- If 'userId' is provided, the member will be linked to a registered user account and 'name' will be set from that account.
|
||||
- If 'name' is provided, the member will be treated as an external user without a linked account.
|
||||
- If both 'userId' and 'name' are provided or neither is provided, the request will fail with a validation error.
|
||||
@ -0,0 +1,42 @@
|
||||
description: User creation options
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
userId:
|
||||
type: string
|
||||
pattern: '^[a-z0-9_]+$'
|
||||
example: 'alice_smith'
|
||||
description: |
|
||||
The unique identifier for the new user. This must be unique across all users.
|
||||
|
||||
Validation: Must contain only lowercase letters, numbers, and underscores.
|
||||
name:
|
||||
type: string
|
||||
maxLength: 50
|
||||
example: 'Alice Smith'
|
||||
description: |
|
||||
The display name (profile name) for the user.
|
||||
role:
|
||||
type: string
|
||||
enum: ['admin', 'user', 'room_member']
|
||||
example: 'user'
|
||||
description: |
|
||||
The role to assign to the user. Available roles:
|
||||
- admin: Has full control over the entire application (configuration, users, rooms, recordings, etc).
|
||||
- user: Can create and manage their own created rooms and associated recordings. Can also access rooms they are a member of, but without management permissions.
|
||||
- room_member: Can only access rooms (and recordings) they are a member of, without ability to create or manage rooms.
|
||||
password:
|
||||
type: string
|
||||
format: password
|
||||
minLength: 5
|
||||
example: 'SecureP@ssw0rd'
|
||||
description: |
|
||||
The password for the new user account.
|
||||
required:
|
||||
- userId
|
||||
- name
|
||||
- role
|
||||
- password
|
||||
@ -3,4 +3,16 @@ required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '../../schemas/internal/user-credentials.yaml'
|
||||
type: object
|
||||
properties:
|
||||
username:
|
||||
type: string
|
||||
description: The username of the user.
|
||||
example: 'admin'
|
||||
password:
|
||||
type: string
|
||||
description: The password of the user.
|
||||
example: 'password123'
|
||||
required:
|
||||
- username
|
||||
- password
|
||||
|
||||
@ -1,10 +0,0 @@
|
||||
description: Room secret
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
secret:
|
||||
type: string
|
||||
description: The secret value from the room URL used to connect to the room.
|
||||
@ -0,0 +1,12 @@
|
||||
description: Reset user password request
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
newPassword:
|
||||
type: string
|
||||
minLength: 5
|
||||
description: The new temporary password for the user.
|
||||
example: 'newSecurePassword123'
|
||||
@ -0,0 +1,12 @@
|
||||
description: Update user role request
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
role:
|
||||
type: string
|
||||
enum: [admin, user, room_member]
|
||||
description: The new role to assign to the user.
|
||||
example: 'user'
|
||||
@ -0,0 +1,9 @@
|
||||
description: Room access configuration update options
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
access:
|
||||
$ref: '../schemas/meet-room-access-config.yaml'
|
||||
@ -8,10 +8,10 @@ content:
|
||||
$ref: '../schemas/meet-room-config.yaml#/MeetRoomConfig'
|
||||
example:
|
||||
config:
|
||||
chat:
|
||||
enabled: true
|
||||
recording:
|
||||
enabled: true
|
||||
encoding: H264_720P_30
|
||||
chat:
|
||||
enabled: true
|
||||
virtualBackground:
|
||||
enabled: true
|
||||
|
||||
@ -0,0 +1,33 @@
|
||||
description: Room member update options
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
baseRole:
|
||||
type: string
|
||||
enum:
|
||||
- moderator
|
||||
- speaker
|
||||
example: 'speaker'
|
||||
description: |
|
||||
The base role that defines the default permissions for this member. Options are:
|
||||
- moderator: By default, has full permissions to manage the room and meeting.
|
||||
- speaker: By default, has permissions to publish audio and video streams.
|
||||
|
||||
Individual permissions can be overridden through the 'customPermissions' object.
|
||||
customPermissions:
|
||||
type: object
|
||||
additionalProperties:
|
||||
type: boolean
|
||||
example:
|
||||
canShareScreen: false
|
||||
canRecord: true
|
||||
description: |
|
||||
An optional object containing custom permission overrides for the base role.
|
||||
Only include the permissions you want to override from the base role defaults.
|
||||
Each property should be a permission name (e.g., 'canRecord', 'canShareScreen') with a boolean value.
|
||||
|
||||
For the complete list of all available permissions, see the full permissions schema:
|
||||
[MeetPermissions](#/schemas/MeetPermissions)
|
||||
@ -0,0 +1,9 @@
|
||||
description: Room roles permissions update options
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
config:
|
||||
$ref: '../schemas/meet-room-roles-config.yaml'
|
||||
@ -0,0 +1,53 @@
|
||||
description: >
|
||||
**Mixed results**. Some room members were deleted successfully while others
|
||||
could not be deleted (e.g., if they do not exist).
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
deleted:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
description: List of room members that were deleted successfully.
|
||||
failed:
|
||||
type: array
|
||||
description: List of room members that could not be deleted along with the corresponding error messages.
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
memberId:
|
||||
type: string
|
||||
description: The unique identifier of the room member that was not deleted.
|
||||
example: 'alice_smith'
|
||||
error:
|
||||
type: string
|
||||
description: A message explaining why the deletion failed.
|
||||
example: 'Room member not found'
|
||||
examples:
|
||||
partial_deletion_with_errors:
|
||||
summary: Some room members were deleted successfully, others failed
|
||||
value:
|
||||
message: '2 room member(s) could not be deleted'
|
||||
deleted:
|
||||
- 'alice_smith'
|
||||
- 'ext:abc123'
|
||||
failed:
|
||||
- memberId: 'bob_jones'
|
||||
error: 'Room member not found'
|
||||
- memberId: 'ext:def456'
|
||||
error: 'Room member not found'
|
||||
|
||||
no_deletion_performed:
|
||||
summary: No room members were deleted
|
||||
value:
|
||||
message: '2 room member(s) could not be deleted'
|
||||
deleted: []
|
||||
failed:
|
||||
- memberId: 'bob_jones'
|
||||
error: 'Room member not found'
|
||||
- memberId: 'room-123--EG_ZYX--XX448'
|
||||
error: 'Room member not found'
|
||||
@ -1,8 +1,8 @@
|
||||
description: Recordings not from the same room
|
||||
description: Recordings not available for ZIP download
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: ../schemas/error.yaml
|
||||
example:
|
||||
error: 'Recording Error'
|
||||
message: 'None of the provided recording IDs belong to room "room123"'
|
||||
message: 'None of the provided recordings are available for ZIP download'
|
||||
@ -1,4 +1,4 @@
|
||||
description: Room not found
|
||||
description: Room cannot be updated because it has an active meeting.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
|
||||
@ -0,0 +1,16 @@
|
||||
description: Room member conflict error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '../schemas/error.yaml'
|
||||
examples:
|
||||
member_already_exists:
|
||||
summary: Member already exists
|
||||
value:
|
||||
error: 'Room Member Error'
|
||||
message: 'User "alice_smith" is already a member of room "room_123"'
|
||||
member_cannot_be_owner_or_admin:
|
||||
summary: Member cannot be owner or admin
|
||||
value:
|
||||
error: 'Room Member Error'
|
||||
message: 'User "alice_smith" cannot be added as a member of room "room_123" because they are the room owner or an admin'
|
||||
@ -0,0 +1,16 @@
|
||||
description: Room member or room not found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '../schemas/error.yaml'
|
||||
examples:
|
||||
member_not_found:
|
||||
summary: Room member does not exist in the specified room
|
||||
value:
|
||||
error: 'Room Member Error'
|
||||
message: 'Room member "abc123" does not exist in room "room_123"'
|
||||
room_not_found:
|
||||
summary: Room does not exist
|
||||
value:
|
||||
error: 'Room Error'
|
||||
message: 'Room "room_123" does not exist'
|
||||
@ -1,8 +0,0 @@
|
||||
description: Rooms appearance configuration not defined
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '../../schemas/error.yaml'
|
||||
example:
|
||||
error: 'Global Config Error'
|
||||
message: Rooms appearance configuration not defined
|
||||
@ -0,0 +1,53 @@
|
||||
description: >
|
||||
**Mixed results**. Some users were deleted successfully while others
|
||||
could not be deleted (e.g., if they do not exist).
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
deleted:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
description: List of users that were deleted successfully.
|
||||
failed:
|
||||
type: array
|
||||
description: List of users that could not be deleted along with the corresponding error messages.
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
userId:
|
||||
type: string
|
||||
description: The unique identifier of the user that was not deleted.
|
||||
example: 'john_doe'
|
||||
error:
|
||||
type: string
|
||||
description: A message explaining why the deletion failed.
|
||||
example: 'User not found'
|
||||
examples:
|
||||
partial_deletion_with_errors:
|
||||
summary: Some users were deleted successfully, others failed
|
||||
value:
|
||||
message: '2 user(s) could not be deleted'
|
||||
deleted:
|
||||
- 'john_doe'
|
||||
- 'jane_doe'
|
||||
failed:
|
||||
- userId: 'alice_smith'
|
||||
error: 'User not found'
|
||||
- userId: 'bob_jones'
|
||||
error: 'User not found'
|
||||
|
||||
no_deletion_performed:
|
||||
summary: No users were deleted
|
||||
value:
|
||||
message: '2 user(s) could not be deleted'
|
||||
deleted: []
|
||||
failed:
|
||||
- userId: 'alice_smith'
|
||||
error: 'User not found'
|
||||
- userId: 'bob_jones'
|
||||
error: 'User not found'
|
||||
@ -0,0 +1,8 @@
|
||||
description: User not found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '../../schemas/error.yaml'
|
||||
example:
|
||||
error: 'User Error'
|
||||
message: 'User "alice_smith" not found'
|
||||
@ -0,0 +1,8 @@
|
||||
description: UserId already exists
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '../../schemas/error.yaml'
|
||||
example:
|
||||
error: 'User Error'
|
||||
message: 'User "alice_smith" already exists'
|
||||
@ -0,0 +1,18 @@
|
||||
description: All specified users were deleted successfully.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
deleted:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
description: List of users that were deleted successfully.
|
||||
example:
|
||||
message: "All users deleted successfully"
|
||||
deleted:
|
||||
- 'alice_smith'
|
||||
- 'john_doe'
|
||||
@ -7,3 +7,11 @@ content:
|
||||
message:
|
||||
type: string
|
||||
example: Password for user 'admin' changed successfully
|
||||
accessToken:
|
||||
type: string
|
||||
description: >
|
||||
The access token to authenticate the user in subsequent requests. Only present when password had to be changed.
|
||||
refreshToken:
|
||||
type: string
|
||||
description: >
|
||||
The refresh token to obtain a new access token when the current one expires. Only present when password had to be changed.
|
||||
|
||||
@ -0,0 +1,12 @@
|
||||
description: User created successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '../../schemas/internal/meet-user.yaml'
|
||||
headers:
|
||||
Location:
|
||||
description: URL of the newly created user
|
||||
schema:
|
||||
type: string
|
||||
format: uri
|
||||
example: https://your-api.com/internal-api/v1/users/alice_smith
|
||||
@ -0,0 +1,10 @@
|
||||
description: User deleted successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
example:
|
||||
message: User 'alice_smith' deleted successfully
|
||||
@ -0,0 +1,5 @@
|
||||
description: Successfully retrieved authenticated user info
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '../../schemas/internal/meet-user.yaml'
|
||||
@ -1,5 +0,0 @@
|
||||
description: Successfully retrieved the room role and associated permissions
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '../../schemas/internal/room-member-role-permissions.yaml'
|
||||
@ -1,38 +0,0 @@
|
||||
description: Successfully retrieved all roles and associated permissions in a room
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: array
|
||||
items:
|
||||
$ref: '../../schemas/internal/room-member-role-permissions.yaml'
|
||||
example:
|
||||
- role: 'moderator'
|
||||
permissions:
|
||||
livekit:
|
||||
roomJoin: true
|
||||
room: 'room-123'
|
||||
canPublish: true
|
||||
canSubscribe: true
|
||||
canPublishData: true
|
||||
canUpdateOwnMetadata: true
|
||||
openvidu:
|
||||
canRecord: true
|
||||
canRetrieveRecordings: true
|
||||
canDeleteRecordings: true
|
||||
canChat: true
|
||||
canChangeVirtualBackground: true
|
||||
- role: 'speaker'
|
||||
permissions:
|
||||
livekit:
|
||||
roomJoin: true
|
||||
room: 'room-123'
|
||||
canPublish: true
|
||||
canSubscribe: true
|
||||
canPublishData: true
|
||||
canUpdateOwnMetadata: true
|
||||
openvidu:
|
||||
canRecord: false
|
||||
canRetrieveRecordings: true
|
||||
canDeleteRecordings: false
|
||||
canChat: true
|
||||
canChangeVirtualBackground: true
|
||||
@ -1,4 +1,4 @@
|
||||
description: Successfully retrieved user profile
|
||||
description: User retrieved successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
@ -0,0 +1,44 @@
|
||||
description: Successfully retrieved the list of users
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
users:
|
||||
type: array
|
||||
items:
|
||||
$ref: '../../schemas/internal/meet-user.yaml'
|
||||
pagination:
|
||||
$ref: '../../schemas/meet-pagination.yaml'
|
||||
examples:
|
||||
multiple_users:
|
||||
summary: Response with multiple users
|
||||
value:
|
||||
users:
|
||||
- userId: 'admin'
|
||||
name: 'Admin'
|
||||
registrationDate: 1620000000000
|
||||
role: 'admin'
|
||||
- userId: 'alice_smith'
|
||||
name: 'Alice Smith'
|
||||
registrationDate: 1620050000000
|
||||
role: 'user'
|
||||
- userId: 'bob_jones'
|
||||
name: 'Bob Jones'
|
||||
registrationDate: 1620100000000
|
||||
role: 'room_member'
|
||||
pagination:
|
||||
nextPageToken: 'eyJvZmZzZXQiOjEwfQ=='
|
||||
isTruncated: true
|
||||
maxItems: 3
|
||||
single_page:
|
||||
summary: Response with all users in a single page
|
||||
value:
|
||||
users:
|
||||
- userId: 'admin'
|
||||
name: 'Admin'
|
||||
registrationDate: 1620000000000
|
||||
role: 'admin'
|
||||
pagination:
|
||||
isTruncated: false
|
||||
maxItems: 10
|
||||
@ -0,0 +1,9 @@
|
||||
description: Successfully changed user password
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
example: Password for user 'alice_smith' has been reset successfully. User must change password on next login.
|
||||
@ -0,0 +1,11 @@
|
||||
description: Successfully updated user role
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
example: Role for user 'alice_smith' updated successfully to 'admin'
|
||||
user:
|
||||
$ref: '../../schemas/internal/meet-user.yaml'
|
||||
@ -15,3 +15,8 @@ content:
|
||||
type: string
|
||||
description: >
|
||||
The refresh token to obtain a new access token when the current one expires.
|
||||
mustChangePassword:
|
||||
type: boolean
|
||||
example: true
|
||||
description: >
|
||||
Indicates whether the user must change their password after login. Only present if password change is required.
|
||||
|
||||
@ -0,0 +1,12 @@
|
||||
description: Room member added successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '../schemas/meet-room-member.yaml'
|
||||
headers:
|
||||
Location:
|
||||
description: URL of the newly added room member
|
||||
schema:
|
||||
type: string
|
||||
format: uri
|
||||
example: https://your-api.com/api/v1/rooms/room-123/members/abc123
|
||||
@ -0,0 +1,18 @@
|
||||
description: All specified room members were deleted successfully.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
deleted:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
description: List of room members that were deleted successfully.
|
||||
example:
|
||||
message: "All room members deleted successfully"
|
||||
deleted:
|
||||
- 'alice_smith'
|
||||
- 'ext:abc123'
|
||||
@ -2,40 +2,238 @@ description: All specified rooms were successfully processed for deletion.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
successful:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
successCode:
|
||||
type: string
|
||||
enum:
|
||||
- room_deleted
|
||||
- room_with_active_meeting_deleted
|
||||
- room_with_active_meeting_scheduled_to_be_deleted
|
||||
- room_and_recordings_deleted
|
||||
- room_closed
|
||||
- room_with_active_meeting_and_recordings_deleted
|
||||
- room_with_active_meeting_closed
|
||||
- room_with_active_meeting_and_recordings_scheduled_to_be_deleted
|
||||
- room_with_active_meeting_scheduled_to_be_closed
|
||||
description: A code representing the success scenario
|
||||
message:
|
||||
type: string
|
||||
description: A message providing additional context about the success
|
||||
room:
|
||||
$ref: '../schemas/meet-room.yaml'
|
||||
description: List of rooms that were successfully processed for deletion
|
||||
example:
|
||||
message: 'All rooms successfully processed for deletion'
|
||||
successful:
|
||||
- roomId: room-123
|
||||
successCode: room_deleted
|
||||
message: Room 'room-123' deleted successfully
|
||||
- roomId: room-456
|
||||
successCode: room_with_active_meeting_deleted
|
||||
message: Room 'room-456' with active meeting deleted successfully
|
||||
oneOf:
|
||||
- type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
successful:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
successCode:
|
||||
type: string
|
||||
enum:
|
||||
- room_closed
|
||||
- room_with_active_meeting_scheduled_to_be_deleted
|
||||
- room_with_active_meeting_closed
|
||||
- room_with_active_meeting_and_recordings_scheduled_to_be_deleted
|
||||
- room_with_active_meeting_scheduled_to_be_closed
|
||||
description: A code representing the success scenario
|
||||
message:
|
||||
type: string
|
||||
description: A message providing additional context about the success
|
||||
room:
|
||||
allOf:
|
||||
- $ref: '../schemas/meet-room.yaml'
|
||||
- type: object
|
||||
properties:
|
||||
_extraFields:
|
||||
type: array
|
||||
description: >
|
||||
List of extra fields that can be included in the response based on the `X-ExtraFields` header or `extraFields` query parameter.
|
||||
items:
|
||||
type: string
|
||||
example: config
|
||||
description: List of rooms that were successfully processed for deletion
|
||||
- type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
successful:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
successCode:
|
||||
type: string
|
||||
enum:
|
||||
- room_deleted
|
||||
- room_with_active_meeting_deleted
|
||||
- room_and_recordings_deleted
|
||||
- room_with_active_meeting_and_recordings_deleted
|
||||
description: A code representing the success scenario
|
||||
message:
|
||||
type: string
|
||||
description: A message providing additional context about the success
|
||||
examples:
|
||||
room_closed:
|
||||
summary: Room closed successfully
|
||||
value:
|
||||
message: 'Bulk deletion request processed successfully'
|
||||
successful:
|
||||
- successCode: room_closed
|
||||
message: Room 'room-123' has been closed instead of deleted because it has recordings
|
||||
room:
|
||||
roomId: room-123
|
||||
roomName: room
|
||||
owner: 'admin'
|
||||
creationDate: 1620000000000
|
||||
access:
|
||||
anonymous:
|
||||
moderator:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=123456'
|
||||
speaker:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=654321'
|
||||
recording:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123/recordings?secret=987654'
|
||||
registered:
|
||||
enabled: false
|
||||
url: 'https://example.com/room/room-123'
|
||||
status: closed
|
||||
meetingEndAction: none
|
||||
_extraFields:
|
||||
- config
|
||||
room_with_active_meeting_scheduled_to_be_deleted:
|
||||
summary: Room with active meeting scheduled to be deleted
|
||||
value:
|
||||
message: 'Bulk deletion request processed successfully'
|
||||
successful:
|
||||
- successCode: room_with_active_meeting_scheduled_to_be_deleted
|
||||
message: Room 'room-123' with active meeting scheduled to be deleted when the meeting ends
|
||||
room:
|
||||
roomId: room-123
|
||||
roomName: room
|
||||
owner: 'admin'
|
||||
creationDate: 1620000000000
|
||||
access:
|
||||
anonymous:
|
||||
moderator:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=123456'
|
||||
speaker:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=654321'
|
||||
recording:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123/recordings?secret=987654'
|
||||
registered:
|
||||
enabled: false
|
||||
url: 'https://example.com/room/room-123'
|
||||
status: active_meeting
|
||||
meetingEndAction: delete
|
||||
_extraFields:
|
||||
- config
|
||||
room_with_active_meeting_closed:
|
||||
summary: Room with active meeting closed
|
||||
value:
|
||||
message: 'Bulk deletion request processed successfully'
|
||||
successful:
|
||||
- successCode: room_with_active_meeting_closed
|
||||
message: Room 'room-123' with active meeting has been closed instead of deleted because it has recordings
|
||||
room:
|
||||
roomId: room-123
|
||||
roomName: room
|
||||
owner: 'admin'
|
||||
creationDate: 1620000000000
|
||||
access:
|
||||
anonymous:
|
||||
moderator:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=123456'
|
||||
speaker:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=654321'
|
||||
recording:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123/recordings?secret=987654'
|
||||
registered:
|
||||
enabled: false
|
||||
url: 'https://example.com/room/room-123'
|
||||
status: active_meeting
|
||||
meetingEndAction: close
|
||||
_extraFields:
|
||||
- config
|
||||
room_with_active_meeting_and_recordings_scheduled_to_be_deleted:
|
||||
summary: Room with active meeting and recordings scheduled to be deleted
|
||||
value:
|
||||
message: 'Bulk deletion request processed successfully'
|
||||
successful:
|
||||
- successCode: room_with_active_meeting_and_recordings_scheduled_to_be_deleted
|
||||
message: Room 'room-123' with active meeting and its recordings scheduled to be deleted when the meeting ends
|
||||
room:
|
||||
roomId: room-123
|
||||
roomName: room
|
||||
owner: 'admin'
|
||||
creationDate: 1620000000000
|
||||
access:
|
||||
anonymous:
|
||||
moderator:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=123456'
|
||||
speaker:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=654321'
|
||||
recording:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123/recordings?secret=987654'
|
||||
registered:
|
||||
enabled: false
|
||||
url: 'https://example.com/room/room-123'
|
||||
status: active_meeting
|
||||
meetingEndAction: delete
|
||||
_extraFields:
|
||||
- config
|
||||
room_with_active_meeting_scheduled_to_be_closed:
|
||||
summary: Room with active meeting scheduled to be closed
|
||||
value:
|
||||
message: 'Bulk deletion request processed successfully'
|
||||
successful:
|
||||
- successCode: room_with_active_meeting_scheduled_to_be_closed
|
||||
message: Room 'room-123' with active meeting scheduled to be closed when the meeting ends because it has recordings
|
||||
room:
|
||||
roomId: room-123
|
||||
roomName: room
|
||||
owner: 'admin'
|
||||
creationDate: 1620000000000
|
||||
access:
|
||||
anonymous:
|
||||
moderator:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=123456'
|
||||
speaker:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=654321'
|
||||
recording:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123/recordings?secret=987654'
|
||||
registered:
|
||||
enabled: false
|
||||
url: 'https://example.com/room/room-123'
|
||||
status: active_meeting
|
||||
meetingEndAction: close
|
||||
_extraFields:
|
||||
- config
|
||||
|
||||
room_deleted:
|
||||
summary: Room deleted successfully
|
||||
value:
|
||||
message: 'Bulk deletion request processed successfully'
|
||||
successful:
|
||||
- successCode: room_deleted
|
||||
message: Room 'room-123' deleted successfully
|
||||
room_with_active_meeting_deleted:
|
||||
summary: Room with active meeting deleted
|
||||
value:
|
||||
message: 'Bulk deletion request processed successfully'
|
||||
successful:
|
||||
- successCode: room_with_active_meeting_deleted
|
||||
message: Room 'room-123' with active meeting deleted successfully
|
||||
room_and_recordings_deleted:
|
||||
summary: Room and recordings deleted
|
||||
value:
|
||||
message: 'Bulk deletion request processed successfully'
|
||||
successful:
|
||||
- successCode: room_and_recordings_deleted
|
||||
message: Room 'room-123' and its recordings deleted successfully
|
||||
room_with_active_meeting_and_recordings_deleted:
|
||||
summary: Room with active meeting and recordings deleted
|
||||
value:
|
||||
message: 'Bulk deletion request processed successfully'
|
||||
successful:
|
||||
- successCode: room_with_active_meeting_and_recordings_deleted
|
||||
message: Room 'room-123' with active meeting and its recordings deleted successfully
|
||||
|
||||
@ -2,7 +2,79 @@ description: Room created successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '../schemas/meet-room.yaml'
|
||||
allOf:
|
||||
- $ref: '../schemas/meet-room.yaml'
|
||||
- type: object
|
||||
properties:
|
||||
_extraFields:
|
||||
type: array
|
||||
description: >
|
||||
List of extra fields that can be included in the response based on the `X-ExtraFields` header.
|
||||
items:
|
||||
type: string
|
||||
example: config
|
||||
examples:
|
||||
default_room_created:
|
||||
summary: Room created successfully without config
|
||||
value:
|
||||
roomId: 'room-123'
|
||||
roomName: 'room'
|
||||
owner: 'admin'
|
||||
creationDate: 1620000000000
|
||||
autoDeletionDate: 1900000000000
|
||||
autoDeletionPolicy:
|
||||
withMeeting: when_meeting_ends
|
||||
withRecordings: close
|
||||
roles:
|
||||
moderator:
|
||||
permissions:
|
||||
canRecord: true
|
||||
canRetrieveRecordings: true
|
||||
canDeleteRecordings: true
|
||||
canJoinMeeting: true
|
||||
canShareAccessLinks: true
|
||||
canMakeModerator: true
|
||||
canKickParticipants: true
|
||||
canEndMeeting: true
|
||||
canPublishVideo: true
|
||||
canPublishAudio: true
|
||||
canShareScreen: true
|
||||
canReadChat: true
|
||||
canWriteChat: true
|
||||
canChangeVirtualBackground: true
|
||||
speaker:
|
||||
permissions:
|
||||
canRecord: false
|
||||
canRetrieveRecordings: true
|
||||
canDeleteRecordings: false
|
||||
canJoinMeeting: true
|
||||
canShareAccessLinks: false
|
||||
canMakeModerator: false
|
||||
canKickParticipants: false
|
||||
canEndMeeting: false
|
||||
canPublishVideo: true
|
||||
canPublishAudio: true
|
||||
canShareScreen: true
|
||||
canReadChat: true
|
||||
canWriteChat: true
|
||||
canChangeVirtualBackground: true
|
||||
access:
|
||||
anonymous:
|
||||
moderator:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=123456'
|
||||
speaker:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=654321'
|
||||
recording:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123/recordings?secret=987654'
|
||||
registered:
|
||||
enabled: false
|
||||
url: 'https://example.com/room/room-123'
|
||||
status: open
|
||||
meetingEndAction: none
|
||||
_extraFields: ['config']
|
||||
headers:
|
||||
Location:
|
||||
description: URL of the newly created room
|
||||
|
||||
@ -0,0 +1,10 @@
|
||||
description: Successfull deletion of the room member
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
example:
|
||||
message: Member 'abc123' deleted successfully from room 'room-123'
|
||||
@ -0,0 +1,112 @@
|
||||
description: Room was successfully processed for deletion
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
oneOf:
|
||||
- type: object
|
||||
required: [successCode, message, room]
|
||||
properties:
|
||||
successCode:
|
||||
type: string
|
||||
enum:
|
||||
- room_closed
|
||||
- room_with_active_meeting_closed
|
||||
message:
|
||||
type: string
|
||||
room:
|
||||
allOf:
|
||||
- $ref: '../schemas/meet-room.yaml'
|
||||
- type: object
|
||||
properties:
|
||||
_extraFields:
|
||||
type: array
|
||||
description: >
|
||||
List of extra fields that can be included in the response based on the `X-ExtraFields` header or `extraFields` query parameter.
|
||||
items:
|
||||
type: string
|
||||
example: config
|
||||
|
||||
- type: object
|
||||
required: [successCode, message]
|
||||
properties:
|
||||
successCode:
|
||||
type: string
|
||||
enum:
|
||||
- room_deleted
|
||||
- room_with_active_meeting_deleted
|
||||
- room_and_recordings_deleted
|
||||
- room_with_active_meeting_and_recordings_deleted
|
||||
message:
|
||||
type: string
|
||||
|
||||
examples:
|
||||
room_deleted:
|
||||
value:
|
||||
successCode: room_deleted
|
||||
message: Room 'room-123' deleted successfully
|
||||
room_with_active_meeting_deleted:
|
||||
value:
|
||||
successCode: room_with_active_meeting_deleted
|
||||
message: Room 'room-123' with active meeting deleted successfully
|
||||
room_and_recordings_deleted:
|
||||
value:
|
||||
successCode: room_and_recordings_deleted
|
||||
message: Room 'room-123' and its recordings deleted successfully
|
||||
room_closed:
|
||||
value:
|
||||
successCode: room_closed
|
||||
message: Room 'room-123' has been closed instead of deleted because it has recordings
|
||||
room:
|
||||
roomId: room-123
|
||||
roomName: room
|
||||
owner: 'admin'
|
||||
creationDate: 1620000000000
|
||||
access:
|
||||
anonymous:
|
||||
moderator:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=123456'
|
||||
speaker:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=654321'
|
||||
recording:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123/recordings?secret=987654'
|
||||
registered:
|
||||
enabled: false
|
||||
url: 'https://example.com/room/room-123'
|
||||
status: closed
|
||||
meetingEndAction: none
|
||||
_extraFields:
|
||||
- config
|
||||
room_with_active_meeting_and_recordings_deleted:
|
||||
value:
|
||||
successCode: room_with_active_meeting_and_recordings_deleted
|
||||
message: Room 'room-123' with active meeting and its recordings deleted successfully
|
||||
room_with_active_meeting_closed:
|
||||
value:
|
||||
successCode: room_with_active_meeting_closed
|
||||
message: Room 'room-123' with active meeting has been closed instead of deleted because it has recordings
|
||||
room:
|
||||
roomId: room-123
|
||||
roomName: room
|
||||
owner: 'admin'
|
||||
creationDate: 1620000000000
|
||||
access:
|
||||
anonymous:
|
||||
moderator:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=123456'
|
||||
speaker:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=654321'
|
||||
recording:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123/recordings?secret=987654'
|
||||
registered:
|
||||
enabled: false
|
||||
url: 'https://example.com/room/room-123'
|
||||
status: active_meeting
|
||||
meetingEndAction: close
|
||||
_extraFields:
|
||||
- config
|
||||
@ -0,0 +1,110 @@
|
||||
description: Room was successfully scheduled to be deleted or closed
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
successCode:
|
||||
type: string
|
||||
enum:
|
||||
- room_with_active_meeting_scheduled_to_be_deleted
|
||||
- room_with_active_meeting_and_recordings_scheduled_to_be_deleted
|
||||
- room_with_active_meeting_scheduled_to_be_closed
|
||||
description: A code representing the success scenario
|
||||
message:
|
||||
type: string
|
||||
description: A message providing additional context about the success
|
||||
room:
|
||||
allOf:
|
||||
- $ref: '../schemas/meet-room.yaml'
|
||||
- type: object
|
||||
properties:
|
||||
_extraFields:
|
||||
type: array
|
||||
description: >
|
||||
List of extra fields that can be included in the response based on the `X-ExtraFields` header or `extraFields` query parameter.
|
||||
items:
|
||||
type: string
|
||||
example: config
|
||||
examples:
|
||||
room_with_active_meeting_scheduled_to_be_deleted:
|
||||
value:
|
||||
successCode: room_with_active_meeting_scheduled_to_be_deleted
|
||||
message: Room 'room-123' with active meeting scheduled to be deleted when the meeting ends
|
||||
room:
|
||||
roomId: room-123
|
||||
roomName: room
|
||||
owner: 'admin'
|
||||
creationDate: 1620000000000
|
||||
access:
|
||||
anonymous:
|
||||
moderator:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=123456'
|
||||
speaker:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=654321'
|
||||
recording:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123/recordings?secret=987654'
|
||||
registered:
|
||||
enabled: false
|
||||
url: 'https://example.com/room/room-123'
|
||||
status: active_meeting
|
||||
meetingEndAction: delete
|
||||
_extraFields:
|
||||
- config
|
||||
room_with_active_meeting_and_recordings_scheduled_to_be_deleted:
|
||||
value:
|
||||
successCode: room_with_active_meeting_and_recordings_scheduled_to_be_deleted
|
||||
message: Room 'room-123' with active meeting and its recordings scheduled to be deleted when the meeting ends
|
||||
room:
|
||||
roomId: room-123
|
||||
roomName: room
|
||||
owner: 'admin'
|
||||
creationDate: 1620000000000
|
||||
access:
|
||||
anonymous:
|
||||
moderator:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=123456'
|
||||
speaker:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=654321'
|
||||
recording:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123/recordings?secret=987654'
|
||||
registered:
|
||||
enabled: false
|
||||
url: 'https://example.com/room/room-123'
|
||||
status: active_meeting
|
||||
meetingEndAction: delete
|
||||
_extraFields:
|
||||
- config
|
||||
room_with_active_meeting_scheduled_to_be_closed:
|
||||
value:
|
||||
successCode: room_with_active_meeting_scheduled_to_be_closed
|
||||
message: Room 'room-123' with active meeting scheduled to be closed when the meeting ends because it has recordings
|
||||
room:
|
||||
roomId: room-123
|
||||
roomName: room
|
||||
owner: 'admin'
|
||||
creationDate: 1620000000000
|
||||
access:
|
||||
anonymous:
|
||||
moderator:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=123456'
|
||||
speaker:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=654321'
|
||||
recording:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123/recordings?secret=987654'
|
||||
registered:
|
||||
enabled: false
|
||||
url: 'https://example.com/room/room-123'
|
||||
status: active_meeting
|
||||
meetingEndAction: close
|
||||
_extraFields:
|
||||
- config
|
||||
@ -12,6 +12,7 @@ content:
|
||||
roomName: 'room'
|
||||
status: 'complete'
|
||||
layout: 'grid'
|
||||
encoding: 'H264_720P_30'
|
||||
filename: 'room-123--XX445.mp4'
|
||||
startDate: 1600000000000
|
||||
endDate: 1600000003600
|
||||
@ -27,5 +28,6 @@ content:
|
||||
roomName: 'room'
|
||||
status: 'active'
|
||||
layout: 'grid'
|
||||
encoding: 'H264_720P_30'
|
||||
filename: 'room-456--QR789.mp4'
|
||||
startDate: 1682500000000
|
||||
|
||||
@ -20,6 +20,7 @@ content:
|
||||
roomName: 'room'
|
||||
status: 'active'
|
||||
layout: 'grid'
|
||||
encoding: 'H264_720P_30'
|
||||
filename: 'room-123--XX445.mp4'
|
||||
startDate: 1620000000000
|
||||
endDate: 1620000003600
|
||||
@ -31,6 +32,7 @@ content:
|
||||
roomName: 'room'
|
||||
status: 'complete'
|
||||
layout: 'grid'
|
||||
encoding: 'H264_720P_30'
|
||||
filename: 'room-456--XX678.mp4'
|
||||
startDate: 1625000000000
|
||||
endDate: 1625000007200
|
||||
|
||||
@ -0,0 +1,5 @@
|
||||
description: Success response for retrieving a room member info
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '../schemas/meet-room-member.yaml'
|
||||
@ -0,0 +1,78 @@
|
||||
description: Successfully retrieved the list of room members
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
members:
|
||||
type: array
|
||||
items:
|
||||
$ref: '../schemas/meet-room-member.yaml'
|
||||
pagination:
|
||||
$ref: '../schemas/meet-pagination.yaml'
|
||||
|
||||
examples:
|
||||
complete_member_details:
|
||||
summary: Full room member details response with multiple members
|
||||
value:
|
||||
members:
|
||||
- memberId: 'alice_smith'
|
||||
name: 'Alice Smith'
|
||||
membershipDate: 1620000000000
|
||||
accessUrl: 'https://example.com/room/room-123'
|
||||
baseRole: 'moderator'
|
||||
customPermissions:
|
||||
canEndMeeting: false
|
||||
effectivePermissions:
|
||||
canRecord: true
|
||||
canRetrieveRecordings: true
|
||||
canDeleteRecordings: true
|
||||
canJoinMeeting: true
|
||||
canShareAccessLinks: true
|
||||
canMakeModerator: true
|
||||
canKickParticipants: true
|
||||
canEndMeeting: false
|
||||
canPublishVideo: true
|
||||
canPublishAudio: true
|
||||
canShareScreen: true
|
||||
canReadChat: true
|
||||
canWriteChat: true
|
||||
canChangeVirtualBackground: true
|
||||
- memberId: 'ext-abc123'
|
||||
name: 'Bob'
|
||||
membershipDate: 1620003600000
|
||||
accessUrl: 'https://example.com/room/room-123?secret=ext-abc123'
|
||||
baseRole: 'speaker'
|
||||
customPermissions:
|
||||
canShareScreen: false
|
||||
canRecord: true
|
||||
effectivePermissions:
|
||||
canRecord: true
|
||||
canRetrieveRecordings: true
|
||||
canDeleteRecordings: false
|
||||
canJoinMeeting: true
|
||||
canShareAccessLinks: false
|
||||
canMakeModerator: false
|
||||
canKickParticipants: false
|
||||
canEndMeeting: false
|
||||
canPublishVideo: true
|
||||
canPublishAudio: true
|
||||
canShareScreen: false
|
||||
canReadChat: true
|
||||
canWriteChat: true
|
||||
canChangeVirtualBackground: true
|
||||
currentParticipantIdentity: 'bob-5678'
|
||||
pagination:
|
||||
isTruncated: false
|
||||
maxItems: 10
|
||||
fields=accessUrl,baseRole:
|
||||
summary: Response with only accessUrl and baseRole for each member
|
||||
value:
|
||||
members:
|
||||
- accessUrl: 'https://example.com/room/room-123'
|
||||
baseRole: 'moderator'
|
||||
- accessUrl: 'https://example.com/room/room-123?secret=ext-abc123'
|
||||
baseRole: 'speaker'
|
||||
pagination:
|
||||
isTruncated: false
|
||||
maxItems: 10
|
||||
@ -2,41 +2,80 @@ description: Success response for retrieving a room
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '../schemas/meet-room.yaml'
|
||||
allOf:
|
||||
- $ref: '../schemas/meet-room.yaml'
|
||||
- type: object
|
||||
properties:
|
||||
_extraFields:
|
||||
type: array
|
||||
description: >
|
||||
List of extra fields that can be included in the response based on the `X-ExtraFields` header or `extraFields` query parameter.
|
||||
items:
|
||||
type: string
|
||||
example: config
|
||||
examples:
|
||||
complete_room_details:
|
||||
summary: Full room details response
|
||||
default_room_details:
|
||||
summary: Full room details response without extra fields
|
||||
value:
|
||||
roomId: 'room-123'
|
||||
roomName: 'room'
|
||||
owner: 'admin'
|
||||
creationDate: 1620000000000
|
||||
autoDeletionDate: 1900000000000
|
||||
autoDeletionPolicy:
|
||||
withMeeting: when_meeting_ends
|
||||
withRecordings: close
|
||||
config:
|
||||
chat:
|
||||
enabled: true
|
||||
recording:
|
||||
roles:
|
||||
moderator:
|
||||
permissions:
|
||||
canRecord: true
|
||||
canRetrieveRecordings: true
|
||||
canDeleteRecordings: true
|
||||
canJoinMeeting: true
|
||||
canShareAccessLinks: true
|
||||
canMakeModerator: true
|
||||
canKickParticipants: true
|
||||
canEndMeeting: true
|
||||
canPublishVideo: true
|
||||
canPublishAudio: true
|
||||
canShareScreen: true
|
||||
canReadChat: true
|
||||
canWriteChat: true
|
||||
canChangeVirtualBackground: true
|
||||
speaker:
|
||||
permissions:
|
||||
canRecord: false
|
||||
canRetrieveRecordings: true
|
||||
canDeleteRecordings: false
|
||||
canJoinMeeting: true
|
||||
canShareAccessLinks: false
|
||||
canMakeModerator: false
|
||||
canKickParticipants: false
|
||||
canEndMeeting: false
|
||||
canPublishVideo: true
|
||||
canPublishAudio: true
|
||||
canShareScreen: true
|
||||
canReadChat: true
|
||||
canWriteChat: true
|
||||
canChangeVirtualBackground: true
|
||||
access:
|
||||
anonymous:
|
||||
moderator:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=123456'
|
||||
speaker:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=654321'
|
||||
recording:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123/recordings?secret=987654'
|
||||
registered:
|
||||
enabled: false
|
||||
layout: grid
|
||||
encoding: H264_720P_30
|
||||
allowAccessTo: admin_moderator_speaker
|
||||
virtualBackground:
|
||||
enabled: true
|
||||
e2ee:
|
||||
enabled: false
|
||||
captions:
|
||||
enabled: true
|
||||
moderatorUrl: 'http://localhost:6080/room/room-123?secret=123456'
|
||||
speakerUrl: 'http://localhost:6080/room/room-123?secret=654321'
|
||||
url: 'https://example.com/room/room-123'
|
||||
status: open
|
||||
meetingEndAction: none
|
||||
|
||||
fields=roomId:
|
||||
summary: Response with only the roomId
|
||||
value:
|
||||
roomId: 'room-123'
|
||||
_extraFields:
|
||||
- config
|
||||
|
||||
fields=roomId,roomName,creationDate,autoDeletionDate,config:
|
||||
summary: Room details with roomId, roomName, creationDate, autoDeletionDate, and config
|
||||
@ -49,25 +88,109 @@ content:
|
||||
chat:
|
||||
enabled: true
|
||||
recording:
|
||||
enabled: false
|
||||
enabled: true
|
||||
layout: grid
|
||||
encoding:
|
||||
video:
|
||||
width: 1920
|
||||
height: 1080
|
||||
framerate: 30
|
||||
codec: H264_MAIN
|
||||
audio:
|
||||
codec: OPUS
|
||||
bitrate: 128
|
||||
allowAccessTo: admin_moderator_speaker
|
||||
encoding: H264_720P_30
|
||||
virtualBackground:
|
||||
enabled: true
|
||||
e2ee:
|
||||
enabled: false
|
||||
captions:
|
||||
enabled: true
|
||||
_extraFields:
|
||||
- config
|
||||
|
||||
fields=moderatorUrl,speakerUrl:
|
||||
summary: Response containing only moderator and speaker URLs
|
||||
extraFields=config:
|
||||
summary: Room details with expanded config
|
||||
value:
|
||||
moderatorUrl: 'http://localhost:6080/room/room-123?secret=123456'
|
||||
speakerUrl: 'http://localhost:6080/room/room-123?secret=654321'
|
||||
roomId: 'room-123'
|
||||
roomName: 'room'
|
||||
owner: 'admin'
|
||||
creationDate: 1620000000000
|
||||
autoDeletionDate: 1900000000000
|
||||
autoDeletionPolicy:
|
||||
withMeeting: when_meeting_ends
|
||||
withRecordings: close
|
||||
config:
|
||||
chat:
|
||||
enabled: true
|
||||
recording:
|
||||
enabled: true
|
||||
layout: grid
|
||||
encoding: H264_720P_30
|
||||
virtualBackground:
|
||||
enabled: true
|
||||
e2ee:
|
||||
enabled: false
|
||||
captions:
|
||||
enabled: true
|
||||
roles:
|
||||
moderator:
|
||||
permissions:
|
||||
canRecord: true
|
||||
canRetrieveRecordings: true
|
||||
canDeleteRecordings: true
|
||||
canJoinMeeting: true
|
||||
canShareAccessLinks: true
|
||||
canMakeModerator: true
|
||||
canKickParticipants: true
|
||||
canEndMeeting: true
|
||||
canPublishVideo: true
|
||||
canPublishAudio: true
|
||||
canShareScreen: true
|
||||
canReadChat: true
|
||||
canWriteChat: true
|
||||
canChangeVirtualBackground: true
|
||||
speaker:
|
||||
permissions:
|
||||
canRecord: false
|
||||
canRetrieveRecordings: true
|
||||
canDeleteRecordings: false
|
||||
canJoinMeeting: true
|
||||
canShareAccessLinks: false
|
||||
canMakeModerator: false
|
||||
canKickParticipants: false
|
||||
canEndMeeting: false
|
||||
canPublishVideo: true
|
||||
canPublishAudio: true
|
||||
canShareScreen: true
|
||||
canReadChat: true
|
||||
canWriteChat: true
|
||||
canChangeVirtualBackground: true
|
||||
access:
|
||||
anonymous:
|
||||
moderator:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=123456'
|
||||
speaker:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=654321'
|
||||
recording:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123/recordings?secret=987654'
|
||||
registered:
|
||||
enabled: false
|
||||
url: 'https://example.com/room/room-123'
|
||||
status: open
|
||||
meetingEndAction: none
|
||||
_extraFields:
|
||||
- config
|
||||
fields=access:
|
||||
summary: Response containing only access configuration
|
||||
value:
|
||||
access:
|
||||
anonymous:
|
||||
moderator:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=123456'
|
||||
speaker:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=654321'
|
||||
recording:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123/recordings?secret=987654'
|
||||
registered:
|
||||
enabled: false
|
||||
url: 'https://example.com/room/room-123'
|
||||
_extraFields:
|
||||
- config
|
||||
|
||||
@ -8,70 +8,137 @@ content:
|
||||
type: array
|
||||
items:
|
||||
$ref: '../schemas/meet-room.yaml'
|
||||
_extraFields:
|
||||
type: array
|
||||
description: >
|
||||
List of extra fields that can be included in the response based on the `X-ExtraFields` header or `extraFields` query parameter.
|
||||
items:
|
||||
type: string
|
||||
example: config
|
||||
pagination:
|
||||
$ref: '../schemas/meet-pagination.yaml'
|
||||
|
||||
examples:
|
||||
complete_room_details:
|
||||
summary: Full room details response with multiple rooms
|
||||
default_room_details:
|
||||
summary: Full room details without extra fields for multiple rooms
|
||||
value:
|
||||
rooms:
|
||||
- roomId: 'room-123'
|
||||
roomName: 'room'
|
||||
owner: 'admin'
|
||||
creationDate: 1620000000000
|
||||
autoDeletionDate: 1900000000000
|
||||
autoDeletionPolicy:
|
||||
withMeeting: when_meeting_ends
|
||||
withRecordings: close
|
||||
config:
|
||||
chat:
|
||||
enabled: true
|
||||
recording:
|
||||
roles:
|
||||
moderator:
|
||||
permissions:
|
||||
canRecord: true
|
||||
canRetrieveRecordings: true
|
||||
canDeleteRecordings: true
|
||||
canJoinMeeting: true
|
||||
canShareAccessLinks: true
|
||||
canMakeModerator: true
|
||||
canKickParticipants: true
|
||||
canEndMeeting: true
|
||||
canPublishVideo: true
|
||||
canPublishAudio: true
|
||||
canShareScreen: true
|
||||
canReadChat: true
|
||||
canWriteChat: true
|
||||
canChangeVirtualBackground: true
|
||||
speaker:
|
||||
permissions:
|
||||
canRecord: false
|
||||
canRetrieveRecordings: true
|
||||
canDeleteRecordings: false
|
||||
canJoinMeeting: true
|
||||
canShareAccessLinks: false
|
||||
canMakeModerator: false
|
||||
canKickParticipants: false
|
||||
canEndMeeting: false
|
||||
canPublishVideo: true
|
||||
canPublishAudio: true
|
||||
canShareScreen: true
|
||||
canReadChat: true
|
||||
canWriteChat: true
|
||||
canChangeVirtualBackground: true
|
||||
access:
|
||||
anonymous:
|
||||
moderator:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=123456'
|
||||
speaker:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=654321'
|
||||
recording:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123/recordings?secret=987654'
|
||||
registered:
|
||||
enabled: false
|
||||
layout: grid
|
||||
encoding: H264_720P_30
|
||||
allowAccessTo: admin_moderator_speaker
|
||||
virtualBackground:
|
||||
enabled: true
|
||||
e2ee:
|
||||
enabled: false
|
||||
captions:
|
||||
enabled: true
|
||||
moderatorUrl: 'http://localhost:6080/room/room-123?secret=123456'
|
||||
speakerUrl: 'http://localhost:6080/room/room-123?secret=654321'
|
||||
url: 'https://example.com/room/room-123'
|
||||
status: open
|
||||
meetingEndAction: none
|
||||
- roomId: 'room-456'
|
||||
roomName: 'room'
|
||||
owner: 'alice_smith'
|
||||
creationDate: 1620001000000
|
||||
autoDeletionDate: 1900000000000
|
||||
autoDeletionPolicy:
|
||||
withMeeting: when_meeting_ends
|
||||
withRecordings: close
|
||||
config:
|
||||
chat:
|
||||
enabled: false
|
||||
recording:
|
||||
roles:
|
||||
moderator:
|
||||
permissions:
|
||||
canRecord: true
|
||||
canRetrieveRecordings: true
|
||||
canDeleteRecordings: false
|
||||
canJoinMeeting: true
|
||||
canShareAccessLinks: true
|
||||
canMakeModerator: false
|
||||
canKickParticipants: true
|
||||
canEndMeeting: true
|
||||
canPublishVideo: true
|
||||
canPublishAudio: true
|
||||
canShareScreen: true
|
||||
canReadChat: true
|
||||
canWriteChat: true
|
||||
canChangeVirtualBackground: true
|
||||
speaker:
|
||||
permissions:
|
||||
canRecord: true
|
||||
canRetrieveRecordings: true
|
||||
canDeleteRecordings: false
|
||||
canJoinMeeting: true
|
||||
canShareAccessLinks: false
|
||||
canMakeModerator: false
|
||||
canKickParticipants: false
|
||||
canEndMeeting: false
|
||||
canPublishVideo: true
|
||||
canPublishAudio: true
|
||||
canShareScreen: false
|
||||
canReadChat: true
|
||||
canWriteChat: true
|
||||
canChangeVirtualBackground: true
|
||||
access:
|
||||
anonymous:
|
||||
moderator:
|
||||
enabled: false
|
||||
url: 'https://example.com/room/room-456?secret=789012'
|
||||
speaker:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-456?secret=210987'
|
||||
recording:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-456/recordings?secret=345678'
|
||||
registered:
|
||||
enabled: true
|
||||
layout: grid
|
||||
encoding:
|
||||
video:
|
||||
width: 1280
|
||||
height: 720
|
||||
framerate: 60
|
||||
codec: H264_HIGH
|
||||
audio:
|
||||
codec: AAC
|
||||
bitrate: 192
|
||||
allowAccessTo: admin_moderator_speaker
|
||||
virtualBackground:
|
||||
enabled: false
|
||||
e2ee:
|
||||
enabled: false
|
||||
moderatorUrl: 'http://localhost:6080/room/room-456?secret=789012'
|
||||
speakerUrl: 'http://localhost:6080/room/room-456?secret=210987'
|
||||
url: 'https://example.com/room/room-456'
|
||||
status: open
|
||||
meetingEndAction: none
|
||||
_extraFields:
|
||||
- config
|
||||
pagination:
|
||||
isTruncated: false
|
||||
maxItems: 10
|
||||
@ -81,53 +148,203 @@ content:
|
||||
rooms:
|
||||
- roomId: 'room-123'
|
||||
- roomId: 'room-456'
|
||||
_extraFields:
|
||||
- config
|
||||
pagination:
|
||||
isTruncated: false
|
||||
maxItems: 10
|
||||
|
||||
fields=roomId,roomName,creationDate,autoDeletionDate,config:
|
||||
summary: Room details including config but no URLs
|
||||
extraFields=config:
|
||||
summary: Room details with expanded config
|
||||
value:
|
||||
rooms:
|
||||
- roomId: 'room-123'
|
||||
roomName: 'room'
|
||||
owner: 'admin'
|
||||
creationDate: 1620000000000
|
||||
autoDeletionDate: 1900000000000
|
||||
autoDeletionPolicy:
|
||||
withMeeting: when_meeting_ends
|
||||
withRecordings: close
|
||||
config:
|
||||
chat:
|
||||
enabled: true
|
||||
recording:
|
||||
enabled: false
|
||||
layout: grid
|
||||
encoding: H264_720P_30
|
||||
chat:
|
||||
enabled: true
|
||||
virtualBackground:
|
||||
enabled: true
|
||||
e2ee:
|
||||
enabled: false
|
||||
captions:
|
||||
enabled: true
|
||||
roles:
|
||||
moderator:
|
||||
permissions:
|
||||
canRecord: true
|
||||
canRetrieveRecordings: true
|
||||
canDeleteRecordings: true
|
||||
canJoinMeeting: true
|
||||
canShareAccessLinks: true
|
||||
canMakeModerator: true
|
||||
canKickParticipants: true
|
||||
canEndMeeting: true
|
||||
canPublishVideo: true
|
||||
canPublishAudio: true
|
||||
canShareScreen: true
|
||||
canReadChat: true
|
||||
canWriteChat: true
|
||||
canChangeVirtualBackground: true
|
||||
speaker:
|
||||
permissions:
|
||||
canRecord: false
|
||||
canRetrieveRecordings: true
|
||||
canDeleteRecordings: false
|
||||
canJoinMeeting: true
|
||||
canShareAccessLinks: false
|
||||
canMakeModerator: false
|
||||
canKickParticipants: false
|
||||
canEndMeeting: false
|
||||
canPublishVideo: true
|
||||
canPublishAudio: true
|
||||
canShareScreen: true
|
||||
canReadChat: true
|
||||
canWriteChat: true
|
||||
canChangeVirtualBackground: true
|
||||
access:
|
||||
anonymous:
|
||||
moderator:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=123456'
|
||||
speaker:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123?secret=654321'
|
||||
recording:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-123/recordings?secret=987654'
|
||||
registered:
|
||||
enabled: false
|
||||
url: 'https://example.com/room/room-123'
|
||||
status: open
|
||||
meetingEndAction: none
|
||||
- roomId: 'room-456'
|
||||
roomName: 'room'
|
||||
owner: 'alice_smith'
|
||||
creationDate: 1620001000000
|
||||
autoDeletionDate: 1900000000000
|
||||
autoDeletionPolicy:
|
||||
withMeeting: when_meeting_ends
|
||||
withRecordings: close
|
||||
config:
|
||||
chat:
|
||||
enabled: false
|
||||
recording:
|
||||
enabled: true
|
||||
layout: grid
|
||||
encoding:
|
||||
video:
|
||||
width: 1280
|
||||
height: 720
|
||||
framerate: 60
|
||||
codec: H264_HIGH
|
||||
bitrate: 2500
|
||||
keyFrameInterval: 2
|
||||
depth: 2
|
||||
audio:
|
||||
codec: AAC
|
||||
bitrate: 192
|
||||
frequency: 48000
|
||||
chat:
|
||||
enabled: false
|
||||
virtualBackground:
|
||||
enabled: false
|
||||
e2ee:
|
||||
enabled: false
|
||||
roles:
|
||||
moderator:
|
||||
permissions:
|
||||
canRecord: true
|
||||
canRetrieveRecordings: true
|
||||
canDeleteRecordings: false
|
||||
canJoinMeeting: true
|
||||
canShareAccessLinks: true
|
||||
canMakeModerator: false
|
||||
canKickParticipants: true
|
||||
canEndMeeting: true
|
||||
canPublishVideo: true
|
||||
canPublishAudio: true
|
||||
canShareScreen: true
|
||||
canReadChat: true
|
||||
canWriteChat: true
|
||||
canChangeVirtualBackground: true
|
||||
speaker:
|
||||
permissions:
|
||||
canRecord: true
|
||||
canRetrieveRecordings: true
|
||||
canDeleteRecordings: false
|
||||
canJoinMeeting: true
|
||||
canShareAccessLinks: false
|
||||
canMakeModerator: false
|
||||
canKickParticipants: false
|
||||
canEndMeeting: false
|
||||
canPublishVideo: true
|
||||
canPublishAudio: true
|
||||
canShareScreen: false
|
||||
canReadChat: true
|
||||
canWriteChat: true
|
||||
canChangeVirtualBackground: true
|
||||
access:
|
||||
anonymous:
|
||||
moderator:
|
||||
enabled: false
|
||||
url: 'https://example.com/room/room-456?secret=789012'
|
||||
speaker:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-456?secret=210987'
|
||||
recording:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-456/recordings?secret=345678'
|
||||
registered:
|
||||
enabled: true
|
||||
url: 'https://example.com/room/room-456'
|
||||
status: open
|
||||
meetingEndAction: none
|
||||
_extraFields:
|
||||
- config
|
||||
pagination:
|
||||
isTruncated: false
|
||||
maxItems: 10
|
||||
fields=roomId;extraFields=config:
|
||||
summary: Room details including config
|
||||
value:
|
||||
rooms:
|
||||
- roomId: 'room-123'
|
||||
config:
|
||||
recording:
|
||||
enabled: false
|
||||
layout: grid
|
||||
encoding: H264_720P_30
|
||||
chat:
|
||||
enabled: true
|
||||
virtualBackground:
|
||||
enabled: true
|
||||
e2ee:
|
||||
enabled: false
|
||||
captions:
|
||||
enabled: true
|
||||
- roomId: 'room-456'
|
||||
config:
|
||||
recording:
|
||||
enabled: true
|
||||
layout: grid
|
||||
encoding: H264_720P_30
|
||||
chat:
|
||||
enabled: false
|
||||
virtualBackground:
|
||||
enabled: false
|
||||
e2ee:
|
||||
enabled: false
|
||||
_extraFields:
|
||||
- config
|
||||
pagination:
|
||||
isTruncated: true
|
||||
nextPageToken: 'abc123'
|
||||
maxItems: 10
|
||||
|
||||
fields=moderatorUrl,speakerUrl:
|
||||
summary: Response containing only moderator and speaker URLs
|
||||
value:
|
||||
rooms:
|
||||
- moderatorUrl: 'http://localhost:6080/room/room-123?secret=123456'
|
||||
speakerUrl: 'http://localhost:6080/room/room-123?secret=654321'
|
||||
- moderatorUrl: 'http://localhost:6080/room/room-456?secret=789012'
|
||||
speakerUrl: 'http://localhost:6080/room/room-456?secret=210987'
|
||||
pagination:
|
||||
isTruncated: false
|
||||
maxItems: 10
|
||||
|
||||
@ -1,76 +0,0 @@
|
||||
description: Room was successfully processed for deletion
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
successCode:
|
||||
type: string
|
||||
enum:
|
||||
- room_deleted
|
||||
- room_with_active_meeting_deleted
|
||||
- room_and_recordings_deleted
|
||||
- room_closed
|
||||
- room_with_active_meeting_and_recordings_deleted
|
||||
- room_with_active_meeting_closed
|
||||
description: A code representing the success scenario
|
||||
message:
|
||||
type: string
|
||||
description: A message providing additional context about the success
|
||||
room:
|
||||
$ref: '../schemas/meet-room.yaml'
|
||||
examples:
|
||||
room_deleted:
|
||||
value:
|
||||
successCode: room_deleted
|
||||
message: Room 'room-123' deleted successfully
|
||||
room_with_active_meeting_deleted:
|
||||
value:
|
||||
successCode: room_with_active_meeting_deleted
|
||||
message: Room 'room-123' with active meeting deleted successfully
|
||||
room_and_recordings_deleted:
|
||||
value:
|
||||
successCode: room_and_recordings_deleted
|
||||
message: Room 'room-123' and its recordings deleted successfully
|
||||
room_closed:
|
||||
value:
|
||||
successCode: room_closed
|
||||
message: Room 'room-123' has been closed instead of deleted because it has recordings
|
||||
room:
|
||||
roomId: room-123
|
||||
roomName: room
|
||||
creationDate: 1620000000000
|
||||
config:
|
||||
chat:
|
||||
enabled: true
|
||||
recording:
|
||||
enabled: false
|
||||
virtualBackground:
|
||||
enabled: true
|
||||
moderatorUrl: 'http://localhost:6080/room/room-123?secret=123456'
|
||||
speakerUrl: 'http://localhost:6080/room/room-123?secret=654321'
|
||||
status: closed
|
||||
meetingEndAction: none
|
||||
room_with_active_meeting_and_recordings_deleted:
|
||||
value:
|
||||
successCode: room_with_active_meeting_and_recordings_deleted
|
||||
message: Room 'room-123' with active meeting and its recordings deleted successfully
|
||||
room_with_active_meeting_closed:
|
||||
value:
|
||||
successCode: room_with_active_meeting_closed
|
||||
message: Room 'room-123' with active meeting has been closed instead of deleted because it has recordings
|
||||
room:
|
||||
roomId: room-123
|
||||
roomName: room
|
||||
creationDate: 1620000000000
|
||||
config:
|
||||
chat:
|
||||
enabled: true
|
||||
recording:
|
||||
enabled: false
|
||||
virtualBackground:
|
||||
enabled: true
|
||||
moderatorUrl: 'http://localhost:6080/room/room-123?secret=123456'
|
||||
speakerUrl: 'http://localhost:6080/room/room-123?secret=654321'
|
||||
status: active_meeting
|
||||
meetingEndAction: close
|
||||
@ -1,76 +0,0 @@
|
||||
description: Room was successfully scheduled to be deleted or closed
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
successCode:
|
||||
type: string
|
||||
enum:
|
||||
- room_with_active_meeting_scheduled_to_be_deleted
|
||||
- room_with_active_meeting_and_recordings_scheduled_to_be_deleted
|
||||
- room_with_active_meeting_scheduled_to_be_closed
|
||||
description: A code representing the success scenario
|
||||
message:
|
||||
type: string
|
||||
description: A message providing additional context about the success
|
||||
room:
|
||||
$ref: '../schemas/meet-room.yaml'
|
||||
examples:
|
||||
room_with_active_meeting_scheduled_to_be_deleted:
|
||||
value:
|
||||
successCode: room_with_active_meeting_scheduled_to_be_deleted
|
||||
message: Room 'room-123' with active meeting scheduled to be deleted when the meeting ends
|
||||
room:
|
||||
roomId: room-123
|
||||
roomName: room
|
||||
creationDate: 1620000000000
|
||||
config:
|
||||
chat:
|
||||
enabled: true
|
||||
recording:
|
||||
enabled: false
|
||||
virtualBackground:
|
||||
enabled: true
|
||||
moderatorUrl: 'http://localhost:6080/room/room-123?secret=123456'
|
||||
speakerUrl: 'http://localhost:6080/room/room-123?secret=654321'
|
||||
status: active_meeting
|
||||
meetingEndAction: delete
|
||||
room_with_active_meeting_and_recordings_scheduled_to_be_deleted:
|
||||
value:
|
||||
successCode: room_with_active_meeting_and_recordings_scheduled_to_be_deleted
|
||||
message: Room 'room-123' with active meeting and its recordings scheduled to be deleted when the meeting ends
|
||||
room:
|
||||
roomId: room-123
|
||||
roomName: room
|
||||
creationDate: 1620000000000
|
||||
config:
|
||||
chat:
|
||||
enabled: true
|
||||
recording:
|
||||
enabled: false
|
||||
virtualBackground:
|
||||
enabled: true
|
||||
moderatorUrl: 'http://localhost:6080/room/room-123?secret=123456'
|
||||
speakerUrl: 'http://localhost:6080/room/room-123?secret=654321'
|
||||
status: active_meeting
|
||||
meetingEndAction: delete
|
||||
room_with_active_meeting_scheduled_to_be_closed:
|
||||
value:
|
||||
successCode: room_with_active_meeting_scheduled_to_be_closed
|
||||
message: Room 'room-123' with active meeting scheduled to be closed when the meeting ends because it has recordings
|
||||
room:
|
||||
roomId: room-123
|
||||
roomName: room
|
||||
creationDate: 1620000000000
|
||||
config:
|
||||
chat:
|
||||
enabled: true
|
||||
recording:
|
||||
enabled: false
|
||||
virtualBackground:
|
||||
enabled: true
|
||||
moderatorUrl: 'http://localhost:6080/room/room-123?secret=123456'
|
||||
speakerUrl: 'http://localhost:6080/room/room-123?secret=654321'
|
||||
status: active_meeting
|
||||
meetingEndAction: close
|
||||
@ -9,6 +9,7 @@ content:
|
||||
roomName: 'room'
|
||||
status: 'active'
|
||||
layout: 'speaker'
|
||||
encoding: 'H264_720P_30'
|
||||
filename: 'room-123--XX445.mp4'
|
||||
startDate: 1600000000000
|
||||
headers:
|
||||
|
||||
@ -15,6 +15,7 @@ content:
|
||||
roomName: 'room'
|
||||
status: 'ending'
|
||||
layout: 'speaker'
|
||||
encoding: 'H264_720P_30'
|
||||
filename: 'room-123--XX445.mp4'
|
||||
startDate: 1600000000000
|
||||
details: 'End reason: StopEgress API'
|
||||
|
||||
@ -0,0 +1,10 @@
|
||||
description: Success response for updating room access configuration
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
example:
|
||||
message: Access config for room 'room-123' updated successfully
|
||||
@ -0,0 +1,5 @@
|
||||
description: Room member updated successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '../schemas/meet-room-member.yaml'
|
||||
@ -0,0 +1,10 @@
|
||||
description: Success response for updating room roles configuration
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
message:
|
||||
type: string
|
||||
example:
|
||||
message: Roles permissions for room 'room-123' updated successfully
|
||||
@ -7,28 +7,35 @@ properties:
|
||||
AuthenticationConfig:
|
||||
type: object
|
||||
properties:
|
||||
authMethod:
|
||||
type: object
|
||||
properties:
|
||||
type:
|
||||
type: string
|
||||
enum:
|
||||
- single_user
|
||||
default: single_user
|
||||
example: single_user
|
||||
description: |
|
||||
Specifies the authentication method used to access the application.
|
||||
- `single_user`: Only one user account exists, which has administrative privileges and is used for all access.
|
||||
authModeToAccessRoom:
|
||||
allowUserCreation:
|
||||
type: boolean
|
||||
description: Allow admins to create new user accounts.
|
||||
example: true
|
||||
oauthProviders:
|
||||
type: array
|
||||
description: Optional list of allowed OAuth providers for user registration.
|
||||
items:
|
||||
$ref: '#/OAuthProviderConfig'
|
||||
|
||||
OAuthProviderConfig:
|
||||
type: object
|
||||
properties:
|
||||
provider:
|
||||
type: string
|
||||
enum:
|
||||
- none
|
||||
- moderators_only
|
||||
- all_users
|
||||
default: none
|
||||
example: none
|
||||
description: |
|
||||
Specifies who is required to authenticate before accessing a room:
|
||||
- `none`: No authentication required.
|
||||
- `moderators_only`: Only moderators need to authenticate.
|
||||
- `all_users`: All users must authenticate.
|
||||
- google
|
||||
- github
|
||||
description: Supported OAuth provider.
|
||||
example: google
|
||||
clientId:
|
||||
type: string
|
||||
description: OAuth client ID.
|
||||
example: your-client-id.apps.googleusercontent.com
|
||||
clientSecret:
|
||||
type: string
|
||||
description: OAuth client secret.
|
||||
example: your-client-secret
|
||||
redirectUri:
|
||||
type: string
|
||||
description: OAuth redirect URI.
|
||||
example: https://your-domain.com/auth/callback
|
||||
|
||||
@ -1,13 +1,26 @@
|
||||
type: object
|
||||
properties:
|
||||
username:
|
||||
userId:
|
||||
type: string
|
||||
example: 'admin'
|
||||
description: The username of the authenticated user.
|
||||
roles:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
enum: ['admin', 'user']
|
||||
example: ['admin', 'user']
|
||||
description: A list of roles assigned to the authenticated user.
|
||||
example: 'alice_smith'
|
||||
description: |
|
||||
The unique identifier of the user.
|
||||
name:
|
||||
type: string
|
||||
example: 'Alice Smith'
|
||||
description: |
|
||||
The display name (profile name) of the user.
|
||||
registrationDate:
|
||||
type: number
|
||||
example: 1620000000000
|
||||
description: |
|
||||
The registration date of the user in milliseconds since the Unix epoch.
|
||||
role:
|
||||
type: string
|
||||
enum: ['admin', 'user', 'room_member']
|
||||
example: 'user'
|
||||
description: |
|
||||
The role assigned to the user. Available roles:
|
||||
- admin: Has full control over the entire application (configuration, users, rooms, recordings, etc).
|
||||
- user: Can create and manage their own created rooms and associated recordings. Can also access rooms they are a member of, but without management permissions.
|
||||
- room_member: Can only access rooms (and recordings) they are a member of, without ability to create or manage rooms.
|
||||
|
||||
@ -1,74 +0,0 @@
|
||||
type: object
|
||||
properties:
|
||||
role:
|
||||
type: string
|
||||
enum: ['moderator', 'speaker']
|
||||
description: |
|
||||
A role that a user can have as a member of a room.
|
||||
The role determines the permissions of the user in the room.
|
||||
- `moderator`: Can manage the room resources and meeting participants.
|
||||
- `speaker`: Can publish media streams to the meeting.
|
||||
example: 'moderator'
|
||||
permissions:
|
||||
type: object
|
||||
properties:
|
||||
livekit:
|
||||
type: object
|
||||
properties:
|
||||
roomJoin:
|
||||
type: boolean
|
||||
description: >
|
||||
Indicates whether the participant can join a room.
|
||||
example: true
|
||||
room:
|
||||
type: string
|
||||
description: >
|
||||
Unique identifier of the room to which the participant is assigned.
|
||||
canPublish:
|
||||
type: boolean
|
||||
description: >
|
||||
Indicates whether the participant can publish media streams to the room.
|
||||
example: true
|
||||
canSubscribe:
|
||||
type: boolean
|
||||
description: >
|
||||
Indicates whether the participant can subscribe to media streams in the room.
|
||||
example: true
|
||||
canPublishData:
|
||||
type: boolean
|
||||
description: >
|
||||
Indicates whether the participant can publish data messages to the room.
|
||||
example: true
|
||||
canUpdateOwnMetadata:
|
||||
type: boolean
|
||||
description: >
|
||||
Indicates whether the participant can update their own metadata.
|
||||
example: true
|
||||
openvidu:
|
||||
type: object
|
||||
properties:
|
||||
canRecord:
|
||||
type: boolean
|
||||
description: >
|
||||
Indicates whether the user can record a meeting in the room.
|
||||
example: true
|
||||
canRetrieveRecordings:
|
||||
type: boolean
|
||||
description: >
|
||||
Indicates whether the user can retrieve and play recordings of meetings in the room.
|
||||
example: true
|
||||
canDeleteRecordings:
|
||||
type: boolean
|
||||
description: >
|
||||
Indicates whether the user can delete recordings of meetings in the room.
|
||||
example: true
|
||||
canChat:
|
||||
type: boolean
|
||||
description: >
|
||||
Indicates whether the user can send and receive chat messages in the room.
|
||||
example: true
|
||||
canChangeVirtualBackground:
|
||||
type: boolean
|
||||
description: >
|
||||
Indicates whether the user can change their own virtual background.
|
||||
example: true
|
||||
@ -4,17 +4,23 @@ required:
|
||||
properties:
|
||||
secret:
|
||||
type: string
|
||||
description: A secret key for room access. Determines the member's role.
|
||||
description: |
|
||||
A secret key for room access.
|
||||
|
||||
Supported secret types:
|
||||
- Moderator anonymous access secret
|
||||
- Speaker anonymous access secret
|
||||
- Recording anonymous access secret (generates a token with read-only recording permissions)
|
||||
example: 'abc123456'
|
||||
grantJoinMeetingPermission:
|
||||
joinMeeting:
|
||||
type: boolean
|
||||
description: Whether to grant permission to join the meeting. If true, participantName must be provided.
|
||||
description: Whether the token is intended for joining a meeting. If true, participantName must be provided.
|
||||
example: true
|
||||
participantName:
|
||||
type: string
|
||||
description: The name of the participant when joining the meeting. Required if `grantJoinMeetingPermission` is true and this is a new token (not a refresh).
|
||||
description: The name of the participant when joining the meeting. Required if `joinMeeting` is true.
|
||||
example: 'Alice'
|
||||
participantIdentity:
|
||||
type: string
|
||||
description: The identity of the participant in the meeting. Required when refreshing an existing token with meeting permissions.
|
||||
description: The identity of the participant in the meeting. Required when refreshing an existing token used for joining a meeting.
|
||||
example: 'Alice'
|
||||
|
||||
@ -1,13 +0,0 @@
|
||||
type: object
|
||||
required:
|
||||
- username
|
||||
- password
|
||||
properties:
|
||||
username:
|
||||
type: string
|
||||
description: The username of the user.
|
||||
example: 'admin'
|
||||
password:
|
||||
type: string
|
||||
description: The password of the user.
|
||||
example: 'password123'
|
||||
@ -0,0 +1,2 @@
|
||||
type: string
|
||||
description: Extra field that can be included in the response if specified in the `X-ExtraFields` header or `extraFields` query parameter.
|
||||
@ -0,0 +1,58 @@
|
||||
type: object
|
||||
properties:
|
||||
canRecord:
|
||||
type: boolean
|
||||
example: true
|
||||
description: Can start/stop recording the meeting.
|
||||
canRetrieveRecordings:
|
||||
type: boolean
|
||||
example: true
|
||||
description: Can list and play recordings.
|
||||
canDeleteRecordings:
|
||||
type: boolean
|
||||
example: false
|
||||
description: Can delete recordings.
|
||||
canJoinMeeting:
|
||||
type: boolean
|
||||
example: true
|
||||
description: Can join the meeting.
|
||||
canShareAccessLinks:
|
||||
type: boolean
|
||||
example: false
|
||||
description: Can share access links to invite others.
|
||||
canMakeModerator:
|
||||
type: boolean
|
||||
example: false
|
||||
description: Can promote other participants to moderator role.
|
||||
canKickParticipants:
|
||||
type: boolean
|
||||
example: false
|
||||
description: Can remove other participants from the meeting.
|
||||
canEndMeeting:
|
||||
type: boolean
|
||||
example: false
|
||||
description: Can end the meeting for all participants.
|
||||
canPublishVideo:
|
||||
type: boolean
|
||||
example: true
|
||||
description: Can publish video in the meeting.
|
||||
canPublishAudio:
|
||||
type: boolean
|
||||
example: true
|
||||
description: Can publish audio in the meeting.
|
||||
canShareScreen:
|
||||
type: boolean
|
||||
example: false
|
||||
description: Can share screen in the meeting.
|
||||
canReadChat:
|
||||
type: boolean
|
||||
example: true
|
||||
description: Can read chat messages in the meeting.
|
||||
canWriteChat:
|
||||
type: boolean
|
||||
example: true
|
||||
description: Can send chat messages in the meeting.
|
||||
canChangeVirtualBackground:
|
||||
type: boolean
|
||||
example: true
|
||||
description: Can change the virtual background.
|
||||
@ -24,6 +24,7 @@ properties:
|
||||
description: The status of the recording.
|
||||
layout:
|
||||
type: string
|
||||
enum: ['grid', 'speaker', 'single-speaker']
|
||||
example: 'grid'
|
||||
description: The layout of the recording.
|
||||
encoding:
|
||||
|
||||
@ -0,0 +1,46 @@
|
||||
type: object
|
||||
properties:
|
||||
anonymous:
|
||||
type: object
|
||||
properties:
|
||||
moderator:
|
||||
type: object
|
||||
properties:
|
||||
enabled:
|
||||
type: boolean
|
||||
default: true
|
||||
example: true
|
||||
description: |
|
||||
Enables or disables anonymous access for the moderator role.
|
||||
speaker:
|
||||
type: object
|
||||
properties:
|
||||
enabled:
|
||||
type: boolean
|
||||
default: true
|
||||
example: true
|
||||
description: |
|
||||
Enables or disables anonymous access for the speaker role.
|
||||
recording:
|
||||
type: object
|
||||
properties:
|
||||
enabled:
|
||||
type: boolean
|
||||
default: true
|
||||
example: true
|
||||
description: |
|
||||
Enables or disables anonymous access for recordings in the room. This also controls whether individual anonymous recording URLs can be generated.
|
||||
registered:
|
||||
type: object
|
||||
properties:
|
||||
enabled:
|
||||
type: boolean
|
||||
default: true
|
||||
example: true
|
||||
description: |
|
||||
Enables or disables access for registered users.
|
||||
**Note**: admins, owner and members of the room will always have access regardless of this setting.
|
||||
description: |
|
||||
Configuration for room access.
|
||||
|
||||
All fields are optional. If not specified, current configuration will be maintained.
|
||||
@ -55,19 +55,6 @@ MeetRecordingConfig:
|
||||
oneOf:
|
||||
- $ref: '#/MeetRecordingEncodingPreset'
|
||||
- $ref: '#/MeetRecordingEncodingOptions'
|
||||
allowAccessTo:
|
||||
type: string
|
||||
enum:
|
||||
- admin
|
||||
- admin_moderator
|
||||
- admin_moderator_speaker
|
||||
default: admin_moderator_speaker
|
||||
example: admin_moderator_speaker
|
||||
description: |
|
||||
Defines who can access the recording. Options are:
|
||||
- `admin`: Only administrators can access the recording.
|
||||
- `admin_moderator`: Administrators and moderators can access the recording.
|
||||
- `admin_moderator_speaker`: Administrators, moderators and speakers can access the recording.
|
||||
MeetVirtualBackgroundConfig:
|
||||
type: object
|
||||
properties:
|
||||
@ -188,7 +175,7 @@ MeetRecordingVideoEncodingOptions:
|
||||
example: 4500
|
||||
description: |
|
||||
Video bitrate in kbps
|
||||
keyframeInterval:
|
||||
keyFrameInterval:
|
||||
type: number
|
||||
minimum: 0
|
||||
example: 4
|
||||
@ -253,6 +240,7 @@ MeetRecordingEncodingOptions:
|
||||
codec: H264_MAIN
|
||||
bitrate: 3000
|
||||
keyFrameInterval: 4
|
||||
depth: 24
|
||||
audio:
|
||||
codec: OPUS
|
||||
bitrate: 128
|
||||
|
||||
@ -0,0 +1,64 @@
|
||||
type: object
|
||||
properties:
|
||||
memberId:
|
||||
type: string
|
||||
example: 'alice_smith'
|
||||
description: |
|
||||
The unique identifier of the room member.
|
||||
|
||||
- For registered Meet users: This is set to the userId of the linked Meet user account.
|
||||
- For external users: This is an automatically generated unique identifier starting from 'ext-'.
|
||||
name:
|
||||
type: string
|
||||
example: 'Alice Smith'
|
||||
description: |
|
||||
The display name for the participant when joining the meeting with this member access.
|
||||
|
||||
- For registered Meet users, this is their profile name.
|
||||
- For external users, this is the assigned name.
|
||||
membershipDate:
|
||||
type: number
|
||||
example: 1620000000000
|
||||
description: >
|
||||
The timestamp (in milliseconds since Unix epoch) when this member was added to the room.
|
||||
accessUrl:
|
||||
type: string
|
||||
format: uri
|
||||
example: 'http://localhost:6080/room/room-123'
|
||||
description: >
|
||||
The unique URL for this member to access the room. This URL is different from the moderator and speaker URLs
|
||||
and provides access with the specific permissions assigned to this member.
|
||||
baseRole:
|
||||
type: string
|
||||
enum:
|
||||
- moderator
|
||||
- speaker
|
||||
example: 'speaker'
|
||||
description: |
|
||||
The base role that defines the default permissions for this member. Options are:
|
||||
- moderator: By default, has full permissions to manage the room and meeting.
|
||||
- speaker: By default, has permissions to publish audio and video streams.
|
||||
|
||||
Individual permissions can be overridden through the customPermissions object.
|
||||
customPermissions:
|
||||
type: object
|
||||
additionalProperties:
|
||||
type: boolean
|
||||
example:
|
||||
canShareScreen: false
|
||||
canRecord: true
|
||||
description: |
|
||||
Custom permission overrides for this member. This object contains only the permissions that differ from the base role defaults.
|
||||
|
||||
Each property is a permission name with a boolean value indicating whether the permission is granted or denied.
|
||||
effectivePermissions:
|
||||
$ref: meet-permissions.yaml
|
||||
description: >
|
||||
The complete set of effective permissions for this member. This object is calculated by applying the customPermissions
|
||||
overrides to the base role defaults, resulting in the final permissions that will be enforced.
|
||||
currentParticipantIdentity:
|
||||
type: string
|
||||
example: 'alice_smith-1234'
|
||||
description: |
|
||||
The identity of the currently connected participant in the meeting associated with this room member.
|
||||
This value is undefined if the member is not currently connected.
|
||||
@ -58,3 +58,25 @@ properties:
|
||||
$ref: './meet-room-config.yaml#/MeetRoomConfig'
|
||||
description: >
|
||||
The config for the room. These config will be used to configure the room's settings.
|
||||
roles:
|
||||
$ref: meet-room-roles-config.yaml
|
||||
description: |
|
||||
Configuration for role permissions.
|
||||
|
||||
By default (if not specified), default permissions will be used for both moderator and speaker roles:
|
||||
- Moderator: Full permissions to manage the room and meeting.
|
||||
- Speaker: Permissions to publish audio and video streams.
|
||||
|
||||
You can customize this by providing partial permissions for each role (only specify the permissions you want to override).
|
||||
access:
|
||||
$ref: meet-room-access-config.yaml
|
||||
description: |
|
||||
Configuration for room access.
|
||||
|
||||
By default (if not specified), anonymous access is enabled for both moderator and speaker roles, and for recording access.
|
||||
However, registered access is disabled by default.
|
||||
You can customize this behavior by disabling access for specific scopes and roles
|
||||
(`registered`, `anonymous.moderator`, `anonymous.speaker`, `anonymous.recording`) using `enabled: false`.
|
||||
|
||||
Permissions for anonymous users are determined by the room's role permissions. For registered users (who are not admins or members of the room),
|
||||
permissions will be the same as the speaker role.
|
||||
|
||||
@ -0,0 +1,40 @@
|
||||
type: object
|
||||
properties:
|
||||
moderator:
|
||||
type: object
|
||||
properties:
|
||||
permissions:
|
||||
type: object
|
||||
additionalProperties:
|
||||
type: boolean
|
||||
example:
|
||||
canRecord: false
|
||||
canKickParticipants: false
|
||||
description: |
|
||||
Partial permissions object for the moderator role.
|
||||
Only specify the permissions you want to override from the default or previously configured moderator permissions.
|
||||
Each property should be a permission name (e.g., 'canRecord', 'canShareScreen') with a boolean value.
|
||||
|
||||
For the complete list of all available permissions, see the full permissions schema:
|
||||
[MeetPermissions](#/schemas/MeetPermissions)
|
||||
speaker:
|
||||
type: object
|
||||
properties:
|
||||
permissions:
|
||||
type: object
|
||||
additionalProperties:
|
||||
type: boolean
|
||||
example:
|
||||
canShareScreen: false
|
||||
description: |
|
||||
Partial permissions object for the speaker role.
|
||||
Only specify the permissions you want to override from the default or previously configured speaker permissions.
|
||||
Each property should be a permission name (e.g., 'canRecord', 'canShareScreen') with a boolean value.
|
||||
|
||||
For the complete list of all available permissions, see the full permissions schema:
|
||||
[MeetPermissions](#/schemas/MeetPermissions)
|
||||
description: |
|
||||
Configuration for role permissions.
|
||||
|
||||
Both moderator and speaker fields are optional. If not specified, current permissions will be maintained.
|
||||
For permissions, only specify the ones you want to change.
|
||||
@ -6,14 +6,18 @@ properties:
|
||||
description: >
|
||||
The unique identifier of the room. This ID is generated by combining the room name with a unique identifier.
|
||||
roomName:
|
||||
type: [string, 'null']
|
||||
maxLength: 50
|
||||
type: string
|
||||
example: 'room'
|
||||
default: 'Room'
|
||||
description: |
|
||||
The display name of the room, used to identify it in a user-friendly way. This value does not need to be unique.
|
||||
owner:
|
||||
type: string
|
||||
example: 'alice_smith'
|
||||
description: |
|
||||
The userId of the registered Meet user who owns this room.
|
||||
|
||||
Maximum length: 50 characters. If not provided, the default value "Room" will be used.
|
||||
If the room was created by a registered Meet user, this will be their userId.
|
||||
If the room was created via the REST API using an API key, this will be the userId of the global admin (root user).
|
||||
creationDate:
|
||||
type: number
|
||||
example: 1620000000000
|
||||
@ -26,15 +30,15 @@ properties:
|
||||
The timestamp (in milliseconds since the Unix epoch) specifying when the room will be automatically deleted.
|
||||
This must be at least one hour in the future.
|
||||
|
||||
After this time, the room is closed to new participants and scheduled for deletion.
|
||||
After this time, the room is closed to new participants and scheduled for deletion.
|
||||
It will be removed after the last participant leaves (graceful deletion).
|
||||
|
||||
If not set, the room remains active until manually deleted.
|
||||
autoDeletionPolicy:
|
||||
type: object
|
||||
description: >
|
||||
Policy for automatic deletion of the room and its contents. This includes
|
||||
settings for how the room should be handled when certain conditions are met.
|
||||
type: object
|
||||
properties:
|
||||
withMeeting:
|
||||
type: string
|
||||
@ -59,26 +63,105 @@ properties:
|
||||
- force: The room and its recordings will be deleted.
|
||||
- close: The room will be closed instead of deleted, maintaining its recordings.
|
||||
config:
|
||||
description: |
|
||||
Room configuration (chat, recording, virtual background, e2ee, captions).
|
||||
<br/><br/>
|
||||
|
||||
**Excluded from responses by default to reduce payload size.**
|
||||
To include it in the response:
|
||||
- **POST requests:** use the `X-ExtraFields: config` header
|
||||
- **Other requests:** use either the `extraFields=config` query parameter or the `X-ExtraFields: config` header
|
||||
$ref: meet-room-config.yaml#/MeetRoomConfig
|
||||
description: The config for the room.
|
||||
# maxParticipants:
|
||||
# type: integer
|
||||
# example: 10
|
||||
# description: >
|
||||
# The maximum number of participants allowed in the room. If the number of participants exceeds
|
||||
# this limit, new participants will not be allowed to join.
|
||||
moderatorUrl:
|
||||
type: string
|
||||
example: 'http://localhost:6080/room/room-123?secret=123456'
|
||||
roles:
|
||||
description: >
|
||||
The URL for moderator room members to access the room. The moderator role has special permissions to manage the
|
||||
room resources and meeting participants.
|
||||
speakerUrl:
|
||||
type: string
|
||||
example: 'http://localhost:6080/room/room-123?secret=654321'
|
||||
Roles for the room. Defines the complete permissions for moderator and speaker roles.
|
||||
type: object
|
||||
properties:
|
||||
moderator:
|
||||
type: object
|
||||
properties:
|
||||
permissions:
|
||||
$ref: meet-permissions.yaml
|
||||
description: >
|
||||
The complete set of permissions for the moderator role. These define what moderators can do in the meeting.
|
||||
speaker:
|
||||
type: object
|
||||
properties:
|
||||
permissions:
|
||||
$ref: meet-permissions.yaml
|
||||
description: >
|
||||
The complete set of permissions for the speaker role. These define what speakers can do in the meeting.
|
||||
access:
|
||||
description: >
|
||||
The URL for speaker room members to access the room. The speaker role has permissions to publish audio and
|
||||
video streams to the meeting.
|
||||
Access configuration and generated access URLs for the room.
|
||||
type: object
|
||||
properties:
|
||||
anonymous:
|
||||
type: object
|
||||
properties:
|
||||
moderator:
|
||||
type: object
|
||||
properties:
|
||||
enabled:
|
||||
type: boolean
|
||||
example: true
|
||||
description: >
|
||||
Whether anonymous access for the moderator role is enabled.
|
||||
url:
|
||||
type: string
|
||||
format: uri
|
||||
example: 'http://localhost:6080/room/room-123?secret=123456'
|
||||
description: >
|
||||
The URL for anonymous moderators to access the room.
|
||||
speaker:
|
||||
type: object
|
||||
properties:
|
||||
enabled:
|
||||
type: boolean
|
||||
example: true
|
||||
description: >
|
||||
Whether anonymous access for the speaker role is enabled.
|
||||
url:
|
||||
type: string
|
||||
format: uri
|
||||
example: 'http://localhost:6080/room/room-123?secret=654321'
|
||||
description: >
|
||||
The URL for anonymous speakers to access the room.
|
||||
recording:
|
||||
type: object
|
||||
properties:
|
||||
enabled:
|
||||
type: boolean
|
||||
example: true
|
||||
description: >
|
||||
Whether anonymous access for recordings in the room is enabled.
|
||||
url:
|
||||
type: string
|
||||
format: uri
|
||||
example: 'http://localhost:6080/room/room-123?secret=987654'
|
||||
description: >
|
||||
The URL for anonymous access to the room's recordings.
|
||||
registered:
|
||||
type: object
|
||||
properties:
|
||||
enabled:
|
||||
type: boolean
|
||||
example: true
|
||||
description: >
|
||||
Whether access for registered users is enabled.
|
||||
**Note**: admins, owner and members of the room will always have access regardless of this setting.
|
||||
url:
|
||||
type: string
|
||||
format: uri
|
||||
example: 'http://localhost:6080/room/room-123'
|
||||
description: >
|
||||
The URL for registered users to access the room.
|
||||
status:
|
||||
type: string
|
||||
enum:
|
||||
@ -88,9 +171,9 @@ properties:
|
||||
example: open
|
||||
description: |
|
||||
The current status of the room. Options are:
|
||||
- open: The room is open and available to host a meeting.
|
||||
- active_meeting: There is an active meeting in progress in the room.
|
||||
- closed: The room is closed to hosting new meetings.
|
||||
- `open`: The room is open and available to host a meeting.
|
||||
- `active_meeting`: There is an active meeting in progress in the room.
|
||||
- `closed`: The room is closed to hosting new meetings.
|
||||
meetingEndAction:
|
||||
type: string
|
||||
enum:
|
||||
@ -100,6 +183,6 @@ properties:
|
||||
example: none
|
||||
description: |
|
||||
The action to take when the meeting ends. Options are:
|
||||
- none: No action will be taken.
|
||||
- close: The room will be closed.
|
||||
- delete: The room (and its recordings if any) will be deleted.
|
||||
- `none`: No action will be taken.
|
||||
- `close`: The room will be closed.
|
||||
- `delete`: The room (and its recordings if any) will be deleted.
|
||||
|
||||
@ -22,9 +22,9 @@ properties:
|
||||
status:
|
||||
type: string
|
||||
description: The status of the recording.
|
||||
example: active
|
||||
layout:
|
||||
type: string
|
||||
enum: ['grid', 'speaker', 'single-speaker']
|
||||
description: The layout of the recording.
|
||||
example: grid
|
||||
filename:
|
||||
|
||||
@ -2,7 +2,7 @@ openapi: 3.1.0
|
||||
info:
|
||||
$ref: './info/info.yaml'
|
||||
servers:
|
||||
- url: /api/v1
|
||||
- url: meet/api/v1
|
||||
description: OpenVidu Meet API
|
||||
tags:
|
||||
$ref: './tags/tags.yaml'
|
||||
@ -15,8 +15,16 @@ paths:
|
||||
$ref: './paths/rooms.yaml#/~1rooms~1{roomId}'
|
||||
/rooms/{roomId}/config:
|
||||
$ref: './paths/rooms.yaml#/~1rooms~1{roomId}~1config'
|
||||
/rooms/{roomId}/roles:
|
||||
$ref: './paths/rooms.yaml#/~1rooms~1{roomId}~1roles'
|
||||
/rooms/{roomId}/access:
|
||||
$ref: './paths/rooms.yaml#/~1rooms~1{roomId}~1access'
|
||||
/rooms/{roomId}/status:
|
||||
$ref: './paths/rooms.yaml#/~1rooms~1{roomId}~1status'
|
||||
/rooms/{roomId}/members:
|
||||
$ref: './paths/room-members.yaml#/~1rooms~1{roomId}~1members'
|
||||
/rooms/{roomId}/members/{memberId}:
|
||||
$ref: './paths/room-members.yaml#/~1rooms~1{roomId}~1members~1{memberId}'
|
||||
/recordings:
|
||||
$ref: './paths/recordings.yaml#/~1recordings'
|
||||
/recordings/download:
|
||||
@ -35,10 +43,12 @@ components:
|
||||
schemas:
|
||||
MeetRoom:
|
||||
$ref: components/schemas/meet-room.yaml
|
||||
MeetRoomOptions:
|
||||
$ref: components/schemas/meet-room-options.yaml
|
||||
MeetRoomConfig:
|
||||
$ref: './components/schemas/meet-room-config.yaml#/MeetRoomConfig'
|
||||
MeetRoomMember:
|
||||
$ref: components/schemas/meet-room-member.yaml
|
||||
MeetPermissions:
|
||||
$ref: components/schemas/meet-permissions.yaml
|
||||
MeetRecording:
|
||||
$ref: components/schemas/meet-recording.yaml
|
||||
MeetWebhookEvent:
|
||||
|
||||
@ -16,10 +16,18 @@ paths:
|
||||
$ref: './paths/internal/auth.yaml#/~1auth~1refresh'
|
||||
/api-keys:
|
||||
$ref: './paths/internal/api-keys.yaml#/~1auth~1api-keys'
|
||||
/users/profile:
|
||||
$ref: './paths/internal/users.yaml#/~1users~1profile'
|
||||
/users:
|
||||
$ref: './paths/internal/users.yaml#/~1users'
|
||||
/users/me:
|
||||
$ref: './paths/internal/users.yaml#/~1users~1me'
|
||||
/users/change-password:
|
||||
$ref: './paths/internal/users.yaml#/~1users~1change-password'
|
||||
/users/{userId}:
|
||||
$ref: './paths/internal/users.yaml#/~1users~1{userId}'
|
||||
/users/{userId}/password:
|
||||
$ref: './paths/internal/users.yaml#/~1users~1{userId}~1password'
|
||||
/users/{userId}/role:
|
||||
$ref: './paths/internal/users.yaml#/~1users~1{userId}~1role'
|
||||
/config/webhooks:
|
||||
$ref: './paths/internal/meet-global-config.yaml#/~1config~1webhooks'
|
||||
/config/webhooks/test:
|
||||
@ -30,12 +38,8 @@ paths:
|
||||
$ref: './paths/internal/meet-global-config.yaml#/~1config~1rooms~1appearance'
|
||||
/config/captions:
|
||||
$ref: './paths/internal/meet-global-config.yaml#/~1config~1captions'
|
||||
/rooms/{roomId}/token:
|
||||
$ref: './paths/internal/rooms.yaml#/~1rooms~1{roomId}~1token'
|
||||
/rooms/{roomId}/roles:
|
||||
$ref: './paths/internal/rooms.yaml#/~1rooms~1{roomId}~1roles'
|
||||
/rooms/{roomId}/roles/{secret}:
|
||||
$ref: './paths/internal/rooms.yaml#/~1rooms~1{roomId}~1roles~1{secret}'
|
||||
/rooms/{roomId}/members/token:
|
||||
$ref: './paths/internal/room-members.yaml#/~1rooms~1{roomId}~1members~1token'
|
||||
/meetings/{roomId}:
|
||||
$ref: './paths/internal/meetings.yaml#/~1meetings~1{roomId}'
|
||||
/meetings/{roomId}/participants/{participantIdentity}:
|
||||
@ -61,18 +65,12 @@ components:
|
||||
$ref: components/schemas/internal/webhooks-config.yaml
|
||||
SecurityConfig:
|
||||
$ref: components/schemas/internal/global-security-config.yaml
|
||||
RoomsAppearanceConfig:
|
||||
$ref: components/schemas/internal/rooms-appearance-config.yaml
|
||||
MeetRoom:
|
||||
$ref: components/schemas/meet-room.yaml
|
||||
MeetRoomOptions:
|
||||
$ref: components/schemas/meet-room-options.yaml
|
||||
MeetRoomConfig:
|
||||
$ref: components/schemas/meet-room-config.yaml#/MeetRoomConfig
|
||||
MeetRoomMemberRoleAndPermissions:
|
||||
$ref: components/schemas/internal/room-member-role-permissions.yaml
|
||||
MeetAnalytics:
|
||||
$ref: components/schemas/internal/meet-analytics.yaml
|
||||
MeetRecording:
|
||||
$ref: components/schemas/meet-recording.yaml
|
||||
AiAssistantCreateRequest:
|
||||
$ref: components/schemas/internal/ai-assistant-create-request.yaml
|
||||
AiAssistantCreateResponse:
|
||||
|
||||
@ -50,6 +50,8 @@
|
||||
description: AI assistant canceled successfully.
|
||||
'401':
|
||||
$ref: '../../components/responses/unauthorized-error.yaml'
|
||||
'403':
|
||||
$ref: '../../components/responses/forbidden-error.yaml'
|
||||
'422':
|
||||
$ref: '../../components/responses/validation-error.yaml'
|
||||
'500':
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user