Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
ALLOWED_ORIGINS=http://localhost:8082,http://127.0.0.1:8082,http://localhost:5173,http://127.0.0.1:5173
AUTH_SESSION_TTL_DAYS=30
AUTH_ALLOW_INSECURE_COOKIES=false
HOST_PORT_WEB=8082
HOST_BIND_SERVER=127.0.0.1
HOST_PORT_SERVER=8080
Expand Down
101 changes: 91 additions & 10 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,97 @@
# TypeType 1.3.1
# TypeType 1.4.0

## Summary
TypeType 1.4.0 adds richer search filters, consistent content blocking,
server-delivered YouTube subtitles, configurable account sessions, and several
playback, import and self-hosting fixes.

- fix videos and Shorts stopping after about one minute when YouTube rejects the active SABR context [#184](https://github.com/TypeType-Video/TypeType/issues/184)
- refresh rejected YouTube token material before creating a replacement playback session
- release replaced SABR sessions and prevent stale background work from accumulating
- bound SABR metadata and media caches during long playback sessions
## Search And Content Controls

Playback now recovers in place with fresh authorization instead of repeatedly creating sessions that cannot produce media.
- Add grouped YouTube search filters for upload date, content type, duration
and sorting. [#187](https://github.com/TypeType-Video/TypeType/issues/187)
- Hide blocked channels and videos consistently across search, autoplay, watch
pages, embeds, playlists, history, subscriptions and recommendations.
[#193](https://github.com/TypeType-Video/TypeType/issues/193)
- Normalize channel and video identities so alternate YouTube URL formats
cannot bypass blocked-content rules.

No configuration or database migration is required.
## Subtitles And Playback

Thx to @LuckeeSoft for the precise report, and to everyone who tested playback on beta.
- Load YouTube subtitles through TypeType-Server instead of requiring the web
client to contact YouTube directly.
- Cache subtitle content and preserve manual, automatic and translated subtitle
tracks.
- Return typed rate-limit errors when YouTube rejects subtitle retrieval.
- Preload adaptive SABR initialization ranges to prevent startup failures when
an initialization segment is not returned immediately.
[#204](https://github.com/TypeType-Video/TypeType/issues/204)
- Restore saved playback positions only after the SABR session has completed
its initial bootstrap.
- Route chapter selection through SABR so selecting a chapter seeks correctly
again. [#202](https://github.com/TypeType-Video/TypeType/issues/202)
- Center captions correctly in the web player.
[#201](https://github.com/TypeType-Video/TypeType/issues/201)
- Update PipePipeExtractor and align TypeType with the current YouTube client
profiles.

If u want to support TypeType, please share it with others. If u want to support it financially, u can do so through [GitHub Sponsors](https://github.com/sponsors/Priveetee).
## Accounts And Administration

- Add `AUTH_SESSION_TTL_DAYS` to configure account session lifetime from 1 to
365 days, with a default of 30 days.
[#203](https://github.com/TypeType-Video/TypeType/issues/203)
- Preserve active browser sessions during temporary refresh failures instead
of immediately redirecting to login.
- Keep generated password reset tokens visible and copyable when browser
clipboard access is unavailable.
[#198](https://github.com/TypeType-Video/TypeType/issues/198)
- Keep admin user avatars stable when an account identity is edited.
[#199](https://github.com/TypeType-Video/TypeType/issues/199)

## Imports And Performance

- Skip deleted and unavailable videos when importing YouTube Takeout playlists.
[#135](https://github.com/TypeType-Video/TypeType/issues/135)
- Bound concurrent SABR download parts to reduce memory and connection pressure
during large downloads.
- Keep Server and Token YouTube traffic on the configured proxy instead of
silently switching to a different egress.

## Self-Hosting

- Fix the installation script attempting to download the removed
`youtube-egress-relay.mjs` file.
[#197](https://github.com/TypeType-Video/TypeType/issues/197)
- Add account session lifetime configuration to the Compose stack and
environment template.
- Validate the new session configuration during stack checks.

No database migration is required. `AUTH_SESSION_TTL_DAYS` is optional and
defaults to `30`.

When a YouTube proxy is configured, it must remain reachable because Server and
Token will no longer silently bypass it.

## Thx

- A big thx to @LuckeeSoft for proposing the new search filters.
- Thx to @Toni-Vide for the detailed reports about blocked content, password
reset tokens and admin avatars.
- Thx to @Slashic for reporting the session, chapter selection and caption
alignment problems.
- Thx to @Role92 for the precise SABR initialization logs.
- Thx to @Willie169 for catching the broken self-hosted installation path.
- Thx to @lelam183 for repeatedly testing YouTube Takeout imports and helping
identify the remaining unavailable-video case.
- Thx as well to everyone testing subtitles and playback on beta, sharing logs,
and helping improve the self-hosting setup.

## Updating

Follow the
[update guide](https://typetype-video.github.io/Docs-TypeType/self-hosting/maintenance).

If necessary, follow the
[rollback guide](https://typetype-video.github.io/Docs-TypeType/self-hosting/rollback).

If u want to support TypeType, please share it with others. If u want to
support it financially, u can do so through
[GitHub Sponsors](https://github.com/sponsors/Priveetee).
2 changes: 1 addition & 1 deletion TypeType-Frontend
Submodule TypeType-Frontend updated 76 files
+1 −1 apps/web/package.json
+2 −4 apps/web/src/components/admin-session-card.tsx
+2 −9 apps/web/src/components/admin-user-avatar.tsx
+9 −1 apps/web/src/components/channel-page-content.tsx
+11 −4 apps/web/src/components/continue-watching.tsx
+27 −19 apps/web/src/components/reset-token-modal.tsx
+173 −49 apps/web/src/components/search-filter-bar.tsx
+7 −5 apps/web/src/components/shorts-action-button.tsx
+3 −3 apps/web/src/components/shorts-actions.tsx
+2 −49 apps/web/src/components/shorts-info-overlay.tsx
+1 −1 apps/web/src/components/shorts-navigation.tsx
+43 −0 apps/web/src/components/shorts-player-layout.tsx
+39 −24 apps/web/src/components/shorts-player-shell.tsx
+40 −0 apps/web/src/components/shorts-player-stage-types.ts
+103 −96 apps/web/src/components/shorts-player-stage.tsx
+5 −3 apps/web/src/components/shorts-shell-loader.tsx
+53 −102 apps/web/src/components/shorts-video-player.tsx
+2 −2 apps/web/src/components/subtitle-track-utils.ts
+12 −7 apps/web/src/components/video-card-feedback-panel.tsx
+14 −0 apps/web/src/components/video-player-layout.tsx
+1 −0 apps/web/src/components/video-player-types.ts
+2 −0 apps/web/src/components/video-player.tsx
+8 −2 apps/web/src/components/watch-layout.tsx
+12 −7 apps/web/src/components/watch-more-actions.tsx
+47 −38 apps/web/src/hooks/use-blocked-filter.ts
+14 −14 apps/web/src/hooks/use-blocked.ts
+3 −3 apps/web/src/hooks/use-search-filters.ts
+8 −3 apps/web/src/hooks/use-search.ts
+34 −9 apps/web/src/hooks/use-shorts-active-stream.ts
+27 −0 apps/web/src/hooks/use-shorts-route-feed.ts
+22 −15 apps/web/src/hooks/use-shorts-route-sync.ts
+6 −2 apps/web/src/hooks/use-stream.ts
+3 −4 apps/web/src/hooks/use-watch-autoplay-preload.ts
+2 −1 apps/web/src/hooks/use-watch-playback-flow.ts
+15 −3 apps/web/src/hooks/use-watch-playlist.tsx
+11 −0 apps/web/src/lib/admin-user-avatar.ts
+9 −4 apps/web/src/lib/api-discovery.ts
+10 −2 apps/web/src/lib/auth-session.ts
+59 −48 apps/web/src/lib/authed.ts
+130 −0 apps/web/src/lib/blocked-content.ts
+46 −0 apps/web/src/lib/copy-text.ts
+6 −2 apps/web/src/lib/debug-console.ts
+1 −1 apps/web/src/lib/provider.ts
+32 −4 apps/web/src/lib/proxy.ts
+2 −6 apps/web/src/lib/sabr-vidstack-loader.ts
+12 −0 apps/web/src/lib/sabr-vidstack-provider.ts
+86 −0 apps/web/src/lib/search-filter-selection.ts
+8 −10 apps/web/src/lib/shorts-navigation.ts
+39 −0 apps/web/src/lib/shorts-playback-state.ts
+67 −0 apps/web/src/lib/shorts-route.ts
+8 −4 apps/web/src/lib/stream-request.ts
+7 −1 apps/web/src/routes/__root.tsx
+2 −4 apps/web/src/routes/embed_.$videoId.tsx
+9 −4 apps/web/src/routes/history.tsx
+22 −9 apps/web/src/routes/playlists.tsx
+9 −2 apps/web/src/routes/playlists_.$id.tsx
+34 −14 apps/web/src/routes/search.tsx
+13 −49 apps/web/src/routes/shorts.tsx
+5 −1 apps/web/src/routes/subscriptions_.channels.tsx
+2 −3 apps/web/src/routes/watch.tsx
+7 −0 apps/web/src/styles/player-menu-overrides.css
+53 −14 apps/web/src/styles/shorts-overrides.css
+10 −1 apps/web/src/types/api.ts
+1 −0 apps/web/src/types/playlist.ts
+39 −0 apps/web/tests/admin-user-avatar.test.ts
+9 −7 apps/web/tests/api-version.test.ts
+143 −0 apps/web/tests/auth-session-refresh.test.ts
+59 −0 apps/web/tests/blocked-content.test.ts
+70 −0 apps/web/tests/copy-text.test.ts
+22 −0 apps/web/tests/sabr-vidstack-provider.test.ts
+92 −0 apps/web/tests/search-filter-selection.test.ts
+39 −0 apps/web/tests/shorts-playback-state.test.ts
+46 −0 apps/web/tests/shorts-route.test.ts
+44 −4 apps/web/tests/subtitle-track-utils.test.ts
+1 −1 bun.lock
+1 −1 package.json
2 changes: 1 addition & 1 deletion TypeType-Server
Submodule TypeType-Server updated 97 files
+1 −1 build.gradle.kts
+1 −1 gradle.properties
+6 −0 openapi.yaml
+11 −1 openapi/components/media.yaml
+10 −1 openapi/components/streams.yaml
+50 −0 openapi/paths/proxy.yaml
+16 −0 openapi/paths/search.yaml
+16 −0 openapi/paths/streams.yaml
+62 −0 openapi/paths/subtitles.yaml
+4 −1 src/main/kotlin/dev/typetype/server/Application.kt
+11 −2 src/main/kotlin/dev/typetype/server/ApplicationRoutes.kt
+4 −1 src/main/kotlin/dev/typetype/server/ApplicationStreamRoutes.kt
+3 −0 src/main/kotlin/dev/typetype/server/CompressionConfig.kt
+16 −2 src/main/kotlin/dev/typetype/server/ExtractionServiceRegistry.kt
+13 −1 src/main/kotlin/dev/typetype/server/Plugins.kt
+1 −0 src/main/kotlin/dev/typetype/server/ServiceRegistry.kt
+1 −1 src/main/kotlin/dev/typetype/server/downloader/YoutubeProxySelector.kt
+11 −0 src/main/kotlin/dev/typetype/server/models/SearchFilterGroup.kt
+1 −0 src/main/kotlin/dev/typetype/server/models/SearchFilterOption.kt
+1 −0 src/main/kotlin/dev/typetype/server/models/SearchFiltersResponse.kt
+13 −5 src/main/kotlin/dev/typetype/server/routes/AuthRoutes.kt
+5 −1 src/main/kotlin/dev/typetype/server/routes/HomeRecommendationRoutes.kt
+5 −1 src/main/kotlin/dev/typetype/server/routes/HomeRecommendationShortsRoutes.kt
+12 −4 src/main/kotlin/dev/typetype/server/routes/OidcAuthRoutes.kt
+14 −1 src/main/kotlin/dev/typetype/server/routes/ProxyRoutes.kt
+3 −1 src/main/kotlin/dev/typetype/server/routes/RegisterRoutes.kt
+4 −1 src/main/kotlin/dev/typetype/server/routes/SabrPlaybackRecovery.kt
+7 −3 src/main/kotlin/dev/typetype/server/routes/SearchRoutes.kt
+2 −0 src/main/kotlin/dev/typetype/server/routes/StreamRouteDependencies.kt
+22 −1 src/main/kotlin/dev/typetype/server/routes/StreamRoutes.kt
+2 −2 src/main/kotlin/dev/typetype/server/routes/UserDataRoutes.kt
+72 −0 src/main/kotlin/dev/typetype/server/routes/YouTubeSubtitleResponse.kt
+44 −0 src/main/kotlin/dev/typetype/server/routes/YouTubeSubtitleRoutes.kt
+4 −0 src/main/kotlin/dev/typetype/server/services/AllowedChannelsService.kt
+9 −9 src/main/kotlin/dev/typetype/server/services/AuthCookieHelpers.kt
+6 −2 src/main/kotlin/dev/typetype/server/services/AuthService.kt
+32 −0 src/main/kotlin/dev/typetype/server/services/AuthSessionConfig.kt
+2 −5 src/main/kotlin/dev/typetype/server/services/AuthTokenIssuer.kt
+14 −0 src/main/kotlin/dev/typetype/server/services/BlockedContentFilters.kt
+23 −6 src/main/kotlin/dev/typetype/server/services/BlockedContentProfile.kt
+14 −4 src/main/kotlin/dev/typetype/server/services/CachedSearchService.kt
+61 −30 src/main/kotlin/dev/typetype/server/services/PipePipeSearchService.kt
+43 −0 src/main/kotlin/dev/typetype/server/services/SabrAdaptiveInitialization.kt
+1 −19 src/main/kotlin/dev/typetype/server/services/SabrDownloadInitialization.kt
+6 −0 src/main/kotlin/dev/typetype/server/services/SabrSessionPumpLoop.kt
+1 −4 src/main/kotlin/dev/typetype/server/services/SabrSessionStore.kt
+1 −0 src/main/kotlin/dev/typetype/server/services/SabrStartupBootstrap.kt
+61 −10 src/main/kotlin/dev/typetype/server/services/SearchFilterMappers.kt
+12 −2 src/main/kotlin/dev/typetype/server/services/SearchService.kt
+83 −0 src/main/kotlin/dev/typetype/server/services/StreamYouTubeSubtitleResolver.kt
+2 −13 src/main/kotlin/dev/typetype/server/services/TypetypeTokenSabrPoTokenProvider.kt
+2 −0 src/main/kotlin/dev/typetype/server/services/TypetypeTokenYoutubeSessionPoTokenProvider.kt
+2 −0 src/main/kotlin/dev/typetype/server/services/TypetypeYoutubeSessionPoTokenProvider.kt
+75 −0 src/main/kotlin/dev/typetype/server/services/YouTubeSubtitleCache.kt
+104 −0 src/main/kotlin/dev/typetype/server/services/YouTubeSubtitleContentFetcher.kt
+113 −0 src/main/kotlin/dev/typetype/server/services/YouTubeSubtitleContract.kt
+82 −0 src/main/kotlin/dev/typetype/server/services/YouTubeSubtitleDeliveryService.kt
+1 −0 src/main/kotlin/dev/typetype/server/services/YouTubeSubtitleService.kt
+1 −1 src/main/kotlin/dev/typetype/server/services/YoutubePlayerClient.kt
+7 −5 src/main/kotlin/dev/typetype/server/services/YoutubeScopedSearchService.kt
+1 −14 src/main/kotlin/dev/typetype/server/services/YoutubeTakeoutActivitySignalService.kt
+1 −0 src/main/kotlin/dev/typetype/server/services/YoutubeTakeoutHistoryParser.kt
+1 −0 src/main/kotlin/dev/typetype/server/services/YoutubeTakeoutParserService.kt
+9 −0 src/main/kotlin/dev/typetype/server/services/YoutubeTakeoutRowParser.kt
+18 −0 src/main/kotlin/dev/typetype/server/services/YoutubeTakeoutUnavailableItem.kt
+38 −0 src/test/kotlin/dev/typetype/server/AuthCookieHelpersTest.kt
+19 −0 src/test/kotlin/dev/typetype/server/AuthServiceCoreTest.kt
+120 −0 src/test/kotlin/dev/typetype/server/BlockedStreamRoutesTest.kt
+3 −3 src/test/kotlin/dev/typetype/server/ExtractionTest.kt
+2 −1 src/test/kotlin/dev/typetype/server/FakeCacheService.kt
+1 −1 src/test/kotlin/dev/typetype/server/HomeRecommendationRoutesTest.kt
+1 −1 src/test/kotlin/dev/typetype/server/HomeRecommendationRoutesValidationTest.kt
+1 −1 src/test/kotlin/dev/typetype/server/HomeRecommendationShortsDebugRoutesTest.kt
+1 −1 src/test/kotlin/dev/typetype/server/HomeRecommendationShortsRoutesTest.kt
+114 −0 src/test/kotlin/dev/typetype/server/SearchFilterMappersTest.kt
+31 −3 src/test/kotlin/dev/typetype/server/SearchFiltersRoutesTest.kt
+5 −5 src/test/kotlin/dev/typetype/server/TypetypeTokenYoutubeSessionPoTokenProviderTest.kt
+144 −0 src/test/kotlin/dev/typetype/server/YouTubeSubtitleProxyRoutesTest.kt
+3 −1 src/test/kotlin/dev/typetype/server/YoutubeAuthenticatedExtractionProbeTest.kt
+1 −3 src/test/kotlin/dev/typetype/server/YoutubeProxySelectorTest.kt
+47 −0 src/test/kotlin/dev/typetype/server/YoutubeTakeoutParserServiceTest.kt
+13 −0 src/test/kotlin/dev/typetype/server/routes/SabrPlaybackRecoveryTest.kt
+40 −0 src/test/kotlin/dev/typetype/server/services/AuthSessionConfigTest.kt
+64 −0 src/test/kotlin/dev/typetype/server/services/BlockedContentProfileTest.kt
+49 −0 src/test/kotlin/dev/typetype/server/services/BlockedHomeRecommendationsFilterTest.kt
+79 −0 src/test/kotlin/dev/typetype/server/services/SabrAdaptiveInitializationTest.kt
+41 −0 src/test/kotlin/dev/typetype/server/services/SabrSeekRepositionPumpTest.kt
+2 −0 src/test/kotlin/dev/typetype/server/services/SabrSessionPlayerContextTest.kt
+97 −0 src/test/kotlin/dev/typetype/server/services/StreamYouTubeSubtitleResolverTest.kt
+5 −5 src/test/kotlin/dev/typetype/server/services/TypetypeTokenSabrTokenClientTest.kt
+2 −0 src/test/kotlin/dev/typetype/server/services/TypetypeYoutubeSessionPoTokenProviderTest.kt
+138 −0 src/test/kotlin/dev/typetype/server/services/YouTubeSubtitleContentFetcherTest.kt
+38 −0 src/test/kotlin/dev/typetype/server/services/YouTubeSubtitleContractTest.kt
+149 −0 src/test/kotlin/dev/typetype/server/services/YouTubeSubtitleDeliveryServiceTest.kt
+11 −3 src/test/kotlin/dev/typetype/server/services/YouTubeSubtitleServiceTest.kt
+4 −4 src/test/kotlin/dev/typetype/server/services/YoutubePlayerClientFallbackStreamServiceTest.kt
+5 −5 src/test/kotlin/dev/typetype/server/services/YoutubePlayerClientStreamServiceTest.kt
2 changes: 2 additions & 0 deletions docker-compose.dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ services:
- "${HOST_BIND_SERVER_BETA:-127.0.0.1}:${HOST_PORT_SERVER_BETA:-18080}:8080"
env_file: .env
environment:
AUTH_SESSION_TTL_DAYS: ${AUTH_SESSION_TTL_DAYS:-30}
AUTH_ALLOW_INSECURE_COOKIES: ${AUTH_ALLOW_INSECURE_COOKIES:-false}
DATABASE_URL: ${DATABASE_URL:-jdbc:postgresql://postgres:5432/${POSTGRES_DB:-typetype}}
DATABASE_USER: ${DATABASE_USER:-${POSTGRES_USER:-typetype}}
DATABASE_PASSWORD: ${DATABASE_PASSWORD:-${POSTGRES_PASSWORD:-typetype}}
Expand Down
2 changes: 2 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ services:
- "${HOST_BIND_SERVER:-127.0.0.1}:${HOST_PORT_SERVER:-8080}:8080"
environment:
ALLOWED_ORIGINS: ${ALLOWED_ORIGINS:-http://localhost:8082,http://127.0.0.1:8082,http://localhost:5173,http://127.0.0.1:5173}
AUTH_SESSION_TTL_DAYS: ${AUTH_SESSION_TTL_DAYS:-30}
AUTH_ALLOW_INSECURE_COOKIES: ${AUTH_ALLOW_INSECURE_COOKIES:-false}
DATABASE_URL: ${DATABASE_URL:-jdbc:postgresql://postgres:5432/${POSTGRES_DB:-typetype}}
DATABASE_USER: ${DATABASE_USER:-${POSTGRES_USER:-typetype}}
DATABASE_PASSWORD: ${DATABASE_PASSWORD:-${POSTGRES_PASSWORD:-typetype}}
Expand Down
1 change: 0 additions & 1 deletion scripts/install-stack.sh
Original file line number Diff line number Diff line change
Expand Up @@ -513,7 +513,6 @@ fetch_file "scripts/bootstrap-env.sh" "${INSTALL_DIR}/scripts/bootstrap-env.sh"
fetch_file "scripts/bootstrap-garage.sh" "${INSTALL_DIR}/scripts/bootstrap-garage.sh"
fetch_file "scripts/setup-stack.sh" "${INSTALL_DIR}/scripts/setup-stack.sh"
fetch_file "scripts/validate-stack.sh" "${INSTALL_DIR}/scripts/validate-stack.sh"
fetch_file "scripts/youtube-egress-relay.mjs" "${INSTALL_DIR}/scripts/youtube-egress-relay.mjs"

chmod +x "${INSTALL_DIR}/scripts/install-stack.sh"
chmod +x "${INSTALL_DIR}/scripts/bootstrap-env.sh"
Expand Down
44 changes: 44 additions & 0 deletions scripts/install-stack.test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#!/usr/bin/env bash
set -euo pipefail

repository="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
temporary="$(mktemp -d)"
trap 'rm -rf "$temporary"' EXIT

fake_bin="${temporary}/bin"
install_dir="${temporary}/stack"
docker_log="${temporary}/docker.log"
mkdir -p "$fake_bin"

cat > "${fake_bin}/docker" <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
printf '%q ' "$@" >> "$FAKE_DOCKER_LOG"
printf '\n' >> "$FAKE_DOCKER_LOG"
EOF
chmod +x "${fake_bin}/docker"

PATH="${fake_bin}:${PATH}" \
FAKE_DOCKER_LOG="$docker_log" \
bash "${repository}/scripts/install-stack.sh" \
--source-dir "$repository" \
--dir "$install_dir" \
--download-only \
--yes > "${temporary}/install.log"

for file in \
docker-compose.yml \
docker-compose.arm64.yml \
.env.example \
.env \
scripts/install-stack.sh \
scripts/bootstrap-env.sh \
scripts/bootstrap-garage.sh \
scripts/setup-stack.sh \
scripts/validate-stack.sh; do
test -s "${install_dir}/${file}"
done

grep -q '^compose version ' "$docker_log"
grep -q 'compose .*config -q ' "$docker_log"
grep -q '\[install\] Download-only complete\.' "${temporary}/install.log"
11 changes: 11 additions & 0 deletions scripts/validate-stack.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ trap cleanup EXIT
for script in scripts/*.sh; do
bash -n "$script"
done
./scripts/install-stack.test.sh
./scripts/deploy-beta.test.sh

docker compose --env-file .env.example -f docker-compose.yml config -q
Expand Down Expand Up @@ -53,3 +54,13 @@ if [[ $(grep -c 'YOUTUBE_OUTBOUND_PROXY_URL: http://127.0.0.1:29083' <<<"$dev_co
echo "beta Server and Token must share the configured outbound proxy" >&2
exit 1
fi
for config in "$stable_config" "$dev_config"; do
if ! grep -q 'AUTH_SESSION_TTL_DAYS: "30"' <<<"$config"; then
echo "Server must receive the default account session lifetime" >&2
exit 1
fi
if ! grep -q 'AUTH_ALLOW_INSECURE_COOKIES: "false"' <<<"$config"; then
echo "Server must keep insecure refresh cookies disabled by default" >&2
exit 1
fi
done