diff --git a/.gitignore b/.gitignore index 152d35c0..8606f283 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,6 @@ -node_modules -.nuxt -.nitro -.cache -.output -.env -dist .DS_Store +.env + +dist/ +.astro/ +node_modules/ diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..46772c17 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,12 @@ +{ + "files.trimTrailingWhitespace": true, + "files.eol": "\n", + "files.trimFinalNewlines": true, + "files.insertFinalNewline": true, + "search.exclude": { + "**/.astro": true, + "**/node_modules": true, + "**/dist": true, + "**/package-lock.json": true + } +} diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index 32e69a6a..00000000 --- a/CLAUDE.md +++ /dev/null @@ -1,42 +0,0 @@ -# Cesbo Help Documentation Project Guidelines - -## Build Commands -- Development server: `npm run dev` -- Production build: `npm run build` -- Static site generation: `npm run generate` -- Preview build: `npm run preview` -- Deploy: `tar -zHcf - dist | ssh cesbo.dev tar -C /opt/help -zxf -` - -## Content -- Default language: English -- Additional languages: Russian, Spanish -- Use Markdown for content files -- Use `##` for main headings and `###` for subheadings - -## Code Style - -### Components -- Use Vue 3 with ` - - diff --git a/astro.config.mjs b/astro.config.mjs new file mode 100644 index 00000000..bf1efe7e --- /dev/null +++ b/astro.config.mjs @@ -0,0 +1,102 @@ +// @ts-check +import { defineConfig } from 'astro/config' +import starlight from '@astrojs/starlight' +import mdx from '@astrojs/mdx' +import starlightImageZoom from 'starlight-image-zoom' +import starlightAutoSidebar from 'starlight-auto-sidebar' +import starlightLlmsTxt from 'starlight-llms-txt' +import starlightLinksValidator from 'starlight-links-validator' +import starlightThemeRapide from 'starlight-theme-rapide' + +import tailwindcss from '@tailwindcss/vite' + +// https://astro.build/config +export default defineConfig({ + integrations: [starlight({ + title: { + en: 'Cesbo Help', + ru: 'ะกะฟั€ะฐะฒะพั‡ะฝั‹ะน ั†ะตะฝั‚ั€ Cesbo', + es: 'Cesbo Ayuda', + }, + logo: { + src: './src/assets/logo.svg', + alt: 'Cesbo logo', + replacesTitle: true, + }, + defaultLocale: 'en', + locales: { + en: { + label: 'English', + }, + ru: { + label: 'ะ ัƒััะบะธะน', + }, + es: { + label: 'Espaรฑol', + }, + }, + routeMiddleware: './src/components/sidebar-middleware.ts', + components: { + }, + sidebar: [ + { + label: 'Astra', + translations: { es: 'Astra', ru: 'ะัั‚ั€ะฐ' }, + autogenerate: { directory: 'astra' }, + collapsed: true, + }, + { + label: 'Alta', + translations: { es: 'Alta', ru: 'ะะปัŒั‚ะฐ' }, + autogenerate: { directory: 'alta' }, + collapsed: true, + }, + { + label: 'Senta', + translations: { es: 'Senta', ru: 'ะกะตะฝั‚ะฐ' }, + autogenerate: { directory: 'senta' }, + collapsed: true, + }, + { + label: 'Articles', + translations: { es: 'Artรญculos', ru: 'ะกั‚ะฐั‚ัŒะธ' }, + autogenerate: { directory: 'articles' }, + collapsed: true, + }, + ], + customCss: [ + './src/styles/global.css', + ], + favicon: "/favicon.ico", + plugins: [ + starlightThemeRapide(), + starlightImageZoom(), + starlightAutoSidebar(), + starlightLlmsTxt(), + starlightLinksValidator({ + errorOnInconsistentLocale: true, + errorOnRelativeLinks: true, + errorOnInvalidHashes: false, + errorOnLocalLinks: false, + }), + ], + }), + mdx(), + ], + + site: "https://help.cesbo.com", + + prefetch: { + prefetchAll: true, + defaultStrategy: "tap", + }, + + redirects: { + "/": "/en/", + "/profile": "https://cesbo.com/accounts/profile/", + }, + + vite: { + plugins: [tailwindcss()], + }, +}) diff --git a/components/ArticleBreadcrumb.vue b/components/ArticleBreadcrumb.vue deleted file mode 100644 index 600127f9..00000000 --- a/components/ArticleBreadcrumb.vue +++ /dev/null @@ -1,93 +0,0 @@ - - - diff --git a/components/ArticleDate.vue b/components/ArticleDate.vue deleted file mode 100644 index 4697aa2e..00000000 --- a/components/ArticleDate.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - diff --git a/components/ArticleToc.vue b/components/ArticleToc.vue deleted file mode 100644 index dd69d83d..00000000 --- a/components/ArticleToc.vue +++ /dev/null @@ -1,29 +0,0 @@ - - - diff --git a/components/LangSelector.vue b/components/LangSelector.vue deleted file mode 100644 index ed58a438..00000000 --- a/components/LangSelector.vue +++ /dev/null @@ -1,46 +0,0 @@ - - - diff --git a/components/SiteCategory.vue b/components/SiteCategory.vue deleted file mode 100644 index f44b8640..00000000 --- a/components/SiteCategory.vue +++ /dev/null @@ -1,64 +0,0 @@ - - - diff --git a/components/SiteFooter.vue b/components/SiteFooter.vue deleted file mode 100644 index 8e01c559..00000000 --- a/components/SiteFooter.vue +++ /dev/null @@ -1,108 +0,0 @@ - - - diff --git a/components/SiteMenu.vue b/components/SiteMenu.vue deleted file mode 100644 index 982ed0fe..00000000 --- a/components/SiteMenu.vue +++ /dev/null @@ -1,62 +0,0 @@ - - - diff --git a/components/SiteSearch.client.vue b/components/SiteSearch.client.vue deleted file mode 100644 index 8cd94baa..00000000 --- a/components/SiteSearch.client.vue +++ /dev/null @@ -1,269 +0,0 @@ - - - diff --git a/components/SiteSidebar.vue b/components/SiteSidebar.vue deleted file mode 100644 index f67cf3be..00000000 --- a/components/SiteSidebar.vue +++ /dev/null @@ -1,109 +0,0 @@ - - - diff --git a/components/content/Alert.vue b/components/content/Alert.vue deleted file mode 100644 index 1f36bea3..00000000 --- a/components/content/Alert.vue +++ /dev/null @@ -1,24 +0,0 @@ - - - diff --git a/components/content/Badge.vue b/components/content/Badge.vue deleted file mode 100644 index 8a7374df..00000000 --- a/components/content/Badge.vue +++ /dev/null @@ -1,29 +0,0 @@ - - - diff --git a/components/content/Category.vue b/components/content/Category.vue deleted file mode 100644 index d79eeff8..00000000 --- a/components/content/Category.vue +++ /dev/null @@ -1,31 +0,0 @@ - - - diff --git a/components/content/Hotkey.vue b/components/content/Hotkey.vue deleted file mode 100644 index 771807a9..00000000 --- a/components/content/Hotkey.vue +++ /dev/null @@ -1,18 +0,0 @@ - diff --git a/components/content/Note.vue b/components/content/Note.vue deleted file mode 100644 index 81c058a7..00000000 --- a/components/content/Note.vue +++ /dev/null @@ -1,24 +0,0 @@ - - - diff --git a/components/content/ProseH2.vue b/components/content/ProseH2.vue deleted file mode 100644 index dff105aa..00000000 --- a/components/content/ProseH2.vue +++ /dev/null @@ -1,76 +0,0 @@ - - - diff --git a/components/content/ProseH3.vue b/components/content/ProseH3.vue deleted file mode 100644 index c35d3ec1..00000000 --- a/components/content/ProseH3.vue +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/components/content/Spoiler.vue b/components/content/Spoiler.vue deleted file mode 100644 index 3f95de07..00000000 --- a/components/content/Spoiler.vue +++ /dev/null @@ -1,30 +0,0 @@ - - - diff --git a/components/content/Youtube.vue b/components/content/Youtube.vue deleted file mode 100644 index d63add38..00000000 --- a/components/content/Youtube.vue +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/components/layout/ContainerSection.vue b/components/layout/ContainerSection.vue deleted file mode 100644 index 340946fb..00000000 --- a/components/layout/ContainerSection.vue +++ /dev/null @@ -1,10 +0,0 @@ - - \ No newline at end of file diff --git a/compressed/alta/backend_authorization.md b/compressed/alta/backend_authorization.md new file mode 100644 index 00000000..c8c415b5 --- /dev/null +++ b/compressed/alta/backend_authorization.md @@ -0,0 +1,104 @@ +# HTTP Backend Authorization + +HTTP Backend Authorization verifies client requests via an external HTTP service. A `200 OK` response from the backend grants access; any other status denies it. If the backend is unavailable, Alta applies a default action. + +## Integration Endpoints + +### Ministra / Stalker + +**Backend URL:** +Backend URL: + +``` +http://example.com/stalker_portal/server/api/chk_flussonic_tmp_link.php +``` +In the Ministra / Stalker settings turn on option โ€œTemporary URL - Flussonic supportโ€ + +### IPTVPORTAL + +**Backend URL:** + +``` +https://go.iptvportal.cloud/auth/arescrypt/ +``` + +**Portal Settings โ†’ Keys:** +- Name: `Alta` +- Algorithm: `ARESSTREAM` +- Mode: `SM` +- Key Length: `1472 bit` +- Update Rate: `1:00:00` + +**Channel Settings:** +- Auth: `arescrypt` +- Encoded: `on` +- Key: `Alta` + +### Microimpulse Smarty + +**Backend URL:** +``` +http://example.com/tvmiddleware/api/streamservice/token/check/ +``` + +### Custom Backend + +Alta sends an HTTP GET request to the backend, including original URL parameters and these headers: + +- `X-Session-Id` โ€“ unique session ID +- `X-Real-Ip` โ€“ client IP +- `X-Real-Path` โ€“ requested path +- `X-Real-Origin` โ€“ protocol + host + port +- `X-Real-Ua` โ€“ User-Agent + +**Example: Simple PHP Backend** + +`auth.php`: +```php + This is just an example and you should implement your own backend logic according to your specific requirements. +> For production, use nginx + php-fpm or another server setup. + + + +## Troubleshooting + +### Unexpected Access Without Authorization + +If unauthorized access occurs, your backend may be unavailable. + +**Test with `curl`:** + +```bash +curl -v "http://127.0.0.1:6000?token=123" +``` + +If response hangs or shows "Connection refused", check backend availability and address. diff --git a/compressed/alta/change_password.md b/compressed/alta/change_password.md new file mode 100644 index 00000000..29ee452d --- /dev/null +++ b/compressed/alta/change_password.md @@ -0,0 +1,41 @@ +# Change Password to Alta Web Interface + +Password could be changed by administrator. + +## Console Wizard + +You may use console wizard to reset own password. On your server launch next command: + +Terminal window + +``` +alta reset-password +``` + +Wizard ask you next details: + +- Service Name +- User login +- New password. Please note that password is not showing in the console on typing + +## Troubleshooting + +If you have any issues with console wizard please check common errors: + +### Service not found + +Service is not started or installed on another server + +### Permission denied + +Service is more privileged than wizard. Launch command with sudo to raise privileges: + +Terminal window + +``` +sudo alta reset-password +``` + +### User not found + +User with defined name is not found diff --git a/compressed/alta/channels.md b/compressed/alta/channels.md new file mode 100644 index 00000000..529d1e69 --- /dev/null +++ b/compressed/alta/channels.md @@ -0,0 +1,56 @@ +# Alta Cesbo Web UI โ€“ Channels Tab + +## Overview + +The **Channels** tab allows viewing and managing all streaming channels. +Each channel appears as a table row with controls to enable, preview, edit, export, or delete. + +## Channel Table Fields + +- **Channel Name**: User-defined label +- **Path**: Stream endpoint, part of HLS URL. +- **Receiver(s)**: Input source(s) for the stream. +- **Authorizer**: Access control (HTTP Backend, Secure token, IP allowlist). Read more [Authorizer]() +- **Storage**: Disk space usage per variant. +- **Duration**: Buffered content retention time + +## Channel Control Options + +- **Enable Toggle**: Start/stop the stream. +- **Export m3u**: Download M3U8 playlist. Read more [Export m3u]() +- **Create Channel**: Open form to add a new channel. + +## Create/Edit Channel Dialog + +Used for both new and existing channels. Includes: + +1. **Enable**: Enable or disable stream. +2. **Name**: Channel identifier. +3. **Path**: HLS URL suffix (e.g., `/` โ†’ `http:////index.m3u8`). +4. **Variants**: Enhances stream resilience (fallback if one variant fails). + - Name of variant(e.g., hd/sd, or 1080p/720p, etc.). + - Receiver. Each variant must have a defined receiver. + +5. **Authorizer**: + - Select predefined access control. + - If disabled, stream is public. + - If **Secure Token** is selected, the `Secure Link` button appears. Clicking it opens the `Generate Channel Secure Link` dialog with: + - **IP**: Client IP. + - **Start/End**: Secure token timeout. + - Click **Generate** to create a secure link: + ```http://://index.m3u8?token=``` + > Where `` is a [OTT server]() name. +6. **Storage & Duration**: + - **Storage**: Disk quota per variant (select from existing storages). Read more [Storage]() + - **Duration**: Retention time overrides storage default if different. + +7. **EPG Option**: + - `tvg-id`: XMLTV ID. + - `tvg-logo`: Logo URL. + +## Best Practices + +- **Naming**: Use standardized labels for consistency. +- **Storage**: Adjust allocation based on expected viewership. +- **Security**: Always use Authorizer for public-facing channels. +- **Variants**: Configure only necessary resolutions to reduce load. diff --git a/compressed/alta/dashboard.md b/compressed/alta/dashboard.md new file mode 100644 index 00000000..345e673e --- /dev/null +++ b/compressed/alta/dashboard.md @@ -0,0 +1,46 @@ +# Alta Cesbo Web UI โ€“ Dashboard Tab + +## Overview + +The **Dashboard** provides a real-time overview of all configured **Channels** and **Receivers**, showing key metrics for system monitoring: + +- **Stream Bitrates** +- **Active User Counts** +- **Storage Usage** (if enabled) + +Each Channel/Receiver is shown as a **card** with a color-coded border indicating its status. + +## Card Status Indicators + +- **Green Border**: Enabled and streaming normally. +- **Gray Border**: Disabled or no stream. +- **Yellow Border**: One or more stream variants inactive. + +## Card Header Contents + +- **Name**: Identifier for Channel/Receiver + - โš™๏ธ icon: Opens Channel settings + - `/`: Opens Edit Receiver dialog +- **User Count**: Number of active stream viewers +- **Bitrate**: Real-time bitrate in **Mbit/s** +- Clicking a card expands it to show more details. + +## Expanded Card Details + +### Stream Details +- **Variants List**: e.g., `HD / SD`, `Receiver A / Receiver B` +- **Individual Bitrates**: Shown per resolution/variant + +### Storage Usage (if enabled) +- Lists variants with: + - **Data Size** + - **Time Frame** for stored content + +## Usage Tips + +- **Search & Sort** via Navigation Bar to find Channels/Receivers +- **Monitor**: + - **Bitrate** and **user count** for performance +- **Troubleshooting**: + - **Gray card**: Check if stream is enabled and receiving input + - **Yellow card**: Check variant statuses in settings diff --git a/compressed/alta/hls_segment_duration.md b/compressed/alta/hls_segment_duration.md new file mode 100644 index 00000000..b71fbe7a --- /dev/null +++ b/compressed/alta/hls_segment_duration.md @@ -0,0 +1 @@ +#ToDo \ No newline at end of file diff --git a/compressed/alta/hls_url_access.md b/compressed/alta/hls_url_access.md new file mode 100644 index 00000000..3cd3c4c9 --- /dev/null +++ b/compressed/alta/hls_url_access.md @@ -0,0 +1,97 @@ +# HLS Access Options + +## 1. URL Structure + +- **Base path**: `/` (e.g., `/discovery`) +- **Variant path** (multi-bitrate): `//` (e.g., `/discovery/1080p`) +- **Filenames** (default, configurable in [HLS Access]()): + - `index.m3u8`: Main access point for both live and on-demand content + * Without parameters: Streams live content + * With `start` parameter: Provides time-shifted content + - `media.m3u8` โ€“ Direct access to live content without session creation + - `vod.m3u8` โ€“ Direct access to on-demand content without session creation; URL includes `start` and `duration` parameters + +--- + +## 2. Index Playlist (Stream Mode) + +**URL**: + +`//index.m3u8` + +or with optional parameters: + +`//index.m3u8?start=