openvidu/typings/sync-types.sh
Carlos Santos fbcb70dbc2
Add OpenVidu Meet Console implementation (#4)
* frontend: update icons for Rooms and Recordings in console navigation

* frontend: enhance overview component with user stats and improved layout

* frontend: implement theme service and design tokens for light/dark mode support

- Added ThemeService to manage theme preferences and system theme detection.
- Introduced design tokens for consistent styling across light and dark themes.
- Updated components to utilize the new navigation service for routing.
- Replaced SecurityPreferencesComponent with PreferencesComponent for settings.
- Enhanced UI with new styles and improved navigation structure.
- Added tests for ThemeService to ensure functionality.

* frontend: enhance overview component with title styling and icon integration

* frontend: remove unused Router import from overview component

* frontend: implement developers settings with API key and webhook configuration

* frontend: update styles and structure for console navigation and overview components

* frontend: simplify API key checks and integrate notification service for user feedback

* frontend: update openvidu-components-angular to version 3.3.0-dev2 and simplify Material Symbols stylesheet link

* frontend: adjust padding and gap for stat card and actions in overview component

* frontend: update import paths to use relative paths for better module resolution

* frontend: enhance sync-types.sh script with advanced options and detailed usage instructions

* typings: update TypeScript declaration files and improve sync-types.sh script for better clarity and functionality

* webcomponent: webcomponent typings are now moved to typings directory

* Revert "typings: update TypeScript declaration files and improve sync-types.sh script for better clarity and functionality"

This reverts commit 7da952bc44be20c3f74ffb82bf941b96b78ad019.

* typings: improve sync-types.sh script for clarity and consistency

* test: update error message for empty downloaded file check

* frontend: update outbound event message types in video room and web component manager services

* frontend: enhance styling for console component and adjust nav item border radius

* style: update comments in disabled class for clarity and consistency; refactor import paths in room-form component

* typings: update import paths in message.type.ts to include file extensions

* frontend: enhance rooms management interface with improved loading states, search functionality, and table features

* frontend: enhance loading state with improved UI and animations for room loading process

* frontend: enhance rooms table with auto-deletion feature and improve status display

* frontend: update import paths for services and add containsRoute method to NavigationService

* frontend: remove unused components and associated files from shared-meet-components

* frontend: add logo selector component and enhance preferences settings with access controls

* frontend: add SessionStorageService import to extract query params guard

* frontend: add margin-bottom utility class to overview container

* frontend: update description for creating a room in the overview component

* frontend: Added recording list component

* frontend: update padding in mat-sidenav entry to use spacing variable

* frontend: update text for delete room button to use lowercase

* frontend: enhance console navigation with tooltips and active item styling

* frontend: refactor styles in console navigation for consistency and improved theming

* frontend: add border to card header for improved visual separation

* frontend: created room list reusable component

* frontend: adjust vertical alignment of table cells in recording lists

* frontend: enhance room status and auto-deletion indicators with tooltips and improved styling

* frontend: enhance HTTP service methods to include status codes in responses

* frontend: fix duration formatting to use integer seconds instead of fixed-point

* frontend: refactor icon styles in status badge for consistency

* Add modular SCSS structure for design tokens, mixins, animations, and utility classes

- Introduced _animations.scss for keyframes and animation utility classes.
- Refactored _design-tokens.scss to import modular design system files for better maintainability.
- Created _mixins-components.scss for component-specific mixins like cards and buttons.
- Added _mixins-layout.scss for layout-related mixins and responsive design utilities.
- Established _mixins-responsive.scss for breakpoint mixins to facilitate responsive design.
- Introduced _tokens-core.scss for core design tokens including colors, spacing, and typography.
- Created _tokens-themes.scss for theme-specific design tokens for light and dark modes.
- Added _utilities.scss for reusable utility classes to streamline common styling patterns.

* frontend: Refactor styles for settings preferences component and enhance utility classes

- Simplified SCSS for preferences.component.scss by utilizing utility classes for layout and styling.
- Introduced new utility classes for Material components, including slide toggle and navigation list.
- Enhanced form section styling with consistent spacing and layout adjustments.
- Added responsive design patterns for toolbar and table components.
- Improved loading and empty state styles for better user experience.

* frontend: standardize page layout and loading states across components

* frontend: enhance status badge and action button styles for consistency

* ci: update unit test workflow to include typings setup

* test: update import path for WebComponentCommand to typings directory

* frontend: refactor dialog component structure and enhance styles for improved accessibility and responsiveness

* frontend: rename batchDelete methods to bulkDelete for consistency

* frontend: implement confirmation dialog for room deletion with improved error handling

* frontend: extract feature-specific API logic from HttpService into dedicated services

* frontend: extract common recording actions into RecordingManagerService

* frontend: refactor navigation handling for improved consistency

* backend: add endpoint to download multiple recordings in a zip file and refactor bulkDeleteRecordings to delete only recordings from the same room if recording token is provided

* openapi: add download endpoint for recordings and update bulk delete logic to enforce room constraints

* frontend: enhance recording media URL generation and add bulk delete and download functionalities

* frontend: rename 'batchDownload' to 'bulkDownload' for consistency and implement missing methods in RecordingsComponent

* frontend: Implement Room Creation Wizard with Step Indicator and Navigation

- Added StepIndicatorComponent for visual step tracking in the wizard.
- Created WizardNavComponent for navigation controls (Next, Previous, Cancel, Finish).
- Developed RoomWizardComponent to manage the wizard's state and steps.
- Introduced WizardStateService to handle the wizard's data and navigation logic.
- Defined WizardStep and WizardNavigationConfig models for step management.
- Implemented basic structure for individual steps: Basic Info, Recording Settings, Recording Trigger, Recording Layout, and Preferences.
- Integrated components into the room creation flow, allowing users to navigate through steps.
- Added unit tests for all new components and services to ensure functionality.

* feat(wizard): enhance wizard functionality and UI

- Added validation form groups to WizardStep interface for better form handling.
- Updated WizardNavigationConfig to include customizable button labels and states.
- Implemented step navigation with event handling in room-wizard component.
- Refactored basic info step into a standalone component with reactive form support.
- Improved styling for the basic info step and action buttons.
- Enhanced wizard state management to handle dynamic step visibility based on user input.
- Added methods for loading existing data and saving form changes automatically.
- Updated tests to reflect changes in component structure and functionality.

* feat(recording-preferences): implement recording preferences step with form and options

* feat(room-wizard): add recording trigger step with selectable options and form handling

* feat(recording-preferences): refactor option selection to use SelectableCard component and update styles

* test: add tests for download recordings endpoint and update tests for bulk delete recordings

* openapi: improve descriptions for bulk delete operations and add new response for marked rooms

* frontend: update bulk actions and add sharing functionality in RecordingsComponent, and enhace RecordingListsComponent

* frontend: implement bulkDeleteRooms method and enhace RoomsComponent and RoomListsComponent

* typings: add MeetApiKey interface

* backend: update API key handling to use MeetApiKey type

* openapi: create API key schema and update response references

* backend: add webhook URL testing functionality and validation

* frontend: simplify HTTP request methods by removing response observation

* frontend: streamline OverviewComponent by removing unused observables and simplifying data loading

* frontend: add API key management methods to AuthService

* frontend: enhance GlobalPreferencesService by adding webhook preferences management

* frontend: refactor DevelopersSettingsComponent to improve API key handling and streamline webhook configuration

* openapi: add webhook URL testing endpoint with request and response schemas

* test: add tests for webhook URL validation

* frontend: enhance PreferencesComponent and add changePassword method in AuthService

* feat(recording-preferences): add recording access control options and enhance UI animations

* feat(recording-layout): implement recording layout selection step with form handling and visual options

* feat(room-preferences): implement room preferences step with form handling and toggle options

* feat(room-wizard): enhance form handling and default value saving across components

* feat(layouts): add new layout images for grid, single speaker, and speaker configurations

* feat(developers): adjust API key field button padding and update spacing in API key display

* feat(rooms-lists): enhance button formatting and add tooltips for room status and auto-deletion

* feat(room-wizard): update room creation logic and form field names for consistency

* feat(room-wizard): add skip button functionality and enhance navigation handling

* feat(basic-info): simplify form layout by removing action buttons and related styles

* fix(wizard-navigation): change currentStepId type from string to number for consistency

* feat(styles): enhance button padding and hover effect in batch actions for improved usability

* fix(wizard-navigation): adjust padding for improved layout consistency

* feat(basic-info): add clear button for deletion date and enhance time selection layout

* feat(rooms-list): enhance deletion date display with new styling and structure

* fix(basic-info): remove debugger statement from saveFormData method

* refactor(step-indicator): remove commented-out styles for cleaner code

* feat(step-indicator): enhance responsive layout handling and emit layout changes

* feat(overview): improve loading state handling and update stats management

* feat(step-indicator): enable navigation between steps and improve layout handling

* feat(room-wizard): refactor state management to use MeetRoomOptions and improve data handling across components

* feat(step-indicator): enhance layout handling and improve text overflow management for better responsiveness

* feat(step-indicator): update step properties to enhance navigation and state management

* feat(room-wizard): add 'Create Room' label to finish button in navigation config

* openapi: add force-deletion parameter to delete room endpoint

* frontend: split code in ContextService into domain specific services and rename it to AppDataSerivce

* frontend: enhace FeatureConfigurationService to use signal-based approach and remove unused preferences and permissions

* feat(basic-info): update deletion hint icon and improve warning color consistency

* feat(room-service): rename saveRoomPreferences to updateRoom and adjust API path for preference updates

* feat(room-wizard): implement edit mode for room configuration, allowing users to update existing room settings

* feat(pro-feature-badge): create ProFeatureBadge component and integrate into logo selector and selectable card

* fix(recording): adjust compression level for zip archive in downloadRecordingsZip

* fix(internal-config): remove FIXME comments related to LK bug for meeting timeouts

* frontend: reorganize imports and remove unused components

* refactor(console): rename 'Developers' to 'Embedded' in navigation and update related routes

* fix(console-nav): update toolbar title from 'OpenVidu Console' to 'OpenVidu Meet'

* feat(users-permissions): create UsersPermissions component and update routing

* feat(users-permissions): add pro feature badge to user authentication section

* fix(overview): update navigation and text from 'Developers' to 'Embedded'

* feat(overview): update authentication configuration card and navigation

* frontend: refactor RoomRecordingsComponent to use RecordingListsComponent

* refactor: update API paths to remove 'meet' prefix for consistency

* frontend: update navigation paths to remove 'console' prefix for consistency

* feat(video-room): add leave and end meeting functionality with toolbar buttons

* fix(overview): remove unnecessary comment on initial loading state

* feat(wizard): enable quick create functionality in wizard navigation

* feat(step-indicator): implement safe current step index handling for edit mode

* feat(wizard): update quick create visibility to show only on first step in edit mode

* feat(users-permissions): refactor admin password handling and validation

* webcomponent: update Playwright dependencies and refactor leaveRoom functionality

- Updated Playwright and Playwright Test versions in package.json to 1.53.2.
- Refactored leaveRoom function to accept a role parameter, allowing for different behavior based on user role (moderator or publisher).
- Updated E2E tests to utilize the new leaveRoom function, ensuring proper cleanup and behavior for both roles.
- Removed unnecessary afterEach cleanup in UI Feature Preferences tests.

* frontend: add IDs to leave and end meeting buttons for better accessibility

* testapp: update package-lock.json and refactor ConfigService constructor for improved environment variable handling

* frontend: update background colors for improved visual consistency

* chore: add tslib dependency and enhance target directory validation in sync-types.sh

* frontend: enhance accessibility by adding IDs to toolbar and form elements

---------

Co-authored-by: juancarmore <juancar_more2@hotmail.com>
2025-07-02 17:00:43 +02:00

382 lines
10 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail # Exit on error, undefined vars, and pipe failures
# Configuration
HEADER_KEY="THIS HEADER IS AUTOGENERATED. DO NOT MODIFY MANUALLY."
HEADER="
/**
* ${HEADER_KEY}
* ! For any changes, please update the '/openvidu-meet/typings' directory.
**/"
SOURCE_DIR="src"
# Color codes for output
readonly RED='\033[0;31m'
readonly GREEN='\033[0;32m'
readonly YELLOW='\033[1;33m'
readonly BLUE='\033[0;34m'
readonly NC='\033[0m' # No Color
# Directory mapping configuration
declare -A TARGET_DIRECTORIES=(
["frontend"]="../frontend/projects/shared-meet-components/src/lib/typings/ce"
["backend"]="../backend/src/typings/ce"
["webcomponent"]="../frontend/webcomponent/src/typings/ce"
["pro"]="../../openvidu-meet-pro/types/src/ce"
)
# Target groups for convenience
declare -A TARGET_GROUPS=(
["ce"]="frontend backend webcomponent"
["pro"]="pro"
["all"]="frontend backend webcomponent pro"
)
# Logging functions
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1" >&2
}
# Help function
show_help() {
cat <<EOF
Usage: $0 [OPTIONS] [TARGET]
Synchronize TypeScript declaration files from the source directory to target directories.
TARGETS:
ce Sync to Community Edition targets (frontend, backend, webcomponent)
pro Sync to Professional Edition target
all Sync to all targets (default)
frontend Sync only to frontend directory
backend Sync only to backend directory
webcomponent Sync only to webcomponent directory
OPTIONS:
-h, --help Show this help message
-v, --verbose Verbose output
-n, --dry-run Show what would be done without actually doing it
--add-headers Add headers to source files (modifies source)
--list-targets List all available targets and their paths
EXAMPLES:
$0 # Sync to all targets
$0 ce # Sync to CE targets only
$0 frontend # Sync to frontend only
$0 --dry-run ce # Show what would be synced to CE targets
$0 --add-headers # Add headers to source files and sync to all targets
EOF
}
# List targets function
list_targets() {
log_info "Available targets and their paths:"
echo
for target in "${!TARGET_DIRECTORIES[@]}"; do
local target_dir="${TARGET_DIRECTORIES[$target]}"
local status=""
if [ -d "$target_dir" ]; then
status=" ${GREEN}[EXISTS]${NC}"
else
status=" ${YELLOW}[WILL BE CREATED]${NC}"
fi
echo -e " ${BLUE}${target}${NC}: ${target_dir}${status}"
done
echo
log_info "Available target groups:"
for group in "${!TARGET_GROUPS[@]}"; do
echo -e " ${BLUE}${group}${NC}: ${TARGET_GROUPS[$group]}"
done
}
# Validate source directory
validate_source() {
if [ ! -d "$SOURCE_DIR" ]; then
log_error "Source directory '$SOURCE_DIR' does not exist!"
exit 1
fi
local d_ts_files
d_ts_files=$(find "$SOURCE_DIR" -type f -name "*.ts" 2>/dev/null | wc -l)
if [ "$d_ts_files" -eq 0 ]; then
log_warning "No TypeScript declaration files found in source directory '$SOURCE_DIR'"
return 1
fi
log_info "Found $d_ts_files TypeScript declaration files in source directory"
return 0
}
# Validate and prepare target directories
validate_targets() {
local targets="$1"
local failed_targets=""
log_info "Validating target directories..."
for target in $targets; do
local target_dir="${TARGET_DIRECTORIES[$target]}"
if [ -z "$target_dir" ]; then
log_error "No directory configured for target: $target"
failed_targets="$failed_targets $target"
continue
fi
# Try to create the directory structure to validate the path
if [ "$DRY_RUN" = "false" ]; then
local test_dir="$target_dir"
if ! mkdir -p "$test_dir" 2>/dev/null; then
log_error "Cannot create directory for target '$target': $test_dir"
failed_targets="$failed_targets $target"
continue
fi
fi
[ "$VERBOSE" = "true" ] && log_info "Target '$target' validated: $target_dir"
done
if [ -n "$failed_targets" ]; then
log_error "Failed to validate targets:$failed_targets"
return 1
fi
return 0
}
# Add headers to source files
add_headers_to_source() {
log_info "Adding headers to source files..."
local count=0
local temp_file_list
temp_file_list=$(mktemp)
find "$SOURCE_DIR" -type f -name "*.ts" >"$temp_file_list"
while IFS= read -r file; do
if ! grep -qF "$HEADER_KEY" "$file"; then
if [ "$DRY_RUN" = "true" ]; then
echo " Would add header to: $file"
else
if printf "%s\n\n%s" "$HEADER" "$(cat "$file")" >"${file}.tmp" && mv "${file}.tmp" "$file"; then
[ "$VERBOSE" = "true" ] && echo " Added header to: $file"
count=$((count + 1))
else
log_error "Failed to add header to: $file"
rm -f "$temp_file_list"
return 1
fi
fi
else
[ "$VERBOSE" = "true" ] && echo " Header already exists in: $file"
fi
done <"$temp_file_list"
rm -f "$temp_file_list"
if [ "$DRY_RUN" = "false" ]; then
log_success "Headers added to $count files"
fi
}
# Copy files with headers to target directory
copy_files_with_headers() {
local target_dir="$1"
local target_name="$2"
log_info "Syncing types to $target_name ($target_dir)..."
# Create target directory and all necessary parent directories
if [ "$DRY_RUN" = "true" ]; then
echo " Would create directory: $target_dir"
else
if ! mkdir -p "$target_dir"; then
log_error "Failed to create target directory: $target_dir"
return 1
fi
[ "$VERBOSE" = "true" ] && log_info "Created/verified target directory: $target_dir"
fi
# Determine source path based on target
local source_path="$SOURCE_DIR"
if [ "$target_name" = "webcomponent" ]; then
source_path="$SOURCE_DIR/webcomponent"
if [ ! -d "$source_path" ]; then
log_warning "Webcomponent source directory '$source_path' does not exist. Skipping webcomponent sync."
return 0
fi
fi
local file_count=0
local temp_file_list
temp_file_list=$(mktemp)
find "$source_path" -type f -name "*.ts" >"$temp_file_list"
while IFS= read -r file; do
local relative_path
if [ "$target_name" = "webcomponent" ]; then
# For webcomponent, remove the webcomponent prefix from path
relative_path="${file#$SOURCE_DIR/webcomponent/}"
else
relative_path="${file#$SOURCE_DIR/}"
fi
local dest_file="$target_dir/$relative_path"
local dest_dir
dest_dir=$(dirname "$dest_file")
if [ "$DRY_RUN" = "true" ]; then
echo " Would copy: $file -> $dest_file"
else
if ! mkdir -p "$dest_dir"; then
log_error "Failed to create directory: $dest_dir"
rm -f "$temp_file_list"
return 1
fi
if printf "%s\n\n%s" "$HEADER" "$(cat "$file")" >"$dest_file"; then
[ "$VERBOSE" = "true" ] && echo " Copied: $file -> $dest_file"
file_count=$((file_count + 1))
else
log_error "Failed to copy: $file -> $dest_file"
rm -f "$temp_file_list"
return 1
fi
fi
done <"$temp_file_list"
rm -f "$temp_file_list"
if [ "$DRY_RUN" = "false" ]; then
log_success "Synced $file_count files to $target_name"
fi
}
# Resolve targets from input
resolve_targets() {
local input="$1"
local targets=""
# Check if input is a group
if [ -n "${TARGET_GROUPS[$input]:-}" ]; then
targets="${TARGET_GROUPS[$input]}"
# Check if input is a single target
elif [ -n "${TARGET_DIRECTORIES[$input]:-}" ]; then
targets="$input"
else
log_error "Unknown target or group: '$input'"
log_info "Use --list-targets to see available options"
exit 1
fi
echo "$targets"
}
# Main sync function
sync_types() {
local targets="$1"
log_info "Starting type declaration synchronization..."
[ "$DRY_RUN" = "true" ] && log_warning "DRY RUN MODE - No files will be modified"
# Validate source directory
validate_source || exit 1
# Validate target directories
validate_targets "$targets" || exit 1
# Add headers to source if requested
[ "$ADD_HEADERS" = "true" ] && add_headers_to_source
# Process each target
local success_count=0
local total_count=0
for target in $targets; do
total_count=$((total_count + 1))
local target_dir="${TARGET_DIRECTORIES[$target]}"
if [ -z "$target_dir" ]; then
log_error "No directory configured for target: $target"
continue
fi
if copy_files_with_headers "$target_dir" "$target"; then
success_count=$((success_count + 1))
fi
done
# Summary
echo
if [ "$DRY_RUN" = "true" ]; then
log_info "Dry run completed. $total_count targets would be processed."
else
log_success "Type declaration synchronization completed: $success_count/$total_count targets successful"
fi
}
# Parse command line arguments
DRY_RUN="false"
VERBOSE="false"
ADD_HEADERS="false"
TARGET_INPUT=""
while [ $# -gt 0 ]; do
case $1 in
-h | --help)
show_help
exit 0
;;
-v | --verbose)
VERBOSE="true"
shift
;;
-n | --dry-run)
DRY_RUN="true"
shift
;;
--add-headers)
ADD_HEADERS="true"
shift
;;
--list-targets)
list_targets
exit 0
;;
-*)
log_error "Unknown option: $1"
show_help
exit 1
;;
*)
if [ -n "$TARGET_INPUT" ]; then
log_error "Multiple targets specified. Use 'all' or a specific target/group."
exit 1
fi
TARGET_INPUT="$1"
shift
;;
esac
done
# Default to 'all' if no target specified
TARGET_INPUT="${TARGET_INPUT:-all}"
# Resolve and execute
targets=$(resolve_targets "$TARGET_INPUT")
sync_types "$targets"