You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

791 lines
31 KiB
TypeScript

new file: .dockerignore new file: .editorconfig new file: .eslintrc.json new file: .gitignore new file: .gitpod.yml new file: .mocharc.cjs new file: CHANGELOG.md new file: CODE_OF_CONDUCT.md new file: CREDITS.md new file: SECURITY.md new file: apps/peertube-cli/.npmignore new file: apps/peertube-cli/README.md new file: apps/peertube-cli/package.json new file: apps/peertube-cli/scripts/build.js new file: apps/peertube-cli/scripts/watch.js new file: apps/peertube-cli/src/peertube-auth.ts new file: apps/peertube-cli/src/peertube-get-access-token.ts new file: apps/peertube-cli/src/peertube-plugins.ts new file: apps/peertube-cli/src/peertube-redundancy.ts new file: apps/peertube-cli/src/peertube-upload.ts new file: apps/peertube-cli/src/peertube.ts new file: apps/peertube-cli/src/shared/cli.ts new file: apps/peertube-cli/src/shared/index.ts new file: apps/peertube-cli/tsconfig.json new file: apps/peertube-cli/yarn.lock new file: apps/peertube-runner/.gitignore new file: apps/peertube-runner/.npmignore new file: apps/peertube-runner/README.md new file: apps/peertube-runner/package.json new file: apps/peertube-runner/scripts/build.js new file: apps/peertube-runner/scripts/watch.js new file: apps/peertube-runner/src/peertube-runner.ts new file: apps/peertube-runner/src/register/index.ts new file: apps/peertube-runner/src/register/register.ts new file: apps/peertube-runner/src/server/index.ts new file: apps/peertube-runner/src/server/process/index.ts new file: apps/peertube-runner/src/server/process/process.ts new file: apps/peertube-runner/src/server/process/shared/common.ts new file: apps/peertube-runner/src/server/process/shared/index.ts new file: apps/peertube-runner/src/server/process/shared/process-live.ts new file: apps/peertube-runner/src/server/process/shared/process-studio.ts new file: apps/peertube-runner/src/server/process/shared/process-transcription.ts new file: apps/peertube-runner/src/server/process/shared/process-vod.ts new file: apps/peertube-runner/src/server/process/shared/winston-logger.ts new file: apps/peertube-runner/src/server/server.ts new file: apps/peertube-runner/src/server/shared/index.ts new file: apps/peertube-runner/src/server/shared/supported-job.ts new file: apps/peertube-runner/src/shared/config-manager.ts new file: apps/peertube-runner/src/shared/http.ts new file: apps/peertube-runner/src/shared/index.ts new file: apps/peertube-runner/src/shared/ipc/index.ts new file: apps/peertube-runner/src/shared/ipc/ipc-client.ts new file: apps/peertube-runner/src/shared/ipc/ipc-server.ts new file: apps/peertube-runner/src/shared/ipc/shared/index.ts new file: apps/peertube-runner/src/shared/ipc/shared/ipc-request.model.ts new file: apps/peertube-runner/src/shared/ipc/shared/ipc-response.model.ts new file: apps/peertube-runner/src/shared/logger.ts new file: apps/peertube-runner/tsconfig.json new file: apps/peertube-runner/yarn.lock new file: client/.browserslistrc new file: client/.eslintrc.json new file: client/.gitignore new file: client/.stylelintrc.json new file: client/.xliffmerge.json new file: client/angular.json new file: client/e2e/fixtures/video.mp4 new file: client/e2e/fixtures/video2.mp4 new file: client/e2e/fixtures/video3.mp4 new file: client/e2e/src/commands/upload.ts new file: client/e2e/src/po/admin-config.po.ts new file: client/e2e/src/po/admin-plugin.po.ts new file: client/e2e/src/po/admin-registration.po.ts new file: client/e2e/src/po/anonymous-settings.po.ts new file: client/e2e/src/po/login.po.ts new file: client/e2e/src/po/my-account.po.ts new file: client/e2e/src/po/player.po.ts new file: client/e2e/src/po/signup.po.ts new file: client/e2e/src/po/video-list.po.ts new file: client/e2e/src/po/video-search.po.ts new file: client/e2e/src/po/video-update.po.ts new file: client/e2e/src/po/video-upload.po.ts new file: client/e2e/src/po/video-watch.po.ts new file: client/e2e/src/suites-all/live.e2e-spec.ts new file: client/e2e/src/suites-all/private-videos.e2e-spec.ts new file: client/e2e/src/suites-all/videos.e2e-spec.ts new file: client/e2e/src/suites-local/custom-server-defaults.e2e-spec.ts new file: client/e2e/src/suites-local/plugins.e2e-spec.ts new file: client/e2e/src/suites-local/signup.e2e-spec.ts new file: client/e2e/src/suites-local/user-settings.e2e-spec.ts new file: client/e2e/src/suites-local/video-password.e2e-spec.ts new file: client/e2e/src/suites-local/videos-list.e2e-spec.ts new file: client/e2e/src/types/common.ts new file: client/e2e/src/types/wdio.d.ts new file: client/e2e/src/utils/common.ts new file: client/e2e/src/utils/elements.ts new file: client/e2e/src/utils/email.ts new file: client/e2e/src/utils/files.ts new file: client/e2e/src/utils/hooks.ts new file: client/e2e/src/utils/index.ts new file: client/e2e/src/utils/mock-smtp.ts new file: client/e2e/src/utils/server.ts new file: client/e2e/src/utils/urls.ts new file: client/e2e/tsconfig.json new file: client/e2e/wdio.browserstack.conf.ts new file: client/e2e/wdio.local-test.conf.ts new file: client/e2e/wdio.local.conf.ts new file: client/e2e/wdio.main.conf.ts new file: client/package.json new file: client/proxy.config.json new file: client/src/app/+about/about-follows/about-follows.component.html new file: client/src/app/+about/about-follows/about-follows.component.scss new file: client/src/app/+about/about-follows/about-follows.component.ts new file: client/src/app/+about/about-instance/about-instance.component.html new file: client/src/app/+about/about-instance/about-instance.component.scss new file: client/src/app/+about/about-instance/about-instance.component.ts new file: client/src/app/+about/about-instance/about-instance.resolver.ts new file: client/src/app/+about/about-instance/contact-admin-modal.component.html new file: client/src/app/+about/about-instance/contact-admin-modal.component.scss new file: client/src/app/+about/about-instance/contact-admin-modal.component.ts new file: client/src/app/+about/about-instance/instance-statistics.component.html new file: client/src/app/+about/about-instance/instance-statistics.component.scss new file: client/src/app/+about/about-instance/instance-statistics.component.ts new file: client/src/app/+about/about-peertube/about-peertube.component.html new file: client/src/app/+about/about-peertube/about-peertube.component.scss new file: client/src/app/+about/about-peertube/about-peertube.component.ts new file: client/src/app/+about/about.component.html new file: client/src/app/+about/about.component.ts new file: client/src/app/+about/routes.ts new file: client/src/app/+accounts/account-video-channels/account-video-channels.component.html new file: client/src/app/+accounts/account-video-channels/account-video-channels.component.scss new file: client/src/app/+accounts/account-video-channels/account-video-channels.component.ts new file: client/src/app/+accounts/account-videos/account-videos.component.html new file: client/src/app/+accounts/account-videos/account-videos.component.ts new file: client/src/app/+accounts/accounts.component.html new file: client/src/app/+accounts/accounts.component.scss new file: client/src/app/+accounts/accounts.component.ts new file: client/src/app/+accounts/routes.ts new file: client/src/app/+admin/admin-moderation.component.html new file: client/src/app/+admin/admin-moderation.component.ts new file: client/src/app/+admin/admin-overview.component.html new file: client/src/app/+admin/admin-overview.component.ts new file: client/src/app/+admin/admin-settings.component.html new file: client/src/app/+admin/admin-settings.component.ts new file: client/src/app/+admin/config/config.routes.ts new file: client/src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.html new file: client/src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.ts new file: client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html new file: client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.ts new file: client/src/app/+admin/config/edit-custom-config/edit-configuration.service.ts new file: client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.html new file: client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.scss new file: client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts new file: client/src/app/+admin/config/edit-custom-config/edit-homepage.component.html new file: client/src/app/+admin/config/edit-custom-config/edit-homepage.component.ts new file: client/src/app/+admin/config/edit-custom-config/edit-instance-information.component.html new file: client/src/app/+admin/config/edit-custom-config/edit-instance-information.component.ts new file: client/src/app/+admin/config/edit-custom-config/edit-live-configuration.component.html new file: client/src/app/+admin/config/edit-custom-config/edit-live-configuration.component.ts new file: client/src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.html new file: client/src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.ts new file: client/src/app/+admin/config/edit-custom-config/index.ts new file: client/src/app/+admin/config/index.ts new file: client/src/app/+admin/config/shared/config.service.ts new file: client/src/app/+admin/follows/followers-list/followers-list.component.html new file: client/src/app/+admin/follows/followers-list/followers-list.component.scss new file: client/src/app/+admin/follows/followers-list/followers-list.component.ts new file: client/src/app/+admin/follows/followers-list/index.ts new file: client/src/app/+admin/follows/following-list/follow-modal.component.html new file: client/src/app/+admin/follows/following-list/follow-modal.component.scss new file: client/src/app/+admin/follows/following-list/follow-modal.component.ts new file: client/src/app/+admin/follows/following-list/following-list.component.html new file: client/src/app/+admin/follows/following-list/following-list.component.scss new file: client/src/app/+admin/follows/following-list/following-list.component.ts new file: client/src/app/+admin/follows/following-list/index.ts new file: client/src/app/+admin/follows/follows.routes.ts new file: client/src/app/+admin/follows/index.ts new file: client/src/app/+admin/follows/shared/redundancy-checkbox.component.html new file: client/src/app/+admin/follows/shared/redundancy-checkbox.component.ts new file: client/src/app/+admin/follows/video-redundancies-list/index.ts new file: client/src/app/+admin/follows/video-redundancies-list/video-redundancies-list.component.html new file: client/src/app/+admin/follows/video-redundancies-list/video-redundancies-list.component.scss new file: client/src/app/+admin/follows/video-redundancies-list/video-redundancies-list.component.ts new file: client/src/app/+admin/follows/video-redundancies-list/video-redundancy-information.component.html new file: client/src/app/+admin/follows/video-redundancies-list/video-redundancy-information.component.scss new file: client/src/app/+admin/follows/video-redundancies-list/video-redundancy-information.component.ts new file: client/src/app/+admin/moderation/abuse-list/abuse-list.component.html new file: client/src/app/+admin/moderation/abuse-list/abuse-list.component.ts new file: client/src/app/+admin/moderation/abuse-list/index.ts new file: client/src/app/+admin/moderation/instance-blocklist/index.ts new file: client/src/app/+admin/moderation/instance-blocklist/instance-account-blocklist.component.ts new file: client/src/app/+admin/moderation/instance-blocklist/instance-server-blocklist.component.ts new file: client/src/app/+admin/moderation/moderation.routes.ts new file: client/src/app/+admin/moderation/registration-list/admin-registration.service.ts new file: client/src/app/+admin/moderation/registration-list/index.ts new file: client/src/app/+admin/moderation/registration-list/process-registration-modal.component.html new file: client/src/app/+admin/moderation/registration-list/process-registration-modal.component.ts new file: client/src/app/+admin/moderation/registration-list/process-registration-validators.ts new file: client/src/app/+admin/moderation/registration-list/registration-list.component.html new file: client/src/app/+admin/moderation/registration-list/registration-list.component.scss new file: client/src/app/+admin/moderation/registration-list/registration-list.component.ts new file: client/src/app/+admin/moderation/video-block-list/index.ts new file: client/src/app/+admin/moderation/video-block-list/video-block-list.component.html new file: client/src/app/+admin/moderation/video-block-list/video-block-list.component.ts new file: client/src/app/+admin/moderation/watched-words-list/watched-words-list-admin.component.html new file: client/src/app/+admin/moderation/watched-words-list/watched-words-list-admin.component.ts new file: client/src/app/+admin/overview/comments/index.ts new file: client/src/app/+admin/overview/comments/video-comment-list.component.html new file: client/src/app/+admin/overview/comments/video-comment-list.component.ts new file: client/src/app/+admin/overview/index.ts new file: client/src/app/+admin/overview/overview.routes.ts new file: client/src/app/+admin/overview/users/index.ts new file: client/src/app/+admin/overview/users/user-edit/index.ts new file: client/src/app/+admin/overview/users/user-edit/user-create.component.ts new file: client/src/app/+admin/overview/users/user-edit/user-edit.component.html new file: client/src/app/+admin/overview/users/user-edit/user-edit.component.scss new file: client/src/app/+admin/overview/users/user-edit/user-edit.ts new file: client/src/app/+admin/overview/users/user-edit/user-password.component.html new file: client/src/app/+admin/overview/users/user-edit/user-password.component.scss new file: client/src/app/+admin/overview/users/user-edit/user-password.component.ts new file: client/src/app/+admin/overview/users/user-edit/user-update.component.ts new file: client/src/app/+admin/overview/users/user-list/index.ts new file: client/src/app/+admin/overview/users/user-list/user-list.component.html new file: client/src/app/+admin/overview/users/user-list/user-list.component.scss new file: client/src/app/+admin/overview/users/user-list/user-list.component.ts new file: client/src/app/+admin/overview/videos/index.ts new file: client/src/app/+admin/overview/videos/video-admin.service.ts new file: client/src/app/+admin/overview/videos/video-list.component.html new file: client/src/app/+admin/overview/videos/video-list.component.scss new file: client/src/app/+admin/overview/videos/video-list.component.ts new file: client/src/app/+admin/plugins/plugin-list-installed/plugin-list-installed.component.html new file: client/src/app/+admin/plugins/plugin-list-installed/plugin-list-installed.component.scss new file: client/src/app/+admin/plugins/plugin-list-installed/plugin-list-installed.component.ts new file: client/src/app/+admin/plugins/plugin-search/plugin-search.component.html new file: client/src/app/+admin/plugins/plugin-search/plugin-search.component.scss new file: client/src/app/+admin/plugins/plugin-search/plugin-search.component.ts new file: client/src/app/+admin/plugins/plugin-show-installed/plugin-show-installed.component.html new file: client/src/app/+admin/plugins/plugin-show-installed/plugin-show-installed.component.ts new file: client/src/app/+admin/plugins/plugins.routes.ts new file: client/src/app/+admin/plugins/shared/plugin-api.service.ts new file: client/src/app/+admin/plugins/shared/plugin-card.component.html new file: client/src/app/+admin/plugins/shared/plugin-card.component.scss new file: client/src/app/+admin/plugins/shared/plugin-card.component.ts new file: client/src/app/+admin/routes.ts new file: client/src/app/+admin/shared/user-email-info.component.html new file: client/src/app/+admin/shared/user-email-info.component.scss new file: client/src/app/+admin/shared/user-email-info.component.ts new file: client/src/app/+admin/shared/user-real-quota-info.component.html new file: client/src/app/+admin/shared/user-real-quota-info.component.ts new file: client/src/app/+admin/system/debug/debug.component.html new file: client/src/app/+admin/system/debug/debug.component.scss new file: client/src/app/+admin/system/debug/debug.component.ts new file: client/src/app/+admin/system/debug/debug.service.ts new file: client/src/app/+admin/system/debug/index.ts new file: client/src/app/+admin/system/index.ts new file: client/src/app/+admin/system/jobs/index.ts new file: client/src/app/+admin/system/jobs/job.service.ts new file: client/src/app/+admin/system/jobs/jobs.component.html new file: client/src/app/+admin/system/jobs/jobs.component.scss new file: client/src/app/+admin/system/jobs/jobs.component.ts new file: client/src/app/+admin/system/logs/index.ts new file: client/src/app/+admin/system/logs/log-row.model.ts new file: client/src/app/+admin/system/logs/logs.component.html new file: client/src/app/+admin/system/logs/logs.component.scss new file: client/src/app/+admin/system/logs/logs.component.ts new file: client/src/app/+admin/system/logs/logs.service.ts new file: client/src/app/+admin/system/runners/index.ts new file: client/src/app/+admin/system/runners/runner-job-list/index.ts new file: client/src/app/+admin/system/runners/runner-job-list/runner-job-list.component.html new file: client/src/app/+admin/system/runners/runner-job-list/runner-job-list.component.ts new file: client/src/app/+admin/system/runners/runner-list/index.ts new file: client/src/app/+admin/system/runners/runner-list/runner-list.component.html new file: client/src/app/+admin/system/runners/runner-list/runner-list.component.ts new file: client/src/app/+admin/system/runners/runner-registration-token-list/index.ts new file: client/src/app/+admin/system/runners/runner-registration-token-list/runner-registration-token-list.component.html new file: client/src/app/+admin/system/runners/runner-registration-token-list/runner-registration-token-list.component.scss new file: client/src/app/+admin/system/runners/runner-registration-token-list/runner-registration-token-list.component.ts new file: client/src/app/+admin/system/runners/runner.service.ts new file: client/src/app/+admin/system/runners/runners.routes.ts new file: client/src/app/+admin/system/system.routes.ts new file: client/src/app/+error-page/error-page.component.html new file: client/src/app/+error-page/error-page.component.scss new file: client/src/app/+error-page/error-page.component.ts new file: client/src/app/+error-page/routes.ts new file: client/src/app/+home/home.component.html new file: client/src/app/+home/home.component.ts new file: client/src/app/+home/routes.ts new file: client/src/app/+login/login.component.html new file: client/src/app/+login/login.component.scss new file: client/src/app/+login/login.component.ts new file: client/src/app/+login/routes.ts new file: client/src/app/+manage/routes.ts new file: client/src/app/+my-account/my-account-abuses/my-account-abuses-list.component.html new file: client/src/app/+my-account/my-account-abuses/my-account-abuses-list.component.ts new file: client/src/app/+my-account/my-account-applications/my-account-applications.component.html new file: client/src/app/+my-account/my-account-applications/my-account-applications.component.scss new file: client/src/app/+my-account/my-account-applications/my-account-applications.component.ts new file: client/src/app/+my-account/my-account-blocklist/my-account-blocklist.component.ts new file: client/src/app/+my-account/my-account-blocklist/my-account-server-blocklist.component.ts new file: client/src/app/+my-account/my-account-import-export/index.ts new file: client/src/app/+my-account/my-account-import-export/my-account-export.component.html new file: client/src/app/+my-account/my-account-import-export/my-account-export.component.scss new file: client/src/app/+my-account/my-account-import-export/my-account-export.component.ts new file: client/src/app/+my-account/my-account-import-export/my-account-import-export.component.html new file: client/src/app/+my-account/my-account-import-export/my-account-import-export.component.ts new file: client/src/app/+my-account/my-account-import-export/my-account-import.component.html new file: client/src/app/+my-account/my-account-import-export/my-account-import.component.scss new file: client/src/app/+my-account/my-account-import-export/my-account-import.component.ts new file: client/src/app/+my-account/my-account-import-export/user-import-export.service.ts new file: client/src/app/+my-account/my-account-notifications/my-account-notifications.component.html new file: client/src/app/+my-account/my-account-notifications/my-account-notifications.component.scss new file: client/src/app/+my-account/my-account-notifications/my-account-notifications.component.ts new file: client/src/app/+my-account/my-account-settings/my-account-change-email/my-account-change-email.component.html new file: client/src/app/+my-account/my-account-settings/my-account-change-email/my-account-change-email.component.scss new file: client/src/app/+my-account/my-account-settings/my-account-change-email/my-account-change-email.component.ts new file: client/src/app/+my-account/my-account-settings/my-account-change-password/my-account-change-password.component.html new file: client/src/app/+my-account/my-account-settings/my-account-change-password/my-account-change-password.component.scss new file: client/src/app/+my-account/my-account-settings/my-account-change-password/my-account-change-password.component.ts new file: client/src/app/+my-account/my-account-settings/my-account-danger-zone/my-account-danger-zone.component.html new file: client/src/app/+my-account/my-account-settings/my-account-danger-zone/my-account-danger-zone.component.ts new file: client/src/app/+my-account/my-account-settings/my-account-email-preferences/my-account-email-preferences.component.html new file: client/src/app/+my-account/my-account-settings/my-account-email-preferences/my-account-email-preferences.component.scss new file: client/src/app/+my-account/my-account-settings/my-account-email-preferences/my-account-email-preferences.component.ts new file: client/src/app/+my-account/my-account-settings/my-account-notification-preferences/my-account-notification-preferences.component.html new file: client/src/app/+my-account/my-account-settings/my-account-notification-preferences/my-account-notification-preferences.component.scss new file: client/src/app/+my-account/my-account-settings/my-account-notification-preferences/my-account-notification-preferences.component.ts new file: client/src/app/+my-account/my-account-settings/my-account-profile/my-account-profile.component.html new file: client/src/app/+my-account/my-account-settings/my-account-profile/my-account-profile.component.scss new file: client/src/app/+my-account/my-account-settings/my-account-profile/my-account-profile.component.ts new file: client/src/app/+my-account/my-account-settings/my-account-settings.component.html new file: client/src/app/+my-account/my-account-settings/my-account-settings.component.scss new file: client/src/app/+my-account/my-account-settings/my-account-settings.component.ts new file: client/src/app/+my-account/my-account-settings/my-account-two-factor/my-account-two-factor-button.component.html new file: client/src/app/+my-account/my-account-settings/my-account-two-factor/my-account-two-factor-button.component.ts new file: client/src/app/+my-account/my-account-settings/my-account-two-factor/my-account-two-factor.component.html new file: client/src/app/+my-account/my-account-settings/my-account-two-factor/my-account-two-factor.component.scss new file: client/src/app/+my-account/my-account-settings/my-account-two-factor/my-account-two-factor.component.ts new file: client/src/app/+my-account/my-account.component.html new file: client/src/app/+my-account/my-account.component.ts new file: client/src/app/+my-account/routes.ts new file: client/src/app/+my-library/+my-video-channels/my-video-channels.component.html new file: client/src/app/+my-library/+my-video-channels/my-video-channels.component.scss new file: client/src/app/+my-library/+my-video-channels/my-video-channels.component.ts new file: client/src/app/+my-library/+my-video-channels/routes.ts new file: client/src/app/+my-library/comments-on-my-videos/comments-on-my-videos.component.html new file: client/src/app/+my-library/comments-on-my-videos/comments-on-my-videos.component.ts new file: client/src/app/+my-library/my-auto-tag-policies/automatic-tag.service.ts new file: client/src/app/+my-library/my-auto-tag-policies/my-auto-tag-policies.component.html new file: client/src/app/+my-library/my-auto-tag-policies/my-auto-tag-policies.component.ts new file: client/src/app/+my-library/my-follows/my-followers.component.html new file: client/src/app/+my-library/my-follows/my-followers.component.scss new file: client/src/app/+my-library/my-follows/my-followers.component.ts new file: client/src/app/+my-library/my-follows/my-subscriptions.component.html new file: client/src/app/+my-library/my-follows/my-subscriptions.component.scss new file: client/src/app/+my-library/my-follows/my-subscriptions.component.ts new file: client/src/app/+my-library/my-history/my-history.component.html new file: client/src/app/+my-library/my-history/my-history.component.scss new file: client/src/app/+my-library/my-history/my-history.component.ts new file: client/src/app/+my-library/my-library.component.html new file: client/src/app/+my-library/my-library.component.ts new file: client/src/app/+my-library/my-ownership/my-accept-ownership/my-accept-ownership.component.html new file: client/src/app/+my-library/my-ownership/my-accept-ownership/my-accept-ownership.component.scss new file: client/src/app/+my-library/my-ownership/my-accept-ownership/my-accept-ownership.component.ts new file: client/src/app/+my-library/my-ownership/my-ownership.component.html new file: client/src/app/+my-library/my-ownership/my-ownership.component.ts new file: client/src/app/+my-library/my-video-channel-syncs/my-video-channel-syncs.component.html new file: client/src/app/+my-library/my-video-channel-syncs/my-video-channel-syncs.component.ts new file: client/src/app/+my-library/my-video-channel-syncs/video-channel-sync-edit/video-channel-sync-edit.component.html new file: client/src/app/+my-library/my-video-channel-syncs/video-channel-sync-edit/video-channel-sync-edit.component.scss new file: client/src/app/+my-library/my-video-channel-syncs/video-channel-sync-edit/video-channel-sync-edit.component.ts new file: client/src/app/+my-library/my-video-imports/my-video-imports.component.html new file: client/src/app/+my-library/my-video-imports/my-video-imports.component.scss new file: client/src/app/+my-library/my-video-imports/my-video-imports.component.ts new file: client/src/app/+my-library/my-video-playlists/my-video-playlist-create.component.ts new file: client/src/app/+my-library/my-video-playlists/my-video-playlist-edit.component.html new file: client/src/app/+my-library/my-video-playlists/my-video-playlist-edit.component.scss new file: client/src/app/+my-library/my-video-playlists/my-video-playlist-edit.ts new file: client/src/app/+my-library/my-video-playlists/my-video-playlist-elements.component.html new file: client/src/app/+my-library/my-video-playlists/my-video-playlist-elements.component.scss new file: client/src/app/+my-library/my-video-playlists/my-video-playlist-elements.component.ts new file: client/src/app/+my-library/my-video-playlists/my-video-playlist-update.component.ts new file: client/src/app/+my-library/my-video-playlists/my-video-playlists.component.html new file: client/src/app/+my-library/my-video-playlists/my-video-playlists.component.scss new file: client/src/app/+my-library/my-video-playlists/my-video-playlists.component.ts new file: client/src/app/+my-library/my-video-space.component.html new file: client/src/app/+my-library/my-video-space.component.ts new file: client/src/app/+my-library/my-videos/modals/video-change-ownership.component.html new file: client/src/app/+my-library/my-videos/modals/video-change-ownership.component.scss new file: client/src/app/+my-library/my-videos/modals/video-change-ownership.component.ts new file: client/src/app/+my-library/my-videos/my-videos.component.html new file: client/src/app/+my-library/my-videos/my-videos.component.scss new file: client/src/app/+my-library/my-videos/my-videos.component.ts new file: client/src/app/+my-library/my-watched-words-list/my-watched-words-list.component.html new file: client/src/app/+my-library/my-watched-words-list/my-watched-words-list.component.ts new file: client/src/app/+my-library/routes.ts new file: client/src/app/+remote-interaction/remote-interaction.component.html new file: client/src/app/+remote-interaction/remote-interaction.component.ts new file: client/src/app/+remote-interaction/routes.ts new file: client/src/app/+reset-password/reset-password.component.html new file: client/src/app/+reset-password/reset-password.component.scss new file: client/src/app/+reset-password/reset-password.component.ts new file: client/src/app/+reset-password/routes.ts new file: client/src/app/+search/routes.ts new file: client/src/app/+search/search-filters.component.html new file: client/src/app/+search/search-filters.component.scss new file: client/src/app/+search/search-filters.component.ts new file: client/src/app/+search/search.component.html new file: client/src/app/+search/search.component.scss new file: client/src/app/+search/search.component.ts new file: client/src/app/+search/shared/abstract-lazy-load.resolver.ts new file: client/src/app/+search/shared/channel-lazy-load.resolver.ts new file: client/src/app/+search/shared/index.ts new file: client/src/app/+search/shared/playlist-lazy-load.resolver.ts new file: client/src/app/+search/shared/video-lazy-load.resolver.ts new file: client/src/app/+signup/+register/custom-stepper.component.html new file: client/src/app/+signup/+register/custom-stepper.component.scss new file: client/src/app/+signup/+register/custom-stepper.component.ts new file: client/src/app/+signup/+register/register.component.html new file: client/src/app/+signup/+register/register.component.scss new file: client/src/app/+signup/+register/register.component.ts new file: client/src/app/+signup/+register/routes.ts new file: client/src/app/+signup/+register/shared/index.ts new file: client/src/app/+signup/+register/shared/register-validators.ts new file: client/src/app/+signup/+register/steps/register-step-about.component.html new file: client/src/app/+signup/+register/steps/register-step-about.component.scss new file: client/src/app/+signup/+register/steps/register-step-about.component.ts new file: client/src/app/+signup/+register/steps/register-step-channel.component.html new file: client/src/app/+signup/+register/steps/register-step-channel.component.ts new file: client/src/app/+signup/+register/steps/register-step-terms.component.html new file: client/src/app/+signup/+register/steps/register-step-terms.component.ts new file: client/src/app/+signup/+register/steps/register-step-user.component.html new file: client/src/app/+signup/+register/steps/register-step-user.component.ts new file: client/src/app/+signup/+register/steps/step.component.scss new file: client/src/app/+signup/+verify-account/routes.ts new file: client/src/app/+signup/+verify-account/verify-account-ask-send-email/verify-account-ask-send-email.component.html new file: client/src/app/+signup/+verify-account/verify-account-ask-send-email/verify-account-ask-send-email.component.scss new file: client/src/app/+signup/+verify-account/verify-account-ask-send-email/verify-account-ask-send-email.component.ts new file: client/src/app/+signup/+verify-account/verify-account-email/verify-account-email.component.html new file: client/src/app/+signup/+verify-account/verify-account-email/verify-account-email.component.ts new file: client/src/app/+signup/shared/signup-mascot.component.scss new file: client/src/app/+signup/shared/signup-mascot.component.ts new file: client/src/app/+signup/shared/signup-step-title.component.html new file: client/src/app/+signup/shared/signup-step-title.component.scss new file: client/src/app/+signup/shared/signup-step-title.component.ts new file: client/src/app/+signup/shared/signup-success-after-email.component.html new file: client/src/app/+signup/shared/signup-success-after-email.component.ts new file: client/src/app/+signup/shared/signup-success-before-email.component.html new file: client/src/app/+signup/shared/signup-success-before-email.component.ts new file: client/src/app/+signup/shared/signup-success.component.scss new file: client/src/app/+signup/shared/signup.service.ts new file: client/src/app/+stats/routes.ts new file: client/src/app/+stats/video/index.ts new file: client/src/app/+stats/video/video-stats.component.html new file: client/src/app/+stats/video/video-stats.component.scss new file: client/src/app/+stats/video/video-stats.component.ts new file: client/src/app/+stats/video/video-stats.service.ts new file: client/src/app/+video-channels/routes.ts new file: client/src/app/+video-channels/video-channel-playlists/video-channel-playlists.component.html new file: client/src/app/+video-channels/video-channel-playlists/video-channel-playlists.component.scss new file: client/src/app/+video-channels/video-channel-playlists/video-channel-playlists.component.ts new file: client/src/app/+video-channels/video-channel-videos/video-channel-videos.component.html new file: client/src/app/+video-channels/video-channel-videos/video-channel-videos.component.ts new file: client/src/app/+video-channels/video-channels.component.html new file: client/src/app/+video-channels/video-channels.component.scss new file: client/src/app/+video-channels/video-channels.component.ts new file: client/src/app/+video-studio/edit/index.ts new file: client/src/app/+video-studio/edit/video-studio-edit.component.html new file: client/src/app/+video-studio/edit/video-studio-edit.component.scss new file: client/src/app/+video-studio/edit/video-studio-edit.component.ts new file: client/src/app/+video-studio/routes.ts new file: client/src/app/+video-studio/shared/index.ts new file: client/src/app/+video-studio/shared/video-studio.service.ts new file: client/src/app/+videos/+video-edit/add-routes.ts new file: client/src/app/+videos/+video-edit/shared/caption/video-caption-add-modal.component.html new file: client/src/app/+videos/+video-edit/shared/caption/video-caption-add-modal.component.scss new file: client/src/app/+videos/+video-edit/shared/caption/video-caption-add-modal.component.ts new file: client/src/app/+videos/+video-edit/shared/caption/video-caption-edit-modal-content.component.html new file: client/src/app/+videos/+video-edit/shared/caption/video-caption-edit-modal-content.component.scss new file: client/src/app/+videos/+video-edit/shared/caption/video-caption-edit-modal-content.component.ts new file: client/src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts new file: client/src/app/+videos/+video-edit/shared/thumbnail-manager/thumbnail-manager.component.html new file: client/src/app/+videos/+video-edit/shared/thumbnail-manager/thumbnail-manager.component.scss new file: client/src/app/+videos/+video-edit/shared/thumbnail-manager/thumbnail-manager.component.ts new file: client/src/app/+videos/+video-edit/shared/uploaderx-form-data.ts new file: client/src/app/+videos/+video-edit/shared/video-edit-utils.ts new file: client/src/app/+videos/+video-edit/shared/video-edit.component.html new file: client/src/app/+videos/+video-edit/shared/video-edit.component.scss new file: client/src/app/+videos/+video-edit/shared/video-edit.component.ts new file: client/src/app/+videos/+video-edit/shared/video-edit.type.ts new file: client/src/app/+videos/+video-edit/shared/video-upload.service.ts new file: client/src/app/+videos/+video-edit/update-routes.ts new file: client/src/app/+videos/+video-edit/video-add-components/drag-drop.directive.ts new file: client/src/app/+videos/+video-edit/video-add-components/video-go-live.component.html new file: client/src/app/+videos/+video-edit/video-add-components/video-go-live.component.scss new file: client/src/app/+videos/+video-edit/video-add-components/video-go-live.component.ts new file: client/src/app/+videos/+video-edit/video-add-components/video-import-torrent.component.html new file: client/src/app/+videos/+video-edit/video-add-components/video-import-torrent.component.scss new file: client/src/app/+videos/+video-edit/video-add-components/video-import-torrent.component.ts new file: client/src/app/+videos/+video-edit/video-add-components/video-import-url.component.html new file: client/src/app/+videos/+video-edit/video-add-components/video-import-url.component.ts new file: client/src/app/+videos/+video-edit/video-add-components/video-send.scss new file: client/src/app/+videos/+video-edit/video-add-components/video-send.ts new file: client/src/app/+videos/+video-edit/video-add-components/video-upload.component.html new file: client/src/app/+videos/+video-edit/video-add-components/video-upload.component.scss new file: client/src/app/+videos/+video-edit/video-add-components/video-upload.component.ts new file: client/src/app/+videos/+video-edit/video-add.component.html new file: client/src/app/+videos/+video-edit/video-add.component.scss new file: client/src/app/+videos/+video-edit/video-add.component.ts new file: client/src/app/+videos/+video-edit/video-update.component.html new file: client/src/app/+videos/+video-edit/video-update.component.ts new file: client/src/app/+videos/+video-edit/video-update.resolver.ts new file: client/src/app/+videos/+video-watch/player-styles.component.scss new file: client/src/app/+videos/+video-watch/player-styles.component.ts new file: client/src/app/+videos/+video-watch/routes.ts new file: client/src/app/+videos/+video-watch/shared/action-buttons/action-buttons.component.html new file: client/src/app/+videos/+video-watch/shared/action-buttons/action-buttons.component.scss new file: client/src/app/+videos/+video-watch/shared/action-buttons/action-buttons.component.ts new file: client/src/app/+videos/+video-watch/shared/action-buttons/index.ts new file: client/src/app/+videos/+video-watch/shared/action-buttons/video-rate.component.html new file: client/src/app/+videos/+video-watch/shared/action-buttons/video-rate.component.scss new file: client/src/app/+videos/+video-watch/shared/action-buttons/video-rate.component.ts new file: client/src/app/+videos/+video-watch/shared/comment/index.ts new file: client/src/app/+videos/+video-watch/shared/comment/video-comment-add.component.html new file: client/src/app/+videos/+video-watch/shared/comment/video-comment-add.component.scss new file: client/src/app/+videos/+video-watch/shared/comment/video-comment-add.component.ts new file: client/src/app/+videos/+video-watch/shared/comment/video-comment.component.html new file: client/src/app/+videos/+video-watch/shared/comment/video-comment.component.scss new file: client/src/app/+videos/+video-watch/shared/comment/video-comment.component.ts new file: client/src/app/+videos/+video-watch/shared/comment/video-comments.component.html new file: client/src/app/+videos/+video-watch/shared/comment/video-comments.component.scss new file: client/src/app/+videos/+video-watch/shared/comment/video-comments.component.ts new file: client/src/app/+videos/+video-watch/shared/index.ts new file: client/src/app/+videos/+video-watch/shared/information/index.ts new file: client/src/app/+videos/+video-watch/shared/information/privacy-concerns.component.html new file: client/src/app/+videos/+video-watch/shared/information/privacy-concerns.component.scss new file: client/src/app/+videos/+video-watch/shared/information/privacy-concerns.component.ts new file: client/src/app/+videos/+video-watch/shared/information/video-alert.component.html new file: client/src/app/+videos/+video-watch/shared/information/video-alert.component.ts new file: client/src/app/+videos/+video-watch/shared/metadata/index.ts new file: client/src/app/+videos/+video-watch/shared/metadata/video-attributes.component.html new file: client/src/app/+videos/+video-watch/shared/metadata/video-attributes.component.scss new file: client/src/app/+videos/+video-watch/shared/metadata/video-attributes.component.ts new file: client/src/app/+videos/+video-watch/shared/metadata/video-avatar-channel.component.html new file: client/src/app/+videos/+video-watch/shared/metadata/video-avatar-channel.component.scss new file: client/src/app/+videos/+video-watch/shared/metadata/video-avatar-channel.component.ts new file: client/src/app/+videos/+video-watch/shared/metadata/video-description.component.html new file: client/src/app/+videos/+video-watch/shared/metadata/video-description.component.scss new file: client/src/app/+videos/+video-watch/shared/metadata/video-description.component.ts new file: client/src/app/+videos/+video-watch/shared/player-widgets/player-widget.component.scss new file: client/src/app/+videos/+video-watch/shared/player-widgets/video-transcription.component.html new file: client/src/app/+videos/+video-watch/shared/player-widgets/video-transcription.component.scss new file: client/src/app/+videos/+video-watch/shared/player-widgets/video-transcription.component.ts new file: client/src/app/+videos/+video-watch/shared/player-widgets/video-watch-playlist.component.html new file: client/src/app/+videos/+video-watch/shared/player-widgets/video-watch-playlist.component.scss new file: client/src/app/+videos/+video-watch/shared/player-widgets/video-watch-playlist.component.ts new file: client/src/app/+videos/+video-watch/shared/recommendations/index.ts new file: client/src/app/+videos/+video-watch/shared/recommendations/recommended-videos.component.html new file: client/src/app/+videos/+video-watch/shared/recommendations/recommended-videos.component.scss new file: client/src/app/+videos/+video-watch/shared/recommendations/recommended-videos.component.ts new file: client/src/app/+videos/+video-watch/shared/recommendations/video-recommendation.service.ts new file: client/src/app/+videos/+video-watch/shared/timestamp-route-transformer.directive.ts new file: client/src/app/+videos/+video-watch/video-watch.component.html new file: client/src/app/+videos/+video-watch/video-watch.component.scss new file: client/src/app/+videos/+video-watch/video-watch.component.ts new file: client/src/app/+videos/routes.ts new file: client/src/app/+videos/video-list/index.ts new file: client/src/app/+videos/video-list/overview/index.ts new file: client/src/app/+videos/video-list/overview/overview.service.ts new file: client/src/app/+videos/video-list/overview/video-overview.component.html new file: client/src/app/+videos/video-list/overview/video-overview.component.scss new file: client/src/app/+videos/video-list/overview/video-overview.component.ts new file: client/src/app/+videos/video-list/overview/videos-overview.model.ts new file: client/src/app/+videos/video-list/video-user-subscriptions.component.html new file: client/src/app/+videos/video-list/video-user-subscriptions.component.ts new file: client/src/app/+videos/video-list/videos-list-all.component.html new file: client/src/app/+videos/video-list/videos-list-all.component.ts new file: client/src/app/app.component.html new file: client/src/app/app.component.scss new file: client/src/app/app.component.ts new file: client/src/app/app.routes.ts new file: client/src/app/core/auth/auth-status.model.ts new file: client/src/app/core/auth/auth-user.model.ts new file: client/src/app/core/auth/auth.service.ts new file: client/src/app/core/auth/index.ts new file: client/src/app/core/confirm/confirm.service.ts new file: client/src/app/core/confirm/index.ts new file: client/src/app/core/core-providers.ts new file: client/src/app/core/hotkeys/hotkey.model.ts new file: client/src/app/core/hotkeys/hotkeys.service.ts new file: client/src/app/core/hotkeys/index.ts new file: client/src/app/core/index.ts new file: client/src/app/core/menu/index.ts new file: client/src/app/core/menu/menu.service.ts new file: client/src/app/core/notification/index.ts new file: client/src/app/core/notification/notifier.service.ts new file: client/src/app/core/notification/peertube-socket.service.ts new file: client/src/app/core/plugins/hooks.service.ts new file: client/src/app/core/plugins/index.ts new file: client/src/app/core/plugins/plugin.service.ts new file: client/src/app/core/renderer/html-renderer.service.ts new file: client/src/app/core/renderer/index.ts new file: client/src/app/core/renderer/linkifier.service.ts new file: client/src/app/core/renderer/markdown.service.ts new file: client/src/app/core/rest/component-pagination.model.ts new file: client/src/app/core/rest/index.ts new file: client/src/app/core/rest/rest-extractor.service.ts new file: client/src/app/core/rest/rest-pagination.ts new file: client/src/app/core/rest/rest-table.ts new file: client/src/app/core/rest/rest.service.ts new file: client/src/app/core/routing/can-deactivate-guard.service.ts new file: client/src/app/core/routing/custom-reuse-strategy.ts new file: client/src/app/core/routing/disable-for-reuse-hook.ts new file: client/src/app/core/routing/index.ts new file: client/src/app/core/routing/login-guard.service.ts new file: client/src/app/core/routing/meta-guard.service.ts new file: client/src/app/core/routing/meta.service.ts new file: client/src/app/core/routing/peertube-router.service.ts new file: client/src/app/core/routing/preload-selected-modules-list.ts new file: client/src/app/core/routing/redirect.service.ts new file: client/src/app/core/routing/scroll.service.ts new file: client/src/app/core/routing/server-config-resolver.service.ts new file: client/src/app/core/routing/unlogged-guard.service.ts new file: client/src/app/core/routing/user-right-guard.service.ts new file: client/src/app/core/routing/user.resolver.ts new file: client/src/app/core/scoped-tokens/index.ts new file: client/src/app/core/scoped-tokens/scoped-tokens.service.ts new file: client/src/app/core/server/index.ts new file: client/src/app/core/server/server.service.ts new file: client/src/app/core/theme/index.ts new file: client/src/app/core/theme/theme.service.ts new file: client/src/app/core/users/index.ts new file: client/src/app/core/users/user-local-storage.service.ts new file: client/src/app/core/users/user.model.ts new file: client/src/app/core/users/user.service.ts new file: client/src/app/core/wrappers/index.ts new file: client/src/app/core/wrappers/screen.service.ts new file: client/src/app/core/wrappers/storage.service.ts new file: client/src/app/empty.component.ts new file: client/src/app/header/header.component.html new file: client/src/app/header/header.component.scss new file: client/src/app/header/header.component.ts new file: client/src/app/header/notification-dropdown.component.html new file: client/src/app/header/notification-dropdown.component.scss new file: client/src/app/header/notification-dropdown.component.ts new file: client/src/app/header/search-typeahead.component.html new file: client/src/app/header/search-typeahead.component.scss new file: client/src/app/header/search-typeahead.component.ts new file: client/src/app/header/suggestion.component.html new file: client/src/app/header/suggestion.component.scss new file: client/src/app/header/suggestion.component.ts new file: client/src/app/helpers/constants.ts new file: client/src/app/helpers/i18n-utils.ts new file: client/src/app/helpers/index.ts new file: client/src/app/helpers/locales/index.ts new file: client/src/app/helpers/locales/oc.ts new file: client/src/app/helpers/rxjs.ts new file: client/src/app/helpers/utils/channel.ts new file: client/src/app/helpers/utils/date.ts new file: client/src/app/helpers/utils/dom.ts new file: client/src/app/helpers/utils/html.ts new file: client/src/app/helpers/utils/index.ts new file: client/src/app/helpers/utils/object.ts new file: client/src/app/helpers/utils/simple-memoize.ts new file: client/src/app/helpers/utils/upload.ts new file: client/src/app/helpers/utils/url.ts new file: client/src/app/homepage-redirect.component.ts new file: client/src/app/hotkeys/hotkeys-cheat-sheet.component.html new file: client/src/app/hotkeys/hotkeys-cheat-sheet.component.scss new file: client/src/app/hotkeys/hotkeys-cheat-sheet.component.ts new file: client/src/app/menu/home-menu.component.html new file: client/src/app/menu/home-menu.component.ts new file: client/src/app/menu/language-chooser.component.html new file: client/src/app/menu/language-chooser.component.scss new file: client/src/app/menu/language-chooser.component.ts new file: client/src/app/menu/menu.component.html new file: client/src/app/menu/menu.component.scss new file: client/src/app/menu/menu.component.ts new file: client/src/app/menu/quick-settings-modal.component.html new file: client/src/app/menu/quick-settings-modal.component.ts new file: client/src/app/modal/account-setup-warning-modal.component.html new file: client/src/app/modal/account-setup-warning-modal.component.scss new file: client/src/app/modal/account-setup-warning-modal.component.ts new file: client/src/app/modal/admin-welcome-modal.component.html new file: client/src/app/modal/admin-welcome-modal.component.scss new file: client/src/app/modal/admin-welcome-modal.component.ts new file: client/src/app/modal/confirm.component.html new file: client/src/app/modal/confirm.component.scss new file: client/src/app/modal/confirm.component.ts new file: client/src/app/modal/custom-modal.component.html new file: client/src/app/modal/custom-modal.component.scss new file: client/src/app/modal/custom-modal.component.ts new file: client/src/app/modal/instance-config-warning-modal.component.html new file: client/src/app/modal/instance-config-warning-modal.component.scss new file: client/src/app/modal/instance-config-warning-modal.component.ts new file: client/src/app/shared/form-validators/abuse-validators.ts new file: client/src/app/shared/form-validators/common-validators.ts new file: client/src/app/shared/form-validators/custom-config-validators.ts new file: client/src/app/shared/form-validators/form-validator.model.ts new file: client/src/app/shared/form-validators/host-validators.ts new file: client/src/app/shared/form-validators/instance-validators.ts new file: client/src/app/shared/form-validators/login-validators.ts new file: client/src/app/shared/form-validators/reset-password-validators.ts new file: client/src/app/shared/form-validators/shared/validator-utils.ts new file: client/src/app/shared/form-validators/user-validators.ts new file: client/src/app/shared/form-validators/video-block-validators.ts new file: client/src/app/shared/form-validators/video-captions-validators.ts new file: client/src/app/shared/form-validators/video-channel-validators.ts new file: client/src/app/shared/form-validators/video-chapter-validators.ts new file: client/src/app/shared/form-validators/video-comment-validators.ts new file: client/src/app/shared/form-validators/video-ownership-change-validators.ts new file: client/src/app/shared/form-validators/video-playlist-validators.ts new file: client/src/app/shared/form-validators/video-validators.ts new file: client/src/app/shared/form-validators/watched-words-list-validators.ts new file: client/src/app/shared/shared-abuse-list/abuse-details.component.html new file: client/src/app/shared/shared-abuse-list/abuse-details.component.scss new file: client/src/app/shared/shared-abuse-list/abuse-details.component.ts new file: client/src/app/shared/shared-abuse-list/abuse-list-table.component.html new file: client/src/app/shared/shared-abuse-list/abuse-list-table.component.scss new file: client/src/app/shared/shared-abuse-list/abuse-list-table.component.ts new file: client/src/app/shared/shared-abuse-list/abuse-message-modal.component.html new file: client/src/app/shared/shared-abuse-list/abuse-message-modal.component.scss new file: client/src/app/shared/shared-abuse-list/abuse-message-modal.component.ts new file: client/src/app/shared/shared-abuse-list/moderation-comment-modal.component.html new file: client/src/app/shared/shared-abuse-list/moderation-comment-modal.component.scss new file: client/src/app/shared/shared-abuse-list/moderation-comment-modal.component.ts new file: client/src/app/shared/shared-abuse-list/processed-abuse.model.ts new file: client/src/app/shared/shared-actor-image-edit/actor-avatar-edit.component.html new file: client/src/app/shared/shared-actor-image-edit/actor-avatar-edit.component.scss new file: client/src/app/shared/shared-actor-image-edit/actor-avatar-edit.component.ts new file: client/src/app/shared/shared-actor-image-edit/actor-banner-edit.component.html new file: client/src/app/shared/shared-actor-image-edit/actor-banner-edit.component.scss new file: client/src/app/shared/shared-actor-image-edit/actor-banner-edit.component.ts new file: client/src/app/shared/shared-actor-image-edit/actor-image-edit.scss new file: client/src/app/shared/shared-actor-image/actor-avatar.component.html new file: client/src/app/shared/shared-actor-image/actor-avatar.component.scss new file: client/src/app/shared/shared-actor-image/actor-avatar.component.ts new file: client/src/app/shared/shared-custom-markup/custom-markup-container.component.html new file: client/src/app/shared/shared-custom-markup/custom-markup-container.component.ts new file: client/src/app/shared/shared-custom-markup/custom-markup-help.component.html new file: client/src/app/shared/shared-custom-markup/custom-markup-help.component.ts new file: client/src/app/shared/shared-custom-markup/custom-markup.service.ts new file: client/src/app/shared/shared-custom-markup/dynamic-element.service.ts new file: client/src/app/shared/shared-custom-markup/peertube-custom-tags/button-markup.component.html new file: client/src/app/shared/shared-custom-markup/peertube-custom-tags/button-markup.component.scss new file: client/src/app/shared/shared-custom-markup/peertube-custom-tags/button-markup.component.ts new file: client/src/app/shared/shared-custom-markup/peertube-custom-tags/channel-miniature-markup.component.html new file: client/src/app/shared/shared-custom-markup/peertube-custom-tags/channel-miniature-markup.component.scss new file: client/src/app/shared/shared-custom-markup/peertube-custom-tags/channel-miniature-markup.component.ts new file: client/src/app/shared/shared-custom-markup/peertube-custom-tags/embed-markup.component.ts new file: client/src/app/shared/shared-custom-markup/peertube-custom-tags/index.ts new file: client/src/app/shared/shared-custom-markup/peertube-custom-tags/instance-avatar-markup.component.html new file: client/src/app/shared/shared-custom-markup/peertube-custom-tags/instance-avatar-markup.component.ts new file: client/src/app/shared/shared-custom-markup/peertube-custom-tags/instance-banner-markup.component.html new file: client/src/app/shared/shared-custom-markup/peertube-custom-tags/instance-banner-markup.component.ts new file: client/src/app/shared/shared-custom-markup/peertube-custom-tags/playlist-miniature-markup.component.html new file: client/src/app/shared/shared-custom-markup/peertube-custom-tags/playlist-miniature-markup.component.scss new file: client/src/app/shared/shared-custom-markup/peertube-custom-tags/playlist-miniature-markup.component.ts new file: client/src/app/shared/shared-custom-markup/peertube-custom-tags/shared/custom-markup.component.ts new file: client/src/app/shared/shared-custom-markup/peertube-custom-tags/shared/index.ts new file: client/src/app/shared/shared-custom-markup/peertube-custom-tags/video-miniature-markup.component.html new file: client/src/app/shared/shared-custom-markup/peertube-custom-tags/video-miniature-markup.component.scss new file: client/src/app/shared/shared-custom-markup/peertube-custom-tags/video-miniature-markup.component.ts new file: client/src/app/shared/shared-custom-markup/peertube-custom-tags/videos-list-markup.component.html new file: client/src/app/shared/shared-custom-markup/peertube-custom-tags/videos-list-markup.component.scss new file: client/src/app/shared/shared-custom-markup/peertube-custom-tags/videos-list-markup.component.ts new file: client/src/app/shared/shared-forms/advanced-input-filter.component.html new file: client/src/app/shared/shared-forms/advanced-input-filter.component.scss new file: client/src/app/shared/shared-forms/advanced-input-filter.component.ts new file: client/src/app/shared/shared-forms/dynamic-form-field.component.html new file: client/src/app/shared/shared-forms/dynamic-form-field.component.scss new file: client/src/app/shared/shared-forms/dynamic-form-field.component.ts new file: client/src/app/shared/shared-forms/form-reactive.service.ts new file: client/src/app/shared/shared-forms/form-reactive.ts new file: client/src/app/shared/shared-forms/form-validator.service.ts new file: client/src/app/shared/shared-forms/input-switch.component.html new file: client/src/app/shared/shared-forms/input-switch.component.scss new file: client/src/app/shared/shared-forms/input-switch.component.ts new file: client/src/app/shared/shared-forms/input-text.component.html new file: client/src/app/shared/shared-forms/input-text.component.scss new file: client/src/app/shared/shared-forms/input-text.component.ts new file: client/src/app/shared/shared-forms/markdown-textarea.component.html new file: client/src/app/shared/shared-forms/markdown-textarea.component.scss new file: client/src/app/shared/shared-forms/markdown-textarea.component.ts new file: client/src/app/shared/shared-forms/peertube-checkbox.component.html new file: client/src/app/shared/shared-forms/peertube-checkbox.component.scss new file: client/src/app/shared/shared-forms/peertube-checkbox.component.ts new file: client/src/app/shared/shared-forms/preview-upload.component.html new file: client/src/app/shared/shared-forms/preview-upload.component.scss new file: client/src/app/shared/shared-forms/preview-upload.component.ts new file: client/src/app/shared/shared-forms/reactive-file.component.html new file: client/src/app/shared/shared-forms/reactive-file.component.scss new file: client/src/app/shared/shared-forms/reactive-file.component.ts new file: client/src/app/shared/shared-forms/select/select-categories.component.ts new file: client/src/app/shared/shared-forms/select/select-channel.component.ts new file: client/src/app/shared/shared-forms/select/select-checkbox-default-all.component.ts new file: client/src/app/shared/shared-forms/select/select-checkbox.component.html new file: client/src/app/shared/shared-forms/select/select-checkbox.component.ts new file: client/src/app/shared/shared-forms/select/select-custom-value.component.html new file: client/src/app/shared/shared-forms/select/select-custom-value.component.ts new file: client/src/app/shared/shared-forms/select/select-languages.component.ts new file: client/src/app/shared/shared-forms/select/select-options.component.html new file: client/src/app/shared/shared-forms/select/select-options.component.scss new file: client/src/app/shared/shared-forms/select/select-options.component.ts new file: client/src/app/shared/shared-forms/select/select-tags.component.html new file: client/src/app/shared/shared-forms/select/select-tags.component.ts new file: client/src/app/shared/shared-forms/shared-form-providers.ts new file: client/src/app/shared/shared-forms/textarea-autoresize.directive.ts new file: client/src/app/shared/shared-forms/timestamp-input.component.html new file: client/src/app/shared/shared-forms/timestamp-input.component.scss new file: client/src/app/shared/shared-forms/timestamp-input.component.ts new file: client/src/app/shared/shared-icons/global-icon.component.scss new file: client/src/app/shared/shared-icons/global-icon.component.ts new file: client/src/app/shared/shared-instance/feature-boolean.component.html new file: client/src/app/shared/shared-instance/feature-boolean.component.scss new file: client/src/app/shared/shared-instance/feature-boolean.component.ts new file: client/src/app/shared/shared-instance/instance-about-accordion.component.html new file: client/src/app/shared/shared-instance/instance-about-accordion.component.scss new file: client/src/app/shared/shared-instance/instance-about-accordion.component.ts new file: client/src/app/shared/shared-instance/instance-banner.component.html new file: client/src/app/shared/shared-instance/instance-banner.component.ts new file: client/src/app/shared/shared-instance/instance-features-table.component.html new file: client/src/app/shared/shared-instance/instance-features-table.component.scss new file: client/src/app/shared/shared-instance/instance-features-table.component.ts new file: client/src/app/shared/shared-instance/instance-follow.service.ts new file: client/src/app/shared/shared-main/account/account.model.ts new file: client/src/app/shared/shared-main/account/account.service.ts new file: client/src/app/shared/shared-main/account/actor.model.ts new file: client/src/app/shared/shared-main/auth/auth-interceptor.service.ts new file: client/src/app/shared/shared-main/buttons/action-dropdown.component.html new file: client/src/app/shared/shared-main/buttons/action-dropdown.component.scss new file: client/src/app/shared/shared-main/buttons/action-dropdown.component.ts new file: client/src/app/shared/shared-main/buttons/button.component.html new file: client/src/app/shared/shared-main/buttons/button.component.scss new file: client/src/app/shared/shared-main/buttons/button.component.ts new file: client/src/app/shared/shared-main/buttons/copy-button.component.html new file: client/src/app/shared/shared-main/buttons/copy-button.component.scss new file: client/src/app/shared/shared-main/buttons/copy-button.component.ts new file: client/src/app/shared/shared-main/buttons/delete-button.component.ts new file: client/src/app/shared/shared-main/buttons/edit-button.component.ts new file: client/src/app/shared/shared-main/buttons/help.component.html new file: client/src/app/shared/shared-main/buttons/help.component.scss new file: client/src/app/shared/shared-main/buttons/help.component.ts new file: client/src/app/shared/shared-main/channel/channels-setup-message.component.html new file: client/src/app/shared/shared-main/channel/channels-setup-message.component.scss new file: client/src/app/shared/shared-main/channel/channels-setup-message.component.ts new file: client/src/app/shared/shared-main/channel/video-channel-sync.service.ts new file: client/src/app/shared/shared-main/channel/video-channel.model.ts new file: client/src/app/shared/shared-main/channel/video-channel.service.ts new file: client/src/app/shared/shared-main/common/alert.component.html new file: client/src/app/shared/shared-main/common/alert.component.scss new file: client/src/app/shared/shared-main/common/alert.component.ts new file: client/src/app/shared/shared-main/common/auto-colspan.directive.ts new file: client/src/app/shared/shared-main/common/autofocus.directive.ts new file: client/src/app/shared/shared-main/common/bytes.pipe.ts new file: client/src/app/shared/shared-main/common/date.pipe.ts new file: client/src/app/shared/shared-main/common/defer-loading.directive.ts new file: client/src/app/shared/shared-main/common/infinite-scroller.directive.ts new file: client/src/app/shared/shared-main/common/link.component.html new file: client/src/app/shared/shared-main/common/link.component.scss new file: client/src/app/shared/shared-main/common/link.component.ts new file: client/src/app/shared/shared-main/common/loader.component.ts new file: client/src/app/shared/shared-main/common/nl2br.pipe.ts new file: client/src/app/shared/shared-main/common/number-formatter.pipe.ts new file: client/src/app/shared/shared-main/common/peertube-template.directive.ts new file: client/src/app/shared/shared-main/common/progress-bar.component.html new file: client/src/app/shared/shared-main/common/progress-bar.component.scss new file: client/src/app/shared/shared-main/common/progress-bar.component.ts new file: client/src/app/shared/shared-main/custom-page/custom-page.service.ts new file: client/src/app/shared/shared-main/date/date-toggle.component.html new file: client/src/app/shared/shared-main/date/date-toggle.component.scss new file: client/src/app/shared/shared-main/date/date-toggle.component.ts new file: client/src/app/shared/shared-main/date/days-duration-formatter.pipe.ts new file: client/src/app/shared/shared-main/date/from-now.pipe.ts new file: client/src/app/shared/shared-main/date/time-duration-formatter.pipe.ts new file: client/src/app/shared/shared-main/feeds/feed.component.html new file: client/src/app/shared/shared-main/feeds/feed.component.scss new file: client/src/app/shared/shared-main/feeds/feed.component.ts new file: client/src/app/shared/shared-main/feeds/syndication.model.ts new file: client/src/app/shared/shared-main/instance/instance.service.ts new file: client/src/app/shared/shared-main/main-providers.ts new file: client/src/app/shared/shared-main/menu/horizontal-menu.component.html new file: client/src/app/shared/shared-main/menu/horizontal-menu.component.scss new file: client/src/app/shared/shared-main/menu/horizontal-menu.component.ts new file: client/src/app/shared/shared-main/menu/list-overflow.component.html new file: client/src/app/shared/shared-main/menu/list-overflow.component.scss new file: client/src/app/shared/shared-main/menu/list-overflow.component.ts new file: client/src/app/shared/shared-main/peertube-modal/peertube-modal.service.ts new file: client/src/app/shared/shared-main/plugins/plugin-placeholder.component.scss new file: client/src/app/shared/shared-main/plugins/plugin-placeholder.component.ts new file: client/src/app/shared/shared-main/plugins/plugin-selector.directive.ts new file: client/src/app/shared/shared-main/router/actor-redirect-guard.service.ts new file: client/src/app/shared/shared-main/search/simple-search-input.component.html new file: client/src/app/shared/shared-main/search/simple-search-input.component.scss new file: client/src/app/shared/shared-main/search/simple-search-input.component.ts new file: client/src/app/shared/shared-main/users/login-link.component.html new file: client/src/app/shared/shared-main/users/login-link.component.scss new file: client/src/app/shared/shared-main/users/login-link.component.ts new file: client/src/app/shared/shared-main/users/signup-label.component.html new file: client/src/app/shared/shared-main/users/signup-label.component.ts new file: client/src/app/shared/shared-main/users/user-history.service.ts new file: client/src/app/shared/shared-main/users/user-notification.model.ts new file: client/src/app/shared/shared-main/users/user-notification.service.ts new file: client/src/app/shared/shared-main/users/user-quota.component.html new file: client/src/app/shared/shared-main/users/user-quota.component.ts new file: client/src/app/shared/shared-main/video-caption/video-caption-edit.model.ts new file: client/src/app/shared/shared-main/video-caption/video-caption.service.ts new file: client/src/app/shared/shared-main/video/embed.component.html new file: client/src/app/shared/shared-main/video/embed.component.scss new file: client/src/app/shared/shared-main/video/embed.component.ts new file: client/src/app/shared/shared-main/video/redundancy.service.ts new file: client/src/app/shared/shared-main/video/video-chapter.service.ts new file: client/src/app/shared/shared-main/video/video-chapters-edit.model.ts new file: client/src/app/shared/shared-main/video/video-details.model.ts new file: client/src/app/shared/shared-main/video/video-edit.model.ts new file: client/src/app/shared/shared-main/video/video-file-token.service.ts new file: client/src/app/shared/shared-main/video/video-import.service.ts new file: client/src/app/shared/shared-main/video/video-ownership.service.ts new file: client/src/app/shared/shared-main/video/video-password.service.ts new file: client/src/app/shared/shared-main/video/video.model.ts new file: client/src/app/shared/shared-main/video/video.resolver.ts new file: client/src/app/shared/shared-main/video/video.service.ts new file: client/src/app/shared/shared-moderation/abuse.service.ts new file: client/src/app/shared/shared-moderation/account-block-badges.component.html new file: client/src/app/shared/shared-moderation/account-block-badges.component.scss new file: client/src/app/shared/shared-moderation/account-block-badges.component.ts new file: client/src/app/shared/shared-moderation/account-block.model.ts new file: client/src/app/shared/shared-moderation/account-blocklist.component.html new file: client/src/app/shared/shared-moderation/account-blocklist.component.ts new file: client/src/app/shared/shared-moderation/batch-domains-modal.component.html new file: client/src/app/shared/shared-moderation/batch-domains-modal.component.scss new file: client/src/app/shared/shared-moderation/batch-domains-modal.component.ts new file: client/src/app/shared/shared-moderation/blocklist.service.ts new file: client/src/app/shared/shared-moderation/bulk.service.ts new file: client/src/app/shared/shared-moderation/moderation.scss new file: client/src/app/shared/shared-moderation/report-modals/account-report.component.ts new file: client/src/app/shared/shared-moderation/report-modals/comment-report.component.ts new file: client/src/app/shared/shared-moderation/report-modals/index.ts new file: client/src/app/shared/shared-moderation/report-modals/report.component.html new file: client/src/app/shared/shared-moderation/report-modals/report.component.scss new file: client/src/app/shared/shared-moderation/report-modals/video-report.component.html new file: client/src/app/shared/shared-moderation/report-modals/video-report.component.ts new file: client/src/app/shared/shared-moderation/server-blocklist.component.html new file: client/src/app/shared/shared-moderation/server-blocklist.component.scss new file: client/src/app/shared/shared-moderation/server-blocklist.component.ts new file: client/src/app/shared/shared-moderation/user-ban-modal.component.html new file: client/src/app/shared/shared-moderation/user-ban-modal.component.scss new file: client/src/app/shared/shared-moderation/user-ban-modal.component.ts new file: client/src/app/shared/shared-moderation/user-moderation-dropdown.component.html new file: client/src/app/shared/shared-moderation/user-moderation-dropdown.component.ts new file: client/src/app/shared/shared-moderation/video-block.component.html new file: client/src/app/shared/shared-moderation/video-block.component.scss new file: client/src/app/shared/shared-moderation/video-block.component.ts new file: client/src/app/shared/shared-moderation/video-block.service.ts new file: client/src/app/shared/shared-plugin-pages/index.ts new file: client/src/app/shared/shared-plugin-pages/plugin-pages.component.html new file: client/src/app/shared/shared-plugin-pages/plugin-pages.component.ts new file: client/src/app/shared/shared-plugin-pages/routes.ts new file: client/src/app/shared/shared-search/advanced-search.model.ts new file: client/src/app/shared/shared-search/find-in-bulk.service.ts new file: client/src/app/shared/shared-search/search.service.ts new file: client/src/app/shared/shared-share-modal/video-share.component.html new file: client/src/app/shared/shared-share-modal/video-share.component.scss new file: client/src/app/shared/shared-share-modal/video-share.component.ts new file: client/src/app/shared/shared-support-modal/support-modal.component.html new file: client/src/app/shared/shared-support-modal/support-modal.component.ts new file: client/src/app/shared/shared-tables/table-expander-icon.component.ts new file: client/src/app/shared/shared-tables/video-cell.component.html new file: client/src/app/shared/shared-tables/video-cell.component.scss new file: client/src/app/shared/shared-tables/video-cell.component.ts new file: client/src/app/shared/shared-thumbnail/video-thumbnail.component.html new file: client/src/app/shared/shared-thumbnail/video-thumbnail.component.scss new file: client/src/app/shared/shared-thumbnail/video-thumbnail.component.ts new file: client/src/app/shared/shared-user-settings/user-interface-settings.component.html new file: client/src/app/shared/shared-user-settings/user-interface-settings.component.scss new file: client/src/app/shared/shared-user-settings/user-interface-settings.component.ts new file: client/src/app/shared/shared-user-settings/user-video-settings.component.html new file: client/src/app/shared/shared-user-settings/user-video-settings.component.scss new file: client/src/app/shared/shared-user-settings/user-video-settings.component.ts new file: client/src/app/shared/shared-user-subscription/remote-subscribe.component.html new file: client/src/app/shared/shared-user-subscription/remote-subscribe.component.ts new file: client/src/app/shared/shared-user-subscription/subscribe-button.component.html new file: client/src/app/shared/shared-user-subscription/subscribe-button.component.scss new file: client/src/app/shared/shared-user-subscription/subscribe-button.component.ts new file: client/src/app/shared/shared-user-subscription/user-subscription.service.ts new file: client/src/app/shared/shared-users/two-factor.service.ts new file: client/src/app/shared/shared-users/user-admin.service.ts new file: client/src/app/shared/shared-video-comment/video-comment-list-admin-owner.component.html new file: client/src/app/shared/shared-video-comment/video-comment-list-admin-owner.component.scss new file: client/src/app/shared/shared-video-comment/video-comment-list-admin-owner.component.ts new file: client/src/app/shared/shared-video-comment/video-comment-thread-tree.model.ts new file: client/src/app/shared/shared-video-comment/video-comment.model.ts new file: client/src/app/shared/shared-video-comment/video-comment.service.ts new file: client/src/app/shared/shared-video-live/live-documentation-link.component.html new file: client/src/app/shared/shared-video-live/live-documentation-link.component.ts new file: client/src/app/shared/shared-video-live/live-stream-information.component.html new file: client/src/app/shared/shared-video-live/live-stream-information.component.scss new file: client/src/app/shared/shared-video-live/live-stream-information.component.ts new file: client/src/app/shared/shared-video-live/live-video.service.ts new file: client/src/app/shared/shared-video-miniature/download/subtitle-files-download.component.html new file: client/src/app/shared/shared-video-miniature/download/subtitle-files-download.component.ts new file: client/src/app/shared/shared-video-miniature/download/video-download.component.html new file: client/src/app/shared/shared-video-miniature/download/video-download.component.scss new file: client/src/app/shared/shared-video-miniature/download/video-download.component.ts new file: client/src/app/shared/shared-video-miniature/download/video-files-download.component.html new file: client/src/app/shared/shared-video-miniature/download/video-files-download.component.scss new file: client/src/app/shared/shared-video-miniature/download/video-files-download.component.ts new file: client/src/app/shared/shared-video-miniature/download/video-generate-download.component.html new file: client/src/app/shared/shared-video-miniature/download/video-generate-download.component.scss new file: client/src/app/shared/shared-video-miniature/download/video-generate-download.component.ts new file: client/src/app/shared/shared-video-miniature/video-actions-dropdown.component.html new file: client/src/app/shared/shared-video-miniature/video-actions-dropdown.component.scss new file: client/src/app/shared/shared-video-miniature/video-actions-dropdown.component.ts new file: client/src/app/shared/shared-video-miniature/video-filters-header.component.html new file: client/src/app/shared/shared-video-miniature/video-filters-header.component.scss new file: client/src/app/shared/shared-video-miniature/video-filters-header.component.ts new file: client/src/app/shared/shared-video-miniature/video-filters.model.ts new file: client/src/app/shared/shared-video-miniature/video-miniature.component.html new file: client/src/app/shared/shared-video-miniature/video-miniature.component.scss new file: client/src/app/shared/shared-video-miniature/video-miniature.component.ts new file: client/src/app/shared/shared-video-miniature/videos-list.component.html new file: client/src/app/shared/shared-video-miniature/videos-list.component.scss new file: client/src/app/shared/shared-video-miniature/videos-list.component.ts new file: client/src/app/shared/shared-video-miniature/videos-selection.component.html new file: client/src/app/shared/shared-video-miniature/videos-selection.component.scss new file: client/src/app/shared/shared-video-miniature/videos-selection.component.ts new file: client/src/app/shared/shared-video-playlist/video-add-to-playlist.component.html new file: client/src/app/shared/shared-video-playlist/video-add-to-playlist.component.scss new file: client/src/app/shared/shared-video-playlist/video-add-to-playlist.component.ts new file: client/src/app/shared/shared-video-playlist/video-playlist-element-miniature.component.html new file: client/src/app/shared/shared-video-playlist/video-playlist-element-miniature.component.scss new file: client/src/app/shared/shared-video-playlist/video-playlist-element-miniature.component.ts new file: client/src/app/shared/shared-video-playlist/video-playlist-element.model.ts new file: client/src/app/shared/shared-video-playlist/video-playlist-miniature.component.html new file: client/src/app/shared/shared-video-playlist/video-playlist-miniature.component.scss new file: client/src/app/shared/shared-video-playlist/video-playlist-miniature.component.ts new file: client/src/app/shared/shared-video-playlist/video-playlist.model.ts new file: client/src/app/shared/shared-video-playlist/video-playlist.service.ts new file: client/src/app/shared/shared-video/video-views-counter.component.html new file: client/src/app/shared/shared-video/video-views-counter.component.scss new file: client/src/app/shared/shared-video/video-views-counter.component.ts new file: client/src/app/shared/standalone-channels/video-channel-create.component.ts new file: client/src/app/shared/standalone-channels/video-channel-edit.component.html new file: client/src/app/shared/standalone-channels/video-channel-edit.component.scss new file: client/src/app/shared/standalone-channels/video-channel-edit.ts new file: client/src/app/shared/standalone-channels/video-channel-update.component.ts new file: client/src/app/shared/standalone-notifications/user-notifications.component.html new file: client/src/app/shared/standalone-notifications/user-notifications.component.scss new file: client/src/app/shared/standalone-notifications/user-notifications.component.ts new file: client/src/app/shared/standalone-upload/upload-progress.component.html new file: client/src/app/shared/standalone-upload/upload-progress.component.scss new file: client/src/app/shared/standalone-upload/upload-progress.component.ts new file: client/src/app/shared/standalone-watched-words/watched-words-list-admin-owner.component.html new file: client/src/app/shared/standalone-watched-words/watched-words-list-admin-owner.component.ts new file: client/src/app/shared/standalone-watched-words/watched-words-list-save-modal.component.html new file: client/src/app/shared/standalone-watched-words/watched-words-list-save-modal.component.scss new file: client/src/app/shared/standalone-watched-words/watched-words-list-save-modal.component.ts new file: client/src/app/shared/standalone-watched-words/watched-words-list.service.ts new file: client/src/app/videos-parent.component.html new file: client/src/app/videos-parent.component.ts new file: client/src/assets/images/default-avatar-account-48x48.png new file: client/src/assets/images/default-avatar-account.png new file: client/src/assets/images/default-avatar-video-channel-48x48.png new file: client/src/assets/images/default-avatar-video-channel.png new file: client/src/assets/images/default-playlist.jpg new file: client/src/assets/images/favicon.png new file: client/src/assets/images/feather/airplay.svg new file: client/src/assets/images/feather/alert.svg new file: client/src/assets/images/feather/award.svg new file: client/src/assets/images/feather/bell.svg new file: client/src/assets/images/feather/channel.svg new file: client/src/assets/images/feather/check-circle.svg new file: client/src/assets/images/feather/check.svg new file: client/src/assets/images/feather/chevron-left.svg new file: client/src/assets/images/feather/chevrons-up.svg new file: client/src/assets/images/feather/clock-arrow-down.svg new file: client/src/assets/images/feather/clock.svg new file: client/src/assets/images/feather/cloud-download.svg new file: client/src/assets/images/feather/cloud-off.svg new file: client/src/assets/images/feather/codesandbox.svg new file: client/src/assets/images/feather/cog.svg new file: client/src/assets/images/feather/columns.svg new file: client/src/assets/images/feather/config.svg new file: client/src/assets/images/feather/copy.svg new file: client/src/assets/images/feather/corner-up-left.svg new file: client/src/assets/images/feather/delete.svg new file: client/src/assets/images/feather/dislike.svg new file: client/src/assets/images/feather/download.svg new file: client/src/assets/images/feather/edit-2.svg new file: client/src/assets/images/feather/external-link.svg new file: client/src/assets/images/feather/eye-off.svg new file: client/src/assets/images/feather/eye.svg new file: client/src/assets/images/feather/film.svg new file: client/src/assets/images/feather/filter.svg new file: client/src/assets/images/feather/flag.svg new file: client/src/assets/images/feather/globe.svg new file: client/src/assets/images/feather/help.svg new file: client/src/assets/images/feather/history.svg new file: client/src/assets/images/feather/home.svg new file: client/src/assets/images/feather/keyboard.svg new file: client/src/assets/images/feather/like.svg new file: client/src/assets/images/feather/live.svg new file: client/src/assets/images/feather/log-in.svg new file: client/src/assets/images/feather/log-out.svg new file: client/src/assets/images/feather/maximize.svg new file: client/src/assets/images/feather/menu.svg new file: client/src/assets/images/feather/message-circle.svg new file: client/src/assets/images/feather/minimize.svg new file: client/src/assets/images/feather/moderation.svg new file: client/src/assets/images/feather/more-horizontal.svg new file: client/src/assets/images/feather/more-vertical.svg new file: client/src/assets/images/feather/move-right.svg new file: client/src/assets/images/feather/no.svg new file: client/src/assets/images/feather/opened-bell.svg new file: client/src/assets/images/feather/overview.svg new file: client/src/assets/images/feather/play.svg new file: client/src/assets/images/feather/playlists.svg new file: client/src/assets/images/feather/plus.svg new file: client/src/assets/images/feather/refresh-cw.svg new file: client/src/assets/images/feather/registry.svg new file: client/src/assets/images/feather/repeat.svg new file: client/src/assets/images/feather/search.svg new file: client/src/assets/images/feather/share-2.svg new file: client/src/assets/images/feather/share.svg new file: client/src/assets/images/feather/skip-back.svg new file: client/src/assets/images/feather/skip-forward.svg new file: client/src/assets/images/feather/stats.svg new file: client/src/assets/images/feather/subscriptions.svg new file: client/src/assets/images/feather/syndication.svg new file: client/src/assets/images/feather/trending.svg new file: client/src/assets/images/feather/undo.svg new file: client/src/assets/images/feather/upload.svg new file: client/src/assets/images/feather/user-plus.svg new file: client/src/assets/images/feather/user-x.svg new file: client/src/assets/images/feather/user.svg new file: client/src/assets/images/feather/users.svg new file: client/src/assets/images/feather/videos.svg new file: client/src/assets/images/feather/x.svg new file: client/src/assets/images/icons/icon-144x144.png new file: client/src/assets/images/icons/icon-192x192.png new file: client/src/assets/images/icons/icon-36x36.png new file: client/src/assets/images/icons/icon-48x48.png new file: client/src/assets/images/icons/icon-512x512.png new file: client/src/assets/images/icons/icon-72x72.png new file: client/src/assets/images/icons/icon-96x96.png new file: client/src/assets/images/logo.svg new file: client/src/assets/images/mascot/arguing.svg new file: client/src/assets/images/mascot/default.svg new file: client/src/assets/images/mascot/defeated.svg new file: client/src/assets/images/mascot/happy.svg new file: client/src/assets/images/mascot/oh.svg new file: client/src/assets/images/mascot/pointing.svg new file: client/src/assets/images/mascot/register/about.svg new file: client/src/assets/images/mascot/register/account.svg new file: client/src/assets/images/mascot/register/channel.svg new file: client/src/assets/images/mascot/register/success.svg new file: client/src/assets/images/mascot/register/terms.svg new file: client/src/assets/images/misc/account-arrow-left.svg new file: client/src/assets/images/misc/account-arrow-right.svg new file: client/src/assets/images/misc/flame.svg new file: client/src/assets/images/misc/language.svg new file: client/src/assets/images/misc/markdown.svg new file: client/src/assets/images/misc/miscellaneous-services.svg new file: client/src/assets/images/misc/peertube-x.svg new file: client/src/assets/images/misc/playlist-add.svg new file: client/src/assets/images/misc/shield.svg new file: client/src/assets/images/misc/support.svg new file: client/src/assets/images/misc/tip.svg new file: client/src/assets/images/misc/video-lang.svg new file: client/src/assets/player/images/arrow-down.svg new file: client/src/assets/player/images/arrow-up.svg new file: client/src/assets/player/images/big-play-button.svg new file: client/src/assets/player/images/code.svg new file: client/src/assets/player/images/fullscreen.svg new file: client/src/assets/player/images/info.svg new file: client/src/assets/player/images/link-2.svg new file: client/src/assets/player/images/next.svg new file: client/src/assets/player/images/repeat.svg new file: client/src/assets/player/images/settings.svg new file: client/src/assets/player/images/theater.svg new file: client/src/assets/player/images/tick-white.svg new file: client/src/assets/player/images/volume-mute.svg new file: client/src/assets/player/images/volume.svg new file: client/src/assets/player/index.ts new file: client/src/assets/player/peertube-player-local-storage.ts new file: client/src/assets/player/peertube-player.ts new file: client/src/assets/player/shared/bezels/bezels-plugin.ts new file: client/src/assets/player/shared/bezels/index.ts new file: client/src/assets/player/shared/bezels/pause-bezel.ts new file: client/src/assets/player/shared/common/index.ts new file: client/src/assets/player/shared/common/utils.ts new file: client/src/assets/player/shared/context-menu/context-menu-item.ts new file: client/src/assets/player/shared/context-menu/context-menu-plugin.ts new file: client/src/assets/player/shared/context-menu/context-menu.ts new file: client/src/assets/player/shared/context-menu/index.ts new file: client/src/assets/player/shared/context-menu/util.ts new file: client/src/assets/player/shared/control-bar/caption-toggle-button.ts new file: client/src/assets/player/shared/control-bar/chapters-plugin.ts new file: client/src/assets/player/shared/control-bar/index.ts new file: client/src/assets/player/shared/control-bar/next-previous-video-button.ts new file: client/src/assets/player/shared/control-bar/p2p-info-button.ts new file: client/src/assets/player/shared/control-bar/peertube-link-button.ts new file: client/src/assets/player/shared/control-bar/peertube-live-display.ts new file: client/src/assets/player/shared/control-bar/progress-bar-marker-component.ts new file: client/src/assets/player/shared/control-bar/storyboard-plugin.ts new file: client/src/assets/player/shared/control-bar/theater-button.ts new file: client/src/assets/player/shared/control-bar/time-tooltip.ts new file: client/src/assets/player/shared/dock/index.ts new file: client/src/assets/player/shared/dock/peertube-dock-component.ts new file: client/src/assets/player/shared/dock/peertube-dock-plugin.ts new file: client/src/assets/player/shared/hotkeys/index.ts new file: client/src/assets/player/shared/hotkeys/peertube-hotkeys-plugin.ts new file: client/src/assets/player/shared/metrics/index.ts new file: client/src/assets/player/shared/metrics/metrics-plugin.ts new file: client/src/assets/player/shared/mobile/index.ts new file: client/src/assets/player/shared/mobile/peertube-mobile-buttons.ts new file: client/src/assets/player/shared/mobile/peertube-mobile-plugin.ts new file: client/src/assets/player/shared/p2p-media-loader/hls-plugin.ts new file: client/src/assets/player/shared/p2p-media-loader/index.ts new file: client/src/assets/player/shared/p2p-media-loader/p2p-media-loader-plugin.ts new file: client/src/assets/player/shared/p2p-media-loader/redundancy-url-manager.ts new file: client/src/assets/player/shared/p2p-media-loader/segment-url-builder.ts new file: client/src/assets/player/shared/p2p-media-loader/segment-validator.ts new file: client/src/assets/player/shared/peertube/index.ts new file: client/src/assets/player/shared/peertube/peertube-plugin.ts new file: client/src/assets/player/shared/player-options-builder/control-bar-options-builder.ts new file: client/src/assets/player/shared/player-options-builder/hls-options-builder.ts new file: client/src/assets/player/shared/player-options-builder/index.ts new file: client/src/assets/player/shared/player-options-builder/web-video-options-builder.ts new file: client/src/assets/player/shared/playlist/index.ts new file: client/src/assets/player/shared/playlist/playlist-button.ts new file: client/src/assets/player/shared/playlist/playlist-menu-item.ts new file: client/src/assets/player/shared/playlist/playlist-menu.ts new file: client/src/assets/player/shared/playlist/playlist-plugin.ts new file: client/src/assets/player/shared/resolutions/index.ts new file: client/src/assets/player/shared/resolutions/peertube-resolutions-plugin.ts new file: client/src/assets/player/shared/settings/index.ts new file: client/src/assets/player/shared/settings/menu-focus-fixed.ts new file: client/src/assets/player/shared/settings/resolution-menu-button.ts new file: client/src/assets/player/shared/settings/resolution-menu-item.ts new file: client/src/assets/player/shared/settings/settings-dialog.ts new file: client/src/assets/player/shared/settings/settings-menu-button.ts new file: client/src/assets/player/shared/settings/settings-menu-item.ts new file: client/src/assets/player/shared/settings/settings-panel-child.ts new file: client/src/assets/player/shared/settings/settings-panel.ts new file: client/src/assets/player/shared/stats/index.ts new file: client/src/assets/player/shared/stats/stats-card.ts new file: client/src/assets/player/shared/stats/stats-plugin.ts new file: client/src/assets/player/shared/upnext/end-card.ts new file: client/src/assets/player/shared/upnext/index.ts new file: client/src/assets/player/shared/upnext/upnext-plugin.ts new file: client/src/assets/player/shared/web-video/web-video-plugin.ts new file: client/src/assets/player/translations-manager.ts new file: client/src/assets/player/types/index.ts new file: client/src/assets/player/types/peertube-player-options.ts new file: client/src/assets/player/types/peertube-videojs-typings.ts new file: client/src/environments/environment.e2e.ts new file: client/src/environments/environment.hmr.ts new file: client/src/environments/environment.prod.ts new file: client/src/environments/environment.ts new file: client/src/index.html new file: client/src/locale/angular.ar.xlf new file: client/src/locale/angular.bg.xlf new file: client/src/locale/angular.bn-BD.xlf new file: client/src/locale/angular.bn.xlf new file: client/src/locale/angular.ca-ES.xlf new file: client/src/locale/angular.cs-CZ.xlf new file: client/src/locale/angular.da-DK.xlf new file: client/src/locale/angular.de-DE.xlf new file: client/src/locale/angular.el-GR.xlf new file: client/src/locale/angular.en-GB.xlf new file: client/src/locale/angular.en-US.xlf new file: client/src/locale/angular.eo.xlf new file: client/src/locale/angular.es-ES.xlf new file: client/src/locale/angular.eu-ES.xlf new file: client/src/locale/angular.fa-IR.xlf new file: client/src/locale/angular.fi-FI.xlf new file: client/src/locale/angular.fr-FR.xlf new file: client/src/locale/angular.fr.xlf new file: client/src/locale/angular.gd.xlf new file: client/src/locale/angular.gl-ES.xlf new file: client/src/locale/angular.he.xlf new file: client/src/locale/angular.hr.xlf new file: client/src/locale/angular.hu-HU.xlf new file: client/src/locale/angular.ia.xlf new file: client/src/locale/angular.id.xlf new file: client/src/locale/angular.is.xlf new file: client/src/locale/angular.it-IT.xlf new file: client/src/locale/angular.ja-JP.xlf new file: client/src/locale/angular.jbo.xlf new file: client/src/locale/angular.kab.xlf new file: client/src/locale/angular.kk.xlf new file: client/src/locale/angular.kn.xlf new file: client/src/locale/angular.ko-KR.xlf new file: client/src/locale/angular.la.xlf new file: client/src/locale/angular.lt-LT.xlf new file: client/src/locale/angular.mk.xlf new file: client/src/locale/angular.ml.xlf new file: client/src/locale/angular.nb-NO.xlf new file: client/src/locale/angular.nl-NL.xlf new file: client/src/locale/angular.nn.xlf new file: client/src/locale/angular.oc.xlf new file: client/src/locale/angular.pl-PL.xlf new file: client/src/locale/angular.pt-BR.xlf new file: client/src/locale/angular.pt-PT.xlf new file: client/src/locale/angular.pt.xlf new file: client/src/locale/angular.ro.xlf new file: client/src/locale/angular.ru-RU.xlf new file: client/src/locale/angular.sc.xlf new file: client/src/locale/angular.sk-SK.xlf new file: client/src/locale/angular.sl-SI.xlf new file: client/src/locale/angular.sq.xlf new file: client/src/locale/angular.sr-Cyrl.xlf new file: client/src/locale/angular.sv-SE.xlf new file: client/src/locale/angular.ta.xlf new file: client/src/locale/angular.th-TH.xlf new file: client/src/locale/angular.tok.xlf new file: client/src/locale/angular.tp.xlf new file: client/src/locale/angular.tr-TR.xlf new file: client/src/locale/angular.tt.xlf new file: client/src/locale/angular.tzm.xlf new file: client/src/locale/angular.uk-UA.xlf new file: client/src/locale/angular.vi-VN.xlf new file: client/src/locale/angular.xlf new file: client/src/locale/angular.zh-Hans-CN.xlf new file: client/src/locale/angular.zh-Hant-HK.xlf new file: client/src/locale/angular.zh-Hant-TW.xlf new file: client/src/locale/player.ar.json new file: client/src/locale/player.bg.json new file: client/src/locale/player.bn.json new file: client/src/locale/player.bn_BD.json new file: client/src/locale/player.ca-ES.json new file: client/src/locale/player.cs-CZ.json new file: client/src/locale/player.da-DK.json new file: client/src/locale/player.de-DE.json new file: client/src/locale/player.el-GR.json new file: client/src/locale/player.en-GB.json new file: client/src/locale/player.en-US.json new file: client/src/locale/player.eo.json new file: client/src/locale/player.es-ES.json new file: client/src/locale/player.eu-ES.json new file: client/src/locale/player.fa-IR.json new file: client/src/locale/player.fi-FI.json new file: client/src/locale/player.fr-FR.json new file: client/src/locale/player.fr.json new file: client/src/locale/player.gd.json new file: client/src/locale/player.gl-ES.json new file: client/src/locale/player.he.json new file: client/src/locale/player.hr.json new file: client/src/locale/player.hu-HU.json new file: client/src/locale/player.id.json new file: client/src/locale/player.is.json new file: client/src/locale/player.it-IT.json new file: client/src/locale/player.ja-JP.json new file: client/src/locale/player.jbo.json new file: client/src/locale/player.kab.json new file: client/src/locale/player.kk.json new file: client/src/locale/player.ko.json new file: client/src/locale/player.la.json new file: client/src/locale/player.lt-LT.json new file: client/src/locale/player.ml.json new file: client/src/locale/player.nb-NO.json new file: client/src/locale/player.nl-NL.json new file: client/src/locale/player.nn.json new file: client/src/locale/player.oc.json new file: client/src/locale/player.pl-PL.json new file: client/src/locale/player.pt-BR.json new file: client/src/locale/player.pt-PT.json new file: client/src/locale/player.pt.json new file: client/src/locale/player.ro.json new file: client/src/locale/player.ru-RU.json new file: client/src/locale/player.si.json new file: client/src/locale/player.sk-SK.json new file: client/src/locale/player.sl-SI.json new file: client/src/locale/player.sq.json new file: client/src/locale/player.sr_Cyrl.json new file: client/src/locale/player.sv-SE.json new file: client/src/locale/player.ta.json new file: client/src/locale/player.th-TH.json new file: client/src/locale/player.tok.json new file: client/src/locale/player.tp.json new file: client/src/locale/player.tr-TR.json new file: client/src/locale/player.tzm.json new file: client/src/locale/player.uk-UA.json new file: client/src/locale/player.vi-VN.json new file: client/src/locale/player.zh-Hans-CN.json new file: client/src/locale/player.zh-Hant-TW.json new file: client/src/locale/player.zh_HANT-TW.json new file: client/src/locale/server.ar.json new file: client/src/locale/server.bg.json new file: client/src/locale/server.bn.json new file: client/src/locale/server.bn_BD.json new file: client/src/locale/server.ca-ES.json new file: client/src/locale/server.cs-CZ.json new file: client/src/locale/server.da-DK.json new file: client/src/locale/server.de-DE.json new file: client/src/locale/server.el-GR.json new file: client/src/locale/server.en-GB.json new file: client/src/locale/server.en-US.json new file: client/src/locale/server.eo.json new file: client/src/locale/server.es-ES.json new file: client/src/locale/server.eu-ES.json new file: client/src/locale/server.fa-IR.json new file: client/src/locale/server.fi-FI.json new file: client/src/locale/server.fr-FR.json new file: client/src/locale/server.fr.json new file: client/src/locale/server.gd.json new file: client/src/locale/server.gl-ES.json new file: client/src/locale/server.he.json new file: client/src/locale/server.hr.json new file: client/src/locale/server.hu-HU.json new file: client/src/locale/server.id.json new file: client/src/locale/server.is.json new file: client/src/locale/server.it-IT.json new file: client/src/locale/server.ja-JP.json new file: client/src/locale/server.jbo.json new file: client/src/locale/server.kab.json new file: client/src/locale/server.kk.json new file: client/src/locale/server.ko-KR.json new file: client/src/locale/server.la.json new file: client/src/locale/server.lt-LT.json new file: client/src/locale/server.nb-NO.json new file: client/src/locale/server.nl-NL.json new file: client/src/locale/server.nn.json new file: client/src/locale/server.oc.json new file: client/src/locale/server.pl-PL.json new file: client/src/locale/server.pt-BR.json new file: client/src/locale/server.pt-PT.json new file: client/src/locale/server.ro.json new file: client/src/locale/server.ru-RU.json new file: client/src/locale/server.si.json new file: client/src/locale/server.sk-SK.json new file: client/src/locale/server.sl-SI.json new file: client/src/locale/server.sq.json new file: client/src/locale/server.sr_Cyrl.json new file: client/src/locale/server.sv-SE.json new file: client/src/locale/server.th-TH.json new file: client/src/locale/server.tok.json new file: client/src/locale/server.tp.json new file: client/src/locale/server.tr-TR.json new file: client/src/locale/server.ug.json new file: client/src/locale/server.uk-UA.json new file: client/src/locale/server.vi-VN.json new file: client/src/locale/server.zh-Hans-CN.json new file: client/src/locale/server.zh-Hant-TW.json new file: client/src/locale/server.zh_HANT-TW.json new file: client/src/locale/videojs.en-US.json new file: client/src/main.ts new file: client/src/manifest.webmanifest new file: client/src/ngsw-config.json new file: client/src/polyfills.ts new file: client/src/root-helpers/bytes.ts new file: client/src/root-helpers/images.ts new file: client/src/root-helpers/index.ts new file: client/src/root-helpers/local-storage-utils.ts new file: client/src/root-helpers/logger.ts new file: client/src/root-helpers/peertube-web-storage.ts new file: client/src/root-helpers/plugins-manager.ts new file: client/src/root-helpers/string.ts new file: client/src/root-helpers/url.ts new file: client/src/root-helpers/users/index.ts new file: client/src/root-helpers/users/oauth-user-tokens.ts new file: client/src/root-helpers/users/user-local-storage-keys.ts new file: client/src/root-helpers/utils.ts new file: client/src/root-helpers/video.ts new file: client/src/root-helpers/web-browser.ts new file: client/src/sass/application.scss new file: client/src/sass/bootstrap.scss new file: client/src/sass/class-helpers/_buttons.scss new file: client/src/sass/class-helpers/_common.scss new file: client/src/sass/class-helpers/_custom-bootstrap-helpers.scss new file: client/src/sass/class-helpers/_forms.scss new file: client/src/sass/class-helpers/_images.scss new file: client/src/sass/class-helpers/_layout.scss new file: client/src/sass/class-helpers/_menu.scss new file: client/src/sass/class-helpers/_position.scss new file: client/src/sass/class-helpers/_text.scss new file: client/src/sass/class-helpers/index.scss new file: client/src/sass/custom-markup.scss new file: client/src/sass/fonts/source-sans/WOFF2/VAR/SourceSans3VF-Italic.otf.woff2 new file: client/src/sass/fonts/source-sans/WOFF2/VAR/SourceSans3VF-Italic.ttf.woff2 new file: client/src/sass/fonts/source-sans/WOFF2/VAR/SourceSans3VF-Roman.otf.woff2 new file: client/src/sass/fonts/source-sans/WOFF2/VAR/SourceSans3VF-Roman.ttf.woff2 new file: client/src/sass/include/_account-channel-page.scss new file: client/src/sass/include/_actor.scss new file: client/src/sass/include/_badges.scss new file: client/src/sass/include/_bootstrap-mixins.scss new file: client/src/sass/include/_bootstrap-variables.scss new file: client/src/sass/include/_button-mixins.scss new file: client/src/sass/include/_fonts.scss new file: client/src/sass/include/_form-mixins.scss new file: client/src/sass/include/_icons.scss new file: client/src/sass/include/_miniature.scss new file: client/src/sass/include/_mixins.scss new file: client/src/sass/include/_nav.scss new file: client/src/sass/include/_variables.scss new file: client/src/sass/player/_player-variables.scss new file: client/src/sass/player/bezels.scss new file: client/src/sass/player/context-menu.scss new file: client/src/sass/player/control-bar.scss new file: client/src/sass/player/dock.scss new file: client/src/sass/player/index.scss new file: client/src/sass/player/mobile.scss new file: client/src/sass/player/offline-notification.scss new file: client/src/sass/player/peertube-skin.scss new file: client/src/sass/player/playlist.scss new file: client/src/sass/player/settings-menu.scss new file: client/src/sass/player/spinner.scss new file: client/src/sass/player/stats.scss new file: client/src/sass/player/storyboard.scss new file: client/src/sass/player/upnext.scss new file: client/src/sass/primeng-custom.scss new file: client/src/sass/z-index.scss new file: client/src/shims/noop.ts new file: client/src/standalone/embed-player-api/.npmignore new file: client/src/standalone/embed-player-api/README.md new file: client/src/standalone/embed-player-api/definitions.ts new file: client/src/standalone/embed-player-api/events.ts new file: client/src/standalone/embed-player-api/package.json new file: client/src/standalone/embed-player-api/player.ts new file: client/src/standalone/embed-player-api/tsconfig.json new file: client/src/standalone/embed-player-api/vite.config.mjs new file: client/src/standalone/videos/.env.development new file: client/src/standalone/videos/embed-api.ts new file: client/src/standalone/videos/embed.html new file: client/src/standalone/videos/embed.scss new file: client/src/standalone/videos/embed.ts new file: client/src/standalone/videos/shared/auth-http.ts new file: client/src/standalone/videos/shared/index.ts new file: client/src/standalone/videos/shared/live-manager.ts new file: client/src/standalone/videos/shared/peertube-plugin.ts new file: client/src/standalone/videos/shared/player-html.ts new file: client/src/standalone/videos/shared/player-options-builder.ts new file: client/src/standalone/videos/shared/playlist-fetcher.ts new file: client/src/standalone/videos/shared/playlist-tracker.ts new file: client/src/standalone/videos/shared/translations.ts new file: client/src/standalone/videos/shared/url.ts new file: client/src/standalone/videos/shared/video-fetcher.ts new file: client/src/standalone/videos/test-embed.html new file: client/src/standalone/videos/test-embed.scss new file: client/src/standalone/videos/test-embed.ts new file: client/src/standalone/videos/tsconfig.json new file: client/src/standalone/videos/vite.config.mjs new file: client/src/types/client-script.model.ts new file: client/src/types/index.ts new file: client/src/types/job-state-client.type.ts new file: client/src/types/job-type-client.type.ts new file: client/src/types/link.type.ts new file: client/src/types/register-client-option.model.ts new file: client/src/types/select-options-item.model.ts new file: client/src/types/server-error.model.ts new file: client/src/typings.d.ts new file: client/tsconfig.eslint.json new file: client/tsconfig.json new file: client/tsconfig.types.json new file: client/yarn.lock new file: config/default.yaml new file: config/dev-1.yaml new file: config/dev.yaml new file: config/production.yaml.example new file: config/test-1.yaml new file: config/test-2.yaml new file: config/test-3.yaml new file: config/test-4.yaml new file: config/test-5.yaml new file: config/test-6.yaml new file: config/test.yaml new file: package.json new file: packages/core-utils/package.json new file: packages/core-utils/src/abuse/abuse-predefined-reasons.ts new file: packages/core-utils/src/abuse/index.ts new file: packages/core-utils/src/common/array.ts new file: packages/core-utils/src/common/date.ts new file: packages/core-utils/src/common/index.ts new file: packages/core-utils/src/common/number.ts new file: packages/core-utils/src/common/object.ts new file: packages/core-utils/src/common/promises.ts new file: packages/core-utils/src/common/random.ts new file: packages/core-utils/src/common/regexp.ts new file: packages/core-utils/src/common/time.ts new file: packages/core-utils/src/common/url.ts new file: packages/core-utils/src/common/version.ts new file: packages/core-utils/src/i18n/i18n.ts new file: packages/core-utils/src/i18n/index.ts new file: packages/core-utils/src/index.ts new file: packages/core-utils/src/plugins/hooks.ts new file: packages/core-utils/src/plugins/index.ts new file: packages/core-utils/src/renderer/html.ts new file: packages/core-utils/src/renderer/index.ts new file: packages/core-utils/src/renderer/markdown.ts new file: packages/core-utils/src/string/chapters.ts new file: packages/core-utils/src/string/index.ts new file: packages/core-utils/src/users/index.ts new file: packages/core-utils/src/users/user-role.ts new file: packages/core-utils/src/videos/bitrate.ts new file: packages/core-utils/src/videos/common.ts new file: packages/core-utils/src/videos/index.ts new file: packages/core-utils/tsconfig.json new file: packages/ffmpeg/package.json new file: packages/ffmpeg/src/ffmpeg-command-wrapper.ts new file: packages/ffmpeg/src/ffmpeg-container.ts new file: packages/ffmpeg/src/ffmpeg-default-transcoding-profile.ts new file: packages/ffmpeg/src/ffmpeg-edition.ts new file: packages/ffmpeg/src/ffmpeg-images.ts new file: packages/ffmpeg/src/ffmpeg-live.ts new file: packages/ffmpeg/src/ffmpeg-utils.ts new file: packages/ffmpeg/src/ffmpeg-version.ts new file: packages/ffmpeg/src/ffmpeg-vod.ts new file: packages/ffmpeg/src/ffprobe.ts new file: packages/ffmpeg/src/index.ts new file: packages/ffmpeg/src/shared/encoder-options.ts new file: packages/ffmpeg/src/shared/index.ts new file: packages/ffmpeg/src/shared/presets.ts new file: packages/ffmpeg/tsconfig.json new file: packages/models/package.json new file: packages/models/src/activitypub/activity.ts new file: packages/models/src/activitypub/activitypub-actor.ts new file: packages/models/src/activitypub/activitypub-collection.ts new file: packages/models/src/activitypub/activitypub-ordered-collection.ts new file: packages/models/src/activitypub/activitypub-root.ts new file: packages/models/src/activitypub/activitypub-signature.ts new file: packages/models/src/activitypub/context.ts new file: packages/models/src/activitypub/index.ts new file: packages/models/src/activitypub/objects/abuse-object.ts new file: packages/models/src/activitypub/objects/activitypub-object.ts new file: packages/models/src/activitypub/objects/cache-file-object.ts new file: packages/models/src/activitypub/objects/common-objects.ts new file: packages/models/src/activitypub/objects/index.ts new file: packages/models/src/activitypub/objects/playlist-element-object.ts new file: packages/models/src/activitypub/objects/playlist-object.ts new file: packages/models/src/activitypub/objects/video-caption-object.ts new file: packages/models/src/activitypub/objects/video-chapters-object.ts new file: packages/models/src/activitypub/objects/video-comment-object.ts new file: packages/models/src/activitypub/objects/video-object.ts new file: packages/models/src/activitypub/objects/watch-action-object.ts new file: packages/models/src/activitypub/webfinger.ts new file: packages/models/src/actors/account.model.ts new file: packages/models/src/actors/actor-image.model.ts new file: packages/models/src/actors/actor-image.type.ts new file: packages/models/src/actors/actor.model.ts new file: packages/models/src/actors/custom-page.model.ts new file: packages/models/src/actors/follow.model.ts new file: packages/models/src/actors/index.ts new file: packages/models/src/bulk/bulk-remove-comments-of-body.model.ts new file: packages/models/src/bulk/index.ts new file: packages/models/src/common/file-storage.enum.ts new file: packages/models/src/common/index.ts new file: packages/models/src/common/result-list.model.ts new file: packages/models/src/common/simple-logger.model.ts new file: packages/models/src/custom-markup/custom-markup-data.model.ts new file: packages/models/src/custom-markup/index.ts new file: packages/models/src/feeds/feed-format.enum.ts new file: packages/models/src/feeds/index.ts new file: packages/models/src/http/http-methods.ts new file: packages/models/src/http/http-status-codes.ts new file: packages/models/src/http/index.ts new file: packages/models/src/import-export/index.ts new file: packages/models/src/import-export/peertube-export-format/account-export.model.ts new file: packages/models/src/import-export/peertube-export-format/actor-export.model.ts new file: packages/models/src/import-export/peertube-export-format/auto-tag-policies-export.ts new file: packages/models/src/import-export/peertube-export-format/blocklist-export.model.ts new file: packages/models/src/import-export/peertube-export-format/channel-export.model.ts new file: packages/models/src/import-export/peertube-export-format/comments-export.model.ts new file: packages/models/src/import-export/peertube-export-format/dislikes-export.model.ts new file: packages/models/src/import-export/peertube-export-format/followers-export.model.ts new file: packages/models/src/import-export/peertube-export-format/following-export.model.ts new file: packages/models/src/import-export/peertube-export-format/index.ts new file: packages/models/src/import-export/peertube-export-format/likes-export.model.ts new file: packages/models/src/import-export/peertube-export-format/user-settings-export.model.ts new file: packages/models/src/import-export/peertube-export-format/user-video-history-export.ts new file: packages/models/src/import-export/peertube-export-format/video-export.model.ts new file: packages/models/src/import-export/peertube-export-format/video-playlists-export.model.ts new file: packages/models/src/import-export/peertube-export-format/watched-words-lists-export.ts new file: packages/models/src/import-export/user-export-request-result.model.ts new file: packages/models/src/import-export/user-export-request.model.ts new file: packages/models/src/import-export/user-export-state.enum.ts new file: packages/models/src/import-export/user-export.model.ts new file: packages/models/src/import-export/user-import-result.model.ts new file: packages/models/src/import-export/user-import-state.enum.ts new file: packages/models/src/import-export/user-import-upload-result.model.ts new file: packages/models/src/import-export/user-import.model.ts new file: packages/models/src/index.ts new file: packages/models/src/metrics/index.ts new file: packages/models/src/metrics/playback-metric-create.model.ts new file: packages/models/src/moderation/abuse/abuse-create.model.ts new file: packages/models/src/moderation/abuse/abuse-filter.type.ts new file: packages/models/src/moderation/abuse/abuse-message.model.ts new file: packages/models/src/moderation/abuse/abuse-reason.model.ts new file: packages/models/src/moderation/abuse/abuse-state.model.ts new file: packages/models/src/moderation/abuse/abuse-update.model.ts new file: packages/models/src/moderation/abuse/abuse-video-is.type.ts new file: packages/models/src/moderation/abuse/abuse.model.ts new file: packages/models/src/moderation/abuse/index.ts new file: packages/models/src/moderation/account-block.model.ts new file: packages/models/src/moderation/automatic-tag-available.model.ts new file: packages/models/src/moderation/automatic-tag-policy.enum.ts new file: packages/models/src/moderation/block-status.model.ts new file: packages/models/src/moderation/comment-automatic-tag-policies-update.model.ts new file: packages/models/src/moderation/comment-automatic-tag-policies.model.ts new file: packages/models/src/moderation/index.ts new file: packages/models/src/moderation/server-block.model.ts new file: packages/models/src/moderation/watched-words-list.model.ts new file: packages/models/src/nodeinfo/index.ts new file: packages/models/src/nodeinfo/nodeinfo.model.ts new file: packages/models/src/overviews/index.ts new file: packages/models/src/overviews/videos-overview.model.ts new file: packages/models/src/plugins/client/client-hook.model.ts new file: packages/models/src/plugins/client/index.ts new file: packages/models/src/plugins/client/plugin-client-scope.type.ts new file: packages/models/src/plugins/client/plugin-element-placeholder.type.ts new file: packages/models/src/plugins/client/plugin-selector-id.type.ts new file: packages/models/src/plugins/client/register-client-form-field.model.ts new file: packages/models/src/plugins/client/register-client-hook.model.ts new file: packages/models/src/plugins/client/register-client-route.model.ts new file: packages/models/src/plugins/client/register-client-settings-script.model.ts new file: packages/models/src/plugins/hook-type.enum.ts new file: packages/models/src/plugins/index.ts new file: packages/models/src/plugins/plugin-index/index.ts new file: packages/models/src/plugins/plugin-index/peertube-plugin-index-list.model.ts new file: packages/models/src/plugins/plugin-index/peertube-plugin-index.model.ts new file: packages/models/src/plugins/plugin-index/peertube-plugin-latest-version.model.ts new file: packages/models/src/plugins/plugin-package-json.model.ts new file: packages/models/src/plugins/plugin.type.ts new file: packages/models/src/plugins/server/api/index.ts new file: packages/models/src/plugins/server/api/install-plugin.model.ts new file: packages/models/src/plugins/server/api/manage-plugin.model.ts new file: packages/models/src/plugins/server/api/peertube-plugin.model.ts new file: packages/models/src/plugins/server/index.ts new file: packages/models/src/plugins/server/managers/index.ts new file: packages/models/src/plugins/server/managers/plugin-playlist-privacy-manager.model.ts new file: packages/models/src/plugins/server/managers/plugin-settings-manager.model.ts new file: packages/models/src/plugins/server/managers/plugin-storage-manager.model.ts new file: packages/models/src/plugins/server/managers/plugin-transcoding-manager.model.ts new file: packages/models/src/plugins/server/managers/plugin-video-category-manager.model.ts new file: packages/models/src/plugins/server/managers/plugin-video-language-manager.model.ts new file: packages/models/src/plugins/server/managers/plugin-video-licence-manager.model.ts new file: packages/models/src/plugins/server/managers/plugin-video-privacy-manager.model.ts new file: packages/models/src/plugins/server/plugin-constant-manager.model.ts new file: packages/models/src/plugins/server/plugin-translation.model.ts new file: packages/models/src/plugins/server/register-server-hook.model.ts new file: packages/models/src/plugins/server/server-hook.model.ts new file: packages/models/src/plugins/server/settings/index.ts new file: packages/models/src/plugins/server/settings/public-server.setting.ts new file: packages/models/src/plugins/server/settings/register-server-setting.model.ts new file: packages/models/src/redundancy/index.ts new file: packages/models/src/redundancy/video-redundancies-filters.model.ts new file: packages/models/src/redundancy/video-redundancy-config-filter.type.ts new file: packages/models/src/redundancy/video-redundancy.model.ts new file: packages/models/src/redundancy/videos-redundancy-strategy.model.ts new file: packages/models/src/runners/abort-runner-job-body.model.ts new file: packages/models/src/runners/accept-runner-job-body.model.ts new file: packages/models/src/runners/accept-runner-job-result.model.ts new file: packages/models/src/runners/error-runner-job-body.model.ts new file: packages/models/src/runners/index.ts new file: packages/models/src/runners/list-runner-jobs-query.model.ts new file: packages/models/src/runners/list-runner-registration-tokens.model.ts new file: packages/models/src/runners/list-runners-query.model.ts new file: packages/models/src/runners/register-runner-body.model.ts new file: packages/models/src/runners/register-runner-result.model.ts new file: packages/models/src/runners/request-runner-job-body.model.ts new file: packages/models/src/runners/request-runner-job-result.model.ts new file: packages/models/src/runners/runner-job-payload.model.ts new file: packages/models/src/runners/runner-job-private-payload.model.ts new file: packages/models/src/runners/runner-job-state.model.ts new file: packages/models/src/runners/runner-job-success-body.model.ts new file: packages/models/src/runners/runner-job-type.type.ts new file: packages/models/src/runners/runner-job-update-body.model.ts new file: packages/models/src/runners/runner-job.model.ts new file: packages/models/src/runners/runner-registration-token.ts new file: packages/models/src/runners/runner.model.ts new file: packages/models/src/runners/unregister-runner-body.model.ts new file: packages/models/src/search/boolean-both-query.model.ts new file: packages/models/src/search/index.ts new file: packages/models/src/search/search-target-query.model.ts new file: packages/models/src/search/video-channels-search-query.model.ts new file: packages/models/src/search/video-playlists-search-query.model.ts new file: packages/models/src/search/videos-common-query.model.ts new file: packages/models/src/search/videos-search-query.model.ts new file: packages/models/src/server/about.model.ts new file: packages/models/src/server/broadcast-message-level.type.ts new file: packages/models/src/server/client-log-create.model.ts new file: packages/models/src/server/client-log-level.type.ts new file: packages/models/src/server/contact-form.model.ts new file: packages/models/src/server/custom-config.model.ts new file: packages/models/src/server/debug.model.ts new file: packages/models/src/server/emailer.model.ts new file: packages/models/src/server/index.ts new file: packages/models/src/server/job.model.ts new file: packages/models/src/server/peertube-problem-document.model.ts new file: packages/models/src/server/server-config.model.ts new file: packages/models/src/server/server-debug.model.ts new file: packages/models/src/server/server-error-code.enum.ts new file: packages/models/src/server/server-follow-create.model.ts new file: packages/models/src/server/server-log-level.type.ts new file: packages/models/src/server/server-stats.model.ts new file: packages/models/src/tokens/index.ts new file: packages/models/src/tokens/oauth-client-local.model.ts new file: packages/models/src/users/index.ts new file: packages/models/src/users/registration/index.ts new file: packages/models/src/users/registration/user-register.model.ts new file: packages/models/src/users/registration/user-registration-request.model.ts new file: packages/models/src/users/registration/user-registration-state.model.ts new file: packages/models/src/users/registration/user-registration-update-state.model.ts new file: packages/models/src/users/registration/user-registration.model.ts new file: packages/models/src/users/two-factor-enable-result.model.ts new file: packages/models/src/users/user-create-result.model.ts new file: packages/models/src/users/user-create.model.ts new file: packages/models/src/users/user-flag.model.ts new file: packages/models/src/users/user-login.model.ts new file: packages/models/src/users/user-notification-setting.model.ts new file: packages/models/src/users/user-notification.model.ts new file: packages/models/src/users/user-refresh-token.model.ts new file: packages/models/src/users/user-right.enum.ts new file: packages/models/src/users/user-role.ts new file: packages/models/src/users/user-scoped-token.ts new file: packages/models/src/users/user-update-me.model.ts new file: packages/models/src/users/user-update.model.ts new file: packages/models/src/users/user-video-quota.model.ts new file: packages/models/src/users/user.model.ts new file: packages/models/src/videos/blacklist/index.ts new file: packages/models/src/videos/blacklist/video-blacklist-create.model.ts new file: packages/models/src/videos/blacklist/video-blacklist-update.model.ts new file: packages/models/src/videos/blacklist/video-blacklist.model.ts new file: packages/models/src/videos/caption/index.ts new file: packages/models/src/videos/caption/video-caption-generate.model.ts new file: packages/models/src/videos/caption/video-caption-update.model.ts new file: packages/models/src/videos/caption/video-caption.model.ts new file: packages/models/src/videos/change-ownership/index.ts new file: packages/models/src/videos/change-ownership/video-change-ownership-accept.model.ts new file: packages/models/src/videos/change-ownership/video-change-ownership-create.model.ts new file: packages/models/src/videos/change-ownership/video-change-ownership.model.ts new file: packages/models/src/videos/channel-sync/index.ts new file: packages/models/src/videos/channel-sync/video-channel-sync-create.model.ts new file: packages/models/src/videos/channel-sync/video-channel-sync-state.enum.ts new file: packages/models/src/videos/channel-sync/video-channel-sync.model.ts new file: packages/models/src/videos/channel/index.ts new file: packages/models/src/videos/channel/video-channel-create-result.model.ts new file: packages/models/src/videos/channel/video-channel-create.model.ts new file: packages/models/src/videos/channel/video-channel-update.model.ts new file: packages/models/src/videos/channel/video-channel.model.ts new file: packages/models/src/videos/chapter/chapter-update.model.ts new file: packages/models/src/videos/chapter/chapter.model.ts new file: packages/models/src/videos/chapter/index.ts new file: packages/models/src/videos/comment/index.ts new file: packages/models/src/videos/comment/video-comment-create.model.ts new file: packages/models/src/videos/comment/video-comment-policy.enum.ts new file: packages/models/src/videos/comment/video-comment.model.ts new file: packages/models/src/videos/file/index.ts new file: packages/models/src/videos/file/video-file-format-flag.enum.ts new file: packages/models/src/videos/file/video-file-metadata.model.ts new file: packages/models/src/videos/file/video-file-stream.enum.ts new file: packages/models/src/videos/file/video-file.model.ts new file: packages/models/src/videos/file/video-resolution.enum.ts new file: packages/models/src/videos/import/index.ts new file: packages/models/src/videos/import/video-import-create.model.ts new file: packages/models/src/videos/import/video-import-state.enum.ts new file: packages/models/src/videos/import/video-import.model.ts new file: packages/models/src/videos/import/videos-import-in-channel-create.model.ts new file: packages/models/src/videos/index.ts new file: packages/models/src/videos/nsfw-policy.type.ts new file: packages/models/src/videos/playlist/index.ts new file: packages/models/src/videos/playlist/video-exist-in-playlist.model.ts new file: packages/models/src/videos/playlist/video-playlist-create-result.model.ts new file: packages/models/src/videos/playlist/video-playlist-create.model.ts new file: packages/models/src/videos/playlist/video-playlist-element-create-result.model.ts new file: packages/models/src/videos/playlist/video-playlist-element-create.model.ts new file: packages/models/src/videos/playlist/video-playlist-element-update.model.ts new file: packages/models/src/videos/playlist/video-playlist-element.model.ts new file: packages/models/src/videos/playlist/video-playlist-privacy.model.ts new file: packages/models/src/videos/playlist/video-playlist-reorder.model.ts new file: packages/models/src/videos/playlist/video-playlist-type.model.ts new file: packages/models/src/videos/playlist/video-playlist-update.model.ts new file: packages/models/src/videos/playlist/video-playlist.model.ts new file: packages/models/src/videos/rate/account-video-rate.model.ts new file: packages/models/src/videos/rate/index.ts new file: packages/models/src/videos/rate/user-video-rate-update.model.ts new file: packages/models/src/videos/rate/user-video-rate.model.ts new file: packages/models/src/videos/rate/user-video-rate.type.ts new file: packages/models/src/videos/stats/index.ts new file: packages/models/src/videos/stats/video-stats-overall-query.model.ts new file: packages/models/src/videos/stats/video-stats-overall.model.ts new file: packages/models/src/videos/stats/video-stats-retention.model.ts new file: packages/models/src/videos/stats/video-stats-timeserie-metric.type.ts new file: packages/models/src/videos/stats/video-stats-timeserie-query.model.ts new file: packages/models/src/videos/stats/video-stats-timeserie.model.ts new file: packages/models/src/videos/storyboard.model.ts new file: packages/models/src/videos/studio/index.ts new file: packages/models/src/videos/studio/video-studio-create-edit.model.ts new file: packages/models/src/videos/thumbnail.type.ts new file: packages/models/src/videos/transcoding/index.ts new file: packages/models/src/videos/transcoding/video-transcoding-create.model.ts new file: packages/models/src/videos/transcoding/video-transcoding.model.ts new file: packages/models/src/videos/video-constant.model.ts new file: packages/models/src/videos/video-create-result.model.ts new file: packages/models/src/videos/video-create.model.ts new file: packages/models/src/videos/video-include.enum.ts new file: packages/models/src/videos/video-password.model.ts new file: packages/models/src/videos/video-privacy.enum.ts new file: packages/models/src/videos/video-rate.type.ts new file: packages/models/src/videos/video-schedule-update.model.ts new file: packages/models/src/videos/video-sort-field.type.ts new file: packages/models/src/videos/video-source.model.ts new file: packages/models/src/videos/video-state.enum.ts new file: packages/models/src/videos/video-streaming-playlist.model.ts new file: packages/models/src/videos/video-streaming-playlist.type.ts new file: packages/models/src/videos/video-token.model.ts new file: packages/models/src/videos/video-update.model.ts new file: packages/models/src/videos/video-view.model.ts new file: packages/models/src/videos/video.model.ts new file: packages/models/tsconfig.json new file: packages/models/tsconfig.types.json new file: packages/node-utils/package.json new file: packages/node-utils/src/crypto.ts new file: packages/node-utils/src/env.ts new file: packages/node-utils/src/file.ts new file: packages/node-utils/src/index.ts new file: packages/node-utils/src/path.ts new file: packages/node-utils/src/uuid.ts new file: packages/node-utils/tsconfig.json new file: packages/server-commands/package.json new file: packages/server-commands/src/bulk/bulk-command.ts new file: packages/server-commands/src/bulk/index.ts new file: packages/server-commands/src/cli/cli-command.ts new file: packages/server-commands/src/cli/index.ts new file: packages/server-commands/src/custom-pages/custom-pages-command.ts new file: packages/server-commands/src/custom-pages/index.ts new file: packages/server-commands/src/feeds/feeds-command.ts new file: packages/server-commands/src/feeds/index.ts new file: packages/server-commands/src/index.ts new file: packages/server-commands/src/logs/index.ts new file: packages/server-commands/src/logs/logs-command.ts new file: packages/server-commands/src/moderation/abuses-command.ts new file: packages/server-commands/src/moderation/automatic-tags-command.ts new file: packages/server-commands/src/moderation/index.ts new file: packages/server-commands/src/moderation/watched-words-command.ts new file: packages/server-commands/src/overviews/index.ts new file: packages/server-commands/src/overviews/overviews-command.ts new file: packages/server-commands/src/requests/index.ts new file: packages/server-commands/src/requests/requests.ts new file: packages/server-commands/src/runners/index.ts new file: packages/server-commands/src/runners/runner-jobs-command.ts new file: packages/server-commands/src/runners/runner-registration-tokens-command.ts new file: packages/server-commands/src/runners/runners-command.ts new file: packages/server-commands/src/search/index.ts new file: packages/server-commands/src/search/search-command.ts new file: packages/server-commands/src/server/config-command.ts new file: packages/server-commands/src/server/contact-form-command.ts new file: packages/server-commands/src/server/debug-command.ts new file: packages/server-commands/src/server/follows-command.ts new file: packages/server-commands/src/server/follows.ts new file: packages/server-commands/src/server/index.ts new file: packages/server-commands/src/server/jobs-command.ts new file: packages/server-commands/src/server/jobs.ts new file: packages/server-commands/src/server/metrics-command.ts new file: packages/server-commands/src/server/object-storage-command.ts new file: packages/server-commands/src/server/plugins-command.ts new file: packages/server-commands/src/server/redundancy-command.ts new file: packages/server-commands/src/server/server.ts new file: packages/server-commands/src/server/servers-command.ts new file: packages/server-commands/src/server/servers.ts new file: packages/server-commands/src/server/stats-command.ts new file: packages/server-commands/src/shared/abstract-command.ts new file: packages/server-commands/src/shared/index.ts new file: packages/server-commands/src/socket/index.ts new file: packages/server-commands/src/socket/socket-io-command.ts new file: packages/server-commands/src/users/accounts-command.ts new file: packages/server-commands/src/users/accounts.ts new file: packages/server-commands/src/users/blocklist-command.ts new file: packages/server-commands/src/users/index.ts new file: packages/server-commands/src/users/login-command.ts new file: packages/server-commands/src/users/login.ts new file: packages/server-commands/src/users/notifications-command.ts new file: packages/server-commands/src/users/registrations-command.ts new file: packages/server-commands/src/users/subscriptions-command.ts new file: packages/server-commands/src/users/two-factor-command.ts new file: packages/server-commands/src/users/user-exports-command.ts new file: packages/server-commands/src/users/user-imports-command.ts new file: packages/server-commands/src/users/users-command.ts new file: packages/server-commands/src/videos/blacklist-command.ts new file: packages/server-commands/src/videos/captions-command.ts new file: packages/server-commands/src/videos/change-ownership-command.ts new file: packages/server-commands/src/videos/channel-syncs-command.ts new file: packages/server-commands/src/videos/channels-command.ts new file: packages/server-commands/src/videos/channels.ts new file: packages/server-commands/src/videos/chapters-command.ts new file: packages/server-commands/src/videos/comments-command.ts new file: packages/server-commands/src/videos/history-command.ts new file: packages/server-commands/src/videos/index.ts new file: packages/server-commands/src/videos/live-command.ts new file: packages/server-commands/src/videos/live.ts new file: packages/server-commands/src/videos/playlists-command.ts new file: packages/server-commands/src/videos/services-command.ts new file: packages/server-commands/src/videos/storyboard-command.ts new file: packages/server-commands/src/videos/streaming-playlists-command.ts new file: packages/server-commands/src/videos/video-imports-command.ts new file: packages/server-commands/src/videos/video-passwords-command.ts new file: packages/server-commands/src/videos/video-stats-command.ts new file: packages/server-commands/src/videos/video-studio-command.ts new file: packages/server-commands/src/videos/video-token-command.ts new file: packages/server-commands/src/videos/videos-command.ts new file: packages/server-commands/src/videos/views-command.ts new file: packages/server-commands/tsconfig.json new file: packages/tests/fixtures/60fps_720p_small.mp4 new file: packages/tests/fixtures/ap-json/mastodon/bad-body-http-signature.json new file: packages/tests/fixtures/ap-json/mastodon/bad-http-signature.json new file: packages/tests/fixtures/ap-json/mastodon/bad-public-key.json new file: packages/tests/fixtures/ap-json/mastodon/create-bad-signature.json new file: packages/tests/fixtures/ap-json/mastodon/create.json new file: packages/tests/fixtures/ap-json/mastodon/http-signature.json new file: packages/tests/fixtures/ap-json/mastodon/public-key.json new file: packages/tests/fixtures/ap-json/peertube/announce-without-context.json new file: packages/tests/fixtures/ap-json/peertube/invalid-keys.json new file: packages/tests/fixtures/ap-json/peertube/keys.json new file: packages/tests/fixtures/avatar-big.png new file: packages/tests/fixtures/avatar-resized-120x120.gif new file: packages/tests/fixtures/avatar-resized-120x120.png new file: packages/tests/fixtures/avatar-resized-120x120.webp new file: packages/tests/fixtures/avatar-resized-1500x1500.png new file: packages/tests/fixtures/avatar-resized-1500x1500.webp new file: packages/tests/fixtures/avatar-resized-48x48.gif new file: packages/tests/fixtures/avatar-resized-48x48.png new file: packages/tests/fixtures/avatar-resized-48x48.webp new file: packages/tests/fixtures/avatar-resized-600x600.png new file: packages/tests/fixtures/avatar-resized-600x600.webp new file: packages/tests/fixtures/avatar.gif new file: packages/tests/fixtures/avatar.png new file: packages/tests/fixtures/avatar.webp new file: packages/tests/fixtures/avatar2-resized-120x120.png new file: packages/tests/fixtures/avatar2-resized-1500x1500.png new file: packages/tests/fixtures/avatar2-resized-48x48.png new file: packages/tests/fixtures/avatar2-resized-600x600.png new file: packages/tests/fixtures/avatar2.png new file: packages/tests/fixtures/banner-resized-1920.jpg new file: packages/tests/fixtures/banner-resized-600.jpg new file: packages/tests/fixtures/banner-user-import-resized-1920.jpg new file: packages/tests/fixtures/banner-user-import-resized-600.jpg new file: packages/tests/fixtures/banner.jpg new file: packages/tests/fixtures/custom-preview-big.png new file: packages/tests/fixtures/custom-preview.jpg new file: packages/tests/fixtures/custom-thumbnail-2.jpg new file: packages/tests/fixtures/custom-thumbnail-big.jpg new file: packages/tests/fixtures/custom-thumbnail-from-preview.jpg new file: packages/tests/fixtures/custom-thumbnail.jpg new file: packages/tests/fixtures/custom-thumbnail.png new file: packages/tests/fixtures/default-live-preview.jpg new file: packages/tests/fixtures/default-live-thumbnail.jpg new file: packages/tests/fixtures/exif.jpg new file: packages/tests/fixtures/exif.png new file: packages/tests/fixtures/export-bad-structure.zip new file: packages/tests/fixtures/export-bad-video-file.zip new file: packages/tests/fixtures/export-bad-video.zip new file: packages/tests/fixtures/export-with-files.zip new file: packages/tests/fixtures/export-without-files.zip new file: packages/tests/fixtures/export-without-videos.zip new file: packages/tests/fixtures/live/0-000067.ts new file: packages/tests/fixtures/live/0-000068.ts new file: packages/tests/fixtures/live/0-000069.ts new file: packages/tests/fixtures/live/0-000070.ts new file: packages/tests/fixtures/live/0.m3u8 new file: packages/tests/fixtures/live/1-000067.ts new file: packages/tests/fixtures/live/1-000068.ts new file: packages/tests/fixtures/live/1-000069.ts new file: packages/tests/fixtures/live/1-000070.ts new file: packages/tests/fixtures/live/1.m3u8 new file: packages/tests/fixtures/live/master.m3u8 new file: packages/tests/fixtures/low-bitrate.mp4 new file: packages/tests/fixtures/peertube-plugin-test-broken/main.js new file: packages/tests/fixtures/peertube-plugin-test-broken/package.json new file: packages/tests/fixtures/peertube-plugin-test-external-auth-one/main.js new file: packages/tests/fixtures/peertube-plugin-test-external-auth-one/package.json new file: packages/tests/fixtures/peertube-plugin-test-external-auth-three/main.js new file: packages/tests/fixtures/peertube-plugin-test-external-auth-three/package.json new file: packages/tests/fixtures/peertube-plugin-test-external-auth-two/main.js new file: packages/tests/fixtures/peertube-plugin-test-external-auth-two/package.json new file: packages/tests/fixtures/peertube-plugin-test-filter-translations/languages/fr.json new file: packages/tests/fixtures/peertube-plugin-test-filter-translations/languages/it.json new file: packages/tests/fixtures/peertube-plugin-test-filter-translations/main.js new file: packages/tests/fixtures/peertube-plugin-test-filter-translations/package.json new file: packages/tests/fixtures/peertube-plugin-test-five/main.js new file: packages/tests/fixtures/peertube-plugin-test-five/package.json new file: packages/tests/fixtures/peertube-plugin-test-four/main.js new file: packages/tests/fixtures/peertube-plugin-test-four/package.json new file: packages/tests/fixtures/peertube-plugin-test-id-pass-auth-one/main.js new file: packages/tests/fixtures/peertube-plugin-test-id-pass-auth-one/package.json new file: packages/tests/fixtures/peertube-plugin-test-id-pass-auth-three/main.js new file: packages/tests/fixtures/peertube-plugin-test-id-pass-auth-three/package.json new file: packages/tests/fixtures/peertube-plugin-test-id-pass-auth-two/main.js new file: packages/tests/fixtures/peertube-plugin-test-id-pass-auth-two/package.json new file: packages/tests/fixtures/peertube-plugin-test-native/main.js new file: packages/tests/fixtures/peertube-plugin-test-native/package.json new file: packages/tests/fixtures/peertube-plugin-test-podcast-custom-tags/main.js new file: packages/tests/fixtures/peertube-plugin-test-podcast-custom-tags/package.json new file: packages/tests/fixtures/peertube-plugin-test-six/main.js new file: packages/tests/fixtures/peertube-plugin-test-six/package.json new file: packages/tests/fixtures/peertube-plugin-test-transcoding-one/main.js new file: packages/tests/fixtures/peertube-plugin-test-transcoding-one/package.json new file: packages/tests/fixtures/peertube-plugin-test-transcoding-two/main.js new file: packages/tests/fixtures/peertube-plugin-test-transcoding-two/package.json new file: packages/tests/fixtures/peertube-plugin-test-unloading/lib.js new file: packages/tests/fixtures/peertube-plugin-test-unloading/main.js new file: packages/tests/fixtures/peertube-plugin-test-unloading/package.json new file: packages/tests/fixtures/peertube-plugin-test-video-constants/main.js new file: packages/tests/fixtures/peertube-plugin-test-video-constants/package.json new file: packages/tests/fixtures/peertube-plugin-test-websocket/main.js new file: packages/tests/fixtures/peertube-plugin-test-websocket/package.json new file: packages/tests/fixtures/peertube-plugin-test/languages/fr.json new file: packages/tests/fixtures/peertube-plugin-test/main.js new file: packages/tests/fixtures/peertube-plugin-test/package.json new file: packages/tests/fixtures/rtmps.cert new file: packages/tests/fixtures/rtmps.key new file: packages/tests/fixtures/sample.ogg new file: packages/tests/fixtures/subtitle-bad.txt new file: packages/tests/fixtures/subtitle-good.srt new file: packages/tests/fixtures/subtitle-good1.vtt new file: packages/tests/fixtures/subtitle-good2.vtt new file: packages/tests/fixtures/thumbnail-playlist.jpg new file: packages/tests/fixtures/transcription/hello_world.zip new file: packages/tests/fixtures/transcription/videos/README.md new file: packages/tests/fixtures/transcription/videos/communiquer-lors-dune-classe-transplantee.mp4 new file: packages/tests/fixtures/transcription/videos/communiquer-lors-dune-classe-transplantee.txt new file: packages/tests/fixtures/transcription/videos/derive_sectaire.mp4 new file: packages/tests/fixtures/transcription/videos/derive_sectaire.srt new file: packages/tests/fixtures/transcription/videos/derive_sectaire.txt new file: packages/tests/fixtures/transcription/videos/the_last_man_on_earth.mp4 new file: packages/tests/fixtures/transcription/videos/the_last_man_on_earth.srt new file: packages/tests/fixtures/transcription/videos/the_last_man_on_earth.txt new file: packages/tests/fixtures/transcription/videos/the_last_man_on_earth.vtt new file: packages/tests/fixtures/video-720p.torrent new file: packages/tests/fixtures/video_chapters.mp4 new file: packages/tests/fixtures/video_import_preview.jpg new file: packages/tests/fixtures/video_import_preview_yt_dlp.jpg new file: packages/tests/fixtures/video_import_thumbnail.jpg new file: packages/tests/fixtures/video_import_thumbnail_yt_dlp.jpg new file: packages/tests/fixtures/video_short.avi new file: packages/tests/fixtures/video_short.mkv new file: packages/tests/fixtures/video_short.mp4 new file: packages/tests/fixtures/video_short.mp4.jpg new file: packages/tests/fixtures/video_short.ogv new file: packages/tests/fixtures/video_short.ogv.jpg new file: packages/tests/fixtures/video_short.webm new file: packages/tests/fixtures/video_short.webm.jpg new file: packages/tests/fixtures/video_short1-preview.webm.jpg new file: packages/tests/fixtures/video_short1.webm new file: packages/tests/fixtures/video_short1.webm.jpg new file: packages/tests/fixtures/video_short2.webm new file: packages/tests/fixtures/video_short2.webm.jpg new file: packages/tests/fixtures/video_short3.webm new file: packages/tests/fixtures/video_short3.webm.jpg new file: packages/tests/fixtures/video_short_0p.mp4 new file: packages/tests/fixtures/video_short_144p.m3u8 new file: packages/tests/fixtures/video_short_144p.mp4 new file: packages/tests/fixtures/video_short_240p.m3u8 new file: packages/tests/fixtures/video_short_240p.mp4 new file: packages/tests/fixtures/video_short_360p.m3u8 new file: packages/tests/fixtures/video_short_360p.mp4 new file: packages/tests/fixtures/video_short_480.webm new file: packages/tests/fixtures/video_short_480p.m3u8 new file: packages/tests/fixtures/video_short_480p.mp4 new file: packages/tests/fixtures/video_short_4k.mp4 new file: packages/tests/fixtures/video_short_720p.m3u8 new file: packages/tests/fixtures/video_short_720p.mp4 new file: packages/tests/fixtures/video_short_fake.webm new file: packages/tests/fixtures/video_short_mp3_256k.mp4 new file: packages/tests/fixtures/video_short_no_audio.mp4 new file: packages/tests/fixtures/video_very_long_10p.mp4 new file: packages/tests/fixtures/video_very_short_240p.mp4 new file: packages/tests/package.json new file: packages/tests/requirements.txt new file: packages/tests/src/api/activitypub/cleaner.ts new file: packages/tests/src/api/activitypub/client.ts new file: packages/tests/src/api/activitypub/fetch.ts new file: packages/tests/src/api/activitypub/index.ts new file: packages/tests/src/api/activitypub/refresher.ts new file: packages/tests/src/api/activitypub/security.ts new file: packages/tests/src/api/check-params/abuses.ts new file: packages/tests/src/api/check-params/accounts.ts new file: packages/tests/src/api/check-params/auto-tags.ts new file: packages/tests/src/api/check-params/blocklist.ts new file: packages/tests/src/api/check-params/bulk.ts new file: packages/tests/src/api/check-params/channel-import-videos.ts new file: packages/tests/src/api/check-params/config.ts new file: packages/tests/src/api/check-params/contact-form.ts new file: packages/tests/src/api/check-params/custom-pages.ts new file: packages/tests/src/api/check-params/debug.ts new file: packages/tests/src/api/check-params/follows.ts new file: packages/tests/src/api/check-params/generate-download.ts new file: packages/tests/src/api/check-params/index.ts new file: packages/tests/src/api/check-params/jobs.ts new file: packages/tests/src/api/check-params/live.ts new file: packages/tests/src/api/check-params/logs.ts new file: packages/tests/src/api/check-params/metrics.ts new file: packages/tests/src/api/check-params/my-user.ts new file: packages/tests/src/api/check-params/plugins.ts new file: packages/tests/src/api/check-params/redundancy.ts new file: packages/tests/src/api/check-params/registrations.ts new file: packages/tests/src/api/check-params/runners.ts new file: packages/tests/src/api/check-params/search.ts new file: packages/tests/src/api/check-params/services.ts new file: packages/tests/src/api/check-params/transcoding.ts new file: packages/tests/src/api/check-params/two-factor.ts new file: packages/tests/src/api/check-params/upload-quota.ts new file: packages/tests/src/api/check-params/user-export.ts new file: packages/tests/src/api/check-params/user-import.ts new file: packages/tests/src/api/check-params/user-notifications.ts new file: packages/tests/src/api/check-params/user-subscriptions.ts new file: packages/tests/src/api/check-params/users-admin.ts new file: packages/tests/src/api/check-params/users-emails.ts new file: packages/tests/src/api/check-params/video-blacklist.ts new file: packages/tests/src/api/check-params/video-captions.ts new file: packages/tests/src/api/check-params/video-channel-syncs.ts new file: packages/tests/src/api/check-params/video-channels.ts new file: packages/tests/src/api/check-params/video-chapters.ts new file: packages/tests/src/api/check-params/video-comments.ts new file: packages/tests/src/api/check-params/video-files.ts new file: packages/tests/src/api/check-params/video-imports.ts new file: packages/tests/src/api/check-params/video-passwords.ts new file: packages/tests/src/api/check-params/video-playlists.ts new file: packages/tests/src/api/check-params/video-source.ts new file: packages/tests/src/api/check-params/video-storyboards.ts new file: packages/tests/src/api/check-params/video-studio.ts new file: packages/tests/src/api/check-params/video-token.ts new file: packages/tests/src/api/check-params/video-transcription.ts new file: packages/tests/src/api/check-params/videos-common-filters.ts new file: packages/tests/src/api/check-params/videos-history.ts new file: packages/tests/src/api/check-params/videos-overviews.ts new file: packages/tests/src/api/check-params/videos.ts new file: packages/tests/src/api/check-params/views.ts new file: packages/tests/src/api/check-params/watched-words.ts new file: packages/tests/src/api/live/index.ts new file: packages/tests/src/api/live/live-audio-or-video-only.ts new file: packages/tests/src/api/live/live-constraints.ts new file: packages/tests/src/api/live/live-fast-restream.ts new file: packages/tests/src/api/live/live-permanent.ts new file: packages/tests/src/api/live/live-privacy-update.ts new file: packages/tests/src/api/live/live-rtmps.ts new file: packages/tests/src/api/live/live-save-replay.ts new file: packages/tests/src/api/live/live-socket-messages.ts new file: packages/tests/src/api/live/live.ts new file: packages/tests/src/api/moderation/abuses.ts new file: packages/tests/src/api/moderation/automatic-tags.ts new file: packages/tests/src/api/moderation/blocklist-notification.ts new file: packages/tests/src/api/moderation/blocklist.ts new file: packages/tests/src/api/moderation/comment-approval.ts new file: packages/tests/src/api/moderation/index.ts new file: packages/tests/src/api/moderation/video-blacklist.ts new file: packages/tests/src/api/moderation/watched-words.ts new file: packages/tests/src/api/notifications/admin-notifications.ts new file: packages/tests/src/api/notifications/caption-notifications.ts new file: packages/tests/src/api/notifications/comments-notifications.ts new file: packages/tests/src/api/notifications/index.ts new file: packages/tests/src/api/notifications/moderation-notifications.ts new file: packages/tests/src/api/notifications/notifications-api.ts new file: packages/tests/src/api/notifications/registrations-notifications.ts new file: packages/tests/src/api/notifications/user-notifications.ts new file: packages/tests/src/api/object-storage/index.ts new file: packages/tests/src/api/object-storage/live.ts new file: packages/tests/src/api/object-storage/video-imports.ts new file: packages/tests/src/api/object-storage/video-static-file-privacy.ts new file: packages/tests/src/api/object-storage/videos.ts new file: packages/tests/src/api/redundancy/index.ts new file: packages/tests/src/api/redundancy/manage-redundancy.ts new file: packages/tests/src/api/redundancy/redundancy-constraints.ts new file: packages/tests/src/api/redundancy/redundancy.ts new file: packages/tests/src/api/runners/index.ts new file: packages/tests/src/api/runners/runner-common.ts new file: packages/tests/src/api/runners/runner-live-transcoding.ts new file: packages/tests/src/api/runners/runner-socket.ts new file: packages/tests/src/api/runners/runner-studio-transcoding.ts new file: packages/tests/src/api/runners/runner-transcription.ts new file: packages/tests/src/api/runners/runner-vod-transcoding.ts new file: packages/tests/src/api/search/index.ts new file: packages/tests/src/api/search/search-activitypub-video-channels.ts new file: packages/tests/src/api/search/search-activitypub-video-playlists.ts new file: packages/tests/src/api/search/search-activitypub-videos.ts new file: packages/tests/src/api/search/search-channels.ts new file: packages/tests/src/api/search/search-index.ts new file: packages/tests/src/api/search/search-playlists.ts new file: packages/tests/src/api/search/search-videos.ts new file: packages/tests/src/api/server/auto-follows.ts new file: packages/tests/src/api/server/bulk.ts new file: packages/tests/src/api/server/config-defaults.ts new file: packages/tests/src/api/server/config.ts new file: packages/tests/src/api/server/contact-form.ts new file: packages/tests/src/api/server/email.ts new file: packages/tests/src/api/server/follow-constraints.ts new file: packages/tests/src/api/server/follows-moderation.ts new file: packages/tests/src/api/server/follows.ts new file: packages/tests/src/api/server/handle-down.ts new file: packages/tests/src/api/server/homepage.ts new file: packages/tests/src/api/server/index.ts new file: packages/tests/src/api/server/jobs.ts new file: packages/tests/src/api/server/logs.ts new file: packages/tests/src/api/server/no-client.ts new file: packages/tests/src/api/server/open-telemetry.ts new file: packages/tests/src/api/server/plugins.ts new file: packages/tests/src/api/server/proxy.ts new file: packages/tests/src/api/server/reverse-proxy.ts new file: packages/tests/src/api/server/services.ts new file: packages/tests/src/api/server/slow-follows.ts new file: packages/tests/src/api/server/ssrf.ts new file: packages/tests/src/api/server/stats.ts new file: packages/tests/src/api/server/tracker.ts new file: packages/tests/src/api/transcoding/audio-only.ts new file: packages/tests/src/api/transcoding/create-transcoding.ts new file: packages/tests/src/api/transcoding/hls.ts new file: packages/tests/src/api/transcoding/index.ts new file: packages/tests/src/api/transcoding/split-audio-and-video.ts new file: packages/tests/src/api/transcoding/transcoder-limits.ts new file: packages/tests/src/api/transcoding/transcoder.ts new file: packages/tests/src/api/transcoding/update-while-transcoding.ts new file: packages/tests/src/api/transcoding/video-studio.ts new file: packages/tests/src/api/users/index.ts new file: packages/tests/src/api/users/oauth.ts new file: packages/tests/src/api/users/registrations.ts new file: packages/tests/src/api/users/two-factor.ts new file: packages/tests/src/api/users/user-export.ts new file: packages/tests/src/api/users/user-import.ts new file: packages/tests/src/api/users/user-subscriptions.ts new file: packages/tests/src/api/users/user-videos.ts new file: packages/tests/src/api/users/users-email-verification.ts new file: packages/tests/src/api/users/users-multiple-servers.ts new file: packages/tests/src/api/users/users.ts new file: packages/tests/src/api/videos/channel-import-videos.ts new file: packages/tests/src/api/videos/generate-download.ts new file: packages/tests/src/api/videos/index.ts new file: packages/tests/src/api/videos/multiple-servers.ts new file: packages/tests/src/api/videos/resumable-upload.ts new file: packages/tests/src/api/videos/single-server.ts new file: packages/tests/src/api/videos/video-captions.ts new file: packages/tests/src/api/videos/video-change-ownership.ts new file: packages/tests/src/api/videos/video-channel-syncs.ts new file: packages/tests/src/api/videos/video-channels.ts new file: packages/tests/src/api/videos/video-chapters.ts new file: packages/tests/src/api/videos/video-comments.ts new file: packages/tests/src/api/videos/video-description.ts new file: packages/tests/src/api/videos/video-files.ts new file: packages/tests/src/api/videos/video-imports.ts new file: packages/tests/src/api/videos/video-nsfw.ts new file: packages/tests/src/api/videos/video-passwords.ts new file: packages/tests/src/api/videos/video-playlist-thumbnails.ts new file: packages/tests/src/api/videos/video-playlists.ts new file: packages/tests/src/api/videos/video-privacy.ts new file: packages/tests/src/api/videos/video-schedule-update.ts new file: packages/tests/src/api/videos/video-source.ts new file: packages/tests/src/api/videos/video-static-file-privacy.ts new file: packages/tests/src/api/videos/video-storyboard.ts new file: packages/tests/src/api/videos/video-transcription.ts new file: packages/tests/src/api/videos/videos-common-filters.ts new file: packages/tests/src/api/videos/videos-history.ts new file: packages/tests/src/api/videos/videos-overview.ts new file: packages/tests/src/api/views/index.ts new file: packages/tests/src/api/views/video-views-counter.ts new file: packages/tests/src/api/views/video-views-overall-stats.ts new file: packages/tests/src/api/views/video-views-retention-stats.ts new file: packages/tests/src/api/views/video-views-timeserie-stats.ts new file: packages/tests/src/api/views/videos-views-cleaner.ts new file: packages/tests/src/cli/create-generate-storyboard-job.ts new file: packages/tests/src/cli/create-import-video-file-job.ts new file: packages/tests/src/cli/create-move-video-storage-job.ts new file: packages/tests/src/cli/house-keeping.ts new file: packages/tests/src/cli/index.ts new file: packages/tests/src/cli/peertube.ts new file: packages/tests/src/cli/plugins.ts new file: packages/tests/src/cli/prune-storage.ts new file: packages/tests/src/cli/regenerate-thumbnails.ts new file: packages/tests/src/cli/reset-password.ts new file: packages/tests/src/cli/update-host.ts new file: packages/tests/src/cli/update-object-storage-url.ts new file: packages/tests/src/client/embed-html.ts new file: packages/tests/src/client/index-html.ts new file: packages/tests/src/client/index.ts new file: packages/tests/src/client/oembed.ts new file: packages/tests/src/client/og-twitter-tags.ts new file: packages/tests/src/core-utils/date.ts new file: packages/tests/src/external-plugins/akismet.ts new file: packages/tests/src/external-plugins/auth-ldap.ts new file: packages/tests/src/external-plugins/auto-block-videos.ts new file: packages/tests/src/external-plugins/auto-mute.ts new file: packages/tests/src/external-plugins/index.ts new file: packages/tests/src/external-plugins/privacy-remover.ts new file: packages/tests/src/feeds/feeds.ts new file: packages/tests/src/feeds/index.ts new file: packages/tests/src/jiwer/jiwer-cli.spec.ts new file: packages/tests/src/misc-endpoints.ts new file: packages/tests/src/nginx.ts new file: packages/tests/src/peertube-runner/client-cli.ts new file: packages/tests/src/peertube-runner/index.ts new file: packages/tests/src/peertube-runner/live-transcoding.ts new file: packages/tests/src/peertube-runner/replace-file.ts new file: packages/tests/src/peertube-runner/studio-transcoding.ts new file: packages/tests/src/peertube-runner/video-transcription.ts new file: packages/tests/src/peertube-runner/vod-transcoding.ts new file: packages/tests/src/plugins/action-hooks.ts new file: packages/tests/src/plugins/external-auth.ts new file: packages/tests/src/plugins/filter-hooks.ts new file: packages/tests/src/plugins/html-injection.ts new file: packages/tests/src/plugins/id-and-pass-auth.ts new file: packages/tests/src/plugins/index.ts new file: packages/tests/src/plugins/plugin-helpers.ts new file: packages/tests/src/plugins/plugin-router.ts new file: packages/tests/src/plugins/plugin-settings.ts new file: packages/tests/src/plugins/plugin-storage.ts new file: packages/tests/src/plugins/plugin-transcoding.ts new file: packages/tests/src/plugins/plugin-unloading.ts new file: packages/tests/src/plugins/plugin-websocket.ts new file: packages/tests/src/plugins/translations.ts new file: packages/tests/src/plugins/video-constants.ts new file: packages/tests/src/server-helpers/activitypub.ts new file: packages/tests/src/server-helpers/core-utils.ts new file: packages/tests/src/server-helpers/crypto.ts new file: packages/tests/src/server-helpers/dns.ts new file: packages/tests/src/server-helpers/image.ts new file: packages/tests/src/server-helpers/index.ts new file: packages/tests/src/server-helpers/markdown.ts new file: packages/tests/src/server-helpers/mentions.ts new file: packages/tests/src/server-helpers/regexp.ts new file: packages/tests/src/server-helpers/request.ts new file: packages/tests/src/server-helpers/validator.ts new file: packages/tests/src/server-helpers/version.ts new file: packages/tests/src/server-lib/index.ts new file: packages/tests/src/server-lib/video-constant-registry-factory.ts new file: packages/tests/src/shared/actors.ts new file: packages/tests/src/shared/captions.ts new file: packages/tests/src/shared/checks.ts new file: packages/tests/src/shared/client.ts new file: packages/tests/src/shared/common.ts new file: packages/tests/src/shared/directories.ts new file: packages/tests/src/shared/fixture-urls.ts new file: packages/tests/src/shared/generate.ts new file: packages/tests/src/shared/import-export.ts new file: packages/tests/src/shared/live.ts new file: packages/tests/src/shared/mock-servers/index.ts new file: packages/tests/src/shared/mock-servers/mock-429.ts new file: packages/tests/src/shared/mock-servers/mock-email.ts new file: packages/tests/src/shared/mock-servers/mock-http.ts new file: packages/tests/src/shared/mock-servers/mock-instances-index.ts new file: packages/tests/src/shared/mock-servers/mock-joinpeertube-versions.ts new file: packages/tests/src/shared/mock-servers/mock-object-storage.ts new file: packages/tests/src/shared/mock-servers/mock-plugin-blocklist.ts new file: packages/tests/src/shared/mock-servers/mock-proxy.ts new file: packages/tests/src/shared/mock-servers/shared.ts new file: packages/tests/src/shared/notifications.ts new file: packages/tests/src/shared/peertube-runner-process.ts new file: packages/tests/src/shared/plugins.ts new file: packages/tests/src/shared/requests.ts new file: packages/tests/src/shared/sql-command.ts new file: packages/tests/src/shared/streaming-playlists.ts new file: packages/tests/src/shared/tracker.ts new file: packages/tests/src/shared/transcription.ts new file: packages/tests/src/shared/video-playlists.ts new file: packages/tests/src/shared/videos.ts new file: packages/tests/src/shared/views.ts new file: packages/tests/src/shared/webtorrent.ts new file: packages/tests/src/transcription/levenshtein-distance.spec.ts new file: packages/tests/src/transcription/subtitle.spec.ts new file: packages/tests/src/transcription/transcriber-factory.spec.ts new file: packages/tests/src/transcription/transcript/transcript-file-evaluator.spec.ts new file: packages/tests/src/transcription/transcript/transcript-file.spec.ts new file: packages/tests/src/transcription/utils.spec.ts new file: packages/tests/src/transcription/whisper/openai-transcriber.spec.ts new file: packages/tests/src/transcription/whisper/whisper-ctranslate2.spec.ts new file: packages/tests/tsconfig.json new file: packages/transcription-devtools/README.md new file: packages/transcription-devtools/package.json new file: packages/transcription-devtools/requirements.txt new file: packages/transcription-devtools/src/benchmark.ts new file: packages/transcription-devtools/src/index.ts new file: packages/transcription-devtools/src/jiwer-cli.ts new file: packages/transcription-devtools/src/levenshtein.ts new file: packages/transcription-devtools/src/transcript-file-evaluator-interface.ts new file: packages/transcription-devtools/src/transcript-file-evaluator.ts new file: packages/transcription-devtools/src/utils.ts new file: packages/transcription-devtools/tsconfig.json new file: packages/transcription/README.md new file: packages/transcription/package.json new file: packages/transcription/src/abstract-transcriber.ts new file: packages/transcription/src/index.ts new file: packages/transcription/src/subtitle.ts new file: packages/transcription/src/transcriber-factory.ts new file: packages/transcription/src/transcript-file.ts new file: packages/transcription/src/transcription-engine.ts new file: packages/transcription/src/transcription-model.ts new file: packages/transcription/src/transcription-run.ts new file: packages/transcription/src/whisper/engines.ts new file: packages/transcription/src/whisper/index.ts new file: packages/transcription/src/whisper/transcriber/ctranslate2-transcriber.ts new file: packages/transcription/src/whisper/transcriber/index.ts new file: packages/transcription/src/whisper/transcriber/openai-transcriber.ts new file: packages/transcription/src/whisper/whisper-builtin-model.ts new file: packages/transcription/tsconfig.json new file: packages/transcription/tsconfig.types.json new file: packages/types-generator/README.md new file: packages/types-generator/generate-package.ts new file: packages/types-generator/package.json new file: packages/types-generator/rollup.config.js new file: packages/types-generator/src/client/index.ts new file: packages/types-generator/src/client/tsconfig.types.json new file: packages/types-generator/src/index.ts new file: packages/types-generator/tests/test.ts new file: packages/types-generator/tsconfig.dist-tmp.json new file: packages/types-generator/tsconfig.json new file: packages/types-generator/tsconfig.types.json new file: packages/typescript-utils/package.json new file: packages/typescript-utils/src/index.ts new file: packages/typescript-utils/src/types.ts new file: packages/typescript-utils/tsconfig.json new file: packages/typescript-utils/tsconfig.types.json new file: scripts/benchmark.ts new file: scripts/build/client.sh new file: scripts/build/embed.sh new file: scripts/build/index.sh new file: scripts/build/peertube-cli.sh new file: scripts/build/peertube-runner.sh new file: scripts/build/server.sh new file: scripts/build/tests.sh new file: scripts/ci.sh new file: scripts/clean/client/index.sh new file: scripts/clean/server/test.sh new file: scripts/client-build-stats.ts new file: scripts/client-report.sh new file: scripts/dev/client.sh new file: scripts/dev/embed.sh new file: scripts/dev/index.sh new file: scripts/dev/peertube-cli.sh new file: scripts/dev/peertube-runner.sh new file: scripts/dev/server.sh new file: scripts/e2e/browserstack.sh new file: scripts/e2e/local.sh new file: scripts/generate-code-contributors.ts new file: scripts/i18n/create-custom-files.ts new file: scripts/i18n/update.sh new file: scripts/nightly.sh new file: scripts/openapi-clients.sh new file: scripts/openapi-peertube-version.sh new file: scripts/release-embed-api.sh new file: scripts/release.sh new file: scripts/simulate-many-viewers-worker.js new file: scripts/simulate-many-viewers-worker.ts new file: scripts/simulate-many-viewers.ts new file: scripts/test.sh new file: scripts/tsconfig.json new file: scripts/upgrade.sh new file: server/core/assets/default-audio-background.jpg new file: server/core/assets/email-templates/abuse-new-message/html.pug new file: server/core/assets/email-templates/abuse-state-change/html.pug new file: server/core/assets/email-templates/account-abuse-new/html.pug new file: server/core/assets/email-templates/common/base.pug new file: server/core/assets/email-templates/common/greetings.pug new file: server/core/assets/email-templates/common/html.pug new file: server/core/assets/email-templates/common/mixins.pug new file: server/core/assets/email-templates/contact-form/html.pug new file: server/core/assets/email-templates/follower-on-channel/html.pug new file: server/core/assets/email-templates/password-create/html.pug new file: server/core/assets/email-templates/password-reset/html.pug new file: server/core/assets/email-templates/peertube-version-new/html.pug new file: server/core/assets/email-templates/plugin-version-new/html.pug new file: server/core/assets/email-templates/user-export-completed/html.pug new file: server/core/assets/email-templates/user-export-errored/html.pug new file: server/core/assets/email-templates/user-import-completed/html.pug new file: server/core/assets/email-templates/user-import-errored/html.pug new file: server/core/assets/email-templates/user-registered/html.pug new file: server/core/assets/email-templates/user-registration-request-accepted/html.pug new file: server/core/assets/email-templates/user-registration-request-rejected/html.pug new file: server/core/assets/email-templates/user-registration-request/html.pug new file: server/core/assets/email-templates/verify-email/html.pug new file: server/core/assets/email-templates/video-abuse-new/html.pug new file: server/core/assets/email-templates/video-auto-blacklist-new/html.pug new file: server/core/assets/email-templates/video-comment-abuse-new/html.pug new file: server/core/assets/email-templates/video-comment-mention/html.pug new file: server/core/assets/email-templates/video-comment-new/html.pug new file: server/core/controllers/activitypub/client.ts new file: server/core/controllers/activitypub/inbox.ts new file: server/core/controllers/activitypub/index.ts new file: server/core/controllers/activitypub/outbox.ts new file: server/core/controllers/activitypub/utils.ts new file: server/core/controllers/api/abuse.ts new file: server/core/controllers/api/accounts.ts new file: server/core/controllers/api/automatic-tags.ts new file: server/core/controllers/api/blocklist.ts new file: server/core/controllers/api/bulk.ts new file: server/core/controllers/api/config.ts new file: server/core/controllers/api/custom-page.ts new file: server/core/controllers/api/index.ts new file: server/core/controllers/api/jobs.ts new file: server/core/controllers/api/metrics.ts new file: server/core/controllers/api/oauth-clients.ts new file: server/core/controllers/api/overviews.ts new file: server/core/controllers/api/plugins.ts new file: server/core/controllers/api/runners/index.ts new file: server/core/controllers/api/runners/jobs-files.ts new file: server/core/controllers/api/runners/jobs.ts new file: server/core/controllers/api/runners/manage-runners.ts new file: server/core/controllers/api/runners/registration-tokens.ts new file: server/core/controllers/api/search/index.ts new file: server/core/controllers/api/search/search-video-channels.ts new file: server/core/controllers/api/search/search-video-playlists.ts new file: server/core/controllers/api/search/search-videos.ts new file: server/core/controllers/api/search/shared/index.ts new file: server/core/controllers/api/search/shared/utils.ts new file: server/core/controllers/api/server/contact.ts new file: server/core/controllers/api/server/debug.ts new file: server/core/controllers/api/server/follows.ts new file: server/core/controllers/api/server/index.ts new file: server/core/controllers/api/server/logs.ts new file: server/core/controllers/api/server/redundancy.ts new file: server/core/controllers/api/server/server-blocklist.ts new file: server/core/controllers/api/server/stats.ts new file: server/core/controllers/api/users/email-verification.ts new file: server/core/controllers/api/users/index.ts new file: server/core/controllers/api/users/me.ts new file: server/core/controllers/api/users/my-abuses.ts new file: server/core/controllers/api/users/my-blocklist.ts new file: server/core/controllers/api/users/my-history.ts new file: server/core/controllers/api/users/my-notifications.ts new file: server/core/controllers/api/users/my-subscriptions.ts new file: server/core/controllers/api/users/my-video-playlists.ts new file: server/core/controllers/api/users/registrations.ts new file: server/core/controllers/api/users/token.ts new file: server/core/controllers/api/users/two-factor.ts new file: server/core/controllers/api/users/user-exports.ts new file: server/core/controllers/api/users/user-imports.ts new file: server/core/controllers/api/video-channel-sync.ts new file: server/core/controllers/api/video-channel.ts new file: server/core/controllers/api/video-playlist.ts new file: server/core/controllers/api/videos/blacklist.ts new file: server/core/controllers/api/videos/captions.ts new file: server/core/controllers/api/videos/chapters.ts new file: server/core/controllers/api/videos/comment.ts new file: server/core/controllers/api/videos/files.ts new file: server/core/controllers/api/videos/import.ts new file: server/core/controllers/api/videos/index.ts new file: server/core/controllers/api/videos/live.ts new file: server/core/controllers/api/videos/ownership.ts new file: server/core/controllers/api/videos/passwords.ts new file: server/core/controllers/api/videos/rate.ts new file: server/core/controllers/api/videos/source.ts new file: server/core/controllers/api/videos/stats.ts new file: server/core/controllers/api/videos/storyboard.ts new file: server/core/controllers/api/videos/studio.ts new file: server/core/controllers/api/videos/token.ts new file: server/core/controllers/api/videos/transcoding.ts new file: server/core/controllers/api/videos/update.ts new file: server/core/controllers/api/videos/upload.ts new file: server/core/controllers/api/videos/view.ts new file: server/core/controllers/api/watched-words.ts new file: server/core/controllers/client.ts new file: server/core/controllers/download.ts new file: server/core/controllers/feeds/comment-feeds.ts new file: server/core/controllers/feeds/index.ts new file: server/core/controllers/feeds/shared/common-feed-utils.ts new file: server/core/controllers/feeds/shared/index.ts new file: server/core/controllers/feeds/shared/video-feed-utils.ts new file: server/core/controllers/feeds/video-feeds.ts new file: server/core/controllers/feeds/video-podcast-feeds.ts new file: server/core/controllers/index.ts new file: server/core/controllers/lazy-static.ts new file: server/core/controllers/misc.ts new file: server/core/controllers/object-storage-proxy.ts new file: server/core/controllers/plugins.ts new file: server/core/controllers/services.ts new file: server/core/controllers/shared/m3u8-playlist.ts new file: server/core/controllers/sitemap.ts new file: server/core/controllers/static.ts new file: server/core/controllers/tracker.ts new file: server/core/controllers/well-known.ts new file: server/core/helpers/activity-pub-utils.ts new file: server/core/helpers/actors.ts new file: server/core/helpers/audit-logger.ts new file: server/core/helpers/captions-utils.ts new file: server/core/helpers/core-utils.ts new file: server/core/helpers/custom-jsonld-signature.ts new file: server/core/helpers/custom-validators/abuses.ts new file: server/core/helpers/custom-validators/accounts.ts new file: server/core/helpers/custom-validators/activitypub/activity.ts new file: server/core/helpers/custom-validators/activitypub/actor.ts new file: server/core/helpers/custom-validators/activitypub/cache-file.ts new file: server/core/helpers/custom-validators/activitypub/misc.ts new file: server/core/helpers/custom-validators/activitypub/playlist.ts new file: server/core/helpers/custom-validators/activitypub/signature.ts new file: server/core/helpers/custom-validators/activitypub/video-chapters.ts new file: server/core/helpers/custom-validators/activitypub/video-comments.ts new file: server/core/helpers/custom-validators/activitypub/videos.ts new file: server/core/helpers/custom-validators/activitypub/watch-action.ts new file: server/core/helpers/custom-validators/actor-images.ts new file: server/core/helpers/custom-validators/bulk.ts new file: server/core/helpers/custom-validators/feeds.ts new file: server/core/helpers/custom-validators/follows.ts new file: server/core/helpers/custom-validators/jobs.ts new file: server/core/helpers/custom-validators/logs.ts new file: server/core/helpers/custom-validators/metrics.ts new file: server/core/helpers/custom-validators/misc.ts new file: server/core/helpers/custom-validators/plugins.ts new file: server/core/helpers/custom-validators/runners/jobs.ts new file: server/core/helpers/custom-validators/runners/runners.ts new file: server/core/helpers/custom-validators/search.ts new file: server/core/helpers/custom-validators/servers.ts new file: server/core/helpers/custom-validators/user-notifications.ts new file: server/core/helpers/custom-validators/user-registration.ts new file: server/core/helpers/custom-validators/users.ts new file: server/core/helpers/custom-validators/video-blacklist.ts new file: server/core/helpers/custom-validators/video-captions.ts new file: server/core/helpers/custom-validators/video-channel-syncs.ts new file: server/core/helpers/custom-validators/video-channels.ts new file: server/core/helpers/custom-validators/video-chapters.ts new file: server/core/helpers/custom-validators/video-comments.ts new file: server/core/helpers/custom-validators/video-imports.ts new file: server/core/helpers/custom-validators/video-lives.ts new file: server/core/helpers/custom-validators/video-ownership.ts new file: server/core/helpers/custom-validators/video-playlists.ts new file: server/core/helpers/custom-validators/video-rates.ts new file: server/core/helpers/custom-validators/video-redundancies.ts new file: server/core/helpers/custom-validators/video-stats.ts new file: server/core/helpers/custom-validators/video-studio.ts new file: server/core/helpers/custom-validators/video-transcoding.ts new file: server/core/helpers/custom-validators/video-view.ts new file: server/core/helpers/custom-validators/videos.ts new file: server/core/helpers/custom-validators/watched-words.ts new file: server/core/helpers/custom-validators/webfinger.ts new file: server/core/helpers/database-utils.ts new file: server/core/helpers/debounce.ts new file: server/core/helpers/decache.ts new file: server/core/helpers/dns.ts new file: server/core/helpers/express-utils.ts new file: server/core/helpers/ffmpeg/codecs.ts new file: server/core/helpers/ffmpeg/ffmpeg-image.ts new file: server/core/helpers/ffmpeg/ffmpeg-options.ts new file: server/core/helpers/ffmpeg/framerate.ts new file: server/core/helpers/ffmpeg/index.ts new file: server/core/helpers/fs.ts new file: server/core/helpers/geo-ip.ts new file: server/core/helpers/hpagent.ts new file: server/core/helpers/image-utils.ts new file: server/core/helpers/logger.ts new file: server/core/helpers/markdown.ts new file: server/core/helpers/memoize.ts new file: server/core/helpers/mentions.ts new file: server/core/helpers/otp.ts new file: server/core/helpers/peertube-crypto.ts new file: server/core/helpers/peertube-jsonld.ts new file: server/core/helpers/promise-cache.ts new file: server/core/helpers/proxy.ts new file: server/core/helpers/query.ts new file: server/core/helpers/regexp.ts new file: server/core/helpers/requests.ts new file: server/core/helpers/stream-replacer.ts new file: server/core/helpers/threads.ts new file: server/core/helpers/token-generator.ts new file: server/core/helpers/unzip.ts new file: server/core/helpers/upload.ts new file: server/core/helpers/utils.ts new file: server/core/helpers/version.ts new file: server/core/helpers/video.ts new file: server/core/helpers/webtorrent.ts new file: server/core/initializers/checker-after-init.ts new file: server/core/initializers/checker-before-init.ts new file: server/core/initializers/config.ts new file: server/core/initializers/constants.ts new file: server/core/initializers/database.ts new file: server/core/initializers/installer.ts new file: server/core/initializers/migrations/0505-user-last-login-date.ts new file: server/core/initializers/migrations/0510-video-file-metadata.ts new file: server/core/initializers/migrations/0515-video-abuse-reason-timestamps.ts new file: server/core/initializers/migrations/0520-abuses-split.ts new file: server/core/initializers/migrations/0525-abuse-messages.ts new file: server/core/initializers/migrations/0530-playlist-multiple-video.ts new file: server/core/initializers/migrations/0535-video-live.ts new file: server/core/initializers/migrations/0540-video-file-infohash.ts new file: server/core/initializers/migrations/0545-video-live-save-replay.ts new file: server/core/initializers/migrations/0550-actor-follow-cleanup.ts new file: server/core/initializers/migrations/0555-actor-follow-url.ts new file: server/core/initializers/migrations/0560-user-feed-token.ts new file: server/core/initializers/migrations/0565-actor-follow-local-url.ts new file: server/core/initializers/migrations/0570-permanent-live.ts new file: server/core/initializers/migrations/0575-duplicate-thumbnail.ts new file: server/core/initializers/migrations/0580-caption-filename.ts new file: server/core/initializers/migrations/0585-video-file-names.ts new file: server/core/initializers/migrations/0590-trackers.ts new file: server/core/initializers/migrations/0595-remote-url.ts new file: server/core/initializers/migrations/0600-duplicate-video-files.ts new file: server/core/initializers/migrations/0605-actor-missing-keys.ts new file: server/core/initializers/migrations/0610-views-index copy.ts new file: server/core/initializers/migrations/0612-captions-unique.ts new file: server/core/initializers/migrations/0615-latest-versions-notification-settings.ts new file: server/core/initializers/migrations/0620-latest-versions-application.ts new file: server/core/initializers/migrations/0625-latest-versions-notification.ts new file: server/core/initializers/migrations/0630-banner.ts new file: server/core/initializers/migrations/0635-actor-image-size.ts new file: server/core/initializers/migrations/0640-unique-keys.ts new file: server/core/initializers/migrations/0645-actor-remote-creation-date.ts new file: server/core/initializers/migrations/0650-actor-custom-pages.ts new file: server/core/initializers/migrations/0655-streaming-playlist-filenames.ts new file: server/core/initializers/migrations/0660-object-storage.ts new file: server/core/initializers/migrations/0665-no-account-warning-modal.ts new file: server/core/initializers/migrations/0670-pending-job-default.ts new file: server/core/initializers/migrations/0675-p2p-enabled.ts new file: server/core/initializers/migrations/0680-files-storage-default.ts new file: server/core/initializers/migrations/0685-multiple-actor-images.ts new file: server/core/initializers/migrations/0690-live-latency-mode.ts new file: server/core/initializers/migrations/0695-remove-remote-rates.ts new file: server/core/initializers/migrations/0700-edition-finished-notification.ts new file: server/core/initializers/migrations/0705-local-video-viewers.ts new file: server/core/initializers/migrations/0710-live-sessions.ts new file: server/core/initializers/migrations/0715-video-source.ts new file: server/core/initializers/migrations/0720-session-ending-processed.ts new file: server/core/initializers/migrations/0725-node-version.ts new file: server/core/initializers/migrations/0730-video-channel-sync.ts new file: server/core/initializers/migrations/0735-video-channel-sync-import-foreign-key.ts new file: server/core/initializers/migrations/0740-fix-old-enums.ts new file: server/core/initializers/migrations/0745-user-otp.ts new file: server/core/initializers/migrations/0750-user-registration.ts new file: server/core/initializers/migrations/0755-unique-viewer-url.ts new file: server/core/initializers/migrations/0760-video-live-replay-setting.ts new file: server/core/initializers/migrations/0765-remote-transcoding.ts new file: server/core/initializers/migrations/0770-actor-preferred-username.ts new file: server/core/initializers/migrations/0775-add-user-is-email-public.ts new file: server/core/initializers/migrations/0780-notification-registration.ts new file: server/core/initializers/migrations/0785-video-password-protection.ts new file: server/core/initializers/migrations/0790-thumbnail-disk.ts new file: server/core/initializers/migrations/0795-duplicate-runner-name.ts new file: server/core/initializers/migrations/0800-video-replace-file.ts new file: server/core/initializers/migrations/0805-viewer-subdivision.ts new file: server/core/initializers/migrations/0810-user-export.ts new file: server/core/initializers/migrations/0815-user-import.ts new file: server/core/initializers/migrations/0820-abuse-registration-stats.ts new file: server/core/initializers/migrations/0825-video-ratio.ts new file: server/core/initializers/migrations/0830-keep-original-file.ts new file: server/core/initializers/migrations/0835-video-source-size.ts new file: server/core/initializers/migrations/0840-user-export-size.ts new file: server/core/initializers/migrations/0845-auto-tags.ts new file: server/core/initializers/migrations/0850-streaming-playlist-sha-nullable.ts new file: server/core/initializers/migrations/0855-transcription.ts new file: server/core/initializers/migrations/0860-caption-generated.ts new file: server/core/initializers/migrations/0865-video-file-streams.ts new file: server/core/initializers/migrator.ts new file: server/core/lib/activitypub/activity.ts new file: server/core/lib/activitypub/actors/get.ts new file: server/core/lib/activitypub/actors/image.ts new file: server/core/lib/activitypub/actors/index.ts new file: server/core/lib/activitypub/actors/keys.ts new file: server/core/lib/activitypub/actors/refresh.ts new file: server/core/lib/activitypub/actors/shared/creator.ts new file: server/core/lib/activitypub/actors/shared/index.ts new file: server/core/lib/activitypub/actors/shared/object-to-model-attributes.ts new file: server/core/lib/activitypub/actors/shared/url-to-object.ts new file: server/core/lib/activitypub/actors/updater.ts new file: server/core/lib/activitypub/actors/webfinger.ts new file: server/core/lib/activitypub/audience.ts new file: server/core/lib/activitypub/cache-file.ts new file: server/core/lib/activitypub/collection.ts new file: server/core/lib/activitypub/context.ts new file: server/core/lib/activitypub/crawl.ts new file: server/core/lib/activitypub/follow.ts new file: server/core/lib/activitypub/inbox-manager.ts new file: server/core/lib/activitypub/local-video-viewer.ts new file: server/core/lib/activitypub/outbox.ts new file: server/core/lib/activitypub/playlists/create-update.ts new file: server/core/lib/activitypub/playlists/get.ts new file: server/core/lib/activitypub/playlists/index.ts new file: server/core/lib/activitypub/playlists/refresh.ts new file: server/core/lib/activitypub/playlists/shared/index.ts new file: server/core/lib/activitypub/playlists/shared/object-to-model-attributes.ts new file: server/core/lib/activitypub/playlists/shared/url-to-object.ts new file: server/core/lib/activitypub/process/index.ts new file: server/core/lib/activitypub/process/process-accept.ts new file: server/core/lib/activitypub/process/process-announce.ts new file: server/core/lib/activitypub/process/process-create.ts new file: server/core/lib/activitypub/process/process-delete.ts new file: server/core/lib/activitypub/process/process-dislike.ts new file: server/core/lib/activitypub/process/process-flag.ts new file: server/core/lib/activitypub/process/process-follow.ts new file: server/core/lib/activitypub/process/process-like.ts new file: server/core/lib/activitypub/process/process-reject.ts new file: server/core/lib/activitypub/process/process-reply-approval.ts new file: server/core/lib/activitypub/process/process-undo.ts new file: server/core/lib/activitypub/process/process-update.ts new file: server/core/lib/activitypub/process/process-view.ts new file: server/core/lib/activitypub/process/process.ts new file: server/core/lib/activitypub/send/http.ts new file: server/core/lib/activitypub/send/index.ts new file: server/core/lib/activitypub/send/send-accept.ts new file: server/core/lib/activitypub/send/send-announce.ts new file: server/core/lib/activitypub/send/send-create.ts new file: server/core/lib/activitypub/send/send-delete.ts new file: server/core/lib/activitypub/send/send-dislike.ts new file: server/core/lib/activitypub/send/send-flag.ts new file: server/core/lib/activitypub/send/send-follow.ts new file: server/core/lib/activitypub/send/send-like.ts new file: server/core/lib/activitypub/send/send-reject.ts new file: server/core/lib/activitypub/send/send-reply-approval.ts new file: server/core/lib/activitypub/send/send-undo.ts new file: server/core/lib/activitypub/send/send-update.ts new file: server/core/lib/activitypub/send/send-view.ts new file: server/core/lib/activitypub/send/shared/audience-utils.ts new file: server/core/lib/activitypub/send/shared/index.ts new file: server/core/lib/activitypub/send/shared/send-utils.ts new file: server/core/lib/activitypub/share.ts new file: server/core/lib/activitypub/url.ts new file: server/core/lib/activitypub/video-chapters.ts new file: server/core/lib/activitypub/video-comments.ts new file: server/core/lib/activitypub/video-rates.ts new file: server/core/lib/activitypub/videos/federate.ts new file: server/core/lib/activitypub/videos/get.ts new file: server/core/lib/activitypub/videos/index.ts new file: server/core/lib/activitypub/videos/refresh.ts new file: server/core/lib/activitypub/videos/shared/abstract-builder.ts new file: server/core/lib/activitypub/videos/shared/creator.ts new file: server/core/lib/activitypub/videos/shared/index.ts new file: server/core/lib/activitypub/videos/shared/object-to-model-attributes.ts new file: server/core/lib/activitypub/videos/shared/trackers.ts new file: server/core/lib/activitypub/videos/shared/url-to-object.ts new file: server/core/lib/activitypub/videos/shared/video-sync-attributes.ts new file: server/core/lib/activitypub/videos/updater.ts new file: server/core/lib/actor-follow-health-cache.ts new file: server/core/lib/auth/external-auth.ts new file: server/core/lib/auth/oauth-model.ts new file: server/core/lib/auth/oauth.ts new file: server/core/lib/auth/tokens-cache.ts new file: server/core/lib/automatic-tags/automatic-tagger.ts new file: server/core/lib/automatic-tags/automatic-tags.ts new file: server/core/lib/blocklist.ts new file: server/core/lib/emailer.ts new file: server/core/lib/files-cache/avatar-permanent-file-cache.ts new file: server/core/lib/files-cache/index.ts new file: server/core/lib/files-cache/shared/abstract-permanent-file-cache.ts new file: server/core/lib/files-cache/shared/abstract-simple-file-cache.ts new file: server/core/lib/files-cache/shared/index.ts new file: server/core/lib/files-cache/video-captions-simple-file-cache.ts new file: server/core/lib/files-cache/video-miniature-permanent-file-cache.ts new file: server/core/lib/files-cache/video-previews-simple-file-cache.ts new file: server/core/lib/files-cache/video-storyboards-simple-file-cache.ts new file: server/core/lib/files-cache/video-torrents-simple-file-cache.ts new file: server/core/lib/hls.ts new file: server/core/lib/html/client-html.ts new file: server/core/lib/html/shared/actor-html.ts new file: server/core/lib/html/shared/common-embed-html.ts new file: server/core/lib/html/shared/index.ts new file: server/core/lib/html/shared/page-html.ts new file: server/core/lib/html/shared/playlist-html.ts new file: server/core/lib/html/shared/tags-html.ts new file: server/core/lib/html/shared/video-html.ts new file: server/core/lib/internal-event-emitter.ts new file: server/core/lib/job-queue/handlers/activitypub-cleaner.ts new file: server/core/lib/job-queue/handlers/activitypub-follow.ts new file: server/core/lib/job-queue/handlers/activitypub-http-broadcast.ts new file: server/core/lib/job-queue/handlers/activitypub-http-fetcher.ts new file: server/core/lib/job-queue/handlers/activitypub-http-unicast.ts new file: server/core/lib/job-queue/handlers/activitypub-refresher.ts new file: server/core/lib/job-queue/handlers/actor-keys.ts new file: server/core/lib/job-queue/handlers/after-video-channel-import.ts new file: server/core/lib/job-queue/handlers/create-user-export.ts new file: server/core/lib/job-queue/handlers/email.ts new file: server/core/lib/job-queue/handlers/federate-video.ts new file: server/core/lib/job-queue/handlers/generate-storyboard.ts new file: server/core/lib/job-queue/handlers/import-user-archive.ts new file: server/core/lib/job-queue/handlers/manage-video-torrent.ts new file: server/core/lib/job-queue/handlers/move-to-file-system.ts new file: server/core/lib/job-queue/handlers/move-to-object-storage.ts new file: server/core/lib/job-queue/handlers/notify.ts new file: server/core/lib/job-queue/handlers/shared/move-video.ts new file: server/core/lib/job-queue/handlers/transcoding-job-builder.ts new file: server/core/lib/job-queue/handlers/video-channel-import.ts new file: server/core/lib/job-queue/handlers/video-file-import.ts new file: server/core/lib/job-queue/handlers/video-import.ts new file: server/core/lib/job-queue/handlers/video-live-ending.ts new file: server/core/lib/job-queue/handlers/video-redundancy.ts new file: server/core/lib/job-queue/handlers/video-studio-edition.ts new file: server/core/lib/job-queue/handlers/video-transcoding.ts new file: server/core/lib/job-queue/handlers/video-transcription.ts new file: server/core/lib/job-queue/handlers/video-views-stats.ts new file: server/core/lib/job-queue/index.ts new file: server/core/lib/job-queue/job-queue.ts new file: server/core/lib/live/index.ts new file: server/core/lib/live/live-manager.ts new file: server/core/lib/live/live-quota-store.ts new file: server/core/lib/live/live-segment-sha-store.ts new file: server/core/lib/live/live-utils.ts new file: server/core/lib/live/shared/index.ts new file: server/core/lib/live/shared/muxing-session.ts new file: server/core/lib/live/shared/transcoding-wrapper/abstract-transcoding-wrapper.ts new file: server/core/lib/live/shared/transcoding-wrapper/ffmpeg-transcoding-wrapper.ts new file: server/core/lib/live/shared/transcoding-wrapper/index.ts new file: server/core/lib/live/shared/transcoding-wrapper/remote-transcoding-wrapper.ts new file: server/core/lib/local-actor.ts new file: server/core/lib/local-video-creator.ts new file: server/core/lib/model-loaders/actor.ts new file: server/core/lib/model-loaders/index.ts new file: server/core/lib/model-loaders/video.ts new file: server/core/lib/moderation.ts new file: server/core/lib/notifier/index.ts new file: server/core/lib/notifier/notifier.ts new file: server/core/lib/notifier/shared/abuse/abstract-new-abuse-message.ts new file: server/core/lib/notifier/shared/abuse/abuse-state-change-for-reporter.ts new file: server/core/lib/notifier/shared/abuse/index.ts new file: server/core/lib/notifier/shared/abuse/new-abuse-for-moderators.ts new file: server/core/lib/notifier/shared/abuse/new-abuse-message-for-moderators.ts new file: server/core/lib/notifier/shared/abuse/new-abuse-message-for-reporter.ts new file: server/core/lib/notifier/shared/blacklist/index.ts new file: server/core/lib/notifier/shared/blacklist/new-auto-blacklist-for-moderators.ts new file: server/core/lib/notifier/shared/blacklist/new-blacklist-for-owner.ts new file: server/core/lib/notifier/shared/blacklist/unblacklist-for-owner.ts new file: server/core/lib/notifier/shared/caption/index.ts new file: server/core/lib/notifier/shared/caption/video-transcription-generated-for-owner.ts new file: server/core/lib/notifier/shared/comment/comment-mention.ts new file: server/core/lib/notifier/shared/comment/index.ts new file: server/core/lib/notifier/shared/comment/new-comment-for-video-owner.ts new file: server/core/lib/notifier/shared/common/abstract-notification.ts new file: server/core/lib/notifier/shared/common/index.ts new file: server/core/lib/notifier/shared/follow/auto-follow-for-instance.ts new file: server/core/lib/notifier/shared/follow/follow-for-instance.ts new file: server/core/lib/notifier/shared/follow/follow-for-user.ts new file: server/core/lib/notifier/shared/follow/index.ts new file: server/core/lib/notifier/shared/index.ts new file: server/core/lib/notifier/shared/instance/direct-registration-for-moderators.ts new file: server/core/lib/notifier/shared/instance/index.ts new file: server/core/lib/notifier/shared/instance/new-peertube-version-for-admins.ts new file: server/core/lib/notifier/shared/instance/new-plugin-version-for-admins.ts new file: server/core/lib/notifier/shared/instance/registration-request-for-moderators.ts new file: server/core/lib/notifier/shared/video-publication/abstract-owned-video-publication.ts new file: server/core/lib/notifier/shared/video-publication/import-finished-for-owner.ts new file: server/core/lib/notifier/shared/video-publication/index.ts new file: server/core/lib/notifier/shared/video-publication/new-video-or-live-for-subscribers.ts new file: server/core/lib/notifier/shared/video-publication/owned-publication-after-auto-unblacklist.ts new file: server/core/lib/notifier/shared/video-publication/owned-publication-after-schedule-update.ts new file: server/core/lib/notifier/shared/video-publication/owned-publication-after-transcoding.ts new file: server/core/lib/notifier/shared/video-publication/studio-edition-finished-for-owner.ts new file: server/core/lib/object-storage/index.ts new file: server/core/lib/object-storage/keys.ts new file: server/core/lib/object-storage/object-storage-helpers.ts new file: server/core/lib/object-storage/pre-signed-urls.ts new file: server/core/lib/object-storage/proxy.ts new file: server/core/lib/object-storage/shared/client.ts new file: server/core/lib/object-storage/shared/index.ts new file: server/core/lib/object-storage/shared/logger.ts new file: server/core/lib/object-storage/urls.ts new file: server/core/lib/object-storage/user-export.ts new file: server/core/lib/object-storage/videos.ts new file: server/core/lib/opentelemetry/metric-helpers/bittorrent-tracker-observers-builder.ts new file: server/core/lib/opentelemetry/metric-helpers/index.ts new file: server/core/lib/opentelemetry/metric-helpers/job-queue-observers-builder.ts new file: server/core/lib/opentelemetry/metric-helpers/lives-observers-builder.ts new file: server/core/lib/opentelemetry/metric-helpers/nodejs-observers-builder.ts new file: server/core/lib/opentelemetry/metric-helpers/playback-metrics.ts new file: server/core/lib/opentelemetry/metric-helpers/stats-observers-builder.ts new file: server/core/lib/opentelemetry/metric-helpers/viewers-observers-builder.ts new file: server/core/lib/opentelemetry/metric-helpers/worker-threads-observers.ts new file: server/core/lib/opentelemetry/metrics.ts new file: server/core/lib/opentelemetry/tracing.ts new file: server/core/lib/paths.ts new file: server/core/lib/peertube-socket.ts new file: server/core/lib/plugins/hooks.ts new file: server/core/lib/plugins/plugin-helpers-builder.ts new file: server/core/lib/plugins/plugin-index.ts new file: server/core/lib/plugins/plugin-manager.ts new file: server/core/lib/plugins/register-helpers.ts new file: server/core/lib/plugins/theme-utils.ts new file: server/core/lib/plugins/video-constant-manager-factory.ts new file: server/core/lib/plugins/yarn.ts new file: server/core/lib/rate.ts new file: server/core/lib/redis.ts new file: server/core/lib/redundancy.ts new file: server/core/lib/runners/index.ts new file: server/core/lib/runners/job-handlers/abstract-job-handler.ts new file: server/core/lib/runners/job-handlers/abstract-vod-transcoding-job-handler.ts new file: server/core/lib/runners/job-handlers/index.ts new file: server/core/lib/runners/job-handlers/live-rtmp-hls-transcoding-job-handler.ts new file: server/core/lib/runners/job-handlers/runner-job-handlers.ts new file: server/core/lib/runners/job-handlers/shared/utils.ts new file: server/core/lib/runners/job-handlers/transcription-job-handler.ts new file: server/core/lib/runners/job-handlers/video-studio-transcoding-job-handler.ts new file: server/core/lib/runners/job-handlers/vod-audio-merge-transcoding-job-handler.ts new file: server/core/lib/runners/job-handlers/vod-hls-transcoding-job-handler.ts new file: server/core/lib/runners/job-handlers/vod-web-video-transcoding-job-handler.ts new file: server/core/lib/runners/runner-urls.ts new file: server/core/lib/runners/runner.ts new file: server/core/lib/schedulers/abstract-scheduler.ts new file: server/core/lib/schedulers/actor-follow-scheduler.ts new file: server/core/lib/schedulers/auto-follow-index-instances.ts new file: server/core/lib/schedulers/geo-ip-update-scheduler.ts new file: server/core/lib/schedulers/peertube-version-check-scheduler.ts new file: server/core/lib/schedulers/plugins-check-scheduler.ts new file: server/core/lib/schedulers/remove-dangling-resumable-uploads-scheduler.ts new file: server/core/lib/schedulers/remove-expired-user-exports-scheduler.ts new file: server/core/lib/schedulers/remove-old-history-scheduler.ts new file: server/core/lib/schedulers/remove-old-views-scheduler.ts new file: server/core/lib/schedulers/runner-job-watch-dog-scheduler.ts new file: server/core/lib/schedulers/update-videos-scheduler.ts new file: server/core/lib/schedulers/video-channel-sync-latest-scheduler.ts new file: server/core/lib/schedulers/video-views-buffer-scheduler.ts new file: server/core/lib/schedulers/videos-redundancy-scheduler.ts new file: server/core/lib/schedulers/youtube-dl-update-scheduler.ts new file: server/core/lib/search.ts new file: server/core/lib/server-config-manager.ts new file: server/core/lib/signup.ts new file: server/core/lib/stat-manager.ts new file: server/core/lib/sync-channel.ts new file: server/core/lib/thumbnail.ts new file: server/core/lib/timeserie.ts new file: server/core/lib/transcoding/create-transcoding-job.ts new file: server/core/lib/transcoding/default-transcoding-profiles.ts new file: server/core/lib/transcoding/ended-transcoding.ts new file: server/core/lib/transcoding/hls-transcoding.ts new file: server/core/lib/transcoding/shared/ffmpeg-builder.ts new file: server/core/lib/transcoding/shared/index.ts new file: server/core/lib/transcoding/shared/job-builders/abstract-job-builder.ts new file: server/core/lib/transcoding/shared/job-builders/index.ts new file: server/core/lib/transcoding/shared/job-builders/transcoding-job-queue-builder.ts new file: server/core/lib/transcoding/shared/job-builders/transcoding-runner-job-builder.ts new file: server/core/lib/transcoding/transcoding-priority.ts new file: server/core/lib/transcoding/transcoding-quick-transcode.ts new file: server/core/lib/transcoding/transcoding-resolutions.ts new file: server/core/lib/transcoding/web-transcoding.ts new file: server/core/lib/uploadx.ts new file: server/core/lib/user-import-export/exporters/abstract-user-exporter.ts new file: server/core/lib/user-import-export/exporters/account-exporter.ts new file: server/core/lib/user-import-export/exporters/actor-exporter.ts new file: server/core/lib/user-import-export/exporters/auto-tag-policies.ts new file: server/core/lib/user-import-export/exporters/blocklist-exporter.ts new file: server/core/lib/user-import-export/exporters/channels-exporter.ts new file: server/core/lib/user-import-export/exporters/comments-exporter.ts new file: server/core/lib/user-import-export/exporters/dislikes-exporter.ts new file: server/core/lib/user-import-export/exporters/followers-exporter.ts new file: server/core/lib/user-import-export/exporters/following-exporter.ts new file: server/core/lib/user-import-export/exporters/index.ts new file: server/core/lib/user-import-export/exporters/likes-exporter.ts new file: server/core/lib/user-import-export/exporters/user-settings-exporter.ts new file: server/core/lib/user-import-export/exporters/user-video-history-exporter.ts new file: server/core/lib/user-import-export/exporters/video-playlists-exporter.ts new file: server/core/lib/user-import-export/exporters/videos-exporter.ts new file: server/core/lib/user-import-export/exporters/watched-words-lists-exporter.ts new file: server/core/lib/user-import-export/importers/abstract-rates-importer.ts new file: server/core/lib/user-import-export/importers/abstract-user-importer.ts new file: server/core/lib/user-import-export/importers/account-blocklist-importer.ts new file: server/core/lib/user-import-export/importers/account-importer.ts new file: server/core/lib/user-import-export/importers/channels-importer.ts new file: server/core/lib/user-import-export/importers/dislikes-importer.ts new file: server/core/lib/user-import-export/importers/following-importer.ts new file: server/core/lib/user-import-export/importers/index.ts new file: server/core/lib/user-import-export/importers/likes-importer.ts new file: server/core/lib/user-import-export/importers/review-comments-tag-policies-importer.ts new file: server/core/lib/user-import-export/importers/user-settings-importer.ts new file: server/core/lib/user-import-export/importers/user-video-history-importer.ts new file: server/core/lib/user-import-export/importers/video-playlists-importer.ts new file: server/core/lib/user-import-export/importers/videos-importer.ts new file: server/core/lib/user-import-export/importers/watched-words-lists-importer.ts new file: server/core/lib/user-import-export/user-exporter.ts new file: server/core/lib/user-import-export/user-importer.ts new file: server/core/lib/user.ts new file: server/core/lib/video-blacklist.ts new file: server/core/lib/video-captions.ts new file: server/core/lib/video-channel.ts new file: server/core/lib/video-chapters.ts new file: server/core/lib/video-comment.ts new file: server/core/lib/video-file.ts new file: server/core/lib/video-jobs.ts new file: server/core/lib/video-path-manager.ts new file: server/core/lib/video-playlist.ts new file: server/core/lib/video-pre-import.ts new file: server/core/lib/video-privacy.ts new file: server/core/lib/video-state.ts new file: server/core/lib/video-studio.ts new file: server/core/lib/video-tokens-manager.ts new file: server/core/lib/video-urls.ts new file: server/core/lib/video.ts new file: server/core/lib/views/shared/index.ts new file: server/core/lib/views/shared/video-viewer-counters.ts new file: server/core/lib/views/shared/video-viewer-stats.ts new file: server/core/lib/views/shared/video-views.ts new file: server/core/lib/views/video-views-manager.ts new file: server/core/lib/worker/parent-process.ts new file: server/core/lib/worker/workers/build-digest.ts new file: server/core/lib/worker/workers/get-image-size.ts new file: server/core/lib/worker/workers/http-broadcast.ts new file: server/core/lib/worker/workers/http-unicast.ts new file: server/core/lib/worker/workers/image-downloader.ts new file: server/core/lib/worker/workers/image-processor.ts new file: server/core/lib/worker/workers/sign-json-ld-object.ts new file: server/core/middlewares/activitypub.ts new file: server/core/middlewares/async.ts new file: server/core/middlewares/auth.ts new file: server/core/middlewares/cache/cache.ts new file: server/core/middlewares/cache/index.ts new file: server/core/middlewares/cache/shared/api-cache.ts new file: server/core/middlewares/cache/shared/index.ts new file: server/core/middlewares/csp.ts new file: server/core/middlewares/dnt.ts new file: server/core/middlewares/doc.ts new file: server/core/middlewares/error.ts new file: server/core/middlewares/express.ts new file: server/core/middlewares/index.ts new file: server/core/middlewares/pagination.ts new file: server/core/middlewares/rate-limiter.ts new file: server/core/middlewares/servers.ts new file: server/core/middlewares/sort.ts new file: server/core/middlewares/user-right.ts new file: server/core/middlewares/validators/abuse.ts new file: server/core/middlewares/validators/account.ts new file: server/core/middlewares/validators/activitypub/activity.ts new file: server/core/middlewares/validators/activitypub/index.ts new file: server/core/middlewares/validators/activitypub/pagination.ts new file: server/core/middlewares/validators/activitypub/signature.ts new file: server/core/middlewares/validators/actor-image.ts new file: server/core/middlewares/validators/automatic-tags.ts new file: server/core/middlewares/validators/blocklist.ts new file: server/core/middlewares/validators/bulk.ts new file: server/core/middlewares/validators/config.ts new file: server/core/middlewares/validators/express.ts new file: server/core/middlewares/validators/feeds.ts new file: server/core/middlewares/validators/follows.ts new file: server/core/middlewares/validators/index.ts new file: server/core/middlewares/validators/jobs.ts new file: server/core/middlewares/validators/logs.ts new file: server/core/middlewares/validators/metrics.ts new file: server/core/middlewares/validators/object-storage-proxy.ts new file: server/core/middlewares/validators/oembed.ts new file: server/core/middlewares/validators/pagination.ts new file: server/core/middlewares/validators/plugins.ts new file: server/core/middlewares/validators/redundancy.ts new file: server/core/middlewares/validators/resumable-upload.ts new file: server/core/middlewares/validators/runners/index.ts new file: server/core/middlewares/validators/runners/job-files.ts new file: server/core/middlewares/validators/runners/jobs.ts new file: server/core/middlewares/validators/runners/registration-token.ts new file: server/core/middlewares/validators/runners/runners.ts new file: server/core/middlewares/validators/search.ts new file: server/core/middlewares/validators/server.ts new file: server/core/middlewares/validators/shared/abuses.ts new file: server/core/middlewares/validators/shared/accounts.ts new file: server/core/middlewares/validators/shared/index.ts new file: server/core/middlewares/validators/shared/users.ts new file: server/core/middlewares/validators/shared/utils.ts new file: server/core/middlewares/validators/shared/video-blacklists.ts new file: server/core/middlewares/validators/shared/video-captions.ts new file: server/core/middlewares/validators/shared/video-channel-syncs.ts new file: server/core/middlewares/validators/shared/video-channels.ts new file: server/core/middlewares/validators/shared/video-comments.ts new file: server/core/middlewares/validators/shared/video-imports.ts new file: server/core/middlewares/validators/shared/video-ownerships.ts new file: server/core/middlewares/validators/shared/video-passwords.ts new file: server/core/middlewares/validators/shared/video-playlists.ts new file: server/core/middlewares/validators/shared/videos.ts new file: server/core/middlewares/validators/sort.ts new file: server/core/middlewares/validators/static.ts new file: server/core/middlewares/validators/themes.ts new file: server/core/middlewares/validators/two-factor.ts new file: server/core/middlewares/validators/users/index.ts new file: server/core/middlewares/validators/users/shared/index.ts new file: server/core/middlewares/validators/users/shared/user-registrations.ts new file: server/core/middlewares/validators/users/user-email-verification.ts new file: server/core/middlewares/validators/users/user-exports.ts new file: server/core/middlewares/validators/users/user-history.ts new file: server/core/middlewares/validators/users/user-import.ts new file: server/core/middlewares/validators/users/user-notifications.ts new file: server/core/middlewares/validators/users/user-registrations.ts new file: server/core/middlewares/validators/users/user-subscriptions.ts new file: server/core/middlewares/validators/users/users.ts new file: server/core/middlewares/validators/videos/index.ts new file: server/core/middlewares/validators/videos/shared/index.ts new file: server/core/middlewares/validators/videos/shared/upload.ts new file: server/core/middlewares/validators/videos/shared/video-validators.ts new file: server/core/middlewares/validators/videos/video-blacklist.ts new file: server/core/middlewares/validators/videos/video-captions.ts new file: server/core/middlewares/validators/videos/video-channel-sync.ts new file: server/core/middlewares/validators/videos/video-channels.ts new file: server/core/middlewares/validators/videos/video-chapters.ts new file: server/core/middlewares/validators/videos/video-comments.ts new file: server/core/middlewares/validators/videos/video-files.ts new file: server/core/middlewares/validators/videos/video-imports.ts new file: server/core/middlewares/validators/videos/video-live.ts new file: server/core/middlewares/validators/videos/video-ownership-changes.ts new file: server/core/middlewares/validators/videos/video-passwords.ts new file: server/core/middlewares/validators/videos/video-playlists.ts new file: server/core/middlewares/validators/videos/video-rates.ts new file: server/core/middlewares/validators/videos/video-shares.ts new file: server/core/middlewares/validators/videos/video-source.ts new file: server/core/middlewares/validators/videos/video-stats.ts new file: server/core/middlewares/validators/videos/video-studio.ts new file: server/core/middlewares/validators/videos/video-token.ts new file: server/core/middlewares/validators/videos/video-transcoding.ts new file: server/core/middlewares/validators/videos/video-view.ts new file: server/core/middlewares/validators/videos/videos.ts new file: server/core/middlewares/validators/watched-words.ts new file: server/core/middlewares/validators/webfinger.ts new file: server/core/models/abuse/abuse-message.ts new file: server/core/models/abuse/abuse.ts new file: server/core/models/abuse/sql/abuse-query-builder.ts new file: server/core/models/abuse/video-abuse.ts new file: server/core/models/abuse/video-comment-abuse.ts new file: server/core/models/account/account-blocklist.ts new file: server/core/models/account/account-video-rate.ts new file: server/core/models/account/account.ts new file: server/core/models/account/actor-custom-page.ts new file: server/core/models/actor/actor-follow.ts new file: server/core/models/actor/actor-image.ts new file: server/core/models/actor/actor.ts new file: server/core/models/actor/sql/instance-list-followers-query-builder.ts new file: server/core/models/actor/sql/instance-list-following-query-builder.ts new file: server/core/models/actor/sql/shared/actor-follow-table-attributes.ts new file: server/core/models/actor/sql/shared/instance-list-follows-query-builder.ts new file: server/core/models/application/application.ts new file: server/core/models/automatic-tag/account-automatic-tag-policy.ts new file: server/core/models/automatic-tag/automatic-tag.ts new file: server/core/models/automatic-tag/comment-automatic-tag.ts new file: server/core/models/automatic-tag/video-automatic-tag.ts new file: server/core/models/oauth/oauth-client.ts new file: server/core/models/oauth/oauth-token.ts new file: server/core/models/redundancy/video-redundancy.ts new file: server/core/models/runner/runner-job.ts new file: server/core/models/runner/runner-registration-token.ts new file: server/core/models/runner/runner.ts new file: server/core/models/server/plugin.ts new file: server/core/models/server/server-blocklist.ts new file: server/core/models/server/server.ts new file: server/core/models/server/tracker.ts new file: server/core/models/server/video-tracker.ts new file: server/core/models/shared/abstract-run-query.ts new file: server/core/models/shared/index.ts new file: server/core/models/shared/model-builder.ts new file: server/core/models/shared/model-cache.ts new file: server/core/models/shared/query.ts new file: server/core/models/shared/sequelize-helpers.ts new file: server/core/models/shared/sequelize-type.ts new file: server/core/models/shared/sort.ts new file: server/core/models/shared/sql.ts new file: server/core/models/shared/update.ts new file: server/core/models/user/sql/user-notitication-list-query-builder.ts new file: server/core/models/user/user-export.ts new file: server/core/models/user/user-import.ts new file: server/core/models/user/user-notification-setting.ts new file: server/core/models/user/user-notification.ts new file: server/core/models/user/user-registration.ts new file: server/core/models/user/user-video-history.ts new file: server/core/models/user/user.ts new file: server/core/models/video/formatter/index.ts new file: server/core/models/video/formatter/shared/index.ts new file: server/core/models/video/formatter/shared/video-format-utils.ts new file: server/core/models/video/formatter/video-activity-pub-format.ts new file: server/core/models/video/formatter/video-api-format.ts new file: server/core/models/video/schedule-video-update.ts new file: server/core/models/video/sql/comment/video-comment-list-query-builder.ts new file: server/core/models/video/sql/comment/video-comment-table-attributes.ts new file: server/core/models/video/sql/video/index.ts new file: server/core/models/video/sql/video/shared/abstract-video-query-builder.ts new file: server/core/models/video/sql/video/shared/video-file-query-builder.ts new file: server/core/models/video/sql/video/shared/video-model-builder.ts new file: server/core/models/video/sql/video/shared/video-table-attributes.ts new file: server/core/models/video/sql/video/video-model-get-query-builder.ts new file: server/core/models/video/sql/video/videos-id-list-query-builder.ts new file: server/core/models/video/sql/video/videos-model-list-query-builder.ts new file: server/core/models/video/storyboard.ts new file: server/core/models/video/tag.ts new file: server/core/models/video/thumbnail.ts new file: server/core/models/video/video-blacklist.ts new file: server/core/models/video/video-caption.ts new file: server/core/models/video/video-change-ownership.ts new file: server/core/models/video/video-channel-sync.ts new file: server/core/models/video/video-channel.ts new file: server/core/models/video/video-chapter.ts new file: server/core/models/video/video-comment.ts new file: server/core/models/video/video-file.ts new file: server/core/models/video/video-import.ts new file: server/core/models/video/video-job-info.ts new file: server/core/models/video/video-live-replay-setting.ts new file: server/core/models/video/video-live-session.ts new file: server/core/models/video/video-live.ts new file: server/core/models/video/video-password.ts new file: server/core/models/video/video-playlist-element.ts new file: server/core/models/video/video-playlist.ts new file: server/core/models/video/video-share.ts new file: server/core/models/video/video-source.ts new file: server/core/models/video/video-streaming-playlist.ts new file: server/core/models/video/video-tag.ts new file: server/core/models/video/video.ts new file: server/core/models/view/local-video-viewer-watch-section.ts new file: server/core/models/view/local-video-viewer.ts new file: server/core/models/view/video-view.ts new file: server/core/models/watched-words/watched-words-list.ts new file: server/core/static/dnt-policy/dnt-policy-1.0.txt new file: server/core/types/activitypub-processor.model.ts new file: server/core/types/express-handler.ts new file: server/core/types/express.d.ts new file: server/core/types/index.ts new file: server/core/types/lib.d.ts new file: server/core/types/models/abuse/abuse-message.ts new file: server/core/types/models/abuse/abuse.ts new file: server/core/types/models/abuse/index.ts new file: server/core/types/models/account/account-blocklist.ts new file: server/core/types/models/account/account.ts new file: server/core/types/models/account/actor-custom-page.ts new file: server/core/types/models/account/index.ts new file: server/core/types/models/actor/actor-follow.ts new file: server/core/types/models/actor/actor-image.ts new file: server/core/types/models/actor/actor.ts new file: server/core/types/models/actor/index.ts new file: server/core/types/models/application/application.ts new file: server/core/types/models/application/index.ts new file: server/core/types/models/automatic-tag/account-automatic-tag-policy.ts new file: server/core/types/models/automatic-tag/automatic-tag.ts new file: server/core/types/models/automatic-tag/comment-automatic-tag.ts new file: server/core/types/models/automatic-tag/index.ts new file: server/core/types/models/automatic-tag/video-automatic-tag.ts new file: server/core/types/models/index.ts new file: server/core/types/models/oauth/index.ts new file: server/core/types/models/oauth/oauth-client.ts new file: server/core/types/models/oauth/oauth-token.ts new file: server/core/types/models/runners/index.ts new file: server/core/types/models/runners/runner-job.ts new file: server/core/types/models/runners/runner-registration-token.ts new file: server/core/types/models/runners/runner.ts new file: server/core/types/models/server/index.ts new file: server/core/types/models/server/plugin.ts new file: server/core/types/models/server/server-blocklist.ts new file: server/core/types/models/server/server.ts new file: server/core/types/models/server/tracker.ts new file: server/core/types/models/user/index.ts new file: server/core/types/models/user/user-export.ts new file: server/core/types/models/user/user-import.ts new file: server/core/types/models/user/user-notification-setting.ts new file: server/core/types/models/user/user-notification.ts new file: server/core/types/models/user/user-registration.ts new file: server/core/types/models/user/user-video-history.ts new file: server/core/types/models/user/user.ts new file: server/core/types/models/video/index.ts new file: server/core/types/models/video/local-video-viewer-watch-section.ts new file: server/core/types/models/video/local-video-viewer.ts new file: server/core/types/models/video/schedule-video-update.ts new file: server/core/types/models/video/storyboard.ts new file: server/core/types/models/video/tag.ts new file: server/core/types/models/video/thumbnail.ts new file: server/core/types/models/video/video-blacklist.ts new file: server/core/types/models/video/video-caption.ts new file: server/core/types/models/video/video-change-ownership.ts new file: server/core/types/models/video/video-channel-sync.ts new file: server/core/types/models/video/video-channel.ts new file: server/core/types/models/video/video-chapter.ts new file: server/core/types/models/video/video-comment.ts new file: server/core/types/models/video/video-file.ts new file: server/core/types/models/video/video-import.ts new file: server/core/types/models/video/video-password.ts new file: server/core/types/models/video/video-playlist-element.ts new file: server/core/types/models/video/video-playlist.ts new file: server/core/types/models/video/video-rate.ts new file: server/core/types/models/video/video-redundancy.ts new file: server/core/types/models/video/video-share.ts new file: server/core/types/models/video/video-source.ts new file: server/core/types/models/video/video-streaming-playlist.ts new file: server/core/types/models/video/video.ts new file: server/core/types/models/watched-words/index.ts new file: server/core/types/models/watched-words/watched-words-list.ts new file: server/core/types/plugins/index.ts new file: server/core/types/plugins/plugin-library.model.ts new file: server/core/types/plugins/register-server-auth.model.ts new file: server/core/types/plugins/register-server-option.model.ts new file: server/core/types/plugins/register-server-websocket-route.model.ts new file: server/core/types/sequelize.ts new file: server/package.json new file: server/scripts/create-generate-storyboard-job.ts new file: server/scripts/create-import-video-file-job.ts new file: server/scripts/create-move-video-storage-job.ts new file: server/scripts/house-keeping.ts new file: server/scripts/parse-log.ts new file: server/scripts/plugin/install.ts new file: server/scripts/plugin/uninstall.ts new file: server/scripts/prune-storage.ts new file: server/scripts/regenerate-thumbnails.ts new file: server/scripts/reset-password.ts new file: server/scripts/shared/common.ts new file: server/scripts/update-host.ts new file: server/scripts/update-object-storage-url.ts new file: server/scripts/upgrade.sh new file: server/server.ts new file: server/tsconfig.json new file: server/tsconfig.lib.json new file: server/tsconfig.types.json new file: support/doc/api/embeds.md new file: support/doc/api/openapi.yaml new file: support/doc/api/quickstart.md new file: support/doc/dependencies.md new file: support/doc/development/ci.md new file: support/doc/development/lib.md new file: support/doc/development/localization.md new file: support/doc/development/monitoring.md new file: support/doc/development/release.md new file: support/doc/development/server.md new file: support/doc/development/tests.md new file: support/doc/docker.md new file: support/doc/plugins/guide.md new file: support/doc/production.md new file: support/doc/tools.md new file: support/doc/translation.md new file: support/docker/gitpod/Dockerfile new file: support/docker/gitpod/setup_postgres.sql new file: support/docker/production/.env new file: support/docker/production/.gitignore new file: support/docker/production/Dockerfile.bookworm new file: support/docker/production/Dockerfile.nginx new file: support/docker/production/config/custom-environment-variables.yaml new file: support/docker/production/config/production.yaml new file: support/docker/production/docker-compose.yml new file: support/docker/production/entrypoint.nginx.sh new file: support/docker/production/entrypoint.sh new file: support/freebsd/peertube new file: support/init.d/peertube new file: support/nginx/peertube new file: support/openapi/go/README.mustache new file: support/openapi/go/def.yaml new file: support/openapi/kotlin/README.mustache new file: support/openapi/kotlin/def.yaml new file: support/openapi/python/README.mustache new file: support/openapi/python/def.yaml new file: support/sysctl.d/30-peertube-tcp.conf new file: support/systemd/peertube.service new file: tsconfig.base.json new file: tsconfig.eslint.json new file: yarn.lock
3 months ago
import bytes from 'bytes'
import { IConfig } from 'config'
import { createRequire } from 'module'
import { dirname, join } from 'path'
import {
BroadcastMessageLevel,
NSFWPolicyType,
VideoCommentPolicyType,
VideoPrivacyType,
VideoRedundancyConfigFilter,
VideosRedundancyStrategy
} from '@peertube/peertube-models'
import { decacheModule } from '@server/helpers/decache.js'
import { buildPath, root } from '@peertube/peertube-node-utils'
import { parseBytes, parseDurationToMs } from '../helpers/core-utils.js'
import { TranscriptionEngineName, WhisperBuiltinModelName } from '@peertube/peertube-transcription'
const require = createRequire(import.meta.url)
let config: IConfig = require('config')
const configChangedHandlers: Function[] = []
const CONFIG = {
CUSTOM_FILE: getLocalConfigFilePath(),
LISTEN: {
PORT: config.get<number>('listen.port'),
HOSTNAME: config.get<string>('listen.hostname')
},
SECRETS: {
PEERTUBE: config.get<string>('secrets.peertube')
},
DATABASE: {
DBNAME: config.has('database.name') ? config.get<string>('database.name') : 'peertube' + config.get<string>('database.suffix'),
HOSTNAME: config.get<string>('database.hostname'),
PORT: config.get<number>('database.port'),
SSL: config.get<boolean>('database.ssl'),
USERNAME: config.get<string>('database.username'),
PASSWORD: config.get<string>('database.password'),
POOL: {
MAX: config.get<number>('database.pool.max')
}
},
REDIS: {
HOSTNAME: config.has('redis.hostname') ? config.get<string>('redis.hostname') : null,
PORT: config.has('redis.port') ? config.get<number>('redis.port') : null,
SOCKET: config.has('redis.socket') ? config.get<string>('redis.socket') : null,
AUTH: config.has('redis.auth') ? config.get<string>('redis.auth') : null,
DB: config.has('redis.db') ? config.get<number>('redis.db') : null,
SENTINEL: {
ENABLED: config.has('redis.sentinel.enabled') ? config.get<boolean>('redis.sentinel.enabled') : false,
ENABLE_TLS: config.has('redis.sentinel.enable_tls') ? config.get<boolean>('redis.sentinel.enable_tls') : false,
SENTINELS: config.has('redis.sentinel.sentinels') ? config.get<{ hostname: string, port: number }[]>('redis.sentinel.sentinels') : [],
MASTER_NAME: config.has('redis.sentinel.master_name') ? config.get<string>('redis.sentinel.master_name') : null
}
},
SMTP: {
TRANSPORT: config.has('smtp.transport') ? config.get<string>('smtp.transport') : 'smtp',
SENDMAIL: config.has('smtp.sendmail') ? config.get<string>('smtp.sendmail') : null,
HOSTNAME: config.get<string>('smtp.hostname'),
PORT: config.get<number>('smtp.port'),
USERNAME: config.get<string>('smtp.username'),
PASSWORD: config.get<string>('smtp.password'),
TLS: config.get<boolean>('smtp.tls'),
DISABLE_STARTTLS: config.get<boolean>('smtp.disable_starttls'),
CA_FILE: config.get<string>('smtp.ca_file'),
FROM_ADDRESS: config.get<string>('smtp.from_address')
},
EMAIL: {
BODY: {
SIGNATURE: config.get<string>('email.body.signature')
},
SUBJECT: {
PREFIX: config.get<string>('email.subject.prefix') + ' '
}
},
CLIENT: {
VIDEOS: {
MINIATURE: {
get PREFER_AUTHOR_DISPLAY_NAME () { return config.get<boolean>('client.videos.miniature.prefer_author_display_name') }
},
RESUMABLE_UPLOAD: {
get MAX_CHUNK_SIZE () { return parseBytes(config.get<number>('client.videos.resumable_upload.max_chunk_size') || 0) }
}
},
MENU: {
LOGIN: {
get REDIRECT_ON_SINGLE_EXTERNAL_AUTH () { return config.get<boolean>('client.menu.login.redirect_on_single_external_auth') }
}
}
},
DEFAULTS: {
PUBLISH: {
DOWNLOAD_ENABLED: config.get<boolean>('defaults.publish.download_enabled'),
COMMENTS_POLICY: config.get<VideoCommentPolicyType>('defaults.publish.comments_policy'),
PRIVACY: config.get<VideoPrivacyType>('defaults.publish.privacy'),
LICENCE: config.get<number>('defaults.publish.licence')
},
P2P: {
WEBAPP: {
ENABLED: config.get<boolean>('defaults.p2p.webapp.enabled')
},
EMBED: {
ENABLED: config.get<boolean>('defaults.p2p.embed.enabled')
}
}
},
STORAGE: {
TMP_DIR: buildPath(config.get<string>('storage.tmp')),
TMP_PERSISTENT_DIR: buildPath(config.get<string>('storage.tmp_persistent')),
BIN_DIR: buildPath(config.get<string>('storage.bin')),
ACTOR_IMAGES_DIR: buildPath(config.get<string>('storage.avatars')),
LOG_DIR: buildPath(config.get<string>('storage.logs')),
WEB_VIDEOS_DIR: buildPath(config.get<string>('storage.web_videos')),
STREAMING_PLAYLISTS_DIR: buildPath(config.get<string>('storage.streaming_playlists')),
ORIGINAL_VIDEO_FILES_DIR: buildPath(config.get<string>('storage.original_video_files')),
REDUNDANCY_DIR: buildPath(config.get<string>('storage.redundancy')),
THUMBNAILS_DIR: buildPath(config.get<string>('storage.thumbnails')),
STORYBOARDS_DIR: buildPath(config.get<string>('storage.storyboards')),
PREVIEWS_DIR: buildPath(config.get<string>('storage.previews')),
CAPTIONS_DIR: buildPath(config.get<string>('storage.captions')),
TORRENTS_DIR: buildPath(config.get<string>('storage.torrents')),
CACHE_DIR: buildPath(config.get<string>('storage.cache')),
PLUGINS_DIR: buildPath(config.get<string>('storage.plugins')),
CLIENT_OVERRIDES_DIR: buildPath(config.get<string>('storage.client_overrides')),
WELL_KNOWN_DIR: buildPath(config.get<string>('storage.well_known'))
},
STATIC_FILES: {
PRIVATE_FILES_REQUIRE_AUTH: config.get<boolean>('static_files.private_files_require_auth')
},
OBJECT_STORAGE: {
ENABLED: config.get<boolean>('object_storage.enabled'),
MAX_UPLOAD_PART: bytes.parse(config.get<string>('object_storage.max_upload_part')),
MAX_REQUEST_ATTEMPTS: config.get<number>('object_storage.max_request_attempts'),
ENDPOINT: config.get<string>('object_storage.endpoint'),
REGION: config.get<string>('object_storage.region'),
UPLOAD_ACL: {
PUBLIC: config.get<string>('object_storage.upload_acl.public'),
PRIVATE: config.get<string>('object_storage.upload_acl.private')
},
CREDENTIALS: {
ACCESS_KEY_ID: config.get<string>('object_storage.credentials.access_key_id'),
SECRET_ACCESS_KEY: config.get<string>('object_storage.credentials.secret_access_key')
},
PROXY: {
PROXIFY_PRIVATE_FILES: config.get<boolean>('object_storage.proxy.proxify_private_files')
},
WEB_VIDEOS: {
BUCKET_NAME: config.get<string>('object_storage.web_videos.bucket_name'),
PREFIX: config.get<string>('object_storage.web_videos.prefix'),
BASE_URL: config.get<string>('object_storage.web_videos.base_url')
},
STREAMING_PLAYLISTS: {
BUCKET_NAME: config.get<string>('object_storage.streaming_playlists.bucket_name'),
PREFIX: config.get<string>('object_storage.streaming_playlists.prefix'),
BASE_URL: config.get<string>('object_storage.streaming_playlists.base_url'),
STORE_LIVE_STREAMS: config.get<string>('object_storage.streaming_playlists.store_live_streams')
},
USER_EXPORTS: {
BUCKET_NAME: config.get<string>('object_storage.user_exports.bucket_name'),
PREFIX: config.get<string>('object_storage.user_exports.prefix'),
BASE_URL: config.get<string>('object_storage.user_exports.base_url')
},
ORIGINAL_VIDEO_FILES: {
BUCKET_NAME: config.get<string>('object_storage.original_video_files.bucket_name'),
PREFIX: config.get<string>('object_storage.original_video_files.prefix'),
BASE_URL: config.get<string>('object_storage.original_video_files.base_url')
}
},
WEBSERVER: {
SCHEME: config.get<boolean>('webserver.https') === true ? 'https' : 'http',
WS: config.get<boolean>('webserver.https') === true ? 'wss' : 'ws',
HOSTNAME: config.get<string>('webserver.hostname'),
PORT: config.get<number>('webserver.port')
},
OAUTH2: {
TOKEN_LIFETIME: {
ACCESS_TOKEN: parseDurationToMs(config.get<string>('oauth2.token_lifetime.access_token')),
REFRESH_TOKEN: parseDurationToMs(config.get<string>('oauth2.token_lifetime.refresh_token'))
}
},
RATES_LIMIT: {
API: {
WINDOW_MS: parseDurationToMs(config.get<string>('rates_limit.api.window')),
MAX: config.get<number>('rates_limit.api.max')
},
SIGNUP: {
WINDOW_MS: parseDurationToMs(config.get<string>('rates_limit.signup.window')),
MAX: config.get<number>('rates_limit.signup.max')
},
LOGIN: {
WINDOW_MS: parseDurationToMs(config.get<string>('rates_limit.login.window')),
MAX: config.get<number>('rates_limit.login.max')
},
RECEIVE_CLIENT_LOG: {
WINDOW_MS: parseDurationToMs(config.get<string>('rates_limit.receive_client_log.window')),
MAX: config.get<number>('rates_limit.receive_client_log.max')
},
ASK_SEND_EMAIL: {
WINDOW_MS: parseDurationToMs(config.get<string>('rates_limit.ask_send_email.window')),
MAX: config.get<number>('rates_limit.ask_send_email.max')
},
PLUGINS: {
WINDOW_MS: parseDurationToMs(config.get<string>('rates_limit.plugins.window')),
MAX: config.get<number>('rates_limit.plugins.max')
},
WELL_KNOWN: {
WINDOW_MS: parseDurationToMs(config.get<string>('rates_limit.well_known.window')),
MAX: config.get<number>('rates_limit.well_known.max')
},
FEEDS: {
WINDOW_MS: parseDurationToMs(config.get<string>('rates_limit.feeds.window')),
MAX: config.get<number>('rates_limit.feeds.max')
},
ACTIVITY_PUB: {
WINDOW_MS: parseDurationToMs(config.get<string>('rates_limit.activity_pub.window')),
MAX: config.get<number>('rates_limit.activity_pub.max')
},
CLIENT: {
WINDOW_MS: parseDurationToMs(config.get<string>('rates_limit.client.window')),
MAX: config.get<number>('rates_limit.client.max')
},
DOWNLOAD_GENERATE_VIDEO: {
WINDOW_MS: parseDurationToMs(config.get<string>('rates_limit.download_generate_video.window')),
MAX: config.get<number>('rates_limit.download_generate_video.max')
}
},
TRUST_PROXY: config.get<string[]>('trust_proxy'),
LOG: {
LEVEL: config.get<string>('log.level'),
ROTATION: {
ENABLED: config.get<boolean>('log.rotation.enabled'),
MAX_FILE_SIZE: bytes.parse(config.get<string>('log.rotation.max_file_size')),
MAX_FILES: config.get<number>('log.rotation.max_files')
},
ANONYMIZE_IP: config.get<boolean>('log.anonymize_ip'),
LOG_PING_REQUESTS: config.get<boolean>('log.log_ping_requests'),
LOG_TRACKER_UNKNOWN_INFOHASH: config.get<boolean>('log.log_tracker_unknown_infohash'),
LOG_HTTP_REQUESTS: config.get<boolean>('log.log_http_requests'),
PRETTIFY_SQL: config.get<boolean>('log.prettify_sql'),
ACCEPT_CLIENT_LOG: config.get<boolean>('log.accept_client_log')
},
OPEN_TELEMETRY: {
METRICS: {
ENABLED: config.get<boolean>('open_telemetry.metrics.enabled'),
PLAYBACK_STATS_INTERVAL: parseDurationToMs(config.get<string>('open_telemetry.metrics.playback_stats_interval')),
HTTP_REQUEST_DURATION: {
ENABLED: config.get<boolean>('open_telemetry.metrics.http_request_duration.enabled')
},
PROMETHEUS_EXPORTER: {
HOSTNAME: config.get<string>('open_telemetry.metrics.prometheus_exporter.hostname'),
PORT: config.get<number>('open_telemetry.metrics.prometheus_exporter.port')
}
},
TRACING: {
ENABLED: config.get<boolean>('open_telemetry.tracing.enabled'),
JAEGER_EXPORTER: {
ENDPOINT: config.get<string>('open_telemetry.tracing.jaeger_exporter.endpoint')
}
}
},
TRENDING: {
VIDEOS: {
INTERVAL_DAYS: config.get<number>('trending.videos.interval_days'),
ALGORITHMS: {
get ENABLED () { return config.get<string[]>('trending.videos.algorithms.enabled') },
get DEFAULT () { return config.get<string>('trending.videos.algorithms.default') }
}
}
},
REDUNDANCY: {
VIDEOS: {
CHECK_INTERVAL: parseDurationToMs(config.get<string>('redundancy.videos.check_interval')),
STRATEGIES: buildVideosRedundancy(config.get<any[]>('redundancy.videos.strategies'))
}
},
REMOTE_REDUNDANCY: {
VIDEOS: {
ACCEPT_FROM: config.get<VideoRedundancyConfigFilter>('remote_redundancy.videos.accept_from')
}
},
CSP: {
ENABLED: config.get<boolean>('csp.enabled'),
REPORT_ONLY: config.get<boolean>('csp.report_only'),
REPORT_URI: config.get<string>('csp.report_uri')
},
SECURITY: {
FRAMEGUARD: {
ENABLED: config.get<boolean>('security.frameguard.enabled')
},
POWERED_BY_HEADER: {
ENABLED: config.get<boolean>('security.powered_by_header.enabled')
}
},
TRACKER: {
ENABLED: config.get<boolean>('tracker.enabled'),
PRIVATE: config.get<boolean>('tracker.private'),
REJECT_TOO_MANY_ANNOUNCES: config.get<boolean>('tracker.reject_too_many_announces')
},
HISTORY: {
VIDEOS: {
MAX_AGE: parseDurationToMs(config.get('history.videos.max_age'))
}
},
VIEWS: {
VIDEOS: {
REMOTE: {
MAX_AGE: parseDurationToMs(config.get('views.videos.remote.max_age'))
},
LOCAL_BUFFER_UPDATE_INTERVAL: parseDurationToMs(config.get('views.videos.local_buffer_update_interval')),
VIEW_EXPIRATION: parseDurationToMs(config.get('views.videos.view_expiration')),
COUNT_VIEW_AFTER: parseDurationToMs(config.get<number>('views.videos.count_view_after')),
TRUST_VIEWER_SESSION_ID: config.get<boolean>('views.videos.trust_viewer_session_id'),
WATCHING_INTERVAL: {
ANONYMOUS: parseDurationToMs(config.get<string>('views.videos.watching_interval.anonymous')),
USERS: parseDurationToMs(config.get<string>('views.videos.watching_interval.users'))
}
}
},
GEO_IP: {
ENABLED: config.get<boolean>('geo_ip.enabled'),
COUNTRY: {
DATABASE_URL: config.get<string>('geo_ip.country.database_url')
},
CITY: {
DATABASE_URL: config.get<string>('geo_ip.city.database_url')
}
},
PLUGINS: {
INDEX: {
ENABLED: config.get<boolean>('plugins.index.enabled'),
CHECK_LATEST_VERSIONS_INTERVAL: parseDurationToMs(config.get<string>('plugins.index.check_latest_versions_interval')),
URL: config.get<string>('plugins.index.url')
}
},
FEDERATION: {
ENABLED: config.get<boolean>('federation.enabled'),
PREVENT_SSRF: config.get<boolean>('federation.prevent_ssrf'),
VIDEOS: {
FEDERATE_UNLISTED: config.get<boolean>('federation.videos.federate_unlisted'),
CLEANUP_REMOTE_INTERACTIONS: config.get<boolean>('federation.videos.cleanup_remote_interactions')
},
SIGN_FEDERATED_FETCHES: config.get<boolean>('federation.sign_federated_fetches')
},
PEERTUBE: {
CHECK_LATEST_VERSION: {
ENABLED: config.get<boolean>('peertube.check_latest_version.enabled'),
URL: config.get<string>('peertube.check_latest_version.url')
}
},
WEBADMIN: {
CONFIGURATION: {
EDITION: {
ALLOWED: config.get<boolean>('webadmin.configuration.edition.allowed')
}
}
},
FEEDS: {
VIDEOS: {
COUNT: config.get<number>('feeds.videos.count')
},
COMMENTS: {
COUNT: config.get<number>('feeds.comments.count')
}
},
REMOTE_RUNNERS: {
STALLED_JOBS: {
LIVE: parseDurationToMs(config.get<string>('remote_runners.stalled_jobs.live')),
VOD: parseDurationToMs(config.get<string>('remote_runners.stalled_jobs.vod'))
}
},
THUMBNAILS: {
GENERATION_FROM_VIDEO: {
FRAMES_TO_ANALYZE: config.get<number>('thumbnails.generation_from_video.frames_to_analyze')
},
SIZES: config.get<{ width: number, height: number }[]>('thumbnails.sizes')
},
STATS: {
REGISTRATION_REQUESTS: {
ENABLED: config.get<boolean>('stats.registration_requests.enabled')
},
ABUSES: {
ENABLED: config.get<boolean>('stats.abuses.enabled')
},
TOTAL_MODERATORS: {
ENABLED: config.get<boolean>('stats.total_moderators.enabled')
},
TOTAL_ADMINS: {
ENABLED: config.get<boolean>('stats.total_admins.enabled')
}
},
WEBRTC: {
STUN_SERVERS: config.get<string[]>('webrtc.stun_servers')
},
ADMIN: {
get EMAIL () { return config.get<string>('admin.email') }
},
CONTACT_FORM: {
get ENABLED () { return config.get<boolean>('contact_form.enabled') }
},
SIGNUP: {
get ENABLED () { return config.get<boolean>('signup.enabled') },
get REQUIRES_APPROVAL () { return config.get<boolean>('signup.requires_approval') },
get LIMIT () { return config.get<number>('signup.limit') },
get REQUIRES_EMAIL_VERIFICATION () { return config.get<boolean>('signup.requires_email_verification') },
get MINIMUM_AGE () { return config.get<number>('signup.minimum_age') },
FILTERS: {
CIDR: {
get WHITELIST () { return config.get<string[]>('signup.filters.cidr.whitelist') },
get BLACKLIST () { return config.get<string[]>('signup.filters.cidr.blacklist') }
}
}
},
USER: {
HISTORY: {
VIDEOS: {
get ENABLED () { return config.get<boolean>('user.history.videos.enabled') }
}
},
get VIDEO_QUOTA () { return parseBytes(config.get<number>('user.video_quota')) },
get VIDEO_QUOTA_DAILY () { return parseBytes(config.get<number>('user.video_quota_daily')) },
get DEFAULT_CHANNEL_NAME () { return config.get<string>('user.default_channel_name') }
},
VIDEO_CHANNELS: {
get MAX_PER_USER () { return config.get<number>('video_channels.max_per_user') }
},
TRANSCODING: {
get ENABLED () { return config.get<boolean>('transcoding.enabled') },
ORIGINAL_FILE: {
get KEEP () { return config.get<boolean>('transcoding.original_file.keep') }
},
get ALLOW_ADDITIONAL_EXTENSIONS () { return config.get<boolean>('transcoding.allow_additional_extensions') },
get ALLOW_AUDIO_FILES () { return config.get<boolean>('transcoding.allow_audio_files') },
get THREADS () { return config.get<number>('transcoding.threads') },
get CONCURRENCY () { return config.get<number>('transcoding.concurrency') },
get PROFILE () { return config.get<string>('transcoding.profile') },
get ALWAYS_TRANSCODE_ORIGINAL_RESOLUTION () { return config.get<boolean>('transcoding.always_transcode_original_resolution') },
RESOLUTIONS: {
get '0p' () { return config.get<boolean>('transcoding.resolutions.0p') },
get '144p' () { return config.get<boolean>('transcoding.resolutions.144p') },
get '240p' () { return config.get<boolean>('transcoding.resolutions.240p') },
get '360p' () { return config.get<boolean>('transcoding.resolutions.360p') },
get '480p' () { return config.get<boolean>('transcoding.resolutions.480p') },
get '720p' () { return config.get<boolean>('transcoding.resolutions.720p') },
get '1080p' () { return config.get<boolean>('transcoding.resolutions.1080p') },
get '1440p' () { return config.get<boolean>('transcoding.resolutions.1440p') },
get '2160p' () { return config.get<boolean>('transcoding.resolutions.2160p') }
},
FPS: {
get MAX () { return config.get<number>('transcoding.fps.max') }
},
HLS: {
get ENABLED () { return config.get<boolean>('transcoding.hls.enabled') },
get SPLIT_AUDIO_AND_VIDEO () { return config.get<boolean>('transcoding.hls.split_audio_and_video') }
},
WEB_VIDEOS: {
get ENABLED () { return config.get<boolean>('transcoding.web_videos.enabled') }
},
REMOTE_RUNNERS: {
get ENABLED () { return config.get<boolean>('transcoding.remote_runners.enabled') }
}
},
LIVE: {
get ENABLED () { return config.get<boolean>('live.enabled') },
get MAX_DURATION () { return parseDurationToMs(config.get<string>('live.max_duration')) },
get MAX_INSTANCE_LIVES () { return config.get<number>('live.max_instance_lives') },
get MAX_USER_LIVES () { return config.get<number>('live.max_user_lives') },
get ALLOW_REPLAY () { return config.get<boolean>('live.allow_replay') },
LATENCY_SETTING: {
get ENABLED () { return config.get<boolean>('live.latency_setting.enabled') }
},
RTMP: {
get ENABLED () { return config.get<boolean>('live.rtmp.enabled') },
get PORT () { return config.get<number>('live.rtmp.port') },
get HOSTNAME () { return config.get<number>('live.rtmp.hostname') },
get PUBLIC_HOSTNAME () { return config.get<number>('live.rtmp.public_hostname') }
},
RTMPS: {
get ENABLED () { return config.get<boolean>('live.rtmps.enabled') },
get PORT () { return config.get<number>('live.rtmps.port') },
get HOSTNAME () { return config.get<number>('live.rtmps.hostname') },
get PUBLIC_HOSTNAME () { return config.get<number>('live.rtmps.public_hostname') },
get KEY_FILE () { return config.get<string>('live.rtmps.key_file') },
get CERT_FILE () { return config.get<string>('live.rtmps.cert_file') }
},
TRANSCODING: {
get ENABLED () { return config.get<boolean>('live.transcoding.enabled') },
get THREADS () { return config.get<number>('live.transcoding.threads') },
get PROFILE () { return config.get<string>('live.transcoding.profile') },
get ALWAYS_TRANSCODE_ORIGINAL_RESOLUTION () { return config.get<boolean>('live.transcoding.always_transcode_original_resolution') },
RESOLUTIONS: {
get '0p' () { return config.get<boolean>('live.transcoding.resolutions.0p') },
get '144p' () { return config.get<boolean>('live.transcoding.resolutions.144p') },
get '240p' () { return config.get<boolean>('live.transcoding.resolutions.240p') },
get '360p' () { return config.get<boolean>('live.transcoding.resolutions.360p') },
get '480p' () { return config.get<boolean>('live.transcoding.resolutions.480p') },
get '720p' () { return config.get<boolean>('live.transcoding.resolutions.720p') },
get '1080p' () { return config.get<boolean>('live.transcoding.resolutions.1080p') },
get '1440p' () { return config.get<boolean>('live.transcoding.resolutions.1440p') },
get '2160p' () { return config.get<boolean>('live.transcoding.resolutions.2160p') }
},
FPS: {
get MAX () { return config.get<number>('live.transcoding.fps.max') }
},
REMOTE_RUNNERS: {
get ENABLED () { return config.get<boolean>('live.transcoding.remote_runners.enabled') }
}
}
},
VIDEO_STUDIO: {
get ENABLED () { return config.get<boolean>('video_studio.enabled') },
REMOTE_RUNNERS: {
get ENABLED () { return config.get<boolean>('video_studio.remote_runners.enabled') }
}
},
VIDEO_FILE: {
UPDATE: {
get ENABLED () { return config.get<boolean>('video_file.update.enabled') }
}
},
VIDEO_TRANSCRIPTION: {
get ENABLED () { return config.get<boolean>('video_transcription.enabled') },
get ENGINE () { return config.get<TranscriptionEngineName>('video_transcription.engine') },
get ENGINE_PATH () { return config.get<string>('video_transcription.engine_path') },
get MODEL () { return config.get<WhisperBuiltinModelName>('video_transcription.model') },
get MODEL_PATH () { return config.get<string>('video_transcription.model_path') },
REMOTE_RUNNERS: {
get ENABLED () { return config.get<boolean>('video_transcription.remote_runners.enabled') }
}
},
IMPORT: {
VIDEOS: {
get CONCURRENCY () { return config.get<number>('import.videos.concurrency') },
get TIMEOUT () { return parseDurationToMs(config.get<string>('import.videos.timeout')) },
HTTP: {
get ENABLED () { return config.get<boolean>('import.videos.http.enabled') },
YOUTUBE_DL_RELEASE: {
get URL () { return config.get<string>('import.videos.http.youtube_dl_release.url') },
get NAME () { return config.get<string>('import.videos.http.youtube_dl_release.name') },
get PYTHON_PATH () { return config.get<string>('import.videos.http.youtube_dl_release.python_path') }
},
get FORCE_IPV4 () { return config.get<boolean>('import.videos.http.force_ipv4') },
get PROXIES () { return config.get<string[]>('import.videos.http.proxies') }
},
TORRENT: {
get ENABLED () { return config.get<boolean>('import.videos.torrent.enabled') }
}
},
VIDEO_CHANNEL_SYNCHRONIZATION: {
get ENABLED () { return config.get<boolean>('import.video_channel_synchronization.enabled') },
get MAX_PER_USER () { return config.get<number>('import.video_channel_synchronization.max_per_user') },
get CHECK_INTERVAL () { return parseDurationToMs(config.get<string>('import.video_channel_synchronization.check_interval')) },
get VIDEOS_LIMIT_PER_SYNCHRONIZATION () {
return config.get<number>('import.video_channel_synchronization.videos_limit_per_synchronization')
},
get FULL_SYNC_VIDEOS_LIMIT () {
return config.get<number>('import.video_channel_synchronization.full_sync_videos_limit')
}
},
USERS: {
get ENABLED () { return config.get<boolean>('import.users.enabled') }
}
},
EXPORT: {
USERS: {
get ENABLED () { return config.get<boolean>('export.users.enabled') },
get MAX_USER_VIDEO_QUOTA () { return parseBytes(config.get<string>('export.users.max_user_video_quota')) },
get EXPORT_EXPIRATION () { return parseDurationToMs(config.get<string>('export.users.export_expiration')) }
}
},
AUTO_BLACKLIST: {
VIDEOS: {
OF_USERS: {
get ENABLED () { return config.get<boolean>('auto_blacklist.videos.of_users.enabled') }
}
}
},
CACHE: {
PREVIEWS: {
get SIZE () { return config.get<number>('cache.previews.size') }
},
VIDEO_CAPTIONS: {
get SIZE () { return config.get<number>('cache.captions.size') }
},
TORRENTS: {
get SIZE () { return config.get<number>('cache.torrents.size') }
},
STORYBOARDS: {
get SIZE () { return config.get<number>('cache.storyboards.size') }
}
},
INSTANCE: {
get NAME () { return config.get<string>('instance.name') },
get SHORT_DESCRIPTION () { return config.get<string>('instance.short_description') },
get DESCRIPTION () { return config.get<string>('instance.description') },
get TERMS () { return config.get<string>('instance.terms') },
get CODE_OF_CONDUCT () { return config.get<string>('instance.code_of_conduct') },
get CREATION_REASON () { return config.get<string>('instance.creation_reason') },
get MODERATION_INFORMATION () { return config.get<string>('instance.moderation_information') },
get ADMINISTRATOR () { return config.get<string>('instance.administrator') },
get MAINTENANCE_LIFETIME () { return config.get<string>('instance.maintenance_lifetime') },
get BUSINESS_MODEL () { return config.get<string>('instance.business_model') },
get HARDWARE_INFORMATION () { return config.get<string>('instance.hardware_information') },
get LANGUAGES () { return config.get<string[]>('instance.languages') || [] },
get CATEGORIES () { return config.get<number[]>('instance.categories') || [] },
get IS_NSFW () { return config.get<boolean>('instance.is_nsfw') },
get DEFAULT_NSFW_POLICY () { return config.get<NSFWPolicyType>('instance.default_nsfw_policy') },
get DEFAULT_CLIENT_ROUTE () { return config.get<string>('instance.default_client_route') },
CUSTOMIZATIONS: {
get JAVASCRIPT () { return config.get<string>('instance.customizations.javascript') },
get CSS () { return config.get<string>('instance.customizations.css') }
},
get ROBOTS () { return config.get<string>('instance.robots') },
get SECURITYTXT () { return config.get<string>('instance.securitytxt') }
},
SERVICES: {
TWITTER: {
get USERNAME () { return config.get<string>('services.twitter.username') }
}
},
FOLLOWERS: {
INSTANCE: {
get ENABLED () { return config.get<boolean>('followers.instance.enabled') },
get MANUAL_APPROVAL () { return config.get<boolean>('followers.instance.manual_approval') }
}
},
FOLLOWINGS: {
INSTANCE: {
AUTO_FOLLOW_BACK: {
get ENABLED () {
return config.get<boolean>('followings.instance.auto_follow_back.enabled')
}
},
AUTO_FOLLOW_INDEX: {
get ENABLED () {
return config.get<boolean>('followings.instance.auto_follow_index.enabled')
},
get INDEX_URL () {
return config.get<string>('followings.instance.auto_follow_index.index_url')
}
}
}
},
THEME: {
get DEFAULT () { return config.get<string>('theme.default') }
},
BROADCAST_MESSAGE: {
get ENABLED () { return config.get<boolean>('broadcast_message.enabled') },
get MESSAGE () { return config.get<string>('broadcast_message.message') },
get LEVEL () { return config.get<BroadcastMessageLevel>('broadcast_message.level') },
get DISMISSABLE () { return config.get<boolean>('broadcast_message.dismissable') }
},
SEARCH: {
REMOTE_URI: {
get USERS () { return config.get<boolean>('search.remote_uri.users') },
get ANONYMOUS () { return config.get<boolean>('search.remote_uri.anonymous') }
},
SEARCH_INDEX: {
get ENABLED () { return config.get<boolean>('search.search_index.enabled') },
get URL () { return config.get<string>('search.search_index.url') },
get DISABLE_LOCAL_SEARCH () { return config.get<boolean>('search.search_index.disable_local_search') },
get IS_DEFAULT_SEARCH () { return config.get<boolean>('search.search_index.is_default_search') }
}
},
STORYBOARDS: {
get ENABLED () { return config.get<boolean>('storyboards.enabled') }
}
}
function registerConfigChangedHandler (fun: Function) {
configChangedHandlers.push(fun)
}
function isEmailEnabled () {
if (CONFIG.SMTP.TRANSPORT === 'sendmail' && CONFIG.SMTP.SENDMAIL) return true
if (CONFIG.SMTP.TRANSPORT === 'smtp' && CONFIG.SMTP.HOSTNAME && CONFIG.SMTP.PORT) return true
return false
}
function getLocalConfigFilePath () {
const localConfigDir = getLocalConfigDir()
let filename = 'local'
if (process.env.NODE_ENV) filename += `-${process.env.NODE_ENV}`
if (process.env.NODE_APP_INSTANCE) filename += `-${process.env.NODE_APP_INSTANCE}`
return join(localConfigDir, filename + '.json')
}
function getConfigModule () {
return config
}
// ---------------------------------------------------------------------------
export {
CONFIG,
getConfigModule,
getLocalConfigFilePath,
registerConfigChangedHandler,
isEmailEnabled
}
// ---------------------------------------------------------------------------
function getLocalConfigDir () {
if (process.env.PEERTUBE_LOCAL_CONFIG) return process.env.PEERTUBE_LOCAL_CONFIG
const configSources = config.util.getConfigSources()
if (configSources.length === 0) throw new Error('Invalid config source.')
return dirname(configSources[0].name)
}
function buildVideosRedundancy (objs: any[]): VideosRedundancyStrategy[] {
if (!objs) return []
if (!Array.isArray(objs)) return objs
return objs.map(obj => {
return Object.assign({}, obj, {
minLifetime: parseDurationToMs(obj.min_lifetime),
size: bytes.parse(obj.size),
minViews: obj.min_views
})
})
}
export function reloadConfig () {
function getConfigDirectories () {
if (process.env.NODE_CONFIG_DIR) {
return process.env.NODE_CONFIG_DIR.split(':')
}
return [ join(root(), 'config') ]
}
function purge () {
const directories = getConfigDirectories()
for (const fileName in require.cache) {
if (directories.some((dir) => fileName.includes(dir)) === false) {
continue
}
delete require.cache[fileName]
}
decacheModule(require, 'config')
}
purge()
config = require('config')
for (const configChangedHandler of configChangedHandlers) {
configChangedHandler()
}
return Promise.resolve()
}